<?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>37848</bug_id>
          
          <creation_ts>2010-04-20 03:54:32 -0700</creation_ts>
          <short_desc>WCSS: -wap-input-format  and -wap-input-required not supported.</short_desc>
          <delta_ts>2010-05-05 23:54:38 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Charles Wei">charles.wei</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>charles.wei</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mifenton</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>214560</commentid>
    <comment_count>0</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-04-20 03:54:32 -0700</bug_when>
    <thetext>WebKit has partial WCSS support, but doesn&apos;t support -wap-input-format  and -wap-input-required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214562</commentid>
    <comment_count>1</comment_count>
      <attachid>53794</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-04-20 04:13:25 -0700</bug_when>
    <thetext>Created attachment 53794
add WCSS -wap-input-format and -wap-input-required support

This patch adds -wap-input-format and -wap-input-required support to WebKit.

WebKit already has partial WCSS support,  but lack the support for -wap-input-format and -wap-input-required.

-wap-input-format  defines a mask of value space an input can take, like &quot;*N&quot; indicates only numbers will be accepted.

-wap-input-required specifies if an input control is requied.  if true,  the form can&apos;t be submitted without having a valid value for the input control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215197</commentid>
    <comment_count>2</comment_count>
      <attachid>53930</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-04-21 01:29:04 -0700</bug_when>
    <thetext>Created attachment 53930
resubmit of the patch after addressing reviewer&apos;s comments

Resubmit the patch after addressing the reviewer&apos;s comments as below : 

1730	#if ENABLE(WCSS)
1731	PassRefPtr&lt;CSSValue&gt; CSSParser::parseWCSSInputProperty()
1732	{
1733	    RefPtr&lt;CSSValue&gt; parsedValue = 0;
1734	    CSSParserValue* value = m_valueList-&gt;current();
1735	    String inputProperty;
1736	    while (value) {
1737	        if (value-&gt;unit == CSSPrimitiveValue::CSS_STRING || value-&gt;unit == CSSPrimitiveValue::CSS_IDENT)
1738	            inputProperty = String(value-&gt;string);
1739	
1740	        if (!inputProperty.isEmpty())
1741	           parsedValue = CSSPrimitiveValue::create(inputProperty, CSSPrimitiveValue::CSS_STRING);
1742	
1743	        value = m_valueList-&gt;next();
1744	    }
1745	
1746	    return parsedValue;
1747	}
1748	#endif

In this block, is it expected that only the last value will be the parsed value?  On my sample page there is only one, but if only one is allowed, there&apos;s no need for a while loop right?  Just want to make sure that this won&apos;t cause unexpected behavior.

====&gt; Fixed 

205     Range* range = element-&gt;document()-&gt;frame()-&gt;selection()-&gt;selection().toNormalizedRange().get();

This would be better as a PassRef&lt;Range&gt;.

====&gt; Fixed 

Some minor nits that I&apos;ve seen so far (writing here so I don&apos;t forget):
[3:28:43 PM] Dan Bates:  5322         if (m_element-&gt;hasTagName(WebCore::inputTag) &amp;&amp; primitiveValue) {
[3:28:43 PM] Dan Bates: And
[3:28:44 PM] Dan Bates: 5329         if (m_element-&gt;isFormControlElement() &amp;&amp; primitiveValue) {
[3:28:53 PM] Dan Bates: Why not check primitiveValue first?
[3:28:57 PM] Dan Bates:  5331             bool required = (primitiveValue-&gt;getStringValue() == &quot;true&quot;) ? true : false;
[3:29:11 PM] Dan Bates: Can be rewritten:  bool required = primitiveValue-&gt;getStringValue() == &quot;true&quot;;

====&gt; Fixed 


To factor it out since it is shared by WMLInputElement
====&gt; Fixed

#include &quot;Chrome.h&quot;
&gt;  #include &quot;ChromeClient.h&quot;
&gt; +
&gt; +#if ENABLE(WCSS)
&gt; +#include &quot;CSSPropertyNames.h&quot;
&gt; +#include &quot;CSSRule.h&quot;
&gt; +#include &quot;CSSRuleList.h&quot;
&gt; +#include &quot;CSSStyleRule.h&quot;
&gt; +#include &quot;CSSStyleSelector.h&quot;
&gt; +#endif
&gt; +
&gt;
&gt; These should be before the Chrome.h to be sorted alphabetically.

====&gt; Fixed



&gt;Also, I would expect the reviewer to ask you to remove inputCharsCount if it is always cursorPosition + 1 and the way it&apos;s used could just be updated to be
&gt;
&gt; if (cursorPosition &gt;= data.maxInputCharsAllowed())
&gt;
&gt; I will try to apply the patch shortly, just hoping to get it reviewed &amp; in quickly.

====&gt; Fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215713</commentid>
    <comment_count>3</comment_count>
      <attachid>53930</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-04-21 23:11:54 -0700</bug_when>
    <thetext>Comment on attachment 53930
resubmit of the patch after addressing reviewer&apos;s comments


&gt; +#if ENABLE(WCSS)
&gt; +void HTMLInputElement::setWapInputFormat(String&amp; mask)
&gt; +{
&gt; +    String validateMask = validateInputMask(m_data, mask);
&gt; +    if (!validateMask.isEmpty())
&gt; +        m_data.setInputFormatMask(validateMask);
&gt; +}
&gt; +#endif

I think the argument to this function should be const.

&gt; +    virtual InputElementData data() { return m_data; }

 These functions should probably be const?



The rest looks good.  r- for those two minor fixes, then r+ if no concerns from others between now and morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215814</commentid>
    <comment_count>4</comment_count>
      <attachid>54050</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-04-22 03:49:55 -0700</bug_when>
    <thetext>Created attachment 54050
Resubmission after addressing reviewer&apos;s comments

Resubmission after addressing the reviewer&apos;s comments  -- adding const for some functions which are const functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215815</commentid>
    <comment_count>5</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-04-22 03:51:57 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 53930 [details])
&gt; 
&gt; &gt; +#if ENABLE(WCSS)
&gt; &gt; +void HTMLInputElement::setWapInputFormat(String&amp; mask)
&gt; &gt; +{
&gt; &gt; +    String validateMask = validateInputMask(m_data, mask);
&gt; &gt; +    if (!validateMask.isEmpty())
&gt; &gt; +        m_data.setInputFormatMask(validateMask);
&gt; &gt; +}
&gt; &gt; +#endif
&gt; 
&gt; I think the argument to this function should be const.

====&gt; mask can&apos;t be const, because we need to change it inside the function 

&gt; 
&gt; &gt; +    virtual InputElementData data() { return m_data; }
&gt; 
&gt;  These functions should probably be const?
&gt; 
====&gt; Fixed with the new patch.
&gt; 
&gt; 
&gt; The rest looks good.  r- for those two minor fixes, then r+ if no concerns from
&gt; others between now and morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216687</commentid>
    <comment_count>6</comment_count>
      <attachid>54050</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-23 21:13:57 -0700</bug_when>
    <thetext>Comment on attachment 54050
Resubmission after addressing reviewer&apos;s comments

Rejecting patch 54050 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Running build-dumprendertree
Compiling Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 12725 test cases.
fast/wcss/wap-input-format.xhtml -&gt; failed

Exiting early after 1 failures. 8914 tests run.
158.44s total testing time

8913 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
4 test cases (&lt;1%) had stderr output

Full output: http://webkit-commit-queue.appspot.com/results/1803086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216870</commentid>
    <comment_count>7</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-04-25 18:30:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 54050 [details])
&gt; Rejecting patch 54050 from commit-queue.
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;,
&gt; &apos;--exit-after-n-failures=1&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
&gt; Running build-dumprendertree
&gt; Compiling Java tests
&gt; make: Nothing to be done for `default&apos;.
&gt; Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
&gt; Testing 12725 test cases.
&gt; fast/wcss/wap-input-format.xhtml -&gt; failed
&gt; 
&gt; Exiting early after 1 failures. 8914 tests run.
&gt; 158.44s total testing time
&gt; 
&gt; 8913 test cases (99%) succeeded
&gt; 1 test case (&lt;1%) had incorrect layout
&gt; 4 test cases (&lt;1%) had stderr output
&gt; 
&gt; Full output: http://webkit-commit-queue.appspot.com/results/1803086


This test case is only for WCSS , you need to to enable WCSS to pass.  In this case, how to make this test  case conditional (for WCSS)  ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216872</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-25 18:35:41 -0700</bug_when>
    <thetext>We can make directories conditional with hacks inside run-webkit-tests (old-run-webkit-tests specifically).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216873</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-25 18:36:28 -0700</bug_when>
    <thetext>See how this is done for SVG, WML, etc. by searching in old-run-webkit-tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216874</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-25 18:38:38 -0700</bug_when>
    <thetext>An example from WML:
http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/old-run-webkit-tests#L496
http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitperl/features.pm

I&apos;ve not yet added this support to new-run-webkit-tests, so you&apos;re off the hook there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218914</commentid>
    <comment_count>11</comment_count>
      <attachid>54685</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-04-29 02:31:36 -0700</bug_when>
    <thetext>Created attachment 54685
make the test cases conditional for WCSS

Make the test cases conditional for WCSS .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219283</commentid>
    <comment_count>12</comment_count>
      <attachid>54685</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-04-29 17:05:13 -0700</bug_when>
    <thetext>Comment on attachment 54685
make the test cases conditional for WCSS

Seems to do as requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219782</commentid>
    <comment_count>13</comment_count>
      <attachid>54685</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-01 23:49:22 -0700</bug_when>
    <thetext>Comment on attachment 54685
make the test cases conditional for WCSS

Rejecting patch 54685 from commit-queue.

Failed to run &quot;[u&apos;git&apos;, u&apos;svn&apos;, u&apos;dcommit&apos;]&quot; exit_code: 1
Last 500 characters of output:
ment.h
	M	WebKitTools/ChangeLog
	M	WebKitTools/Scripts/old-run-webkit-tests
	M	WebKitTools/Scripts/webkitperl/features.pm
A repository hook failed: MERGE request failed on &apos;/repository/webkit/trunk&apos;: Commit blocked by pre-commit hook (exit code 1) with output:
svnlook: Can&apos;t write to stream: Broken pipe

    The following ChangeLog files contain OOPS:

        trunk/WebKitTools/ChangeLog

    Please don&apos;t ever say &quot;OOPS&quot; in a ChangeLog file.
 at /usr/local/git/libexec/git-core/git-svn line 570


Full output: http://webkit-commit-queue.appspot.com/results/2040001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219966</commentid>
    <comment_count>14</comment_count>
      <attachid>54050</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-02 19:15:19 -0700</bug_when>
    <thetext>Comment on attachment 54050
Resubmission after addressing reviewer&apos;s comments

Cleared George Staikos&apos;s review+ from obsolete attachment 54050 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220454</commentid>
    <comment_count>15</comment_count>
      <attachid>54991</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-05-03 21:19:06 -0700</bug_when>
    <thetext>Created attachment 54991
patch resubmission

Change Log update to have the reviewer instead of &quot;Reviewed by nobody(OOPs)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220456</commentid>
    <comment_count>16</comment_count>
      <attachid>54992</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-05-03 21:23:08 -0700</bug_when>
    <thetext>Created attachment 54992
Resubmission fixing the reviewer info

resubmit fixing the reviewer info , and obsolete the old  patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220851</commentid>
    <comment_count>17</comment_count>
      <attachid>54992</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-04 16:09:53 -0700</bug_when>
    <thetext>Comment on attachment 54992
Resubmission fixing the reviewer info

Rejecting patch 54992 from review queue.

charles.wei@torchmobile.com.cn does not have reviewer permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/committers.py.

- If you do not have reviewer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have reviewer rights please correct the error in WebKitTools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  Due to bug 30084 the commit-queue will require a restart after your change.  Please contact eseidel@chromium.org to request a commit-queue restart.  After restart the commit-queue will correctly respect your reviewer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220942</commentid>
    <comment_count>18</comment_count>
      <attachid>54992</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2010-05-04 19:24:13 -0700</bug_when>
    <thetext>Comment on attachment 54992
Resubmission fixing the reviewer info

This was already r+.  Not sure how this happened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220960</commentid>
    <comment_count>19</comment_count>
      <attachid>54992</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-04 22:11:35 -0700</bug_when>
    <thetext>Comment on attachment 54992
Resubmission fixing the reviewer info

Rejecting patch 54992 from commit-queue.

Failed to run &quot;[u&apos;git&apos;, u&apos;svn&apos;, u&apos;dcommit&apos;]&quot; exit_code: 1
Last 500 characters of output:
ment.h
	M	WebKitTools/ChangeLog
	M	WebKitTools/Scripts/old-run-webkit-tests
	M	WebKitTools/Scripts/webkitperl/features.pm
A repository hook failed: MERGE request failed on &apos;/repository/webkit/trunk&apos;: Commit blocked by pre-commit hook (exit code 1) with output:
svnlook: Can&apos;t write to stream: Broken pipe

    The following ChangeLog files contain OOPS:

        trunk/WebKitTools/ChangeLog

    Please don&apos;t ever say &quot;OOPS&quot; in a ChangeLog file.
 at /usr/local/git/libexec/git-core/git-svn line 570


Full output: http://webkit-commit-queue.appspot.com/results/2109031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221029</commentid>
    <comment_count>20</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-05-05 02:32:09 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 54992 [details])
&gt; Rejecting patch 54992 from commit-queue.
&gt; 
&gt; Failed to run &quot;[u&apos;git&apos;, u&apos;svn&apos;, u&apos;dcommit&apos;]&quot; exit_code: 1
&gt; Last 500 characters of output:
&gt; ment.h
&gt;     M    WebKitTools/ChangeLog
&gt;     M    WebKitTools/Scripts/old-run-webkit-tests
&gt;     M    WebKitTools/Scripts/webkitperl/features.pm
&gt; A repository hook failed: MERGE request failed on &apos;/repository/webkit/trunk&apos;:
&gt; Commit blocked by pre-commit hook (exit code 1) with output:
&gt; svnlook: Can&apos;t write to stream: Broken pipe
&gt; 
&gt;     The following ChangeLog files contain OOPS:
&gt; 
&gt;         trunk/WebKitTools/ChangeLog
&gt; 
&gt;     Please don&apos;t ever say &quot;OOPS&quot; in a ChangeLog file.
&gt;  at /usr/local/git/libexec/git-core/git-svn line 570
&gt; 
&gt; 
&gt; Full output: http://webkit-commit-queue.appspot.com/results/2109031



That&apos;s really frustrating.  I submitted many patches before, all with &quot;Reviewed by NOBODY(OOPS!)&quot;,  and they were landed.    When I submit my patch , I don&apos;t know who is going to review it and land it , so I have to leave it there.

Here&apos;s what the it say at http://webkit.org/coding/contributing.html:

ChangeLog files
ChangeLogs are simple text files which provide historical documentation for all changes to the WebKit project. ...  Don&apos;t worry about the &quot;Reviewed by NOBODY (OOPS!)&quot; line, the person landing your patch will fill this in.


I suppose the submitter is not supposed to change that ?  Please elaborate who is going to replace the &quot;OOPs&quot;.

Thanks 

Charles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221371</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 17:29:42 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 54992 [details])
&gt; This was already r+.  Not sure how this happened.

If you look at the history (link on the top right of the page):
https://bugs.webkit.org/show_activity.cgi?id=37848

Then you see that Charles set r+.  The commit-queue of course rejected the r+.  It&apos;s possible to use the commit-queue without setting r+ and just setting cq+.  However then the commit-queue will not attempt to fill in the reviewer line for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221375</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-05 17:33:01 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; &gt;     The following ChangeLog files contain OOPS:
&gt; &gt; 
&gt; &gt;         trunk/WebKitTools/ChangeLog
&gt; &gt; 
&gt; &gt;     Please don&apos;t ever say &quot;OOPS&quot; in a ChangeLog file.
&gt; &gt;  at /usr/local/git/libexec/git-core/git-svn line 570

If you look at the file in question (WebKitTools/ChangeLog) in the patch (attachment 54992), note that it has OOPS twice:

+        Reviewed by NOBODY (OOPS!).
+        Need a short description and bug URL (OOPS!)

The reviewed by OOPS is expected.  If you leave that line as-is, the commit-queue will fill in the reviewer with whoever set r+ on the patch.

The second one is NOT expected.  You should fill that line in with a short description of the patch as well as explanations of testing, etc.

&gt; That&apos;s really frustrating.  I submitted many patches before, all with &quot;Reviewed
&gt; by NOBODY(OOPS!)&quot;,  and they were landed.    When I submit my patch , I don&apos;t
&gt; know who is going to review it and land it , so I have to leave it there.
&gt; 
&gt; Here&apos;s what the it say at http://webkit.org/coding/contributing.html:
&gt; 
&gt; ChangeLog files
&gt; ChangeLogs are simple text files which provide historical documentation for all
&gt; changes to the WebKit project. ...  Don&apos;t worry about the &quot;Reviewed by NOBODY
&gt; (OOPS!)&quot; line, the person landing your patch will fill this in.

I think that our current behavior of using OOPS lines to mean two different things is bad and should be changed.  However, it is what it is for now. Hopefully the above explanation helped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221450</commentid>
    <comment_count>23</comment_count>
      <attachid>55198</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2010-05-05 19:55:42 -0700</bug_when>
    <thetext>Created attachment 55198
fixes changelog problem

This patch fixes all the ChangeLog problems in last submission.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221530</commentid>
    <comment_count>24</comment_count>
      <attachid>55198</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-05 23:54:31 -0700</bug_when>
    <thetext>Comment on attachment 55198
fixes changelog problem

Clearing flags on attachment: 55198

Committed r58867: &lt;http://trac.webkit.org/changeset/58867&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221531</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-05 23:54:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53794</attachid>
            <date>2010-04-20 04:13:25 -0700</date>
            <delta_ts>2010-04-21 01:29:04 -0700</delta_ts>
            <desc>add WCSS -wap-input-format and -wap-input-required support</desc>
            <filename>37848.patch</filename>
            <type>text/plain</type>
            <size>26105</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Nzg4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDQtMjAgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9y
Y2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzg0OAor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV0NTUyAtd2FwLWlucHV0LWZvcm1hdCBhbmQgLXdhcC1p
bnB1dC1yZXF1aXJlZCBzdXBwb3J0LgorICAgICAgICAtd2FwLWlucHV0LWZvcm1hdCBkZWZpbmVz
IGEgbWFzayB0aGF0IGZpbHRlcnMgdGhlIGlucHV0IGZvciBhbiBpbnB1dCBjb250cm9sCisgICAg
ICAgIC13YXAtaW5wdXQtcmVxdWlyZWQgc3BlY2lmaWVzIGlmIGFuIGlucHV0IGNvbnRyb2wgaXMg
cmVxdWlyZWQsIGlmIHJlcXVpcmVkLCAKKyAgICAgICAgaXQgbXVzdCBiZSBmaWxsZWQgd2l0aCBz
b21lIHZhbGlkIHZhbHVlIGJlZm9yZSBzdWJtaXR0ZWQuCisKKyAgICAgICAgVGVzdHM6IGZhc3Qv
d2Nzcy93YXAtaW5wdXQtZm9ybWF0LnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3djc3Mvd2Fw
LWlucHV0LXJlcXVpcmVkLnhodG1sCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkpOgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKiBjc3Mv
V0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5wdXRFbGVtZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OklucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6SW5wdXRFbGVtZW50RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpmb3JtYXRDb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JQ
b3NpdGlvblRvTWFza0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6aXND
b25mb3JtVG9JbnB1dE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50Ojp2YWxp
ZGF0ZUlucHV0TWFzayk6CisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6aW5wdXRGb3JtYXRNYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudERhdGE6OnNldElucHV0Rm9ybWF0TWFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjptYXhJbnB1dENoYXJzQWxsb3dlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjpzZXRNYXhJbnB1dENoYXJzQWxsb3dlZCk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OnNldFdhcElucHV0Rm9ybWF0KToKKyAgICAgICAgKiBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRhdGEp
OgorCiAyMDEwLTA0LTIwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNTc4ODAuCkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAJKHJldmlzaW9uIDU3ODc5KQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY5Myw2ICsxNjkzLDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKGludCBwcm9wSWQsIGIKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZToKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VmFyaWFibGVEZWNsYXJhdGlvbkJsb2NrOgogICAgICAg
ICByZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdh
cElucHV0Rm9ybWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dFJlcXVpcmVkOgorICAg
ICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlV0NTU0lucHV0UHJvcGVydHkoKTsKKyAgICAgICAgYnJl
YWs7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0
dXJuIHBhcnNlU1ZHVmFsdWUocHJvcElkLCBpbXBvcnRhbnQpOwpAQCAtMTcyMSw2ICsxNzI4LDI2
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoV0NTUykKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSgpCit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBw
YXJzZWRWYWx1ZSA9IDA7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKKyAgICBTdHJpbmcgaW5wdXRQcm9wZXJ0eTsKKyAgICB3aGlsZSAodmFsdWUp
IHsKKyAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HIHx8IHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAg
ICAgICAgICBpbnB1dFByb3BlcnR5ID0gU3RyaW5nKHZhbHVlLT5zdHJpbmcpOworCisgICAgICAg
IGlmICghaW5wdXRQcm9wZXJ0eS5pc0VtcHR5KCkpCisgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyk7CisKKyAgICAgICAgdmFsdWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwor
ICAgIH0KKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKyNlbmRpZgorCiB2b2lkIENTU1Bh
cnNlcjo6YWRkRmlsbFZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHJ2YWwpCiB7CiAgICAgaWYgKGx2YWwpIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiA1
Nzg3OSkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTEzOSw2ICsxNDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOwogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoV0NTUykKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VXQ1NTSW5w
dXRQcm9wZXJ0eSgpOworI2VuZGlmCisKICAgICAgICAgLy8gQ1NTMyBQYXJzaW5nIFJvdXRpbmVz
IChmb3IgcHJvcGVydGllcyBzcGVjaWZpYyB0byBDU1MzKQogICAgICAgICBib29sIHBhcnNlU2hh
ZG93KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKICAgICAgICAgYm9vbCBwYXJzZUJvcmRl
ckltYWdlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50LCBSZWZQdHI8Q1NTVmFsdWU+Jik7Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gNTc4NzkpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI5NCw2ICs1Mjk0
LDIzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VmFyaWFibGVEZWNsYXJhdGlvbkJsb2NrOgogICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKFdD
U1MpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0Rm9ybWF0OgorICAgICAgICBpZiAobV9l
bGVtZW50LT5oYXNUYWdOYW1lKFdlYkNvcmU6OmlucHV0VGFnKSAmJiBwcmltaXRpdmVWYWx1ZSkg
eworICAgICAgICAgICAgU3RyaW5nIG1hc2sgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2VsZW1l
bnQpLT5zZXRXYXBJbnB1dEZvcm1hdChtYXNrKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRSZXF1aXJlZDoKKyAgICAgICAgaWYgKG1f
ZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSAmJiBwcmltaXRpdmVWYWx1ZSkgeworICAg
ICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPihtX2VsZW1lbnQpOworICAgICAgICAgICAgYm9vbCByZXF1
aXJlZCA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSA9PSAidHJ1ZSIpID8gdHJ1
ZSA6IGZhbHNlOworICAgICAgICAgICAgZWxlbWVudC0+c2V0UmVxdWlyZWQocmVxdWlyZWQpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyNlbmRpZiAKKwogI2lmIEVOQUJMRShTVkcpCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgLy8gVHJ5IHRoZSBTVkcgcHJvcGVydGllcwpJbmRleDogV2Vi
Q29yZS9jc3MvV0NTU1Byb3BlcnR5TmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
V0NTU1Byb3BlcnR5TmFtZXMuaW4JKHJldmlzaW9uIDU3ODc5KQorKysgV2ViQ29yZS9jc3MvV0NT
U1Byb3BlcnR5TmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1IEBACistd2FwLWlu
cHV0LWZvcm1hdAorLXdhcC1pbnB1dC1yZXF1aXJlZAogLXdhcC1tYXJxdWVlLWRpcgogLXdhcC1t
YXJxdWVlLWxvb3AKIC13YXAtbWFycXVlZS1zcGVlZApJbmRleDogV2ViQ29yZS9kb20vSW5wdXRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA1Nzg3OSkKKysrIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDYgKzI0LDE1IEBACiAjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKwor
I2lmIEVOQUJMRShXQ1NTKQorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRl
ICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHls
ZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjZW5kaWYKKwogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCkBAIC0xMzgsNiArMTQ3LDE0IEBAIHZvaWQgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21S
ZW5kZXJlcigKIAogU3RyaW5nIElucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZShjb25zdCBJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQogewor
I2lmIEVOQUJMRShXQ1NTKQorICAgIElucHV0RWxlbWVudERhdGEgZGF0YSA9IGNvbnN0X2Nhc3Q8
SW5wdXRFbGVtZW50Kj4oaW5wdXRFbGVtZW50KS0+ZGF0YSgpOworICAgIGlmICghaXNDb25mb3Jt
VG9JbnB1dE1hc2soZGF0YSwgcHJvcG9zZWRWYWx1ZSkpIHsKKyAgICAgICAgaWYgKGlzQ29uZm9y
bVRvSW5wdXRNYXNrKGRhdGEsIGRhdGEudmFsdWUoKSkpCisgICAgICAgICAgICByZXR1cm4gZGF0
YS52YWx1ZSgpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorI2VuZGlmCiAgICAg
cmV0dXJuIElucHV0RWxlbWVudDo6c2FuaXRpemVVc2VySW5wdXRWYWx1ZShpbnB1dEVsZW1lbnQs
IHByb3Bvc2VkVmFsdWUsIHNfbWF4aW11bUxlbmd0aCk7CiB9CiAKQEAgLTE1MCw2ICsxNjcsNyBA
QCBTdHJpbmcgSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZhCiAgICAgc3RyaW5nLnJl
cGxhY2UoIlxyXG4iLCAiICIpOwogICAgIHN0cmluZy5yZXBsYWNlKCdccicsICcgJyk7CiAgICAg
c3RyaW5nLnJlcGxhY2UoJ1xuJywgJyAnKTsKKyAgICAKIAogICAgIHVuc2lnbmVkIG5ld0xlbmd0
aCA9IG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMoc3RyaW5nLCBtYXhMZW5ndGgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7ICsraSkgewpAQCAtMTgzLDYg
KzIwMSwxOCBAQCB2b2lkIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VyCiAKICAg
ICAvLyBUcnVuY2F0ZSB0aGUgaW5zZXJ0ZWQgdGV4dCB0byBhdm9pZCB2aW9sYXRpbmcgdGhlIG1h
eExlbmd0aCBhbmQgb3RoZXIgY29uc3RyYWludHMuCiAgICAgQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQqIHRleHRFdmVudCA9IHN0YXRpY19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZl
bnQpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIFJhbmdlKiByYW5nZSA9IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpOworICAgIFN0cmluZyBjYW5kaWRhdGVTdHJpbmcgPSB0b1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZShlbGVtZW50LT5yZW5kZXJlcigpKS0+dGV4dCgpOworICAgIGlmIChzZWxl
Y3Rpb25MZW5ndGgpCisgICAgICAgIGNhbmRpZGF0ZVN0cmluZy5yZXBsYWNlKHJhbmdlLT5zdGFy
dE9mZnNldCgpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIHRleHRFdmVudC0+dGV4dCgpKTsKKyAgICBl
bHNlCisgICAgICAgIGNhbmRpZGF0ZVN0cmluZy5pbnNlcnQodGV4dEV2ZW50LT50ZXh0KCksIHJh
bmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGlucHV0
RWxlbWVudC0+ZGF0YSgpLCBjYW5kaWRhdGVTdHJpbmcpKSB7CisgICAgICAgIHRleHRFdmVudC0+
c2V0VGV4dCgiIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyNlbmRpZgogICAgIHRleHRF
dmVudC0+c2V0VGV4dChzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGlucHV0RWxlbWVudCwgdGV4dEV2
ZW50LT50ZXh0KCksIGFwcGVuZGFibGVMZW5ndGgpKTsKIH0KIApAQCAtMjM0LDYgKzI2NCwxMSBA
QCBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1lbnREYXRhKCkKICAgICAsIG1fbWF4TGVuZ3Ro
KElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25T
dGFydCgtMSkKICAgICAsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKC0xKQorI2lmIEVOQUJMRShXQ1NT
KQorICAgICwgbV9pbnB1dEZvcm1hdE1hc2soIiptIikKKyAgICAsIG1fbWF4SW5wdXRDaGFyc0Fs
bG93ZWQoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCisjZW5kaWYKKyAgICAKIHsKIH0K
IApAQCAtMjU1LDQgKzI5MCwxMzcgQEAgSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVudChFbGVt
ZW50KiBlbAogICAgIHJldHVybiAwOwogfQogCisjaWYgRU5BQkxFKFdDU1MpCitzdGF0aWMgaW5s
aW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybWF0Q29kZXMoKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBjb2RlcywgKCJBYU5uWHhNbSIpKTsKKyAgICByZXR1cm4g
Y29kZXM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KGNv
bnN0IFN0cmluZyYgaW5wdXRGb3JtYXRNYXNrLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbikKK3sK
KyAgICBVQ2hhciBtYXNrOworICAgIGludCBpbmRleCA9IC0xOworICAgIGRvIHsKKyAgICAgICAg
bWFzayA9IGlucHV0Rm9ybWF0TWFza1srK2luZGV4XTsKKyAgICAgICAgaWYgKG1hc2sgPT0gJ1xc
JykKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgIGVsc2UgaWYgKG1hc2sgPT0gJyonIHx8
IChpc0FTQ0lJRGlnaXQobWFzaykgJiYgbWFzayAhPSAnMCcpKSB7CisgICAgICAgICAgICBpbmRl
eCA9IGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0gd2hpbGUgKGN1cnNvclBvc2l0aW9uLS0pOworCisgICAgcmV0dXJuIGlu
ZGV4OworfQorCitib29sIElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3Qg
SW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBpbnB1dENoYXJzKQoreworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dENoYXJzLmxlbmd0aCgpOyArK2kpCisgICAg
ICAgIGlmICghaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0YSwgaW5wdXRDaGFyc1tpXSwgaSwgaSAr
IDEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50
RGF0YSYgZGF0YSwgVUNoYXIgaW5DaGFyLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbiwgdW5zaWdu
ZWQgaW5wdXRDaGFyc0NvdW50KQoreworICAgIFN0cmluZyBpbnB1dEZvcm1hdE1hc2sgPSBkYXRh
LmlucHV0Rm9ybWF0TWFzaygpOworCisgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkg
fHwgaW5wdXRGb3JtYXRNYXNrID09ICIqTSIgfHwgaW5wdXRGb3JtYXRNYXNrID09ICIqbSIpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlucHV0Q2hhcnNDb3VudCA+IGRhdGEubWF4
SW5wdXRDaGFyc0FsbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWdu
ZWQgbWFza0luZGV4ID0gY3Vyc29yUG9zaXRpb25Ub01hc2tJbmRleChpbnB1dEZvcm1hdE1hc2ss
IGN1cnNvclBvc2l0aW9uKTsKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBVQ2hhciBtYXNrID0g
aW5wdXRGb3JtYXRNYXNrW21hc2tJbmRleF07CisgICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hh
cmFjdGVyIHdpdGggaW5wdXQgbWFzaworICAgIHN3aXRjaCAobWFzaykgeworICAgIGNhc2UgJ0En
OgorICAgICAgICBvayA9ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSUxvd2VyKGlu
Q2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlICdhJzoKKyAgICAgICAgb2sgPSAhaXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlV
cHBlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSAnTic6CisgICAgICAgIG9rID0gaXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgJ24nOgorICAgICAgICBvayA9ICFpc0FTQ0lJQWxwaGEoaW5D
aGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgJ1gnOgorICAgICAgICBvayA9ICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJp
bnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3gnOgorICAgICAgICBv
ayA9ICFpc0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgJ00nOgorICAgIGNhc2UgJ20nOgorICAgICAgICBvayA9
IGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgb2sgPSAobWFzayA9PSBpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gb2s7Cit9CisKK1N0cmluZyBJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRN
YXNrKElucHV0RWxlbWVudERhdGEmIGRhdGEsIFN0cmluZyYgaW5wdXRNYXNrKQoreworICAgIGlu
cHV0TWFzay5yZXBsYWNlKCJcXFxcIiwgIlxcIik7CisKKyAgICBib29sIGlzVmFsaWQgPSB0cnVl
OworICAgIGJvb2wgaGFzV2lsZGNhcmQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlc2NhcGVDaGFy
Q291bnQgPSAwOworICAgIHVuc2lnbmVkIG1hc2tMZW5ndGggPSBpbnB1dE1hc2subGVuZ3RoKCk7
CisgICAgVUNoYXIgZm9ybWF0Q29kZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFz
a0xlbmd0aDsgKytpKSB7CisgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbaV07CisgICAg
ICAgIGlmIChmb3JtYXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAg
ICAgIGlmIChmb3JtYXRDb2RlID09ICcqJyB8fCAoaXNBU0NJSURpZ2l0KGZvcm1hdENvZGUpICYm
IGZvcm1hdENvZGUgIT0gJzAnKSkgeworICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGNvZGVz
IHdoaWNoIGVuZHMgd2l0aCAnKmYnIG9yICduZicKKyAgICAgICAgICAgICAgICBmb3JtYXRDb2Rl
ID0gaW5wdXRNYXNrWysraV07CisgICAgICAgICAgICAgICAgaWYgKChpICsgMSAhPSBtYXNrTGVu
Z3RoKSB8fCBmb3JtYXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXRDb2RlID09ICdcXCcpIHsKKyAgICAgICAgICAg
ICAgICAvLyBza2lwIG92ZXIgdGhlIG5leHQgbWFzayBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAg
ICArK2k7CisgICAgICAgICAgICAgICAgKytlc2NhcGVDaGFyQ291bnQ7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaXNW
YWxpZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgYWxsb3dlZCB0byBiZSBlbnRlcmVkIGJ5IGlucHV0IG1hc2sKKyAg
ICB1bnNpZ25lZCBhbGxvd2VkTGVuZ3RoID0gbWFza0xlbmd0aDsKKyAgICBpZiAoZXNjYXBlQ2hh
ckNvdW50KQorICAgICAgICBhbGxvd2VkTGVuZ3RoIC09IGVzY2FwZUNoYXJDb3VudDsKKworICAg
IGlmIChoYXNXaWxkY2FyZCkgeworICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW21hc2tM
ZW5ndGggLSAyXTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonKQorICAgICAgICAgICAg
YWxsb3dlZExlbmd0aCA9IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93ZWQoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0TGVuID0gU3RyaW5nKCZmb3JtYXRDb2RlKS50
b0ludCgpOworICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9IGxlZnRMZW4gKyBhbGxvd2VkTGVu
Z3RoIC0gMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhbGxvd2VkTGVuZ3RoIDwgZGF0
YS5tYXhJbnB1dENoYXJzQWxsb3dlZCgpKQorICAgICAgICBkYXRhLnNldE1heElucHV0Q2hhcnNB
bGxvd2VkKGFsbG93ZWRMZW5ndGgpOworCisgICAgcmV0dXJuIGlucHV0TWFzazsKK30KKworI2Vu
ZGlmCisKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCShyZXZpc2lvbiA1Nzg3OSkKKysrIFdlYkNvcmUv
ZG9tL0lucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5k
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdCgpID0gMDsKKyAgCisjaWYgRU5BQkxFKFdD
U1MpCisgICAgdmlydHVhbCBJbnB1dEVsZW1lbnREYXRhIGRhdGEoKSA9IDA7IAorI2VuZGlmCiAK
ICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4aW11bUxlbmd0aDsKICAgICBzdGF0aWMgY29uc3Qg
aW50IHNfZGVmYXVsdFNpemU7CkBAIC03OSw2ICs4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3Rh
dGljIHZvaWQgcGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0
RWxlbWVudCosIEVsZW1lbnQqLCBNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICBzdGF0aWMgdm9pZCB1
cGRhdGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqKTsKICAg
ICBzdGF0aWMgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKEVsZW1lbnQqKTsKKyNpZiBFTkFC
TEUoV0NTUykKKyAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1
dEVsZW1lbnREYXRhJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgaXNDb25mb3Jt
VG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYsIFVDaGFyLCB1bnNpZ25lZCwgdW5z
aWduZWQpOworICAgIHN0YXRpYyBTdHJpbmcgdmFsaWRhdGVJbnB1dE1hc2soSW5wdXRFbGVtZW50
RGF0YSYsIFN0cmluZyYpOworI2VuZGlmCiB9OwogCiAvLyBIVE1ML1dNTElucHV0RWxlbWVudCBo
b2xkIHRoaXMgc3RydWN0IGFzIG1lbWJlciB2YXJpYWJsZQpAQCAtMTA4LDYgKzExNywxNSBAQCBw
dWJsaWM6CiAgICAgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkU2VsZWN0aW9uRW5kOyB9CiAgICAgdm9pZCBzZXRDYWNoZWRTZWxlY3Rpb25FbmQoaW50IHZh
bHVlKSB7IG1fY2FjaGVkU2VsZWN0aW9uRW5kID0gdmFsdWU7IH0KIAorI2lmIEVOQUJMRShXQ1NT
KQorICAgIFN0cmluZyBpbnB1dEZvcm1hdE1hc2soKSBjb25zdCB7IHJldHVybiBtX2lucHV0Rm9y
bWF0TWFzazsgfQorICAgIHZvaWQgc2V0SW5wdXRGb3JtYXRNYXNrKGNvbnN0IFN0cmluZyYgbWFz
aykgeyBtX2lucHV0Rm9ybWF0TWFzayA9IG1hc2s7IH0KKyAKKyAgICB1bnNpZ25lZCBtYXhJbnB1
dENoYXJzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQ7IH0K
KyAgICB2b2lkIHNldE1heElucHV0Q2hhcnNBbGxvd2VkKHVuc2lnbmVkIG1heExlbmd0aCkgeyBt
X21heElucHV0Q2hhcnNBbGxvd2VkID0gbWF4TGVuZ3RoOyB9CisgIAorI2VuZGlmCisKIHByaXZh
dGU6CiAgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV92YWx1ZTsKQEAgLTEx
Niw2ICsxMzQsMTAgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9tYXhMZW5ndGg7CiAgICAgaW50IG1f
Y2FjaGVkU2VsZWN0aW9uU3RhcnQ7CiAgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uRW5kOworI2lm
IEVOQUJMRShXQ1NTKQorICAgIFN0cmluZyBtX2lucHV0Rm9ybWF0TWFzazsKKyAgICB1bnNpZ25l
ZCBtX21heElucHV0Q2hhcnNBbGxvd2VkOworI2VuZGlmCiB9OwogCiBJbnB1dEVsZW1lbnQqIHRv
SW5wdXRFbGVtZW50KEVsZW1lbnQqKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDU3ODc5KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzY3LDQgKzI3NjcsMTUgQEAgSFRNTE9wdGlvbkVsZW1lbnQqIEhU
TUxJbnB1dEVsZW1lbnQ6OnNlbAogfQogI2VuZGlmICAvLyBFTkFCTEUoREFUQUxJU1QpCiAKKyNp
ZiBFTkFCTEUoV0NTUykKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQo
U3RyaW5nJiBtYXNrKQoreworICAgIFN0cmluZyB2YWxpZGF0ZU1hc2sgPSB2YWxpZGF0ZUlucHV0
TWFzayhtX2RhdGEsIG1hc2spOworICAgIGlmICghdmFsaWRhdGVNYXNrLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9kYXRhLnNldElucHV0Rm9ybWF0TWFzayh2YWxpZGF0ZU1hc2spOworfQorI2VuZGlm
CisKKworCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZp
c2lvbiA1Nzg3OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Miw2ICsyNzIsMTEgQEAgcHVibGljOgogICAgIC8vIEFuIGluc3RhbmNlIHBv
aW50ZWQgYnkgdGhlIERhdGVDb21wb25lbnRzKiBwYXJhbWV0ZXIgd2lsbCBoYXZlIHBhcnNlZCB2
YWx1ZXMgYW5kIGJlCiAgICAgLy8gbW9kaWZpZWQgZXZlbiBpZiB0aGUgcGFyc2luZyBmYWlscy4g
IFRoZSBEYXRlQ29tcG9uZW50cyogcGFyYW1ldGVyIG1heSBiZSAwLgogICAgIHN0YXRpYyBib29s
IHBhcnNlVG9EYXRlQ29tcG9uZW50cyhJbnB1dFR5cGUsIGNvbnN0IFN0cmluZyYsIERhdGVDb21w
b25lbnRzKik7CisKKyNpZiBFTkFCTEUoV0NTUykKKyAgICB2b2lkIHNldFdhcElucHV0Rm9ybWF0
KFN0cmluZyYgbWFzayk7CisgICAgdmlydHVhbCBJbnB1dEVsZW1lbnREYXRhIGRhdGEoKSB7IHJl
dHVybiBtX2RhdGE7IH0KKyNlbmRpZgogICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTc4ODEp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBA
QAorMjAxMC0wNC0yMCAgQ2hhcmxlcyBXZWkgIDxjaGFybGVzLndlaUB0b3JjaG1vYmlsZS5jb20u
Y24+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3ODQ4CisgICAgICAgIFRoaXMg
cGF0Y2ggYWRkcyBXQ1NTIC13YXAtaW5wdXQtZm9ybWF0IGFuZCAtd2FwLWlucHV0LXJlcXVpcmVk
IHN1cHBvcnQuCisgICAgICAgIC13YXAtaW5wdXQtZm9ybWF0IGRlZmluZXMgYSBtYXNrIHRoYXQg
ZmlsdGVycyB0aGUgaW5wdXQgZm9yIGFuIGlucHV0IGNvbnRyb2wKKyAgICAgICAgLXdhcC1pbnB1
dC1yZXF1aXJlZCBzcGVjaWZpZXMgaWYgYW4gaW5wdXQgY29udHJvbCBpcyByZXF1aXJlZCwgaWYg
cmVxdWlyZWQsCisgICAgICAgIGl0IG11c3QgYmUgZmlsbGVkIHdpdGggc29tZSB2YWxpZCB2YWx1
ZSBiZWZvcmUgc3VibWl0dGVkLgorCisgICAgICAgICogZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3Jt
YXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3djc3Mvd2FwLWlucHV0LWZv
cm1hdC54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL3dhcC1pbnB1dC1yZXF1aXJl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd2Nzcy93YXAtaW5wdXQtcmVx
dWlyZWQueGh0bWw6IEFkZGVkLgorCiAyMDEwLTA0LTIwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5y
ZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
NTc4ODAuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1m
b3JtYXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93Y3Nz
L3dhcC1pbnB1dC1mb3JtYXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5
IEBACitBc3N1bWUgdGhlIHVzZXIgaW5wdXQgdGhlIGZvbGxvd2luZyAiQWFCYkNjRGRFZUZmR2cx
MjM0NTYhQCMkJV4sLjsiIHRvIGVhY2ggb2YgdGhlIGlucHV0IGVsZW1lbnRzCit7LXdhcC1pbnB1
dC1mb3JtYXQ6IipBIjt9IG9ubHkgdGFrZXMgdXBwZXIgbGV0dGVycywgc3ltYm9scywgcHVuY3R1
YXRpb25zCitQQVNTIGRvbVZhbHVlT2YoInN0YXJfdXBBIikgaXMgIkFCQ0RFRkchQCMkJV4sLjsi
CitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX3VwQSIpIGlzICJBQkNERUZHIUAjJCVeLC47Igor
ey13YXAtaW5wdXQtZm9ybWF0OiIqYSI7fSBvbmx5IHRha2VzIGxvd2VyIGxldHRlcnMsIHN5bWJv
bHMsIHB1bmN0dWF0aW9ucworUEFTUyBkb21WYWx1ZU9mKCJzdGFyX2xvd2EiKSBpcyAiYWJjZGVm
ZyFAIyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93YSIpIGlzICJhYmNkZWZn
IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqTiI7fSBvbmx5IHRha2VzIG51bWJlcnMg
CitQQVNTIGRvbVZhbHVlT2YoInN0YXJfdXBOIikgaXMgIjEyMzQ1NiIKK1BBU1MgdmlzaWJsZVZh
bHVlT2YoInN0YXJfdXBOIikgaXMgIjEyMzQ1NiIKK3std2FwLWlucHV0LWZvcm1hdDoiKm4iO30g
b25seSB0YWtlcyBudW1iZXJzICwgc3ltYmFscyBhbmQgcHVuY3R1YXRpb25zIAorUEFTUyBkb21W
YWx1ZU9mKCJzdGFyX2xvd24iKSBpcyAiMTIzNDU2IUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFs
dWVPZigic3Rhcl9sb3duIikgaXMgIjEyMzQ1NiFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1h
dDoiKlgiO30gdGFrZXMgdXBwZXIgbGV0dGVycyxudW1iZXJzLHN5bWJhbHMgYW5kIHB1bmN0dWF0
aW9ucyAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl91cFgiKSBpcyAiQUJDREVGRzEyMzQ1NiFAIyQl
XiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfdXBYIikgaXMgIkFCQ0RFRkcxMjM0NTYh
QCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3JtYXQ6Iip4Ijt9IHRha2VzIGxvd2VyIGxldHRlcnMs
bnVtYmVycyxzeW1iYWxzIGFuZCBwdW5jdHVhdGlvbnMgCitQQVNTIGRvbVZhbHVlT2YoInN0YXJf
bG93eCIpIGlzICJhYmNkZWZnMTIzNDU2IUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFsdWVPZigi
c3Rhcl9sb3d4IikgaXMgImFiY2RlZmcxMjM0NTYhQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3Jt
YXQ6IipNIjt9IHRha2VzIGFueSBjaGFyYWN0ZXIgCitQQVNTIGRvbVZhbHVlT2YoInN0YXJfdXBN
IikgaXMgIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFsdWVP
Zigic3Rhcl91cE0iKSBpcyAiQWFCYkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiCit7LXdhcC1p
bnB1dC1mb3JtYXQ6IiptIjt9IHRha2VzIGFueSBjaGFyYWN0ZXIgCitQQVNTIGRvbVZhbHVlT2Yo
InN0YXJfbG93bSIpIGlzICJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyIKK1BBU1Mgdmlz
aWJsZVZhbHVlT2YoInN0YXJfbG93bSIpIGlzICJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwu
OyIKK3std2FwLWlucHV0LWZvcm1hdDoiM04iO30gdGFrZXMgMyBudW1iZXJzIAorUEFTUyBkb21W
YWx1ZU9mKCJ0aHJlZV9OIikgaXMgIjEyMyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInRocmVlX04i
KSBpcyAiMTIzIgorICAgICAgICAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5w
dXQtZm9ybWF0LnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAt
aW5wdXQtZm9ybWF0LnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93Y3Nz
L3dhcC1pbnB1dC1mb3JtYXQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0v
RFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3ho
dG1sLW1vYmlsZTEwLmR0ZCI+CisKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hodG1sIj4KKzxoZWFkPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorLnN0YXJfdXBBICB7
LXdhcC1pbnB1dC1mb3JtYXQ6ICIqQSIgOyB9ICAgIC8qIHVwcGVyIGxldHRlciwgc3ltYm9sLCBw
dW5jdHVhdGlvbiwgIE5PIG51bWJlciAqLworLnN0YXJfbG93YSB7LXdhcC1pbnB1dC1mb3JtYXQ6
ICIqYSIgOyB9ICAgIC8qIGxvd2VyIGxldHRlciwgc3ltYm9sLCBwdW5jdHVhdGlvbiwgIE5PIG51
bWJlciAqLworLnN0YXJfdXBOICB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqTiIgOyB9ICAgIC8qIG51
bWJlciBvbmx5ICovCisuc3Rhcl9sb3duIHstd2FwLWlucHV0LWZvcm1hdDogIipuIiA7IH0gICAg
LyogbnVtYmVyICwgc3ltYm9sLCBwdW5jdHVhdGlvbiwgbm8gbGV0dGVyICovCisuc3Rhcl91cFgg
IHstd2FwLWlucHV0LWZvcm1hdDogIipYIiA7IH0gICAgLyogdXBwZXIgbGV0dGVyLCBudW1iZXIs
IHN5bWJvbCwgcHVuY3R1YXRpb24sIG5vIGxvd2VyIGxldHRlciAqLworLnN0YXJfbG93eCB7LXdh
cC1pbnB1dC1mb3JtYXQ6ICIqeCIgOyB9ICAgIC8qIGxvd2VyIGxldHRlciwgbnVtYmVyLCBzeW1i
b2wsIHB1bmN0dWF0aW9uLCBubyB1cHBlciBsZXR0ZXIgKi8KKy5zdGFyX3VwTSAgey13YXAtaW5w
dXQtZm9ybWF0OiAiKk0iIDsgfSAgICAvKiBhbnl0aGluZywgd2l0aCB1cHBlciBhcyB0aGUgZGVm
YXVsdCBpbnB1dCAqLworLnN0YXJfbG93bSB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqbSIgOyB9ICAg
IC8qIGFueXRoaW5nLCB3aXRoIGxvd2VyIGFzIHRoZSBkZWZhdWx0IGlucHV0ICovCisudGhyZWVf
TiAgIHstd2FwLWlucHV0LWZvcm1hdDogIjNOIiA7IH0gICAgLyogdXAgdG8gMyBkaWdpdCBudW1i
ZXIgKi8KKworPC9zdHlsZT4KKworPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8aW5wdXQgdHlwZT0idGV4dCIg
aWQ9InN0YXJfdXBBIiAgY2xhc3M9InN0YXJfdXBBIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlk
PSJzdGFyX2xvd2EiIGNsYXNzPSJzdGFyX2xvd2EiIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9
InN0YXJfdXBOIiAgY2xhc3M9InN0YXJfdXBOIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJz
dGFyX2xvd24iIGNsYXNzPSJzdGFyX2xvd24iIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InN0
YXJfdXBYIiAgY2xhc3M9InN0YXJfdXBYIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFy
X2xvd3giIGNsYXNzPSJzdGFyX2xvd3giIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InN0YXJf
dXBNIiAgY2xhc3M9InN0YXJfdXBNIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX2xv
d20iIGNsYXNzPSJzdGFyX2xvd20iIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InRocmVlX04i
ICBjbGFzcz0idGhyZWVfTiIgLz4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
CitmdW5jdGlvbiBkb21WYWx1ZU9mKGlkKSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKS52YWx1ZTsKK30KK2Z1bmN0aW9uIHZpc2libGVWYWx1ZU9mKGlkKSB7CisgICAg
dmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgIGVsLmZvY3VzKCk7Cisg
ICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ1NlbGVjdEFsbCcpOworICAgIHJldHVybiBkb2N1bWVu
dC5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOworfQorCitmdW5jdGlvbiBpbnB1dEtleXMoc3Ry
KSB7CisgICAgaWYoIXdpbmRvdy5ldmVudFNlbmRlcikKKyAgICAgICAgcmV0dXJuOworICAgIGZv
cihpID0gMDsgaSAhPSBzdHIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZXZlbnRTZW5kZXIua2V5
RG93bihzdHIuY2hhckF0KGkpKTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit9CisK
K3ZhciBzdHIgPSAiQWFCYkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiOworCitkZWJ1ZygiQXNz
dW1lIHRoZSB1c2VyIGlucHV0IHRoZSBmb2xsb3dpbmcgXCIiICsgc3RyICsgIlwiIHRvIGVhY2gg
b2YgdGhlIGlucHV0IGVsZW1lbnRzPGJyLz48YnIvPiIpOworCitkZWJ1ZygnPGJyLz57LXdhcC1p
bnB1dC1mb3JtYXQ6IipBIjt9IG9ubHkgdGFrZXMgdXBwZXIgbGV0dGVycywgc3ltYm9scywgcHVu
Y3R1YXRpb25zPGJyLz4nKTsKKworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfdXBBIiku
Zm9jdXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfdXBB
IiknLCciQUJDREVGRyFAIyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rh
cl91cEEiKScsJyJBQkNERUZHIUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1
dC1mb3JtYXQ6IiphIjt9IG9ubHkgdGFrZXMgbG93ZXIgbGV0dGVycywgc3ltYm9scywgcHVuY3R1
YXRpb25zPGJyIC8+PGJyIC8+Jyk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl9sb3dh
IikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJf
bG93YSIpJywgJyJhYmNkZWZnIUAjJCVeLC47IicpOworc2hvdWxkQmUoJ3Zpc2libGVWYWx1ZU9m
KCJzdGFyX2xvd2EiKScsICciYWJjZGVmZyFAIyQlXiwuOyInKTsKKworZGVidWcoJzxici8+ey13
YXAtaW5wdXQtZm9ybWF0OiIqTiI7fSBvbmx5IHRha2VzIG51bWJlcnMgPGJyIC8+Jyk7Citkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl91cE4iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7
CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl91cE4iKScsICciMTIzNDU2IicpOworc2hvdWxk
QmUoJ3Zpc2libGVWYWx1ZU9mKCJzdGFyX3VwTiIpJywgJyIxMjM0NTYiJyk7CisKK2RlYnVnKCc8
YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiKm4iO30gb25seSB0YWtlcyBudW1iZXJzICwgc3ltYmFs
cyBhbmQgcHVuY3R1YXRpb25zIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0
YXJfbG93biIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9m
KCJzdGFyX2xvd24iKScsICciMTIzNDU2IUAjJCVeLC47IicpOworc2hvdWxkQmUoJ3Zpc2libGVW
YWx1ZU9mKCJzdGFyX2xvd24iKScsICciMTIzNDU2IUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJy
Lz57LXdhcC1pbnB1dC1mb3JtYXQ6IipYIjt9IHRha2VzIHVwcGVyIGxldHRlcnMsbnVtYmVycyxz
eW1iYWxzIGFuZCBwdW5jdHVhdGlvbnMgPGJyIC8+Jyk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgic3Rhcl91cFgiKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFs
dWVPZigic3Rhcl91cFgiKScsICciQUJDREVGRzEyMzQ1NiFAIyQlXiwuOyInKTsKK3Nob3VsZEJl
KCd2aXNpYmxlVmFsdWVPZigic3Rhcl91cFgiKScsICciQUJDREVGRzEyMzQ1NiFAIyQlXiwuOyIn
KTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqeCI7fSB0YWtlcyBsb3dlciBs
ZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBhbmQgcHVuY3R1YXRpb25zIDxiciAvPicpOworZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfbG93eCIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsK
K3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJzdGFyX2xvd3giKScsICciYWJjZGVmZzEyMzQ1NiFAIyQl
XiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3d4IiknLCAnImFiY2Rl
ZmcxMjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoi
Kk0iO30gdGFrZXMgYW55IGNoYXJhY3RlciA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJzdGFyX3VwTSIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdkb21W
YWx1ZU9mKCJzdGFyX3VwTSIpJywgJyJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyInKTsK
K3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl91cE0iKScsICciQWFCYkNjRGRFZUZmR2cx
MjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiKm0i
O30gdGFrZXMgYW55IGNoYXJhY3RlciA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJzdGFyX2xvd20iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFs
dWVPZigic3Rhcl9sb3dtIiknLCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IicpOwor
c2hvdWxkQmUoJ3Zpc2libGVWYWx1ZU9mKCJzdGFyX2xvd20iKScsICciQWFCYkNjRGRFZUZmR2cx
MjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiM04i
O30gdGFrZXMgMyBudW1iZXJzIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRo
cmVlX04iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigi
dGhyZWVfTiIpJywgJyIxMjMiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInRocmVlX04i
KScsICciMTIzIicpOworCisKKzwvc2NyaXB0PgorCisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1
dC1yZXF1aXJlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGhl
cmUgYXJlIHRocmVlIGZvcm0gY29udHJvbCBlbGVtZW50cyBiZWxvdywgdGhlIGZpcnN0IG9uZSBp
cyByZXF1aXJlZCBhbmQgYmxhbmssdmFsaWRpdHkudmFsdWVNaXNzaW5nIHNob3VsZCBiZSB0cnVl
LCB0aGUgb3RoZXIgdHdvIGVpdGhlciBkb24ndCBoYXZlIC13YXAtaW5wdXQtcmVxdWlyZWQgYXBw
bGllZCwgb3IgdGhlIC13YXAtaW5wdXQtcmVxdWlyZWQgaW5kaWNhdGVzIGZhbHNlLCBhbmQgYXJl
IG5vdCByZXF1aXJlZCAuCisKKyAgCitTVUNDRVNTIFNVQ0NFU1MgU1VDQ0VTUwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1yZXF1aXJlZC54aHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLnhodG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1yZXF1aXJlZC54aHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIg
Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiPgorCis8aHRt
bCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisKKzxoZWFkPgorPHRpdGxl
PnJlcXVpcmVkIGFuZCBiYXNpYyB2YWx1ZU1pc3Npbmc8L3RpdGxlPgorCis8L2hlYWQ+CisKKzxi
b2R5PgorPHA+VGhlcmUgYXJlIHRocmVlIGZvcm0gY29udHJvbCBlbGVtZW50cyBiZWxvdywgdGhl
IGZpcnN0IG9uZSBpcyByZXF1aXJlZCBhbmQgYmxhbmssdmFsaWRpdHkudmFsdWVNaXNzaW5nIHNo
b3VsZCBiZSB0cnVlLCB0aGUgb3RoZXIgdHdvIGVpdGhlciBkb24ndCBoYXZlIC13YXAtaW5wdXQt
cmVxdWlyZWQgYXBwbGllZCwgb3IgdGhlIC13YXAtaW5wdXQtcmVxdWlyZWQgaW5kaWNhdGVzIGZh
bHNlLCBhbmQgYXJlIG5vdCByZXF1aXJlZCAuPC9wPgorPGlucHV0IG5hbWU9InJlcXVpcmVkIiBz
dHlsZT0iLXdhcC1pbnB1dC1yZXF1aXJlZDp0cnVlOyIgLz4KKzxpbnB1dCBuYW1lPSJub3Rfc3Bl
Y2lmaWVkIiAvPgorPHRleHRhcmVhIG5hbWU9Im5vdF9yZXF1aXJlZCIgc3R5bGU9Ii13YXAtaW5w
dXQtcmVxdWlyZWQ6ZmFsc2U7Ij48L3RleHRhcmVhPgorPHAgaWQ9ImNvbnNvbGUiPiA8L3A+CisK
KzxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Citm
dW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25z
b2xlIikuaW5uZXJIVE1MICs9ICBtZXNzYWdlICsgIiAgXG4iOworfQorCisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworCisgICAgdiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJyZXF1aXJl
ZCIpOworICAgIGxvZyh2WzBdLnZhbGlkaXR5LnZhbHVlTWlzc2luZyAgPyAiU1VDQ0VTUyIgOiAi
RkFJTFVSRSIpOworIAorICAgIHYgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgibm90X3Nw
ZWNpZmllZCIpOworICAgIGxvZygoIXZbMF0udmFsaWRpdHkudmFsdWVNaXNzaW5nKSA/ICJTVUND
RVNTIiA6ICJGQUlMVVJFIik7CisKKyAgICB2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUo
Im5vdF9yZXF1aXJlZCIpOworICAgIGxvZygoIXZbMF0udmFsaWRpdHkudmFsdWVNaXNzaW5nKSA/
ICJTVUNDRVNTIiA6ICJGQUlMVVJFIik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53930</attachid>
            <date>2010-04-21 01:29:04 -0700</date>
            <delta_ts>2010-04-22 03:49:55 -0700</delta_ts>
            <desc>resubmit of the patch after addressing reviewer&apos;s comments</desc>
            <filename>37848_v2.patch</filename>
            <type>text/plain</type>
            <size>26145</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Nzk1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDQtMjEgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9y
Y2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzg0OAor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV0NTUyAtd2FwLWlucHV0LWZvcm1hdCBhbmQgLXdhcC1p
bnB1dC1yZXF1aXJlZCBzdXBwb3J0CisgICAgICAgIC13YXAtaW5wdXQtZm9ybWF0IGRlZmluZXMg
YSBtYXNrIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIHRoZSB1c2VyIGlucHV0CisgICAgICAg
IC13YXAtaW5wdXQtcmVxdWlyZWQgc3BlY2lmaWVzIGlmIGlucHV0IGlzIHJlcXVpcmVkIGZvciBh
IGlucHV0IGNvbnRyb2wKKyAgICAgICAgaWYgaW5wdXQgaXMgcmVxdWlyZWQsIGl0IG11c3QgYmUg
ZmlsbGVkIHdpdGggc29tZSB2YWxpZCB1c2VyIGlucHV0IGJlZm9yZSBzdWJtaXNzaW9uCisKKyAg
ICAgICAgVGVzdHM6IGZhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LnhodG1sCisgICAgICAgICAg
ICAgICBmYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLnhodG1sCisKKyAgICAgICAgKiBjc3Mv
Q1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkpOgor
ICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5
KToKKyAgICAgICAgKiBjc3MvV0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICogZG9tL0lu
cHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnNhbml0aXpl
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjpJbnB1
dEVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKToKKyAgICAgICAgKiBkb20vSW5wdXRFbGVt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjppbnB1dEZvcm1hdE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0SW5wdXRGb3JtYXRN
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6Om1heElucHV0Q2hhcnNB
bGxvd2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6OnNldE1heElucHV0
Q2hhcnNBbGxvd2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQpOgorICAg
ICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6ZGF0YSk6CisgICAgICAgICogd21sL1dNTElucHV0RWxlbWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6V01MSW5wdXRFbGVtZW50OjpkYXRhKToKKwogMjAxMC0wNC0yMCAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gNTc5NTcpCisrKyBXZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjkzLDYgKzE2OTMsMTUgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0VW5kZXJsaW5lOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRWYXJpYWJsZURlY2xh
cmF0aW9uQmxvY2s6CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoV0NTUykKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRGb3JtYXQ6CisgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0UmVx
dWlyZWQ6CisgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSgpOwor
ICAgICAgICBicmVhazsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICAgICBkZWZhdWx0Ogog
ICAgICAgICByZXR1cm4gcGFyc2VTVkdWYWx1ZShwcm9wSWQsIGltcG9ydGFudCk7CkBAIC0xNzIx
LDYgKzE3MzAsMjcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShXQ1NTKQorUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVdDU1NJbnB1dFByb3BlcnR5KCkKK3sKKyAgICBSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlZFZhbHVlID0gMDsKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIFN0cmluZyBpbnB1dFByb3BlcnR5OworICAgIGlm
ICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS0+
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAgICBpbnB1dFByb3Bl
cnR5ID0gU3RyaW5nKHZhbHVlLT5zdHJpbmcpOworCisgICAgaWYgKCFpbnB1dFByb3BlcnR5Lmlz
RW1wdHkoKSkKKyAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
aW5wdXRQcm9wZXJ0eSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworCisgICAgd2hp
bGUgKG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAvLyBwYXNzIGFsbCBvdGhlciB2YWx1ZXMs
IGlmIGFueS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgCisgICAgLy8gdGhlIHBhcnNlciB3aWxsIHRo
aW5rIHRoYXQgaXQncyBub3QgZG9uZSBhbmQgd29uJ3QgcHJvY2VzcyB0aGlzIHByb3BlcnR5ICAK
KyAgICB9CisKKyAgICByZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisjZW5kaWYKKwogdm9pZCBDU1NQ
YXJzZXI6OmFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBydmFsKQogewogICAgIGlmIChsdmFsKSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkocmV2aXNpb24g
NTc5NTcpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0xMzksNiArMTQwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKTsKICNlbmRpZgogCisj
aWYgRU5BQkxFKFdDU1MpCisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlV0NTU0lu
cHV0UHJvcGVydHkoKTsKKyNlbmRpZgorCiAgICAgICAgIC8vIENTUzMgUGFyc2luZyBSb3V0aW5l
cyAoZm9yIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gQ1NTMykKICAgICAgICAgYm9vbCBwYXJzZVNo
YWRvdyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAgICAgICAgIGJvb2wgcGFyc2VCb3Jk
ZXJJbWFnZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCwgUmVmUHRyPENTU1ZhbHVlPiYpOwpJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDU3OTU3KQorKysgV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOTQsNiArNTI5
NCwyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2U6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFZhcmlhYmxlRGVjbGFyYXRpb25CbG9jazoKICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShX
Q1NTKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dEZvcm1hdDoKKyAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlICYmIG1fZWxlbWVudC0+aGFzVGFnTmFtZShXZWJDb3JlOjppbnB1dFRhZykp
IHsKKyAgICAgICAgICAgIFN0cmluZyBtYXNrID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1Zh
bHVlKCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9lbGVt
ZW50KS0+c2V0V2FwSW5wdXRGb3JtYXQobWFzayk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0UmVxdWlyZWQ6CisgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZSAmJiBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKKyAg
ICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obV9lbGVtZW50KTsKKyAgICAgICAgICAgIGJvb2wgcmVx
dWlyZWQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSA9PSAidHJ1ZSI7CisgICAg
ICAgICAgICBlbGVtZW50LT5zZXRSZXF1aXJlZChyZXF1aXJlZCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworI2VuZGlmIAorCiAjaWYgRU5BQkxFKFNWRykKICAgICBkZWZhdWx0OgogICAg
ICAgICAvLyBUcnkgdGhlIFNWRyBwcm9wZXJ0aWVzCkluZGV4OiBXZWJDb3JlL2Nzcy9XQ1NTUHJv
cGVydHlOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9XQ1NTUHJvcGVydHlOYW1l
cy5pbgkocmV2aXNpb24gNTc5NTcpCisrKyBXZWJDb3JlL2Nzcy9XQ1NTUHJvcGVydHlOYW1lcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUgQEAKKy13YXAtaW5wdXQtZm9ybWF0Cistd2Fw
LWlucHV0LXJlcXVpcmVkCiAtd2FwLW1hcnF1ZWUtZGlyCiAtd2FwLW1hcnF1ZWUtbG9vcAogLXdh
cC1tYXJxdWVlLXNwZWVkCkluZGV4OiBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDU3OTU3KQor
KysgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiAr
MjIsMTUgQEAKICNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50LmgiCisKKyNpZiBFTkFCTEUoV0NTUykKKyNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0
LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rv
ci5oIgorI2VuZGlmCisKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTM4LDYgKzE0NywxNCBAQCB2b2lkIElu
cHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoCiAKIFN0cmluZyBJbnB1dEVsZW1lbnQ6
OnNhbml0aXplVmFsdWUoY29uc3QgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvbnN0IFN0
cmluZyYgcHJvcG9zZWRWYWx1ZSkKIHsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBJbnB1dEVsZW1l
bnREYXRhIGRhdGEgPSBjb25zdF9jYXN0PElucHV0RWxlbWVudCo+KGlucHV0RWxlbWVudCktPmRh
dGEoKTsKKyAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEsIHByb3Bvc2VkVmFsdWUp
KSB7CisgICAgICAgIGlmIChpc0NvbmZvcm1Ub0lucHV0TWFzayhkYXRhLCBkYXRhLnZhbHVlKCkp
KQorICAgICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIH0KKyNlbmRpZgogICAgIHJldHVybiBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNl
cklucHV0VmFsdWUoaW5wdXRFbGVtZW50LCBwcm9wb3NlZFZhbHVlLCBzX21heGltdW1MZW5ndGgp
OwogfQogCkBAIC0xODMsNiArMjAwLDE4IEBAIHZvaWQgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZv
cmVUZXh0SW5zZXIKIAogICAgIC8vIFRydW5jYXRlIHRoZSBpbnNlcnRlZCB0ZXh0IHRvIGF2b2lk
IHZpb2xhdGluZyB0aGUgbWF4TGVuZ3RoIGFuZCBvdGhlciBjb25zdHJhaW50cy4KICAgICBCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudCogdGV4dEV2ZW50ID0gc3RhdGljX2Nhc3Q8QmVmb3JlVGV4dElu
c2VydGVkRXZlbnQqPihldmVudCk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFN0cmluZyBjYW5kaWRhdGVTdHJpbmcg
PSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50LT5yZW5kZXJlcigpKS0+dGV4
dCgpOworICAgIGlmIChzZWxlY3Rpb25MZW5ndGgpCisgICAgICAgIGNhbmRpZGF0ZVN0cmluZy5y
ZXBsYWNlKHJhbmdlLT5zdGFydE9mZnNldCgpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIHRleHRFdmVu
dC0+dGV4dCgpKTsKKyAgICBlbHNlCisgICAgICAgIGNhbmRpZGF0ZVN0cmluZy5pbnNlcnQodGV4
dEV2ZW50LT50ZXh0KCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICBpZiAoIWlzQ29uZm9y
bVRvSW5wdXRNYXNrKGlucHV0RWxlbWVudC0+ZGF0YSgpLCBjYW5kaWRhdGVTdHJpbmcpKSB7Cisg
ICAgICAgIHRleHRFdmVudC0+c2V0VGV4dCgiIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0K
KyNlbmRpZgogICAgIHRleHRFdmVudC0+c2V0VGV4dChzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGlu
cHV0RWxlbWVudCwgdGV4dEV2ZW50LT50ZXh0KCksIGFwcGVuZGFibGVMZW5ndGgpKTsKIH0KIApA
QCAtMjM0LDYgKzI2MywxMCBAQCBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1lbnREYXRhKCkK
ICAgICAsIG1fbWF4TGVuZ3RoKElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQogICAgICwg
bV9jYWNoZWRTZWxlY3Rpb25TdGFydCgtMSkKICAgICAsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKC0x
KQorI2lmIEVOQUJMRShXQ1NTKQorICAgICwgbV9pbnB1dEZvcm1hdE1hc2soIiptIikKKyAgICAs
IG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCisj
ZW5kaWYKIHsKIH0KIApAQCAtMjU1LDQgKzI4OCwxMzcgQEAgSW5wdXRFbGVtZW50KiB0b0lucHV0
RWxlbWVudChFbGVtZW50KiBlbAogICAgIHJldHVybiAwOwogfQogCisjaWYgRU5BQkxFKFdDU1Mp
CitzdGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybWF0Q29kZXMoKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBjb2RlcywgKCJBYU5uWHhNbSIpKTsK
KyAgICByZXR1cm4gY29kZXM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvblRv
TWFza0luZGV4KGNvbnN0IFN0cmluZyYgaW5wdXRGb3JtYXRNYXNrLCB1bnNpZ25lZCBjdXJzb3JQ
b3NpdGlvbikKK3sKKyAgICBVQ2hhciBtYXNrOworICAgIGludCBpbmRleCA9IC0xOworICAgIGRv
IHsKKyAgICAgICAgbWFzayA9IGlucHV0Rm9ybWF0TWFza1srK2luZGV4XTsKKyAgICAgICAgaWYg
KG1hc2sgPT0gJ1xcJykKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgIGVsc2UgaWYgKG1h
c2sgPT0gJyonIHx8IChpc0FTQ0lJRGlnaXQobWFzaykgJiYgbWFzayAhPSAnMCcpKSB7CisgICAg
ICAgICAgICBpbmRleCA9IGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSAtIDE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGN1cnNvclBvc2l0aW9uLS0pOworCisg
ICAgcmV0dXJuIGluZGV4OworfQorCitib29sIElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1
dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBpbnB1dENo
YXJzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dENoYXJzLmxlbmd0aCgp
OyArK2kpCisgICAgICAgIGlmICghaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0YSwgaW5wdXRDaGFy
c1tpXSwgaSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1dEVs
ZW1lbnREYXRhJiBkYXRhLCBVQ2hhciBpbkNoYXIsIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uKQor
eworICAgIFN0cmluZyBpbnB1dEZvcm1hdE1hc2sgPSBkYXRhLmlucHV0Rm9ybWF0TWFzaygpOwor
CisgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkgfHwgaW5wdXRGb3JtYXRNYXNrID09
ICIqTSIgfHwgaW5wdXRGb3JtYXRNYXNrID09ICIqbSIpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKGN1cnNvclBvc2l0aW9uICsgMSA+IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93ZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgbWFza0luZGV4ID0gY3Vy
c29yUG9zaXRpb25Ub01hc2tJbmRleChpbnB1dEZvcm1hdE1hc2ssIGN1cnNvclBvc2l0aW9uKTsK
KyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBVQ2hhciBtYXNrID0gaW5wdXRGb3JtYXRNYXNrW21h
c2tJbmRleF07CisgICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hhcmFjdGVyIHdpdGggaW5wdXQg
bWFzaworICAgIHN3aXRjaCAobWFzaykgeworICAgIGNhc2UgJ0EnOgorICAgICAgICBvayA9ICFp
c0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJSVBy
aW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdhJzoKKyAgICAgICAg
b2sgPSAhaXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlVcHBlcihpbkNoYXIpICYmIGlz
QVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnTic6Cisg
ICAgICAgIG9rID0gaXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgJ24nOgorICAgICAgICBvayA9ICFpc0FTQ0lJQWxwaGEoaW5DaGFyKSAmJiBpc0FTQ0lJUHJp
bnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1gnOgorICAgICAgICBv
ayA9ICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3gnOgorICAgICAgICBvayA9ICFpc0FTQ0lJVXBwZXIo
aW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgJ00nOgorICAgIGNhc2UgJ20nOgorICAgICAgICBvayA9IGlzQVNDSUlQcmludGFibGUo
aW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgb2sgPSAobWFz
ayA9PSBpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gb2s7Cit9
CisKK1N0cmluZyBJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVudERh
dGEmIGRhdGEsIFN0cmluZyYgaW5wdXRNYXNrKQoreworICAgIGlucHV0TWFzay5yZXBsYWNlKCJc
XFxcIiwgIlxcIik7CisKKyAgICBib29sIGlzVmFsaWQgPSB0cnVlOworICAgIGJvb2wgaGFzV2ls
ZGNhcmQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlc2NhcGVDaGFyQ291bnQgPSAwOworICAgIHVu
c2lnbmVkIG1hc2tMZW5ndGggPSBpbnB1dE1hc2subGVuZ3RoKCk7CisgICAgVUNoYXIgZm9ybWF0
Q29kZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFza0xlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbaV07CisgICAgICAgIGlmIChmb3JtYXRDb2Rl
cygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChmb3JtYXRDb2Rl
ID09ICcqJyB8fCAoaXNBU0NJSURpZ2l0KGZvcm1hdENvZGUpICYmIGZvcm1hdENvZGUgIT0gJzAn
KSkgeworICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGNvZGVzIHdoaWNoIGVuZHMgd2l0aCAn
KmYnIG9yICduZicKKyAgICAgICAgICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrWysraV07
CisgICAgICAgICAgICAgICAgaWYgKChpICsgMSAhPSBtYXNrTGVuZ3RoKSB8fCBmb3JtYXRDb2Rl
cygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNWYWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNl
IGlmIChmb3JtYXRDb2RlID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIg
dGhlIG5leHQgbWFzayBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAg
ICAgICAgKytlc2NhcGVDaGFyQ291bnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
YWxsb3dlZCB0byBiZSBlbnRlcmVkIGJ5IGlucHV0IG1hc2sKKyAgICB1bnNpZ25lZCBhbGxvd2Vk
TGVuZ3RoID0gbWFza0xlbmd0aDsKKyAgICBpZiAoZXNjYXBlQ2hhckNvdW50KQorICAgICAgICBh
bGxvd2VkTGVuZ3RoIC09IGVzY2FwZUNoYXJDb3VudDsKKworICAgIGlmIChoYXNXaWxkY2FyZCkg
eworICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW21hc2tMZW5ndGggLSAyXTsKKyAgICAg
ICAgaWYgKGZvcm1hdENvZGUgPT0gJyonKQorICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9IGRh
dGEubWF4SW5wdXRDaGFyc0FsbG93ZWQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBsZWZ0TGVuID0gU3RyaW5nKCZmb3JtYXRDb2RlKS50b0ludCgpOworICAgICAgICAg
ICAgYWxsb3dlZExlbmd0aCA9IGxlZnRMZW4gKyBhbGxvd2VkTGVuZ3RoIC0gMjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChhbGxvd2VkTGVuZ3RoIDwgZGF0YS5tYXhJbnB1dENoYXJzQWxs
b3dlZCgpKQorICAgICAgICBkYXRhLnNldE1heElucHV0Q2hhcnNBbGxvd2VkKGFsbG93ZWRMZW5n
dGgpOworCisgICAgcmV0dXJuIGlucHV0TWFzazsKK30KKworI2VuZGlmCisKIH0KSW5kZXg6IFdl
YkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0
RWxlbWVudC5oCShyZXZpc2lvbiA1Nzk1NykKKysrIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNlbGVjdCgpID0gMDsKKyAgCisjaWYgRU5BQkxFKFdDU1MpCisgICAgdmlydHVhbCBJ
bnB1dEVsZW1lbnREYXRhIGRhdGEoKSA9IDA7IAorI2VuZGlmCiAKICAgICBzdGF0aWMgY29uc3Qg
aW50IHNfbWF4aW11bUxlbmd0aDsKICAgICBzdGF0aWMgY29uc3QgaW50IHNfZGVmYXVsdFNpemU7
CkBAIC03OSw2ICs4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgcGFyc2VNYXhM
ZW5ndGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVsZW1lbnQq
LCBNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVWYWx1ZUlmTmVlZGVk
KElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBub3Rp
ZnlGb3JtU3RhdGVDaGFuZ2VkKEVsZW1lbnQqKTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBzdGF0
aWMgYm9vbCBpc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiwgY29u
c3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3Qg
SW5wdXRFbGVtZW50RGF0YSYsIFVDaGFyLCB1bnNpZ25lZCk7CisgICAgc3RhdGljIFN0cmluZyB2
YWxpZGF0ZUlucHV0TWFzayhJbnB1dEVsZW1lbnREYXRhJiwgU3RyaW5nJik7CisjZW5kaWYKIH07
CiAKIC8vIEhUTUwvV01MSW5wdXRFbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZh
cmlhYmxlCkBAIC0xMDgsNiArMTE3LDE1IEBAIHB1YmxpYzoKICAgICBpbnQgY2FjaGVkU2VsZWN0
aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7IH0KICAgICB2b2lk
IHNldENhY2hlZFNlbGVjdGlvbkVuZChpbnQgdmFsdWUpIHsgbV9jYWNoZWRTZWxlY3Rpb25FbmQg
PSB2YWx1ZTsgfQogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFz
aygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXRNYXNrOyB9CisgICAgdm9pZCBzZXRJbnB1
dEZvcm1hdE1hc2soY29uc3QgU3RyaW5nJiBtYXNrKSB7IG1faW5wdXRGb3JtYXRNYXNrID0gbWFz
azsgfQorIAorICAgIHVuc2lnbmVkIG1heElucHV0Q2hhcnNBbGxvd2VkKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhJbnB1dENoYXJzQWxsb3dlZDsgfQorICAgIHZvaWQgc2V0TWF4SW5wdXRDaGFyc0Fs
bG93ZWQodW5zaWduZWQgbWF4TGVuZ3RoKSB7IG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQgPSBtYXhM
ZW5ndGg7IH0KKyAgCisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9uYW1l
OwogICAgIFN0cmluZyBtX3ZhbHVlOwpAQCAtMTE2LDYgKzEzNCwxMCBAQCBwcml2YXRlOgogICAg
IGludCBtX21heExlbmd0aDsKICAgICBpbnQgbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKICAgICBp
bnQgbV9jYWNoZWRTZWxlY3Rpb25FbmQ7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgU3RyaW5nIG1f
aW5wdXRGb3JtYXRNYXNrOworICAgIHVuc2lnbmVkIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQ7Cisj
ZW5kaWYKIH07CiAKIElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoRWxlbWVudCopOwpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNTc5NTcpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NjcsNCArMjc2
NywxNSBAQCBIVE1MT3B0aW9uRWxlbWVudCogSFRNTElucHV0RWxlbWVudDo6c2VsCiB9CiAjZW5k
aWYgIC8vIEVOQUJMRShEQVRBTElTVCkKIAorI2lmIEVOQUJMRShXQ1NTKQordm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcmIG1hc2spCit7CisgICAgU3RyaW5n
IHZhbGlkYXRlTWFzayA9IHZhbGlkYXRlSW5wdXRNYXNrKG1fZGF0YSwgbWFzayk7CisgICAgaWYg
KCF2YWxpZGF0ZU1hc2suaXNFbXB0eSgpKQorICAgICAgICBtX2RhdGEuc2V0SW5wdXRGb3JtYXRN
YXNrKHZhbGlkYXRlTWFzayk7Cit9CisjZW5kaWYKKworCisKIH0gLy8gbmFtZXNwYWNlCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDU3OTU3KQorKysgV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDYgKzI3MiwxMSBAQCBw
dWJsaWM6CiAgICAgLy8gQW4gaW5zdGFuY2UgcG9pbnRlZCBieSB0aGUgRGF0ZUNvbXBvbmVudHMq
IHBhcmFtZXRlciB3aWxsIGhhdmUgcGFyc2VkIHZhbHVlcyBhbmQgYmUKICAgICAvLyBtb2RpZmll
ZCBldmVuIGlmIHRoZSBwYXJzaW5nIGZhaWxzLiAgVGhlIERhdGVDb21wb25lbnRzKiBwYXJhbWV0
ZXIgbWF5IGJlIDAuCiAgICAgc3RhdGljIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzKElucHV0
VHlwZSwgY29uc3QgU3RyaW5nJiwgRGF0ZUNvbXBvbmVudHMqKTsKKworI2lmIEVOQUJMRShXQ1NT
KQorICAgIHZvaWQgc2V0V2FwSW5wdXRGb3JtYXQoU3RyaW5nJiBtYXNrKTsKKyAgICB2aXJ0dWFs
IElucHV0RWxlbWVudERhdGEgZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQorI2VuZGlmCiAgICAg
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50
KCk7CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNTc5NTcpCisrKyBXZWJDb3Jl
L3dtbC9XTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsOSBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3QgU3RyaW5nJik7
CiAgICAgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyLCB1bnNpZ25lZCwgYm9vbCBp
c1VzZXJJbnB1dCA9IHRydWUpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIHZpcnR1YWwgSW5wdXRF
bGVtZW50RGF0YSBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CisjZW5kaWYKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1Nzk1
OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1
IEBACisyMDEwLTA0LTIxICBDaGFybGVzIFdlaSAgPGNoYXJsZXMud2VpQHRvcmNobW9iaWxlLmNv
bS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc4NDgKKyAgICAgICAgQWRk
IHRlc3QgY2FzZXMgZm9yIC13YXAtaW5wdXQtZm9ybWF0IGFuZCAtd2FwLWlucHV0LXJlcXVpcmVk
IGZvciBXQ1NTCisKKyAgICAgICAgKiBmYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LnhodG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL3dhcC1pbnB1dC1yZXF1aXJlZC54aHRt
bDogQWRkZWQuCisKIDIwMTAtMDQtMjEgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxp
YS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgWGFuIExvcGV6LgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorQXNzdW1lIHRoZSB1
c2VyIGlucHV0IHRoZSBmb2xsb3dpbmcgIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IiB0
byBlYWNoIG9mIHRoZSBpbnB1dCBlbGVtZW50cworey13YXAtaW5wdXQtZm9ybWF0OiIqQSI7fSBv
bmx5IHRha2VzIHVwcGVyIGxldHRlcnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9ucworUEFTUyBkb21W
YWx1ZU9mKCJzdGFyX3VwQSIpIGlzICJBQkNERUZHIUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFs
dWVPZigic3Rhcl91cEEiKSBpcyAiQUJDREVGRyFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1h
dDoiKmEiO30gb25seSB0YWtlcyBsb3dlciBsZXR0ZXJzLCBzeW1ib2xzLCBwdW5jdHVhdGlvbnMK
K1BBU1MgZG9tVmFsdWVPZigic3Rhcl9sb3dhIikgaXMgImFiY2RlZmchQCMkJV4sLjsiCitQQVNT
IHZpc2libGVWYWx1ZU9mKCJzdGFyX2xvd2EiKSBpcyAiYWJjZGVmZyFAIyQlXiwuOyIKK3std2Fw
LWlucHV0LWZvcm1hdDoiKk4iO30gb25seSB0YWtlcyBudW1iZXJzIAorUEFTUyBkb21WYWx1ZU9m
KCJzdGFyX3VwTiIpIGlzICIxMjM0NTYiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX3VwTiIp
IGlzICIxMjM0NTYiCit7LXdhcC1pbnB1dC1mb3JtYXQ6IipuIjt9IG9ubHkgdGFrZXMgbnVtYmVy
cyAsIHN5bWJhbHMgYW5kIHB1bmN0dWF0aW9ucyAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl9sb3du
IikgaXMgIjEyMzQ1NiFAIyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93biIp
IGlzICIxMjM0NTYhQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3JtYXQ6IipYIjt9IHRha2VzIHVw
cGVyIGxldHRlcnMsbnVtYmVycyxzeW1iYWxzIGFuZCBwdW5jdHVhdGlvbnMgCitQQVNTIGRvbVZh
bHVlT2YoInN0YXJfdXBYIikgaXMgIkFCQ0RFRkcxMjM0NTYhQCMkJV4sLjsiCitQQVNTIHZpc2li
bGVWYWx1ZU9mKCJzdGFyX3VwWCIpIGlzICJBQkNERUZHMTIzNDU2IUAjJCVeLC47Igorey13YXAt
aW5wdXQtZm9ybWF0OiIqeCI7fSB0YWtlcyBsb3dlciBsZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBh
bmQgcHVuY3R1YXRpb25zIAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX2xvd3giKSBpcyAiYWJjZGVm
ZzEyMzQ1NiFAIyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93eCIpIGlzICJh
YmNkZWZnMTIzNDU2IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqTSI7fSB0YWtlcyBh
bnkgY2hhcmFjdGVyIAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX3VwTSIpIGlzICJBYUJiQ2NEZEVl
RmZHZzEyMzQ1NiFAIyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfdXBNIikgaXMg
IkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqbSI7
fSB0YWtlcyBhbnkgY2hhcmFjdGVyIAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX2xvd20iKSBpcyAi
QWFCYkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFy
X2xvd20iKSBpcyAiQWFCYkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1m
b3JtYXQ6IjNOIjt9IHRha2VzIDMgbnVtYmVycyAKK1BBU1MgZG9tVmFsdWVPZigidGhyZWVfTiIp
IGlzICIxMjMiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJ0aHJlZV9OIikgaXMgIjEyMyIKKyAgICAg
ICAgCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0
LnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4w
Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNL0RURCBYSFRNTCBNb2JpbGUg
MS4wLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQi
PgorCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4K
KworPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKy5zdGFyX3VwQSAgey13YXAtaW5wdXQtZm9ybWF0
OiAiKkEiIDsgfSAgICAvKiB1cHBlciBsZXR0ZXIsIHN5bWJvbCwgcHVuY3R1YXRpb24sICBOTyBu
dW1iZXIgKi8KKy5zdGFyX2xvd2Egey13YXAtaW5wdXQtZm9ybWF0OiAiKmEiIDsgfSAgICAvKiBs
b3dlciBsZXR0ZXIsIHN5bWJvbCwgcHVuY3R1YXRpb24sICBOTyBudW1iZXIgKi8KKy5zdGFyX3Vw
TiAgey13YXAtaW5wdXQtZm9ybWF0OiAiKk4iIDsgfSAgICAvKiBudW1iZXIgb25seSAqLworLnN0
YXJfbG93biB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqbiIgOyB9ICAgIC8qIG51bWJlciAsIHN5bWJv
bCwgcHVuY3R1YXRpb24sIG5vIGxldHRlciAqLworLnN0YXJfdXBYICB7LXdhcC1pbnB1dC1mb3Jt
YXQ6ICIqWCIgOyB9ICAgIC8qIHVwcGVyIGxldHRlciwgbnVtYmVyLCBzeW1ib2wsIHB1bmN0dWF0
aW9uLCBubyBsb3dlciBsZXR0ZXIgKi8KKy5zdGFyX2xvd3ggey13YXAtaW5wdXQtZm9ybWF0OiAi
KngiIDsgfSAgICAvKiBsb3dlciBsZXR0ZXIsIG51bWJlciwgc3ltYm9sLCBwdW5jdHVhdGlvbiwg
bm8gdXBwZXIgbGV0dGVyICovCisuc3Rhcl91cE0gIHstd2FwLWlucHV0LWZvcm1hdDogIipNIiA7
IH0gICAgLyogYW55dGhpbmcsIHdpdGggdXBwZXIgYXMgdGhlIGRlZmF1bHQgaW5wdXQgKi8KKy5z
dGFyX2xvd20gey13YXAtaW5wdXQtZm9ybWF0OiAiKm0iIDsgfSAgICAvKiBhbnl0aGluZywgd2l0
aCBsb3dlciBhcyB0aGUgZGVmYXVsdCBpbnB1dCAqLworLnRocmVlX04gICB7LXdhcC1pbnB1dC1m
b3JtYXQ6ICIzTiIgOyB9ICAgIC8qIHVwIHRvIDMgZGlnaXQgbnVtYmVyICovCisKKzwvc3R5bGU+
CisKKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorCis8L2hlYWQ+CisKKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKworPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwQSIgIGNs
YXNzPSJzdGFyX3VwQSIgLz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3dhIiBjbGFz
cz0ic3Rhcl9sb3dhIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwTiIgIGNsYXNz
PSJzdGFyX3VwTiIgLz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3duIiBjbGFzcz0i
c3Rhcl9sb3duIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwWCIgIGNsYXNzPSJz
dGFyX3VwWCIgLz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3d4IiBjbGFzcz0ic3Rh
cl9sb3d4IiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwTSIgIGNsYXNzPSJzdGFy
X3VwTSIgLz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3dtIiBjbGFzcz0ic3Rhcl9s
b3dtIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0aHJlZV9OIiAgY2xhc3M9InRocmVlX04i
IC8+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworZnVuY3Rpb24gZG9tVmFs
dWVPZihpZCkgeworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWU7
Cit9CitmdW5jdGlvbiB2aXNpYmxlVmFsdWVPZihpZCkgeworICAgIHZhciBlbCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBlbC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWND
b21tYW5kKCdTZWxlY3RBbGwnKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCku
dG9TdHJpbmcoKTsKK30KKworZnVuY3Rpb24gaW5wdXRLZXlzKHN0cikgeworICAgIGlmKCF3aW5k
b3cuZXZlbnRTZW5kZXIpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IoaSA9IDA7IGkgIT0gc3Ry
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oc3RyLmNoYXJBdChp
KSk7CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworfQorCit2YXIgc3RyID0gIkFhQmJD
Y0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IjsKKworZGVidWcoIkFzc3VtZSB0aGUgdXNlciBpbnB1
dCB0aGUgZm9sbG93aW5nIFwiIiArIHN0ciArICJcIiB0byBlYWNoIG9mIHRoZSBpbnB1dCBlbGVt
ZW50czxici8+PGJyLz4iKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqQSI7
fSBvbmx5IHRha2VzIHVwcGVyIGxldHRlcnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9uczxici8+Jyk7
CisKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGFyX3VwQSIpLmZvY3VzKCk7CitpbnB1dEtl
eXMoc3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJzdGFyX3VwQSIpJywnIkFCQ0RFRkchQCMk
JV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfdXBBIiknLCciQUJDREVG
RyFAIyQlXiwuOyInKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqYSI7fSBv
bmx5IHRha2VzIGxvd2VyIGxldHRlcnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9uczxiciAvPjxiciAv
PicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfbG93YSIpLmZvY3VzKCk7CitpbnB1
dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJzdGFyX2xvd2EiKScsICciYWJjZGVm
ZyFAIyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3dhIiknLCAn
ImFiY2RlZmchQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoi
Kk4iO30gb25seSB0YWtlcyBudW1iZXJzIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInN0YXJfdXBOIikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZh
bHVlT2YoInN0YXJfdXBOIiknLCAnIjEyMzQ1NiInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVP
Zigic3Rhcl91cE4iKScsICciMTIzNDU2IicpOworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1m
b3JtYXQ6IipuIjt9IG9ubHkgdGFrZXMgbnVtYmVycyAsIHN5bWJhbHMgYW5kIHB1bmN0dWF0aW9u
cyA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGFyX2xvd24iKS5mb2N1cygp
OworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl9sb3duIiknLCAn
IjEyMzQ1NiFAIyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3du
IiknLCAnIjEyMzQ1NiFAIyQlXiwuOyInKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9y
bWF0OiIqWCI7fSB0YWtlcyB1cHBlciBsZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBhbmQgcHVuY3R1
YXRpb25zIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfdXBYIikuZm9j
dXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfdXBYIikn
LCAnIkFCQ0RFRkcxMjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2Yo
InN0YXJfdXBYIiknLCAnIkFCQ0RFRkcxMjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIv
Pnstd2FwLWlucHV0LWZvcm1hdDoiKngiO30gdGFrZXMgbG93ZXIgbGV0dGVycyxudW1iZXJzLHN5
bWJhbHMgYW5kIHB1bmN0dWF0aW9ucyA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJzdGFyX2xvd3giKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFs
dWVPZigic3Rhcl9sb3d4IiknLCAnImFiY2RlZmcxMjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRC
ZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfbG93eCIpJywgJyJhYmNkZWZnMTIzNDU2IUAjJCVeLC47
IicpOworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IipNIjt9IHRha2VzIGFueSBj
aGFyYWN0ZXIgPGJyIC8+Jyk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl91cE0iKS5m
b2N1cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl91cE0i
KScsICciQWFCYkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJs
ZVZhbHVlT2YoInN0YXJfdXBNIiknLCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47Iicp
OworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IiptIjt9IHRha2VzIGFueSBjaGFy
YWN0ZXIgPGJyIC8+Jyk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl9sb3dtIikuZm9j
dXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfbG93bSIp
JywgJyJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxl
VmFsdWVPZigic3Rhcl9sb3dtIiknLCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47Iicp
OworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IjNOIjt9IHRha2VzIDMgbnVtYmVy
cyA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aHJlZV9OIikuZm9jdXMoKTsK
K2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInRocmVlX04iKScsICciMTIz
IicpOworc2hvdWxkQmUoJ3Zpc2libGVWYWx1ZU9mKCJ0aHJlZV9OIiknLCAnIjEyMyInKTsKKwor
Cis8L3NjcmlwdD4KKworCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1RoZXJlIGFyZSB0aHJlZSBmb3Jt
IGNvbnRyb2wgZWxlbWVudHMgYmVsb3csIHRoZSBmaXJzdCBvbmUgaXMgcmVxdWlyZWQgYW5kIGJs
YW5rLHZhbGlkaXR5LnZhbHVlTWlzc2luZyBzaG91bGQgYmUgdHJ1ZSwgdGhlIG90aGVyIHR3byBl
aXRoZXIgZG9uJ3QgaGF2ZSAtd2FwLWlucHV0LXJlcXVpcmVkIGFwcGxpZWQsIG9yIHRoZSAtd2Fw
LWlucHV0LXJlcXVpcmVkIGluZGljYXRlcyBmYWxzZSwgYW5kIGFyZSBub3QgcmVxdWlyZWQgLgor
CisgIAorU1VDQ0VTUyBTVUNDRVNTIFNVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd2Nz
cy93YXAtaW5wdXQtcmVxdWlyZWQueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93Y3NzL3dhcC1pbnB1dC1yZXF1aXJlZC54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElD
ICItLy9XQVBGT1JVTS9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iICJodHRwOi8vd3d3LndhcGZv
cnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8aGVhZD4KKzx0aXRsZT5yZXF1aXJlZCBhbmQgYmFz
aWMgdmFsdWVNaXNzaW5nPC90aXRsZT4KKworPC9oZWFkPgorCis8Ym9keT4KKzxwPlRoZXJlIGFy
ZSB0aHJlZSBmb3JtIGNvbnRyb2wgZWxlbWVudHMgYmVsb3csIHRoZSBmaXJzdCBvbmUgaXMgcmVx
dWlyZWQgYW5kIGJsYW5rLHZhbGlkaXR5LnZhbHVlTWlzc2luZyBzaG91bGQgYmUgdHJ1ZSwgdGhl
IG90aGVyIHR3byBlaXRoZXIgZG9uJ3QgaGF2ZSAtd2FwLWlucHV0LXJlcXVpcmVkIGFwcGxpZWQs
IG9yIHRoZSAtd2FwLWlucHV0LXJlcXVpcmVkIGluZGljYXRlcyBmYWxzZSwgYW5kIGFyZSBub3Qg
cmVxdWlyZWQgLjwvcD4KKzxpbnB1dCBuYW1lPSJyZXF1aXJlZCIgc3R5bGU9Ii13YXAtaW5wdXQt
cmVxdWlyZWQ6dHJ1ZTsiIC8+Cis8aW5wdXQgbmFtZT0ibm90X3NwZWNpZmllZCIgLz4KKzx0ZXh0
YXJlYSBuYW1lPSJub3RfcmVxdWlyZWQiIHN0eWxlPSItd2FwLWlucHV0LXJlcXVpcmVkOmZhbHNl
OyI+PC90ZXh0YXJlYT4KKzxwIGlkPSJjb25zb2xlIj4gPC9wPgorCis8c2NyaXB0IGxhbmd1YWdl
PSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gbG9nKG1lc3Nh
Z2UpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCAr
PSAgbWVzc2FnZSArICIgIFxuIjsKK30KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAg
IHYgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgicmVxdWlyZWQiKTsKKyAgICBsb2codlsw
XS52YWxpZGl0eS52YWx1ZU1pc3NpbmcgID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiKTsKKyAKKyAg
ICB2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIm5vdF9zcGVjaWZpZWQiKTsKKyAgICBs
b2coKCF2WzBdLnZhbGlkaXR5LnZhbHVlTWlzc2luZykgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSIp
OworCisgICAgdiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJub3RfcmVxdWlyZWQiKTsK
KyAgICBsb2coKCF2WzBdLnZhbGlkaXR5LnZhbHVlTWlzc2luZykgPyAiU1VDQ0VTUyIgOiAiRkFJ
TFVSRSIpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="37764"
          type_id="1"
          status="-"
          setter="staikos"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54050</attachid>
            <date>2010-04-22 03:49:55 -0700</date>
            <delta_ts>2010-05-02 19:15:19 -0700</delta_ts>
            <desc>Resubmission after addressing reviewer&apos;s comments</desc>
            <filename>37848.patch</filename>
            <type>text/plain</type>
            <size>26142</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODA4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDQtMjIgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9y
Y2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzg0OAor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV0NTUyAtd2FwLWlucHV0LWZvcm1hdCBhbmQgLXdhcC1p
bnB1dC1yZXF1aXJlZCBzdXBwb3J0IHRvIFdlYktpdAorICAgICAgICAtd2FwLWlucHV0LWZvcm1h
dCBkZWZpbmVzIGEgbWFzayAgdGhhdCBmaWx0ZXJzIHRoZSB1c2VyIGlucHV0IGZvciBhbiBpbnB1
dCBjb250cm9sCisgICAgICAgIC13YXAtaW5wdXQtcmVxdWlyZWQgc3BlY2lmaWVzIGlmIGFuIGlu
cHV0IGNvbnRyb2wgaXMgcmVxdWlyZWQuIElmIHRydWUsIGl0IG11c3QKKyAgICAgICAgYmUgZmls
bGVkIHdpdGggc29tZSB2YWxpZCB2YWx1ZSBiZWZvcmUgc3VibWlzc2lvbi4KKworICAgICAgICBU
ZXN0czogZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQueGh0bWwKKyAgICAgICAgICAgICAgIGZh
c3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQueGh0bWwKKworICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSk6CisgICAgICAg
ICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkpOgorICAg
ICAgICAqIGNzcy9XQ1NTUHJvcGVydHlOYW1lcy5pbjoKKyAgICAgICAgKiBkb20vSW5wdXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6OklucHV0RWxlbWVu
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybWF0Q29kZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3Vyc29yUG9zaXRpb25Ub01hc2tJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVs
ZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxl
bWVudDo6dmFsaWRhdGVJbnB1dE1hc2spOgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6OmlucHV0Rm9ybWF0TWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjpzZXRJbnB1dEZvcm1hdE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6bWF4SW5wdXRDaGFyc0FsbG93ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0TWF4SW5wdXRDaGFyc0Fs
bG93ZWQpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRXYXBJbnB1dEZvcm1hdCk6CisgICAgICAgICog
aHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50OjpkYXRhKToKKyAgICAgICAgKiB3bWwvV01MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OmRhdGEpOgorCiAyMDEwLTA0LTIyICBBbnRvbiBNdWhp
biAgPGFudG9ubUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0
aC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gNTgwNDkpCisrKyBXZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjkzLDYgKzE2OTMsMTUgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
VW5kZXJsaW5lOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRWYXJpYWJsZURlY2xhcmF0aW9u
QmxvY2s6CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2FwSW5wdXRGb3JtYXQ6CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0UmVxdWlyZWQ6
CisgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSgpOworICAgICAg
ICBicmVhazsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gcGFyc2VTVkdWYWx1ZShwcm9wSWQsIGltcG9ydGFudCk7CkBAIC0xNzIxLDYgKzE3
MzAsMjcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShXQ1NTKQorUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZVdDU1NJbnB1dFByb3BlcnR5KCkKK3sKKyAgICBSZWZQdHI8Q1NTVmFs
dWU+IHBhcnNlZFZhbHVlID0gMDsKKyAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpOworICAgIFN0cmluZyBpbnB1dFByb3BlcnR5OworICAgIGlmICh2YWx1
ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAgICBpbnB1dFByb3BlcnR5ID0g
U3RyaW5nKHZhbHVlLT5zdHJpbmcpOworCisgICAgaWYgKCFpbnB1dFByb3BlcnR5LmlzRW1wdHko
KSkKKyAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW5wdXRQ
cm9wZXJ0eSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworCisgICAgd2hpbGUgKG1f
dmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAvLyBwYXNzIGFsbCBvdGhlciB2YWx1ZXMsIGlmIGFu
eS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgCisgICAgLy8gdGhlIHBhcnNlciB3aWxsIHRoaW5rIHRo
YXQgaXQncyBub3QgZG9uZSBhbmQgd29uJ3QgcHJvY2VzcyB0aGlzIHByb3BlcnR5ICAKKyAgICB9
CisKKyAgICByZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisjZW5kaWYKKwogdm9pZCBDU1NQYXJzZXI6
OmFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBydmFsKQogewogICAgIGlmIChsdmFsKSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkocmV2aXNpb24gNTgwNDkp
CisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0xMzksNiArMTQwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKTsKICNlbmRpZgogCisjaWYgRU5B
QkxFKFdDU1MpCisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlV0NTU0lucHV0UHJv
cGVydHkoKTsKKyNlbmRpZgorCiAgICAgICAgIC8vIENTUzMgUGFyc2luZyBSb3V0aW5lcyAoZm9y
IHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gQ1NTMykKICAgICAgICAgYm9vbCBwYXJzZVNoYWRvdyhp
bnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAgICAgICAgIGJvb2wgcGFyc2VCb3JkZXJJbWFn
ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCwgUmVmUHRyPENTU1ZhbHVlPiYpOwpJbmRleDog
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDU4MDQ5KQorKysgV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOTQsNiArNTI5NCwyMyBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRTdHJva2U6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFZhcmlh
YmxlRGVjbGFyYXRpb25CbG9jazoKICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShXQ1NTKQor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dEZvcm1hdDoKKyAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlICYmIG1fZWxlbWVudC0+aGFzVGFnTmFtZShXZWJDb3JlOjppbnB1dFRhZykpIHsKKyAg
ICAgICAgICAgIFN0cmluZyBtYXNrID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9lbGVtZW50KS0+
c2V0V2FwSW5wdXRGb3JtYXQobWFzayk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0UmVxdWlyZWQ6CisgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZSAmJiBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKKyAgICAgICAg
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Kj4obV9lbGVtZW50KTsKKyAgICAgICAgICAgIGJvb2wgcmVxdWlyZWQg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSA9PSAidHJ1ZSI7CisgICAgICAgICAg
ICBlbGVtZW50LT5zZXRSZXF1aXJlZChyZXF1aXJlZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworI2VuZGlmIAorCiAjaWYgRU5BQkxFKFNWRykKICAgICBkZWZhdWx0OgogICAgICAgICAv
LyBUcnkgdGhlIFNWRyBwcm9wZXJ0aWVzCkluZGV4OiBXZWJDb3JlL2Nzcy9XQ1NTUHJvcGVydHlO
YW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9XQ1NTUHJvcGVydHlOYW1lcy5pbgko
cmV2aXNpb24gNTgwNDkpCisrKyBXZWJDb3JlL2Nzcy9XQ1NTUHJvcGVydHlOYW1lcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDUgQEAKKy13YXAtaW5wdXQtZm9ybWF0Cistd2FwLWlucHV0
LXJlcXVpcmVkCiAtd2FwLW1hcnF1ZWUtZGlyCiAtd2FwLW1hcnF1ZWUtbG9vcAogLXdhcC1tYXJx
dWVlLXNwZWVkCkluZGV4OiBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDU4MDQ5KQorKysgV2Vi
Q29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsMTUg
QEAKICNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50LmgiCisKKyNpZiBFTkFCTEUoV0NTUykKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5h
bWVzLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCisj
aW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgor
I2VuZGlmCisKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTM4LDYgKzE0NywxNCBAQCB2b2lkIElucHV0RWxl
bWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoCiAKIFN0cmluZyBJbnB1dEVsZW1lbnQ6OnNhbml0
aXplVmFsdWUoY29uc3QgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
cHJvcG9zZWRWYWx1ZSkKIHsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBJbnB1dEVsZW1lbnREYXRh
IGRhdGEgPSBjb25zdF9jYXN0PElucHV0RWxlbWVudCo+KGlucHV0RWxlbWVudCktPmRhdGEoKTsK
KyAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEsIHByb3Bvc2VkVmFsdWUpKSB7Cisg
ICAgICAgIGlmIChpc0NvbmZvcm1Ub0lucHV0TWFzayhkYXRhLCBkYXRhLnZhbHVlKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
ICAgIH0KKyNlbmRpZgogICAgIHJldHVybiBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0
VmFsdWUoaW5wdXRFbGVtZW50LCBwcm9wb3NlZFZhbHVlLCBzX21heGltdW1MZW5ndGgpOwogfQog
CkBAIC0xODMsNiArMjAwLDE4IEBAIHZvaWQgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0
SW5zZXIKIAogICAgIC8vIFRydW5jYXRlIHRoZSBpbnNlcnRlZCB0ZXh0IHRvIGF2b2lkIHZpb2xh
dGluZyB0aGUgbWF4TGVuZ3RoIGFuZCBvdGhlciBjb25zdHJhaW50cy4KICAgICBCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudCogdGV4dEV2ZW50ID0gc3RhdGljX2Nhc3Q8QmVmb3JlVGV4dEluc2VydGVk
RXZlbnQqPihldmVudCk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFN0cmluZyBjYW5kaWRhdGVTdHJpbmcgPSB0b1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50LT5yZW5kZXJlcigpKS0+dGV4dCgpOwor
ICAgIGlmIChzZWxlY3Rpb25MZW5ndGgpCisgICAgICAgIGNhbmRpZGF0ZVN0cmluZy5yZXBsYWNl
KHJhbmdlLT5zdGFydE9mZnNldCgpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIHRleHRFdmVudC0+dGV4
dCgpKTsKKyAgICBlbHNlCisgICAgICAgIGNhbmRpZGF0ZVN0cmluZy5pbnNlcnQodGV4dEV2ZW50
LT50ZXh0KCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICBpZiAoIWlzQ29uZm9ybVRvSW5w
dXRNYXNrKGlucHV0RWxlbWVudC0+ZGF0YSgpLCBjYW5kaWRhdGVTdHJpbmcpKSB7CisgICAgICAg
IHRleHRFdmVudC0+c2V0VGV4dCgiIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyNlbmRp
ZgogICAgIHRleHRFdmVudC0+c2V0VGV4dChzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGlucHV0RWxl
bWVudCwgdGV4dEV2ZW50LT50ZXh0KCksIGFwcGVuZGFibGVMZW5ndGgpKTsKIH0KIApAQCAtMjM0
LDYgKzI2MywxMCBAQCBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1lbnREYXRhKCkKICAgICAs
IG1fbWF4TGVuZ3RoKElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQogICAgICwgbV9jYWNo
ZWRTZWxlY3Rpb25TdGFydCgtMSkKICAgICAsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKC0xKQorI2lm
IEVOQUJMRShXQ1NTKQorICAgICwgbV9pbnB1dEZvcm1hdE1hc2soIiptIikKKyAgICAsIG1fbWF4
SW5wdXRDaGFyc0FsbG93ZWQoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCisjZW5kaWYK
IHsKIH0KIApAQCAtMjU1LDQgKzI4OCwxMzcgQEAgSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVu
dChFbGVtZW50KiBlbAogICAgIHJldHVybiAwOwogfQogCisjaWYgRU5BQkxFKFdDU1MpCitzdGF0
aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybWF0Q29kZXMoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBjb2RlcywgKCJBYU5uWHhNbSIpKTsKKyAgICBy
ZXR1cm4gY29kZXM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvblRvTWFza0lu
ZGV4KGNvbnN0IFN0cmluZyYgaW5wdXRGb3JtYXRNYXNrLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlv
bikKK3sKKyAgICBVQ2hhciBtYXNrOworICAgIGludCBpbmRleCA9IC0xOworICAgIGRvIHsKKyAg
ICAgICAgbWFzayA9IGlucHV0Rm9ybWF0TWFza1srK2luZGV4XTsKKyAgICAgICAgaWYgKG1hc2sg
PT0gJ1xcJykKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgIGVsc2UgaWYgKG1hc2sgPT0g
JyonIHx8IChpc0FTQ0lJRGlnaXQobWFzaykgJiYgbWFzayAhPSAnMCcpKSB7CisgICAgICAgICAg
ICBpbmRleCA9IGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGN1cnNvclBvc2l0aW9uLS0pOworCisgICAgcmV0
dXJuIGluZGV4OworfQorCitib29sIElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2so
Y29uc3QgSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBpbnB1dENoYXJzKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dENoYXJzLmxlbmd0aCgpOyArK2kp
CisgICAgICAgIGlmICghaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0YSwgaW5wdXRDaGFyc1tpXSwg
aSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1lbnRE
YXRhJiBkYXRhLCBVQ2hhciBpbkNoYXIsIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uKQoreworICAg
IFN0cmluZyBpbnB1dEZvcm1hdE1hc2sgPSBkYXRhLmlucHV0Rm9ybWF0TWFzaygpOworCisgICAg
aWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkgfHwgaW5wdXRGb3JtYXRNYXNrID09ICIqTSIg
fHwgaW5wdXRGb3JtYXRNYXNrID09ICIqbSIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGN1cnNvclBvc2l0aW9uID49IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgbWFza0luZGV4ID0gY3Vyc29yUG9zaXRp
b25Ub01hc2tJbmRleChpbnB1dEZvcm1hdE1hc2ssIGN1cnNvclBvc2l0aW9uKTsKKyAgICBib29s
IG9rID0gdHJ1ZTsKKyAgICBVQ2hhciBtYXNrID0gaW5wdXRGb3JtYXRNYXNrW21hc2tJbmRleF07
CisgICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hhcmFjdGVyIHdpdGggaW5wdXQgbWFzaworICAg
IHN3aXRjaCAobWFzaykgeworICAgIGNhc2UgJ0EnOgorICAgICAgICBvayA9ICFpc0FTQ0lJRGln
aXQoaW5DaGFyKSAmJiAhaXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShp
bkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdhJzoKKyAgICAgICAgb2sgPSAhaXNB
U0NJSURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlVcHBlcihpbkNoYXIpICYmIGlzQVNDSUlQcmlu
dGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnTic6CisgICAgICAgIG9r
ID0gaXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ24nOgor
ICAgICAgICBvayA9ICFpc0FTQ0lJQWxwaGEoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGlu
Q2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1gnOgorICAgICAgICBvayA9ICFpc0FT
Q0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgJ3gnOgorICAgICAgICBvayA9ICFpc0FTQ0lJVXBwZXIoaW5DaGFyKSAm
JiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ00n
OgorICAgIGNhc2UgJ20nOgorICAgICAgICBvayA9IGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgb2sgPSAobWFzayA9PSBpbkNo
YXIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gb2s7Cit9CisKK1N0cmlu
ZyBJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVudERhdGEmIGRhdGEs
IFN0cmluZyYgaW5wdXRNYXNrKQoreworICAgIGlucHV0TWFzay5yZXBsYWNlKCJcXFxcIiwgIlxc
Iik7CisKKyAgICBib29sIGlzVmFsaWQgPSB0cnVlOworICAgIGJvb2wgaGFzV2lsZGNhcmQgPSBm
YWxzZTsKKyAgICB1bnNpZ25lZCBlc2NhcGVDaGFyQ291bnQgPSAwOworICAgIHVuc2lnbmVkIG1h
c2tMZW5ndGggPSBpbnB1dE1hc2subGVuZ3RoKCk7CisgICAgVUNoYXIgZm9ybWF0Q29kZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFza0xlbmd0aDsgKytpKSB7CisgICAgICAgIGZv
cm1hdENvZGUgPSBpbnB1dE1hc2tbaV07CisgICAgICAgIGlmIChmb3JtYXRDb2RlcygpLmZpbmQo
Zm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChmb3JtYXRDb2RlID09ICcqJyB8
fCAoaXNBU0NJSURpZ2l0KGZvcm1hdENvZGUpICYmIGZvcm1hdENvZGUgIT0gJzAnKSkgeworICAg
ICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGNvZGVzIHdoaWNoIGVuZHMgd2l0aCAnKmYnIG9yICdu
ZicKKyAgICAgICAgICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrWysraV07CisgICAgICAg
ICAgICAgICAgaWYgKChpICsgMSAhPSBtYXNrTGVuZ3RoKSB8fCBmb3JtYXRDb2RlcygpLmZpbmQo
Zm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChmb3Jt
YXRDb2RlID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgdGhlIG5leHQg
bWFzayBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgKytl
c2NhcGVDaGFyQ291bnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlz
VmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWxsb3dlZCB0
byBiZSBlbnRlcmVkIGJ5IGlucHV0IG1hc2sKKyAgICB1bnNpZ25lZCBhbGxvd2VkTGVuZ3RoID0g
bWFza0xlbmd0aDsKKyAgICBpZiAoZXNjYXBlQ2hhckNvdW50KQorICAgICAgICBhbGxvd2VkTGVu
Z3RoIC09IGVzY2FwZUNoYXJDb3VudDsKKworICAgIGlmIChoYXNXaWxkY2FyZCkgeworICAgICAg
ICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW21hc2tMZW5ndGggLSAyXTsKKyAgICAgICAgaWYgKGZv
cm1hdENvZGUgPT0gJyonKQorICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9IGRhdGEubWF4SW5w
dXRDaGFyc0FsbG93ZWQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBs
ZWZ0TGVuID0gU3RyaW5nKCZmb3JtYXRDb2RlKS50b0ludCgpOworICAgICAgICAgICAgYWxsb3dl
ZExlbmd0aCA9IGxlZnRMZW4gKyBhbGxvd2VkTGVuZ3RoIC0gMjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChhbGxvd2VkTGVuZ3RoIDwgZGF0YS5tYXhJbnB1dENoYXJzQWxsb3dlZCgpKQor
ICAgICAgICBkYXRhLnNldE1heElucHV0Q2hhcnNBbGxvd2VkKGFsbG93ZWRMZW5ndGgpOworCisg
ICAgcmV0dXJuIGlucHV0TWFzazsKK30KKworI2VuZGlmCisKIH0KSW5kZXg6IFdlYkNvcmUvZG9t
L0lucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5o
CShyZXZpc2lvbiA1ODA0OSkKKysrIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw2ICs1NywxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2Fj
aGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
bGVjdCgpID0gMDsKKyAgCisjaWYgRU5BQkxFKFdDU1MpCisgICAgdmlydHVhbCBJbnB1dEVsZW1l
bnREYXRhIGRhdGEoKSBjb25zdCA9IDA7IAorI2VuZGlmCiAKICAgICBzdGF0aWMgY29uc3QgaW50
IHNfbWF4aW11bUxlbmd0aDsKICAgICBzdGF0aWMgY29uc3QgaW50IHNfZGVmYXVsdFNpemU7CkBA
IC03OSw2ICs4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgcGFyc2VNYXhMZW5n
dGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVsZW1lbnQqLCBN
YXBwZWRBdHRyaWJ1dGUqKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVWYWx1ZUlmTmVlZGVkKElu
cHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqKTsKICAgICBzdGF0aWMgdm9pZCBub3RpZnlG
b3JtU3RhdGVDaGFuZ2VkKEVsZW1lbnQqKTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBzdGF0aWMg
Ym9vbCBpc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiwgY29uc3Qg
U3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5w
dXRFbGVtZW50RGF0YSYsIFVDaGFyLCB1bnNpZ25lZCk7CisgICAgc3RhdGljIFN0cmluZyB2YWxp
ZGF0ZUlucHV0TWFzayhJbnB1dEVsZW1lbnREYXRhJiwgU3RyaW5nJik7CisjZW5kaWYKIH07CiAK
IC8vIEhUTUwvV01MSW5wdXRFbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZhcmlh
YmxlCkBAIC0xMDgsNiArMTE3LDE1IEBAIHB1YmxpYzoKICAgICBpbnQgY2FjaGVkU2VsZWN0aW9u
RW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7IH0KICAgICB2b2lkIHNl
dENhY2hlZFNlbGVjdGlvbkVuZChpbnQgdmFsdWUpIHsgbV9jYWNoZWRTZWxlY3Rpb25FbmQgPSB2
YWx1ZTsgfQogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFzaygp
IGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXRNYXNrOyB9CisgICAgdm9pZCBzZXRJbnB1dEZv
cm1hdE1hc2soY29uc3QgU3RyaW5nJiBtYXNrKSB7IG1faW5wdXRGb3JtYXRNYXNrID0gbWFzazsg
fQorIAorICAgIHVuc2lnbmVkIG1heElucHV0Q2hhcnNBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhJbnB1dENoYXJzQWxsb3dlZDsgfQorICAgIHZvaWQgc2V0TWF4SW5wdXRDaGFyc0FsbG93
ZWQodW5zaWduZWQgbWF4TGVuZ3RoKSB7IG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQgPSBtYXhMZW5n
dGg7IH0KKyAgCisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwog
ICAgIFN0cmluZyBtX3ZhbHVlOwpAQCAtMTE2LDYgKzEzNCwxMCBAQCBwcml2YXRlOgogICAgIGlu
dCBtX21heExlbmd0aDsKICAgICBpbnQgbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKICAgICBpbnQg
bV9jYWNoZWRTZWxlY3Rpb25FbmQ7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgU3RyaW5nIG1faW5w
dXRGb3JtYXRNYXNrOworICAgIHVuc2lnbmVkIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQ7CisjZW5k
aWYKIH07CiAKIElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoRWxlbWVudCopOwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNTgwNDkpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NjcsNCArMjc2Nywx
NSBAQCBIVE1MT3B0aW9uRWxlbWVudCogSFRNTElucHV0RWxlbWVudDo6c2VsCiB9CiAjZW5kaWYg
IC8vIEVOQUJMRShEQVRBTElTVCkKIAorI2lmIEVOQUJMRShXQ1NTKQordm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcmIG1hc2spCit7CisgICAgU3RyaW5nIHZh
bGlkYXRlTWFzayA9IHZhbGlkYXRlSW5wdXRNYXNrKG1fZGF0YSwgbWFzayk7CisgICAgaWYgKCF2
YWxpZGF0ZU1hc2suaXNFbXB0eSgpKQorICAgICAgICBtX2RhdGEuc2V0SW5wdXRGb3JtYXRNYXNr
KHZhbGlkYXRlTWFzayk7Cit9CisjZW5kaWYKKworCisKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDU4MDQ5KQorKysgV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDYgKzI3MiwxMSBAQCBwdWJs
aWM6CiAgICAgLy8gQW4gaW5zdGFuY2UgcG9pbnRlZCBieSB0aGUgRGF0ZUNvbXBvbmVudHMqIHBh
cmFtZXRlciB3aWxsIGhhdmUgcGFyc2VkIHZhbHVlcyBhbmQgYmUKICAgICAvLyBtb2RpZmllZCBl
dmVuIGlmIHRoZSBwYXJzaW5nIGZhaWxzLiAgVGhlIERhdGVDb21wb25lbnRzKiBwYXJhbWV0ZXIg
bWF5IGJlIDAuCiAgICAgc3RhdGljIGJvb2wgcGFyc2VUb0RhdGVDb21wb25lbnRzKElucHV0VHlw
ZSwgY29uc3QgU3RyaW5nJiwgRGF0ZUNvbXBvbmVudHMqKTsKKworI2lmIEVOQUJMRShXQ1NTKQor
ICAgIHZvaWQgc2V0V2FwSW5wdXRGb3JtYXQoU3RyaW5nJiBtYXNrKTsKKyAgICB2aXJ0dWFsIElu
cHV0RWxlbWVudERhdGEgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorI2VuZGlmCiAg
ICAgCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3Vt
ZW50KCk7CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNTgwNDkpCisrKyBXZWJD
b3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsOSBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soY29uc3QgU3RyaW5n
Jik7CiAgICAgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyLCB1bnNpZ25lZCwgYm9v
bCBpc1VzZXJJbnB1dCA9IHRydWUpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIHZpcnR1YWwgSW5w
dXRFbGVtZW50RGF0YSBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisjZW5kaWYKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1ODA4NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE1IEBACisyMDEwLTA0LTIyICBDaGFybGVzIFdlaSAgPGNoYXJsZXMud2VpQHRvcmNo
bW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc4NDgKKyAg
ICAgICAgQWRkIHRlc3QgY2FzZXMgZm9yIC13YXAtaW5wdXQtZm9ybWF0IGFuZCAtd2FwLWlucHV0
LXJlcXVpcmVkLgorCisgICAgICAgICogZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL3dhcC1pbnB1dC1yZXF1aXJlZC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQueGh0
bWw6IEFkZGVkLgorCiAyMDEwLTA0LTIyICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU4MDY5LgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorQXNzdW1lIHRoZSB1c2Vy
IGlucHV0IHRoZSBmb2xsb3dpbmcgIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IiB0byBl
YWNoIG9mIHRoZSBpbnB1dCBlbGVtZW50cworey13YXAtaW5wdXQtZm9ybWF0OiIqQSI7fSBvbmx5
IHRha2VzIHVwcGVyIGxldHRlcnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9ucworUEFTUyBkb21WYWx1
ZU9mKCJzdGFyX3VwQSIpIGlzICJBQkNERUZHIUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFsdWVP
Zigic3Rhcl91cEEiKSBpcyAiQUJDREVGRyFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1hdDoi
KmEiO30gb25seSB0YWtlcyBsb3dlciBsZXR0ZXJzLCBzeW1ib2xzLCBwdW5jdHVhdGlvbnMKK1BB
U1MgZG9tVmFsdWVPZigic3Rhcl9sb3dhIikgaXMgImFiY2RlZmchQCMkJV4sLjsiCitQQVNTIHZp
c2libGVWYWx1ZU9mKCJzdGFyX2xvd2EiKSBpcyAiYWJjZGVmZyFAIyQlXiwuOyIKK3std2FwLWlu
cHV0LWZvcm1hdDoiKk4iO30gb25seSB0YWtlcyBudW1iZXJzIAorUEFTUyBkb21WYWx1ZU9mKCJz
dGFyX3VwTiIpIGlzICIxMjM0NTYiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX3VwTiIpIGlz
ICIxMjM0NTYiCit7LXdhcC1pbnB1dC1mb3JtYXQ6IipuIjt9IG9ubHkgdGFrZXMgbnVtYmVycyAs
IHN5bWJhbHMgYW5kIHB1bmN0dWF0aW9ucyAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl9sb3duIikg
aXMgIjEyMzQ1NiFAIyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93biIpIGlz
ICIxMjM0NTYhQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3JtYXQ6IipYIjt9IHRha2VzIHVwcGVy
IGxldHRlcnMsbnVtYmVycyxzeW1iYWxzIGFuZCBwdW5jdHVhdGlvbnMgCitQQVNTIGRvbVZhbHVl
T2YoInN0YXJfdXBYIikgaXMgIkFCQ0RFRkcxMjM0NTYhQCMkJV4sLjsiCitQQVNTIHZpc2libGVW
YWx1ZU9mKCJzdGFyX3VwWCIpIGlzICJBQkNERUZHMTIzNDU2IUAjJCVeLC47Igorey13YXAtaW5w
dXQtZm9ybWF0OiIqeCI7fSB0YWtlcyBsb3dlciBsZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBhbmQg
cHVuY3R1YXRpb25zIAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX2xvd3giKSBpcyAiYWJjZGVmZzEy
MzQ1NiFAIyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93eCIpIGlzICJhYmNk
ZWZnMTIzNDU2IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqTSI7fSB0YWtlcyBhbnkg
Y2hhcmFjdGVyIAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX3VwTSIpIGlzICJBYUJiQ2NEZEVlRmZH
ZzEyMzQ1NiFAIyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfdXBNIikgaXMgIkFh
QmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqbSI7fSB0
YWtlcyBhbnkgY2hhcmFjdGVyIAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX2xvd20iKSBpcyAiQWFC
YkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX2xv
d20iKSBpcyAiQWFCYkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3Jt
YXQ6IjNOIjt9IHRha2VzIDMgbnVtYmVycyAKK1BBU1MgZG9tVmFsdWVPZigidGhyZWVfTiIpIGlz
ICIxMjMiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJ0aHJlZV9OIikgaXMgIjEyMyIKKyAgICAgICAg
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0Lnho
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+
Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNL0RURCBYSFRNTCBNb2JpbGUgMS4w
Ly9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiPgor
Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKwor
PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKy5zdGFyX3VwQSAgey13YXAtaW5wdXQtZm9ybWF0OiAi
KkEiIDsgfSAgICAvKiB1cHBlciBsZXR0ZXIsIHN5bWJvbCwgcHVuY3R1YXRpb24sICBOTyBudW1i
ZXIgKi8KKy5zdGFyX2xvd2Egey13YXAtaW5wdXQtZm9ybWF0OiAiKmEiIDsgfSAgICAvKiBsb3dl
ciBsZXR0ZXIsIHN5bWJvbCwgcHVuY3R1YXRpb24sICBOTyBudW1iZXIgKi8KKy5zdGFyX3VwTiAg
ey13YXAtaW5wdXQtZm9ybWF0OiAiKk4iIDsgfSAgICAvKiBudW1iZXIgb25seSAqLworLnN0YXJf
bG93biB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqbiIgOyB9ICAgIC8qIG51bWJlciAsIHN5bWJvbCwg
cHVuY3R1YXRpb24sIG5vIGxldHRlciAqLworLnN0YXJfdXBYICB7LXdhcC1pbnB1dC1mb3JtYXQ6
ICIqWCIgOyB9ICAgIC8qIHVwcGVyIGxldHRlciwgbnVtYmVyLCBzeW1ib2wsIHB1bmN0dWF0aW9u
LCBubyBsb3dlciBsZXR0ZXIgKi8KKy5zdGFyX2xvd3ggey13YXAtaW5wdXQtZm9ybWF0OiAiKngi
IDsgfSAgICAvKiBsb3dlciBsZXR0ZXIsIG51bWJlciwgc3ltYm9sLCBwdW5jdHVhdGlvbiwgbm8g
dXBwZXIgbGV0dGVyICovCisuc3Rhcl91cE0gIHstd2FwLWlucHV0LWZvcm1hdDogIipNIiA7IH0g
ICAgLyogYW55dGhpbmcsIHdpdGggdXBwZXIgYXMgdGhlIGRlZmF1bHQgaW5wdXQgKi8KKy5zdGFy
X2xvd20gey13YXAtaW5wdXQtZm9ybWF0OiAiKm0iIDsgfSAgICAvKiBhbnl0aGluZywgd2l0aCBs
b3dlciBhcyB0aGUgZGVmYXVsdCBpbnB1dCAqLworLnRocmVlX04gICB7LXdhcC1pbnB1dC1mb3Jt
YXQ6ICIzTiIgOyB9ICAgIC8qIHVwIHRvIDMgZGlnaXQgbnVtYmVyICovCisKKzwvc3R5bGU+CisK
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
Cis8L2hlYWQ+CisKKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKworPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwQSIgIGNsYXNz
PSJzdGFyX3VwQSIgLz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3dhIiBjbGFzcz0i
c3Rhcl9sb3dhIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwTiIgIGNsYXNzPSJz
dGFyX3VwTiIgLz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3duIiBjbGFzcz0ic3Rh
cl9sb3duIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwWCIgIGNsYXNzPSJzdGFy
X3VwWCIgLz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3d4IiBjbGFzcz0ic3Rhcl9s
b3d4IiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwTSIgIGNsYXNzPSJzdGFyX3Vw
TSIgLz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3dtIiBjbGFzcz0ic3Rhcl9sb3dt
IiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0aHJlZV9OIiAgY2xhc3M9InRocmVlX04iIC8+
CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworZnVuY3Rpb24gZG9tVmFsdWVP
ZihpZCkgeworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWU7Cit9
CitmdW5jdGlvbiB2aXNpYmxlVmFsdWVPZihpZCkgeworICAgIHZhciBlbCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGlkKTsKKyAgICBlbC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21t
YW5kKCdTZWxlY3RBbGwnKTsKKyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkudG9T
dHJpbmcoKTsKK30KKworZnVuY3Rpb24gaW5wdXRLZXlzKHN0cikgeworICAgIGlmKCF3aW5kb3cu
ZXZlbnRTZW5kZXIpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IoaSA9IDA7IGkgIT0gc3RyLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oc3RyLmNoYXJBdChpKSk7
CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworfQorCit2YXIgc3RyID0gIkFhQmJDY0Rk
RWVGZkdnMTIzNDU2IUAjJCVeLC47IjsKKworZGVidWcoIkFzc3VtZSB0aGUgdXNlciBpbnB1dCB0
aGUgZm9sbG93aW5nIFwiIiArIHN0ciArICJcIiB0byBlYWNoIG9mIHRoZSBpbnB1dCBlbGVtZW50
czxici8+PGJyLz4iKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqQSI7fSBv
bmx5IHRha2VzIHVwcGVyIGxldHRlcnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9uczxici8+Jyk7CisK
K2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGFyX3VwQSIpLmZvY3VzKCk7CitpbnB1dEtleXMo
c3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJzdGFyX3VwQSIpJywnIkFCQ0RFRkchQCMkJV4s
LjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfdXBBIiknLCciQUJDREVGRyFA
IyQlXiwuOyInKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqYSI7fSBvbmx5
IHRha2VzIGxvd2VyIGxldHRlcnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9uczxiciAvPjxiciAvPicp
OworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfbG93YSIpLmZvY3VzKCk7CitpbnB1dEtl
eXMoc3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJzdGFyX2xvd2EiKScsICciYWJjZGVmZyFA
IyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3dhIiknLCAnImFi
Y2RlZmchQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiKk4i
O30gb25seSB0YWtlcyBudW1iZXJzIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InN0YXJfdXBOIikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVl
T2YoInN0YXJfdXBOIiknLCAnIjEyMzQ1NiInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigi
c3Rhcl91cE4iKScsICciMTIzNDU2IicpOworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3Jt
YXQ6IipuIjt9IG9ubHkgdGFrZXMgbnVtYmVycyAsIHN5bWJhbHMgYW5kIHB1bmN0dWF0aW9ucyA8
YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGFyX2xvd24iKS5mb2N1cygpOwor
aW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl9sb3duIiknLCAnIjEy
MzQ1NiFAIyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3duIikn
LCAnIjEyMzQ1NiFAIyQlXiwuOyInKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0
OiIqWCI7fSB0YWtlcyB1cHBlciBsZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBhbmQgcHVuY3R1YXRp
b25zIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfdXBYIikuZm9jdXMo
KTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfdXBYIiknLCAn
IkFCQ0RFRkcxMjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0
YXJfdXBYIiknLCAnIkFCQ0RFRkcxMjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnst
d2FwLWlucHV0LWZvcm1hdDoiKngiO30gdGFrZXMgbG93ZXIgbGV0dGVycyxudW1iZXJzLHN5bWJh
bHMgYW5kIHB1bmN0dWF0aW9ucyA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJz
dGFyX2xvd3giKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFsdWVP
Zigic3Rhcl9sb3d4IiknLCAnImFiY2RlZmcxMjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgn
dmlzaWJsZVZhbHVlT2YoInN0YXJfbG93eCIpJywgJyJhYmNkZWZnMTIzNDU2IUAjJCVeLC47Iicp
OworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IipNIjt9IHRha2VzIGFueSBjaGFy
YWN0ZXIgPGJyIC8+Jyk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl91cE0iKS5mb2N1
cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl91cE0iKScs
ICciQWFCYkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZh
bHVlT2YoInN0YXJfdXBNIiknLCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IicpOwor
CitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IiptIjt9IHRha2VzIGFueSBjaGFyYWN0
ZXIgPGJyIC8+Jyk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl9sb3dtIikuZm9jdXMo
KTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfbG93bSIpJywg
JyJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFs
dWVPZigic3Rhcl9sb3dtIiknLCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IicpOwor
CitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IjNOIjt9IHRha2VzIDMgbnVtYmVycyA8
YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aHJlZV9OIikuZm9jdXMoKTsKK2lu
cHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInRocmVlX04iKScsICciMTIzIicp
Oworc2hvdWxkQmUoJ3Zpc2libGVWYWx1ZU9mKCJ0aHJlZV9OIiknLCAnIjEyMyInKTsKKworCis8
L3NjcmlwdD4KKworCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dj
c3Mvd2FwLWlucHV0LXJlcXVpcmVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK1RoZXJlIGFyZSB0aHJlZSBmb3JtIGNv
bnRyb2wgZWxlbWVudHMgYmVsb3csIHRoZSBmaXJzdCBvbmUgaXMgcmVxdWlyZWQgYW5kIGJsYW5r
LHZhbGlkaXR5LnZhbHVlTWlzc2luZyBzaG91bGQgYmUgdHJ1ZSwgdGhlIG90aGVyIHR3byBlaXRo
ZXIgZG9uJ3QgaGF2ZSAtd2FwLWlucHV0LXJlcXVpcmVkIGFwcGxpZWQsIG9yIHRoZSAtd2FwLWlu
cHV0LXJlcXVpcmVkIGluZGljYXRlcyBmYWxzZSwgYW5kIGFyZSBub3QgcmVxdWlyZWQgLgorCisg
IAorU1VDQ0VTUyBTVUNDRVNTIFNVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93
YXAtaW5wdXQtcmVxdWlyZWQueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
Y3NzL3dhcC1pbnB1dC1yZXF1aXJlZC54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICIt
Ly9XQVBGT1JVTS9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiPgorCis8aGVhZD4KKzx0aXRsZT5yZXF1aXJlZCBhbmQgYmFzaWMg
dmFsdWVNaXNzaW5nPC90aXRsZT4KKworPC9oZWFkPgorCis8Ym9keT4KKzxwPlRoZXJlIGFyZSB0
aHJlZSBmb3JtIGNvbnRyb2wgZWxlbWVudHMgYmVsb3csIHRoZSBmaXJzdCBvbmUgaXMgcmVxdWly
ZWQgYW5kIGJsYW5rLHZhbGlkaXR5LnZhbHVlTWlzc2luZyBzaG91bGQgYmUgdHJ1ZSwgdGhlIG90
aGVyIHR3byBlaXRoZXIgZG9uJ3QgaGF2ZSAtd2FwLWlucHV0LXJlcXVpcmVkIGFwcGxpZWQsIG9y
IHRoZSAtd2FwLWlucHV0LXJlcXVpcmVkIGluZGljYXRlcyBmYWxzZSwgYW5kIGFyZSBub3QgcmVx
dWlyZWQgLjwvcD4KKzxpbnB1dCBuYW1lPSJyZXF1aXJlZCIgc3R5bGU9Ii13YXAtaW5wdXQtcmVx
dWlyZWQ6dHJ1ZTsiIC8+Cis8aW5wdXQgbmFtZT0ibm90X3NwZWNpZmllZCIgLz4KKzx0ZXh0YXJl
YSBuYW1lPSJub3RfcmVxdWlyZWQiIHN0eWxlPSItd2FwLWlucHV0LXJlcXVpcmVkOmZhbHNlOyI+
PC90ZXh0YXJlYT4KKzxwIGlkPSJjb25zb2xlIj4gPC9wPgorCis8c2NyaXB0IGxhbmd1YWdlPSJK
YXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gbG9nKG1lc3NhZ2Up
IHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSAg
bWVzc2FnZSArICIgIFxuIjsKK30KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHYg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgicmVxdWlyZWQiKTsKKyAgICBsb2codlswXS52
YWxpZGl0eS52YWx1ZU1pc3NpbmcgID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiKTsKKyAKKyAgICB2
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIm5vdF9zcGVjaWZpZWQiKTsKKyAgICBsb2co
KCF2WzBdLnZhbGlkaXR5LnZhbHVlTWlzc2luZykgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSIpOwor
CisgICAgdiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJub3RfcmVxdWlyZWQiKTsKKyAg
ICBsb2coKCF2WzBdLnZhbGlkaXR5LnZhbHVlTWlzc2luZykgPyAiU1VDQ0VTUyIgOiAiRkFJTFVS
RSIpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54685</attachid>
            <date>2010-04-29 02:31:36 -0700</date>
            <delta_ts>2010-05-03 21:23:08 -0700</delta_ts>
            <desc>make the test cases conditional for WCSS</desc>
            <filename>37848.patch</filename>
            <type>text/plain</type>
            <size>27787</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODQ4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDQtMjkgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9y
Y2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnX2NnaT9pZD0zNzg0OAor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV0NTUyAtd2FwLWlucHV0LWZvcm1hdCBhbmQgLXdhcC1p
bnB1dC1yZXF1aXJlZCBzdXBwb3J0IHRvIFdlYktpdC4KKyAgICAgICAgLXdhcC1pbnB1dC1mb3Jt
YXQgZGVmaW5lcyBhIG1hc2sgdGhhdCBmaWx0ZXJzIHRoZSB1c2VyIGlucHV0IGZvciBhbiBpbnB1
dCBjb250cm9sCisgICAgICAgIC13YXAtaW5wdXQtcmVxdWlyZWQgc3BlY2lmaWVzIGlmIGFuIGlu
cHV0IGNvbnRyb2wgaXMgcmVxdWlyZWQsIElmIHRydWUsIGl0IG11c3QKKyAgICAgICAgYmUgZmls
bGVkIHdpdGggc29tZSB2YWxpZCB2YWx1ZSBiZWZvcmUgc3VibWlzc2lvbi4KKworICAgICAgICBU
ZXN0czogZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQueGh0bWwKKyAgICAgICAgICAgICAgIGZh
c3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQueGh0bWwKKworICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSk6CisgICAgICAg
ICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkpOgorICAg
ICAgICAqIGNzcy9XQ1NTUHJvcGVydHlOYW1lcy5pbjoKKyAgICAgICAgKiBkb20vSW5wdXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6OklucHV0RWxlbWVu
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybWF0Q29kZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3Vyc29yUG9zaXRpb25Ub01hc2tJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVs
ZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxl
bWVudDo6dmFsaWRhdGVJbnB1dE1hc2spOgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6OmlucHV0Rm9ybWF0TWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjpzZXRJbnB1dEZvcm1hdE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6bWF4SW5wdXRDaGFyc0FsbG93ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0TWF4SW5wdXRDaGFyc0Fs
bG93ZWQpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRXYXBJbnB1dEZvcm1hdCk6CisgICAgICAgICog
aHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50OjpkYXRhKToKKyAgICAgICAgKiB3bWwvV01MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OmRhdGEpOgorCiAyMDEwLTA0LTI5ICBHdXN0YXZvIFN2
ZXJ6dXQgQmFyYmllcmkgIDxiYXJiaWVyaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gNTg0ODQpCisr
KyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAyLDYgKzE3
MDIsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRW
YXJpYWJsZURlY2xhcmF0aW9uQmxvY2s6CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFC
TEUoV0NTUykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRGb3JtYXQ6CisgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdhcElucHV0UmVxdWlyZWQ6CisgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VXQ1NTSW5wdXRQ
cm9wZXJ0eSgpOworICAgICAgICBicmVhazsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICAg
ICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gcGFyc2VTVkdWYWx1ZShwcm9wSWQsIGltcG9ydGFu
dCk7CkBAIC0xNzMwLDYgKzE3MzksMjcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50
IHByb3BJZCwgYgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShXQ1NTKQorUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVdDU1NJbnB1dFByb3BlcnR5KCkKK3sK
KyAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlID0gMDsKKyAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOworICAgIFN0cmluZyBpbnB1dFByb3Bl
cnR5OworICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklO
RyB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQorICAgICAg
ICBpbnB1dFByb3BlcnR5ID0gU3RyaW5nKHZhbHVlLT5zdHJpbmcpOworCisgICAgaWYgKCFpbnB1
dFByb3BlcnR5LmlzRW1wdHkoKSkKKyAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoaW5wdXRQcm9wZXJ0eSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcp
OworCisgICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5uZXh0KCkpIHsKKyAgICAvLyBwYXNzIGFsbCBv
dGhlciB2YWx1ZXMsIGlmIGFueS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgCisgICAgLy8gdGhlIHBh
cnNlciB3aWxsIHRoaW5rIHRoYXQgaXQncyBub3QgZG9uZSBhbmQgd29uJ3QgcHJvY2VzcyB0aGlz
IHByb3BlcnR5ICAKKyAgICB9CisKKyAgICByZXR1cm4gcGFyc2VkVmFsdWU7Cit9CisjZW5kaWYK
Kwogdm9pZCBDU1NQYXJzZXI6OmFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKQogewogICAgIGlmIChsdmFsKSB7CkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
aAkocmV2aXNpb24gNTg0ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMyBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCAg
VG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0xMzksNiArMTQwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTVkdTdHJva2VEYXNoYXJyYXkoKTsK
ICNlbmRpZgogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IHBhcnNlV0NTU0lucHV0UHJvcGVydHkoKTsKKyNlbmRpZgorCiAgICAgICAgIC8vIENTUzMgUGFy
c2luZyBSb3V0aW5lcyAoZm9yIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gQ1NTMykKICAgICAgICAg
Ym9vbCBwYXJzZVNoYWRvdyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAgICAgICAgIGJv
b2wgcGFyc2VCb3JkZXJJbWFnZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCwgUmVmUHRyPENT
U1ZhbHVlPiYpOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDU4NDg0
KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzMjYsNiArNTMyNiwyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHko
aW50CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2U6CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFZhcmlhYmxlRGVjbGFyYXRpb25CbG9jazoKICAgICAgICAgcmV0dXJuOwor
I2lmIEVOQUJMRShXQ1NTKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dEZvcm1hdDoKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIG1fZWxlbWVudC0+aGFzVGFnTmFtZShXZWJDb3Jl
OjppbnB1dFRhZykpIHsKKyAgICAgICAgICAgIFN0cmluZyBtYXNrID0gcHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4obV9lbGVtZW50KS0+c2V0V2FwSW5wdXRGb3JtYXQobWFzayk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0UmVxdWlyZWQ6Cisg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBtX2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkpIHsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obV9lbGVtZW50KTsKKyAgICAgICAg
ICAgIGJvb2wgcmVxdWlyZWQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSA9PSAi
dHJ1ZSI7CisgICAgICAgICAgICBlbGVtZW50LT5zZXRSZXF1aXJlZChyZXF1aXJlZCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuOworI2VuZGlmIAorCiAjaWYgRU5BQkxFKFNWRykKICAgICBk
ZWZhdWx0OgogICAgICAgICAvLyBUcnkgdGhlIFNWRyBwcm9wZXJ0aWVzCkluZGV4OiBXZWJDb3Jl
L2Nzcy9XQ1NTUHJvcGVydHlOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9XQ1NT
UHJvcGVydHlOYW1lcy5pbgkocmV2aXNpb24gNTg0ODQpCisrKyBXZWJDb3JlL2Nzcy9XQ1NTUHJv
cGVydHlOYW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUgQEAKKy13YXAtaW5wdXQt
Zm9ybWF0Cistd2FwLWlucHV0LXJlcXVpcmVkCiAtd2FwLW1hcnF1ZWUtZGlyCiAtd2FwLW1hcnF1
ZWUtbG9vcAogLXdhcC1tYXJxdWVlLXNwZWVkCkluZGV4OiBXZWJDb3JlL2RvbS9JbnB1dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDU4NDg0KQorKysgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsMTUgQEAKICNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKIAogI2luY2x1
ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCisKKyNpZiBFTkFCTEUoV0NTUykKKyNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUg
IkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NT
U3R5bGVTZWxlY3Rvci5oIgorI2VuZGlmCisKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRl
ICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTM4LDYgKzE0Nywx
NCBAQCB2b2lkIElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoCiAKIFN0cmluZyBJ
bnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWUoY29uc3QgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1l
bnQsIGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKIHsKKyNpZiBFTkFCTEUoV0NTUykKKyAg
ICBJbnB1dEVsZW1lbnREYXRhIGRhdGEgPSBjb25zdF9jYXN0PElucHV0RWxlbWVudCo+KGlucHV0
RWxlbWVudCktPmRhdGEoKTsKKyAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEsIHBy
b3Bvc2VkVmFsdWUpKSB7CisgICAgICAgIGlmIChpc0NvbmZvcm1Ub0lucHV0TWFzayhkYXRhLCBk
YXRhLnZhbHVlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIH0KKyNlbmRpZgogICAgIHJldHVybiBJbnB1dEVsZW1lbnQ6
OnNhbml0aXplVXNlcklucHV0VmFsdWUoaW5wdXRFbGVtZW50LCBwcm9wb3NlZFZhbHVlLCBzX21h
eGltdW1MZW5ndGgpOwogfQogCkBAIC0xODMsNiArMjAwLDE4IEBAIHZvaWQgSW5wdXRFbGVtZW50
OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXIKIAogICAgIC8vIFRydW5jYXRlIHRoZSBpbnNlcnRlZCB0
ZXh0IHRvIGF2b2lkIHZpb2xhdGluZyB0aGUgbWF4TGVuZ3RoIGFuZCBvdGhlciBjb25zdHJhaW50
cy4KICAgICBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCogdGV4dEV2ZW50ID0gc3RhdGljX2Nhc3Q8
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQqPihldmVudCk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFN0cmluZyBjYW5k
aWRhdGVTdHJpbmcgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50LT5yZW5k
ZXJlcigpKS0+dGV4dCgpOworICAgIGlmIChzZWxlY3Rpb25MZW5ndGgpCisgICAgICAgIGNhbmRp
ZGF0ZVN0cmluZy5yZXBsYWNlKHJhbmdlLT5zdGFydE9mZnNldCgpLCByYW5nZS0+ZW5kT2Zmc2V0
KCksIHRleHRFdmVudC0+dGV4dCgpKTsKKyAgICBlbHNlCisgICAgICAgIGNhbmRpZGF0ZVN0cmlu
Zy5pbnNlcnQodGV4dEV2ZW50LT50ZXh0KCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICBp
ZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGlucHV0RWxlbWVudC0+ZGF0YSgpLCBjYW5kaWRhdGVT
dHJpbmcpKSB7CisgICAgICAgIHRleHRFdmVudC0+c2V0VGV4dCgiIik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKyNlbmRpZgogICAgIHRleHRFdmVudC0+c2V0VGV4dChzYW5pdGl6ZVVzZXJJ
bnB1dFZhbHVlKGlucHV0RWxlbWVudCwgdGV4dEV2ZW50LT50ZXh0KCksIGFwcGVuZGFibGVMZW5n
dGgpKTsKIH0KIApAQCAtMjM0LDYgKzI2MywxMCBAQCBJbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVs
ZW1lbnREYXRhKCkKICAgICAsIG1fbWF4TGVuZ3RoKElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVu
Z3RoKQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCgtMSkKICAgICAsIG1fY2FjaGVkU2Vs
ZWN0aW9uRW5kKC0xKQorI2lmIEVOQUJMRShXQ1NTKQorICAgICwgbV9pbnB1dEZvcm1hdE1hc2so
IiptIikKKyAgICAsIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQoSW5wdXRFbGVtZW50OjpzX21heGlt
dW1MZW5ndGgpCisjZW5kaWYKIHsKIH0KIApAQCAtMjU1LDQgKzI4OCwxMzcgQEAgSW5wdXRFbGVt
ZW50KiB0b0lucHV0RWxlbWVudChFbGVtZW50KiBlbAogICAgIHJldHVybiAwOwogfQogCisjaWYg
RU5BQkxFKFdDU1MpCitzdGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybWF0Q29k
ZXMoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBjb2RlcywgKCJB
YU5uWHhNbSIpKTsKKyAgICByZXR1cm4gY29kZXM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjdXJz
b3JQb3NpdGlvblRvTWFza0luZGV4KGNvbnN0IFN0cmluZyYgaW5wdXRGb3JtYXRNYXNrLCB1bnNp
Z25lZCBjdXJzb3JQb3NpdGlvbikKK3sKKyAgICBVQ2hhciBtYXNrOworICAgIGludCBpbmRleCA9
IC0xOworICAgIGRvIHsKKyAgICAgICAgbWFzayA9IGlucHV0Rm9ybWF0TWFza1srK2luZGV4XTsK
KyAgICAgICAgaWYgKG1hc2sgPT0gJ1xcJykKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAg
IGVsc2UgaWYgKG1hc2sgPT0gJyonIHx8IChpc0FTQ0lJRGlnaXQobWFzaykgJiYgbWFzayAhPSAn
MCcpKSB7CisgICAgICAgICAgICBpbmRleCA9IGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSAtIDE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGN1cnNvclBvc2l0
aW9uLS0pOworCisgICAgcmV0dXJuIGluZGV4OworfQorCitib29sIElucHV0RWxlbWVudDo6aXND
b25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBpbnB1dENoYXJzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dENo
YXJzLmxlbmd0aCgpOyArK2kpCisgICAgICAgIGlmICghaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0
YSwgaW5wdXRDaGFyc1tpXSwgaSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayhj
b25zdCBJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBVQ2hhciBpbkNoYXIsIHVuc2lnbmVkIGN1cnNv
clBvc2l0aW9uKQoreworICAgIFN0cmluZyBpbnB1dEZvcm1hdE1hc2sgPSBkYXRhLmlucHV0Rm9y
bWF0TWFzaygpOworCisgICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkgfHwgaW5wdXRG
b3JtYXRNYXNrID09ICIqTSIgfHwgaW5wdXRGb3JtYXRNYXNrID09ICIqbSIpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKGN1cnNvclBvc2l0aW9uID49IGRhdGEubWF4SW5wdXRDaGFy
c0FsbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgbWFza0lu
ZGV4ID0gY3Vyc29yUG9zaXRpb25Ub01hc2tJbmRleChpbnB1dEZvcm1hdE1hc2ssIGN1cnNvclBv
c2l0aW9uKTsKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBVQ2hhciBtYXNrID0gaW5wdXRGb3Jt
YXRNYXNrW21hc2tJbmRleF07CisgICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hhcmFjdGVyIHdp
dGggaW5wdXQgbWFzaworICAgIHN3aXRjaCAobWFzaykgeworICAgIGNhc2UgJ0EnOgorICAgICAg
ICBvayA9ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSUxvd2VyKGluQ2hhcikgJiYg
aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdhJzoK
KyAgICAgICAgb2sgPSAhaXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlVcHBlcihpbkNo
YXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAnTic6CisgICAgICAgIG9rID0gaXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgJ24nOgorICAgICAgICBvayA9ICFpc0FTQ0lJQWxwaGEoaW5DaGFyKSAmJiBp
c0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1gnOgor
ICAgICAgICBvayA9ICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGlu
Q2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3gnOgorICAgICAgICBvayA9ICFpc0FT
Q0lJVXBwZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgJ00nOgorICAgIGNhc2UgJ20nOgorICAgICAgICBvayA9IGlzQVNDSUlQ
cmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
b2sgPSAobWFzayA9PSBpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gb2s7Cit9CisKK1N0cmluZyBJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKElucHV0
RWxlbWVudERhdGEmIGRhdGEsIFN0cmluZyYgaW5wdXRNYXNrKQoreworICAgIGlucHV0TWFzay5y
ZXBsYWNlKCJcXFxcIiwgIlxcIik7CisKKyAgICBib29sIGlzVmFsaWQgPSB0cnVlOworICAgIGJv
b2wgaGFzV2lsZGNhcmQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlc2NhcGVDaGFyQ291bnQgPSAw
OworICAgIHVuc2lnbmVkIG1hc2tMZW5ndGggPSBpbnB1dE1hc2subGVuZ3RoKCk7CisgICAgVUNo
YXIgZm9ybWF0Q29kZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFza0xlbmd0aDsg
KytpKSB7CisgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbaV07CisgICAgICAgIGlmIChm
b3JtYXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChm
b3JtYXRDb2RlID09ICcqJyB8fCAoaXNBU0NJSURpZ2l0KGZvcm1hdENvZGUpICYmIGZvcm1hdENv
ZGUgIT0gJzAnKSkgeworICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGNvZGVzIHdoaWNoIGVu
ZHMgd2l0aCAnKmYnIG9yICduZicKKyAgICAgICAgICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRN
YXNrWysraV07CisgICAgICAgICAgICAgICAgaWYgKChpICsgMSAhPSBtYXNrTGVuZ3RoKSB8fCBm
b3JtYXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChmb3JtYXRDb2RlID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAvLyBz
a2lwIG92ZXIgdGhlIG5leHQgbWFzayBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICArK2k7Cisg
ICAgICAgICAgICAgICAgKytlc2NhcGVDaGFyQ291bnQ7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaXNWYWxpZCkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNo
YXJhY3RlcnMgYWxsb3dlZCB0byBiZSBlbnRlcmVkIGJ5IGlucHV0IG1hc2sKKyAgICB1bnNpZ25l
ZCBhbGxvd2VkTGVuZ3RoID0gbWFza0xlbmd0aDsKKyAgICBpZiAoZXNjYXBlQ2hhckNvdW50KQor
ICAgICAgICBhbGxvd2VkTGVuZ3RoIC09IGVzY2FwZUNoYXJDb3VudDsKKworICAgIGlmIChoYXNX
aWxkY2FyZCkgeworICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW21hc2tMZW5ndGggLSAy
XTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonKQorICAgICAgICAgICAgYWxsb3dlZExl
bmd0aCA9IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93ZWQoKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBsZWZ0TGVuID0gU3RyaW5nKCZmb3JtYXRDb2RlKS50b0ludCgpOwor
ICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9IGxlZnRMZW4gKyBhbGxvd2VkTGVuZ3RoIC0gMjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhbGxvd2VkTGVuZ3RoIDwgZGF0YS5tYXhJbnB1
dENoYXJzQWxsb3dlZCgpKQorICAgICAgICBkYXRhLnNldE1heElucHV0Q2hhcnNBbGxvd2VkKGFs
bG93ZWRMZW5ndGgpOworCisgICAgcmV0dXJuIGlucHV0TWFzazsKK30KKworI2VuZGlmCisKIH0K
SW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0lucHV0RWxlbWVudC5oCShyZXZpc2lvbiA1ODQ4NCkKKysrIFdlYkNvcmUvZG9tL0lucHV0
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNlbGVjdCgpID0gMDsKKyAgCisjaWYgRU5BQkxFKFdDU1MpCisgICAg
dmlydHVhbCBJbnB1dEVsZW1lbnREYXRhIGRhdGEoKSBjb25zdCA9IDA7IAorI2VuZGlmCiAKICAg
ICBzdGF0aWMgY29uc3QgaW50IHNfbWF4aW11bUxlbmd0aDsKICAgICBzdGF0aWMgY29uc3QgaW50
IHNfZGVmYXVsdFNpemU7CkBAIC03OSw2ICs4MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGlj
IHZvaWQgcGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxl
bWVudCosIEVsZW1lbnQqLCBNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICBzdGF0aWMgdm9pZCB1cGRh
dGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqKTsKICAgICBz
dGF0aWMgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKEVsZW1lbnQqKTsKKyNpZiBFTkFCTEUo
V0NTUykKKyAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1dEVs
ZW1lbnREYXRhJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgaXNDb25mb3JtVG9J
bnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYsIFVDaGFyLCB1bnNpZ25lZCk7CisgICAg
c3RhdGljIFN0cmluZyB2YWxpZGF0ZUlucHV0TWFzayhJbnB1dEVsZW1lbnREYXRhJiwgU3RyaW5n
Jik7CisjZW5kaWYKIH07CiAKIC8vIEhUTUwvV01MSW5wdXRFbGVtZW50IGhvbGQgdGhpcyBzdHJ1
Y3QgYXMgbWVtYmVyIHZhcmlhYmxlCkBAIC0xMDgsNiArMTE3LDE1IEBAIHB1YmxpYzoKICAgICBp
bnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25F
bmQ7IH0KICAgICB2b2lkIHNldENhY2hlZFNlbGVjdGlvbkVuZChpbnQgdmFsdWUpIHsgbV9jYWNo
ZWRTZWxlY3Rpb25FbmQgPSB2YWx1ZTsgfQogCisjaWYgRU5BQkxFKFdDU1MpCisgICAgU3RyaW5n
IGlucHV0Rm9ybWF0TWFzaygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXRNYXNrOyB9Cisg
ICAgdm9pZCBzZXRJbnB1dEZvcm1hdE1hc2soY29uc3QgU3RyaW5nJiBtYXNrKSB7IG1faW5wdXRG
b3JtYXRNYXNrID0gbWFzazsgfQorIAorICAgIHVuc2lnbmVkIG1heElucHV0Q2hhcnNBbGxvd2Vk
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhJbnB1dENoYXJzQWxsb3dlZDsgfQorICAgIHZvaWQgc2V0
TWF4SW5wdXRDaGFyc0FsbG93ZWQodW5zaWduZWQgbWF4TGVuZ3RoKSB7IG1fbWF4SW5wdXRDaGFy
c0FsbG93ZWQgPSBtYXhMZW5ndGg7IH0KKyAgCisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBBdG9t
aWNTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX3ZhbHVlOwpAQCAtMTE2LDYgKzEzNCwxMCBA
QCBwcml2YXRlOgogICAgIGludCBtX21heExlbmd0aDsKICAgICBpbnQgbV9jYWNoZWRTZWxlY3Rp
b25TdGFydDsKICAgICBpbnQgbV9jYWNoZWRTZWxlY3Rpb25FbmQ7CisjaWYgRU5BQkxFKFdDU1Mp
CisgICAgU3RyaW5nIG1faW5wdXRGb3JtYXRNYXNrOworICAgIHVuc2lnbmVkIG1fbWF4SW5wdXRD
aGFyc0FsbG93ZWQ7CisjZW5kaWYKIH07CiAKIElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQo
RWxlbWVudCopOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNTg0
ODQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3NjIsNCArMjc2MiwxNSBAQCBIVE1MT3B0aW9uRWxlbWVudCogSFRNTElucHV0RWxlbWVu
dDo6c2VsCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERBVEFMSVNUKQogCisjaWYgRU5BQkxFKFdDU1Mp
Cit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFdhcElucHV0Rm9ybWF0KFN0cmluZyYgbWFzaykK
K3sKKyAgICBTdHJpbmcgdmFsaWRhdGVNYXNrID0gdmFsaWRhdGVJbnB1dE1hc2sobV9kYXRhLCBt
YXNrKTsKKyAgICBpZiAoIXZhbGlkYXRlTWFzay5pc0VtcHR5KCkpCisgICAgICAgIG1fZGF0YS5z
ZXRJbnB1dEZvcm1hdE1hc2sodmFsaWRhdGVNYXNrKTsKK30KKyNlbmRpZgorCisKKwogfSAvLyBu
YW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNTg0ODQpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIs
NiArMjcyLDExIEBAIHB1YmxpYzoKICAgICAvLyBBbiBpbnN0YW5jZSBwb2ludGVkIGJ5IHRoZSBE
YXRlQ29tcG9uZW50cyogcGFyYW1ldGVyIHdpbGwgaGF2ZSBwYXJzZWQgdmFsdWVzIGFuZCBiZQog
ICAgIC8vIG1vZGlmaWVkIGV2ZW4gaWYgdGhlIHBhcnNpbmcgZmFpbHMuICBUaGUgRGF0ZUNvbXBv
bmVudHMqIHBhcmFtZXRlciBtYXkgYmUgMC4KICAgICBzdGF0aWMgYm9vbCBwYXJzZVRvRGF0ZUNv
bXBvbmVudHMoSW5wdXRUeXBlLCBjb25zdCBTdHJpbmcmLCBEYXRlQ29tcG9uZW50cyopOworCisj
aWYgRU5BQkxFKFdDU1MpCisgICAgdm9pZCBzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcmIG1hc2sp
OworICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50RGF0YSBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9CisjZW5kaWYKICAgICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1v
dmVUb05ld093bmVyRG9jdW1lbnQoKTsKSW5kZXg6IFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCShyZXZpc2lv
biA1ODQ4NCkKKysrIFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04OCw2ICs4OCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNDb25mb3JtZWRUb0lucHV0
TWFzayhjb25zdCBTdHJpbmcmKTsKICAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soVUNo
YXIsIHVuc2lnbmVkLCBib29sIGlzVXNlcklucHV0ID0gdHJ1ZSk7CisjaWYgRU5BQkxFKFdDU1Mp
CisgICAgdmlydHVhbCBJbnB1dEVsZW1lbnREYXRhIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGE7IH0KKyNlbmRpZgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXTUxDYXJkRWxlbWVu
dDsKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NDg5KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDQtMjkgIENoYXJsZXMgV2VpICA8
Y2hhcmxlcy53ZWlAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVn
IFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBTY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cGVybC9mZWF0dXJlcy5wbToKKwogMjAxMC0wNC0yOCAg
Q2hyaXMgSmVyZG9uZWsgIDxjamVyZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJr
aXQtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtp
dC10ZXN0cwkocmV2aXNpb24gNTg0ODQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL29sZC1ydW4t
d2Via2l0LXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC01MDEsNiArNTAxLDEwIEBAIGlmIChjaGVj
a1dlYkNvcmVGZWF0dXJlU3VwcG9ydCgiV01MIiwgMCkKICAgICAkaWdub3JlZERpcmVjdG9yaWVz
eyd3bWwnfSA9IDE7CiB9CiAKK2lmICghY2hlY2tXZWJDb3JlRmVhdHVyZVN1cHBvcnQoIldDU1Mi
LCAwKSkgeworICAgICRpZ25vcmVkRGlyZWN0b3JpZXN7J2Zhc3Qvd2Nzcyd9ID0gMTsKK30KKwog
aWYgKCFjaGVja1dlYkNvcmVGZWF0dXJlU3VwcG9ydCgiWEhUTUxNUCIsIDApKSB7CiAgICAgJGln
bm9yZWREaXJlY3Rvcmllc3snZmFzdC94aHRtbG1wJ30gPSAxOwogfQpJbmRleDogV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRwZXJsL2ZlYXR1cmVzLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cGVybC9mZWF0dXJlcy5wbQkocmV2aXNpb24gNTg0ODQpCisrKyBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvZmVhdHVyZXMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTcyLDYgKzcyLDcgQEAgc3ViIGhhc0ZlYXR1cmUoJCQpCiAgICAgICAgICIzRCBSZW5kZXJp
bmciID0+ICJXZWJDb3JlSGFzM0RSZW5kZXJpbmciLAogICAgICAgICAiM0QgQ2FudmFzIiA9PiAi
V2ViR0xTaGFkZXIiLAogICAgICAgICAiV01MIiA9PiAiV01MRWxlbWVudCIsCisgICAgICAgICJX
Q1NTIiA9PiAicGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSIsCiAgICAgICAgICJYSFRNTE1QIiA9PiAi
aXNYSFRNTE1QRG9jdW1lbnQiLAogICAgICk7CiAgICAgbXkgJHN5bWJvbE5hbWUgPSAkc3ltYm9s
Rm9yRmVhdHVyZXskZmVhdHVyZU5hbWV9OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTg0ODkpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAx
MC0wNC0yOSAgQ2hhcmxlcyBXZWkgIDxjaGFybGVzLndlaUB0b3JjaG1vYmlsZS5jb20uY24+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3ODQ4CisgICAgICAgIEFkZCB0ZXN0IGNh
c2VzIGZvciAtd2FwLWlucHV0LWZvcm1hdCBhbmQgLXdhcC1pbnB1dC1yZXF1aXJlZC4KKworICAg
ICAgICAqIGZhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQueGh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLnhodG1sOiBBZGRlZC4KKwogMjAx
MC0wNC0yOSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK0Fzc3VtZSB0aGUgdXNlciBpbnB1dCB0
aGUgZm9sbG93aW5nICJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyIgdG8gZWFjaCBvZiB0
aGUgaW5wdXQgZWxlbWVudHMKK3std2FwLWlucHV0LWZvcm1hdDoiKkEiO30gb25seSB0YWtlcyB1
cHBlciBsZXR0ZXJzLCBzeW1ib2xzLCBwdW5jdHVhdGlvbnMKK1BBU1MgZG9tVmFsdWVPZigic3Rh
cl91cEEiKSBpcyAiQUJDREVGRyFAIyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJf
dXBBIikgaXMgIkFCQ0RFRkchQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3JtYXQ6IiphIjt9IG9u
bHkgdGFrZXMgbG93ZXIgbGV0dGVycywgc3ltYm9scywgcHVuY3R1YXRpb25zCitQQVNTIGRvbVZh
bHVlT2YoInN0YXJfbG93YSIpIGlzICJhYmNkZWZnIUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFs
dWVPZigic3Rhcl9sb3dhIikgaXMgImFiY2RlZmchQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3Jt
YXQ6IipOIjt9IG9ubHkgdGFrZXMgbnVtYmVycyAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl91cE4i
KSBpcyAiMTIzNDU2IgorUEFTUyB2aXNpYmxlVmFsdWVPZigic3Rhcl91cE4iKSBpcyAiMTIzNDU2
Igorey13YXAtaW5wdXQtZm9ybWF0OiIqbiI7fSBvbmx5IHRha2VzIG51bWJlcnMgLCBzeW1iYWxz
IGFuZCBwdW5jdHVhdGlvbnMgCitQQVNTIGRvbVZhbHVlT2YoInN0YXJfbG93biIpIGlzICIxMjM0
NTYhQCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX2xvd24iKSBpcyAiMTIzNDU2
IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqWCI7fSB0YWtlcyB1cHBlciBsZXR0ZXJz
LG51bWJlcnMsc3ltYmFscyBhbmQgcHVuY3R1YXRpb25zIAorUEFTUyBkb21WYWx1ZU9mKCJzdGFy
X3VwWCIpIGlzICJBQkNERUZHMTIzNDU2IUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFsdWVPZigi
c3Rhcl91cFgiKSBpcyAiQUJDREVGRzEyMzQ1NiFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1h
dDoiKngiO30gdGFrZXMgbG93ZXIgbGV0dGVycyxudW1iZXJzLHN5bWJhbHMgYW5kIHB1bmN0dWF0
aW9ucyAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl9sb3d4IikgaXMgImFiY2RlZmcxMjM0NTYhQCMk
JV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX2xvd3giKSBpcyAiYWJjZGVmZzEyMzQ1
NiFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1hdDoiKk0iO30gdGFrZXMgYW55IGNoYXJhY3Rl
ciAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl91cE0iKSBpcyAiQWFCYkNjRGRFZUZmR2cxMjM0NTYh
QCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX3VwTSIpIGlzICJBYUJiQ2NEZEVl
RmZHZzEyMzQ1NiFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1hdDoiKm0iO30gdGFrZXMgYW55
IGNoYXJhY3RlciAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl9sb3dtIikgaXMgIkFhQmJDY0RkRWVG
ZkdnMTIzNDU2IUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3dtIikgaXMg
IkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIzTiI7
fSB0YWtlcyAzIG51bWJlcnMgCitQQVNTIGRvbVZhbHVlT2YoInRocmVlX04iKSBpcyAiMTIzIgor
UEFTUyB2aXNpYmxlVmFsdWVPZigidGhyZWVfTiIpIGlzICIxMjMiCisgICAgICAgIApJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQueGh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQueGh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NU
WVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iICJo
dHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIj4KKworPGh0bWwg
eG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+CisKKzxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+Cisuc3Rhcl91cEEgIHstd2FwLWlucHV0LWZvcm1hdDogIipBIiA7IH0g
ICAgLyogdXBwZXIgbGV0dGVyLCBzeW1ib2wsIHB1bmN0dWF0aW9uLCAgTk8gbnVtYmVyICovCisu
c3Rhcl9sb3dhIHstd2FwLWlucHV0LWZvcm1hdDogIiphIiA7IH0gICAgLyogbG93ZXIgbGV0dGVy
LCBzeW1ib2wsIHB1bmN0dWF0aW9uLCAgTk8gbnVtYmVyICovCisuc3Rhcl91cE4gIHstd2FwLWlu
cHV0LWZvcm1hdDogIipOIiA7IH0gICAgLyogbnVtYmVyIG9ubHkgKi8KKy5zdGFyX2xvd24gey13
YXAtaW5wdXQtZm9ybWF0OiAiKm4iIDsgfSAgICAvKiBudW1iZXIgLCBzeW1ib2wsIHB1bmN0dWF0
aW9uLCBubyBsZXR0ZXIgKi8KKy5zdGFyX3VwWCAgey13YXAtaW5wdXQtZm9ybWF0OiAiKlgiIDsg
fSAgICAvKiB1cHBlciBsZXR0ZXIsIG51bWJlciwgc3ltYm9sLCBwdW5jdHVhdGlvbiwgbm8gbG93
ZXIgbGV0dGVyICovCisuc3Rhcl9sb3d4IHstd2FwLWlucHV0LWZvcm1hdDogIip4IiA7IH0gICAg
LyogbG93ZXIgbGV0dGVyLCBudW1iZXIsIHN5bWJvbCwgcHVuY3R1YXRpb24sIG5vIHVwcGVyIGxl
dHRlciAqLworLnN0YXJfdXBNICB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqTSIgOyB9ICAgIC8qIGFu
eXRoaW5nLCB3aXRoIHVwcGVyIGFzIHRoZSBkZWZhdWx0IGlucHV0ICovCisuc3Rhcl9sb3dtIHst
d2FwLWlucHV0LWZvcm1hdDogIiptIiA7IH0gICAgLyogYW55dGhpbmcsIHdpdGggbG93ZXIgYXMg
dGhlIGRlZmF1bHQgaW5wdXQgKi8KKy50aHJlZV9OICAgey13YXAtaW5wdXQtZm9ybWF0OiAiM04i
IDsgfSAgICAvKiB1cCB0byAzIGRpZ2l0IG51bWJlciAqLworCis8L3N0eWxlPgorCis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPC9oZWFk
PgorCis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CisKKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl91cEEiICBjbGFzcz0ic3Rhcl91
cEEiIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InN0YXJfbG93YSIgY2xhc3M9InN0YXJfbG93
YSIgLz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl91cE4iICBjbGFzcz0ic3Rhcl91cE4i
IC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InN0YXJfbG93biIgY2xhc3M9InN0YXJfbG93biIg
Lz4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl91cFgiICBjbGFzcz0ic3Rhcl91cFgiIC8+
Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InN0YXJfbG93eCIgY2xhc3M9InN0YXJfbG93eCIgLz4K
KzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl91cE0iICBjbGFzcz0ic3Rhcl91cE0iIC8+Cis8
aW5wdXQgdHlwZT0idGV4dCIgaWQ9InN0YXJfbG93bSIgY2xhc3M9InN0YXJfbG93bSIgLz4KKzxp
bnB1dCB0eXBlPSJ0ZXh0IiBpZD0idGhyZWVfTiIgIGNsYXNzPSJ0aHJlZV9OIiAvPgorCis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK2Z1bmN0aW9uIGRvbVZhbHVlT2YoaWQpIHsK
KyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlOworfQorZnVuY3Rp
b24gdmlzaWJsZVZhbHVlT2YoaWQpIHsKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChpZCk7CisgICAgZWwuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnU2Vs
ZWN0QWxsJyk7CisgICAgcmV0dXJuIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7
Cit9CisKK2Z1bmN0aW9uIGlucHV0S2V5cyhzdHIpIHsKKyAgICBpZighd2luZG93LmV2ZW50U2Vu
ZGVyKQorICAgICAgICByZXR1cm47CisgICAgZm9yKGkgPSAwOyBpICE9IHN0ci5sZW5ndGg7IGkr
KykgeworICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKHN0ci5jaGFyQXQoaSkpOworICAgIH0K
K30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKwordmFyIHN0ciA9ICJBYUJiQ2NEZEVlRmZHZzEy
MzQ1NiFAIyQlXiwuOyI7CisKK2RlYnVnKCJBc3N1bWUgdGhlIHVzZXIgaW5wdXQgdGhlIGZvbGxv
d2luZyBcIiIgKyBzdHIgKyAiXCIgdG8gZWFjaCBvZiB0aGUgaW5wdXQgZWxlbWVudHM8YnIvPjxi
ci8+Iik7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiKkEiO30gb25seSB0YWtl
cyB1cHBlciBsZXR0ZXJzLCBzeW1ib2xzLCBwdW5jdHVhdGlvbnM8YnIvPicpOworCitkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgic3Rhcl91cEEiKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7Citz
aG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl91cEEiKScsJyJBQkNERUZHIUAjJCVeLC47IicpOwor
c2hvdWxkQmUoJ3Zpc2libGVWYWx1ZU9mKCJzdGFyX3VwQSIpJywnIkFCQ0RFRkchQCMkJV4sLjsi
Jyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiKmEiO30gb25seSB0YWtlcyBs
b3dlciBsZXR0ZXJzLCBzeW1ib2xzLCBwdW5jdHVhdGlvbnM8YnIgLz48YnIgLz4nKTsKK2RvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJzdGFyX2xvd2EiKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7
CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl9sb3dhIiknLCAnImFiY2RlZmchQCMkJV4sLjsi
Jyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfbG93YSIpJywgJyJhYmNkZWZnIUAj
JCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IipOIjt9IG9ubHkg
dGFrZXMgbnVtYmVycyA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGFyX3Vw
TiIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJzdGFy
X3VwTiIpJywgJyIxMjM0NTYiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfdXBO
IiknLCAnIjEyMzQ1NiInKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqbiI7
fSBvbmx5IHRha2VzIG51bWJlcnMgLCBzeW1iYWxzIGFuZCBwdW5jdHVhdGlvbnMgPGJyIC8+Jyk7
Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl9sb3duIikuZm9jdXMoKTsKK2lucHV0S2V5
cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfbG93biIpJywgJyIxMjM0NTYhQCMk
JV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfbG93biIpJywgJyIxMjM0
NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiKlgiO30g
dGFrZXMgdXBwZXIgbGV0dGVycyxudW1iZXJzLHN5bWJhbHMgYW5kIHB1bmN0dWF0aW9ucyA8YnIg
Lz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGFyX3VwWCIpLmZvY3VzKCk7CitpbnB1
dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJzdGFyX3VwWCIpJywgJyJBQkNERUZH
MTIzNDU2IUAjJCVeLC47IicpOworc2hvdWxkQmUoJ3Zpc2libGVWYWx1ZU9mKCJzdGFyX3VwWCIp
JywgJyJBQkNERUZHMTIzNDU2IUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1
dC1mb3JtYXQ6Iip4Ijt9IHRha2VzIGxvd2VyIGxldHRlcnMsbnVtYmVycyxzeW1iYWxzIGFuZCBw
dW5jdHVhdGlvbnMgPGJyIC8+Jyk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl9sb3d4
IikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJf
bG93eCIpJywgJyJhYmNkZWZnMTIzNDU2IUAjJCVeLC47IicpOworc2hvdWxkQmUoJ3Zpc2libGVW
YWx1ZU9mKCJzdGFyX2xvd3giKScsICciYWJjZGVmZzEyMzQ1NiFAIyQlXiwuOyInKTsKKworZGVi
dWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqTSI7fSB0YWtlcyBhbnkgY2hhcmFjdGVyIDxi
ciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfdXBNIikuZm9jdXMoKTsKK2lu
cHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfdXBNIiknLCAnIkFhQmJD
Y0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IicpOworc2hvdWxkQmUoJ3Zpc2libGVWYWx1ZU9mKCJz
dGFyX3VwTSIpJywgJyJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyInKTsKKworZGVidWco
Jzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqbSI7fSB0YWtlcyBhbnkgY2hhcmFjdGVyIDxiciAv
PicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfbG93bSIpLmZvY3VzKCk7CitpbnB1
dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJzdGFyX2xvd20iKScsICciQWFCYkNj
RGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0
YXJfbG93bSIpJywgJyJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyInKTsKKworZGVidWco
Jzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIzTiI7fSB0YWtlcyAzIG51bWJlcnMgPGJyIC8+Jyk7
Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGhyZWVfTiIpLmZvY3VzKCk7CitpbnB1dEtleXMo
c3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJ0aHJlZV9OIiknLCAnIjEyMyInKTsKK3Nob3Vs
ZEJlKCd2aXNpYmxlVmFsdWVPZigidGhyZWVfTiIpJywgJyIxMjMiJyk7CisKKworPC9zY3JpcHQ+
CisKKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1p
bnB1dC1yZXF1aXJlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93Y3NzL3dhcC1pbnB1dC1yZXF1aXJlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUaGVyZSBhcmUgdGhyZWUgZm9ybSBjb250cm9sIGVs
ZW1lbnRzIGJlbG93LCB0aGUgZmlyc3Qgb25lIGlzIHJlcXVpcmVkIGFuZCBibGFuayx2YWxpZGl0
eS52YWx1ZU1pc3Npbmcgc2hvdWxkIGJlIHRydWUsIHRoZSBvdGhlciB0d28gZWl0aGVyIGRvbid0
IGhhdmUgLXdhcC1pbnB1dC1yZXF1aXJlZCBhcHBsaWVkLCBvciB0aGUgLXdhcC1pbnB1dC1yZXF1
aXJlZCBpbmRpY2F0ZXMgZmFsc2UsIGFuZCBhcmUgbm90IHJlcXVpcmVkIC4KKworICAKK1NVQ0NF
U1MgU1VDQ0VTUyBTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0
LXJlcXVpcmVkLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAt
aW5wdXQtcmVxdWlyZWQueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dj
c3Mvd2FwLWlucHV0LXJlcXVpcmVkLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9S
VU0vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFRE
L3hodG1sLW1vYmlsZTEwLmR0ZCI+CisKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIj4KKworPGhlYWQ+Cis8dGl0bGU+cmVxdWlyZWQgYW5kIGJhc2ljIHZhbHVlTWlz
c2luZzwvdGl0bGU+CisKKzwvaGVhZD4KKworPGJvZHk+Cis8cD5UaGVyZSBhcmUgdGhyZWUgZm9y
bSBjb250cm9sIGVsZW1lbnRzIGJlbG93LCB0aGUgZmlyc3Qgb25lIGlzIHJlcXVpcmVkIGFuZCBi
bGFuayx2YWxpZGl0eS52YWx1ZU1pc3Npbmcgc2hvdWxkIGJlIHRydWUsIHRoZSBvdGhlciB0d28g
ZWl0aGVyIGRvbid0IGhhdmUgLXdhcC1pbnB1dC1yZXF1aXJlZCBhcHBsaWVkLCBvciB0aGUgLXdh
cC1pbnB1dC1yZXF1aXJlZCBpbmRpY2F0ZXMgZmFsc2UsIGFuZCBhcmUgbm90IHJlcXVpcmVkIC48
L3A+Cis8aW5wdXQgbmFtZT0icmVxdWlyZWQiIHN0eWxlPSItd2FwLWlucHV0LXJlcXVpcmVkOnRy
dWU7IiAvPgorPGlucHV0IG5hbWU9Im5vdF9zcGVjaWZpZWQiIC8+Cis8dGV4dGFyZWEgbmFtZT0i
bm90X3JlcXVpcmVkIiBzdHlsZT0iLXdhcC1pbnB1dC1yZXF1aXJlZDpmYWxzZTsiPjwvdGV4dGFy
ZWE+Cis8cCBpZD0iY29uc29sZSI+IDwvcD4KKworPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlw
dCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKSB7CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwgKz0gIG1lc3NhZ2Ug
KyAiICBcbiI7Cit9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICB2ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeU5hbWUoInJlcXVpcmVkIik7CisgICAgbG9nKHZbMF0udmFsaWRpdHku
dmFsdWVNaXNzaW5nICA/ICJTVUNDRVNTIiA6ICJGQUlMVVJFIik7CisgCisgICAgdiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlOYW1lKCJub3Rfc3BlY2lmaWVkIik7CisgICAgbG9nKCghdlswXS52
YWxpZGl0eS52YWx1ZU1pc3NpbmcpID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiKTsKKworICAgIHYg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgibm90X3JlcXVpcmVkIik7CisgICAgbG9nKCgh
dlswXS52YWxpZGl0eS52YWx1ZU1pc3NpbmcpID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiKTsKKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="38702"
          type_id="1"
          status="+"
          setter="staikos"
    />
    <flag name="commit-queue"
          id="38787"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54991</attachid>
            <date>2010-05-03 21:19:06 -0700</date>
            <delta_ts>2010-05-03 21:23:08 -0700</delta_ts>
            <desc>patch resubmission</desc>
            <filename>37848.patch</filename>
            <type>text/plain</type>
            <size>27777</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODczMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDUtMDMgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9y
Y2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb3JnZSBTdGFpa29zLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzg0OAor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV0NTUyAtd2FwLWlucHV0LWZvcm1hdCBhbmQgLXdhcC1p
bnB1dC1yZXF1aXJlZCBzdXBwb3J0IHRvIFdlYktpdAorICAgICAgICAtd2FwLWlucHV0LWZvcm1h
dCBkZWZpbmVzIGEgbWFzayB0aGF0IGZpbHRlcnMgdGhlIHVzZXIgaW5wdXQgZm9yIGFuIGlucHV0
IGNvbnRyb2wKKyAgICAgICAgLXdhcC1pbnB1dC1yZXF1aXJlZCBzcGVjaWZpZXMgaWYgYW4gaW5w
dXQgY29udHJvbCBpcyByZXF1aXJlZCwgaWYgdHJ1ZSwgaXQgbXVzdCAKKyAgICAgICAgYmUgZmls
bGVkIHdpdGggc29tZSB2YWxpZCB2YWx1ZSBiZWZvcmUgc3VibWlzc2lvbi4gCisKKyAgICAgICAg
VGVzdHM6IGZhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LnhodG1sCisgICAgICAgICAgICAgICBm
YXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLnhodG1sCisKKyAgICAgICAgKiBjc3MvQ1NTUGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkpOgorICAgICAg
ICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAg
ICAgICAgKiBjc3MvV0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICogZG9tL0lucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1l
bnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRF
bGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVs
ZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKToKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjppbnB1dEZvcm1hdE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0SW5wdXRGb3JtYXRNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6Om1heElucHV0Q2hhcnNBbGxvd2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6OnNldE1heElucHV0Q2hhcnNB
bGxvd2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQpOgorICAgICAgICAq
IGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6ZGF0YSk6CisgICAgICAgICogd21sL1dNTElucHV0RWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6V01MSW5wdXRFbGVtZW50OjpkYXRhKToKKwogMjAxMC0wNS0wMyAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiA1ODczMSkKKysrIFdlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDIsNiArMTcwMiwxNSBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRVbmRlcmxpbmU6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFZhcmlhYmxlRGVjbGFy
YXRpb25CbG9jazoKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2lmIEVOQUJMRShXQ1NTKQorICAg
IGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dEZvcm1hdDoKKyAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRSZXF1
aXJlZDoKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVdDU1NJbnB1dFByb3BlcnR5KCk7Cisg
ICAgICAgIGJyZWFrOworI2VuZGlmCisKICNpZiBFTkFCTEUoU1ZHKQogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBwYXJzZVNWR1ZhbHVlKHByb3BJZCwgaW1wb3J0YW50KTsKQEAgLTE3MzAs
NiArMTczOSwyNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKFdDU1MpCitQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkoKQoreworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSAwOworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgU3RyaW5nIGlucHV0UHJvcGVydHk7CisgICAgaWYg
KHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HIHx8IHZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgIGlucHV0UHJvcGVy
dHkgPSBTdHJpbmcodmFsdWUtPnN0cmluZyk7CisKKyAgICBpZiAoIWlucHV0UHJvcGVydHkuaXNF
bXB0eSgpKQorICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShp
bnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisKKyAgICB3aGls
ZSAobV92YWx1ZUxpc3QtPm5leHQoKSkgeworICAgIC8vIHBhc3MgYWxsIG90aGVyIHZhbHVlcywg
aWYgYW55LiBJZiB3ZSBkb24ndCBkbyB0aGlzLCAKKyAgICAvLyB0aGUgcGFyc2VyIHdpbGwgdGhp
bmsgdGhhdCBpdCdzIG5vdCBkb25lIGFuZCB3b24ndCBwcm9jZXNzIHRoaXMgcHJvcGVydHkgIAor
ICAgIH0KKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKyNlbmRpZgorCiB2b2lkIENTU1Bh
cnNlcjo6YWRkRmlsbFZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHJ2YWwpCiB7CiAgICAgaWYgKGx2YWwpIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiA1
ODczMSkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTEzOSw2ICsxNDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOwogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoV0NTUykKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VXQ1NTSW5w
dXRQcm9wZXJ0eSgpOworI2VuZGlmCisKICAgICAgICAgLy8gQ1NTMyBQYXJzaW5nIFJvdXRpbmVz
IChmb3IgcHJvcGVydGllcyBzcGVjaWZpYyB0byBDU1MzKQogICAgICAgICBib29sIHBhcnNlU2hh
ZG93KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKICAgICAgICAgYm9vbCBwYXJzZUJvcmRl
ckltYWdlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50LCBSZWZQdHI8Q1NTVmFsdWU+Jik7Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gNTg3MzEpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMzMSw2ICs1MzMx
LDIzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VmFyaWFibGVEZWNsYXJhdGlvbkJsb2NrOgogICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKFdD
U1MpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0Rm9ybWF0OgorICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUgJiYgbV9lbGVtZW50LT5oYXNUYWdOYW1lKFdlYkNvcmU6OmlucHV0VGFnKSkg
eworICAgICAgICAgICAgU3RyaW5nIG1hc2sgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2VsZW1l
bnQpLT5zZXRXYXBJbnB1dEZvcm1hdChtYXNrKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRSZXF1aXJlZDoKKyAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlICYmIG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgeworICAg
ICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPihtX2VsZW1lbnQpOworICAgICAgICAgICAgYm9vbCByZXF1
aXJlZCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpID09ICJ0cnVlIjsKKyAgICAg
ICAgICAgIGVsZW1lbnQtPnNldFJlcXVpcmVkKHJlcXVpcmVkKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisjZW5kaWYgCisKICNpZiBFTkFCTEUoU1ZHKQogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKSW5kZXg6IFdlYkNvcmUvY3NzL1dDU1NQcm9w
ZXJ0eU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1dDU1NQcm9wZXJ0eU5hbWVz
LmluCShyZXZpc2lvbiA1ODczMSkKKysrIFdlYkNvcmUvY3NzL1dDU1NQcm9wZXJ0eU5hbWVzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNSBAQAorLXdhcC1pbnB1dC1mb3JtYXQKKy13YXAt
aW5wdXQtcmVxdWlyZWQKIC13YXAtbWFycXVlZS1kaXIKIC13YXAtbWFycXVlZS1sb29wCiAtd2Fw
LW1hcnF1ZWUtc3BlZWQKSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNTg3MzEpCisr
KyBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsy
MiwxNSBAQAogI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQuaCIKKworI2lmIEVOQUJMRShXQ1NTKQorI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3Qu
aCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9y
LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC0xMzgsNiArMTQ3LDE0IEBAIHZvaWQgSW5w
dXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcigKIAogU3RyaW5nIElucHV0RWxlbWVudDo6
c2FuaXRpemVWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgY29uc3QgU3Ry
aW5nJiBwcm9wb3NlZFZhbHVlKQogeworI2lmIEVOQUJMRShXQ1NTKQorICAgIElucHV0RWxlbWVu
dERhdGEgZGF0YSA9IGNvbnN0X2Nhc3Q8SW5wdXRFbGVtZW50Kj4oaW5wdXRFbGVtZW50KS0+ZGF0
YSgpOworICAgIGlmICghaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0YSwgcHJvcG9zZWRWYWx1ZSkp
IHsKKyAgICAgICAgaWYgKGlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEsIGRhdGEudmFsdWUoKSkp
CisgICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSgpOworICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIElucHV0RWxlbWVudDo6c2FuaXRpemVVc2Vy
SW5wdXRWYWx1ZShpbnB1dEVsZW1lbnQsIHByb3Bvc2VkVmFsdWUsIHNfbWF4aW11bUxlbmd0aCk7
CiB9CiAKQEAgLTE4Nyw2ICsyMDQsMTggQEAgdm9pZCBJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9y
ZVRleHRJbnNlcgogCiAgICAgLy8gVHJ1bmNhdGUgdGhlIGluc2VydGVkIHRleHQgdG8gYXZvaWQg
dmlvbGF0aW5nIHRoZSBtYXhMZW5ndGggYW5kIG90aGVyIGNvbnN0cmFpbnRzLgogICAgIEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50KiB0ZXh0RXZlbnQgPSBzdGF0aWNfY2FzdDxCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCo+KGV2ZW50KTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgU3RyaW5nIGNhbmRpZGF0ZVN0cmluZyA9
IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT50ZXh0
KCk7CisgICAgaWYgKHNlbGVjdGlvbkxlbmd0aCkKKyAgICAgICAgY2FuZGlkYXRlU3RyaW5nLnJl
cGxhY2UocmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgdGV4dEV2ZW50
LT50ZXh0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2FuZGlkYXRlU3RyaW5nLmluc2VydCh0ZXh0
RXZlbnQtPnRleHQoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIGlmICghaXNDb25mb3Jt
VG9JbnB1dE1hc2soaW5wdXRFbGVtZW50LT5kYXRhKCksIGNhbmRpZGF0ZVN0cmluZykpIHsKKyAg
ICAgICAgdGV4dEV2ZW50LT5zZXRUZXh0KCIiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQor
I2VuZGlmCiAgICAgdGV4dEV2ZW50LT5zZXRUZXh0KHNhbml0aXplVXNlcklucHV0VmFsdWUoaW5w
dXRFbGVtZW50LCB0ZXh0RXZlbnQtPnRleHQoKSwgYXBwZW5kYWJsZUxlbmd0aCkpOwogfQogCkBA
IC0yMzgsNiArMjY3LDEwIEBAIElucHV0RWxlbWVudERhdGE6OklucHV0RWxlbWVudERhdGEoKQog
ICAgICwgbV9tYXhMZW5ndGgoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCiAgICAgLCBt
X2NhY2hlZFNlbGVjdGlvblN0YXJ0KC0xKQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25FbmQoLTEp
CisjaWYgRU5BQkxFKFdDU1MpCisgICAgLCBtX2lucHV0Rm9ybWF0TWFzaygiKm0iKQorICAgICwg
bV9tYXhJbnB1dENoYXJzQWxsb3dlZChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKKyNl
bmRpZgogewogfQogCkBAIC0yNTksNCArMjkyLDEzNyBAQCBJbnB1dEVsZW1lbnQqIHRvSW5wdXRF
bGVtZW50KEVsZW1lbnQqIGVsCiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZiBFTkFCTEUoV0NTUykK
K3N0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtYXRDb2RlcygpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGNvZGVzLCAoIkFhTm5YeE1tIikpOwor
ICAgIHJldHVybiBjb2RlczsKK30KKworc3RhdGljIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uVG9N
YXNrSW5kZXgoY29uc3QgU3RyaW5nJiBpbnB1dEZvcm1hdE1hc2ssIHVuc2lnbmVkIGN1cnNvclBv
c2l0aW9uKQoreworICAgIFVDaGFyIG1hc2s7CisgICAgaW50IGluZGV4ID0gLTE7CisgICAgZG8g
eworICAgICAgICBtYXNrID0gaW5wdXRGb3JtYXRNYXNrWysraW5kZXhdOworICAgICAgICBpZiAo
bWFzayA9PSAnXFwnKQorICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgZWxzZSBpZiAobWFz
ayA9PSAnKicgfHwgKGlzQVNDSUlEaWdpdChtYXNrKSAmJiBtYXNrICE9ICcwJykpIHsKKyAgICAg
ICAgICAgIGluZGV4ID0gaW5wdXRGb3JtYXRNYXNrLmxlbmd0aCgpIC0gMTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoY3Vyc29yUG9zaXRpb24tLSk7CisKKyAg
ICByZXR1cm4gaW5kZXg7Cit9CisKK2Jvb2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0
TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBjb25zdCBTdHJpbmcmIGlucHV0Q2hh
cnMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlucHV0Q2hhcnMubGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhkYXRhLCBpbnB1dENoYXJz
W2ldLCBpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxl
bWVudERhdGEmIGRhdGEsIFVDaGFyIGluQ2hhciwgdW5zaWduZWQgY3Vyc29yUG9zaXRpb24pCit7
CisgICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFzayA9IGRhdGEuaW5wdXRGb3JtYXRNYXNrKCk7CisK
KyAgICBpZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSB8fCBpbnB1dEZvcm1hdE1hc2sgPT0g
IipNIiB8fCBpbnB1dEZvcm1hdE1hc2sgPT0gIiptIikKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoY3Vyc29yUG9zaXRpb24gPj0gZGF0YS5tYXhJbnB1dENoYXJzQWxsb3dlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBtYXNrSW5kZXggPSBjdXJzb3JQ
b3NpdGlvblRvTWFza0luZGV4KGlucHV0Rm9ybWF0TWFzaywgY3Vyc29yUG9zaXRpb24pOworICAg
IGJvb2wgb2sgPSB0cnVlOworICAgIFVDaGFyIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tbbWFza0lu
ZGV4XTsKKyAgICAvLyBNYXRjaCB0aGUgaW5wdXRlZCBjaGFyYWN0ZXIgd2l0aCBpbnB1dCBtYXNr
CisgICAgc3dpdGNoIChtYXNrKSB7CisgICAgY2FzZSAnQSc6CisgICAgICAgIG9rID0gIWlzQVND
SUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRh
YmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2EnOgorICAgICAgICBvayA9
ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSVVwcGVyKGluQ2hhcikgJiYgaXNBU0NJ
SVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdOJzoKKyAgICAg
ICAgb2sgPSBpc0FTQ0lJRGlnaXQoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAn
bic6CisgICAgICAgIG9rID0gIWlzQVNDSUlBbHBoYShpbkNoYXIpICYmIGlzQVNDSUlQcmludGFi
bGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnWCc6CisgICAgICAgIG9rID0g
IWlzQVNDSUlMb3dlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSAneCc6CisgICAgICAgIG9rID0gIWlzQVNDSUlVcHBlcihpbkNo
YXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAnTSc6CisgICAgY2FzZSAnbSc6CisgICAgICAgIG9rID0gaXNBU0NJSVByaW50YWJsZShpbkNo
YXIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBvayA9IChtYXNrID09
IGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBvazsKK30KKwor
U3RyaW5nIElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2soSW5wdXRFbGVtZW50RGF0YSYg
ZGF0YSwgU3RyaW5nJiBpbnB1dE1hc2spCit7CisgICAgaW5wdXRNYXNrLnJlcGxhY2UoIlxcXFwi
LCAiXFwiKTsKKworICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxkY2Fy
ZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGVzY2FwZUNoYXJDb3VudCA9IDA7CisgICAgdW5zaWdu
ZWQgbWFza0xlbmd0aCA9IGlucHV0TWFzay5sZW5ndGgoKTsKKyAgICBVQ2hhciBmb3JtYXRDb2Rl
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXNrTGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1tpXTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGVzKCku
ZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0g
JyonIHx8IChpc0FTQ0lJRGlnaXQoZm9ybWF0Q29kZSkgJiYgZm9ybWF0Q29kZSAhPSAnMCcpKSB7
CisgICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgY29kZXMgd2hpY2ggZW5kcyB3aXRoICcqZicg
b3IgJ25mJworICAgICAgICAgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbKytpXTsKKyAg
ICAgICAgICAgICAgICBpZiAoKGkgKyAxICE9IG1hc2tMZW5ndGgpIHx8IGZvcm1hdENvZGVzKCku
ZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBoYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGZvcm1hdENvZGUgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciB0aGUg
bmV4dCBtYXNrIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAg
ICArK2VzY2FwZUNoYXJDb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgLy8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhbGxv
d2VkIHRvIGJlIGVudGVyZWQgYnkgaW5wdXQgbWFzaworICAgIHVuc2lnbmVkIGFsbG93ZWRMZW5n
dGggPSBtYXNrTGVuZ3RoOworICAgIGlmIChlc2NhcGVDaGFyQ291bnQpCisgICAgICAgIGFsbG93
ZWRMZW5ndGggLT0gZXNjYXBlQ2hhckNvdW50OworCisgICAgaWYgKGhhc1dpbGRjYXJkKSB7Cisg
ICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbbWFza0xlbmd0aCAtIDJdOworICAgICAgICBp
ZiAoZm9ybWF0Q29kZSA9PSAnKicpCisgICAgICAgICAgICBhbGxvd2VkTGVuZ3RoID0gZGF0YS5t
YXhJbnB1dENoYXJzQWxsb3dlZCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGxlZnRMZW4gPSBTdHJpbmcoJmZvcm1hdENvZGUpLnRvSW50KCk7CisgICAgICAgICAgICBh
bGxvd2VkTGVuZ3RoID0gbGVmdExlbiArIGFsbG93ZWRMZW5ndGggLSAyOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGFsbG93ZWRMZW5ndGggPCBkYXRhLm1heElucHV0Q2hhcnNBbGxvd2Vk
KCkpCisgICAgICAgIGRhdGEuc2V0TWF4SW5wdXRDaGFyc0FsbG93ZWQoYWxsb3dlZExlbmd0aCk7
CisKKyAgICByZXR1cm4gaW5wdXRNYXNrOworfQorCisjZW5kaWYKKwogfQpJbmRleDogV2ViQ29y
ZS9kb20vSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVt
ZW50LmgJKHJldmlzaW9uIDU4NzMxKQorKysgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2VsZWN0KCkgPSAwOworICAKKyNpZiBFTkFCTEUoV0NTUykKKyAgICB2aXJ0dWFsIElucHV0
RWxlbWVudERhdGEgZGF0YSgpIGNvbnN0ID0gMDsgCisjZW5kaWYKIAogICAgIHN0YXRpYyBjb25z
dCBpbnQgc19tYXhpbXVtTGVuZ3RoOwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19kZWZhdWx0U2l6
ZTsKQEAgLTgwLDYgKzg0LDExIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCBwYXJzZU1h
eExlbmd0aEF0dHJpYnV0ZShJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50KiwgRWxlbWVu
dCosIE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVZhbHVlSWZOZWVk
ZWQoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCopOwogICAgIHN0YXRpYyB2b2lkIG5v
dGlmeUZvcm1TdGF0ZUNoYW5nZWQoRWxlbWVudCopOworI2lmIEVOQUJMRShXQ1NTKQorICAgIHN0
YXRpYyBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmLCBj
b25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1Ub0lucHV0TWFzayhjb25z
dCBJbnB1dEVsZW1lbnREYXRhJiwgVUNoYXIsIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgU3RyaW5n
IHZhbGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVudERhdGEmLCBTdHJpbmcmKTsKKyNlbmRpZgog
fTsKIAogLy8gSFRNTC9XTUxJbnB1dEVsZW1lbnQgaG9sZCB0aGlzIHN0cnVjdCBhcyBtZW1iZXIg
dmFyaWFibGUKQEAgLTEwOSw2ICsxMTgsMTUgQEAgcHVibGljOgogICAgIGludCBjYWNoZWRTZWxl
Y3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvbkVuZDsgfQogICAgIHZv
aWQgc2V0Q2FjaGVkU2VsZWN0aW9uRW5kKGludCB2YWx1ZSkgeyBtX2NhY2hlZFNlbGVjdGlvbkVu
ZCA9IHZhbHVlOyB9CiAKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBTdHJpbmcgaW5wdXRGb3JtYXRN
YXNrKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEZvcm1hdE1hc2s7IH0KKyAgICB2b2lkIHNldElu
cHV0Rm9ybWF0TWFzayhjb25zdCBTdHJpbmcmIG1hc2spIHsgbV9pbnB1dEZvcm1hdE1hc2sgPSBt
YXNrOyB9CisgCisgICAgdW5zaWduZWQgbWF4SW5wdXRDaGFyc0FsbG93ZWQoKSBjb25zdCB7IHJl
dHVybiBtX21heElucHV0Q2hhcnNBbGxvd2VkOyB9CisgICAgdm9pZCBzZXRNYXhJbnB1dENoYXJz
QWxsb3dlZCh1bnNpZ25lZCBtYXhMZW5ndGgpIHsgbV9tYXhJbnB1dENoYXJzQWxsb3dlZCA9IG1h
eExlbmd0aDsgfQorICAKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX25h
bWU7CiAgICAgU3RyaW5nIG1fdmFsdWU7CkBAIC0xMTcsNiArMTM1LDEwIEBAIHByaXZhdGU6CiAg
ICAgaW50IG1fbWF4TGVuZ3RoOwogICAgIGludCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0OwogICAg
IGludCBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBTdHJpbmcg
bV9pbnB1dEZvcm1hdE1hc2s7CisgICAgdW5zaWduZWQgbV9tYXhJbnB1dENoYXJzQWxsb3dlZDsK
KyNlbmRpZgogfTsKIAogSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVudChFbGVtZW50Kik7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1ODczMSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0OSw0ICsy
NzQ5LDE1IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3RlcFVwRnJvbVJlbmRlcmUKICAgICBz
dGVwVXAobiwgZWMpOwogfQogCisjaWYgRU5BQkxFKFdDU1MpCit2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFdhcElucHV0Rm9ybWF0KFN0cmluZyYgbWFzaykKK3sKKyAgICBTdHJpbmcgdmFsaWRh
dGVNYXNrID0gdmFsaWRhdGVJbnB1dE1hc2sobV9kYXRhLCBtYXNrKTsKKyAgICBpZiAoIXZhbGlk
YXRlTWFzay5pc0VtcHR5KCkpCisgICAgICAgIG1fZGF0YS5zZXRJbnB1dEZvcm1hdE1hc2sodmFs
aWRhdGVNYXNrKTsKK30KKyNlbmRpZgorCisKKwogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNTg3MzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNiArMjY4LDExIEBAIHB1YmxpYzoK
ICAgICAvLyBBbiBpbnN0YW5jZSBwb2ludGVkIGJ5IHRoZSBEYXRlQ29tcG9uZW50cyogcGFyYW1l
dGVyIHdpbGwgaGF2ZSBwYXJzZWQgdmFsdWVzIGFuZCBiZQogICAgIC8vIG1vZGlmaWVkIGV2ZW4g
aWYgdGhlIHBhcnNpbmcgZmFpbHMuICBUaGUgRGF0ZUNvbXBvbmVudHMqIHBhcmFtZXRlciBtYXkg
YmUgMC4KICAgICBzdGF0aWMgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHMoSW5wdXRUeXBlLCBj
b25zdCBTdHJpbmcmLCBEYXRlQ29tcG9uZW50cyopOworCisjaWYgRU5BQkxFKFdDU1MpCisgICAg
dm9pZCBzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcmIG1hc2spOworICAgIHZpcnR1YWwgSW5wdXRF
bGVtZW50RGF0YSBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisjZW5kaWYKICAgICAK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KTsKSW5kZXg6IFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA1ODczMSkKKysrIFdlYkNvcmUv
d21sL1dNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw5IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNDb25mb3JtZWRUb0lucHV0TWFzayhjb25zdCBTdHJpbmcmKTsK
ICAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soVUNoYXIsIHVuc2lnbmVkLCBib29sIGlz
VXNlcklucHV0ID0gdHJ1ZSk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgdmlydHVhbCBJbnB1dEVs
ZW1lbnREYXRhIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyNlbmRpZgogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXTUxDYXJkRWxlbWVudDsKSW5kZXg6IFdlYktpdFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDU4NzMyKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTAtMDUtMDMgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9yY2htb2Jp
bGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAg
ICAgKiBTY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cGVybC9mZWF0dXJlcy5wbToKKwogMjAxMC0wNS0wMyAgQ2hyaXMgSmVyZG9uZWsgIDxjamVy
ZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwkocmV2aXNpb24gNTg3
MzEpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCSh3b3JraW5n
IGNvcHkpCkBAIC01MDEsNiArNTAxLDEwIEBAIGlmIChjaGVja1dlYkNvcmVGZWF0dXJlU3VwcG9y
dCgiV01MIiwgMCkKICAgICAkaWdub3JlZERpcmVjdG9yaWVzeyd3bWwnfSA9IDE7CiB9CiAKK2lm
ICghY2hlY2tXZWJDb3JlRmVhdHVyZVN1cHBvcnQoIldDU1MiLCAwKSkgeworICAgICRpZ25vcmVk
RGlyZWN0b3JpZXN7J2Zhc3Qvd2Nzcyd9ID0gMTsKK30KKwogaWYgKCFjaGVja1dlYkNvcmVGZWF0
dXJlU3VwcG9ydCgiWEhUTUxNUCIsIDApKSB7CiAgICAgJGlnbm9yZWREaXJlY3Rvcmllc3snZmFz
dC94aHRtbG1wJ30gPSAxOwogfQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJs
L2ZlYXR1cmVzLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cGVy
bC9mZWF0dXJlcy5wbQkocmV2aXNpb24gNTg3MzEpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvZmVhdHVyZXMucG0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgc3Vi
IGhhc0ZlYXR1cmUoJCQpCiAgICAgICAgICIzRCBSZW5kZXJpbmciID0+ICJXZWJDb3JlSGFzM0RS
ZW5kZXJpbmciLAogICAgICAgICAiM0QgQ2FudmFzIiA9PiAiV2ViR0xTaGFkZXIiLAogICAgICAg
ICAiV01MIiA9PiAiV01MRWxlbWVudCIsCisgICAgICAgICJXQ1NTIiA9PiAicGFyc2VXQ1NTSW5w
dXRQcm9wZXJ0eSIsCiAgICAgICAgICJYSFRNTE1QIiA9PiAiaXNYSFRNTE1QRG9jdW1lbnQiLAog
ICAgICk7CiAgICAgbXkgJHN5bWJvbE5hbWUgPSAkc3ltYm9sRm9yRmVhdHVyZXskZmVhdHVyZU5h
bWV9OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTg3MzIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNS0wMyAgQ2hhcmxlcyBXZWkg
IDxjaGFybGVzLndlaUB0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
R2VvcmdlIFN0YWlrb3MuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM3ODQ4CisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgdGVzdCBjYXNlcyBm
b3IgLXdhcC1pbnB1dC1yZXF1aXJlZCBhbmQgLXdhcC1pbnB1dC1mb3JtYXQKKworICAgICAgICAq
IGZhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLnhodG1sOiBBZGRlZC4KKwogMjAxMC0wNS0w
MyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCBleHBlY3RhdGlvbnMgY2hhbmdlLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dh
cC1pbnB1dC1mb3JtYXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyOSBAQAorQXNzdW1lIHRoZSB1c2VyIGlucHV0IHRoZSBmb2xsb3dp
bmcgIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IiB0byBlYWNoIG9mIHRoZSBpbnB1dCBl
bGVtZW50cworey13YXAtaW5wdXQtZm9ybWF0OiIqQSI7fSBvbmx5IHRha2VzIHVwcGVyIGxldHRl
cnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9ucworUEFTUyBkb21WYWx1ZU9mKCJzdGFyX3VwQSIpIGlz
ICJBQkNERUZHIUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFsdWVPZigic3Rhcl91cEEiKSBpcyAi
QUJDREVGRyFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1hdDoiKmEiO30gb25seSB0YWtlcyBs
b3dlciBsZXR0ZXJzLCBzeW1ib2xzLCBwdW5jdHVhdGlvbnMKK1BBU1MgZG9tVmFsdWVPZigic3Rh
cl9sb3dhIikgaXMgImFiY2RlZmchQCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFy
X2xvd2EiKSBpcyAiYWJjZGVmZyFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1hdDoiKk4iO30g
b25seSB0YWtlcyBudW1iZXJzIAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX3VwTiIpIGlzICIxMjM0
NTYiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX3VwTiIpIGlzICIxMjM0NTYiCit7LXdhcC1p
bnB1dC1mb3JtYXQ6IipuIjt9IG9ubHkgdGFrZXMgbnVtYmVycyAsIHN5bWJhbHMgYW5kIHB1bmN0
dWF0aW9ucyAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl9sb3duIikgaXMgIjEyMzQ1NiFAIyQlXiwu
OyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93biIpIGlzICIxMjM0NTYhQCMkJV4sLjsi
Cit7LXdhcC1pbnB1dC1mb3JtYXQ6IipYIjt9IHRha2VzIHVwcGVyIGxldHRlcnMsbnVtYmVycyxz
eW1iYWxzIGFuZCBwdW5jdHVhdGlvbnMgCitQQVNTIGRvbVZhbHVlT2YoInN0YXJfdXBYIikgaXMg
IkFCQ0RFRkcxMjM0NTYhQCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX3VwWCIp
IGlzICJBQkNERUZHMTIzNDU2IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqeCI7fSB0
YWtlcyBsb3dlciBsZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBhbmQgcHVuY3R1YXRpb25zIAorUEFT
UyBkb21WYWx1ZU9mKCJzdGFyX2xvd3giKSBpcyAiYWJjZGVmZzEyMzQ1NiFAIyQlXiwuOyIKK1BB
U1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93eCIpIGlzICJhYmNkZWZnMTIzNDU2IUAjJCVeLC47
Igorey13YXAtaW5wdXQtZm9ybWF0OiIqTSI7fSB0YWtlcyBhbnkgY2hhcmFjdGVyIAorUEFTUyBk
b21WYWx1ZU9mKCJzdGFyX3VwTSIpIGlzICJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyIK
K1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfdXBNIikgaXMgIkFhQmJDY0RkRWVGZkdnMTIzNDU2
IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqbSI7fSB0YWtlcyBhbnkgY2hhcmFjdGVy
IAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX2xvd20iKSBpcyAiQWFCYkNjRGRFZUZmR2cxMjM0NTYh
QCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX2xvd20iKSBpcyAiQWFCYkNjRGRF
ZUZmR2cxMjM0NTYhQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3JtYXQ6IjNOIjt9IHRha2VzIDMg
bnVtYmVycyAKK1BBU1MgZG9tVmFsdWVPZigidGhyZWVfTiIpIGlzICIxMjMiCitQQVNTIHZpc2li
bGVWYWx1ZU9mKCJ0aHJlZV9OIikgaXMgIjEyMyIKKyAgICAgICAgCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LnhodG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIgImh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiPgorCis8aHRtbCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKworPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KKy5zdGFyX3VwQSAgey13YXAtaW5wdXQtZm9ybWF0OiAiKkEiIDsgfSAgICAvKiB1cHBl
ciBsZXR0ZXIsIHN5bWJvbCwgcHVuY3R1YXRpb24sICBOTyBudW1iZXIgKi8KKy5zdGFyX2xvd2Eg
ey13YXAtaW5wdXQtZm9ybWF0OiAiKmEiIDsgfSAgICAvKiBsb3dlciBsZXR0ZXIsIHN5bWJvbCwg
cHVuY3R1YXRpb24sICBOTyBudW1iZXIgKi8KKy5zdGFyX3VwTiAgey13YXAtaW5wdXQtZm9ybWF0
OiAiKk4iIDsgfSAgICAvKiBudW1iZXIgb25seSAqLworLnN0YXJfbG93biB7LXdhcC1pbnB1dC1m
b3JtYXQ6ICIqbiIgOyB9ICAgIC8qIG51bWJlciAsIHN5bWJvbCwgcHVuY3R1YXRpb24sIG5vIGxl
dHRlciAqLworLnN0YXJfdXBYICB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqWCIgOyB9ICAgIC8qIHVw
cGVyIGxldHRlciwgbnVtYmVyLCBzeW1ib2wsIHB1bmN0dWF0aW9uLCBubyBsb3dlciBsZXR0ZXIg
Ki8KKy5zdGFyX2xvd3ggey13YXAtaW5wdXQtZm9ybWF0OiAiKngiIDsgfSAgICAvKiBsb3dlciBs
ZXR0ZXIsIG51bWJlciwgc3ltYm9sLCBwdW5jdHVhdGlvbiwgbm8gdXBwZXIgbGV0dGVyICovCisu
c3Rhcl91cE0gIHstd2FwLWlucHV0LWZvcm1hdDogIipNIiA7IH0gICAgLyogYW55dGhpbmcsIHdp
dGggdXBwZXIgYXMgdGhlIGRlZmF1bHQgaW5wdXQgKi8KKy5zdGFyX2xvd20gey13YXAtaW5wdXQt
Zm9ybWF0OiAiKm0iIDsgfSAgICAvKiBhbnl0aGluZywgd2l0aCBsb3dlciBhcyB0aGUgZGVmYXVs
dCBpbnB1dCAqLworLnRocmVlX04gICB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIzTiIgOyB9ICAgIC8q
IHVwIHRvIDMgZGlnaXQgbnVtYmVyICovCisKKzwvc3R5bGU+CisKKzxzY3JpcHQgc3JjPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwQSIgIGNsYXNzPSJzdGFyX3VwQSIgLz4KKzxp
bnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3dhIiBjbGFzcz0ic3Rhcl9sb3dhIiAvPgorPGlu
cHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwTiIgIGNsYXNzPSJzdGFyX3VwTiIgLz4KKzxpbnB1
dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3duIiBjbGFzcz0ic3Rhcl9sb3duIiAvPgorPGlucHV0
IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwWCIgIGNsYXNzPSJzdGFyX3VwWCIgLz4KKzxpbnB1dCB0
eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3d4IiBjbGFzcz0ic3Rhcl9sb3d4IiAvPgorPGlucHV0IHR5
cGU9InRleHQiIGlkPSJzdGFyX3VwTSIgIGNsYXNzPSJzdGFyX3VwTSIgLz4KKzxpbnB1dCB0eXBl
PSJ0ZXh0IiBpZD0ic3Rhcl9sb3dtIiBjbGFzcz0ic3Rhcl9sb3dtIiAvPgorPGlucHV0IHR5cGU9
InRleHQiIGlkPSJ0aHJlZV9OIiAgY2xhc3M9InRocmVlX04iIC8+CisKKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKworZnVuY3Rpb24gZG9tVmFsdWVPZihpZCkgeworICAgIHJldHVy
biBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWU7Cit9CitmdW5jdGlvbiB2aXNpYmxl
VmFsdWVPZihpZCkgeworICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsK
KyAgICBlbC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdTZWxlY3RBbGwnKTsK
KyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTsKK30KKworZnVu
Y3Rpb24gaW5wdXRLZXlzKHN0cikgeworICAgIGlmKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBmb3IoaSA9IDA7IGkgIT0gc3RyLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGV2ZW50U2VuZGVyLmtleURvd24oc3RyLmNoYXJBdChpKSk7CisgICAgfQorfQorCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworfQorCit2YXIgc3RyID0gIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVe
LC47IjsKKworZGVidWcoIkFzc3VtZSB0aGUgdXNlciBpbnB1dCB0aGUgZm9sbG93aW5nIFwiIiAr
IHN0ciArICJcIiB0byBlYWNoIG9mIHRoZSBpbnB1dCBlbGVtZW50czxici8+PGJyLz4iKTsKKwor
ZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqQSI7fSBvbmx5IHRha2VzIHVwcGVyIGxl
dHRlcnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9uczxici8+Jyk7CisKK2RvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJzdGFyX3VwQSIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdk
b21WYWx1ZU9mKCJzdGFyX3VwQSIpJywnIkFCQ0RFRkchQCMkJV4sLjsiJyk7CitzaG91bGRCZSgn
dmlzaWJsZVZhbHVlT2YoInN0YXJfdXBBIiknLCciQUJDREVGRyFAIyQlXiwuOyInKTsKKworZGVi
dWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqYSI7fSBvbmx5IHRha2VzIGxvd2VyIGxldHRl
cnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9uczxiciAvPjxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInN0YXJfbG93YSIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsKK3Nob3VsZEJl
KCdkb21WYWx1ZU9mKCJzdGFyX2xvd2EiKScsICciYWJjZGVmZyFAIyQlXiwuOyInKTsKK3Nob3Vs
ZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3dhIiknLCAnImFiY2RlZmchQCMkJV4sLjsiJyk7
CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiKk4iO30gb25seSB0YWtlcyBudW1i
ZXJzIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfdXBOIikuZm9jdXMo
KTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfdXBOIiknLCAn
IjEyMzQ1NiInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl91cE4iKScsICciMTIz
NDU2IicpOworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IipuIjt9IG9ubHkgdGFr
ZXMgbnVtYmVycyAsIHN5bWJhbHMgYW5kIHB1bmN0dWF0aW9ucyA8YnIgLz4nKTsKK2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJzdGFyX2xvd24iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7Citz
aG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl9sb3duIiknLCAnIjEyMzQ1NiFAIyQlXiwuOyInKTsK
K3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3duIiknLCAnIjEyMzQ1NiFAIyQlXiwu
OyInKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqWCI7fSB0YWtlcyB1cHBl
ciBsZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBhbmQgcHVuY3R1YXRpb25zIDxiciAvPicpOworZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfdXBYIikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIp
Oworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfdXBYIiknLCAnIkFCQ0RFRkcxMjM0NTYhQCMk
JV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfdXBYIiknLCAnIkFCQ0RF
RkcxMjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoi
KngiO30gdGFrZXMgbG93ZXIgbGV0dGVycyxudW1iZXJzLHN5bWJhbHMgYW5kIHB1bmN0dWF0aW9u
cyA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGFyX2xvd3giKS5mb2N1cygp
OworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl9sb3d4IiknLCAn
ImFiY2RlZmcxMjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0
YXJfbG93eCIpJywgJyJhYmNkZWZnMTIzNDU2IUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57
LXdhcC1pbnB1dC1mb3JtYXQ6IipNIjt9IHRha2VzIGFueSBjaGFyYWN0ZXIgPGJyIC8+Jyk7Citk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl91cE0iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0
cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl91cE0iKScsICciQWFCYkNjRGRFZUZmR2cx
MjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfdXBNIikn
LCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57LXdh
cC1pbnB1dC1mb3JtYXQ6IiptIjt9IHRha2VzIGFueSBjaGFyYWN0ZXIgPGJyIC8+Jyk7Citkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl9sb3dtIikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIp
Oworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfbG93bSIpJywgJyJBYUJiQ2NEZEVlRmZHZzEy
MzQ1NiFAIyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3dtIikn
LCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57LXdh
cC1pbnB1dC1mb3JtYXQ6IjNOIjt9IHRha2VzIDMgbnVtYmVycyA8YnIgLz4nKTsKK2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0aHJlZV9OIikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hv
dWxkQmUoJ2RvbVZhbHVlT2YoInRocmVlX04iKScsICciMTIzIicpOworc2hvdWxkQmUoJ3Zpc2li
bGVWYWx1ZU9mKCJ0aHJlZV9OIiknLCAnIjEyMyInKTsKKworCis8L3NjcmlwdD4KKworCis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVp
cmVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2Fw
LWlucHV0LXJlcXVpcmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQgQEAKK1RoZXJlIGFyZSB0aHJlZSBmb3JtIGNvbnRyb2wgZWxlbWVudHMgYmVs
b3csIHRoZSBmaXJzdCBvbmUgaXMgcmVxdWlyZWQgYW5kIGJsYW5rLHZhbGlkaXR5LnZhbHVlTWlz
c2luZyBzaG91bGQgYmUgdHJ1ZSwgdGhlIG90aGVyIHR3byBlaXRoZXIgZG9uJ3QgaGF2ZSAtd2Fw
LWlucHV0LXJlcXVpcmVkIGFwcGxpZWQsIG9yIHRoZSAtd2FwLWlucHV0LXJlcXVpcmVkIGluZGlj
YXRlcyBmYWxzZSwgYW5kIGFyZSBub3QgcmVxdWlyZWQgLgorCisgIAorU1VDQ0VTUyBTVUNDRVNT
IFNVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQu
eGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1yZXF1
aXJlZC54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5w
dXQtcmVxdWlyZWQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS9EVEQgWEhU
TUwgTW9iaWxlIDEuMC8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9i
aWxlMTAuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
PgorCis8aGVhZD4KKzx0aXRsZT5yZXF1aXJlZCBhbmQgYmFzaWMgdmFsdWVNaXNzaW5nPC90aXRs
ZT4KKworPC9oZWFkPgorCis8Ym9keT4KKzxwPlRoZXJlIGFyZSB0aHJlZSBmb3JtIGNvbnRyb2wg
ZWxlbWVudHMgYmVsb3csIHRoZSBmaXJzdCBvbmUgaXMgcmVxdWlyZWQgYW5kIGJsYW5rLHZhbGlk
aXR5LnZhbHVlTWlzc2luZyBzaG91bGQgYmUgdHJ1ZSwgdGhlIG90aGVyIHR3byBlaXRoZXIgZG9u
J3QgaGF2ZSAtd2FwLWlucHV0LXJlcXVpcmVkIGFwcGxpZWQsIG9yIHRoZSAtd2FwLWlucHV0LXJl
cXVpcmVkIGluZGljYXRlcyBmYWxzZSwgYW5kIGFyZSBub3QgcmVxdWlyZWQgLjwvcD4KKzxpbnB1
dCBuYW1lPSJyZXF1aXJlZCIgc3R5bGU9Ii13YXAtaW5wdXQtcmVxdWlyZWQ6dHJ1ZTsiIC8+Cis8
aW5wdXQgbmFtZT0ibm90X3NwZWNpZmllZCIgLz4KKzx0ZXh0YXJlYSBuYW1lPSJub3RfcmVxdWly
ZWQiIHN0eWxlPSItd2FwLWlucHV0LXJlcXVpcmVkOmZhbHNlOyI+PC90ZXh0YXJlYT4KKzxwIGlk
PSJjb25zb2xlIj4gPC9wPgorCis8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSAgbWVzc2FnZSArICIgIFxuIjsK
K30KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHYgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5TmFtZSgicmVxdWlyZWQiKTsKKyAgICBsb2codlswXS52YWxpZGl0eS52YWx1ZU1pc3Np
bmcgID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiKTsKKyAKKyAgICB2ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeU5hbWUoIm5vdF9zcGVjaWZpZWQiKTsKKyAgICBsb2coKCF2WzBdLnZhbGlkaXR5LnZh
bHVlTWlzc2luZykgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSIpOworCisgICAgdiA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlOYW1lKCJub3RfcmVxdWlyZWQiKTsKKyAgICBsb2coKCF2WzBdLnZhbGlk
aXR5LnZhbHVlTWlzc2luZykgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSIpOworCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="39076"
          type_id="1"
          status="+"
          setter="charles.wei"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54992</attachid>
            <date>2010-05-03 21:23:08 -0700</date>
            <delta_ts>2010-05-05 19:55:42 -0700</delta_ts>
            <desc>Resubmission fixing the reviewer info</desc>
            <filename>37848.patch</filename>
            <type>text/plain</type>
            <size>27777</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODczMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDUtMDMgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9y
Y2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb3JnZSBTdGFpa29zLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzg0OAor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgV0NTUyAtd2FwLWlucHV0LWZvcm1hdCBhbmQgLXdhcC1p
bnB1dC1yZXF1aXJlZCBzdXBwb3J0IHRvIFdlYktpdAorICAgICAgICAtd2FwLWlucHV0LWZvcm1h
dCBkZWZpbmVzIGEgbWFzayB0aGF0IGZpbHRlcnMgdGhlIHVzZXIgaW5wdXQgZm9yIGFuIGlucHV0
IGNvbnRyb2wKKyAgICAgICAgLXdhcC1pbnB1dC1yZXF1aXJlZCBzcGVjaWZpZXMgaWYgYW4gaW5w
dXQgY29udHJvbCBpcyByZXF1aXJlZCwgaWYgdHJ1ZSwgaXQgbXVzdCAKKyAgICAgICAgYmUgZmls
bGVkIHdpdGggc29tZSB2YWxpZCB2YWx1ZSBiZWZvcmUgc3VibWlzc2lvbi4gCisKKyAgICAgICAg
VGVzdHM6IGZhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LnhodG1sCisgICAgICAgICAgICAgICBm
YXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLnhodG1sCisKKyAgICAgICAgKiBjc3MvQ1NTUGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkpOgorICAgICAg
ICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAg
ICAgICAgKiBjc3MvV0NTU1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICogZG9tL0lucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1l
bnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRF
bGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVs
ZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKToKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjppbnB1dEZvcm1hdE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0SW5wdXRGb3JtYXRNYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6Om1heElucHV0Q2hhcnNBbGxvd2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudERhdGE6OnNldE1heElucHV0Q2hhcnNB
bGxvd2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQpOgorICAgICAgICAq
IGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6ZGF0YSk6CisgICAgICAgICogd21sL1dNTElucHV0RWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6V01MSW5wdXRFbGVtZW50OjpkYXRhKToKKwogMjAxMC0wNS0wMyAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiA1ODczMSkKKysrIFdlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDIsNiArMTcwMiwxNSBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRVbmRlcmxpbmU6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFZhcmlhYmxlRGVjbGFy
YXRpb25CbG9jazoKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2lmIEVOQUJMRShXQ1NTKQorICAg
IGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dEZvcm1hdDoKKyAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRSZXF1
aXJlZDoKKyAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZVdDU1NJbnB1dFByb3BlcnR5KCk7Cisg
ICAgICAgIGJyZWFrOworI2VuZGlmCisKICNpZiBFTkFCTEUoU1ZHKQogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBwYXJzZVNWR1ZhbHVlKHByb3BJZCwgaW1wb3J0YW50KTsKQEAgLTE3MzAs
NiArMTczOSwyNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKFdDU1MpCitQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkoKQoreworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSAwOworICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgU3RyaW5nIGlucHV0UHJvcGVydHk7CisgICAgaWYg
KHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HIHx8IHZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCisgICAgICAgIGlucHV0UHJvcGVy
dHkgPSBTdHJpbmcodmFsdWUtPnN0cmluZyk7CisKKyAgICBpZiAoIWlucHV0UHJvcGVydHkuaXNF
bXB0eSgpKQorICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShp
bnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisKKyAgICB3aGls
ZSAobV92YWx1ZUxpc3QtPm5leHQoKSkgeworICAgIC8vIHBhc3MgYWxsIG90aGVyIHZhbHVlcywg
aWYgYW55LiBJZiB3ZSBkb24ndCBkbyB0aGlzLCAKKyAgICAvLyB0aGUgcGFyc2VyIHdpbGwgdGhp
bmsgdGhhdCBpdCdzIG5vdCBkb25lIGFuZCB3b24ndCBwcm9jZXNzIHRoaXMgcHJvcGVydHkgIAor
ICAgIH0KKworICAgIHJldHVybiBwYXJzZWRWYWx1ZTsKK30KKyNlbmRpZgorCiB2b2lkIENTU1Bh
cnNlcjo6YWRkRmlsbFZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHJ2YWwpCiB7CiAgICAgaWYgKGx2YWwpIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiA1
ODczMSkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTEzOSw2ICsxNDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOwogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoV0NTUykKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VXQ1NTSW5w
dXRQcm9wZXJ0eSgpOworI2VuZGlmCisKICAgICAgICAgLy8gQ1NTMyBQYXJzaW5nIFJvdXRpbmVz
IChmb3IgcHJvcGVydGllcyBzcGVjaWZpYyB0byBDU1MzKQogICAgICAgICBib29sIHBhcnNlU2hh
ZG93KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKICAgICAgICAgYm9vbCBwYXJzZUJvcmRl
ckltYWdlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50LCBSZWZQdHI8Q1NTVmFsdWU+Jik7Cklu
ZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gNTg3MzEpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMzMSw2ICs1MzMx
LDIzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VmFyaWFibGVEZWNsYXJhdGlvbkJsb2NrOgogICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKFdD
U1MpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdhcElucHV0Rm9ybWF0OgorICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUgJiYgbV9lbGVtZW50LT5oYXNUYWdOYW1lKFdlYkNvcmU6OmlucHV0VGFnKSkg
eworICAgICAgICAgICAgU3RyaW5nIG1hc2sgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2VsZW1l
bnQpLT5zZXRXYXBJbnB1dEZvcm1hdChtYXNrKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRSZXF1aXJlZDoKKyAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlICYmIG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgeworICAg
ICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPihtX2VsZW1lbnQpOworICAgICAgICAgICAgYm9vbCByZXF1
aXJlZCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpID09ICJ0cnVlIjsKKyAgICAg
ICAgICAgIGVsZW1lbnQtPnNldFJlcXVpcmVkKHJlcXVpcmVkKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisjZW5kaWYgCisKICNpZiBFTkFCTEUoU1ZHKQogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKSW5kZXg6IFdlYkNvcmUvY3NzL1dDU1NQcm9w
ZXJ0eU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1dDU1NQcm9wZXJ0eU5hbWVz
LmluCShyZXZpc2lvbiA1ODczMSkKKysrIFdlYkNvcmUvY3NzL1dDU1NQcm9wZXJ0eU5hbWVzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNSBAQAorLXdhcC1pbnB1dC1mb3JtYXQKKy13YXAt
aW5wdXQtcmVxdWlyZWQKIC13YXAtbWFycXVlZS1kaXIKIC13YXAtbWFycXVlZS1sb29wCiAtd2Fw
LW1hcnF1ZWUtc3BlZWQKSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNTg3MzEpCisr
KyBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsy
MiwxNSBAQAogI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQuaCIKKworI2lmIEVOQUJMRShXQ1NTKQorI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3Qu
aCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9y
LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC0xMzgsNiArMTQ3LDE0IEBAIHZvaWQgSW5w
dXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcigKIAogU3RyaW5nIElucHV0RWxlbWVudDo6
c2FuaXRpemVWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgY29uc3QgU3Ry
aW5nJiBwcm9wb3NlZFZhbHVlKQogeworI2lmIEVOQUJMRShXQ1NTKQorICAgIElucHV0RWxlbWVu
dERhdGEgZGF0YSA9IGNvbnN0X2Nhc3Q8SW5wdXRFbGVtZW50Kj4oaW5wdXRFbGVtZW50KS0+ZGF0
YSgpOworICAgIGlmICghaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0YSwgcHJvcG9zZWRWYWx1ZSkp
IHsKKyAgICAgICAgaWYgKGlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEsIGRhdGEudmFsdWUoKSkp
CisgICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSgpOworICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIElucHV0RWxlbWVudDo6c2FuaXRpemVVc2Vy
SW5wdXRWYWx1ZShpbnB1dEVsZW1lbnQsIHByb3Bvc2VkVmFsdWUsIHNfbWF4aW11bUxlbmd0aCk7
CiB9CiAKQEAgLTE4Nyw2ICsyMDQsMTggQEAgdm9pZCBJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9y
ZVRleHRJbnNlcgogCiAgICAgLy8gVHJ1bmNhdGUgdGhlIGluc2VydGVkIHRleHQgdG8gYXZvaWQg
dmlvbGF0aW5nIHRoZSBtYXhMZW5ndGggYW5kIG90aGVyIGNvbnN0cmFpbnRzLgogICAgIEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50KiB0ZXh0RXZlbnQgPSBzdGF0aWNfY2FzdDxCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudCo+KGV2ZW50KTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgU3RyaW5nIGNhbmRpZGF0ZVN0cmluZyA9
IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT50ZXh0
KCk7CisgICAgaWYgKHNlbGVjdGlvbkxlbmd0aCkKKyAgICAgICAgY2FuZGlkYXRlU3RyaW5nLnJl
cGxhY2UocmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgdGV4dEV2ZW50
LT50ZXh0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2FuZGlkYXRlU3RyaW5nLmluc2VydCh0ZXh0
RXZlbnQtPnRleHQoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIGlmICghaXNDb25mb3Jt
VG9JbnB1dE1hc2soaW5wdXRFbGVtZW50LT5kYXRhKCksIGNhbmRpZGF0ZVN0cmluZykpIHsKKyAg
ICAgICAgdGV4dEV2ZW50LT5zZXRUZXh0KCIiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQor
I2VuZGlmCiAgICAgdGV4dEV2ZW50LT5zZXRUZXh0KHNhbml0aXplVXNlcklucHV0VmFsdWUoaW5w
dXRFbGVtZW50LCB0ZXh0RXZlbnQtPnRleHQoKSwgYXBwZW5kYWJsZUxlbmd0aCkpOwogfQogCkBA
IC0yMzgsNiArMjY3LDEwIEBAIElucHV0RWxlbWVudERhdGE6OklucHV0RWxlbWVudERhdGEoKQog
ICAgICwgbV9tYXhMZW5ndGgoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCiAgICAgLCBt
X2NhY2hlZFNlbGVjdGlvblN0YXJ0KC0xKQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25FbmQoLTEp
CisjaWYgRU5BQkxFKFdDU1MpCisgICAgLCBtX2lucHV0Rm9ybWF0TWFzaygiKm0iKQorICAgICwg
bV9tYXhJbnB1dENoYXJzQWxsb3dlZChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKKyNl
bmRpZgogewogfQogCkBAIC0yNTksNCArMjkyLDEzNyBAQCBJbnB1dEVsZW1lbnQqIHRvSW5wdXRF
bGVtZW50KEVsZW1lbnQqIGVsCiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZiBFTkFCTEUoV0NTUykK
K3N0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtYXRDb2RlcygpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGNvZGVzLCAoIkFhTm5YeE1tIikpOwor
ICAgIHJldHVybiBjb2RlczsKK30KKworc3RhdGljIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uVG9N
YXNrSW5kZXgoY29uc3QgU3RyaW5nJiBpbnB1dEZvcm1hdE1hc2ssIHVuc2lnbmVkIGN1cnNvclBv
c2l0aW9uKQoreworICAgIFVDaGFyIG1hc2s7CisgICAgaW50IGluZGV4ID0gLTE7CisgICAgZG8g
eworICAgICAgICBtYXNrID0gaW5wdXRGb3JtYXRNYXNrWysraW5kZXhdOworICAgICAgICBpZiAo
bWFzayA9PSAnXFwnKQorICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgZWxzZSBpZiAobWFz
ayA9PSAnKicgfHwgKGlzQVNDSUlEaWdpdChtYXNrKSAmJiBtYXNrICE9ICcwJykpIHsKKyAgICAg
ICAgICAgIGluZGV4ID0gaW5wdXRGb3JtYXRNYXNrLmxlbmd0aCgpIC0gMTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoY3Vyc29yUG9zaXRpb24tLSk7CisKKyAg
ICByZXR1cm4gaW5kZXg7Cit9CisKK2Jvb2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0
TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBjb25zdCBTdHJpbmcmIGlucHV0Q2hh
cnMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlucHV0Q2hhcnMubGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhkYXRhLCBpbnB1dENoYXJz
W2ldLCBpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxl
bWVudERhdGEmIGRhdGEsIFVDaGFyIGluQ2hhciwgdW5zaWduZWQgY3Vyc29yUG9zaXRpb24pCit7
CisgICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFzayA9IGRhdGEuaW5wdXRGb3JtYXRNYXNrKCk7CisK
KyAgICBpZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSB8fCBpbnB1dEZvcm1hdE1hc2sgPT0g
IipNIiB8fCBpbnB1dEZvcm1hdE1hc2sgPT0gIiptIikKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoY3Vyc29yUG9zaXRpb24gPj0gZGF0YS5tYXhJbnB1dENoYXJzQWxsb3dlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBtYXNrSW5kZXggPSBjdXJzb3JQ
b3NpdGlvblRvTWFza0luZGV4KGlucHV0Rm9ybWF0TWFzaywgY3Vyc29yUG9zaXRpb24pOworICAg
IGJvb2wgb2sgPSB0cnVlOworICAgIFVDaGFyIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tbbWFza0lu
ZGV4XTsKKyAgICAvLyBNYXRjaCB0aGUgaW5wdXRlZCBjaGFyYWN0ZXIgd2l0aCBpbnB1dCBtYXNr
CisgICAgc3dpdGNoIChtYXNrKSB7CisgICAgY2FzZSAnQSc6CisgICAgICAgIG9rID0gIWlzQVND
SUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRh
YmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2EnOgorICAgICAgICBvayA9
ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSVVwcGVyKGluQ2hhcikgJiYgaXNBU0NJ
SVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdOJzoKKyAgICAg
ICAgb2sgPSBpc0FTQ0lJRGlnaXQoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAn
bic6CisgICAgICAgIG9rID0gIWlzQVNDSUlBbHBoYShpbkNoYXIpICYmIGlzQVNDSUlQcmludGFi
bGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnWCc6CisgICAgICAgIG9rID0g
IWlzQVNDSUlMb3dlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSAneCc6CisgICAgICAgIG9rID0gIWlzQVNDSUlVcHBlcihpbkNo
YXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAnTSc6CisgICAgY2FzZSAnbSc6CisgICAgICAgIG9rID0gaXNBU0NJSVByaW50YWJsZShpbkNo
YXIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBvayA9IChtYXNrID09
IGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBvazsKK30KKwor
U3RyaW5nIElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2soSW5wdXRFbGVtZW50RGF0YSYg
ZGF0YSwgU3RyaW5nJiBpbnB1dE1hc2spCit7CisgICAgaW5wdXRNYXNrLnJlcGxhY2UoIlxcXFwi
LCAiXFwiKTsKKworICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxkY2Fy
ZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGVzY2FwZUNoYXJDb3VudCA9IDA7CisgICAgdW5zaWdu
ZWQgbWFza0xlbmd0aCA9IGlucHV0TWFzay5sZW5ndGgoKTsKKyAgICBVQ2hhciBmb3JtYXRDb2Rl
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXNrTGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1tpXTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGVzKCku
ZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0g
JyonIHx8IChpc0FTQ0lJRGlnaXQoZm9ybWF0Q29kZSkgJiYgZm9ybWF0Q29kZSAhPSAnMCcpKSB7
CisgICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgY29kZXMgd2hpY2ggZW5kcyB3aXRoICcqZicg
b3IgJ25mJworICAgICAgICAgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbKytpXTsKKyAg
ICAgICAgICAgICAgICBpZiAoKGkgKyAxICE9IG1hc2tMZW5ndGgpIHx8IGZvcm1hdENvZGVzKCku
ZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBoYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGZvcm1hdENvZGUgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciB0aGUg
bmV4dCBtYXNrIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAg
ICArK2VzY2FwZUNoYXJDb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgLy8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhbGxv
d2VkIHRvIGJlIGVudGVyZWQgYnkgaW5wdXQgbWFzaworICAgIHVuc2lnbmVkIGFsbG93ZWRMZW5n
dGggPSBtYXNrTGVuZ3RoOworICAgIGlmIChlc2NhcGVDaGFyQ291bnQpCisgICAgICAgIGFsbG93
ZWRMZW5ndGggLT0gZXNjYXBlQ2hhckNvdW50OworCisgICAgaWYgKGhhc1dpbGRjYXJkKSB7Cisg
ICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbbWFza0xlbmd0aCAtIDJdOworICAgICAgICBp
ZiAoZm9ybWF0Q29kZSA9PSAnKicpCisgICAgICAgICAgICBhbGxvd2VkTGVuZ3RoID0gZGF0YS5t
YXhJbnB1dENoYXJzQWxsb3dlZCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGxlZnRMZW4gPSBTdHJpbmcoJmZvcm1hdENvZGUpLnRvSW50KCk7CisgICAgICAgICAgICBh
bGxvd2VkTGVuZ3RoID0gbGVmdExlbiArIGFsbG93ZWRMZW5ndGggLSAyOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGFsbG93ZWRMZW5ndGggPCBkYXRhLm1heElucHV0Q2hhcnNBbGxvd2Vk
KCkpCisgICAgICAgIGRhdGEuc2V0TWF4SW5wdXRDaGFyc0FsbG93ZWQoYWxsb3dlZExlbmd0aCk7
CisKKyAgICByZXR1cm4gaW5wdXRNYXNrOworfQorCisjZW5kaWYKKwogfQpJbmRleDogV2ViQ29y
ZS9kb20vSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vSW5wdXRFbGVt
ZW50LmgJKHJldmlzaW9uIDU4NzMxKQorKysgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2VsZWN0KCkgPSAwOworICAKKyNpZiBFTkFCTEUoV0NTUykKKyAgICB2aXJ0dWFsIElucHV0
RWxlbWVudERhdGEgZGF0YSgpIGNvbnN0ID0gMDsgCisjZW5kaWYKIAogICAgIHN0YXRpYyBjb25z
dCBpbnQgc19tYXhpbXVtTGVuZ3RoOwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19kZWZhdWx0U2l6
ZTsKQEAgLTgwLDYgKzg0LDExIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCBwYXJzZU1h
eExlbmd0aEF0dHJpYnV0ZShJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50KiwgRWxlbWVu
dCosIE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVZhbHVlSWZOZWVk
ZWQoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCopOwogICAgIHN0YXRpYyB2b2lkIG5v
dGlmeUZvcm1TdGF0ZUNoYW5nZWQoRWxlbWVudCopOworI2lmIEVOQUJMRShXQ1NTKQorICAgIHN0
YXRpYyBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmLCBj
b25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1Ub0lucHV0TWFzayhjb25z
dCBJbnB1dEVsZW1lbnREYXRhJiwgVUNoYXIsIHVuc2lnbmVkKTsKKyAgICBzdGF0aWMgU3RyaW5n
IHZhbGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVudERhdGEmLCBTdHJpbmcmKTsKKyNlbmRpZgog
fTsKIAogLy8gSFRNTC9XTUxJbnB1dEVsZW1lbnQgaG9sZCB0aGlzIHN0cnVjdCBhcyBtZW1iZXIg
dmFyaWFibGUKQEAgLTEwOSw2ICsxMTgsMTUgQEAgcHVibGljOgogICAgIGludCBjYWNoZWRTZWxl
Y3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvbkVuZDsgfQogICAgIHZv
aWQgc2V0Q2FjaGVkU2VsZWN0aW9uRW5kKGludCB2YWx1ZSkgeyBtX2NhY2hlZFNlbGVjdGlvbkVu
ZCA9IHZhbHVlOyB9CiAKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBTdHJpbmcgaW5wdXRGb3JtYXRN
YXNrKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEZvcm1hdE1hc2s7IH0KKyAgICB2b2lkIHNldElu
cHV0Rm9ybWF0TWFzayhjb25zdCBTdHJpbmcmIG1hc2spIHsgbV9pbnB1dEZvcm1hdE1hc2sgPSBt
YXNrOyB9CisgCisgICAgdW5zaWduZWQgbWF4SW5wdXRDaGFyc0FsbG93ZWQoKSBjb25zdCB7IHJl
dHVybiBtX21heElucHV0Q2hhcnNBbGxvd2VkOyB9CisgICAgdm9pZCBzZXRNYXhJbnB1dENoYXJz
QWxsb3dlZCh1bnNpZ25lZCBtYXhMZW5ndGgpIHsgbV9tYXhJbnB1dENoYXJzQWxsb3dlZCA9IG1h
eExlbmd0aDsgfQorICAKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX25h
bWU7CiAgICAgU3RyaW5nIG1fdmFsdWU7CkBAIC0xMTcsNiArMTM1LDEwIEBAIHByaXZhdGU6CiAg
ICAgaW50IG1fbWF4TGVuZ3RoOwogICAgIGludCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0OwogICAg
IGludCBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICBTdHJpbmcg
bV9pbnB1dEZvcm1hdE1hc2s7CisgICAgdW5zaWduZWQgbV9tYXhJbnB1dENoYXJzQWxsb3dlZDsK
KyNlbmRpZgogfTsKIAogSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVudChFbGVtZW50Kik7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1ODczMSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0OSw0ICsy
NzQ5LDE1IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3RlcFVwRnJvbVJlbmRlcmUKICAgICBz
dGVwVXAobiwgZWMpOwogfQogCisjaWYgRU5BQkxFKFdDU1MpCit2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFdhcElucHV0Rm9ybWF0KFN0cmluZyYgbWFzaykKK3sKKyAgICBTdHJpbmcgdmFsaWRh
dGVNYXNrID0gdmFsaWRhdGVJbnB1dE1hc2sobV9kYXRhLCBtYXNrKTsKKyAgICBpZiAoIXZhbGlk
YXRlTWFzay5pc0VtcHR5KCkpCisgICAgICAgIG1fZGF0YS5zZXRJbnB1dEZvcm1hdE1hc2sodmFs
aWRhdGVNYXNrKTsKK30KKyNlbmRpZgorCisKKwogfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gNTg3MzEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNiArMjY4LDExIEBAIHB1YmxpYzoK
ICAgICAvLyBBbiBpbnN0YW5jZSBwb2ludGVkIGJ5IHRoZSBEYXRlQ29tcG9uZW50cyogcGFyYW1l
dGVyIHdpbGwgaGF2ZSBwYXJzZWQgdmFsdWVzIGFuZCBiZQogICAgIC8vIG1vZGlmaWVkIGV2ZW4g
aWYgdGhlIHBhcnNpbmcgZmFpbHMuICBUaGUgRGF0ZUNvbXBvbmVudHMqIHBhcmFtZXRlciBtYXkg
YmUgMC4KICAgICBzdGF0aWMgYm9vbCBwYXJzZVRvRGF0ZUNvbXBvbmVudHMoSW5wdXRUeXBlLCBj
b25zdCBTdHJpbmcmLCBEYXRlQ29tcG9uZW50cyopOworCisjaWYgRU5BQkxFKFdDU1MpCisgICAg
dm9pZCBzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcmIG1hc2spOworICAgIHZpcnR1YWwgSW5wdXRF
bGVtZW50RGF0YSBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisjZW5kaWYKICAgICAK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KTsKSW5kZXg6IFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA1ODczMSkKKysrIFdlYkNvcmUv
d21sL1dNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw5IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNDb25mb3JtZWRUb0lucHV0TWFzayhjb25zdCBTdHJpbmcmKTsK
ICAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soVUNoYXIsIHVuc2lnbmVkLCBib29sIGlz
VXNlcklucHV0ID0gdHJ1ZSk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgdmlydHVhbCBJbnB1dEVs
ZW1lbnREYXRhIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyNlbmRpZgogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXTUxDYXJkRWxlbWVudDsKSW5kZXg6IFdlYktpdFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDU4NzMyKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTAtMDUtMDMgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9yY2htb2Jp
bGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAg
ICAgKiBTY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cGVybC9mZWF0dXJlcy5wbToKKwogMjAxMC0wNS0wMyAgQ2hyaXMgSmVyZG9uZWsgIDxjamVy
ZG9uZWtAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwkocmV2aXNpb24gNTg3
MzEpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCSh3b3JraW5n
IGNvcHkpCkBAIC01MDEsNiArNTAxLDEwIEBAIGlmIChjaGVja1dlYkNvcmVGZWF0dXJlU3VwcG9y
dCgiV01MIiwgMCkKICAgICAkaWdub3JlZERpcmVjdG9yaWVzeyd3bWwnfSA9IDE7CiB9CiAKK2lm
ICghY2hlY2tXZWJDb3JlRmVhdHVyZVN1cHBvcnQoIldDU1MiLCAwKSkgeworICAgICRpZ25vcmVk
RGlyZWN0b3JpZXN7J2Zhc3Qvd2Nzcyd9ID0gMTsKK30KKwogaWYgKCFjaGVja1dlYkNvcmVGZWF0
dXJlU3VwcG9ydCgiWEhUTUxNUCIsIDApKSB7CiAgICAgJGlnbm9yZWREaXJlY3Rvcmllc3snZmFz
dC94aHRtbG1wJ30gPSAxOwogfQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJs
L2ZlYXR1cmVzLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cGVy
bC9mZWF0dXJlcy5wbQkocmV2aXNpb24gNTg3MzEpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvZmVhdHVyZXMucG0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgc3Vi
IGhhc0ZlYXR1cmUoJCQpCiAgICAgICAgICIzRCBSZW5kZXJpbmciID0+ICJXZWJDb3JlSGFzM0RS
ZW5kZXJpbmciLAogICAgICAgICAiM0QgQ2FudmFzIiA9PiAiV2ViR0xTaGFkZXIiLAogICAgICAg
ICAiV01MIiA9PiAiV01MRWxlbWVudCIsCisgICAgICAgICJXQ1NTIiA9PiAicGFyc2VXQ1NTSW5w
dXRQcm9wZXJ0eSIsCiAgICAgICAgICJYSFRNTE1QIiA9PiAiaXNYSFRNTE1QRG9jdW1lbnQiLAog
ICAgICk7CiAgICAgbXkgJHN5bWJvbE5hbWUgPSAkc3ltYm9sRm9yRmVhdHVyZXskZmVhdHVyZU5h
bWV9OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTg3MzIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNS0wMyAgQ2hhcmxlcyBXZWkg
IDxjaGFybGVzLndlaUB0b3JjaG1vYmlsZS5jb20uY24+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
R2VvcmdlIFN0YWlrb3MuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM3ODQ4CisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgdGVzdCBjYXNlcyBm
b3IgLXdhcC1pbnB1dC1yZXF1aXJlZCBhbmQgLXdhcC1pbnB1dC1mb3JtYXQKKworICAgICAgICAq
IGZhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC93Y3NzL3dhcC1pbnB1dC1mb3JtYXQueGh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLnhodG1sOiBBZGRlZC4KKwogMjAxMC0wNS0w
MyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCBleHBlY3RhdGlvbnMgY2hhbmdlLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dh
cC1pbnB1dC1mb3JtYXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyOSBAQAorQXNzdW1lIHRoZSB1c2VyIGlucHV0IHRoZSBmb2xsb3dp
bmcgIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IiB0byBlYWNoIG9mIHRoZSBpbnB1dCBl
bGVtZW50cworey13YXAtaW5wdXQtZm9ybWF0OiIqQSI7fSBvbmx5IHRha2VzIHVwcGVyIGxldHRl
cnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9ucworUEFTUyBkb21WYWx1ZU9mKCJzdGFyX3VwQSIpIGlz
ICJBQkNERUZHIUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFsdWVPZigic3Rhcl91cEEiKSBpcyAi
QUJDREVGRyFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1hdDoiKmEiO30gb25seSB0YWtlcyBs
b3dlciBsZXR0ZXJzLCBzeW1ib2xzLCBwdW5jdHVhdGlvbnMKK1BBU1MgZG9tVmFsdWVPZigic3Rh
cl9sb3dhIikgaXMgImFiY2RlZmchQCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFy
X2xvd2EiKSBpcyAiYWJjZGVmZyFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZvcm1hdDoiKk4iO30g
b25seSB0YWtlcyBudW1iZXJzIAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX3VwTiIpIGlzICIxMjM0
NTYiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX3VwTiIpIGlzICIxMjM0NTYiCit7LXdhcC1p
bnB1dC1mb3JtYXQ6IipuIjt9IG9ubHkgdGFrZXMgbnVtYmVycyAsIHN5bWJhbHMgYW5kIHB1bmN0
dWF0aW9ucyAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl9sb3duIikgaXMgIjEyMzQ1NiFAIyQlXiwu
OyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93biIpIGlzICIxMjM0NTYhQCMkJV4sLjsi
Cit7LXdhcC1pbnB1dC1mb3JtYXQ6IipYIjt9IHRha2VzIHVwcGVyIGxldHRlcnMsbnVtYmVycyxz
eW1iYWxzIGFuZCBwdW5jdHVhdGlvbnMgCitQQVNTIGRvbVZhbHVlT2YoInN0YXJfdXBYIikgaXMg
IkFCQ0RFRkcxMjM0NTYhQCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX3VwWCIp
IGlzICJBQkNERUZHMTIzNDU2IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqeCI7fSB0
YWtlcyBsb3dlciBsZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBhbmQgcHVuY3R1YXRpb25zIAorUEFT
UyBkb21WYWx1ZU9mKCJzdGFyX2xvd3giKSBpcyAiYWJjZGVmZzEyMzQ1NiFAIyQlXiwuOyIKK1BB
U1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93eCIpIGlzICJhYmNkZWZnMTIzNDU2IUAjJCVeLC47
Igorey13YXAtaW5wdXQtZm9ybWF0OiIqTSI7fSB0YWtlcyBhbnkgY2hhcmFjdGVyIAorUEFTUyBk
b21WYWx1ZU9mKCJzdGFyX3VwTSIpIGlzICJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyIK
K1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfdXBNIikgaXMgIkFhQmJDY0RkRWVGZkdnMTIzNDU2
IUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqbSI7fSB0YWtlcyBhbnkgY2hhcmFjdGVy
IAorUEFTUyBkb21WYWx1ZU9mKCJzdGFyX2xvd20iKSBpcyAiQWFCYkNjRGRFZUZmR2cxMjM0NTYh
QCMkJV4sLjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX2xvd20iKSBpcyAiQWFCYkNjRGRF
ZUZmR2cxMjM0NTYhQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3JtYXQ6IjNOIjt9IHRha2VzIDMg
bnVtYmVycyAKK1BBU1MgZG9tVmFsdWVPZigidGhyZWVfTiIpIGlzICIxMjMiCitQQVNTIHZpc2li
bGVWYWx1ZU9mKCJ0aHJlZV9OIikgaXMgIjEyMyIKKyAgICAgICAgCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC54aHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtZm9ybWF0LnhodG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgaHRtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIgImh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiPgorCis8aHRtbCB4bWxucz0iaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKworPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KKy5zdGFyX3VwQSAgey13YXAtaW5wdXQtZm9ybWF0OiAiKkEiIDsgfSAgICAvKiB1cHBl
ciBsZXR0ZXIsIHN5bWJvbCwgcHVuY3R1YXRpb24sICBOTyBudW1iZXIgKi8KKy5zdGFyX2xvd2Eg
ey13YXAtaW5wdXQtZm9ybWF0OiAiKmEiIDsgfSAgICAvKiBsb3dlciBsZXR0ZXIsIHN5bWJvbCwg
cHVuY3R1YXRpb24sICBOTyBudW1iZXIgKi8KKy5zdGFyX3VwTiAgey13YXAtaW5wdXQtZm9ybWF0
OiAiKk4iIDsgfSAgICAvKiBudW1iZXIgb25seSAqLworLnN0YXJfbG93biB7LXdhcC1pbnB1dC1m
b3JtYXQ6ICIqbiIgOyB9ICAgIC8qIG51bWJlciAsIHN5bWJvbCwgcHVuY3R1YXRpb24sIG5vIGxl
dHRlciAqLworLnN0YXJfdXBYICB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqWCIgOyB9ICAgIC8qIHVw
cGVyIGxldHRlciwgbnVtYmVyLCBzeW1ib2wsIHB1bmN0dWF0aW9uLCBubyBsb3dlciBsZXR0ZXIg
Ki8KKy5zdGFyX2xvd3ggey13YXAtaW5wdXQtZm9ybWF0OiAiKngiIDsgfSAgICAvKiBsb3dlciBs
ZXR0ZXIsIG51bWJlciwgc3ltYm9sLCBwdW5jdHVhdGlvbiwgbm8gdXBwZXIgbGV0dGVyICovCisu
c3Rhcl91cE0gIHstd2FwLWlucHV0LWZvcm1hdDogIipNIiA7IH0gICAgLyogYW55dGhpbmcsIHdp
dGggdXBwZXIgYXMgdGhlIGRlZmF1bHQgaW5wdXQgKi8KKy5zdGFyX2xvd20gey13YXAtaW5wdXQt
Zm9ybWF0OiAiKm0iIDsgfSAgICAvKiBhbnl0aGluZywgd2l0aCBsb3dlciBhcyB0aGUgZGVmYXVs
dCBpbnB1dCAqLworLnRocmVlX04gICB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIzTiIgOyB9ICAgIC8q
IHVwIHRvIDMgZGlnaXQgbnVtYmVyICovCisKKzwvc3R5bGU+CisKKzxzY3JpcHQgc3JjPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwQSIgIGNsYXNzPSJzdGFyX3VwQSIgLz4KKzxp
bnB1dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3dhIiBjbGFzcz0ic3Rhcl9sb3dhIiAvPgorPGlu
cHV0IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwTiIgIGNsYXNzPSJzdGFyX3VwTiIgLz4KKzxpbnB1
dCB0eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3duIiBjbGFzcz0ic3Rhcl9sb3duIiAvPgorPGlucHV0
IHR5cGU9InRleHQiIGlkPSJzdGFyX3VwWCIgIGNsYXNzPSJzdGFyX3VwWCIgLz4KKzxpbnB1dCB0
eXBlPSJ0ZXh0IiBpZD0ic3Rhcl9sb3d4IiBjbGFzcz0ic3Rhcl9sb3d4IiAvPgorPGlucHV0IHR5
cGU9InRleHQiIGlkPSJzdGFyX3VwTSIgIGNsYXNzPSJzdGFyX3VwTSIgLz4KKzxpbnB1dCB0eXBl
PSJ0ZXh0IiBpZD0ic3Rhcl9sb3dtIiBjbGFzcz0ic3Rhcl9sb3dtIiAvPgorPGlucHV0IHR5cGU9
InRleHQiIGlkPSJ0aHJlZV9OIiAgY2xhc3M9InRocmVlX04iIC8+CisKKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKworZnVuY3Rpb24gZG9tVmFsdWVPZihpZCkgeworICAgIHJldHVy
biBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWU7Cit9CitmdW5jdGlvbiB2aXNpYmxl
VmFsdWVPZihpZCkgeworICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsK
KyAgICBlbC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdTZWxlY3RBbGwnKTsK
KyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTsKK30KKworZnVu
Y3Rpb24gaW5wdXRLZXlzKHN0cikgeworICAgIGlmKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBmb3IoaSA9IDA7IGkgIT0gc3RyLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGV2ZW50U2VuZGVyLmtleURvd24oc3RyLmNoYXJBdChpKSk7CisgICAgfQorfQorCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworfQorCit2YXIgc3RyID0gIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVe
LC47IjsKKworZGVidWcoIkFzc3VtZSB0aGUgdXNlciBpbnB1dCB0aGUgZm9sbG93aW5nIFwiIiAr
IHN0ciArICJcIiB0byBlYWNoIG9mIHRoZSBpbnB1dCBlbGVtZW50czxici8+PGJyLz4iKTsKKwor
ZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqQSI7fSBvbmx5IHRha2VzIHVwcGVyIGxl
dHRlcnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9uczxici8+Jyk7CisKK2RvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJzdGFyX3VwQSIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdk
b21WYWx1ZU9mKCJzdGFyX3VwQSIpJywnIkFCQ0RFRkchQCMkJV4sLjsiJyk7CitzaG91bGRCZSgn
dmlzaWJsZVZhbHVlT2YoInN0YXJfdXBBIiknLCciQUJDREVGRyFAIyQlXiwuOyInKTsKKworZGVi
dWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqYSI7fSBvbmx5IHRha2VzIGxvd2VyIGxldHRl
cnMsIHN5bWJvbHMsIHB1bmN0dWF0aW9uczxiciAvPjxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInN0YXJfbG93YSIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsKK3Nob3VsZEJl
KCdkb21WYWx1ZU9mKCJzdGFyX2xvd2EiKScsICciYWJjZGVmZyFAIyQlXiwuOyInKTsKK3Nob3Vs
ZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3dhIiknLCAnImFiY2RlZmchQCMkJV4sLjsiJyk7
CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiKk4iO30gb25seSB0YWtlcyBudW1i
ZXJzIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfdXBOIikuZm9jdXMo
KTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfdXBOIiknLCAn
IjEyMzQ1NiInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl91cE4iKScsICciMTIz
NDU2IicpOworCitkZWJ1ZygnPGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IipuIjt9IG9ubHkgdGFr
ZXMgbnVtYmVycyAsIHN5bWJhbHMgYW5kIHB1bmN0dWF0aW9ucyA8YnIgLz4nKTsKK2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJzdGFyX2xvd24iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7Citz
aG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl9sb3duIiknLCAnIjEyMzQ1NiFAIyQlXiwuOyInKTsK
K3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3duIiknLCAnIjEyMzQ1NiFAIyQlXiwu
OyInKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqWCI7fSB0YWtlcyB1cHBl
ciBsZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBhbmQgcHVuY3R1YXRpb25zIDxiciAvPicpOworZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfdXBYIikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIp
Oworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfdXBYIiknLCAnIkFCQ0RFRkcxMjM0NTYhQCMk
JV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfdXBYIiknLCAnIkFCQ0RF
RkcxMjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoi
KngiO30gdGFrZXMgbG93ZXIgbGV0dGVycyxudW1iZXJzLHN5bWJhbHMgYW5kIHB1bmN0dWF0aW9u
cyA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGFyX2xvd3giKS5mb2N1cygp
OworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl9sb3d4IiknLCAn
ImFiY2RlZmcxMjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0
YXJfbG93eCIpJywgJyJhYmNkZWZnMTIzNDU2IUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57
LXdhcC1pbnB1dC1mb3JtYXQ6IipNIjt9IHRha2VzIGFueSBjaGFyYWN0ZXIgPGJyIC8+Jyk7Citk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl91cE0iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0
cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl91cE0iKScsICciQWFCYkNjRGRFZUZmR2cx
MjM0NTYhQCMkJV4sLjsiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInN0YXJfdXBNIikn
LCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57LXdh
cC1pbnB1dC1mb3JtYXQ6IiptIjt9IHRha2VzIGFueSBjaGFyYWN0ZXIgPGJyIC8+Jyk7Citkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl9sb3dtIikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIp
Oworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJfbG93bSIpJywgJyJBYUJiQ2NEZEVlRmZHZzEy
MzQ1NiFAIyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3dtIikn
LCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57LXdh
cC1pbnB1dC1mb3JtYXQ6IjNOIjt9IHRha2VzIDMgbnVtYmVycyA8YnIgLz4nKTsKK2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0aHJlZV9OIikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hv
dWxkQmUoJ2RvbVZhbHVlT2YoInRocmVlX04iKScsICciMTIzIicpOworc2hvdWxkQmUoJ3Zpc2li
bGVWYWx1ZU9mKCJ0aHJlZV9OIiknLCAnIjEyMyInKTsKKworCis8L3NjcmlwdD4KKworCis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVp
cmVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2Fw
LWlucHV0LXJlcXVpcmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQgQEAKK1RoZXJlIGFyZSB0aHJlZSBmb3JtIGNvbnRyb2wgZWxlbWVudHMgYmVs
b3csIHRoZSBmaXJzdCBvbmUgaXMgcmVxdWlyZWQgYW5kIGJsYW5rLHZhbGlkaXR5LnZhbHVlTWlz
c2luZyBzaG91bGQgYmUgdHJ1ZSwgdGhlIG90aGVyIHR3byBlaXRoZXIgZG9uJ3QgaGF2ZSAtd2Fw
LWlucHV0LXJlcXVpcmVkIGFwcGxpZWQsIG9yIHRoZSAtd2FwLWlucHV0LXJlcXVpcmVkIGluZGlj
YXRlcyBmYWxzZSwgYW5kIGFyZSBub3QgcmVxdWlyZWQgLgorCisgIAorU1VDQ0VTUyBTVUNDRVNT
IFNVQ0NFU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQu
eGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1yZXF1
aXJlZC54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5w
dXQtcmVxdWlyZWQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS9EVEQgWEhU
TUwgTW9iaWxlIDEuMC8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9i
aWxlMTAuZHRkIj4KKworPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
PgorCis8aGVhZD4KKzx0aXRsZT5yZXF1aXJlZCBhbmQgYmFzaWMgdmFsdWVNaXNzaW5nPC90aXRs
ZT4KKworPC9oZWFkPgorCis8Ym9keT4KKzxwPlRoZXJlIGFyZSB0aHJlZSBmb3JtIGNvbnRyb2wg
ZWxlbWVudHMgYmVsb3csIHRoZSBmaXJzdCBvbmUgaXMgcmVxdWlyZWQgYW5kIGJsYW5rLHZhbGlk
aXR5LnZhbHVlTWlzc2luZyBzaG91bGQgYmUgdHJ1ZSwgdGhlIG90aGVyIHR3byBlaXRoZXIgZG9u
J3QgaGF2ZSAtd2FwLWlucHV0LXJlcXVpcmVkIGFwcGxpZWQsIG9yIHRoZSAtd2FwLWlucHV0LXJl
cXVpcmVkIGluZGljYXRlcyBmYWxzZSwgYW5kIGFyZSBub3QgcmVxdWlyZWQgLjwvcD4KKzxpbnB1
dCBuYW1lPSJyZXF1aXJlZCIgc3R5bGU9Ii13YXAtaW5wdXQtcmVxdWlyZWQ6dHJ1ZTsiIC8+Cis8
aW5wdXQgbmFtZT0ibm90X3NwZWNpZmllZCIgLz4KKzx0ZXh0YXJlYSBuYW1lPSJub3RfcmVxdWly
ZWQiIHN0eWxlPSItd2FwLWlucHV0LXJlcXVpcmVkOmZhbHNlOyI+PC90ZXh0YXJlYT4KKzxwIGlk
PSJjb25zb2xlIj4gPC9wPgorCis8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSAgbWVzc2FnZSArICIgIFxuIjsK
K30KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHYgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5TmFtZSgicmVxdWlyZWQiKTsKKyAgICBsb2codlswXS52YWxpZGl0eS52YWx1ZU1pc3Np
bmcgID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiKTsKKyAKKyAgICB2ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeU5hbWUoIm5vdF9zcGVjaWZpZWQiKTsKKyAgICBsb2coKCF2WzBdLnZhbGlkaXR5LnZh
bHVlTWlzc2luZykgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSIpOworCisgICAgdiA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlOYW1lKCJub3RfcmVxdWlyZWQiKTsKKyAgICBsb2coKCF2WzBdLnZhbGlk
aXR5LnZhbHVlTWlzc2luZykgPyAiU1VDQ0VTUyIgOiAiRkFJTFVSRSIpOworCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="39078"
          type_id="1"
          status="+"
          setter="staikos"
    />
    <flag name="commit-queue"
          id="39079"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55198</attachid>
            <date>2010-05-05 19:55:42 -0700</date>
            <delta_ts>2010-05-05 23:54:31 -0700</delta_ts>
            <desc>fixes changelog problem</desc>
            <filename>37848_0506.patch</filename>
            <type>text/plain</type>
            <size>27704</size>
            <attacher name="Charles Wei">charles.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODg1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDUtMDUgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9y
Y2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb3JnZSBTdGFpa29zCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3ODQ4Cisg
ICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBXQ1NTIC13YXAtaW5wdXQtZm9ybWF0IGFuZCAtd2FwLWlu
cHV0LXJlcXVpcmVkIHN1cHBvcnQgdG8gV2ViS2l0CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd2Nz
cy93YXAtaW5wdXQtZm9ybWF0LnhodG1sCisgICAgICAgICAgICAgICBmYXN0L3djc3Mvd2FwLWlu
cHV0LXJlcXVpcmVkLnhodG1sCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkpOgorICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKiBjc3MvV0NT
U1Byb3BlcnR5TmFtZXMuaW46CisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1lbnREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmN1cnNvclBvc2l0
aW9uVG9NYXNrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50Ojppc0NvbmZv
cm1Ub0lucHV0TWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnZhbGlkYXRl
SW5wdXRNYXNrKToKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dEVsZW1lbnREYXRhOjppbnB1dEZvcm1hdE1hc2spOgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRFbGVtZW50RGF0YTo6c2V0SW5wdXRGb3JtYXRNYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OklucHV0RWxlbWVudERhdGE6Om1heElucHV0Q2hhcnNBbGxvd2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OklucHV0RWxlbWVudERhdGE6OnNldE1heElucHV0Q2hhcnNBbGxvd2VkKToKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6ZGF0YSk6Cisg
ICAgICAgICogd21sL1dNTElucHV0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5w
dXRFbGVtZW50OjpkYXRhKToKKwogMjAxMC0wNS0wNSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgZGVjZWxlcmF0ZWQgY29tcG9zaXRpbmcgYnVpbGQu
CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwMiw2ICsxNzAyLDE1IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVu
ZGVybGluZToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VmFyaWFibGVEZWNsYXJhdGlvbkJs
b2NrOgogICAgICAgICByZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdhcElucHV0Rm9ybWF0OgorICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dFJlcXVpcmVkOgor
ICAgICAgICBwYXJzZWRWYWx1ZSA9IHBhcnNlV0NTU0lucHV0UHJvcGVydHkoKTsKKyAgICAgICAg
YnJlYWs7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIHBhcnNlU1ZHVmFsdWUocHJvcElkLCBpbXBvcnRhbnQpOwpAQCAtMTczMCw2ICsxNzM5
LDI3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoV0NTUykKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSgpCit7CisgICAgUmVmUHRyPENTU1ZhbHVl
PiBwYXJzZWRWYWx1ZSA9IDA7CisgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKKyAgICBTdHJpbmcgaW5wdXRQcm9wZXJ0eTsKKyAgICBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKKyAgICAgICAgaW5wdXRQcm9wZXJ0eSA9IFN0
cmluZyh2YWx1ZS0+c3RyaW5nKTsKKworICAgIGlmICghaW5wdXRQcm9wZXJ0eS5pc0VtcHR5KCkp
CisgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGlucHV0UHJv
cGVydHksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKworICAgIHdoaWxlIChtX3Zh
bHVlTGlzdC0+bmV4dCgpKSB7CisgICAgLy8gcGFzcyBhbGwgb3RoZXIgdmFsdWVzLCBpZiBhbnku
IElmIHdlIGRvbid0IGRvIHRoaXMsIAorICAgIC8vIHRoZSBwYXJzZXIgd2lsbCB0aGluayB0aGF0
IGl0J3Mgbm90IGRvbmUgYW5kIHdvbid0IHByb2Nlc3MgdGhpcyBwcm9wZXJ0eSAgCisgICAgfQor
CisgICAgcmV0dXJuIHBhcnNlZFZhbHVlOworfQorI2VuZGlmCisKIHZvaWQgQ1NTUGFyc2VyOjph
ZGRGaWxsVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
cnZhbCkKIHsKICAgICBpZiAobHZhbCkgewpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDU4ODU1KQor
KysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTAgIFRvcmNoIE1vYmlsZSAoQmVpamlu
ZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MTM5LDYgKzE0MCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlU1ZHU3Ryb2tlRGFzaGFycmF5KCk7CiAjZW5kaWYKIAorI2lmIEVOQUJM
RShXQ1NTKQorICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVdDU1NJbnB1dFByb3Bl
cnR5KCk7CisjZW5kaWYKKwogICAgICAgICAvLyBDU1MzIFBhcnNpbmcgUm91dGluZXMgKGZvciBw
cm9wZXJ0aWVzIHNwZWNpZmljIHRvIENTUzMpCiAgICAgICAgIGJvb2wgcGFyc2VTaGFkb3coaW50
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwogICAgICAgICBib29sIHBhcnNlQm9yZGVySW1hZ2Uo
aW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA1ODg1NSkKKysrIFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzMxLDYgKzUzMzEsMjMgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUZXh0U3Ryb2tlOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRWYXJpYWJs
ZURlY2xhcmF0aW9uQmxvY2s6CiAgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUoV0NTUykKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2FwSW5wdXRGb3JtYXQ6CisgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZSAmJiBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoV2ViQ29yZTo6aW5wdXRUYWcpKSB7CisgICAg
ICAgICAgICBTdHJpbmcgbWFzayA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fZWxlbWVudCktPnNl
dFdhcElucHV0Rm9ybWF0KG1hc2spOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgQ1NTUHJvcGVydHlXYXBJbnB1dFJlcXVpcmVkOgorICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUgJiYgbV9lbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7CisgICAgICAgICAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1D
b250cm9sRWxlbWVudCo+KG1fZWxlbWVudCk7CisgICAgICAgICAgICBib29sIHJlcXVpcmVkID0g
cHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkgPT0gInRydWUiOworICAgICAgICAgICAg
ZWxlbWVudC0+c2V0UmVxdWlyZWQocmVxdWlyZWQpOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKKyNlbmRpZiAKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8g
VHJ5IHRoZSBTVkcgcHJvcGVydGllcwpJbmRleDogV2ViQ29yZS9jc3MvV0NTU1Byb3BlcnR5TmFt
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvV0NTU1Byb3BlcnR5TmFtZXMuaW4JKHJl
dmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS9jc3MvV0NTU1Byb3BlcnR5TmFtZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw1IEBACistd2FwLWlucHV0LWZvcm1hdAorLXdhcC1pbnB1dC1y
ZXF1aXJlZAogLXdhcC1tYXJxdWVlLWRpcgogLXdhcC1tYXJxdWVlLWxvb3AKIC13YXAtbWFycXVl
ZS1zcGVlZApJbmRleDogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1ODg1NSkKKysrIFdlYkNv
cmUvZG9tL0lucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDE1IEBA
CiAjaW5jbHVkZSAiSW5wdXRFbGVtZW50LmgiCiAKICNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudC5oIgorCisjaWYgRU5BQkxFKFdDU1MpCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgorI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2lu
Y2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNl
bmRpZgorCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTEzOCw2ICsxNDcsMTQgQEAgdm9pZCBJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKAogCiBTdHJpbmcgSW5wdXRFbGVtZW50OjpzYW5pdGl6
ZVZhbHVlKGNvbnN0IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIHBy
b3Bvc2VkVmFsdWUpCiB7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgSW5wdXRFbGVtZW50RGF0YSBk
YXRhID0gY29uc3RfY2FzdDxJbnB1dEVsZW1lbnQqPihpbnB1dEVsZW1lbnQpLT5kYXRhKCk7Cisg
ICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhkYXRhLCBwcm9wb3NlZFZhbHVlKSkgeworICAg
ICAgICBpZiAoaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0YSwgZGF0YS52YWx1ZSgpKSkKKyAgICAg
ICAgICAgIHJldHVybiBkYXRhLnZhbHVlKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICB9CisjZW5kaWYKICAgICByZXR1cm4gSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZh
bHVlKGlucHV0RWxlbWVudCwgcHJvcG9zZWRWYWx1ZSwgc19tYXhpbXVtTGVuZ3RoKTsKIH0KIApA
QCAtMTg3LDYgKzIwNCwxOCBAQCB2b2lkIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dElu
c2VyCiAKICAgICAvLyBUcnVuY2F0ZSB0aGUgaW5zZXJ0ZWQgdGV4dCB0byBhdm9pZCB2aW9sYXRp
bmcgdGhlIG1heExlbmd0aCBhbmQgb3RoZXIgY29uc3RyYWludHMuCiAgICAgQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQqIHRleHRFdmVudCA9IHN0YXRpY19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50Kj4oZXZlbnQpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBTdHJpbmcgY2FuZGlkYXRlU3RyaW5nID0gdG9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudC0+cmVuZGVyZXIoKSktPnRleHQoKTsKKyAg
ICBpZiAoc2VsZWN0aW9uTGVuZ3RoKQorICAgICAgICBjYW5kaWRhdGVTdHJpbmcucmVwbGFjZShy
YW5nZS0+c3RhcnRPZmZzZXQoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCB0ZXh0RXZlbnQtPnRleHQo
KSk7CisgICAgZWxzZQorICAgICAgICBjYW5kaWRhdGVTdHJpbmcuaW5zZXJ0KHRleHRFdmVudC0+
dGV4dCgpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0
TWFzayhpbnB1dEVsZW1lbnQtPmRhdGEoKSwgY2FuZGlkYXRlU3RyaW5nKSkgeworICAgICAgICB0
ZXh0RXZlbnQtPnNldFRleHQoIiIpOworICAgICAgICByZXR1cm47CisgICAgICB9CisjZW5kaWYK
ICAgICB0ZXh0RXZlbnQtPnNldFRleHQoc2FuaXRpemVVc2VySW5wdXRWYWx1ZShpbnB1dEVsZW1l
bnQsIHRleHRFdmVudC0+dGV4dCgpLCBhcHBlbmRhYmxlTGVuZ3RoKSk7CiB9CiAKQEAgLTIzOCw2
ICsyNjcsMTAgQEAgSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRFbGVtZW50RGF0YSgpCiAgICAgLCBt
X21heExlbmd0aChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKICAgICAsIG1fY2FjaGVk
U2VsZWN0aW9uU3RhcnQoLTEpCiAgICAgLCBtX2NhY2hlZFNlbGVjdGlvbkVuZCgtMSkKKyNpZiBF
TkFCTEUoV0NTUykKKyAgICAsIG1faW5wdXRGb3JtYXRNYXNrKCIqbSIpCisgICAgLCBtX21heElu
cHV0Q2hhcnNBbGxvd2VkKElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQorI2VuZGlmCiB7
CiB9CiAKQEAgLTI1OSw0ICsyOTIsMTM3IEBAIElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQo
RWxlbWVudCogZWwKICAgICByZXR1cm4gMDsKIH0KIAorI2lmIEVOQUJMRShXQ1NTKQorc3RhdGlj
IGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1hdENvZGVzKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgY29kZXMsICgiQWFOblh4TW0iKSk7CisgICAgcmV0
dXJuIGNvZGVzOworfQorCitzdGF0aWMgdW5zaWduZWQgY3Vyc29yUG9zaXRpb25Ub01hc2tJbmRl
eChjb25zdCBTdHJpbmcmIGlucHV0Rm9ybWF0TWFzaywgdW5zaWduZWQgY3Vyc29yUG9zaXRpb24p
Cit7CisgICAgVUNoYXIgbWFzazsKKyAgICBpbnQgaW5kZXggPSAtMTsKKyAgICBkbyB7CisgICAg
ICAgIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tbKytpbmRleF07CisgICAgICAgIGlmIChtYXNrID09
ICdcXCcpCisgICAgICAgICAgICArK2luZGV4OworICAgICAgICBlbHNlIGlmIChtYXNrID09ICcq
JyB8fCAoaXNBU0NJSURpZ2l0KG1hc2spICYmIG1hc2sgIT0gJzAnKSkgeworICAgICAgICAgICAg
aW5kZXggPSBpbnB1dEZvcm1hdE1hc2subGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjdXJzb3JQb3NpdGlvbi0tKTsKKworICAgIHJldHVy
biBpbmRleDsKK30KKworYm9vbCBJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNrKGNv
bnN0IElucHV0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IFN0cmluZyYgaW5wdXRDaGFycykKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5wdXRDaGFycy5sZW5ndGgoKTsgKytpKQor
ICAgICAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEsIGlucHV0Q2hhcnNbaV0sIGkp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0
YSYgZGF0YSwgVUNoYXIgaW5DaGFyLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbikKK3sKKyAgICBT
dHJpbmcgaW5wdXRGb3JtYXRNYXNrID0gZGF0YS5pbnB1dEZvcm1hdE1hc2soKTsKKworICAgIGlm
IChpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpIHx8IGlucHV0Rm9ybWF0TWFzayA9PSAiKk0iIHx8
IGlucHV0Rm9ybWF0TWFzayA9PSAiKm0iKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChjdXJzb3JQb3NpdGlvbiA+PSBkYXRhLm1heElucHV0Q2hhcnNBbGxvd2VkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIG1hc2tJbmRleCA9IGN1cnNvclBvc2l0aW9u
VG9NYXNrSW5kZXgoaW5wdXRGb3JtYXRNYXNrLCBjdXJzb3JQb3NpdGlvbik7CisgICAgYm9vbCBv
ayA9IHRydWU7CisgICAgVUNoYXIgbWFzayA9IGlucHV0Rm9ybWF0TWFza1ttYXNrSW5kZXhdOwor
ICAgIC8vIE1hdGNoIHRoZSBpbnB1dGVkIGNoYXJhY3RlciB3aXRoIGlucHV0IG1hc2sKKyAgICBz
d2l0Y2ggKG1hc2spIHsKKyAgICBjYXNlICdBJzoKKyAgICAgICAgb2sgPSAhaXNBU0NJSURpZ2l0
KGluQ2hhcikgJiYgIWlzQVNDSUlMb3dlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5D
aGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnYSc6CisgICAgICAgIG9rID0gIWlzQVND
SUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRh
YmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ04nOgorICAgICAgICBvayA9
IGlzQVNDSUlEaWdpdChpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAg
ICAgICAgb2sgPSAhaXNBU0NJSUFscGhhKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNo
YXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdYJzoKKyAgICAgICAgb2sgPSAhaXNBU0NJ
SUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlICd4JzoKKyAgICAgICAgb2sgPSAhaXNBU0NJSVVwcGVyKGluQ2hhcikgJiYg
aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdNJzoK
KyAgICBjYXNlICdtJzoKKyAgICAgICAgb2sgPSBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG9rID0gKG1hc2sgPT0gaW5DaGFy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG9rOworfQorCitTdHJpbmcg
SW5wdXRFbGVtZW50Ojp2YWxpZGF0ZUlucHV0TWFzayhJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBT
dHJpbmcmIGlucHV0TWFzaykKK3sKKyAgICBpbnB1dE1hc2sucmVwbGFjZSgiXFxcXCIsICJcXCIp
OworCisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKyAgICBib29sIGhhc1dpbGRjYXJkID0gZmFs
c2U7CisgICAgdW5zaWduZWQgZXNjYXBlQ2hhckNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBtYXNr
TGVuZ3RoID0gaW5wdXRNYXNrLmxlbmd0aCgpOworICAgIFVDaGFyIGZvcm1hdENvZGU7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hc2tMZW5ndGg7ICsraSkgeworICAgICAgICBmb3Jt
YXRDb2RlID0gaW5wdXRNYXNrW2ldOworICAgICAgICBpZiAoZm9ybWF0Q29kZXMoKS5maW5kKGZv
cm1hdENvZGUpID09IC0xKSB7CisgICAgICAgICAgICBpZiAoZm9ybWF0Q29kZSA9PSAnKicgfHwg
KGlzQVNDSUlEaWdpdChmb3JtYXRDb2RlKSAmJiBmb3JtYXRDb2RlICE9ICcwJykpIHsKKyAgICAg
ICAgICAgICAgICAvLyBWYWxpZGF0ZSBjb2RlcyB3aGljaCBlbmRzIHdpdGggJypmJyBvciAnbmYn
CisgICAgICAgICAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1srK2ldOworICAgICAgICAg
ICAgICAgIGlmICgoaSArIDEgIT0gbWFza0xlbmd0aCkgfHwgZm9ybWF0Q29kZXMoKS5maW5kKGZv
cm1hdENvZGUpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0
Q29kZSA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyIHRoZSBuZXh0IG1h
c2sgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgICsrZXNj
YXBlQ2hhckNvdW50OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpc1Zh
bGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFsbG93ZWQgdG8g
YmUgZW50ZXJlZCBieSBpbnB1dCBtYXNrCisgICAgdW5zaWduZWQgYWxsb3dlZExlbmd0aCA9IG1h
c2tMZW5ndGg7CisgICAgaWYgKGVzY2FwZUNoYXJDb3VudCkKKyAgICAgICAgYWxsb3dlZExlbmd0
aCAtPSBlc2NhcGVDaGFyQ291bnQ7CisKKyAgICBpZiAoaGFzV2lsZGNhcmQpIHsKKyAgICAgICAg
Zm9ybWF0Q29kZSA9IGlucHV0TWFza1ttYXNrTGVuZ3RoIC0gMl07CisgICAgICAgIGlmIChmb3Jt
YXRDb2RlID09ICcqJykKKyAgICAgICAgICAgIGFsbG93ZWRMZW5ndGggPSBkYXRhLm1heElucHV0
Q2hhcnNBbGxvd2VkKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgbGVm
dExlbiA9IFN0cmluZygmZm9ybWF0Q29kZSkudG9JbnQoKTsKKyAgICAgICAgICAgIGFsbG93ZWRM
ZW5ndGggPSBsZWZ0TGVuICsgYWxsb3dlZExlbmd0aCAtIDI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoYWxsb3dlZExlbmd0aCA8IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93ZWQoKSkKKyAg
ICAgICAgZGF0YS5zZXRNYXhJbnB1dENoYXJzQWxsb3dlZChhbGxvd2VkTGVuZ3RoKTsKKworICAg
IHJldHVybiBpbnB1dE1hc2s7Cit9CisKKyNlbmRpZgorCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9J
bnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAko
cmV2aXNpb24gNTg4NTUpCisrKyBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTgsNiArNTgsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGNhY2hl
U2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZWxl
Y3QoKSA9IDA7CisgIAorI2lmIEVOQUJMRShXQ1NTKQorICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50
RGF0YSBkYXRhKCkgY29uc3QgPSAwOyAKKyNlbmRpZgogCiAgICAgc3RhdGljIGNvbnN0IGludCBz
X21heGltdW1MZW5ndGg7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX2RlZmF1bHRTaXplOwpAQCAt
ODAsNiArODQsMTEgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHBhcnNlTWF4TGVuZ3Ro
QXR0cmlidXRlKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqLCBFbGVtZW50KiwgTWFw
cGVkQXR0cmlidXRlKik7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlVmFsdWVJZk5lZWRlZChJbnB1
dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgbm90aWZ5Rm9y
bVN0YXRlQ2hhbmdlZChFbGVtZW50Kik7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgc3RhdGljIGJv
b2wgaXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYsIGNvbnN0IFN0
cmluZyYpOworICAgIHN0YXRpYyBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0IElucHV0
RWxlbWVudERhdGEmLCBVQ2hhciwgdW5zaWduZWQpOworICAgIHN0YXRpYyBTdHJpbmcgdmFsaWRh
dGVJbnB1dE1hc2soSW5wdXRFbGVtZW50RGF0YSYsIFN0cmluZyYpOworI2VuZGlmCiB9OwogCiAv
LyBIVE1ML1dNTElucHV0RWxlbWVudCBob2xkIHRoaXMgc3RydWN0IGFzIG1lbWJlciB2YXJpYWJs
ZQpAQCAtMTA5LDYgKzExOCwxNSBAQCBwdWJsaWM6CiAgICAgaW50IGNhY2hlZFNlbGVjdGlvbkVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9uRW5kOyB9CiAgICAgdm9pZCBzZXRD
YWNoZWRTZWxlY3Rpb25FbmQoaW50IHZhbHVlKSB7IG1fY2FjaGVkU2VsZWN0aW9uRW5kID0gdmFs
dWU7IH0KIAorI2lmIEVOQUJMRShXQ1NTKQorICAgIFN0cmluZyBpbnB1dEZvcm1hdE1hc2soKSBj
b25zdCB7IHJldHVybiBtX2lucHV0Rm9ybWF0TWFzazsgfQorICAgIHZvaWQgc2V0SW5wdXRGb3Jt
YXRNYXNrKGNvbnN0IFN0cmluZyYgbWFzaykgeyBtX2lucHV0Rm9ybWF0TWFzayA9IG1hc2s7IH0K
KyAKKyAgICB1bnNpZ25lZCBtYXhJbnB1dENoYXJzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4SW5wdXRDaGFyc0FsbG93ZWQ7IH0KKyAgICB2b2lkIHNldE1heElucHV0Q2hhcnNBbGxvd2Vk
KHVuc2lnbmVkIG1heExlbmd0aCkgeyBtX21heElucHV0Q2hhcnNBbGxvd2VkID0gbWF4TGVuZ3Ro
OyB9CisgIAorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKICAg
ICBTdHJpbmcgbV92YWx1ZTsKQEAgLTExNyw2ICsxMzUsMTAgQEAgcHJpdmF0ZToKICAgICBpbnQg
bV9tYXhMZW5ndGg7CiAgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7CiAgICAgaW50IG1f
Y2FjaGVkU2VsZWN0aW9uRW5kOworI2lmIEVOQUJMRShXQ1NTKQorICAgIFN0cmluZyBtX2lucHV0
Rm9ybWF0TWFzazsKKyAgICB1bnNpZ25lZCBtX21heElucHV0Q2hhcnNBbGxvd2VkOworI2VuZGlm
CiB9OwogCiBJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KEVsZW1lbnQqKTsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzU4LDQgKzI3NTgsMTUg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwVXBGcm9tUmVuZGVyZQogICAgIHN0ZXBVcChu
LCBlYyk7CiB9CiAKKyNpZiBFTkFCTEUoV0NTUykKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0
V2FwSW5wdXRGb3JtYXQoU3RyaW5nJiBtYXNrKQoreworICAgIFN0cmluZyB2YWxpZGF0ZU1hc2sg
PSB2YWxpZGF0ZUlucHV0TWFzayhtX2RhdGEsIG1hc2spOworICAgIGlmICghdmFsaWRhdGVNYXNr
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9kYXRhLnNldElucHV0Rm9ybWF0TWFzayh2YWxpZGF0ZU1h
c2spOworfQorI2VuZGlmCisKKworCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oCShyZXZpc2lvbiA1ODg1NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsyNjgsMTEgQEAgcHVibGljOgogICAgIC8v
IEFuIGluc3RhbmNlIHBvaW50ZWQgYnkgdGhlIERhdGVDb21wb25lbnRzKiBwYXJhbWV0ZXIgd2ls
bCBoYXZlIHBhcnNlZCB2YWx1ZXMgYW5kIGJlCiAgICAgLy8gbW9kaWZpZWQgZXZlbiBpZiB0aGUg
cGFyc2luZyBmYWlscy4gIFRoZSBEYXRlQ29tcG9uZW50cyogcGFyYW1ldGVyIG1heSBiZSAwLgog
ICAgIHN0YXRpYyBib29sIHBhcnNlVG9EYXRlQ29tcG9uZW50cyhJbnB1dFR5cGUsIGNvbnN0IFN0
cmluZyYsIERhdGVDb21wb25lbnRzKik7CisKKyNpZiBFTkFCTEUoV0NTUykKKyAgICB2b2lkIHNl
dFdhcElucHV0Rm9ybWF0KFN0cmluZyYgbWFzayk7CisgICAgdmlydHVhbCBJbnB1dEVsZW1lbnRE
YXRhIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyNlbmRpZgogICAgIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwpJbmRl
eDogV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93
bWwvV01MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS93bWwvV01M
SW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDkgQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGNvbnN0IFN0cmluZyYpOwogICAgIGJv
b2wgaXNDb25mb3JtZWRUb0lucHV0TWFzayhVQ2hhciwgdW5zaWduZWQsIGJvb2wgaXNVc2VySW5w
dXQgPSB0cnVlKTsKKyNpZiBFTkFCTEUoV0NTUykKKyAgICB2aXJ0dWFsIElucHV0RWxlbWVudERh
dGEgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorI2VuZGlmCiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFdNTENhcmRFbGVtZW50OwpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNTg4NTUp
CisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBA
QAorMjAxMC0wNS0wNSAgQ2hhcmxlcyBXZWkgIDxjaGFybGVzLndlaUB0b3JjaG1vYmlsZS5jb20u
Y24+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3MKKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgV0NTUyAtd2FwLWlucHV0LWZvcm1hdCBhbmQgLXdhcC1pbnB1dC1yZXF1aXJl
ZCBzdXBwb3J0IHRvIFdlYktpdAorICAgICAgICBNYWtlIHRoZSB0ZXN0IGNhc2VzIGluIGZhc3Qv
d2NzcyBvcHRpb25pb25hbCBvbmx5IHdoZW4gIFdDU1MgaXMgZW5hYmxlZC4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc4NDgKKworICAgICAgICAq
IFNjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHM6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
ZXJsL2ZlYXR1cmVzLnBtOgorCiAyMDEwLTA1LTA1ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2Vi
S2l0VG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCShyZXZpc2lvbiA1ODg1NSkKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMJKHdvcmtpbmcgY29weSkK
QEAgLTUwMSw2ICs1MDEsMTAgQEAgaWYgKGNoZWNrV2ViQ29yZUZlYXR1cmVTdXBwb3J0KCJXTUwi
LCAwKQogICAgICRpZ25vcmVkRGlyZWN0b3JpZXN7J3dtbCd9ID0gMTsKIH0KIAoraWYgKCFjaGVj
a1dlYkNvcmVGZWF0dXJlU3VwcG9ydCgiV0NTUyIsIDApKSB7CisgICAgJGlnbm9yZWREaXJlY3Rv
cmllc3snZmFzdC93Y3NzJ30gPSAxOworfQorCiBpZiAoIWNoZWNrV2ViQ29yZUZlYXR1cmVTdXBw
b3J0KCJYSFRNTE1QIiwgMCkpIHsKICAgICAkaWdub3JlZERpcmVjdG9yaWVzeydmYXN0L3hodG1s
bXAnfSA9IDE7CiB9CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvZmVhdHVy
ZXMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL2ZlYXR1
cmVzLnBtCShyZXZpc2lvbiA1ODg1NSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cGVy
bC9mZWF0dXJlcy5wbQkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBzdWIgaGFzRmVh
dHVyZSgkJCkKICAgICAgICAgIjNEIFJlbmRlcmluZyIgPT4gIldlYkNvcmVIYXMzRFJlbmRlcmlu
ZyIsCiAgICAgICAgICIzRCBDYW52YXMiID0+ICJXZWJHTFNoYWRlciIsCiAgICAgICAgICJXTUwi
ID0+ICJXTUxFbGVtZW50IiwKKyAgICAgICAgIldDU1MiID0+ICJwYXJzZVdDU1NJbnB1dFByb3Bl
cnR5IiwKICAgICAgICAgIlhIVE1MTVAiID0+ICJpc1hIVE1MTVBEb2N1bWVudCIsCiAgICAgKTsK
ICAgICBteSAkc3ltYm9sTmFtZSA9ICRzeW1ib2xGb3JGZWF0dXJleyRmZWF0dXJlTmFtZX07Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA1ODg1NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA1LTA1ICBDaGFybGVzIFdlaSAgPGNoYXJs
ZXMud2VpQHRvcmNobW9iaWxlLmNvbS5jbj4KKworICAgICAgICBSZXZpZXdlZCBieSBHZW9yZ2Ug
U3RhaWtvcworCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNzg0OAorICAgICAgICBBZGQgdGVzdCBjYXNlcyBmb3IgLXdhcC1pbnB1dC1mb3JtYXQgYW5k
IC13YXAtaW5wdXQtcmVxdWlyZWQgb2YgV0NTUworCisgICAgICAgICogZmFzdC93Y3NzL3dhcC1p
bnB1dC1mb3JtYXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3djc3Mvd2Fw
LWlucHV0LWZvcm1hdC54aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93Y3NzL3dhcC1pbnB1
dC1yZXF1aXJlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd2Nzcy93YXAt
aW5wdXQtcmVxdWlyZWQueGh0bWw6IEFkZGVkLgorCiAyMDEwLTA1LTA1ICBEaXJrIFByYW5rZSAg
PGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGV4cGVjdGF0aW9u
cyBjaGFuZ2UuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LWZvcm1hdC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1
dC1mb3JtYXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
Y3NzL3dhcC1pbnB1dC1mb3JtYXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI5IEBACitBc3N1bWUgdGhlIHVzZXIgaW5wdXQgdGhlIGZvbGxvd2luZyAiQWFCYkNjRGRFZUZm
R2cxMjM0NTYhQCMkJV4sLjsiIHRvIGVhY2ggb2YgdGhlIGlucHV0IGVsZW1lbnRzCit7LXdhcC1p
bnB1dC1mb3JtYXQ6IipBIjt9IG9ubHkgdGFrZXMgdXBwZXIgbGV0dGVycywgc3ltYm9scywgcHVu
Y3R1YXRpb25zCitQQVNTIGRvbVZhbHVlT2YoInN0YXJfdXBBIikgaXMgIkFCQ0RFRkchQCMkJV4s
LjsiCitQQVNTIHZpc2libGVWYWx1ZU9mKCJzdGFyX3VwQSIpIGlzICJBQkNERUZHIUAjJCVeLC47
Igorey13YXAtaW5wdXQtZm9ybWF0OiIqYSI7fSBvbmx5IHRha2VzIGxvd2VyIGxldHRlcnMsIHN5
bWJvbHMsIHB1bmN0dWF0aW9ucworUEFTUyBkb21WYWx1ZU9mKCJzdGFyX2xvd2EiKSBpcyAiYWJj
ZGVmZyFAIyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfbG93YSIpIGlzICJhYmNk
ZWZnIUAjJCVeLC47Igorey13YXAtaW5wdXQtZm9ybWF0OiIqTiI7fSBvbmx5IHRha2VzIG51bWJl
cnMgCitQQVNTIGRvbVZhbHVlT2YoInN0YXJfdXBOIikgaXMgIjEyMzQ1NiIKK1BBU1MgdmlzaWJs
ZVZhbHVlT2YoInN0YXJfdXBOIikgaXMgIjEyMzQ1NiIKK3std2FwLWlucHV0LWZvcm1hdDoiKm4i
O30gb25seSB0YWtlcyBudW1iZXJzICwgc3ltYmFscyBhbmQgcHVuY3R1YXRpb25zIAorUEFTUyBk
b21WYWx1ZU9mKCJzdGFyX2xvd24iKSBpcyAiMTIzNDU2IUAjJCVeLC47IgorUEFTUyB2aXNpYmxl
VmFsdWVPZigic3Rhcl9sb3duIikgaXMgIjEyMzQ1NiFAIyQlXiwuOyIKK3std2FwLWlucHV0LWZv
cm1hdDoiKlgiO30gdGFrZXMgdXBwZXIgbGV0dGVycyxudW1iZXJzLHN5bWJhbHMgYW5kIHB1bmN0
dWF0aW9ucyAKK1BBU1MgZG9tVmFsdWVPZigic3Rhcl91cFgiKSBpcyAiQUJDREVGRzEyMzQ1NiFA
IyQlXiwuOyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInN0YXJfdXBYIikgaXMgIkFCQ0RFRkcxMjM0
NTYhQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1mb3JtYXQ6Iip4Ijt9IHRha2VzIGxvd2VyIGxldHRl
cnMsbnVtYmVycyxzeW1iYWxzIGFuZCBwdW5jdHVhdGlvbnMgCitQQVNTIGRvbVZhbHVlT2YoInN0
YXJfbG93eCIpIGlzICJhYmNkZWZnMTIzNDU2IUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFsdWVP
Zigic3Rhcl9sb3d4IikgaXMgImFiY2RlZmcxMjM0NTYhQCMkJV4sLjsiCit7LXdhcC1pbnB1dC1m
b3JtYXQ6IipNIjt9IHRha2VzIGFueSBjaGFyYWN0ZXIgCitQQVNTIGRvbVZhbHVlT2YoInN0YXJf
dXBNIikgaXMgIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47IgorUEFTUyB2aXNpYmxlVmFs
dWVPZigic3Rhcl91cE0iKSBpcyAiQWFCYkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiCit7LXdh
cC1pbnB1dC1mb3JtYXQ6IiptIjt9IHRha2VzIGFueSBjaGFyYWN0ZXIgCitQQVNTIGRvbVZhbHVl
T2YoInN0YXJfbG93bSIpIGlzICJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyIKK1BBU1Mg
dmlzaWJsZVZhbHVlT2YoInN0YXJfbG93bSIpIGlzICJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQl
XiwuOyIKK3std2FwLWlucHV0LWZvcm1hdDoiM04iO30gdGFrZXMgMyBudW1iZXJzIAorUEFTUyBk
b21WYWx1ZU9mKCJ0aHJlZV9OIikgaXMgIjEyMyIKK1BBU1MgdmlzaWJsZVZhbHVlT2YoInRocmVl
X04iKSBpcyAiMTIzIgorICAgICAgICAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAt
aW5wdXQtZm9ybWF0LnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93
YXAtaW5wdXQtZm9ybWF0LnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
Y3NzL3dhcC1pbnB1dC1mb3JtYXQueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9S
VU0vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFRE
L3hodG1sLW1vYmlsZTEwLmR0ZCI+CisKKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIj4KKzxoZWFkPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorLnN0YXJfdXBB
ICB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqQSIgOyB9ICAgIC8qIHVwcGVyIGxldHRlciwgc3ltYm9s
LCBwdW5jdHVhdGlvbiwgIE5PIG51bWJlciAqLworLnN0YXJfbG93YSB7LXdhcC1pbnB1dC1mb3Jt
YXQ6ICIqYSIgOyB9ICAgIC8qIGxvd2VyIGxldHRlciwgc3ltYm9sLCBwdW5jdHVhdGlvbiwgIE5P
IG51bWJlciAqLworLnN0YXJfdXBOICB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqTiIgOyB9ICAgIC8q
IG51bWJlciBvbmx5ICovCisuc3Rhcl9sb3duIHstd2FwLWlucHV0LWZvcm1hdDogIipuIiA7IH0g
ICAgLyogbnVtYmVyICwgc3ltYm9sLCBwdW5jdHVhdGlvbiwgbm8gbGV0dGVyICovCisuc3Rhcl91
cFggIHstd2FwLWlucHV0LWZvcm1hdDogIipYIiA7IH0gICAgLyogdXBwZXIgbGV0dGVyLCBudW1i
ZXIsIHN5bWJvbCwgcHVuY3R1YXRpb24sIG5vIGxvd2VyIGxldHRlciAqLworLnN0YXJfbG93eCB7
LXdhcC1pbnB1dC1mb3JtYXQ6ICIqeCIgOyB9ICAgIC8qIGxvd2VyIGxldHRlciwgbnVtYmVyLCBz
eW1ib2wsIHB1bmN0dWF0aW9uLCBubyB1cHBlciBsZXR0ZXIgKi8KKy5zdGFyX3VwTSAgey13YXAt
aW5wdXQtZm9ybWF0OiAiKk0iIDsgfSAgICAvKiBhbnl0aGluZywgd2l0aCB1cHBlciBhcyB0aGUg
ZGVmYXVsdCBpbnB1dCAqLworLnN0YXJfbG93bSB7LXdhcC1pbnB1dC1mb3JtYXQ6ICIqbSIgOyB9
ICAgIC8qIGFueXRoaW5nLCB3aXRoIGxvd2VyIGFzIHRoZSBkZWZhdWx0IGlucHV0ICovCisudGhy
ZWVfTiAgIHstd2FwLWlucHV0LWZvcm1hdDogIjNOIiA7IH0gICAgLyogdXAgdG8gMyBkaWdpdCBu
dW1iZXIgKi8KKworPC9zdHlsZT4KKworPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHk+Cis8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8aW5wdXQgdHlwZT0idGV4
dCIgaWQ9InN0YXJfdXBBIiAgY2xhc3M9InN0YXJfdXBBIiAvPgorPGlucHV0IHR5cGU9InRleHQi
IGlkPSJzdGFyX2xvd2EiIGNsYXNzPSJzdGFyX2xvd2EiIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIg
aWQ9InN0YXJfdXBOIiAgY2xhc3M9InN0YXJfdXBOIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlk
PSJzdGFyX2xvd24iIGNsYXNzPSJzdGFyX2xvd24iIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9
InN0YXJfdXBYIiAgY2xhc3M9InN0YXJfdXBYIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJz
dGFyX2xvd3giIGNsYXNzPSJzdGFyX2xvd3giIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InN0
YXJfdXBNIiAgY2xhc3M9InN0YXJfdXBNIiAvPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJzdGFy
X2xvd20iIGNsYXNzPSJzdGFyX2xvd20iIC8+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InRocmVl
X04iICBjbGFzcz0idGhyZWVfTiIgLz4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PgorCitmdW5jdGlvbiBkb21WYWx1ZU9mKGlkKSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGlkKS52YWx1ZTsKK30KK2Z1bmN0aW9uIHZpc2libGVWYWx1ZU9mKGlkKSB7Cisg
ICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgIGVsLmZvY3VzKCk7
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ1NlbGVjdEFsbCcpOworICAgIHJldHVybiBkb2N1
bWVudC5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOworfQorCitmdW5jdGlvbiBpbnB1dEtleXMo
c3RyKSB7CisgICAgaWYoIXdpbmRvdy5ldmVudFNlbmRlcikKKyAgICAgICAgcmV0dXJuOworICAg
IGZvcihpID0gMDsgaSAhPSBzdHIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZXZlbnRTZW5kZXIu
a2V5RG93bihzdHIuY2hhckF0KGkpKTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit9
CisKK3ZhciBzdHIgPSAiQWFCYkNjRGRFZUZmR2cxMjM0NTYhQCMkJV4sLjsiOworCitkZWJ1Zygi
QXNzdW1lIHRoZSB1c2VyIGlucHV0IHRoZSBmb2xsb3dpbmcgXCIiICsgc3RyICsgIlwiIHRvIGVh
Y2ggb2YgdGhlIGlucHV0IGVsZW1lbnRzPGJyLz48YnIvPiIpOworCitkZWJ1ZygnPGJyLz57LXdh
cC1pbnB1dC1mb3JtYXQ6IipBIjt9IG9ubHkgdGFrZXMgdXBwZXIgbGV0dGVycywgc3ltYm9scywg
cHVuY3R1YXRpb25zPGJyLz4nKTsKKworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfdXBB
IikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0YXJf
dXBBIiknLCciQUJDREVGRyFAIyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigi
c3Rhcl91cEEiKScsJyJBQkNERUZHIUAjJCVeLC47IicpOworCitkZWJ1ZygnPGJyLz57LXdhcC1p
bnB1dC1mb3JtYXQ6IiphIjt9IG9ubHkgdGFrZXMgbG93ZXIgbGV0dGVycywgc3ltYm9scywgcHVu
Y3R1YXRpb25zPGJyIC8+PGJyIC8+Jyk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl9s
b3dhIikuZm9jdXMoKTsKK2lucHV0S2V5cyhzdHIpOworc2hvdWxkQmUoJ2RvbVZhbHVlT2YoInN0
YXJfbG93YSIpJywgJyJhYmNkZWZnIUAjJCVeLC47IicpOworc2hvdWxkQmUoJ3Zpc2libGVWYWx1
ZU9mKCJzdGFyX2xvd2EiKScsICciYWJjZGVmZyFAIyQlXiwuOyInKTsKKworZGVidWcoJzxici8+
ey13YXAtaW5wdXQtZm9ybWF0OiIqTiI7fSBvbmx5IHRha2VzIG51bWJlcnMgPGJyIC8+Jyk7Citk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3Rhcl91cE4iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0
cik7CitzaG91bGRCZSgnZG9tVmFsdWVPZigic3Rhcl91cE4iKScsICciMTIzNDU2IicpOworc2hv
dWxkQmUoJ3Zpc2libGVWYWx1ZU9mKCJzdGFyX3VwTiIpJywgJyIxMjM0NTYiJyk7CisKK2RlYnVn
KCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoiKm4iO30gb25seSB0YWtlcyBudW1iZXJzICwgc3lt
YmFscyBhbmQgcHVuY3R1YXRpb25zIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InN0YXJfbG93biIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdkb21WYWx1
ZU9mKCJzdGFyX2xvd24iKScsICciMTIzNDU2IUAjJCVeLC47IicpOworc2hvdWxkQmUoJ3Zpc2li
bGVWYWx1ZU9mKCJzdGFyX2xvd24iKScsICciMTIzNDU2IUAjJCVeLC47IicpOworCitkZWJ1Zygn
PGJyLz57LXdhcC1pbnB1dC1mb3JtYXQ6IipYIjt9IHRha2VzIHVwcGVyIGxldHRlcnMsbnVtYmVy
cyxzeW1iYWxzIGFuZCBwdW5jdHVhdGlvbnMgPGJyIC8+Jyk7Citkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgic3Rhcl91cFgiKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9t
VmFsdWVPZigic3Rhcl91cFgiKScsICciQUJDREVGRzEyMzQ1NiFAIyQlXiwuOyInKTsKK3Nob3Vs
ZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl91cFgiKScsICciQUJDREVGRzEyMzQ1NiFAIyQlXiwu
OyInKTsKKworZGVidWcoJzxici8+ey13YXAtaW5wdXQtZm9ybWF0OiIqeCI7fSB0YWtlcyBsb3dl
ciBsZXR0ZXJzLG51bWJlcnMsc3ltYmFscyBhbmQgcHVuY3R1YXRpb25zIDxiciAvPicpOworZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJfbG93eCIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3Ry
KTsKK3Nob3VsZEJlKCdkb21WYWx1ZU9mKCJzdGFyX2xvd3giKScsICciYWJjZGVmZzEyMzQ1NiFA
IyQlXiwuOyInKTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl9sb3d4IiknLCAnImFi
Y2RlZmcxMjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1h
dDoiKk0iO30gdGFrZXMgYW55IGNoYXJhY3RlciA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJzdGFyX3VwTSIpLmZvY3VzKCk7CitpbnB1dEtleXMoc3RyKTsKK3Nob3VsZEJlKCdk
b21WYWx1ZU9mKCJzdGFyX3VwTSIpJywgJyJBYUJiQ2NEZEVlRmZHZzEyMzQ1NiFAIyQlXiwuOyIn
KTsKK3Nob3VsZEJlKCd2aXNpYmxlVmFsdWVPZigic3Rhcl91cE0iKScsICciQWFCYkNjRGRFZUZm
R2cxMjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoi
Km0iO30gdGFrZXMgYW55IGNoYXJhY3RlciA8YnIgLz4nKTsKK2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJzdGFyX2xvd20iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9t
VmFsdWVPZigic3Rhcl9sb3dtIiknLCAnIkFhQmJDY0RkRWVGZkdnMTIzNDU2IUAjJCVeLC47Iicp
Oworc2hvdWxkQmUoJ3Zpc2libGVWYWx1ZU9mKCJzdGFyX2xvd20iKScsICciQWFCYkNjRGRFZUZm
R2cxMjM0NTYhQCMkJV4sLjsiJyk7CisKK2RlYnVnKCc8YnIvPnstd2FwLWlucHV0LWZvcm1hdDoi
M04iO30gdGFrZXMgMyBudW1iZXJzIDxiciAvPicpOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InRocmVlX04iKS5mb2N1cygpOworaW5wdXRLZXlzKHN0cik7CitzaG91bGRCZSgnZG9tVmFsdWVP
ZigidGhyZWVfTiIpJywgJyIxMjMiJyk7CitzaG91bGRCZSgndmlzaWJsZVZhbHVlT2YoInRocmVl
X04iKScsICciMTIzIicpOworCisKKzwvc2NyaXB0PgorCisKKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd2Nzcy93YXAtaW5wdXQtcmVxdWlyZWQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1p
bnB1dC1yZXF1aXJlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAor
VGhlcmUgYXJlIHRocmVlIGZvcm0gY29udHJvbCBlbGVtZW50cyBiZWxvdywgdGhlIGZpcnN0IG9u
ZSBpcyByZXF1aXJlZCBhbmQgYmxhbmssdmFsaWRpdHkudmFsdWVNaXNzaW5nIHNob3VsZCBiZSB0
cnVlLCB0aGUgb3RoZXIgdHdvIGVpdGhlciBkb24ndCBoYXZlIC13YXAtaW5wdXQtcmVxdWlyZWQg
YXBwbGllZCwgb3IgdGhlIC13YXAtaW5wdXQtcmVxdWlyZWQgaW5kaWNhdGVzIGZhbHNlLCBhbmQg
YXJlIG5vdCByZXF1aXJlZCAuCisKKyAgCitTVUNDRVNTIFNVQ0NFU1MgU1VDQ0VTUwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1yZXF1aXJlZC54aHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3djc3Mvd2FwLWlucHV0LXJlcXVpcmVkLnhodG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93Y3NzL3dhcC1pbnB1dC1yZXF1aXJlZC54aHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8
IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9F
TiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiPgorCis8
aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisKKzxoZWFkPgorPHRp
dGxlPnJlcXVpcmVkIGFuZCBiYXNpYyB2YWx1ZU1pc3Npbmc8L3RpdGxlPgorCis8L2hlYWQ+CisK
Kzxib2R5PgorPHA+VGhlcmUgYXJlIHRocmVlIGZvcm0gY29udHJvbCBlbGVtZW50cyBiZWxvdywg
dGhlIGZpcnN0IG9uZSBpcyByZXF1aXJlZCBhbmQgYmxhbmssdmFsaWRpdHkudmFsdWVNaXNzaW5n
IHNob3VsZCBiZSB0cnVlLCB0aGUgb3RoZXIgdHdvIGVpdGhlciBkb24ndCBoYXZlIC13YXAtaW5w
dXQtcmVxdWlyZWQgYXBwbGllZCwgb3IgdGhlIC13YXAtaW5wdXQtcmVxdWlyZWQgaW5kaWNhdGVz
IGZhbHNlLCBhbmQgYXJlIG5vdCByZXF1aXJlZCAuPC9wPgorPGlucHV0IG5hbWU9InJlcXVpcmVk
IiBzdHlsZT0iLXdhcC1pbnB1dC1yZXF1aXJlZDp0cnVlOyIgLz4KKzxpbnB1dCBuYW1lPSJub3Rf
c3BlY2lmaWVkIiAvPgorPHRleHRhcmVhIG5hbWU9Im5vdF9yZXF1aXJlZCIgc3R5bGU9Ii13YXAt
aW5wdXQtcmVxdWlyZWQ6ZmFsc2U7Ij48L3RleHRhcmVhPgorPHAgaWQ9ImNvbnNvbGUiPiA8L3A+
CisKKzxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+
CitmdW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
b25zb2xlIikuaW5uZXJIVE1MICs9ICBtZXNzYWdlICsgIiAgXG4iOworfQorCisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworCisgICAgdiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJyZXF1
aXJlZCIpOworICAgIGxvZyh2WzBdLnZhbGlkaXR5LnZhbHVlTWlzc2luZyAgPyAiU1VDQ0VTUyIg
OiAiRkFJTFVSRSIpOworIAorICAgIHYgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgibm90
X3NwZWNpZmllZCIpOworICAgIGxvZygoIXZbMF0udmFsaWRpdHkudmFsdWVNaXNzaW5nKSA/ICJT
VUNDRVNTIiA6ICJGQUlMVVJFIik7CisKKyAgICB2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5h
bWUoIm5vdF9yZXF1aXJlZCIpOworICAgIGxvZygoIXZbMF0udmFsaWRpdHkudmFsdWVNaXNzaW5n
KSA/ICJTVUNDRVNTIiA6ICJGQUlMVVJFIik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>