<?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>57921</bug_id>
          
          <creation_ts>2011-04-05 22:55:12 -0700</creation_ts>
          <short_desc>Move the MouseEventWithHitTestResults::targetNode() method on to EventHandler.</short_desc>
          <delta_ts>2011-04-07 02:05:23 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>55552</blocked>
    
    <blocked>57923</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alice Boxhall">aboxhall</reporter>
          <assigned_to name="Alice Boxhall">aboxhall</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>rniwa</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>380134</commentid>
    <comment_count>0</comment_count>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-04-05 22:55:12 -0700</bug_when>
    <thetext>Move the MouseEventWithHitTestResults::targetNode() method on to EventHandler, so that the same logic can be used for a HitTestResult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380140</commentid>
    <comment_count>1</comment_count>
      <attachid>88370</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-04-05 22:58:43 -0700</bug_when>
    <thetext>Created attachment 88370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380161</commentid>
    <comment_count>2</comment_count>
      <attachid>88370</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-05 23:33:32 -0700</bug_when>
    <thetext>Comment on attachment 88370
Patch

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

Ugh... so each port implements a part of EventHandler?   That&apos;s so ugly.  We&apos;d definitely need to do a lot of refactoring here.  r=me provided you revert the change to make subframeForHitTestResult a member of EventHandler or explain why that&apos;s needed.

&gt; Source/WebCore/page/EventHandler.cpp:1099
&gt; -Frame* subframeForHitTestResult(const MouseEventWithHitTestResults&amp; hitTestResult)
&gt; +Frame* EventHandler::subframeForHitTestResult(const MouseEventWithHitTestResults&amp; hitTestResult)

Why does this function need to be a member of EventHandler?

&gt; Source/WebCore/page/EventHandler.h:271
&gt; +    static Frame* subframeForHitTestResult(const MouseEventWithHitTestResults&amp;);

Again, I don&apos;t think this function needs to be a member function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380164</commentid>
    <comment_count>3</comment_count>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-04-05 23:35:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 88370 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88370&amp;action=review
&gt; 
&gt; Ugh... so each port implements a part of EventHandler?   That&apos;s so ugly.  We&apos;d definitely need to do a lot of refactoring here.  r=me provided you revert the change to make subframeForHitTestResult a member of EventHandler or explain why that&apos;s needed.
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:1099
&gt; &gt; -Frame* subframeForHitTestResult(const MouseEventWithHitTestResults&amp; hitTestResult)
&gt; &gt; +Frame* EventHandler::subframeForHitTestResult(const MouseEventWithHitTestResults&amp; hitTestResult)
&gt; 
&gt; Why does this function need to be a member of EventHandler?

So that it can access the private member targetNode() function.

&gt; &gt; Source/WebCore/page/EventHandler.h:271
&gt; &gt; +    static Frame* subframeForHitTestResult(const MouseEventWithHitTestResults&amp;);
&gt; 
&gt; Again, I don&apos;t think this function needs to be a member function.

As above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380174</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-05 23:54:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; &gt; Source/WebCore/page/EventHandler.cpp:1099
&gt; &gt; &gt; -Frame* subframeForHitTestResult(const MouseEventWithHitTestResults&amp; hitTestResult)
&gt; &gt; &gt; +Frame* EventHandler::subframeForHitTestResult(const MouseEventWithHitTestResults&amp; hitTestResult)
&gt; &gt; 
&gt; &gt; Why does this function need to be a member of EventHandler?
&gt; 
&gt; So that it can access the private member targetNode() function.

Okay, that makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380175</commentid>
    <comment_count>5</comment_count>
      <attachid>88378</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-04-05 23:57:46 -0700</bug_when>
    <thetext>Created attachment 88378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380221</commentid>
    <comment_count>6</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-04-06 01:56:22 -0700</bug_when>
    <thetext>Attachment 88378 did not build on gtk:
Build output: http://queues.webkit.org/results/8344110</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380227</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-06 02:23:39 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 88378:

security/block-test.html bug 55741 (authors: beidson@apple.com, mrowe@apple.com, and sam@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380231</commentid>
    <comment_count>8</comment_count>
      <attachid>88378</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-06 02:25:37 -0700</bug_when>
    <thetext>Comment on attachment 88378
Patch

Rejecting attachment 88378 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;la...&quot; exit_code: 1

Last 500 characters of output:
74cbc631664ef88
r83034 = 567fc0865ad481eb5c6b83bd71522332eca82b49
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
	A	LayoutTests/svg/text/tspan-getComputedTextLength.svg
	A	LayoutTests/svg/text/tspan-getComputedTextLength-expected.txt
	M	LayoutTests/ChangeLog
r83035 = 2b0df32696eedac166f4d1a38770490a906d0d6c (refs/remotes/origin/master)
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://queues.webkit.org/results/8346119</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380278</commentid>
    <comment_count>9</comment_count>
      <attachid>88400</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-04-06 05:29:16 -0700</bug_when>
    <thetext>Created attachment 88400
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380281</commentid>
    <comment_count>10</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-04-06 05:38:24 -0700</bug_when>
    <thetext>Attachment 88400 did not build on gtk:
Build output: http://queues.webkit.org/results/8346162</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380282</commentid>
    <comment_count>11</comment_count>
      <attachid>88400</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-06 05:41:32 -0700</bug_when>
    <thetext>Comment on attachment 88400
Patch

r- seems like you aren&apos;t updating event handler for all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381159</commentid>
    <comment_count>12</comment_count>
      <attachid>88585</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-04-07 00:32:17 -0700</bug_when>
    <thetext>Created attachment 88585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381170</commentid>
    <comment_count>13</comment_count>
      <attachid>88585</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-07 00:51:00 -0700</bug_when>
    <thetext>Comment on attachment 88585
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:1304
&gt; +Node* EventHandler::targetNode(const MouseEventWithHitTestResults&amp; event)
&gt; +{
&gt; +    return targetNode(event.hitTestResult());
&gt; +}
&gt; +
&gt; +Node* EventHandler::targetNode(const HitTestResult&amp; hitTestResult)

Oh my second thought, targetNode isn&apos;t really a descriptive name. How about nodePreferringAttached or attachedNodeOrInnerNode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381171</commentid>
    <comment_count>14</comment_count>
      <attachid>88585</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-07 00:57:38 -0700</bug_when>
    <thetext>Comment on attachment 88585
Patch

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1304
&gt;&gt; +Node* EventHandler::targetNode(const HitTestResult&amp; hitTestResult)
&gt; 
&gt; Oh my second thought, targetNode isn&apos;t really a descriptive name. How about nodePreferringAttached or attachedNodeOrInnerNode?

For now, I&apos;d say r+ since I can&apos;t come up with a better name.

&gt; Source/WebCore/page/EventHandler.cpp:1314
&gt; +    Element* element = node-&gt;parentElement();
&gt; +    if (element &amp;&amp; element-&gt;inDocument())
&gt; +        return element;

What if parent element was also detached?  I don&apos;t think this covers all the cases.

&gt; Source/WebCore/page/EventHandler.cpp:1316
&gt; +    return node;

It seems really odd to &quot;prefer&quot; attached node yet we also return unattached innerNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381194</commentid>
    <comment_count>15</comment_count>
      <attachid>88585</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-07 02:05:13 -0700</bug_when>
    <thetext>Comment on attachment 88585
Patch

Clearing flags on attachment: 88585

Committed r83153: &lt;http://trac.webkit.org/changeset/83153&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381195</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-07 02:05:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88370</attachid>
            <date>2011-04-05 22:58:43 -0700</date>
            <delta_ts>2011-04-05 23:57:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57921-20110406155840.patch</filename>
            <type>text/plain</type>
            <size>21985</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwMTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzZGIxNDUzMzYyYzkyZTFj
NThjOGMwNmEzZjk1OGJjOGY4NTYxMDhhLi5hY2U5Y2NjNGRiNDEwMWY1YjlkYzJmODFiYWQ1OGVh
NmIyMjUyYWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDQtMDUgIEFsaWNl
IEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
bm9ib2R5LiAoT09QUyEpCisKKyAgICAgICAgTW92ZSB0aGUgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0czo6dGFyZ2V0Tm9kZSgpIG1ldGhvZCBvbiB0byBFdmVudEhhbmRsZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkyMQorCisgICAgICAg
IE1vdmVzIHRoZSBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjp0YXJnZXROb2RlKCkgbWV0
aG9kIG9uIHRvIEV2ZW50SGFuZGxlciwgc28KKyAgICAgICAgdGhhdCB0aGUgc2FtZSBsb2dpYyBj
YW4gYmUgdXNlZCBmb3IgYSBIaXRUZXN0UmVzdWx0LgorCisgICAgICAgIE5vIHZpc2libGUgY2hh
bmdlcywganVzdCBjbGVhbnVwLCBzbyBubyB0ZXN0cy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2Vz
dFdvcmRGcm9tTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNl
bGVjdENsb3Nlc3RXb3JkT3JMaW5rRnJvbU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEcmFnZ2VkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9ySGl0VGVz
dFJlc3VsdCk6IE1hZGUgcHJpdmF0ZSBzdGF0aWMgbWVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjp0YXJnZXROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxl
TW91c2VEb3VibGVDbGlja0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1
cGRhdGVEcmFnQW5kRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRD
b250ZXh0TWVudUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAg
ICAqIHBhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjpNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzKToKKyAgICAgICAgKiBwYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaDoK
KyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKToK
KwogMjAxMS0wNC0wNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAppbmRleCBkZDI2MWQ4NjdmZjcxZTUyNDZlZjY5NjU1YTIwYTRjZjZmYjczNmRlLi43MWY4
YmIwZTNjMGI0OTYzYjliNjY0YjhmNmJkNWM0NTRmOTIzOTE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCkBAIC0xMjcsOCArMTI3LDYgQEAgY29uc3QgZG91YmxlIGF1dG9zY3Jv
bGxJbnRlcnZhbCA9IDAuMDU7CiAKIGNvbnN0IGRvdWJsZSBmYWtlTW91c2VNb3ZlSW50ZXJ2YWwg
PSAwLjE7CiAKLXN0YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JIaXRUZXN0UmVzdWx0KGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKLQogc3RhdGljIGlubGluZSBib29sIHNjcm9s
bE5vZGUoZmxvYXQgZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBT
Y3JvbGxEaXJlY3Rpb24gcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbERpcmVjdGlvbiBuZWdhdGl2
ZURpcmVjdGlvbiwgTm9kZSogbm9kZSwgTm9kZSoqIHN0b3BOb2RlKQogewogICAgIGlmICghZGVs
dGEpCkBAIC0yNzQsNyArMjcyLDcgQEAgc3RhdGljIHZvaWQgc2V0Tm9uRGlyZWN0aW9uYWxTZWxl
Y3Rpb25JZk5lZWRlZChTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24sIGMKIAogdm9pZCBF
dmVudEhhbmRsZXI6OnNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoY29uc3QgTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgcmVzdWx0KQogewotICAgIE5vZGUqIGlubmVyTm9kZSA9
IHJlc3VsdC50YXJnZXROb2RlKCk7CisgICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShy
ZXN1bHQpOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uOwogCiAgICAgaWYgKGlu
bmVyTm9kZSAmJiBpbm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9tb3VzZURvd25NYXlTdGFydFNl
bGVjdCkgewpAQCAtMzAxLDcgKzI5OSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDbG9z
ZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0CiAgICAg
aWYgKCFyZXN1bHQuaGl0VGVzdFJlc3VsdCgpLmlzTGl2ZUxpbmsoKSkKICAgICAgICAgcmV0dXJu
IHNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQocmVzdWx0KTsKIAotICAgIE5vZGUqIGlu
bmVyTm9kZSA9IHJlc3VsdC50YXJnZXROb2RlKCk7CisgICAgTm9kZSogaW5uZXJOb2RlID0gdGFy
Z2V0Tm9kZShyZXN1bHQpOwogCiAgICAgaWYgKGlubmVyTm9kZSAmJiBpbm5lck5vZGUtPnJlbmRl
cmVyKCkgJiYgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCkgewogICAgICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbjsKQEAgLTM0Myw3ICszNDEsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhI
aXRUZXN0UgogICAgIGlmIChldmVudC5ldmVudCgpLmJ1dHRvbigpICE9IExlZnRCdXR0b24pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBOb2RlKiBpbm5lck5vZGUgPSBldmVudC50
YXJnZXROb2RlKCk7CisgICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShldmVudCk7CiAg
ICAgaWYgKCEoaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJiBtX21vdXNlRG93
bk1heVN0YXJ0U2VsZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNzMsNyArMzcx
LDcgQEAgc3RhdGljIGludCB0ZXh0RGlzdGFuY2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBQb3NpdGlvbiYgZW5kKQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQp
CiB7Ci0gICAgTm9kZSogaW5uZXJOb2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgIE5vZGUq
IGlubmVyTm9kZSA9IHRhcmdldE5vZGUoZXZlbnQpOwogICAgIGlmICghKGlubmVyTm9kZSAmJiBp
bm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDQ5LDcgKzQ0Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYgZXZlCiAKICAgICAvLyBJZiB3ZSBnb3QgdGhlIGV2ZW50IGJhY2ssIHRoYXQgbXVzdCBtZWFu
IGl0IHdhc24ndCBwcmV2ZW50ZWQsCiAgICAgLy8gc28gaXQncyBhbGxvd2VkIHRvIHN0YXJ0IGEg
ZHJhZyBvciBzZWxlY3Rpb24uCi0gICAgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCA9IGNhbk1v
dXNlRG93blN0YXJ0U2VsZWN0KGV2ZW50LnRhcmdldE5vZGUoKSk7CisgICAgbV9tb3VzZURvd25N
YXlTdGFydFNlbGVjdCA9IGNhbk1vdXNlRG93blN0YXJ0U2VsZWN0KHRhcmdldE5vZGUoZXZlbnQp
KTsKICAgICAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIC8vIENhcmVmdWwgdGhhdCB0
aGUgZHJhZyBzdGFydGluZyBsb2dpYyBzdGF5cyBpbiBzeW5jIHdpdGggZXZlbnRNYXlTdGFydERy
YWcoKQpAQCAtNDc5LDcgKzQ3Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVBy
ZXNzRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAgICAgaWYg
KHNpbmdsZUNsaWNrKQogICAgICAgICBmb2N1c0RvY3VtZW50VmlldygpOwogCi0gICAgTm9kZSog
aW5uZXJOb2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgIE5vZGUqIGlubmVyTm9kZSA9IHRh
cmdldE5vZGUoZXZlbnQpOwogCiAgICAgbV9tb3VzZVByZXNzTm9kZSA9IGlubmVyTm9kZTsKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpAQCAtNTM2LDcgKzUzNCw3IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVNb3VzZURyYWdnZWRFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBlCiAgICAgaWYgKCFtX21vdXNlUHJlc3NlZCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgTm9kZSogdGFyZ2V0Tm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKKyAgICBOb2Rl
KiB0YXJnZXROb2RlID0gRXZlbnRIYW5kbGVyOjp0YXJnZXROb2RlKGV2ZW50KTsKICAgICBpZiAo
ZXZlbnQuZXZlbnQoKS5idXR0b24oKSAhPSBMZWZ0QnV0dG9uIHx8ICF0YXJnZXROb2RlIHx8ICF0
YXJnZXROb2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU2OCw2
ICs1NjYsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEcmFnZ2VkRXZlbnQoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZQogICAgICAgICBIaXRUZXN0UmVxdWVz
dCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3Rp
dmUpOwogICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChtX21vdXNlRG93blBvcyk7CiAgICAg
ICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChy
ZXF1ZXN0LCByZXN1bHQpOworCiAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRHJhZyhy
ZXN1bHQuaW5uZXJOb2RlKCksIHJlc3VsdC5sb2NhbFBvaW50KCkpOwogICAgIH0KICAgICB1cGRh
dGVTZWxlY3Rpb25Gb3JNb3VzZURyYWcodGFyZ2V0Tm9kZSwgZXZlbnQubG9jYWxQb2ludCgpKTsK
QEAgLTcyMiw3ICs3MjEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNl
RXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZQogICAgICAgICAgICAg
JiYgbV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKQogICAgICAgICAgICAgJiYgZXZlbnQu
ZXZlbnQoKS5idXR0b24oKSAhPSBSaWdodEJ1dHRvbikgewogICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIG5ld1NlbGVjdGlvbjsKLSAgICAgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUo
KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IHRhcmdldE5vZGUoZXZlbnQpOwogICAgICAgICBib29s
IGNhcmV0QnJvd3NpbmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxl
ZCgpOwogICAgICAgICBpZiAobm9kZSAmJiAoY2FyZXRCcm93c2luZyB8fCBub2RlLT5yZW5kZXJl
cklzRWRpdGFibGUoKSkgJiYgbm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvcyA9IG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZlbnQu
bG9jYWxQb2ludCgpKTsKQEAgLTEwOTcsMTEgKzEwOTYsMTEgQEAgSW50UG9pbnQgRXZlbnRIYW5k
bGVyOjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1fY3VycmVudE1v
dXNlUG9zaXRpb247CiB9CiAKLUZyYW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgaGl0VGVzdFJlc3VsdCkKK0ZyYW1lKiBFdmVu
dEhhbmRsZXI6OnN1YmZyYW1lRm9ySGl0VGVzdFJlc3VsdChjb25zdCBNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJiBoaXRUZXN0UmVzdWx0KQogewogICAgIGlmICghaGl0VGVzdFJlc3VsdC5p
c092ZXJXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEV2ZW50SGFuZGxl
cjo6c3ViZnJhbWVGb3JUYXJnZXROb2RlKGhpdFRlc3RSZXN1bHQudGFyZ2V0Tm9kZSgpKTsKKyAg
ICByZXR1cm4gc3ViZnJhbWVGb3JUYXJnZXROb2RlKHRhcmdldE5vZGUoaGl0VGVzdFJlc3VsdCkp
OwogfQogCiBGcmFtZSogRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUoTm9kZSog
bm9kZSkKQEAgLTExMzMsNyArMTEzMiw3IEBAIHN0YXRpYyBib29sIG5vZGVJc05vdEJlaW5nRWRp
dGVkKE5vZGUqIG5vZGUsIEZyYW1lKiBmcmFtZSkKIAogQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2Vs
ZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50LCBTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgp
OworICAgIE5vZGUqIG5vZGUgPSB0YXJnZXROb2RlKGV2ZW50KTsKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOwogICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogCkBAIC0xMjk4LDYg
KzEyOTcsMjcgQEAgc3RhdGljIEludFBvaW50IGRvY3VtZW50UG9pbnRGb3JXaW5kb3dQb2ludChG
cmFtZSogZnJhbWUsIGNvbnN0IEludFBvaW50JiB3aW5kb3cKICAgICByZXR1cm4gdmlldyA/IHZp
ZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpIDogd2luZG93UG9pbnQ7CiB9CiAKK05v
ZGUqIEV2ZW50SGFuZGxlcjo6dGFyZ2V0Tm9kZShjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBldmVudCkKK3sKKyAgICByZXR1cm4gdGFyZ2V0Tm9kZShldmVudC5oaXRUZXN0UmVz
dWx0KCkpOworfQorCitOb2RlKiBFdmVudEhhbmRsZXI6OnRhcmdldE5vZGUoY29uc3QgSGl0VGVz
dFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKK3sKKyAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3Vs
dC5pbm5lck5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlm
IChub2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBub2RlOworCisgICAgRWxlbWVu
dCogZWxlbWVudCA9IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoZWxlbWVudCAmJiBl
bGVtZW50LT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBlbGVtZW50OworCisgICAgcmV0
dXJuIG5vZGU7CisKK30KKwogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiB7CiAgICAgUmVmUHRyPEZy
YW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CkBAIC0xMzI4LDEyICsxMzQ4LDEy
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogICAgIEludFBvaW50IGRvY3VtZW50UG9pbnQgPSBk
b2N1bWVudFBvaW50Rm9yV2luZG93UG9pbnQobV9mcmFtZSwgbW91c2VFdmVudC5wb3MoKSk7CiAg
ICAgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyBtZXYgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5wcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBkb2N1bWVudFBvaW50LCBtb3VzZUV2ZW50KTsK
IAotICAgIGlmICghbWV2LnRhcmdldE5vZGUoKSkgeworICAgIGlmICghdGFyZ2V0Tm9kZShtZXYp
KSB7CiAgICAgICAgIGludmFsaWRhdGVDbGljaygpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgbV9tb3VzZVByZXNzTm9kZSA9IG1ldi50YXJnZXROb2RlKCk7CisgICAgbV9t
b3VzZVByZXNzTm9kZSA9IHRhcmdldE5vZGUobWV2KTsKIAogICAgIGlmIChJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmhhbmRsZU1vdXNlUHJlc3MobV9mcmFtZS0+cGFnZSgpKSkgewogICAgICAg
ICBpbnZhbGlkYXRlQ2xpY2soKTsKQEAgLTEzNDYsNyArMTM2Niw3IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50KQogICAgICAgICAvLyB0aGUgbV9tb3VzZVByZXNzZWQgZmxhZywgd2hpY2ggbWF5IGhh
cHBlbiBpZiBhbiBBcHBLaXQgd2lkZ2V0IGVudGVyZWQgYSBtb2RhbCBldmVudCBsb29wLgogICAg
ICAgICBtX2NhcHR1cmVzRHJhZ2dpbmcgPSBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHR1
cmVzRHJhZ2dpbmcoKTsKICAgICAgICAgaWYgKG1fbW91c2VQcmVzc2VkICYmIG1fY2FwdHVyZXNE
cmFnZ2luZykgewotICAgICAgICAgICAgbV9jYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUgPSBtZXYu
dGFyZ2V0Tm9kZSgpOworICAgICAgICAgICAgbV9jYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUgPSB0
YXJnZXROb2RlKG1ldik7CiAgICAgICAgICAgICBtX2V2ZW50SGFuZGxlcldpbGxSZXNldENhcHR1
cmluZ01vdXNlRXZlbnRzTm9kZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaW52YWxpZGF0
ZUNsaWNrKCk7CkBAIC0xMzYzLDcgKzEzODMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
TW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKICNl
bmRpZgogCiAgICAgbV9jbGlja0NvdW50ID0gbW91c2VFdmVudC5jbGlja0NvdW50KCk7Ci0gICAg
bV9jbGlja05vZGUgPSBtZXYudGFyZ2V0Tm9kZSgpOworICAgIG1fY2xpY2tOb2RlID0gdGFyZ2V0
Tm9kZShtZXYpOwogCiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkg
ewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKSA/
IG1fY2xpY2tOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpIDogMDsKQEAgLTEzNzks
NyArMTM5OSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiAgICAgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQodHJ1ZSk7CiAKLSAgICBib29sIHN3YWxs
b3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQs
IG1ldi50YXJnZXROb2RlKCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgdHJ1ZSk7
CisgICAgYm9vbCBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50LCB0YXJnZXROb2RlKG1ldiksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91
c2VFdmVudCwgdHJ1ZSk7CiAgICAgbV9jYXB0dXJlc0RyYWdnaW5nID0gIXN3YWxsb3dFdmVudDsK
IAogICAgIC8vIElmIHRoZSBoaXQgdGVzdGluZyBvcmlnaW5hbGx5IGRldGVybWluZWQgdGhlIGV2
ZW50IHdhcyBpbiBhIHNjcm9sbGJhciwgcmVmZXRjaCB0aGUgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cwpAQCAtMTQwNSw3ICsxNDI1LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAgICAg
ICAgIC8vIElmIGEgbW91c2UgZXZlbnQgaGFuZGxlciBjaGFuZ2VzIHRoZSBpbnB1dCBlbGVtZW50
IHR5cGUgdG8gb25lIHRoYXQgaGFzIGEgd2lkZ2V0IGFzc29jaWF0ZWQsCiAgICAgICAgIC8vIHdl
J2QgbGlrZSB0byBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCB0byBwYXNzIHRo
ZSBldmVudCB0byB0aGUgd2lkZ2V0IGFuZCB0aHVzIHRoZQogICAgICAgICAvLyBldmVudCB0YXJn
ZXQgbm9kZSBjYW4ndCBzdGlsbCBiZSB0aGUgc2hhZG93IG5vZGUuCi0gICAgICAgIGlmIChtZXYu
dGFyZ2V0Tm9kZSgpLT5pc1NoYWRvd1Jvb3QoKSAmJiBtZXYudGFyZ2V0Tm9kZSgpLT5zaGFkb3dI
b3N0KCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIGlmICh0YXJnZXROb2RlKG1l
diktPmlzU2hhZG93Um9vdCgpICYmIHRhcmdldE5vZGUobWV2KS0+c2hhZG93SG9zdCgpLT5oYXNU
YWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsKICAgICAg
ICAgICAgIG1ldiA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnByZXBhcmVNb3VzZUV2ZW50KHJlcXVl
c3QsIGRvY3VtZW50UG9pbnQsIG1vdXNlRXZlbnQpOwogICAgICAgICB9CkBAIC0xNDQ2LDkgKzE0
NjYsOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIG1fY2xpY2tDb3VudCA9IG1vdXNlRXZlbnQuY2xpY2tDb3VudCgpOwotICAgIGJvb2wgc3dh
bGxvd01vdXNlVXBFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2V1
cEV2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQs
IGZhbHNlKTsKKyAgICBib29sIHN3YWxsb3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZl
bnQoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCBtX2Ns
aWNrQ291bnQsIG1vdXNlRXZlbnQsIGZhbHNlKTsKIAotICAgIGJvb2wgc3dhbGxvd0NsaWNrRXZl
bnQgPSBtb3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIG1ldi50YXJnZXROb2Rl
KCkgPT0gbV9jbGlja05vZGUgJiYgZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQs
IHRydWUpOworICAgIGJvb2wgc3dhbGxvd0NsaWNrRXZlbnQgPSBtb3VzZUV2ZW50LmJ1dHRvbigp
ICE9IFJpZ2h0QnV0dG9uICYmIHRhcmdldE5vZGUobWV2KSA9PSBtX2NsaWNrTm9kZSAmJiBkaXNw
YXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIHRhcmdldE5vZGUobWV2KSwg
dHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCB0cnVlKTsKIAogICAgIGlmIChtX2xhc3RT
Y3JvbGxiYXJVbmRlck1vdXNlKQogICAgICAgICBzd2FsbG93TW91c2VVcEV2ZW50ID0gbV9sYXN0
U2Nyb2xsYmFyVW5kZXJNb3VzZS0+bW91c2VVcCgpOwpAQCAtMTU3NCw3ICsxNTk0LDcgQEAgYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgbW91c2VFdmVudCwgSGkKIAogICAgIGlmIChuZXdTdWJmcmFtZSkgewogICAgICAgICAv
LyBVcGRhdGUgb3Zlci9vdXQgc3RhdGUgYmVmb3JlIHBhc3NpbmcgdGhlIGV2ZW50IHRvIHRoZSBz
dWJmcmFtZS4KLSAgICAgICAgdXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUobWV2LnRhcmdldE5v
ZGUoKSwgbW91c2VFdmVudCwgdHJ1ZSk7CisgICAgICAgIHVwZGF0ZU1vdXNlRXZlbnRUYXJnZXRO
b2RlKHRhcmdldE5vZGUobWV2KSwgbW91c2VFdmVudCwgdHJ1ZSk7CiAgICAgICAgIAogICAgICAg
ICAvLyBFdmVudCBkaXNwYXRjaCBpbiB1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSBtYXkgaGF2
ZSBjYXVzZWQgdGhlIHN1YmZyYW1lIG9mIHRoZSB0YXJnZXQKICAgICAgICAgLy8gbm9kZSB0byBi
ZSBkZXRhY2hlZCBmcm9tIGl0cyBGcmFtZVZpZXcsIGluIHdoaWNoIGNhc2UgdGhlIGV2ZW50IHNo
b3VsZCBub3QgYmUgcGFzc2VkLgpAQCAtMTU4OSw4ICsxNjA5LDggQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VF
dmVudCwgSGkKICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBwYXJ0aWN1bGFyIHBsdWdp
biBkb2Vzbid0IG1hbmlwdWxhdGUgY3Vyc29yIGF0IGFsbC4gVGh1cywgIGV2ZW4gYSBDU1MgY3Vy
c29yIHNldCBvbiBib2R5IGhhcyBubwogICAgICAgICAgICAgICAgIC8vIGVmZmVjdCBvbiBwbHVn
aW5zICh3aGljaCBtYXRjaGVzIEZpcmVmb3gpLgogICAgICAgICAgICAgICAgIGJvb2wgb3ZlclBs
dWdpbkVsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAobWV2LnRhcmdldE5vZGUo
KSAmJiBtZXYudGFyZ2V0Tm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgSFRNTEVsZW1lbnQqIGVsID0gdG9IVE1MRWxlbWVudChtZXYudGFyZ2V0Tm9kZSgpKTsK
KyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Tm9kZShtZXYpICYmIHRhcmdldE5vZGUobWV2KS0+
aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbCA9
IHRvSFRNTEVsZW1lbnQodGFyZ2V0Tm9kZShtZXYpKTsKICAgICAgICAgICAgICAgICAgICAgb3Zl
clBsdWdpbkVsZW1lbnQgPSBlbC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IGVsLT5oYXNUYWdO
YW1lKG9iamVjdFRhZykgfHwgZWwtPmhhc1RhZ05hbWUoZW1iZWRUYWcpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIW92ZXJQbHVnaW5FbGVtZW50KSB7CkBAIC0xNjA2
LDcgKzE2MjYsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgIGlmIChzd2FsbG93RXZl
bnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHN3YWxsb3dFdmVudCA9IGRpc3Bh
dGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQsIG1ldi50YXJnZXROb2Rl
KCksIGZhbHNlLCAwLCBtb3VzZUV2ZW50LCB0cnVlKTsKKyAgICBzd2FsbG93RXZlbnQgPSBkaXNw
YXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCB0YXJnZXROb2RlKG1l
diksIGZhbHNlLCAwLCBtb3VzZUV2ZW50LCB0cnVlKTsKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KQogICAgIGlmICghc3dhbGxvd0V2ZW50KQogICAgICAgICBzd2FsbG93RXZlbnQgPSBoYW5kbGVN
b3VzZURyYWdnZWRFdmVudChtZXYpOwpAQCAtMTY2MSw5ICsxNjgxLDkgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
bW91c2VFdmVudCkKICAgICBpZiAoc3ViZnJhbWUgJiYgcGFzc01vdXNlUmVsZWFzZUV2ZW50VG9T
dWJmcmFtZShtZXYsIHN1YmZyYW1lKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29s
IHN3YWxsb3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1v
dXNldXBFdmVudCwgbWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2
ZW50LCBmYWxzZSk7CisgICAgYm9vbCBzd2FsbG93TW91c2VVcEV2ZW50ID0gZGlzcGF0Y2hNb3Vz
ZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIHRhcmdldE5vZGUobWV2KSwgdHJ1ZSwg
bV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCBmYWxzZSk7CiAKLSAgICBib29sIHN3YWxsb3dDbGlj
a0V2ZW50ID0gbV9jbGlja0NvdW50ID4gMCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0
QnV0dG9uICYmIG1ldi50YXJnZXROb2RlKCkgPT0gbV9jbGlja05vZGUgJiYgZGlzcGF0Y2hNb3Vz
ZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBt
X2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOworICAgIGJvb2wgc3dhbGxvd0NsaWNrRXZl
bnQgPSBtX2NsaWNrQ291bnQgPiAwICYmIG1vdXNlRXZlbnQuYnV0dG9uKCkgIT0gUmlnaHRCdXR0
b24gJiYgdGFyZ2V0Tm9kZShtZXYpID09IG1fY2xpY2tOb2RlICYmIGRpc3BhdGNoTW91c2VFdmVu
dChldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCBtX2NsaWNr
Q291bnQsIG1vdXNlRXZlbnQsIHRydWUpOwogCiAgICAgaWYgKG1fcmVzaXplTGF5ZXIpIHsKICAg
ICAgICAgbV9yZXNpemVMYXllci0+c2V0SW5SZXNpemVNb2RlKGZhbHNlKTsKQEAgLTE3NDAsNyAr
MTc2MCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQqCiAgICAgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyBtZXYgPSBwcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBldmVudCk7CiAKICAg
ICAvLyBEcmFnIGV2ZW50cyBzaG91bGQgbmV2ZXIgZ28gdG8gdGV4dCBub2RlcyAoZm9sbG93aW5n
IElFLCBhbmQgcHJvcGVyIG1vdXNlb3Zlci9vdXQgZGlzcGF0Y2gpCi0gICAgTm9kZSogbmV3VGFy
Z2V0ID0gbWV2LnRhcmdldE5vZGUoKTsKKyAgICBOb2RlKiBuZXdUYXJnZXQgPSB0YXJnZXROb2Rl
KG1ldik7CiAgICAgaWYgKG5ld1RhcmdldCAmJiBuZXdUYXJnZXQtPmlzVGV4dE5vZGUoKSkKICAg
ICAgICAgbmV3VGFyZ2V0ID0gbmV3VGFyZ2V0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKG5ld1Rh
cmdldCkKQEAgLTIxNTAsMTIgKzIxNzAsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250
ZXh0TWVudUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiAgICAgICAgIC8v
IEZJWE1FOiBJbiB0aGUgZWRpdGFibGUgY2FzZSwgd29yZCBzZWxlY3Rpb24gc29tZXRpbWVzIHNl
bGVjdHMgY29udGVudCB0aGF0IGlzbid0IHVuZGVybmVhdGggdGhlIG1vdXNlLgogICAgICAgICAv
LyBJZiB0aGUgc2VsZWN0aW9uIGlzIG5vbi1lZGl0YWJsZSwgd2UgZG8gd29yZCBzZWxlY3Rpb24g
dG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHRoZSBjb250ZXh0dWFsIG1lbnUgaXRlbXMKICAgICAg
ICAgLy8gYXZhaWxhYmxlIGZvciB0ZXh0IHNlbGVjdGlvbnMuICBCdXQgb25seSBpZiB3ZSdyZSBh
Ym92ZSB0ZXh0LgotICAgICAgICAmJiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVk
aXRhYmxlKCkgfHwgKG1ldi50YXJnZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0
Tm9kZSgpKSkpIHsKKyAgICAgICAgJiYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpIHx8ICh0YXJnZXROb2RlKG1ldikgJiYgdGFyZ2V0Tm9kZShtZXYpLT5pc1RleHRO
b2RlKCkpKSkgewogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0gdHJ1ZTsgLy8g
Y29udGV4dCBtZW51IGV2ZW50cyBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gcGVyZm9ybSBhIHNlbGVj
dGlvbgogICAgICAgICBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KG1ldik7
CiAgICAgfQogCi0gICAgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFt
ZXMoKS5jb250ZXh0bWVudUV2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCAwLCBldmVudCwg
ZmFsc2UpOworICAgIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVz
KCkuY29udGV4dG1lbnVFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCAwLCBldmVudCwgZmFs
c2UpOwogICAgIAogICAgIHJldHVybiBzd2FsbG93RXZlbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAppbmRleCBlNjczODEwOWUxODk2MzJjNjNiMTJlYjIzN2JjZGZlMTY4NzEyNzcy
Li5mMTA3YjY2NjdmYmU2NDBkZmNiYzMzNDE3MjgxZTFjMWY0OTUxYjA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgKQEAgLTI2MSwxMyArMjYxLDE4IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IGNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3Q7
CiAjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKLSAgICAKKwogICAgIGJvb2wgZXZlbnRB
Y3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIGNvbnN0OwogICAgIHZvaWQg
c2VsZWN0Q2xvc2VzdFdvcmRGcm9tTW91c2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzJik7CiAgICAgdm9pZCBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2
ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKIAogICAgIGJvb2wgaGFu
ZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCisg
ICAgc3RhdGljIEZyYW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29uc3QgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYpOworCisgICAgc3RhdGljIE5vZGUqIHRhcmdldE5vZGUoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOworICAgIHN0YXRpYyBOb2RlKiB0YXJn
ZXROb2RlKGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKKwogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVz
c0V2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKICAgICBib29sIGhh
bmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMmKTsKICAgICBib29sIGhhbmRsZU1vdXNlUHJlc3NFdmVudERvdWJsZUNsaWNrKGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwCmluZGV4IDA0MjI2OWNl
MDkxY2JjNDdhNjczNWUyNmIyYTRjNzNjZjU2OTg2MWYuLmIzNzJjZmYwMzBkYTg2ZTVkNzBmYTY5
M2U4MzIwMjA0NTZmNDE3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcApAQCAtMzIsMjEgKzMyLDYgQEAgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0czo6TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyhjb25zdCBQ
bGF0Zm9ybU1vdXNlRXYKICAgICAsIG1faGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0KQogewog
fQotICAgICAgICAKLU5vZGUqIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHM6OnRhcmdldE5v
ZGUoKSBjb25zdAotewotICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb2Rl
KCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobm9kZS0+aW5E
b2N1bWVudCgpKQotICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBub2RlLT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aW5E
b2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZWxlbWVudDsKLQotICAgIHJldHVybiBub2RlOwot
fQogCiBjb25zdCBJbnRQb2ludCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjpsb2NhbFBv
aW50KCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzLmgKaW5kZXggOGMyODU3NDk5ODhhNjU0Yzg4YmRhNzM1YzkzM2NmYTc1
Mzk4YTE3MC4uYjM1MWY5MjE1NjliZGNhOWQwMmU0ZWY3MDUwM2U1MGRiOTM0NDMyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgK
QEAgLTM0LDcgKzM0LDYgQEAgcHVibGljOgogCiAgICAgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBldmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnQ7IH0KICAgICBjb25zdCBIaXRUZXN0UmVz
dWx0JiBoaXRUZXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0UmVzdWx0OyB9Ci0g
ICAgTm9kZSogdGFyZ2V0Tm9kZSgpIGNvbnN0OwogICAgIGNvbnN0IEludFBvaW50IGxvY2FsUG9p
bnQoKSBjb25zdDsKICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhcigpIGNvbnN0OwogICAgIGJvb2wg
aXNPdmVyTGluaygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jaHJv
bWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9t
aXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAppbmRleCAwOWI0ZGZhYzE3MzIyYWM5Yjc1ZDEx
MTJkYWZkMGMyZGRjZjcwZGFlLi5mYWY0ZDQ3OTRjNjRjMTU4ZDY4YjRkNDgxYTBjMzJmMWFmMWNi
NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFu
ZGxlckNocm9taXVtLmNwcApAQCAtNjEsNyArNjEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFz
c01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYg
bQogICAgIEludFBvaW50IHAgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMobWV2
LmV2ZW50KCkucG9zKCkpOwogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+Y29udGFpbnMo
cCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MoCi0gICAgICAgICAgICBt
ZXYudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KG1ldi5sb2NhbFBv
aW50KCkpKTsKKyAgICAgICAgICAgIHRhcmdldE5vZGUobWV2KS0+cmVuZGVyZXIoKS0+cG9zaXRp
b25Gb3JQb2ludChtZXYubG9jYWxQb2ludCgpKSk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
bmV3U2VsZWN0aW9uKHZpc2libGVQb3MpOwogICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwpAQCAtMTAzLDkg
KzEwMyw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgV2lkZ2V0CiBib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYgZXZlbnQpCiB7CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQg
dGhlIGV2ZW50IHRvLgotICAgIGlmICghZXZlbnQudGFyZ2V0Tm9kZSgpIHx8ICFldmVudC50YXJn
ZXROb2RlKCktPnJlbmRlcmVyKCkgfHwgIWV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKS0+
aXNXaWRnZXQoKSkKKyAgICBpZiAoIXRhcmdldE5vZGUoZXZlbnQpIHx8ICF0YXJnZXROb2RlKGV2
ZW50KS0+cmVuZGVyZXIoKSB8fCAhdGFyZ2V0Tm9kZShldmVudCktPnJlbmRlcmVyKCktPmlzV2lk
Z2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2
ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQoZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigp
KS0+d2lkZ2V0KCkpOworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1Jl
bmRlcldpZGdldCh0YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVyZXIoKSktPndpZGdldCgpKTsKIH0K
IAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCog
d2lkZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVy
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4
IDM4MDg4NGIxOGRjMDdiMjM1ODk1ODA0NjRkODkxNDE5ZmRmZDk3ZjYuLmQ5M2NjODJmNGQxNDk1
OGFhMDdiOGYxMmNjZWFjYjQyYjk1MWQyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9F
dmVudEhhbmRsZXJNYWMubW0KQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6
Zm9jdXNEb2N1bWVudFZpZXcoKQogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURv
d25FdmVudFRvV2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50
KQogewogICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4K
LSAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRh
cmdldE5vZGUoKS0+cmVuZGVyZXIoKSA6IDA7CisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSB0
YXJnZXROb2RlKGV2ZW50KSA/IHRhcmdldE5vZGUoZXZlbnQpLT5yZW5kZXJlcigpIDogMDsKICAg
ICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCkBAIC0zODEsNyArMzgxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJm
cmFtZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmUKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICAgICAgY2FzZSBOU0xlZnRNb3Vz
ZURvd246IHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBldmVudC50YXJnZXROb2RlKCk7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gdGFyZ2V0Tm9kZShldmVudCk7CiAgICAgICAgICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88378</attachid>
            <date>2011-04-05 23:57:46 -0700</date>
            <delta_ts>2011-04-06 05:29:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57921-20110406165743.patch</filename>
            <type>text/plain</type>
            <size>22030</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwMTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzZGIxNDUzMzYyYzkyZTFj
NThjOGMwNmEzZjk1OGJjOGY4NTYxMDhhLi5jZGQ5YWRiNTEyNGZmMmY0YmUxNTczNDdiYWY5NGEy
ZjQwOGUwMTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDQtMDUgIEFsaWNl
IEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
bm9ib2R5LiAoT09QUyEpCisKKyAgICAgICAgTW92ZSB0aGUgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0czo6dGFyZ2V0Tm9kZSgpIG1ldGhvZCBvbiB0byBFdmVudEhhbmRsZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkyMQorCisgICAgICAg
IE1vdmVzIHRoZSBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjp0YXJnZXROb2RlKCkgbWV0
aG9kIG9uIHRvIEV2ZW50SGFuZGxlciwgc28KKyAgICAgICAgdGhhdCB0aGUgc2FtZSBsb2dpYyBj
YW4gYmUgdXNlZCBmb3IgYSBIaXRUZXN0UmVzdWx0LgorCisgICAgICAgIE5vIHZpc2libGUgY2hh
bmdlcywganVzdCBjbGVhbnVwLCBzbyBubyB0ZXN0cy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2Vz
dFdvcmRGcm9tTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNl
bGVjdENsb3Nlc3RXb3JkT3JMaW5rRnJvbU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEcmFnZ2VkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9ySGl0VGVz
dFJlc3VsdCk6CisgICAgICAgIE1hZGUgcHJpdmF0ZSBzdGF0aWMgbWVtYmVyLCBzbyB0aGF0IGl0
IGNhbiBhY2Nlc3MgdGFyZ2V0Tm9kZSgpLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YXJnZXRO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3VibGVD
bGlja0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VN
b3ZlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5k
RHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2
ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAqIHBhZ2UvTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjpNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzKToKKyAg
ICAgICAgKiBwYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaDoKKyAgICAgICAgKiBw
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKToKKwogMjAxMS0wNC0w
NSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBk
ZDI2MWQ4NjdmZjcxZTUyNDZlZjY5NjU1YTIwYTRjZjZmYjczNmRlLi43MWY4YmIwZTNjMGI0OTYz
YjliNjY0YjhmNmJkNWM0NTRmOTIzOTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCkBAIC0xMjcsOCArMTI3LDYgQEAgY29uc3QgZG91YmxlIGF1dG9zY3JvbGxJbnRlcnZhbCA9
IDAuMDU7CiAKIGNvbnN0IGRvdWJsZSBmYWtlTW91c2VNb3ZlSW50ZXJ2YWwgPSAwLjE7CiAKLXN0
YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JIaXRUZXN0UmVzdWx0KGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmKTsKLQogc3RhdGljIGlubGluZSBib29sIHNjcm9sbE5vZGUoZmxvYXQg
ZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxEaXJlY3Rp
b24gcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbERpcmVjdGlvbiBuZWdhdGl2ZURpcmVjdGlvbiwg
Tm9kZSogbm9kZSwgTm9kZSoqIHN0b3BOb2RlKQogewogICAgIGlmICghZGVsdGEpCkBAIC0yNzQs
NyArMjcyLDcgQEAgc3RhdGljIHZvaWQgc2V0Tm9uRGlyZWN0aW9uYWxTZWxlY3Rpb25JZk5lZWRl
ZChTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24sIGMKIAogdm9pZCBFdmVudEhhbmRsZXI6
OnNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYgcmVzdWx0KQogewotICAgIE5vZGUqIGlubmVyTm9kZSA9IHJlc3VsdC50YXJn
ZXROb2RlKCk7CisgICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShyZXN1bHQpOwogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uOwogCiAgICAgaWYgKGlubmVyTm9kZSAmJiBp
bm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCkgewpAQCAt
MzAxLDcgKzI5OSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDbG9zZXN0V29yZE9yTGlu
a0Zyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0CiAgICAgaWYgKCFyZXN1bHQu
aGl0VGVzdFJlc3VsdCgpLmlzTGl2ZUxpbmsoKSkKICAgICAgICAgcmV0dXJuIHNlbGVjdENsb3Nl
c3RXb3JkRnJvbU1vdXNlRXZlbnQocmVzdWx0KTsKIAotICAgIE5vZGUqIGlubmVyTm9kZSA9IHJl
c3VsdC50YXJnZXROb2RlKCk7CisgICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShyZXN1
bHQpOwogCiAgICAgaWYgKGlubmVyTm9kZSAmJiBpbm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9t
b3VzZURvd25NYXlTdGFydFNlbGVjdCkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbjsKQEAgLTM0Myw3ICszNDEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UgogICAg
IGlmIChldmVudC5ldmVudCgpLmJ1dHRvbigpICE9IExlZnRCdXR0b24pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBOb2RlKiBpbm5lck5vZGUgPSBldmVudC50YXJnZXROb2RlKCk7
CisgICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShldmVudCk7CiAgICAgaWYgKCEoaW5u
ZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJiBtX21vdXNlRG93bk1heVN0YXJ0U2Vs
ZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNzMsNyArMzcxLDcgQEAgc3RhdGlj
IGludCB0ZXh0RGlzdGFuY2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kKQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xp
Y2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCiB7Ci0gICAgTm9k
ZSogaW5uZXJOb2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgIE5vZGUqIGlubmVyTm9kZSA9
IHRhcmdldE5vZGUoZXZlbnQpOwogICAgIGlmICghKGlubmVyTm9kZSAmJiBpbm5lck5vZGUtPnJl
bmRlcmVyKCkgJiYgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtNDQ5LDcgKzQ0Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3Vz
ZVByZXNzRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAKICAg
ICAvLyBJZiB3ZSBnb3QgdGhlIGV2ZW50IGJhY2ssIHRoYXQgbXVzdCBtZWFuIGl0IHdhc24ndCBw
cmV2ZW50ZWQsCiAgICAgLy8gc28gaXQncyBhbGxvd2VkIHRvIHN0YXJ0IGEgZHJhZyBvciBzZWxl
Y3Rpb24uCi0gICAgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCA9IGNhbk1vdXNlRG93blN0YXJ0
U2VsZWN0KGV2ZW50LnRhcmdldE5vZGUoKSk7CisgICAgbV9tb3VzZURvd25NYXlTdGFydFNlbGVj
dCA9IGNhbk1vdXNlRG93blN0YXJ0U2VsZWN0KHRhcmdldE5vZGUoZXZlbnQpKTsKICAgICAKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIC8vIENhcmVmdWwgdGhhdCB0aGUgZHJhZyBzdGFy
dGluZyBsb2dpYyBzdGF5cyBpbiBzeW5jIHdpdGggZXZlbnRNYXlTdGFydERyYWcoKQpAQCAtNDc5
LDcgKzQ3Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAgICAgaWYgKHNpbmdsZUNsaWNr
KQogICAgICAgICBmb2N1c0RvY3VtZW50VmlldygpOwogCi0gICAgTm9kZSogaW5uZXJOb2RlID0g
ZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgIE5vZGUqIGlubmVyTm9kZSA9IHRhcmdldE5vZGUoZXZl
bnQpOwogCiAgICAgbV9tb3VzZVByZXNzTm9kZSA9IGlubmVyTm9kZTsKICNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQpAQCAtNTM2LDcgKzUzNCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZURyYWdnZWRFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBlCiAg
ICAgaWYgKCFtX21vdXNlUHJlc3NlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTm9k
ZSogdGFyZ2V0Tm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKKyAgICBOb2RlKiB0YXJnZXROb2Rl
ID0gRXZlbnRIYW5kbGVyOjp0YXJnZXROb2RlKGV2ZW50KTsKICAgICBpZiAoZXZlbnQuZXZlbnQo
KS5idXR0b24oKSAhPSBMZWZ0QnV0dG9uIHx8ICF0YXJnZXROb2RlIHx8ICF0YXJnZXROb2RlLT5y
ZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU2OCw2ICs1NjYsNyBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEcmFnZ2VkRXZlbnQoY29uc3QgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYgZQogICAgICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhp
dFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwogICAgICAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdChtX21vdXNlRG93blBvcyk7CiAgICAgICAgIG1fZnJhbWUt
PmRvY3VtZW50KCktPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1
bHQpOworCiAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRHJhZyhyZXN1bHQuaW5uZXJO
b2RlKCksIHJlc3VsdC5sb2NhbFBvaW50KCkpOwogICAgIH0KICAgICB1cGRhdGVTZWxlY3Rpb25G
b3JNb3VzZURyYWcodGFyZ2V0Tm9kZSwgZXZlbnQubG9jYWxQb2ludCgpKTsKQEAgLTcyMiw3ICs3
MjEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZQogICAgICAgICAgICAgJiYgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPmlzUmFuZ2UoKQogICAgICAgICAgICAgJiYgZXZlbnQuZXZlbnQoKS5idXR0
b24oKSAhPSBSaWdodEJ1dHRvbikgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVj
dGlvbjsKLSAgICAgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IHRhcmdldE5vZGUoZXZlbnQpOwogICAgICAgICBib29sIGNhcmV0QnJvd3Np
bmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogICAgICAg
ICBpZiAobm9kZSAmJiAoY2FyZXRCcm93c2luZyB8fCBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUo
KSkgJiYgbm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBv
cyA9IG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZlbnQubG9jYWxQb2ludCgp
KTsKQEAgLTEwOTcsMTEgKzEwOTYsMTEgQEAgSW50UG9pbnQgRXZlbnRIYW5kbGVyOjpjdXJyZW50
TW91c2VQb3NpdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1fY3VycmVudE1vdXNlUG9zaXRpb247
CiB9CiAKLUZyYW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgaGl0VGVzdFJlc3VsdCkKK0ZyYW1lKiBFdmVudEhhbmRsZXI6OnN1
YmZyYW1lRm9ySGl0VGVzdFJlc3VsdChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRz
JiBoaXRUZXN0UmVzdWx0KQogewogICAgIGlmICghaGl0VGVzdFJlc3VsdC5pc092ZXJXaWRnZXQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEV2ZW50SGFuZGxlcjo6c3ViZnJhbWVG
b3JUYXJnZXROb2RlKGhpdFRlc3RSZXN1bHQudGFyZ2V0Tm9kZSgpKTsKKyAgICByZXR1cm4gc3Vi
ZnJhbWVGb3JUYXJnZXROb2RlKHRhcmdldE5vZGUoaGl0VGVzdFJlc3VsdCkpOwogfQogCiBGcmFt
ZSogRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUoTm9kZSogbm9kZSkKQEAgLTEx
MzMsNyArMTEzMiw3IEBAIHN0YXRpYyBib29sIG5vZGVJc05vdEJlaW5nRWRpdGVkKE5vZGUqIG5v
ZGUsIEZyYW1lKiBmcmFtZSkKIAogQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50LCBTY3JvbGxiYXIqIHNjcm9s
bGJhcikKIHsKLSAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgIE5vZGUq
IG5vZGUgPSB0YXJnZXROb2RlKGV2ZW50KTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogCkBAIC0xMjk4LDYgKzEyOTcsMjcgQEAg
c3RhdGljIEludFBvaW50IGRvY3VtZW50UG9pbnRGb3JXaW5kb3dQb2ludChGcmFtZSogZnJhbWUs
IGNvbnN0IEludFBvaW50JiB3aW5kb3cKICAgICByZXR1cm4gdmlldyA/IHZpZXctPndpbmRvd1Rv
Q29udGVudHMod2luZG93UG9pbnQpIDogd2luZG93UG9pbnQ7CiB9CiAKK05vZGUqIEV2ZW50SGFu
ZGxlcjo6dGFyZ2V0Tm9kZShjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVu
dCkKK3sKKyAgICByZXR1cm4gdGFyZ2V0Tm9kZShldmVudC5oaXRUZXN0UmVzdWx0KCkpOworfQor
CitOb2RlKiBFdmVudEhhbmRsZXI6OnRhcmdldE5vZGUoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0
VGVzdFJlc3VsdCkKK3sKKyAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUo
KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChub2RlLT5pbkRv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybiBub2RlOworCisgICAgRWxlbWVudCogZWxlbWVudCA9
IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pbkRv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybiBlbGVtZW50OworCisgICAgcmV0dXJuIG5vZGU7CisK
K30KKwogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiB7CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJv
dGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CkBAIC0xMzI4LDEyICsxMzQ4LDEyIEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBtb3VzZUV2ZW50KQogICAgIEludFBvaW50IGRvY3VtZW50UG9pbnQgPSBkb2N1bWVudFBvaW50
Rm9yV2luZG93UG9pbnQobV9mcmFtZSwgbW91c2VFdmVudC5wb3MoKSk7CiAgICAgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyBtZXYgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5wcmVwYXJlTW91
c2VFdmVudChyZXF1ZXN0LCBkb2N1bWVudFBvaW50LCBtb3VzZUV2ZW50KTsKIAotICAgIGlmICgh
bWV2LnRhcmdldE5vZGUoKSkgeworICAgIGlmICghdGFyZ2V0Tm9kZShtZXYpKSB7CiAgICAgICAg
IGludmFsaWRhdGVDbGljaygpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
bV9tb3VzZVByZXNzTm9kZSA9IG1ldi50YXJnZXROb2RlKCk7CisgICAgbV9tb3VzZVByZXNzTm9k
ZSA9IHRhcmdldE5vZGUobWV2KTsKIAogICAgIGlmIChJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmhhbmRsZU1vdXNlUHJlc3MobV9mcmFtZS0+cGFnZSgpKSkgewogICAgICAgICBpbnZhbGlkYXRl
Q2xpY2soKTsKQEAgLTEzNDYsNyArMTM2Niw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogICAg
ICAgICAvLyB0aGUgbV9tb3VzZVByZXNzZWQgZmxhZywgd2hpY2ggbWF5IGhhcHBlbiBpZiBhbiBB
cHBLaXQgd2lkZ2V0IGVudGVyZWQgYSBtb2RhbCBldmVudCBsb29wLgogICAgICAgICBtX2NhcHR1
cmVzRHJhZ2dpbmcgPSBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHR1cmVzRHJhZ2dpbmco
KTsKICAgICAgICAgaWYgKG1fbW91c2VQcmVzc2VkICYmIG1fY2FwdHVyZXNEcmFnZ2luZykgewot
ICAgICAgICAgICAgbV9jYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUgPSBtZXYudGFyZ2V0Tm9kZSgp
OworICAgICAgICAgICAgbV9jYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUgPSB0YXJnZXROb2RlKG1l
dik7CiAgICAgICAgICAgICBtX2V2ZW50SGFuZGxlcldpbGxSZXNldENhcHR1cmluZ01vdXNlRXZl
bnRzTm9kZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CkBA
IC0xMzYzLDcgKzEzODMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKICNlbmRpZgogCiAgICAg
bV9jbGlja0NvdW50ID0gbW91c2VFdmVudC5jbGlja0NvdW50KCk7Ci0gICAgbV9jbGlja05vZGUg
PSBtZXYudGFyZ2V0Tm9kZSgpOworICAgIG1fY2xpY2tOb2RlID0gdGFyZ2V0Tm9kZShtZXYpOwog
CiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKSA/IG1fY2xpY2tOb2Rl
LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpIDogMDsKQEAgLTEzNzksNyArMTM5OSw3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldENh
cmV0QmxpbmtpbmdTdXNwZW5kZWQodHJ1ZSk7CiAKLSAgICBib29sIHN3YWxsb3dFdmVudCA9IGRp
c3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIG1ldi50YXJnZXRO
b2RlKCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgdHJ1ZSk7CisgICAgYm9vbCBz
d2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2
ZW50LCB0YXJnZXROb2RlKG1ldiksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgdHJ1
ZSk7CiAgICAgbV9jYXB0dXJlc0RyYWdnaW5nID0gIXN3YWxsb3dFdmVudDsKIAogICAgIC8vIElm
IHRoZSBoaXQgdGVzdGluZyBvcmlnaW5hbGx5IGRldGVybWluZWQgdGhlIGV2ZW50IHdhcyBpbiBh
IHNjcm9sbGJhciwgcmVmZXRjaCB0aGUgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cwpAQCAt
MTQwNSw3ICsxNDI1LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAgICAgICAgIC8vIElmIGEg
bW91c2UgZXZlbnQgaGFuZGxlciBjaGFuZ2VzIHRoZSBpbnB1dCBlbGVtZW50IHR5cGUgdG8gb25l
IHRoYXQgaGFzIGEgd2lkZ2V0IGFzc29jaWF0ZWQsCiAgICAgICAgIC8vIHdlJ2QgbGlrZSB0byBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCB0byBwYXNzIHRoZSBldmVudCB0byB0
aGUgd2lkZ2V0IGFuZCB0aHVzIHRoZQogICAgICAgICAvLyBldmVudCB0YXJnZXQgbm9kZSBjYW4n
dCBzdGlsbCBiZSB0aGUgc2hhZG93IG5vZGUuCi0gICAgICAgIGlmIChtZXYudGFyZ2V0Tm9kZSgp
LT5pc1NoYWRvd1Jvb3QoKSAmJiBtZXYudGFyZ2V0Tm9kZSgpLT5zaGFkb3dIb3N0KCktPmhhc1Rh
Z05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIGlmICh0YXJnZXROb2RlKG1ldiktPmlzU2hhZG93
Um9vdCgpICYmIHRhcmdldE5vZGUobWV2KS0+c2hhZG93SG9zdCgpLT5oYXNUYWdOYW1lKGlucHV0
VGFnKSkgewogICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVz
dDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsKICAgICAgICAgICAgIG1ldiA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPnByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIGRvY3VtZW50
UG9pbnQsIG1vdXNlRXZlbnQpOwogICAgICAgICB9CkBAIC0xNDQ2LDkgKzE0NjYsOSBAQCBib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgbW91c2VFdgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIG1fY2xpY2tD
b3VudCA9IG1vdXNlRXZlbnQuY2xpY2tDb3VudCgpOwotICAgIGJvb2wgc3dhbGxvd01vdXNlVXBF
dmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBtZXYu
dGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIGZhbHNlKTsKKyAg
ICBib29sIHN3YWxsb3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1v
dXNlRXZlbnQsIGZhbHNlKTsKIAotICAgIGJvb2wgc3dhbGxvd0NsaWNrRXZlbnQgPSBtb3VzZUV2
ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIG1ldi50YXJnZXROb2RlKCkgPT0gbV9jbGlj
a05vZGUgJiYgZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYu
dGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOworICAg
IGJvb2wgc3dhbGxvd0NsaWNrRXZlbnQgPSBtb3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0
dG9uICYmIHRhcmdldE5vZGUobWV2KSA9PSBtX2NsaWNrTm9kZSAmJiBkaXNwYXRjaE1vdXNlRXZl
bnQoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIHRhcmdldE5vZGUobWV2KSwgdHJ1ZSwgbV9jbGlj
a0NvdW50LCBtb3VzZUV2ZW50LCB0cnVlKTsKIAogICAgIGlmIChtX2xhc3RTY3JvbGxiYXJVbmRl
ck1vdXNlKQogICAgICAgICBzd2FsbG93TW91c2VVcEV2ZW50ID0gbV9sYXN0U2Nyb2xsYmFyVW5k
ZXJNb3VzZS0+bW91c2VVcCgpOwpAQCAtMTU3NCw3ICsxNTk0LDcgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VF
dmVudCwgSGkKIAogICAgIGlmIChuZXdTdWJmcmFtZSkgewogICAgICAgICAvLyBVcGRhdGUgb3Zl
ci9vdXQgc3RhdGUgYmVmb3JlIHBhc3NpbmcgdGhlIGV2ZW50IHRvIHRoZSBzdWJmcmFtZS4KLSAg
ICAgICAgdXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUobWV2LnRhcmdldE5vZGUoKSwgbW91c2VF
dmVudCwgdHJ1ZSk7CisgICAgICAgIHVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKHRhcmdldE5v
ZGUobWV2KSwgbW91c2VFdmVudCwgdHJ1ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBFdmVudCBk
aXNwYXRjaCBpbiB1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSBtYXkgaGF2ZSBjYXVzZWQgdGhl
IHN1YmZyYW1lIG9mIHRoZSB0YXJnZXQKICAgICAgICAgLy8gbm9kZSB0byBiZSBkZXRhY2hlZCBm
cm9tIGl0cyBGcmFtZVZpZXcsIGluIHdoaWNoIGNhc2UgdGhlIGV2ZW50IHNob3VsZCBub3QgYmUg
cGFzc2VkLgpAQCAtMTU4OSw4ICsxNjA5LDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKICAg
ICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBwYXJ0aWN1bGFyIHBsdWdpbiBkb2Vzbid0IG1h
bmlwdWxhdGUgY3Vyc29yIGF0IGFsbC4gVGh1cywgIGV2ZW4gYSBDU1MgY3Vyc29yIHNldCBvbiBi
b2R5IGhhcyBubwogICAgICAgICAgICAgICAgIC8vIGVmZmVjdCBvbiBwbHVnaW5zICh3aGljaCBt
YXRjaGVzIEZpcmVmb3gpLgogICAgICAgICAgICAgICAgIGJvb2wgb3ZlclBsdWdpbkVsZW1lbnQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAobWV2LnRhcmdldE5vZGUoKSAmJiBtZXYudGFy
Z2V0Tm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSFRNTEVs
ZW1lbnQqIGVsID0gdG9IVE1MRWxlbWVudChtZXYudGFyZ2V0Tm9kZSgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAodGFyZ2V0Tm9kZShtZXYpICYmIHRhcmdldE5vZGUobWV2KS0+aXNIVE1MRWxlbWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbCA9IHRvSFRNTEVsZW1l
bnQodGFyZ2V0Tm9kZShtZXYpKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlclBsdWdpbkVsZW1l
bnQgPSBlbC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IGVsLT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykgfHwgZWwtPmhhc1RhZ05hbWUoZW1iZWRUYWcpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAoIW92ZXJQbHVnaW5FbGVtZW50KSB7CkBAIC0xNjA2LDcgKzE2MjYsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgIGlmIChzd2FsbG93RXZlbnQpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAotICAgIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVu
dChldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIGZhbHNlLCAw
LCBtb3VzZUV2ZW50LCB0cnVlKTsKKyAgICBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZl
bnQoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCB0YXJnZXROb2RlKG1ldiksIGZhbHNlLCAw
LCBtb3VzZUV2ZW50LCB0cnVlKTsKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIGlmICgh
c3dhbGxvd0V2ZW50KQogICAgICAgICBzd2FsbG93RXZlbnQgPSBoYW5kbGVNb3VzZURyYWdnZWRF
dmVudChtZXYpOwpAQCAtMTY2MSw5ICsxNjgxLDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkK
ICAgICBpZiAoc3ViZnJhbWUgJiYgcGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShtZXYs
IHN1YmZyYW1lKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIHN3YWxsb3dNb3Vz
ZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCwg
bWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCBmYWxzZSk7
CisgICAgYm9vbCBzd2FsbG93TW91c2VVcEV2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50
TmFtZXMoKS5tb3VzZXVwRXZlbnQsIHRhcmdldE5vZGUobWV2KSwgdHJ1ZSwgbV9jbGlja0NvdW50
LCBtb3VzZUV2ZW50LCBmYWxzZSk7CiAKLSAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0gbV9j
bGlja0NvdW50ID4gMCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIG1l
di50YXJnZXROb2RlKCkgPT0gbV9jbGlja05vZGUgJiYgZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQs
IG1vdXNlRXZlbnQsIHRydWUpOworICAgIGJvb2wgc3dhbGxvd0NsaWNrRXZlbnQgPSBtX2NsaWNr
Q291bnQgPiAwICYmIG1vdXNlRXZlbnQuYnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgdGFyZ2V0
Tm9kZShtZXYpID09IG1fY2xpY2tOb2RlICYmIGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVz
KCkuY2xpY2tFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNl
RXZlbnQsIHRydWUpOwogCiAgICAgaWYgKG1fcmVzaXplTGF5ZXIpIHsKICAgICAgICAgbV9yZXNp
emVMYXllci0+c2V0SW5SZXNpemVNb2RlKGZhbHNlKTsKQEAgLTE3NDAsNyArMTc2MCw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIGV2ZW50LCBDbGlwYm9hcmQqCiAgICAgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyBt
ZXYgPSBwcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBldmVudCk7CiAKICAgICAvLyBEcmFnIGV2
ZW50cyBzaG91bGQgbmV2ZXIgZ28gdG8gdGV4dCBub2RlcyAoZm9sbG93aW5nIElFLCBhbmQgcHJv
cGVyIG1vdXNlb3Zlci9vdXQgZGlzcGF0Y2gpCi0gICAgTm9kZSogbmV3VGFyZ2V0ID0gbWV2LnRh
cmdldE5vZGUoKTsKKyAgICBOb2RlKiBuZXdUYXJnZXQgPSB0YXJnZXROb2RlKG1ldik7CiAgICAg
aWYgKG5ld1RhcmdldCAmJiBuZXdUYXJnZXQtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgbmV3VGFy
Z2V0ID0gbmV3VGFyZ2V0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKG5ld1RhcmdldCkKQEAgLTIx
NTAsMTIgKzIxNzAsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiAgICAgICAgIC8vIEZJWE1FOiBJbiB0
aGUgZWRpdGFibGUgY2FzZSwgd29yZCBzZWxlY3Rpb24gc29tZXRpbWVzIHNlbGVjdHMgY29udGVu
dCB0aGF0IGlzbid0IHVuZGVybmVhdGggdGhlIG1vdXNlLgogICAgICAgICAvLyBJZiB0aGUgc2Vs
ZWN0aW9uIGlzIG5vbi1lZGl0YWJsZSwgd2UgZG8gd29yZCBzZWxlY3Rpb24gdG8gbWFrZSBpdCBl
YXNpZXIgdG8gdXNlIHRoZSBjb250ZXh0dWFsIG1lbnUgaXRlbXMKICAgICAgICAgLy8gYXZhaWxh
YmxlIGZvciB0ZXh0IHNlbGVjdGlvbnMuICBCdXQgb25seSBpZiB3ZSdyZSBhYm92ZSB0ZXh0Lgot
ICAgICAgICAmJiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCkgfHwg
KG1ldi50YXJnZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSkpIHsK
KyAgICAgICAgJiYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8
ICh0YXJnZXROb2RlKG1ldikgJiYgdGFyZ2V0Tm9kZShtZXYpLT5pc1RleHROb2RlKCkpKSkgewog
ICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0gdHJ1ZTsgLy8gY29udGV4dCBtZW51
IGV2ZW50cyBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gcGVyZm9ybSBhIHNlbGVjdGlvbgogICAgICAg
ICBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KG1ldik7CiAgICAgfQogCi0g
ICAgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jb250ZXh0
bWVudUV2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCAwLCBldmVudCwgZmFsc2UpOworICAg
IHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkuY29udGV4dG1l
bnVFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCAwLCBldmVudCwgZmFsc2UpOwogICAgIAog
ICAgIHJldHVybiBzd2FsbG93RXZlbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApp
bmRleCBlNjczODEwOWUxODk2MzJjNjNiMTJlYjIzN2JjZGZlMTY4NzEyNzcyLi5mMTA3YjY2Njdm
YmU2NDBkZmNiYzMzNDE3MjgxZTFjMWY0OTUxYjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKQEAgLTI2MSwxMyArMjYxLDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgUGFzc1JlZlB0
cjxDbGlwYm9hcmQ+IGNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3Q7CiAjZW5kaWYgLy8g
RU5BQkxFKERSQUdfU1VQUE9SVCkKLSAgICAKKwogICAgIGJvb2wgZXZlbnRBY3RpdmF0ZWRWaWV3
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIGNvbnN0OwogICAgIHZvaWQgc2VsZWN0Q2xvc2Vz
dFdvcmRGcm9tTW91c2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7
CiAgICAgdm9pZCBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKIAogICAgIGJvb2wgaGFuZGxlTW91c2VEb3Vi
bGVDbGlja0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCisgICAgc3RhdGljIEZy
YW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYpOworCisgICAgc3RhdGljIE5vZGUqIHRhcmdldE5vZGUoY29uc3QgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYpOworICAgIHN0YXRpYyBOb2RlKiB0YXJnZXROb2RlKGNvbnN0
IEhpdFRlc3RSZXN1bHQmKTsKKwogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0
IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKICAgICBib29sIGhhbmRsZU1vdXNlUHJl
c3NFdmVudFNpbmdsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsK
ICAgICBib29sIGhhbmRsZU1vdXNlUHJlc3NFdmVudERvdWJsZUNsaWNrKGNvbnN0IE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwCmluZGV4IDA0MjI2OWNlMDkxY2JjNDdhNjcz
NWUyNmIyYTRjNzNjZjU2OTg2MWYuLmIzNzJjZmYwMzBkYTg2ZTVkNzBmYTY5M2U4MzIwMjA0NTZm
NDE3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzLmNwcApAQCAtMzIsMjEgKzMyLDYgQEAgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0czo6TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyhjb25zdCBQbGF0Zm9ybU1vdXNl
RXYKICAgICAsIG1faGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0KQogewogfQotICAgICAgICAK
LU5vZGUqIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHM6OnRhcmdldE5vZGUoKSBjb25zdAot
ewotICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBub2RlLT5wYXJl
bnRFbGVtZW50KCk7Ci0gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aW5Eb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gZWxlbWVudDsKLQotICAgIHJldHVybiBub2RlOwotfQogCiBjb25zdCBJ
bnRQb2ludCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjpsb2NhbFBvaW50KCkgY29uc3QK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzLmgKaW5kZXggOGMyODU3NDk5ODhhNjU0Yzg4YmRhNzM1YzkzM2NmYTc1Mzk4YTE3MC4uYjM1
MWY5MjE1NjliZGNhOWQwMmU0ZWY3MDUwM2U1MGRiOTM0NDMyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgKQEAgLTM0LDcgKzM0
LDYgQEAgcHVibGljOgogCiAgICAgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXZlbnQ7IH0KICAgICBjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0
UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0UmVzdWx0OyB9Ci0gICAgTm9kZSogdGFy
Z2V0Tm9kZSgpIGNvbnN0OwogICAgIGNvbnN0IEludFBvaW50IGxvY2FsUG9pbnQoKSBjb25zdDsK
ICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhcigpIGNvbnN0OwogICAgIGJvb2wgaXNPdmVyTGluaygp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhh
bmRsZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFu
ZGxlckNocm9taXVtLmNwcAppbmRleCAwOWI0ZGZhYzE3MzIyYWM5Yjc1ZDExMTJkYWZkMGMyZGRj
ZjcwZGFlLi5mYWY0ZDQ3OTRjNjRjMTU4ZDY4YjRkNDgxYTBjMzJmMWFmMWNiNDYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVt
LmNwcApAQCAtNjEsNyArNjEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NF
dmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbQogICAgIEludFBv
aW50IHAgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMobWV2LmV2ZW50KCkucG9z
KCkpOwogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+Y29udGFpbnMocCkpIHsKICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MoCi0gICAgICAgICAgICBtZXYudGFyZ2V0Tm9k
ZSgpLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KG1ldi5sb2NhbFBvaW50KCkpKTsKKyAg
ICAgICAgICAgIHRhcmdldE5vZGUobWV2KS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludCht
ZXYubG9jYWxQb2ludCgpKSk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KHZpc2libGVQb3MpOwogICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENo
YW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwpAQCAtMTAzLDkgKzEwMyw5IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVu
dCYgd2hlZWxFdmVudCwgV2lkZ2V0CiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNl
RG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZl
bnQpCiB7CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRv
LgotICAgIGlmICghZXZlbnQudGFyZ2V0Tm9kZSgpIHx8ICFldmVudC50YXJnZXROb2RlKCktPnJl
bmRlcmVyKCkgfHwgIWV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkK
KyAgICBpZiAoIXRhcmdldE5vZGUoZXZlbnQpIHx8ICF0YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVy
ZXIoKSB8fCAhdGFyZ2V0Tm9kZShldmVudCktPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQo
dG9SZW5kZXJXaWRnZXQoZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpKS0+d2lkZ2V0KCkp
OworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldCh0
YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVyZXIoKSktPndpZGdldCgpKTsKIH0KIAogYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IDM4MDg4NGIxOGRj
MDdiMjM1ODk1ODA0NjRkODkxNDE5ZmRmZDk3ZjYuLmQ5M2NjODJmNGQxNDk1OGFhMDdiOGYxMmNj
ZWFjYjQyYjk1MWQyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50
SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0KQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVu
dFZpZXcoKQogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lk
Z2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQogewogICAgIC8v
IEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAgICBSZW5kZXJP
YmplY3QqIHRhcmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+
cmVuZGVyZXIoKSA6IDA7CisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSB0YXJnZXROb2RlKGV2
ZW50KSA/IHRhcmdldE5vZGUoZXZlbnQpLT5yZW5kZXJlcigpIDogMDsKICAgICBpZiAoIXRhcmdl
dCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBA
IC0zODEsNyArMzgxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9T
dWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmUKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246IHsKLSAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBldmVudC50YXJnZXROb2RlKCk7CisgICAgICAgICAgICBO
b2RlKiBub2RlID0gdGFyZ2V0Tm9kZShldmVudCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88400</attachid>
            <date>2011-04-06 05:29:16 -0700</date>
            <delta_ts>2011-04-07 00:32:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57921-20110406222913.patch</filename>
            <type>text/plain</type>
            <size>22030</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwMTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzZGIxNDUzMzYyYzkyZTFj
NThjOGMwNmEzZjk1OGJjOGY4NTYxMDhhLi4wY2ViMjk2MDVhNDEyZTJmZGE3NzBkODIxZTVmYzRk
ZDQxZDM5YTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDQtMDUgIEFsaWNl
IEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZLiAoT09QUyEpCisKKyAgICAgICAgTW92ZSB0aGUgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0czo6dGFyZ2V0Tm9kZSgpIG1ldGhvZCBvbiB0byBFdmVudEhhbmRsZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkyMQorCisgICAgICAg
IE1vdmVzIHRoZSBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjp0YXJnZXROb2RlKCkgbWV0
aG9kIG9uIHRvIEV2ZW50SGFuZGxlciwgc28KKyAgICAgICAgdGhhdCB0aGUgc2FtZSBsb2dpYyBj
YW4gYmUgdXNlZCBmb3IgYSBIaXRUZXN0UmVzdWx0LgorCisgICAgICAgIE5vIHZpc2libGUgY2hh
bmdlcywganVzdCBjbGVhbnVwLCBzbyBubyB0ZXN0cy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2Vz
dFdvcmRGcm9tTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNl
bGVjdENsb3Nlc3RXb3JkT3JMaW5rRnJvbU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEcmFnZ2VkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9ySGl0VGVz
dFJlc3VsdCk6CisgICAgICAgIE1hZGUgcHJpdmF0ZSBzdGF0aWMgbWVtYmVyLCBzbyB0aGF0IGl0
IGNhbiBhY2Nlc3MgdGFyZ2V0Tm9kZSgpLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YXJnZXRO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3VibGVD
bGlja0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VN
b3ZlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5k
RHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2
ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAqIHBhZ2UvTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjpNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzKToKKyAg
ICAgICAgKiBwYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaDoKKyAgICAgICAgKiBw
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKToKKwogMjAxMS0wNC0w
NSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBk
ZDI2MWQ4NjdmZjcxZTUyNDZlZjY5NjU1YTIwYTRjZjZmYjczNmRlLi43MWY4YmIwZTNjMGI0OTYz
YjliNjY0YjhmNmJkNWM0NTRmOTIzOTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCkBAIC0xMjcsOCArMTI3LDYgQEAgY29uc3QgZG91YmxlIGF1dG9zY3JvbGxJbnRlcnZhbCA9
IDAuMDU7CiAKIGNvbnN0IGRvdWJsZSBmYWtlTW91c2VNb3ZlSW50ZXJ2YWwgPSAwLjE7CiAKLXN0
YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JIaXRUZXN0UmVzdWx0KGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmKTsKLQogc3RhdGljIGlubGluZSBib29sIHNjcm9sbE5vZGUoZmxvYXQg
ZGVsdGEsIFdoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBTY3JvbGxEaXJlY3Rp
b24gcG9zaXRpdmVEaXJlY3Rpb24sIFNjcm9sbERpcmVjdGlvbiBuZWdhdGl2ZURpcmVjdGlvbiwg
Tm9kZSogbm9kZSwgTm9kZSoqIHN0b3BOb2RlKQogewogICAgIGlmICghZGVsdGEpCkBAIC0yNzQs
NyArMjcyLDcgQEAgc3RhdGljIHZvaWQgc2V0Tm9uRGlyZWN0aW9uYWxTZWxlY3Rpb25JZk5lZWRl
ZChTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24sIGMKIAogdm9pZCBFdmVudEhhbmRsZXI6
OnNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYgcmVzdWx0KQogewotICAgIE5vZGUqIGlubmVyTm9kZSA9IHJlc3VsdC50YXJn
ZXROb2RlKCk7CisgICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShyZXN1bHQpOwogICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uOwogCiAgICAgaWYgKGlubmVyTm9kZSAmJiBp
bm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCkgewpAQCAt
MzAxLDcgKzI5OSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDbG9zZXN0V29yZE9yTGlu
a0Zyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0CiAgICAgaWYgKCFyZXN1bHQu
aGl0VGVzdFJlc3VsdCgpLmlzTGl2ZUxpbmsoKSkKICAgICAgICAgcmV0dXJuIHNlbGVjdENsb3Nl
c3RXb3JkRnJvbU1vdXNlRXZlbnQocmVzdWx0KTsKIAotICAgIE5vZGUqIGlubmVyTm9kZSA9IHJl
c3VsdC50YXJnZXROb2RlKCk7CisgICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShyZXN1
bHQpOwogCiAgICAgaWYgKGlubmVyTm9kZSAmJiBpbm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9t
b3VzZURvd25NYXlTdGFydFNlbGVjdCkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbjsKQEAgLTM0Myw3ICszNDEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UgogICAg
IGlmIChldmVudC5ldmVudCgpLmJ1dHRvbigpICE9IExlZnRCdXR0b24pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBOb2RlKiBpbm5lck5vZGUgPSBldmVudC50YXJnZXROb2RlKCk7
CisgICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShldmVudCk7CiAgICAgaWYgKCEoaW5u
ZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJiBtX21vdXNlRG93bk1heVN0YXJ0U2Vs
ZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNzMsNyArMzcxLDcgQEAgc3RhdGlj
IGludCB0ZXh0RGlzdGFuY2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kKQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xp
Y2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCiB7Ci0gICAgTm9k
ZSogaW5uZXJOb2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgIE5vZGUqIGlubmVyTm9kZSA9
IHRhcmdldE5vZGUoZXZlbnQpOwogICAgIGlmICghKGlubmVyTm9kZSAmJiBpbm5lck5vZGUtPnJl
bmRlcmVyKCkgJiYgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtNDQ5LDcgKzQ0Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3Vz
ZVByZXNzRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAKICAg
ICAvLyBJZiB3ZSBnb3QgdGhlIGV2ZW50IGJhY2ssIHRoYXQgbXVzdCBtZWFuIGl0IHdhc24ndCBw
cmV2ZW50ZWQsCiAgICAgLy8gc28gaXQncyBhbGxvd2VkIHRvIHN0YXJ0IGEgZHJhZyBvciBzZWxl
Y3Rpb24uCi0gICAgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCA9IGNhbk1vdXNlRG93blN0YXJ0
U2VsZWN0KGV2ZW50LnRhcmdldE5vZGUoKSk7CisgICAgbV9tb3VzZURvd25NYXlTdGFydFNlbGVj
dCA9IGNhbk1vdXNlRG93blN0YXJ0U2VsZWN0KHRhcmdldE5vZGUoZXZlbnQpKTsKICAgICAKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIC8vIENhcmVmdWwgdGhhdCB0aGUgZHJhZyBzdGFy
dGluZyBsb2dpYyBzdGF5cyBpbiBzeW5jIHdpdGggZXZlbnRNYXlTdGFydERyYWcoKQpAQCAtNDc5
LDcgKzQ3Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAgICAgaWYgKHNpbmdsZUNsaWNr
KQogICAgICAgICBmb2N1c0RvY3VtZW50VmlldygpOwogCi0gICAgTm9kZSogaW5uZXJOb2RlID0g
ZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgIE5vZGUqIGlubmVyTm9kZSA9IHRhcmdldE5vZGUoZXZl
bnQpOwogCiAgICAgbV9tb3VzZVByZXNzTm9kZSA9IGlubmVyTm9kZTsKICNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQpAQCAtNTM2LDcgKzUzNCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZURyYWdnZWRFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBlCiAg
ICAgaWYgKCFtX21vdXNlUHJlc3NlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTm9k
ZSogdGFyZ2V0Tm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKKyAgICBOb2RlKiB0YXJnZXROb2Rl
ID0gRXZlbnRIYW5kbGVyOjp0YXJnZXROb2RlKGV2ZW50KTsKICAgICBpZiAoZXZlbnQuZXZlbnQo
KS5idXR0b24oKSAhPSBMZWZ0QnV0dG9uIHx8ICF0YXJnZXROb2RlIHx8ICF0YXJnZXROb2RlLT5y
ZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU2OCw2ICs1NjYsNyBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEcmFnZ2VkRXZlbnQoY29uc3QgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYgZQogICAgICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhp
dFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwogICAgICAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdChtX21vdXNlRG93blBvcyk7CiAgICAgICAgIG1fZnJhbWUt
PmRvY3VtZW50KCktPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1
bHQpOworCiAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRHJhZyhyZXN1bHQuaW5uZXJO
b2RlKCksIHJlc3VsdC5sb2NhbFBvaW50KCkpOwogICAgIH0KICAgICB1cGRhdGVTZWxlY3Rpb25G
b3JNb3VzZURyYWcodGFyZ2V0Tm9kZSwgZXZlbnQubG9jYWxQb2ludCgpKTsKQEAgLTcyMiw3ICs3
MjEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZQogICAgICAgICAgICAgJiYgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPmlzUmFuZ2UoKQogICAgICAgICAgICAgJiYgZXZlbnQuZXZlbnQoKS5idXR0
b24oKSAhPSBSaWdodEJ1dHRvbikgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVj
dGlvbjsKLSAgICAgICAgTm9kZSogbm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IHRhcmdldE5vZGUoZXZlbnQpOwogICAgICAgICBib29sIGNhcmV0QnJvd3Np
bmcgPSBtX2ZyYW1lLT5zZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogICAgICAg
ICBpZiAobm9kZSAmJiAoY2FyZXRCcm93c2luZyB8fCBub2RlLT5yZW5kZXJlcklzRWRpdGFibGUo
KSkgJiYgbm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBv
cyA9IG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZlbnQubG9jYWxQb2ludCgp
KTsKQEAgLTEwOTcsMTEgKzEwOTYsMTEgQEAgSW50UG9pbnQgRXZlbnRIYW5kbGVyOjpjdXJyZW50
TW91c2VQb3NpdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1fY3VycmVudE1vdXNlUG9zaXRpb247
CiB9CiAKLUZyYW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgaGl0VGVzdFJlc3VsdCkKK0ZyYW1lKiBFdmVudEhhbmRsZXI6OnN1
YmZyYW1lRm9ySGl0VGVzdFJlc3VsdChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRz
JiBoaXRUZXN0UmVzdWx0KQogewogICAgIGlmICghaGl0VGVzdFJlc3VsdC5pc092ZXJXaWRnZXQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEV2ZW50SGFuZGxlcjo6c3ViZnJhbWVG
b3JUYXJnZXROb2RlKGhpdFRlc3RSZXN1bHQudGFyZ2V0Tm9kZSgpKTsKKyAgICByZXR1cm4gc3Vi
ZnJhbWVGb3JUYXJnZXROb2RlKHRhcmdldE5vZGUoaGl0VGVzdFJlc3VsdCkpOwogfQogCiBGcmFt
ZSogRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvclRhcmdldE5vZGUoTm9kZSogbm9kZSkKQEAgLTEx
MzMsNyArMTEzMiw3IEBAIHN0YXRpYyBib29sIG5vZGVJc05vdEJlaW5nRWRpdGVkKE5vZGUqIG5v
ZGUsIEZyYW1lKiBmcmFtZSkKIAogQ3Vyc29yIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50LCBTY3JvbGxiYXIqIHNjcm9s
bGJhcikKIHsKLSAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgIE5vZGUq
IG5vZGUgPSB0YXJnZXROb2RlKGV2ZW50KTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwogCkBAIC0xMjk4LDYgKzEyOTcsMjcgQEAg
c3RhdGljIEludFBvaW50IGRvY3VtZW50UG9pbnRGb3JXaW5kb3dQb2ludChGcmFtZSogZnJhbWUs
IGNvbnN0IEludFBvaW50JiB3aW5kb3cKICAgICByZXR1cm4gdmlldyA/IHZpZXctPndpbmRvd1Rv
Q29udGVudHMod2luZG93UG9pbnQpIDogd2luZG93UG9pbnQ7CiB9CiAKK05vZGUqIEV2ZW50SGFu
ZGxlcjo6dGFyZ2V0Tm9kZShjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVu
dCkKK3sKKyAgICByZXR1cm4gdGFyZ2V0Tm9kZShldmVudC5oaXRUZXN0UmVzdWx0KCkpOworfQor
CitOb2RlKiBFdmVudEhhbmRsZXI6OnRhcmdldE5vZGUoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0
VGVzdFJlc3VsdCkKK3sKKyAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUo
KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChub2RlLT5pbkRv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybiBub2RlOworCisgICAgRWxlbWVudCogZWxlbWVudCA9
IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pbkRv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybiBlbGVtZW50OworCisgICAgcmV0dXJuIG5vZGU7CisK
K30KKwogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiB7CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gcHJv
dGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CkBAIC0xMzI4LDEyICsxMzQ4LDEyIEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBtb3VzZUV2ZW50KQogICAgIEludFBvaW50IGRvY3VtZW50UG9pbnQgPSBkb2N1bWVudFBvaW50
Rm9yV2luZG93UG9pbnQobV9mcmFtZSwgbW91c2VFdmVudC5wb3MoKSk7CiAgICAgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyBtZXYgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5wcmVwYXJlTW91
c2VFdmVudChyZXF1ZXN0LCBkb2N1bWVudFBvaW50LCBtb3VzZUV2ZW50KTsKIAotICAgIGlmICgh
bWV2LnRhcmdldE5vZGUoKSkgeworICAgIGlmICghdGFyZ2V0Tm9kZShtZXYpKSB7CiAgICAgICAg
IGludmFsaWRhdGVDbGljaygpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
bV9tb3VzZVByZXNzTm9kZSA9IG1ldi50YXJnZXROb2RlKCk7CisgICAgbV9tb3VzZVByZXNzTm9k
ZSA9IHRhcmdldE5vZGUobWV2KTsKIAogICAgIGlmIChJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmhhbmRsZU1vdXNlUHJlc3MobV9mcmFtZS0+cGFnZSgpKSkgewogICAgICAgICBpbnZhbGlkYXRl
Q2xpY2soKTsKQEAgLTEzNDYsNyArMTM2Niw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogICAg
ICAgICAvLyB0aGUgbV9tb3VzZVByZXNzZWQgZmxhZywgd2hpY2ggbWF5IGhhcHBlbiBpZiBhbiBB
cHBLaXQgd2lkZ2V0IGVudGVyZWQgYSBtb2RhbCBldmVudCBsb29wLgogICAgICAgICBtX2NhcHR1
cmVzRHJhZ2dpbmcgPSBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHR1cmVzRHJhZ2dpbmco
KTsKICAgICAgICAgaWYgKG1fbW91c2VQcmVzc2VkICYmIG1fY2FwdHVyZXNEcmFnZ2luZykgewot
ICAgICAgICAgICAgbV9jYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUgPSBtZXYudGFyZ2V0Tm9kZSgp
OworICAgICAgICAgICAgbV9jYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUgPSB0YXJnZXROb2RlKG1l
dik7CiAgICAgICAgICAgICBtX2V2ZW50SGFuZGxlcldpbGxSZXNldENhcHR1cmluZ01vdXNlRXZl
bnRzTm9kZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CkBA
IC0xMzYzLDcgKzEzODMsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKICNlbmRpZgogCiAgICAg
bV9jbGlja0NvdW50ID0gbW91c2VFdmVudC5jbGlja0NvdW50KCk7Ci0gICAgbV9jbGlja05vZGUg
PSBtZXYudGFyZ2V0Tm9kZSgpOworICAgIG1fY2xpY2tOb2RlID0gdGFyZ2V0Tm9kZShtZXYpOwog
CiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKSA/IG1fY2xpY2tOb2Rl
LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpIDogMDsKQEAgLTEzNzksNyArMTM5OSw3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldENh
cmV0QmxpbmtpbmdTdXNwZW5kZWQodHJ1ZSk7CiAKLSAgICBib29sIHN3YWxsb3dFdmVudCA9IGRp
c3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIG1ldi50YXJnZXRO
b2RlKCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgdHJ1ZSk7CisgICAgYm9vbCBz
d2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2
ZW50LCB0YXJnZXROb2RlKG1ldiksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgdHJ1
ZSk7CiAgICAgbV9jYXB0dXJlc0RyYWdnaW5nID0gIXN3YWxsb3dFdmVudDsKIAogICAgIC8vIElm
IHRoZSBoaXQgdGVzdGluZyBvcmlnaW5hbGx5IGRldGVybWluZWQgdGhlIGV2ZW50IHdhcyBpbiBh
IHNjcm9sbGJhciwgcmVmZXRjaCB0aGUgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cwpAQCAt
MTQwNSw3ICsxNDI1LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAgICAgICAgIC8vIElmIGEg
bW91c2UgZXZlbnQgaGFuZGxlciBjaGFuZ2VzIHRoZSBpbnB1dCBlbGVtZW50IHR5cGUgdG8gb25l
IHRoYXQgaGFzIGEgd2lkZ2V0IGFzc29jaWF0ZWQsCiAgICAgICAgIC8vIHdlJ2QgbGlrZSB0byBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudCB0byBwYXNzIHRoZSBldmVudCB0byB0
aGUgd2lkZ2V0IGFuZCB0aHVzIHRoZQogICAgICAgICAvLyBldmVudCB0YXJnZXQgbm9kZSBjYW4n
dCBzdGlsbCBiZSB0aGUgc2hhZG93IG5vZGUuCi0gICAgICAgIGlmIChtZXYudGFyZ2V0Tm9kZSgp
LT5pc1NoYWRvd1Jvb3QoKSAmJiBtZXYudGFyZ2V0Tm9kZSgpLT5zaGFkb3dIb3N0KCktPmhhc1Rh
Z05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIGlmICh0YXJnZXROb2RlKG1ldiktPmlzU2hhZG93
Um9vdCgpICYmIHRhcmdldE5vZGUobWV2KS0+c2hhZG93SG9zdCgpLT5oYXNUYWdOYW1lKGlucHV0
VGFnKSkgewogICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVz
dDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsKICAgICAgICAgICAgIG1ldiA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPnByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIGRvY3VtZW50
UG9pbnQsIG1vdXNlRXZlbnQpOwogICAgICAgICB9CkBAIC0xNDQ2LDkgKzE0NjYsOSBAQCBib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgbW91c2VFdgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIG1fY2xpY2tD
b3VudCA9IG1vdXNlRXZlbnQuY2xpY2tDb3VudCgpOwotICAgIGJvb2wgc3dhbGxvd01vdXNlVXBF
dmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBtZXYu
dGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIGZhbHNlKTsKKyAg
ICBib29sIHN3YWxsb3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1v
dXNlRXZlbnQsIGZhbHNlKTsKIAotICAgIGJvb2wgc3dhbGxvd0NsaWNrRXZlbnQgPSBtb3VzZUV2
ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIG1ldi50YXJnZXROb2RlKCkgPT0gbV9jbGlj
a05vZGUgJiYgZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYu
dGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOworICAg
IGJvb2wgc3dhbGxvd0NsaWNrRXZlbnQgPSBtb3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0
dG9uICYmIHRhcmdldE5vZGUobWV2KSA9PSBtX2NsaWNrTm9kZSAmJiBkaXNwYXRjaE1vdXNlRXZl
bnQoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIHRhcmdldE5vZGUobWV2KSwgdHJ1ZSwgbV9jbGlj
a0NvdW50LCBtb3VzZUV2ZW50LCB0cnVlKTsKIAogICAgIGlmIChtX2xhc3RTY3JvbGxiYXJVbmRl
ck1vdXNlKQogICAgICAgICBzd2FsbG93TW91c2VVcEV2ZW50ID0gbV9sYXN0U2Nyb2xsYmFyVW5k
ZXJNb3VzZS0+bW91c2VVcCgpOwpAQCAtMTU3NCw3ICsxNTk0LDcgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VF
dmVudCwgSGkKIAogICAgIGlmIChuZXdTdWJmcmFtZSkgewogICAgICAgICAvLyBVcGRhdGUgb3Zl
ci9vdXQgc3RhdGUgYmVmb3JlIHBhc3NpbmcgdGhlIGV2ZW50IHRvIHRoZSBzdWJmcmFtZS4KLSAg
ICAgICAgdXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUobWV2LnRhcmdldE5vZGUoKSwgbW91c2VF
dmVudCwgdHJ1ZSk7CisgICAgICAgIHVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKHRhcmdldE5v
ZGUobWV2KSwgbW91c2VFdmVudCwgdHJ1ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBFdmVudCBk
aXNwYXRjaCBpbiB1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSBtYXkgaGF2ZSBjYXVzZWQgdGhl
IHN1YmZyYW1lIG9mIHRoZSB0YXJnZXQKICAgICAgICAgLy8gbm9kZSB0byBiZSBkZXRhY2hlZCBm
cm9tIGl0cyBGcmFtZVZpZXcsIGluIHdoaWNoIGNhc2UgdGhlIGV2ZW50IHNob3VsZCBub3QgYmUg
cGFzc2VkLgpAQCAtMTU4OSw4ICsxNjA5LDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1v
dXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKICAg
ICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBwYXJ0aWN1bGFyIHBsdWdpbiBkb2Vzbid0IG1h
bmlwdWxhdGUgY3Vyc29yIGF0IGFsbC4gVGh1cywgIGV2ZW4gYSBDU1MgY3Vyc29yIHNldCBvbiBi
b2R5IGhhcyBubwogICAgICAgICAgICAgICAgIC8vIGVmZmVjdCBvbiBwbHVnaW5zICh3aGljaCBt
YXRjaGVzIEZpcmVmb3gpLgogICAgICAgICAgICAgICAgIGJvb2wgb3ZlclBsdWdpbkVsZW1lbnQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAobWV2LnRhcmdldE5vZGUoKSAmJiBtZXYudGFy
Z2V0Tm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSFRNTEVs
ZW1lbnQqIGVsID0gdG9IVE1MRWxlbWVudChtZXYudGFyZ2V0Tm9kZSgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAodGFyZ2V0Tm9kZShtZXYpICYmIHRhcmdldE5vZGUobWV2KS0+aXNIVE1MRWxlbWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbCA9IHRvSFRNTEVsZW1l
bnQodGFyZ2V0Tm9kZShtZXYpKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlclBsdWdpbkVsZW1l
bnQgPSBlbC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IGVsLT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykgfHwgZWwtPmhhc1RhZ05hbWUoZW1iZWRUYWcpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAoIW92ZXJQbHVnaW5FbGVtZW50KSB7CkBAIC0xNjA2LDcgKzE2MjYsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgIGlmIChzd2FsbG93RXZlbnQpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAotICAgIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVu
dChldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIGZhbHNlLCAw
LCBtb3VzZUV2ZW50LCB0cnVlKTsKKyAgICBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZl
bnQoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCB0YXJnZXROb2RlKG1ldiksIGZhbHNlLCAw
LCBtb3VzZUV2ZW50LCB0cnVlKTsKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIGlmICgh
c3dhbGxvd0V2ZW50KQogICAgICAgICBzd2FsbG93RXZlbnQgPSBoYW5kbGVNb3VzZURyYWdnZWRF
dmVudChtZXYpOwpAQCAtMTY2MSw5ICsxNjgxLDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkK
ICAgICBpZiAoc3ViZnJhbWUgJiYgcGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShtZXYs
IHN1YmZyYW1lKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIHN3YWxsb3dNb3Vz
ZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCwg
bWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCBmYWxzZSk7
CisgICAgYm9vbCBzd2FsbG93TW91c2VVcEV2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50
TmFtZXMoKS5tb3VzZXVwRXZlbnQsIHRhcmdldE5vZGUobWV2KSwgdHJ1ZSwgbV9jbGlja0NvdW50
LCBtb3VzZUV2ZW50LCBmYWxzZSk7CiAKLSAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0gbV9j
bGlja0NvdW50ID4gMCAmJiBtb3VzZUV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIG1l
di50YXJnZXROb2RlKCkgPT0gbV9jbGlja05vZGUgJiYgZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNrQ291bnQs
IG1vdXNlRXZlbnQsIHRydWUpOworICAgIGJvb2wgc3dhbGxvd0NsaWNrRXZlbnQgPSBtX2NsaWNr
Q291bnQgPiAwICYmIG1vdXNlRXZlbnQuYnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgdGFyZ2V0
Tm9kZShtZXYpID09IG1fY2xpY2tOb2RlICYmIGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVz
KCkuY2xpY2tFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNl
RXZlbnQsIHRydWUpOwogCiAgICAgaWYgKG1fcmVzaXplTGF5ZXIpIHsKICAgICAgICAgbV9yZXNp
emVMYXllci0+c2V0SW5SZXNpemVNb2RlKGZhbHNlKTsKQEAgLTE3NDAsNyArMTc2MCw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIGV2ZW50LCBDbGlwYm9hcmQqCiAgICAgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyBt
ZXYgPSBwcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBldmVudCk7CiAKICAgICAvLyBEcmFnIGV2
ZW50cyBzaG91bGQgbmV2ZXIgZ28gdG8gdGV4dCBub2RlcyAoZm9sbG93aW5nIElFLCBhbmQgcHJv
cGVyIG1vdXNlb3Zlci9vdXQgZGlzcGF0Y2gpCi0gICAgTm9kZSogbmV3VGFyZ2V0ID0gbWV2LnRh
cmdldE5vZGUoKTsKKyAgICBOb2RlKiBuZXdUYXJnZXQgPSB0YXJnZXROb2RlKG1ldik7CiAgICAg
aWYgKG5ld1RhcmdldCAmJiBuZXdUYXJnZXQtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgbmV3VGFy
Z2V0ID0gbmV3VGFyZ2V0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKG5ld1RhcmdldCkKQEAgLTIx
NTAsMTIgKzIxNzAsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiAgICAgICAgIC8vIEZJWE1FOiBJbiB0
aGUgZWRpdGFibGUgY2FzZSwgd29yZCBzZWxlY3Rpb24gc29tZXRpbWVzIHNlbGVjdHMgY29udGVu
dCB0aGF0IGlzbid0IHVuZGVybmVhdGggdGhlIG1vdXNlLgogICAgICAgICAvLyBJZiB0aGUgc2Vs
ZWN0aW9uIGlzIG5vbi1lZGl0YWJsZSwgd2UgZG8gd29yZCBzZWxlY3Rpb24gdG8gbWFrZSBpdCBl
YXNpZXIgdG8gdXNlIHRoZSBjb250ZXh0dWFsIG1lbnUgaXRlbXMKICAgICAgICAgLy8gYXZhaWxh
YmxlIGZvciB0ZXh0IHNlbGVjdGlvbnMuICBCdXQgb25seSBpZiB3ZSdyZSBhYm92ZSB0ZXh0Lgot
ICAgICAgICAmJiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCkgfHwg
KG1ldi50YXJnZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSkpIHsK
KyAgICAgICAgJiYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8
ICh0YXJnZXROb2RlKG1ldikgJiYgdGFyZ2V0Tm9kZShtZXYpLT5pc1RleHROb2RlKCkpKSkgewog
ICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0gdHJ1ZTsgLy8gY29udGV4dCBtZW51
IGV2ZW50cyBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gcGVyZm9ybSBhIHNlbGVjdGlvbgogICAgICAg
ICBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KG1ldik7CiAgICAgfQogCi0g
ICAgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jb250ZXh0
bWVudUV2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCAwLCBldmVudCwgZmFsc2UpOworICAg
IHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkuY29udGV4dG1l
bnVFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCB0cnVlLCAwLCBldmVudCwgZmFsc2UpOwogICAgIAog
ICAgIHJldHVybiBzd2FsbG93RXZlbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApp
bmRleCBlNjczODEwOWUxODk2MzJjNjNiMTJlYjIzN2JjZGZlMTY4NzEyNzcyLi5mMTA3YjY2Njdm
YmU2NDBkZmNiYzMzNDE3MjgxZTFjMWY0OTUxYjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKQEAgLTI2MSwxMyArMjYxLDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgUGFzc1JlZlB0
cjxDbGlwYm9hcmQ+IGNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3Q7CiAjZW5kaWYgLy8g
RU5BQkxFKERSQUdfU1VQUE9SVCkKLSAgICAKKwogICAgIGJvb2wgZXZlbnRBY3RpdmF0ZWRWaWV3
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIGNvbnN0OwogICAgIHZvaWQgc2VsZWN0Q2xvc2Vz
dFdvcmRGcm9tTW91c2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7
CiAgICAgdm9pZCBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKIAogICAgIGJvb2wgaGFuZGxlTW91c2VEb3Vi
bGVDbGlja0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCisgICAgc3RhdGljIEZy
YW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYpOworCisgICAgc3RhdGljIE5vZGUqIHRhcmdldE5vZGUoY29uc3QgTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYpOworICAgIHN0YXRpYyBOb2RlKiB0YXJnZXROb2RlKGNvbnN0
IEhpdFRlc3RSZXN1bHQmKTsKKwogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0
IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKICAgICBib29sIGhhbmRsZU1vdXNlUHJl
c3NFdmVudFNpbmdsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsK
ICAgICBib29sIGhhbmRsZU1vdXNlUHJlc3NFdmVudERvdWJsZUNsaWNrKGNvbnN0IE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwCmluZGV4IDA0MjI2OWNlMDkxY2JjNDdhNjcz
NWUyNmIyYTRjNzNjZjU2OTg2MWYuLmIzNzJjZmYwMzBkYTg2ZTVkNzBmYTY5M2U4MzIwMjA0NTZm
NDE3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzLmNwcApAQCAtMzIsMjEgKzMyLDYgQEAgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0czo6TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyhjb25zdCBQbGF0Zm9ybU1vdXNl
RXYKICAgICAsIG1faGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0KQogewogfQotICAgICAgICAK
LU5vZGUqIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHM6OnRhcmdldE5vZGUoKSBjb25zdAot
ewotICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBub2RlLT5wYXJl
bnRFbGVtZW50KCk7Ci0gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aW5Eb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gZWxlbWVudDsKLQotICAgIHJldHVybiBub2RlOwotfQogCiBjb25zdCBJ
bnRQb2ludCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjpsb2NhbFBvaW50KCkgY29uc3QK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzLmgKaW5kZXggOGMyODU3NDk5ODhhNjU0Yzg4YmRhNzM1YzkzM2NmYTc1Mzk4YTE3MC4uYjM1
MWY5MjE1NjliZGNhOWQwMmU0ZWY3MDUwM2U1MGRiOTM0NDMyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgKQEAgLTM0LDcgKzM0
LDYgQEAgcHVibGljOgogCiAgICAgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXZlbnQ7IH0KICAgICBjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0
UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0UmVzdWx0OyB9Ci0gICAgTm9kZSogdGFy
Z2V0Tm9kZSgpIGNvbnN0OwogICAgIGNvbnN0IEludFBvaW50IGxvY2FsUG9pbnQoKSBjb25zdDsK
ICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhcigpIGNvbnN0OwogICAgIGJvb2wgaXNPdmVyTGluaygp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhh
bmRsZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFu
ZGxlckNocm9taXVtLmNwcAppbmRleCAwOWI0ZGZhYzE3MzIyYWM5Yjc1ZDExMTJkYWZkMGMyZGRj
ZjcwZGFlLi5mYWY0ZDQ3OTRjNjRjMTU4ZDY4YjRkNDgxYTBjMzJmMWFmMWNiNDYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVt
LmNwcApAQCAtNjEsNyArNjEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NF
dmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbQogICAgIEludFBv
aW50IHAgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMobWV2LmV2ZW50KCkucG9z
KCkpOwogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+Y29udGFpbnMocCkpIHsKICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MoCi0gICAgICAgICAgICBtZXYudGFyZ2V0Tm9k
ZSgpLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KG1ldi5sb2NhbFBvaW50KCkpKTsKKyAg
ICAgICAgICAgIHRhcmdldE5vZGUobWV2KS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludCht
ZXYubG9jYWxQb2ludCgpKSk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KHZpc2libGVQb3MpOwogICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNob3VsZENo
YW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOwpAQCAtMTAzLDkgKzEwMyw5IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVu
dCYgd2hlZWxFdmVudCwgV2lkZ2V0CiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNl
RG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZl
bnQpCiB7CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRv
LgotICAgIGlmICghZXZlbnQudGFyZ2V0Tm9kZSgpIHx8ICFldmVudC50YXJnZXROb2RlKCktPnJl
bmRlcmVyKCkgfHwgIWV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkK
KyAgICBpZiAoIXRhcmdldE5vZGUoZXZlbnQpIHx8ICF0YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVy
ZXIoKSB8fCAhdGFyZ2V0Tm9kZShldmVudCktPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQo
dG9SZW5kZXJXaWRnZXQoZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpKS0+d2lkZ2V0KCkp
OworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldCh0
YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVyZXIoKSktPndpZGdldCgpKTsKIH0KIAogYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IDM4MDg4NGIxOGRj
MDdiMjM1ODk1ODA0NjRkODkxNDE5ZmRmZDk3ZjYuLmQ5M2NjODJmNGQxNDk1OGFhMDdiOGYxMmNj
ZWFjYjQyYjk1MWQyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50
SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0KQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVu
dFZpZXcoKQogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lk
Z2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQogewogICAgIC8v
IEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAgICBSZW5kZXJP
YmplY3QqIHRhcmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+
cmVuZGVyZXIoKSA6IDA7CisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSB0YXJnZXROb2RlKGV2
ZW50KSA/IHRhcmdldE5vZGUoZXZlbnQpLT5yZW5kZXJlcigpIDogMDsKICAgICBpZiAoIXRhcmdl
dCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBA
IC0zODEsNyArMzgxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9T
dWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmUKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246IHsKLSAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBldmVudC50YXJnZXROb2RlKCk7CisgICAgICAgICAgICBO
b2RlKiBub2RlID0gdGFyZ2V0Tm9kZShldmVudCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88585</attachid>
            <date>2011-04-07 00:32:17 -0700</date>
            <delta_ts>2011-04-07 02:05:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57921-20110407173214.patch</filename>
            <type>text/plain</type>
            <size>29464</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxNDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNDE4YTM0MTRjNzA5NDIx
ZTc0OTRiYTAzYzZkNDFkMDVmZDA0YmY1Li5jZGI5ZDA2Y2U3ZTc0MTk1MzVmYmE3MDg5MTE0YzE5
YmVkOTY4NTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMDQtMDcgIEFsaWNl
IEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0czo6dGFyZ2V0Tm9kZSgpIG1ldGhvZCBvbiB0byBFdmVudEhhbmRsZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkyMQorCisgICAgICAg
IE1vdmVzIHRoZSBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjp0YXJnZXROb2RlKCkgbWV0
aG9kIG9uIHRvIEV2ZW50SGFuZGxlciwgc28KKyAgICAgICAgdGhhdCB0aGUgc2FtZSBsb2dpYyBj
YW4gYmUgdXNlZCBmb3IgYSBIaXRUZXN0UmVzdWx0LgorCisgICAgICAgIE5vIHZpc2libGUgY2hh
bmdlcywganVzdCBjbGVhbnVwLCBzbyBubyB0ZXN0cy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2Vz
dFdvcmRGcm9tTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNl
bGVjdENsb3Nlc3RXb3JkT3JMaW5rRnJvbU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEcmFnZ2VkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9ySGl0VGVz
dFJlc3VsdCk6CisgICAgICAgIE1hZGUgcHVibGljIHN0YXRpYyBtZW1iZXIsIHNvIHRoYXQgaXQg
Y2FuIGFjY2VzcyB0YXJnZXROb2RlKCksIGFuZCBiZSBhY2Nlc3NlZCBieQorICAgICAgICB3ZWJr
aXR3ZWJ2aWV3IGluIGd0ay4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dGFyZ2V0Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlRG91YmxlQ2xpY2tFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERyb3ApOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudCk6Cisg
ICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL01vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0czo6TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyk6CisgICAgICAgICog
cGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmg6CisgICAgICAgICogcGFnZS9hbmRy
b2lkL0V2ZW50SGFuZGxlckFuZHJvaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9i
cmV3L0V2ZW50SGFuZGxlckJyZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9jaHJv
bWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQpOgorICAgICAg
ICAqIHBhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBw
YWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGFnZS9o
YWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBh
c3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKToKKyAgICAgICAgKiBwYWdlL3d4
L0V2ZW50SGFuZGxlcld4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFz
c1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQpOgorCiAyMDExLTA0LTA3ICBLZW50IFRhbXVy
YSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEds
YXprb3YuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZGQyNjFkODY3ZmY3
MWU1MjQ2ZWY2OTY1NWEyMGE0Y2Y2ZmI3MzZkZS4uOWJjNjRlNzRiMmRkYmU0NjAxNDcxMDQzMWNl
OTM1YzZlYWZlNzA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMTI3
LDggKzEyNyw2IEBAIGNvbnN0IGRvdWJsZSBhdXRvc2Nyb2xsSW50ZXJ2YWwgPSAwLjA1OwogCiBj
b25zdCBkb3VibGUgZmFrZU1vdXNlTW92ZUludGVydmFsID0gMC4xOwogCi1zdGF0aWMgRnJhbWUq
IHN1YmZyYW1lRm9ySGl0VGVzdFJlc3VsdChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzJik7Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBzY3JvbGxOb2RlKGZsb2F0IGRlbHRhLCBXaGVl
bEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eSwgU2Nyb2xsRGlyZWN0aW9uIHBvc2l0aXZl
RGlyZWN0aW9uLCBTY3JvbGxEaXJlY3Rpb24gbmVnYXRpdmVEaXJlY3Rpb24sIE5vZGUqIG5vZGUs
IE5vZGUqKiBzdG9wTm9kZSkKIHsKICAgICBpZiAoIWRlbHRhKQpAQCAtMjc0LDcgKzI3Miw3IEBA
IHN0YXRpYyB2b2lkIHNldE5vbkRpcmVjdGlvbmFsU2VsZWN0aW9uSWZOZWVkZWQoU2VsZWN0aW9u
Q29udHJvbGxlciogc2VsZWN0aW9uLCBjCiAKIHZvaWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDbG9z
ZXN0V29yZEZyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMm
IHJlc3VsdCkKIHsKLSAgICBOb2RlKiBpbm5lck5vZGUgPSByZXN1bHQudGFyZ2V0Tm9kZSgpOwor
ICAgIE5vZGUqIGlubmVyTm9kZSA9IHRhcmdldE5vZGUocmVzdWx0KTsKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbjsKIAogICAgIGlmIChpbm5lck5vZGUgJiYgaW5uZXJOb2RlLT5y
ZW5kZXJlcigpICYmIG1fbW91c2VEb3duTWF5U3RhcnRTZWxlY3QpIHsKQEAgLTMwMSw3ICsyOTks
NyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2VsZWN0Q2xvc2VzdFdvcmRPckxpbmtGcm9tTW91c2VF
dmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdAogICAgIGlmICghcmVzdWx0LmhpdFRlc3RSZXN1
bHQoKS5pc0xpdmVMaW5rKCkpCiAgICAgICAgIHJldHVybiBzZWxlY3RDbG9zZXN0V29yZEZyb21N
b3VzZUV2ZW50KHJlc3VsdCk7CiAKLSAgICBOb2RlKiBpbm5lck5vZGUgPSByZXN1bHQudGFyZ2V0
Tm9kZSgpOworICAgIE5vZGUqIGlubmVyTm9kZSA9IHRhcmdldE5vZGUocmVzdWx0KTsKIAogICAg
IGlmIChpbm5lck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYmIG1fbW91c2VEb3duTWF5
U3RhcnRTZWxlY3QpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb247CkBA
IC0zNDMsNyArMzQxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dFRyaXBsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFIKICAgICBpZiAoZXZlbnQu
ZXZlbnQoKS5idXR0b24oKSAhPSBMZWZ0QnV0dG9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgTm9kZSogaW5uZXJOb2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgIE5vZGUq
IGlubmVyTm9kZSA9IHRhcmdldE5vZGUoZXZlbnQpOwogICAgIGlmICghKGlubmVyTm9kZSAmJiBp
bm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzczLDcgKzM3MSw3IEBAIHN0YXRpYyBpbnQgdGV4dERp
c3RhbmNlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIAogYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQogewotICAgIE5vZGUqIGlubmVyTm9k
ZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKKyAgICBOb2RlKiBpbm5lck5vZGUgPSB0YXJnZXROb2Rl
KGV2ZW50KTsKICAgICBpZiAoIShpbm5lck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYm
IG1fbW91c2VEb3duTWF5U3RhcnRTZWxlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTQ0OSw3ICs0NDcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50
KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZQogCiAgICAgLy8gSWYgd2Ug
Z290IHRoZSBldmVudCBiYWNrLCB0aGF0IG11c3QgbWVhbiBpdCB3YXNuJ3QgcHJldmVudGVkLAog
ICAgIC8vIHNvIGl0J3MgYWxsb3dlZCB0byBzdGFydCBhIGRyYWcgb3Igc2VsZWN0aW9uLgotICAg
IG1fbW91c2VEb3duTWF5U3RhcnRTZWxlY3QgPSBjYW5Nb3VzZURvd25TdGFydFNlbGVjdChldmVu
dC50YXJnZXROb2RlKCkpOworICAgIG1fbW91c2VEb3duTWF5U3RhcnRTZWxlY3QgPSBjYW5Nb3Vz
ZURvd25TdGFydFNlbGVjdCh0YXJnZXROb2RlKGV2ZW50KSk7CiAgICAgCiAjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKICAgICAvLyBDYXJlZnVsIHRoYXQgdGhlIGRyYWcgc3RhcnRpbmcgbG9naWMg
c3RheXMgaW4gc3luYyB3aXRoIGV2ZW50TWF5U3RhcnREcmFnKCkKQEAgLTQ3OSw3ICs0NzcsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZQogICAgIGlmIChzaW5nbGVDbGljaykKICAgICAgICAg
Zm9jdXNEb2N1bWVudFZpZXcoKTsKIAotICAgIE5vZGUqIGlubmVyTm9kZSA9IGV2ZW50LnRhcmdl
dE5vZGUoKTsKKyAgICBOb2RlKiBpbm5lck5vZGUgPSB0YXJnZXROb2RlKGV2ZW50KTsKIAogICAg
IG1fbW91c2VQcmVzc05vZGUgPSBpbm5lck5vZGU7CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkK
QEAgLTUzNiw3ICs1MzQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VEcmFnZ2Vk
RXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZQogICAgIGlmICghbV9t
b3VzZVByZXNzZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5vZGUqIHRhcmdldE5v
ZGUgPSBldmVudC50YXJnZXROb2RlKCk7CisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IEV2ZW50SGFu
ZGxlcjo6dGFyZ2V0Tm9kZShldmVudCk7CiAgICAgaWYgKGV2ZW50LmV2ZW50KCkuYnV0dG9uKCkg
IT0gTGVmdEJ1dHRvbiB8fCAhdGFyZ2V0Tm9kZSB8fCAhdGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03MjIsNyArNzIwLDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMmIGUKICAgICAgICAgICAgICYmIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc1Jhbmdl
KCkKICAgICAgICAgICAgICYmIGV2ZW50LmV2ZW50KCkuYnV0dG9uKCkgIT0gUmlnaHRCdXR0b24p
IHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb247Ci0gICAgICAgIE5vZGUq
IG5vZGUgPSBldmVudC50YXJnZXROb2RlKCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSB0YXJnZXRO
b2RlKGV2ZW50KTsKICAgICAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGlu
Z3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKICAgICAgICAgaWYgKG5vZGUgJiYgKGNhcmV0
QnJvd3NpbmcgfHwgbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpICYmIG5vZGUtPnJlbmRlcmVy
KCkpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBub2RlLT5yZW5kZXJlcigp
LT5wb3NpdGlvbkZvclBvaW50KGV2ZW50LmxvY2FsUG9pbnQoKSk7CkBAIC0xMDk3LDExICsxMDk1
LDExIEBAIEludFBvaW50IEV2ZW50SGFuZGxlcjo6Y3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25z
dAogICAgIHJldHVybiBtX2N1cnJlbnRNb3VzZVBvc2l0aW9uOwogfQogCi1GcmFtZSogc3ViZnJh
bWVGb3JIaXRUZXN0UmVzdWx0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGhp
dFRlc3RSZXN1bHQpCitGcmFtZSogRXZlbnRIYW5kbGVyOjpzdWJmcmFtZUZvckhpdFRlc3RSZXN1
bHQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgaGl0VGVzdFJlc3VsdCkKIHsK
ICAgICBpZiAoIWhpdFRlc3RSZXN1bHQuaXNPdmVyV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShoaXRUZXN0
UmVzdWx0LnRhcmdldE5vZGUoKSk7CisgICAgcmV0dXJuIHN1YmZyYW1lRm9yVGFyZ2V0Tm9kZSh0
YXJnZXROb2RlKGhpdFRlc3RSZXN1bHQpKTsKIH0KIAogRnJhbWUqIEV2ZW50SGFuZGxlcjo6c3Vi
ZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCkBAIC0xMTMzLDcgKzExMzEsNyBAQCBzdGF0
aWMgYm9vbCBub2RlSXNOb3RCZWluZ0VkaXRlZChOb2RlKiBub2RlLCBGcmFtZSogZnJhbWUpCiAK
IEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBNb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzJiBldmVudCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0gICAgTm9kZSog
bm9kZSA9IGV2ZW50LnRhcmdldE5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gdGFyZ2V0Tm9kZShl
dmVudCk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUgPyBub2RlLT5yZW5kZXJl
cigpIDogMDsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/IHJlbmRlcmVyLT5z
dHlsZSgpIDogMDsKIApAQCAtMTI5OCw2ICsxMjk2LDI3IEBAIHN0YXRpYyBJbnRQb2ludCBkb2N1
bWVudFBvaW50Rm9yV2luZG93UG9pbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgd2lu
ZG93CiAgICAgcmV0dXJuIHZpZXcgPyB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50
KSA6IHdpbmRvd1BvaW50OwogfQogCitOb2RlKiBFdmVudEhhbmRsZXI6OnRhcmdldE5vZGUoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCit7CisgICAgcmV0dXJuIHRh
cmdldE5vZGUoZXZlbnQuaGl0VGVzdFJlc3VsdCgpKTsKK30KKworTm9kZSogRXZlbnRIYW5kbGVy
Ojp0YXJnZXROb2RlKGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCit7CisgICAg
Tm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobm9kZS0+aW5Eb2N1bWVudCgpKQorICAgICAgICBy
ZXR1cm4gbm9kZTsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBub2RlLT5wYXJlbnRFbGVtZW50
KCk7CisgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aW5Eb2N1bWVudCgpKQorICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKKworICAgIHJldHVybiBub2RlOworCit9CisKIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3Vz
ZUV2ZW50KQogewogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1lLT52aWV3
KCkpOwpAQCAtMTMyOCwxMiArMTM0NywxMiBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICBJ
bnRQb2ludCBkb2N1bWVudFBvaW50ID0gZG9jdW1lbnRQb2ludEZvcldpbmRvd1BvaW50KG1fZnJh
bWUsIG1vdXNlRXZlbnQucG9zKCkpOwogICAgIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMg
bWV2ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cHJlcGFyZU1vdXNlRXZlbnQocmVxdWVzdCwgZG9j
dW1lbnRQb2ludCwgbW91c2VFdmVudCk7CiAKLSAgICBpZiAoIW1ldi50YXJnZXROb2RlKCkpIHsK
KyAgICBpZiAoIXRhcmdldE5vZGUobWV2KSkgewogICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1fbW91c2VQcmVzc05vZGUgPSBt
ZXYudGFyZ2V0Tm9kZSgpOworICAgIG1fbW91c2VQcmVzc05vZGUgPSB0YXJnZXROb2RlKG1ldik7
CiAKICAgICBpZiAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpoYW5kbGVNb3VzZVByZXNzKG1f
ZnJhbWUtPnBhZ2UoKSkpIHsKICAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CkBAIC0xMzQ2LDcg
KzEzNjUsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKICAgICAgICAgLy8gdGhlIG1fbW91c2VQ
cmVzc2VkIGZsYWcsIHdoaWNoIG1heSBoYXBwZW4gaWYgYW4gQXBwS2l0IHdpZGdldCBlbnRlcmVk
IGEgbW9kYWwgZXZlbnQgbG9vcC4KICAgICAgICAgbV9jYXB0dXJlc0RyYWdnaW5nID0gc3ViZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5jYXB0dXJlc0RyYWdnaW5nKCk7CiAgICAgICAgIGlmIChtX21v
dXNlUHJlc3NlZCAmJiBtX2NhcHR1cmVzRHJhZ2dpbmcpIHsKLSAgICAgICAgICAgIG1fY2FwdHVy
aW5nTW91c2VFdmVudHNOb2RlID0gbWV2LnRhcmdldE5vZGUoKTsKKyAgICAgICAgICAgIG1fY2Fw
dHVyaW5nTW91c2VFdmVudHNOb2RlID0gdGFyZ2V0Tm9kZShtZXYpOwogICAgICAgICAgICAgbV9l
dmVudEhhbmRsZXJXaWxsUmVzZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUgPSB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIGludmFsaWRhdGVDbGljaygpOwpAQCAtMTM2Myw3ICsxMzgyLDcgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAjZW5kaWYKIAogICAgIG1fY2xpY2tDb3VudCA9IG1vdXNl
RXZlbnQuY2xpY2tDb3VudCgpOwotICAgIG1fY2xpY2tOb2RlID0gbWV2LnRhcmdldE5vZGUoKTsK
KyAgICBtX2NsaWNrTm9kZSA9IHRhcmdldE5vZGUobWV2KTsKIAogICAgIGlmIChGcmFtZVZpZXcq
IHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
bV9jbGlja05vZGUtPnJlbmRlcmVyKCkgPyBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9z
aW5nTGF5ZXIoKSA6IDA7CkBAIC0xMzc5LDcgKzEzOTgsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVu
dCkKIAogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRDYXJldEJsaW5raW5nU3VzcGVuZGVk
KHRydWUpOwogCi0gICAgYm9vbCBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZl
bnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCB0cnVlLCBtX2NsaWNr
Q291bnQsIG1vdXNlRXZlbnQsIHRydWUpOworICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZGlzcGF0
Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCwgdGFyZ2V0Tm9kZShtZXYp
LCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOwogICAgIG1fY2FwdHVyZXNE
cmFnZ2luZyA9ICFzd2FsbG93RXZlbnQ7CiAKICAgICAvLyBJZiB0aGUgaGl0IHRlc3Rpbmcgb3Jp
Z2luYWxseSBkZXRlcm1pbmVkIHRoZSBldmVudCB3YXMgaW4gYSBzY3JvbGxiYXIsIHJlZmV0Y2gg
dGhlIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMKQEAgLTE0MDUsNyArMTQyNCw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50KQogICAgICAgICAvLyBJZiBhIG1vdXNlIGV2ZW50IGhhbmRsZXIg
Y2hhbmdlcyB0aGUgaW5wdXQgZWxlbWVudCB0eXBlIHRvIG9uZSB0aGF0IGhhcyBhIHdpZGdldCBh
c3NvY2lhdGVkLAogICAgICAgICAvLyB3ZSdkIGxpa2UgdG8gRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZVByZXNzRXZlbnQgdG8gcGFzcyB0aGUgZXZlbnQgdG8gdGhlIHdpZGdldCBhbmQgdGh1cyB0
aGUKICAgICAgICAgLy8gZXZlbnQgdGFyZ2V0IG5vZGUgY2FuJ3Qgc3RpbGwgYmUgdGhlIHNoYWRv
dyBub2RlLgotICAgICAgICBpZiAobWV2LnRhcmdldE5vZGUoKS0+aXNTaGFkb3dSb290KCkgJiYg
bWV2LnRhcmdldE5vZGUoKS0+c2hhZG93SG9zdCgpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewor
ICAgICAgICBpZiAodGFyZ2V0Tm9kZShtZXYpLT5pc1NoYWRvd1Jvb3QoKSAmJiB0YXJnZXROb2Rl
KG1ldiktPnNoYWRvd0hvc3QoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKICAgICAgICAgICAg
IEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVz
dFJlcXVlc3Q6OkFjdGl2ZSk7CiAgICAgICAgICAgICBtZXYgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5wcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBkb2N1bWVudFBvaW50LCBtb3VzZUV2ZW50KTsK
ICAgICAgICAgfQpAQCAtMTQ0Niw5ICsxNDY1LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlRG91YmxlQ2xpY2tFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXYK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBtX2NsaWNrQ291bnQgPSBtb3VzZUV2ZW50LmNs
aWNrQ291bnQoKTsKLSAgICBib29sIHN3YWxsb3dNb3VzZVVwRXZlbnQgPSBkaXNwYXRjaE1vdXNl
RXZlbnQoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCwgbWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwg
bV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCBmYWxzZSk7CisgICAgYm9vbCBzd2FsbG93TW91c2VV
cEV2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIHRh
cmdldE5vZGUobWV2KSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCBmYWxzZSk7CiAK
LSAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0gbW91c2VFdmVudC5idXR0b24oKSAhPSBSaWdo
dEJ1dHRvbiAmJiBtZXYudGFyZ2V0Tm9kZSgpID09IG1fY2xpY2tOb2RlICYmIGRpc3BhdGNoTW91
c2VFdmVudChldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgbWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwg
bV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCB0cnVlKTsKKyAgICBib29sIHN3YWxsb3dDbGlja0V2
ZW50ID0gbW91c2VFdmVudC5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiB0YXJnZXROb2RlKG1l
dikgPT0gbV9jbGlja05vZGUgJiYgZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlj
a0V2ZW50LCB0YXJnZXROb2RlKG1ldiksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwg
dHJ1ZSk7CiAKICAgICBpZiAobV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZSkKICAgICAgICAgc3dh
bGxvd01vdXNlVXBFdmVudCA9IG1fbGFzdFNjcm9sbGJhclVuZGVyTW91c2UtPm1vdXNlVXAoKTsK
QEAgLTE1NzQsNyArMTU5Myw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIEhpCiAKICAgICBpZiAo
bmV3U3ViZnJhbWUpIHsKICAgICAgICAgLy8gVXBkYXRlIG92ZXIvb3V0IHN0YXRlIGJlZm9yZSBw
YXNzaW5nIHRoZSBldmVudCB0byB0aGUgc3ViZnJhbWUuCi0gICAgICAgIHVwZGF0ZU1vdXNlRXZl
bnRUYXJnZXROb2RlKG1ldi50YXJnZXROb2RlKCksIG1vdXNlRXZlbnQsIHRydWUpOworICAgICAg
ICB1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSh0YXJnZXROb2RlKG1ldiksIG1vdXNlRXZlbnQs
IHRydWUpOwogICAgICAgICAKICAgICAgICAgLy8gRXZlbnQgZGlzcGF0Y2ggaW4gdXBkYXRlTW91
c2VFdmVudFRhcmdldE5vZGUgbWF5IGhhdmUgY2F1c2VkIHRoZSBzdWJmcmFtZSBvZiB0aGUgdGFy
Z2V0CiAgICAgICAgIC8vIG5vZGUgdG8gYmUgZGV0YWNoZWQgZnJvbSBpdHMgRnJhbWVWaWV3LCBp
biB3aGljaCBjYXNlIHRoZSBldmVudCBzaG91bGQgbm90IGJlIHBhc3NlZC4KQEAgLTE1ODksOCAr
MTYwOCw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQsIEhpCiAgICAgICAgICAgICAgICAgLy8gaW4g
Y2FzZSB0aGUgcGFydGljdWxhciBwbHVnaW4gZG9lc24ndCBtYW5pcHVsYXRlIGN1cnNvciBhdCBh
bGwuIFRodXMsICBldmVuIGEgQ1NTIGN1cnNvciBzZXQgb24gYm9keSBoYXMgbm8KICAgICAgICAg
ICAgICAgICAvLyBlZmZlY3Qgb24gcGx1Z2lucyAod2hpY2ggbWF0Y2hlcyBGaXJlZm94KS4KICAg
ICAgICAgICAgICAgICBib29sIG92ZXJQbHVnaW5FbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1ldi50YXJnZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNIVE1MRWxl
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbCA9IHRvSFRNTEVs
ZW1lbnQobWV2LnRhcmdldE5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldE5vZGUo
bWV2KSAmJiB0YXJnZXROb2RlKG1ldiktPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAgICAg
ICAgICAgICBIVE1MRWxlbWVudCogZWwgPSB0b0hUTUxFbGVtZW50KHRhcmdldE5vZGUobWV2KSk7
CiAgICAgICAgICAgICAgICAgICAgIG92ZXJQbHVnaW5FbGVtZW50ID0gZWwtPmhhc1RhZ05hbWUo
YXBwbGV0VGFnKSB8fCBlbC0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IGVsLT5oYXNUYWdOYW1l
KGVtYmVkVGFnKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFvdmVy
UGx1Z2luRWxlbWVudCkgewpAQCAtMTYwNiw3ICsxNjI1LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVu
dCwgSGkKICAgICBpZiAoc3dhbGxvd0V2ZW50KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAK
LSAgICBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1vdXNl
bW92ZUV2ZW50LCBtZXYudGFyZ2V0Tm9kZSgpLCBmYWxzZSwgMCwgbW91c2VFdmVudCwgdHJ1ZSk7
CisgICAgc3dhbGxvd0V2ZW50ID0gZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3Vz
ZW1vdmVFdmVudCwgdGFyZ2V0Tm9kZShtZXYpLCBmYWxzZSwgMCwgbW91c2VFdmVudCwgdHJ1ZSk7
CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICAgICBpZiAoIXN3YWxsb3dFdmVudCkKICAgICAg
ICAgc3dhbGxvd0V2ZW50ID0gaGFuZGxlTW91c2VEcmFnZ2VkRXZlbnQobWV2KTsKQEAgLTE2NjEs
OSArMTY4MCw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAgICAgaWYgKHN1YmZyYW1lICYm
IHBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUobWV2LCBzdWJmcmFtZSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBzd2FsbG93TW91c2VVcEV2ZW50ID0gZGlzcGF0Y2hN
b3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRy
dWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgZmFsc2UpOworICAgIGJvb2wgc3dhbGxvd01v
dXNlVXBFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91c2V1cEV2ZW50
LCB0YXJnZXROb2RlKG1ldiksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgZmFsc2Up
OwogCi0gICAgYm9vbCBzd2FsbG93Q2xpY2tFdmVudCA9IG1fY2xpY2tDb3VudCA+IDAgJiYgbW91
c2VFdmVudC5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBtZXYudGFyZ2V0Tm9kZSgpID09IG1f
Y2xpY2tOb2RlICYmIGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkuY2xpY2tFdmVudCwg
bWV2LnRhcmdldE5vZGUoKSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCB0cnVlKTsK
KyAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0gbV9jbGlja0NvdW50ID4gMCAmJiBtb3VzZUV2
ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uICYmIHRhcmdldE5vZGUobWV2KSA9PSBtX2NsaWNr
Tm9kZSAmJiBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIHRhcmdl
dE5vZGUobWV2KSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBtb3VzZUV2ZW50LCB0cnVlKTsKIAogICAg
IGlmIChtX3Jlc2l6ZUxheWVyKSB7CiAgICAgICAgIG1fcmVzaXplTGF5ZXItPnNldEluUmVzaXpl
TW9kZShmYWxzZSk7CkBAIC0xNzQwLDcgKzE3NTksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXBk
YXRlRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJk
KgogICAgIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgbWV2ID0gcHJlcGFyZU1vdXNlRXZl
bnQocmVxdWVzdCwgZXZlbnQpOwogCiAgICAgLy8gRHJhZyBldmVudHMgc2hvdWxkIG5ldmVyIGdv
IHRvIHRleHQgbm9kZXMgKGZvbGxvd2luZyBJRSwgYW5kIHByb3BlciBtb3VzZW92ZXIvb3V0IGRp
c3BhdGNoKQotICAgIE5vZGUqIG5ld1RhcmdldCA9IG1ldi50YXJnZXROb2RlKCk7CisgICAgTm9k
ZSogbmV3VGFyZ2V0ID0gdGFyZ2V0Tm9kZShtZXYpOwogICAgIGlmIChuZXdUYXJnZXQgJiYgbmV3
VGFyZ2V0LT5pc1RleHROb2RlKCkpCiAgICAgICAgIG5ld1RhcmdldCA9IG5ld1RhcmdldC0+cGFy
ZW50Tm9kZSgpOwogICAgIGlmIChuZXdUYXJnZXQpCkBAIC0yMTUwLDEyICsyMTY5LDEyIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGV2ZW50KQogICAgICAgICAvLyBGSVhNRTogSW4gdGhlIGVkaXRhYmxlIGNhc2UsIHdv
cmQgc2VsZWN0aW9uIHNvbWV0aW1lcyBzZWxlY3RzIGNvbnRlbnQgdGhhdCBpc24ndCB1bmRlcm5l
YXRoIHRoZSBtb3VzZS4KICAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBub24tZWRpdGFi
bGUsIHdlIGRvIHdvcmQgc2VsZWN0aW9uIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVzZSB0aGUgY29u
dGV4dHVhbCBtZW51IGl0ZW1zCiAgICAgICAgIC8vIGF2YWlsYWJsZSBmb3IgdGV4dCBzZWxlY3Rp
b25zLiAgQnV0IG9ubHkgaWYgd2UncmUgYWJvdmUgdGV4dC4KLSAgICAgICAgJiYgKG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IChtZXYudGFyZ2V0Tm9kZSgpICYm
IG1ldi50YXJnZXROb2RlKCktPmlzVGV4dE5vZGUoKSkpKSB7CisgICAgICAgICYmIChtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKSB8fCAodGFyZ2V0Tm9kZShtZXYpICYm
IHRhcmdldE5vZGUobWV2KS0+aXNUZXh0Tm9kZSgpKSkpIHsKICAgICAgICAgbV9tb3VzZURvd25N
YXlTdGFydFNlbGVjdCA9IHRydWU7IC8vIGNvbnRleHQgbWVudSBldmVudHMgYXJlIGFsd2F5cyBh
bGxvd2VkIHRvIHBlcmZvcm0gYSBzZWxlY3Rpb24KICAgICAgICAgc2VsZWN0Q2xvc2VzdFdvcmRP
ckxpbmtGcm9tTW91c2VFdmVudChtZXYpOwogICAgIH0KIAotICAgIHN3YWxsb3dFdmVudCA9IGRp
c3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCwgbWV2LnRhcmdl
dE5vZGUoKSwgdHJ1ZSwgMCwgZXZlbnQsIGZhbHNlKTsKKyAgICBzd2FsbG93RXZlbnQgPSBkaXNw
YXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIHRhcmdldE5vZGUo
bWV2KSwgdHJ1ZSwgMCwgZXZlbnQsIGZhbHNlKTsKICAgICAKICAgICByZXR1cm4gc3dhbGxvd0V2
ZW50OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggZTY3MzgxMDllMTg5NjMy
YzYzYjEyZWIyMzdiY2RmZTE2ODcxMjc3Mi4uODY3Yzg5NDA3NGMzMWVhZDQzNGNkNmY0ZTdlNGUy
OWUwZjQzNTYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xNDMsNiArMTQz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SWdub3JlV2hlZWxFdmVudHMoYm9vbCk7CiAKICAg
ICBzdGF0aWMgRnJhbWUqIHN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShOb2RlKik7CisgICAgc3RhdGlj
IEZyYW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYpOwogCiAgICAgYm9vbCBzY3JvbGxPdmVyZmxvdyhTY3JvbGxEaXJlY3Rpb24s
IFNjcm9sbEdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUgPSAwKTsKICAgICBib29sIGxv
Z2ljYWxTY3JvbGxPdmVyZmxvdyhTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7CkBAIC0yNjEsMTMgKzI2MiwxNiBAQCBwcml2
YXRlOgogICAgIAogICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGVEcmFnZ2luZ0NsaXBi
b2FyZCgpIGNvbnN0OwogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0gICAgCisKICAg
ICBib29sIGV2ZW50QWN0aXZhdGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBjb25z
dDsKICAgICB2b2lkIHNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoY29uc3QgTW91c2VF
dmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogICAgIHZvaWQgc2VsZWN0Q2xvc2VzdFdvcmRPckxp
bmtGcm9tTW91c2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAK
ICAgICBib29sIGhhbmRsZU1vdXNlRG91YmxlQ2xpY2tFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmKTsKIAorICAgIHN0YXRpYyBOb2RlKiB0YXJnZXROb2RlKGNvbnN0IE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMmKTsKKyAgICBzdGF0aWMgTm9kZSogdGFyZ2V0Tm9kZShjb25zdCBI
aXRUZXN0UmVzdWx0Jik7CisKICAgICBib29sIGhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBN
b3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAgICAgYm9vbCBoYW5kbGVNb3VzZVByZXNz
RXZlbnRTaW5nbGVDbGljayhjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAg
ICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzRXZlbnREb3VibGVDbGljayhjb25zdCBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Nb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcAppbmRleCAwNDIyNjljZTA5MWNiYzQ3YTY3MzVl
MjZiMmE0YzczY2Y1Njk4NjFmLi5iMzcyY2ZmMDMwZGE4NmU1ZDcwZmE2OTNlODMyMDIwNDU2ZjQx
N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cy5jcHAKQEAgLTMyLDIxICszMiw2IEBAIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHM6Ok1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
CiAgICAgLCBtX2hpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdCkKIHsKIH0KLSAgICAgICAgCi1O
b2RlKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzOjp0YXJnZXROb2RlKCkgY29uc3QKLXsK
LSAgICBOb2RlKiBub2RlID0gbV9oaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpOwotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG5vZGUtPmluRG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIG5vZGU7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gbm9kZS0+cGFyZW50
RWxlbWVudCgpOwotICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmluRG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgICByZXR1cm4gbm9kZTsKLX0KIAogY29uc3QgSW50
UG9pbnQgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0czo6bG9jYWxQb2ludCgpIGNvbnN0CiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cy5oCmluZGV4IDhjMjg1NzQ5OTg4YTY1NGM4OGJkYTczNWM5MzNjZmE3NTM5OGExNzAuLmIzNTFm
OTIxNTY5YmRjYTlkMDJlNGVmNzA1MDNlNTBkYjkzNDQzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oCkBAIC0zNCw3ICszNCw2
IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQoKSBjb25z
dCB7IHJldHVybiBtX2V2ZW50OyB9CiAgICAgY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJl
c3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1faGl0VGVzdFJlc3VsdDsgfQotICAgIE5vZGUqIHRhcmdl
dE5vZGUoKSBjb25zdDsKICAgICBjb25zdCBJbnRQb2ludCBsb2NhbFBvaW50KCkgY29uc3Q7CiAg
ICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIoKSBjb25zdDsKICAgICBib29sIGlzT3ZlckxpbmsoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9FdmVudEhhbmRs
ZXJBbmRyb2lkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9FdmVudEhhbmRsZXJB
bmRyb2lkLmNwcAppbmRleCBlNzZlN2I1NjkwYmVmMzI4Y2ZmMzM3ODczZDc0OGZjZTljNzUxODVl
Li45N2U1YjM0Yjc2Mzg5OTQ2NDYxZTBiMTYyNTA3ZTgyNjNiYTg4YWI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuZHJvaWQvRXZlbnRIYW5kbGVyQW5kcm9pZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmRyb2lkL0V2ZW50SGFuZGxlckFuZHJvaWQuY3BwCkBAIC01
Myw3ICs1Myw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50VmlldygpCiBib29s
IEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCiB7CiAgICAgLy8gRmlndXJlIG91dCB3
aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRvLgotICAgIFJlbmRlck9iamVjdCogdGFyZ2V0
ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDog
MDsKKyAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IHRhcmdldE5vZGUoZXZlbnQpID8gdGFyZ2V0
Tm9kZShldmVudCktPnJlbmRlcmVyKCkgOiAwOwogICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQt
PmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gcGFzc01vdXNl
RG93bkV2ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9icmV3L0V2ZW50SGFuZGxlckJyZXcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9icmV3L0V2ZW50SGFuZGxlckJyZXcuY3BwCmluZGV4IGYzYWNl
YzZiM2QyNjZkODllN2RhZjJiZTRmNmM2ODQwYmNhMWUxY2IuLmFlNWQ4M2I0YzY2NGE4ODc5MTBl
M2ZhYjQ5YjQ2N2Q3YTFjOTY5ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYnJl
dy9FdmVudEhhbmRsZXJCcmV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRXZl
bnRIYW5kbGVyQnJldy5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmZv
Y3VzRG9jdW1lbnRWaWV3KCkKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3du
RXZlbnRUb1dpZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkK
IHsKICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0g
ICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJn
ZXROb2RlKCktPnJlbmRlcmVyKCkgOiAwOworICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gdGFy
Z2V0Tm9kZShldmVudCkgPyB0YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVyZXIoKSA6IDA7CiAgICAg
aWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldCh0
YXJnZXQpLT53aWRnZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9t
aXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21p
dW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCmluZGV4IDA5YjRkZmFjMTczMjJhYzliNzVkMTEx
MmRhZmQwYzJkZGNmNzBkYWUuLmZhZjRkNDc5NGM2NGMxNThkNjhiNGQ0ODFhMGMzMmYxYWYxY2I0
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5k
bGVyQ2hyb21pdW0uY3BwCkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNz
TW91c2VQcmVzc0V2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBt
CiAgICAgSW50UG9pbnQgcCA9IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhtZXYu
ZXZlbnQoKS5wb3MoKSk7CiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5jb250YWlucyhw
KSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcygKLSAgICAgICAgICAgIG1l
di50YXJnZXROb2RlKCktPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQobWV2LmxvY2FsUG9p
bnQoKSkpOworICAgICAgICAgICAgdGFyZ2V0Tm9kZShtZXYpLT5yZW5kZXJlcigpLT5wb3NpdGlv
bkZvclBvaW50KG1ldi5sb2NhbFBvaW50KCkpKTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBu
ZXdTZWxlY3Rpb24odmlzaWJsZVBvcyk7CiAgICAgICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAgICAgICBtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CkBAIC0xMDMsOSAr
MTAzLDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoUGxhdGZv
cm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBXaWRnZXQKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNz
V2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBldmVudCkKIHsKICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0
aGUgZXZlbnQgdG8uCi0gICAgaWYgKCFldmVudC50YXJnZXROb2RlKCkgfHwgIWV2ZW50LnRhcmdl
dE5vZGUoKS0+cmVuZGVyZXIoKSB8fCAhZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpLT5p
c1dpZGdldCgpKQorICAgIGlmICghdGFyZ2V0Tm9kZShldmVudCkgfHwgIXRhcmdldE5vZGUoZXZl
bnQpLT5yZW5kZXJlcigpIHx8ICF0YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVyZXIoKS0+aXNXaWRn
ZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZl
bnRUb1dpZGdldCh0b1JlbmRlcldpZGdldChldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkp
LT53aWRnZXQoKSk7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVu
ZGVyV2lkZ2V0KHRhcmdldE5vZGUoZXZlbnQpLT5yZW5kZXJlcigpKS0+d2lkZ2V0KCkpOwogfQog
CiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3
aWRnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJF
ZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcAppbmRl
eCBjMDc5NjE3NmExM2QxZWRkNjY2ZDBhNjZiNmYwZmZlY2FkMDBhZDJlLi4zYTNjNGRkMjA2MTY1
OGU4ZDBlYWQ3ZTU1YmJlY2VlOWRmOTYzNjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZWZs
L0V2ZW50SGFuZGxlckVmbC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6
OmZvY3VzRG9jdW1lbnRWaWV3KCkKIAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2
ZW50KQogewotICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8g
ZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDogMDsKKyAgICBSZW5kZXJPYmplY3QqIHRh
cmdldCA9IHRhcmdldE5vZGUoZXZlbnQpID8gdGFyZ2V0Tm9kZShldmVudCktPnJlbmRlcmVyKCkg
OiAwOwogCiAgICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRI
YW5kbGVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5j
cHAKaW5kZXggY2ViNzU2NTkzNWY1NTE0MDZhNWU0OGNmZDNmMjI4OThiZDA2MWI2ZS4uYWI1NGQ4
MzhkYmQ5ZGIyYjIwNDUxOThkYjEyZGIxYTljZTg3YmViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpmb2N1c0RvY3VtZW50VmlldygpCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdl
dE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYgZXZlbnQpCiB7CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2
ZW50IHRvLgotICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8g
ZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDogMDsKKyAgICBSZW5kZXJPYmplY3QqIHRh
cmdldCA9IHRhcmdldE5vZGUoZXZlbnQpID8gdGFyZ2V0Tm9kZShldmVudCktPnJlbmRlcmVyKCkg
OiAwOwogICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQodG9SZW5k
ZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2hh
aWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcAppbmRleCBlZDRlYTMyZjE0Zjc1ODdjMzkzOGZkMjFj
YWY5OWQ2NDMyNGM4OTI4Li41YzUzNjE0YTQwODA5MWI2Zjk0YzhkZGY4YzZkMDA2NzQ4ZDUzNGM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNw
cApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXco
KQogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQogewogICAgIC8vIEZpZ3Vy
ZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAgICBSZW5kZXJPYmplY3Qq
IHRhcmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVy
ZXIoKSA6IDA7CisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSB0YXJnZXROb2RlKGV2ZW50KSA/
IHRhcmdldE5vZGUoZXZlbnQpLT5yZW5kZXJlcigpIDogMDsKICAgICBpZiAoIXRhcmdldCB8fCAh
dGFyZ2V0LT5pc1dpZGdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHBh
c3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0KHRhcmdldCktPndpZGdldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQppbmRleCAzODA4
ODRiMThkYzA3YjIzNTg5NTgwNDY0ZDg5MTQxOWZkZmQ5N2Y2Li5kOTNjYzgyZjRkMTQ5NThhYTA3
YjhmMTJjY2VhY2I0MmI5NTFkMjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRI
YW5kbGVyTWFjLm1tCkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmZvY3Vz
RG9jdW1lbnRWaWV3KCkKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZl
bnRUb1dpZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKIHsK
ICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAg
UmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXRO
b2RlKCktPnJlbmRlcmVyKCkgOiAwOworICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gdGFyZ2V0
Tm9kZShldmVudCkgPyB0YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVyZXIoKSA6IDA7CiAgICAgaWYg
KCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIApAQCAtMzgxLDcgKzM4MSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVF
dmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEb3du
OiB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOworICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IHRhcmdldE5vZGUoZXZlbnQpOwogICAgICAgICAgICAgaWYgKCFu
b2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4
L0V2ZW50SGFuZGxlcld4LmNwcAppbmRleCA2NmJhZTAxMzQ3NmMzOTZkZWMzMTMzNmQwMzc4ODRl
ZjY5Y2M5MjU1Li5iYTJmOWNkNWJiNDU0OGM0YjE1ZTk3MzcwNmQ0MzNiYTg4ZDI5NWE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcApAQCAtNjMsMTAgKzYzLDEw
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VSZWxlYXNlRXZlbnRUb1N1YmZyYW1lKE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdl
dE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYgZXZlbnQpCiB7CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2
ZW50IHRvLgotICAgIGlmICghZXZlbnQudGFyZ2V0Tm9kZSgpIHx8ICFldmVudC50YXJnZXROb2Rl
KCktPnJlbmRlcmVyKCkgfHwgIWV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNXaWRn
ZXQoKSkKKyAgICBpZiAoIXRhcmdldE5vZGUoZXZlbnQpIHx8ICF0YXJnZXROb2RlKGV2ZW50KS0+
cmVuZGVyZXIoKSB8fCAhdGFyZ2V0Tm9kZShldmVudCktPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2
ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQoZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigp
KS0+d2lkZ2V0KCkpOworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1Jl
bmRlcldpZGdldCh0YXJnZXROb2RlKGV2ZW50KS0+cmVuZGVyZXIoKSktPndpZGdldCgpKTsKIH0K
IAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJl
bmRlcldpZGdldCogcmVuZGVyV2lkZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGNhOTQ0YTBhNmM5
MmMyNzgxOGIwOWIyMzhhZTVkNmE2MmRhNDMzY2YuLjJkYWRmZDMxOWEwMTE0MTNjMDY2ZDA3NzAw
MTIwNDhjOTgzZGJjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0w
NC0wNyAgQWxpY2UgQm94aGFsbCAgPGFib3hoYWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzOjp0YXJnZXROb2RlKCkgbWV0aG9kIG9uIHRvIEV2ZW50SGFuZGxl
ci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTIx
CisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfZm9yd2FyZF9jb250ZXh0X21lbnVfZXZlbnQpOgorICAgICAgICBDYWxsIHN1YmZy
YW1lRm9ySGl0VGVzdFJlc3VsdCByYXRoZXIgdGhhbiBzdWJmcmFtZUZvclRhcmdldE5vZGUgYXMg
dGhlIHRhcmdldE5vZGUoKQorICAgICAgICBtZXRob2QgaGFzIG1vdmVkIG9uIHRvIEV2ZW50SGFu
ZGxlci4KKwogMjAxMS0wNC0wNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggZDIwOWVmZTQxODU2YWIwMzM0YzI3YmZj
MTdkZjIwMTg3NWUwOWU3ZS4uODVhZDkwNGE2ODAwMmYzZWNlNzgwMzllMjZhYjljMDY5ZTQzMGVk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMzE5
LDcgKzMxOSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZm9yd2FyZF9jb250
ZXh0X21lbnVfZXZlbnQoV2ViS2l0V2ViVmlldyogd2ViVmllCiAgICAgICAgIEludFBvaW50IHBv
aW50ID0gbWFpbkZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZlbnQucG9zKCkpOwog
ICAgICAgICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1ldiA9IG1haW5GcmFtZS0+ZG9j
dW1lbnQoKS0+cHJlcGFyZU1vdXNlRXZlbnQocmVxdWVzdCwgcG9pbnQsIGV2ZW50KTsKIAotICAg
ICAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBFdmVudEhhbmRsZXI6OnN1YmZyYW1lRm9yVGFyZ2V0
Tm9kZShtZXYudGFyZ2V0Tm9kZSgpKTsKKyAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gRXZl
bnRIYW5kbGVyOjpzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQobWV2KTsKICAgICAgICAgaWYgKCF0
YXJnZXRGcmFtZSkKICAgICAgICAgICAgIHRhcmdldEZyYW1lID0gbWFpbkZyYW1lOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>