<?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>71316</bug_id>
          
          <creation_ts>2011-11-01 13:49:56 -0700</creation_ts>
          <short_desc>decodeEscapeSequences() not correct for some encodings (GBK, Big5, ...).</short_desc>
          <delta_ts>2012-01-23 23:42:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>XSSAuditor</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76896</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Thomas Sepez">tsepez</reporter>
          <assigned_to name="Thomas Sepez">tsepez</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>tsepez</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494109</commentid>
    <comment_count>0</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-11-01 13:49:56 -0700</bug_when>
    <thetext>Upstreamed from XSS filter bypass in http://code.google.com/p/chromium/issues/detail?id=101905

Reported by kuz...@gmail.com, Oct 27 (5 days ago)
test chrome 15.0.874.106 m windows xp sp3

echo.php
====
&lt;?php
echo $_GET[&apos;q&apos;];
?&gt;
http://127.0.0.1/echo.php?q=%3Cscript%20%89g%3Ealert(location);%3C/script%3E

%F3Z
%89g
%82a
Comment 1 by kuz...@gmail.com, Oct 27 (5 days ago)
http://127.0.0.1/echo.php?q=%3Cimg%20src=%201%20onerror=%C7Ojavascript:alert(document.domain)%3E%3C/iframe%3E&apos;

http://127.0.0.1/echo.php?q=%3Ciframe%20onload=%C7Ojavascript:alert(document.domain)%3E%3C/iframe%3E

NOTE: requires GBK character set.

... 

Comment 11 by tse...@chromium.org, Today (28 minutes ago)
Looks like one needs an encoding where the multibyte sequence can include low order bytes, and that our decoder is only processing the %xx portion of the string apart from its trailing bytes, eg.

a) %C7%4F decodes to single big5 char and is removed.
b) [C7]O binary byte sequence in the page decodes to single big5 char and is removed.
c) %C7O decodes to [bad-big5-char]O and the O persists.  

Page is in form (b) but the URL is in form (c). Re-specifying the URL in form (a) catches the XSS in the auditor.

Problem is in WebKit/Source/WebCore/platform/text/DecodeEscapeSequences.h.
Template function decodeStandardURLEscapeSequences() only applies decodeRun() to consecutive %-style escapes, leaving off the trailing &apos;O&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494115</commentid>
    <comment_count>1</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-01 13:55:22 -0700</bug_when>
    <thetext>Will look into this issue shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497750</commentid>
    <comment_count>2</comment_count>
      <attachid>113992</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-07 22:34:24 -0800</bug_when>
    <thetext>Created attachment 113992
Layout Tests

Some DRT layout tests. Will work on the patch and look to add additional tests tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501666</commentid>
    <comment_count>3</comment_count>
      <attachid>114889</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-13 23:39:26 -0800</bug_when>
    <thetext>Created attachment 114889
Work-in-progress patch

Work-in-progress patch.

Need to think about this some more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501669</commentid>
    <comment_count>4</comment_count>
      <attachid>114890</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-11-13 23:42:57 -0800</bug_when>
    <thetext>Created attachment 114890
Work-in-progress patch

Removed extraneous whitespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513507</commentid>
    <comment_count>5</comment_count>
      <attachid>117569</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-12-01 22:35:49 -0800</bug_when>
    <thetext>Created attachment 117569
Work-in-progress patch

Added some more tests. This patch fails the following added tests:

http/tests/security/xssAuditor/script-tag-Big5-char.html
http/tests/security/xssAuditor/script-tag-Big5-char-twice-url-encode.html
http/tests/security/xssAuditor/script-tag-Big5-char-twice-url-encode-16bit-unicode.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534099</commentid>
    <comment_count>6</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-11 12:00:54 -0800</bug_when>
    <thetext>Daniel, you still working on this?  Would you like me to take a shot at it?

I believe the error is actually in decodeEscapeSequences, in that it tries to be efficient and call the decoder only on the span of consecutive %-values.  But trailing characters may be important to the decoder, hence the bug.

I think the thing to do is to convert all escape sequences first, then decode starting at the first byte &gt; 0x80 to the last (byte &gt; 0x80) + N characters, where N = 4 to account for the longest multibyte run I can imagine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534139</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2012-01-11 12:32:30 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Daniel, you still working on this?  

Not at the moment.

&gt; Would you like me to take a shot at it?

Sure. Feel free to take this bug and work on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535822</commentid>
    <comment_count>8</comment_count>
      <attachid>122468</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-13 11:12:32 -0800</bug_when>
    <thetext>Created attachment 122468
Proposed Patch + Daniel&apos;s layout tests.

Adam, Daniel, please review carefully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535830</commentid>
    <comment_count>9</comment_count>
      <attachid>122470</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-13 11:20:14 -0800</bug_when>
    <thetext>Created attachment 122470
Patch, tests, fix changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535834</commentid>
    <comment_count>10</comment_count>
      <attachid>122472</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-13 11:21:32 -0800</bug_when>
    <thetext>Created attachment 122472
Patch, tests, fix changelog again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535856</commentid>
    <comment_count>11</comment_count>
      <attachid>122472</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-13 11:43:03 -0800</bug_when>
    <thetext>Comment on attachment 122472
Patch, tests, fix changelog again.

decodeEscapeSequences() is used in many other places in WebCore besides XSS Auditor. How did you verify that the changes there are compatible with other browsers? Please add tests that directly involve this function as part of KURL accessors, ScriptController::executeIfJavaScriptURL(), etc.

I&apos;m really confused about the approach here. Why does a simple function that decodes percent escapes need to know about encodings? That looks like a layering violation.

I think that the actual bug here is that we flush the decoder at the end of decodeRun() function. We should just pass all text through it, unless it can be demonstrated to be a performance problem.

r- for lack of tests primarily, although the fix may need to be reconsidered, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535878</commentid>
    <comment_count>12</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-13 12:13:47 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 122472 [details])
&gt; decodeEscapeSequences() is used in many other places in WebCore besides XSS Auditor. How did you verify that the changes there are compatible with other browsers? Please add tests that directly involve this function as part of KURL accessors, ScriptController::executeIfJavaScriptURL(), etc.

Sure. Are there any existing tests that do this which could be adapted?

&gt; 
&gt; I&apos;m really confused about the approach here. Why does a simple function that decodes percent escapes need to know about encodings? That looks like a layering violation.
&gt; 

Because it is returning a String of 16 bit unicode codepoints, not a string of codepoints whose values correspond to the individual byte values in the decoded sequence.  KURL.cpp used to contain the decodeURL function directly, and it has been expecting this behaviour (i.e. calling a decoder) going back as far as I looked in source control. 

It gets messy to separate the layers, since the input is itself a 16 bit string, and I didn&apos;t want to assume that its values were always fitting in the bottom byte.  To separate this out, and keep the current behaviour, you&apos;d have to take the 16bit input, re-encode it according to whatever encoder is present into a byte stream, unescape the %-signs into bytes, then decode it back using the encoder into the 16 bit form.  Besides the overhead, its not clear if there is an encoder object everywhere that it would need to be if you wanted to pull this off.


&gt; I think that the actual bug here is that we flush the decoder at the end of decodeRun() function. We should just pass all text through it, unless it can be demonstrated to be a performance problem.

Yes, you could flush all text through it- if it were 8-bit.  So there&apos;s a conversion that has to happen first. The existing implementation goes through pains not to do this, so I wasn&apos;t willing to take that approach -- suspecting that the original implementors knew what they were doing and not undoing their work.  

&gt; 
&gt; r- for lack of tests primarily, although the fix may need to be reconsidered, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535886</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-13 12:26:36 -0800</bug_when>
    <thetext>&gt; Sure. Are there any existing tests that do this which could be adapted?

Not anything specifically, but such tests should be straightforward to make. For the cases I mentioned,

&lt;a href=&quot;http://%...&quot;&gt;&lt;/a&gt;
&lt;script&gt;shouldBe(&quot;a.href.hostname&quot;, &quot;...&quot;)&lt;/script&gt;

&lt;a href=&quot;javascript:shouldBe(&apos;%...&apos;, &apos;...&apos;)&lt;/a&gt;
&lt;script&gt;... click the link your eventSender&lt;/script&gt;

&gt; Sure. Are there any existing tests that do this which could be adapted?

CC&apos;ing Darin, who may have an idea about how to best structure the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536009</commentid>
    <comment_count>14</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-13 14:51:03 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Sure. Are there any existing tests that do this which could be adapted?
&gt; 
&gt; Not anything specifically, but such tests should be straightforward to make. For the cases I mentioned,
&gt; 
&gt; &lt;a href=&quot;http://%...&quot;&gt;&lt;/a&gt;
&gt; &lt;script&gt;shouldBe(&quot;a.href.hostname&quot;, &quot;...&quot;)&lt;/script&gt;
&gt; 
&gt; &lt;a href=&quot;javascript:shouldBe(&apos;%...&apos;, &apos;...&apos;)&lt;/a&gt;
&gt; &lt;script&gt;... click the link your eventSender&lt;/script&gt;
&gt; 
&gt; &gt; Sure. Are there any existing tests that do this which could be adapted?
&gt; 
&gt; CC&apos;ing Darin, who may have an idea about how to best structure the code.

Wouldn&apos;t the results in LayoutTests/fast/url/host-expected.txt cover these cases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536012</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-13 14:57:29 -0800</bug_when>
    <thetext>For hostname, adding subtests to this test should be enough. Since you are changing behavior, we need new tests (or new results, if there are already failing subtests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536016</commentid>
    <comment_count>16</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-13 15:04:09 -0800</bug_when>
    <thetext>Ah.  Just so we&apos;re on the same page, the behaviour should be absolutely identical to the present except when running under Big5 or GBK, and covered by the existing cases.  So it looks like I&apos;ll need to find a place where KURL, not XSSAuditor, gets invoked with one of these decoders and show that the result changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536018</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-13 15:05:48 -0800</bug_when>
    <thetext>Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538189</commentid>
    <comment_count>18</comment_count>
      <attachid>123001</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-18 14:41:46 -0800</bug_when>
    <thetext>Created attachment 123001
Patch plus test KURL decodeEscapeSequence path.

Hi AP,

  Its surprisingly hard to find a path that calls into the two-argument form (non-utf8 decoder) of KURLs decodeURLEscapeSequences, which is why this may have gone unnoticed, but one place that does it is when we scroll to a fragment.  The new frame scrolling test fails without this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538370</commentid>
    <comment_count>19</comment_count>
      <attachid>123001</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 17:57:37 -0800</bug_when>
    <thetext>Comment on attachment 123001
Patch plus test KURL decodeEscapeSequence path.

Attachment 123001 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11284449

New failing tests:
http/tests/navigation/anchor-frames-gbk.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538951</commentid>
    <comment_count>20</comment_count>
      <attachid>123178</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-19 12:50:57 -0800</bug_when>
    <thetext>Created attachment 123178
Patch, KURL, KURLGoogle different</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538956</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-19 12:54:57 -0800</bug_when>
    <thetext>Attachment 123178 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1

ERROR: FAILURES FOR &lt;lucid, x86_64, release, cpu&gt; in /mnt/git/webkit-style-queue/LayoutTests/platform/chromium/test_expectations.txt
ERROR: Line:1946 Missing expectations BUGWK20559 : http/tests/navigation/anchor-frames-gbk.html
LayoutTests/platform/chromium/test_expectations.txt:1946:  Missing expectations BUGWK20559 : http/tests/navigation/anchor-frames-gbk.html  [test/expectations] [5]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538961</commentid>
    <comment_count>22</comment_count>
      <attachid>123182</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-19 12:58:46 -0800</bug_when>
    <thetext>Created attachment 123182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540621</commentid>
    <comment_count>23</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 09:55:00 -0800</bug_when>
    <thetext>Adam, Daniel, AP - could I get a review on this?  Thanks Heaps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540648</commentid>
    <comment_count>24</comment_count>
      <attachid>123182</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-23 10:31:25 -0800</bug_when>
    <thetext>Comment on attachment 123182
Patch

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

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:43
&gt; +    enum { sequenceSize = 6 }; // e.g. %u26C4

This patch doesn&apos;t have a WebCore ChangeLog. What are UTF-16 changes for?

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:85
&gt; +        // We need to handle the possibility that the encodings may be Big5/GBK, which have values 
&gt; +        // in the range 0x40 - 0x7F as the second byte of their sequences. These need to be passed
&gt; +        // to the decoder as part of the run to get the correct output (e.g. the run %XXc%XX%XX%XXccc
&gt; +        // should be decoded as %XXc%XX%XX%XXc followed by cc, where X is a hex digit and c is a character
&gt; +        // in the range 0x40 - 0x7f). We approximate this by stopping the at the first out of range
&gt; +        // value, at a second consecutive in-range value, or at a %-sign that does not introduce a
&gt; +        // valid sequence. Other encodings are still correct because the decoder will pass on the
&gt; +        // in-range characters unchanged.

I find it difficult to understand this comment. It it saying that we add one additional character to the percent escaped range? But we may need at least two - GBK has sequences that have two ASCII bytes, e.g. 814e42 for 乂.

&gt; LayoutTests/ChangeLog:9
&gt; +        * http/tests/navigation/anchor-frames-gbk-expected.txt: Added.
&gt; +        * http/tests/navigation/anchor-frames-gbk.html: Added.

I see, it&apos;s indeed difficult to find non-XSS code paths executing this. Is it a bug that we don&apos;t pass encoding elsewhere, or correct behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540651</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-23 10:35:35 -0800</bug_when>
    <thetext>I now think that if the only knowledge about encodings is that we need to extend escaped sequences by two characters, then it&apos;s probably OK. But I wouldn&apos;t vouch that no supported encoding can have more than two ASCII characters in a sequence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540656</commentid>
    <comment_count>26</comment_count>
      <attachid>123182</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 10:49:35 -0800</bug_when>
    <thetext>Comment on attachment 123182
Patch

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

&gt;&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:43
&gt;&gt; +    enum { sequenceSize = 6 }; // e.g. %u26C4
&gt; 
&gt; This patch doesn&apos;t have a WebCore ChangeLog. What are UTF-16 changes for?

Oops.  Looks like that got dropped.  Sorry.
The UTF-16 changes are to keep compatibility with the refactored interface that the template expects its supporting classes to provide.

&gt;&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:85
&gt;&gt; +        // in-range characters unchanged.
&gt; 
&gt; I find it difficult to understand this comment. It it saying that we add one additional character to the percent escaped range? But we may need at least two - GBK has sequences that have two ASCII bytes, e.g. 814e42 for 乂.

Ah.  Did not know that -- thought that GBK was a two-byte encoding.  Easy enough to fix for this.

&gt;&gt; LayoutTests/ChangeLog:9
&gt;&gt; +        * http/tests/navigation/anchor-frames-gbk.html: Added.
&gt; 
&gt; I see, it&apos;s indeed difficult to find non-XSS code paths executing this. Is it a bug that we don&apos;t pass encoding elsewhere, or correct behavior?

I&apos;d assume its correct, or we&apos;d have had additional reports, no?  Given that this has been wrong for so long with little consequence?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540657</commentid>
    <comment_count>27</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 10:50:58 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; I now think that if the only knowledge about encodings is that we need to extend escaped sequences by two characters, then it&apos;s probably OK. But I wouldn&apos;t vouch that no supported encoding can have more than two ASCII characters in a sequence.

Indeed.  It&apos;s very hard to make generalities about all the possible encodings.  But I think this fixes the issue in practice.

I&apos;ll put together another patch that addresses the comments above.  Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540668</commentid>
    <comment_count>28</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-23 11:09:04 -0800</bug_when>
    <thetext>&gt; I&apos;d assume its correct, or we&apos;d have had additional reports, no?  Given that this has been wrong for so long with little consequence?

I would not make such a conclusion. People don&apos;t regularly use percent escaping in most URL parts, and behavior is not consistent between browsers when they do (e.g. when percent escaping of host name interacts with IDNA).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540704</commentid>
    <comment_count>29</comment_count>
      <attachid>123182</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 11:39:35 -0800</bug_when>
    <thetext>Comment on attachment 123182
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:85
&gt;&gt;&gt; +        // in-range characters unchanged.
&gt;&gt; 
&gt;&gt; I find it difficult to understand this comment. It it saying that we add one additional character to the percent escaped range? But we may need at least two - GBK has sequences that have two ASCII bytes, e.g. 814e42 for 乂.
&gt; 
&gt; Ah.  Did not know that -- thought that GBK was a two-byte encoding.  Easy enough to fix for this.

Strange, I didn&apos;t find any pages about 3-byte GBK when I did a quick websearch, and  I get two characters for 814e42 not the single one you describe, but no matter -- passing two trailing bytes sounds like a good plan either way.
$ printf &quot;\x81\x4e\x42&quot; | iconv -f gbk -t utf-32LE | od -t x4
0000000          00004e2f        00000042

For my own education, would you happen to have a pointer to some doc on this sequence?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540714</commentid>
    <comment_count>30</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 11:48:31 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; I&apos;d assume its correct, or we&apos;d have had additional reports, no?  Given that this has been wrong for so long with little consequence?
&gt; 
&gt; I would not make such a conclusion. People don&apos;t regularly use percent escaping in most URL parts, and behavior is not consistent between browsers when they do (e.g. when percent escaping of host name interacts with IDNA).

If so, I&apos;m not sure what to say then, feels like this is getting beyond the scope of this one change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540722</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-23 11:53:40 -0800</bug_when>
    <thetext>Nope, I just misunderstood what I saw in GBK encoding table. GBK is 2-byte indeed. Sorry for the false lead!

However, what about ISO 2022 family encodings? These are stateful, and I think that an arbitrary number of ASCII characters can be part of a sequence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540731</commentid>
    <comment_count>32</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 12:03:19 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; Nope, I just misunderstood what I saw in GBK encoding table. GBK is 2-byte indeed. Sorry for the false lead!
&gt; 
&gt; However, what about ISO 2022 family encodings? These are stateful, and I think that an arbitrary number of ASCII characters can be part of a sequence.

True, however these are going to be a lost cause, at least in the xssAuditor case. My impression was that they were slowly going extinct in face of unicode, but that big5/gbk are still very prevalent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540740</commentid>
    <comment_count>33</comment_count>
      <attachid>123597</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 12:22:30 -0800</bug_when>
    <thetext>Created attachment 123597
New patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540810</commentid>
    <comment_count>34</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-23 13:51:31 -0800</bug_when>
    <thetext>If ISO 2022 is lost cause, what&apos;s the purpose of fixing GBK? I thought the issue here was primarily with attackers who are able to influence what encoding is used, so they could just pick ISO-2022-JP instead.

Two ISO 2022 family encodings are on Safari&apos;s encoding selection list, so presumably they are common enough for users to know them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540815</commentid>
    <comment_count>35</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 13:56:27 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; If ISO 2022 is lost cause, what&apos;s the purpose of fixing GBK? I thought the issue here was primarily with attackers who are able to influence what encoding is used, so they could just pick ISO-2022-JP instead.
&gt; 
No, if the attacker is able to pick what encoding to use, then there are other problems.  UTF-7 comes to mind (still supported?)  The patch is targeted at sites that specify big5 always.

&gt; Two ISO 2022 family encodings are on Safari&apos;s encoding selection list, so presumably they are common enough for users to know them.

Users yes, site owners maybe less so  (I admit I don&apos;t have hard data).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540820</commentid>
    <comment_count>36</comment_count>
      <attachid>123597</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2012-01-23 14:07:14 -0800</bug_when>
    <thetext>Comment on attachment 123597
New patch for review.

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

This patch looks good to me. Encoding/decoding can be tricky. If anyone sees any issues with this patch then feel free to raise them. I had some minor nits.

&gt; Source/WebCore/ChangeLog:9
&gt; +        results in face of encodings which re-use ASCII values in sequences.

Nit: I think your missing the word &quot;the&quot; in this line.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:81
&gt; +        // 0x40 - 0x7f range, after two values in this range, or at a %-sign that does not introduce a valid

Nit: You mention 0x7F above and 0x7f here. For consistency, I suggest choosing one hexadecimal digit notation (either uppercase or lowercase) to use throughout this comment.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:92
&gt; +            } else if (string[runEnd] &gt;= 0x40 &amp;&amp; string[runEnd] &lt; 0x80 &amp;&amp; numberOfTrailingCharacters &lt; 2) {

For your consideration, I suggest writing the conjunct &quot;string[runEnd] &lt; 0x80&quot; as &quot;string[runEnd] &lt;= 0x7F&quot; so as to be consistent with the usage of greater-than-equal-to in the first conjunct as well as to make the maximum value in the range (0x7F) more recognizable, especially after reading the above comment.

&gt; LayoutTests/http/tests/navigation/anchor-frames-gbk-expected.txt:17
&gt; +This is an anchor point named as the unicode equivalent of the gbk sequence %a9g (test trailing low byte).

Nit: gbk =&gt; GBK

(since GBK is an acronym).

Nit: unicode =&gt; Unicode

&gt; LayoutTests/http/tests/navigation/anchor-frames-gbk.html:1
&gt; +&lt;html&gt;

This is the only test in this patch that doesn&apos;t have a DOCTYPE. Did you intend for this test to be run under quirks mode? If so, it may be beneficial to add a comment to the test to explain this. Regardless of the compatibility mode this test is run under, I don&apos;t anticipate a difference in the expected results .

&gt; LayoutTests/http/tests/navigation/resources/frame-with-anchor-gbk.html:38
&gt; +&lt;a name=&quot;&amp;#x586f&quot;&gt;This is an anchor point named as the unicode equivalent of the gbk sequence %a9g (test trailing low byte)&lt;/a&gt;.

Nit: gbk =&gt; GBK

For your consideration, I suggest programmatically removing this node before calling finishJSTest() so that this text doesn&apos;t appear after &quot;TEST COMPLETE&quot; in the expected result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540835</commentid>
    <comment_count>37</comment_count>
      <attachid>123597</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 14:26:06 -0800</bug_when>
    <thetext>Comment on attachment 123597
New patch for review.

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        results in face of encodings which re-use ASCII values in sequences.
&gt; 
&gt; Nit: I think your missing the word &quot;the&quot; in this line.

Huh?  Where?  Did you mean the encodings?  the sequences?

&gt;&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:81
&gt;&gt; +        // 0x40 - 0x7f range, after two values in this range, or at a %-sign that does not introduce a valid
&gt; 
&gt; Nit: You mention 0x7F above and 0x7f here. For consistency, I suggest choosing one hexadecimal digit notation (either uppercase or lowercase) to use throughout this comment.

Sure.

&gt;&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:92
&gt;&gt; +            } else if (string[runEnd] &gt;= 0x40 &amp;&amp; string[runEnd] &lt; 0x80 &amp;&amp; numberOfTrailingCharacters &lt; 2) {
&gt; 
&gt; For your consideration, I suggest writing the conjunct &quot;string[runEnd] &lt; 0x80&quot; as &quot;string[runEnd] &lt;= 0x7F&quot; so as to be consistent with the usage of greater-than-equal-to in the first conjunct as well as to make the maximum value in the range (0x7F) more recognizable, especially after reading the above comment.

sure.

&gt;&gt; LayoutTests/http/tests/navigation/anchor-frames-gbk-expected.txt:17
&gt;&gt; +This is an anchor point named as the unicode equivalent of the gbk sequence %a9g (test trailing low byte).
&gt; 
&gt; Nit: gbk =&gt; GBK
&gt; 
&gt; (since GBK is an acronym).
&gt; 
&gt; Nit: unicode =&gt; Unicode

Sure.

&gt;&gt; LayoutTests/http/tests/navigation/anchor-frames-gbk.html:1
&gt;&gt; +&lt;html&gt;
&gt; 
&gt; This is the only test in this patch that doesn&apos;t have a DOCTYPE. Did you intend for this test to be run under quirks mode? If so, it may be beneficial to add a comment to the test to explain this. Regardless of the compatibility mode this test is run under, I don&apos;t anticipate a difference in the expected results .

Fixed.  Thanks.

&gt;&gt; LayoutTests/http/tests/navigation/resources/frame-with-anchor-gbk.html:38
&gt;&gt; +&lt;a name=&quot;&amp;#x586f&quot;&gt;This is an anchor point named as the unicode equivalent of the gbk sequence %a9g (test trailing low byte)&lt;/a&gt;.
&gt; 
&gt; Nit: gbk =&gt; GBK
&gt; 
&gt; For your consideration, I suggest programmatically removing this node before calling finishJSTest() so that this text doesn&apos;t appear after &quot;TEST COMPLETE&quot; in the expected result.

Fixed GBK.  If its all the same with you, I&apos;m going to pass on the removing the anchor just so someone glancing at the output doesn&apos;t have to scratch his head wondering why the anchor didn&apos;t dump.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540840</commentid>
    <comment_count>38</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2012-01-23 14:31:32 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 123597 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123597&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:9
&gt; &gt;&gt; +        results in face of encodings which re-use ASCII values in sequences.
&gt; &gt; 
&gt; &gt; Nit: I think your missing the word &quot;the&quot; in this line.
&gt; 
&gt; Huh?  Where?  Did you mean the encodings?  the sequences?
&gt; 

Shouldn&apos;t there be a &quot;the&quot; before &quot;face&quot;? I take it that the word &quot;face&quot; is being used as a synonym for the word &quot;presence&quot;.

&gt; &gt; For your consideration, I suggest programmatically removing this node before calling finishJSTest() so that this text doesn&apos;t appear after &quot;TEST COMPLETE&quot; in the expected result.
&gt; 
&gt; Fixed GBK.  If its all the same with you, I&apos;m going to pass on the removing the anchor just so someone glancing at the output doesn&apos;t have to scratch his head wondering why the anchor didn&apos;t dump.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540841</commentid>
    <comment_count>39</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-01-23 14:31:52 -0800</bug_when>
    <thetext>&gt; UTF-7 comes to mind (still supported?)

No.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540845</commentid>
    <comment_count>40</comment_count>
      <attachid>123597</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 14:35:24 -0800</bug_when>
    <thetext>Comment on attachment 123597
New patch for review.

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

&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt;&gt;&gt; +        results in face of encodings which re-use ASCII values in sequences.
&gt;&gt;&gt; 
&gt;&gt;&gt; Nit: I think your missing the word &quot;the&quot; in this line.
&gt;&gt; 
&gt;&gt; Huh?  Where?  Did you mean the encodings?  the sequences?
&gt; 
&gt; Shouldn&apos;t there be a &quot;the&quot; before &quot;face&quot;? I take it that the word &quot;face&quot; is being used as a synonym for the word &quot;presence&quot;.

&quot;in the presence of&quot; is better.  thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540846</commentid>
    <comment_count>41</comment_count>
      <attachid>123623</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-01-23 14:37:13 -0800</bug_when>
    <thetext>Created attachment 123623
Patch w/nits fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541114</commentid>
    <comment_count>42</comment_count>
      <attachid>123623</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-23 21:08:29 -0800</bug_when>
    <thetext>Comment on attachment 123623
Patch w/nits fixed.

Clearing flags on attachment: 123623

Committed r105691: &lt;http://trac.webkit.org/changeset/105691&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541115</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-23 21:08:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113992</attachid>
            <date>2011-11-07 22:34:24 -0800</date>
            <delta_ts>2012-01-13 11:12:32 -0800</delta_ts>
            <desc>Layout Tests</desc>
            <filename>LayoutTests.patch</filename>
            <type>text/plain</type>
            <size>2408</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUt
b25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8g
ZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQg
d2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1H
QkstY2hhci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVk
aXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFt
ZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNl
cy9lY2hvLWludGVydGFnLnBsP2NoYXJzZXQ9R0JLJnE9PGlmcmFtZSUyMG9ubG9hZD0lQzdPamF2
YXNjcmlwdDphbGVydChkb2N1bWVudC5kb21haW4pPjwvaWZyYW1lPiI+Cis8L2lmcmFtZT4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdC
Sy1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJl
ZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3Jp
cHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVy
cm9yLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRp
dG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1l
IHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2Vz
L2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1HQksmcT08aW1nJTIwc3JjPSUyMDElMjBvbmVycm9y
PSVDN09qYXZhc2NyaXB0OmFsZXJ0KGRvY3VtZW50LmRvbWFpbik+Ij4KKzwvaWZyYW1lPgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114889</attachid>
            <date>2011-11-13 23:39:26 -0800</date>
            <delta_ts>2011-11-13 23:42:57 -0800</delta_ts>
            <desc>Work-in-progress patch</desc>
            <filename>WIPXSSAuditor_5.patch</filename>
            <type>text/plain</type>
            <size>6934</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCShyZXZpc2lv
biA5OTYxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxOSArNTEsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogc3RhdGljIGJvb2wgaXNOb25DYW5vbmljYWxDaGFyYWN0ZXIoVUNoYXIgYykKIHsKLSAg
ICAvLyBXZSByZW1vdmUgYWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgbm9uLXBy
aW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzLgorICAgIC8vIFdlIHJlbW92ZSBhbGwgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMsIGluY2x1ZGluZyBub24tcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMuIFdl
IGFsc28gcmVtb3ZlIHRoZSAnPycgY2hhcmFjdGVyIHdoaWNoCisgICAgLy8gbWF5IGluZGljYXRl
IGFuIHVuZGVjb2RhYmxlIGNoYXJhY3Rlci4KICAgICAvLwogICAgIC8vIE5vdGUsIHdlIGRvbid0
IHJlbW92ZSBiYWNrc2xhc2hlcyBsaWtlIFBIUCBzdHJpcHNsYXNoZXMoKSwgd2hpY2ggYW1vbmcg
b3RoZXIgdGhpbmdzIGNvbnZlcnRzICJcXDAiIHRvIHRoZSBcMCBjaGFyYWN0ZXIuCiAgICAgLy8g
SW5zdGVhZCwgd2UgcmVtb3ZlIGJhY2tzbGFzaGVzIGFuZCB6ZXJvcyAoc2luY2UgdGhlIHN0cmlu
ZyAiXFwwIiA9KHJlbW92ZSBiYWNrc2xhc2hlcyk9PiAiMCIpLiBIb3dldmVyLCB0aGlzIGhhcyB0
aGUgCiAgICAgLy8gYWR2ZXJzZSBlZmZlY3QgdGhhdCB3ZSByZW1vdmUgYW55IGxlZ2l0aW1hdGUg
emVyb3MgZnJvbSBhIHN0cmluZy4KICAgICAvLwogICAgIC8vIEZvciBpbnN0YW5jZTogbmV3IFN0
cmluZygiaHR0cDovL2xvY2FsaG9zdDo4MDAwIikgPT4gbmV3IFN0cmluZygiaHR0cDovL2xvY2Fs
aG9zdDo4IikuCi0gICAgcmV0dXJuIChjID09ICdcXCcgfHwgYyA9PSAnMCcgfHwgYyA9PSAnXDAn
IHx8IGMgPj0gMTI3KTsKKyAgICByZXR1cm4gKGMgPT0gJ1xcJyB8fCBjID09ICcwJyB8fCBjID09
ICdcMCcgfHwgYyA9PSAnPycgfHwgYyA+PSAxMjcpOwogfQogCiBzdGF0aWMgU3RyaW5nIGNhbm9u
aWNhbGl6ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICByZXR1cm4gc3RyaW5nLnJlbW92
ZUNoYXJhY3RlcnMoJmlzTm9uQ2Fub25pY2FsQ2hhcmFjdGVyKTsKKyAgICByZXR1cm4gc3RyaW5n
LnJlbW92ZUNoYXJhY3RlcnMoJmlzTm9uQ2Fub25pY2FsQ2hhcmFjdGVyKS5yZXBsYWNlKCcrJywg
JyAnKTsKIH0KIAogc3RhdGljIGJvb2wgaXNSZXF1aXJlZEZvckluamVjdGlvbihVQ2hhciBjKQpA
QCAtMTY2LDEwICsxNjcsOSBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBkZWNvZGVTdGFuZGFyZFVS
TEVzCiAgICAgLy8gYXZvaWQgcGxhdGZvcm0tc3BlY2lmaWMgVVJMIGRlY29kaW5nIGRpZmZlcmVu
Y2VzIChlLmcuIEtVUkxHb29nbGUpLgogICAgIHJldHVybiBkZWNvZGVFc2NhcGVTZXF1ZW5jZXM8
VVJMRXNjYXBlU2VxdWVuY2U+KHN0cmluZywgZW5jb2RpbmcpOwogfQotCi1zdGF0aWMgU3RyaW5n
IGZ1bGx5RGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBUZXh0UmVzb3Vy
Y2VEZWNvZGVyKiBkZWNvZGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCitzdGF0aWMgU3RyaW5nIGFjdHVhbGx5RnVsbHlEZWNvZGVTdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7Ci0g
ICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZyA9IGRlY29kZXIgPyBkZWNvZGVyLT5lbmNv
ZGluZygpIDogVVRGOEVuY29kaW5nKCk7CiAgICAgc2l6ZV90IG9sZFdvcmtpbmdTdHJpbmdMZW5n
dGg7CiAgICAgU3RyaW5nIHdvcmtpbmdTdHJpbmcgPSBzdHJpbmc7CiAgICAgZG8gewpAQCAtMTc3
LDExICsxNzcsMjcgQEAgc3RhdGljIFN0cmluZyBmdWxseURlY29kZVN0cmluZyhjb25zdCBTdAog
ICAgICAgICB3b3JraW5nU3RyaW5nID0gZGVjb2RlMTZCaXRVbmljb2RlRXNjYXBlU2VxdWVuY2Vz
KGRlY29kZVN0YW5kYXJkVVJMRXNjYXBlU2VxdWVuY2VzKHdvcmtpbmdTdHJpbmcsIGVuY29kaW5n
KSk7CiAgICAgfSB3aGlsZSAod29ya2luZ1N0cmluZy5sZW5ndGgoKSA8IG9sZFdvcmtpbmdTdHJp
bmdMZW5ndGgpOwogICAgIEFTU0VSVCghd29ya2luZ1N0cmluZy5pc0VtcHR5KCkpOwotICAgIHdv
cmtpbmdTdHJpbmcucmVwbGFjZSgnKycsICcgJyk7Ci0gICAgd29ya2luZ1N0cmluZyA9IGNhbm9u
aWNhbGl6ZSh3b3JraW5nU3RyaW5nKTsKICAgICByZXR1cm4gd29ya2luZ1N0cmluZzsKIH0KIAor
c3RhdGljIGlubGluZSBTdHJpbmcgZnVsbHlEZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIpCit7CisgICAgcmV0dXJuIGNh
bm9uaWNhbGl6ZShhY3R1YWxseUZ1bGx5RGVjb2RlU3RyaW5nKHN0cmluZywgZGVjb2RlciA/IGRl
Y29kZXItPmVuY29kaW5nKCkgOiBVVEY4RW5jb2RpbmcoKSkpOworfQorCitzdGF0aWMgU3RyaW5n
IGZ1bGx5RGVjb2RlUGFnZVVSTE9yRm9ybURhdGEoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0
IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIpCit7CisgICAgLy8gV2UgZXhwbGljaXRseSBk
ZWNvZGUgdGhlIHBhZ2UgVVJMIG9yIGZvcm0gZGF0YSB0byBMYXRpbi0xLiBCeSBkb2luZyB0aGlz
IHdlIGF2b2lkIHRoZSBuZWVkIHRvIHByb3Blcmx5IGRlY29kZQorICAgIC8vIGVzY2FwZWQgbXVs
dGktYnl0ZSBjaGFyYWN0ZXJzLiBBbGwgbm9uLUxhdGluLTEgY2hhcmFjdGVycyBhcmUgY29udmVy
dGVkIHRvICc/Jywgd2hpY2ggd2UgcmVtb3ZlIGR1cmluZyBjYW5vbmljYWxpemF0aW9uLgorICAg
IFN0cmluZyB3b3JraW5nU3RyaW5nID0gYWN0dWFsbHlGdWxseURlY29kZVN0cmluZyhzdHJpbmcs
IExhdGluMUVuY29kaW5nKCkpOworICAgIENTdHJpbmcgd29ya2luZ1N0cmluZ0xhdGluMSA9IHdv
cmtpbmdTdHJpbmcubGF0aW4xKCk7CisgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZyA9
IGRlY29kZXIgPyBkZWNvZGVyLT5lbmNvZGluZygpIDogVVRGOEVuY29kaW5nKCk7CisgICAgU3Ry
aW5nIGRlY29kZWRTdHJpbmcgPSBlbmNvZGluZy5kZWNvZGUod29ya2luZ1N0cmluZ0xhdGluMS5k
YXRhKCksIHdvcmtpbmdTdHJpbmdMYXRpbjEubGVuZ3RoKCkpOworICAgIGlmICghZGVjb2RlZFN0
cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHdvcmtpbmdTdHJpbmcgPSBkZWNvZGVkU3RyaW5nOwor
ICAgIHJldHVybiBjYW5vbmljYWxpemUod29ya2luZ1N0cmluZyk7Cit9CisKIFhTU0F1ZGl0b3I6
OlhTU0F1ZGl0b3IoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCiAgICAgOiBtX3BhcnNlcihw
YXJzZXIpCiAgICAgLCBtX2lzRW5hYmxlZChmYWxzZSkKQEAgLTIzMCw3ICsyNDYsNyBAQCB2b2lk
IFhTU0F1ZGl0b3I6OmluaXQoKQogICAgIH0KIAogICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRl
Y29kZXIgPSBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpOwotICAgIG1fZGVjb2RlZFVS
TCA9IGZ1bGx5RGVjb2RlU3RyaW5nKHVybC5zdHJpbmcoKSwgZGVjb2Rlcik7CisgICAgbV9kZWNv
ZGVkVVJMID0gZnVsbHlEZWNvZGVQYWdlVVJMT3JGb3JtRGF0YSh1cmwuc3RyaW5nKCksIGRlY29k
ZXIpOwogICAgIGlmIChtX2RlY29kZWRVUkwuZmluZChpc1JlcXVpcmVkRm9ySW5qZWN0aW9uLCAw
KSA9PSBub3RGb3VuZCkKICAgICAgICAgbV9kZWNvZGVkVVJMID0gU3RyaW5nKCk7CiAKQEAgLTI0
Miw3ICsyNTgsNyBAQCB2b2lkIFhTU0F1ZGl0b3I6OmluaXQoKQogICAgICAgICBpZiAoaHR0cEJv
ZHkgJiYgIWh0dHBCb2R5LT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFN0cmluZyBodHRwQm9k
eUFzU3RyaW5nID0gaHR0cEJvZHktPmZsYXR0ZW5Ub1N0cmluZygpOwogICAgICAgICAgICAgaWYg
KCFodHRwQm9keUFzU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1fZGVjb2Rl
ZEhUVFBCb2R5ID0gZnVsbHlEZWNvZGVTdHJpbmcoaHR0cEJvZHlBc1N0cmluZywgZGVjb2Rlcik7
CisgICAgICAgICAgICAgICAgbV9kZWNvZGVkSFRUUEJvZHkgPSBmdWxseURlY29kZVBhZ2VVUkxP
ckZvcm1EYXRhKGh0dHBCb2R5QXNTdHJpbmcsIGRlY29kZXIpOwogICAgICAgICAgICAgICAgIGlm
IChtX2RlY29kZWRIVFRQQm9keS5maW5kKGlzUmVxdWlyZWRGb3JJbmplY3Rpb24sIDApID09IG5v
dEZvdW5kKQogICAgICAgICAgICAgICAgICAgICBtX2RlY29kZWRIVFRQQm9keSA9IFN0cmluZygp
OwogICAgICAgICAgICAgICAgIGlmIChtX2RlY29kZWRIVFRQQm9keS5sZW5ndGgoKSA+PSBtaW5p
dW1MZW5ndGhGb3JTdWZmaXhUcmVlKQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJh
bWUtb25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NB
R0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJj
ZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hh
ci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkst
Y2hhci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1HQksmcT08
aWZyYW1lJTIwb25sb2FkPSVDN09qYXZhc2NyaXB0OmFsZXJ0KGRvY3VtZW50LmRvbWFpbik+PC9p
ZnJhbWU+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9y
LUdCSy1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3Jp
cHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3It
R0JLLWNoYXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1H
QkstY2hhci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRl
c3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJp
dHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jaGFyc2V0PUdCSyZxPTxp
bWclMjBzcmM9JTIwMSUyMG9uZXJyb3I9JUM3T2phdmFzY3JpcHQ6YWxlcnQoZG9jdW1lbnQuZG9t
YWluKT4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114890</attachid>
            <date>2011-11-13 23:42:57 -0800</date>
            <delta_ts>2011-12-01 22:35:49 -0800</delta_ts>
            <desc>Work-in-progress patch</desc>
            <filename>WIPXSSAuditor_5.patch</filename>
            <type>text/plain</type>
            <size>6804</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCShyZXZpc2lv
biA5OTYxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxOSArNTEsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogc3RhdGljIGJvb2wgaXNOb25DYW5vbmljYWxDaGFyYWN0ZXIoVUNoYXIgYykKIHsKLSAg
ICAvLyBXZSByZW1vdmUgYWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgbm9uLXBy
aW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzLgorICAgIC8vIFdlIHJlbW92ZSBhbGwgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMsIGluY2x1ZGluZyBub24tcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMuIFdl
IGFsc28gcmVtb3ZlIHRoZSAnPycgY2hhcmFjdGVyIHdoaWNoCisgICAgLy8gbWF5IGluZGljYXRl
IGFuIHVuZGVjb2RhYmxlIGNoYXJhY3Rlci4KICAgICAvLwogICAgIC8vIE5vdGUsIHdlIGRvbid0
IHJlbW92ZSBiYWNrc2xhc2hlcyBsaWtlIFBIUCBzdHJpcHNsYXNoZXMoKSwgd2hpY2ggYW1vbmcg
b3RoZXIgdGhpbmdzIGNvbnZlcnRzICJcXDAiIHRvIHRoZSBcMCBjaGFyYWN0ZXIuCiAgICAgLy8g
SW5zdGVhZCwgd2UgcmVtb3ZlIGJhY2tzbGFzaGVzIGFuZCB6ZXJvcyAoc2luY2UgdGhlIHN0cmlu
ZyAiXFwwIiA9KHJlbW92ZSBiYWNrc2xhc2hlcyk9PiAiMCIpLiBIb3dldmVyLCB0aGlzIGhhcyB0
aGUgCiAgICAgLy8gYWR2ZXJzZSBlZmZlY3QgdGhhdCB3ZSByZW1vdmUgYW55IGxlZ2l0aW1hdGUg
emVyb3MgZnJvbSBhIHN0cmluZy4KICAgICAvLwogICAgIC8vIEZvciBpbnN0YW5jZTogbmV3IFN0
cmluZygiaHR0cDovL2xvY2FsaG9zdDo4MDAwIikgPT4gbmV3IFN0cmluZygiaHR0cDovL2xvY2Fs
aG9zdDo4IikuCi0gICAgcmV0dXJuIChjID09ICdcXCcgfHwgYyA9PSAnMCcgfHwgYyA9PSAnXDAn
IHx8IGMgPj0gMTI3KTsKKyAgICByZXR1cm4gKGMgPT0gJ1xcJyB8fCBjID09ICcwJyB8fCBjID09
ICdcMCcgfHwgYyA9PSAnPycgfHwgYyA+PSAxMjcpOwogfQogCiBzdGF0aWMgU3RyaW5nIGNhbm9u
aWNhbGl6ZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICByZXR1cm4gc3RyaW5nLnJlbW92
ZUNoYXJhY3RlcnMoJmlzTm9uQ2Fub25pY2FsQ2hhcmFjdGVyKTsKKyAgICByZXR1cm4gc3RyaW5n
LnJlbW92ZUNoYXJhY3RlcnMoJmlzTm9uQ2Fub25pY2FsQ2hhcmFjdGVyKS5yZXBsYWNlKCcrJywg
JyAnKTsKIH0KIAogc3RhdGljIGJvb2wgaXNSZXF1aXJlZEZvckluamVjdGlvbihVQ2hhciBjKQpA
QCAtMTY3LDkgKzE2OCw4IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGRlY29kZVN0YW5kYXJkVVJM
RXMKICAgICByZXR1cm4gZGVjb2RlRXNjYXBlU2VxdWVuY2VzPFVSTEVzY2FwZVNlcXVlbmNlPihz
dHJpbmcsIGVuY29kaW5nKTsKIH0KIAotc3RhdGljIFN0cmluZyBmdWxseURlY29kZVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikK
K3N0YXRpYyBTdHJpbmcgYWN0dWFsbHlGdWxseURlY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKLSAgICBjb25zdCBUZXh0RW5j
b2RpbmcmIGVuY29kaW5nID0gZGVjb2RlciA/IGRlY29kZXItPmVuY29kaW5nKCkgOiBVVEY4RW5j
b2RpbmcoKTsKICAgICBzaXplX3Qgb2xkV29ya2luZ1N0cmluZ0xlbmd0aDsKICAgICBTdHJpbmcg
d29ya2luZ1N0cmluZyA9IHN0cmluZzsKICAgICBkbyB7CkBAIC0xNzcsMTEgKzE3NywyNyBAQCBz
dGF0aWMgU3RyaW5nIGZ1bGx5RGVjb2RlU3RyaW5nKGNvbnN0IFN0CiAgICAgICAgIHdvcmtpbmdT
dHJpbmcgPSBkZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMoZGVjb2RlU3RhbmRhcmRV
UkxFc2NhcGVTZXF1ZW5jZXMod29ya2luZ1N0cmluZywgZW5jb2RpbmcpKTsKICAgICB9IHdoaWxl
ICh3b3JraW5nU3RyaW5nLmxlbmd0aCgpIDwgb2xkV29ya2luZ1N0cmluZ0xlbmd0aCk7CiAgICAg
QVNTRVJUKCF3b3JraW5nU3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgd29ya2luZ1N0cmluZy5yZXBs
YWNlKCcrJywgJyAnKTsKLSAgICB3b3JraW5nU3RyaW5nID0gY2Fub25pY2FsaXplKHdvcmtpbmdT
dHJpbmcpOwogICAgIHJldHVybiB3b3JraW5nU3RyaW5nOwogfQogCitzdGF0aWMgaW5saW5lIFN0
cmluZyBmdWxseURlY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgVGV4dFJl
c291cmNlRGVjb2RlciogZGVjb2RlcikKK3sKKyAgICByZXR1cm4gY2Fub25pY2FsaXplKGFjdHVh
bGx5RnVsbHlEZWNvZGVTdHJpbmcoc3RyaW5nLCBkZWNvZGVyID8gZGVjb2Rlci0+ZW5jb2Rpbmco
KSA6IFVURjhFbmNvZGluZygpKSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgZnVsbHlEZWNvZGVQYWdl
VVJMT3JGb3JtRGF0YShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgVGV4dFJlc291cmNlRGVj
b2RlciogZGVjb2RlcikKK3sKKyAgICAvLyBXZSBleHBsaWNpdGx5IGRlY29kZSB0aGUgcGFnZSBV
Ukwgb3IgZm9ybSBkYXRhIHRvIExhdGluLTEuIEJ5IGRvaW5nIHRoaXMgd2UgYXZvaWQgdGhlIG5l
ZWQgdG8gcHJvcGVybHkgZGVjb2RlCisgICAgLy8gZXNjYXBlZCBtdWx0aS1ieXRlIGNoYXJhY3Rl
cnMuIEFsbCBub24tTGF0aW4tMSBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gJz8nLCB3aGlj
aCB3ZSByZW1vdmUgZHVyaW5nIGNhbm9uaWNhbGl6YXRpb24uCisgICAgU3RyaW5nIHdvcmtpbmdT
dHJpbmcgPSBhY3R1YWxseUZ1bGx5RGVjb2RlU3RyaW5nKHN0cmluZywgTGF0aW4xRW5jb2Rpbmco
KSk7CisgICAgQ1N0cmluZyB3b3JraW5nU3RyaW5nTGF0aW4xID0gd29ya2luZ1N0cmluZy5sYXRp
bjEoKTsKKyAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nID0gZGVjb2RlciA/IGRlY29k
ZXItPmVuY29kaW5nKCkgOiBVVEY4RW5jb2RpbmcoKTsKKyAgICBTdHJpbmcgZGVjb2RlZFN0cmlu
ZyA9IGVuY29kaW5nLmRlY29kZSh3b3JraW5nU3RyaW5nTGF0aW4xLmRhdGEoKSwgd29ya2luZ1N0
cmluZ0xhdGluMS5sZW5ndGgoKSk7CisgICAgaWYgKCFkZWNvZGVkU3RyaW5nLmlzRW1wdHkoKSkK
KyAgICAgICAgd29ya2luZ1N0cmluZyA9IGRlY29kZWRTdHJpbmc7CisgICAgcmV0dXJuIGNhbm9u
aWNhbGl6ZSh3b3JraW5nU3RyaW5nKTsKK30KKwogWFNTQXVkaXRvcjo6WFNTQXVkaXRvcihIVE1M
RG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKICAgICA6IG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1f
aXNFbmFibGVkKGZhbHNlKQpAQCAtMjMwLDcgKzI0Niw3IEBAIHZvaWQgWFNTQXVkaXRvcjo6aW5p
dCgpCiAgICAgfQogCiAgICAgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlciA9IG1fcGFyc2Vy
LT5kb2N1bWVudCgpLT5kZWNvZGVyKCk7Ci0gICAgbV9kZWNvZGVkVVJMID0gZnVsbHlEZWNvZGVT
dHJpbmcodXJsLnN0cmluZygpLCBkZWNvZGVyKTsKKyAgICBtX2RlY29kZWRVUkwgPSBmdWxseURl
Y29kZVBhZ2VVUkxPckZvcm1EYXRhKHVybC5zdHJpbmcoKSwgZGVjb2Rlcik7CiAgICAgaWYgKG1f
ZGVjb2RlZFVSTC5maW5kKGlzUmVxdWlyZWRGb3JJbmplY3Rpb24sIDApID09IG5vdEZvdW5kKQog
ICAgICAgICBtX2RlY29kZWRVUkwgPSBTdHJpbmcoKTsKIApAQCAtMjQyLDcgKzI1OCw3IEBAIHZv
aWQgWFNTQXVkaXRvcjo6aW5pdCgpCiAgICAgICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHkt
PmlzRW1wdHkoKSkgewogICAgICAgICAgICAgU3RyaW5nIGh0dHBCb2R5QXNTdHJpbmcgPSBodHRw
Qm9keS0+ZmxhdHRlblRvU3RyaW5nKCk7CiAgICAgICAgICAgICBpZiAoIWh0dHBCb2R5QXNTdHJp
bmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kZWNvZGVkSFRUUEJvZHkgPSBmdWxs
eURlY29kZVN0cmluZyhodHRwQm9keUFzU3RyaW5nLCBkZWNvZGVyKTsKKyAgICAgICAgICAgICAg
ICBtX2RlY29kZWRIVFRQQm9keSA9IGZ1bGx5RGVjb2RlUGFnZVVSTE9yRm9ybURhdGEoaHR0cEJv
ZHlBc1N0cmluZywgZGVjb2Rlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1fZGVjb2RlZEhUVFBC
b2R5LmZpbmQoaXNSZXF1aXJlZEZvckluamVjdGlvbiwgMCkgPT0gbm90Rm91bmQpCiAgICAgICAg
ICAgICAgICAgICAgIG1fZGVjb2RlZEhUVFBCb2R5ID0gU3RyaW5nKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fZGVjb2RlZEhUVFBCb2R5Lmxlbmd0aCgpID49IG1pbml1bUxlbmd0aEZvclN1ZmZp
eFRyZWUpCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
aWZyYW1lLW9ubG9hZC1HQkstY2hhci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNo
YXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1
c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0
IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1v
bmxvYWQtR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNl
dFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9y
ZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jaGFyc2V0PUdCSyZxPTxpZnJhbWUlMjBvbmxvYWQ9
JUM3T2phdmFzY3JpcHQ6YWxlcnQoZG9jdW1lbnQuZG9tYWluKT48L2lmcmFtZT4iPgorPC9pZnJh
bWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXItZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25l
cnJvci1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXItZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUg
b2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9p
bWctb25lcnJvci1HQkstY2hhci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0
WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jl
c291cmNlcy9lY2hvLWludGVydGFnLnBsP2NoYXJzZXQ9R0JLJnE9PGltZyUyMHNyYz0lMjAxJTIw
b25lcnJvcj0lQzdPamF2YXNjcmlwdDphbGVydChkb2N1bWVudC5kb21haW4pPiI+Cis8L2lmcmFt
ZT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117569</attachid>
            <date>2011-12-01 22:35:49 -0800</date>
            <delta_ts>2012-01-13 11:12:32 -0800</delta_ts>
            <desc>Work-in-progress patch</desc>
            <filename>WIPXSSAuditor_120111.patch</filename>
            <type>text/plain</type>
            <size>12512</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCShyZXZpc2lv
biAxMDE3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsMTkgKzUxLDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKIHN0YXRpYyBib29sIGlzTm9uQ2Fub25pY2FsQ2hhcmFjdGVyKFVDaGFyIGMpCiB7Ci0g
ICAgLy8gV2UgcmVtb3ZlIGFsbCBub24tQVNDSUkgY2hhcmFjdGVycywgaW5jbHVkaW5nIG5vbi1w
cmludGFibGUgQVNDSUkgY2hhcmFjdGVycy4KKyAgICAvLyBXZSByZW1vdmUgYWxsIG5vbi1BU0NJ
SSBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgbm9uLXByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzLiBX
ZSBhbHNvIHJlbW92ZSB0aGUgJz8nIGNoYXJhY3RlciB3aGljaAorICAgIC8vIG1heSBpbmRpY2F0
ZSBhbiB1bmRlY29kYWJsZSBjaGFyYWN0ZXIuCiAgICAgLy8KICAgICAvLyBOb3RlLCB3ZSBkb24n
dCByZW1vdmUgYmFja3NsYXNoZXMgbGlrZSBQSFAgc3RyaXBzbGFzaGVzKCksIHdoaWNoIGFtb25n
IG90aGVyIHRoaW5ncyBjb252ZXJ0cyAiXFwwIiB0byB0aGUgXDAgY2hhcmFjdGVyLgogICAgIC8v
IEluc3RlYWQsIHdlIHJlbW92ZSBiYWNrc2xhc2hlcyBhbmQgemVyb3MgKHNpbmNlIHRoZSBzdHJp
bmcgIlxcMCIgPShyZW1vdmUgYmFja3NsYXNoZXMpPT4gIjAiKS4gSG93ZXZlciwgdGhpcyBoYXMg
dGhlIAogICAgIC8vIGFkdmVyc2UgZWZmZWN0IHRoYXQgd2UgcmVtb3ZlIGFueSBsZWdpdGltYXRl
IHplcm9zIGZyb20gYSBzdHJpbmcuCiAgICAgLy8KICAgICAvLyBGb3IgaW5zdGFuY2U6IG5ldyBT
dHJpbmcoImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIpID0+IG5ldyBTdHJpbmcoImh0dHA6Ly9sb2Nh
bGhvc3Q6OCIpLgotICAgIHJldHVybiAoYyA9PSAnXFwnIHx8IGMgPT0gJzAnIHx8IGMgPT0gJ1ww
JyB8fCBjID49IDEyNyk7CisgICAgcmV0dXJuIChjID09ICdcXCcgfHwgYyA9PSAnMCcgfHwgYyA9
PSAnXDAnIHx8IGMgPT0gJz8nIHx8IGMgPj0gMTI3KTsKIH0KIAogc3RhdGljIFN0cmluZyBjYW5v
bmljYWxpemUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIHN0cmluZy5yZW1v
dmVDaGFyYWN0ZXJzKCZpc05vbkNhbm9uaWNhbENoYXJhY3Rlcik7CisgICAgcmV0dXJuIHN0cmlu
Zy5yZW1vdmVDaGFyYWN0ZXJzKCZpc05vbkNhbm9uaWNhbENoYXJhY3RlcikucmVwbGFjZSgnKycs
ICcgJyk7CiB9CiAKIHN0YXRpYyBib29sIGlzUmVxdWlyZWRGb3JJbmplY3Rpb24oVUNoYXIgYykK
QEAgLTE2Nyw5ICsxNjgsOCBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBkZWNvZGVTdGFuZGFyZFVS
TEVzCiAgICAgcmV0dXJuIGRlY29kZUVzY2FwZVNlcXVlbmNlczxVUkxFc2NhcGVTZXF1ZW5jZT4o
c3RyaW5nLCBlbmNvZGluZyk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZnVsbHlEZWNvZGVTdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIp
CitzdGF0aWMgU3RyaW5nIGFjdHVhbGx5RnVsbHlEZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7Ci0gICAgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZyA9IGRlY29kZXIgPyBkZWNvZGVyLT5lbmNvZGluZygpIDogVVRGOEVu
Y29kaW5nKCk7CiAgICAgc2l6ZV90IG9sZFdvcmtpbmdTdHJpbmdMZW5ndGg7CiAgICAgU3RyaW5n
IHdvcmtpbmdTdHJpbmcgPSBzdHJpbmc7CiAgICAgZG8gewpAQCAtMTc3LDExICsxNzcsMjcgQEAg
c3RhdGljIFN0cmluZyBmdWxseURlY29kZVN0cmluZyhjb25zdCBTdAogICAgICAgICB3b3JraW5n
U3RyaW5nID0gZGVjb2RlMTZCaXRVbmljb2RlRXNjYXBlU2VxdWVuY2VzKGRlY29kZVN0YW5kYXJk
VVJMRXNjYXBlU2VxdWVuY2VzKHdvcmtpbmdTdHJpbmcsIGVuY29kaW5nKSk7CiAgICAgfSB3aGls
ZSAod29ya2luZ1N0cmluZy5sZW5ndGgoKSA8IG9sZFdvcmtpbmdTdHJpbmdMZW5ndGgpOwogICAg
IEFTU0VSVCghd29ya2luZ1N0cmluZy5pc0VtcHR5KCkpOwotICAgIHdvcmtpbmdTdHJpbmcucmVw
bGFjZSgnKycsICcgJyk7Ci0gICAgd29ya2luZ1N0cmluZyA9IGNhbm9uaWNhbGl6ZSh3b3JraW5n
U3RyaW5nKTsKICAgICByZXR1cm4gd29ya2luZ1N0cmluZzsKIH0KIAorc3RhdGljIGlubGluZSBT
dHJpbmcgZnVsbHlEZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRS
ZXNvdXJjZURlY29kZXIqIGRlY29kZXIpCit7CisgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShhY3R1
YWxseUZ1bGx5RGVjb2RlU3RyaW5nKHN0cmluZywgZGVjb2RlciA/IGRlY29kZXItPmVuY29kaW5n
KCkgOiBVVEY4RW5jb2RpbmcoKSkpOworfQorCitzdGF0aWMgU3RyaW5nIGZ1bGx5RGVjb2RlUGFn
ZVVSTE9yRm9ybURhdGEoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRSZXNvdXJjZURl
Y29kZXIqIGRlY29kZXIpCit7CisgICAgLy8gV2UgZXhwbGljaXRseSBkZWNvZGUgdGhlIHBhZ2Ug
VVJMIG9yIGZvcm0gZGF0YSB0byBMYXRpbi0xLiBCeSBkb2luZyB0aGlzIHdlIGF2b2lkIHRoZSBu
ZWVkIHRvIHByb3Blcmx5IGRlY29kZQorICAgIC8vIGVzY2FwZWQgbXVsdGktYnl0ZSBjaGFyYWN0
ZXJzLiBBbGwgbm9uLUxhdGluLTEgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIHRvICc/Jywgd2hp
Y2ggd2UgcmVtb3ZlIGR1cmluZyBjYW5vbmljYWxpemF0aW9uLgorICAgIFN0cmluZyB3b3JraW5n
U3RyaW5nID0gYWN0dWFsbHlGdWxseURlY29kZVN0cmluZyhzdHJpbmcsIExhdGluMUVuY29kaW5n
KCkpOworICAgIENTdHJpbmcgd29ya2luZ1N0cmluZ0xhdGluMSA9IHdvcmtpbmdTdHJpbmcubGF0
aW4xKCk7CisgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZyA9IGRlY29kZXIgPyBkZWNv
ZGVyLT5lbmNvZGluZygpIDogVVRGOEVuY29kaW5nKCk7CisgICAgU3RyaW5nIGRlY29kZWRTdHJp
bmcgPSBlbmNvZGluZy5kZWNvZGUod29ya2luZ1N0cmluZ0xhdGluMS5kYXRhKCksIHdvcmtpbmdT
dHJpbmdMYXRpbjEubGVuZ3RoKCkpOworICAgIGlmICghZGVjb2RlZFN0cmluZy5pc0VtcHR5KCkp
CisgICAgICAgIHdvcmtpbmdTdHJpbmcgPSBkZWNvZGVkU3RyaW5nOworICAgIHJldHVybiBjYW5v
bmljYWxpemUod29ya2luZ1N0cmluZyk7Cit9CisKIFhTU0F1ZGl0b3I6OlhTU0F1ZGl0b3IoSFRN
TERvY3VtZW50UGFyc2VyKiBwYXJzZXIpCiAgICAgOiBtX3BhcnNlcihwYXJzZXIpCiAgICAgLCBt
X2lzRW5hYmxlZChmYWxzZSkKQEAgLTIzMCw3ICsyNDYsNyBAQCB2b2lkIFhTU0F1ZGl0b3I6Omlu
aXQoKQogICAgIH0KIAogICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIgPSBtX3BhcnNl
ci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpOwotICAgIG1fZGVjb2RlZFVSTCA9IGZ1bGx5RGVjb2Rl
U3RyaW5nKHVybC5zdHJpbmcoKSwgZGVjb2Rlcik7CisgICAgbV9kZWNvZGVkVVJMID0gZnVsbHlE
ZWNvZGVQYWdlVVJMT3JGb3JtRGF0YSh1cmwuc3RyaW5nKCksIGRlY29kZXIpOwogICAgIGlmICht
X2RlY29kZWRVUkwuZmluZChpc1JlcXVpcmVkRm9ySW5qZWN0aW9uLCAwKSA9PSBub3RGb3VuZCkK
ICAgICAgICAgbV9kZWNvZGVkVVJMID0gU3RyaW5nKCk7CiAKQEAgLTI0Miw3ICsyNTgsNyBAQCB2
b2lkIFhTU0F1ZGl0b3I6OmluaXQoKQogICAgICAgICBpZiAoaHR0cEJvZHkgJiYgIWh0dHBCb2R5
LT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFN0cmluZyBodHRwQm9keUFzU3RyaW5nID0gaHR0
cEJvZHktPmZsYXR0ZW5Ub1N0cmluZygpOwogICAgICAgICAgICAgaWYgKCFodHRwQm9keUFzU3Ry
aW5nLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1fZGVjb2RlZEhUVFBCb2R5ID0gZnVs
bHlEZWNvZGVTdHJpbmcoaHR0cEJvZHlBc1N0cmluZywgZGVjb2Rlcik7CisgICAgICAgICAgICAg
ICAgbV9kZWNvZGVkSFRUUEJvZHkgPSBmdWxseURlY29kZVBhZ2VVUkxPckZvcm1EYXRhKGh0dHBC
b2R5QXNTdHJpbmcsIGRlY29kZXIpOwogICAgICAgICAgICAgICAgIGlmIChtX2RlY29kZWRIVFRQ
Qm9keS5maW5kKGlzUmVxdWlyZWRGb3JJbmplY3Rpb24sIDApID09IG5vdEZvdW5kKQogICAgICAg
ICAgICAgICAgICAgICBtX2RlY29kZWRIVFRQQm9keSA9IFN0cmluZygpOwogICAgICAgICAgICAg
ICAgIGlmIChtX2RlY29kZWRIVFRQQm9keS5sZW5ndGgoKSA+PSBtaW5pdW1MZW5ndGhGb3JTdWZm
aXhUcmVlKQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L2lmcmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1j
aGFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVm
dXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlw
dCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUt
b25sb2FkLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5z
ZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
cmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1HQksmcT08aWZyYW1lJTIwb25sb2Fk
PSVDN09qYXZhc2NyaXB0OmFsZXJ0KGRvY3VtZW50LmRvbWFpbik+PC9pZnJhbWU+Ij4KKzwvaWZy
YW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9u
ZXJyb3ItR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2Rl
IG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
aW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNl
dFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9y
ZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jaGFyc2V0PUdCSyZxPTxpbWclMjBzcmM9JTIwMSUy
MG9uZXJyb3I9JUM3T2phdmFzY3JpcHQ6YWxlcnQoZG9jdW1lbnQuZG9tYWluKT4iPgorPC9pZnJh
bWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNv
ZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRp
dG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP2NoYXJzZXQ9QmlnNSZxPTxzY3JpcHQ+YWxl
cnQoL1hTJTgxU1MvKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LUJpZzUtY2hhci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBh
IEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJl
cXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQt
dW5pY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVu
Y29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNj
cmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4K
KworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2Ny
aXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVy
LnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRv
ci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbD9jaGFyc2V0
PUJpZzUmcT08c2NyaXB0PmFsZXJ0KC9YUyV1MDAyNTI1ODFTUy8pPC9zY3JpcHQ+Ij4KKzwvaWZy
YW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTog
UmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNj
cmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVu
Y29kZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JF
bmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3Jj
PSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNo
by1pbnRlcnRhZy5wbD9jaGFyc2V0PUJpZzUmcT08c2NyaXB0PmFsZXJ0KC9YUyUyNTgxU1MvKTwv
c2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
c2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9y
L3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP2NoYXJzZXQ9QmlnNSZxPTxzY3JpcHQlMjAlODln
PmFsZXJ0KGxvY2F0aW9uKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJj
ZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8t
aW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNvZGUucGwJKHJldmlzaW9uIDEwMTc0MCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1p
bnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyAr
NjcsOCBAQCBzdWIgZGVjb2RlMTZCaXRVbmljb2RlRXNjYXBlU2VxdWVuY2VzCiAgICAgcmV0dXJu
ICRyZXN1bHQ7CiB9CiAKLXByaW50ICJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1V
VEYtOFxuXG4iOworbXkgJGNoYXJzZXRUb1VzZSA9ICRjZ2ktPnBhcmFtKCdjaGFyc2V0JykgPyAk
Y2dpLT5wYXJhbSgnY2hhcnNldCcpIDogIlVURi04IjsKK3ByaW50ICJDb250ZW50LVR5cGU6IHRl
eHQvaHRtbDsgY2hhcnNldD0kY2hhcnNldFRvVXNlXG5cbiI7CiAKIHByaW50ICI8IURPQ1RZUEUg
aHRtbD5cbiI7CiBwcmludCAiPGh0bWw+XG4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122468</attachid>
            <date>2012-01-13 11:12:32 -0800</date>
            <delta_ts>2012-01-13 11:20:14 -0800</delta_ts>
            <desc>Proposed Patch + Daniel&apos;s layout tests.</desc>
            <filename>patch_71316.txt</filename>
            <type>text/plain</type>
            <size>18642</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDk1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAxLTEzICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRlY29kZUVzY2FwZVNlcXVlbmNl
cygpIG5vdCBjb3JyZWN0IGZvciBzb21lIGVuY29kaW5ncyAoR0JLLCBCaWc1LCAuLi4pLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBBdm9pZCB0
cnVuY2F0aW5ncyB0aGUgcnVucyBwYXNzZWQgaW50byB0aGUgdmFyaW91cyBjaGFyc2V0IGRlY29k
ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVl
bmNlcy5oOgorICAgICAgICAoV2ViQ29yZTo6VW5pY29kZTE2Qml0RXNjYXBlU2VxdWVuY2U6OmZp
bmRJblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpVbmljb2RlMTZCaXRFc2NhcGVTZXF1ZW5j
ZTo6ZmluZEVuZE9mUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWNvZGUxNkJpdEVzY2FwZVNl
cXVlbmNlOjpkZWNvZGVSdW4pOgorICAgICAgICAoV2ViQ29yZTo6VVJMRXNjYXBlU2VxdWVuY2U6
OmZpbmRJblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpVUkxFc2NhcGVTZXF1ZW5jZTo6Zmlu
ZEVuZE9mUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEVzY2FwZVNlcXVlbmNlOjpkZWNvZGVS
dW4pOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlRXNjYXBlU2VxdWVuY2VzKToKKwogMjAxMi0w
MS0xMyAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8a3Vib0Bwcm9mdXNpb24ubW9iaT4KIAogICAg
ICAgICBbc291cF0gSW5pdGlhbGl6ZSBtX3NvdXBGbGFncyBpbiBhbGwgUmVzb3VyY2VSZXNwb25z
ZSBjb25zdHJ1Y3RvcnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29k
ZUVzY2FwZVNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9uIDEwNDk1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIERhbmllbCBC
YXRlcyAoZGJhdGVzQGludHVkYXRhLmNvbSkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTIgR29vZ2xlLCBpbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05LDYgKzEwLDkgQEAKICAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpAQCAtMzYsNTIgKzQwLDg0IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gU2VlIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bl
cmNlbnQtZW5jb2RpbmcjTm9uLXN0YW5kYXJkX2ltcGxlbWVudGF0aW9ucz4uCiBzdHJ1Y3QgVW5p
Y29kZTE2Qml0RXNjYXBlU2VxdWVuY2UgewotICAgIGVudW0geyBzaXplID0gNiB9OyAvLyBlLmcu
ICV1MjZDNAotICAgIHN0YXRpYyBzaXplX3QgZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIHsgcmV0dXJuIHN0cmluZy5maW5kKCIldSIsIHN0YXJ0
KTsgfQotICAgIHN0YXRpYyBib29sIG1hdGNoU3RyaW5nUHJlZml4KGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBzdGFydCA9IDApCisgICAgZW51bSB7IHNlcXVlbmNlU2l6ZSA9IDYgfTsg
Ly8gZS5nLiAldTI2QzQKKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRJblN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0UG9zaXRpb24pIHsgcmV0dXJuIHN0cmluZy5maW5kKCIl
dSIsIHN0YXJ0UG9zaXRpb24pOyB9CisgICAgc3RhdGljIHNpemVfdCBmaW5kRW5kT2ZSdW4oY29u
c3QgU3RyaW5nJiBzdHJpbmcsIHNpemVfdCBzdGFydFBvc2l0aW9uLCBzaXplX3QgZW5kUG9zaXRp
b24pCiAgICAgewotICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIC0gc3RhcnQgPCBzaXplKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gc3RyaW5nW3N0YXJ0XSA9
PSAnJScgJiYgc3RyaW5nW3N0YXJ0ICsgMV0gPT0gJ3UnCi0gICAgICAgICAgICAmJiBpc0FTQ0lJ
SGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsgMl0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3Rh
cnQgKyAzXSkKLSAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3RhcnQgKyA0
XSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDVdKTsKKyAgICAgICAgc2l6ZV90
IHJ1bkVuZCA9IHN0YXJ0UG9zaXRpb247CisgICAgICAgIHdoaWxlIChlbmRQb3NpdGlvbiAtIHJ1
bkVuZCA+PSBzZXF1ZW5jZVNpemUgJiYgc3RyaW5nW3J1bkVuZF0gPT0gJyUnICYmIHN0cmluZ1ty
dW5FbmQgKyAxXSA9PSAndScKKyAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJp
bmdbcnVuRW5kICsgMl0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5kICsgM10pCisg
ICAgICAgICAgICAgICAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDRdKSAmJiBp
c0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDVdKSkgeworICAgICAgICAgICAgcnVuRW5k
ICs9IHNlcXVlbmNlU2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnVuRW5kOwogICAg
IH0KICAgICBzdGF0aWMgU3RyaW5nIGRlY29kZVJ1bihjb25zdCBVQ2hhciogcnVuLCBzaXplX3Qg
cnVuTGVuZ3RoLCBjb25zdCBUZXh0RW5jb2RpbmcmKQogICAgIHsKICAgICAgICAgLy8gRWFjaCAl
dS1lc2NhcGUgc2VxdWVuY2UgcmVwcmVzZW50cyBhIFVURi0xNiBjb2RlIHVuaXQuCiAgICAgICAg
IC8vIFNlZSA8aHR0cDovL3d3dy53My5vcmcvSW50ZXJuYXRpb25hbC9pcmktZWRpdC9kcmFmdC1k
dWVyc3QtaXJpLmh0bWwjYW5jaG9yMjk+LgotICAgICAgICBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5j
ZXMgPSBydW5MZW5ndGggLyBzaXplOworICAgICAgICAvLyBGb3IgMTYtYml0IGVzY2FwZSBzZXF1
ZW5jZXMsIHdlIGtub3cgdGhhdCBmaW5kRW5kT2ZSdW4oKSBoYXMgZ2l2ZW4gdXMgYSBjb250aWd1
b3VzIHJ1biBvZiBzZXF1ZW5jZXMKKyAgICAgICAgLy8gd2l0aG91dCBhbnkgaW50ZXJ2ZW5pbmcg
Y2hhcmFjdGVycywgc28gZGVjb2RlIHRoZSBydW4gd2l0aG91dCBhZGRpdGlvbmFsIGNoZWNrcy4K
KyAgICAgICAgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VzID0gcnVuTGVuZ3RoIC8gc2VxdWVuY2VT
aXplOwogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIucmVz
ZXJ2ZUNhcGFjaXR5KG51bWJlck9mU2VxdWVuY2VzKTsKICAgICAgICAgd2hpbGUgKG51bWJlck9m
U2VxdWVuY2VzLS0pIHsKICAgICAgICAgICAgIFVDaGFyIGNvZGVVbml0ID0gKHRvQVNDSUlIZXhW
YWx1ZShydW5bMl0pIDw8IDEyKSB8ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzNdKSA8PCA4KSB8ICh0
b0FTQ0lJSGV4VmFsdWUocnVuWzRdKSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShydW5bNV0pOwog
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoY29kZVVuaXQpOwotICAgICAgICAgICAgcnVuICs9
IHNpemU7CisgICAgICAgICAgICBydW4gKz0gc2VxdWVuY2VTaXplOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogfTsKIAogc3RydWN0IFVSTEVz
Y2FwZVNlcXVlbmNlIHsKLSAgICBlbnVtIHsgc2l6ZSA9IDMgfTsgLy8gZS5nLiAlNDEKLSAgICBz
dGF0aWMgc2l6ZV90IGZpbmRJblN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQg
c3RhcnQgPSAwKSB7IHJldHVybiBzdHJpbmcuZmluZCgnJScsIHN0YXJ0KTsgfQotICAgIHN0YXRp
YyBib29sIG1hdGNoU3RyaW5nUHJlZml4KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBz
dGFydCA9IDApCisgICAgZW51bSB7IHNlcXVlbmNlU2l6ZSA9IDMgfTsgLy8gZS5nLiAlNDEKKyAg
ICBzdGF0aWMgc2l6ZV90IGZpbmRJblN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90
IHN0YXJ0UG9zaXRpb24pIHsgcmV0dXJuIHN0cmluZy5maW5kKCclJywgc3RhcnRQb3NpdGlvbik7
IH0KKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRFbmRPZlJ1bihjb25zdCBTdHJpbmcmIHN0cmluZywg
c2l6ZV90IHN0YXJ0UG9zaXRpb24sIHNpemVfdCBlbmRQb3NpdGlvbikKICAgICB7Ci0gICAgICAg
IGlmIChzdHJpbmcubGVuZ3RoKCkgLSBzdGFydCA8IHNpemUpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBzdHJpbmdbc3RhcnRdID09ICclJyAmJiBpc0FTQ0lJSGV4
RGlnaXQoc3RyaW5nW3N0YXJ0ICsgMV0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3RhcnQg
KyAyXSk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSB0aGF0
IHRoZSBlbmNvZGluZ3MgbWF5IGJlIEJpZzUvR0JLLCB3aGljaCBoYXZlIHZhbHVlcyAKKyAgICAg
ICAgLy8gaW4gdGhlIHJhbmdlIDB4NDAgLSAweDdGIGFzIHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGVp
ciBzZXF1ZW5jZXMuIFRoZXNlIG5lZWQgdG8gYmUgcGFzc2VkCisgICAgICAgIC8vIHRvIHRoZSBk
ZWNvZGVyIGFzIHBhcnQgb2YgdGhlIHJ1biB0byBnZXQgdGhlIGNvcnJlY3Qgb3V0cHV0IChlLmcu
IHRoZSBydW4gJVhYYyVYWCVYWCVYWGNjYworICAgICAgICAvLyBzaG91bGQgYmUgZGVjb2RlZCBh
cyAlWFhjJVhYJVhYJVhYYyBmb2xsb3dlZCBieSBjYywgd2hlcmUgWCBpcyBhIGhleCBkaWdpdCBh
bmQgYyBpcyBhIGNoYXJhY3RlcgorICAgICAgICAvLyBpbiB0aGUgcmFuZ2UgMHg0MCAtIDB4N2Yp
LiBXZSBhcHByb3hpbWF0ZSB0aGlzIGJ5IHN0b3BwaW5nIHRoZSBhdCB0aGUgZmlyc3Qgb3V0IG9m
IHJhbmdlCisgICAgICAgIC8vIHZhbHVlLCBhdCBhIHNlY29uZCBjb25zZWN1dGl2ZSBpbi1yYW5n
ZSB2YWx1ZSwgb3IgYXQgYSAlLXNpZ24gdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYQorICAgICAg
ICAvLyB2YWxpZCBzZXF1ZW5jZS4gT3RoZXIgZW5jb2RpbmdzIGFyZSBzdGlsbCBjb3JyZWN0IGJl
Y2F1c2UgdGhlIGRlY29kZXIgd2lsbCBwYXNzIG9uIHRoZQorICAgICAgICAvLyBpbi1yYW5nZSBj
aGFyYWN0ZXJzIHVuY2hhbmdlZC4KKyAgICAgICAgc2l6ZV90IHJ1bkVuZCA9IHN0YXJ0UG9zaXRp
b247CisgICAgICAgIGJvb2wgdHJhaWxpbmdDaGFyYWN0ZXIgPSBmYWxzZTsKKyAgICAgICAgd2hp
bGUgKHJ1bkVuZCA8IGVuZFBvc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nW3J1bkVu
ZF0gPT0gJyUnKSB7CisgICAgICAgICAgICAgICAgaWYgKGVuZFBvc2l0aW9uIC0gcnVuRW5kID49
IHNlcXVlbmNlU2l6ZSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDFdKSAmJiBp
c0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDJdKSkgeworICAgICAgICAgICAgICAgICAg
ICBydW5FbmQgKz0gc2VxdWVuY2VTaXplOworICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ0No
YXJhY3RlciA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaW5nW3J1bkVuZF0gPj0gMHg0
MCAmJiBzdHJpbmdbcnVuRW5kXSA8IDB4ODAgJiYgIXRyYWlsaW5nQ2hhcmFjdGVyKSB7CisgICAg
ICAgICAgICAgICAgcnVuRW5kICs9IDE7CisgICAgICAgICAgICAgICAgdHJhaWxpbmdDaGFyYWN0
ZXIgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJ1bkVuZDsKICAgICB9CiAgICAgc3RhdGljIFN0cmlu
ZyBkZWNvZGVSdW4oY29uc3QgVUNoYXIqIHJ1biwgc2l6ZV90IHJ1bkxlbmd0aCwgY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZykKICAgICB7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZlNlcXVl
bmNlcyA9IHJ1bkxlbmd0aCAvIHNpemU7CisgICAgICAgIC8vIEZvciBVUkwgZXNjYXBlIHNlcXVl
bmNlcywgd2Uga25vdyB0aGF0IGZpbmRFbmRPZlJ1bigpIGhhcyBnaXZlbiB1cyBhIHJ1biB3aGVy
ZSBldmVyeSAlLXNpZ24gaW50cm9kdWNlcworICAgICAgICAvLyBhIHZhbGlkIGVzY2FwZSBzZXF1
ZW5jZSwgYnV0IHRoZXJlIG1heSBiZSBhIGNoYXJhY3RlciBiZXR3ZWVuIHRoZSBzZXF1ZW5jZXMu
CiAgICAgICAgIFZlY3RvcjxjaGFyLCA1MTI+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLnJlc2l6
ZShudW1iZXJPZlNlcXVlbmNlcyk7CisgICAgICAgIGJ1ZmZlci5yZXNpemUocnVuTGVuZ3RoKTsg
Ly8gVW5lc2NhcGluZyBoZXggc2VxdWVuY2VzIG9ubHkgbWFrZXMgdGhlIGxlbmd0aCBzbWFsbGVy
LgogICAgICAgICBjaGFyKiBwID0gYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgd2hpbGUgKG51bWJl
ck9mU2VxdWVuY2VzLS0pIHsKLSAgICAgICAgICAgICpwKysgPSAodG9BU0NJSUhleFZhbHVlKHJ1
blsxXSkgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUocnVuWzJdKTsKLSAgICAgICAgICAgIHJ1biAr
PSBzaXplOworICAgICAgICBjb25zdCBVQ2hhciogcnVuRW5kID0gcnVuICsgcnVuTGVuZ3RoOwor
ICAgICAgICB3aGlsZSAocnVuIDwgcnVuRW5kKSB7CisgICAgICAgICAgICBpZiAocnVuWzBdID09
ICclJykgeworICAgICAgICAgICAgICAgICpwKysgPSAodG9BU0NJSUhleFZhbHVlKHJ1blsxXSkg
PDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUocnVuWzJdKTsKKyAgICAgICAgICAgICAgICBydW4gKz0g
c2VxdWVuY2VTaXplOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqcCsr
ID0gcnVuWzBdOworICAgICAgICAgICAgICAgIHJ1biArPSAxOworICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVChidWZmZXIuc2l6ZSgpID09IHN0YXRpY19jYXN0PHNpemVf
dD4ocCAtIGJ1ZmZlci5kYXRhKCkpKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlci5zaXplKCkgPj0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihwIC0gYnVmZmVyLmRhdGEoKSkpOyAvLyBQcm92ZSBidWZmZXIg
bm90IG92ZXJydW4uCiAgICAgICAgIHJldHVybiAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2Rp
bmcgOiBVVEY4RW5jb2RpbmcoKSkuZGVjb2RlKGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0
YSgpKTsKICAgICB9CiB9OwpAQCAtOTUsOSArMTMxLDcgQEAgU3RyaW5nIGRlY29kZUVzY2FwZVNl
cXVlbmNlcyhjb25zdCBTdHJpbgogICAgIHNpemVfdCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAg
c2l6ZV90IGVuY29kZWRSdW5Qb3NpdGlvbjsKICAgICB3aGlsZSAoKGVuY29kZWRSdW5Qb3NpdGlv
biA9IEVzY2FwZVNlcXVlbmNlOjpmaW5kSW5TdHJpbmcoc3RyaW5nLCBzZWFyY2hQb3NpdGlvbikp
ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIHVuc2lnbmVkIGVuY29kZWRSdW5FbmQgPSBlbmNvZGVk
UnVuUG9zaXRpb247Ci0gICAgICAgIHdoaWxlIChsZW5ndGggLSBlbmNvZGVkUnVuRW5kID49IEVz
Y2FwZVNlcXVlbmNlOjpzaXplICYmIEVzY2FwZVNlcXVlbmNlOjptYXRjaFN0cmluZ1ByZWZpeChz
dHJpbmcsIGVuY29kZWRSdW5FbmQpKQotICAgICAgICAgICAgZW5jb2RlZFJ1bkVuZCArPSBFc2Nh
cGVTZXF1ZW5jZTo6c2l6ZTsKKyAgICAgICAgc2l6ZV90IGVuY29kZWRSdW5FbmQgPSBFc2NhcGVT
ZXF1ZW5jZTo6ZmluZEVuZE9mUnVuKHN0cmluZywgZW5jb2RlZFJ1blBvc2l0aW9uLCBsZW5ndGgp
OwogICAgICAgICBzZWFyY2hQb3NpdGlvbiA9IGVuY29kZWRSdW5FbmQ7CiAgICAgICAgIGlmIChl
bmNvZGVkUnVuRW5kID09IGVuY29kZWRSdW5Qb3NpdGlvbikgewogICAgICAgICAgICAgKytzZWFy
Y2hQb3NpdGlvbjsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDk1MykKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAxLTEzICBUb20g
U2VwZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRlY29kZUVzY2FwZVNlcXVl
bmNlcygpIG5vdCBjb3JyZWN0IGZvciBzb21lIGVuY29kaW5ncyAoR0JLLCBCaWc1LCAuLi4pLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFt
ZS1vbmxvYWQtR0JLLWNoYXIuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdC
Sy1jaGFyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbDoKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNo
YXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmlj
b2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5p
Y29kZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1C
aWc1LWNoYXIyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi5odG1sOiBBZGRlZC4KKwogMjAx
Mi0wMS0xMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gTWFyayBhIGZsYWt5IHRlc3QgYXMgZmxha3kKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1l
LW9ubG9hZC1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBA
QAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3Jp
cHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisK
KwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFt
ZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lm
cmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBs
P2NoYXJzZXQ9R0JLJnE9PGlmcmFtZSUyMG9ubG9hZD0lQzdPamF2YXNjcmlwdDphbGVydChkb2N1
bWVudC5kb21haW4pPjwvaWZyYW1lPiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJv
ci1HQkstY2hhci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9pbWctb25lcnJvci1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBh
IEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJl
cXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsK
K30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2Fs
aG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/
Y2hhcnNldD1HQksmcT08aW1nJTIwc3JjPSUyMDElMjBvbmVycm9yPSVDN09qYXZhc2NyaXB0OmFs
ZXJ0KGRvY3VtZW50LmRvbWFpbik+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
QmlnNS1jaGFyMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRl
IGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4g
cmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRy
dWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8v
bG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRh
Zy5wbD9jaGFyc2V0PUJpZzUmcT08c2NyaXB0PmFsZXJ0KC9YUyU4MVNTLyk8L3NjcmlwdD4iPgor
PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLUJpZzUtY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNl
IGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10
d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJp
ZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBv
ZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVy
bC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11
cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2lj
ZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVl
KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xv
Y2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWct
ZGVjb2RlLTE2Yml0LXVuaWNvZGUucGw/Y2hhcnNldD1CaWc1JnE9PHNjcmlwdD5hbGVydCgvWFMl
dTAwMjUyNTgxU1MvKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1
LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNo
YXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFT
Y3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3Qu
CisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1
LWNoYXItdHdpY2UtdXJsLWVuY29kZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNl
LXVybC1lbmNvZGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlv
dXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1CaWc1
JnE9PHNjcmlwdD5hbGVydCgvWFMlMjU4MVNTLyk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUp
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9j
YWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5w
bD9jaGFyc2V0PUJpZzUmcT08c2NyaXB0JTIwJTg5Zz5hbGVydChsb2NhdGlvbik8L3NjcmlwdD4i
PgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2
Yml0LXVuaWNvZGUucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJpdC11bmlj
b2RlLnBsCShyZXZpc2lvbiAxMDQ5NTMpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNv
ZGUucGwJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgc3ViIGRlY29kZTE2Qml0VW5p
Y29kZUVzY2FwZVNlcXVlbmNlcwogICAgIHJldHVybiAkcmVzdWx0OwogfQogCi1wcmludCAiQ29u
dGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcblxuIjsKK215ICRjaGFyc2V0VG9V
c2UgPSAkY2dpLT5wYXJhbSgnY2hhcnNldCcpID8gJGNnaS0+cGFyYW0oJ2NoYXJzZXQnKSA6ICJV
VEYtOCI7CitwcmludCAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9JGNoYXJzZXRU
b1VzZVxuXG4iOwogCiBwcmludCAiPCFET0NUWVBFIGh0bWw+XG4iOwogcHJpbnQgIjxodG1sPlxu
IjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122470</attachid>
            <date>2012-01-13 11:20:14 -0800</date>
            <delta_ts>2012-01-13 11:21:32 -0800</delta_ts>
            <desc>Patch, tests, fix changelog.</desc>
            <filename>patch_71316.txt</filename>
            <type>text/plain</type>
            <size>18643</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDk1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAxLTEzICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRlY29kZUVzY2FwZVNlcXVlbmNl
cygpIG5vdCBjb3JyZWN0IGZvciBzb21lIGVuY29kaW5ncyAoR0JLLCBCaWc1LCAuLi4pLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBhdm9pZHMg
dHJ1bmNhdGluZ3MgdGhlIHJ1bnMgcGFzc2VkIGludG8gdGhlIHZhcmlvdXMgY2hhcnNldCBkZWNv
ZGVycy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1
ZW5jZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlVuaWNvZGUxNkJpdEVzY2FwZVNlcXVlbmNlOjpm
aW5kSW5TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VW5pY29kZTE2Qml0RXNjYXBlU2VxdWVu
Y2U6OmZpbmRFbmRPZlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpVbmljb2RlMTZCaXRFc2NhcGVT
ZXF1ZW5jZTo6ZGVjb2RlUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEVzY2FwZVNlcXVlbmNl
OjpmaW5kSW5TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VVJMRXNjYXBlU2VxdWVuY2U6OmZp
bmRFbmRPZlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpVUkxFc2NhcGVTZXF1ZW5jZTo6ZGVjb2Rl
UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUVzY2FwZVNlcXVlbmNlcyk6CisKIDIwMTIt
MDEtMTMgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAKICAg
ICAgICAgW3NvdXBdIEluaXRpYWxpemUgbV9zb3VwRmxhZ3MgaW4gYWxsIFJlc291cmNlUmVzcG9u
c2UgY29uc3RydWN0b3JzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNv
ZGVFc2NhcGVTZXF1ZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCShyZXZpc2lvbiAxMDQ5NTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBEYW5pZWwg
QmF0ZXMgKGRiYXRlc0BpbnR1ZGF0YS5jb20pLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChjKSAyMDEyIEdvb2dsZSwgaW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOSw2ICsxMCw5IEBACiAgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKQEAgLTM2LDUyICs0MCw4NCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIFNlZSA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Q
ZXJjZW50LWVuY29kaW5nI05vbi1zdGFuZGFyZF9pbXBsZW1lbnRhdGlvbnM+Lgogc3RydWN0IFVu
aWNvZGUxNkJpdEVzY2FwZVNlcXVlbmNlIHsKLSAgICBlbnVtIHsgc2l6ZSA9IDYgfTsgLy8gZS5n
LiAldTI2QzQKLSAgICBzdGF0aWMgc2l6ZV90IGZpbmRJblN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKSB7IHJldHVybiBzdHJpbmcuZmluZCgiJXUiLCBzdGFy
dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBtYXRjaFN0cmluZ1ByZWZpeChjb25zdCBTdHJpbmcmIHN0
cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKQorICAgIGVudW0geyBzZXF1ZW5jZVNpemUgPSA2IH07
IC8vIGUuZy4gJXUyNkM0CisgICAgc3RhdGljIHNpemVfdCBmaW5kSW5TdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIHNpemVfdCBzdGFydFBvc2l0aW9uKSB7IHJldHVybiBzdHJpbmcuZmluZCgi
JXUiLCBzdGFydFBvc2l0aW9uKTsgfQorICAgIHN0YXRpYyBzaXplX3QgZmluZEVuZE9mUnVuKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3NpdGlvbiwgc2l6ZV90IGVuZFBvc2l0
aW9uKQogICAgIHsKLSAgICAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSAtIHN0YXJ0IDwgc2l6ZSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ1tzdGFydF0g
PT0gJyUnICYmIHN0cmluZ1tzdGFydCArIDFdID09ICd1JwotICAgICAgICAgICAgJiYgaXNBU0NJ
SUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDJdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0
YXJ0ICsgM10pCi0gICAgICAgICAgICAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsg
NF0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3RhcnQgKyA1XSk7CisgICAgICAgIHNpemVf
dCBydW5FbmQgPSBzdGFydFBvc2l0aW9uOworICAgICAgICB3aGlsZSAoZW5kUG9zaXRpb24gLSBy
dW5FbmQgPj0gc2VxdWVuY2VTaXplICYmIHN0cmluZ1tydW5FbmRdID09ICclJyAmJiBzdHJpbmdb
cnVuRW5kICsgMV0gPT0gJ3UnCisgICAgICAgICAgICAgICAmJiBpc0FTQ0lJSGV4RGlnaXQoc3Ry
aW5nW3J1bkVuZCArIDJdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDNdKQor
ICAgICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyA0XSkgJiYg
aXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyA1XSkpIHsKKyAgICAgICAgICAgIHJ1bkVu
ZCArPSBzZXF1ZW5jZVNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJ1bkVuZDsKICAg
ICB9CiAgICAgc3RhdGljIFN0cmluZyBkZWNvZGVSdW4oY29uc3QgVUNoYXIqIHJ1biwgc2l6ZV90
IHJ1bkxlbmd0aCwgY29uc3QgVGV4dEVuY29kaW5nJikKICAgICB7CiAgICAgICAgIC8vIEVhY2gg
JXUtZXNjYXBlIHNlcXVlbmNlIHJlcHJlc2VudHMgYSBVVEYtMTYgY29kZSB1bml0LgogICAgICAg
ICAvLyBTZWUgPGh0dHA6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvaXJpLWVkaXQvZHJhZnQt
ZHVlcnN0LWlyaS5odG1sI2FuY2hvcjI5Pi4KLSAgICAgICAgc2l6ZV90IG51bWJlck9mU2VxdWVu
Y2VzID0gcnVuTGVuZ3RoIC8gc2l6ZTsKKyAgICAgICAgLy8gRm9yIDE2LWJpdCBlc2NhcGUgc2Vx
dWVuY2VzLCB3ZSBrbm93IHRoYXQgZmluZEVuZE9mUnVuKCkgaGFzIGdpdmVuIHVzIGEgY29udGln
dW91cyBydW4gb2Ygc2VxdWVuY2VzCisgICAgICAgIC8vIHdpdGhvdXQgYW55IGludGVydmVuaW5n
IGNoYXJhY3RlcnMsIHNvIGRlY29kZSB0aGUgcnVuIHdpdGhvdXQgYWRkaXRpb25hbCBjaGVja3Mu
CisgICAgICAgIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlcyA9IHJ1bkxlbmd0aCAvIHNlcXVlbmNl
U2l6ZTsKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBidWlsZGVyLnJl
c2VydmVDYXBhY2l0eShudW1iZXJPZlNlcXVlbmNlcyk7CiAgICAgICAgIHdoaWxlIChudW1iZXJP
ZlNlcXVlbmNlcy0tKSB7CiAgICAgICAgICAgICBVQ2hhciBjb2RlVW5pdCA9ICh0b0FTQ0lJSGV4
VmFsdWUocnVuWzJdKSA8PCAxMikgfCAodG9BU0NJSUhleFZhbHVlKHJ1blszXSkgPDwgOCkgfCAo
dG9BU0NJSUhleFZhbHVlKHJ1bls0XSkgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUocnVuWzVdKTsK
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNvZGVVbml0KTsKLSAgICAgICAgICAgIHJ1biAr
PSBzaXplOworICAgICAgICAgICAgcnVuICs9IHNlcXVlbmNlU2l6ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIH07CiAKIHN0cnVjdCBVUkxF
c2NhcGVTZXF1ZW5jZSB7Ci0gICAgZW51bSB7IHNpemUgPSAzIH07IC8vIGUuZy4gJTQxCi0gICAg
c3RhdGljIHNpemVfdCBmaW5kSW5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVk
IHN0YXJ0ID0gMCkgeyByZXR1cm4gc3RyaW5nLmZpbmQoJyUnLCBzdGFydCk7IH0KLSAgICBzdGF0
aWMgYm9vbCBtYXRjaFN0cmluZ1ByZWZpeChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQg
c3RhcnQgPSAwKQorICAgIGVudW0geyBzZXF1ZW5jZVNpemUgPSAzIH07IC8vIGUuZy4gJTQxCisg
ICAgc3RhdGljIHNpemVfdCBmaW5kSW5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHNpemVf
dCBzdGFydFBvc2l0aW9uKSB7IHJldHVybiBzdHJpbmcuZmluZCgnJScsIHN0YXJ0UG9zaXRpb24p
OyB9CisgICAgc3RhdGljIHNpemVfdCBmaW5kRW5kT2ZSdW4oY29uc3QgU3RyaW5nJiBzdHJpbmcs
IHNpemVfdCBzdGFydFBvc2l0aW9uLCBzaXplX3QgZW5kUG9zaXRpb24pCiAgICAgewotICAgICAg
ICBpZiAoc3RyaW5nLmxlbmd0aCgpIC0gc3RhcnQgPCBzaXplKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXR1cm4gc3RyaW5nW3N0YXJ0XSA9PSAnJScgJiYgaXNBU0NJSUhl
eERpZ2l0KHN0cmluZ1tzdGFydCArIDFdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0
ICsgMl0pOworICAgICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgdGhh
dCB0aGUgZW5jb2RpbmdzIG1heSBiZSBCaWc1L0dCSywgd2hpY2ggaGF2ZSB2YWx1ZXMgCisgICAg
ICAgIC8vIGluIHRoZSByYW5nZSAweDQwIC0gMHg3RiBhcyB0aGUgc2Vjb25kIGJ5dGUgb2YgdGhl
aXIgc2VxdWVuY2VzLiBUaGVzZSBuZWVkIHRvIGJlIHBhc3NlZAorICAgICAgICAvLyB0byB0aGUg
ZGVjb2RlciBhcyBwYXJ0IG9mIHRoZSBydW4gdG8gZ2V0IHRoZSBjb3JyZWN0IG91dHB1dCAoZS5n
LiB0aGUgcnVuICVYWGMlWFglWFglWFhjY2MKKyAgICAgICAgLy8gc2hvdWxkIGJlIGRlY29kZWQg
YXMgJVhYYyVYWCVYWCVYWGMgZm9sbG93ZWQgYnkgY2MsIHdoZXJlIFggaXMgYSBoZXggZGlnaXQg
YW5kIGMgaXMgYSBjaGFyYWN0ZXIKKyAgICAgICAgLy8gaW4gdGhlIHJhbmdlIDB4NDAgLSAweDdm
KS4gV2UgYXBwcm94aW1hdGUgdGhpcyBieSBzdG9wcGluZyB0aGUgYXQgdGhlIGZpcnN0IG91dCBv
ZiByYW5nZQorICAgICAgICAvLyB2YWx1ZSwgYXQgYSBzZWNvbmQgY29uc2VjdXRpdmUgaW4tcmFu
Z2UgdmFsdWUsIG9yIGF0IGEgJS1zaWduIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGEKKyAgICAg
ICAgLy8gdmFsaWQgc2VxdWVuY2UuIE90aGVyIGVuY29kaW5ncyBhcmUgc3RpbGwgY29ycmVjdCBi
ZWNhdXNlIHRoZSBkZWNvZGVyIHdpbGwgcGFzcyBvbiB0aGUKKyAgICAgICAgLy8gaW4tcmFuZ2Ug
Y2hhcmFjdGVycyB1bmNoYW5nZWQuCisgICAgICAgIHNpemVfdCBydW5FbmQgPSBzdGFydFBvc2l0
aW9uOworICAgICAgICBib29sIHRyYWlsaW5nQ2hhcmFjdGVyID0gZmFsc2U7CisgICAgICAgIHdo
aWxlIChydW5FbmQgPCBlbmRQb3NpdGlvbikgeworICAgICAgICAgICAgaWYgKHN0cmluZ1tydW5F
bmRdID09ICclJykgeworICAgICAgICAgICAgICAgIGlmIChlbmRQb3NpdGlvbiAtIHJ1bkVuZCA+
PSBzZXF1ZW5jZVNpemUgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyAxXSkgJiYg
aXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyAyXSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcnVuRW5kICs9IHNlcXVlbmNlU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdD
aGFyYWN0ZXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmluZ1tydW5FbmRdID49IDB4
NDAgJiYgc3RyaW5nW3J1bkVuZF0gPCAweDgwICYmICF0cmFpbGluZ0NoYXJhY3RlcikgeworICAg
ICAgICAgICAgICAgIHJ1bkVuZCArPSAxOworICAgICAgICAgICAgICAgIHRyYWlsaW5nQ2hhcmFj
dGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBydW5FbmQ7CiAgICAgfQogICAgIHN0YXRpYyBTdHJp
bmcgZGVjb2RlUnVuKGNvbnN0IFVDaGFyKiBydW4sIHNpemVfdCBydW5MZW5ndGgsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcpCiAgICAgewotICAgICAgICBzaXplX3QgbnVtYmVyT2ZTZXF1
ZW5jZXMgPSBydW5MZW5ndGggLyBzaXplOworICAgICAgICAvLyBGb3IgVVJMIGVzY2FwZSBzZXF1
ZW5jZXMsIHdlIGtub3cgdGhhdCBmaW5kRW5kT2ZSdW4oKSBoYXMgZ2l2ZW4gdXMgYSBydW4gd2hl
cmUgZXZlcnkgJS1zaWduIGludHJvZHVjZXMKKyAgICAgICAgLy8gYSB2YWxpZCBlc2NhcGUgc2Vx
dWVuY2UsIGJ1dCB0aGVyZSBtYXkgYmUgYSBjaGFyYWN0ZXIgYmV0d2VlbiB0aGUgc2VxdWVuY2Vz
LgogICAgICAgICBWZWN0b3I8Y2hhciwgNTEyPiBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5yZXNp
emUobnVtYmVyT2ZTZXF1ZW5jZXMpOworICAgICAgICBidWZmZXIucmVzaXplKHJ1bkxlbmd0aCk7
IC8vIFVuZXNjYXBpbmcgaGV4IHNlcXVlbmNlcyBvbmx5IG1ha2VzIHRoZSBsZW5ndGggc21hbGxl
ci4KICAgICAgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIHdoaWxlIChudW1i
ZXJPZlNlcXVlbmNlcy0tKSB7Ci0gICAgICAgICAgICAqcCsrID0gKHRvQVNDSUlIZXhWYWx1ZShy
dW5bMV0pIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKHJ1blsyXSk7Ci0gICAgICAgICAgICBydW4g
Kz0gc2l6ZTsKKyAgICAgICAgY29uc3QgVUNoYXIqIHJ1bkVuZCA9IHJ1biArIHJ1bkxlbmd0aDsK
KyAgICAgICAgd2hpbGUgKHJ1biA8IHJ1bkVuZCkgeworICAgICAgICAgICAgaWYgKHJ1blswXSA9
PSAnJScpIHsKKyAgICAgICAgICAgICAgICAqcCsrID0gKHRvQVNDSUlIZXhWYWx1ZShydW5bMV0p
IDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKHJ1blsyXSk7CisgICAgICAgICAgICAgICAgcnVuICs9
IHNlcXVlbmNlU2l6ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKnAr
KyA9IHJ1blswXTsKKyAgICAgICAgICAgICAgICBydW4gKz0gMTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBBU1NFUlQoYnVmZmVyLnNpemUoKSA9PSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHAgLSBidWZmZXIuZGF0YSgpKSk7CisgICAgICAgIEFTU0VSVChidWZmZXIuc2l6ZSgpID49
IHN0YXRpY19jYXN0PHNpemVfdD4ocCAtIGJ1ZmZlci5kYXRhKCkpKTsgLy8gUHJvdmUgYnVmZmVy
IG5vdCBvdmVycnVuLgogICAgICAgICByZXR1cm4gKGVuY29kaW5nLmlzVmFsaWQoKSA/IGVuY29k
aW5nIDogVVRGOEVuY29kaW5nKCkpLmRlY29kZShidWZmZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRh
dGEoKSk7CiAgICAgfQogfTsKQEAgLTk1LDkgKzEzMSw3IEBAIFN0cmluZyBkZWNvZGVFc2NhcGVT
ZXF1ZW5jZXMoY29uc3QgU3RyaW4KICAgICBzaXplX3Qgc2VhcmNoUG9zaXRpb24gPSAwOwogICAg
IHNpemVfdCBlbmNvZGVkUnVuUG9zaXRpb247CiAgICAgd2hpbGUgKChlbmNvZGVkUnVuUG9zaXRp
b24gPSBFc2NhcGVTZXF1ZW5jZTo6ZmluZEluU3RyaW5nKHN0cmluZywgc2VhcmNoUG9zaXRpb24p
KSAhPSBub3RGb3VuZCkgewotICAgICAgICB1bnNpZ25lZCBlbmNvZGVkUnVuRW5kID0gZW5jb2Rl
ZFJ1blBvc2l0aW9uOwotICAgICAgICB3aGlsZSAobGVuZ3RoIC0gZW5jb2RlZFJ1bkVuZCA+PSBF
c2NhcGVTZXF1ZW5jZTo6c2l6ZSAmJiBFc2NhcGVTZXF1ZW5jZTo6bWF0Y2hTdHJpbmdQcmVmaXgo
c3RyaW5nLCBlbmNvZGVkUnVuRW5kKSkKLSAgICAgICAgICAgIGVuY29kZWRSdW5FbmQgKz0gRXNj
YXBlU2VxdWVuY2U6OnNpemU7CisgICAgICAgIHNpemVfdCBlbmNvZGVkUnVuRW5kID0gRXNjYXBl
U2VxdWVuY2U6OmZpbmRFbmRPZlJ1bihzdHJpbmcsIGVuY29kZWRSdW5Qb3NpdGlvbiwgbGVuZ3Ro
KTsKICAgICAgICAgc2VhcmNoUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOwogICAgICAgICBpZiAo
ZW5jb2RlZFJ1bkVuZCA9PSBlbmNvZGVkUnVuUG9zaXRpb24pIHsKICAgICAgICAgICAgICsrc2Vh
cmNoUG9zaXRpb247CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDQ5NTMpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0wMS0xMyAgVG9t
IFNlcGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KKworICAgICAgICBkZWNvZGVFc2NhcGVTZXF1
ZW5jZXMoKSBub3QgY29ycmVjdCBmb3Igc29tZSBlbmNvZGluZ3MgKEdCSywgQmlnNSwgLi4uKS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzE2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJh
bWUtb25sb2FkLUdCSy1jaGFyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1H
QkstY2hhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNvZGUucGw6Cisg
ICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1j
aGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5p
Y29kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVu
aWNvZGUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRtbDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
QmlnNS1jaGFyMi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIuaHRtbDogQWRkZWQuCisKIDIw
MTItMDEtMTMgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW1dIE1hcmsgYSBmbGFreSB0ZXN0IGFzIGZsYWt5CkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFt
ZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMg
QEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2Ny
aXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0Lgor
CisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJh
bWUtb25sb2FkLUdCSy1jaGFyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9p
ZnJhbWUtb25sb2FkLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUp
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9j
YWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5w
bD9jaGFyc2V0PUdCSyZxPTxpZnJhbWUlMjBvbmxvYWQ9JUM3T2phdmFzY3JpcHQ6YWxlcnQoZG9j
dW1lbnQuZG9tYWluKT48L2lmcmFtZT4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJy
b3ItR0JLLWNoYXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUg
YSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiBy
ZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9pbWctb25lcnJvci1HQkstY2hhci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBs
P2NoYXJzZXQ9R0JLJnE9PGltZyUyMHNyYz0lMjAxJTIwb25lcnJvcj0lQzdPamF2YXNjcmlwdDph
bGVydChkb2N1bWVudC5kb21haW4pPiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LUJpZzUtY2hhcjItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjItZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0
ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGlu
IHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0
cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDov
L2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0
YWcucGw/Y2hhcnNldD1CaWc1JnE9PHNjcmlwdD5hbGVydCgvWFMlODFTUy8pPC9zY3JpcHQ+Ij4K
KzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NB
R0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJj
ZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
dHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1C
aWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUg
b2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11
cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2Ut
dXJsLWVuY29kZS0xNmJpdC11bmljb2RlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdp
Y2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1
ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9s
b2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFn
LWRlY29kZS0xNmJpdC11bmljb2RlLnBsP2NoYXJzZXQ9QmlnNSZxPTxzY3JpcHQ+YWxlcnQoL1hT
JXUwMDI1MjU4MVNTLyk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmln
NS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1j
aGFyLXR3aWNlLXVybC1lbmNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZh
U2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0
LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmln
NS1jaGFyLXR3aWNlLXVybC1lbmNvZGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2lj
ZS11cmwtZW5jb2RlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9z
ZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP2NoYXJzZXQ9Qmln
NSZxPTxzY3JpcHQ+YWxlcnQoL1hTJTI1ODFTUy8pPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVl
KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xv
Y2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcu
cGw/Y2hhcnNldD1CaWc1JnE9PHNjcmlwdCUyMCU4OWc+YWxlcnQobG9jYXRpb24pPC9zY3JpcHQ+
Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0x
NmJpdC11bmljb2RlLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5p
Y29kZS5wbAkocmV2aXNpb24gMTA0OTUzKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJpdC11bmlj
b2RlLnBsCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIHN1YiBkZWNvZGUxNkJpdFVu
aWNvZGVFc2NhcGVTZXF1ZW5jZXMKICAgICByZXR1cm4gJHJlc3VsdDsKIH0KIAotcHJpbnQgIkNv
bnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04XG5cbiI7CitteSAkY2hhcnNldFRv
VXNlID0gJGNnaS0+cGFyYW0oJ2NoYXJzZXQnKSA/ICRjZ2ktPnBhcmFtKCdjaGFyc2V0JykgOiAi
VVRGLTgiOworcHJpbnQgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSRjaGFyc2V0
VG9Vc2VcblxuIjsKIAogcHJpbnQgIjwhRE9DVFlQRSBodG1sPlxuIjsKIHByaW50ICI8aHRtbD5c
biI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122472</attachid>
            <date>2012-01-13 11:21:32 -0800</date>
            <delta_ts>2012-01-18 14:41:46 -0800</delta_ts>
            <desc>Patch, tests, fix changelog again.</desc>
            <filename>patch_71316.txt</filename>
            <type>text/plain</type>
            <size>18642</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDk1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAxLTEzICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRlY29kZUVzY2FwZVNlcXVlbmNl
cygpIG5vdCBjb3JyZWN0IGZvciBzb21lIGVuY29kaW5ncyAoR0JLLCBCaWc1LCAuLi4pLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBhdm9pZHMg
dHJ1bmNhdGluZyB0aGUgcnVucyBwYXNzZWQgaW50byB0aGUgdmFyaW91cyBjaGFyc2V0IGRlY29k
ZXJzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVl
bmNlcy5oOgorICAgICAgICAoV2ViQ29yZTo6VW5pY29kZTE2Qml0RXNjYXBlU2VxdWVuY2U6OmZp
bmRJblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpVbmljb2RlMTZCaXRFc2NhcGVTZXF1ZW5j
ZTo6ZmluZEVuZE9mUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWNvZGUxNkJpdEVzY2FwZVNl
cXVlbmNlOjpkZWNvZGVSdW4pOgorICAgICAgICAoV2ViQ29yZTo6VVJMRXNjYXBlU2VxdWVuY2U6
OmZpbmRJblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpVUkxFc2NhcGVTZXF1ZW5jZTo6Zmlu
ZEVuZE9mUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEVzY2FwZVNlcXVlbmNlOjpkZWNvZGVS
dW4pOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlRXNjYXBlU2VxdWVuY2VzKToKKwogMjAxMi0w
MS0xMyAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8a3Vib0Bwcm9mdXNpb24ubW9iaT4KIAogICAg
ICAgICBbc291cF0gSW5pdGlhbGl6ZSBtX3NvdXBGbGFncyBpbiBhbGwgUmVzb3VyY2VSZXNwb25z
ZSBjb25zdHJ1Y3RvcnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29k
ZUVzY2FwZVNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9uIDEwNDk1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIERhbmllbCBC
YXRlcyAoZGJhdGVzQGludHVkYXRhLmNvbSkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTIgR29vZ2xlLCBpbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05LDYgKzEwLDkgQEAKICAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpAQCAtMzYsNTIgKzQwLDg0IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gU2VlIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Bl
cmNlbnQtZW5jb2RpbmcjTm9uLXN0YW5kYXJkX2ltcGxlbWVudGF0aW9ucz4uCiBzdHJ1Y3QgVW5p
Y29kZTE2Qml0RXNjYXBlU2VxdWVuY2UgewotICAgIGVudW0geyBzaXplID0gNiB9OyAvLyBlLmcu
ICV1MjZDNAotICAgIHN0YXRpYyBzaXplX3QgZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIHsgcmV0dXJuIHN0cmluZy5maW5kKCIldSIsIHN0YXJ0
KTsgfQotICAgIHN0YXRpYyBib29sIG1hdGNoU3RyaW5nUHJlZml4KGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCB1bnNpZ25lZCBzdGFydCA9IDApCisgICAgZW51bSB7IHNlcXVlbmNlU2l6ZSA9IDYgfTsg
Ly8gZS5nLiAldTI2QzQKKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRJblN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0UG9zaXRpb24pIHsgcmV0dXJuIHN0cmluZy5maW5kKCIl
dSIsIHN0YXJ0UG9zaXRpb24pOyB9CisgICAgc3RhdGljIHNpemVfdCBmaW5kRW5kT2ZSdW4oY29u
c3QgU3RyaW5nJiBzdHJpbmcsIHNpemVfdCBzdGFydFBvc2l0aW9uLCBzaXplX3QgZW5kUG9zaXRp
b24pCiAgICAgewotICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIC0gc3RhcnQgPCBzaXplKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gc3RyaW5nW3N0YXJ0XSA9
PSAnJScgJiYgc3RyaW5nW3N0YXJ0ICsgMV0gPT0gJ3UnCi0gICAgICAgICAgICAmJiBpc0FTQ0lJ
SGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsgMl0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3Rh
cnQgKyAzXSkKLSAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3RhcnQgKyA0
XSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDVdKTsKKyAgICAgICAgc2l6ZV90
IHJ1bkVuZCA9IHN0YXJ0UG9zaXRpb247CisgICAgICAgIHdoaWxlIChlbmRQb3NpdGlvbiAtIHJ1
bkVuZCA+PSBzZXF1ZW5jZVNpemUgJiYgc3RyaW5nW3J1bkVuZF0gPT0gJyUnICYmIHN0cmluZ1ty
dW5FbmQgKyAxXSA9PSAndScKKyAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJp
bmdbcnVuRW5kICsgMl0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5kICsgM10pCisg
ICAgICAgICAgICAgICAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDRdKSAmJiBp
c0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDVdKSkgeworICAgICAgICAgICAgcnVuRW5k
ICs9IHNlcXVlbmNlU2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnVuRW5kOwogICAg
IH0KICAgICBzdGF0aWMgU3RyaW5nIGRlY29kZVJ1bihjb25zdCBVQ2hhciogcnVuLCBzaXplX3Qg
cnVuTGVuZ3RoLCBjb25zdCBUZXh0RW5jb2RpbmcmKQogICAgIHsKICAgICAgICAgLy8gRWFjaCAl
dS1lc2NhcGUgc2VxdWVuY2UgcmVwcmVzZW50cyBhIFVURi0xNiBjb2RlIHVuaXQuCiAgICAgICAg
IC8vIFNlZSA8aHR0cDovL3d3dy53My5vcmcvSW50ZXJuYXRpb25hbC9pcmktZWRpdC9kcmFmdC1k
dWVyc3QtaXJpLmh0bWwjYW5jaG9yMjk+LgotICAgICAgICBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5j
ZXMgPSBydW5MZW5ndGggLyBzaXplOworICAgICAgICAvLyBGb3IgMTYtYml0IGVzY2FwZSBzZXF1
ZW5jZXMsIHdlIGtub3cgdGhhdCBmaW5kRW5kT2ZSdW4oKSBoYXMgZ2l2ZW4gdXMgYSBjb250aWd1
b3VzIHJ1biBvZiBzZXF1ZW5jZXMKKyAgICAgICAgLy8gd2l0aG91dCBhbnkgaW50ZXJ2ZW5pbmcg
Y2hhcmFjdGVycywgc28gZGVjb2RlIHRoZSBydW4gd2l0aG91dCBhZGRpdGlvbmFsIGNoZWNrcy4K
KyAgICAgICAgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VzID0gcnVuTGVuZ3RoIC8gc2VxdWVuY2VT
aXplOwogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIucmVz
ZXJ2ZUNhcGFjaXR5KG51bWJlck9mU2VxdWVuY2VzKTsKICAgICAgICAgd2hpbGUgKG51bWJlck9m
U2VxdWVuY2VzLS0pIHsKICAgICAgICAgICAgIFVDaGFyIGNvZGVVbml0ID0gKHRvQVNDSUlIZXhW
YWx1ZShydW5bMl0pIDw8IDEyKSB8ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzNdKSA8PCA4KSB8ICh0
b0FTQ0lJSGV4VmFsdWUocnVuWzRdKSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShydW5bNV0pOwog
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoY29kZVVuaXQpOwotICAgICAgICAgICAgcnVuICs9
IHNpemU7CisgICAgICAgICAgICBydW4gKz0gc2VxdWVuY2VTaXplOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogfTsKIAogc3RydWN0IFVSTEVz
Y2FwZVNlcXVlbmNlIHsKLSAgICBlbnVtIHsgc2l6ZSA9IDMgfTsgLy8gZS5nLiAlNDEKLSAgICBz
dGF0aWMgc2l6ZV90IGZpbmRJblN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQg
c3RhcnQgPSAwKSB7IHJldHVybiBzdHJpbmcuZmluZCgnJScsIHN0YXJ0KTsgfQotICAgIHN0YXRp
YyBib29sIG1hdGNoU3RyaW5nUHJlZml4KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBz
dGFydCA9IDApCisgICAgZW51bSB7IHNlcXVlbmNlU2l6ZSA9IDMgfTsgLy8gZS5nLiAlNDEKKyAg
ICBzdGF0aWMgc2l6ZV90IGZpbmRJblN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90
IHN0YXJ0UG9zaXRpb24pIHsgcmV0dXJuIHN0cmluZy5maW5kKCclJywgc3RhcnRQb3NpdGlvbik7
IH0KKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRFbmRPZlJ1bihjb25zdCBTdHJpbmcmIHN0cmluZywg
c2l6ZV90IHN0YXJ0UG9zaXRpb24sIHNpemVfdCBlbmRQb3NpdGlvbikKICAgICB7Ci0gICAgICAg
IGlmIChzdHJpbmcubGVuZ3RoKCkgLSBzdGFydCA8IHNpemUpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBzdHJpbmdbc3RhcnRdID09ICclJyAmJiBpc0FTQ0lJSGV4
RGlnaXQoc3RyaW5nW3N0YXJ0ICsgMV0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3RhcnQg
KyAyXSk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSB0aGF0
IHRoZSBlbmNvZGluZ3MgbWF5IGJlIEJpZzUvR0JLLCB3aGljaCBoYXZlIHZhbHVlcyAKKyAgICAg
ICAgLy8gaW4gdGhlIHJhbmdlIDB4NDAgLSAweDdGIGFzIHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGVp
ciBzZXF1ZW5jZXMuIFRoZXNlIG5lZWQgdG8gYmUgcGFzc2VkCisgICAgICAgIC8vIHRvIHRoZSBk
ZWNvZGVyIGFzIHBhcnQgb2YgdGhlIHJ1biB0byBnZXQgdGhlIGNvcnJlY3Qgb3V0cHV0IChlLmcu
IHRoZSBydW4gJVhYYyVYWCVYWCVYWGNjYworICAgICAgICAvLyBzaG91bGQgYmUgZGVjb2RlZCBh
cyAlWFhjJVhYJVhYJVhYYyBmb2xsb3dlZCBieSBjYywgd2hlcmUgWCBpcyBhIGhleCBkaWdpdCBh
bmQgYyBpcyBhIGNoYXJhY3RlcgorICAgICAgICAvLyBpbiB0aGUgcmFuZ2UgMHg0MCAtIDB4N2Yp
LiBXZSBhcHByb3hpbWF0ZSB0aGlzIGJ5IHN0b3BwaW5nIHRoZSBhdCB0aGUgZmlyc3Qgb3V0IG9m
IHJhbmdlCisgICAgICAgIC8vIHZhbHVlLCBhdCBhIHNlY29uZCBjb25zZWN1dGl2ZSBpbi1yYW5n
ZSB2YWx1ZSwgb3IgYXQgYSAlLXNpZ24gdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYQorICAgICAg
ICAvLyB2YWxpZCBzZXF1ZW5jZS4gT3RoZXIgZW5jb2RpbmdzIGFyZSBzdGlsbCBjb3JyZWN0IGJl
Y2F1c2UgdGhlIGRlY29kZXIgd2lsbCBwYXNzIG9uIHRoZQorICAgICAgICAvLyBpbi1yYW5nZSBj
aGFyYWN0ZXJzIHVuY2hhbmdlZC4KKyAgICAgICAgc2l6ZV90IHJ1bkVuZCA9IHN0YXJ0UG9zaXRp
b247CisgICAgICAgIGJvb2wgdHJhaWxpbmdDaGFyYWN0ZXIgPSBmYWxzZTsKKyAgICAgICAgd2hp
bGUgKHJ1bkVuZCA8IGVuZFBvc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nW3J1bkVu
ZF0gPT0gJyUnKSB7CisgICAgICAgICAgICAgICAgaWYgKGVuZFBvc2l0aW9uIC0gcnVuRW5kID49
IHNlcXVlbmNlU2l6ZSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDFdKSAmJiBp
c0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDJdKSkgeworICAgICAgICAgICAgICAgICAg
ICBydW5FbmQgKz0gc2VxdWVuY2VTaXplOworICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ0No
YXJhY3RlciA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaW5nW3J1bkVuZF0gPj0gMHg0
MCAmJiBzdHJpbmdbcnVuRW5kXSA8IDB4ODAgJiYgIXRyYWlsaW5nQ2hhcmFjdGVyKSB7CisgICAg
ICAgICAgICAgICAgcnVuRW5kICs9IDE7CisgICAgICAgICAgICAgICAgdHJhaWxpbmdDaGFyYWN0
ZXIgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJ1bkVuZDsKICAgICB9CiAgICAgc3RhdGljIFN0cmlu
ZyBkZWNvZGVSdW4oY29uc3QgVUNoYXIqIHJ1biwgc2l6ZV90IHJ1bkxlbmd0aCwgY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZykKICAgICB7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZlNlcXVl
bmNlcyA9IHJ1bkxlbmd0aCAvIHNpemU7CisgICAgICAgIC8vIEZvciBVUkwgZXNjYXBlIHNlcXVl
bmNlcywgd2Uga25vdyB0aGF0IGZpbmRFbmRPZlJ1bigpIGhhcyBnaXZlbiB1cyBhIHJ1biB3aGVy
ZSBldmVyeSAlLXNpZ24gaW50cm9kdWNlcworICAgICAgICAvLyBhIHZhbGlkIGVzY2FwZSBzZXF1
ZW5jZSwgYnV0IHRoZXJlIG1heSBiZSBhIGNoYXJhY3RlciBiZXR3ZWVuIHRoZSBzZXF1ZW5jZXMu
CiAgICAgICAgIFZlY3RvcjxjaGFyLCA1MTI+IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLnJlc2l6
ZShudW1iZXJPZlNlcXVlbmNlcyk7CisgICAgICAgIGJ1ZmZlci5yZXNpemUocnVuTGVuZ3RoKTsg
Ly8gVW5lc2NhcGluZyBoZXggc2VxdWVuY2VzIG9ubHkgbWFrZXMgdGhlIGxlbmd0aCBzbWFsbGVy
LgogICAgICAgICBjaGFyKiBwID0gYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgd2hpbGUgKG51bWJl
ck9mU2VxdWVuY2VzLS0pIHsKLSAgICAgICAgICAgICpwKysgPSAodG9BU0NJSUhleFZhbHVlKHJ1
blsxXSkgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUocnVuWzJdKTsKLSAgICAgICAgICAgIHJ1biAr
PSBzaXplOworICAgICAgICBjb25zdCBVQ2hhciogcnVuRW5kID0gcnVuICsgcnVuTGVuZ3RoOwor
ICAgICAgICB3aGlsZSAocnVuIDwgcnVuRW5kKSB7CisgICAgICAgICAgICBpZiAocnVuWzBdID09
ICclJykgeworICAgICAgICAgICAgICAgICpwKysgPSAodG9BU0NJSUhleFZhbHVlKHJ1blsxXSkg
PDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUocnVuWzJdKTsKKyAgICAgICAgICAgICAgICBydW4gKz0g
c2VxdWVuY2VTaXplOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqcCsr
ID0gcnVuWzBdOworICAgICAgICAgICAgICAgIHJ1biArPSAxOworICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVChidWZmZXIuc2l6ZSgpID09IHN0YXRpY19jYXN0PHNpemVf
dD4ocCAtIGJ1ZmZlci5kYXRhKCkpKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlci5zaXplKCkgPj0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihwIC0gYnVmZmVyLmRhdGEoKSkpOyAvLyBQcm92ZSBidWZmZXIg
bm90IG92ZXJydW4uCiAgICAgICAgIHJldHVybiAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2Rp
bmcgOiBVVEY4RW5jb2RpbmcoKSkuZGVjb2RlKGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0
YSgpKTsKICAgICB9CiB9OwpAQCAtOTUsOSArMTMxLDcgQEAgU3RyaW5nIGRlY29kZUVzY2FwZVNl
cXVlbmNlcyhjb25zdCBTdHJpbgogICAgIHNpemVfdCBzZWFyY2hQb3NpdGlvbiA9IDA7CiAgICAg
c2l6ZV90IGVuY29kZWRSdW5Qb3NpdGlvbjsKICAgICB3aGlsZSAoKGVuY29kZWRSdW5Qb3NpdGlv
biA9IEVzY2FwZVNlcXVlbmNlOjpmaW5kSW5TdHJpbmcoc3RyaW5nLCBzZWFyY2hQb3NpdGlvbikp
ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIHVuc2lnbmVkIGVuY29kZWRSdW5FbmQgPSBlbmNvZGVk
UnVuUG9zaXRpb247Ci0gICAgICAgIHdoaWxlIChsZW5ndGggLSBlbmNvZGVkUnVuRW5kID49IEVz
Y2FwZVNlcXVlbmNlOjpzaXplICYmIEVzY2FwZVNlcXVlbmNlOjptYXRjaFN0cmluZ1ByZWZpeChz
dHJpbmcsIGVuY29kZWRSdW5FbmQpKQotICAgICAgICAgICAgZW5jb2RlZFJ1bkVuZCArPSBFc2Nh
cGVTZXF1ZW5jZTo6c2l6ZTsKKyAgICAgICAgc2l6ZV90IGVuY29kZWRSdW5FbmQgPSBFc2NhcGVT
ZXF1ZW5jZTo6ZmluZEVuZE9mUnVuKHN0cmluZywgZW5jb2RlZFJ1blBvc2l0aW9uLCBsZW5ndGgp
OwogICAgICAgICBzZWFyY2hQb3NpdGlvbiA9IGVuY29kZWRSdW5FbmQ7CiAgICAgICAgIGlmIChl
bmNvZGVkUnVuRW5kID09IGVuY29kZWRSdW5Qb3NpdGlvbikgewogICAgICAgICAgICAgKytzZWFy
Y2hQb3NpdGlvbjsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDk1MykKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAxLTEzICBUb20g
U2VwZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRlY29kZUVzY2FwZVNlcXVl
bmNlcygpIG5vdCBjb3JyZWN0IGZvciBzb21lIGVuY29kaW5ncyAoR0JLLCBCaWc1LCAuLi4pLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFt
ZS1vbmxvYWQtR0JLLWNoYXIuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdC
Sy1jaGFyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbDoKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNo
YXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmlj
b2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5p
Y29kZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1C
aWc1LWNoYXIyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi5odG1sOiBBZGRlZC4KKwogMjAx
Mi0wMS0xMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gTWFyayBhIGZsYWt5IHRlc3QgYXMgZmxha3kKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1l
LW9ubG9hZC1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBA
QAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3Jp
cHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisK
KwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFt
ZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lm
cmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBs
P2NoYXJzZXQ9R0JLJnE9PGlmcmFtZSUyMG9ubG9hZD0lQzdPamF2YXNjcmlwdDphbGVydChkb2N1
bWVudC5kb21haW4pPjwvaWZyYW1lPiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJv
ci1HQkstY2hhci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9pbWctb25lcnJvci1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBh
IEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJl
cXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsK
K30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2Fs
aG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/
Y2hhcnNldD1HQksmcT08aW1nJTIwc3JjPSUyMDElMjBvbmVycm9yPSVDN09qYXZhc2NyaXB0OmFs
ZXJ0KGRvY3VtZW50LmRvbWFpbik+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
QmlnNS1jaGFyMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRl
IGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4g
cmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRy
dWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8v
bG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRh
Zy5wbD9jaGFyc2V0PUJpZzUmcT08c2NyaXB0PmFsZXJ0KC9YUyU4MVNTLyk8L3NjcmlwdD4iPgor
PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLUJpZzUtY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNl
IGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10
d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJp
ZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBv
ZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVy
bC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11
cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2lj
ZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVl
KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xv
Y2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWct
ZGVjb2RlLTE2Yml0LXVuaWNvZGUucGw/Y2hhcnNldD1CaWc1JnE9PHNjcmlwdD5hbGVydCgvWFMl
dTAwMjUyNTgxU1MvKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1
LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNo
YXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFT
Y3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3Qu
CisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1
LWNoYXItdHdpY2UtdXJsLWVuY29kZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNl
LXVybC1lbmNvZGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlv
dXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1CaWc1
JnE9PHNjcmlwdD5hbGVydCgvWFMlMjU4MVNTLyk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUp
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9j
YWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5w
bD9jaGFyc2V0PUJpZzUmcT08c2NyaXB0JTIwJTg5Zz5hbGVydChsb2NhdGlvbik8L3NjcmlwdD4i
PgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2
Yml0LXVuaWNvZGUucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJpdC11bmlj
b2RlLnBsCShyZXZpc2lvbiAxMDQ5NTMpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNv
ZGUucGwJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgc3ViIGRlY29kZTE2Qml0VW5p
Y29kZUVzY2FwZVNlcXVlbmNlcwogICAgIHJldHVybiAkcmVzdWx0OwogfQogCi1wcmludCAiQ29u
dGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcblxuIjsKK215ICRjaGFyc2V0VG9V
c2UgPSAkY2dpLT5wYXJhbSgnY2hhcnNldCcpID8gJGNnaS0+cGFyYW0oJ2NoYXJzZXQnKSA6ICJV
VEYtOCI7CitwcmludCAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9JGNoYXJzZXRU
b1VzZVxuXG4iOwogCiBwcmludCAiPCFET0NUWVBFIGh0bWw+XG4iOwogcHJpbnQgIjxodG1sPlxu
IjsK
</data>
<flag name="review"
          id="123263"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123001</attachid>
            <date>2012-01-18 14:41:46 -0800</date>
            <delta_ts>2012-01-19 12:50:57 -0800</delta_ts>
            <desc>Patch plus test KURL decodeEscapeSequence path.</desc>
            <filename>patch_71316.txt</filename>
            <type>text/plain</type>
            <size>23005</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTMyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEyLTAxLTE4ICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRlY29kZUVzY2FwZVNlcXVlbmNl
cygpIG5vdCBjb3JyZWN0IGZvciBzb21lIGVuY29kaW5ncyAoR0JLLCBCaWc1LCAuLi4pLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLmh0bWwK
KyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJv
ci1HQkstY2hhci5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2Rl
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1sCisg
ICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1C
aWc1LWNoYXIyLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmg6CisgICAgICAgIChXZWJDb3JlOjpVbmljb2RlMTZCaXRFc2NhcGVTZXF1ZW5jZTo6
ZmluZEluU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWNvZGUxNkJpdEVzY2FwZVNlcXVl
bmNlOjpmaW5kRW5kT2ZSdW4pOgorICAgICAgICAoV2ViQ29yZTo6VW5pY29kZTE2Qml0RXNjYXBl
U2VxdWVuY2U6OmRlY29kZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpVUkxFc2NhcGVTZXF1ZW5j
ZTo6ZmluZEluU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEVzY2FwZVNlcXVlbmNlOjpm
aW5kRW5kT2ZSdW4pOgorICAgICAgICAoV2ViQ29yZTo6VVJMRXNjYXBlU2VxdWVuY2U6OmRlY29k
ZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVFc2NhcGVTZXF1ZW5jZXMpOgorCiAyMDEy
LTAxLTE4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVT
U0lPTiAocjEwNDAwMCk6IEFkQmxvY2sgZXh0ZW5zaW9uIGZhaWxzIHRvIGxvYWQvZnVuY3Rpb24K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2Vz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2Nh
cGVTZXF1ZW5jZXMuaAkocmV2aXNpb24gMTA0OTUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGFuaWVsIEJhdGVzIChkYmF0ZXNAaW50
dWRhdGEuY29tKS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMiBH
b29nbGUsIGluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTksNiArMTAsOSBAQAogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCkBAIC0zNiw1MiArNDAsODQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBTZWUgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGVyY2VudC1lbmNvZGluZyNO
b24tc3RhbmRhcmRfaW1wbGVtZW50YXRpb25zPi4KIHN0cnVjdCBVbmljb2RlMTZCaXRFc2NhcGVT
ZXF1ZW5jZSB7Ci0gICAgZW51bSB7IHNpemUgPSA2IH07IC8vIGUuZy4gJXUyNkM0Ci0gICAgc3Rh
dGljIHNpemVfdCBmaW5kSW5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0
YXJ0ID0gMCkgeyByZXR1cm4gc3RyaW5nLmZpbmQoIiV1Iiwgc3RhcnQpOyB9Ci0gICAgc3RhdGlj
IGJvb2wgbWF0Y2hTdHJpbmdQcmVmaXgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0
YXJ0ID0gMCkKKyAgICBlbnVtIHsgc2VxdWVuY2VTaXplID0gNiB9OyAvLyBlLmcuICV1MjZDNAor
ICAgIHN0YXRpYyBzaXplX3QgZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXpl
X3Qgc3RhcnRQb3NpdGlvbikgeyByZXR1cm4gc3RyaW5nLmZpbmQoIiV1Iiwgc3RhcnRQb3NpdGlv
bik7IH0KKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRFbmRPZlJ1bihjb25zdCBTdHJpbmcmIHN0cmlu
Zywgc2l6ZV90IHN0YXJ0UG9zaXRpb24sIHNpemVfdCBlbmRQb3NpdGlvbikKICAgICB7Ci0gICAg
ICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgLSBzdGFydCA8IHNpemUpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBzdHJpbmdbc3RhcnRdID09ICclJyAmJiBzdHJpbmdb
c3RhcnQgKyAxXSA9PSAndScKLSAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdb
c3RhcnQgKyAyXSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDNdKQotICAgICAg
ICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDRdKSAmJiBpc0FTQ0lJSGV4
RGlnaXQoc3RyaW5nW3N0YXJ0ICsgNV0pOworICAgICAgICBzaXplX3QgcnVuRW5kID0gc3RhcnRQ
b3NpdGlvbjsKKyAgICAgICAgd2hpbGUgKGVuZFBvc2l0aW9uIC0gcnVuRW5kID49IHNlcXVlbmNl
U2l6ZSAmJiBzdHJpbmdbcnVuRW5kXSA9PSAnJScgJiYgc3RyaW5nW3J1bkVuZCArIDFdID09ICd1
JworICAgICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyAyXSkg
JiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyAzXSkKKyAgICAgICAgICAgICAgICYm
IGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5kICsgNF0pICYmIGlzQVNDSUlIZXhEaWdpdChz
dHJpbmdbcnVuRW5kICsgNV0pKSB7CisgICAgICAgICAgICBydW5FbmQgKz0gc2VxdWVuY2VTaXpl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBydW5FbmQ7CiAgICAgfQogICAgIHN0YXRpYyBT
dHJpbmcgZGVjb2RlUnVuKGNvbnN0IFVDaGFyKiBydW4sIHNpemVfdCBydW5MZW5ndGgsIGNvbnN0
IFRleHRFbmNvZGluZyYpCiAgICAgewogICAgICAgICAvLyBFYWNoICV1LWVzY2FwZSBzZXF1ZW5j
ZSByZXByZXNlbnRzIGEgVVRGLTE2IGNvZGUgdW5pdC4KICAgICAgICAgLy8gU2VlIDxodHRwOi8v
d3d3LnczLm9yZy9JbnRlcm5hdGlvbmFsL2lyaS1lZGl0L2RyYWZ0LWR1ZXJzdC1pcmkuaHRtbCNh
bmNob3IyOT4uCi0gICAgICAgIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlcyA9IHJ1bkxlbmd0aCAv
IHNpemU7CisgICAgICAgIC8vIEZvciAxNi1iaXQgZXNjYXBlIHNlcXVlbmNlcywgd2Uga25vdyB0
aGF0IGZpbmRFbmRPZlJ1bigpIGhhcyBnaXZlbiB1cyBhIGNvbnRpZ3VvdXMgcnVuIG9mIHNlcXVl
bmNlcworICAgICAgICAvLyB3aXRob3V0IGFueSBpbnRlcnZlbmluZyBjaGFyYWN0ZXJzLCBzbyBk
ZWNvZGUgdGhlIHJ1biB3aXRob3V0IGFkZGl0aW9uYWwgY2hlY2tzLgorICAgICAgICBzaXplX3Qg
bnVtYmVyT2ZTZXF1ZW5jZXMgPSBydW5MZW5ndGggLyBzZXF1ZW5jZVNpemU7CiAgICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobnVt
YmVyT2ZTZXF1ZW5jZXMpOwogICAgICAgICB3aGlsZSAobnVtYmVyT2ZTZXF1ZW5jZXMtLSkgewog
ICAgICAgICAgICAgVUNoYXIgY29kZVVuaXQgPSAodG9BU0NJSUhleFZhbHVlKHJ1blsyXSkgPDwg
MTIpIHwgKHRvQVNDSUlIZXhWYWx1ZShydW5bM10pIDw8IDgpIHwgKHRvQVNDSUlIZXhWYWx1ZShy
dW5bNF0pIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKHJ1bls1XSk7CiAgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZChjb2RlVW5pdCk7Ci0gICAgICAgICAgICBydW4gKz0gc2l6ZTsKKyAgICAgICAg
ICAgIHJ1biArPSBzZXF1ZW5jZVNpemU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKICAgICB9CiB9OwogCiBzdHJ1Y3QgVVJMRXNjYXBlU2VxdWVuY2Ugewot
ICAgIGVudW0geyBzaXplID0gMyB9OyAvLyBlLmcuICU0MQotICAgIHN0YXRpYyBzaXplX3QgZmlu
ZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIHsgcmV0
dXJuIHN0cmluZy5maW5kKCclJywgc3RhcnQpOyB9Ci0gICAgc3RhdGljIGJvb2wgbWF0Y2hTdHJp
bmdQcmVmaXgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkKKyAgICBl
bnVtIHsgc2VxdWVuY2VTaXplID0gMyB9OyAvLyBlLmcuICU0MQorICAgIHN0YXRpYyBzaXplX3Qg
ZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3NpdGlvbikg
eyByZXR1cm4gc3RyaW5nLmZpbmQoJyUnLCBzdGFydFBvc2l0aW9uKTsgfQorICAgIHN0YXRpYyBz
aXplX3QgZmluZEVuZE9mUnVuKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3Np
dGlvbiwgc2l6ZV90IGVuZFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKHN0cmluZy5sZW5n
dGgoKSAtIHN0YXJ0IDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHN0cmluZ1tzdGFydF0gPT0gJyUnICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3Rh
cnQgKyAxXSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDJdKTsKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGVuY29kaW5ncyBt
YXkgYmUgQmlnNS9HQkssIHdoaWNoIGhhdmUgdmFsdWVzIAorICAgICAgICAvLyBpbiB0aGUgcmFu
Z2UgMHg0MCAtIDB4N0YgYXMgdGhlIHNlY29uZCBieXRlIG9mIHRoZWlyIHNlcXVlbmNlcy4gVGhl
c2UgbmVlZCB0byBiZSBwYXNzZWQKKyAgICAgICAgLy8gdG8gdGhlIGRlY29kZXIgYXMgcGFydCBv
ZiB0aGUgcnVuIHRvIGdldCB0aGUgY29ycmVjdCBvdXRwdXQgKGUuZy4gdGhlIHJ1biAlWFhjJVhY
JVhYJVhYY2NjCisgICAgICAgIC8vIHNob3VsZCBiZSBkZWNvZGVkIGFzICVYWGMlWFglWFglWFhj
IGZvbGxvd2VkIGJ5IGNjLCB3aGVyZSBYIGlzIGEgaGV4IGRpZ2l0IGFuZCBjIGlzIGEgY2hhcmFj
dGVyCisgICAgICAgIC8vIGluIHRoZSByYW5nZSAweDQwIC0gMHg3ZikuIFdlIGFwcHJveGltYXRl
IHRoaXMgYnkgc3RvcHBpbmcgdGhlIGF0IHRoZSBmaXJzdCBvdXQgb2YgcmFuZ2UKKyAgICAgICAg
Ly8gdmFsdWUsIGF0IGEgc2Vjb25kIGNvbnNlY3V0aXZlIGluLXJhbmdlIHZhbHVlLCBvciBhdCBh
ICUtc2lnbiB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBhCisgICAgICAgIC8vIHZhbGlkIHNlcXVl
bmNlLiBPdGhlciBlbmNvZGluZ3MgYXJlIHN0aWxsIGNvcnJlY3QgYmVjYXVzZSB0aGUgZGVjb2Rl
ciB3aWxsIHBhc3Mgb24gdGhlCisgICAgICAgIC8vIGluLXJhbmdlIGNoYXJhY3RlcnMgdW5jaGFu
Z2VkLgorICAgICAgICBzaXplX3QgcnVuRW5kID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgYm9v
bCB0cmFpbGluZ0NoYXJhY3RlciA9IGZhbHNlOworICAgICAgICB3aGlsZSAocnVuRW5kIDwgZW5k
UG9zaXRpb24pIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmdbcnVuRW5kXSA9PSAnJScpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZW5kUG9zaXRpb24gLSBydW5FbmQgPj0gc2VxdWVuY2VTaXplICYm
IGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5kICsgMV0pICYmIGlzQVNDSUlIZXhEaWdpdChz
dHJpbmdbcnVuRW5kICsgMl0pKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bkVuZCArPSBzZXF1
ZW5jZVNpemU7CisgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ2hhcmFjdGVyID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdHJpbmdbcnVuRW5kXSA+PSAweDQwICYmIHN0cmluZ1tydW5F
bmRdIDwgMHg4MCAmJiAhdHJhaWxpbmdDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBydW5F
bmQgKz0gMTsKKyAgICAgICAgICAgICAgICB0cmFpbGluZ0NoYXJhY3RlciA9IHRydWU7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcnVuRW5kOwogICAgIH0KICAgICBzdGF0aWMgU3RyaW5nIGRlY29kZVJ1bihjb25z
dCBVQ2hhciogcnVuLCBzaXplX3QgcnVuTGVuZ3RoLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29k
aW5nKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VzID0gcnVuTGVuZ3Ro
IC8gc2l6ZTsKKyAgICAgICAgLy8gRm9yIFVSTCBlc2NhcGUgc2VxdWVuY2VzLCB3ZSBrbm93IHRo
YXQgZmluZEVuZE9mUnVuKCkgaGFzIGdpdmVuIHVzIGEgcnVuIHdoZXJlIGV2ZXJ5ICUtc2lnbiBp
bnRyb2R1Y2VzCisgICAgICAgIC8vIGEgdmFsaWQgZXNjYXBlIHNlcXVlbmNlLCBidXQgdGhlcmUg
bWF5IGJlIGEgY2hhcmFjdGVyIGJldHdlZW4gdGhlIHNlcXVlbmNlcy4KICAgICAgICAgVmVjdG9y
PGNoYXIsIDUxMj4gYnVmZmVyOwotICAgICAgICBidWZmZXIucmVzaXplKG51bWJlck9mU2VxdWVu
Y2VzKTsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShydW5MZW5ndGgpOyAvLyBVbmVzY2FwaW5nIGhl
eCBzZXF1ZW5jZXMgb25seSBtYWtlcyB0aGUgbGVuZ3RoIHNtYWxsZXIuCiAgICAgICAgIGNoYXIq
IHAgPSBidWZmZXIuZGF0YSgpOwotICAgICAgICB3aGlsZSAobnVtYmVyT2ZTZXF1ZW5jZXMtLSkg
ewotICAgICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFdKSA8PCA0KSB8IHRv
QVNDSUlIZXhWYWx1ZShydW5bMl0pOwotICAgICAgICAgICAgcnVuICs9IHNpemU7CisgICAgICAg
IGNvbnN0IFVDaGFyKiBydW5FbmQgPSBydW4gKyBydW5MZW5ndGg7CisgICAgICAgIHdoaWxlIChy
dW4gPCBydW5FbmQpIHsKKyAgICAgICAgICAgIGlmIChydW5bMF0gPT0gJyUnKSB7CisgICAgICAg
ICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFdKSA8PCA0KSB8IHRvQVNDSUlI
ZXhWYWx1ZShydW5bMl0pOworICAgICAgICAgICAgICAgIHJ1biArPSBzZXF1ZW5jZVNpemU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpwKysgPSBydW5bMF07CisgICAg
ICAgICAgICAgICAgcnVuICs9IDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKGJ1ZmZlci5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihwIC0gYnVmZmVyLmRh
dGEoKSkpOworICAgICAgICBBU1NFUlQoYnVmZmVyLnNpemUoKSA+PSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHAgLSBidWZmZXIuZGF0YSgpKSk7IC8vIFByb3ZlIGJ1ZmZlciBub3Qgb3ZlcnJ1bi4KICAg
ICAgICAgcmV0dXJuIChlbmNvZGluZy5pc1ZhbGlkKCkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGlu
ZygpKS5kZWNvZGUoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogICAgIH0KIH07
CkBAIC05NSw5ICsxMzEsNyBAQCBTdHJpbmcgZGVjb2RlRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0
cmluCiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICBzaXplX3QgZW5jb2RlZFJ1
blBvc2l0aW9uOwogICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0gRXNjYXBlU2VxdWVu
Y2U6OmZpbmRJblN0cmluZyhzdHJpbmcsIHNlYXJjaFBvc2l0aW9uKSkgIT0gbm90Rm91bmQpIHsK
LSAgICAgICAgdW5zaWduZWQgZW5jb2RlZFJ1bkVuZCA9IGVuY29kZWRSdW5Qb3NpdGlvbjsKLSAg
ICAgICAgd2hpbGUgKGxlbmd0aCAtIGVuY29kZWRSdW5FbmQgPj0gRXNjYXBlU2VxdWVuY2U6OnNp
emUgJiYgRXNjYXBlU2VxdWVuY2U6Om1hdGNoU3RyaW5nUHJlZml4KHN0cmluZywgZW5jb2RlZFJ1
bkVuZCkpCi0gICAgICAgICAgICBlbmNvZGVkUnVuRW5kICs9IEVzY2FwZVNlcXVlbmNlOjpzaXpl
OworICAgICAgICBzaXplX3QgZW5jb2RlZFJ1bkVuZCA9IEVzY2FwZVNlcXVlbmNlOjpmaW5kRW5k
T2ZSdW4oc3RyaW5nLCBlbmNvZGVkUnVuUG9zaXRpb24sIGxlbmd0aCk7CiAgICAgICAgIHNlYXJj
aFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKICAgICAgICAgaWYgKGVuY29kZWRSdW5FbmQgPT0g
ZW5jb2RlZFJ1blBvc2l0aW9uKSB7CiAgICAgICAgICAgICArK3NlYXJjaFBvc2l0aW9uOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTA1MzIxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDEtMTggIFRvbSBTZXBleiAgPHRzZXBlekBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgZGVjb2RlRXNjYXBlU2VxdWVuY2VzKCkgbm90IGNvcnJl
Y3QgZm9yIHNvbWUgZW5jb2RpbmdzIChHQkssIEJpZzUsIC4uLikuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2Fu
Y2hvci1mcmFtZXMtZ2JrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmNob3ItZ2JrLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUt
b25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdC
Sy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1k
ZWNvZGUtMTZiaXQtdW5pY29kZS5wbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
dHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFy
LXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2Ut
dXJsLWVuY29kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLUJpZzUtY2hhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmln
NS1jaGFyMi5odG1sOiBBZGRlZC4KKwogMjAxMi0wMS0xOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMDQwMDApOiBBZEJsb2NrIGV4dGVu
c2lvbiBmYWlscyB0byBsb2FkL2Z1bmN0aW9uCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vYW5jaG9yLWZyYW1lcy1nYmstZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRp
b24vYW5jaG9yLWZyYW1lcy1nYmstZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIyIEBACisKKworLS0tLS0tLS0KK0ZyYW1lOiAnbWFpbicKKy0tLS0tLS0tCitUZXN0cyB0aGF0
IGxvYWRpbmcgYSBmcmFtZSB3aXRoIGEgVVJMIHRoYXQgY29udGFpbnMgYSBmcmFnbWVudCBwb2lu
dGVkIGF0IGEgbmFtZWQgYW5jaG9yIGFjdHVhbGx5IHNjcm9sbHMgdG8gdGhhdCBhbmNob3IuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkub2Zmc2V0
SGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCBpcyB0cnVlCitQ
QVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID4gMCBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmJv
ZHkuc2Nyb2xsVG9wICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCA+IDIw
MDAgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCitUaGlzIGlzIGFuIGFuY2hvciBwb2ludCBuYW1lZCBhcyB0aGUgdW5pY29kZSBlcXVpdmFs
ZW50IG9mIHRoZSBnYmsgc2VxdWVuY2UgJWE5ZyAodGVzdCB0cmFpbGluZyBsb3cgYnl0ZSkuCisK
Ky0tLS0tLS0tCitGcmFtZTogJ2Zvb3RlcicKKy0tLS0tLS0tCisKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2Fu
Y2hvci1mcmFtZXMtZ2JrLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1s
PgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsg
Y2hhcnNldD1nYmsiLz4KKyAgPCEtLSBTZWUgcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdi
ay5odG1sIGZvciBkZXNjcmlwdGlvbiBvZiB0ZXN0IC0tPgorICA8IS0tIFNlZSBhbHNvIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMxNiAtLT4KKyAgPHNjcmlwdD4K
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsKKyAgPC9zY3JpcHQ+CisgIDxmcmFt
ZXNldCByb3dzPSI5MCUsMTAlIj4KKyAgICA8ZnJhbWUgc3JjPSJyZXNvdXJjZXMvZnJhbWUtd2l0
aC1hbmNob3ItZ2JrLmh0bWwjJTg5ZyIgbmFtZT0ibWFpbiI+CisgICAgPGZyYW1lIHNyYz0iYWJv
dXQ6YmxhbmsiIG5hbWU9ImZvb3RlciI+CisgIDwvZnJhbWVzZXQ+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5j
aG9yLWdiay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmNob3ItZ2JrLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgt
YW5jaG9yLWdiay5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdiayIvPgorICA8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
PgorICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICBkZXNjcmlwdGlvbignVGVzdHMgdGhh
dCBsb2FkaW5nIGEgZnJhbWUgd2l0aCBhIFVSTCB0aGF0IGNvbnRhaW5zIGEgZnJhZ21lbnQgcG9p
bnRlZCBhdCBhIG5hbWVkIGFuY2hvciBhY3R1YWxseSBzY3JvbGxzIHRvIHRoYXQgYW5jaG9yLicp
OworCisgICAgICAvLyBDaGVjayBzY3JvbGwgcG9zaXRpb24gaW4gYSB0aW1lb3V0IHRvIG1ha2Ug
c3VyZSB0aGF0IHRoZSBhbmNob3IgaGFzCisgICAgICAvLyBiZWVuIHNjcm9sbGVkIHRvLgorICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgYm9keSBpcyB0YWxsZXIgdGhhbiB0aGUgdmlld3BvcnQgKGkuZS4gc2Nyb2xsaW5nIGlzCisg
ICAgICAgICAgLy8gcmVxdWlyZWQpLgorICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQu
Ym9keS5vZmZzZXRIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0
Jyk7CisgICAgICAgICAgCisgICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIHNjcm9sbGVkIGF0IGxl
YXN0IGEgbGl0dGxlIGJpdAorICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuYm9keS5z
Y3JvbGxUb3AgPiAwJyk7CisgICAgICAgICAgCisgICAgICAgICAgLy8gQW5kIHRoZSBib3R0b20g
b2YgdGhlIHZpZXdhYmxlIGFyZWEgc2hvdWxkIGJlIGF0IGxlYXN0IDIwMDAgcGl4ZWxzIGZyb20g
dGhlIHRvcCwgZHVlIHRvIHRoZSBzcGFjZXIgZWxlbWVudCBhYm92ZS4KKyAgICAgICAgICBzaG91
bGRCZVRydWUoJ2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LmNsaWVudEhlaWdodCA+IDIwMDAnKTsKKyAgICAgICAgICAKKyAgICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsgICAgICAgICAgCisgICAgICB9LCAwKTsKKyAgICB9CisgICAgCisgICAgdmFyIGpz
VGVzdElzQXN5bmMgPSB0cnVlOworICA8L3NjcmlwdD4gIAorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJydW5UZXN0KCkiPgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKworPGRpdiBzdHlsZT0iaGVpZ2h0OiAyMDAwcHgiPgorICA8IS0tIFNwYWNlciB0
byBtYWtlIHN1cmUgdGhhdCB0aGUgbmFtZWQgYW5jaG9yIGJlbG93IHJlcXVpcmVzIHNjcm9sbGlu
ZyAtLT4KKzwvZGl2PgorCis8YSBuYW1lPSImI3g1ODZmIj5UaGlzIGlzIGFuIGFuY2hvciBwb2lu
dCBuYW1lZCBhcyB0aGUgdW5pY29kZSBlcXVpdmFsZW50IG9mIHRoZSBnYmsgc2VxdWVuY2UgJWE5
ZyAodGVzdCB0cmFpbGluZyBsb3cgYnl0ZSk8L2E+LgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pz
LXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZy
YW1lLW9ubG9hZC1HQkstY2hhci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogUmVmdXNlZCB0byBleGVj
dXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRo
aW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1j
aGFyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hhci5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0Pgor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9y
RW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNy
Yz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2Vj
aG8taW50ZXJ0YWcucGw/Y2hhcnNldD1HQksmcT08aWZyYW1lJTIwb25sb2FkPSVDN09qYXZhc2Ny
aXB0OmFsZXJ0KGRvY3VtZW50LmRvbWFpbik+PC9pZnJhbWU+Ij4KKzwvaWZyYW1lPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNo
YXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhl
Y3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0
aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFy
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0
cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDov
L2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0
YWcucGw/Y2hhcnNldD1HQksmcT08aW1nJTIwc3JjPSUyMDElMjBvbmVycm9yPSVDN09qYXZhc2Ny
aXB0OmFsZXJ0KGRvY3VtZW50LmRvbWFpbik+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctQmlnNS1jaGFyMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBh
IEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJl
cXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVl
KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xv
Y2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcu
cGw/Y2hhcnNldD1CaWc1JnE9PHNjcmlwdD5hbGVydCgvWFMlODFTUy8pPC9zY3JpcHQ+Ij4KKzwv
aWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2Ny
aXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6
IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBz
Y3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1l
bmNvZGUtMTZiaXQtdW5pY29kZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3
aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1C
aWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhl
Y3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0
aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5p
Y29kZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVu
aWNvZGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0
LXVuaWNvZGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNv
ZGUucGw/Y2hhcnNldD1CaWc1JnE9PHNjcmlwdD5hbGVydCgvWFMldTAwMjUyNTgxU1MvKTwvc2Ny
aXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11
cmwtZW5jb2RlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVu
Y29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29k
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNT
QUdFOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUg
b2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11
cmwtZW5jb2RlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVk
aXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFt
ZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNl
cy9lY2hvLWludGVydGFnLnBsP2NoYXJzZXQ9QmlnNSZxPTxzY3JpcHQ+YWxlcnQoL1hTJTI1ODFT
Uy8pPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFy
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJv
bGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1
ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1CaWc1JnE9PHNjcmlwdCUy
MCU4OWc+YWxlcnQobG9jYXRpb24pPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jl
c291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJpdC11bmljb2RlLnBsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMv
ZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbAkocmV2aXNpb24gMTA0OTUzKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9l
Y2hvLWludGVydGFnLWRlY29kZS0xNmJpdC11bmljb2RlLnBsCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw3ICs2Nyw4IEBAIHN1YiBkZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMKICAgICBy
ZXR1cm4gJHJlc3VsdDsKIH0KIAotcHJpbnQgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFy
c2V0PVVURi04XG5cbiI7CitteSAkY2hhcnNldFRvVXNlID0gJGNnaS0+cGFyYW0oJ2NoYXJzZXQn
KSA/ICRjZ2ktPnBhcmFtKCdjaGFyc2V0JykgOiAiVVRGLTgiOworcHJpbnQgIkNvbnRlbnQtVHlw
ZTogdGV4dC9odG1sOyBjaGFyc2V0PSRjaGFyc2V0VG9Vc2VcblxuIjsKIAogcHJpbnQgIjwhRE9D
VFlQRSBodG1sPlxuIjsKIHByaW50ICI8aHRtbD5cbiI7Cg==
</data>
<flag name="commit-queue"
          id="123944"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123178</attachid>
            <date>2012-01-19 12:50:57 -0800</date>
            <delta_ts>2012-01-19 12:58:46 -0800</delta_ts>
            <desc>Patch, KURL, KURLGoogle different</desc>
            <filename>patch_71316.txt</filename>
            <type>text/plain</type>
            <size>22187</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2Vz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2Nh
cGVTZXF1ZW5jZXMuaAkocmV2aXNpb24gMTA1NDMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGFuaWVsIEJhdGVzIChkYmF0ZXNAaW50
dWRhdGEuY29tKS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMiBH
b29nbGUsIGluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTksNiArMTAsOSBAQAogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCkBAIC0zNiw1MiArNDAsODQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBTZWUgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGVyY2VudC1lbmNvZGluZyNO
b24tc3RhbmRhcmRfaW1wbGVtZW50YXRpb25zPi4KIHN0cnVjdCBVbmljb2RlMTZCaXRFc2NhcGVT
ZXF1ZW5jZSB7Ci0gICAgZW51bSB7IHNpemUgPSA2IH07IC8vIGUuZy4gJXUyNkM0Ci0gICAgc3Rh
dGljIHNpemVfdCBmaW5kSW5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0
YXJ0ID0gMCkgeyByZXR1cm4gc3RyaW5nLmZpbmQoIiV1Iiwgc3RhcnQpOyB9Ci0gICAgc3RhdGlj
IGJvb2wgbWF0Y2hTdHJpbmdQcmVmaXgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0
YXJ0ID0gMCkKKyAgICBlbnVtIHsgc2VxdWVuY2VTaXplID0gNiB9OyAvLyBlLmcuICV1MjZDNAor
ICAgIHN0YXRpYyBzaXplX3QgZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXpl
X3Qgc3RhcnRQb3NpdGlvbikgeyByZXR1cm4gc3RyaW5nLmZpbmQoIiV1Iiwgc3RhcnRQb3NpdGlv
bik7IH0KKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRFbmRPZlJ1bihjb25zdCBTdHJpbmcmIHN0cmlu
Zywgc2l6ZV90IHN0YXJ0UG9zaXRpb24sIHNpemVfdCBlbmRQb3NpdGlvbikKICAgICB7Ci0gICAg
ICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgLSBzdGFydCA8IHNpemUpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBzdHJpbmdbc3RhcnRdID09ICclJyAmJiBzdHJpbmdb
c3RhcnQgKyAxXSA9PSAndScKLSAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdb
c3RhcnQgKyAyXSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDNdKQotICAgICAg
ICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDRdKSAmJiBpc0FTQ0lJSGV4
RGlnaXQoc3RyaW5nW3N0YXJ0ICsgNV0pOworICAgICAgICBzaXplX3QgcnVuRW5kID0gc3RhcnRQ
b3NpdGlvbjsKKyAgICAgICAgd2hpbGUgKGVuZFBvc2l0aW9uIC0gcnVuRW5kID49IHNlcXVlbmNl
U2l6ZSAmJiBzdHJpbmdbcnVuRW5kXSA9PSAnJScgJiYgc3RyaW5nW3J1bkVuZCArIDFdID09ICd1
JworICAgICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyAyXSkg
JiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyAzXSkKKyAgICAgICAgICAgICAgICYm
IGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5kICsgNF0pICYmIGlzQVNDSUlIZXhEaWdpdChz
dHJpbmdbcnVuRW5kICsgNV0pKSB7CisgICAgICAgICAgICBydW5FbmQgKz0gc2VxdWVuY2VTaXpl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBydW5FbmQ7CiAgICAgfQogICAgIHN0YXRpYyBT
dHJpbmcgZGVjb2RlUnVuKGNvbnN0IFVDaGFyKiBydW4sIHNpemVfdCBydW5MZW5ndGgsIGNvbnN0
IFRleHRFbmNvZGluZyYpCiAgICAgewogICAgICAgICAvLyBFYWNoICV1LWVzY2FwZSBzZXF1ZW5j
ZSByZXByZXNlbnRzIGEgVVRGLTE2IGNvZGUgdW5pdC4KICAgICAgICAgLy8gU2VlIDxodHRwOi8v
d3d3LnczLm9yZy9JbnRlcm5hdGlvbmFsL2lyaS1lZGl0L2RyYWZ0LWR1ZXJzdC1pcmkuaHRtbCNh
bmNob3IyOT4uCi0gICAgICAgIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlcyA9IHJ1bkxlbmd0aCAv
IHNpemU7CisgICAgICAgIC8vIEZvciAxNi1iaXQgZXNjYXBlIHNlcXVlbmNlcywgd2Uga25vdyB0
aGF0IGZpbmRFbmRPZlJ1bigpIGhhcyBnaXZlbiB1cyBhIGNvbnRpZ3VvdXMgcnVuIG9mIHNlcXVl
bmNlcworICAgICAgICAvLyB3aXRob3V0IGFueSBpbnRlcnZlbmluZyBjaGFyYWN0ZXJzLCBzbyBk
ZWNvZGUgdGhlIHJ1biB3aXRob3V0IGFkZGl0aW9uYWwgY2hlY2tzLgorICAgICAgICBzaXplX3Qg
bnVtYmVyT2ZTZXF1ZW5jZXMgPSBydW5MZW5ndGggLyBzZXF1ZW5jZVNpemU7CiAgICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobnVt
YmVyT2ZTZXF1ZW5jZXMpOwogICAgICAgICB3aGlsZSAobnVtYmVyT2ZTZXF1ZW5jZXMtLSkgewog
ICAgICAgICAgICAgVUNoYXIgY29kZVVuaXQgPSAodG9BU0NJSUhleFZhbHVlKHJ1blsyXSkgPDwg
MTIpIHwgKHRvQVNDSUlIZXhWYWx1ZShydW5bM10pIDw8IDgpIHwgKHRvQVNDSUlIZXhWYWx1ZShy
dW5bNF0pIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKHJ1bls1XSk7CiAgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZChjb2RlVW5pdCk7Ci0gICAgICAgICAgICBydW4gKz0gc2l6ZTsKKyAgICAgICAg
ICAgIHJ1biArPSBzZXF1ZW5jZVNpemU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKICAgICB9CiB9OwogCiBzdHJ1Y3QgVVJMRXNjYXBlU2VxdWVuY2Ugewot
ICAgIGVudW0geyBzaXplID0gMyB9OyAvLyBlLmcuICU0MQotICAgIHN0YXRpYyBzaXplX3QgZmlu
ZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIHsgcmV0
dXJuIHN0cmluZy5maW5kKCclJywgc3RhcnQpOyB9Ci0gICAgc3RhdGljIGJvb2wgbWF0Y2hTdHJp
bmdQcmVmaXgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkKKyAgICBl
bnVtIHsgc2VxdWVuY2VTaXplID0gMyB9OyAvLyBlLmcuICU0MQorICAgIHN0YXRpYyBzaXplX3Qg
ZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3NpdGlvbikg
eyByZXR1cm4gc3RyaW5nLmZpbmQoJyUnLCBzdGFydFBvc2l0aW9uKTsgfQorICAgIHN0YXRpYyBz
aXplX3QgZmluZEVuZE9mUnVuKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3Np
dGlvbiwgc2l6ZV90IGVuZFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKHN0cmluZy5sZW5n
dGgoKSAtIHN0YXJ0IDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHN0cmluZ1tzdGFydF0gPT0gJyUnICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3Rh
cnQgKyAxXSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDJdKTsKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGVuY29kaW5ncyBt
YXkgYmUgQmlnNS9HQkssIHdoaWNoIGhhdmUgdmFsdWVzIAorICAgICAgICAvLyBpbiB0aGUgcmFu
Z2UgMHg0MCAtIDB4N0YgYXMgdGhlIHNlY29uZCBieXRlIG9mIHRoZWlyIHNlcXVlbmNlcy4gVGhl
c2UgbmVlZCB0byBiZSBwYXNzZWQKKyAgICAgICAgLy8gdG8gdGhlIGRlY29kZXIgYXMgcGFydCBv
ZiB0aGUgcnVuIHRvIGdldCB0aGUgY29ycmVjdCBvdXRwdXQgKGUuZy4gdGhlIHJ1biAlWFhjJVhY
JVhYJVhYY2NjCisgICAgICAgIC8vIHNob3VsZCBiZSBkZWNvZGVkIGFzICVYWGMlWFglWFglWFhj
IGZvbGxvd2VkIGJ5IGNjLCB3aGVyZSBYIGlzIGEgaGV4IGRpZ2l0IGFuZCBjIGlzIGEgY2hhcmFj
dGVyCisgICAgICAgIC8vIGluIHRoZSByYW5nZSAweDQwIC0gMHg3ZikuIFdlIGFwcHJveGltYXRl
IHRoaXMgYnkgc3RvcHBpbmcgdGhlIGF0IHRoZSBmaXJzdCBvdXQgb2YgcmFuZ2UKKyAgICAgICAg
Ly8gdmFsdWUsIGF0IGEgc2Vjb25kIGNvbnNlY3V0aXZlIGluLXJhbmdlIHZhbHVlLCBvciBhdCBh
ICUtc2lnbiB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBhCisgICAgICAgIC8vIHZhbGlkIHNlcXVl
bmNlLiBPdGhlciBlbmNvZGluZ3MgYXJlIHN0aWxsIGNvcnJlY3QgYmVjYXVzZSB0aGUgZGVjb2Rl
ciB3aWxsIHBhc3Mgb24gdGhlCisgICAgICAgIC8vIGluLXJhbmdlIGNoYXJhY3RlcnMgdW5jaGFu
Z2VkLgorICAgICAgICBzaXplX3QgcnVuRW5kID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgYm9v
bCB0cmFpbGluZ0NoYXJhY3RlciA9IGZhbHNlOworICAgICAgICB3aGlsZSAocnVuRW5kIDwgZW5k
UG9zaXRpb24pIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmdbcnVuRW5kXSA9PSAnJScpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZW5kUG9zaXRpb24gLSBydW5FbmQgPj0gc2VxdWVuY2VTaXplICYm
IGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5kICsgMV0pICYmIGlzQVNDSUlIZXhEaWdpdChz
dHJpbmdbcnVuRW5kICsgMl0pKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bkVuZCArPSBzZXF1
ZW5jZVNpemU7CisgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ2hhcmFjdGVyID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdHJpbmdbcnVuRW5kXSA+PSAweDQwICYmIHN0cmluZ1tydW5F
bmRdIDwgMHg4MCAmJiAhdHJhaWxpbmdDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBydW5F
bmQgKz0gMTsKKyAgICAgICAgICAgICAgICB0cmFpbGluZ0NoYXJhY3RlciA9IHRydWU7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcnVuRW5kOwogICAgIH0KICAgICBzdGF0aWMgU3RyaW5nIGRlY29kZVJ1bihjb25z
dCBVQ2hhciogcnVuLCBzaXplX3QgcnVuTGVuZ3RoLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29k
aW5nKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VzID0gcnVuTGVuZ3Ro
IC8gc2l6ZTsKKyAgICAgICAgLy8gRm9yIFVSTCBlc2NhcGUgc2VxdWVuY2VzLCB3ZSBrbm93IHRo
YXQgZmluZEVuZE9mUnVuKCkgaGFzIGdpdmVuIHVzIGEgcnVuIHdoZXJlIGV2ZXJ5ICUtc2lnbiBp
bnRyb2R1Y2VzCisgICAgICAgIC8vIGEgdmFsaWQgZXNjYXBlIHNlcXVlbmNlLCBidXQgdGhlcmUg
bWF5IGJlIGEgY2hhcmFjdGVyIGJldHdlZW4gdGhlIHNlcXVlbmNlcy4KICAgICAgICAgVmVjdG9y
PGNoYXIsIDUxMj4gYnVmZmVyOwotICAgICAgICBidWZmZXIucmVzaXplKG51bWJlck9mU2VxdWVu
Y2VzKTsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShydW5MZW5ndGgpOyAvLyBVbmVzY2FwaW5nIGhl
eCBzZXF1ZW5jZXMgb25seSBtYWtlcyB0aGUgbGVuZ3RoIHNtYWxsZXIuCiAgICAgICAgIGNoYXIq
IHAgPSBidWZmZXIuZGF0YSgpOwotICAgICAgICB3aGlsZSAobnVtYmVyT2ZTZXF1ZW5jZXMtLSkg
ewotICAgICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFdKSA8PCA0KSB8IHRv
QVNDSUlIZXhWYWx1ZShydW5bMl0pOwotICAgICAgICAgICAgcnVuICs9IHNpemU7CisgICAgICAg
IGNvbnN0IFVDaGFyKiBydW5FbmQgPSBydW4gKyBydW5MZW5ndGg7CisgICAgICAgIHdoaWxlIChy
dW4gPCBydW5FbmQpIHsKKyAgICAgICAgICAgIGlmIChydW5bMF0gPT0gJyUnKSB7CisgICAgICAg
ICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFdKSA8PCA0KSB8IHRvQVNDSUlI
ZXhWYWx1ZShydW5bMl0pOworICAgICAgICAgICAgICAgIHJ1biArPSBzZXF1ZW5jZVNpemU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpwKysgPSBydW5bMF07CisgICAg
ICAgICAgICAgICAgcnVuICs9IDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKGJ1ZmZlci5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihwIC0gYnVmZmVyLmRh
dGEoKSkpOworICAgICAgICBBU1NFUlQoYnVmZmVyLnNpemUoKSA+PSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHAgLSBidWZmZXIuZGF0YSgpKSk7IC8vIFByb3ZlIGJ1ZmZlciBub3Qgb3ZlcnJ1bi4KICAg
ICAgICAgcmV0dXJuIChlbmNvZGluZy5pc1ZhbGlkKCkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGlu
ZygpKS5kZWNvZGUoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogICAgIH0KIH07
CkBAIC05NSw5ICsxMzEsNyBAQCBTdHJpbmcgZGVjb2RlRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0
cmluCiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICBzaXplX3QgZW5jb2RlZFJ1
blBvc2l0aW9uOwogICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0gRXNjYXBlU2VxdWVu
Y2U6OmZpbmRJblN0cmluZyhzdHJpbmcsIHNlYXJjaFBvc2l0aW9uKSkgIT0gbm90Rm91bmQpIHsK
LSAgICAgICAgdW5zaWduZWQgZW5jb2RlZFJ1bkVuZCA9IGVuY29kZWRSdW5Qb3NpdGlvbjsKLSAg
ICAgICAgd2hpbGUgKGxlbmd0aCAtIGVuY29kZWRSdW5FbmQgPj0gRXNjYXBlU2VxdWVuY2U6OnNp
emUgJiYgRXNjYXBlU2VxdWVuY2U6Om1hdGNoU3RyaW5nUHJlZml4KHN0cmluZywgZW5jb2RlZFJ1
bkVuZCkpCi0gICAgICAgICAgICBlbmNvZGVkUnVuRW5kICs9IEVzY2FwZVNlcXVlbmNlOjpzaXpl
OworICAgICAgICBzaXplX3QgZW5jb2RlZFJ1bkVuZCA9IEVzY2FwZVNlcXVlbmNlOjpmaW5kRW5k
T2ZSdW4oc3RyaW5nLCBlbmNvZGVkUnVuUG9zaXRpb24sIGxlbmd0aCk7CiAgICAgICAgIHNlYXJj
aFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKICAgICAgICAgaWYgKGVuY29kZWRSdW5FbmQgPT0g
ZW5jb2RlZFJ1blBvc2l0aW9uKSB7CiAgICAgICAgICAgICArK3NlYXJjaFBvc2l0aW9uOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTA1NDMwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDEtMTggIFRvbSBTZXBleiAgPHRzZXBlekBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgZGVjb2RlRXNjYXBlU2VxdWVuY2VzKCkgbm90IGNvcnJl
Y3QgZm9yIHNvbWUgZW5jb2RpbmdzIChHQkssIEJpZzUsIC4uLikuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2Fu
Y2hvci1mcmFtZXMtZ2JrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmNob3ItZ2JrLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUt
b25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdC
Sy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1k
ZWNvZGUtMTZiaXQtdW5pY29kZS5wbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
dHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFy
LXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2Ut
dXJsLWVuY29kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLUJpZzUtY2hhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmln
NS1jaGFyMi5odG1sOiBBZGRlZC4KKwogMjAxMi0wMS0xOSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NjQ0CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9y
LWZyYW1lcy1nYmstZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9yLWZyYW1lcy1n
YmstZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACisKKworLS0tLS0t
LS0KK0ZyYW1lOiAnbWFpbicKKy0tLS0tLS0tCitUZXN0cyB0aGF0IGxvYWRpbmcgYSBmcmFtZSB3
aXRoIGEgVVJMIHRoYXQgY29udGFpbnMgYSBmcmFnbWVudCBwb2ludGVkIGF0IGEgbmFtZWQgYW5j
aG9yIGFjdHVhbGx5IHNjcm9sbHMgdG8gdGhhdCBhbmNob3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0ID4gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmJvZHku
c2Nyb2xsVG9wID4gMCBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wICsgZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCA+IDIwMDAgaXMgdHJ1ZQorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitUaGlzIGlzIGFuIGFu
Y2hvciBwb2ludCBuYW1lZCBhcyB0aGUgdW5pY29kZSBlcXVpdmFsZW50IG9mIHRoZSBnYmsgc2Vx
dWVuY2UgJWE5ZyAodGVzdCB0cmFpbGluZyBsb3cgYnl0ZSkuCisKKy0tLS0tLS0tCitGcmFtZTog
J2Zvb3RlcicKKy0tLS0tLS0tCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9hbmNob3ItZnJhbWVzLWdiay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorICA8bWV0YSBodHRwLWVx
dWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1nYmsiLz4KKyAg
PCEtLSBTZWUgcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sIGZvciBkZXNjcmlw
dGlvbiBvZiB0ZXN0IC0tPgorICA8IS0tIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTMxNiAtLT4KKyAgPHNjcmlwdD4KKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hp
bGRGcmFtZXNBc1RleHQoKTsKKyAgPC9zY3JpcHQ+CisgIDxmcmFtZXNldCByb3dzPSI5MCUsMTAl
Ij4KKyAgICA8ZnJhbWUgc3JjPSJyZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmNob3ItZ2JrLmh0bWwj
JTg5ZyIgbmFtZT0ibWFpbiI+CisgICAgPGZyYW1lIHNyYz0iYWJvdXQ6YmxhbmsiIG5hbWU9ImZv
b3RlciI+CisgIDwvZnJhbWVzZXQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZnJh
bWUtd2l0aC1hbmNob3ItZ2JrLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1s
OyBjaGFyc2V0PWdiayIvPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICAgICBkZXNjcmlwdGlvbignVGVzdHMgdGhhdCBsb2FkaW5nIGEgZnJhbWUg
d2l0aCBhIFVSTCB0aGF0IGNvbnRhaW5zIGEgZnJhZ21lbnQgcG9pbnRlZCBhdCBhIG5hbWVkIGFu
Y2hvciBhY3R1YWxseSBzY3JvbGxzIHRvIHRoYXQgYW5jaG9yLicpOworCisgICAgICAvLyBDaGVj
ayBzY3JvbGwgcG9zaXRpb24gaW4gYSB0aW1lb3V0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhbmNo
b3IgaGFzCisgICAgICAvLyBiZWVuIHNjcm9sbGVkIHRvLgorICAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYm9keSBpcyB0YWxsZXIg
dGhhbiB0aGUgdmlld3BvcnQgKGkuZS4gc2Nyb2xsaW5nIGlzCisgICAgICAgICAgLy8gcmVxdWly
ZWQpLgorICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQg
PiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0Jyk7CisgICAgICAgICAgCisg
ICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIHNjcm9sbGVkIGF0IGxlYXN0IGEgbGl0dGxlIGJpdAor
ICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPiAwJyk7Cisg
ICAgICAgICAgCisgICAgICAgICAgLy8gQW5kIHRoZSBib3R0b20gb2YgdGhlIHZpZXdhYmxlIGFy
ZWEgc2hvdWxkIGJlIGF0IGxlYXN0IDIwMDAgcGl4ZWxzIGZyb20gdGhlIHRvcCwgZHVlIHRvIHRo
ZSBzcGFjZXIgZWxlbWVudCBhYm92ZS4KKyAgICAgICAgICBzaG91bGRCZVRydWUoJ2RvY3VtZW50
LmJvZHkuc2Nyb2xsVG9wICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCA+
IDIwMDAnKTsKKyAgICAgICAgICAKKyAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsgICAgICAgICAg
CisgICAgICB9LCAwKTsKKyAgICB9CisgICAgCisgICAgdmFyIGpzVGVzdElzQXN5bmMgPSB0cnVl
OworICA8L3NjcmlwdD4gIAorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPGRpdiBz
dHlsZT0iaGVpZ2h0OiAyMDAwcHgiPgorICA8IS0tIFNwYWNlciB0byBtYWtlIHN1cmUgdGhhdCB0
aGUgbmFtZWQgYW5jaG9yIGJlbG93IHJlcXVpcmVzIHNjcm9sbGluZyAtLT4KKzwvZGl2PgorCis8
YSBuYW1lPSImI3g1ODZmIj5UaGlzIGlzIGFuIGFuY2hvciBwb2ludCBuYW1lZCBhcyB0aGUgdW5p
Y29kZSBlcXVpdmFsZW50IG9mIHRoZSBnYmsgc2VxdWVuY2UgJWE5ZyAodGVzdCB0cmFpbGluZyBs
b3cgYnl0ZSk8L2E+LgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hh
ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lm
cmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBz
Y3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9u
bG9hZC1HQkstY2hhci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1l
LW9ubG9hZC1HQkstY2hhci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9z
dDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hh
cnNldD1HQksmcT08aWZyYW1lJTIwb25sb2FkPSVDN09qYXZhc2NyaXB0OmFsZXJ0KGRvY3VtZW50
LmRvbWFpbik+PC9pZnJhbWU+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdC
Sy1jaGFyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQg
c2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVy
cm9yLUdCSy1jaGFyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJy
b3ItR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlv
dXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1HQksm
cT08aW1nJTIwc3JjPSUyMDElMjBvbmVycm9yPSVDN09qYXZhc2NyaXB0OmFsZXJ0KGRvY3VtZW50
LmRvbWFpbik+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBA
CitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0
LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmln
NS1jaGFyMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJp
ZzUtY2hhcjIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1CaWc1JnE9
PHNjcmlwdD5hbGVydCgvWFMlODFTUy8pPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctQmlnNS1jaGFyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0
ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGlu
IHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29k
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZi
aXQtdW5pY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJs
LWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQg
c2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10
YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQt
dGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRY
U1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVz
b3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNvZGUucGw/Y2hhcnNldD1CaWc1
JnE9PHNjcmlwdD5hbGVydCgvWFMldTAwMjUyNTgxU1MvKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBSZWZ1c2VkIHRvIGV4
ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdp
dGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJp
ZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBs
P2NoYXJzZXQ9QmlnNSZxPTxzY3JpcHQ+YWxlcnQoL1hTJTI1ODFTUy8pPC9zY3JpcHQ+Ij4KKzwv
aWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
QmlnNS1jaGFyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9y
RW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNy
Yz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2Vj
aG8taW50ZXJ0YWcucGw/Y2hhcnNldD1CaWc1JnE9PHNjcmlwdCUyMCU4OWc+YWxlcnQobG9jYXRp
b24pPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVy
dGFnLWRlY29kZS0xNmJpdC11bmljb2RlLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNv
ZGUtMTZiaXQtdW5pY29kZS5wbAkocmV2aXNpb24gMTA1NDMwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29k
ZS0xNmJpdC11bmljb2RlLnBsCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIHN1YiBk
ZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMKICAgICByZXR1cm4gJHJlc3VsdDsKIH0K
IAotcHJpbnQgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04XG5cbiI7Citt
eSAkY2hhcnNldFRvVXNlID0gJGNnaS0+cGFyYW0oJ2NoYXJzZXQnKSA/ICRjZ2ktPnBhcmFtKCdj
aGFyc2V0JykgOiAiVVRGLTgiOworcHJpbnQgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFy
c2V0PSRjaGFyc2V0VG9Vc2VcblxuIjsKIAogcHJpbnQgIjwhRE9DVFlQRSBodG1sPlxuIjsKIHBy
aW50ICI8aHRtbD5cbiI7CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0
X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiAxMDU0MzApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NDIsNiArMTk0Miw5IEBAIEJVR19KQVBIRVQgV0lOIDogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWUKIC8vIE5vdGU6IHRoaXMgdGVzdCB3YXMgYWxzbyBtYXJrZWQgYXMgZmxha3kgb24g
V0lOIFJFTEVBU0UgYWJvdmUsIEJVR0NSMzEzNDIuCiBCVUdDUjM5NDIzIDogc2VjdXJpdHkvYmxv
Y2stdGVzdC5odG1sID0gVElNRU9VVAogCisvLyBEdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGluIGhh
bmRsaW5nIHRleHQgZW5jb2RpbmdzIGluIEtVUkwgYW5kIGdvb2dsZXVybC4KK0JVR1dLMjA1NTkg
OiBodHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9yLWZyYW1lcy1nYmsuaHRtbAorCiBCVUdXSzM2
NjY2IDogc3RvcmFnZS9vcGVuLWRhdGFiYXNlLW92ZXItcXVvdGEuaHRtbCA9IFRFWFQKIAogQlVH
V0szNzI4MyA6IGZhc3Qvb3ZlcmZsb3cvc2Nyb2xsYmFyLXJlc3RvcmVkLWFuZC10aGVuLWxvY2tl
ZC5odG1sID0gVEVYVAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123182</attachid>
            <date>2012-01-19 12:58:46 -0800</date>
            <delta_ts>2012-01-23 12:22:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch_71316.txt</filename>
            <type>text/plain</type>
            <size>22194</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2Vz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2Nh
cGVTZXF1ZW5jZXMuaAkocmV2aXNpb24gMTA1NDMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGFuaWVsIEJhdGVzIChkYmF0ZXNAaW50
dWRhdGEuY29tKS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMiBH
b29nbGUsIGluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTksNiArMTAsOSBAQAogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCkBAIC0zNiw1MiArNDAsODQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBTZWUgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGVyY2VudC1lbmNvZGluZyNO
b24tc3RhbmRhcmRfaW1wbGVtZW50YXRpb25zPi4KIHN0cnVjdCBVbmljb2RlMTZCaXRFc2NhcGVT
ZXF1ZW5jZSB7Ci0gICAgZW51bSB7IHNpemUgPSA2IH07IC8vIGUuZy4gJXUyNkM0Ci0gICAgc3Rh
dGljIHNpemVfdCBmaW5kSW5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0
YXJ0ID0gMCkgeyByZXR1cm4gc3RyaW5nLmZpbmQoIiV1Iiwgc3RhcnQpOyB9Ci0gICAgc3RhdGlj
IGJvb2wgbWF0Y2hTdHJpbmdQcmVmaXgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0
YXJ0ID0gMCkKKyAgICBlbnVtIHsgc2VxdWVuY2VTaXplID0gNiB9OyAvLyBlLmcuICV1MjZDNAor
ICAgIHN0YXRpYyBzaXplX3QgZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXpl
X3Qgc3RhcnRQb3NpdGlvbikgeyByZXR1cm4gc3RyaW5nLmZpbmQoIiV1Iiwgc3RhcnRQb3NpdGlv
bik7IH0KKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRFbmRPZlJ1bihjb25zdCBTdHJpbmcmIHN0cmlu
Zywgc2l6ZV90IHN0YXJ0UG9zaXRpb24sIHNpemVfdCBlbmRQb3NpdGlvbikKICAgICB7Ci0gICAg
ICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgLSBzdGFydCA8IHNpemUpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBzdHJpbmdbc3RhcnRdID09ICclJyAmJiBzdHJpbmdb
c3RhcnQgKyAxXSA9PSAndScKLSAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdb
c3RhcnQgKyAyXSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDNdKQotICAgICAg
ICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDRdKSAmJiBpc0FTQ0lJSGV4
RGlnaXQoc3RyaW5nW3N0YXJ0ICsgNV0pOworICAgICAgICBzaXplX3QgcnVuRW5kID0gc3RhcnRQ
b3NpdGlvbjsKKyAgICAgICAgd2hpbGUgKGVuZFBvc2l0aW9uIC0gcnVuRW5kID49IHNlcXVlbmNl
U2l6ZSAmJiBzdHJpbmdbcnVuRW5kXSA9PSAnJScgJiYgc3RyaW5nW3J1bkVuZCArIDFdID09ICd1
JworICAgICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyAyXSkg
JiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyAzXSkKKyAgICAgICAgICAgICAgICYm
IGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5kICsgNF0pICYmIGlzQVNDSUlIZXhEaWdpdChz
dHJpbmdbcnVuRW5kICsgNV0pKSB7CisgICAgICAgICAgICBydW5FbmQgKz0gc2VxdWVuY2VTaXpl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBydW5FbmQ7CiAgICAgfQogICAgIHN0YXRpYyBT
dHJpbmcgZGVjb2RlUnVuKGNvbnN0IFVDaGFyKiBydW4sIHNpemVfdCBydW5MZW5ndGgsIGNvbnN0
IFRleHRFbmNvZGluZyYpCiAgICAgewogICAgICAgICAvLyBFYWNoICV1LWVzY2FwZSBzZXF1ZW5j
ZSByZXByZXNlbnRzIGEgVVRGLTE2IGNvZGUgdW5pdC4KICAgICAgICAgLy8gU2VlIDxodHRwOi8v
d3d3LnczLm9yZy9JbnRlcm5hdGlvbmFsL2lyaS1lZGl0L2RyYWZ0LWR1ZXJzdC1pcmkuaHRtbCNh
bmNob3IyOT4uCi0gICAgICAgIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlcyA9IHJ1bkxlbmd0aCAv
IHNpemU7CisgICAgICAgIC8vIEZvciAxNi1iaXQgZXNjYXBlIHNlcXVlbmNlcywgd2Uga25vdyB0
aGF0IGZpbmRFbmRPZlJ1bigpIGhhcyBnaXZlbiB1cyBhIGNvbnRpZ3VvdXMgcnVuIG9mIHNlcXVl
bmNlcworICAgICAgICAvLyB3aXRob3V0IGFueSBpbnRlcnZlbmluZyBjaGFyYWN0ZXJzLCBzbyBk
ZWNvZGUgdGhlIHJ1biB3aXRob3V0IGFkZGl0aW9uYWwgY2hlY2tzLgorICAgICAgICBzaXplX3Qg
bnVtYmVyT2ZTZXF1ZW5jZXMgPSBydW5MZW5ndGggLyBzZXF1ZW5jZVNpemU7CiAgICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobnVt
YmVyT2ZTZXF1ZW5jZXMpOwogICAgICAgICB3aGlsZSAobnVtYmVyT2ZTZXF1ZW5jZXMtLSkgewog
ICAgICAgICAgICAgVUNoYXIgY29kZVVuaXQgPSAodG9BU0NJSUhleFZhbHVlKHJ1blsyXSkgPDwg
MTIpIHwgKHRvQVNDSUlIZXhWYWx1ZShydW5bM10pIDw8IDgpIHwgKHRvQVNDSUlIZXhWYWx1ZShy
dW5bNF0pIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKHJ1bls1XSk7CiAgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZChjb2RlVW5pdCk7Ci0gICAgICAgICAgICBydW4gKz0gc2l6ZTsKKyAgICAgICAg
ICAgIHJ1biArPSBzZXF1ZW5jZVNpemU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKICAgICB9CiB9OwogCiBzdHJ1Y3QgVVJMRXNjYXBlU2VxdWVuY2Ugewot
ICAgIGVudW0geyBzaXplID0gMyB9OyAvLyBlLmcuICU0MQotICAgIHN0YXRpYyBzaXplX3QgZmlu
ZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIHsgcmV0
dXJuIHN0cmluZy5maW5kKCclJywgc3RhcnQpOyB9Ci0gICAgc3RhdGljIGJvb2wgbWF0Y2hTdHJp
bmdQcmVmaXgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkKKyAgICBl
bnVtIHsgc2VxdWVuY2VTaXplID0gMyB9OyAvLyBlLmcuICU0MQorICAgIHN0YXRpYyBzaXplX3Qg
ZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3NpdGlvbikg
eyByZXR1cm4gc3RyaW5nLmZpbmQoJyUnLCBzdGFydFBvc2l0aW9uKTsgfQorICAgIHN0YXRpYyBz
aXplX3QgZmluZEVuZE9mUnVuKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3Np
dGlvbiwgc2l6ZV90IGVuZFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKHN0cmluZy5sZW5n
dGgoKSAtIHN0YXJ0IDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHN0cmluZ1tzdGFydF0gPT0gJyUnICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3Rh
cnQgKyAxXSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDJdKTsKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGVuY29kaW5ncyBt
YXkgYmUgQmlnNS9HQkssIHdoaWNoIGhhdmUgdmFsdWVzIAorICAgICAgICAvLyBpbiB0aGUgcmFu
Z2UgMHg0MCAtIDB4N0YgYXMgdGhlIHNlY29uZCBieXRlIG9mIHRoZWlyIHNlcXVlbmNlcy4gVGhl
c2UgbmVlZCB0byBiZSBwYXNzZWQKKyAgICAgICAgLy8gdG8gdGhlIGRlY29kZXIgYXMgcGFydCBv
ZiB0aGUgcnVuIHRvIGdldCB0aGUgY29ycmVjdCBvdXRwdXQgKGUuZy4gdGhlIHJ1biAlWFhjJVhY
JVhYJVhYY2NjCisgICAgICAgIC8vIHNob3VsZCBiZSBkZWNvZGVkIGFzICVYWGMlWFglWFglWFhj
IGZvbGxvd2VkIGJ5IGNjLCB3aGVyZSBYIGlzIGEgaGV4IGRpZ2l0IGFuZCBjIGlzIGEgY2hhcmFj
dGVyCisgICAgICAgIC8vIGluIHRoZSByYW5nZSAweDQwIC0gMHg3ZikuIFdlIGFwcHJveGltYXRl
IHRoaXMgYnkgc3RvcHBpbmcgdGhlIGF0IHRoZSBmaXJzdCBvdXQgb2YgcmFuZ2UKKyAgICAgICAg
Ly8gdmFsdWUsIGF0IGEgc2Vjb25kIGNvbnNlY3V0aXZlIGluLXJhbmdlIHZhbHVlLCBvciBhdCBh
ICUtc2lnbiB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBhCisgICAgICAgIC8vIHZhbGlkIHNlcXVl
bmNlLiBPdGhlciBlbmNvZGluZ3MgYXJlIHN0aWxsIGNvcnJlY3QgYmVjYXVzZSB0aGUgZGVjb2Rl
ciB3aWxsIHBhc3Mgb24gdGhlCisgICAgICAgIC8vIGluLXJhbmdlIGNoYXJhY3RlcnMgdW5jaGFu
Z2VkLgorICAgICAgICBzaXplX3QgcnVuRW5kID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgYm9v
bCB0cmFpbGluZ0NoYXJhY3RlciA9IGZhbHNlOworICAgICAgICB3aGlsZSAocnVuRW5kIDwgZW5k
UG9zaXRpb24pIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmdbcnVuRW5kXSA9PSAnJScpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZW5kUG9zaXRpb24gLSBydW5FbmQgPj0gc2VxdWVuY2VTaXplICYm
IGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5kICsgMV0pICYmIGlzQVNDSUlIZXhEaWdpdChz
dHJpbmdbcnVuRW5kICsgMl0pKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bkVuZCArPSBzZXF1
ZW5jZVNpemU7CisgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ2hhcmFjdGVyID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdHJpbmdbcnVuRW5kXSA+PSAweDQwICYmIHN0cmluZ1tydW5F
bmRdIDwgMHg4MCAmJiAhdHJhaWxpbmdDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBydW5F
bmQgKz0gMTsKKyAgICAgICAgICAgICAgICB0cmFpbGluZ0NoYXJhY3RlciA9IHRydWU7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcnVuRW5kOwogICAgIH0KICAgICBzdGF0aWMgU3RyaW5nIGRlY29kZVJ1bihjb25z
dCBVQ2hhciogcnVuLCBzaXplX3QgcnVuTGVuZ3RoLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29k
aW5nKQogICAgIHsKLSAgICAgICAgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VzID0gcnVuTGVuZ3Ro
IC8gc2l6ZTsKKyAgICAgICAgLy8gRm9yIFVSTCBlc2NhcGUgc2VxdWVuY2VzLCB3ZSBrbm93IHRo
YXQgZmluZEVuZE9mUnVuKCkgaGFzIGdpdmVuIHVzIGEgcnVuIHdoZXJlIGV2ZXJ5ICUtc2lnbiBp
bnRyb2R1Y2VzCisgICAgICAgIC8vIGEgdmFsaWQgZXNjYXBlIHNlcXVlbmNlLCBidXQgdGhlcmUg
bWF5IGJlIGEgY2hhcmFjdGVyIGJldHdlZW4gdGhlIHNlcXVlbmNlcy4KICAgICAgICAgVmVjdG9y
PGNoYXIsIDUxMj4gYnVmZmVyOwotICAgICAgICBidWZmZXIucmVzaXplKG51bWJlck9mU2VxdWVu
Y2VzKTsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShydW5MZW5ndGgpOyAvLyBVbmVzY2FwaW5nIGhl
eCBzZXF1ZW5jZXMgb25seSBtYWtlcyB0aGUgbGVuZ3RoIHNtYWxsZXIuCiAgICAgICAgIGNoYXIq
IHAgPSBidWZmZXIuZGF0YSgpOwotICAgICAgICB3aGlsZSAobnVtYmVyT2ZTZXF1ZW5jZXMtLSkg
ewotICAgICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFdKSA8PCA0KSB8IHRv
QVNDSUlIZXhWYWx1ZShydW5bMl0pOwotICAgICAgICAgICAgcnVuICs9IHNpemU7CisgICAgICAg
IGNvbnN0IFVDaGFyKiBydW5FbmQgPSBydW4gKyBydW5MZW5ndGg7CisgICAgICAgIHdoaWxlIChy
dW4gPCBydW5FbmQpIHsKKyAgICAgICAgICAgIGlmIChydW5bMF0gPT0gJyUnKSB7CisgICAgICAg
ICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFdKSA8PCA0KSB8IHRvQVNDSUlI
ZXhWYWx1ZShydW5bMl0pOworICAgICAgICAgICAgICAgIHJ1biArPSBzZXF1ZW5jZVNpemU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpwKysgPSBydW5bMF07CisgICAg
ICAgICAgICAgICAgcnVuICs9IDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
QVNTRVJUKGJ1ZmZlci5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihwIC0gYnVmZmVyLmRh
dGEoKSkpOworICAgICAgICBBU1NFUlQoYnVmZmVyLnNpemUoKSA+PSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHAgLSBidWZmZXIuZGF0YSgpKSk7IC8vIFByb3ZlIGJ1ZmZlciBub3Qgb3ZlcnJ1bi4KICAg
ICAgICAgcmV0dXJuIChlbmNvZGluZy5pc1ZhbGlkKCkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGlu
ZygpKS5kZWNvZGUoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogICAgIH0KIH07
CkBAIC05NSw5ICsxMzEsNyBAQCBTdHJpbmcgZGVjb2RlRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0
cmluCiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICBzaXplX3QgZW5jb2RlZFJ1
blBvc2l0aW9uOwogICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0gRXNjYXBlU2VxdWVu
Y2U6OmZpbmRJblN0cmluZyhzdHJpbmcsIHNlYXJjaFBvc2l0aW9uKSkgIT0gbm90Rm91bmQpIHsK
LSAgICAgICAgdW5zaWduZWQgZW5jb2RlZFJ1bkVuZCA9IGVuY29kZWRSdW5Qb3NpdGlvbjsKLSAg
ICAgICAgd2hpbGUgKGxlbmd0aCAtIGVuY29kZWRSdW5FbmQgPj0gRXNjYXBlU2VxdWVuY2U6OnNp
emUgJiYgRXNjYXBlU2VxdWVuY2U6Om1hdGNoU3RyaW5nUHJlZml4KHN0cmluZywgZW5jb2RlZFJ1
bkVuZCkpCi0gICAgICAgICAgICBlbmNvZGVkUnVuRW5kICs9IEVzY2FwZVNlcXVlbmNlOjpzaXpl
OworICAgICAgICBzaXplX3QgZW5jb2RlZFJ1bkVuZCA9IEVzY2FwZVNlcXVlbmNlOjpmaW5kRW5k
T2ZSdW4oc3RyaW5nLCBlbmNvZGVkUnVuUG9zaXRpb24sIGxlbmd0aCk7CiAgICAgICAgIHNlYXJj
aFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKICAgICAgICAgaWYgKGVuY29kZWRSdW5FbmQgPT0g
ZW5jb2RlZFJ1blBvc2l0aW9uKSB7CiAgICAgICAgICAgICArK3NlYXJjaFBvc2l0aW9uOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTA1NDMwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDEtMTggIFRvbSBTZXBleiAgPHRzZXBlekBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgZGVjb2RlRXNjYXBlU2VxdWVuY2VzKCkgbm90IGNvcnJl
Y3QgZm9yIHNvbWUgZW5jb2RpbmdzIChHQkssIEJpZzUsIC4uLikuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2Fu
Y2hvci1mcmFtZXMtZ2JrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmNob3ItZ2JrLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUt
b25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdC
Sy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1k
ZWNvZGUtMTZiaXQtdW5pY29kZS5wbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
dHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFy
LXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2Ut
dXJsLWVuY29kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLUJpZzUtY2hhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmln
NS1jaGFyMi5odG1sOiBBZGRlZC4KKwogMjAxMi0wMS0xOSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NjQ0CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9y
LWZyYW1lcy1nYmstZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9yLWZyYW1lcy1n
YmstZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACisKKworLS0tLS0t
LS0KK0ZyYW1lOiAnbWFpbicKKy0tLS0tLS0tCitUZXN0cyB0aGF0IGxvYWRpbmcgYSBmcmFtZSB3
aXRoIGEgVVJMIHRoYXQgY29udGFpbnMgYSBmcmFnbWVudCBwb2ludGVkIGF0IGEgbmFtZWQgYW5j
aG9yIGFjdHVhbGx5IHNjcm9sbHMgdG8gdGhhdCBhbmNob3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0ID4gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmJvZHku
c2Nyb2xsVG9wID4gMCBpcyB0cnVlCitQQVNTIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wICsgZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCA+IDIwMDAgaXMgdHJ1ZQorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitUaGlzIGlzIGFuIGFu
Y2hvciBwb2ludCBuYW1lZCBhcyB0aGUgdW5pY29kZSBlcXVpdmFsZW50IG9mIHRoZSBnYmsgc2Vx
dWVuY2UgJWE5ZyAodGVzdCB0cmFpbGluZyBsb3cgYnl0ZSkuCisKKy0tLS0tLS0tCitGcmFtZTog
J2Zvb3RlcicKKy0tLS0tLS0tCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9hbmNob3ItZnJhbWVzLWdiay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorICA8bWV0YSBodHRwLWVx
dWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1nYmsiLz4KKyAg
PCEtLSBTZWUgcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sIGZvciBkZXNjcmlw
dGlvbiBvZiB0ZXN0IC0tPgorICA8IS0tIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTMxNiAtLT4KKyAgPHNjcmlwdD4KKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hp
bGRGcmFtZXNBc1RleHQoKTsKKyAgPC9zY3JpcHQ+CisgIDxmcmFtZXNldCByb3dzPSI5MCUsMTAl
Ij4KKyAgICA8ZnJhbWUgc3JjPSJyZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmNob3ItZ2JrLmh0bWwj
JTg5ZyIgbmFtZT0ibWFpbiI+CisgICAgPGZyYW1lIHNyYz0iYWJvdXQ6YmxhbmsiIG5hbWU9ImZv
b3RlciI+CisgIDwvZnJhbWVzZXQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZnJh
bWUtd2l0aC1hbmNob3ItZ2JrLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1s
OyBjaGFyc2V0PWdiayIvPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICAgICBkZXNjcmlwdGlvbignVGVzdHMgdGhhdCBsb2FkaW5nIGEgZnJhbWUg
d2l0aCBhIFVSTCB0aGF0IGNvbnRhaW5zIGEgZnJhZ21lbnQgcG9pbnRlZCBhdCBhIG5hbWVkIGFu
Y2hvciBhY3R1YWxseSBzY3JvbGxzIHRvIHRoYXQgYW5jaG9yLicpOworCisgICAgICAvLyBDaGVj
ayBzY3JvbGwgcG9zaXRpb24gaW4gYSB0aW1lb3V0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhbmNo
b3IgaGFzCisgICAgICAvLyBiZWVuIHNjcm9sbGVkIHRvLgorICAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYm9keSBpcyB0YWxsZXIg
dGhhbiB0aGUgdmlld3BvcnQgKGkuZS4gc2Nyb2xsaW5nIGlzCisgICAgICAgICAgLy8gcmVxdWly
ZWQpLgorICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQg
PiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0Jyk7CisgICAgICAgICAgCisg
ICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIHNjcm9sbGVkIGF0IGxlYXN0IGEgbGl0dGxlIGJpdAor
ICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPiAwJyk7Cisg
ICAgICAgICAgCisgICAgICAgICAgLy8gQW5kIHRoZSBib3R0b20gb2YgdGhlIHZpZXdhYmxlIGFy
ZWEgc2hvdWxkIGJlIGF0IGxlYXN0IDIwMDAgcGl4ZWxzIGZyb20gdGhlIHRvcCwgZHVlIHRvIHRo
ZSBzcGFjZXIgZWxlbWVudCBhYm92ZS4KKyAgICAgICAgICBzaG91bGRCZVRydWUoJ2RvY3VtZW50
LmJvZHkuc2Nyb2xsVG9wICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCA+
IDIwMDAnKTsKKyAgICAgICAgICAKKyAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsgICAgICAgICAg
CisgICAgICB9LCAwKTsKKyAgICB9CisgICAgCisgICAgdmFyIGpzVGVzdElzQXN5bmMgPSB0cnVl
OworICA8L3NjcmlwdD4gIAorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPGRpdiBz
dHlsZT0iaGVpZ2h0OiAyMDAwcHgiPgorICA8IS0tIFNwYWNlciB0byBtYWtlIHN1cmUgdGhhdCB0
aGUgbmFtZWQgYW5jaG9yIGJlbG93IHJlcXVpcmVzIHNjcm9sbGluZyAtLT4KKzwvZGl2PgorCis8
YSBuYW1lPSImI3g1ODZmIj5UaGlzIGlzIGFuIGFuY2hvciBwb2ludCBuYW1lZCBhcyB0aGUgdW5p
Y29kZSBlcXVpdmFsZW50IG9mIHRoZSBnYmsgc2VxdWVuY2UgJWE5ZyAodGVzdCB0cmFpbGluZyBs
b3cgYnl0ZSk8L2E+LgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkstY2hh
ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lm
cmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBz
Y3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9u
bG9hZC1HQkstY2hhci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1l
LW9ubG9hZC1HQkstY2hhci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9z
dDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hh
cnNldD1HQksmcT08aWZyYW1lJTIwb25sb2FkPSVDN09qYXZhc2NyaXB0OmFsZXJ0KGRvY3VtZW50
LmRvbWFpbik+PC9pZnJhbWU+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdC
Sy1jaGFyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L2ltZy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQg
c2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVy
cm9yLUdCSy1jaGFyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJy
b3ItR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlv
dXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1HQksm
cT08aW1nJTIwc3JjPSUyMDElMjBvbmVycm9yPSVDN09qYXZhc2NyaXB0OmFsZXJ0KGRvY3VtZW50
LmRvbWFpbik+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBA
CitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0
LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmln
NS1jaGFyMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJp
ZzUtY2hhcjIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1CaWc1JnE9
PHNjcmlwdD5hbGVydCgvWFMlODFTUy8pPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctQmlnNS1jaGFyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0
ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGlu
IHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29k
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZi
aXQtdW5pY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJs
LWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQg
c2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10
YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQt
dGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRY
U1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVz
b3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNvZGUucGw/Y2hhcnNldD1CaWc1
JnE9PHNjcmlwdD5hbGVydCgvWFMldTAwMjUyNTgxU1MvKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBSZWZ1c2VkIHRvIGV4
ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdp
dGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJp
ZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBs
P2NoYXJzZXQ9QmlnNSZxPTxzY3JpcHQ+YWxlcnQoL1hTJTI1ODFTUy8pPC9zY3JpcHQ+Ij4KKzwv
aWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
QmlnNS1jaGFyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9y
RW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNy
Yz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2Vj
aG8taW50ZXJ0YWcucGw/Y2hhcnNldD1CaWc1JnE9PHNjcmlwdCUyMCU4OWc+YWxlcnQobG9jYXRp
b24pPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVy
dGFnLWRlY29kZS0xNmJpdC11bmljb2RlLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNv
ZGUtMTZiaXQtdW5pY29kZS5wbAkocmV2aXNpb24gMTA1NDMwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29k
ZS0xNmJpdC11bmljb2RlLnBsCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIHN1YiBk
ZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMKICAgICByZXR1cm4gJHJlc3VsdDsKIH0K
IAotcHJpbnQgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04XG5cbiI7Citt
eSAkY2hhcnNldFRvVXNlID0gJGNnaS0+cGFyYW0oJ2NoYXJzZXQnKSA/ICRjZ2ktPnBhcmFtKCdj
aGFyc2V0JykgOiAiVVRGLTgiOworcHJpbnQgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFy
c2V0PSRjaGFyc2V0VG9Vc2VcblxuIjsKIAogcHJpbnQgIjwhRE9DVFlQRSBodG1sPlxuIjsKIHBy
aW50ICI8aHRtbD5cbiI7CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0
X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiAxMDU0MzApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NDIsNiArMTk0Miw5IEBAIEJVR19KQVBIRVQgV0lOIDogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWUKIC8vIE5vdGU6IHRoaXMgdGVzdCB3YXMgYWxzbyBtYXJrZWQgYXMgZmxha3kgb24g
V0lOIFJFTEVBU0UgYWJvdmUsIEJVR0NSMzEzNDIuCiBCVUdDUjM5NDIzIDogc2VjdXJpdHkvYmxv
Y2stdGVzdC5odG1sID0gVElNRU9VVAogCisvLyBEdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGluIGhh
bmRsaW5nIHRleHQgZW5jb2RpbmdzIGluIEtVUkwgYW5kIGdvb2dsZXVybC4KK0JVR1dLMjA1NTkg
OiBodHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9yLWZyYW1lcy1nYmsuaHRtbCA9IFRFWFQKKwog
QlVHV0szNjY2NiA6IHN0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1vdmVyLXF1b3RhLmh0bWwgPSBURVhU
CiAKIEJVR1dLMzcyODMgOiBmYXN0L292ZXJmbG93L3Njcm9sbGJhci1yZXN0b3JlZC1hbmQtdGhl
bi1sb2NrZWQuaHRtbCA9IFRFWFQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123597</attachid>
            <date>2012-01-23 12:22:30 -0800</date>
            <delta_ts>2012-01-23 14:37:13 -0800</delta_ts>
            <desc>New patch for review.</desc>
            <filename>patch_71316.txt</filename>
            <type>text/plain</type>
            <size>23758</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAxLTIzICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRlY29kZUVzY2FwZVNlcXVlbmNl
cygpIG5vdCBjb3JyZWN0IGZvciBzb21lIGVuY29kaW5ncyAoR0JLLCBCaWc1LCAuLi4pLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzIHRyYWlsaW5n
IHVuZXNjYXBlZCBieXRlcyBpbnRvIHRoZSBjaGFyYWN0ZXIgc2V0IGRlY29kZXIgdG8gZ2V0IGNv
cnJlY3QKKyAgICAgICAgcmVzdWx0cyBpbiBmYWNlIG9mIGVuY29kaW5ncyB3aGljaCByZS11c2Ug
QVNDSUkgdmFsdWVzIGluIHNlcXVlbmNlcy4KKyAgICAgICAgCisgICAgICAgIFRlc3RzOiBodHRw
L3Rlc3RzL25hdmlnYXRpb24vYW5jaG9yLWZyYW1lcy1nYmsuaHRtbAorICAgICAgICAgICAgICAg
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRt
bAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVy
cm9yLUdCSy1jaGFyLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNv
ZGUuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUuaHRtbAorICAgICAgICAgICAgICAg
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLmh0bWwK
KyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LUJpZzUtY2hhcjIuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVT
ZXF1ZW5jZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlVuaWNvZGUxNkJpdEVzY2FwZVNlcXVlbmNl
OjpmaW5kSW5TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VW5pY29kZTE2Qml0RXNjYXBlU2Vx
dWVuY2U6OmZpbmRFbmRPZlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpVbmljb2RlMTZCaXRFc2Nh
cGVTZXF1ZW5jZTo6ZGVjb2RlUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEVzY2FwZVNlcXVl
bmNlOjpmaW5kSW5TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VVJMRXNjYXBlU2VxdWVuY2U6
OmZpbmRFbmRPZlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpVUkxFc2NhcGVTZXF1ZW5jZTo6ZGVj
b2RlUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUVzY2FwZVNlcXVlbmNlcyk6CisKIDIw
MTItMDEtMjMgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gQWRkIFdlYlNvbGlkQ29sb3JMYXllciBpbnRlcmZhY2UgdG8gZHJh
dyBub24tdGV4dHVyZWQgY29sb3IgbGF5ZXJzIGZyb20gQXVyYS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkocmV2
aXNpb24gMTA1NjMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2Nh
cGVTZXF1ZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgRGFuaWVsIEJhdGVzIChkYmF0ZXNAaW50dWRhdGEuY29tKS4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUsIGluYy4gIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTksNiAr
MTAsOSBAQAogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCkBA
IC0zNiw1MiArNDAsODEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBTZWUgPGh0dHA6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvUGVyY2VudC1lbmNvZGluZyNOb24tc3RhbmRhcmRfaW1wbGVt
ZW50YXRpb25zPi4KIHN0cnVjdCBVbmljb2RlMTZCaXRFc2NhcGVTZXF1ZW5jZSB7Ci0gICAgZW51
bSB7IHNpemUgPSA2IH07IC8vIGUuZy4gJXUyNkM0Ci0gICAgc3RhdGljIHNpemVfdCBmaW5kSW5T
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgeyByZXR1cm4g
c3RyaW5nLmZpbmQoIiV1Iiwgc3RhcnQpOyB9Ci0gICAgc3RhdGljIGJvb2wgbWF0Y2hTdHJpbmdQ
cmVmaXgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkKKyAgICBlbnVt
IHsgc2VxdWVuY2VTaXplID0gNiB9OyAvLyBlLmcuICV1MjZDNAorICAgIHN0YXRpYyBzaXplX3Qg
ZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3NpdGlvbikg
eyByZXR1cm4gc3RyaW5nLmZpbmQoIiV1Iiwgc3RhcnRQb3NpdGlvbik7IH0KKyAgICBzdGF0aWMg
c2l6ZV90IGZpbmRFbmRPZlJ1bihjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0UG9z
aXRpb24sIHNpemVfdCBlbmRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIGlmIChzdHJpbmcubGVu
Z3RoKCkgLSBzdGFydCA8IHNpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHJldHVybiBzdHJpbmdbc3RhcnRdID09ICclJyAmJiBzdHJpbmdbc3RhcnQgKyAxXSA9PSAndScK
LSAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3RhcnQgKyAyXSkgJiYgaXNB
U0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDNdKQotICAgICAgICAgICAgJiYgaXNBU0NJSUhl
eERpZ2l0KHN0cmluZ1tzdGFydCArIDRdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0
ICsgNV0pOworICAgICAgICBzaXplX3QgcnVuRW5kID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAg
d2hpbGUgKGVuZFBvc2l0aW9uIC0gcnVuRW5kID49IHNlcXVlbmNlU2l6ZSAmJiBzdHJpbmdbcnVu
RW5kXSA9PSAnJScgJiYgc3RyaW5nW3J1bkVuZCArIDFdID09ICd1JworICAgICAgICAgICAgICAg
JiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5FbmQgKyAyXSkgJiYgaXNBU0NJSUhleERpZ2l0
KHN0cmluZ1tydW5FbmQgKyAzXSkKKyAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChz
dHJpbmdbcnVuRW5kICsgNF0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5kICsgNV0p
KSB7CisgICAgICAgICAgICBydW5FbmQgKz0gc2VxdWVuY2VTaXplOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBydW5FbmQ7CiAgICAgfQogICAgIHN0YXRpYyBTdHJpbmcgZGVjb2RlUnVuKGNv
bnN0IFVDaGFyKiBydW4sIHNpemVfdCBydW5MZW5ndGgsIGNvbnN0IFRleHRFbmNvZGluZyYpCiAg
ICAgewogICAgICAgICAvLyBFYWNoICV1LWVzY2FwZSBzZXF1ZW5jZSByZXByZXNlbnRzIGEgVVRG
LTE2IGNvZGUgdW5pdC4KICAgICAgICAgLy8gU2VlIDxodHRwOi8vd3d3LnczLm9yZy9JbnRlcm5h
dGlvbmFsL2lyaS1lZGl0L2RyYWZ0LWR1ZXJzdC1pcmkuaHRtbCNhbmNob3IyOT4uCi0gICAgICAg
IHNpemVfdCBudW1iZXJPZlNlcXVlbmNlcyA9IHJ1bkxlbmd0aCAvIHNpemU7CisgICAgICAgIC8v
IEZvciAxNi1iaXQgZXNjYXBlIHNlcXVlbmNlcywgd2Uga25vdyB0aGF0IGZpbmRFbmRPZlJ1bigp
IGhhcyBnaXZlbiB1cyBhIGNvbnRpZ3VvdXMgcnVuIG9mIHNlcXVlbmNlcworICAgICAgICAvLyB3
aXRob3V0IGFueSBpbnRlcnZlbmluZyBjaGFyYWN0ZXJzLCBzbyBkZWNvZGUgdGhlIHJ1biB3aXRo
b3V0IGFkZGl0aW9uYWwgY2hlY2tzLgorICAgICAgICBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZXMg
PSBydW5MZW5ndGggLyBzZXF1ZW5jZVNpemU7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKICAgICAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZTZXF1ZW5jZXMpOwog
ICAgICAgICB3aGlsZSAobnVtYmVyT2ZTZXF1ZW5jZXMtLSkgewogICAgICAgICAgICAgVUNoYXIg
Y29kZVVuaXQgPSAodG9BU0NJSUhleFZhbHVlKHJ1blsyXSkgPDwgMTIpIHwgKHRvQVNDSUlIZXhW
YWx1ZShydW5bM10pIDw8IDgpIHwgKHRvQVNDSUlIZXhWYWx1ZShydW5bNF0pIDw8IDQpIHwgdG9B
U0NJSUhleFZhbHVlKHJ1bls1XSk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjb2RlVW5p
dCk7Ci0gICAgICAgICAgICBydW4gKz0gc2l6ZTsKKyAgICAgICAgICAgIHJ1biArPSBzZXF1ZW5j
ZVNpemU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKICAg
ICB9CiB9OwogCiBzdHJ1Y3QgVVJMRXNjYXBlU2VxdWVuY2UgewotICAgIGVudW0geyBzaXplID0g
MyB9OyAvLyBlLmcuICU0MQotICAgIHN0YXRpYyBzaXplX3QgZmluZEluU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIHsgcmV0dXJuIHN0cmluZy5maW5kKCcl
Jywgc3RhcnQpOyB9Ci0gICAgc3RhdGljIGJvb2wgbWF0Y2hTdHJpbmdQcmVmaXgoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkKKyAgICBlbnVtIHsgc2VxdWVuY2VTaXpl
ID0gMyB9OyAvLyBlLmcuICU0MQorICAgIHN0YXRpYyBzaXplX3QgZmluZEluU3RyaW5nKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3NpdGlvbikgeyByZXR1cm4gc3RyaW5nLmZp
bmQoJyUnLCBzdGFydFBvc2l0aW9uKTsgfQorICAgIHN0YXRpYyBzaXplX3QgZmluZEVuZE9mUnVu
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnRQb3NpdGlvbiwgc2l6ZV90IGVuZFBv
c2l0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSAtIHN0YXJ0IDwgc2l6
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ1tzdGFy
dF0gPT0gJyUnICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3RhcnQgKyAxXSkgJiYgaXNBU0NJ
SUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDJdKTsKKyAgICAgICAgLy8gTWFrZSB0aGUgc2ltcGxp
ZnlpbmcgYXNzdW1wdGlvbiB0aGF0IHN1cHBvcnRlZCBlbmNvZGluZ3MgbWF5IGhhdmUgdXAgdG8g
dHdvIHVuZXNjYXBlZCBjaGFyYWN0ZXJzCisgICAgICAgIC8vIGluIHRoZSByYW5nZSAweDQwIC0g
MHg3RiBhcyB0aGUgdHJhaWxpbmcgYnl0ZXMgb2YgdGhlaXIgc2VxdWVuY2VzIHdoaWNoIG5lZWQg
dG8gYmUgcGFzc2VkIGludG8gdGhlCisgICAgICAgIC8vIGRlY29kZXIgYXMgcGFydCBvZiB0aGUg
cnVuLiBJbiBvdGhlciB3b3Jkcywgd2UgZW5kIHRoZSBydW4gYXQgdGhlIGZpcnN0IHZhbHVlIG91
dHNpZGUgb2YgdGhlCisgICAgICAgIC8vIDB4NDAgLSAweDdmIHJhbmdlLCBhZnRlciB0d28gdmFs
dWVzIGluIHRoaXMgcmFuZ2UsIG9yIGF0IGEgJS1zaWduIHRoYXQgZG9lcyBub3QgaW50cm9kdWNl
IGEgdmFsaWQKKyAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlLgorICAgICAgICBzaXplX3QgcnVu
RW5kID0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgaW50IG51bWJlck9mVHJhaWxpbmdDaGFyYWN0
ZXJzID0gMDsKKyAgICAgICAgd2hpbGUgKHJ1bkVuZCA8IGVuZFBvc2l0aW9uKSB7CisgICAgICAg
ICAgICBpZiAoc3RyaW5nW3J1bkVuZF0gPT0gJyUnKSB7CisgICAgICAgICAgICAgICAgaWYgKGVu
ZFBvc2l0aW9uIC0gcnVuRW5kID49IHNlcXVlbmNlU2l6ZSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3Ry
aW5nW3J1bkVuZCArIDFdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDJdKSkg
eworICAgICAgICAgICAgICAgICAgICBydW5FbmQgKz0gc2VxdWVuY2VTaXplOworICAgICAgICAg
ICAgICAgICAgICBudW1iZXJPZlRyYWlsaW5nQ2hhcmFjdGVycyA9IDA7CisgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNl
IGlmIChzdHJpbmdbcnVuRW5kXSA+PSAweDQwICYmIHN0cmluZ1tydW5FbmRdIDwgMHg4MCAmJiBu
dW1iZXJPZlRyYWlsaW5nQ2hhcmFjdGVycyA8IDIpIHsKKyAgICAgICAgICAgICAgICBydW5FbmQg
Kz0gMTsKKyAgICAgICAgICAgICAgICBudW1iZXJPZlRyYWlsaW5nQ2hhcmFjdGVycyArPSAxOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJ1bkVuZDsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyBkZWNvZGVSdW4o
Y29uc3QgVUNoYXIqIHJ1biwgc2l6ZV90IHJ1bkxlbmd0aCwgY29uc3QgVGV4dEVuY29kaW5nJiBl
bmNvZGluZykKICAgICB7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlcyA9IHJ1bkxl
bmd0aCAvIHNpemU7CisgICAgICAgIC8vIEZvciBVUkwgZXNjYXBlIHNlcXVlbmNlcywgd2Uga25v
dyB0aGF0IGZpbmRFbmRPZlJ1bigpIGhhcyBnaXZlbiB1cyBhIHJ1biB3aGVyZSBldmVyeSAlLXNp
Z24gaW50cm9kdWNlcworICAgICAgICAvLyBhIHZhbGlkIGVzY2FwZSBzZXF1ZW5jZSwgYnV0IHRo
ZXJlIG1heSBiZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIHNlcXVlbmNlcy4KICAgICAgICAgVmVj
dG9yPGNoYXIsIDUxMj4gYnVmZmVyOwotICAgICAgICBidWZmZXIucmVzaXplKG51bWJlck9mU2Vx
dWVuY2VzKTsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShydW5MZW5ndGgpOyAvLyBVbmVzY2FwaW5n
IGhleCBzZXF1ZW5jZXMgb25seSBtYWtlcyB0aGUgbGVuZ3RoIHNtYWxsZXIuCiAgICAgICAgIGNo
YXIqIHAgPSBidWZmZXIuZGF0YSgpOwotICAgICAgICB3aGlsZSAobnVtYmVyT2ZTZXF1ZW5jZXMt
LSkgewotICAgICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFdKSA8PCA0KSB8
IHRvQVNDSUlIZXhWYWx1ZShydW5bMl0pOwotICAgICAgICAgICAgcnVuICs9IHNpemU7CisgICAg
ICAgIGNvbnN0IFVDaGFyKiBydW5FbmQgPSBydW4gKyBydW5MZW5ndGg7CisgICAgICAgIHdoaWxl
IChydW4gPCBydW5FbmQpIHsKKyAgICAgICAgICAgIGlmIChydW5bMF0gPT0gJyUnKSB7CisgICAg
ICAgICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFdKSA8PCA0KSB8IHRvQVND
SUlIZXhWYWx1ZShydW5bMl0pOworICAgICAgICAgICAgICAgIHJ1biArPSBzZXF1ZW5jZVNpemU7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpwKysgPSBydW5bMF07Cisg
ICAgICAgICAgICAgICAgcnVuICs9IDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgQVNTRVJUKGJ1ZmZlci5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihwIC0gYnVmZmVy
LmRhdGEoKSkpOworICAgICAgICBBU1NFUlQoYnVmZmVyLnNpemUoKSA+PSBzdGF0aWNfY2FzdDxz
aXplX3Q+KHAgLSBidWZmZXIuZGF0YSgpKSk7IC8vIFByb3ZlIGJ1ZmZlciBub3Qgb3ZlcnJ1bi4K
ICAgICAgICAgcmV0dXJuIChlbmNvZGluZy5pc1ZhbGlkKCkgPyBlbmNvZGluZyA6IFVURjhFbmNv
ZGluZygpKS5kZWNvZGUoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwogICAgIH0K
IH07CkBAIC05NSw5ICsxMjgsNyBAQCBTdHJpbmcgZGVjb2RlRXNjYXBlU2VxdWVuY2VzKGNvbnN0
IFN0cmluCiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICBzaXplX3QgZW5jb2Rl
ZFJ1blBvc2l0aW9uOwogICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0gRXNjYXBlU2Vx
dWVuY2U6OmZpbmRJblN0cmluZyhzdHJpbmcsIHNlYXJjaFBvc2l0aW9uKSkgIT0gbm90Rm91bmQp
IHsKLSAgICAgICAgdW5zaWduZWQgZW5jb2RlZFJ1bkVuZCA9IGVuY29kZWRSdW5Qb3NpdGlvbjsK
LSAgICAgICAgd2hpbGUgKGxlbmd0aCAtIGVuY29kZWRSdW5FbmQgPj0gRXNjYXBlU2VxdWVuY2U6
OnNpemUgJiYgRXNjYXBlU2VxdWVuY2U6Om1hdGNoU3RyaW5nUHJlZml4KHN0cmluZywgZW5jb2Rl
ZFJ1bkVuZCkpCi0gICAgICAgICAgICBlbmNvZGVkUnVuRW5kICs9IEVzY2FwZVNlcXVlbmNlOjpz
aXplOworICAgICAgICBzaXplX3QgZW5jb2RlZFJ1bkVuZCA9IEVzY2FwZVNlcXVlbmNlOjpmaW5k
RW5kT2ZSdW4oc3RyaW5nLCBlbmNvZGVkUnVuUG9zaXRpb24sIGxlbmd0aCk7CiAgICAgICAgIHNl
YXJjaFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKICAgICAgICAgaWYgKGVuY29kZWRSdW5FbmQg
PT0gZW5jb2RlZFJ1blBvc2l0aW9uKSB7CiAgICAgICAgICAgICArK3NlYXJjaFBvc2l0aW9uOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMTA1NjM0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMDEtMjMgIFRvbSBTZXBleiAgPHRzZXBl
ekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgZGVjb2RlRXNjYXBlU2VxdWVuY2VzKCkgbm90IGNv
cnJlY3QgZm9yIHNvbWUgZW5jb2RpbmdzIChHQkssIEJpZzUsIC4uLikuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMxNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2FuY2hvci1mcmFtZXMtZ2JrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmNob3ItZ2JrLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJh
bWUtb25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9y
LUdCSy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRh
Zy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNo
YXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1j
aGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdp
Y2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2Rl
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLUJpZzUtY2hhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
QmlnNS1jaGFyMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0
X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTItMDEtMjMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVcGRhdGUgdGhlIGJhc2VsaW5lcyBmb3IgYSBudW1iZXIgb2Yg
dGVzdHMgdGhhdCB1c2UgZ3JhZGllbnRzLiAgVGhlIG5ldwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9yLWZyYW1lcy1n
YmstZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMiBAQAorCisKKy0tLS0tLS0tCitGcmFtZTogJ21haW4nCistLS0tLS0tLQorVGVz
dHMgdGhhdCBsb2FkaW5nIGEgZnJhbWUgd2l0aCBhIFVSTCB0aGF0IGNvbnRhaW5zIGEgZnJhZ21l
bnQgcG9pbnRlZCBhdCBhIG5hbWVkIGFuY2hvciBhY3R1YWxseSBzY3JvbGxzIHRvIHRoYXQgYW5j
aG9yLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1bWVudC5ib2R5
Lm9mZnNldEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgaXMg
dHJ1ZQorUEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA+IDAgaXMgdHJ1ZQorUEFTUyBkb2N1
bWVudC5ib2R5LnNjcm9sbFRvcCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWln
aHQgPiAyMDAwIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorVGhpcyBpcyBhbiBhbmNob3IgcG9pbnQgbmFtZWQgYXMgdGhlIHVuaWNvZGUg
ZXF1aXZhbGVudCBvZiB0aGUgZ2JrIHNlcXVlbmNlICVhOWcgKHRlc3QgdHJhaWxpbmcgbG93IGJ5
dGUpLgorCistLS0tLS0tLQorRnJhbWU6ICdmb290ZXInCistLS0tLS0tLQorCkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9yLWZyYW1lcy1nYmsuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9yLWZyYW1l
cy1nYmsuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9hbmNob3ItZnJhbWVzLWdiay5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBA
Cis8aHRtbD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9Z2JrIi8+CisgIDwhLS0gU2VlIHJlc291cmNlcy9mcmFtZS13aXRoLWFu
Y2hvci1nYmsuaHRtbCBmb3IgZGVzY3JpcHRpb24gb2YgdGVzdCAtLT4KKyAgPCEtLSBTZWUgYWxz
byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTYgLS0+CisgIDxz
Y3JpcHQ+CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgIDwvc2NyaXB0Pgor
ICA8ZnJhbWVzZXQgcm93cz0iOTAlLDEwJSI+CisgICAgPGZyYW1lIHNyYz0icmVzb3VyY2VzL2Zy
YW1lLXdpdGgtYW5jaG9yLWdiay5odG1sIyU4OWciIG5hbWU9Im1haW4iPgorICAgIDxmcmFtZSBz
cmM9ImFib3V0OmJsYW5rIiBuYW1lPSJmb290ZXIiPgorICA8L2ZyYW1lc2V0PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9mcmFtZS13
aXRoLWFuY2hvci1nYmsuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy9mcmFt
ZS13aXRoLWFuY2hvci1nYmsuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50
LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1nYmsiLz4KKyAgPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAg
PHNjcmlwdD4KKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgZGVzY3JpcHRpb24oJ1Rl
c3RzIHRoYXQgbG9hZGluZyBhIGZyYW1lIHdpdGggYSBVUkwgdGhhdCBjb250YWlucyBhIGZyYWdt
ZW50IHBvaW50ZWQgYXQgYSBuYW1lZCBhbmNob3IgYWN0dWFsbHkgc2Nyb2xscyB0byB0aGF0IGFu
Y2hvci4nKTsKKworICAgICAgLy8gQ2hlY2sgc2Nyb2xsIHBvc2l0aW9uIGluIGEgdGltZW91dCB0
byBtYWtlIHN1cmUgdGhhdCB0aGUgYW5jaG9yIGhhcworICAgICAgLy8gYmVlbiBzY3JvbGxlZCB0
by4KKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIGJvZHkgaXMgdGFsbGVyIHRoYW4gdGhlIHZpZXdwb3J0IChpLmUuIHNjcm9sbGlu
ZyBpcworICAgICAgICAgIC8vIHJlcXVpcmVkKS4KKyAgICAgICAgICBzaG91bGRCZVRydWUoJ2Rv
Y3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVu
dEhlaWdodCcpOworICAgICAgICAgIAorICAgICAgICAgIC8vIFdlIHNob3VsZCBiZSBzY3JvbGxl
ZCBhdCBsZWFzdCBhIGxpdHRsZSBiaXQKKyAgICAgICAgICBzaG91bGRCZVRydWUoJ2RvY3VtZW50
LmJvZHkuc2Nyb2xsVG9wID4gMCcpOworICAgICAgICAgIAorICAgICAgICAgIC8vIEFuZCB0aGUg
Ym90dG9tIG9mIHRoZSB2aWV3YWJsZSBhcmVhIHNob3VsZCBiZSBhdCBsZWFzdCAyMDAwIHBpeGVs
cyBmcm9tIHRoZSB0b3AsIGR1ZSB0byB0aGUgc3BhY2VyIGVsZW1lbnQgYWJvdmUuCisgICAgICAg
ICAgc2hvdWxkQmVUcnVlKCdkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCArIGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPiAyMDAwJyk7CisgICAgICAgICAgCisgICAgICAgICAg
ZmluaXNoSlNUZXN0KCk7ICAgICAgICAgIAorICAgICAgfSwgMCk7CisgICAgfQorICAgIAorICAg
IHZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgPC9zY3JpcHQ+ICAKKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxkaXYgc3R5bGU9ImhlaWdodDogMjAwMHB4Ij4KKyAgPCEtLSBT
cGFjZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG5hbWVkIGFuY2hvciBiZWxvdyByZXF1aXJlcyBz
Y3JvbGxpbmcgLS0+Cis8L2Rpdj4KKworPGEgbmFtZT0iJiN4NTg2ZiI+VGhpcyBpcyBhbiBhbmNo
b3IgcG9pbnQgbmFtZWQgYXMgdGhlIHVuaWNvZGUgZXF1aXZhbGVudCBvZiB0aGUgZ2JrIHNlcXVl
bmNlICVhOWcgKHRlc3QgdHJhaWxpbmcgbG93IGJ5dGUpPC9hPi4KKzxzY3JpcHQgc3JjPSIuLi8u
Li8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdC
Sy1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQg
dG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91
bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9h
ZC1HQkstY2hhci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNT
QXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlm
cmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291
cmNlcy9lY2hvLWludGVydGFnLnBsP2NoYXJzZXQ9R0JLJnE9PGlmcmFtZSUyMG9ubG9hZD0lQzdP
amF2YXNjcmlwdDphbGVydChkb2N1bWVudC5kb21haW4pPjwvaWZyYW1lPiI+Cis8L2lmcmFtZT4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9y
LUdCSy1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBSZWZ1c2Vk
IHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZv
dW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1H
QkstY2hhci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVu
YWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9
Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hv
LWludGVydGFnLnBsP2NoYXJzZXQ9R0JLJnE9PGltZyUyMHNyYz0lMjAxJTIwb25lcnJvcj0lQzdP
amF2YXNjcmlwdDphbGVydChkb2N1bWVudC5kb21haW4pPiI+Cis8L2lmcmFtZT4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9zY3JpcHQtdGFnLUJpZzUtY2hhcjItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hh
cjItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBSZWZ1c2VkIHRvIGV4
ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdp
dGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNo
YXIyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJs
ZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0
dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWlu
dGVydGFnLnBsP2NoYXJzZXQ9QmlnNSZxPTxzY3JpcHQ+YWxlcnQoL1hTJTgxU1MvKTwvc2NyaXB0
PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUt
Y2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBN
RVNTQUdFOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNv
ZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2lj
ZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUt
Y2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBSZWZ1c2Vk
IHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZv
dW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2
Yml0LXVuaWNvZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0x
NmJpdC11bmljb2RlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29k
ZS0xNmJpdC11bmljb2RlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAw
MC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJp
dC11bmljb2RlLnBsP2NoYXJzZXQ9QmlnNSZxPTxzY3JpcHQ+YWxlcnQoL1hTJXUwMDI1MjU4MVNT
Lyk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
dHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNl
LXVybC1lbmNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVy
bC1lbmNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNP
TEUgTUVTU0FHRTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJj
ZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIt
dHdpY2UtdXJsLWVuY29kZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5j
b2RlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNl
dFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9y
ZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jaGFyc2V0PUJpZzUmcT08c2NyaXB0PmFsZXJ0KC9Y
UyUyNTgxU1MvKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJp
ZzUtY2hhci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmln
NS1jaGFyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0
eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP2NoYXJzZXQ9QmlnNSZxPTxz
Y3JpcHQlMjAlODlnPmFsZXJ0KGxvY2F0aW9uKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVz
b3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNvZGUucGwJKHJldmlzaW9uIDEw
NTYzMykKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNv
dXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNyArNjcsOCBAQCBzdWIgZGVjb2RlMTZCaXRVbmljb2RlRXNjYXBlU2VxdWVuY2Vz
CiAgICAgcmV0dXJuICRyZXN1bHQ7CiB9CiAKLXByaW50ICJDb250ZW50LVR5cGU6IHRleHQvaHRt
bDsgY2hhcnNldD1VVEYtOFxuXG4iOworbXkgJGNoYXJzZXRUb1VzZSA9ICRjZ2ktPnBhcmFtKCdj
aGFyc2V0JykgPyAkY2dpLT5wYXJhbSgnY2hhcnNldCcpIDogIlVURi04IjsKK3ByaW50ICJDb250
ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0kY2hhcnNldFRvVXNlXG5cbiI7CiAKIHByaW50
ICI8IURPQ1RZUEUgaHRtbD5cbiI7CiBwcmludCAiPGh0bWw+XG4iOwpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkocmV2
aXNpb24gMTA1NjMzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBl
Y3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOTQxLDYgKzE5NDEsOSBAQCBCVUdfSkFQ
SEVUIFdJTiA6IGh0dHAvdGVzdHMveG1saHR0cHJlcXVlCiAvLyBOb3RlOiB0aGlzIHRlc3Qgd2Fz
IGFsc28gbWFya2VkIGFzIGZsYWt5IG9uIFdJTiBSRUxFQVNFIGFib3ZlLCBCVUdDUjMxMzQyLgog
QlVHQ1IzOTQyMyA6IHNlY3VyaXR5L2Jsb2NrLXRlc3QuaHRtbCA9IFRJTUVPVVQKIAorLy8gRHVl
IHRvIHRoZSBkaWZmZXJlbmNlcyBpbiBoYW5kbGluZyB0ZXh0IGVuY29kaW5ncyBpbiBLVVJMIGFu
ZCBnb29nbGV1cmwuCitCVUdXSzIwNTU5IDogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2FuY2hvci1m
cmFtZXMtZ2JrLmh0bWwgPSBURVhUCisKIEJVR1dLMzY2NjYgOiBzdG9yYWdlL29wZW4tZGF0YWJh
c2Utb3Zlci1xdW90YS5odG1sID0gVEVYVAogCiBCVUdXSzM3MjgzIDogZmFzdC9vdmVyZmxvdy9z
Y3JvbGxiYXItcmVzdG9yZWQtYW5kLXRoZW4tbG9ja2VkLmh0bWwgPSBURVhUCg==
</data>
<flag name="review"
          id="124672"
          type_id="1"
          status="+"
          setter="dbates"
    />
    <flag name="commit-queue"
          id="124673"
          type_id="3"
          status="-"
          setter="dbates"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123623</attachid>
            <date>2012-01-23 14:37:13 -0800</date>
            <delta_ts>2012-01-23 21:08:29 -0800</delta_ts>
            <desc>Patch w/nits fixed.</desc>
            <filename>patch_71316.txt</filename>
            <type>text/plain</type>
            <size>23774</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNTYzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAxLTIzICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRlY29kZUVzY2FwZVNlcXVlbmNl
cygpIG5vdCBjb3JyZWN0IGZvciBzb21lIGVuY29kaW5ncyAoR0JLLCBCaWc1LCAuLi4pLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzMTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzIHRyYWlsaW5n
IHVuZXNjYXBlZCBieXRlcyBpbnRvIHRoZSBjaGFyYWN0ZXIgc2V0IGRlY29kZXIgdG8gZ2V0IGNv
cnJlY3QKKyAgICAgICAgcmVzdWx0cyBpbiB0aGUgcHJlc2VuY2Ugb2YgZW5jb2RpbmdzIHdoaWNo
IHJlLXVzZSBBU0NJSSB2YWx1ZXMgaW4gc2VxdWVuY2VzLgorICAgICAgICAKKyAgICAgICAgVGVz
dHM6IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkst
Y2hhci5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
aW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZi
aXQtdW5pY29kZS5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNo
YXIuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyMi5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0RlY29k
ZUVzY2FwZVNlcXVlbmNlcy5oOgorICAgICAgICAoV2ViQ29yZTo6VW5pY29kZTE2Qml0RXNjYXBl
U2VxdWVuY2U6OmZpbmRJblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpVbmljb2RlMTZCaXRF
c2NhcGVTZXF1ZW5jZTo6ZmluZEVuZE9mUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWNvZGUx
NkJpdEVzY2FwZVNlcXVlbmNlOjpkZWNvZGVSdW4pOgorICAgICAgICAoV2ViQ29yZTo6VVJMRXNj
YXBlU2VxdWVuY2U6OmZpbmRJblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpVUkxFc2NhcGVT
ZXF1ZW5jZTo6ZmluZEVuZE9mUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEVzY2FwZVNlcXVl
bmNlOjpkZWNvZGVSdW4pOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlRXNjYXBlU2VxdWVuY2Vz
KToKKwogMjAxMi0wMS0yMyAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgV2ViU29saWRDb2xvckxheWVyIGludGVyZmFj
ZSB0byBkcmF3IG5vbi10ZXh0dXJlZCBjb2xvciBsYXllcnMgZnJvbSBBdXJhLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNl
cy5oCShyZXZpc2lvbiAxMDU2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Rl
Y29kZUVzY2FwZVNlcXVlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBEYW5pZWwgQmF0ZXMgKGRiYXRlc0BpbnR1ZGF0YS5jb20p
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSwgaW5j
LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtOSw2ICsxMCw5IEBACiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKQEAgLTM2LDUyICs0MCw4MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFNlZSA8
aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QZXJjZW50LWVuY29kaW5nI05vbi1zdGFuZGFy
ZF9pbXBsZW1lbnRhdGlvbnM+Lgogc3RydWN0IFVuaWNvZGUxNkJpdEVzY2FwZVNlcXVlbmNlIHsK
LSAgICBlbnVtIHsgc2l6ZSA9IDYgfTsgLy8gZS5nLiAldTI2QzQKLSAgICBzdGF0aWMgc2l6ZV90
IGZpbmRJblN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKSB7
IHJldHVybiBzdHJpbmcuZmluZCgiJXUiLCBzdGFydCk7IH0KLSAgICBzdGF0aWMgYm9vbCBtYXRj
aFN0cmluZ1ByZWZpeChjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKQor
ICAgIGVudW0geyBzZXF1ZW5jZVNpemUgPSA2IH07IC8vIGUuZy4gJXUyNkM0CisgICAgc3RhdGlj
IHNpemVfdCBmaW5kSW5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHNpemVfdCBzdGFydFBv
c2l0aW9uKSB7IHJldHVybiBzdHJpbmcuZmluZCgiJXUiLCBzdGFydFBvc2l0aW9uKTsgfQorICAg
IHN0YXRpYyBzaXplX3QgZmluZEVuZE9mUnVuKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qg
c3RhcnRQb3NpdGlvbiwgc2l6ZV90IGVuZFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKHN0
cmluZy5sZW5ndGgoKSAtIHN0YXJ0IDwgc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgcmV0dXJuIHN0cmluZ1tzdGFydF0gPT0gJyUnICYmIHN0cmluZ1tzdGFydCArIDFd
ID09ICd1JwotICAgICAgICAgICAgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDJd
KSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsgM10pCi0gICAgICAgICAgICAmJiBp
c0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsgNF0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJp
bmdbc3RhcnQgKyA1XSk7CisgICAgICAgIHNpemVfdCBydW5FbmQgPSBzdGFydFBvc2l0aW9uOwor
ICAgICAgICB3aGlsZSAoZW5kUG9zaXRpb24gLSBydW5FbmQgPj0gc2VxdWVuY2VTaXplICYmIHN0
cmluZ1tydW5FbmRdID09ICclJyAmJiBzdHJpbmdbcnVuRW5kICsgMV0gPT0gJ3UnCisgICAgICAg
ICAgICAgICAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDJdKSAmJiBpc0FTQ0lJ
SGV4RGlnaXQoc3RyaW5nW3J1bkVuZCArIDNdKQorICAgICAgICAgICAgICAgJiYgaXNBU0NJSUhl
eERpZ2l0KHN0cmluZ1tydW5FbmQgKyA0XSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tydW5F
bmQgKyA1XSkpIHsKKyAgICAgICAgICAgIHJ1bkVuZCArPSBzZXF1ZW5jZVNpemU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHJ1bkVuZDsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyBkZWNv
ZGVSdW4oY29uc3QgVUNoYXIqIHJ1biwgc2l6ZV90IHJ1bkxlbmd0aCwgY29uc3QgVGV4dEVuY29k
aW5nJikKICAgICB7CiAgICAgICAgIC8vIEVhY2ggJXUtZXNjYXBlIHNlcXVlbmNlIHJlcHJlc2Vu
dHMgYSBVVEYtMTYgY29kZSB1bml0LgogICAgICAgICAvLyBTZWUgPGh0dHA6Ly93d3cudzMub3Jn
L0ludGVybmF0aW9uYWwvaXJpLWVkaXQvZHJhZnQtZHVlcnN0LWlyaS5odG1sI2FuY2hvcjI5Pi4K
LSAgICAgICAgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VzID0gcnVuTGVuZ3RoIC8gc2l6ZTsKKyAg
ICAgICAgLy8gRm9yIDE2LWJpdCBlc2NhcGUgc2VxdWVuY2VzLCB3ZSBrbm93IHRoYXQgZmluZEVu
ZE9mUnVuKCkgaGFzIGdpdmVuIHVzIGEgY29udGlndW91cyBydW4gb2Ygc2VxdWVuY2VzCisgICAg
ICAgIC8vIHdpdGhvdXQgYW55IGludGVydmVuaW5nIGNoYXJhY3RlcnMsIHNvIGRlY29kZSB0aGUg
cnVuIHdpdGhvdXQgYWRkaXRpb25hbCBjaGVja3MuCisgICAgICAgIHNpemVfdCBudW1iZXJPZlNl
cXVlbmNlcyA9IHJ1bkxlbmd0aCAvIHNlcXVlbmNlU2l6ZTsKICAgICAgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOwogICAgICAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShudW1iZXJPZlNlcXVl
bmNlcyk7CiAgICAgICAgIHdoaWxlIChudW1iZXJPZlNlcXVlbmNlcy0tKSB7CiAgICAgICAgICAg
ICBVQ2hhciBjb2RlVW5pdCA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzJdKSA8PCAxMikgfCAodG9B
U0NJSUhleFZhbHVlKHJ1blszXSkgPDwgOCkgfCAodG9BU0NJSUhleFZhbHVlKHJ1bls0XSkgPDwg
NCkgfCB0b0FTQ0lJSGV4VmFsdWUocnVuWzVdKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGNvZGVVbml0KTsKLSAgICAgICAgICAgIHJ1biArPSBzaXplOworICAgICAgICAgICAgcnVuICs9
IHNlcXVlbmNlU2l6ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOwogICAgIH0KIH07CiAKIHN0cnVjdCBVUkxFc2NhcGVTZXF1ZW5jZSB7Ci0gICAgZW51bSB7
IHNpemUgPSAzIH07IC8vIGUuZy4gJTQxCi0gICAgc3RhdGljIHNpemVfdCBmaW5kSW5TdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgeyByZXR1cm4gc3RyaW5n
LmZpbmQoJyUnLCBzdGFydCk7IH0KLSAgICBzdGF0aWMgYm9vbCBtYXRjaFN0cmluZ1ByZWZpeChj
b25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKQorICAgIGVudW0geyBzZXF1
ZW5jZVNpemUgPSAzIH07IC8vIGUuZy4gJTQxCisgICAgc3RhdGljIHNpemVfdCBmaW5kSW5TdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHNpemVfdCBzdGFydFBvc2l0aW9uKSB7IHJldHVybiBz
dHJpbmcuZmluZCgnJScsIHN0YXJ0UG9zaXRpb24pOyB9CisgICAgc3RhdGljIHNpemVfdCBmaW5k
RW5kT2ZSdW4oY29uc3QgU3RyaW5nJiBzdHJpbmcsIHNpemVfdCBzdGFydFBvc2l0aW9uLCBzaXpl
X3QgZW5kUG9zaXRpb24pCiAgICAgewotICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIC0gc3Rh
cnQgPCBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gc3Ry
aW5nW3N0YXJ0XSA9PSAnJScgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDFdKSAm
JiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsgMl0pOworICAgICAgICAvLyBNYWtlIHRo
ZSBzaW1wbGlmeWluZyBhc3N1bXB0aW9uIHRoYXQgc3VwcG9ydGVkIGVuY29kaW5ncyBtYXkgaGF2
ZSB1cCB0byB0d28gdW5lc2NhcGVkIGNoYXJhY3RlcnMKKyAgICAgICAgLy8gaW4gdGhlIHJhbmdl
IDB4NDAgLSAweDdGIGFzIHRoZSB0cmFpbGluZyBieXRlcyBvZiB0aGVpciBzZXF1ZW5jZXMgd2hp
Y2ggbmVlZCB0byBiZSBwYXNzZWQgaW50byB0aGUKKyAgICAgICAgLy8gZGVjb2RlciBhcyBwYXJ0
IG9mIHRoZSBydW4uIEluIG90aGVyIHdvcmRzLCB3ZSBlbmQgdGhlIHJ1biBhdCB0aGUgZmlyc3Qg
dmFsdWUgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgLy8gMHg0MCAtIDB4N0YgcmFuZ2UsIGFmdGVy
IHR3byB2YWx1ZXMgaW4gdGhpcyByYW5nZSwgb3IgYXQgYSAlLXNpZ24gdGhhdCBkb2VzIG5vdCBp
bnRyb2R1Y2UgYSB2YWxpZAorICAgICAgICAvLyBlc2NhcGUgc2VxdWVuY2UuCisgICAgICAgIHNp
emVfdCBydW5FbmQgPSBzdGFydFBvc2l0aW9uOworICAgICAgICBpbnQgbnVtYmVyT2ZUcmFpbGlu
Z0NoYXJhY3RlcnMgPSAwOworICAgICAgICB3aGlsZSAocnVuRW5kIDwgZW5kUG9zaXRpb24pIHsK
KyAgICAgICAgICAgIGlmIChzdHJpbmdbcnVuRW5kXSA9PSAnJScpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZW5kUG9zaXRpb24gLSBydW5FbmQgPj0gc2VxdWVuY2VTaXplICYmIGlzQVNDSUlIZXhE
aWdpdChzdHJpbmdbcnVuRW5kICsgMV0pICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdbcnVuRW5k
ICsgMl0pKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bkVuZCArPSBzZXF1ZW5jZVNpemU7Cisg
ICAgICAgICAgICAgICAgICAgIG51bWJlck9mVHJhaWxpbmdDaGFyYWN0ZXJzID0gMDsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHN0cmluZ1tydW5FbmRdID49IDB4NDAgJiYgc3RyaW5nW3J1bkVuZF0gPD0g
MHg3RiAmJiBudW1iZXJPZlRyYWlsaW5nQ2hhcmFjdGVycyA8IDIpIHsKKyAgICAgICAgICAgICAg
ICBydW5FbmQgKz0gMTsKKyAgICAgICAgICAgICAgICBudW1iZXJPZlRyYWlsaW5nQ2hhcmFjdGVy
cyArPSAxOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJ1bkVuZDsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyBk
ZWNvZGVSdW4oY29uc3QgVUNoYXIqIHJ1biwgc2l6ZV90IHJ1bkxlbmd0aCwgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZykKICAgICB7Ci0gICAgICAgIHNpemVfdCBudW1iZXJPZlNlcXVlbmNl
cyA9IHJ1bkxlbmd0aCAvIHNpemU7CisgICAgICAgIC8vIEZvciBVUkwgZXNjYXBlIHNlcXVlbmNl
cywgd2Uga25vdyB0aGF0IGZpbmRFbmRPZlJ1bigpIGhhcyBnaXZlbiB1cyBhIHJ1biB3aGVyZSBl
dmVyeSAlLXNpZ24gaW50cm9kdWNlcworICAgICAgICAvLyBhIHZhbGlkIGVzY2FwZSBzZXF1ZW5j
ZSwgYnV0IHRoZXJlIG1heSBiZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIHNlcXVlbmNlcy4KICAg
ICAgICAgVmVjdG9yPGNoYXIsIDUxMj4gYnVmZmVyOwotICAgICAgICBidWZmZXIucmVzaXplKG51
bWJlck9mU2VxdWVuY2VzKTsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShydW5MZW5ndGgpOyAvLyBV
bmVzY2FwaW5nIGhleCBzZXF1ZW5jZXMgb25seSBtYWtlcyB0aGUgbGVuZ3RoIHNtYWxsZXIuCiAg
ICAgICAgIGNoYXIqIHAgPSBidWZmZXIuZGF0YSgpOwotICAgICAgICB3aGlsZSAobnVtYmVyT2ZT
ZXF1ZW5jZXMtLSkgewotICAgICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFd
KSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShydW5bMl0pOwotICAgICAgICAgICAgcnVuICs9IHNp
emU7CisgICAgICAgIGNvbnN0IFVDaGFyKiBydW5FbmQgPSBydW4gKyBydW5MZW5ndGg7CisgICAg
ICAgIHdoaWxlIChydW4gPCBydW5FbmQpIHsKKyAgICAgICAgICAgIGlmIChydW5bMF0gPT0gJyUn
KSB7CisgICAgICAgICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzFdKSA8PCA0
KSB8IHRvQVNDSUlIZXhWYWx1ZShydW5bMl0pOworICAgICAgICAgICAgICAgIHJ1biArPSBzZXF1
ZW5jZVNpemU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpwKysgPSBy
dW5bMF07CisgICAgICAgICAgICAgICAgcnVuICs9IDE7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKGJ1ZmZlci5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihw
IC0gYnVmZmVyLmRhdGEoKSkpOworICAgICAgICBBU1NFUlQoYnVmZmVyLnNpemUoKSA+PSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHAgLSBidWZmZXIuZGF0YSgpKSk7IC8vIFByb3ZlIGJ1ZmZlciBub3Qg
b3ZlcnJ1bi4KICAgICAgICAgcmV0dXJuIChlbmNvZGluZy5pc1ZhbGlkKCkgPyBlbmNvZGluZyA6
IFVURjhFbmNvZGluZygpKS5kZWNvZGUoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkp
OwogICAgIH0KIH07CkBAIC05NSw5ICsxMjgsNyBAQCBTdHJpbmcgZGVjb2RlRXNjYXBlU2VxdWVu
Y2VzKGNvbnN0IFN0cmluCiAgICAgc2l6ZV90IHNlYXJjaFBvc2l0aW9uID0gMDsKICAgICBzaXpl
X3QgZW5jb2RlZFJ1blBvc2l0aW9uOwogICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0g
RXNjYXBlU2VxdWVuY2U6OmZpbmRJblN0cmluZyhzdHJpbmcsIHNlYXJjaFBvc2l0aW9uKSkgIT0g
bm90Rm91bmQpIHsKLSAgICAgICAgdW5zaWduZWQgZW5jb2RlZFJ1bkVuZCA9IGVuY29kZWRSdW5Q
b3NpdGlvbjsKLSAgICAgICAgd2hpbGUgKGxlbmd0aCAtIGVuY29kZWRSdW5FbmQgPj0gRXNjYXBl
U2VxdWVuY2U6OnNpemUgJiYgRXNjYXBlU2VxdWVuY2U6Om1hdGNoU3RyaW5nUHJlZml4KHN0cmlu
ZywgZW5jb2RlZFJ1bkVuZCkpCi0gICAgICAgICAgICBlbmNvZGVkUnVuRW5kICs9IEVzY2FwZVNl
cXVlbmNlOjpzaXplOworICAgICAgICBzaXplX3QgZW5jb2RlZFJ1bkVuZCA9IEVzY2FwZVNlcXVl
bmNlOjpmaW5kRW5kT2ZSdW4oc3RyaW5nLCBlbmNvZGVkUnVuUG9zaXRpb24sIGxlbmd0aCk7CiAg
ICAgICAgIHNlYXJjaFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKICAgICAgICAgaWYgKGVuY29k
ZWRSdW5FbmQgPT0gZW5jb2RlZFJ1blBvc2l0aW9uKSB7CiAgICAgICAgICAgICArK3NlYXJjaFBv
c2l0aW9uOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTA1NjM0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMDEtMjMgIFRvbSBTZXBl
eiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgZGVjb2RlRXNjYXBlU2VxdWVuY2Vz
KCkgbm90IGNvcnJlY3QgZm9yIHNvbWUgZW5jb2RpbmdzIChHQkssIEJpZzUsIC4uLikuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTMxNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmNo
b3ItZ2JrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIu
aHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lt
Zy1vbmVycm9yLUdCSy1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2ltZy1vbmVycm9yLUdCSy1jaGFyLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNo
by1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbDoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10
YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1
LWNoYXItdHdpY2UtdXJsLWVuY29kZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11
cmwtZW5jb2RlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTItMDEtMjMgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVcGRhdGUgdGhlIGJhc2VsaW5lcyBmb3IgYSBu
dW1iZXIgb2YgdGVzdHMgdGhhdCB1c2UgZ3JhZGllbnRzLiAgVGhlIG5ldwpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9y
LWZyYW1lcy1nYmstZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9uYXZpZ2F0aW9uL2FuY2hvci1mcmFtZXMtZ2JrLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMiBAQAorCisKKy0tLS0tLS0tCitGcmFtZTogJ21haW4nCistLS0t
LS0tLQorVGVzdHMgdGhhdCBsb2FkaW5nIGEgZnJhbWUgd2l0aCBhIFVSTCB0aGF0IGNvbnRhaW5z
IGEgZnJhZ21lbnQgcG9pbnRlZCBhdCBhIG5hbWVkIGFuY2hvciBhY3R1YWxseSBzY3JvbGxzIHRv
IHRoYXQgYW5jaG9yLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkb2N1
bWVudC5ib2R5Lm9mZnNldEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRI
ZWlnaHQgaXMgdHJ1ZQorUEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA+IDAgaXMgdHJ1ZQor
UEFTUyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5j
bGllbnRIZWlnaHQgPiAyMDAwIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorVGhpcyBpcyBhbiBhbmNob3IgcG9pbnQgbmFtZWQgYXMgdGhl
IFVuaWNvZGUgZXF1aXZhbGVudCBvZiB0aGUgR0JLIHNlcXVlbmNlICVhOWcgKHRlc3QgdHJhaWxp
bmcgbG93IGJ5dGUpLgorCistLS0tLS0tLQorRnJhbWU6ICdmb290ZXInCistLS0tLS0tLQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5jaG9yLWZyYW1lcy1nYmsu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vYW5j
aG9yLWZyYW1lcy1nYmsuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICA8bWV0YSBodHRwLWVxdWl2PSJD
b250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1nYmsiLz4KKyAgPCEtLSBT
ZWUgcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sIGZvciBkZXNjcmlwdGlvbiBv
ZiB0ZXN0IC0tPgorICA8IS0tIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTMxNiAtLT4KKyAgPHNjcmlwdD4KKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFt
ZXNBc1RleHQoKTsKKyAgPC9zY3JpcHQ+CisgIDxmcmFtZXNldCByb3dzPSI5MCUsMTAlIj4KKyAg
ICA8ZnJhbWUgc3JjPSJyZXNvdXJjZXMvZnJhbWUtd2l0aC1hbmNob3ItZ2JrLmh0bWwjJTg5ZyIg
bmFtZT0ibWFpbiI+CisgICAgPGZyYW1lIHNyYz0iYWJvdXQ6YmxhbmsiIG5hbWU9ImZvb3RlciI+
CisgIDwvZnJhbWVzZXQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25h
dmlnYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvZnJhbWUtd2l0
aC1hbmNob3ItZ2JrLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L25hdmlnYXRpb24vcmVzb3VyY2VzL2ZyYW1lLXdpdGgtYW5jaG9yLWdiay5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cisg
IDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFy
c2V0PWdiayIvPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICAgICBkZXNjcmlwdGlvbignVGVzdHMgdGhhdCBsb2FkaW5nIGEgZnJhbWUgd2l0aCBh
IFVSTCB0aGF0IGNvbnRhaW5zIGEgZnJhZ21lbnQgcG9pbnRlZCBhdCBhIG5hbWVkIGFuY2hvciBh
Y3R1YWxseSBzY3JvbGxzIHRvIHRoYXQgYW5jaG9yLicpOworCisgICAgICAvLyBDaGVjayBzY3Jv
bGwgcG9zaXRpb24gaW4gYSB0aW1lb3V0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhbmNob3IgaGFz
CisgICAgICAvLyBiZWVuIHNjcm9sbGVkIHRvLgorICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYm9keSBpcyB0YWxsZXIgdGhhbiB0
aGUgdmlld3BvcnQgKGkuZS4gc2Nyb2xsaW5nIGlzCisgICAgICAgICAgLy8gcmVxdWlyZWQpLgor
ICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgPiBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0Jyk7CisgICAgICAgICAgCisgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGJlIHNjcm9sbGVkIGF0IGxlYXN0IGEgbGl0dGxlIGJpdAorICAgICAg
ICAgIHNob3VsZEJlVHJ1ZSgnZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPiAwJyk7CisgICAgICAg
ICAgCisgICAgICAgICAgLy8gQW5kIHRoZSBib3R0b20gb2YgdGhlIHZpZXdhYmxlIGFyZWEgc2hv
dWxkIGJlIGF0IGxlYXN0IDIwMDAgcGl4ZWxzIGZyb20gdGhlIHRvcCwgZHVlIHRvIHRoZSBzcGFj
ZXIgZWxlbWVudCBhYm92ZS4KKyAgICAgICAgICBzaG91bGRCZVRydWUoJ2RvY3VtZW50LmJvZHku
c2Nyb2xsVG9wICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCA+IDIwMDAn
KTsKKworICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOyAgICAgICAgICAKKyAgICAgIH0sIDApOwor
ICAgIH0KKyAgICAKKyAgICB2YXIganNUZXN0SXNBc3luYyA9IHRydWU7CisgIDwvc2NyaXB0PiAg
Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8ZGl2IHN0eWxlPSJoZWlnaHQ6IDIw
MDBweCI+CisgIDwhLS0gU3BhY2VyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuYW1lZCBhbmNob3Ig
YmVsb3cgcmVxdWlyZXMgc2Nyb2xsaW5nIC0tPgorPC9kaXY+CisKKzxhIG5hbWU9IiYjeDU4NmYi
PlRoaXMgaXMgYW4gYW5jaG9yIHBvaW50IG5hbWVkIGFzIHRoZSBVbmljb2RlIGVxdWl2YWxlbnQg
b2YgdGhlIEdCSyBzZXF1ZW5jZSAlYTlnICh0ZXN0IHRyYWlsaW5nIGxvdyBieXRlKTwvYT4uCis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
aWZyYW1lLW9ubG9hZC1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1HQkst
Y2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBN
RVNTQUdFOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNv
ZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFyLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL2lmcmFtZS1vbmxvYWQtR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLUdCSy1jaGFy
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkv
eHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jaGFyc2V0PUdCSyZxPTxpZnJh
bWUlMjBvbmxvYWQ9JUM3T2phdmFzY3JpcHQ6YWxlcnQoZG9jdW1lbnQuZG9tYWluKT48L2lmcmFt
ZT4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9pbWctb25lcnJvci1HQkstY2hhci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JL
LWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUg
TUVTU0FHRTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBj
b2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3IvaW1nLW9uZXJyb3ItR0JLLWNoYXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pbWctb25lcnJvci1HQkstY2hhci5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVy
LnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRv
ci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jaGFyc2V0PUdCSyZxPTxpbWclMjBzcmM9JTIw
MSUyMG9uZXJyb3I9JUM3T2phdmFzY3JpcHQ6YWxlcnQoZG9jdW1lbnQuZG9tYWluKT4iPgorPC9p
ZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2Ny
aXB0LXRhZy1CaWc1LWNoYXIyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhcjIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FH
RTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9m
IHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIyLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctQmlnNS1jaGFyMi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyMi5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNl
dFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9y
ZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jaGFyc2V0PUJpZzUmcT08c2NyaXB0PmFsZXJ0KC9Y
UyU4MVNTLyk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1
LWNoYXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy1CaWc1LWNoYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBz
Y3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy1CaWc1LWNoYXItdHdpY2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLTE2Yml0LXVu
aWNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUg
TUVTU0FHRTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBj
b2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXItdHdp
Y2UtdXJsLWVuY29kZS0xNmJpdC11bmljb2RlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3
aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFy
LXR3aWNlLXVybC1lbmNvZGUtMTZiaXQtdW5pY29kZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVk
KHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRw
Oi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRl
cnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbD9jaGFyc2V0PUJpZzUmcT08c2NyaXB0PmFsZXJ0
KC9YUyV1MDAyNTI1ODFTUy8pPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LUJpZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLUJp
ZzUtY2hhci10d2ljZS11cmwtZW5jb2RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3Jp
cHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisK
KwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctQmlnNS1jaGFyLXR3aWNlLXVybC1lbmNvZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNo
YXItdHdpY2UtdXJsLWVuY29kZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctQmlnNS1jaGFyLXR3aWNlLXVy
bC1lbmNvZGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2hhcnNldD1CaWc1JnE9
PHNjcmlwdD5hbGVydCgvWFMlMjU4MVNTLyk8L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1CaWc1LWNoYXIuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9zY3JpcHQtdGFnLUJpZzUtY2hhci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOwor
fQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxo
b3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9j
aGFyc2V0PUJpZzUmcT08c2NyaXB0JTIwJTg5Zz5hbGVydChsb2NhdGlvbik8L3NjcmlwdD4iPgor
PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0
LXVuaWNvZGUucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJpdC11bmljb2Rl
LnBsCShyZXZpc2lvbiAxMDU2MzMpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNvZGUu
cGwJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDggQEAgc3ViIGRlY29kZTE2Qml0VW5pY29k
ZUVzY2FwZVNlcXVlbmNlcwogICAgIHJldHVybiAkcmVzdWx0OwogfQogCi1wcmludCAiQ29udGVu
dC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcblxuIjsKK215ICRjaGFyc2V0VG9Vc2Ug
PSAkY2dpLT5wYXJhbSgnY2hhcnNldCcpID8gJGNnaS0+cGFyYW0oJ2NoYXJzZXQnKSA6ICJVVEYt
OCI7CitwcmludCAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9JGNoYXJzZXRUb1Vz
ZVxuXG4iOwogCiBwcmludCAiPCFET0NUWVBFIGh0bWw+XG4iOwogcHJpbnQgIjxodG1sPlxuIjsK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQJKHJldmlzaW9uIDEwNTYzMykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTk0MSw2ICsx
OTQxLDkgQEAgQlVHX0pBUEhFVCBXSU4gOiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZQogLy8gTm90
ZTogdGhpcyB0ZXN0IHdhcyBhbHNvIG1hcmtlZCBhcyBmbGFreSBvbiBXSU4gUkVMRUFTRSBhYm92
ZSwgQlVHQ1IzMTM0Mi4KIEJVR0NSMzk0MjMgOiBzZWN1cml0eS9ibG9jay10ZXN0Lmh0bWwgPSBU
SU1FT1VUCiAKKy8vIER1ZSB0byB0aGUgZGlmZmVyZW5jZXMgaW4gaGFuZGxpbmcgdGV4dCBlbmNv
ZGluZ3MgaW4gS1VSTCBhbmQgZ29vZ2xldXJsLgorQlVHV0syMDU1OSA6IGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9hbmNob3ItZnJhbWVzLWdiay5odG1sID0gVEVYVAorCiBCVUdXSzM2NjY2IDogc3Rv
cmFnZS9vcGVuLWRhdGFiYXNlLW92ZXItcXVvdGEuaHRtbCA9IFRFWFQKIAogQlVHV0szNzI4MyA6
IGZhc3Qvb3ZlcmZsb3cvc2Nyb2xsYmFyLXJlc3RvcmVkLWFuZC10aGVuLWxvY2tlZC5odG1sID0g
VEVYVAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>