<?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>58837</bug_id>
          
          <creation_ts>2011-04-18 14:54:50 -0700</creation_ts>
          <short_desc>Fieldset disabled attribute does not work</short_desc>
          <delta_ts>2012-03-29 03:15:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>77502</dependson>
          <blocked>76994</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Naoki Takano">honten</reporter>
          <assigned_to name="Zeno Albisser">zeno</assigned_to>
          <cc>abarth</cc>
    
    <cc>adele</cc>
    
    <cc>anantha</cc>
    
    <cc>buildbot</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gkonyukh</cc>
    
    <cc>honten</cc>
    
    <cc>ojan</cc>
    
    <cc>Reelix</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yosin</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>388076</commentid>
    <comment_count>0</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-18 14:54:50 -0700</bug_when>
    <thetext>http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_fieldset_disabled

Chrome Version       : 12.0.725.0 (Official Build 80304) dev
URLs (if applicable) : http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_fieldset_disabled

What steps will reproduce the problem?
1. Go the the above w3schools page
2. Type some text in one of the boxes on the right
3.

What is the expected result?
The boxes are disabled due to the &quot;disabled&quot; tag of the HTML5 fieldset

What happens instead?
You can write in the boxes

Comment 1 by Ree...@gmail.com, Apr 8, 2011
Other browsers tested:
  Add OK or FAIL after other browsers where you have tested this issue:
     IE 9: OK
     Firefox 4: OK

Not only chrome, but I guess Safari have the same problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388077</commentid>
    <comment_count>1</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-18 14:55:09 -0700</bug_when>
    <thetext>Now I know the reason. But still I&apos;m pondering how I should implement it.

&lt;FieldSet&gt; is very similar to &lt;Form&gt; as parent-child relation.  The relation between &lt;Form&gt; and other child field elements is tied in the child element class, FormAssociatedElement.

It is the start point that we implement the similar relation between &lt;FieldSet&gt; and other input field elements.

In FormAssociatedElement,
1, The parent form element, HTMLFormElement, is passed into the constructor and the parent form is set.
2, If no valid parent is passed, traverse ancestors to find the form parent.
3, If the node doesn&apos;t have the form parent and is inserted into the node tree, insertedIntoTree() is called and traverse ancestors to the form parent.

As you know, HTMLFieldSetElement is not special element as HTMLFormElement. So we cannot choose 1 method for HTMLFieldSetElement.

At first, I tried to implement 2 and 3 methods to find HTMLFieldSetElement like HTMLFormElement. But traverse is pretty heavy process and I suspect that it might affect some perfomance impact to Webkit rendering. Because FormAssociatedElement is derived by all input field elements.

Is there any other better way you recommend?

Or is it Ok to implement traverse to find HTMLFieldSetElement?

Please give me any suggestion, comment and advice.

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388323</commentid>
    <comment_count>2</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-18 23:38:27 -0700</bug_when>
    <thetext>Does anybody give me advice or comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389422</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-04-20 12:16:56 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; At first, I tried to implement 2 and 3 methods to find HTMLFieldSetElement like HTMLFormElement. But traverse is pretty heavy process and I suspect that it might affect some perfomance impact to Webkit rendering. Because FormAssociatedElement is derived by all input field elements.

Please go ahead the traversal implementation, and let&apos;s test the performance by appending hundreds form controls to a node of which depth is a few hundreds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389541</commentid>
    <comment_count>4</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-20 14:45:27 -0700</bug_when>
    <thetext>Sure!!

Just a moment...

(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; At first, I tried to implement 2 and 3 methods to find HTMLFieldSetElement like HTMLFormElement. But traverse is pretty heavy process and I suspect that it might affect some perfomance impact to Webkit rendering. Because FormAssociatedElement is derived by all input field elements.
&gt; 
&gt; Please go ahead the traversal implementation, and let&apos;s test the performance by appending hundreds form controls to a node of which depth is a few hundreds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391686</commentid>
    <comment_count>5</comment_count>
      <attachid>90901</attachid>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-24 22:43:14 -0700</bug_when>
    <thetext>Created attachment 90901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391687</commentid>
    <comment_count>6</comment_count>
      <attachid>90901</attachid>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-24 22:46:53 -0700</bug_when>
    <thetext>Comment on attachment 90901
Patch

Please review.

The current test time is 1.2sec. in my environment.

Is this too slow? What do you think?

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391692</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-04-24 23:22:24 -0700</bug_when>
    <thetext>Attachment 90901 did not build on win:
Build output: http://queues.webkit.org/results/8510164</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391858</commentid>
    <comment_count>8</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-04-25 13:22:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; The current test time is 1.2sec. in my environment.
&gt; Is this too slow? What do you think?

How different from the time without the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391859</commentid>
    <comment_count>9</comment_count>
      <attachid>90901</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-04-25 13:23:20 -0700</bug_when>
    <thetext>Comment on attachment 90901
Patch

When the HTMLFieldSet::disabled is flipped, we need to update the style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391915</commentid>
    <comment_count>10</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-25 15:06:56 -0700</bug_when>
    <thetext>Thank you for review.

I have a question.

Do you have any special API call to update the style?

(In reply to comment #9)
&gt; (From update of attachment 90901 [details])
&gt; When the HTMLFieldSet::disabled is flipped, we need to update the style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391929</commentid>
    <comment_count>11</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-04-25 15:26:48 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Do you have any special API call to update the style?

Oh, I&apos;m sorry.  I found HTMLFieldSetElement inherited HTMLFormControlElement, and HTMLFormControlElement::parseMappedAttribute() already had setNeedsStyleRecalc().
However, we should have a test which confirms HTMLFieldSetElement::disabled changes the appearance of its descendant controls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392236</commentid>
    <comment_count>12</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-25 21:30:36 -0700</bug_when>
    <thetext>I measured again.

Then
new: 1.8sec.
old: 0.5sec.
Hmmmmm... it&apos;s pretty slow...

Is there any good way to improve the time?

One thing in my mind is to pass fieldset parent when HTMLFormControlElement is constructed like form parent.

What do you think?

(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; The current test time is 1.2sec. in my environment.
&gt; &gt; Is this too slow? What do you think?
&gt; 
&gt; How different from the time without the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392463</commentid>
    <comment_count>13</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-04-26 08:01:01 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; One thing in my mind is to pass fieldset parent when HTMLFormControlElement is constructed like form parent.

It will work only if the control is created by the parser.  It won&apos;t work for Document::createElement().

HTMLFormControlElement::disabled() is always called in CSS style matching.  So lazy-evaluation for m_fieldSet won&apos;t help.

It is slow because we need to traverse to the root if there is no fieldset ancestor.  We need a efficient way to check existence of fieldset elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392572</commentid>
    <comment_count>14</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-26 11:04:17 -0700</bug_when>
    <thetext>I see.

If we implement efficient check for fieldset,  do you have any suggestion?

Easiest way is to cache the fieldset information into the whole node. But this causes resource problem ;-(

Or do we already have the similar element to refer the implementation?

(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; One thing in my mind is to pass fieldset parent when HTMLFormControlElement is constructed like form parent.
&gt; 
&gt; It will work only if the control is created by the parser.  It won&apos;t work for Document::createElement().
&gt; 
&gt; HTMLFormControlElement::disabled() is always called in CSS style matching.  So lazy-evaluation for m_fieldSet won&apos;t help.
&gt; 
&gt; It is slow because we need to traverse to the root if there is no fieldset ancestor.  We need a efficient way to check existence of fieldset elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392650</commentid>
    <comment_count>15</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-04-26 13:10:27 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Easiest way is to cache the fieldset information into the whole node. But this causes resource problem ;-(

Adding a new data member to Node is not acceptable.  But we have RareData mechanism.  We can associate an HTMLFieldSet reference to a Node only if the Node has an HTMLFieldSet ancestor.

Another idea is to add a &lt;fieldset&gt; counter to Document.  If the counter is 0, we don&apos;t need to search ancestors for a fieldset.


Darin, Adele,
do you have any other ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393400</commentid>
    <comment_count>16</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-27 00:07:55 -0700</bug_when>
    <thetext>Darin or Adele,

Do you have any comments?

I want to choose RareData method tkent suggested.

Thanks,

(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; Easiest way is to cache the fieldset information into the whole node. But this causes resource problem ;-(
&gt; 
&gt; Adding a new data member to Node is not acceptable.  But we have RareData mechanism.  We can associate an HTMLFieldSet reference to a Node only if the Node has an HTMLFieldSet ancestor.
&gt; 
&gt; Another idea is to add a &lt;fieldset&gt; counter to Document.  If the counter is 0, we don&apos;t need to search ancestors for a fieldset.
&gt; 
&gt; 
&gt; Darin, Adele,
&gt; do you have any other ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394297</commentid>
    <comment_count>17</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-28 00:54:08 -0700</bug_when>
    <thetext>I&apos;m looking into NodeRareData.

So can I add another property into nodelist?

(In reply to comment #16)
&gt; Darin or Adele,
&gt; 
&gt; Do you have any comments?
&gt; 
&gt; I want to choose RareData method tkent suggested.
&gt; 
&gt; Thanks,
&gt; 
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; Easiest way is to cache the fieldset information into the whole node. But this causes resource problem ;-(
&gt; &gt; 
&gt; &gt; Adding a new data member to Node is not acceptable.  But we have RareData mechanism.  We can associate an HTMLFieldSet reference to a Node only if the Node has an HTMLFieldSet ancestor.
&gt; &gt; 
&gt; &gt; Another idea is to add a &lt;fieldset&gt; counter to Document.  If the counter is 0, we don&apos;t need to search ancestors for a fieldset.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Darin, Adele,
&gt; &gt; do you have any other ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395158</commentid>
    <comment_count>18</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-29 00:31:38 -0700</bug_when>
    <thetext>I asked Adele a couple of times, he looks very busy.

Is there anybody who can give me any comment about rare data mechanism?

As I wrote here, I try to add fieldset node pointer into nodelist and associate the node to the fieldset. Because it&apos;s kinda cache to the fieldset traversing.

Thanks,

(In reply to comment #17)
&gt; I&apos;m looking into NodeRareData.
&gt; 
&gt; So can I add another property into nodelist?
&gt; 
&gt; (In reply to comment #16)
&gt; &gt; Darin or Adele,
&gt; &gt; 
&gt; &gt; Do you have any comments?
&gt; &gt; 
&gt; &gt; I want to choose RareData method tkent suggested.
&gt; &gt; 
&gt; &gt; Thanks,
&gt; &gt; 
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; &gt; Easiest way is to cache the fieldset information into the whole node. But this causes resource problem ;-(
&gt; &gt; &gt; 
&gt; &gt; &gt; Adding a new data member to Node is not acceptable.  But we have RareData mechanism.  We can associate an HTMLFieldSet reference to a Node only if the Node has an HTMLFieldSet ancestor.
&gt; &gt; &gt; 
&gt; &gt; &gt; Another idea is to add a &lt;fieldset&gt; counter to Document.  If the counter is 0, we don&apos;t need to search ancestors for a fieldset.
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; Darin, Adele,
&gt; &gt; &gt; do you have any other ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395358</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-29 10:53:33 -0700</bug_when>
    <thetext>I don’t think rare data is relevant here. For the record, the cost of adding new rare data is:

    1) Every nodes with rare data uses a bit more memory.
    2) If this adds rare data to more nodes, then memory use goes up by a lot because all other rare data is allocated for each node, too.

But having a pointer to the fieldset from every form element is not the right way to go about this. Instead, when a fieldset is disabled we should iterate all the form items in the fieldset and tell them its state has changed. Then the form items would only need a single bit to keep track of whether the fieldset is disabled.

Similarly we need to detect when DOM manipulations change which fieldset a form element is in.

We need to do more than just return the right value from the disabled function; there is work to do at the time the disabled state changed. We need to trigger the appropriate style recalculation. Actively toggling a flag may is probably the best way to get the code right.

The code in the patch is not really close to right yet, because it doesn’t deal with the style recalculation issue at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395435</commentid>
    <comment_count>20</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-29 12:20:01 -0700</bug_when>
    <thetext>Darin,

Thank you for your comment.

I have a couple of questions to make sure.

(In reply to comment #19)
&gt; I don’t think rare data is relevant here. For the record, the cost of adding new rare data is:
&gt; 
&gt;     1) Every nodes with rare data uses a bit more memory.
&gt;     2) If this adds rare data to more nodes, then memory use goes up by a lot because all other rare data is allocated for each node, too.
&gt; 
&gt; But having a pointer to the fieldset from every form element is not the right way to go about this. Instead, when a fieldset is disabled we should iterate all the form items in the fieldset and tell them its state has changed. Then the form items would only need a single bit to keep track of whether the fieldset is disabled.

I got it. I will add a single bit flag (something like &quot;bool m_parentDisabled : 1;&quot;?) in HTMLFormControlElement. The flag should be independent from m_disabled, because that is only for HTMLFormControlElement instance.

&gt; Similarly we need to detect when DOM manipulations change which fieldset a form element is in.

I have a question. So do you mean to traverse the whole child nodes of fieldset whenever DOM manipulation of HTMLFormControlEmenet happens? It sounds like pretty heavy if here are many fieldsets... What do you think?


&gt; We need to do more than just return the right value from the disabled function; there is work to do at the time the disabled state changed. We need to trigger the appropriate style recalculation. Actively toggling a flag may is probably the best way to get the code right.
&gt; 
&gt; The code in the patch is not really close to right yet, because it doesn’t deal with the style recalculation issue at all.

Ok, I want to make sure. If I try to implement how you suggested here, I will make the new function &quot;setParentDisabled(bool)&quot; in HTMLFormControlElement and triggers setNeedsStyleRecalc() inside. Also when fieldset disable flag is changed, then child setParentDisabled() fucntions are called. Is this correct?

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395614</commentid>
    <comment_count>21</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-04-29 16:36:30 -0700</bug_when>
    <thetext>&gt; Ok, I want to make sure. If I try to implement how you suggested here, I will make the new function &quot;setParentDisabled(bool)&quot; in HTMLFormControlElement and triggers setNeedsStyleRecalc() inside. Also when fieldset disable flag is changed, then child setParentDisabled() fucntions are called. Is this correct?
After thinking again, I suppose we don&apos;t have to call setNeedsStyleRecalc(), because, as tkent already mentioned, 
&quot;HTMLFieldSetElement inherited HTMLFormControlElement, and HTMLFormControlElement::parseMappedAttribute() already had setNeedsStyleRecalc().&quot;

So whenever HTMLFieldSetElement::setDisabled() is called, setNeedsStyleRecalc() is also correctly called, already.

Or do you mean other stuff?

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396426</commentid>
    <comment_count>22</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-05-02 10:00:58 -0700</bug_when>
    <thetext>Darin,

Could you give me your comment?

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396805</commentid>
    <comment_count>23</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-05-02 17:06:19 -0700</bug_when>
    <thetext>(In reply to comment #22)
Takano-san,  you already have enough information.  I recommend starting the implementation of Darin&apos;s algorithm with good tests rather than discussing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396809</commentid>
    <comment_count>24</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-05-02 17:09:16 -0700</bug_when>
    <thetext>Ok,

Still I&apos;m worried about some speed problem that DOM manipulation, but I start implementation.

Thanks,

(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; Takano-san,  you already have enough information.  I recommend starting the implementation of Darin&apos;s algorithm with good tests rather than discussing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396827</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-02 17:36:20 -0700</bug_when>
    <thetext>I may have been wrong about style recalculation. I didn’t realize that a change to the enabled state of any element in a document causes the entire element’s style to be recalculated.

As far as performance is concerned, I am indeed concerned that keeping this up to date when manipulating the DOM could be expensive. But I believe this is true of any design. If we cache a pointer to a fieldset in a form element, that cache needs to be invalidated when DOM mutation occurs.

I’m sorry I can’t give more precise direction than that. There’s nothing fundamentally wrong with putting a fieldset pointer in the rare data of every form element if that really is what it takes to implement this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397274</commentid>
    <comment_count>26</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-05-03 12:45:48 -0700</bug_when>
    <thetext>Darin,

Thank you for your comment.

Now I start implementation according to your suggestion.

I let you know once I;m done.

Thanks,

(In reply to comment #25)
&gt; I may have been wrong about style recalculation. I didn’t realize that a change to the enabled state of any element in a document causes the entire element’s style to be recalculated.
&gt; 
&gt; As far as performance is concerned, I am indeed concerned that keeping this up to date when manipulating the DOM could be expensive. But I believe this is true of any design. If we cache a pointer to a fieldset in a form element, that cache needs to be invalidated when DOM mutation occurs.
&gt; 
&gt; I’m sorry I can’t give more precise direction than that. There’s nothing fundamentally wrong with putting a fieldset pointer in the rare data of every form element if that really is what it takes to implement this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397702</commentid>
    <comment_count>27</comment_count>
      <attachid>92195</attachid>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-05-03 22:57:33 -0700</bug_when>
    <thetext>Created attachment 92195
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397703</commentid>
    <comment_count>28</comment_count>
      <attachid>92195</attachid>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-05-03 23:01:11 -0700</bug_when>
    <thetext>Comment on attachment 92195
Patch

I rewrite the patch.

The current test time is 1.9sec.
It is almost same as the last result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397984</commentid>
    <comment_count>29</comment_count>
      <attachid>92195</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-04 09:41:28 -0700</bug_when>
    <thetext>Comment on attachment 92195
Patch

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

&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:76
&gt; +    // Traverse whole children to find HTMLFormControlElement is added or not.

This code only gets called when an immediate child is changed. What about when a descendant further down the DOM tree is changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398002</commentid>
    <comment_count>30</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-05-04 09:54:37 -0700</bug_when>
    <thetext>I thought childrenChanged() is called whenever any descendant children is changed.

Or is there any other even handler to be called?

Thanks,

(In reply to comment #29)
&gt; (From update of attachment 92195 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92195&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLFieldSetElement.cpp:76
&gt; &gt; +    // Traverse whole children to find HTMLFormControlElement is added or not.
&gt; 
&gt; This code only gets called when an immediate child is changed. What about when a descendant further down the DOM tree is changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398031</commentid>
    <comment_count>31</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-04 10:24:03 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; I thought childrenChanged() is called whenever any descendant children is changed.

I don’t think it is. It would be bad for performance to have these operations be O(depth).

&gt; Or is there any other event handler to be called?

I don’t think there is one for the reason above. That’s part of what makes this so tricky. Perhaps we should look more at how form elements moved into forms associate themselves with forms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398085</commentid>
    <comment_count>32</comment_count>
    <who name="Naoki Takano">honten</who>
    <bug_when>2011-05-04 11:10:36 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; I thought childrenChanged() is called whenever any descendant children is changed.
&gt; 
&gt; I don’t think it is. It would be bad for performance to have these operations be O(depth).
Yeah, that&apos;s why I&apos;m worried...

&gt; &gt; Or is there any other event handler to be called?
&gt; 
&gt; I don’t think there is one for the reason above. That’s part of what makes this so tricky. Perhaps we should look more at how form elements moved into forms associate themselves with forms.
Hmmm...
This item is more tricky for me than I thought...

Ok, I leave it for a while. Once I get more knowledge I&apos;ll try again.

Thank you for taking your time!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428567</commentid>
    <comment_count>33</comment_count>
      <attachid>92195</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-06-27 19:10:20 -0700</bug_when>
    <thetext>Comment on attachment 92195
Patch

r- because of a performance issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436096</commentid>
    <comment_count>34</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-07-12 17:16:08 -0700</bug_when>
    <thetext>*** Bug 64395 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547758</commentid>
    <comment_count>35</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-02 03:08:05 -0800</bug_when>
    <thetext>i&apos;ll try to address the performance issue and the changes further down in the DOM tree and hopefully upload a revised patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548077</commentid>
    <comment_count>36</comment_count>
      <attachid>125164</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-02 12:52:45 -0800</bug_when>
    <thetext>Created attachment 125164
patch for review / feedback.

I changed the implementation to register FormControlElements to ancestor FieldSetElements if available.
So instead of traversing the whole FieldSet subtree after a change we can now simply register FormControlElements once and update them directly on a change. With the provided unit test i could not measure any significant performance impact.
But of course this implementation has it&apos;s weak spots as well. For example, when we have many (hundreds) of edges between a FormControlElement and its FieldSet ancestor, and this constellation many times again.

Any thoughts/comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548357</commentid>
    <comment_count>37</comment_count>
      <attachid>125164</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-02 19:16:20 -0800</bug_when>
    <thetext>Comment on attachment 125164
patch for review / feedback.

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


&gt; LayoutTests/fast/forms/fieldset-disabled.html:10
&gt; +&lt;script src=&quot;script-tests/fieldset-disabled.js&quot;&gt;&lt;/script&gt;

Do not separate the .js file from the HTML file.

&gt; LayoutTests/fast/forms/script-tests/fieldset-disabled.js:10
&gt; +// Enabled by default, user can insertText into the text input field.

Such test information should be shown in the test result.
  debug(&apos;Fieldset is enabled by default. A user can insert text into the text input field:&apos;);

&gt; LayoutTests/fast/forms/script-tests/fieldset-disabled.js:44
&gt; +// Disable fieldSet.
&gt; +fieldSet.disabled = false;

Disable -&gt; Enable

&gt; LayoutTests/fast/forms/script-tests/fieldset-disabled.js:91
&gt; +// Add 3000 text input for performance test.
&gt; +for (var i = 0; i &lt; 3000; i++) {
&gt; +  var newTextInput = document.createElement(&apos;input&apos;);
&gt; +  newTextInput.type = &quot;text&quot;;
&gt; +  td.appendChild(newTextInput);
&gt; +}

You shouldn&apos;t add performance test here.  If you need to add it, it should be in LayoutTests/perf or PerformanceTests/

&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:67
&gt; +void HTMLFieldSetElement::attributeChanged(Attribute* attribute, bool preserveDecls)
&gt; +{
&gt; +    HTMLFormControlElement::attributeChanged(attribute, preserveDecls);
&gt; +    if (attribute-&gt;name() == disabledAttr) {
&gt; +        for (size_t i = 0; i &lt; m_subordinatedFormControlElements.size(); i++) {
&gt; +            HTMLFormControlElement* control = m_subordinatedFormControlElements.at(i);
&gt; +            control-&gt;setParentDisabled(disabled());
&gt; +        }
&gt; +    }
&gt; +}

We usually use parseMappedAttribute() instead of attributeChanged().

We need to call setNeedsStyleRecalc() for each of controls to apply :disabled/:enabled style.

&gt; Source/WebCore/html/HTMLFieldSetElement.h:48
&gt; +    Vector&lt;HTMLFormControlElement*&gt; m_subordinatedFormControlElements;

I don&apos;t think we need to keep track of descendant form controls.

We need to call setNeedsStyleRecalc() for descendant form controls when disabled attribute is change. I think it&apos;s ok to traverse all of descendant nodes and we don&apos;t need to care about the performance of updating HTMLFieldSetElement::disabled at this moment because this cost is not a regression.

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:107
&gt; +    HTMLFieldSetElement* fieldSet = findFieldSetAncestor();

I&apos;m worry about the performance of this.  findFieldSetAncestor() is O(depth).  This will be a performance regression even if a document has no &lt;fieldset&gt; elements.

&gt; Source/WebCore/html/HTMLFormControlElement.h:66
&gt; +    virtual bool disabled() const { return m_disabled || m_parentDisabled; }

Because we have HTMLFormControlElement::m_fieldSetAncestor, we don&apos;t need to have m_parentDisabled at all.  return m_disabled || (m_fieldSetAncestor &amp;&amp; m_fieldSetAncestor-&gt;disabled()) is enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548358</commentid>
    <comment_count>38</comment_count>
      <attachid>125164</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-02 19:17:25 -0800</bug_when>
    <thetext>Comment on attachment 125164
patch for review / feedback.

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

&gt; LayoutTests/fast/forms/script-tests/fieldset-disabled.js:92
&gt; +

We need a test case for nested &lt;fieldset&gt;s.

&lt;fieldset disable&gt;
 &lt;fieldset&gt;
  &lt;input ...&gt;
 &lt;/fieldset&gt;
&lt;/fieldset&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548762</commentid>
    <comment_count>39</comment_count>
      <attachid>125164</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-03 08:49:33 -0800</bug_when>
    <thetext>Comment on attachment 125164
patch for review / feedback.

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

Thank you very much for reviewing! :-)
I&apos;ll upload the fixed version right away.

&gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:10
&gt;&gt; +&lt;script src=&quot;script-tests/fieldset-disabled.js&quot;&gt;&lt;/script&gt;
&gt; 
&gt; Do not separate the .js file from the HTML file.

fixed.

&gt;&gt; LayoutTests/fast/forms/script-tests/fieldset-disabled.js:10
&gt;&gt; +// Enabled by default, user can insertText into the text input field.
&gt; 
&gt; Such test information should be shown in the test result.
&gt;   debug(&apos;Fieldset is enabled by default. A user can insert text into the text input field:&apos;);

okay.. i&apos;ll change that.

&gt;&gt; LayoutTests/fast/forms/script-tests/fieldset-disabled.js:44
&gt;&gt; +fieldSet.disabled = false;
&gt; 
&gt; Disable -&gt; Enable

fixed.

&gt;&gt; LayoutTests/fast/forms/script-tests/fieldset-disabled.js:91
&gt;&gt; +}
&gt; 
&gt; You shouldn&apos;t add performance test here.  If you need to add it, it should be in LayoutTests/perf or PerformanceTests/

I don&apos;t think this kind of performance test makes much sense anyway. - removed it.

&gt;&gt; LayoutTests/fast/forms/script-tests/fieldset-disabled.js:92
&gt;&gt; +
&gt; 
&gt; We need a test case for nested &lt;fieldset&gt;s.
&gt; 
&gt; &lt;fieldset disable&gt;
&gt;  &lt;fieldset&gt;
&gt;   &lt;input ...&gt;
&gt;  &lt;/fieldset&gt;
&gt; &lt;/fieldset&gt;

added.

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:67
&gt;&gt; +}
&gt; 
&gt; We usually use parseMappedAttribute() instead of attributeChanged().
&gt; 
&gt; We need to call setNeedsStyleRecalc() for each of controls to apply :disabled/:enabled style.

fixed.

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.h:48
&gt;&gt; +    Vector&lt;HTMLFormControlElement*&gt; m_subordinatedFormControlElements;
&gt; 
&gt; I don&apos;t think we need to keep track of descendant form controls.
&gt; 
&gt; We need to call setNeedsStyleRecalc() for descendant form controls when disabled attribute is change. I think it&apos;s ok to traverse all of descendant nodes and we don&apos;t need to care about the performance of updating HTMLFieldSetElement::disabled at this moment because this cost is not a regression.

I changed that as you proposed.

&gt;&gt; Source/WebCore/html/HTMLFormControlElement.cpp:107
&gt;&gt; +    HTMLFieldSetElement* fieldSet = findFieldSetAncestor();
&gt; 
&gt; I&apos;m worry about the performance of this.  findFieldSetAncestor() is O(depth).  This will be a performance regression even if a document has no &lt;fieldset&gt; elements.

I am aware of this issue. But I don&apos;t think there is a much better solution for this. Either it is complex or it is memory expensive.
I would suggest to merge this function with HTMLElement::findFormAncestor(). Whenever we execute findFormAncestor we will come by any existing fieldset ancestor anyway.
So we would get it for &quot;free&quot;. But i did not change this yet, we would need to change the naming/implementation of HTMLElement::findFormAncestor() const.
I think this requires a separate bug report &amp; patch.

&gt;&gt; Source/WebCore/html/HTMLFormControlElement.h:66
&gt;&gt; +    virtual bool disabled() const { return m_disabled || m_parentDisabled; }
&gt; 
&gt; Because we have HTMLFormControlElement::m_fieldSetAncestor, we don&apos;t need to have m_parentDisabled at all.  return m_disabled || (m_fieldSetAncestor &amp;&amp; m_fieldSetAncestor-&gt;disabled()) is enough.

Good point. - thx :)
I&apos;ll change that accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548765</commentid>
    <comment_count>40</comment_count>
      <attachid>125343</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-03 08:51:17 -0800</bug_when>
    <thetext>Created attachment 125343
patch for review.

fixed as commented before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549676</commentid>
    <comment_count>41</comment_count>
      <attachid>125343</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-05 19:10:56 -0800</bug_when>
    <thetext>Comment on attachment 125343
patch for review.

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

&gt; LayoutTests/fast/forms/fieldset-disabled.html:163
&gt; +&lt;/html&gt;

We should have more tests:
 - &apos;disabled&apos; IDL attribute should reflect &apos;disabled&apos; HTML attribute regardless of enclosing fieldsets
 - &lt;input&gt; is not disabled in a case of &lt;fieldset disabled&gt;&lt;legend&gt;&lt;input&gt;&lt;/legend&gt;&lt;/fieldset&gt;
 - Changing disabled state of a &lt;fieldset&gt; correctly updates the style of descendant form controls.
  You can use document.defaultView.getComputedStyle(element, null).getProeprtyeValue() or docment.querySelector()/querySelectorAll().

&gt; Source/WebCore/html/FormAssociatedElement.cpp:97
&gt; +    if (element-&gt;isFormControlElement())
&gt; +        static_cast&lt;HTMLFormControlElement*&gt;(element)-&gt;updateFieldSetAncestor();

The code should be in HTMLFormControlElement::insertedIntoTree().

&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:63
&gt; +    if (attr-&gt;name() == disabledAttr) {

We should do this expensive operation only if disabled state is changed.
We had better introduce HTMLFormControlElement::disabledAttributeChanged() virtual function like requiredAttributeChanged().

&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:80
&gt; +        Vector&lt;Node*&gt; nodesToUpdate;
&gt; +        nodesToUpdate.append(this);
&gt; +        while (!nodesToUpdate.isEmpty()) {
&gt; +            // Take the last node from the vector and mark it for style recalculation.
&gt; +            Node* currentNode = nodesToUpdate.last();
&gt; +            nodesToUpdate.removeLast();
&gt; +            HTMLElement* element = toHTMLElement(currentNode);
&gt; +            if (element &amp;&amp; element-&gt;isFormControlElement())
&gt; +                static_cast&lt;HTMLFormControlElement*&gt;(element)-&gt;setNeedsStyleRecalc();
&gt; +
&gt; +            // Append the children of currentNode to the vector of nodes that need to be updated.
&gt; +            currentNode = currentNode-&gt;firstChild();
&gt; +            while (currentNode) {
&gt; +                nodesToUpdate.append(currentNode);
&gt; +                currentNode = currentNode-&gt;nextSibling();
&gt; +            }
&gt; +        }

Node::traverseNextNode(this) is helpful.

&gt; Source/WebCore/html/HTMLFieldSetElement.h:42
&gt; +    virtual void parseMappedAttribute(Attribute*);

You should append &apos;OVERRIDE&apos;.

&gt; Source/WebCore/html/HTMLFieldSetElement.idl:27
&gt; +        attribute [Reflect] boolean disabled;

Please insert this line at the beginning. We&apos;d like to follow the IDL in the HTML specification as possible.
http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#the-fieldset-element</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549678</commentid>
    <comment_count>42</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-05 19:17:29 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; &gt;&gt; Source/WebCore/html/HTMLFormControlElement.cpp:107
&gt; &gt;&gt; +    HTMLFieldSetElement* fieldSet = findFieldSetAncestor();
&gt; &gt; 
&gt; &gt; I&apos;m worry about the performance of this.  findFieldSetAncestor() is O(depth).  This will be a performance regression even if a document has no &lt;fieldset&gt; elements.
&gt; 
&gt; I am aware of this issue. But I don&apos;t think there is a much better solution for this. Either it is complex or it is memory expensive.
&gt; I would suggest to merge this function with HTMLElement::findFormAncestor(). Whenever we execute findFormAncestor we will come by any existing fieldset ancestor anyway.

It&apos;s a nice idea. Would you try it in this bug please?
I don&apos;t think we should commit a patch which has a known performance regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554097</commentid>
    <comment_count>43</comment_count>
      <attachid>125343</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-10 08:57:23 -0800</bug_when>
    <thetext>Comment on attachment 125343
patch for review.

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

As mentioned inline, i changed
HTMLFormElement* HTMLElement::findFormAncestor() const
to
HTMLFormElement* HTMLElement::updateFormAncestors().
This seems to be the least intrusive way of achieving to update disablingAncestor together with formAncestor.
Unfortunately it requires a nasty const_cast in HTMLElement::virtualForm().
Better ideas / opinions on that are very welcome!

&gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:163
&gt;&gt; +&lt;/html&gt;
&gt; 
&gt; We should have more tests:
&gt;  - &apos;disabled&apos; IDL attribute should reflect &apos;disabled&apos; HTML attribute regardless of enclosing fieldsets
&gt;  - &lt;input&gt; is not disabled in a case of &lt;fieldset disabled&gt;&lt;legend&gt;&lt;input&gt;&lt;/legend&gt;&lt;/fieldset&gt;
&gt;  - Changing disabled state of a &lt;fieldset&gt; correctly updates the style of descendant form controls.
&gt;   You can use document.defaultView.getComputedStyle(element, null).getProeprtyeValue() or docment.querySelector()/querySelectorAll().

- added a test for verifying the behavior regardless of enclosing fieldset.
- added implementation + tests for overriding inherited disabled state in case of the first legend element.
- added a test to check that the style of a form control is updated and reflects the disabled state.
- added a test to verify the behavior in case a new legend element is inserted at position 0 in the child liset.

&gt;&gt; Source/WebCore/html/FormAssociatedElement.cpp:97
&gt;&gt; +        static_cast&lt;HTMLFormControlElement*&gt;(element)-&gt;updateFieldSetAncestor();
&gt; 
&gt; The code should be in HTMLFormControlElement::insertedIntoTree().

removed - We don&apos;t need that anymore, because we now update the fieldSetAncestor (disablingAncestor) when executing findFormAncestor (updateFormAncestors).
What was a fieldSetAncestor before has now been renamed to diablingAncestor, because it is the ancestor that propagates its disabled state to its children.
I also renamed findFormAncestor to updateFormAncestors. This should reflect that it implicitly updates the disablingAncestor. Updating the disablingAncestor implicitly allows us, to traverse the tree only once for finding both the formAncestor and the disablingAncestor.
If there is a more beautiful solution for that, that is as performant as this one... i am all up for it!

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:63
&gt;&gt; +    if (attr-&gt;name() == disabledAttr) {
&gt; 
&gt; We should do this expensive operation only if disabled state is changed.
&gt; We had better introduce HTMLFormControlElement::disabledAttributeChanged() virtual function like requiredAttributeChanged().

done.

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:80
&gt;&gt; +        }
&gt; 
&gt; Node::traverseNextNode(this) is helpful.

good hint! - thank you. :)

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.h:42
&gt;&gt; +    virtual void parseMappedAttribute(Attribute*);
&gt; 
&gt; You should append &apos;OVERRIDE&apos;.

This function is not needed anymore, because of the disabledAttributeChanged() function being introduced. - I marked disabledAttributeChanged() OVERRIDE, where applicable.

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.idl:27
&gt;&gt; +        attribute [Reflect] boolean disabled;
&gt; 
&gt; Please insert this line at the beginning. We&apos;d like to follow the IDL in the HTML specification as possible.
&gt; http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#the-fieldset-element

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554099</commentid>
    <comment_count>44</comment_count>
      <attachid>126520</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-10 08:58:26 -0800</bug_when>
    <thetext>Created attachment 126520
patch for review. - fixed issues as commented before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554594</commentid>
    <comment_count>45</comment_count>
      <attachid>126520</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-11 01:24:57 -0800</bug_when>
    <thetext>Comment on attachment 126520
patch for review. - fixed issues as commented before.

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

&gt; LayoutTests/fast/forms/fieldset-disabled.html:241
&gt; +&lt;/html&gt;

More tests:

- Add literal &lt;fieldset disabled&gt; and controls to the HTML to test tree building by the HTML parser, instead of creating a tree by DOM operations.
- &lt;form id=f1&gt;&lt;/form&gt;&lt;fieldset disabled&gt;&lt;input form=f1&gt;&lt;/fieldset&gt;

&gt; Source/WebCore/html/HTMLElement.cpp:876
&gt; +    static_cast&lt;HTMLFormControlElement*&gt;(this)-&gt;setDisablingAncestor(disablingAncestor);

This function is called with non-HTMLFormControlElement &quot;this&quot;.  So the cast is wrong.
http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/js/JSHTMLElementCustom.cpp#L59

I recommend introducing new function member to HTMLFormControlElement, instead of updating HTMLElement:findFormAncestor().

&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:49
&gt; +void HTMLFieldSetElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
&gt; +{
&gt; +    if (childCountDelta) {
&gt; +        // The first direct child HTMLLegendElement should never be disabled.
&gt; +        HTMLLegendElement* firstLegendElement = 0;
&gt; +        for (Node* child = firstChild(); child ; child = child-&gt;nextSibling()) {
&gt; +            HTMLElement* element = toHTMLElement(child);

This code will be O(N^2) if we add N children to a fieldset element.
A form control inside &lt;legend&gt; is very rare.  I don&apos;t think we need to pay such cost for rare cases.

IMO,
 * HTMLFormControlElement should have HTMLFieldSetElement* member.
 * HTMLFormControlElement should have &quot;bool m_isInsideLegend&quot; member. m_isInsideLegend should be true only if the control is inside a legend element and the legend element is a child of a fieldset element.
 * HTMLFormControlElement::disabled() should check if the ancestor legend element is the first child of the fieldset ancestor.

&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:57
&gt; +                legend-&gt;setNeedsStyleRecalc();

&lt;legend&gt; doesn&apos;t have :disabled/:enabled style.
http://www.whatwg.org/specs/web-apps/current-work/multipage/selectors.html#selector-enabled

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:66
&gt;  {
&gt; -    setForm(form ? form : findFormAncestor());
&gt; +    setForm(form ? form : updateFormAncestors());
&gt;      setHasCustomWillOrDidRecalcStyle();

This looks incorrect.
The form argument is non-NULL if the control is added to the document tree by the HTML parser. The code doesn&apos;t update m_disablingAncestor in such case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554599</commentid>
    <comment_count>46</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-11 01:41:45 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; - Add literal &lt;fieldset disabled&gt; and controls to the HTML to test tree building by the HTML parser, instead of creating a tree by DOM operations.

&lt;form&gt;&lt;fieldset disabled&gt;&lt;input&gt;&lt;/fiedset&gt;&lt;/form&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560171</commentid>
    <comment_count>47</comment_count>
      <attachid>126520</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-20 04:26:28 -0800</bug_when>
    <thetext>Comment on attachment 126520
patch for review. - fixed issues as commented before.

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

I&apos;ll upload a new patch with the changes as commented asap.

&gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:241
&gt;&gt; +&lt;/html&gt;
&gt; 
&gt; More tests:
&gt; 
&gt; - Add literal &lt;fieldset disabled&gt; and controls to the HTML to test tree building by the HTML parser, instead of creating a tree by DOM operations.
&gt; - &lt;form id=f1&gt;&lt;/form&gt;&lt;fieldset disabled&gt;&lt;input form=f1&gt;&lt;/fieldset&gt;

Added a test for the parser.

&gt;&gt; Source/WebCore/html/HTMLElement.cpp:876
&gt;&gt; +    static_cast&lt;HTMLFormControlElement*&gt;(this)-&gt;setDisablingAncestor(disablingAncestor);
&gt; 
&gt; This function is called with non-HTMLFormControlElement &quot;this&quot;.  So the cast is wrong.
&gt; http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/js/JSHTMLElementCustom.cpp#L59
&gt; 
&gt; I recommend introducing new function member to HTMLFormControlElement, instead of updating HTMLElement:findFormAncestor().

I reverted findFormAncestor() to its original state.
Further i added a function updateFormAndFieldSetAncestor() as well as a function updateFieldSetAncestor().
The latter is being used when we get the information about the form already from the parser.
I was also considering to make the parser pass a fieldset and a legend as a parameter to the HTMLFormControlElement constructor.
Would this solution be prefered? - I considered it slightly too intrusive and therefore did not implement it.

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:49
&gt;&gt; +            HTMLElement* element = toHTMLElement(child);
&gt; 
&gt; This code will be O(N^2) if we add N children to a fieldset element.
&gt; A form control inside &lt;legend&gt; is very rare.  I don&apos;t think we need to pay such cost for rare cases.
&gt; 
&gt; IMO,
&gt;  * HTMLFormControlElement should have HTMLFieldSetElement* member.
&gt;  * HTMLFormControlElement should have &quot;bool m_isInsideLegend&quot; member. m_isInsideLegend should be true only if the control is inside a legend element and the legend element is a child of a fieldset element.
&gt;  * HTMLFormControlElement::disabled() should check if the ancestor legend element is the first child of the fieldset ancestor.

I added an HTMLFieldSetElement* member to HTMLFormControlElement.
Instead of adding &quot;bool m_isInsideLegend&quot;, i further added an HTMLLegendElement* member to HTMLFormControlElement.
Because just having &quot;bool m_isInsideLegend&quot; does not help to figure out if the first legend in the parent fieldset is also an ancestor of the HTMLFormControlElement.

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:57
&gt;&gt; +                legend-&gt;setNeedsStyleRecalc();
&gt; 
&gt; &lt;legend&gt; doesn&apos;t have :disabled/:enabled style.
&gt; http://www.whatwg.org/specs/web-apps/current-work/multipage/selectors.html#selector-enabled

I removed this part.

&gt;&gt; Source/WebCore/html/HTMLFormControlElement.cpp:66
&gt;&gt;      setHasCustomWillOrDidRecalcStyle();
&gt; 
&gt; This looks incorrect.
&gt; The form argument is non-NULL if the control is added to the document tree by the HTML parser. The code doesn&apos;t update m_disablingAncestor in such case.

This has been addressed with the newly introduced updateFieldSetAncestor() function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560182</commentid>
    <comment_count>48</comment_count>
      <attachid>127809</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-20 04:45:00 -0800</bug_when>
    <thetext>Created attachment 127809
patch for review. - fixed issues as commented before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560183</commentid>
    <comment_count>49</comment_count>
      <attachid>127809</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-20 04:46:59 -0800</bug_when>
    <thetext>Comment on attachment 127809
patch for review. - fixed issues as commented before.

sorry - just realized i forgot to delete HTMLLegendElement::disabled().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560187</commentid>
    <comment_count>50</comment_count>
      <attachid>127810</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-02-20 04:56:28 -0800</bug_when>
    <thetext>Created attachment 127810
patch for review. - removed obsolete HTMLLegendElement::fieldset() as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560225</commentid>
    <comment_count>51</comment_count>
      <attachid>127810</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-20 07:25:15 -0800</bug_when>
    <thetext>Comment on attachment 127810
patch for review. - removed obsolete HTMLLegendElement::fieldset() as well.

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

New failing tests:
fast/parser/form-pointer-4.html
fast/forms/form-attribute-elements-order.html
fast/forms/form-attribute.html
fast/forms/form-attribute-nonexistence-form-id.html
fast/forms/form-attribute-elements-order2.html
fast/forms/radio-remove-form-attr.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560560</commentid>
    <comment_count>52</comment_count>
      <attachid>127810</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-20 19:42:28 -0800</bug_when>
    <thetext>Comment on attachment 127810
patch for review. - removed obsolete HTMLLegendElement::fieldset() as well.

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

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:72
&gt; +    if (form) {
&gt; +        setForm(form);
&gt; +        updateFieldSetAncestor();
&gt; +    } else
&gt; +        updateFormAndFieldSetAncestor();
&gt; +

This might make a performance regression because of ancestor lookup.

&gt; I was also considering to make the parser pass a fieldset and a legend as a parameter to the HTMLFormControlElement constructor.
&gt; Would this solution be prefered? - I considered it slightly too intrusive and therefore did not implement it.

Ideally the parser should pass &lt;fieldset&gt;/&lt;legend&gt; ancestors to the constructor. Let&apos;s talk to the parser guru.

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:119
&gt; +        if (!formAncestor &amp;&amp; ancestor-&gt;hasTagName(formTag)) {
&gt; +            formAncestor = static_cast&lt;HTMLFormElement*&gt;(ancestor);
&gt; +            break;

We shouldn&apos;t break here for the following case:
&lt;fieldset&gt;&lt;form&gt;&lt;input&gt;&lt;/form&gt;&lt;/fieldset&gt;

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:128
&gt; +    if (formAncestor)
&gt; +        setForm(formAncestor);

We need to call setForm() even if formAncestor == 0.

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:255
&gt; +    updateFormAndFieldSetAncestor();

I guess we don&apos;t need this change because FormAssociatedElement::insertedIntoTree() does it.

On the other hand, we should do something in FormAssociatedElement::removedFromTree() to refresh m_fieldSetAncestor and mlegendAncestor?

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:313
&gt; +    return !inFirstLegendOfFieldSet &amp;&amp; (m_disabled || (m_fieldSetAncestor &amp;&amp; m_fieldSetAncestor-&gt;disabled()));

It&apos;s incorrect.
return m_disabled || (m_fieldSetAncesotr &amp;&amp; m_fieldSetAncestor-&gt;disabled() &amp;&amp; !inFirstLegendOfFieldSet);

Because we need to check m_fieldSetAncestor to compute inFirstLegendOfFieldSet, we had better do:

if (m_disabled)
    return true;
if (!m_fieldSetAncestor)
    return false;
if (!m_fieldSetAncesotr-&gt;disabled())
    return false;
if (!m_legendAncestor)
    return true;
return m_legendAncestor == m_fieldSetAncestor-&gt;firstElementChild();  // Note: this is incorrect.

m_fieldSetAncestor-&gt;firstElementChild() is incorrect.  The specification says &quot;the fieldset element&apos;s first legend element child&quot;.  We need to find the first legend element child, then compare to m_legendAncestor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560563</commentid>
    <comment_count>53</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-20 19:47:37 -0800</bug_when>
    <thetext>Adam, Eric,
We have a question about the HTML parser.

The HTMLFormControlElement constructor needs to know its &lt;fieldset&gt; and &lt;legend&gt; ancestor, and I&apos;m afraid adding ancestor lookup code will make a performance regression. Is it reasonable to change the HTML parser so that it keeps track of &lt;fieldset&gt; and &lt;legend&gt;, and passes them to the HTMLFormControlElement constructor?


&gt; &gt; Source/WebCore/html/HTMLFormControlElement.cpp:72
&gt; &gt; +    if (form) {
&gt; &gt; +        setForm(form);
&gt; &gt; +        updateFieldSetAncestor();
&gt; &gt; +    } else
&gt; &gt; +        updateFormAndFieldSetAncestor();
&gt; &gt; +
&gt; 
&gt; This might make a performance regression because of ancestor lookup.
&gt; 
&gt; &gt; I was also considering to make the parser pass a fieldset and a legend as a parameter to the HTMLFormControlElement constructor.
&gt; &gt; Would this solution be prefered? - I considered it slightly too intrusive and therefore did not implement it.
&gt; 
&gt; Ideally the parser should pass &lt;fieldset&gt;/&lt;legend&gt; ancestors to the constructor. Let&apos;s talk to the  parser guru.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560587</commentid>
    <comment_count>54</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-20 20:19:09 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; Adam, Eric,
&gt; We have a question about the HTML parser.
&gt; 
&gt; The HTMLFormControlElement constructor needs to know its &lt;fieldset&gt; and &lt;legend&gt; ancestor, and I&apos;m afraid adding ancestor lookup code will make a performance regression. Is it reasonable to change the HTML parser so that it keeps track of &lt;fieldset&gt; and &lt;legend&gt;, and passes them to the HTMLFormControlElement constructor?

From my limited understanding of this bug, this doesn&apos;t sound like what you want.  It seems you&apos;d rather have a cache for these values which is updated on insertedIntoDocument and removedFromDocument(), no?

I&apos;m not entirely sure why walking your parent chain for these ancestor elements is bad?  How commonly do we need to access this information?  During style resolve?  If so, how often during style resolve?  If we cache this information about our parent chain, when do we invalidate those caches?

if I were writing this, I would write the simple solution which always walked the parent chain for these pointers, and then once I had that working and I had a performance test which demonstrated it was too slow, I would then add caching.

But it&apos;s possible I&apos;m coming late to the party and we&apos;ve already decided your proposal is the proper approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560645</commentid>
    <comment_count>55</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-20 21:48:25 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; From my limited understanding of this bug, this doesn&apos;t sound like what you want.  It seems you&apos;d rather have a cache for these values which is updated on insertedIntoDocument and removedFromDocument(), no?
&gt; 
&gt; I&apos;m not entirely sure why walking your parent chain for these ancestor elements is bad?  How commonly do we need to access this information?  During style resolve?  If so, how often during style resolve?  If we cache this information about our parent chain, when do we invalidate those caches?
&gt; 
&gt; if I were writing this, I would write the simple solution which always walked the parent chain for these pointers, and then once I had that working and I had a performance test which demonstrated it was too slow, I would then add caching.
&gt; 
&gt; But it&apos;s possible I&apos;m coming late to the party and we&apos;ve already decided your proposal is the proper approach?

I might be too afraid of the ancestor lookup cost.

ok, we should do:
 - adding a bool data member to HTMLFormControlElement to represent validity of m_fieldSetAncestor and m_legendAncestor
 - m_fieldSetAncesotr and m_legendAncestor are updated in HTMLFormControlElement::disabled() if the bool data member indicates they are invalid.  They are not updated in other places.
 - removedFromTree() changes the bool data member invalid state.

 - Land the patch, and watch the performance bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560661</commentid>
    <comment_count>56</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-20 22:15:35 -0800</bug_when>
    <thetext>I&apos;m not sure &quot;removedFromTree&quot; is enough?  Is that called when an element is moved within the tree?  I would start w/o caches and try and write a performance test which shows that your cache-less solution is slow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569342</commentid>
    <comment_count>57</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-03-02 00:01:20 -0800</bug_when>
    <thetext>*** Bug 80105 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587828</commentid>
    <comment_count>58</comment_count>
      <attachid>133832</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-26 09:32:54 -0700</bug_when>
    <thetext>Created attachment 133832
patch for review. - updated as requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587863</commentid>
    <comment_count>59</comment_count>
      <attachid>133832</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-26 10:21:48 -0700</bug_when>
    <thetext>Comment on attachment 133832
patch for review. - updated as requested.

thanks for reviewing! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588487</commentid>
    <comment_count>60</comment_count>
      <attachid>133832</attachid>
    <who name="">yosin</who>
    <bug_when>2012-03-26 19:32:58 -0700</bug_when>
    <thetext>Comment on attachment 133832
patch for review. - updated as requested.

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

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:231
&gt; +    m_fieldSetAncestorValid = false;

We also want to set m_fieldSetAncestorValid to false in insertedIntoTree.

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:289
&gt; +    if (!m_fieldSetAncestor || !m_fieldSetAncestor-&gt;disabled())

nit: Negative condition is sometimes hard to read. Could you rewrite someething like below?
// Form controls in the first legend elements aren&apos;t affected by fieldset.disabled.
if (m_fieldSetAncestor &amp;&amp; m_fileAncestor-&gt;disabled())
  reutrn !(m_legendAncestor &amp;&amp; m_legendAncestor == m_fieldSetAncesotr-&gt;legend());
return false;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588511</commentid>
    <comment_count>61</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-03-26 20:09:24 -0700</bug_when>
    <thetext>(In reply to comment #60)
&gt; (From update of attachment 133832 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133832&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLFormControlElement.cpp:231
&gt; &gt; +    m_fieldSetAncestorValid = false;
&gt; 
&gt; We also want to set m_fieldSetAncestorValid to false in insertedIntoTree.

Sorry, upon insertedIntoTree. m_fieldSetAncestorValid is always false.
Please ignore this comment. Sorry for confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588546</commentid>
    <comment_count>62</comment_count>
      <attachid>133832</attachid>
    <who name="">yosin</who>
    <bug_when>2012-03-26 21:31:17 -0700</bug_when>
    <thetext>Comment on attachment 133832
patch for review. - updated as requested.

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

&gt; LayoutTests/fast/forms/fieldset-disabled.html:1
&gt; +&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;

Could you also check IDL attribute &quot;disabled&quot; in this test?

&gt; LayoutTests/fast/forms/fieldset-disabled.html:39
&gt; +var fieldSet = 0;

nit: I think using global variable declarations here is confusing and hard to maintain, even if we know they are for &quot;shouldBe&quot; and variations.
We may forget to add &quot;var foo&quot;, when we add new &quot;shouldBe(&apos;foo&apos;, &apos;true&apos;)&quot;.

nit: We may not need to have &quot;= 0&quot;. &quot;var fieldSet&quot; statement sets &quot;undefined&quot; to varaible &quot;fieldSet&quot;.

&gt; LayoutTests/fast/forms/fieldset-disabled.html:62
&gt; +    shouldBeFalse(fieldSet.disabled.toString());

Could you use shouldBeFalse(&apos;fieldSet.disabled&apos;) for better message in output?

&gt; LayoutTests/fast/forms/fieldset-disabled.html:76
&gt; +    shouldBe(&apos;textInput.value&apos;, &apos;&quot;A&quot;&apos;);

Please check textInput.disabled is true too. This comment is applied for others disable state changes.
Personally, I think checking IDL attribute &quot;disabled&quot; and style change are enough for this patch.

&gt; LayoutTests/fast/forms/fieldset-disabled.html:253
&gt; +    var parserGeneratedInput1 = document.getElementById(&quot;parserGeneratedInput1&quot;);

nit: Can we encode expected value into HTML document and use loop?

&lt;fieldset&gt;
&lt;input class=&quot;parserGeneratedInput&quot; value=&quot;enabled&quot;&gt;
&lt;/fieldset&gt;
&lt;fieldset disabled&gt;
&lt;input class=&quot;parserGeneratedInput&quot; value=&quot;disabled&quot;&gt;
&lt;/fieldset&gt;
...

var parserGeneratedInputs = document.getElementsByClass(&quot;parserGeneratedInput&quot;);
for (var i = 0; i &lt; parserGeneratedInputs.length; i++) {
  shouldBe(&apos;parserGeneratedInputs[&apos; + i + &apos;]&apos;, parserGeneratedInput[i].value);
}

&gt; LayoutTests/fast/forms/fieldset-disabled.html:254
&gt; +    var parserGeneratedInput2 = document.getElementById(&quot;parserGeneratedInput2&quot;);

Local variable parseGeneratedInput[1-9] aren&apos;t used in shouldBe. It is better to call shouldBe in the toplevel instead of inside function. It is confusing to use same name for both global and local.

&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:95
&gt; +    while ((node = node-&gt;traverseNextNode(this))) {

nit: We don&apos;t need to have parenthesis for node = node-&gt;traverseNextNode(this).

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:109
&gt; +            m_legendAncestor = static_cast&lt;HTMLLegendElement*&gt;(ancestor);

Note: We can quit ancestor traversal before reaching to fieldset element if we use HTMLLegendElement::m_fieldSetAncestor here.
Although, it isn&apos;t enough reason to make m_fieldAncestor public from HTMLLegendElement.

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:110
&gt; +        if (!m_fieldSetAncestor &amp;&amp; ancestor-&gt;hasTagName(fieldsetTag)) {

nit: m_fieldSetAncestor is always 0 in this loop. So, we don&apos;t need to have !m_fieldSetAncestor.

&gt; Source/WebCore/html/HTMLLegendElement.cpp:72
&gt;  HTMLFormControlElement* HTMLLegendElement::associatedControl()

Note: Once this patch is landed. We can remove associatedControl method and rewrie accessKeyAction and focus methods to use m_fieldSetAncestor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589232</commentid>
    <comment_count>63</comment_count>
      <attachid>133832</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-27 13:44:39 -0700</bug_when>
    <thetext>Comment on attachment 133832
patch for review. - updated as requested.

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

&gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:253
&gt;&gt; +    var parserGeneratedInput1 = document.getElementById(&quot;parserGeneratedInput1&quot;);
&gt; 
&gt; nit: Can we encode expected value into HTML document and use loop?
&gt; 
&gt; &lt;fieldset&gt;
&gt; &lt;input class=&quot;parserGeneratedInput&quot; value=&quot;enabled&quot;&gt;
&gt; &lt;/fieldset&gt;
&gt; &lt;fieldset disabled&gt;
&gt; &lt;input class=&quot;parserGeneratedInput&quot; value=&quot;disabled&quot;&gt;
&gt; &lt;/fieldset&gt;
&gt; ...
&gt; 
&gt; var parserGeneratedInputs = document.getElementsByClass(&quot;parserGeneratedInput&quot;);
&gt; for (var i = 0; i &lt; parserGeneratedInputs.length; i++) {
&gt;   shouldBe(&apos;parserGeneratedInputs[&apos; + i + &apos;]&apos;, parserGeneratedInput[i].value);
&gt; }

I think we are not allowed to update the disabled IDL attribute of the children, when a parent fieldset is being disabled.
This would overwrite the disabled attribute of the FormControlElement children and therefore always enable or disable all the children of the fieldset, even when these are specifically defined to be disabled.

Consider the following situation:
&lt;fieldset id=”myFieldSet” disabled&gt;
&lt;input id=”myInput1”&gt;
&lt;input id=”myInput2” disabled&gt;
&lt;/fieldset&gt;
...
var before1 = document.getElementById(“myInput1”).disabled
var before2 = document.getElementById(“myInput2”).disabled
...
document.getElementById(“myFieldSet”).disabled = false
var after1 = document.getElementById(“myInput1”).disabled
var after2 = document.getElementById(“myInput2”).disabled

before1 will be true (disabled).
before2 will be true (disabled).
after1 will be false (enabled).
after2 will be false (enabled). -&gt; unexpected

I don&apos;t think this is the expected behavior.

The spec says:
4.10.4 &quot;The disabled attribute, when specified, causes all the form control descendants of the fieldset element, excluding those that are descendants of the fieldset element&apos;s first legend element child, if any, to be disabled.&quot;
4.10.19.2 &quot;A form control is disabled if its disabled attribute is set, or if it is a descendant of a fieldset element whose disabled attribute is set and is not a descendant of that fieldset element&apos;s first legend element child, if any. ... The disabled IDL attribute must reflect the disabled content attribute.&quot;

I interpret the second quote as follows: The disabled IDL attribute should always reflect the disabled state of the element itself (without inheriting disabled state from its parents).
This nevertheless leads to a mismatch of the optical representation and the IDL attributes available to JS.

Any thoughts or comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589299</commentid>
    <comment_count>64</comment_count>
      <attachid>133832</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-27 14:36:14 -0700</bug_when>
    <thetext>Comment on attachment 133832
patch for review. - updated as requested.

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

&gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:1
&gt;&gt; +&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
&gt; 
&gt; Could you also check IDL attribute &quot;disabled&quot; in this test?

I added &quot;shouldBeTrue/False&quot; to wherever i adjust the disabled attribute.

&gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:39
&gt;&gt; +var fieldSet = 0;
&gt; 
&gt; nit: I think using global variable declarations here is confusing and hard to maintain, even if we know they are for &quot;shouldBe&quot; and variations.
&gt; We may forget to add &quot;var foo&quot;, when we add new &quot;shouldBe(&apos;foo&apos;, &apos;true&apos;)&quot;.
&gt; 
&gt; nit: We may not need to have &quot;= 0&quot;. &quot;var fieldSet&quot; statement sets &quot;undefined&quot; to varaible &quot;fieldSet&quot;.

I got rid of the functions and put everything directly into the global scope. While i believe it makes the test a bit less readable i hope this is a more correct solution.

&gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:62
&gt;&gt; +    shouldBeFalse(fieldSet.disabled.toString());
&gt; 
&gt; Could you use shouldBeFalse(&apos;fieldSet.disabled&apos;) for better message in output?

Yes, that looks much better. :)

&gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:76
&gt;&gt; +    shouldBe(&apos;textInput.value&apos;, &apos;&quot;A&quot;&apos;);
&gt; 
&gt; Please check textInput.disabled is true too. This comment is applied for others disable state changes.
&gt; Personally, I think checking IDL attribute &quot;disabled&quot; and style change are enough for this patch.

Please see my previous comment about altering disabled attributes of children.

&gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:254
&gt;&gt; +    var parserGeneratedInput2 = document.getElementById(&quot;parserGeneratedInput2&quot;);
&gt; 
&gt; Local variable parseGeneratedInput[1-9] aren&apos;t used in shouldBe. It is better to call shouldBe in the toplevel instead of inside function. It is confusing to use same name for both global and local.

fixed.

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:95
&gt;&gt; +    while ((node = node-&gt;traverseNextNode(this))) {
&gt; 
&gt; nit: We don&apos;t need to have parenthesis for node = node-&gt;traverseNextNode(this).

These are necessary for silencing a compiler warning in clang.

&gt;&gt; Source/WebCore/html/HTMLFormControlElement.cpp:109
&gt;&gt; +            m_legendAncestor = static_cast&lt;HTMLLegendElement*&gt;(ancestor);
&gt; 
&gt; Note: We can quit ancestor traversal before reaching to fieldset element if we use HTMLLegendElement::m_fieldSetAncestor here.
&gt; Although, it isn&apos;t enough reason to make m_fieldAncestor public from HTMLLegendElement.

We could do that for optimization. - But i leave it out for now.

&gt;&gt; Source/WebCore/html/HTMLFormControlElement.cpp:110
&gt;&gt; +        if (!m_fieldSetAncestor &amp;&amp; ancestor-&gt;hasTagName(fieldsetTag)) {
&gt; 
&gt; nit: m_fieldSetAncestor is always 0 in this loop. So, we don&apos;t need to have !m_fieldSetAncestor.

fixed.

&gt;&gt; Source/WebCore/html/HTMLFormControlElement.cpp:289
&gt;&gt; +    if (!m_fieldSetAncestor || !m_fieldSetAncestor-&gt;disabled())
&gt; 
&gt; nit: Negative condition is sometimes hard to read. Could you rewrite someething like below?
&gt; // Form controls in the first legend elements aren&apos;t affected by fieldset.disabled.
&gt; if (m_fieldSetAncestor &amp;&amp; m_fileAncestor-&gt;disabled())
&gt;   reutrn !(m_legendAncestor &amp;&amp; m_legendAncestor == m_fieldSetAncesotr-&gt;legend());
&gt; return false;

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589301</commentid>
    <comment_count>65</comment_count>
      <attachid>134139</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-27 14:38:22 -0700</bug_when>
    <thetext>Created attachment 134139
patch for review. - fixed issues as commented before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589598</commentid>
    <comment_count>66</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-03-27 19:22:45 -0700</bug_when>
    <thetext>(In reply to comment #63)
&gt; (From update of attachment 133832 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133832&amp;action=review
&gt; 
&gt; &gt;&gt; LayoutTests/fast/forms/fieldset-disabled.html:253
&gt; &gt;&gt; +    var parserGeneratedInput1 = document.getElementById(&quot;parserGeneratedInput1&quot;);
&gt; &gt; 
&gt; &gt; nit: Can we encode expected value into HTML document and use loop?
&gt; &gt; 
&gt; &gt; &lt;fieldset&gt;
&gt; &gt; &lt;input class=&quot;parserGeneratedInput&quot; value=&quot;enabled&quot;&gt;
&gt; &gt; &lt;/fieldset&gt;
&gt; &gt; &lt;fieldset disabled&gt;
&gt; &gt; &lt;input class=&quot;parserGeneratedInput&quot; value=&quot;disabled&quot;&gt;
&gt; &gt; &lt;/fieldset&gt;
&gt; &gt; ...
&gt; &gt; 
&gt; &gt; var parserGeneratedInputs = document.getElementsByClass(&quot;parserGeneratedInput&quot;);
&gt; &gt; for (var i = 0; i &lt; parserGeneratedInputs.length; i++) {
&gt; &gt;   shouldBe(&apos;parserGeneratedInputs[&apos; + i + &apos;]&apos;, parserGeneratedInput[i].value);
&gt; &gt; }
&gt; 
&gt; I think we are not allowed to update the disabled IDL attribute of the children, when a parent fieldset is being disabled.
&gt; This would overwrite the disabled attribute of the FormControlElement children and therefore always enable or disable all the children of the fieldset, even when these are specifically defined to be disabled.
&gt; 
&gt; Consider the following situation:
&gt; &lt;fieldset id=”myFieldSet” disabled&gt;
&gt; &lt;input id=”myInput1”&gt;
&gt; &lt;input id=”myInput2” disabled&gt;
&gt; &lt;/fieldset&gt;
&gt; ...
&gt; var before1 = document.getElementById(“myInput1”).disabled
&gt; var before2 = document.getElementById(“myInput2”).disabled
&gt; ...
&gt; document.getElementById(“myFieldSet”).disabled = false
&gt; var after1 = document.getElementById(“myInput1”).disabled
&gt; var after2 = document.getElementById(“myInput2”).disabled
&gt; 
&gt; before1 will be true (disabled).
&gt; before2 will be true (disabled).
&gt; after1 will be false (enabled).
&gt; after2 will be false (enabled). -&gt; unexpected
&gt; 
&gt; I don&apos;t think this is the expected behavior.
&gt; 
&gt; The spec says:
&gt; 4.10.4 &quot;The disabled attribute, when specified, causes all the form control descendants of the fieldset element, excluding those that are descendants of the fieldset element&apos;s first legend element child, if any, to be disabled.&quot;
&gt; 4.10.19.2 &quot;A form control is disabled if its disabled attribute is set, or if it is a descendant of a fieldset element whose disabled attribute is set and is not a descendant of that fieldset element&apos;s first legend element child, if any. ... The disabled IDL attribute must reflect the disabled content attribute.&quot;
&gt; 
&gt; I interpret the second quote as follows: The disabled IDL attribute should always reflect the disabled state of the element itself (without inheriting disabled state from its parents).
&gt; This nevertheless leads to a mismatch of the optical representation and the IDL attributes available to JS.
&gt; 
&gt; Any thoughts or comments?

You&apos;re right. IDL &quot;disabled&quot; attribute is &quot;reflect&quot; of content attribute. We can&apos;t use it for inherited disabled value.
Although, encoding expectation into HTML can work with document.execCommand. It can reduce repeated code such as &quot;var parseGeneratedINput1 = ...&quot; and makes test script easier to maintain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589723</commentid>
    <comment_count>67</comment_count>
      <attachid>134139</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-03-28 01:01:45 -0700</bug_when>
    <thetext>Comment on attachment 134139
patch for review. - fixed issues as commented before.

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

&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:80
&gt; +HTMLLegendElement* HTMLFieldSetElement::legend() const
&gt; +{
&gt; +    return m_legend;
&gt; +}

This is called only if a form control is put in a &lt;legend&gt;.  It should be very rare case, and it should be acceptable to find the &lt;legend&gt; on demand.

So, I propose
 - Remove HTMLFieldSetElement::m_legend
 - HTMLFieldSetElement::legend() finds the first-child &lt;legend&gt; on demand.
 - Revert every changes of HTMLLegendElement.{cpp,h}

&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:95
&gt; +    while ((node = node-&gt;traverseNextNode(this))) {

This is wrong.  We should search only direct child nodes for &lt;legend&gt; according to the specification.
   for (Element* node = firstEleemntChild(); node; node = node-&gt;nextElementSibling()) { ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589749</commentid>
    <comment_count>68</comment_count>
      <attachid>134139</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-03-28 01:48:59 -0700</bug_when>
    <thetext>Comment on attachment 134139
patch for review. - fixed issues as commented before.

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

&gt; LayoutTests/ChangeLog:11
&gt; +        * fast/forms/fieldset-disabled-expected.txt: Added.
&gt; +        * fast/forms/fieldset-disabled.html: Added.

We had better move the test to fast/forms/fieldset/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589924</commentid>
    <comment_count>69</comment_count>
      <attachid>134139</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-28 07:04:18 -0700</bug_when>
    <thetext>Comment on attachment 134139
patch for review. - fixed issues as commented before.

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

&gt;&gt; LayoutTests/ChangeLog:11
&gt;&gt; +        * fast/forms/fieldset-disabled.html: Added.
&gt; 
&gt; We had better move the test to fast/forms/fieldset/.

moved.

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:80
&gt;&gt; +}
&gt; 
&gt; This is called only if a form control is put in a &lt;legend&gt;.  It should be very rare case, and it should be acceptable to find the &lt;legend&gt; on demand.
&gt; 
&gt; So, I propose
&gt;  - Remove HTMLFieldSetElement::m_legend
&gt;  - HTMLFieldSetElement::legend() finds the first-child &lt;legend&gt; on demand.
&gt;  - Revert every changes of HTMLLegendElement.{cpp,h}

changed as requested.

&gt;&gt; Source/WebCore/html/HTMLFieldSetElement.cpp:95
&gt;&gt; +    while ((node = node-&gt;traverseNextNode(this))) {
&gt; 
&gt; This is wrong.  We should search only direct child nodes for &lt;legend&gt; according to the specification.
&gt;    for (Element* node = firstEleemntChild(); node; node = node-&gt;nextElementSibling()) { ...

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589926</commentid>
    <comment_count>70</comment_count>
      <attachid>134287</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-28 07:07:54 -0700</bug_when>
    <thetext>Created attachment 134287
patch for review. - fixed issues as commented before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590663</commentid>
    <comment_count>71</comment_count>
      <attachid>134287</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-03-28 17:39:07 -0700</bug_when>
    <thetext>Comment on attachment 134287
patch for review. - fixed issues as commented before.

Looks good.  Thank you for the hard work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591003</commentid>
    <comment_count>72</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-29 03:11:31 -0700</bug_when>
    <thetext>(In reply to comment #71)
&gt; (From update of attachment 134287 [details])
&gt; Looks good.  Thank you for the hard work!

Thanks for reviewing! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591005</commentid>
    <comment_count>73</comment_count>
      <attachid>134287</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-29 03:14:45 -0700</bug_when>
    <thetext>Comment on attachment 134287
patch for review. - fixed issues as commented before.

Clearing flags on attachment: 134287

Committed r112515: &lt;http://trac.webkit.org/changeset/112515&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591006</commentid>
    <comment_count>74</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-03-29 03:15:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90901</attachid>
            <date>2011-04-24 22:43:14 -0700</date>
            <delta_ts>2011-05-03 22:57:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58837-20110424224310.patch</filename>
            <type>text/plain</type>
            <size>14043</size>
            <attacher name="Naoki Takano">honten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ2ODUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0NWVkYjU3YmNmMTcyNGUxZmRiNDc0
MjBjY2E0ZDExMDZmNGExMGExLi5iMTY3ODZkZjQ0ZTZlNjhmNjY1M2FlNzM0MzM0ODY4ODRjOGVm
M2M2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDQtMjQgIE5hb2tpIFRha2FubyAgPHRh
a2Fuby5uYW9raUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODM3CisK
KyAgICAgICAgKiBmYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLWV4cGVjdGVkLnR4dDogQWRk
IGZvciBleHBlY3RlZCByZXN1bHQuCisgICAgICAgICogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNh
YmxlZC5odG1sOiBBZGQgaW5jbHVkaW5nIGZpZWxkc2V0LWRpc2FibGVkLmpzLgorICAgICAgICAq
IGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2ZpZWxkc2V0LWRpc2FibGVkLmpzOiBBZGRlZCB0byB0
ZXN0IGZpZWxkc2V0LmRpc2FibGVkIGZsYWcgb24gYW5kIG9mZiBhbmQgcGVyZm9ybWFuY2UgY2hl
Y2suCisKIDIwMTEtMDQtMjIgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZDogVXBkYXRlZCBDaHJvbWl1bSBleHBlY3RhdGlv
bnMgYWZ0ZXIgV0sgcjg0NjA2CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zp
ZWxkc2V0LWRpc2FibGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmll
bGRzZXQtZGlzYWJsZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0YmZkNDkzOTVjMTRhNGZi
NjkwYzYwNGI1ZGI2N2E4NzBlMmQ3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBA
CitUZXN0cyBmb3IgSFRNTEZpZWxkU2V0RWxlbWVudC5kaXNhYmxlZCBiZWhhdmlvcnMuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQSIK
K1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBIgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFC
IgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQyIKK1BBU1MgdGV4dElucHV0LnZhbHVlIGlz
ICJBQkNEIgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0QiCitQQVNTIHRleHRJbnB1dC52
YWx1ZSBpcyAiQUJDREUiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0
LWRpc2FibGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTJkZGJjZjk4YmM5NjMwMTIxNDE3ZmQ5Y2VmMGEzYzU5ZDRiMjk0
MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlz
YWJsZWQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9maWVsZHNldC1kaXNhYmxl
ZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2ZpZWxkc2V0LWRpc2FibGVkLmpzIGIv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZmllbGRzZXQtZGlzYWJsZWQuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWJjZTZkODBmZmY3NDkzYTc1YzgzNzFlMTFjNmQzMmEzMjE4MWRiNgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2ZpZWxk
c2V0LWRpc2FibGVkLmpzCkBAIC0wLDAgKzEsOTMgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3Ig
SFRNTEZpZWxkU2V0RWxlbWVudC5kaXNhYmxlZCBiZWhhdmlvcnMuJyk7CisKK3ZhciBmaWVsZFNl
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZWxkc2V0Jyk7Citkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGZpZWxkU2V0KTsKKwordmFyIHRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2lucHV0Jyk7Cit0ZXh0SW5wdXQudHlwZSA9ICJ0ZXh0IjsKK2ZpZWxkU2V0LmFwcGVu
ZENoaWxkKHRleHRJbnB1dCk7CisKKy8vIE5vIGRpc2FibGVkLCB1c2VyIGNhbiBpbnNlcnRUZXh0
IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQuCit0ZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50
LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdBJyk7CitzaG91bGRCZSgndGV4dElu
cHV0LnZhbHVlJywgJyJBIicpOworCisvLyBEaXNhYmxlIGZpbGVkU2V0LgorZmllbGRTZXQuZGlz
YWJsZWQgPSB0cnVlOworCisvLyBPbmNlIGZpZWxkU2V0IGlzIGRpc2FibGVkLCB3ZSBjYW5ub3Qg
aW5zZXJ0IHRleHQuCit0ZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdp
bnNlcnRUZXh0JywgZmFsc2UsICdCJyk7CitzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJB
IicpOworCisvLyBFbmFibGUgZmlsZWRTZXQuCitmaWVsZFNldC5kaXNhYmxlZCA9IGZhbHNlOwor
CisvLyBOb3cgd2UgY2FuIGluc2VydCB0ZXh0LgordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVu
dC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQicpOworc2hvdWxkQmUoJ3RleHRJ
bnB1dC52YWx1ZScsICciQUIiJyk7CisKKy8vIE1vdmUgdGV4dElucHV0IGZyb20gZmllbGRTZXQg
dG8gdGhlIHJvb3QuCitmaWVsZFNldC5yZW1vdmVDaGlsZCh0ZXh0SW5wdXQpOworZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQpOworCisvLyBEaXNhYmxlIGZpbGVkU2V0LgorZmll
bGRTZXQuZGlzYWJsZWQgPSB0cnVlOworCisvLyBUaGVuIGluc2VydFRleHQgYWdhaW4uIFRoZSB0
ZXh0IGlzIGFkZGVkLgordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgn
aW5zZXJ0VGV4dCcsIGZhbHNlLCAnQycpOworc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICci
QUJDIicpOworCisvLyBEaXNhYmxlIGZpbGVkU2V0LgorZmllbGRTZXQuZGlzYWJsZWQgPSBmYWxz
ZTsKKworLy8gQWRkIGRlZXAgdGFibGUuCit2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCd0YWJsZScpOwordmFyIHRib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHkn
KTsKK3RhYmxlLmFwcGVuZENoaWxkKHRib2R5KTsKKwordmFyIHRkID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgndGQnKTsKK2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dElucHV0KTsKK3Rk
LmFwcGVuZENoaWxkKHRleHRJbnB1dCk7CisKK3ZhciBjaGlsZE5vZGUgPSB0ZDsKK2ZvciAoaSA9
IDA7IGkgPCAzMDA7IGkrKykgeworICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0
cicpOworICB0ci5hcHBlbmRDaGlsZChjaGlsZE5vZGUpOworICBjaGlsZE5vZGUgPSB0cjsKK30K
KwordGJvZHkuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTsKK2ZpZWxkU2V0LmFwcGVuZENoaWxkKHRh
YmxlKTsKKworLy8gVGhlbiBpbnNlcnRUZXh0IGFnYWluLiBUaGUgdGV4dCBpcyBhZGRlZC4KK3Rl
eHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxz
ZSwgJ0QnKTsKK3Nob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCQ0QiJyk7CisKKy8vIERp
c2FibGUgZmlsZWRTZXQuCitmaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CisKKy8vIFRoZW4gaW5z
ZXJ0VGV4dCBhZ2Fpbi4gVGhlIHRleHQgaXMgbm90IGFkZGVkLgordGV4dElucHV0LmZvY3VzKCk7
Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRScpOworc2hvdWxk
QmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDRCInKTsKKworLy8gRW5hYmxlIGZpbGVkU2V0Lgor
ZmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKworLy8gVGhlbiBpbnNlcnRUZXh0IGFnYWluLiBU
aGUgdGV4dCBpcyBhZGRlZC4KK3RleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0UnKTsKK3Nob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUn
LCAnIkFCQ0RFIicpOworCisvLyBBZGQgMzAwMCB0ZXh0IGlucHV0IGZvciBwZXJmb3JtYW5jZSB0
ZXN0LgorZm9yICh2YXIgaSA9IDA7IGkgPCAzMDAwOyBpKyspIHsKKyAgdmFyIG5ld1RleHRJbnB1
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgIG5ld1RleHRJbnB1dC50eXBl
ID0gInRleHQiOworICB0ZC5hcHBlbmRDaGlsZChuZXdUZXh0SW5wdXQpOworfQorCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5Y2MyMDA2NGU1NzE1NmM5ZGQz
MDExNmE2NjU3NzM5NWI4YzViZDdlLi5lMWM2Yjg4MDU3MjU0ZTJlNGJhMGEwZGMzMjk0MTg1NjZm
MDNiYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjQgIE5hb2tpIFRh
a2FubyAgPHRha2Fuby5uYW9raUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMg
bm90IHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU4ODM3CisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC5odG1s
CisKKyAgICAgICAgQWRkIGZpZWxkc2V0IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGluIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC4KKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGhhcyBwYXJlbnQg
ZmllbGRzZXQgYXMgbV9maWVsZFNldC4KKyAgICAgICAgQWRkIG5ldyBkaXNhYmxlZCBhdHRpcmJ1
dGUgaW4gZmllbGRzZXQgaWRsIHRvIHJlYW5kIGFuZCB3cml0ZSB0aGUgZGlzYWJsZWQgZmxhZy4K
KyAgICAgICAgQWRkIHRyYXZlcnNlIGZ1bmN0aW9uIGluIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQg
dG8gZmluZCB0aGUgcGFyZW50IGZpZWxkc2V0LgorCisgICAgICAgICogaHRtbC9Gb3JtQXNzb2Np
YXRlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQpOiBBZGQgbV9maWVsZFNldCBOVUxMIGluaXRpYWxpemF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZElu
dG9UcmVlKTogT25seSBpZiB0aGUgaW5zbnRhbmNlIGlzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQs
IGZpbmQgbV9maWxlZFNldCBhbmQgc2V0LgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0
ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOiBBZGQgdGhlIHNhbWUgbWV0aG9kIGZvciBmaWVs
ZFNldC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlRnJv
bUZpZWxkU2V0KTogQ2xlYXIgbV9maWVsZFNldC4KKyAgICAgICAgKiBodG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oOiBBZGQgbV9maWVsZFNldCBhbmQgYWNjZXNzb3IgYW5kIHNldHRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZmllbGRTZXQpOiBBY2Nlc3Nv
ciBmb3IgbV9maWVsZFNldC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6c2V0RmllbGRTZXQpOiBTZXR0ZXIgZm9yIG1fZmllbGRTZXQuCisgICAgICAgICogaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50LmlkbDogQWRkIGRpc2FibGVkIGF0dHJpYnV0ZS4KKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWQpOiBDaGFuZ2UgdG8gY2hlY2sgYm90aCBtX2Rp
c2FibGVkIGZsYWcgYW5kIHBhcmVudCBmaWVsZHNldCBmbGFnLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZmluZEZpZWxkU2V0QW5jZXN0b3IpOiBUcmF2ZXJzZSBm
YW5jdGlvbiB0byBmaW5kIHRoZSBwYXJlbnQgZmllbGRzZXQgZWxlbWVudC4KKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDogQWRkIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBo
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6fkhUTUxJbnB1dEVsZW1lbnQpOiBBZGQgcmVtb3ZlRnJvbUZpZWxkU2V0KCkuCisKIDIw
MTEtMDQtMjIgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFz
c29jaWF0ZWRFbGVtZW50LmNwcAppbmRleCBlYTM2YjJhMjI3NzA5ZjEzYjViOTNlYzI5YzJlMmRj
Yjk3N2RhZDgyLi4xNjE3MjlmYWM2NDhhNzgwNDdjZDVkZGEzNGEyNmExNTc1ZDlmZDA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCkBAIC0yNSw2
ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmgiCiAKKyNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMzYsNyArMzcsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
OkZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCi0gICAgOiBtX2Zv
cm0oZm9ybSkKKyAgICA6IG1fZmllbGRTZXQoMCkKKyAgICAsIG1fZm9ybShmb3JtKQogewogfQog
CkBAIC05NCw2ICs5NiwxMyBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvVHJlZSgpCiAgICAgICAgIGlmIChtX2Zvcm0pCiAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lz
dGVyRm9ybUVsZW1lbnQodGhpcyk7CiAgICAgfQorCisgICAgaWYgKCFtX2ZpZWxkU2V0ICYmIGVs
ZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKKyAgICAgICAgLy8gVGhpcyBoYW5kbGVz
IHRoZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxlbWVudCBiZWluZyBjcmVhdGVkIGJ5CisgICAgICAg
IC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZpZWxkU2V0IGFzIHRoZSBmb3Jt
ZXIgZm9ybS4KKyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUNvbnRyb2xFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnQp
OworICAgICAgICBtX2ZpZWxkU2V0ID0gZm9ybUNvbnRyb2xFbGVtZW50LT5maW5kRmllbGRTZXRB
bmNlc3RvcigpOworICAgIH0KIH0KIAogc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2Rl
KiBuKQpAQCAtMTEyLDYgKzEyMSwxMCBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVt
b3ZlZEZyb21UcmVlKCkKICAgICAvLyBPdGhlcndpc2UsIG51bGwgb3V0IG91ciBmb3JtIGFuZCBy
ZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0ncyBsaXN0IG9mIGVsZW1lbnRzLgogICAgIGlm
IChtX2Zvcm0gJiYgZmluZFJvb3QoZWxlbWVudCkgIT0gZmluZFJvb3QobV9mb3JtKSkKICAgICAg
ICAgcmVtb3ZlRnJvbUZvcm0oKTsKKworICAgIC8vIEFwcGx5IG1fZmlsZWRTZXQgd2l0aCB0aGUg
c2FtZSB3YXkgYXMgdGhlIG1fZm9ybS4KKyAgICBpZiAobV9maWVsZFNldCAmJiBmaW5kUm9vdChl
bGVtZW50KSAhPSBmaW5kUm9vdChtX2ZpZWxkU2V0KSkKKyAgICAgICAgcmVtb3ZlRnJvbUZpZWxk
U2V0KCk7CiB9CiAKIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVGcm9tRm9ybSgp
CkBAIC0xMjIsNiArMTM1LDExIEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVG
cm9tRm9ybSgpCiAgICAgbV9mb3JtID0gMDsKIH0KIAordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6OnJlbW92ZUZyb21GaWVsZFNldCgpCit7CisgICAgbV9maWVsZFNldCA9IDA7Cit9CisKIHZv
aWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQq
IGZvcm0pCiB7CiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KHRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgKaW5kZXggN2Yz
ZTlhYzM5YzI4YTQ1Y2RhZWI4NWM0MTlhMTBiYWQwZTQxNzFlNy4uNDQxMmEwZDAwMTFlODQzZWIx
ZDNiNmUxNDAxNWM3NTk3ZjNmNzg2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9G
b3JtQXNzb2NpYXRlZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5oCkBAIC0yOSw2ICsyOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZvcm1EYXRhTGlzdDsKK2NsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnQ7CiBjbGFzcyBI
VE1MRm9ybUVsZW1lbnQ7CiBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlkaXR5
U3RhdGU7CkBAIC01Nyw2ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRGb3JtT3du
ZXIoSFRNTEZvcm1FbGVtZW50Kik7CiAKKyAgICBIVE1MRmllbGRTZXRFbGVtZW50KiBmaWVsZFNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGRTZXQ7IH0KKwogcHJvdGVjdGVkOgogICAgIEZvcm1B
c3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqKTsKIApAQCAtNzAsMTIgKzczLDE2IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIHJlbW92ZUZyb21Gb3JtKCk7CiAgICAgdm9pZCBmb3JtQXR0
cmlidXRlQ2hhbmdlZCgpOwogCisgICAgdm9pZCBzZXRGaWVsZFNldChIVE1MRmllbGRTZXRFbGVt
ZW50KiBmaWVsZFNldCkgeyBtX2ZpZWxkU2V0ID0gZmllbGRTZXQ7IH0KKyAgICB2b2lkIHJlbW92
ZUZyb21GaWVsZFNldCgpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVm
Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkZvcm1B
c3NvY2lhdGVkRWxlbWVudCgpID0gMDsKIAorICAgIEhUTUxGaWVsZFNldEVsZW1lbnQqIG1fZmll
bGRTZXQ7CiAgICAgSFRNTEZvcm1FbGVtZW50KiBtX2Zvcm07CiAgICAgT3duUHRyPFZhbGlkaXR5
U3RhdGU+IG1fdmFsaWRpdHlTdGF0ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmll
bGRTZXRFbGVtZW50LmlkbAppbmRleCA4Y2ZmZTNkYjA0ZmY0N2Q3MDgwN2MxMTc3NjA3OWZkM2Zk
MmJlMmUwLi4xMmU3Yzg5OWJiNGE4YTQzY2U1Zjg1MjQ3NDM5MGI0MGU1YjVhMWY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKQEAgLTI0LDYgKzI0LDcg
QEAgbW9kdWxlIGh0bWwgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgVmFsaWRpdHlTdGF0
ZSAgIHZhbGlkaXR5OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiAgICAgICAg
IHdpbGxWYWxpZGF0ZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAg
ICB2YWxpZGF0aW9uTWVzc2FnZTsKKyAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBib29sZWFu
IGRpc2FibGVkOwogICAgICAgICBib29sZWFuICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHZv
aWQgICAgIHNldEN1c3RvbVZhbGlkaXR5KGluIFtDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxs
U3RyaW5nXSBET01TdHJpbmcgZXJyb3IpOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCA4N2Y0ZTRkZTY0ZjIyZTMwNWVlNGMz
NjFiZTgwYzUwYTFlYmY1NjY5Li41ZGNlMDFhMTYzZGVkMmZhMTU5NzU3YjY2MDg0OGM1MGNjM2E4
MDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5j
cHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRmllbGRT
ZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMjExLDYgKzIxMiwx
MSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1
dEV2ZW50KCkKICAgICBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hJbnB1dEV2ZW50KCk7CiB9CiAKK2Jv
b2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2Rpc2FibGVkIHx8IChmaWVsZFNldCgpICYmIGZpZWxkU2V0KCktPmRpc2FibGVkKCkpOwor
fQorCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldERpc2FibGVkKGJvb2wgYikKIHsK
ICAgICBzZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyLCBiID8gIiIgOiAwKTsKQEAgLTY5MCw0ICs2
OTYsMTMgQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAorSFRNTEZpZWxkU2V0RWxl
bWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZmluZEZpZWxkU2V0QW5jZXN0b3IoKSBjb25z
dAoreworICAgIGZvciAoQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7IGFu
Y2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYg
KGFuY2VzdG9yLT5oYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50Kj4oYW5jZXN0b3IpOworICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViY29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCA4ODRhY2UwZDkzOWZjNmYxNzNjYTQ4
NjBjMTE1NTQ4NzNiMzZmZWEwLi5hMjQxZDE5OWQwMjQ5MTQ4NzVjNGYyYTIyZGY3OWE0ZjdiYzk3
NzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaApA
QCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNv
bnRyb2xDaGFuZ2VFdmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvcm1Db250cm9s
SW5wdXRFdmVudCgpOwogCi0gICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9kaXNhYmxlZDsgfQorICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwogICAg
IHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUo
KSBjb25zdDsKQEAgLTEwNiw2ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgVHJlZVNoYXJl
ZDxDb250YWluZXJOb2RlPjo6cmVmOwogICAgIHVzaW5nIFRyZWVTaGFyZWQ8Q29udGFpbmVyTm9k
ZT46OmRlcmVmOwogCisgICAgSFRNTEZpZWxkU2V0RWxlbWVudCogZmluZEZpZWxkU2V0QW5jZXN0
b3IoKSBjb25zdDsKIHByb3RlY3RlZDoKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IGUyOGU0ODc1NGNl
NTJjNzRjNzRlYTI2NDJjYmZlMGU3MzBhMDQ3MzkuLjc2ZTRkNzMzYTIwZmFlMGViNTgzZTI0NDA5
ZWI2NWI3MGJlOTBmZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cApAQCAtOTQsNiArOTQsOSBAQCBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgp
CiAgICAgLy8gTmVlZCB0byByZW1vdmUgdGhpcyBmcm9tIHRoZSBmb3JtIHdoaWxlIGl0IGlzIHN0
aWxsIGFuIEhUTUxJbnB1dEVsZW1lbnQsCiAgICAgLy8gc28gY2FuJ3Qgd2FpdCBmb3IgdGhlIGJh
c2UgY2xhc3MncyBkZXN0cnVjdG9yIHRvIGRvIGl0LgogICAgIHJlbW92ZUZyb21Gb3JtKCk7CisK
KyAgICAvLyBEbyB0aGUgc2FtZSB0aGluZyBmb3IgZmllbGRzZXQuCisgICAgcmVtb3ZlRnJvbUZp
ZWxkU2V0KCk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6Zm9y
bUNvbnRyb2xOYW1lKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92195</attachid>
            <date>2011-05-03 22:57:33 -0700</date>
            <delta_ts>2012-02-02 12:52:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58837-20110503225732.patch</filename>
            <type>text/plain</type>
            <size>11769</size>
            <attacher name="Naoki Takano">honten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU1NjUKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCAwYWVlN2RiMzlhZDNiNjBmNTZiY2MzOWQzOTM0YTk2ZWNlMzM1NTA5Li40YjI0
Mjg2NjAzNGFjZDczY2MyZWY3NmQ1ZWYwMzk4MmQ4MjU1NTUxIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDUtMDIgIE5hb2tpIFRh
a2FubyAgPHRha2Fuby5uYW9raUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMg
bm90IHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU4ODM3CisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC5odG1s
CisKKyAgICAgICAgQWRkIGZpZWxkc2V0IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGluIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC4KKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGhhcyBwYXJlbnQg
ZmllbGRzZXQgYXMgbV9maWVsZFNldC4KKyAgICAgICAgQWRkIG5ldyBkaXNhYmxlZCBhdHRpcmJ1
dGUgaW4gZmllbGRzZXQgaWRsIHRvIHJlYW5kIGFuZCB3cml0ZSB0aGUgZGlzYWJsZWQgZmxhZy4K
KyAgICAgICAgQWRkIHRyYXZlcnNlIGZ1bmN0aW9uIGluIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQg
dG8gZmluZCB0aGUgcGFyZW50IGZpZWxkc2V0LgorCisgICAgICAgICogaHRtbC9IVE1MRmllbGRT
ZXRFbGVtZW50Lmg6IEFkZCBmdW5jdGlvbnMuCisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQpOiBDYWxsIGFsbCBjaGlsZHJlbidzIHNldFBhcmVudERpc2FibGVkKCkuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOiBU
cmF2ZXJzZSBhbGwgY2hpbGRyZW4gdG8gZmluZCBhbnkgSFRNTEZvcm1Db250cm9sRWxlbWVudHMg
YXJlIGFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGw6IEFkZCBk
aXNhYmxlZCBhdHRyaWJ1dGUuCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVk
KTogQ2hhbmdlIHRvIGNoZWNrIGJvdGggbV9kaXNhYmxlZCBmbGFnIGFuZCBwYXJlbnQgbV9wYXJl
bnREaXNhYmxlZCBmbGFnLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
OiBBZGQgc2V0UGFyZW50RGlzYWJsZWQoKSBhbmQgY2hhbmdlIGRpc2FibGVkKCkuCisKIDIwMTEt
MDUtMDEgIG9qYWIgIDxvamFiQG9qYWIucnU+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggODY2MmZmZDAyZDE5ODVkNmE2OGQxYzQ5YjYwMzBmMzdiNTljM2RiNi4u
NTRkZTllNzIwYjMzZjFmMDkxMDE0MzA2Yzk3Mjc0NzE2YzlhNWRlNyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDExLTA1LTAyICBOYW9raSBUYWthbm8gIDx0YWthbm8ubmFva2lAZ21haWwuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpZWxk
c2V0IGRpc2FibGVkIGF0dHJpYnV0ZSBkb2VzIG5vdCB3b3JrCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgICogZmFzdC9mb3Jt
cy9maWVsZHNldC1kaXNhYmxlZC1leHBlY3RlZC50eHQ6IEFkZCBmb3IgZXhwZWN0ZWQgcmVzdWx0
LgorICAgICAgICAqIGZhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbDogQWRkIGluY2x1
ZGluZyBmaWVsZHNldC1kaXNhYmxlZC5qcy4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL3NjcmlwdC10
ZXN0cy9maWVsZHNldC1kaXNhYmxlZC5qczogQWRkZWQgdG8gdGVzdCBmaWVsZHNldC5kaXNhYmxl
ZCBmbGFnIG9uIGFuZCBvZmYgYW5kIHBlcmZvcm1hbmNlIGNoZWNrLgorCiAyMDExLTA1LTAyICBB
bHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkLiBC
dWlsZCBmaXguCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRp
c2FibGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlz
YWJsZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0YmZkNDkzOTVjMTRhNGZiNjkwYzYwNGI1
ZGI2N2E4NzBlMmQ3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2ZpZWxkc2V0LWRpc2FibGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUZXN0cyBm
b3IgSFRNTEZpZWxkU2V0RWxlbWVudC5kaXNhYmxlZCBiZWhhdmlvcnMuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQSIKK1BBU1MgdGV4
dElucHV0LnZhbHVlIGlzICJBIgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCIgorUEFTUyB0
ZXh0SW5wdXQudmFsdWUgaXMgIkFCQyIKK1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBQkNEIgor
UEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0QiCitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAi
QUJDREUiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVk
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTJkZGJjZjk4YmM5NjMwMTIxNDE3ZmQ5Y2VmMGEzYzU5ZDRiMjk0MgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRt
bApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9maWVsZHNldC1kaXNhYmxlZC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2ZpZWxkc2V0LWRpc2FibGVkLmpzIGIvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZmllbGRzZXQtZGlzYWJsZWQuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZWJjZTZkODBmZmY3NDkzYTc1YzgzNzFlMTFjNmQzMmEzMjE4MWRiNgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2ZpZWxkc2V0LWRpc2Fi
bGVkLmpzCkBAIC0wLDAgKzEsOTMgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgSFRNTEZpZWxk
U2V0RWxlbWVudC5kaXNhYmxlZCBiZWhhdmlvcnMuJyk7CisKK3ZhciBmaWVsZFNldCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZWxkc2V0Jyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGZpZWxkU2V0KTsKKwordmFyIHRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lu
cHV0Jyk7Cit0ZXh0SW5wdXQudHlwZSA9ICJ0ZXh0IjsKK2ZpZWxkU2V0LmFwcGVuZENoaWxkKHRl
eHRJbnB1dCk7CisKKy8vIE5vIGRpc2FibGVkLCB1c2VyIGNhbiBpbnNlcnRUZXh0IGludG8gdGhl
IHRleHQgaW5wdXQgZmllbGQuCit0ZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21t
YW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdBJyk7CitzaG91bGRCZSgndGV4dElucHV0LnZhbHVl
JywgJyJBIicpOworCisvLyBEaXNhYmxlIGZpbGVkU2V0LgorZmllbGRTZXQuZGlzYWJsZWQgPSB0
cnVlOworCisvLyBPbmNlIGZpZWxkU2V0IGlzIGRpc2FibGVkLCB3ZSBjYW5ub3QgaW5zZXJ0IHRl
eHQuCit0ZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0
JywgZmFsc2UsICdCJyk7CitzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJBIicpOworCisv
LyBFbmFibGUgZmlsZWRTZXQuCitmaWVsZFNldC5kaXNhYmxlZCA9IGZhbHNlOworCisvLyBOb3cg
d2UgY2FuIGluc2VydCB0ZXh0LgordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29t
bWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQicpOworc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1
ZScsICciQUIiJyk7CisKKy8vIE1vdmUgdGV4dElucHV0IGZyb20gZmllbGRTZXQgdG8gdGhlIHJv
b3QuCitmaWVsZFNldC5yZW1vdmVDaGlsZCh0ZXh0SW5wdXQpOworZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZCh0ZXh0SW5wdXQpOworCisvLyBEaXNhYmxlIGZpbGVkU2V0LgorZmllbGRTZXQuZGlz
YWJsZWQgPSB0cnVlOworCisvLyBUaGVuIGluc2VydFRleHQgYWdhaW4uIFRoZSB0ZXh0IGlzIGFk
ZGVkLgordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4
dCcsIGZhbHNlLCAnQycpOworc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDIicpOwor
CisvLyBEaXNhYmxlIGZpbGVkU2V0LgorZmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKworLy8g
QWRkIGRlZXAgdGFibGUuCit2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJs
ZScpOwordmFyIHRib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKTsKK3RhYmxl
LmFwcGVuZENoaWxkKHRib2R5KTsKKwordmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
dGQnKTsKK2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dElucHV0KTsKK3RkLmFwcGVuZENo
aWxkKHRleHRJbnB1dCk7CisKK3ZhciBjaGlsZE5vZGUgPSB0ZDsKK2ZvciAoaSA9IDA7IGkgPCAz
MDA7IGkrKykgeworICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOworICB0
ci5hcHBlbmRDaGlsZChjaGlsZE5vZGUpOworICBjaGlsZE5vZGUgPSB0cjsKK30KKwordGJvZHku
YXBwZW5kQ2hpbGQoY2hpbGROb2RlKTsKK2ZpZWxkU2V0LmFwcGVuZENoaWxkKHRhYmxlKTsKKwor
Ly8gVGhlbiBpbnNlcnRUZXh0IGFnYWluLiBUaGUgdGV4dCBpcyBhZGRlZC4KK3RleHRJbnB1dC5m
b2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0QnKTsK
K3Nob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCQ0QiJyk7CisKKy8vIERpc2FibGUgZmls
ZWRTZXQuCitmaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CisKKy8vIFRoZW4gaW5zZXJ0VGV4dCBh
Z2Fpbi4gVGhlIHRleHQgaXMgbm90IGFkZGVkLgordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVu
dC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRScpOworc2hvdWxkQmUoJ3RleHRJ
bnB1dC52YWx1ZScsICciQUJDRCInKTsKKworLy8gRW5hYmxlIGZpbGVkU2V0LgorZmllbGRTZXQu
ZGlzYWJsZWQgPSBmYWxzZTsKKworLy8gVGhlbiBpbnNlcnRUZXh0IGFnYWluLiBUaGUgdGV4dCBp
cyBhZGRlZC4KK3RleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2Vy
dFRleHQnLCBmYWxzZSwgJ0UnKTsKK3Nob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCQ0RF
IicpOworCisvLyBBZGQgMzAwMCB0ZXh0IGlucHV0IGZvciBwZXJmb3JtYW5jZSB0ZXN0LgorZm9y
ICh2YXIgaSA9IDA7IGkgPCAzMDAwOyBpKyspIHsKKyAgdmFyIG5ld1RleHRJbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgIG5ld1RleHRJbnB1dC50eXBlID0gInRleHQi
OworICB0ZC5hcHBlbmRDaGlsZChuZXdUZXh0SW5wdXQpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxk
U2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCmluZGV4IDRiOTA0MTJiYjU5ZTg3YTdmODMyMzZmM2U3MjllNmFjNmMzYWNlN2EuLjEwNDM1
YmJkZDM5ZWVjYWM3YzZkMTE5OTE2ZjIyOTkwMDU0ODFkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcApAQCAtNDQsNiArNDQsMTUgQEAgUGFzc1JlZlB0
cjxIVE1MRmllbGRTZXRFbGVtZW50PiBIVE1MRmllbGRTZXRFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxGaWVsZFNldEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pKTsKIH0KIAordm9pZCBIVE1MRmllbGRTZXRFbGVt
ZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0cmlidXRlLCBib29sIHByZXNlcnZl
RGVjbHMpCit7CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChh
dHRyaWJ1dGUsIHByZXNlcnZlRGVjbHMpOworICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSBk
aXNhYmxlZEF0dHIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Zvcm1Db250
cm9sQ2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Zvcm1Db250cm9sQ2hpbGRy
ZW5baV0tPnNldFBhcmVudERpc2FibGVkKGRpc2FibGVkKCkpOworICAgIH0KK30KKwogYm9vbCBI
VE1MRmllbGRTZXRFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKICAgICByZXR1cm4g
SFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKQEAgLTYwLDQgKzY5LDI5IEBAIFJlbmRlck9i
amVjdCogSFRNTEZpZWxkU2V0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFy
ZW5hLCBSZW5kZXJTdHlsCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckZpZWxkc2V0KHRo
aXMpOwogfQogCit2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29s
IGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwg
aW50IGNoaWxkQ291bnREZWx0YSkKK3sKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGls
ZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBj
aGlsZENvdW50RGVsdGEpOworCisgICAgLy8gVHJhdmVyc2Ugd2hvbGUgY2hpbGRyZW4gdG8gZmlu
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IGlzIGFkZGVkIG9yIG5vdC4KKyAgICBtX2Zvcm1Db250
cm9sQ2hpbGRyZW4uY2xlYXIoKTsKKyAgICBWZWN0b3I8Tm9kZSo+IG5vZGVWZWN0b3I7CisgICAg
bm9kZVZlY3Rvci5hcHBlbmQodGhpcyk7CisgICAgd2hpbGUgKCFub2RlVmVjdG9yLmlzRW1wdHko
KSkgeworICAgICAgICBOb2RlKiBub2RlID0gbm9kZVZlY3Rvci5sYXN0KCk7CisgICAgICAgIG5v
ZGVWZWN0b3IucmVtb3ZlTGFzdCgpOworICAgICAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAg
ICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUpOworICAgICAgICAg
ICAgaWYgKG5vZGUgIT0gdGhpcyAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250
cm9sID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnQpOworICAg
ICAgICAgICAgICAgIG1fZm9ybUNvbnRyb2xDaGlsZHJlbi5hcHBlbmQoY29udHJvbCk7CisgICAg
ICAgICAgICAgICAgY29udHJvbC0+c2V0UGFyZW50RGlzYWJsZWQoZGlzYWJsZWQoKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG5vZGVWZWN0b3IuYXBwZW5kKG5vZGUtPmZpcnN0Q2hp
bGQoKSk7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmll
bGRTZXRFbGVtZW50LmgKaW5kZXggZGNjOGQwYzQ2N2EwOTFhNjY2MDdmYWM2OWM2YTExOWM2ZDYx
YTUxYS4uZjA0YjI1YTI5YTU2MGU0YzAzY2ZkNzk5Yjg0MTI5OTljNzIyYzM0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgKQEAgLTQwLDYgKzQwLDEwIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9y
bUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNo
YW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOworICAgIHZpcnR1
YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9k
ZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3Vu
dERlbHRhID0gMCk7CisKKyAgICBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+IG1fZm9y
bUNvbnRyb2xDaGlsZHJlbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbAppbmRleCA4Y2ZmZTNkYjA0ZmY0N2Q3MDgwN2Mx
MTc3NjA3OWZkM2ZkMmJlMmUwLi4xMmU3Yzg5OWJiNGE4YTQzY2U1Zjg1MjQ3NDM5MGI0MGU1YjVh
MWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKQEAg
LTI0LDYgKzI0LDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
VmFsaWRpdHlTdGF0ZSAgIHZhbGlkaXR5OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9v
bGVhbiAgICAgICAgIHdpbGxWYWxpZGF0ZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyAgICAgICB2YWxpZGF0aW9uTWVzc2FnZTsKKyAgICAgICAgYXR0cmlidXRlIFtSZWZs
ZWN0XSBib29sZWFuIGRpc2FibGVkOwogICAgICAgICBib29sZWFuICBjaGVja1ZhbGlkaXR5KCk7
CiAgICAgICAgIHZvaWQgICAgIHNldEN1c3RvbVZhbGlkaXR5KGluIFtDb252ZXJ0VW5kZWZpbmVk
T3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgZXJyb3IpOwogICAgIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCBiMTI1MDYwZDUw
OTZmZWRkNjM4ODIyYjU2NGZiNDk1OGM0NjZiZWNjLi5jYjI3NTNhNGZmOGIwYjk5YTVjZmMyNzE3
OTM4MGIzOWFmOGZjOGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHAKQEAgLTY2LDYgKzY2LDcgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2MK
ICAgICAsIG1fd2lsbFZhbGlkYXRlKHRydWUpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKICAgICAs
IG1fd2FzQ2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoZmFsc2UpCisgICAg
LCBtX3BhcmVudERpc2FibGVkKGZhbHNlKQogewogICAgIGlmICghdGhpcy0+Zm9ybSgpKQogICAg
ICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IDg4NGFjZTBkOTM5ZmM2ZjE3M2NhNDg2MGMx
MTU1NDg3M2IzNmZlYTAuLmM5OWU1MmIwOTMwNzQ2NTkzNGJkMjlhZjU5N2QwOGMzNjQ3MWJmNTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC01
OCw4ICs1OCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb3JtQ29udHJv
bENoYW5nZUV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1
dEV2ZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBt
X2Rpc2FibGVkOyB9CisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9kaXNhYmxlZCB8fCBtX3BhcmVudERpc2FibGVkOyB9CiAgICAgdm9pZCBzZXREaXNhYmxlZChi
b29sKTsKKyAgICB2b2lkIHNldFBhcmVudERpc2FibGVkKGJvb2wgYikgeyBtX3BhcmVudERpc2Fi
bGVkID0gYjsgfQogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAg
LTE2NSw2ICsxNjYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsKIAogICAg
IGJvb2wgbV93YXNDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCA6IDE7Cisg
ICAgYm9vbCBtX3BhcmVudERpc2FibGVkIDogMTsKIH07CiAKIC8vIEZJWE1FOiBHaXZlIHRoaXMg
Y2xhc3MgaXRzIG93biBoZWFkZXIgZmlsZS4K
</data>
<flag name="review"
          id="85142"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125164</attachid>
            <date>2012-02-02 12:52:45 -0800</date>
            <delta_ts>2012-02-03 08:51:17 -0800</delta_ts>
            <desc>patch for review / feedback.</desc>
            <filename>58837_20120202-212126.patch</filename>
            <type>text/plain</type>
            <size>16028</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YmUzNDcwLi45ZmY3ZWZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDIt
MDIgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmllbGRzZXQg
ZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgIEFkZCBhIHRlc3QgY2Fz
ZSBmb3IgZmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlLgorCisgICAgICAgIFBhdGNoIGJ5IE5h
b2tpIFRha2FubyAgPHRha2Fuby5uYW9raUBnbWFpbC5jb20+CisgICAgICAgIFBhdGNoIHVwZGF0
ZWQgYnkgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNh
YmxlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZmllbGRzZXQt
ZGlzYWJsZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMv
ZmllbGRzZXQtZGlzYWJsZWQuanM6IEFkZGVkLgorCiAyMDEyLTAyLTAyICBDc2FiYSBPc3p0cm9n
b27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBVbnJldmlld2VkIGdhcmRl
bmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJs
ZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxl
ZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRiZmQ0
OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlz
YWJsZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1Rlc3RzIGZvciBIVE1MRmllbGRT
ZXRFbGVtZW50LmRpc2FibGVkIGJlaGF2aW9ycy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBIgorUEFTUyB0ZXh0SW5wdXQudmFsdWUg
aXMgIkEiCitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQUIiCitQQVNTIHRleHRJbnB1dC52YWx1
ZSBpcyAiQUJDIgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0QiCitQQVNTIHRleHRJbnB1
dC52YWx1ZSBpcyAiQUJDRCIKK1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBQkNERSIKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lMmRkYmNmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2ZpZWxkc2V0LWRpc2FibGVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVz
dHMvZmllbGRzZXQtZGlzYWJsZWQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10
ZXN0cy9maWVsZHNldC1kaXNhYmxlZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iNjIwMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9z
Y3JpcHQtdGVzdHMvZmllbGRzZXQtZGlzYWJsZWQuanMKQEAgLTAsMCArMSw5MyBAQAorZGVzY3Jp
cHRpb24oJ1Rlc3RzIGZvciBIVE1MRmllbGRTZXRFbGVtZW50LmRpc2FibGVkIGJlaGF2aW9ycy4n
KTsKKwordmFyIGZpZWxkU2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQnKTsK
K2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZmllbGRTZXQpOworCit2YXIgdGV4dElucHV0ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKK3RleHRJbnB1dC50eXBlID0gInRleHQi
OworZmllbGRTZXQuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsKKworLy8gRW5hYmxlZCBieSBkZWZh
dWx0LCB1c2VyIGNhbiBpbnNlcnRUZXh0IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQuCit0ZXh0
SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2Us
ICdBJyk7CitzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJBIicpOworCisvLyBEaXNhYmxl
IGZpZWxkU2V0LgorZmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworCisvLyBPbmNlIHRoZSBmaWVs
ZFNldCBpcyBkaXNhYmxlZCwgd2UgY2Fubm90IGluc2VydCB0ZXh0LgordGV4dElucHV0LmZvY3Vz
KCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQicpOworc2hv
dWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQSInKTsKKworLy8gRW5hYmxlIGZpZWxkU2V0Lgor
ZmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKworLy8gTm93IHdlIGNhbiBpbnNlcnQgdGV4dC4K
K3RleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBm
YWxzZSwgJ0InKTsKK3Nob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCIicpOworCisvLyBN
b3ZlIHRleHRJbnB1dCBmcm9tIGZpZWxkU2V0IHRvIHRoZSByb290LgorZmllbGRTZXQucmVtb3Zl
Q2hpbGQodGV4dElucHV0KTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsK
KworLy8gRGlzYWJsZSBmaWVsZFNldC4KK2ZpZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsKKworLy8g
VGhlbiBpbnNlcnRUZXh0IGFnYWluLiBUaGUgdGV4dCBpcyBhZGRlZC4KK3RleHRJbnB1dC5mb2N1
cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0MnKTsKK3No
b3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCQyInKTsKKworLy8gRGlzYWJsZSBmaWVsZFNl
dC4KK2ZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisKKy8vIEFkZCBkZWVwIHRhYmxlLgordmFy
IHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTsKK3ZhciB0Ym9keSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rib2R5Jyk7Cit0YWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7
CisKK3ZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7Citkb2N1bWVudC5ib2R5
LnJlbW92ZUNoaWxkKHRleHRJbnB1dCk7Cit0ZC5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQpOworCit2
YXIgY2hpbGROb2RlID0gdGQ7Citmb3IgKGkgPSAwOyBpIDwgMzAwOyBpKyspIHsKKyAgdmFyIHRy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKKyAgdHIuYXBwZW5kQ2hpbGQoY2hpbGRO
b2RlKTsKKyAgY2hpbGROb2RlID0gdHI7Cit9CisKK3Rib2R5LmFwcGVuZENoaWxkKGNoaWxkTm9k
ZSk7CitmaWVsZFNldC5hcHBlbmRDaGlsZCh0YWJsZSk7CisKKy8vIFRoZW4gaW5zZXJ0VGV4dCBh
Z2Fpbi4gVGhlIHRleHQgaXMgYWRkZWQuCit0ZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4
ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdEJyk7CitzaG91bGRCZSgndGV4dElucHV0
LnZhbHVlJywgJyJBQkNEIicpOworCisvLyBEaXNhYmxlIGZpbGVkU2V0LgorZmllbGRTZXQuZGlz
YWJsZWQgPSB0cnVlOworCisvLyBUaGVuIGluc2VydFRleHQgYWdhaW4uIFRoZSB0ZXh0IGlzIG5v
dCBhZGRlZC4KK3RleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2Vy
dFRleHQnLCBmYWxzZSwgJ0UnKTsKK3Nob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCQ0Qi
Jyk7CisKKy8vIEVuYWJsZSBmaWxlZFNldC4KK2ZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisK
Ky8vIFRoZW4gaW5zZXJ0VGV4dCBhZ2Fpbi4gVGhlIHRleHQgaXMgYWRkZWQuCit0ZXh0SW5wdXQu
Zm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdFJyk7
CitzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJBQkNERSInKTsKKworLy8gQWRkIDMwMDAg
dGV4dCBpbnB1dCBmb3IgcGVyZm9ybWFuY2UgdGVzdC4KK2ZvciAodmFyIGkgPSAwOyBpIDwgMzAw
MDsgaSsrKSB7CisgIHZhciBuZXdUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdp
bnB1dCcpOworICBuZXdUZXh0SW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgdGQuYXBwZW5kQ2hpbGQo
bmV3VGV4dElucHV0KTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggN2Y5MDJlYi4uMjA2OGRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisy
MDEyLTAyLTAyICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAgICAgIEZp
ZWxkc2V0IGRpc2FibGVkIGF0dHJpYnV0ZSBkb2VzIG5vdCB3b3JrLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzcKKworICAgICAgICBBZGQgZGlz
YWJsZWQgYXR0cmlidXRlIGZvciBGaWVsZHNldCBlbGVtZW50LgorICAgICAgICBUbyBhbGxvdyBl
ZmZpY2llbnQgZW5hYmxpbmcvZGlzYWJsaW5nIG9mIGEgZmllbGRzZXQKKyAgICAgICAgd2UgcmVn
aXN0ZXIgRm9ybUNvbnRyb2wgZWxlbWVudHMgdG8gRmllbGRzZXQgYW5jZXN0b3JzCisgICAgICAg
IHdoZXJlIGF2YWlsYWJsZS4KKworICAgICAgICBQYXRjaCBieSBOYW9raSBUYWthbm8gIDx0YWth
bm8ubmFva2lAZ21haWwuY29tPgorICAgICAgICBQYXRjaCB1cGRhdGVkIGJ5IFplbm8gQWxiaXNz
ZXIgPHplbm9Ad2Via2l0Lm9yZz4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL2ZpZWxkc2V0
LWRpc2FibGVkLmh0bWwKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAg
ICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6
ZmluZEZpZWxkU2V0QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRt
bC9IVE1MRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIVE1MRWxlbWVu
dCk6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpyZWdpc3Rl
ckZvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVt
ZW50Ojp1bnJlZ2lzdGVyRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxG
aWVsZFNldEVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxGaWVsZFNldEVsZW1lbnQpOgorICAgICAg
ICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVnaXN0ZXJUb0ZpZWxkU2V0QW5jZXN0b3IpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1bnJl
Z2lzdGVyRnJvbUZpZWxkU2V0QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0UGFyZW50RGlzYWJsZWQpOgorICAgICAgICAqIGh0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAoSFRNTEZvcm1Db250cm9sRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxl
ZCk6CisKIDIwMTItMDItMDIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIE1vdmUgcmVtYWluaW5nIGltcGxlbWVudGF0aW9uIGZyb20gQ1NTU3R5bGVEZWNsYXJh
dGlvbiB0byBzdWJjbGFzc2VzIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuY3BwCmluZGV4IGQyZjNmNGEuLmM1NmFhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKQEAgLTkzLDYgKzkzLDggQEAgdm9pZCBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKQogICAgICAgICAvLyBhbmQg
c28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KICAgICAgICAgc2V0Rm9ybShlbGVtZW50
LT5maW5kRm9ybUFuY2VzdG9yKCkpOwogICAgIH0KKyAgICBpZiAoZWxlbWVudC0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KGVsZW1lbnQpLT5yZWdpc3RlclRvRmllbGRTZXRBbmNlc3RvcigpOwogfQogCiBzdGF0aWMg
aW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCkBAIC0xMTEsNiArMTEzLDggQEAgdm9pZCBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSgpCiAgICAgLy8gT3RoZXJ3aXNl
LCBudWxsIG91dCBvdXIgZm9ybSBhbmQgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBmb3JtJ3Mg
bGlzdCBvZiBlbGVtZW50cy4KICAgICBpZiAobV9mb3JtICYmIGZpbmRSb290KGVsZW1lbnQpICE9
IGZpbmRSb290KG1fZm9ybSkpCiAgICAgICAgIHNldEZvcm0oMCk7CisgICAgaWYgKGVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqPihlbGVtZW50KS0+dW5yZWdpc3RlckZyb21GaWVsZFNldEFuY2VzdG9yKCk7
CiB9CiAKIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXRGb3JtKEhUTUxGb3JtRWxlbWVu
dCogbmV3Rm9ybSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5kZXggNjgwYzIzYi4u
Y2EyMjBkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIkhUTUxGaWVsZFNl
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCkBAIC04NjIsNiArODYzLDE3
IEBAIEhUTUxGb3JtRWxlbWVudCogSFRNTEVsZW1lbnQ6OmZpbmRGb3JtQW5jZXN0b3IoKSBjb25z
dAogICAgIHJldHVybiAwOwogfQogCitIVE1MRmllbGRTZXRFbGVtZW50KiBIVE1MRWxlbWVudDo6
ZmluZEZpZWxkU2V0QW5jZXN0b3IoKSBjb25zdAoreworICAgIGZvciAoQ29udGFpbmVyTm9kZSog
YW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5w
YXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKGZpZWxkc2V0
VGFnKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50
Kj4oYW5jZXN0b3IpOworICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoZm9ybVRhZykp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIEhUTUxG
b3JtRWxlbWVudCogSFRNTEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29uc3QKIHsKICAgICByZXR1
cm4gZmluZEZvcm1BbmNlc3RvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCmluZGV4IGE4
NmIyYjkuLmQ5M2Q1MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKQEAgLTMwLDYgKzMw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNz
IEhUTUxDb2xsZWN0aW9uOwogY2xhc3MgSFRNTEZvcm1FbGVtZW50OworY2xhc3MgSFRNTEZpZWxk
U2V0RWxlbWVudDsKIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCiBjbGFzcyBNaWNyb0RhdGFJdGVt
VmFsdWU7CkBAIC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhZGRIVE1M
QWxpZ25tZW50VG9TdHlsZWRFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBBdHRyaWJ1dGUqKTsKIAog
ICAgIEhUTUxGb3JtRWxlbWVudCogZmluZEZvcm1BbmNlc3RvcigpIGNvbnN0OworICAgIEhUTUxG
aWVsZFNldEVsZW1lbnQqIGZpbmRGaWVsZFNldEFuY2VzdG9yKCkgY29uc3Q7CiAKICAgICBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGJvb2wmIGlzQXV0
bykgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3Bw
CmluZGV4IDRiOTA0MTIuLmY3ZjYxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmll
bGRTZXRFbGVtZW50LmNwcApAQCAtNTUsNiArNTUsMzAgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MRmllbGRTZXRFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAogICAgIHJldHVybiBm
aWVsZHNldDsKIH0KIAordm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2Vk
KEF0dHJpYnV0ZSogYXR0cmlidXRlLCBib29sIHByZXNlcnZlRGVjbHMpCit7CisgICAgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGUsIHByZXNlcnZlRGVj
bHMpOworICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N1Ym9yZGluYXRlZEZvcm1Db250cm9sRWxlbWVu
dHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNv
bnRyb2wgPSBtX3N1Ym9yZGluYXRlZEZvcm1Db250cm9sRWxlbWVudHMuYXQoaSk7CisgICAgICAg
ICAgICBjb250cm9sLT5zZXRQYXJlbnREaXNhYmxlZChkaXNhYmxlZCgpKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpyZWdpc3RlckZvcm1Db250cm9s
RWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBzdWJvcmRpbmF0ZSkKK3sKKyAgICBtX3N1
Ym9yZGluYXRlZEZvcm1Db250cm9sRWxlbWVudHMuYXBwZW5kKHN1Ym9yZGluYXRlKTsKKyAgICBz
dWJvcmRpbmF0ZS0+c2V0UGFyZW50RGlzYWJsZWQoZGlzYWJsZWQoKSk7Cit9CisKK3ZvaWQgSFRN
TEZpZWxkU2V0RWxlbWVudDo6dW5yZWdpc3RlckZvcm1Db250cm9sRWxlbWVudChIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBzdWJvcmRpbmF0ZSkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBtX3N1Ym9y
ZGluYXRlZEZvcm1Db250cm9sRWxlbWVudHMuZmluZChzdWJvcmRpbmF0ZSk7CisgICAgaWYgKGlu
ZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICBtX3N1Ym9yZGluYXRlZEZvcm1Db250cm9sRWxlbWVu
dHMucmVtb3ZlKGluZGV4KTsKK30KKwogUmVuZGVyT2JqZWN0KiBIVE1MRmllbGRTZXRFbGVtZW50
OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIHsKICAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyRmllbGRzZXQodGhpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCmluZGV4IGRjYzhkMGMuLmUxNWM0MzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCkBAIC0zMiw2ICszMiw5IEBA
IGNsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEZpZWxkU2V0RWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCop
OwogCisgICAgdm9pZCByZWdpc3RlckZvcm1Db250cm9sRWxlbWVudChIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRm9ybUNvbnRyb2xFbGVtZW50KEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqKTsKKwogcHJpdmF0ZToKICAgICBIVE1MRmllbGRTZXRFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogCkBAIC0z
OSw3ICs0MiwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9y
bUNvbnRyb2xUeXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQo
QXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOwogICAgIHZpcnR1YWwgYm9v
bCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgVmVj
dG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiBtX3N1Ym9yZGluYXRlZEZvcm1Db250cm9sRWxl
bWVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZp
ZWxkU2V0RWxlbWVudC5pZGwKaW5kZXggOGNmZmUzZC4uMTJlN2M4OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsCkBAIC0yNCw2ICsyNCw3IEBAIG1vZHVs
ZSBodG1sIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFZhbGlkaXR5U3RhdGUgICB2YWxp
ZGl0eTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICB3aWxsVmFs
aWRhdGU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgdmFsaWRh
dGlvbk1lc3NhZ2U7CisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiBkaXNhYmxl
ZDsKICAgICAgICAgYm9vbGVhbiAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICB2b2lkICAgICBz
ZXRDdXN0b21WYWxpZGl0eShpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10g
RE9NU3RyaW5nIGVycm9yKTsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMmIwNmYzZC4uNmQ1YzY4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTUwLDcgKzUxLDkgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3Jt
RWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQorICAg
ICwgbV9maWVsZFNldEFuY2VzdG9yKDApCiAgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQorICAgICwg
bV9wYXJlbnREaXNhYmxlZChmYWxzZSkKICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBt
X3JlcXVpcmVkKGZhbHNlKQogICAgICwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkKQEAg
LTk5LDYgKzEwMiwyMyBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Ob1ZhbGlk
YXRlKCkgY29uc3QKICAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0
dHIpOwogfQogCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlZ2lzdGVyVG9GaWVsZFNl
dEFuY2VzdG9yKCkKK3sKKyAgICBIVE1MRmllbGRTZXRFbGVtZW50KiBmaWVsZFNldCA9IGZpbmRG
aWVsZFNldEFuY2VzdG9yKCk7CisgICAgaWYgKGZpZWxkU2V0ICE9IG1fZmllbGRTZXRBbmNlc3Rv
cikgeworICAgICAgICB1bnJlZ2lzdGVyRnJvbUZpZWxkU2V0QW5jZXN0b3IoKTsKKyAgICAgICAg
aWYgKGZpZWxkU2V0KQorICAgICAgICAgICAgZmllbGRTZXQtPnJlZ2lzdGVyRm9ybUNvbnRyb2xF
bGVtZW50KHRoaXMpOworICAgICAgICBtX2ZpZWxkU2V0QW5jZXN0b3IgPSBmaWVsZFNldDsKKyAg
ICB9Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dW5yZWdpc3RlckZyb21GaWVs
ZFNldEFuY2VzdG9yKCkKK3sKKyAgICBpZiAobV9maWVsZFNldEFuY2VzdG9yKQorICAgICAgICBt
X2ZpZWxkU2V0QW5jZXN0b3ItPnVucmVnaXN0ZXJGb3JtQ29udHJvbEVsZW1lbnQodGhpcyk7Cit9
CisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0dHIpCkBAIC0y
NjMsNiArMjgzLDExIEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0RGlzYWJsZWQo
Ym9vbCBiKQogICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGIgPyAiIiA6IDApOwogfQog
Cit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFBhcmVudERpc2FibGVkKGJvb2wgZGlz
YWJsZWQpCit7CisgICAgbV9wYXJlbnREaXNhYmxlZCA9IGRpc2FibGVkOworfQorCiBib29sIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhh
c0F0dHJpYnV0ZShhdXRvZm9jdXNBdHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmgKaW5kZXggZWRjNDA2Zi4uMjk2M2JmMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKQEAgLTQ5LDYgKzQ5LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0Rm9ybU1ldGhvZChjb25zdCBTdHJpbmcmKTsKICAgICBib29sIGZv
cm1Ob1ZhbGlkYXRlKCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlZ2lzdGVyVG9GaWVsZFNldEFuY2Vz
dG9yKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyRnJvbUZpZWxkU2V0QW5jZXN0b3IoKTsKKwogICAg
IHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGZvcm1Db250cm9s
VmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRl
cmVyOyB9CkBAIC02MCw4ICs2Myw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9y
bUNvbnRyb2xJbnB1dEV2ZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2Rpc2FibGVkOyB9CisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9kaXNhYmxlZCB8fCBtX3BhcmVudERpc2FibGVkOyB9CiAgICAgdm9pZCBz
ZXREaXNhYmxlZChib29sKTsKKyAgICB2b2lkIHNldFBhcmVudERpc2FibGVkKGJvb2wpOwogCiAg
ICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE0OSw4ICsxNTMsMTAg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
OwogICAgIFN0cmluZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKIAorICAgIEhU
TUxGaWVsZFNldEVsZW1lbnQqIG1fZmllbGRTZXRBbmNlc3RvcjsKICAgICBPd25QdHI8VmFsaWRh
dGlvbk1lc3NhZ2U+IG1fdmFsaWRhdGlvbk1lc3NhZ2U7CiAgICAgYm9vbCBtX2Rpc2FibGVkIDog
MTsKKyAgICBib29sIG1fcGFyZW50RGlzYWJsZWQgOiAxOwogICAgIGJvb2wgbV9yZWFkT25seSA6
IDE7CiAgICAgYm9vbCBtX3JlcXVpcmVkIDogMTsKICAgICBib29sIG1fdmFsdWVNYXRjaGVzUmVu
ZGVyZXIgOiAxOwo=
</data>
<flag name="review"
          id="126601"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125343</attachid>
            <date>2012-02-03 08:51:17 -0800</date>
            <delta_ts>2012-02-10 08:58:26 -0800</delta_ts>
            <desc>patch for review.</desc>
            <filename>58837_20120203-173039.patch</filename>
            <type>text/plain</type>
            <size>17359</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YmUzNDcwLi40YzUxYzg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDIt
MDMgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmllbGRzZXQg
ZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgIEFkZCBhIHRlc3QgY2Fz
ZSBmb3IgZmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZmllbGRzZXQtZGlz
YWJsZWQuaHRtbDogQWRkZWQuCisKIDIwMTItMDItMDIgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9z
c3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWE1OWNhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw0OCBAQAorVGVzdHMgZm9yIEhUTUxGaWVsZFNldEVsZW1lbnQu
ZGlzYWJsZWQgYmVoYXZpb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitGaWVs
ZHNldCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEEgdXNlciBjYW4gaW5zZXJ0VGV4dCBpbnRvIHRo
ZSB0ZXh0IGlucHV0IGZpZWxkLgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkEiCitEaXNhYmxl
IGZpZWxkc2V0LgorT25jZSB0aGUgZmllbGRzZXQgaXMgZGlzYWJsZWQsIHRleHQgY2Fubm90IGJl
IGluc2VydGVkLgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkEiCitFbmFibGUgZmllbGRzZXQu
CitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQUIiCitNb3ZlIHRoZSB0ZXh0aW5wdXQgZWxlbWVu
dCBvdXQgb2YgdGhlIGZpZWxkc2V0LgorRGlzYWJsZSB0aGUgZmllbGRzZXQuCitUZXh0IGNhbiBi
ZSBpbnNlcnRlZCwgYmVjYXVzZSB0aGUgdGV4dGlucHV0IGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0
aGUgZGlzYWJsZWQgZmllbGRzZXQuCitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQUJDIgorRW5h
YmxlIHRoZSBmaWVsZHNldC4KK0luc2VydCBhIHRhYmxlIGludG8gdGhlIGZpZWxkc2V0LgorTW92
ZSB0aGUgdGV4dGlucHV0IGZpZWxkIGludG8gdGhlIHRhYmxlLgorUEFTUyB0ZXh0SW5wdXQudmFs
dWUgaXMgIkFCQ0QiCitEaXNhYmxlIHRoZSBmaWVsZHNldC4KK0luc2VydGluZyB0ZXh0IHNob3Vs
ZCBmYWlsLgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0QiCitFbmFibGUgdGhlIGZpZWxk
c2V0LgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0RFIgorQ3JlYXRpbmcgbmVzdGVkIGZp
ZWxkc2V0IGVsZW1lbnRzLgorVmVyaWZ5aW5nIHRoYXQgc3Vib3JkaW5hdGVzIG9mIGJvdGggZmll
bGRzZXRzIGFyZSBlbmFibGVkLgorUEFTUyBvdXRlclRleHRJbnB1dC52YWx1ZSBpcyAiRiIKK1BB
U1MgaW5uZXJUZXh0SW5wdXQudmFsdWUgaXMgIkYiCitEaXNhYmxpbmcgdGhlIGlubmVyIGZpZWxk
c2V0IG9ubHkuCitQQVNTIG91dGVyVGV4dElucHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJU
ZXh0SW5wdXQudmFsdWUgaXMgIkYiCitFbmFibGluZyB0aGUgaW5uZXIgYW5kIGRpc2FibGluZyB0
aGUgb3V0ZXIgZmllbGRzZXQuCitQQVNTIG91dGVyVGV4dElucHV0LnZhbHVlIGlzICJGRyIKK1BB
U1MgaW5uZXJUZXh0SW5wdXQudmFsdWUgaXMgIkYiCitEaXNhYmxpbmcgYm90aCBmaWVsZHNldCBl
bGVtZW50cy4KK1BBU1Mgb3V0ZXJUZXh0SW5wdXQudmFsdWUgaXMgIkZHIgorUEFTUyBpbm5lclRl
eHRJbnB1dC52YWx1ZSBpcyAiRiIKK0VuYWJsaW5nIGJvdGggZmllbGRzZXQgZWxlbWVudHMuCitQ
QVNTIG91dGVyVGV4dElucHV0LnZhbHVlIGlzICJGR0giCitQQVNTIGlubmVyVGV4dElucHV0LnZh
bHVlIGlzICJGSCIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCisKKworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0
LWRpc2FibGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVk
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyMTkwOQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRt
bApAQCAtMCwwICsxLDE2MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdHMgZm9yIEhUTUxGaWVsZFNldEVsZW1l
bnQuZGlzYWJsZWQgYmVoYXZpb3IuJyk7CisKK3ZhciBmaWVsZFNldCA9IDA7Cit2YXIgdGV4dElu
cHV0ID0gMDsKK3ZhciBvdXRlckZpZWxkU2V0ID0gMDsKK3ZhciBvdXRlclRleHRJbnB1dCA9IDA7
Cit2YXIgaW5uZXJGaWVsZFNldCA9IDA7Cit2YXIgaW5uZXJUZXh0SW5wdXQgPSAwOworCitmdW5j
dGlvbiB0ZXN0U2luZ2xlRmllbGRTZXQoKSB7CisgICAgZmllbGRTZXQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdmaWVsZHNldCcpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZmll
bGRTZXQpOworCisgICAgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQn
KTsKKyAgICB0ZXh0SW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgICBmaWVsZFNldC5hcHBlbmRDaGls
ZCh0ZXh0SW5wdXQpOworCisgICAgZGVidWcoJ0ZpZWxkc2V0IGlzIGVuYWJsZWQgYnkgZGVmYXVs
dC4gQSB1c2VyIGNhbiBpbnNlcnRUZXh0IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQuJyk7Cisg
ICAgdGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRl
eHQnLCBmYWxzZSwgJ0EnKTsKKyAgICBzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJBIicp
OworCisgICAgZGVidWcoJ0Rpc2FibGUgZmllbGRzZXQuJyk7CisgICAgZmllbGRTZXQuZGlzYWJs
ZWQgPSB0cnVlOworCisgICAgZGVidWcoJ09uY2UgdGhlIGZpZWxkc2V0IGlzIGRpc2FibGVkLCB0
ZXh0IGNhbm5vdCBiZSBpbnNlcnRlZC4nKTsKKyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBk
b2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQicpOworICAgIHNob3Vs
ZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkEiJyk7CisKKyAgICBkZWJ1ZygnRW5hYmxlIGZpZWxk
c2V0LicpOworICAgIGZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICB0ZXh0SW5wdXQu
Zm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAn
QicpOworICAgIHNob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCIicpOworCisgICAgZGVi
dWcoJ01vdmUgdGhlIHRleHRpbnB1dCBlbGVtZW50IG91dCBvZiB0aGUgZmllbGRzZXQuJyk7Cisg
ICAgZmllbGRTZXQucmVtb3ZlQ2hpbGQodGV4dElucHV0KTsKKyAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKHRleHRJbnB1dCk7CisKKyAgICBkZWJ1ZygnRGlzYWJsZSB0aGUgZmllbGRzZXQu
Jyk7CisgICAgZmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworCisgICAgZGVidWcoJ1RleHQgY2Fu
IGJlIGluc2VydGVkLCBiZWNhdXNlIHRoZSB0ZXh0aW5wdXQgZWxlbWVudCBpcyBvdXRzaWRlIG9m
IHRoZSBkaXNhYmxlZCBmaWVsZHNldC4nKTsKKyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBk
b2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQycpOworICAgIHNob3Vs
ZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCQyInKTsKKworICAgIGRlYnVnKCdFbmFibGUgdGhl
IGZpZWxkc2V0LicpOworICAgIGZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICBkZWJ1
ZygnSW5zZXJ0IGEgdGFibGUgaW50byB0aGUgZmllbGRzZXQuJyk7CisgICAgdmFyIHRhYmxlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTsKKyAgICBmaWVsZFNldC5hcHBlbmRDaGls
ZCh0YWJsZSk7CisgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKKyAg
ICB0YWJsZS5hcHBlbmRDaGlsZCh0cik7CisgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgndGQnKTsKKyAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisKKyAgICBkZWJ1ZygnTW92ZSB0
aGUgdGV4dGlucHV0IGZpZWxkIGludG8gdGhlIHRhYmxlLicpOworICAgIGRvY3VtZW50LmJvZHku
cmVtb3ZlQ2hpbGQodGV4dElucHV0KTsKKyAgICB0ZC5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQpOwor
CisgICAgdGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2Vy
dFRleHQnLCBmYWxzZSwgJ0QnKTsKKyAgICBzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJB
QkNEIicpOworCisgICAgZGVidWcoJ0Rpc2FibGUgdGhlIGZpZWxkc2V0LicpOworICAgIGZpZWxk
U2V0LmRpc2FibGVkID0gdHJ1ZTsKKworICAgIGRlYnVnKCdJbnNlcnRpbmcgdGV4dCBzaG91bGQg
ZmFpbC4nKQorICAgIHRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5k
KCdpbnNlcnRUZXh0JywgZmFsc2UsICdFJyk7CisgICAgc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1
ZScsICciQUJDRCInKTsKKworICAgIGRlYnVnKCdFbmFibGUgdGhlIGZpZWxkc2V0LicpOworICAg
IGZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRScpOworICAgIHNo
b3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCQ0RFIicpOworfQorCitmdW5jdGlvbiB0ZXN0
TmVzdGVkRmllbGRTZXRzKCkgeworICAgIGRlYnVnKCdDcmVhdGluZyBuZXN0ZWQgZmllbGRzZXQg
ZWxlbWVudHMuJyk7CisgICAgb3V0ZXJGaWVsZFNldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2ZpZWxkc2V0Jyk7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlckZpZWxkU2V0
KTsKKyAgICBpbm5lckZpZWxkU2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQn
KTsKKyAgICBvdXRlckZpZWxkU2V0LmFwcGVuZENoaWxkKGlubmVyRmllbGRTZXQpOworICAgIG91
dGVyVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICBvdXRl
clRleHRJbnB1dC50eXBlID0gInRleHQiOworICAgIG91dGVyRmllbGRTZXQuYXBwZW5kQ2hpbGQo
b3V0ZXJUZXh0SW5wdXQpOworICAgIGlubmVyVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnaW5wdXQnKTsKKyAgICBpbm5lclRleHRJbnB1dC50eXBlID0gInRleHQiOworICAgIGlu
bmVyRmllbGRTZXQuYXBwZW5kQ2hpbGQoaW5uZXJUZXh0SW5wdXQpOworCisgICAgZGVidWcoJ1Zl
cmlmeWluZyB0aGF0IHN1Ym9yZGluYXRlcyBvZiBib3RoIGZpZWxkc2V0cyBhcmUgZW5hYmxlZC4n
KTsKKyAgICBvdXRlclRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5k
KCdpbnNlcnRUZXh0JywgZmFsc2UsICdGJyk7CisgICAgaW5uZXJUZXh0SW5wdXQuZm9jdXMoKTsK
KyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRicpOworICAg
IHNob3VsZEJlKCdvdXRlclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKyAgICBzaG91bGRCZSgn
aW5uZXJUZXh0SW5wdXQudmFsdWUnLCAnIkYiJyk7CisKKyAgICBkZWJ1ZygnRGlzYWJsaW5nIHRo
ZSBpbm5lciBmaWVsZHNldCBvbmx5LicpOworICAgIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgPSB0
cnVlOworICAgIG91dGVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0cnKTsKKyAgICBpbm5lclRleHRJbnB1dC5mb2N1cygp
OworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdHJyk7Cisg
ICAgc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGRyInKTsKKyAgICBzaG91bGRC
ZSgnaW5uZXJUZXh0SW5wdXQudmFsdWUnLCAnIkYiJyk7CisKKyAgICBkZWJ1ZygnRW5hYmxpbmcg
dGhlIGlubmVyIGFuZCBkaXNhYmxpbmcgdGhlIG91dGVyIGZpZWxkc2V0LicpOworICAgIG91dGVy
RmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworICAgIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgPSBm
YWxzZTsKKyAgICBvdXRlclRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21t
YW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdIJyk7CisgICAgaW5uZXJUZXh0SW5wdXQuZm9jdXMo
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSCcpOwor
ICAgIHNob3VsZEJlKCdvdXRlclRleHRJbnB1dC52YWx1ZScsICciRkciJyk7CisgICAgc2hvdWxk
QmUoJ2lubmVyVGV4dElucHV0LnZhbHVlJywgJyJGIicpOworCisgICAgZGVidWcoJ0Rpc2FibGlu
ZyBib3RoIGZpZWxkc2V0IGVsZW1lbnRzLicpOworICAgIG91dGVyRmllbGRTZXQuZGlzYWJsZWQg
PSB0cnVlOworICAgIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworICAgIG91dGVyVGV4
dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBm
YWxzZSwgJ0gnKTsKKyAgICBpbm5lclRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4
ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdIJyk7CisgICAgc2hvdWxkQmUoJ291dGVy
VGV4dElucHV0LnZhbHVlJywgJyJGRyInKTsKKyAgICBzaG91bGRCZSgnaW5uZXJUZXh0SW5wdXQu
dmFsdWUnLCAnIkYiJyk7CisKKyAgICBkZWJ1ZygnRW5hYmxpbmcgYm90aCBmaWVsZHNldCBlbGVt
ZW50cy4nKTsKKyAgICBvdXRlckZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisgICAgaW5uZXJG
aWVsZFNldC5kaXNhYmxlZCA9IGZhbHNlOworICAgIG91dGVyVGV4dElucHV0LmZvY3VzKCk7Cisg
ICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKKyAgICBp
bm5lclRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRU
ZXh0JywgZmFsc2UsICdIJyk7CisgICAgc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywg
JyJGR0giJyk7CisgICAgc2hvdWxkQmUoJ2lubmVyVGV4dElucHV0LnZhbHVlJywgJyJGSCInKTsK
K30KKwordGVzdFNpbmdsZUZpZWxkU2V0KCk7Cit0ZXN0TmVzdGVkRmllbGRTZXRzKCk7CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZjkwMmViLi5kNjk3ZmYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDEgQEAKKzIwMTItMDItMDMgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgRmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisg
ICAgICAgIE1ha2UgYSBmaWVsZHNldCBwcm9wYWdhdGUgaXRzIGVuYWJsZWQvZGlzYWJsZWQgc3Rh
dGUKKyAgICAgICAgdG8gaXRzIGNoaWxkcmVuLiBXaGVuIGEgRm9ybUNvbnRyb2xFbGVtZW50IGlz
IGluc2VydGVkCisgICAgICAgIGl0IGNoZWNrcyBmb3IgYSBmaWVsZHNldCBhbmNlc3RvciBhbmQg
aW5oZXJpdHMgaXRzIGN1cnJlbnQgc3RhdGUuCisKKyAgICAgICAgUGF0Y2ggYnkgTmFva2kgVGFr
YW5vICA8dGFrYW5vLm5hb2tpQGdtYWlsLmNvbT4KKyAgICAgICAgUGF0Y2ggdXBkYXRlZCBieSBa
ZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jt
cy9maWVsZHNldC1kaXNhYmxlZC5odG1sCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOgor
ICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6OmZpbmRGaWVsZFNldEFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSFRN
TEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
aDoKKyAgICAgICAgKEhUTUxGaWVsZFNldEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZp
ZWxkU2V0RWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6dXBkYXRlRmllbGRTZXRBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQpOgorCiAyMDEyLTAyLTAyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBNb3ZlIHJlbWFpbmluZyBpbXBsZW1lbnRhdGlvbiBmcm9tIENTU1N0eWxlRGVj
bGFyYXRpb24gdG8gc3ViY2xhc3NlcyAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmNwcAppbmRleCBkMmYzZjRhLi5jNjMyMTdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCkBAIC05Myw2ICs5Myw4IEBAIHZv
aWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKCkKICAgICAgICAgLy8g
YW5kIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCiAgICAgICAgIHNldEZvcm0oZWxl
bWVudC0+ZmluZEZvcm1BbmNlc3RvcigpKTsKICAgICB9CisgICAgaWYgKGVsZW1lbnQtPmlzRm9y
bUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlRmllbGRTZXRBbmNlc3RvcigpOwogfQogCiBzdGF0aWMg
aW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCmluZGV4IDY4MGMyM2IuLmNhMjIwZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKKyNp
bmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5o
IgpAQCAtODYyLDYgKzg2MywxNyBAQCBIVE1MRm9ybUVsZW1lbnQqIEhUTUxFbGVtZW50OjpmaW5k
Rm9ybUFuY2VzdG9yKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAorSFRNTEZpZWxkU2V0RWxl
bWVudCogSFRNTEVsZW1lbnQ6OmZpbmRGaWVsZFNldEFuY2VzdG9yKCkgY29uc3QKK3sKKyAgICBm
b3IgKENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gcGFyZW50Tm9kZSgpOyBhbmNlc3RvcjsgYW5j
ZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChhbmNlc3Rvci0+
aGFzVGFnTmFtZShmaWVsZHNldFRhZykpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEZpZWxkU2V0RWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICAgICAgaWYgKGFuY2VzdG9yLT5o
YXNUYWdOYW1lKGZvcm1UYWcpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJl
dHVybiAwOworfQorCiBIVE1MRm9ybUVsZW1lbnQqIEhUTUxFbGVtZW50Ojp2aXJ0dWFsRm9ybSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGZpbmRGb3JtQW5jZXN0b3IoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuaAppbmRleCBhODZiMmI5Li5kOTNkNTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5oCkBAIC0zMCw2ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERvY3Vt
ZW50RnJhZ21lbnQ7CiBjbGFzcyBIVE1MQ29sbGVjdGlvbjsKIGNsYXNzIEhUTUxGb3JtRWxlbWVu
dDsKK2NsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnQ7CiAKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQog
Y2xhc3MgTWljcm9EYXRhSXRlbVZhbHVlOwpAQCAtODIsNiArODMsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgYWRkSFRNTEFsaWdubWVudFRvU3R5bGVkRWxlbWVudChTdHlsZWRFbGVtZW50
KiwgQXR0cmlidXRlKik7CiAKICAgICBIVE1MRm9ybUVsZW1lbnQqIGZpbmRGb3JtQW5jZXN0b3Io
KSBjb25zdDsKKyAgICBIVE1MRmllbGRTZXRFbGVtZW50KiBmaW5kRmllbGRTZXRBbmNlc3Rvcigp
IGNvbnN0OwogCiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0
dHJpYnV0ZShib29sJiBpc0F1dG8pIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RmllbGRTZXRFbGVtZW50LmNwcAppbmRleCA0YjkwNDEyLi5kYzg1Y2Y0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKQEAgLTU1LDYgKzU1LDMyIEBAIGNv
bnN0IEF0b21pY1N0cmluZyYgSFRNTEZpZWxkU2V0RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3QKICAgICByZXR1cm4gZmllbGRzZXQ7CiB9CiAKK3ZvaWQgSFRNTEZpZWxkU2V0RWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQoreworICAgIC8vIFRoaXMg
ZWxlbWVudCBtdXN0IGJlIHVwZGF0ZWQgYmVmb3JlIHRoZSBzdHlsZSBvZiBub2RlcyBpbiBpdHMg
c3VidHJlZSBnZXRzIHJlY2FsY3VsYXRlZC4KKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZGlz
YWJsZWRBdHRyKSB7CisgICAgICAgIFZlY3RvcjxOb2RlKj4gbm9kZXNUb1VwZGF0ZTsKKyAgICAg
ICAgbm9kZXNUb1VwZGF0ZS5hcHBlbmQodGhpcyk7CisgICAgICAgIHdoaWxlICghbm9kZXNUb1Vw
ZGF0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIFRha2UgdGhlIGxhc3Qgbm9kZSBmcm9t
IHRoZSB2ZWN0b3IgYW5kIG1hcmsgaXQgZm9yIHN0eWxlIHJlY2FsY3VsYXRpb24uCisgICAgICAg
ICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IG5vZGVzVG9VcGRhdGUubGFzdCgpOworICAgICAgICAg
ICAgbm9kZXNUb1VwZGF0ZS5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpOworICAgICAgICAgICAgaWYgKGVs
ZW1lbnQgJiYgZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudCktPnNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKKworICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiBvZiBj
dXJyZW50Tm9kZSB0byB0aGUgdmVjdG9yIG9mIG5vZGVzIHRoYXQgbmVlZCB0byBiZSB1cGRhdGVk
LgorICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOwor
ICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAgICAgICAgICAgbm9kZXNU
b1VwZGF0ZS5hcHBlbmQoY3VycmVudE5vZGUpOworICAgICAgICAgICAgICAgIGN1cnJlbnROb2Rl
ID0gY3VycmVudE5vZGUtPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKIFJlbmRlck9iamVjdCogSFRNTEZpZWxkU2V0RWxlbWVudDo6Y3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAgICAgcmV0dXJuIG5l
dyAoYXJlbmEpIFJlbmRlckZpZWxkc2V0KHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
aWVsZFNldEVsZW1lbnQuaAppbmRleCBkY2M4ZDBjLi44MTNiOWIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaApAQCAtMzksNiArMzksNyBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZp
cnR1YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKaW5kZXgg
OGNmZmUzZC4uMTJlN2M4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmll
bGRTZXRFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVs
ZW1lbnQuaWRsCkBAIC0yNCw2ICsyNCw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFZhbGlkaXR5U3RhdGUgICB2YWxpZGl0eTsKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGJvb2xlYW4gICAgICAgICB3aWxsVmFsaWRhdGU7CiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2U7CisgICAgICAgIGF0
dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiBkaXNhYmxlZDsKICAgICAgICAgYm9vbGVhbiAgY2hl
Y2tWYWxpZGl0eSgpOwogICAgICAgICB2b2lkICAgICBzZXRDdXN0b21WYWxpZGl0eShpbiBbQ29u
dmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGVycm9yKTsKICAgICB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5k
ZXggMmIwNmYzZC4uMmUyOGQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiRXZlbnRIYW5k
bGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
QEAgLTUwLDYgKzUxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhU
TUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQorICAgICwgbV9maWVsZFNldEFuY2VzdG9yKDAp
CiAgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQogICAgICwgbV9yZWFkT25seShmYWxzZSkKICAgICAs
IG1fcmVxdWlyZWQoZmFsc2UpCkBAIC05OSw2ICsxMDEsMTEgQEAgYm9vbCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhc3RIYXNBdHRy
aWJ1dGUoZm9ybW5vdmFsaWRhdGVBdHRyKTsKIH0KIAordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojp1cGRhdGVGaWVsZFNldEFuY2VzdG9yKCkKK3sKKyAgICBtX2ZpZWxkU2V0QW5jZXN0b3Ig
PSBmaW5kRmllbGRTZXRBbmNlc3RvcigpOworfQorCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0
ci0+bmFtZSgpID09IGZvcm1BdHRyKQpAQCAtMjU4LDYgKzI2NSwxMSBAQCB2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCkKICAgICBIVE1M
RWxlbWVudDo6ZGlzcGF0Y2hJbnB1dEV2ZW50KCk7CiB9CiAKK2Jvb2wgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2Rpc2FibGVkIHx8ICht
X2ZpZWxkU2V0QW5jZXN0b3IgJiYgbV9maWVsZFNldEFuY2VzdG9yLT5kaXNhYmxlZCgpKTsKK30K
Kwogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXREaXNhYmxlZChib29sIGIpCiB7CiAg
ICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgYiA/ICIiIDogMCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IGVkYzQwNmYuLjBkZDZjYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC00
OSw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZvcm1NZXRob2QoY29uc3QgU3RyaW5n
Jik7CiAgICAgYm9vbCBmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0OwogCisgICAgdm9pZCB1cGRhdGVG
aWVsZFNldEFuY2VzdG9yKCk7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQpAQCAtNjAsNyArNjIsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOwogCi0gICAgdmly
dHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQorICAgIHZp
cnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKQEAgLTE0OSw2ICsxNTEs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50
KCk7CiAgICAgU3RyaW5nIHZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0OwogCisgICAg
SFRNTEZpZWxkU2V0RWxlbWVudCogbV9maWVsZFNldEFuY2VzdG9yOwogICAgIE93blB0cjxWYWxp
ZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0aW9uTWVzc2FnZTsKICAgICBib29sIG1fZGlzYWJsZWQg
OiAxOwogICAgIGJvb2wgbV9yZWFkT25seSA6IDE7Cg==
</data>
<flag name="review"
          id="126831"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126520</attachid>
            <date>2012-02-10 08:58:26 -0800</date>
            <delta_ts>2012-02-20 04:45:00 -0800</delta_ts>
            <desc>patch for review. - fixed issues as commented before.</desc>
            <filename>58837_20120210-175616.patch</filename>
            <type>text/plain</type>
            <size>29258</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMDI3YzM5Li5lNzdkODkwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDIt
MTAgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmllbGRzZXQg
ZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgIEFkZCBhIHRlc3QgY2Fz
ZSBmb3IgZmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZmllbGRzZXQtZGlz
YWJsZWQuaHRtbDogQWRkZWQuCisKIDIwMTItMDItMTAgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1h
bkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGltcGxlbWVudCB1bmRvIGZv
ciBzZXRPdXRlckhUTUwgdmlhIHVuZG8taW5nIG5lc3RlZCBwcmltaXRpdmUgY29tbWFuZHMuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjNiMTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDY4IEBACitUZXN0cyBmb3IgSFRNTEZpZWxkU2V0RWxlbWVu
dC5kaXNhYmxlZCBiZWhhdmlvci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Zl
cmlmeWluZyBIVE1MRm9ybUNvbnRyb2wgY2FuIGJlIGRpc2FibGVkIHJlZ2FyZGxlc3Mgb2YgZW5j
bG9zaW5nIGZpZWxkc2V0LgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIiIKK1BBU1MgZmFsc2Ug
aXMgZmFsc2UKK0ZpZWxkc2V0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQSB1c2VyIGNhbiBpbnNl
cnRUZXh0IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQuCitQQVNTIHRleHRJbnB1dC52YWx1ZSBp
cyAiQSIKK0Rpc2FibGUgZmllbGRzZXQuCitPbmNlIHRoZSBmaWVsZHNldCBpcyBkaXNhYmxlZCwg
dGV4dCBjYW5ub3QgYmUgaW5zZXJ0ZWQuCitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQSIKK0No
ZWNrIGlmIHRoZSBzdHlsZSBvZiB0aGUgdGV4dCBlbGVtZW50IGNoYW5nZWQuCitQQVNTIGdldENv
bXB1dGVkU3R5bGUodGV4dElucHV0KS5iYWNrZ3JvdW5kQ29sb3IgaXMgJ3JnYigyNTUsIDAsIDAp
JworRW5hYmxlIGZpZWxkc2V0LgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRleHRJbnB1dCkuYmFj
a2dyb3VuZENvbG9yIGlzICdyZ2IoMjU1LCAyNTUsIDI1NSknCitQQVNTIHRleHRJbnB1dC52YWx1
ZSBpcyAiQUIiCitNb3ZlIHRoZSB0ZXh0aW5wdXQgZWxlbWVudCBvdXQgb2YgdGhlIGZpZWxkc2V0
LgorRGlzYWJsZSB0aGUgZmllbGRzZXQuCitUZXh0IGNhbiBiZSBpbnNlcnRlZCwgYmVjYXVzZSB0
aGUgdGV4dGlucHV0IGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGUgZGlzYWJsZWQgZmllbGRzZXQu
CitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQUJDIgorRW5hYmxlIHRoZSBmaWVsZHNldC4KK0lu
c2VydCBhIHRhYmxlIGludG8gdGhlIGZpZWxkc2V0LgorTW92ZSB0aGUgdGV4dGlucHV0IGZpZWxk
IGludG8gdGhlIHRhYmxlLgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0QiCitEaXNhYmxl
IHRoZSBmaWVsZHNldC4KK0luc2VydGluZyB0ZXh0IHNob3VsZCBmYWlsLgorUEFTUyB0ZXh0SW5w
dXQudmFsdWUgaXMgIkFCQ0QiCitFbmFibGUgdGhlIGZpZWxkc2V0LgorUEFTUyB0ZXh0SW5wdXQu
dmFsdWUgaXMgIkFCQ0RFIgorQ3JlYXRpbmcgbmVzdGVkIGZpZWxkc2V0IGVsZW1lbnRzLgorVmVy
aWZ5aW5nIHRoYXQgc3Vib3JkaW5hdGVzIG9mIGJvdGggZmllbGRzZXRzIGFyZSBlbmFibGVkLgor
UEFTUyBvdXRlclRleHRJbnB1dC52YWx1ZSBpcyAiRiIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFs
dWUgaXMgIkYiCitEaXNhYmxpbmcgdGhlIGlubmVyIGZpZWxkc2V0IG9ubHkuCitQQVNTIG91dGVy
VGV4dElucHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFsdWUgaXMgIkYi
CitFbmFibGluZyB0aGUgaW5uZXIgYW5kIGRpc2FibGluZyB0aGUgb3V0ZXIgZmllbGRzZXQuCitQ
QVNTIG91dGVyVGV4dElucHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFs
dWUgaXMgIkYiCitEaXNhYmxpbmcgYm90aCBmaWVsZHNldCBlbGVtZW50cy4KK1BBU1Mgb3V0ZXJU
ZXh0SW5wdXQudmFsdWUgaXMgIkZHIgorUEFTUyBpbm5lclRleHRJbnB1dC52YWx1ZSBpcyAiRiIK
K0VuYWJsaW5nIGJvdGggZmllbGRzZXQgZWxlbWVudHMuCitQQVNTIG91dGVyVGV4dElucHV0LnZh
bHVlIGlzICJGR0giCitQQVNTIGlubmVyVGV4dElucHV0LnZhbHVlIGlzICJGSCIKK0NoaWxkcmVu
IG9mIHRoZSBmaXJzdCBsZWdlbmQgZWxlbWVudCBpbiBhIGZpZWxkc2V0IHNob3VsZCBub3QgZ2V0
IGRpc2FibGVkIHdpdGggdGhlIGZpZWxkc2V0LgorUEFTUyBmaXJzdExlZ2VuZFRleHRJbnB1dC52
YWx1ZSBpcyAiSSIKK1BBU1Mgc2Vjb25kTGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICIiCitJbnNl
cnQgYW5vdGhlciBsZWdlbmQgZWxlbWVudCBiZWZvcmUgdGhlIGN1cnJlbnRseSBmaXJzdCBvbmUs
IGFuZCBjaGVjayBhZ2Fpbi4KK1BBU1MgaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMg
IkoiCitQQVNTIGZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICJJIgorUEFTUyBzZWNvbmRM
ZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIiIKK0VuYWJsZSB0aGUgZmllbGRzZXQgYWdhaW4gYW5k
IGNoZWNrIGZvciBzYW5pdHkuCitQQVNTIGluc2VydGVkTGVnZW5kVGV4dElucHV0LnZhbHVlIGlz
ICJKSyIKK1BBU1MgZmlyc3RMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIklLIgorUEFTUyBzZWNv
bmRMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIksiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmYwMWZmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2ZpZWxkc2V0LWRpc2FibGVkLmh0bWwKQEAgLTAsMCArMSwyNDEgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoraW5wdXQgeworICAg
IGJhY2tncm91bmQ6cmdiKDI1NSwyNTUsMjU1KTsKK30KK2lucHV0OmRpc2FibGVkIHsKKyAgICBi
YWNrZ3JvdW5kOnJnYigyNTUsMCwwKTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
IGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
PgorZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBIVE1MRmllbGRTZXRFbGVtZW50LmRpc2FibGVkIGJl
aGF2aW9yLicpOworCit2YXIgZmllbGRTZXQgPSAwOwordmFyIHRleHRJbnB1dCA9IDA7Cit2YXIg
b3V0ZXJGaWVsZFNldCA9IDA7Cit2YXIgb3V0ZXJUZXh0SW5wdXQgPSAwOwordmFyIGlubmVyRmll
bGRTZXQgPSAwOwordmFyIGlubmVyVGV4dElucHV0ID0gMDsKK3ZhciBsZWdlbmRGaWVsZFNldCA9
IDA7Cit2YXIgZmlyc3RMZWdlbmRUZXh0SW5wdXQgPSAwOwordmFyIHNlY29uZExlZ2VuZFRleHRJ
bnB1dCA9IDA7Cit2YXIgaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQgPSAwOworCitmdW5jdGlvbiB0
ZXN0U2luZ2xlRmllbGRTZXQoKSB7CisgICAgZmllbGRTZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdmaWVsZHNldCcpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZmllbGRTZXQp
OworICAgIHRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAg
dGV4dElucHV0LnR5cGUgPSAidGV4dCI7CisgICAgZmllbGRTZXQuYXBwZW5kQ2hpbGQodGV4dElu
cHV0KTsKKworICAgIGRlYnVnKCdWZXJpZnlpbmcgSFRNTEZvcm1Db250cm9sIGNhbiBiZSBkaXNh
YmxlZCByZWdhcmRsZXNzIG9mIGVuY2xvc2luZyBmaWVsZHNldC4nKTsKKyAgICB0ZXh0SW5wdXQu
ZGlzYWJsZWQgPSB0cnVlOworICAgIHRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4
ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdBJyk7CisgICAgc2hvdWxkQmUoJ3RleHRJ
bnB1dC52YWx1ZScsICciIicpOworICAgIHNob3VsZEJlRmFsc2UoZmllbGRTZXQuZGlzYWJsZWQu
dG9TdHJpbmcoKSk7CisgICAgdGV4dElucHV0LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICBkZWJ1
ZygnRmllbGRzZXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBBIHVzZXIgY2FuIGluc2VydFRleHQg
aW50byB0aGUgdGV4dCBpbnB1dCBmaWVsZC4nKTsKKyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQScpOworICAgIHNo
b3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkEiJyk7CisKKyAgICBkZWJ1ZygnRGlzYWJsZSBm
aWVsZHNldC4nKTsKKyAgICBmaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CisKKyAgICBkZWJ1Zygn
T25jZSB0aGUgZmllbGRzZXQgaXMgZGlzYWJsZWQsIHRleHQgY2Fubm90IGJlIGluc2VydGVkLicp
OworICAgIHRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNl
cnRUZXh0JywgZmFsc2UsICdCJyk7CisgICAgc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICci
QSInKTsKKworICAgIGRlYnVnKCJDaGVjayBpZiB0aGUgc3R5bGUgb2YgdGhlIHRleHQgZWxlbWVu
dCBjaGFuZ2VkLiIpOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHRleHRJbnB1dCku
YmFja2dyb3VuZENvbG9yIiwgIidyZ2IoMjU1LCAwLCAwKSciKTsKKworICAgIGRlYnVnKCdFbmFi
bGUgZmllbGRzZXQuJyk7CisgICAgZmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICBzaG91
bGRCZSgiZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0SW5wdXQpLmJhY2tncm91bmRDb2xvciIsICIncmdi
KDI1NSwgMjU1LCAyNTUpJyIpOworCisgICAgdGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0InKTsKKyAgICBzaG91bGRCZSgn
dGV4dElucHV0LnZhbHVlJywgJyJBQiInKTsKKworICAgIGRlYnVnKCdNb3ZlIHRoZSB0ZXh0aW5w
dXQgZWxlbWVudCBvdXQgb2YgdGhlIGZpZWxkc2V0LicpOworICAgIGZpZWxkU2V0LnJlbW92ZUNo
aWxkKHRleHRJbnB1dCk7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQp
OworCisgICAgZGVidWcoJ0Rpc2FibGUgdGhlIGZpZWxkc2V0LicpOworICAgIGZpZWxkU2V0LmRp
c2FibGVkID0gdHJ1ZTsKKworICAgIGRlYnVnKCdUZXh0IGNhbiBiZSBpbnNlcnRlZCwgYmVjYXVz
ZSB0aGUgdGV4dGlucHV0IGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGUgZGlzYWJsZWQgZmllbGRz
ZXQuJyk7CisgICAgdGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydFRleHQnLCBmYWxzZSwgJ0MnKTsKKyAgICBzaG91bGRCZSgndGV4dElucHV0LnZhbHVl
JywgJyJBQkMiJyk7CisKKyAgICBkZWJ1ZygnRW5hYmxlIHRoZSBmaWVsZHNldC4nKTsKKyAgICBm
aWVsZFNldC5kaXNhYmxlZCA9IGZhbHNlOworCisgICAgZGVidWcoJ0luc2VydCBhIHRhYmxlIGlu
dG8gdGhlIGZpZWxkc2V0LicpOworICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3RhYmxlJyk7CisgICAgZmllbGRTZXQuYXBwZW5kQ2hpbGQodGFibGUpOworICAgIHZhciB0
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CisgICAgdGFibGUuYXBwZW5kQ2hpbGQo
dHIpOworICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CisgICAgdHIu
YXBwZW5kQ2hpbGQodGQpOworCisgICAgZGVidWcoJ01vdmUgdGhlIHRleHRpbnB1dCBmaWVsZCBp
bnRvIHRoZSB0YWJsZS4nKTsKKyAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRJbnB1
dCk7CisgICAgdGQuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsKKworICAgIHRleHRJbnB1dC5mb2N1
cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdEJyk7
CisgICAgc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDRCInKTsKKworICAgIGRlYnVn
KCdEaXNhYmxlIHRoZSBmaWVsZHNldC4nKTsKKyAgICBmaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7
CisKKyAgICBkZWJ1ZygnSW5zZXJ0aW5nIHRleHQgc2hvdWxkIGZhaWwuJykKKyAgICB0ZXh0SW5w
dXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNl
LCAnRScpOworICAgIHNob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCQ0QiJyk7CisKKyAg
ICBkZWJ1ZygnRW5hYmxlIHRoZSBmaWVsZHNldC4nKTsKKyAgICBmaWVsZFNldC5kaXNhYmxlZCA9
IGZhbHNlOworCisgICAgdGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0UnKTsKKyAgICBzaG91bGRCZSgndGV4dElucHV0LnZh
bHVlJywgJyJBQkNERSInKTsKK30KKworZnVuY3Rpb24gdGVzdE5lc3RlZEZpZWxkU2V0cygpIHsK
KyAgICBkZWJ1ZygnQ3JlYXRpbmcgbmVzdGVkIGZpZWxkc2V0IGVsZW1lbnRzLicpOworICAgIG91
dGVyRmllbGRTZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWVsZHNldCcpOworICAgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3V0ZXJGaWVsZFNldCk7CisgICAgaW5uZXJGaWVsZFNl
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZWxkc2V0Jyk7CisgICAgb3V0ZXJGaWVsZFNl
dC5hcHBlbmRDaGlsZChpbm5lckZpZWxkU2V0KTsKKyAgICBvdXRlclRleHRJbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgb3V0ZXJUZXh0SW5wdXQudHlwZSA9ICJ0
ZXh0IjsKKyAgICBvdXRlckZpZWxkU2V0LmFwcGVuZENoaWxkKG91dGVyVGV4dElucHV0KTsKKyAg
ICBpbm5lclRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAg
aW5uZXJUZXh0SW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgICBpbm5lckZpZWxkU2V0LmFwcGVuZENo
aWxkKGlubmVyVGV4dElucHV0KTsKKworICAgIGRlYnVnKCdWZXJpZnlpbmcgdGhhdCBzdWJvcmRp
bmF0ZXMgb2YgYm90aCBmaWVsZHNldHMgYXJlIGVuYWJsZWQuJyk7CisgICAgb3V0ZXJUZXh0SW5w
dXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNl
LCAnRicpOworICAgIGlubmVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0Nv
bW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0YnKTsKKyAgICBzaG91bGRCZSgnb3V0ZXJUZXh0
SW5wdXQudmFsdWUnLCAnIkYiJyk7CisgICAgc2hvdWxkQmUoJ2lubmVyVGV4dElucHV0LnZhbHVl
JywgJyJGIicpOworCisgICAgZGVidWcoJ0Rpc2FibGluZyB0aGUgaW5uZXIgZmllbGRzZXQgb25s
eS4nKTsKKyAgICBpbm5lckZpZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICBvdXRlclRleHRJ
bnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFs
c2UsICdHJyk7CisgICAgaW5uZXJUZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVj
Q29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRycpOworICAgIHNob3VsZEJlKCdvdXRlclRl
eHRJbnB1dC52YWx1ZScsICciRkciJyk7CisgICAgc2hvdWxkQmUoJ2lubmVyVGV4dElucHV0LnZh
bHVlJywgJyJGIicpOworCisgICAgZGVidWcoJ0VuYWJsaW5nIHRoZSBpbm5lciBhbmQgZGlzYWJs
aW5nIHRoZSBvdXRlciBmaWVsZHNldC4nKTsKKyAgICBvdXRlckZpZWxkU2V0LmRpc2FibGVkID0g
dHJ1ZTsKKyAgICBpbm5lckZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisgICAgb3V0ZXJUZXh0
SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZh
bHNlLCAnSCcpOworICAgIGlubmVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKKyAgICBzaG91bGRCZSgnb3V0ZXJU
ZXh0SW5wdXQudmFsdWUnLCAnIkZHIicpOworICAgIHNob3VsZEJlKCdpbm5lclRleHRJbnB1dC52
YWx1ZScsICciRiInKTsKKworICAgIGRlYnVnKCdEaXNhYmxpbmcgYm90aCBmaWVsZHNldCBlbGVt
ZW50cy4nKTsKKyAgICBvdXRlckZpZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICBpbm5lckZp
ZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICBvdXRlclRleHRJbnB1dC5mb2N1cygpOworICAg
IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdIJyk7CisgICAgaW5u
ZXJUZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4
dCcsIGZhbHNlLCAnSCcpOworICAgIHNob3VsZEJlKCdvdXRlclRleHRJbnB1dC52YWx1ZScsICci
RkciJyk7CisgICAgc2hvdWxkQmUoJ2lubmVyVGV4dElucHV0LnZhbHVlJywgJyJGIicpOworCisg
ICAgZGVidWcoJ0VuYWJsaW5nIGJvdGggZmllbGRzZXQgZWxlbWVudHMuJyk7CisgICAgb3V0ZXJG
aWVsZFNldC5kaXNhYmxlZCA9IGZhbHNlOworICAgIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgPSBm
YWxzZTsKKyAgICBvdXRlclRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21t
YW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdIJyk7CisgICAgaW5uZXJUZXh0SW5wdXQuZm9jdXMo
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSCcpOwor
ICAgIHNob3VsZEJlKCdvdXRlclRleHRJbnB1dC52YWx1ZScsICciRkdIIicpOworICAgIHNob3Vs
ZEJlKCdpbm5lclRleHRJbnB1dC52YWx1ZScsICciRkgiJyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RG
aXJzdExlZ2VuZEluRmllbGRTZXQoKSB7CisgICAgbGVnZW5kRmllbGRTZXQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdmaWVsZHNldCcpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
bGVnZW5kRmllbGRTZXQpOworICAgIHZhciBmaXJzdExlZ2VuZCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2xlZ2VuZCcpOworICAgIGxlZ2VuZEZpZWxkU2V0LmFwcGVuZENoaWxkKGZpcnN0TGVn
ZW5kKTsKKyAgICB2YXIgc2Vjb25kTGVnZW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGVn
ZW5kJyk7CisgICAgbGVnZW5kRmllbGRTZXQuYXBwZW5kQ2hpbGQoc2Vjb25kTGVnZW5kKTsKKwor
ICAgIGZpcnN0TGVnZW5kVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQn
KTsKKyAgICBmaXJzdExlZ2VuZFRleHRJbnB1dC50eXBlID0gInRleHQiOworICAgIGZpcnN0TGVn
ZW5kLmFwcGVuZENoaWxkKGZpcnN0TGVnZW5kVGV4dElucHV0KTsKKworICAgIHNlY29uZExlZ2Vu
ZFRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgc2Vjb25k
TGVnZW5kVGV4dElucHV0LnR5cGUgPSAidGV4dCI7CisgICAgc2Vjb25kTGVnZW5kLmFwcGVuZENo
aWxkKHNlY29uZExlZ2VuZFRleHRJbnB1dCk7CisKKyAgICBkZWJ1ZygnQ2hpbGRyZW4gb2YgdGhl
IGZpcnN0IGxlZ2VuZCBlbGVtZW50IGluIGEgZmllbGRzZXQgc2hvdWxkIG5vdCBnZXQgZGlzYWJs
ZWQgd2l0aCB0aGUgZmllbGRzZXQuJyk7CisgICAgbGVnZW5kRmllbGRTZXQuZGlzYWJsZWQgPSB0
cnVlOworICAgIGZpcnN0TGVnZW5kVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0knKTsKKyAgICBzZWNvbmRMZWdlbmRUZXh0
SW5wdXQuZm9jdXMoKQorICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFs
c2UsICdJJyk7CisgICAgc2hvdWxkQmUoJ2ZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVlJywgJyJJ
IicpOworICAgIHNob3VsZEJlKCdzZWNvbmRMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIiInKTsK
KworICAgIGRlYnVnKCdJbnNlcnQgYW5vdGhlciBsZWdlbmQgZWxlbWVudCBiZWZvcmUgdGhlIGN1
cnJlbnRseSBmaXJzdCBvbmUsIGFuZCBjaGVjayBhZ2Fpbi4nKTsKKyAgICB2YXIgaW5zZXJ0ZWRM
ZWdlbmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsZWdlbmQnKTsKKyAgICBsZWdlbmRGaWVs
ZFNldC5pbnNlcnRCZWZvcmUoaW5zZXJ0ZWRMZWdlbmQsIGZpcnN0TGVnZW5kKTsKKyAgICBpbnNl
cnRlZExlZ2VuZFRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Cisg
ICAgaW5zZXJ0ZWRMZWdlbmQuYXBwZW5kQ2hpbGQoaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQpOwor
CisgICAgaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVj
Q29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSicpOworICAgIGZpcnN0TGVnZW5kVGV4dElu
cHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxz
ZSwgJ0onKTsKKyAgICBzZWNvbmRMZWdlbmRUZXh0SW5wdXQuZm9jdXMoKQorICAgIGRvY3VtZW50
LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdKJyk7CisgICAgc2hvdWxkQmUoJ2lu
c2VydGVkTGVnZW5kVGV4dElucHV0LnZhbHVlJywgJyJKIicpOworICAgIHNob3VsZEJlKCdmaXJz
dExlZ2VuZFRleHRJbnB1dC52YWx1ZScsICciSSInKTsKKyAgICBzaG91bGRCZSgnc2Vjb25kTGVn
ZW5kVGV4dElucHV0LnZhbHVlJywgJyIiJyk7CisKKyAgICBkZWJ1ZygnRW5hYmxlIHRoZSBmaWVs
ZHNldCBhZ2FpbiBhbmQgY2hlY2sgZm9yIHNhbml0eS4nKTsKKyAgICBsZWdlbmRGaWVsZFNldC5k
aXNhYmxlZCA9IGZhbHNlOworICAgIGluc2VydGVkTGVnZW5kVGV4dElucHV0LmZvY3VzKCk7Cisg
ICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0snKTsKKyAgICBm
aXJzdExlZ2VuZFRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdp
bnNlcnRUZXh0JywgZmFsc2UsICdLJyk7CisgICAgc2Vjb25kTGVnZW5kVGV4dElucHV0LmZvY3Vz
KCkKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSycpOwor
ICAgIHNob3VsZEJlKCdpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC52YWx1ZScsICciSksiJyk7Cisg
ICAgc2hvdWxkQmUoJ2ZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVlJywgJyJJSyInKTsKKyAgICBz
aG91bGRCZSgnc2Vjb25kTGVnZW5kVGV4dElucHV0LnZhbHVlJywgJyJLIicpOworfQorCit0ZXN0
U2luZ2xlRmllbGRTZXQoKTsKK3Rlc3ROZXN0ZWRGaWVsZFNldHMoKTsKK3Rlc3RGaXJzdExlZ2Vu
ZEluRmllbGRTZXQoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY4NjQxNTMuLjc5N2M2
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxMi0wMi0xMCAgWmVubyBBbGJpc3Nl
ciAgPHplbm9Ad2Via2l0Lm9yZz4KKworICAgICAgICBGaWVsZHNldCBkaXNhYmxlZCBhdHRyaWJ1
dGUgZG9lcyBub3Qgd29yay4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU4ODM3CisKKyAgICAgICAgTWFrZSBhIGZpZWxkc2V0IHByb3BhZ2F0ZSBpdHMg
ZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZQorICAgICAgICB0byBpdHMgY2hpbGRyZW4uIFdoZW4gYSBG
b3JtQ29udHJvbEVsZW1lbnQgaXMgaW5zZXJ0ZWQKKyAgICAgICAgaXQgY2hlY2tzIGZvciBhIGZp
ZWxkc2V0IGFuY2VzdG9yIGFuZCBpbmhlcml0cyBpdHMgY3VycmVudCBzdGF0ZS4KKworICAgICAg
ICBQYXRjaCBieSBOYW9raSBUYWthbm8gIDx0YWthbm8ubmFva2lAZ21haWwuY29tPgorICAgICAg
ICBQYXRjaCB1cGRhdGVkIGJ5IFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBUZXN0OiBmYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLmh0bWwKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL2Zp
ZWxkc2V0LWRpc2FibGVkLmh0bWwKKworICAgICAgICAqIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJl
c2V0Rm9ybU93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
Zm9ybUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnVwZGF0ZUZvcm1BbmNlc3RvcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnZpcnR1YWxGb3JtKToKKyAgICAgICAgKiBodG1s
L0hUTUxFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxFbGVtZW50
KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6ZGlzYWJsZWRB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSFRNTEZpZWxkU2V0RWxlbWVudCk6CisgICAg
ICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXREaXNhYmxpbmdBbmNlc3Rvcik6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2Fi
bGVkQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpkaXNhYmxlZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
Lmg6CisgICAgICAgIChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hU
TUxMZWdlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50
OjpIVE1MTGVnZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVu
dDo6ZGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TGVnZW5kRWxlbWVudDo6b3ZlcnJpZGVEaXNhYmxlZCk6CisgICAgICAgICogaHRtbC9IVE1MTGVn
ZW5kRWxlbWVudC5oOgorICAgICAgICAoSFRNTExlZ2VuZEVsZW1lbnQpOgorICAgICAgICAqIGh0
bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVs
ZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KToKKwogMjAxMi0wMi0xMCAgUGF2ZWwgRmVsZG1hbiAg
PHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogaW1wbGVtZW50
IHVuZG8gZm9yIHNldE91dGVySFRNTCB2aWEgdW5kby1pbmcgbmVzdGVkIHByaW1pdGl2ZSBjb21t
YW5kcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcApp
bmRleCBkMmYzZjRhLi4zYzVlMjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNz
b2NpYXRlZEVsZW1lbnQuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjppbnNlcnRlZEludG9UcmVlKCkKICAgICAgICAgLy8gSmF2YVNjcmlwdCBhbmQgaW5z
ZXJ0ZWQgaW5zaWRlIGEgZm9ybS4gIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJzZXIKICAgICAgICAg
Ly8gc2V0dGluZyBhIGZvcm0sIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9uLW51bGwgdmFsdWUg
Zm9yIG1fZm9ybSwKICAgICAgICAgLy8gYW5kIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhp
bmcuCi0gICAgICAgIHNldEZvcm0oZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpKTsKKyAgICAg
ICAgc2V0Rm9ybShlbGVtZW50LT51cGRhdGVGb3JtQW5jZXN0b3JzKCkpOwogICAgIH0KIH0KIApA
QCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1P
d25lcigpCiAgICAgICAgIGlmIChmaXJzdEVsZW1lbnQgJiYgZmlyc3RFbGVtZW50LT5oYXNUYWdO
YW1lKGZvcm1UYWcpKQogICAgICAgICAgICAgbmV3Rm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG5ld0Zvcm0gPSBl
bGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCk7CisgICAgICAgIG5ld0Zvcm0gPSBlbGVtZW50LT51
cGRhdGVGb3JtQW5jZXN0b3JzKCk7CiAgICAgc2V0Rm9ybShuZXdGb3JtKTsKIH0KIApAQCAtMTcx
LDcgKzE3MSw3IEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hh
bmdlZCgpCiAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KHRoaXMpOwog
ICAgIGlmICghZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKICAgICAgICAg
Ly8gVGhlIGZvcm0gYXR0cmlidXRlIHJlbW92ZWQuIFdlIG5lZWQgdG8gcmVzZXQgZm9ybSBvd25l
ciBoZXJlLgotICAgICAgICBzZXRGb3JtKGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKSk7Cisg
ICAgICAgIHNldEZvcm0oZWxlbWVudC0+dXBkYXRlRm9ybUFuY2VzdG9ycygpKTsKICAgICAgICAg
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1
dGUodGhpcyk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc2V0Rm9ybU93bmVyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuY3BwCmluZGV4IGEwMThmZTIuLmMzYTA2NTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTENv
bGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxl
bWVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFBhcnNlcklkaW9tcy5oIgpAQCAtODU4LDE4ICs4NTksMjcgQEAgUmVuZGVyT2JqZWN0KiBI
VE1MRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHls
ZSogc3R5bGUKICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QodGhpcywgc3R5
bGUpOwogfQogCi1IVE1MRm9ybUVsZW1lbnQqIEhUTUxFbGVtZW50OjpmaW5kRm9ybUFuY2VzdG9y
KCkgY29uc3QKK0hUTUxGb3JtRWxlbWVudCogSFRNTEVsZW1lbnQ6OnVwZGF0ZUZvcm1BbmNlc3Rv
cnMoKQogeworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnQgPSAwOworICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqIGRpc2FibGluZ0FuY2VzdG9yID0gMDsKICAgICBmb3IgKENvbnRh
aW5lck5vZGUqIGFuY2VzdG9yID0gcGFyZW50Tm9kZSgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBh
bmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFt
ZShmb3JtVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1l
bnQqPihhbmNlc3Rvcik7CisgICAgICAgIC8vIFdoZW4gdHJhdmVyc2luZyB0aGUgdHJlZSB0aHJv
dWdoIHBhcmVudHMsIHdlIGNvbWUgYnkgYW55IGV4aXN0aW5nIGZpZWxkc2V0IG9yIGxlZ2VuZCB0
YWcuCisgICAgICAgIC8vIFdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIHVwZGF0ZSB0aGUgZGlz
YWJsaW5nQW5jZXN0b3IgaW4gY2FzZSB0aGlzIGluc3RhbmNlIGlzIGEgRm9ybUNvbnRyb2xFbGVt
ZW50LgorICAgICAgICBpZiAoIWRpc2FibGluZ0FuY2VzdG9yICYmIGlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkgJiYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSB8fCBhbmNlc3Rvci0+
aGFzVGFnTmFtZShsZWdlbmRUYWcpKSkKKyAgICAgICAgICAgIGRpc2FibGluZ0FuY2VzdG9yID0g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICAgICAg
aWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKGZvcm1UYWcpKSB7CisgICAgICAgICAgICBmb3JtRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHN0YXRpY19j
YXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPih0aGlzKS0+c2V0RGlzYWJsaW5nQW5jZXN0b3Io
ZGlzYWJsaW5nQW5jZXN0b3IpOworICAgIHJldHVybiBmb3JtRWxlbWVudDsKIH0KIAogSFRNTEZv
cm1FbGVtZW50KiBIVE1MRWxlbWVudDo6dmlydHVhbEZvcm0oKSBjb25zdAogewotICAgIHJldHVy
biBmaW5kRm9ybUFuY2VzdG9yKCk7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SFRNTEVsZW1lbnQq
Pih0aGlzKS0+dXBkYXRlRm9ybUFuY2VzdG9ycygpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRIYXNE
aXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KE5vZGUqIGZpcnN0Tm9kZSwgYm9vbCBmbGFnLCBOb2RlKiBs
YXN0Tm9kZSA9IDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKaW5kZXggNDcxOTcyNi4uMzU1
M2I1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaApAQCAtMzAsNiArMzAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgSFRNTENvbGxl
Y3Rpb247CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CitjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OwogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKIGNsYXNzIE1pY3JvRGF0YUl0ZW1WYWx1ZTsK
QEAgLTgxLDcgKzgyLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYWRkSFRNTEFsaWdu
bWVudFRvU3R5bGVkRWxlbWVudChTdHlsZWRFbGVtZW50KiwgQXR0cmlidXRlKik7CiAKLSAgICBI
VE1MRm9ybUVsZW1lbnQqIGZpbmRGb3JtQW5jZXN0b3IoKSBjb25zdDsKKyAgICBIVE1MRm9ybUVs
ZW1lbnQqIHVwZGF0ZUZvcm1BbmNlc3RvcnMoKTsKIAogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoYm9vbCYgaXNBdXRvKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKaW5kZXggNGI5MDQxMi4u
MjAxMGUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3Bw
CkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1M
RmllbGRTZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExlZ2VuZEVsZW1lbnQuaCIKIAogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckZpZWxkc2V0LmgiCkBAIC0zOSwx
MSArNDAsNDUgQEAgaW5saW5lIEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG8KICAgICBBU1NFUlQoaGFzVGFnTmFt
ZShmaWVsZHNldFRhZykpOwogfQogCit2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNoaWxkcmVu
Q2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBh
ZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKK3sKKyAgICBpZiAoY2hpbGRDb3VudERl
bHRhKSB7CisgICAgICAgIC8vIFRoZSBmaXJzdCBkaXJlY3QgY2hpbGQgSFRNTExlZ2VuZEVsZW1l
bnQgc2hvdWxkIG5ldmVyIGJlIGRpc2FibGVkLgorICAgICAgICBIVE1MTGVnZW5kRWxlbWVudCog
Zmlyc3RMZWdlbmRFbGVtZW50ID0gMDsKKyAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQgOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAg
ICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY2hpbGQpOworICAgICAg
ICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShsZWdlbmRUYWcpKSB7Cisg
ICAgICAgICAgICAgICAgSFRNTExlZ2VuZEVsZW1lbnQqIGxlZ2VuZCA9IHN0YXRpY19jYXN0PEhU
TUxMZWdlbmRFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdExl
Z2VuZEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RMZWdlbmRFbGVtZW50ID0g
bGVnZW5kOworICAgICAgICAgICAgICAgICAgICBsZWdlbmQtPm92ZXJyaWRlRGlzYWJsZWQodHJ1
ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC0+
b3ZlcnJpZGVEaXNhYmxlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgbGVnZW5kLT5zZXROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBi
ZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOworfQorCiBQYXNzUmVm
UHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+IEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxl
bWVudCogZm9ybSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxGaWVsZFNldEVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pKTsKIH0KIAordm9pZCBIVE1MRmllbGRTZXRFbGVt
ZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKQoreworICAgIC8vIFRoaXMgZWxlbWVudCBt
dXN0IGJlIHVwZGF0ZWQgYmVmb3JlIHRoZSBzdHlsZSBvZiBub2RlcyBpbiBpdHMgc3VidHJlZSBn
ZXRzIHJlY2FsY3VsYXRlZC4KKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZEF0
dHJpYnV0ZUNoYW5nZWQoKTsKKworICAgIGZvciAoTm9kZSogY3VycmVudE5vZGUgPSB0aGlzOyBj
dXJyZW50Tm9kZTsgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0
aGlzKSkgeworICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY3Vy
cmVudE5vZGUpOworICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KGVsZW1lbnQpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgfQorfQorCiBib29sIEhU
TUxGaWVsZFNldEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewogICAgIHJldHVybiBI
VE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuaAppbmRleCBkY2M4ZDBjLi5iNjg5NDg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaApAQCAtMjgsMTAgKzI4LDE3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgSFRNTExlZ2VuZEVsZW1lbnQ7CisKIGNsYXNzIEhUTUxGaWVs
ZFNldEVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEZpZWxkU2V0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogCisgICAgdmlydHVh
bCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2Rl
KiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50
RGVsdGEgPSAwKSBPVkVSUklERTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkaXNh
YmxlZEF0dHJpYnV0ZUNoYW5nZWQoKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICBIVE1MRmll
bGRTZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxl
bWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVs
ZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbApp
bmRleCBkZDY5OWMwLi44OTZjMDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGaWVsZFNldEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxk
U2V0RWxlbWVudC5pZGwKQEAgLTIwLDYgKzIwLDcgQEAKIG1vZHVsZSBodG1sIHsKIAogICAgIGlu
dGVyZmFjZSBIVE1MRmllbGRTZXRFbGVtZW50IDogSFRNTEVsZW1lbnQgeworICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIGJvb2xlYW4gZGlzYWJsZWQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBIVE1MRm9ybUVsZW1lbnQgZm9ybTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFZh
bGlkaXR5U3RhdGUgICB2YWxpZGl0eTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xl
YW4gICAgICAgICB3aWxsVmFsaWRhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCBjMDkyZjYxLi5iOTViYzAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNTAsNiArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1F
bGVtZW50KiBmb3JtKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAg
LCBtX2Rpc2FibGluZ0FuY2VzdG9yKDApCiAgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQogICAgICwg
bV9yZWFkT25seShmYWxzZSkKICAgICAsIG1fcmVxdWlyZWQoZmFsc2UpCkBAIC02MCw3ICs2Miw3
IEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jCiAgICAgLCBtX3dhc0NoYW5nZWRTaW5jZUxhc3RG
b3JtQ29udHJvbENoYW5nZUV2ZW50KGZhbHNlKQogICAgICwgbV9oYXNBdXRvZm9jdXNlZChmYWxz
ZSkKIHsKLSAgICBzZXRGb3JtKGZvcm0gPyBmb3JtIDogZmluZEZvcm1BbmNlc3RvcigpKTsKKyAg
ICBzZXRGb3JtKGZvcm0gPyBmb3JtIDogdXBkYXRlRm9ybUFuY2VzdG9ycygpKTsKICAgICBzZXRI
YXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSgpOwogfQogCkBAIC05OSw2ICsxMDEsMTEgQEAg
Ym9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0CiAgICAg
cmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoZm9ybW5vdmFsaWRhdGVBdHRyKTsKIH0KIAordm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXREaXNhYmxpbmdBbmNlc3RvcihIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBhbmNlc3RvcikKK3sKKyAgICBtX2Rpc2FibGluZ0FuY2VzdG9yID0gYW5jZXN0
b3I7Cit9CisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0dHIpCkBAIC0x
MDYsMTEgKzExMyw4IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxl
ZEF0dHIpIHsKICAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7CiAgICAgICAg
IG1fZGlzYWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChvbGREaXNhYmxlZCAh
PSBtX2Rpc2FibGVkKSB7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAg
ICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJh
bmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2Vk
KHJlbmRlcmVyKCksIEVuYWJsZWRTdGF0ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG9sZERp
c2FibGVkICE9IG1fZGlzYWJsZWQpCisgICAgICAgICAgICBkaXNhYmxlZEF0dHJpYnV0ZUNoYW5n
ZWQoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZWFkb25seUF0dHIpIHsKICAg
ICAgICAgYm9vbCBvbGRSZWFkT25seSA9IG1fcmVhZE9ubHk7CiAgICAgICAgIG1fcmVhZE9ubHkg
PSAhYXR0ci0+aXNOdWxsKCk7CkBAIC0xMjksNiArMTMzLDEzIEBAIHZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogICAgIHNldE5lZWRz
V2lsbFZhbGlkYXRlQ2hlY2soKTsKIH0KIAordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpk
aXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKQoreworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
KyAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNl
KCkpCisgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCktPnN0YXRlQ2hhbmdlZChyZW5kZXJlcigp
LCBFbmFibGVkU3RhdGUpOworfQorCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVp
cmVkQXR0cmlidXRlQ2hhbmdlZCgpCiB7CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CkBA
IC0yNTgsNiArMjY5LDExIEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hG
b3JtQ29udHJvbElucHV0RXZlbnQoKQogICAgIEhUTUxFbGVtZW50OjpkaXNwYXRjaElucHV0RXZl
bnQoKTsKIH0KIAorYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZGlzYWJsZWQgfHwgKG1fZGlzYWJsaW5nQW5jZXN0b3IgJiYgbV9k
aXNhYmxpbmdBbmNlc3Rvci0+ZGlzYWJsZWQoKSk7Cit9CisKIHZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6c2V0RGlzYWJsZWQoYm9vbCBiKQogewogICAgIHNldEF0dHJpYnV0ZShkaXNhYmxl
ZEF0dHIsIGIgPyAiIiA6IDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuaAppbmRleCAxYmQ0ODU5Li41MWY2MmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaApAQCAtNDksNiArNDksOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRGb3JtTWV0aG9kKGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgZm9ybU5vVmFs
aWRhdGUoKSBjb25zdDsKIAorICAgIHZvaWQgc2V0RGlzYWJsaW5nQW5jZXN0b3IoSFRNTEZvcm1D
b250cm9sRWxlbWVudCopOworCiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7IH0KQEAgLTYwLDcgKzYyLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb3JtQ29udHJvbElucHV0RXZlbnQoKTsKIAotICAgIHZpcnR1
YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwog
CiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CkBAIC0xMTYsNiArMTE4LDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlQXR0cmlidXRlKEF0dHJpYnV0
ZSopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJv
b2wgZGVlcCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApOwpA
QCAtMTQ5LDYgKzE1Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3Jt
Q29udHJvbEVsZW1lbnQoKTsKICAgICBTdHJpbmcgdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkg
Y29uc3Q7CiAKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBtX2Rpc2FibGluZ0FuY2VzdG9y
OwogICAgIE93blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0aW9uTWVzc2FnZTsKICAg
ICBib29sIG1fZGlzYWJsZWQgOiAxOwogICAgIGJvb2wgbV9yZWFkT25seSA6IDE7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCmluZGV4IDYxZDJkYjMuLjY1YzJlYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCkBAIC0zNCw2ICsz
NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGlubGluZSBIVE1MTGVnZW5kRWxl
bWVudDo6SFRNTExlZ2VuZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiAgICAgOiBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKQorICAgICwgbV9vdmVycmlkZURp
c2FibGVkKGZhbHNlKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGxlZ2VuZFRhZykpOwogfQpA
QCAtNDMsNiArNDQsMTggQEAgUGFzc1JlZlB0cjxIVE1MTGVnZW5kRWxlbWVudD4gSFRNTExlZ2Vu
ZEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEhUTUxMZWdlbmRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKSk7CiB9
CiAKK2Jvb2wgSFRNTExlZ2VuZEVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9vdmVycmlkZURpc2FibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkKCk7Cit9CisKK3ZvaWQgSFRNTExlZ2VuZEVs
ZW1lbnQ6Om92ZXJyaWRlRGlzYWJsZWQoYm9vbCBvdmVycmlkZSkKK3sKKyAgICBtX292ZXJyaWRl
RGlzYWJsZWQgPSBvdmVycmlkZTsKK30KKwogYm9vbCBIVE1MTGVnZW5kRWxlbWVudDo6c3VwcG9y
dHNGb2N1cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3Vz
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmgKaW5kZXggMjRkOGZjZS4u
OGEyMDg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaApAQCAtMzIs
NiArMzIsOSBAQCBjbGFzcyBIVE1MTGVnZW5kRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MTGVnZW5kRWxl
bWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxl
bWVudCopOwogCisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdm9pZCBvdmVycmlkZURpc2FibGVkKGJvb2wpOworCiBwcml2YXRlOgogICAgIEhUTUxMZWdl
bmRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVu
dCopOwogCkBAIC00Miw2ICs0NSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhY2Nl
c3NLZXlBY3Rpb24oYm9vbCBzZW5kTW91c2VFdmVudHMpOwogICAgIHZpcnR1YWwgdm9pZCBmb2N1
cyhib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbiA9IHRydWUpOworCisgICAgYm9vbCBtX292
ZXJyaWRlRGlzYWJsZWQ7CiB9OwogCiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IGUyYmVmMDEuLmUyZWNhN2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC01OSw3ICs1OSw3IEBAIGlubGlu
ZSBIVE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lCiAgICAgLCBtX3VzZUZhbGxiYWNrQ29udGVudChmYWxzZSkKIHsK
ICAgICBBU1NFUlQoaGFzVGFnTmFtZShvYmplY3RUYWcpKTsKLSAgICBzZXRGb3JtKGZvcm0gPyBm
b3JtIDogZmluZEZvcm1BbmNlc3RvcigpKTsKKyAgICBzZXRGb3JtKGZvcm0gPyBmb3JtIDogdXBk
YXRlRm9ybUFuY2VzdG9ycygpKTsKIH0KIAogaW5saW5lIEhUTUxPYmplY3RFbGVtZW50Ojp+SFRN
TE9iamVjdEVsZW1lbnQoKQo=
</data>
<flag name="review"
          id="128349"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127809</attachid>
            <date>2012-02-20 04:45:00 -0800</date>
            <delta_ts>2012-02-20 04:46:58 -0800</delta_ts>
            <desc>patch for review. - fixed issues as commented before.</desc>
            <filename>58837_20120220-130834.patch</filename>
            <type>text/plain</type>
            <size>30207</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMGIyYTBkLi4yMTk0N2FhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDIt
MjAgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmllbGRzZXQg
ZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgIEFkZCBhIHRlc3QgY2Fz
ZSBmb3IgZmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZmllbGRzZXQtZGlz
YWJsZWQuaHRtbDogQWRkZWQuCisKIDIwMTItMDItMjAgIFlvc2lmdW1pIElub3VlICA8eW9zaW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtGb3Jtc10gU3BpbiBidXR0b25zIG9mIG51bWJlciBp
bnB1dCB0eXBlIHNob3VsZCBmaXJlIGJvdGggaW5wdXQgYW5kIGNoYW5nZSBldmVudApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlMDI4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw4NSBAQAorVGVzdHMgZm9yIEhUTUxGaWVsZFNldEVsZW1lbnQuZGlz
YWJsZWQgYmVoYXZpb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitWZXJpZnlp
bmcgcGFyc2VyIGdlbmVyYXRlZCBmaWVsZHNldHMuCitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0
MS52YWx1ZSBpcyAiTCIKK1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQyLnZhbHVlIGlzICJNIgor
UEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDMudmFsdWUgaXMgIk5PIgorUEFTUyBwYXJzZXJHZW5l
cmF0ZWRJbnB1dDQudmFsdWUgaXMgIiIKK1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQ1LnZhbHVl
IGlzICJQIgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDYudmFsdWUgaXMgIiIKK1BBU1MgcGFy
c2VyR2VuZXJhdGVkSW5wdXQ3LnZhbHVlIGlzICIiCitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0
OC52YWx1ZSBpcyAiIgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDkudmFsdWUgaXMgIiIKK1Zl
cmlmeWluZyBIVE1MRm9ybUNvbnRyb2wgY2FuIGJlIGRpc2FibGVkIHJlZ2FyZGxlc3Mgb2YgZW5j
bG9zaW5nIGZpZWxkc2V0LgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIiIKK1BBU1MgZmFsc2Ug
aXMgZmFsc2UKK0ZpZWxkc2V0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQSB1c2VyIGNhbiBpbnNl
cnRUZXh0IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQuCitQQVNTIHRleHRJbnB1dC52YWx1ZSBp
cyAiQSIKK0Rpc2FibGUgZmllbGRzZXQuCitPbmNlIHRoZSBmaWVsZHNldCBpcyBkaXNhYmxlZCwg
dGV4dCBjYW5ub3QgYmUgaW5zZXJ0ZWQuCitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQSIKK0No
ZWNrIGlmIHRoZSBzdHlsZSBvZiB0aGUgdGV4dCBlbGVtZW50IGNoYW5nZWQuCitQQVNTIGdldENv
bXB1dGVkU3R5bGUodGV4dElucHV0KS5iYWNrZ3JvdW5kQ29sb3IgaXMgJ3JnYigyNTUsIDAsIDAp
JworRW5hYmxlIGZpZWxkc2V0LgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRleHRJbnB1dCkuYmFj
a2dyb3VuZENvbG9yIGlzICdyZ2IoMjU1LCAyNTUsIDEwMCknCitQQVNTIHRleHRJbnB1dC52YWx1
ZSBpcyAiQUIiCitNb3ZlIHRoZSB0ZXh0aW5wdXQgZWxlbWVudCBvdXQgb2YgdGhlIGZpZWxkc2V0
LgorRGlzYWJsZSB0aGUgZmllbGRzZXQuCitUZXh0IGNhbiBiZSBpbnNlcnRlZCwgYmVjYXVzZSB0
aGUgdGV4dGlucHV0IGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGUgZGlzYWJsZWQgZmllbGRzZXQu
CitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQUJDIgorRW5hYmxlIHRoZSBmaWVsZHNldC4KK0lu
c2VydCBhIHRhYmxlIGludG8gdGhlIGZpZWxkc2V0LgorTW92ZSB0aGUgdGV4dGlucHV0IGZpZWxk
IGludG8gdGhlIHRhYmxlLgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0QiCitEaXNhYmxl
IHRoZSBmaWVsZHNldC4KK0luc2VydGluZyB0ZXh0IHNob3VsZCBmYWlsLgorUEFTUyB0ZXh0SW5w
dXQudmFsdWUgaXMgIkFCQ0QiCitFbmFibGUgdGhlIGZpZWxkc2V0LgorUEFTUyB0ZXh0SW5wdXQu
dmFsdWUgaXMgIkFCQ0RFIgorQ3JlYXRpbmcgbmVzdGVkIGZpZWxkc2V0IGVsZW1lbnRzLgorVmVy
aWZ5aW5nIHRoYXQgc3Vib3JkaW5hdGVzIG9mIGJvdGggZmllbGRzZXRzIGFyZSBlbmFibGVkLgor
UEFTUyBvdXRlclRleHRJbnB1dC52YWx1ZSBpcyAiRiIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFs
dWUgaXMgIkYiCitEaXNhYmxpbmcgdGhlIGlubmVyIGZpZWxkc2V0IG9ubHkuCitQQVNTIG91dGVy
VGV4dElucHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFsdWUgaXMgIkYi
CitFbmFibGluZyB0aGUgaW5uZXIgYW5kIGRpc2FibGluZyB0aGUgb3V0ZXIgZmllbGRzZXQuCitQ
QVNTIG91dGVyVGV4dElucHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFs
dWUgaXMgIkYiCitEaXNhYmxpbmcgYm90aCBmaWVsZHNldCBlbGVtZW50cy4KK1BBU1Mgb3V0ZXJU
ZXh0SW5wdXQudmFsdWUgaXMgIkZHIgorUEFTUyBpbm5lclRleHRJbnB1dC52YWx1ZSBpcyAiRiIK
K0VuYWJsaW5nIGJvdGggZmllbGRzZXQgZWxlbWVudHMuCitQQVNTIG91dGVyVGV4dElucHV0LnZh
bHVlIGlzICJGR0giCitQQVNTIGlubmVyVGV4dElucHV0LnZhbHVlIGlzICJGSCIKK0NoaWxkcmVu
IG9mIHRoZSBmaXJzdCBsZWdlbmQgZWxlbWVudCBpbiBhIGZpZWxkc2V0IHNob3VsZCBub3QgZ2V0
IGRpc2FibGVkIHdpdGggdGhlIGZpZWxkc2V0LgorUEFTUyBmaXJzdExlZ2VuZFRleHRJbnB1dC52
YWx1ZSBpcyAiSSIKK1BBU1Mgc2Vjb25kTGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICIiCitJbnNl
cnQgYW5vdGhlciBsZWdlbmQgZWxlbWVudCBiZWZvcmUgdGhlIGN1cnJlbnRseSBmaXJzdCBvbmUs
IGFuZCBjaGVjayBhZ2Fpbi4KK1BBU1MgaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMg
IkoiCitQQVNTIGZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICJJIgorUEFTUyBzZWNvbmRM
ZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIiIKK0VuYWJsZSB0aGUgZmllbGRzZXQgYWdhaW4gYW5k
IGNoZWNrIGZvciBzYW5pdHkuCitQQVNTIGluc2VydGVkTGVnZW5kVGV4dElucHV0LnZhbHVlIGlz
ICJKSyIKK1BBU1MgZmlyc3RMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIklLIgorUEFTUyBzZWNv
bmRMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIksiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKworCisgCisKKworIAorCisKKworCisKKworCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmUwNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC5odG1sCkBAIC0wLDAgKzEsMzAz
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3Nz
Ij4KK2lucHV0IHsKKyAgICBiYWNrZ3JvdW5kOnJnYigyNTUsMjU1LDEwMCk7Cit9CitpbnB1dDpk
aXNhYmxlZCB7CisgICAgYmFja2dyb3VuZDpyZ2IoMjU1LDAsMCk7Cit9Cis8L3N0eWxlPgorPC9o
ZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPGZvcm0+Cis8ZmllbGRzZXQ+Cis8bGVnZW5kPjxpbnB1dCB0eXBlPSJ0ZXh0IiBp
ZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQxIj48L2xlZ2VuZD4KKzxsZWdlbmQ+PGlucHV0IHR5cGU9
InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDIiPjwvbGVnZW5kPgorPGlucHV0IHR5cGU9
InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDMiPgorPGlucHV0IHR5cGU9InRleHQiIGlk
PSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDQiIGRpc2FibGVkPgorPC9maWVsZHNldD4KKzxmaWVsZHNl
dCBkaXNhYmxlZD4KKzxsZWdlbmQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0
ZWRJbnB1dDUiPjwvbGVnZW5kPgorPGxlZ2VuZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBhcnNl
ckdlbmVyYXRlZElucHV0NiI+PC9sZWdlbmQ+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBhcnNl
ckdlbmVyYXRlZElucHV0NyI+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBhcnNlckdlbmVyYXRl
ZElucHV0OCIgZGlzYWJsZWQ+Cis8L2ZpZWxkc2V0PgorPGZpZWxkc2V0IGRpc2FibGVkPgorPGlu
cHV0IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDkiPgorPC9maWVsZHNldD4K
KzwvZm9ybT4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgSFRNTEZpZWxkU2V0
RWxlbWVudC5kaXNhYmxlZCBiZWhhdmlvci4nKTsKKwordmFyIGZpZWxkU2V0ID0gMDsKK3ZhciB0
ZXh0SW5wdXQgPSAwOwordmFyIG91dGVyRmllbGRTZXQgPSAwOwordmFyIG91dGVyVGV4dElucHV0
ID0gMDsKK3ZhciBpbm5lckZpZWxkU2V0ID0gMDsKK3ZhciBpbm5lclRleHRJbnB1dCA9IDA7Cit2
YXIgbGVnZW5kRmllbGRTZXQgPSAwOwordmFyIGZpcnN0TGVnZW5kVGV4dElucHV0ID0gMDsKK3Zh
ciBzZWNvbmRMZWdlbmRUZXh0SW5wdXQgPSAwOwordmFyIGluc2VydGVkTGVnZW5kVGV4dElucHV0
ID0gMDsKKworZnVuY3Rpb24gdGVzdFNpbmdsZUZpZWxkU2V0KCkgeworICAgIGZpZWxkU2V0ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGZpZWxkU2V0KTsKKyAgICB0ZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpbnB1dCcpOworICAgIHRleHRJbnB1dC50eXBlID0gInRleHQiOworICAgIGZpZWxkU2V0
LmFwcGVuZENoaWxkKHRleHRJbnB1dCk7CisKKyAgICBkZWJ1ZygnVmVyaWZ5aW5nIEhUTUxGb3Jt
Q29udHJvbCBjYW4gYmUgZGlzYWJsZWQgcmVnYXJkbGVzcyBvZiBlbmNsb3NpbmcgZmllbGRzZXQu
Jyk7CisgICAgdGV4dElucHV0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICB0ZXh0SW5wdXQuZm9jdXMo
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQScpOwor
ICAgIHNob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIiInKTsKKyAgICBzaG91bGRCZUZhbHNl
KGZpZWxkU2V0LmRpc2FibGVkLnRvU3RyaW5nKCkpOworICAgIHRleHRJbnB1dC5kaXNhYmxlZCA9
IGZhbHNlOworCisgICAgZGVidWcoJ0ZpZWxkc2V0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQSB1
c2VyIGNhbiBpbnNlcnRUZXh0IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQuJyk7CisgICAgdGV4
dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBm
YWxzZSwgJ0EnKTsKKyAgICBzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJBIicpOworCisg
ICAgZGVidWcoJ0Rpc2FibGUgZmllbGRzZXQuJyk7CisgICAgZmllbGRTZXQuZGlzYWJsZWQgPSB0
cnVlOworCisgICAgZGVidWcoJ09uY2UgdGhlIGZpZWxkc2V0IGlzIGRpc2FibGVkLCB0ZXh0IGNh
bm5vdCBiZSBpbnNlcnRlZC4nKTsKKyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVu
dC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQicpOworICAgIHNob3VsZEJlKCd0
ZXh0SW5wdXQudmFsdWUnLCAnIkEiJyk7CisKKyAgICBkZWJ1ZygiQ2hlY2sgaWYgdGhlIHN0eWxl
IG9mIHRoZSB0ZXh0IGVsZW1lbnQgY2hhbmdlZC4iKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0
ZWRTdHlsZSh0ZXh0SW5wdXQpLmJhY2tncm91bmRDb2xvciIsICIncmdiKDI1NSwgMCwgMCknIik7
CisKKyAgICBkZWJ1ZygnRW5hYmxlIGZpZWxkc2V0LicpOworICAgIGZpZWxkU2V0LmRpc2FibGVk
ID0gZmFsc2U7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUodGV4dElucHV0KS5iYWNr
Z3JvdW5kQ29sb3IiLCAiJ3JnYigyNTUsIDI1NSwgMTAwKSciKTsKKworICAgIHRleHRJbnB1dC5m
b2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdC
Jyk7CisgICAgc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUIiJyk7CisKKyAgICBkZWJ1
ZygnTW92ZSB0aGUgdGV4dGlucHV0IGVsZW1lbnQgb3V0IG9mIHRoZSBmaWVsZHNldC4nKTsKKyAg
ICBmaWVsZFNldC5yZW1vdmVDaGlsZCh0ZXh0SW5wdXQpOworICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQodGV4dElucHV0KTsKKworICAgIGRlYnVnKCdEaXNhYmxlIHRoZSBmaWVsZHNldC4n
KTsKKyAgICBmaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CisKKyAgICBkZWJ1ZygnVGV4dCBjYW4g
YmUgaW5zZXJ0ZWQsIGJlY2F1c2UgdGhlIHRleHRpbnB1dCBlbGVtZW50IGlzIG91dHNpZGUgb2Yg
dGhlIGRpc2FibGVkIGZpZWxkc2V0LicpOworICAgIHRleHRJbnB1dC5mb2N1cygpOworICAgIGRv
Y3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdDJyk7CisgICAgc2hvdWxk
QmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDIicpOworCisgICAgZGVidWcoJ0VuYWJsZSB0aGUg
ZmllbGRzZXQuJyk7CisgICAgZmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKworICAgIGRlYnVn
KCdJbnNlcnQgYSB0YWJsZSBpbnRvIHRoZSBmaWVsZHNldC4nKTsKKyAgICB2YXIgdGFibGUgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOworICAgIGZpZWxkU2V0LmFwcGVuZENoaWxk
KHRhYmxlKTsKKyAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOworICAg
IHRhYmxlLmFwcGVuZENoaWxkKHRyKTsKKyAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCd0ZCcpOworICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKKworICAgIGRlYnVnKCdNb3ZlIHRo
ZSB0ZXh0aW5wdXQgZmllbGQgaW50byB0aGUgdGFibGUuJyk7CisgICAgZG9jdW1lbnQuYm9keS5y
ZW1vdmVDaGlsZCh0ZXh0SW5wdXQpOworICAgIHRkLmFwcGVuZENoaWxkKHRleHRJbnB1dCk7CisK
KyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0
VGV4dCcsIGZhbHNlLCAnRCcpOworICAgIHNob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFC
Q0QiJyk7CisKKyAgICBkZWJ1ZygnRGlzYWJsZSB0aGUgZmllbGRzZXQuJyk7CisgICAgZmllbGRT
ZXQuZGlzYWJsZWQgPSB0cnVlOworCisgICAgZGVidWcoJ0luc2VydGluZyB0ZXh0IHNob3VsZCBm
YWlsLicpCisgICAgdGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydFRleHQnLCBmYWxzZSwgJ0UnKTsKKyAgICBzaG91bGRCZSgndGV4dElucHV0LnZhbHVl
JywgJyJBQkNEIicpOworCisgICAgZGVidWcoJ0VuYWJsZSB0aGUgZmllbGRzZXQuJyk7CisgICAg
ZmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKworICAgIHRleHRJbnB1dC5mb2N1cygpOworICAg
IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdFJyk7CisgICAgc2hv
dWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDREUiJyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RO
ZXN0ZWRGaWVsZFNldHMoKSB7CisgICAgZGVidWcoJ0NyZWF0aW5nIG5lc3RlZCBmaWVsZHNldCBl
bGVtZW50cy4nKTsKKyAgICBvdXRlckZpZWxkU2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZmllbGRzZXQnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyRmllbGRTZXQp
OworICAgIGlubmVyRmllbGRTZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWVsZHNldCcp
OworICAgIG91dGVyRmllbGRTZXQuYXBwZW5kQ2hpbGQoaW5uZXJGaWVsZFNldCk7CisgICAgb3V0
ZXJUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworICAgIG91dGVy
VGV4dElucHV0LnR5cGUgPSAidGV4dCI7CisgICAgb3V0ZXJGaWVsZFNldC5hcHBlbmRDaGlsZChv
dXRlclRleHRJbnB1dCk7CisgICAgaW5uZXJUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpbnB1dCcpOworICAgIGlubmVyVGV4dElucHV0LnR5cGUgPSAidGV4dCI7CisgICAgaW5u
ZXJGaWVsZFNldC5hcHBlbmRDaGlsZChpbm5lclRleHRJbnB1dCk7CisKKyAgICBkZWJ1ZygnVmVy
aWZ5aW5nIHRoYXQgc3Vib3JkaW5hdGVzIG9mIGJvdGggZmllbGRzZXRzIGFyZSBlbmFibGVkLicp
OworICAgIG91dGVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydFRleHQnLCBmYWxzZSwgJ0YnKTsKKyAgICBpbm5lclRleHRJbnB1dC5mb2N1cygpOwor
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdGJyk7CisgICAg
c2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGIicpOworICAgIHNob3VsZEJlKCdp
bm5lclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKworICAgIGRlYnVnKCdEaXNhYmxpbmcgdGhl
IGlubmVyIGZpZWxkc2V0IG9ubHkuJyk7CisgICAgaW5uZXJGaWVsZFNldC5kaXNhYmxlZCA9IHRy
dWU7CisgICAgb3V0ZXJUZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFu
ZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRycpOworICAgIGlubmVyVGV4dElucHV0LmZvY3VzKCk7
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0cnKTsKKyAg
ICBzaG91bGRCZSgnb3V0ZXJUZXh0SW5wdXQudmFsdWUnLCAnIkZHIicpOworICAgIHNob3VsZEJl
KCdpbm5lclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKworICAgIGRlYnVnKCdFbmFibGluZyB0
aGUgaW5uZXIgYW5kIGRpc2FibGluZyB0aGUgb3V0ZXIgZmllbGRzZXQuJyk7CisgICAgb3V0ZXJG
aWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CisgICAgaW5uZXJGaWVsZFNldC5kaXNhYmxlZCA9IGZh
bHNlOworICAgIG91dGVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKKyAgICBpbm5lclRleHRJbnB1dC5mb2N1cygp
OworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdIJyk7Cisg
ICAgc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGRyInKTsKKyAgICBzaG91bGRC
ZSgnaW5uZXJUZXh0SW5wdXQudmFsdWUnLCAnIkYiJyk7CisKKyAgICBkZWJ1ZygnRGlzYWJsaW5n
IGJvdGggZmllbGRzZXQgZWxlbWVudHMuJyk7CisgICAgb3V0ZXJGaWVsZFNldC5kaXNhYmxlZCA9
IHRydWU7CisgICAgaW5uZXJGaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CisgICAgb3V0ZXJUZXh0
SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZh
bHNlLCAnSCcpOworICAgIGlubmVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKKyAgICBzaG91bGRCZSgnb3V0ZXJU
ZXh0SW5wdXQudmFsdWUnLCAnIkZHIicpOworICAgIHNob3VsZEJlKCdpbm5lclRleHRJbnB1dC52
YWx1ZScsICciRiInKTsKKworICAgIGRlYnVnKCdFbmFibGluZyBib3RoIGZpZWxkc2V0IGVsZW1l
bnRzLicpOworICAgIG91dGVyRmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICBpbm5lckZp
ZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisgICAgb3V0ZXJUZXh0SW5wdXQuZm9jdXMoKTsKKyAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSCcpOworICAgIGlu
bmVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRl
eHQnLCBmYWxzZSwgJ0gnKTsKKyAgICBzaG91bGRCZSgnb3V0ZXJUZXh0SW5wdXQudmFsdWUnLCAn
IkZHSCInKTsKKyAgICBzaG91bGRCZSgnaW5uZXJUZXh0SW5wdXQudmFsdWUnLCAnIkZIIicpOwor
fQorCitmdW5jdGlvbiB0ZXN0Rmlyc3RMZWdlbmRJbkZpZWxkU2V0KCkgeworICAgIGxlZ2VuZEZp
ZWxkU2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQnKTsKKyAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGxlZ2VuZEZpZWxkU2V0KTsKKyAgICB2YXIgZmlyc3RMZWdlbmQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsZWdlbmQnKTsKKyAgICBsZWdlbmRGaWVsZFNldC5h
cHBlbmRDaGlsZChmaXJzdExlZ2VuZCk7CisgICAgdmFyIHNlY29uZExlZ2VuZCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2xlZ2VuZCcpOworICAgIGxlZ2VuZEZpZWxkU2V0LmFwcGVuZENoaWxk
KHNlY29uZExlZ2VuZCk7CisKKyAgICBmaXJzdExlZ2VuZFRleHRJbnB1dCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgZmlyc3RMZWdlbmRUZXh0SW5wdXQudHlwZSA9ICJ0
ZXh0IjsKKyAgICBmaXJzdExlZ2VuZC5hcHBlbmRDaGlsZChmaXJzdExlZ2VuZFRleHRJbnB1dCk7
CisKKyAgICBzZWNvbmRMZWdlbmRUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdp
bnB1dCcpOworICAgIHNlY29uZExlZ2VuZFRleHRJbnB1dC50eXBlID0gInRleHQiOworICAgIHNl
Y29uZExlZ2VuZC5hcHBlbmRDaGlsZChzZWNvbmRMZWdlbmRUZXh0SW5wdXQpOworCisgICAgZGVi
dWcoJ0NoaWxkcmVuIG9mIHRoZSBmaXJzdCBsZWdlbmQgZWxlbWVudCBpbiBhIGZpZWxkc2V0IHNo
b3VsZCBub3QgZ2V0IGRpc2FibGVkIHdpdGggdGhlIGZpZWxkc2V0LicpOworICAgIGxlZ2VuZEZp
ZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICBmaXJzdExlZ2VuZFRleHRJbnB1dC5mb2N1cygp
OworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdJJyk7Cisg
ICAgc2Vjb25kTGVnZW5kVGV4dElucHV0LmZvY3VzKCkKKyAgICBkb2N1bWVudC5leGVjQ29tbWFu
ZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSScpOworICAgIHNob3VsZEJlKCdmaXJzdExlZ2VuZFRl
eHRJbnB1dC52YWx1ZScsICciSSInKTsKKyAgICBzaG91bGRCZSgnc2Vjb25kTGVnZW5kVGV4dElu
cHV0LnZhbHVlJywgJyIiJyk7CisKKyAgICBkZWJ1ZygnSW5zZXJ0IGFub3RoZXIgbGVnZW5kIGVs
ZW1lbnQgYmVmb3JlIHRoZSBjdXJyZW50bHkgZmlyc3Qgb25lLCBhbmQgY2hlY2sgYWdhaW4uJyk7
CisgICAgdmFyIGluc2VydGVkTGVnZW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGVnZW5k
Jyk7CisgICAgbGVnZW5kRmllbGRTZXQuaW5zZXJ0QmVmb3JlKGluc2VydGVkTGVnZW5kLCBmaXJz
dExlZ2VuZCk7CisgICAgaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdpbnB1dCcpOworICAgIGluc2VydGVkTGVnZW5kLmFwcGVuZENoaWxkKGluc2VydGVk
TGVnZW5kVGV4dElucHV0KTsKKworICAgIGluc2VydGVkTGVnZW5kVGV4dElucHV0LmZvY3VzKCk7
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0onKTsKKyAg
ICBmaXJzdExlZ2VuZFRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5k
KCdpbnNlcnRUZXh0JywgZmFsc2UsICdKJyk7CisgICAgc2Vjb25kTGVnZW5kVGV4dElucHV0LmZv
Y3VzKCkKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSicp
OworICAgIHNob3VsZEJlKCdpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC52YWx1ZScsICciSiInKTsK
KyAgICBzaG91bGRCZSgnZmlyc3RMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIkkiJyk7CisgICAg
c2hvdWxkQmUoJ3NlY29uZExlZ2VuZFRleHRJbnB1dC52YWx1ZScsICciIicpOworCisgICAgZGVi
dWcoJ0VuYWJsZSB0aGUgZmllbGRzZXQgYWdhaW4gYW5kIGNoZWNrIGZvciBzYW5pdHkuJyk7Cisg
ICAgbGVnZW5kRmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICBpbnNlcnRlZExlZ2VuZFRl
eHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0Jywg
ZmFsc2UsICdLJyk7CisgICAgZmlyc3RMZWdlbmRUZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1
bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSycpOworICAgIHNlY29uZExl
Z2VuZFRleHRJbnB1dC5mb2N1cygpCisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRl
eHQnLCBmYWxzZSwgJ0snKTsKKyAgICBzaG91bGRCZSgnaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQu
dmFsdWUnLCAnIkpLIicpOworICAgIHNob3VsZEJlKCdmaXJzdExlZ2VuZFRleHRJbnB1dC52YWx1
ZScsICciSUsiJyk7CisgICAgc2hvdWxkQmUoJ3NlY29uZExlZ2VuZFRleHRJbnB1dC52YWx1ZScs
ICciSyInKTsKK30KKworZnVuY3Rpb24gdmVyaWZ5UGFyc2VyR2VuZXJhdGVkRmllbGRTZXRzKCkg
eworICAgIGRlYnVnKCdWZXJpZnlpbmcgcGFyc2VyIGdlbmVyYXRlZCBmaWVsZHNldHMuJyk7Cisg
ICAgdmFyIHBhcnNlckdlbmVyYXRlZElucHV0MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJw
YXJzZXJHZW5lcmF0ZWRJbnB1dDEiKTsKKyAgICB2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0MiIpOworICAgIHZh
ciBwYXJzZXJHZW5lcmF0ZWRJbnB1dDMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2Vy
R2VuZXJhdGVkSW5wdXQzIik7CisgICAgdmFyIHBhcnNlckdlbmVyYXRlZElucHV0NCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJbnB1dDQiKTsKKyAgICB2YXIgcGFy
c2VyR2VuZXJhdGVkSW5wdXQ1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcnNlckdlbmVy
YXRlZElucHV0NSIpOworICAgIHZhciBwYXJzZXJHZW5lcmF0ZWRJbnB1dDYgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJhdGVkSW5wdXQ2Iik7CisgICAgdmFyIHBhcnNlckdl
bmVyYXRlZElucHV0NyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJ
bnB1dDciKTsKKyAgICB2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQ4ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0OCIpOworICAgIHZhciBwYXJzZXJHZW5lcmF0
ZWRJbnB1dDkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJhdGVkSW5wdXQ5
Iik7CisKKyAgICBwYXJzZXJHZW5lcmF0ZWRJbnB1dDEuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5l
eGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnTCcpOworICAgIHBhcnNlckdlbmVyYXRl
ZElucHV0Mi5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0Jywg
ZmFsc2UsICdNJyk7CisgICAgcGFyc2VyR2VuZXJhdGVkSW5wdXQzLmZvY3VzKCk7CisgICAgZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ04nKTsKKyAgICBwYXJzZXJH
ZW5lcmF0ZWRJbnB1dDQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0
VGV4dCcsIGZhbHNlLCAnTycpOworICAgIHBhcnNlckdlbmVyYXRlZElucHV0NS5mb2N1cygpOwor
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdQJyk7CisgICAg
cGFyc2VyR2VuZXJhdGVkSW5wdXQ2LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydFRleHQnLCBmYWxzZSwgJ1EnKTsKKyAgICBwYXJzZXJHZW5lcmF0ZWRJbnB1dDcuZm9j
dXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnUicp
OworICAgIHBhcnNlckdlbmVyYXRlZElucHV0OC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWND
b21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdTJyk7CisgICAgcGFyc2VyR2VuZXJhdGVkSW5w
dXQ5LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxz
ZSwgJ1QnKTsKKworICAgIHNob3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDEudmFsdWUnLCAn
IkwiJyk7CisgICAgc2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRlZElucHV0Mi52YWx1ZScsICciTSIn
KTsKKyAgICBzaG91bGRCZSgncGFyc2VyR2VuZXJhdGVkSW5wdXQzLnZhbHVlJywgJyJOTyInKTsK
KyAgICBzaG91bGRCZSgncGFyc2VyR2VuZXJhdGVkSW5wdXQ0LnZhbHVlJywgJyIiJyk7CisgICAg
c2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRlZElucHV0NS52YWx1ZScsICciUCInKTsKKyAgICBzaG91
bGRCZSgncGFyc2VyR2VuZXJhdGVkSW5wdXQ2LnZhbHVlJywgJyIiJyk7CisgICAgc2hvdWxkQmUo
J3BhcnNlckdlbmVyYXRlZElucHV0Ny52YWx1ZScsICciIicpOworICAgIHNob3VsZEJlKCdwYXJz
ZXJHZW5lcmF0ZWRJbnB1dDgudmFsdWUnLCAnIiInKTsKKyAgICBzaG91bGRCZSgncGFyc2VyR2Vu
ZXJhdGVkSW5wdXQ5LnZhbHVlJywgJyIiJyk7Cit9CisKK3ZlcmlmeVBhcnNlckdlbmVyYXRlZEZp
ZWxkU2V0cygpOwordGVzdFNpbmdsZUZpZWxkU2V0KCk7Cit0ZXN0TmVzdGVkRmllbGRTZXRzKCk7
Cit0ZXN0Rmlyc3RMZWdlbmRJbkZpZWxkU2V0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDg0NGQ1OTQuLjQ4ZDc3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMi0w
Mi0yMCAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KKworICAgICAgICBGaWVsZHNl
dCBkaXNhYmxlZCBhdHRyaWJ1dGUgZG9lcyBub3Qgd29yay4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODM3CisKKyAgICAgICAgTWFrZSBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50cyBpbmhlcml0IHRoZSBkaXNhYmxlZCBzdGF0ZQorICAgICAgICBmcm9t
IEhUTUxGaWVsZFNldEVsZW1lbnQgYW5jZXN0b3JzLiBTdWJvcmRpbmF0ZXMgb2YgdGhlCisgICAg
ICAgIGZpcnN0IEhUTUxMZWdlbmRFbGVtZW50IGluIGEgZmllbGRzZXQgd2lsbCBuZXZlciBiZSBk
aXNhYmxlZC4KKworICAgICAgICBQYXRjaCBieSBOYW9raSBUYWthbm8gIDx0YWthbm8ubmFva2lA
Z21haWwuY29tPgorICAgICAgICBQYXRjaCB1cGRhdGVkIGJ5IFplbm8gQWxiaXNzZXIgPHplbm9A
d2Via2l0Lm9yZz4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVk
Lmh0bWwKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAq
IGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmll
bGRTZXRFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50Lmg6CisgICAgICAgIChIVE1M
RmllbGRTZXRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZUZvcm1BbmRG
aWVsZFNldEFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlRmllbGRTZXRBbmNlc3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpk
aXNhYmxlZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAg
ICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExl
Z2VuZEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGh0
bWwvSFRNTExlZ2VuZEVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxMZWdlbmRFbGVtZW50KToKKwog
MjAxMi0wMi0yMCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFtTdHlsZXNdIGJveC1zaGFkb3cgYW5kIC13ZWJraXQtYm94
LXNoYWRvdyBwcm9wZXJ0aWVzIGFyZSBub3QgY29uc2lkZXJlZCBjb2xvci1hd2FyZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCmluZGV4IGQyZjNmNGEu
Ljk5YTUyNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVu
dC5jcHAKQEAgLTkxLDcgKzkxLDEwIEBAIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNl
cnRlZEludG9UcmVlKCkKICAgICAgICAgLy8gSmF2YVNjcmlwdCBhbmQgaW5zZXJ0ZWQgaW5zaWRl
IGEgZm9ybS4gIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJzZXIKICAgICAgICAgLy8gc2V0dGluZyBh
IGZvcm0sIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9uLW51bGwgdmFsdWUgZm9yIG1fZm9ybSwK
ICAgICAgICAgLy8gYW5kIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gICAgICAg
IHNldEZvcm0oZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpKTsKKyAgICAgICAgaWYgKGVsZW1l
bnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudCktPnVwZGF0ZUZvcm1BbmRGaWVsZFNldEFuY2Vz
dG9yKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEZvcm0oZWxlbWVudC0+ZmluZEZv
cm1BbmNlc3RvcigpKTsKICAgICB9CiB9CiAKQEAgLTE1MiwxOCArMTU1LDIxIEBAIHZvaWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25lcigpCiAgICAgICAgIGlmIChmb3JtSWQu
aXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEhUTUxGb3JtRWxlbWVu
dCogbmV3Rm9ybSA9IDA7CiAgICAgaWYgKCFmb3JtSWQuaXNOdWxsKCkgJiYgZWxlbWVudC0+aW5E
b2N1bWVudCgpKSB7CiAgICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxl
bWVudCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIC8vIHRoZSBmaXJzdCBlbGVt
ZW50IGluIHRoZSBkb2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KICAgICAgICAg
Ly8gdGhlIHZhbHVlIG9mIGZvcm0gYXR0cmlidXRlLCBzbyB3ZSBwdXQgdGhlIHJlc3VsdCBvZgog
ICAgICAgICAvLyB0cmVlU2NvcGUoKS0+Z2V0RWxlbWVudEJ5SWQoKSBvdmVyIHRoZSBnaXZlbiBl
bGVtZW50LgogICAgICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnQgPSBlbGVtZW50LT50cmVlU2Nv
cGUoKS0+Z2V0RWxlbWVudEJ5SWQoZm9ybUlkKTsKLSAgICAgICAgaWYgKGZpcnN0RWxlbWVudCAm
JiBmaXJzdEVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICBuZXdGb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZmlyc3RFbGVtZW50KTsKKyAgICAgICAg
aWYgKGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsK
KyAgICAgICAgICAgIHNldEZvcm0oc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZmlyc3RF
bGVtZW50KSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4o
ZWxlbWVudCktPnVwZGF0ZUZpZWxkU2V0QW5jZXN0b3IoKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgeworICAgICAgICBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudCktPnVwZGF0ZUZvcm1BbmRGaWVs
ZFNldEFuY2VzdG9yKCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG5ld0Zvcm0gPSBlbGVtZW50LT5m
aW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgc2V0Rm9ybShuZXdGb3JtKTsKKyAgICAgICAgc2V0Rm9y
bShlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCkpOwogfQogCiB2b2lkIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQpAQCAtMTcxLDcgKzE3NywxMCBAQCB2b2lk
IEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQogICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKICAgICBpZiAoIWVsZW1lbnQt
PmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CiAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJp
YnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAg
c2V0Rm9ybShlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCkpOworICAgICAgICBpZiAoZWxlbWVu
dC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlRm9ybUFuZEZpZWxkU2V0QW5jZXN0
b3IoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0Rm9ybShlbGVtZW50LT5maW5kRm9y
bUFuY2VzdG9yKCkpOwogICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVz
ZXRGb3JtT3duZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxk
U2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCmluZGV4IDRiOTA0MTIuLmIzZDZjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RmllbGRTZXRFbGVtZW50LmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMZWdl
bmRFbGVtZW50LmgiCiAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJG
aWVsZHNldC5oIgpAQCAtNDQsNiArNDUsMTggQEAgUGFzc1JlZlB0cjxIVE1MRmllbGRTZXRFbGVt
ZW50PiBIVE1MRmllbGRTZXRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxGaWVsZFNldEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQsIGZvcm0pKTsKIH0KIAordm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpkaXNhYmxlZEF0dHJp
YnV0ZUNoYW5nZWQoKQoreworICAgIC8vIFRoaXMgZWxlbWVudCBtdXN0IGJlIHVwZGF0ZWQgYmVm
b3JlIHRoZSBzdHlsZSBvZiBub2RlcyBpbiBpdHMgc3VidHJlZSBnZXRzIHJlY2FsY3VsYXRlZC4K
KyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKTsK
KworICAgIGZvciAoTm9kZSogY3VycmVudE5vZGUgPSB0aGlzOyBjdXJyZW50Tm9kZTsgY3VycmVu
dE5vZGUgPSBjdXJyZW50Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgeworICAgICAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpOworICAgICAg
ICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnQpLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgfQorfQorCiBib29sIEhUTUxGaWVsZFNldEVsZW1lbnQ6
OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewogICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9y
dHNGb2N1cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAppbmRl
eCBkY2M4ZDBjLi40ZGEyMjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
aWVsZFNldEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVs
ZW1lbnQuaApAQCAtMzIsNiArMzIsOSBAQCBjbGFzcyBIVE1MRmllbGRTZXRFbGVtZW50IDogcHVi
bGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9p
ZCBkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICBI
VE1MRmllbGRTZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxG
b3JtRWxlbWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50
LmlkbAppbmRleCBkZDY5OWMwLi44OTZjMDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5pZGwKQEAgLTIwLDYgKzIwLDcgQEAKIG1vZHVsZSBodG1sIHsKIAog
ICAgIGludGVyZmFjZSBIVE1MRmllbGRTZXRFbGVtZW50IDogSFRNTEVsZW1lbnQgeworICAgICAg
ICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xlYW4gZGlzYWJsZWQ7CiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBIVE1MRm9ybUVsZW1lbnQgZm9ybTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFZhbGlkaXR5U3RhdGUgICB2YWxpZGl0eTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGJvb2xlYW4gICAgICAgICB3aWxsVmFsaWRhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCA4YTcyZGYwLi4wMWEwZGNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTMyLDgg
KzMyLDEwIEBACiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkxhYmVsc05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94Lmgi
CkBAIC01MCw2ICs1Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiAgICAgOiBI
VE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIG1fZmllbGRTZXRBbmNlc3Rvcigw
KQorICAgICwgbV9sZWdlbmRBbmNlc3RvcigwKQogICAgICwgbV9kaXNhYmxlZChmYWxzZSkKICAg
ICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBtX3JlcXVpcmVkKGZhbHNlKQpAQCAtNjAsNyAr
NjQsMTIgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2MKICAgICAsIG1fd2FzQ2hhbmdlZFNpbmNl
TGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoZmFsc2UpCiAgICAgLCBtX2hhc0F1dG9mb2N1c2Vk
KGZhbHNlKQogewotICAgIHNldEZvcm0oZm9ybSA/IGZvcm0gOiBmaW5kRm9ybUFuY2VzdG9yKCkp
OworICAgIGlmIChmb3JtKSB7CisgICAgICAgIHNldEZvcm0oZm9ybSk7CisgICAgICAgIHVwZGF0
ZUZpZWxkU2V0QW5jZXN0b3IoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdXBkYXRlRm9ybUFuZEZp
ZWxkU2V0QW5jZXN0b3IoKTsKKwogICAgIHNldEhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxl
KCk7CiB9CiAKQEAgLTk5LDYgKzEwOCw0MCBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmZvcm1Ob1ZhbGlkYXRlKCkgY29uc3QKICAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShmb3Jt
bm92YWxpZGF0ZUF0dHIpOwogfQogCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0
ZUZvcm1BbmRGaWVsZFNldEFuY2VzdG9yKCkKK3sKKyAgICBtX2ZpZWxkU2V0QW5jZXN0b3IgPSAw
OworICAgIG1fbGVnZW5kQW5jZXN0b3IgPSAwOworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybUFu
Y2VzdG9yID0gMDsKKyAgICBmb3IgKENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gcGFyZW50Tm9k
ZSgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7CisgICAg
ICAgIGlmICghZm9ybUFuY2VzdG9yICYmIGFuY2VzdG9yLT5oYXNUYWdOYW1lKGZvcm1UYWcpKSB7
CisgICAgICAgICAgICBmb3JtQW5jZXN0b3IgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQq
PihhbmNlc3Rvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IW1fZmllbGRTZXRBbmNlc3RvciAmJiBhbmNlc3Rvci0+aGFzVGFnTmFtZShmaWVsZHNldFRhZykp
CisgICAgICAgICAgICBtX2ZpZWxkU2V0QW5jZXN0b3IgPSBzdGF0aWNfY2FzdDxIVE1MRmllbGRT
ZXRFbGVtZW50Kj4oYW5jZXN0b3IpOworICAgICAgICBpZiAoIW1fbGVnZW5kQW5jZXN0b3IgJiYg
YW5jZXN0b3ItPmhhc1RhZ05hbWUobGVnZW5kVGFnKSkKKyAgICAgICAgICAgIG1fbGVnZW5kQW5j
ZXN0b3IgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICB9
CisKKyAgICBpZiAoZm9ybUFuY2VzdG9yKQorICAgICAgICBzZXRGb3JtKGZvcm1BbmNlc3Rvcik7
Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlRmllbGRTZXRBbmNlc3Rv
cigpCit7CisgICAgbV9maWVsZFNldEFuY2VzdG9yID0gMDsKKyAgICBtX2xlZ2VuZEFuY2VzdG9y
ID0gMDsKKyAgICBmb3IgKENvbnRhaW5lck5vZGUqIGFuY2VzdG9yID0gcGFyZW50Tm9kZSgpOyBh
bmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlm
ICghbV9maWVsZFNldEFuY2VzdG9yICYmIGFuY2VzdG9yLT5oYXNUYWdOYW1lKGZpZWxkc2V0VGFn
KSkgeworICAgICAgICAgICAgbV9maWVsZFNldEFuY2VzdG9yID0gc3RhdGljX2Nhc3Q8SFRNTEZp
ZWxkU2V0RWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGlmICghbV9sZWdlbmRBbmNlc3RvciAmJiBhbmNlc3Rvci0+aGFzVGFnTmFtZShs
ZWdlbmRUYWcpKQorICAgICAgICAgICAgbV9sZWdlbmRBbmNlc3RvciA9IHN0YXRpY19jYXN0PEhU
TUxMZWdlbmRFbGVtZW50Kj4oYW5jZXN0b3IpOworICAgIH0KK30KKwogdm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0cikKQEAgLTEwNiwxMSArMTQ5LDggQEAgdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2FibGVkQXR0cikgewogICAgICAgICBib29sIG9s
ZERpc2FibGVkID0gbV9kaXNhYmxlZDsKICAgICAgICAgbV9kaXNhYmxlZCA9ICFhdHRyLT5pc051
bGwoKTsKLSAgICAgICAgaWYgKG9sZERpc2FibGVkICE9IG1fZGlzYWJsZWQpIHsKLSAgICAgICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICBy
ZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgRW5hYmxlZFN0YXRl
KTsKLSAgICAgICAgfQorICAgICAgICBpZiAob2xkRGlzYWJsZWQgIT0gbV9kaXNhYmxlZCkKKyAg
ICAgICAgICAgIGRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IHJlYWRvbmx5QXR0cikgewogICAgICAgICBib29sIG9sZFJlYWRPbmx5ID0g
bV9yZWFkT25seTsKICAgICAgICAgbV9yZWFkT25seSA9ICFhdHRyLT5pc051bGwoKTsKQEAgLTEy
OSw2ICsxNjksMTMgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShBdHRyaWJ1dGUqIGF0dHIpCiAgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwogfQog
Cit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgp
Cit7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGlmIChyZW5kZXJlcigpICYmIHJl
bmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKKyAgICAgICAgcmVuZGVyZXIoKS0+
dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIEVuYWJsZWRTdGF0ZSk7Cit9CisKIHZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsK
ICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKQEAgLTIwNSw2ICsyNTIsNyBAQCB2b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQogewogICAg
IEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSgpOwogICAgIEhUTUxFbGVt
ZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOworICAgIHVwZGF0ZUZvcm1BbmRGaWVsZFNldEFu
Y2VzdG9yKCk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21U
cmVlKGJvb2wgZGVlcCkKQEAgLTI1OCw2ICszMDYsMTMgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpkaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpCiAgICAgSFRNTEVsZW1lbnQ6
OmRpc3BhdGNoSW5wdXRFdmVudCgpOwogfQogCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmRpc2FibGVkKCkgY29uc3QKK3sKKyAgICBib29sIGluRmlyc3RMZWdlbmRPZkZpZWxkU2V0ID0g
bV9maWVsZFNldEFuY2VzdG9yICYmIG1fbGVnZW5kQW5jZXN0b3IKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIG1fbGVnZW5kQW5jZXN0b3IgPT0gbV9maWVsZFNldEFuY2Vz
dG9yLT5maXJzdEVsZW1lbnRDaGlsZCgpOworICAgIHJldHVybiAhaW5GaXJzdExlZ2VuZE9mRmll
bGRTZXQgJiYgKG1fZGlzYWJsZWQgfHwgKG1fZmllbGRTZXRBbmNlc3RvciAmJiBtX2ZpZWxkU2V0
QW5jZXN0b3ItPmRpc2FibGVkKCkpKTsKK30KKwogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpzZXREaXNhYmxlZChib29sIGIpCiB7CiAgICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwg
YiA/ICIiIDogMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oCmluZGV4IDFiZDQ4NTkuLjFlNTUwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC0zMCw3ICszMCw5IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZvcm1EYXRhTGlzdDsKK2NsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnQ7CiBj
bGFzcyBIVE1MRm9ybUVsZW1lbnQ7CitjbGFzcyBIVE1MTGVnZW5kRWxlbWVudDsKIGNsYXNzIFZh
bGlkYXRpb25NZXNzYWdlOwogY2xhc3MgVmFsaWRpdHlTdGF0ZTsKIApAQCAtNDksNiArNTEsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGb3JtTWV0aG9kKGNvbnN0IFN0cmluZyYpOwogICAgIGJv
b2wgZm9ybU5vVmFsaWRhdGUoKSBjb25zdDsKIAorICAgIHZvaWQgdXBkYXRlRm9ybUFuZEZpZWxk
U2V0QW5jZXN0b3IoKTsKKyAgICB2b2lkIHVwZGF0ZUZpZWxkU2V0QW5jZXN0b3IoKTsKKwogICAg
IHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGZvcm1Db250cm9s
VmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRl
cmVyOyB9CkBAIC02MCw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9y
bUNvbnRyb2xJbnB1dEV2ZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2Rpc2FibGVkOyB9CisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Zv
Y3VzYWJsZSgpIGNvbnN0OwpAQCAtMTE2LDYgKzEyMSw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGRp
c2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOwogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKTsKQEAgLTE0OSw2ICsxNTUsOCBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAgICAg
U3RyaW5nIHZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0OwogCisgICAgSFRNTEZpZWxk
U2V0RWxlbWVudCogbV9maWVsZFNldEFuY2VzdG9yOworICAgIEhUTUxMZWdlbmRFbGVtZW50KiBt
X2xlZ2VuZEFuY2VzdG9yOwogICAgIE93blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0
aW9uTWVzc2FnZTsKICAgICBib29sIG1fZGlzYWJsZWQgOiAxOwogICAgIGJvb2wgbV9yZWFkT25s
eSA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCmluZGV4IDYx
ZDJkYjMuLjAwMDM3NDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdl
bmRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50
LmNwcApAQCAtNDMsNiArNDMsMTEgQEAgUGFzc1JlZlB0cjxIVE1MTGVnZW5kRWxlbWVudD4gSFRN
TExlZ2VuZEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEhUTUxMZWdlbmRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3Jt
KSk7CiB9CiAKK2Jvb2wgSFRNTExlZ2VuZEVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWQoKTsKK30KKwogYm9vbCBI
VE1MTGVnZW5kRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEhU
TUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxMZWdlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRF
bGVtZW50LmgKaW5kZXggMjRkOGZjZS4uYTNjNzE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExlZ2VuZEVsZW1lbnQuaApAQCAtMzIsNiArMzIsOCBAQCBjbGFzcyBIVE1MTGVnZW5kRWxlbWVu
dCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MTGVnZW5kRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogCisgICAgdmlydHVhbCBib29sIGRpc2Fi
bGVkKCkgY29uc3QgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgSFRNTExlZ2VuZEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127810</attachid>
            <date>2012-02-20 04:56:28 -0800</date>
            <delta_ts>2012-03-26 09:32:54 -0700</delta_ts>
            <desc>patch for review. - removed obsolete HTMLLegendElement::fieldset() as well.</desc>
            <filename>58837_20120220-135153.patch</filename>
            <type>text/plain</type>
            <size>28902</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMGIyYTBkLi4yMTk0N2FhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDIt
MjAgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmllbGRzZXQg
ZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgIEFkZCBhIHRlc3QgY2Fz
ZSBmb3IgZmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZmllbGRzZXQtZGlz
YWJsZWQuaHRtbDogQWRkZWQuCisKIDIwMTItMDItMjAgIFlvc2lmdW1pIElub3VlICA8eW9zaW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtGb3Jtc10gU3BpbiBidXR0b25zIG9mIG51bWJlciBp
bnB1dCB0eXBlIHNob3VsZCBmaXJlIGJvdGggaW5wdXQgYW5kIGNoYW5nZSBldmVudApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlMDI4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw4NSBAQAorVGVzdHMgZm9yIEhUTUxGaWVsZFNldEVsZW1lbnQuZGlz
YWJsZWQgYmVoYXZpb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitWZXJpZnlp
bmcgcGFyc2VyIGdlbmVyYXRlZCBmaWVsZHNldHMuCitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0
MS52YWx1ZSBpcyAiTCIKK1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQyLnZhbHVlIGlzICJNIgor
UEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDMudmFsdWUgaXMgIk5PIgorUEFTUyBwYXJzZXJHZW5l
cmF0ZWRJbnB1dDQudmFsdWUgaXMgIiIKK1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQ1LnZhbHVl
IGlzICJQIgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDYudmFsdWUgaXMgIiIKK1BBU1MgcGFy
c2VyR2VuZXJhdGVkSW5wdXQ3LnZhbHVlIGlzICIiCitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0
OC52YWx1ZSBpcyAiIgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDkudmFsdWUgaXMgIiIKK1Zl
cmlmeWluZyBIVE1MRm9ybUNvbnRyb2wgY2FuIGJlIGRpc2FibGVkIHJlZ2FyZGxlc3Mgb2YgZW5j
bG9zaW5nIGZpZWxkc2V0LgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIiIKK1BBU1MgZmFsc2Ug
aXMgZmFsc2UKK0ZpZWxkc2V0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQSB1c2VyIGNhbiBpbnNl
cnRUZXh0IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQuCitQQVNTIHRleHRJbnB1dC52YWx1ZSBp
cyAiQSIKK0Rpc2FibGUgZmllbGRzZXQuCitPbmNlIHRoZSBmaWVsZHNldCBpcyBkaXNhYmxlZCwg
dGV4dCBjYW5ub3QgYmUgaW5zZXJ0ZWQuCitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQSIKK0No
ZWNrIGlmIHRoZSBzdHlsZSBvZiB0aGUgdGV4dCBlbGVtZW50IGNoYW5nZWQuCitQQVNTIGdldENv
bXB1dGVkU3R5bGUodGV4dElucHV0KS5iYWNrZ3JvdW5kQ29sb3IgaXMgJ3JnYigyNTUsIDAsIDAp
JworRW5hYmxlIGZpZWxkc2V0LgorUEFTUyBnZXRDb21wdXRlZFN0eWxlKHRleHRJbnB1dCkuYmFj
a2dyb3VuZENvbG9yIGlzICdyZ2IoMjU1LCAyNTUsIDEwMCknCitQQVNTIHRleHRJbnB1dC52YWx1
ZSBpcyAiQUIiCitNb3ZlIHRoZSB0ZXh0aW5wdXQgZWxlbWVudCBvdXQgb2YgdGhlIGZpZWxkc2V0
LgorRGlzYWJsZSB0aGUgZmllbGRzZXQuCitUZXh0IGNhbiBiZSBpbnNlcnRlZCwgYmVjYXVzZSB0
aGUgdGV4dGlucHV0IGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGUgZGlzYWJsZWQgZmllbGRzZXQu
CitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQUJDIgorRW5hYmxlIHRoZSBmaWVsZHNldC4KK0lu
c2VydCBhIHRhYmxlIGludG8gdGhlIGZpZWxkc2V0LgorTW92ZSB0aGUgdGV4dGlucHV0IGZpZWxk
IGludG8gdGhlIHRhYmxlLgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0QiCitEaXNhYmxl
IHRoZSBmaWVsZHNldC4KK0luc2VydGluZyB0ZXh0IHNob3VsZCBmYWlsLgorUEFTUyB0ZXh0SW5w
dXQudmFsdWUgaXMgIkFCQ0QiCitFbmFibGUgdGhlIGZpZWxkc2V0LgorUEFTUyB0ZXh0SW5wdXQu
dmFsdWUgaXMgIkFCQ0RFIgorQ3JlYXRpbmcgbmVzdGVkIGZpZWxkc2V0IGVsZW1lbnRzLgorVmVy
aWZ5aW5nIHRoYXQgc3Vib3JkaW5hdGVzIG9mIGJvdGggZmllbGRzZXRzIGFyZSBlbmFibGVkLgor
UEFTUyBvdXRlclRleHRJbnB1dC52YWx1ZSBpcyAiRiIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFs
dWUgaXMgIkYiCitEaXNhYmxpbmcgdGhlIGlubmVyIGZpZWxkc2V0IG9ubHkuCitQQVNTIG91dGVy
VGV4dElucHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFsdWUgaXMgIkYi
CitFbmFibGluZyB0aGUgaW5uZXIgYW5kIGRpc2FibGluZyB0aGUgb3V0ZXIgZmllbGRzZXQuCitQ
QVNTIG91dGVyVGV4dElucHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFs
dWUgaXMgIkYiCitEaXNhYmxpbmcgYm90aCBmaWVsZHNldCBlbGVtZW50cy4KK1BBU1Mgb3V0ZXJU
ZXh0SW5wdXQudmFsdWUgaXMgIkZHIgorUEFTUyBpbm5lclRleHRJbnB1dC52YWx1ZSBpcyAiRiIK
K0VuYWJsaW5nIGJvdGggZmllbGRzZXQgZWxlbWVudHMuCitQQVNTIG91dGVyVGV4dElucHV0LnZh
bHVlIGlzICJGR0giCitQQVNTIGlubmVyVGV4dElucHV0LnZhbHVlIGlzICJGSCIKK0NoaWxkcmVu
IG9mIHRoZSBmaXJzdCBsZWdlbmQgZWxlbWVudCBpbiBhIGZpZWxkc2V0IHNob3VsZCBub3QgZ2V0
IGRpc2FibGVkIHdpdGggdGhlIGZpZWxkc2V0LgorUEFTUyBmaXJzdExlZ2VuZFRleHRJbnB1dC52
YWx1ZSBpcyAiSSIKK1BBU1Mgc2Vjb25kTGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICIiCitJbnNl
cnQgYW5vdGhlciBsZWdlbmQgZWxlbWVudCBiZWZvcmUgdGhlIGN1cnJlbnRseSBmaXJzdCBvbmUs
IGFuZCBjaGVjayBhZ2Fpbi4KK1BBU1MgaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMg
IkoiCitQQVNTIGZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICJJIgorUEFTUyBzZWNvbmRM
ZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIiIKK0VuYWJsZSB0aGUgZmllbGRzZXQgYWdhaW4gYW5k
IGNoZWNrIGZvciBzYW5pdHkuCitQQVNTIGluc2VydGVkTGVnZW5kVGV4dElucHV0LnZhbHVlIGlz
ICJKSyIKK1BBU1MgZmlyc3RMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIklLIgorUEFTUyBzZWNv
bmRMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIksiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKworCisgCisKKworIAorCisKKworCisKKworCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmUwNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC5odG1sCkBAIC0wLDAgKzEsMzAz
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3Nz
Ij4KK2lucHV0IHsKKyAgICBiYWNrZ3JvdW5kOnJnYigyNTUsMjU1LDEwMCk7Cit9CitpbnB1dDpk
aXNhYmxlZCB7CisgICAgYmFja2dyb3VuZDpyZ2IoMjU1LDAsMCk7Cit9Cis8L3N0eWxlPgorPC9o
ZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPGZvcm0+Cis8ZmllbGRzZXQ+Cis8bGVnZW5kPjxpbnB1dCB0eXBlPSJ0ZXh0IiBp
ZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQxIj48L2xlZ2VuZD4KKzxsZWdlbmQ+PGlucHV0IHR5cGU9
InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDIiPjwvbGVnZW5kPgorPGlucHV0IHR5cGU9
InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDMiPgorPGlucHV0IHR5cGU9InRleHQiIGlk
PSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDQiIGRpc2FibGVkPgorPC9maWVsZHNldD4KKzxmaWVsZHNl
dCBkaXNhYmxlZD4KKzxsZWdlbmQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0
ZWRJbnB1dDUiPjwvbGVnZW5kPgorPGxlZ2VuZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBhcnNl
ckdlbmVyYXRlZElucHV0NiI+PC9sZWdlbmQ+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBhcnNl
ckdlbmVyYXRlZElucHV0NyI+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBhcnNlckdlbmVyYXRl
ZElucHV0OCIgZGlzYWJsZWQ+Cis8L2ZpZWxkc2V0PgorPGZpZWxkc2V0IGRpc2FibGVkPgorPGlu
cHV0IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDkiPgorPC9maWVsZHNldD4K
KzwvZm9ybT4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgSFRNTEZpZWxkU2V0
RWxlbWVudC5kaXNhYmxlZCBiZWhhdmlvci4nKTsKKwordmFyIGZpZWxkU2V0ID0gMDsKK3ZhciB0
ZXh0SW5wdXQgPSAwOwordmFyIG91dGVyRmllbGRTZXQgPSAwOwordmFyIG91dGVyVGV4dElucHV0
ID0gMDsKK3ZhciBpbm5lckZpZWxkU2V0ID0gMDsKK3ZhciBpbm5lclRleHRJbnB1dCA9IDA7Cit2
YXIgbGVnZW5kRmllbGRTZXQgPSAwOwordmFyIGZpcnN0TGVnZW5kVGV4dElucHV0ID0gMDsKK3Zh
ciBzZWNvbmRMZWdlbmRUZXh0SW5wdXQgPSAwOwordmFyIGluc2VydGVkTGVnZW5kVGV4dElucHV0
ID0gMDsKKworZnVuY3Rpb24gdGVzdFNpbmdsZUZpZWxkU2V0KCkgeworICAgIGZpZWxkU2V0ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGZpZWxkU2V0KTsKKyAgICB0ZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpbnB1dCcpOworICAgIHRleHRJbnB1dC50eXBlID0gInRleHQiOworICAgIGZpZWxkU2V0
LmFwcGVuZENoaWxkKHRleHRJbnB1dCk7CisKKyAgICBkZWJ1ZygnVmVyaWZ5aW5nIEhUTUxGb3Jt
Q29udHJvbCBjYW4gYmUgZGlzYWJsZWQgcmVnYXJkbGVzcyBvZiBlbmNsb3NpbmcgZmllbGRzZXQu
Jyk7CisgICAgdGV4dElucHV0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICB0ZXh0SW5wdXQuZm9jdXMo
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQScpOwor
ICAgIHNob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIiInKTsKKyAgICBzaG91bGRCZUZhbHNl
KGZpZWxkU2V0LmRpc2FibGVkLnRvU3RyaW5nKCkpOworICAgIHRleHRJbnB1dC5kaXNhYmxlZCA9
IGZhbHNlOworCisgICAgZGVidWcoJ0ZpZWxkc2V0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQSB1
c2VyIGNhbiBpbnNlcnRUZXh0IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQuJyk7CisgICAgdGV4
dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBm
YWxzZSwgJ0EnKTsKKyAgICBzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJBIicpOworCisg
ICAgZGVidWcoJ0Rpc2FibGUgZmllbGRzZXQuJyk7CisgICAgZmllbGRTZXQuZGlzYWJsZWQgPSB0
cnVlOworCisgICAgZGVidWcoJ09uY2UgdGhlIGZpZWxkc2V0IGlzIGRpc2FibGVkLCB0ZXh0IGNh
bm5vdCBiZSBpbnNlcnRlZC4nKTsKKyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVu
dC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQicpOworICAgIHNob3VsZEJlKCd0
ZXh0SW5wdXQudmFsdWUnLCAnIkEiJyk7CisKKyAgICBkZWJ1ZygiQ2hlY2sgaWYgdGhlIHN0eWxl
IG9mIHRoZSB0ZXh0IGVsZW1lbnQgY2hhbmdlZC4iKTsKKyAgICBzaG91bGRCZSgiZ2V0Q29tcHV0
ZWRTdHlsZSh0ZXh0SW5wdXQpLmJhY2tncm91bmRDb2xvciIsICIncmdiKDI1NSwgMCwgMCknIik7
CisKKyAgICBkZWJ1ZygnRW5hYmxlIGZpZWxkc2V0LicpOworICAgIGZpZWxkU2V0LmRpc2FibGVk
ID0gZmFsc2U7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUodGV4dElucHV0KS5iYWNr
Z3JvdW5kQ29sb3IiLCAiJ3JnYigyNTUsIDI1NSwgMTAwKSciKTsKKworICAgIHRleHRJbnB1dC5m
b2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdC
Jyk7CisgICAgc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUIiJyk7CisKKyAgICBkZWJ1
ZygnTW92ZSB0aGUgdGV4dGlucHV0IGVsZW1lbnQgb3V0IG9mIHRoZSBmaWVsZHNldC4nKTsKKyAg
ICBmaWVsZFNldC5yZW1vdmVDaGlsZCh0ZXh0SW5wdXQpOworICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQodGV4dElucHV0KTsKKworICAgIGRlYnVnKCdEaXNhYmxlIHRoZSBmaWVsZHNldC4n
KTsKKyAgICBmaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CisKKyAgICBkZWJ1ZygnVGV4dCBjYW4g
YmUgaW5zZXJ0ZWQsIGJlY2F1c2UgdGhlIHRleHRpbnB1dCBlbGVtZW50IGlzIG91dHNpZGUgb2Yg
dGhlIGRpc2FibGVkIGZpZWxkc2V0LicpOworICAgIHRleHRJbnB1dC5mb2N1cygpOworICAgIGRv
Y3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdDJyk7CisgICAgc2hvdWxk
QmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDIicpOworCisgICAgZGVidWcoJ0VuYWJsZSB0aGUg
ZmllbGRzZXQuJyk7CisgICAgZmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKworICAgIGRlYnVn
KCdJbnNlcnQgYSB0YWJsZSBpbnRvIHRoZSBmaWVsZHNldC4nKTsKKyAgICB2YXIgdGFibGUgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOworICAgIGZpZWxkU2V0LmFwcGVuZENoaWxk
KHRhYmxlKTsKKyAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOworICAg
IHRhYmxlLmFwcGVuZENoaWxkKHRyKTsKKyAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCd0ZCcpOworICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKKworICAgIGRlYnVnKCdNb3ZlIHRo
ZSB0ZXh0aW5wdXQgZmllbGQgaW50byB0aGUgdGFibGUuJyk7CisgICAgZG9jdW1lbnQuYm9keS5y
ZW1vdmVDaGlsZCh0ZXh0SW5wdXQpOworICAgIHRkLmFwcGVuZENoaWxkKHRleHRJbnB1dCk7CisK
KyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0
VGV4dCcsIGZhbHNlLCAnRCcpOworICAgIHNob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFC
Q0QiJyk7CisKKyAgICBkZWJ1ZygnRGlzYWJsZSB0aGUgZmllbGRzZXQuJyk7CisgICAgZmllbGRT
ZXQuZGlzYWJsZWQgPSB0cnVlOworCisgICAgZGVidWcoJ0luc2VydGluZyB0ZXh0IHNob3VsZCBm
YWlsLicpCisgICAgdGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydFRleHQnLCBmYWxzZSwgJ0UnKTsKKyAgICBzaG91bGRCZSgndGV4dElucHV0LnZhbHVl
JywgJyJBQkNEIicpOworCisgICAgZGVidWcoJ0VuYWJsZSB0aGUgZmllbGRzZXQuJyk7CisgICAg
ZmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKworICAgIHRleHRJbnB1dC5mb2N1cygpOworICAg
IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdFJyk7CisgICAgc2hv
dWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDREUiJyk7Cit9CisKK2Z1bmN0aW9uIHRlc3RO
ZXN0ZWRGaWVsZFNldHMoKSB7CisgICAgZGVidWcoJ0NyZWF0aW5nIG5lc3RlZCBmaWVsZHNldCBl
bGVtZW50cy4nKTsKKyAgICBvdXRlckZpZWxkU2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZmllbGRzZXQnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyRmllbGRTZXQp
OworICAgIGlubmVyRmllbGRTZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWVsZHNldCcp
OworICAgIG91dGVyRmllbGRTZXQuYXBwZW5kQ2hpbGQoaW5uZXJGaWVsZFNldCk7CisgICAgb3V0
ZXJUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworICAgIG91dGVy
VGV4dElucHV0LnR5cGUgPSAidGV4dCI7CisgICAgb3V0ZXJGaWVsZFNldC5hcHBlbmRDaGlsZChv
dXRlclRleHRJbnB1dCk7CisgICAgaW5uZXJUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpbnB1dCcpOworICAgIGlubmVyVGV4dElucHV0LnR5cGUgPSAidGV4dCI7CisgICAgaW5u
ZXJGaWVsZFNldC5hcHBlbmRDaGlsZChpbm5lclRleHRJbnB1dCk7CisKKyAgICBkZWJ1ZygnVmVy
aWZ5aW5nIHRoYXQgc3Vib3JkaW5hdGVzIG9mIGJvdGggZmllbGRzZXRzIGFyZSBlbmFibGVkLicp
OworICAgIG91dGVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydFRleHQnLCBmYWxzZSwgJ0YnKTsKKyAgICBpbm5lclRleHRJbnB1dC5mb2N1cygpOwor
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdGJyk7CisgICAg
c2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGIicpOworICAgIHNob3VsZEJlKCdp
bm5lclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKworICAgIGRlYnVnKCdEaXNhYmxpbmcgdGhl
IGlubmVyIGZpZWxkc2V0IG9ubHkuJyk7CisgICAgaW5uZXJGaWVsZFNldC5kaXNhYmxlZCA9IHRy
dWU7CisgICAgb3V0ZXJUZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFu
ZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRycpOworICAgIGlubmVyVGV4dElucHV0LmZvY3VzKCk7
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0cnKTsKKyAg
ICBzaG91bGRCZSgnb3V0ZXJUZXh0SW5wdXQudmFsdWUnLCAnIkZHIicpOworICAgIHNob3VsZEJl
KCdpbm5lclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKworICAgIGRlYnVnKCdFbmFibGluZyB0
aGUgaW5uZXIgYW5kIGRpc2FibGluZyB0aGUgb3V0ZXIgZmllbGRzZXQuJyk7CisgICAgb3V0ZXJG
aWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CisgICAgaW5uZXJGaWVsZFNldC5kaXNhYmxlZCA9IGZh
bHNlOworICAgIG91dGVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKKyAgICBpbm5lclRleHRJbnB1dC5mb2N1cygp
OworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdIJyk7Cisg
ICAgc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGRyInKTsKKyAgICBzaG91bGRC
ZSgnaW5uZXJUZXh0SW5wdXQudmFsdWUnLCAnIkYiJyk7CisKKyAgICBkZWJ1ZygnRGlzYWJsaW5n
IGJvdGggZmllbGRzZXQgZWxlbWVudHMuJyk7CisgICAgb3V0ZXJGaWVsZFNldC5kaXNhYmxlZCA9
IHRydWU7CisgICAgaW5uZXJGaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CisgICAgb3V0ZXJUZXh0
SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZh
bHNlLCAnSCcpOworICAgIGlubmVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKKyAgICBzaG91bGRCZSgnb3V0ZXJU
ZXh0SW5wdXQudmFsdWUnLCAnIkZHIicpOworICAgIHNob3VsZEJlKCdpbm5lclRleHRJbnB1dC52
YWx1ZScsICciRiInKTsKKworICAgIGRlYnVnKCdFbmFibGluZyBib3RoIGZpZWxkc2V0IGVsZW1l
bnRzLicpOworICAgIG91dGVyRmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICBpbm5lckZp
ZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisgICAgb3V0ZXJUZXh0SW5wdXQuZm9jdXMoKTsKKyAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSCcpOworICAgIGlu
bmVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRl
eHQnLCBmYWxzZSwgJ0gnKTsKKyAgICBzaG91bGRCZSgnb3V0ZXJUZXh0SW5wdXQudmFsdWUnLCAn
IkZHSCInKTsKKyAgICBzaG91bGRCZSgnaW5uZXJUZXh0SW5wdXQudmFsdWUnLCAnIkZIIicpOwor
fQorCitmdW5jdGlvbiB0ZXN0Rmlyc3RMZWdlbmRJbkZpZWxkU2V0KCkgeworICAgIGxlZ2VuZEZp
ZWxkU2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQnKTsKKyAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGxlZ2VuZEZpZWxkU2V0KTsKKyAgICB2YXIgZmlyc3RMZWdlbmQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsZWdlbmQnKTsKKyAgICBsZWdlbmRGaWVsZFNldC5h
cHBlbmRDaGlsZChmaXJzdExlZ2VuZCk7CisgICAgdmFyIHNlY29uZExlZ2VuZCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2xlZ2VuZCcpOworICAgIGxlZ2VuZEZpZWxkU2V0LmFwcGVuZENoaWxk
KHNlY29uZExlZ2VuZCk7CisKKyAgICBmaXJzdExlZ2VuZFRleHRJbnB1dCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgZmlyc3RMZWdlbmRUZXh0SW5wdXQudHlwZSA9ICJ0
ZXh0IjsKKyAgICBmaXJzdExlZ2VuZC5hcHBlbmRDaGlsZChmaXJzdExlZ2VuZFRleHRJbnB1dCk7
CisKKyAgICBzZWNvbmRMZWdlbmRUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdp
bnB1dCcpOworICAgIHNlY29uZExlZ2VuZFRleHRJbnB1dC50eXBlID0gInRleHQiOworICAgIHNl
Y29uZExlZ2VuZC5hcHBlbmRDaGlsZChzZWNvbmRMZWdlbmRUZXh0SW5wdXQpOworCisgICAgZGVi
dWcoJ0NoaWxkcmVuIG9mIHRoZSBmaXJzdCBsZWdlbmQgZWxlbWVudCBpbiBhIGZpZWxkc2V0IHNo
b3VsZCBub3QgZ2V0IGRpc2FibGVkIHdpdGggdGhlIGZpZWxkc2V0LicpOworICAgIGxlZ2VuZEZp
ZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICBmaXJzdExlZ2VuZFRleHRJbnB1dC5mb2N1cygp
OworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdJJyk7Cisg
ICAgc2Vjb25kTGVnZW5kVGV4dElucHV0LmZvY3VzKCkKKyAgICBkb2N1bWVudC5leGVjQ29tbWFu
ZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSScpOworICAgIHNob3VsZEJlKCdmaXJzdExlZ2VuZFRl
eHRJbnB1dC52YWx1ZScsICciSSInKTsKKyAgICBzaG91bGRCZSgnc2Vjb25kTGVnZW5kVGV4dElu
cHV0LnZhbHVlJywgJyIiJyk7CisKKyAgICBkZWJ1ZygnSW5zZXJ0IGFub3RoZXIgbGVnZW5kIGVs
ZW1lbnQgYmVmb3JlIHRoZSBjdXJyZW50bHkgZmlyc3Qgb25lLCBhbmQgY2hlY2sgYWdhaW4uJyk7
CisgICAgdmFyIGluc2VydGVkTGVnZW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGVnZW5k
Jyk7CisgICAgbGVnZW5kRmllbGRTZXQuaW5zZXJ0QmVmb3JlKGluc2VydGVkTGVnZW5kLCBmaXJz
dExlZ2VuZCk7CisgICAgaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdpbnB1dCcpOworICAgIGluc2VydGVkTGVnZW5kLmFwcGVuZENoaWxkKGluc2VydGVk
TGVnZW5kVGV4dElucHV0KTsKKworICAgIGluc2VydGVkTGVnZW5kVGV4dElucHV0LmZvY3VzKCk7
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0onKTsKKyAg
ICBmaXJzdExlZ2VuZFRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5k
KCdpbnNlcnRUZXh0JywgZmFsc2UsICdKJyk7CisgICAgc2Vjb25kTGVnZW5kVGV4dElucHV0LmZv
Y3VzKCkKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSicp
OworICAgIHNob3VsZEJlKCdpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC52YWx1ZScsICciSiInKTsK
KyAgICBzaG91bGRCZSgnZmlyc3RMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIkkiJyk7CisgICAg
c2hvdWxkQmUoJ3NlY29uZExlZ2VuZFRleHRJbnB1dC52YWx1ZScsICciIicpOworCisgICAgZGVi
dWcoJ0VuYWJsZSB0aGUgZmllbGRzZXQgYWdhaW4gYW5kIGNoZWNrIGZvciBzYW5pdHkuJyk7Cisg
ICAgbGVnZW5kRmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICBpbnNlcnRlZExlZ2VuZFRl
eHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0Jywg
ZmFsc2UsICdLJyk7CisgICAgZmlyc3RMZWdlbmRUZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1
bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSycpOworICAgIHNlY29uZExl
Z2VuZFRleHRJbnB1dC5mb2N1cygpCisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRl
eHQnLCBmYWxzZSwgJ0snKTsKKyAgICBzaG91bGRCZSgnaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQu
dmFsdWUnLCAnIkpLIicpOworICAgIHNob3VsZEJlKCdmaXJzdExlZ2VuZFRleHRJbnB1dC52YWx1
ZScsICciSUsiJyk7CisgICAgc2hvdWxkQmUoJ3NlY29uZExlZ2VuZFRleHRJbnB1dC52YWx1ZScs
ICciSyInKTsKK30KKworZnVuY3Rpb24gdmVyaWZ5UGFyc2VyR2VuZXJhdGVkRmllbGRTZXRzKCkg
eworICAgIGRlYnVnKCdWZXJpZnlpbmcgcGFyc2VyIGdlbmVyYXRlZCBmaWVsZHNldHMuJyk7Cisg
ICAgdmFyIHBhcnNlckdlbmVyYXRlZElucHV0MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJw
YXJzZXJHZW5lcmF0ZWRJbnB1dDEiKTsKKyAgICB2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0MiIpOworICAgIHZh
ciBwYXJzZXJHZW5lcmF0ZWRJbnB1dDMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2Vy
R2VuZXJhdGVkSW5wdXQzIik7CisgICAgdmFyIHBhcnNlckdlbmVyYXRlZElucHV0NCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJbnB1dDQiKTsKKyAgICB2YXIgcGFy
c2VyR2VuZXJhdGVkSW5wdXQ1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcnNlckdlbmVy
YXRlZElucHV0NSIpOworICAgIHZhciBwYXJzZXJHZW5lcmF0ZWRJbnB1dDYgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJhdGVkSW5wdXQ2Iik7CisgICAgdmFyIHBhcnNlckdl
bmVyYXRlZElucHV0NyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJ
bnB1dDciKTsKKyAgICB2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQ4ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0OCIpOworICAgIHZhciBwYXJzZXJHZW5lcmF0
ZWRJbnB1dDkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJhdGVkSW5wdXQ5
Iik7CisKKyAgICBwYXJzZXJHZW5lcmF0ZWRJbnB1dDEuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5l
eGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnTCcpOworICAgIHBhcnNlckdlbmVyYXRl
ZElucHV0Mi5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0Jywg
ZmFsc2UsICdNJyk7CisgICAgcGFyc2VyR2VuZXJhdGVkSW5wdXQzLmZvY3VzKCk7CisgICAgZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ04nKTsKKyAgICBwYXJzZXJH
ZW5lcmF0ZWRJbnB1dDQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0
VGV4dCcsIGZhbHNlLCAnTycpOworICAgIHBhcnNlckdlbmVyYXRlZElucHV0NS5mb2N1cygpOwor
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdQJyk7CisgICAg
cGFyc2VyR2VuZXJhdGVkSW5wdXQ2LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydFRleHQnLCBmYWxzZSwgJ1EnKTsKKyAgICBwYXJzZXJHZW5lcmF0ZWRJbnB1dDcuZm9j
dXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnUicp
OworICAgIHBhcnNlckdlbmVyYXRlZElucHV0OC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWND
b21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdTJyk7CisgICAgcGFyc2VyR2VuZXJhdGVkSW5w
dXQ5LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxz
ZSwgJ1QnKTsKKworICAgIHNob3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDEudmFsdWUnLCAn
IkwiJyk7CisgICAgc2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRlZElucHV0Mi52YWx1ZScsICciTSIn
KTsKKyAgICBzaG91bGRCZSgncGFyc2VyR2VuZXJhdGVkSW5wdXQzLnZhbHVlJywgJyJOTyInKTsK
KyAgICBzaG91bGRCZSgncGFyc2VyR2VuZXJhdGVkSW5wdXQ0LnZhbHVlJywgJyIiJyk7CisgICAg
c2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRlZElucHV0NS52YWx1ZScsICciUCInKTsKKyAgICBzaG91
bGRCZSgncGFyc2VyR2VuZXJhdGVkSW5wdXQ2LnZhbHVlJywgJyIiJyk7CisgICAgc2hvdWxkQmUo
J3BhcnNlckdlbmVyYXRlZElucHV0Ny52YWx1ZScsICciIicpOworICAgIHNob3VsZEJlKCdwYXJz
ZXJHZW5lcmF0ZWRJbnB1dDgudmFsdWUnLCAnIiInKTsKKyAgICBzaG91bGRCZSgncGFyc2VyR2Vu
ZXJhdGVkSW5wdXQ5LnZhbHVlJywgJyIiJyk7Cit9CisKK3ZlcmlmeVBhcnNlckdlbmVyYXRlZEZp
ZWxkU2V0cygpOwordGVzdFNpbmdsZUZpZWxkU2V0KCk7Cit0ZXN0TmVzdGVkRmllbGRTZXRzKCk7
Cit0ZXN0Rmlyc3RMZWdlbmRJbkZpZWxkU2V0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDg0NGQ1OTQuLjMzY2I4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMi0w
Mi0yMCAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KKworICAgICAgICBGaWVsZHNl
dCBkaXNhYmxlZCBhdHRyaWJ1dGUgZG9lcyBub3Qgd29yay4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODM3CisKKyAgICAgICAgTWFrZSBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50cyBpbmhlcml0IHRoZSBkaXNhYmxlZCBzdGF0ZQorICAgICAgICBmcm9t
IEhUTUxGaWVsZFNldEVsZW1lbnQgYW5jZXN0b3JzLiBTdWJvcmRpbmF0ZXMgb2YgdGhlCisgICAg
ICAgIGZpcnN0IEhUTUxMZWdlbmRFbGVtZW50IGluIGEgZmllbGRzZXQgd2lsbCBuZXZlciBiZSBk
aXNhYmxlZC4KKworICAgICAgICBQYXRjaCBieSBOYW9raSBUYWthbm8gIDx0YWthbm8ubmFva2lA
Z21haWwuY29tPgorICAgICAgICBQYXRjaCB1cGRhdGVkIGJ5IFplbm8gQWxiaXNzZXIgPHplbm9A
d2Via2l0Lm9yZz4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVk
Lmh0bWwKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAq
IGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmll
bGRTZXRFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50Lmg6CisgICAgICAgIChIVE1M
RmllbGRTZXRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZUZvcm1BbmRG
aWVsZFNldEFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlRmllbGRTZXRBbmNlc3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpk
aXNhYmxlZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOgorCiAyMDEy
LTAyLTIwICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogW1N0eWxlc10gYm94LXNoYWRvdyBhbmQgLXdlYmtpdC1ib3gtc2hh
ZG93IHByb3BlcnRpZXMgYXJlIG5vdCBjb25zaWRlcmVkIGNvbG9yLWF3YXJlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKaW5kZXggZDJmM2Y0YS4uOTlh
NTI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNw
cApAQCAtOTEsNyArOTEsMTAgQEAgdm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVk
SW50b1RyZWUoKQogICAgICAgICAvLyBKYXZhU2NyaXB0IGFuZCBpbnNlcnRlZCBpbnNpZGUgYSBm
b3JtLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHBhcnNlcgogICAgICAgICAvLyBzZXR0aW5nIGEgZm9y
bSwgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYSBub24tbnVsbCB2YWx1ZSBmb3IgbV9mb3JtLAogICAg
ICAgICAvLyBhbmQgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICAgICAgc2V0
Rm9ybShlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCkpOworICAgICAgICBpZiAoZWxlbWVudC0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlRm9ybUFuZEZpZWxkU2V0QW5jZXN0b3Io
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0Rm9ybShlbGVtZW50LT5maW5kRm9ybUFu
Y2VzdG9yKCkpOwogICAgIH0KIH0KIApAQCAtMTUyLDE4ICsxNTUsMjEgQEAgdm9pZCBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKCkKICAgICAgICAgaWYgKGZvcm1JZC5pc051
bGwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgSFRNTEZvcm1FbGVtZW50KiBu
ZXdGb3JtID0gMDsKICAgICBpZiAoIWZvcm1JZC5pc051bGwoKSAmJiBlbGVtZW50LT5pbkRvY3Vt
ZW50KCkpIHsKICAgICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBlbGVtZW50
IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQg
aW4gdGhlIGRvY3VtZW50IHRvIGhhdmUgYW4gSUQgdGhhdCBlcXVhbCB0bwogICAgICAgICAvLyB0
aGUgdmFsdWUgb2YgZm9ybSBhdHRyaWJ1dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0IG9mCiAgICAg
ICAgIC8vIHRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1l
bnQuCiAgICAgICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGVsZW1lbnQtPnRyZWVTY29wZSgp
LT5nZXRFbGVtZW50QnlJZChmb3JtSWQpOwotICAgICAgICBpZiAoZmlyc3RFbGVtZW50ICYmIGZp
cnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKLSAgICAgICAgICAgIG5ld0Zvcm0gPSBz
dGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJzdEVsZW1lbnQpOworICAgICAgICBpZiAo
Zmlyc3RFbGVtZW50ICYmIGZpcnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgeworICAg
ICAgICAgICAgc2V0Rm9ybShzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJzdEVsZW1l
bnQpKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQor
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVt
ZW50KS0+dXBkYXRlRmllbGRTZXRBbmNlc3RvcigpOworICAgICAgICB9CisgICAgfSBlbHNlIGlm
IChlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlRm9ybUFuZEZpZWxkU2V0
QW5jZXN0b3IoKTsKICAgICB9IGVsc2UKLSAgICAgICAgbmV3Rm9ybSA9IGVsZW1lbnQtPmZpbmRG
b3JtQW5jZXN0b3IoKTsKLSAgICBzZXRGb3JtKG5ld0Zvcm0pOworICAgICAgICBzZXRGb3JtKGVs
ZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKSk7CiB9CiAKIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVt
ZW50Ojpmb3JtQXR0cmlidXRlQ2hhbmdlZCgpCkBAIC0xNzEsNyArMTc3LDEwIEBAIHZvaWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hhbmdlZCgpCiAgICAgSFRNTEVsZW1l
bnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KHRoaXMpOwogICAgIGlmICghZWxlbWVudC0+ZmFz
dEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKICAgICAgICAgLy8gVGhlIGZvcm0gYXR0cmlidXRl
IHJlbW92ZWQuIFdlIG5lZWQgdG8gcmVzZXQgZm9ybSBvd25lciBoZXJlLgotICAgICAgICBzZXRG
b3JtKGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKSk7CisgICAgICAgIGlmIChlbGVtZW50LT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1D
b250cm9sRWxlbWVudCo+KGVsZW1lbnQpLT51cGRhdGVGb3JtQW5kRmllbGRTZXRBbmNlc3Rvcigp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRGb3JtKGVsZW1lbnQtPmZpbmRGb3JtQW5j
ZXN0b3IoKSk7CiAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxl
bWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwogICAgIH0gZWxzZQogICAgICAgICByZXNldEZv
cm1Pd25lcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAK
aW5kZXggNGI5MDQxMi4uYjNkNmM1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExlZ2VuZEVs
ZW1lbnQuaCIKIAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckZpZWxk
c2V0LmgiCkBAIC00NCw2ICs0NSwxOCBAQCBQYXNzUmVmUHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+
IEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJgogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSFRNTEZpZWxkU2V0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwg
Zm9ybSkpOwogfQogCit2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmRpc2FibGVkQXR0cmlidXRl
Q2hhbmdlZCgpCit7CisgICAgLy8gVGhpcyBlbGVtZW50IG11c3QgYmUgdXBkYXRlZCBiZWZvcmUg
dGhlIHN0eWxlIG9mIG5vZGVzIGluIGl0cyBzdWJ0cmVlIGdldHMgcmVjYWxjdWxhdGVkLgorICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpOworCisg
ICAgZm9yIChOb2RlKiBjdXJyZW50Tm9kZSA9IHRoaXM7IGN1cnJlbnROb2RlOyBjdXJyZW50Tm9k
ZSA9IGN1cnJlbnROb2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChjdXJyZW50Tm9kZSk7CisgICAgICAgIGlm
IChlbGVtZW50ICYmIGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudCktPnNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKKyAgICB9Cit9CisKIGJvb2wgSFRNTEZpZWxkU2V0RWxlbWVudDo6c3Vw
cG9ydHNGb2N1cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpzdXBwb3J0c0Zv
Y3VzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCmluZGV4IGRj
YzhkMGMuLjRkYTIyMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxk
U2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVu
dC5oCkBAIC0zMiw2ICszMiw5IEBAIGNsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnQgOiBwdWJsaWMg
SFRNTEZvcm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTEZpZWxkU2V0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCosIEhUTUxGb3JtRWxlbWVudCopOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGRp
c2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpIE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIEhUTUxG
aWVsZFNldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1F
bGVtZW50Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0
RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRs
CmluZGV4IGRkNjk5YzAuLjg5NmMwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmll
bGRTZXRFbGVtZW50LmlkbApAQCAtMjAsNiArMjAsNyBAQAogbW9kdWxlIGh0bWwgewogCiAgICAg
aW50ZXJmYWNlIEhUTUxGaWVsZFNldEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CisgICAgICAgIGF0
dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiBkaXNhYmxlZDsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIEhUTUxGb3JtRWxlbWVudCBmb3JtOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
VmFsaWRpdHlTdGF0ZSAgIHZhbGlkaXR5OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9v
bGVhbiAgICAgICAgIHdpbGxWYWxpZGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDhhNzJkZjAuLjAxYTBkY2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMzIsOCArMzIs
MTAgQEAKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxMZWdlbmRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiTGFiZWxzTm9kZUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKQEAg
LTUwLDYgKzUyLDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQorICAgICwgbV9maWVsZFNldEFuY2VzdG9yKDApCisg
ICAgLCBtX2xlZ2VuZEFuY2VzdG9yKDApCiAgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQogICAgICwg
bV9yZWFkT25seShmYWxzZSkKICAgICAsIG1fcmVxdWlyZWQoZmFsc2UpCkBAIC02MCw3ICs2NCwx
MiBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvYwogICAgICwgbV93YXNDaGFuZ2VkU2luY2VMYXN0
Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudChmYWxzZSkKICAgICAsIG1faGFzQXV0b2ZvY3VzZWQoZmFs
c2UpCiB7Ci0gICAgc2V0Rm9ybShmb3JtID8gZm9ybSA6IGZpbmRGb3JtQW5jZXN0b3IoKSk7Cisg
ICAgaWYgKGZvcm0pIHsKKyAgICAgICAgc2V0Rm9ybShmb3JtKTsKKyAgICAgICAgdXBkYXRlRmll
bGRTZXRBbmNlc3RvcigpOworICAgIH0gZWxzZQorICAgICAgICB1cGRhdGVGb3JtQW5kRmllbGRT
ZXRBbmNlc3RvcigpOworCiAgICAgc2V0SGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUoKTsK
IH0KIApAQCAtOTksNiArMTA4LDQwIEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9y
bU5vVmFsaWRhdGUoKSBjb25zdAogICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKGZvcm1ub3Zh
bGlkYXRlQXR0cik7CiB9CiAKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlRm9y
bUFuZEZpZWxkU2V0QW5jZXN0b3IoKQoreworICAgIG1fZmllbGRTZXRBbmNlc3RvciA9IDA7Cisg
ICAgbV9sZWdlbmRBbmNlc3RvciA9IDA7CisgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtQW5jZXN0
b3IgPSAwOworICAgIGZvciAoQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7
IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAg
aWYgKCFmb3JtQW5jZXN0b3IgJiYgYW5jZXN0b3ItPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsKKyAg
ICAgICAgICAgIGZvcm1BbmNlc3RvciA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGFu
Y2VzdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghbV9m
aWVsZFNldEFuY2VzdG9yICYmIGFuY2VzdG9yLT5oYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSkKKyAg
ICAgICAgICAgIG1fZmllbGRTZXRBbmNlc3RvciA9IHN0YXRpY19jYXN0PEhUTUxGaWVsZFNldEVs
ZW1lbnQqPihhbmNlc3Rvcik7CisgICAgICAgIGlmICghbV9sZWdlbmRBbmNlc3RvciAmJiBhbmNl
c3Rvci0+aGFzVGFnTmFtZShsZWdlbmRUYWcpKQorICAgICAgICAgICAgbV9sZWdlbmRBbmNlc3Rv
ciA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50Kj4oYW5jZXN0b3IpOworICAgIH0KKwor
ICAgIGlmIChmb3JtQW5jZXN0b3IpCisgICAgICAgIHNldEZvcm0oZm9ybUFuY2VzdG9yKTsKK30K
Kwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVGaWVsZFNldEFuY2VzdG9yKCkK
K3sKKyAgICBtX2ZpZWxkU2V0QW5jZXN0b3IgPSAwOworICAgIG1fbGVnZW5kQW5jZXN0b3IgPSAw
OworICAgIGZvciAoQ29udGFpbmVyTm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7IGFuY2Vz
dG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKCFt
X2ZpZWxkU2V0QW5jZXN0b3IgJiYgYW5jZXN0b3ItPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKSB7
CisgICAgICAgICAgICBtX2ZpZWxkU2V0QW5jZXN0b3IgPSBzdGF0aWNfY2FzdDxIVE1MRmllbGRT
ZXRFbGVtZW50Kj4oYW5jZXN0b3IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFtX2xlZ2VuZEFuY2VzdG9yICYmIGFuY2VzdG9yLT5oYXNUYWdOYW1lKGxlZ2Vu
ZFRhZykpCisgICAgICAgICAgICBtX2xlZ2VuZEFuY2VzdG9yID0gc3RhdGljX2Nhc3Q8SFRNTExl
Z2VuZEVsZW1lbnQqPihhbmNlc3Rvcik7CisgICAgfQorfQorCiB2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0
ci0+bmFtZSgpID09IGZvcm1BdHRyKQpAQCAtMTA2LDExICsxNDksOCBAQCB2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRyKSB7CiAgICAgICAgIGJvb2wgb2xkRGlz
YWJsZWQgPSBtX2Rpc2FibGVkOwogICAgICAgICBtX2Rpc2FibGVkID0gIWF0dHItPmlzTnVsbCgp
OwotICAgICAgICBpZiAob2xkRGlzYWJsZWQgIT0gbV9kaXNhYmxlZCkgewotICAgICAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVu
ZGVyZXIoKS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgICAgIHJlbmRl
cmVyKCktPnRoZW1lKCktPnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBFbmFibGVkU3RhdGUpOwot
ICAgICAgICB9CisgICAgICAgIGlmIChvbGREaXNhYmxlZCAhPSBtX2Rpc2FibGVkKQorICAgICAg
ICAgICAgZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gcmVhZG9ubHlBdHRyKSB7CiAgICAgICAgIGJvb2wgb2xkUmVhZE9ubHkgPSBtX3Jl
YWRPbmx5OwogICAgICAgICBtX3JlYWRPbmx5ID0gIWF0dHItPmlzTnVsbCgpOwpAQCAtMTI5LDYg
KzE2OSwxMyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKEF0
dHJpYnV0ZSogYXR0cikKICAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7CiB9CiAKK3Zv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sK
KyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQorICAgICAgICByZW5kZXJlcigpLT50aGVt
ZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKK30KKwogdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoKQogewogICAg
IHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwpAQCAtMjA1LDYgKzI1Miw3IEBAIHZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCiB7CiAgICAgRm9y
bUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKCk7CiAgICAgSFRNTEVsZW1lbnQ6
Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CisgICAgdXBkYXRlRm9ybUFuZEZpZWxkU2V0QW5jZXN0
b3IoKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUo
Ym9vbCBkZWVwKQpAQCAtMjU4LDYgKzMwNiwxMyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCkKICAgICBIVE1MRWxlbWVudDo6ZGlz
cGF0Y2hJbnB1dEV2ZW50KCk7CiB9CiAKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlz
YWJsZWQoKSBjb25zdAoreworICAgIGJvb2wgaW5GaXJzdExlZ2VuZE9mRmllbGRTZXQgPSBtX2Zp
ZWxkU2V0QW5jZXN0b3IgJiYgbV9sZWdlbmRBbmNlc3RvcgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgbV9sZWdlbmRBbmNlc3RvciA9PSBtX2ZpZWxkU2V0QW5jZXN0b3It
PmZpcnN0RWxlbWVudENoaWxkKCk7CisgICAgcmV0dXJuICFpbkZpcnN0TGVnZW5kT2ZGaWVsZFNl
dCAmJiAobV9kaXNhYmxlZCB8fCAobV9maWVsZFNldEFuY2VzdG9yICYmIG1fZmllbGRTZXRBbmNl
c3Rvci0+ZGlzYWJsZWQoKSkpOworfQorCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNl
dERpc2FibGVkKGJvb2wgYikKIHsKICAgICBzZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyLCBiID8g
IiIgOiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgK
aW5kZXggMWJkNDg1OS4uMWU1NTAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmgKQEAgLTMwLDcgKzMwLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRm9ybURhdGFMaXN0OworY2xhc3MgSFRNTEZpZWxkU2V0RWxlbWVudDsKIGNsYXNz
IEhUTUxGb3JtRWxlbWVudDsKK2NsYXNzIEhUTUxMZWdlbmRFbGVtZW50OwogY2xhc3MgVmFsaWRh
dGlvbk1lc3NhZ2U7CiBjbGFzcyBWYWxpZGl0eVN0YXRlOwogCkBAIC00OSw2ICs1MSw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEZvcm1NZXRob2QoY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCBm
b3JtTm9WYWxpZGF0ZSgpIGNvbnN0OwogCisgICAgdm9pZCB1cGRhdGVGb3JtQW5kRmllbGRTZXRB
bmNlc3RvcigpOworICAgIHZvaWQgdXBkYXRlRmllbGRTZXRBbmNlc3RvcigpOworCiAgICAgdmly
dHVhbCB2b2lkIHJlc2V0KCkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1
ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7
IH0KQEAgLTYwLDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb3JtQ29u
dHJvbElucHV0RXZlbnQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzYWJsZWQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsK
ICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNh
YmxlKCkgY29uc3Q7CkBAIC0xMTYsNiArMTIxLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlQXR0cmlidXRlKEF0dHJpYnV0ZSopIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCByZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJs
ZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApOwpAQCAtMTQ5LDYgKzE1NSw4IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKTsKICAgICBTdHJp
bmcgdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3Q7CiAKKyAgICBIVE1MRmllbGRTZXRF
bGVtZW50KiBtX2ZpZWxkU2V0QW5jZXN0b3I7CisgICAgSFRNTExlZ2VuZEVsZW1lbnQqIG1fbGVn
ZW5kQW5jZXN0b3I7CiAgICAgT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25N
ZXNzYWdlOwogICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7CiAgICAgYm9vbCBtX3JlYWRPbmx5IDog
MTsK
</data>
<flag name="review"
          id="130035"
          type_id="1"
          status="-"
          setter="tkent"
    />
    <flag name="commit-queue"
          id="130049"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133832</attachid>
            <date>2012-03-26 09:32:54 -0700</date>
            <delta_ts>2012-03-27 14:38:22 -0700</delta_ts>
            <desc>patch for review. - updated as requested.</desc>
            <filename>58837_20120326-183108.patch</filename>
            <type>text/plain</type>
            <size>29440</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlYWU3MzRiLi5mZjU2YzNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDMt
MjYgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmllbGRzZXQg
ZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgIEFkZCBhIHRlc3QgY2Fz
ZSBmb3IgZmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZmllbGRzZXQtZGlz
YWJsZWQuaHRtbDogQWRkZWQuCisKIDIwMTItMDMtMjEgIExpIFlpbiAgPGxpLnlpbkBpbnRlbC5j
b20+CiAKICAgICAgICAgW1dlYlNvY2tldF1UaGUgU2VjLVdlYlNvY2tldC1BY2NlcHQgTVVTVCBO
T1QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIGFuIEhUVFAgcmVzcG9uc2UKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhZTAyOAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsODUgQEAKK1Rlc3RzIGZvciBIVE1MRmllbGRTZXRFbGVtZW50LmRpc2FibGVk
IGJlaGF2aW9yLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVmVyaWZ5aW5nIHBh
cnNlciBnZW5lcmF0ZWQgZmllbGRzZXRzLgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDEudmFs
dWUgaXMgIkwiCitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0Mi52YWx1ZSBpcyAiTSIKK1BBU1Mg
cGFyc2VyR2VuZXJhdGVkSW5wdXQzLnZhbHVlIGlzICJOTyIKK1BBU1MgcGFyc2VyR2VuZXJhdGVk
SW5wdXQ0LnZhbHVlIGlzICIiCitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0NS52YWx1ZSBpcyAi
UCIKK1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQ2LnZhbHVlIGlzICIiCitQQVNTIHBhcnNlckdl
bmVyYXRlZElucHV0Ny52YWx1ZSBpcyAiIgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDgudmFs
dWUgaXMgIiIKK1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQ5LnZhbHVlIGlzICIiCitWZXJpZnlp
bmcgSFRNTEZvcm1Db250cm9sIGNhbiBiZSBkaXNhYmxlZCByZWdhcmRsZXNzIG9mIGVuY2xvc2lu
ZyBmaWVsZHNldC4KK1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICIiCitQQVNTIGZhbHNlIGlzIGZh
bHNlCitGaWVsZHNldCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEEgdXNlciBjYW4gaW5zZXJ0VGV4
dCBpbnRvIHRoZSB0ZXh0IGlucHV0IGZpZWxkLgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkEi
CitEaXNhYmxlIGZpZWxkc2V0LgorT25jZSB0aGUgZmllbGRzZXQgaXMgZGlzYWJsZWQsIHRleHQg
Y2Fubm90IGJlIGluc2VydGVkLgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkEiCitDaGVjayBp
ZiB0aGUgc3R5bGUgb2YgdGhlIHRleHQgZWxlbWVudCBjaGFuZ2VkLgorUEFTUyBnZXRDb21wdXRl
ZFN0eWxlKHRleHRJbnB1dCkuYmFja2dyb3VuZENvbG9yIGlzICdyZ2IoMjU1LCAwLCAwKScKK0Vu
YWJsZSBmaWVsZHNldC4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0SW5wdXQpLmJhY2tncm91
bmRDb2xvciBpcyAncmdiKDI1NSwgMjU1LCAxMDApJworUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMg
IkFCIgorTW92ZSB0aGUgdGV4dGlucHV0IGVsZW1lbnQgb3V0IG9mIHRoZSBmaWVsZHNldC4KK0Rp
c2FibGUgdGhlIGZpZWxkc2V0LgorVGV4dCBjYW4gYmUgaW5zZXJ0ZWQsIGJlY2F1c2UgdGhlIHRl
eHRpbnB1dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgdGhlIGRpc2FibGVkIGZpZWxkc2V0LgorUEFT
UyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQyIKK0VuYWJsZSB0aGUgZmllbGRzZXQuCitJbnNlcnQg
YSB0YWJsZSBpbnRvIHRoZSBmaWVsZHNldC4KK01vdmUgdGhlIHRleHRpbnB1dCBmaWVsZCBpbnRv
IHRoZSB0YWJsZS4KK1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBQkNEIgorRGlzYWJsZSB0aGUg
ZmllbGRzZXQuCitJbnNlcnRpbmcgdGV4dCBzaG91bGQgZmFpbC4KK1BBU1MgdGV4dElucHV0LnZh
bHVlIGlzICJBQkNEIgorRW5hYmxlIHRoZSBmaWVsZHNldC4KK1BBU1MgdGV4dElucHV0LnZhbHVl
IGlzICJBQkNERSIKK0NyZWF0aW5nIG5lc3RlZCBmaWVsZHNldCBlbGVtZW50cy4KK1ZlcmlmeWlu
ZyB0aGF0IHN1Ym9yZGluYXRlcyBvZiBib3RoIGZpZWxkc2V0cyBhcmUgZW5hYmxlZC4KK1BBU1Mg
b3V0ZXJUZXh0SW5wdXQudmFsdWUgaXMgIkYiCitQQVNTIGlubmVyVGV4dElucHV0LnZhbHVlIGlz
ICJGIgorRGlzYWJsaW5nIHRoZSBpbm5lciBmaWVsZHNldCBvbmx5LgorUEFTUyBvdXRlclRleHRJ
bnB1dC52YWx1ZSBpcyAiRkciCitQQVNTIGlubmVyVGV4dElucHV0LnZhbHVlIGlzICJGIgorRW5h
YmxpbmcgdGhlIGlubmVyIGFuZCBkaXNhYmxpbmcgdGhlIG91dGVyIGZpZWxkc2V0LgorUEFTUyBv
dXRlclRleHRJbnB1dC52YWx1ZSBpcyAiRkciCitQQVNTIGlubmVyVGV4dElucHV0LnZhbHVlIGlz
ICJGIgorRGlzYWJsaW5nIGJvdGggZmllbGRzZXQgZWxlbWVudHMuCitQQVNTIG91dGVyVGV4dElu
cHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFsdWUgaXMgIkYiCitFbmFi
bGluZyBib3RoIGZpZWxkc2V0IGVsZW1lbnRzLgorUEFTUyBvdXRlclRleHRJbnB1dC52YWx1ZSBp
cyAiRkdIIgorUEFTUyBpbm5lclRleHRJbnB1dC52YWx1ZSBpcyAiRkgiCitDaGlsZHJlbiBvZiB0
aGUgZmlyc3QgbGVnZW5kIGVsZW1lbnQgaW4gYSBmaWVsZHNldCBzaG91bGQgbm90IGdldCBkaXNh
YmxlZCB3aXRoIHRoZSBmaWVsZHNldC4KK1BBU1MgZmlyc3RMZWdlbmRUZXh0SW5wdXQudmFsdWUg
aXMgIkkiCitQQVNTIHNlY29uZExlZ2VuZFRleHRJbnB1dC52YWx1ZSBpcyAiIgorSW5zZXJ0IGFu
b3RoZXIgbGVnZW5kIGVsZW1lbnQgYmVmb3JlIHRoZSBjdXJyZW50bHkgZmlyc3Qgb25lLCBhbmQg
Y2hlY2sgYWdhaW4uCitQQVNTIGluc2VydGVkTGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICJKIgor
UEFTUyBmaXJzdExlZ2VuZFRleHRJbnB1dC52YWx1ZSBpcyAiSSIKK1BBU1Mgc2Vjb25kTGVnZW5k
VGV4dElucHV0LnZhbHVlIGlzICIiCitFbmFibGUgdGhlIGZpZWxkc2V0IGFnYWluIGFuZCBjaGVj
ayBmb3Igc2FuaXR5LgorUEFTUyBpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC52YWx1ZSBpcyAiSksi
CitQQVNTIGZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICJJSyIKK1BBU1Mgc2Vjb25kTGVn
ZW5kVGV4dElucHV0LnZhbHVlIGlzICJLIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKKworIAorCisKKyAKKworCisKKworCisKKworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlMDc5OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbApAQCAtMCwwICsxLDMwMyBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Citp
bnB1dCB7CisgICAgYmFja2dyb3VuZDpyZ2IoMjU1LDI1NSwxMDApOworfQoraW5wdXQ6ZGlzYWJs
ZWQgeworICAgIGJhY2tncm91bmQ6cmdiKDI1NSwwLDApOworfQorPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxmb3JtPgorPGZpZWxkc2V0PgorPGxlZ2VuZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBh
cnNlckdlbmVyYXRlZElucHV0MSI+PC9sZWdlbmQ+Cis8bGVnZW5kPjxpbnB1dCB0eXBlPSJ0ZXh0
IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQyIj48L2xlZ2VuZD4KKzxpbnB1dCB0eXBlPSJ0ZXh0
IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQzIj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGFy
c2VyR2VuZXJhdGVkSW5wdXQ0IiBkaXNhYmxlZD4KKzwvZmllbGRzZXQ+Cis8ZmllbGRzZXQgZGlz
YWJsZWQ+Cis8bGVnZW5kPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5w
dXQ1Ij48L2xlZ2VuZD4KKzxsZWdlbmQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5l
cmF0ZWRJbnB1dDYiPjwvbGVnZW5kPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5l
cmF0ZWRJbnB1dDciPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1
dDgiIGRpc2FibGVkPgorPC9maWVsZHNldD4KKzxmaWVsZHNldCBkaXNhYmxlZD4KKzxpbnB1dCB0
eXBlPSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQ5Ij4KKzwvZmllbGRzZXQ+Cis8L2Zv
cm0+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdHMgZm9yIEhUTUxGaWVsZFNldEVsZW1l
bnQuZGlzYWJsZWQgYmVoYXZpb3IuJyk7CisKK3ZhciBmaWVsZFNldCA9IDA7Cit2YXIgdGV4dElu
cHV0ID0gMDsKK3ZhciBvdXRlckZpZWxkU2V0ID0gMDsKK3ZhciBvdXRlclRleHRJbnB1dCA9IDA7
Cit2YXIgaW5uZXJGaWVsZFNldCA9IDA7Cit2YXIgaW5uZXJUZXh0SW5wdXQgPSAwOwordmFyIGxl
Z2VuZEZpZWxkU2V0ID0gMDsKK3ZhciBmaXJzdExlZ2VuZFRleHRJbnB1dCA9IDA7Cit2YXIgc2Vj
b25kTGVnZW5kVGV4dElucHV0ID0gMDsKK3ZhciBpbnNlcnRlZExlZ2VuZFRleHRJbnB1dCA9IDA7
CisKK2Z1bmN0aW9uIHRlc3RTaW5nbGVGaWVsZFNldCgpIHsKKyAgICBmaWVsZFNldCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZWxkc2V0Jyk7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChmaWVsZFNldCk7CisgICAgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aW5wdXQnKTsKKyAgICB0ZXh0SW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgICBmaWVsZFNldC5hcHBl
bmRDaGlsZCh0ZXh0SW5wdXQpOworCisgICAgZGVidWcoJ1ZlcmlmeWluZyBIVE1MRm9ybUNvbnRy
b2wgY2FuIGJlIGRpc2FibGVkIHJlZ2FyZGxlc3Mgb2YgZW5jbG9zaW5nIGZpZWxkc2V0LicpOwor
ICAgIHRleHRJbnB1dC5kaXNhYmxlZCA9IHRydWU7CisgICAgdGV4dElucHV0LmZvY3VzKCk7Cisg
ICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0EnKTsKKyAgICBz
aG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyIiJyk7CisgICAgc2hvdWxkQmVGYWxzZShmaWVs
ZFNldC5kaXNhYmxlZC50b1N0cmluZygpKTsKKyAgICB0ZXh0SW5wdXQuZGlzYWJsZWQgPSBmYWxz
ZTsKKworICAgIGRlYnVnKCdGaWVsZHNldCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEEgdXNlciBj
YW4gaW5zZXJ0VGV4dCBpbnRvIHRoZSB0ZXh0IGlucHV0IGZpZWxkLicpOworICAgIHRleHRJbnB1
dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2Us
ICdBJyk7CisgICAgc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQSInKTsKKworICAgIGRl
YnVnKCdEaXNhYmxlIGZpZWxkc2V0LicpOworICAgIGZpZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsK
KworICAgIGRlYnVnKCdPbmNlIHRoZSBmaWVsZHNldCBpcyBkaXNhYmxlZCwgdGV4dCBjYW5ub3Qg
YmUgaW5zZXJ0ZWQuJyk7CisgICAgdGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0InKTsKKyAgICBzaG91bGRCZSgndGV4dElu
cHV0LnZhbHVlJywgJyJBIicpOworCisgICAgZGVidWcoIkNoZWNrIGlmIHRoZSBzdHlsZSBvZiB0
aGUgdGV4dCBlbGVtZW50IGNoYW5nZWQuIik7CisgICAgc2hvdWxkQmUoImdldENvbXB1dGVkU3R5
bGUodGV4dElucHV0KS5iYWNrZ3JvdW5kQ29sb3IiLCAiJ3JnYigyNTUsIDAsIDApJyIpOworCisg
ICAgZGVidWcoJ0VuYWJsZSBmaWVsZHNldC4nKTsKKyAgICBmaWVsZFNldC5kaXNhYmxlZCA9IGZh
bHNlOworICAgIHNob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHRleHRJbnB1dCkuYmFja2dyb3Vu
ZENvbG9yIiwgIidyZ2IoMjU1LCAyNTUsIDEwMCknIik7CisKKyAgICB0ZXh0SW5wdXQuZm9jdXMo
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQicpOwor
ICAgIHNob3VsZEJlKCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCIicpOworCisgICAgZGVidWcoJ01v
dmUgdGhlIHRleHRpbnB1dCBlbGVtZW50IG91dCBvZiB0aGUgZmllbGRzZXQuJyk7CisgICAgZmll
bGRTZXQucmVtb3ZlQ2hpbGQodGV4dElucHV0KTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKHRleHRJbnB1dCk7CisKKyAgICBkZWJ1ZygnRGlzYWJsZSB0aGUgZmllbGRzZXQuJyk7Cisg
ICAgZmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworCisgICAgZGVidWcoJ1RleHQgY2FuIGJlIGlu
c2VydGVkLCBiZWNhdXNlIHRoZSB0ZXh0aW5wdXQgZWxlbWVudCBpcyBvdXRzaWRlIG9mIHRoZSBk
aXNhYmxlZCBmaWVsZHNldC4nKTsKKyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVu
dC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQycpOworICAgIHNob3VsZEJlKCd0
ZXh0SW5wdXQudmFsdWUnLCAnIkFCQyInKTsKKworICAgIGRlYnVnKCdFbmFibGUgdGhlIGZpZWxk
c2V0LicpOworICAgIGZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICBkZWJ1ZygnSW5z
ZXJ0IGEgdGFibGUgaW50byB0aGUgZmllbGRzZXQuJyk7CisgICAgdmFyIHRhYmxlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTsKKyAgICBmaWVsZFNldC5hcHBlbmRDaGlsZCh0YWJs
ZSk7CisgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKKyAgICB0YWJs
ZS5hcHBlbmRDaGlsZCh0cik7CisgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
dGQnKTsKKyAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CisKKyAgICBkZWJ1ZygnTW92ZSB0aGUgdGV4
dGlucHV0IGZpZWxkIGludG8gdGhlIHRhYmxlLicpOworICAgIGRvY3VtZW50LmJvZHkucmVtb3Zl
Q2hpbGQodGV4dElucHV0KTsKKyAgICB0ZC5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQpOworCisgICAg
dGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQn
LCBmYWxzZSwgJ0QnKTsKKyAgICBzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJBQkNEIicp
OworCisgICAgZGVidWcoJ0Rpc2FibGUgdGhlIGZpZWxkc2V0LicpOworICAgIGZpZWxkU2V0LmRp
c2FibGVkID0gdHJ1ZTsKKworICAgIGRlYnVnKCdJbnNlcnRpbmcgdGV4dCBzaG91bGQgZmFpbC4n
KQorICAgIHRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNl
cnRUZXh0JywgZmFsc2UsICdFJyk7CisgICAgc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICci
QUJDRCInKTsKKworICAgIGRlYnVnKCdFbmFibGUgdGhlIGZpZWxkc2V0LicpOworICAgIGZpZWxk
U2V0LmRpc2FibGVkID0gZmFsc2U7CisKKyAgICB0ZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1
bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRScpOworICAgIHNob3VsZEJl
KCd0ZXh0SW5wdXQudmFsdWUnLCAnIkFCQ0RFIicpOworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVk
RmllbGRTZXRzKCkgeworICAgIGRlYnVnKCdDcmVhdGluZyBuZXN0ZWQgZmllbGRzZXQgZWxlbWVu
dHMuJyk7CisgICAgb3V0ZXJGaWVsZFNldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZWxk
c2V0Jyk7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlckZpZWxkU2V0KTsKKyAg
ICBpbm5lckZpZWxkU2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmllbGRzZXQnKTsKKyAg
ICBvdXRlckZpZWxkU2V0LmFwcGVuZENoaWxkKGlubmVyRmllbGRTZXQpOworICAgIG91dGVyVGV4
dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICBvdXRlclRleHRJ
bnB1dC50eXBlID0gInRleHQiOworICAgIG91dGVyRmllbGRTZXQuYXBwZW5kQ2hpbGQob3V0ZXJU
ZXh0SW5wdXQpOworICAgIGlubmVyVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aW5wdXQnKTsKKyAgICBpbm5lclRleHRJbnB1dC50eXBlID0gInRleHQiOworICAgIGlubmVyRmll
bGRTZXQuYXBwZW5kQ2hpbGQoaW5uZXJUZXh0SW5wdXQpOworCisgICAgZGVidWcoJ1ZlcmlmeWlu
ZyB0aGF0IHN1Ym9yZGluYXRlcyBvZiBib3RoIGZpZWxkc2V0cyBhcmUgZW5hYmxlZC4nKTsKKyAg
ICBvdXRlclRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNl
cnRUZXh0JywgZmFsc2UsICdGJyk7CisgICAgaW5uZXJUZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBk
b2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRicpOworICAgIHNob3Vs
ZEJlKCdvdXRlclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKyAgICBzaG91bGRCZSgnaW5uZXJU
ZXh0SW5wdXQudmFsdWUnLCAnIkYiJyk7CisKKyAgICBkZWJ1ZygnRGlzYWJsaW5nIHRoZSBpbm5l
ciBmaWVsZHNldCBvbmx5LicpOworICAgIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOwor
ICAgIG91dGVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2lu
c2VydFRleHQnLCBmYWxzZSwgJ0cnKTsKKyAgICBpbm5lclRleHRJbnB1dC5mb2N1cygpOworICAg
IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdHJyk7CisgICAgc2hv
dWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGRyInKTsKKyAgICBzaG91bGRCZSgnaW5u
ZXJUZXh0SW5wdXQudmFsdWUnLCAnIkYiJyk7CisKKyAgICBkZWJ1ZygnRW5hYmxpbmcgdGhlIGlu
bmVyIGFuZCBkaXNhYmxpbmcgdGhlIG91dGVyIGZpZWxkc2V0LicpOworICAgIG91dGVyRmllbGRT
ZXQuZGlzYWJsZWQgPSB0cnVlOworICAgIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsK
KyAgICBvdXRlclRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdp
bnNlcnRUZXh0JywgZmFsc2UsICdIJyk7CisgICAgaW5uZXJUZXh0SW5wdXQuZm9jdXMoKTsKKyAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSCcpOworICAgIHNo
b3VsZEJlKCdvdXRlclRleHRJbnB1dC52YWx1ZScsICciRkciJyk7CisgICAgc2hvdWxkQmUoJ2lu
bmVyVGV4dElucHV0LnZhbHVlJywgJyJGIicpOworCisgICAgZGVidWcoJ0Rpc2FibGluZyBib3Ro
IGZpZWxkc2V0IGVsZW1lbnRzLicpOworICAgIG91dGVyRmllbGRTZXQuZGlzYWJsZWQgPSB0cnVl
OworICAgIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworICAgIG91dGVyVGV4dElucHV0
LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwg
J0gnKTsKKyAgICBpbm5lclRleHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21t
YW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdIJyk7CisgICAgc2hvdWxkQmUoJ291dGVyVGV4dElu
cHV0LnZhbHVlJywgJyJGRyInKTsKKyAgICBzaG91bGRCZSgnaW5uZXJUZXh0SW5wdXQudmFsdWUn
LCAnIkYiJyk7CisKKyAgICBkZWJ1ZygnRW5hYmxpbmcgYm90aCBmaWVsZHNldCBlbGVtZW50cy4n
KTsKKyAgICBvdXRlckZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisgICAgaW5uZXJGaWVsZFNl
dC5kaXNhYmxlZCA9IGZhbHNlOworICAgIG91dGVyVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKKyAgICBpbm5lclRl
eHRJbnB1dC5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0Jywg
ZmFsc2UsICdIJyk7CisgICAgc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGR0gi
Jyk7CisgICAgc2hvdWxkQmUoJ2lubmVyVGV4dElucHV0LnZhbHVlJywgJyJGSCInKTsKK30KKwor
ZnVuY3Rpb24gdGVzdEZpcnN0TGVnZW5kSW5GaWVsZFNldCgpIHsKKyAgICBsZWdlbmRGaWVsZFNl
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZWxkc2V0Jyk7CisgICAgZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChsZWdlbmRGaWVsZFNldCk7CisgICAgdmFyIGZpcnN0TGVnZW5kID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnbGVnZW5kJyk7CisgICAgbGVnZW5kRmllbGRTZXQuYXBwZW5k
Q2hpbGQoZmlyc3RMZWdlbmQpOworICAgIHZhciBzZWNvbmRMZWdlbmQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdsZWdlbmQnKTsKKyAgICBsZWdlbmRGaWVsZFNldC5hcHBlbmRDaGlsZChzZWNv
bmRMZWdlbmQpOworCisgICAgZmlyc3RMZWdlbmRUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdpbnB1dCcpOworICAgIGZpcnN0TGVnZW5kVGV4dElucHV0LnR5cGUgPSAidGV4dCI7
CisgICAgZmlyc3RMZWdlbmQuYXBwZW5kQ2hpbGQoZmlyc3RMZWdlbmRUZXh0SW5wdXQpOworCisg
ICAgc2Vjb25kTGVnZW5kVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQn
KTsKKyAgICBzZWNvbmRMZWdlbmRUZXh0SW5wdXQudHlwZSA9ICJ0ZXh0IjsKKyAgICBzZWNvbmRM
ZWdlbmQuYXBwZW5kQ2hpbGQoc2Vjb25kTGVnZW5kVGV4dElucHV0KTsKKworICAgIGRlYnVnKCdD
aGlsZHJlbiBvZiB0aGUgZmlyc3QgbGVnZW5kIGVsZW1lbnQgaW4gYSBmaWVsZHNldCBzaG91bGQg
bm90IGdldCBkaXNhYmxlZCB3aXRoIHRoZSBmaWVsZHNldC4nKTsKKyAgICBsZWdlbmRGaWVsZFNl
dC5kaXNhYmxlZCA9IHRydWU7CisgICAgZmlyc3RMZWdlbmRUZXh0SW5wdXQuZm9jdXMoKTsKKyAg
ICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSScpOworICAgIHNl
Y29uZExlZ2VuZFRleHRJbnB1dC5mb2N1cygpCisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2lu
c2VydFRleHQnLCBmYWxzZSwgJ0knKTsKKyAgICBzaG91bGRCZSgnZmlyc3RMZWdlbmRUZXh0SW5w
dXQudmFsdWUnLCAnIkkiJyk7CisgICAgc2hvdWxkQmUoJ3NlY29uZExlZ2VuZFRleHRJbnB1dC52
YWx1ZScsICciIicpOworCisgICAgZGVidWcoJ0luc2VydCBhbm90aGVyIGxlZ2VuZCBlbGVtZW50
IGJlZm9yZSB0aGUgY3VycmVudGx5IGZpcnN0IG9uZSwgYW5kIGNoZWNrIGFnYWluLicpOworICAg
IHZhciBpbnNlcnRlZExlZ2VuZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xlZ2VuZCcpOwor
ICAgIGxlZ2VuZEZpZWxkU2V0Lmluc2VydEJlZm9yZShpbnNlcnRlZExlZ2VuZCwgZmlyc3RMZWdl
bmQpOworICAgIGluc2VydGVkTGVnZW5kVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnaW5wdXQnKTsKKyAgICBpbnNlcnRlZExlZ2VuZC5hcHBlbmRDaGlsZChpbnNlcnRlZExlZ2Vu
ZFRleHRJbnB1dCk7CisKKyAgICBpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC5mb2N1cygpOworICAg
IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdKJyk7CisgICAgZmly
c3RMZWdlbmRUZXh0SW5wdXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5z
ZXJ0VGV4dCcsIGZhbHNlLCAnSicpOworICAgIHNlY29uZExlZ2VuZFRleHRJbnB1dC5mb2N1cygp
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0onKTsKKyAg
ICBzaG91bGRCZSgnaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIkoiJyk7CisgICAg
c2hvdWxkQmUoJ2ZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVlJywgJyJJIicpOworICAgIHNob3Vs
ZEJlKCdzZWNvbmRMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIiInKTsKKworICAgIGRlYnVnKCdF
bmFibGUgdGhlIGZpZWxkc2V0IGFnYWluIGFuZCBjaGVjayBmb3Igc2FuaXR5LicpOworICAgIGxl
Z2VuZEZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CisgICAgaW5zZXJ0ZWRMZWdlbmRUZXh0SW5w
dXQuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNl
LCAnSycpOworICAgIGZpcnN0TGVnZW5kVGV4dElucHV0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQu
ZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0snKTsKKyAgICBzZWNvbmRMZWdlbmRU
ZXh0SW5wdXQuZm9jdXMoKQorICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0Jywg
ZmFsc2UsICdLJyk7CisgICAgc2hvdWxkQmUoJ2luc2VydGVkTGVnZW5kVGV4dElucHV0LnZhbHVl
JywgJyJKSyInKTsKKyAgICBzaG91bGRCZSgnZmlyc3RMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAn
IklLIicpOworICAgIHNob3VsZEJlKCdzZWNvbmRMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIksi
Jyk7Cit9CisKK2Z1bmN0aW9uIHZlcmlmeVBhcnNlckdlbmVyYXRlZEZpZWxkU2V0cygpIHsKKyAg
ICBkZWJ1ZygnVmVyaWZ5aW5nIHBhcnNlciBnZW5lcmF0ZWQgZmllbGRzZXRzLicpOworICAgIHZh
ciBwYXJzZXJHZW5lcmF0ZWRJbnB1dDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2Vy
R2VuZXJhdGVkSW5wdXQxIik7CisgICAgdmFyIHBhcnNlckdlbmVyYXRlZElucHV0MiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJbnB1dDIiKTsKKyAgICB2YXIgcGFy
c2VyR2VuZXJhdGVkSW5wdXQzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcnNlckdlbmVy
YXRlZElucHV0MyIpOworICAgIHZhciBwYXJzZXJHZW5lcmF0ZWRJbnB1dDQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJhdGVkSW5wdXQ0Iik7CisgICAgdmFyIHBhcnNlckdl
bmVyYXRlZElucHV0NSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJ
bnB1dDUiKTsKKyAgICB2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQ2ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0NiIpOworICAgIHZhciBwYXJzZXJHZW5lcmF0
ZWRJbnB1dDcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJhdGVkSW5wdXQ3
Iik7CisgICAgdmFyIHBhcnNlckdlbmVyYXRlZElucHV0OCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJwYXJzZXJHZW5lcmF0ZWRJbnB1dDgiKTsKKyAgICB2YXIgcGFyc2VyR2VuZXJhdGVkSW5w
dXQ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0OSIpOwor
CisgICAgcGFyc2VyR2VuZXJhdGVkSW5wdXQxLmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0Nv
bW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0wnKTsKKyAgICBwYXJzZXJHZW5lcmF0ZWRJbnB1
dDIuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNl
LCAnTScpOworICAgIHBhcnNlckdlbmVyYXRlZElucHV0My5mb2N1cygpOworICAgIGRvY3VtZW50
LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdOJyk7CisgICAgcGFyc2VyR2VuZXJh
dGVkSW5wdXQ0LmZvY3VzKCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQn
LCBmYWxzZSwgJ08nKTsKKyAgICBwYXJzZXJHZW5lcmF0ZWRJbnB1dDUuZm9jdXMoKTsKKyAgICBk
b2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnUCcpOworICAgIHBhcnNl
ckdlbmVyYXRlZElucHV0Ni5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNl
cnRUZXh0JywgZmFsc2UsICdRJyk7CisgICAgcGFyc2VyR2VuZXJhdGVkSW5wdXQ3LmZvY3VzKCk7
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ1InKTsKKyAg
ICBwYXJzZXJHZW5lcmF0ZWRJbnB1dDguZm9jdXMoKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFu
ZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnUycpOworICAgIHBhcnNlckdlbmVyYXRlZElucHV0OS5m
b2N1cygpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdU
Jyk7CisKKyAgICBzaG91bGRCZSgncGFyc2VyR2VuZXJhdGVkSW5wdXQxLnZhbHVlJywgJyJMIicp
OworICAgIHNob3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDIudmFsdWUnLCAnIk0iJyk7Cisg
ICAgc2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRlZElucHV0My52YWx1ZScsICciTk8iJyk7CisgICAg
c2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRlZElucHV0NC52YWx1ZScsICciIicpOworICAgIHNob3Vs
ZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDUudmFsdWUnLCAnIlAiJyk7CisgICAgc2hvdWxkQmUo
J3BhcnNlckdlbmVyYXRlZElucHV0Ni52YWx1ZScsICciIicpOworICAgIHNob3VsZEJlKCdwYXJz
ZXJHZW5lcmF0ZWRJbnB1dDcudmFsdWUnLCAnIiInKTsKKyAgICBzaG91bGRCZSgncGFyc2VyR2Vu
ZXJhdGVkSW5wdXQ4LnZhbHVlJywgJyIiJyk7CisgICAgc2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRl
ZElucHV0OS52YWx1ZScsICciIicpOworfQorCit2ZXJpZnlQYXJzZXJHZW5lcmF0ZWRGaWVsZFNl
dHMoKTsKK3Rlc3RTaW5nbGVGaWVsZFNldCgpOwordGVzdE5lc3RlZEZpZWxkU2V0cygpOwordGVz
dEZpcnN0TGVnZW5kSW5GaWVsZFNldCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBj
Y2JhNzM3Li43ZWFmMWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTItMDMtMjYg
IFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmllbGRzZXQgZGlz
YWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgIE1ha2UgSFRNTEZvcm1Db250
cm9sRWxlbWVudHMgaW5oZXJpdCB0aGUgZGlzYWJsZWQgc3RhdGUKKyAgICAgICAgZnJvbSBIVE1M
RmllbGRTZXRFbGVtZW50IGFuY2VzdG9ycy4gU3Vib3JkaW5hdGVzIG9mIHRoZQorICAgICAgICBm
aXJzdCBIVE1MTGVnZW5kRWxlbWVudCBpbiBhIGZpZWxkc2V0IHdpbGwgbmV2ZXIgYmUgZGlzYWJs
ZWQuCisKKyAgICAgICAgUGF0Y2ggYnkgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHRtbC9IVE1MRmll
bGRTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6
OkhUTUxGaWVsZFNldEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxl
bWVudDo6ZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6bGVnZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OnVwZGF0ZUxlZ2VuZCk6CisgICAgICAgICogaHRt
bC9IVE1MRmllbGRTZXRFbGVtZW50Lmg6CisgICAgICAgIChIVE1MRmllbGRTZXRFbGVtZW50KToK
KyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZUZpZWxkU2V0QW5kTGVnZW5kQW5jZXN0b3Ip
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSFRN
TEZvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExlZ2VuZEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6Omluc2VydGVkSW50b1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGVnZW5kRWxl
bWVudDo6cmVtb3ZlZEZyb21UcmVlKToKKyAgICAgICAgKiBodG1sL0hUTUxMZWdlbmRFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxMZWdlbmRFbGVtZW50KToKKwog
MjAxMi0wMy0yMSAgTGkgWWluICA8bGkueWluQGludGVsLmNvbT4KIAogICAgICAgICBbV2ViU29j
a2V0XVRoZSBTZWMtV2ViU29ja2V0LUFjY2VwdCBNVVNUIE5PVCBhcHBlYXIgbW9yZSB0aGFuIG9u
Y2UgaW4gYW4gSFRUUCByZXNwb25zZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0
RWxlbWVudC5jcHAKaW5kZXggNGI5MDQxMi4uYWM4ZmY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTExlZ2VuZEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IlJlbmRlckZpZWxkc2V0LmgiCkBAIC0zNSw2ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKIGlubGluZSBIVE1MRmllbGRTZXRFbGVtZW50OjpIVE1MRmllbGRTZXRFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZv
cm1FbGVtZW50KiBmb3JtKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCwgZm9ybSkKKyAgICAsIG1fbGVnZW5kKDApCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoZmllbGRzZXRUYWcpKTsKIH0KQEAgLTQ0LDYgKzQ2LDE4IEBAIFBhc3NSZWZQdHI8SFRNTEZp
ZWxkU2V0RWxlbWVudD4gSFRNTEZpZWxkU2V0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MRmllbGRTZXRFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50LCBmb3JtKSk7CiB9CiAKK3ZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6ZGlz
YWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sKKyAgICAvLyBUaGlzIGVsZW1lbnQgbXVzdCBiZSB1
cGRhdGVkIGJlZm9yZSB0aGUgc3R5bGUgb2Ygbm9kZXMgaW4gaXRzIHN1YnRyZWUgZ2V0cyByZWNh
bGN1bGF0ZWQuCisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWRBdHRyaWJ1dGVD
aGFuZ2VkKCk7CisKKyAgICBmb3IgKE5vZGUqIGN1cnJlbnROb2RlID0gdGhpczsgY3VycmVudE5v
ZGU7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsK
KyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGN1cnJlbnROb2Rl
KTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVt
ZW50KS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIH0KK30KKwogYm9vbCBIVE1MRmllbGRT
ZXRFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKICAgICByZXR1cm4gSFRNTEVsZW1l
bnQ6OnN1cHBvcnRzRm9jdXMoKTsKQEAgLTYwLDQgKzc0LDMwIEBAIFJlbmRlck9iamVjdCogSFRN
TEZpZWxkU2V0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5k
ZXJTdHlsCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckZpZWxkc2V0KHRoaXMpOwogfQog
CitIVE1MTGVnZW5kRWxlbWVudCogSFRNTEZpZWxkU2V0RWxlbWVudDo6bGVnZW5kKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sZWdlbmQ7Cit9CisKK3ZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6
dXBkYXRlTGVnZW5kKEhUTUxMZWdlbmRFbGVtZW50KiBuZXdMZWdlbmRFbGVtZW50KQoreworICAg
IC8vIEEgbmV3IExlZ2VuZEVsZW1lbnQgaGFzIGJlZW4gYWRkZWQgYW5kIHdlIGRpZCBub3QgaGF2
ZSBvbmUgaW4gdGhlIHN1YnRyZWUgYmVmb3JlLgorICAgIC8vIFNvIGl0IGlzIHRoZSBvbmx5IG9u
ZSBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBzZWFyY2ggdGhlIHN1YnRyZWUuCisgICAgaWYgKG5l
d0xlZ2VuZEVsZW1lbnQgJiYgIW1fbGVnZW5kKSB7CisgICAgICAgIG1fbGVnZW5kID0gbmV3TGVn
ZW5kRWxlbWVudDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEVpdGhlciBhIHNl
Y29uZCBMZWdlbmRFbGVtZW50IGhhcyBiZWVuIGFkZGVkLCBvciBhbiBleGlzdGluZyBvbmUgaGFz
IGJlZW4gcmVtb3ZlZC4KKyAgICAvLyBXZSBuZWVkIHRvIHNlYXJjaCB0aGUgc3VidHJlZSBmb3Ig
dGhlIGZpcnN0IExlZ2VuZEVsZW1lbnQuCisgICAgbV9sZWdlbmQgPSAwOworICAgIE5vZGUqIG5v
ZGUgPSB0aGlzOworICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhp
cykpKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykpIHsKKyAgICAg
ICAgICAgIG1fbGVnZW5kID0gc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnQqPihub2RlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwogfSAvLyBuYW1lc3Bh
Y2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgKaW5kZXggZGNjOGQw
Yy4uYzMwMjRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgK
QEAgLTMxLDYgKzMxLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxGaWVsZFNl
dEVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SFRNTEZpZWxkU2V0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOworICAgIEhUTUxMZWdlbmRF
bGVtZW50KiBsZWdlbmQoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUxlZ2VuZChIVE1MTGVnZW5k
RWxlbWVudCogbmV3TGVnZW5kRWxlbWVudCA9IDApOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB2b2lkIGRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpIE9WRVJSSURFOwogCiBwcml2YXRlOgog
ICAgIEhUTUxGaWVsZFNldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kiwg
SFRNTEZvcm1FbGVtZW50Kik7CkBAIC00MCw2ICs0NSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUq
KTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBIVE1MTGVnZW5kRWxlbWVudCogbV9sZWdlbmQ7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRF
bGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwK
aW5kZXggMGMzNGRlZS4uNjAwNmFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuaWRsCkBAIC0yMCw2ICsyMCw3IEBACiBtb2R1bGUgaHRtbCB7CiAKICAgICBp
bnRlcmZhY2UgSFRNTEZpZWxkU2V0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKKyAgICAgICAgYXR0
cmlidXRlIFtSZWZsZWN0XSBib29sZWFuIGRpc2FibGVkOwogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgSFRNTEZvcm1FbGVtZW50IGZvcm07CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0g
RE9NU3RyaW5nIG5hbWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCmluZGV4IDBkYWQzNDYuLjM1ODc0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMzAsOCArMzAsMTAgQEAKICNp
bmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxMZWdlbmRFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCkBAIC00
Niw2ICs0OCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiAgICAgOiBMYWJlbGFi
bGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQorICAgICwgbV9maWVsZFNldEFuY2VzdG9yKDAp
CisgICAgLCBtX2xlZ2VuZEFuY2VzdG9yKDApCisgICAgLCBtX2ZpZWxkU2V0QW5jZXN0b3JWYWxp
ZChmYWxzZSkKICAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlYWRPbmx5KGZhbHNl
KQogICAgICwgbV9yZXF1aXJlZChmYWxzZSkKQEAgLTk1LDYgKzEwMCwyMCBAQCBib29sIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Ob1ZhbGlkYXRlKCkgY29uc3QKICAgICByZXR1cm4gZmFz
dEhhc0F0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIpOwogfQogCit2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnVwZGF0ZUZpZWxkU2V0QW5kTGVnZW5kQW5jZXN0b3IoKSBjb25zdAorewor
ICAgIG1fZmllbGRTZXRBbmNlc3RvciA9IDA7CisgICAgbV9sZWdlbmRBbmNlc3RvciA9IDA7Cisg
ICAgZm9yIChDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IHBhcmVudE5vZGUoKTsgYW5jZXN0b3I7
IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoIW1fbGVn
ZW5kQW5jZXN0b3IgJiYgYW5jZXN0b3ItPmhhc1RhZ05hbWUobGVnZW5kVGFnKSkKKyAgICAgICAg
ICAgIG1fbGVnZW5kQW5jZXN0b3IgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudCo+KGFu
Y2VzdG9yKTsKKyAgICAgICAgaWYgKCFtX2ZpZWxkU2V0QW5jZXN0b3IgJiYgYW5jZXN0b3ItPmhh
c1RhZ05hbWUoZmllbGRzZXRUYWcpKSB7CisgICAgICAgICAgICBtX2ZpZWxkU2V0QW5jZXN0b3Ig
PSBzdGF0aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50Kj4oYW5jZXN0b3IpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gZm9ybUF0dHIpCkBAIC0xMDIsMTEgKzEyMSw4IEBAIHZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpIHsKICAgICAgICAgYm9vbCBvbGREaXNhYmxl
ZCA9IG1fZGlzYWJsZWQ7CiAgICAgICAgIG1fZGlzYWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0g
ICAgICAgIGlmIChvbGREaXNhYmxlZCAhPSBtX2Rpc2FibGVkKSB7Ci0gICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJl
cigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIo
KS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIEVuYWJsZWRTdGF0ZSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgaWYgKG9sZERpc2FibGVkICE9IG1fZGlzYWJsZWQpCisgICAgICAgICAg
ICBkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSByZWFkb25seUF0dHIpIHsKICAgICAgICAgYm9vbCBvbGRSZWFkT25seSA9IG1fcmVhZE9u
bHk7CiAgICAgICAgIG1fcmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7CkBAIC0xMjUsNiArMTQx
LDEzIEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0cmli
dXRlKiBhdHRyKQogICAgIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKIH0KIAordm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKQoreworICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkt
PnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBFbmFibGVkU3RhdGUpOworfQorCiB2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZCgpCiB7CiAgICAgc2V0
TmVlZHNWYWxpZGl0eUNoZWNrKCk7CkBAIC0yMDUsNiArMjI4LDcgQEAgdm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKIAogdm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQogeworICAgIG1fZmll
bGRTZXRBbmNlc3RvclZhbGlkID0gZmFsc2U7CiAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpy
ZW1vdmVkRnJvbVRyZWUoKTsKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGRlZXAp
OwogfQpAQCAtMjU0LDYgKzI3OCwyMSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRp
c3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCkKICAgICBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hJ
bnB1dEV2ZW50KCk7CiB9CiAKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWQo
KSBjb25zdAoreworICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmICghbV9maWVsZFNldEFuY2VzdG9yVmFsaWQpCisgICAgICAgIHVwZGF0ZUZpZWxkU2V0
QW5kTGVnZW5kQW5jZXN0b3IoKTsKKworICAgIGlmICghbV9maWVsZFNldEFuY2VzdG9yIHx8ICFt
X2ZpZWxkU2V0QW5jZXN0b3ItPmRpc2FibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIW1fbGVnZW5kQW5jZXN0b3IgfHwgbV9sZWdlbmRBbmNlc3RvciAhPSBtX2ZpZWxkU2V0
QW5jZXN0b3ItPmxlZ2VuZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0RGlzYWJsZWQoYm9vbCBi
KQogewogICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGIgPyAiIiA6IDApOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCAzZTYxZTc4Li42
ZDk4M2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aApAQCAtMzAsNyArMzAsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb3JtRGF0
YUxpc3Q7CitjbGFzcyBIVE1MRmllbGRTZXRFbGVtZW50OwogY2xhc3MgSFRNTEZvcm1FbGVtZW50
OworY2xhc3MgSFRNTExlZ2VuZEVsZW1lbnQ7CiBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZTsKIGNs
YXNzIFZhbGlkaXR5U3RhdGU7CiAKQEAgLTQ5LDYgKzUxLDggQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Rm9ybU1ldGhvZChjb25zdCBTdHJpbmcmKTsKICAgICBib29sIGZvcm1Ob1ZhbGlkYXRlKCkg
Y29uc3Q7CiAKKyAgICB2b2lkIHVwZGF0ZUZpZWxkU2V0QW5kTGVnZW5kQW5jZXN0b3IoKSBjb25z
dDsKKwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGZv
cm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0
Y2hlc1JlbmRlcmVyOyB9CkBAIC02MCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9CisgICAgdmlydHVhbCBib29sIGRpc2Fi
bGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwpAQCAtMTEyLDYgKzExNiw3IEBAIHByb3RlY3RlZDoK
IAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAgdmlydHVh
bCB2b2lkIGRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2goKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOwogICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKTsKQEAgLTE0NSw3ICsxNTAs
MTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCgpOwogICAgIFN0cmluZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKIAorICAg
IG11dGFibGUgSFRNTEZpZWxkU2V0RWxlbWVudCogbV9maWVsZFNldEFuY2VzdG9yOworICAgIG11
dGFibGUgSFRNTExlZ2VuZEVsZW1lbnQqIG1fbGVnZW5kQW5jZXN0b3I7CiAgICAgT3duUHRyPFZh
bGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25NZXNzYWdlOworICAgIG11dGFibGUgYm9vbCBt
X2ZpZWxkU2V0QW5jZXN0b3JWYWxpZCA6IDE7CiAgICAgYm9vbCBtX2Rpc2FibGVkIDogMTsKICAg
ICBib29sIG1fcmVhZE9ubHkgOiAxOwogICAgIGJvb2wgbV9yZXF1aXJlZCA6IDE7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCmluZGV4IGZkMTAzZDUuLjIwNmEyNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCkBAIC0yNSw2ICsy
NSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTExlZ2VuZEVsZW1lbnQu
aCIKIAorI2luY2x1ZGUgIkhUTUxGaWVsZFNldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgpAQCAtMzYsNiArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCiBpbmxpbmUgSFRNTExlZ2VuZEVsZW1lbnQ6OkhUTUxMZWdlbmRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IEhUTUxF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQorICAgICwgbV9maWVsZFNldEFuY2VzdG9yKDApCiB7
CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUobGVnZW5kVGFnKSk7CiB9CkBAIC00NSw2ICs0NywyOCBA
QCBQYXNzUmVmUHRyPEhUTUxMZWdlbmRFbGVtZW50PiBIVE1MTGVnZW5kRWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTExl
Z2VuZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAordm9pZCBIVE1MTGVnZW5kRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgSFRNTEVsZW1lbnQ6Omlu
c2VydGVkSW50b1RyZWUoZGVlcCk7CisKKyAgICBDb250YWluZXJOb2RlKiBmaWVsZHNldCA9IHBh
cmVudE5vZGUoKTsKKyAgICB3aGlsZSAoZmllbGRzZXQgJiYgIWZpZWxkc2V0LT5oYXNUYWdOYW1l
KGZpZWxkc2V0VGFnKSkKKyAgICAgICAgZmllbGRzZXQgPSBmaWVsZHNldC0+cGFyZW50Tm9kZSgp
OworICAgIGlmIChmaWVsZHNldCkgeworICAgICAgICBtX2ZpZWxkU2V0QW5jZXN0b3IgPSBzdGF0
aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50Kj4oZmllbGRzZXQpOworICAgICAgICBtX2ZpZWxk
U2V0QW5jZXN0b3ItPnVwZGF0ZUxlZ2VuZCh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTExl
Z2VuZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit7CisgICAgaWYgKG1fZmll
bGRTZXRBbmNlc3RvcikKKyAgICAgICAgbV9maWVsZFNldEFuY2VzdG9yLT51cGRhdGVMZWdlbmQo
KTsKKyAgICBtX2ZpZWxkU2V0QW5jZXN0b3IgPSAwOworICAgIEhUTUxFbGVtZW50OjpyZW1vdmVk
RnJvbVRyZWUoZGVlcCk7Cit9CisKKwogSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTExlZ2Vu
ZEVsZW1lbnQ6OmFzc29jaWF0ZWRDb250cm9sKCkKIHsKICAgICAvLyBDaGVjayBpZiB0aGVyZSdz
IGEgZmllbGRzZXQgYmVsb25naW5nIHRvIHRoaXMgbGVnZW5kLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTGVnZW5kRWxlbWVudC5oCmluZGV4IDk1MTI5ZWMuLmE0NGFiOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmgKQEAgLTI5LDEyICsyOSwxNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OworY2xhc3MgSFRNTEZp
ZWxkU2V0RWxlbWVudDsKIAogY2xhc3MgSFRNTExlZ2VuZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVs
ZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxMZWdlbmRFbGVtZW50
PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLXByaXZhdGU6Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkgT1ZF
UlJJREU7CisKKyBwcml2YXRlOgogICAgIEhUTUxMZWdlbmRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgLy8gQ29udHJvbCBpbiB0aGUgbGVnZW5kJ3MgZmll
bGRzZXQgdGhhdCBnZXRzIGZvY3VzIGFuZCBhY2Nlc3Mga2V5LgpAQCAtNDIsNiArNDcsOCBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRNb3Vz
ZUV2ZW50cyk7CiAgICAgdmlydHVhbCB2b2lkIGZvY3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzU2Vs
ZWN0aW9uID0gdHJ1ZSk7CisKKyAgICBIVE1MRmllbGRTZXRFbGVtZW50KiBtX2ZpZWxkU2V0QW5j
ZXN0b3I7CiB9OwogCiB9IC8vbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134139</attachid>
            <date>2012-03-27 14:38:22 -0700</date>
            <delta_ts>2012-03-28 07:07:54 -0700</delta_ts>
            <desc>patch for review. - fixed issues as commented before.</desc>
            <filename>58837_20120327-233419.patch</filename>
            <type>text/plain</type>
            <size>29672</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlYWU3MzRiLi5mZjU2YzNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDMt
MjYgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmllbGRzZXQg
ZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgIEFkZCBhIHRlc3QgY2Fz
ZSBmb3IgZmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZmllbGRzZXQtZGlz
YWJsZWQuaHRtbDogQWRkZWQuCisKIDIwMTItMDMtMjEgIExpIFlpbiAgPGxpLnlpbkBpbnRlbC5j
b20+CiAKICAgICAgICAgW1dlYlNvY2tldF1UaGUgU2VjLVdlYlNvY2tldC1BY2NlcHQgTVVTVCBO
T1QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIGFuIEhUVFAgcmVzcG9uc2UKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiODhhZQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTA3IEBACitUZXN0cyBmb3IgSFRNTEZpZWxkU2V0RWxlbWVudC5kaXNhYmxl
ZCBiZWhhdmlvci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKworVmVyaWZ5aW5n
IHBhcnNlciBnZW5lcmF0ZWQgZmllbGRzZXRzLgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDEu
dmFsdWUgaXMgIkwiCitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0Mi52YWx1ZSBpcyAiTSIKK1BB
U1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQzLnZhbHVlIGlzICJOTyIKK1BBU1MgcGFyc2VyR2VuZXJh
dGVkSW5wdXQ0LnZhbHVlIGlzICIiCitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0NS52YWx1ZSBp
cyAiUCIKK1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQ2LnZhbHVlIGlzICIiCitQQVNTIHBhcnNl
ckdlbmVyYXRlZElucHV0Ny52YWx1ZSBpcyAiIgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDgu
dmFsdWUgaXMgIiIKK1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQ5LnZhbHVlIGlzICIiCisKK1Rl
c3RpbmcgYSBzaW5nbGUgZmllbGRzZXQgZWxlbWVudC4KK1ZlcmlmeWluZyBIVE1MRm9ybUNvbnRy
b2wgY2FuIGJlIGRpc2FibGVkIHJlZ2FyZGxlc3Mgb2YgZW5jbG9zaW5nIGZpZWxkc2V0LgorUEFT
UyB0ZXh0SW5wdXQuZGlzYWJsZWQgaXMgdHJ1ZQorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIiIK
K1BBU1MgZmllbGRTZXQuZGlzYWJsZWQgaXMgZmFsc2UKK0ZpZWxkc2V0IGlzIGVuYWJsZWQgYnkg
ZGVmYXVsdC4gQSB1c2VyIGNhbiBpbnNlcnRUZXh0IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQu
CitQQVNTIHRleHRJbnB1dC52YWx1ZSBpcyAiQSIKK0Rpc2FibGUgZmllbGRzZXQuCitQQVNTIGZp
ZWxkU2V0LmRpc2FibGVkIGlzIHRydWUKK09uY2UgdGhlIGZpZWxkc2V0IGlzIGRpc2FibGVkLCB0
ZXh0IGNhbm5vdCBiZSBpbnNlcnRlZC4KK1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBIgorQ2hl
Y2sgaWYgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0IGVsZW1lbnQgY2hhbmdlZC4KK1BBU1MgZ2V0Q29t
cHV0ZWRTdHlsZSh0ZXh0SW5wdXQpLmJhY2tncm91bmRDb2xvciBpcyAncmdiKDI1NSwgMCwgMCkn
CitFbmFibGUgZmllbGRzZXQuCitQQVNTIGZpZWxkU2V0LmRpc2FibGVkIGlzIGZhbHNlCitQQVNT
IGdldENvbXB1dGVkU3R5bGUodGV4dElucHV0KS5iYWNrZ3JvdW5kQ29sb3IgaXMgJ3JnYigyNTUs
IDI1NSwgMTAwKScKK1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBQiIKK01vdmUgdGhlIHRleHRp
bnB1dCBlbGVtZW50IG91dCBvZiB0aGUgZmllbGRzZXQuCitEaXNhYmxlIHRoZSBmaWVsZHNldC4K
K1BBU1MgZmllbGRTZXQuZGlzYWJsZWQgaXMgdHJ1ZQorVGV4dCBjYW4gYmUgaW5zZXJ0ZWQsIGJl
Y2F1c2UgdGhlIHRleHRpbnB1dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgdGhlIGRpc2FibGVkIGZp
ZWxkc2V0LgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQyIKK0VuYWJsZSB0aGUgZmllbGRz
ZXQuCitQQVNTIGZpZWxkU2V0LmRpc2FibGVkIGlzIGZhbHNlCitJbnNlcnQgYSB0YWJsZSBpbnRv
IHRoZSBmaWVsZHNldC4KK01vdmUgdGhlIHRleHRpbnB1dCBmaWVsZCBpbnRvIHRoZSB0YWJsZS4K
K1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBQkNEIgorRGlzYWJsZSB0aGUgZmllbGRzZXQuCitQ
QVNTIGZpZWxkU2V0LmRpc2FibGVkIGlzIHRydWUKK0luc2VydGluZyB0ZXh0IHNob3VsZCBmYWls
LgorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0QiCitFbmFibGUgdGhlIGZpZWxkc2V0Lgor
UEFTUyBmaWVsZFNldC5kaXNhYmxlZCBpcyBmYWxzZQorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMg
IkFCQ0RFIgorCitUZXN0aW5nIG5lc3RlZCBmaWVsZHNldCBlbGVtZW50cy4KK1ZlcmlmeWluZyB0
aGF0IHN1Ym9yZGluYXRlcyBvZiBib3RoIGZpZWxkc2V0cyBhcmUgZW5hYmxlZC4KK1BBU1Mgb3V0
ZXJUZXh0SW5wdXQudmFsdWUgaXMgIkYiCitQQVNTIGlubmVyVGV4dElucHV0LnZhbHVlIGlzICJG
IgorRGlzYWJsaW5nIHRoZSBpbm5lciBmaWVsZHNldCBvbmx5LgorUEFTUyBpbm5lckZpZWxkU2V0
LmRpc2FibGVkIGlzIHRydWUKK1BBU1Mgb3V0ZXJUZXh0SW5wdXQudmFsdWUgaXMgIkZHIgorUEFT
UyBpbm5lclRleHRJbnB1dC52YWx1ZSBpcyAiRiIKK0VuYWJsaW5nIHRoZSBpbm5lciBhbmQgZGlz
YWJsaW5nIHRoZSBvdXRlciBmaWVsZHNldC4KK1BBU1Mgb3V0ZXJGaWVsZFNldC5kaXNhYmxlZCBp
cyB0cnVlCitQQVNTIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgaXMgZmFsc2UKK1BBU1Mgb3V0ZXJU
ZXh0SW5wdXQudmFsdWUgaXMgIkZHIgorUEFTUyBpbm5lclRleHRJbnB1dC52YWx1ZSBpcyAiRiIK
K0Rpc2FibGluZyBib3RoIGZpZWxkc2V0IGVsZW1lbnRzLgorUEFTUyBvdXRlckZpZWxkU2V0LmRp
c2FibGVkIGlzIHRydWUKK1BBU1MgaW5uZXJGaWVsZFNldC5kaXNhYmxlZCBpcyB0cnVlCitQQVNT
IG91dGVyVGV4dElucHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFsdWUg
aXMgIkYiCitFbmFibGluZyBib3RoIGZpZWxkc2V0IGVsZW1lbnRzLgorUEFTUyBvdXRlckZpZWxk
U2V0LmRpc2FibGVkIGlzIGZhbHNlCitQQVNTIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgaXMgZmFs
c2UKK1BBU1Mgb3V0ZXJUZXh0SW5wdXQudmFsdWUgaXMgIkZHSCIKK1BBU1MgaW5uZXJUZXh0SW5w
dXQudmFsdWUgaXMgIkZIIgorCitUZXN0IGJlaGF2aW9yIG9mIHRoZSBmaXJzdCBsZWdlbmQgZWxl
bWVudCBpbiBhIGZpZWxkc2V0IGVsZW1lbnRzLgorQ2hpbGRyZW4gb2YgdGhlIGZpcnN0IGxlZ2Vu
ZCBlbGVtZW50IGluIGEgZmllbGRzZXQgc2hvdWxkIG5vdCBnZXQgZGlzYWJsZWQgd2l0aCB0aGUg
ZmllbGRzZXQuCitQQVNTIGxlZ2VuZEZpZWxkU2V0LmRpc2FibGVkIGlzIHRydWUKK1BBU1MgZmly
c3RMZWdlbmRUZXh0SW5wdXQudmFsdWUgaXMgIkkiCitQQVNTIHNlY29uZExlZ2VuZFRleHRJbnB1
dC52YWx1ZSBpcyAiIgorSW5zZXJ0IGFub3RoZXIgbGVnZW5kIGVsZW1lbnQgYmVmb3JlIHRoZSBj
dXJyZW50bHkgZmlyc3Qgb25lLCBhbmQgY2hlY2sgYWdhaW4uCitQQVNTIGluc2VydGVkTGVnZW5k
VGV4dElucHV0LnZhbHVlIGlzICJKIgorUEFTUyBmaXJzdExlZ2VuZFRleHRJbnB1dC52YWx1ZSBp
cyAiSSIKK1BBU1Mgc2Vjb25kTGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICIiCitFbmFibGUgdGhl
IGZpZWxkc2V0IGFnYWluIGFuZCBjaGVjayBmb3Igc2FuaXR5LgorUEFTUyBsZWdlbmRGaWVsZFNl
dC5kaXNhYmxlZCBpcyBmYWxzZQorUEFTUyBpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC52YWx1ZSBp
cyAiSksiCitQQVNTIGZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICJJSyIKK1BBU1Mgc2Vj
b25kTGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICJLIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKKworIAorCisKKyAKKworCisKKworCisKKworCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0LWRpc2FibGVkLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmYjM3MAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQtZGlzYWJsZWQuaHRtbApAQCAtMCwwICsxLDMw
MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2Nz
cyI+CitpbnB1dCB7CisgICAgYmFja2dyb3VuZDpyZ2IoMjU1LDI1NSwxMDApOworfQoraW5wdXQ6
ZGlzYWJsZWQgeworICAgIGJhY2tncm91bmQ6cmdiKDI1NSwwLDApOworfQorPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzxmb3JtPgorPGZpZWxkc2V0PgorPGxlZ2VuZD48aW5wdXQgdHlwZT0idGV4dCIg
aWQ9InBhcnNlckdlbmVyYXRlZElucHV0MSI+PC9sZWdlbmQ+Cis8bGVnZW5kPjxpbnB1dCB0eXBl
PSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQyIj48L2xlZ2VuZD4KKzxpbnB1dCB0eXBl
PSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQzIj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBp
ZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQ0IiBkaXNhYmxlZD4KKzwvZmllbGRzZXQ+Cis8ZmllbGRz
ZXQgZGlzYWJsZWQ+Cis8bGVnZW5kPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJh
dGVkSW5wdXQ1Ij48L2xlZ2VuZD4KKzxsZWdlbmQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJwYXJz
ZXJHZW5lcmF0ZWRJbnB1dDYiPjwvbGVnZW5kPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJwYXJz
ZXJHZW5lcmF0ZWRJbnB1dDciPgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0
ZWRJbnB1dDgiIGRpc2FibGVkPgorPC9maWVsZHNldD4KKzxmaWVsZHNldCBkaXNhYmxlZD4KKzxp
bnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQ5Ij4KKzwvZmllbGRzZXQ+
Cis8L2Zvcm0+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdHMgZm9yIEhUTUxGaWVsZFNl
dEVsZW1lbnQuZGlzYWJsZWQgYmVoYXZpb3IuJyk7CisKK2RlYnVnKCdcblZlcmlmeWluZyBwYXJz
ZXIgZ2VuZXJhdGVkIGZpZWxkc2V0cy4nKTsKK3ZhciBwYXJzZXJHZW5lcmF0ZWRJbnB1dDEgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJhdGVkSW5wdXQxIik7Cit2YXIgcGFy
c2VyR2VuZXJhdGVkSW5wdXQyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcnNlckdlbmVy
YXRlZElucHV0MiIpOwordmFyIHBhcnNlckdlbmVyYXRlZElucHV0MyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJbnB1dDMiKTsKK3ZhciBwYXJzZXJHZW5lcmF0ZWRJ
bnB1dDQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJhdGVkSW5wdXQ0Iik7
Cit2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQ1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBh
cnNlckdlbmVyYXRlZElucHV0NSIpOwordmFyIHBhcnNlckdlbmVyYXRlZElucHV0NiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJbnB1dDYiKTsKK3ZhciBwYXJzZXJH
ZW5lcmF0ZWRJbnB1dDcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJhdGVk
SW5wdXQ3Iik7Cit2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQ4ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0OCIpOwordmFyIHBhcnNlckdlbmVyYXRlZElucHV0
OSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJbnB1dDkiKTsKKwor
cGFyc2VyR2VuZXJhdGVkSW5wdXQxLmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5z
ZXJ0VGV4dCcsIGZhbHNlLCAnTCcpOworcGFyc2VyR2VuZXJhdGVkSW5wdXQyLmZvY3VzKCk7Citk
b2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnTScpOworcGFyc2VyR2Vu
ZXJhdGVkSW5wdXQzLmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcs
IGZhbHNlLCAnTicpOworcGFyc2VyR2VuZXJhdGVkSW5wdXQ0LmZvY3VzKCk7Citkb2N1bWVudC5l
eGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnTycpOworcGFyc2VyR2VuZXJhdGVkSW5w
dXQ1LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAn
UCcpOworcGFyc2VyR2VuZXJhdGVkSW5wdXQ2LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFu
ZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnUScpOworcGFyc2VyR2VuZXJhdGVkSW5wdXQ3LmZvY3Vz
KCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnUicpOworcGFy
c2VyR2VuZXJhdGVkSW5wdXQ4LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0
VGV4dCcsIGZhbHNlLCAnUycpOworcGFyc2VyR2VuZXJhdGVkSW5wdXQ5LmZvY3VzKCk7Citkb2N1
bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnVCcpOworCitzaG91bGRCZSgn
cGFyc2VyR2VuZXJhdGVkSW5wdXQxLnZhbHVlJywgJyJMIicpOworc2hvdWxkQmUoJ3BhcnNlckdl
bmVyYXRlZElucHV0Mi52YWx1ZScsICciTSInKTsKK3Nob3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJ
bnB1dDMudmFsdWUnLCAnIk5PIicpOworc2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRlZElucHV0NC52
YWx1ZScsICciIicpOworc2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRlZElucHV0NS52YWx1ZScsICci
UCInKTsKK3Nob3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDYudmFsdWUnLCAnIiInKTsKK3No
b3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDcudmFsdWUnLCAnIiInKTsKK3Nob3VsZEJlKCdw
YXJzZXJHZW5lcmF0ZWRJbnB1dDgudmFsdWUnLCAnIiInKTsKK3Nob3VsZEJlKCdwYXJzZXJHZW5l
cmF0ZWRJbnB1dDkudmFsdWUnLCAnIiInKTsKKworCitkZWJ1ZygnXG5UZXN0aW5nIGEgc2luZ2xl
IGZpZWxkc2V0IGVsZW1lbnQuJyk7Cit2YXIgZmllbGRTZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdmaWVsZHNldCcpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmaWVsZFNldCk7Cit2
YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKK3RleHRJbnB1
dC50eXBlID0gInRleHQiOworZmllbGRTZXQuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsKKworZGVi
dWcoJ1ZlcmlmeWluZyBIVE1MRm9ybUNvbnRyb2wgY2FuIGJlIGRpc2FibGVkIHJlZ2FyZGxlc3Mg
b2YgZW5jbG9zaW5nIGZpZWxkc2V0LicpOwordGV4dElucHV0LmRpc2FibGVkID0gdHJ1ZTsKK3No
b3VsZEJlVHJ1ZSgndGV4dElucHV0LmRpc2FibGVkJyk7Cit0ZXh0SW5wdXQuZm9jdXMoKTsKK2Rv
Y3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdBJyk7CitzaG91bGRCZSgn
dGV4dElucHV0LnZhbHVlJywgJyIiJyk7CitzaG91bGRCZUZhbHNlKCdmaWVsZFNldC5kaXNhYmxl
ZCcpOwordGV4dElucHV0LmRpc2FibGVkID0gZmFsc2U7CisKK2RlYnVnKCdGaWVsZHNldCBpcyBl
bmFibGVkIGJ5IGRlZmF1bHQuIEEgdXNlciBjYW4gaW5zZXJ0VGV4dCBpbnRvIHRoZSB0ZXh0IGlu
cHV0IGZpZWxkLicpOwordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgn
aW5zZXJ0VGV4dCcsIGZhbHNlLCAnQScpOworc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICci
QSInKTsKKworZGVidWcoJ0Rpc2FibGUgZmllbGRzZXQuJyk7CitmaWVsZFNldC5kaXNhYmxlZCA9
IHRydWU7CitzaG91bGRCZVRydWUoJ2ZpZWxkU2V0LmRpc2FibGVkJyk7CisKK2RlYnVnKCdPbmNl
IHRoZSBmaWVsZHNldCBpcyBkaXNhYmxlZCwgdGV4dCBjYW5ub3QgYmUgaW5zZXJ0ZWQuJyk7Cit0
ZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFs
c2UsICdCJyk7CitzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyJBIicpOworCitkZWJ1Zygi
Q2hlY2sgaWYgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0IGVsZW1lbnQgY2hhbmdlZC4iKTsKK3Nob3Vs
ZEJlKCJnZXRDb21wdXRlZFN0eWxlKHRleHRJbnB1dCkuYmFja2dyb3VuZENvbG9yIiwgIidyZ2Io
MjU1LCAwLCAwKSciKTsKKworZGVidWcoJ0VuYWJsZSBmaWVsZHNldC4nKTsKK2ZpZWxkU2V0LmRp
c2FibGVkID0gZmFsc2U7CitzaG91bGRCZUZhbHNlKCdmaWVsZFNldC5kaXNhYmxlZCcpOworc2hv
dWxkQmUoImdldENvbXB1dGVkU3R5bGUodGV4dElucHV0KS5iYWNrZ3JvdW5kQ29sb3IiLCAiJ3Jn
YigyNTUsIDI1NSwgMTAwKSciKTsKKwordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVj
Q29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQicpOworc2hvdWxkQmUoJ3RleHRJbnB1dC52
YWx1ZScsICciQUIiJyk7CisKK2RlYnVnKCdNb3ZlIHRoZSB0ZXh0aW5wdXQgZWxlbWVudCBvdXQg
b2YgdGhlIGZpZWxkc2V0LicpOworZmllbGRTZXQucmVtb3ZlQ2hpbGQodGV4dElucHV0KTsKK2Rv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsKKworZGVidWcoJ0Rpc2FibGUgdGhl
IGZpZWxkc2V0LicpOworZmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworc2hvdWxkQmVUcnVlKCdm
aWVsZFNldC5kaXNhYmxlZCcpOworCitkZWJ1ZygnVGV4dCBjYW4gYmUgaW5zZXJ0ZWQsIGJlY2F1
c2UgdGhlIHRleHRpbnB1dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgdGhlIGRpc2FibGVkIGZpZWxk
c2V0LicpOwordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0
VGV4dCcsIGZhbHNlLCAnQycpOworc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDIicp
OworCitkZWJ1ZygnRW5hYmxlIHRoZSBmaWVsZHNldC4nKTsKK2ZpZWxkU2V0LmRpc2FibGVkID0g
ZmFsc2U7CitzaG91bGRCZUZhbHNlKCdmaWVsZFNldC5kaXNhYmxlZCcpOworCitkZWJ1ZygnSW5z
ZXJ0IGEgdGFibGUgaW50byB0aGUgZmllbGRzZXQuJyk7Cit2YXIgdGFibGUgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCd0YWJsZScpOworZmllbGRTZXQuYXBwZW5kQ2hpbGQodGFibGUpOwordmFy
IHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKK3RhYmxlLmFwcGVuZENoaWxkKHRy
KTsKK3ZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7Cit0ci5hcHBlbmRDaGls
ZCh0ZCk7CisKK2RlYnVnKCdNb3ZlIHRoZSB0ZXh0aW5wdXQgZmllbGQgaW50byB0aGUgdGFibGUu
Jyk7Citkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRJbnB1dCk7Cit0ZC5hcHBlbmRDaGls
ZCh0ZXh0SW5wdXQpOworCit0ZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5k
KCdpbnNlcnRUZXh0JywgZmFsc2UsICdEJyk7CitzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywg
JyJBQkNEIicpOworCitkZWJ1ZygnRGlzYWJsZSB0aGUgZmllbGRzZXQuJyk7CitmaWVsZFNldC5k
aXNhYmxlZCA9IHRydWU7CitzaG91bGRCZVRydWUoJ2ZpZWxkU2V0LmRpc2FibGVkJyk7CisKK2Rl
YnVnKCdJbnNlcnRpbmcgdGV4dCBzaG91bGQgZmFpbC4nKQordGV4dElucHV0LmZvY3VzKCk7Citk
b2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRScpOworc2hvdWxkQmUo
J3RleHRJbnB1dC52YWx1ZScsICciQUJDRCInKTsKKworZGVidWcoJ0VuYWJsZSB0aGUgZmllbGRz
ZXQuJyk7CitmaWVsZFNldC5kaXNhYmxlZCA9IGZhbHNlOworc2hvdWxkQmVGYWxzZSgnZmllbGRT
ZXQuZGlzYWJsZWQnKTsKKwordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFu
ZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRScpOworc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScs
ICciQUJDREUiJyk7CisKKworZGVidWcoJ1xuVGVzdGluZyBuZXN0ZWQgZmllbGRzZXQgZWxlbWVu
dHMuJyk7Cit2YXIgb3V0ZXJGaWVsZFNldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZWxk
c2V0Jyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyRmllbGRTZXQpOwordmFyIGlu
bmVyRmllbGRTZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWVsZHNldCcpOworb3V0ZXJG
aWVsZFNldC5hcHBlbmRDaGlsZChpbm5lckZpZWxkU2V0KTsKK3ZhciBvdXRlclRleHRJbnB1dCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CitvdXRlclRleHRJbnB1dC50eXBlID0g
InRleHQiOworb3V0ZXJGaWVsZFNldC5hcHBlbmRDaGlsZChvdXRlclRleHRJbnB1dCk7Cit2YXIg
aW5uZXJUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworaW5uZXJU
ZXh0SW5wdXQudHlwZSA9ICJ0ZXh0IjsKK2lubmVyRmllbGRTZXQuYXBwZW5kQ2hpbGQoaW5uZXJU
ZXh0SW5wdXQpOworCitkZWJ1ZygnVmVyaWZ5aW5nIHRoYXQgc3Vib3JkaW5hdGVzIG9mIGJvdGgg
ZmllbGRzZXRzIGFyZSBlbmFibGVkLicpOworb3V0ZXJUZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3Vt
ZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdGJyk7Citpbm5lclRleHRJbnB1
dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0Yn
KTsKK3Nob3VsZEJlKCdvdXRlclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKK3Nob3VsZEJlKCdp
bm5lclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKworZGVidWcoJ0Rpc2FibGluZyB0aGUgaW5u
ZXIgZmllbGRzZXQgb25seS4nKTsKK2lubmVyRmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworc2hv
dWxkQmVUcnVlKCdpbm5lckZpZWxkU2V0LmRpc2FibGVkJyk7CitvdXRlclRleHRJbnB1dC5mb2N1
cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0cnKTsKK2lu
bmVyVGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcs
IGZhbHNlLCAnRycpOworc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGRyInKTsK
K3Nob3VsZEJlKCdpbm5lclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKworZGVidWcoJ0VuYWJs
aW5nIHRoZSBpbm5lciBhbmQgZGlzYWJsaW5nIHRoZSBvdXRlciBmaWVsZHNldC4nKTsKK291dGVy
RmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworaW5uZXJGaWVsZFNldC5kaXNhYmxlZCA9IGZhbHNl
Oworc2hvdWxkQmVUcnVlKCdvdXRlckZpZWxkU2V0LmRpc2FibGVkJyk7CitzaG91bGRCZUZhbHNl
KCdpbm5lckZpZWxkU2V0LmRpc2FibGVkJyk7CitvdXRlclRleHRJbnB1dC5mb2N1cygpOworZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKK2lubmVyVGV4dElu
cHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAn
SCcpOworc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGRyInKTsKK3Nob3VsZEJl
KCdpbm5lclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKworZGVidWcoJ0Rpc2FibGluZyBib3Ro
IGZpZWxkc2V0IGVsZW1lbnRzLicpOworb3V0ZXJGaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7Citp
bm5lckZpZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsKK3Nob3VsZEJlVHJ1ZSgnb3V0ZXJGaWVsZFNl
dC5kaXNhYmxlZCcpOworc2hvdWxkQmVUcnVlKCdpbm5lckZpZWxkU2V0LmRpc2FibGVkJyk7Citv
dXRlclRleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQn
LCBmYWxzZSwgJ0gnKTsKK2lubmVyVGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29t
bWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSCcpOworc2hvdWxkQmUoJ291dGVyVGV4dElucHV0
LnZhbHVlJywgJyJGRyInKTsKK3Nob3VsZEJlKCdpbm5lclRleHRJbnB1dC52YWx1ZScsICciRiIn
KTsKKworZGVidWcoJ0VuYWJsaW5nIGJvdGggZmllbGRzZXQgZWxlbWVudHMuJyk7CitvdXRlckZp
ZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7Citpbm5lckZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7
CitzaG91bGRCZUZhbHNlKCdvdXRlckZpZWxkU2V0LmRpc2FibGVkJyk7CitzaG91bGRCZUZhbHNl
KCdpbm5lckZpZWxkU2V0LmRpc2FibGVkJyk7CitvdXRlclRleHRJbnB1dC5mb2N1cygpOworZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKK2lubmVyVGV4dElu
cHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAn
SCcpOworc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGR0giJyk7CitzaG91bGRC
ZSgnaW5uZXJUZXh0SW5wdXQudmFsdWUnLCAnIkZIIicpOworCisKK2RlYnVnKCdcblRlc3QgYmVo
YXZpb3Igb2YgdGhlIGZpcnN0IGxlZ2VuZCBlbGVtZW50IGluIGEgZmllbGRzZXQgZWxlbWVudHMu
Jyk7Cit2YXIgbGVnZW5kRmllbGRTZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWVsZHNl
dCcpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsZWdlbmRGaWVsZFNldCk7Cit2YXIgZmly
c3RMZWdlbmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsZWdlbmQnKTsKK2xlZ2VuZEZpZWxk
U2V0LmFwcGVuZENoaWxkKGZpcnN0TGVnZW5kKTsKK3ZhciBzZWNvbmRMZWdlbmQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdsZWdlbmQnKTsKK2xlZ2VuZEZpZWxkU2V0LmFwcGVuZENoaWxkKHNl
Y29uZExlZ2VuZCk7CisKK3ZhciBmaXJzdExlZ2VuZFRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2lucHV0Jyk7CitmaXJzdExlZ2VuZFRleHRJbnB1dC50eXBlID0gInRleHQiOwor
Zmlyc3RMZWdlbmQuYXBwZW5kQ2hpbGQoZmlyc3RMZWdlbmRUZXh0SW5wdXQpOworCit2YXIgc2Vj
b25kTGVnZW5kVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKK3Nl
Y29uZExlZ2VuZFRleHRJbnB1dC50eXBlID0gInRleHQiOworc2Vjb25kTGVnZW5kLmFwcGVuZENo
aWxkKHNlY29uZExlZ2VuZFRleHRJbnB1dCk7CisKK2RlYnVnKCdDaGlsZHJlbiBvZiB0aGUgZmly
c3QgbGVnZW5kIGVsZW1lbnQgaW4gYSBmaWVsZHNldCBzaG91bGQgbm90IGdldCBkaXNhYmxlZCB3
aXRoIHRoZSBmaWVsZHNldC4nKTsKK2xlZ2VuZEZpZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsKK3No
b3VsZEJlVHJ1ZSgnbGVnZW5kRmllbGRTZXQuZGlzYWJsZWQnKTsKK2ZpcnN0TGVnZW5kVGV4dElu
cHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAn
SScpOworc2Vjb25kTGVnZW5kVGV4dElucHV0LmZvY3VzKCkKK2RvY3VtZW50LmV4ZWNDb21tYW5k
KCdpbnNlcnRUZXh0JywgZmFsc2UsICdJJyk7CitzaG91bGRCZSgnZmlyc3RMZWdlbmRUZXh0SW5w
dXQudmFsdWUnLCAnIkkiJyk7CitzaG91bGRCZSgnc2Vjb25kTGVnZW5kVGV4dElucHV0LnZhbHVl
JywgJyIiJyk7CisKK2RlYnVnKCdJbnNlcnQgYW5vdGhlciBsZWdlbmQgZWxlbWVudCBiZWZvcmUg
dGhlIGN1cnJlbnRseSBmaXJzdCBvbmUsIGFuZCBjaGVjayBhZ2Fpbi4nKTsKK3ZhciBpbnNlcnRl
ZExlZ2VuZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xlZ2VuZCcpOworbGVnZW5kRmllbGRT
ZXQuaW5zZXJ0QmVmb3JlKGluc2VydGVkTGVnZW5kLCBmaXJzdExlZ2VuZCk7Cit2YXIgaW5zZXJ0
ZWRMZWdlbmRUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworaW5z
ZXJ0ZWRMZWdlbmQuYXBwZW5kQ2hpbGQoaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQpOworCitpbnNl
cnRlZExlZ2VuZFRleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2Vy
dFRleHQnLCBmYWxzZSwgJ0onKTsKK2ZpcnN0TGVnZW5kVGV4dElucHV0LmZvY3VzKCk7Citkb2N1
bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSicpOworc2Vjb25kTGVnZW5k
VGV4dElucHV0LmZvY3VzKCkKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFs
c2UsICdKJyk7CitzaG91bGRCZSgnaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIkoi
Jyk7CitzaG91bGRCZSgnZmlyc3RMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIkkiJyk7CitzaG91
bGRCZSgnc2Vjb25kTGVnZW5kVGV4dElucHV0LnZhbHVlJywgJyIiJyk7CisKK2RlYnVnKCdFbmFi
bGUgdGhlIGZpZWxkc2V0IGFnYWluIGFuZCBjaGVjayBmb3Igc2FuaXR5LicpOworbGVnZW5kRmll
bGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKK3Nob3VsZEJlRmFsc2UoJ2xlZ2VuZEZpZWxkU2V0LmRp
c2FibGVkJyk7CitpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0snKTsKK2ZpcnN0TGVnZW5kVGV4dElucHV0
LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSycp
Oworc2Vjb25kTGVnZW5kVGV4dElucHV0LmZvY3VzKCkKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdp
bnNlcnRUZXh0JywgZmFsc2UsICdLJyk7CitzaG91bGRCZSgnaW5zZXJ0ZWRMZWdlbmRUZXh0SW5w
dXQudmFsdWUnLCAnIkpLIicpOworc2hvdWxkQmUoJ2ZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVl
JywgJyJJSyInKTsKK3Nob3VsZEJlKCdzZWNvbmRMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIksi
Jyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGNjYmE3MzcuLjdlYWYxYmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMi0wMy0yNiAgWmVubyBBbGJpc3NlciAgPHplbm9A
d2Via2l0Lm9yZz4KKworICAgICAgICBGaWVsZHNldCBkaXNhYmxlZCBhdHRyaWJ1dGUgZG9lcyBu
b3Qgd29yay4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU4ODM3CisKKyAgICAgICAgTWFrZSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50cyBpbmhlcml0IHRo
ZSBkaXNhYmxlZCBzdGF0ZQorICAgICAgICBmcm9tIEhUTUxGaWVsZFNldEVsZW1lbnQgYW5jZXN0
b3JzLiBTdWJvcmRpbmF0ZXMgb2YgdGhlCisgICAgICAgIGZpcnN0IEhUTUxMZWdlbmRFbGVtZW50
IGluIGEgZmllbGRzZXQgd2lsbCBuZXZlciBiZSBkaXNhYmxlZC4KKworICAgICAgICBQYXRjaCBi
eSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGVzdDogZmFzdC9m
b3Jtcy9maWVsZHNldC1kaXNhYmxlZC5odG1sCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6SFRNTEZpZWxkU2V0RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmll
bGRTZXRFbGVtZW50OjpsZWdlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxl
bWVudDo6dXBkYXRlTGVnZW5kKToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
aDoKKyAgICAgICAgKEhUTUxGaWVsZFNldEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZp
ZWxkU2V0RWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6dXBkYXRlRmllbGRTZXRBbmRMZWdlbmRBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkQXR0
cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpyZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxl
bWVudDo6ZGlzYWJsZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KToK
KyAgICAgICAgKiBodG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMZWdlbmRFbGVtZW50OjpIVE1MTGVnZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTGVnZW5kRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUp
OgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoSFRNTExlZ2VuZEVsZW1lbnQpOgorCiAyMDEyLTAzLTIxICBMaSBZaW4gIDxs
aS55aW5AaW50ZWwuY29tPgogCiAgICAgICAgIFtXZWJTb2NrZXRdVGhlIFNlYy1XZWJTb2NrZXQt
QWNjZXB0IE1VU1QgTk9UIGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiBhbiBIVFRQIHJlc3BvbnNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAppbmRleCA0Yjkw
NDEyLi5hYzhmZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNl
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVu
dC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkhUTUxGaWVsZFNldEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgog
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmllbGRzZXQuaCIKQEAg
LTM1LDYgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogaW5saW5lIEhUTUxG
aWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiAgICAg
OiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKQorICAgICwg
bV9sZWdlbmQoMCkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShmaWVsZHNldFRhZykpOwogfQpA
QCAtNDQsNiArNDYsMTggQEAgUGFzc1JlZlB0cjxIVE1MRmllbGRTZXRFbGVtZW50PiBIVE1MRmll
bGRTZXRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEhUTUxGaWVsZFNldEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pKTsK
IH0KIAordm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQo
KQoreworICAgIC8vIFRoaXMgZWxlbWVudCBtdXN0IGJlIHVwZGF0ZWQgYmVmb3JlIHRoZSBzdHls
ZSBvZiBub2RlcyBpbiBpdHMgc3VidHJlZSBnZXRzIHJlY2FsY3VsYXRlZC4KKyAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKTsKKworICAgIGZvciAo
Tm9kZSogY3VycmVudE5vZGUgPSB0aGlzOyBjdXJyZW50Tm9kZTsgY3VycmVudE5vZGUgPSBjdXJy
ZW50Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgeworICAgICAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpOworICAgICAgICBpZiAoZWxlbWVu
dCAmJiBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnQpLT5zZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgfQorfQorCiBib29sIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnN1cHBvcnRzRm9j
dXMoKSBjb25zdAogewogICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwpA
QCAtNjAsNCArNzQsMzAgQEAgUmVuZGVyT2JqZWN0KiBIVE1MRmllbGRTZXRFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWwKICAgICByZXR1cm4gbmV3
IChhcmVuYSkgUmVuZGVyRmllbGRzZXQodGhpcyk7CiB9CiAKK0hUTUxMZWdlbmRFbGVtZW50KiBI
VE1MRmllbGRTZXRFbGVtZW50OjpsZWdlbmQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xlZ2Vu
ZDsKK30KKwordm9pZCBIVE1MRmllbGRTZXRFbGVtZW50Ojp1cGRhdGVMZWdlbmQoSFRNTExlZ2Vu
ZEVsZW1lbnQqIG5ld0xlZ2VuZEVsZW1lbnQpCit7CisgICAgLy8gQSBuZXcgTGVnZW5kRWxlbWVu
dCBoYXMgYmVlbiBhZGRlZCBhbmQgd2UgZGlkIG5vdCBoYXZlIG9uZSBpbiB0aGUgc3VidHJlZSBi
ZWZvcmUuCisgICAgLy8gU28gaXQgaXMgdGhlIG9ubHkgb25lIGFuZCB0aGVyZSBpcyBubyBuZWVk
IHRvIHNlYXJjaCB0aGUgc3VidHJlZS4KKyAgICBpZiAobmV3TGVnZW5kRWxlbWVudCAmJiAhbV9s
ZWdlbmQpIHsKKyAgICAgICAgbV9sZWdlbmQgPSBuZXdMZWdlbmRFbGVtZW50OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gRWl0aGVyIGEgc2Vjb25kIExlZ2VuZEVsZW1lbnQgaGFz
IGJlZW4gYWRkZWQsIG9yIGFuIGV4aXN0aW5nIG9uZSBoYXMgYmVlbiByZW1vdmVkLgorICAgIC8v
IFdlIG5lZWQgdG8gc2VhcmNoIHRoZSBzdWJ0cmVlIGZvciB0aGUgZmlyc3QgTGVnZW5kRWxlbWVu
dC4KKyAgICBtX2xlZ2VuZCA9IDA7CisgICAgTm9kZSogbm9kZSA9IHRoaXM7CisgICAgd2hpbGUg
KChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkpIHsKKyAgICAgICAgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUobGVnZW5kVGFnKSkgeworICAgICAgICAgICAgbV9sZWdlbmQgPSBzdGF0
aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGaWVsZFNldEVsZW1lbnQuaAppbmRleCBkY2M4ZDBjLi5jMzAyNGQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaApAQCAtMzEsNiArMzEsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEZpZWxkU2V0RWxlbWVudCA6IHB1YmxpYyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
RmllbGRTZXRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kiwg
SFRNTEZvcm1FbGVtZW50Kik7CisgICAgSFRNTExlZ2VuZEVsZW1lbnQqIGxlZ2VuZCgpIGNvbnN0
OworICAgIHZvaWQgdXBkYXRlTGVnZW5kKEhUTUxMZWdlbmRFbGVtZW50KiBuZXdMZWdlbmRFbGVt
ZW50ID0gMCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZWRBdHRyaWJ1
dGVDaGFuZ2VkKCkgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgSFRNTEZpZWxkU2V0RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKQEAg
LTQwLDYgKzQ1LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
cmVjYWxjV2lsbFZhbGlkYXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIEhUTUxM
ZWdlbmRFbGVtZW50KiBtX2xlZ2VuZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbAppbmRleCAwYzM0ZGVlLi42MDA2YWQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKQEAgLTIw
LDYgKzIwLDcgQEAKIG1vZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBIVE1MRmllbGRTZXRF
bGVtZW50IDogSFRNTEVsZW1lbnQgeworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIGJvb2xl
YW4gZGlzYWJsZWQ7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MRm9ybUVsZW1lbnQg
Zm9ybTsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgbmFtZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMGRh
ZDM0Ni4uNDJkYTgwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCkBAIC0zMCw4ICszMCwxMCBAQAogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkhUTUxGaWVsZFNldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExlZ2VuZEVsZW1lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKQEAgLTQ2LDYgKzQ4LDkgQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhU
TUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IExhYmVsYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQpCisgICAgLCBtX2ZpZWxkU2V0QW5jZXN0b3IoMCkKKyAgICAsIG1fbGVnZW5kQW5jZXN0
b3IoMCkKKyAgICAsIG1fZmllbGRTZXRBbmNlc3RvclZhbGlkKGZhbHNlKQogICAgICwgbV9kaXNh
YmxlZChmYWxzZSkKICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBtX3JlcXVpcmVkKGZh
bHNlKQpAQCAtOTUsNiArMTAwLDIxIEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9y
bU5vVmFsaWRhdGUoKSBjb25zdAogICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKGZvcm1ub3Zh
bGlkYXRlQXR0cik7CiB9CiAKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlRmll
bGRTZXRBbmRMZWdlbmRBbmNlc3RvcigpIGNvbnN0Cit7CisgICAgbV9maWVsZFNldEFuY2VzdG9y
ID0gMDsKKyAgICBtX2xlZ2VuZEFuY2VzdG9yID0gMDsKKyAgICBmb3IgKENvbnRhaW5lck5vZGUq
IGFuY2VzdG9yID0gcGFyZW50Tm9kZSgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+
cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmICghbV9sZWdlbmRBbmNlc3RvciAmJiBhbmNlc3Rv
ci0+aGFzVGFnTmFtZShsZWdlbmRUYWcpKQorICAgICAgICAgICAgbV9sZWdlbmRBbmNlc3RvciA9
IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50Kj4oYW5jZXN0b3IpOworICAgICAgICBpZiAo
YW5jZXN0b3ItPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKSB7CisgICAgICAgICAgICBtX2ZpZWxk
U2V0QW5jZXN0b3IgPSBzdGF0aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50Kj4oYW5jZXN0b3Ip
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9maWVsZFNldEFu
Y2VzdG9yVmFsaWQgPSB0cnVlOworfQorCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IGZvcm1BdHRyKQpAQCAtMTAyLDExICsxMjIsOCBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gZGlzYWJsZWRBdHRyKSB7CiAgICAgICAgIGJvb2wgb2xkRGlzYWJsZWQgPSBtX2Rp
c2FibGVkOwogICAgICAgICBtX2Rpc2FibGVkID0gIWF0dHItPmlzTnVsbCgpOwotICAgICAgICBp
ZiAob2xkRGlzYWJsZWQgIT0gbV9kaXNhYmxlZCkgewotICAgICAgICAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYygpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5
bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1l
KCktPnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBFbmFibGVkU3RhdGUpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChvbGREaXNhYmxlZCAhPSBtX2Rpc2FibGVkKQorICAgICAgICAgICAgZGlzYWJs
ZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVh
ZG9ubHlBdHRyKSB7CiAgICAgICAgIGJvb2wgb2xkUmVhZE9ubHkgPSBtX3JlYWRPbmx5OwogICAg
ICAgICBtX3JlYWRPbmx5ID0gIWF0dHItPmlzTnVsbCgpOwpAQCAtMTI1LDYgKzE0MiwxMyBAQCB2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikKICAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7CiB9CiAKK3ZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkKK3sKKyAgICBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+aGFzQXBwZWFyYW5jZSgpKQorICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNo
YW5nZWQocmVuZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKK30KKwogdm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZXF1aXJlZEF0dHJpYnV0ZUNoYW5nZWQoKQogewogICAgIHNldE5lZWRzVmFs
aWRpdHlDaGVjaygpOwpAQCAtMjA1LDYgKzIyOSw3IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCiAKIHZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKIHsKKyAgICBtX2ZpZWxkU2V0QW5j
ZXN0b3JWYWxpZCA9IGZhbHNlOwogICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZy
b21UcmVlKCk7CiAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShkZWVwKTsKIH0KQEAg
LTI1NCw2ICsyNzksMjAgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZv
cm1Db250cm9sSW5wdXRFdmVudCgpCiAgICAgSFRNTEVsZW1lbnQ6OmRpc3BhdGNoSW5wdXRFdmVu
dCgpOwogfQogCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QK
K3sKKyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
IW1fZmllbGRTZXRBbmNlc3RvclZhbGlkKQorICAgICAgICB1cGRhdGVGaWVsZFNldEFuZExlZ2Vu
ZEFuY2VzdG9yKCk7CisKKyAgICAvLyBGb3JtIGNvbnRyb2xzIGluIHRoZSBmaXJzdCBsZWdlbmQg
ZWxlbWVudCBpbnNpZGUgYSBmaWVsZHNldCBhcmUgbm90IGFmZmVjdGVkIGJ5IGZpZWxkc2V0LmRp
c2FibGVkLgorICAgIGlmIChtX2ZpZWxkU2V0QW5jZXN0b3IgJiYgbV9maWVsZFNldEFuY2VzdG9y
LT5kaXNhYmxlZCgpKQorICAgICAgICByZXR1cm4gIShtX2xlZ2VuZEFuY2VzdG9yICYmIG1fbGVn
ZW5kQW5jZXN0b3IgPT0gbV9maWVsZFNldEFuY2VzdG9yLT5sZWdlbmQoKSk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldERpc2FibGVkKGJv
b2wgYikKIHsKICAgICBzZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyLCBiID8gIiIgOiAwKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKaW5kZXggM2U2MWU3
OC4uNmQ5ODNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmgKQEAgLTMwLDcgKzMwLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9y
bURhdGFMaXN0OworY2xhc3MgSFRNTEZpZWxkU2V0RWxlbWVudDsKIGNsYXNzIEhUTUxGb3JtRWxl
bWVudDsKK2NsYXNzIEhUTUxMZWdlbmRFbGVtZW50OwogY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2U7
CiBjbGFzcyBWYWxpZGl0eVN0YXRlOwogCkBAIC00OSw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEZvcm1NZXRob2QoY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCBmb3JtTm9WYWxpZGF0
ZSgpIGNvbnN0OwogCisgICAgdm9pZCB1cGRhdGVGaWVsZFNldEFuZExlZ2VuZEFuY2VzdG9yKCkg
Y29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZU1hdGNoZXNSZW5kZXJlcjsgfQpAQCAtNjAsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOwogCi0gICAgdmlydHVhbCBib29sIGRp
c2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQorICAgIHZpcnR1YWwgYm9vbCBk
aXNhYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKQEAgLTExMiw2ICsxMTYsNyBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBdHRyaWJ1dGUoQXR0cmlidXRlKikgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZCgpOworICAgIHZp
cnR1YWwgdm9pZCBkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCk7CkBAIC0xNDUsNyAr
MTUwLDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3JtQ29udHJvbEVs
ZW1lbnQoKTsKICAgICBTdHJpbmcgdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3Q7CiAK
KyAgICBtdXRhYmxlIEhUTUxGaWVsZFNldEVsZW1lbnQqIG1fZmllbGRTZXRBbmNlc3RvcjsKKyAg
ICBtdXRhYmxlIEhUTUxMZWdlbmRFbGVtZW50KiBtX2xlZ2VuZEFuY2VzdG9yOwogICAgIE93blB0
cjxWYWxpZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0aW9uTWVzc2FnZTsKKyAgICBtdXRhYmxlIGJv
b2wgbV9maWVsZFNldEFuY2VzdG9yVmFsaWQgOiAxOwogICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7
CiAgICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKICAgICBib29sIG1fcmVxdWlyZWQgOiAxOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAppbmRleCBmZDEwM2Q1Li4yMDZh
MjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcApAQCAtMjUs
NiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxMZWdlbmRFbGVt
ZW50LmgiCiAKKyNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTM2LDYgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAogaW5saW5lIEhUTUxMZWdlbmRFbGVtZW50OjpIVE1MTGVnZW5kRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBI
VE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIG1fZmllbGRTZXRBbmNlc3Rvcigw
KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGxlZ2VuZFRhZykpOwogfQpAQCAtNDUsNiArNDcs
MjggQEAgUGFzc1JlZlB0cjxIVE1MTGVnZW5kRWxlbWVudD4gSFRNTExlZ2VuZEVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhU
TUxMZWdlbmRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKK3ZvaWQgSFRNTExlZ2Vu
ZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIEhUTUxFbGVtZW50
OjppbnNlcnRlZEludG9UcmVlKGRlZXApOworCisgICAgQ29udGFpbmVyTm9kZSogZmllbGRzZXQg
PSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKGZpZWxkc2V0ICYmICFmaWVsZHNldC0+aGFzVGFn
TmFtZShmaWVsZHNldFRhZykpCisgICAgICAgIGZpZWxkc2V0ID0gZmllbGRzZXQtPnBhcmVudE5v
ZGUoKTsKKyAgICBpZiAoZmllbGRzZXQpIHsKKyAgICAgICAgbV9maWVsZFNldEFuY2VzdG9yID0g
c3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudCo+KGZpZWxkc2V0KTsKKyAgICAgICAgbV9m
aWVsZFNldEFuY2VzdG9yLT51cGRhdGVMZWdlbmQodGhpcyk7CisgICAgfQorfQorCit2b2lkIEhU
TUxMZWdlbmRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQoreworICAgIGlmICht
X2ZpZWxkU2V0QW5jZXN0b3IpCisgICAgICAgIG1fZmllbGRTZXRBbmNlc3Rvci0+dXBkYXRlTGVn
ZW5kKCk7CisgICAgbV9maWVsZFNldEFuY2VzdG9yID0gMDsKKyAgICBIVE1MRWxlbWVudDo6cmVt
b3ZlZEZyb21UcmVlKGRlZXApOworfQorCisKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhUTUxM
ZWdlbmRFbGVtZW50Ojphc3NvY2lhdGVkQ29udHJvbCgpCiB7CiAgICAgLy8gQ2hlY2sgaWYgdGhl
cmUncyBhIGZpZWxkc2V0IGJlbG9uZ2luZyB0byB0aGlzIGxlZ2VuZC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAppbmRleCA5NTEyOWVjLi5hNDRhYjllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oCkBAIC0yOSwxMiArMjksMTcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudDsKK2NsYXNzIEhU
TUxGaWVsZFNldEVsZW1lbnQ7CiAKIGNsYXNzIEhUTUxMZWdlbmRFbGVtZW50IDogcHVibGljIEhU
TUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MTGVnZW5kRWxl
bWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi1wcml2YXRl
OgorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVl
cCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXAp
IE9WRVJSSURFOworCisgcHJpdmF0ZToKICAgICBIVE1MTGVnZW5kRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIC8vIENvbnRyb2wgaW4gdGhlIGxlZ2VuZCdz
IGZpZWxkc2V0IHRoYXQgZ2V0cyBmb2N1cyBhbmQgYWNjZXNzIGtleS4KQEAgLTQyLDYgKzQ3LDgg
QEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5k
TW91c2VFdmVudHMpOwogICAgIHZpcnR1YWwgdm9pZCBmb2N1cyhib29sIHJlc3RvcmVQcmV2aW91
c1NlbGVjdGlvbiA9IHRydWUpOworCisgICAgSFRNTEZpZWxkU2V0RWxlbWVudCogbV9maWVsZFNl
dEFuY2VzdG9yOwogfTsKIAogfSAvL25hbWVzcGFjZQo=
</data>
<flag name="review"
          id="138331"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134287</attachid>
            <date>2012-03-28 07:07:54 -0700</date>
            <delta_ts>2012-03-29 03:14:45 -0700</delta_ts>
            <desc>patch for review. - fixed issues as commented before.</desc>
            <filename>58837_20120328-160726.patch</filename>
            <type>text/plain</type>
            <size>25582</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlYWU3MzRiLi44YjM2MTJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDMt
MjggIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmllbGRzZXQg
ZGlzYWJsZWQgYXR0cmlidXRlIGRvZXMgbm90IHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzNworCisgICAgICAgIEFkZCBhIHRlc3QgY2Fz
ZSBmb3IgZmllbGRzZXQgZGlzYWJsZWQgYXR0cmlidXRlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9maWVsZHNldC9maWVsZHNl
dC1kaXNhYmxlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZmll
bGRzZXQvZmllbGRzZXQtZGlzYWJsZWQuaHRtbDogQWRkZWQuCisKIDIwMTItMDMtMjEgIExpIFlp
biAgPGxpLnlpbkBpbnRlbC5jb20+CiAKICAgICAgICAgW1dlYlNvY2tldF1UaGUgU2VjLVdlYlNv
Y2tldC1BY2NlcHQgTVVTVCBOT1QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIGFuIEhUVFAgcmVz
cG9uc2UKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQvZmllbGRz
ZXQtZGlzYWJsZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWVsZHNl
dC9maWVsZHNldC1kaXNhYmxlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNDdiODhhZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvZmllbGRzZXQvZmllbGRzZXQtZGlzYWJsZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTA3IEBACitUZXN0cyBmb3IgSFRNTEZpZWxkU2V0RWxlbWVudC5kaXNhYmxlZCBiZWhhdmlvci4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKworVmVyaWZ5aW5nIHBhcnNlciBnZW5l
cmF0ZWQgZmllbGRzZXRzLgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDEudmFsdWUgaXMgIkwi
CitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0Mi52YWx1ZSBpcyAiTSIKK1BBU1MgcGFyc2VyR2Vu
ZXJhdGVkSW5wdXQzLnZhbHVlIGlzICJOTyIKK1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQ0LnZh
bHVlIGlzICIiCitQQVNTIHBhcnNlckdlbmVyYXRlZElucHV0NS52YWx1ZSBpcyAiUCIKK1BBU1Mg
cGFyc2VyR2VuZXJhdGVkSW5wdXQ2LnZhbHVlIGlzICIiCitQQVNTIHBhcnNlckdlbmVyYXRlZElu
cHV0Ny52YWx1ZSBpcyAiIgorUEFTUyBwYXJzZXJHZW5lcmF0ZWRJbnB1dDgudmFsdWUgaXMgIiIK
K1BBU1MgcGFyc2VyR2VuZXJhdGVkSW5wdXQ5LnZhbHVlIGlzICIiCisKK1Rlc3RpbmcgYSBzaW5n
bGUgZmllbGRzZXQgZWxlbWVudC4KK1ZlcmlmeWluZyBIVE1MRm9ybUNvbnRyb2wgY2FuIGJlIGRp
c2FibGVkIHJlZ2FyZGxlc3Mgb2YgZW5jbG9zaW5nIGZpZWxkc2V0LgorUEFTUyB0ZXh0SW5wdXQu
ZGlzYWJsZWQgaXMgdHJ1ZQorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIiIKK1BBU1MgZmllbGRT
ZXQuZGlzYWJsZWQgaXMgZmFsc2UKK0ZpZWxkc2V0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQSB1
c2VyIGNhbiBpbnNlcnRUZXh0IGludG8gdGhlIHRleHQgaW5wdXQgZmllbGQuCitQQVNTIHRleHRJ
bnB1dC52YWx1ZSBpcyAiQSIKK0Rpc2FibGUgZmllbGRzZXQuCitQQVNTIGZpZWxkU2V0LmRpc2Fi
bGVkIGlzIHRydWUKK09uY2UgdGhlIGZpZWxkc2V0IGlzIGRpc2FibGVkLCB0ZXh0IGNhbm5vdCBi
ZSBpbnNlcnRlZC4KK1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBIgorQ2hlY2sgaWYgdGhlIHN0
eWxlIG9mIHRoZSB0ZXh0IGVsZW1lbnQgY2hhbmdlZC4KK1BBU1MgZ2V0Q29tcHV0ZWRTdHlsZSh0
ZXh0SW5wdXQpLmJhY2tncm91bmRDb2xvciBpcyAncmdiKDI1NSwgMCwgMCknCitFbmFibGUgZmll
bGRzZXQuCitQQVNTIGZpZWxkU2V0LmRpc2FibGVkIGlzIGZhbHNlCitQQVNTIGdldENvbXB1dGVk
U3R5bGUodGV4dElucHV0KS5iYWNrZ3JvdW5kQ29sb3IgaXMgJ3JnYigyNTUsIDI1NSwgMTAwKScK
K1BBU1MgdGV4dElucHV0LnZhbHVlIGlzICJBQiIKK01vdmUgdGhlIHRleHRpbnB1dCBlbGVtZW50
IG91dCBvZiB0aGUgZmllbGRzZXQuCitEaXNhYmxlIHRoZSBmaWVsZHNldC4KK1BBU1MgZmllbGRT
ZXQuZGlzYWJsZWQgaXMgdHJ1ZQorVGV4dCBjYW4gYmUgaW5zZXJ0ZWQsIGJlY2F1c2UgdGhlIHRl
eHRpbnB1dCBlbGVtZW50IGlzIG91dHNpZGUgb2YgdGhlIGRpc2FibGVkIGZpZWxkc2V0LgorUEFT
UyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQyIKK0VuYWJsZSB0aGUgZmllbGRzZXQuCitQQVNTIGZp
ZWxkU2V0LmRpc2FibGVkIGlzIGZhbHNlCitJbnNlcnQgYSB0YWJsZSBpbnRvIHRoZSBmaWVsZHNl
dC4KK01vdmUgdGhlIHRleHRpbnB1dCBmaWVsZCBpbnRvIHRoZSB0YWJsZS4KK1BBU1MgdGV4dElu
cHV0LnZhbHVlIGlzICJBQkNEIgorRGlzYWJsZSB0aGUgZmllbGRzZXQuCitQQVNTIGZpZWxkU2V0
LmRpc2FibGVkIGlzIHRydWUKK0luc2VydGluZyB0ZXh0IHNob3VsZCBmYWlsLgorUEFTUyB0ZXh0
SW5wdXQudmFsdWUgaXMgIkFCQ0QiCitFbmFibGUgdGhlIGZpZWxkc2V0LgorUEFTUyBmaWVsZFNl
dC5kaXNhYmxlZCBpcyBmYWxzZQorUEFTUyB0ZXh0SW5wdXQudmFsdWUgaXMgIkFCQ0RFIgorCitU
ZXN0aW5nIG5lc3RlZCBmaWVsZHNldCBlbGVtZW50cy4KK1ZlcmlmeWluZyB0aGF0IHN1Ym9yZGlu
YXRlcyBvZiBib3RoIGZpZWxkc2V0cyBhcmUgZW5hYmxlZC4KK1BBU1Mgb3V0ZXJUZXh0SW5wdXQu
dmFsdWUgaXMgIkYiCitQQVNTIGlubmVyVGV4dElucHV0LnZhbHVlIGlzICJGIgorRGlzYWJsaW5n
IHRoZSBpbm5lciBmaWVsZHNldCBvbmx5LgorUEFTUyBpbm5lckZpZWxkU2V0LmRpc2FibGVkIGlz
IHRydWUKK1BBU1Mgb3V0ZXJUZXh0SW5wdXQudmFsdWUgaXMgIkZHIgorUEFTUyBpbm5lclRleHRJ
bnB1dC52YWx1ZSBpcyAiRiIKK0VuYWJsaW5nIHRoZSBpbm5lciBhbmQgZGlzYWJsaW5nIHRoZSBv
dXRlciBmaWVsZHNldC4KK1BBU1Mgb3V0ZXJGaWVsZFNldC5kaXNhYmxlZCBpcyB0cnVlCitQQVNT
IGlubmVyRmllbGRTZXQuZGlzYWJsZWQgaXMgZmFsc2UKK1BBU1Mgb3V0ZXJUZXh0SW5wdXQudmFs
dWUgaXMgIkZHIgorUEFTUyBpbm5lclRleHRJbnB1dC52YWx1ZSBpcyAiRiIKK0Rpc2FibGluZyBi
b3RoIGZpZWxkc2V0IGVsZW1lbnRzLgorUEFTUyBvdXRlckZpZWxkU2V0LmRpc2FibGVkIGlzIHRy
dWUKK1BBU1MgaW5uZXJGaWVsZFNldC5kaXNhYmxlZCBpcyB0cnVlCitQQVNTIG91dGVyVGV4dElu
cHV0LnZhbHVlIGlzICJGRyIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFsdWUgaXMgIkYiCitFbmFi
bGluZyBib3RoIGZpZWxkc2V0IGVsZW1lbnRzLgorUEFTUyBvdXRlckZpZWxkU2V0LmRpc2FibGVk
IGlzIGZhbHNlCitQQVNTIGlubmVyRmllbGRTZXQuZGlzYWJsZWQgaXMgZmFsc2UKK1BBU1Mgb3V0
ZXJUZXh0SW5wdXQudmFsdWUgaXMgIkZHSCIKK1BBU1MgaW5uZXJUZXh0SW5wdXQudmFsdWUgaXMg
IkZIIgorCitUZXN0IGJlaGF2aW9yIG9mIHRoZSBmaXJzdCBsZWdlbmQgZWxlbWVudCBpbiBhIGZp
ZWxkc2V0IGVsZW1lbnRzLgorQ2hpbGRyZW4gb2YgdGhlIGZpcnN0IGxlZ2VuZCBlbGVtZW50IGlu
IGEgZmllbGRzZXQgc2hvdWxkIG5vdCBnZXQgZGlzYWJsZWQgd2l0aCB0aGUgZmllbGRzZXQuCitQ
QVNTIGxlZ2VuZEZpZWxkU2V0LmRpc2FibGVkIGlzIHRydWUKK1BBU1MgZmlyc3RMZWdlbmRUZXh0
SW5wdXQudmFsdWUgaXMgIkkiCitQQVNTIHNlY29uZExlZ2VuZFRleHRJbnB1dC52YWx1ZSBpcyAi
IgorSW5zZXJ0IGFub3RoZXIgbGVnZW5kIGVsZW1lbnQgYmVmb3JlIHRoZSBjdXJyZW50bHkgZmly
c3Qgb25lLCBhbmQgY2hlY2sgYWdhaW4uCitQQVNTIGluc2VydGVkTGVnZW5kVGV4dElucHV0LnZh
bHVlIGlzICJKIgorUEFTUyBmaXJzdExlZ2VuZFRleHRJbnB1dC52YWx1ZSBpcyAiSSIKK1BBU1Mg
c2Vjb25kTGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICIiCitFbmFibGUgdGhlIGZpZWxkc2V0IGFn
YWluIGFuZCBjaGVjayBmb3Igc2FuaXR5LgorUEFTUyBsZWdlbmRGaWVsZFNldC5kaXNhYmxlZCBp
cyBmYWxzZQorUEFTUyBpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC52YWx1ZSBpcyAiSksiCitQQVNT
IGZpcnN0TGVnZW5kVGV4dElucHV0LnZhbHVlIGlzICJJSyIKK1BBU1Mgc2Vjb25kTGVnZW5kVGV4
dElucHV0LnZhbHVlIGlzICJLIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKKworIAorCisKKyAKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0L2ZpZWxkc2V0LWRpc2FibGVkLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpZWxkc2V0L2ZpZWxkc2V0LWRpc2FibGVkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxYjhhMwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmllbGRzZXQvZmllbGRzZXQtZGlzYWJsZWQuaHRt
bApAQCAtMCwwICsxLDMwMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CitpbnB1dCB7CisgICAgYmFja2dyb3VuZDpyZ2IoMjU1
LDI1NSwxMDApOworfQoraW5wdXQ6ZGlzYWJsZWQgeworICAgIGJhY2tncm91bmQ6cmdiKDI1NSww
LDApOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtPgorPGZpZWxkc2V0PgorPGxlZ2Vu
ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBhcnNlckdlbmVyYXRlZElucHV0MSI+PC9sZWdlbmQ+
Cis8bGVnZW5kPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQyIj48
L2xlZ2VuZD4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQzIj4K
KzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQ0IiBkaXNhYmxlZD4K
KzwvZmllbGRzZXQ+Cis8ZmllbGRzZXQgZGlzYWJsZWQ+Cis8bGVnZW5kPjxpbnB1dCB0eXBlPSJ0
ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVkSW5wdXQ1Ij48L2xlZ2VuZD4KKzxsZWdlbmQ+PGlucHV0
IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDYiPjwvbGVnZW5kPgorPGlucHV0
IHR5cGU9InRleHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDciPgorPGlucHV0IHR5cGU9InRl
eHQiIGlkPSJwYXJzZXJHZW5lcmF0ZWRJbnB1dDgiIGRpc2FibGVkPgorPC9maWVsZHNldD4KKzxm
aWVsZHNldCBkaXNhYmxlZD4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icGFyc2VyR2VuZXJhdGVk
SW5wdXQ5Ij4KKzwvZmllbGRzZXQ+Cis8L2Zvcm0+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbign
VGVzdHMgZm9yIEhUTUxGaWVsZFNldEVsZW1lbnQuZGlzYWJsZWQgYmVoYXZpb3IuJyk7CisKK2Rl
YnVnKCdcblZlcmlmeWluZyBwYXJzZXIgZ2VuZXJhdGVkIGZpZWxkc2V0cy4nKTsKK3ZhciBwYXJz
ZXJHZW5lcmF0ZWRJbnB1dDEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyc2VyR2VuZXJh
dGVkSW5wdXQxIik7Cit2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQyID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0MiIpOwordmFyIHBhcnNlckdlbmVyYXRlZElu
cHV0MyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJbnB1dDMiKTsK
K3ZhciBwYXJzZXJHZW5lcmF0ZWRJbnB1dDQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFy
c2VyR2VuZXJhdGVkSW5wdXQ0Iik7Cit2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQ1ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0NSIpOwordmFyIHBhcnNlckdl
bmVyYXRlZElucHV0NiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJHZW5lcmF0ZWRJ
bnB1dDYiKTsKK3ZhciBwYXJzZXJHZW5lcmF0ZWRJbnB1dDcgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicGFyc2VyR2VuZXJhdGVkSW5wdXQ3Iik7Cit2YXIgcGFyc2VyR2VuZXJhdGVkSW5wdXQ4
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcnNlckdlbmVyYXRlZElucHV0OCIpOwordmFy
IHBhcnNlckdlbmVyYXRlZElucHV0OSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJzZXJH
ZW5lcmF0ZWRJbnB1dDkiKTsKKworcGFyc2VyR2VuZXJhdGVkSW5wdXQxLmZvY3VzKCk7Citkb2N1
bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnTCcpOworcGFyc2VyR2VuZXJh
dGVkSW5wdXQyLmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZh
bHNlLCAnTScpOworcGFyc2VyR2VuZXJhdGVkSW5wdXQzLmZvY3VzKCk7Citkb2N1bWVudC5leGVj
Q29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnTicpOworcGFyc2VyR2VuZXJhdGVkSW5wdXQ0
LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnTycp
OworcGFyc2VyR2VuZXJhdGVkSW5wdXQ1LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgn
aW5zZXJ0VGV4dCcsIGZhbHNlLCAnUCcpOworcGFyc2VyR2VuZXJhdGVkSW5wdXQ2LmZvY3VzKCk7
Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnUScpOworcGFyc2Vy
R2VuZXJhdGVkSW5wdXQ3LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4
dCcsIGZhbHNlLCAnUicpOworcGFyc2VyR2VuZXJhdGVkSW5wdXQ4LmZvY3VzKCk7Citkb2N1bWVu
dC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnUycpOworcGFyc2VyR2VuZXJhdGVk
SW5wdXQ5LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNl
LCAnVCcpOworCitzaG91bGRCZSgncGFyc2VyR2VuZXJhdGVkSW5wdXQxLnZhbHVlJywgJyJMIicp
Oworc2hvdWxkQmUoJ3BhcnNlckdlbmVyYXRlZElucHV0Mi52YWx1ZScsICciTSInKTsKK3Nob3Vs
ZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDMudmFsdWUnLCAnIk5PIicpOworc2hvdWxkQmUoJ3Bh
cnNlckdlbmVyYXRlZElucHV0NC52YWx1ZScsICciIicpOworc2hvdWxkQmUoJ3BhcnNlckdlbmVy
YXRlZElucHV0NS52YWx1ZScsICciUCInKTsKK3Nob3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1
dDYudmFsdWUnLCAnIiInKTsKK3Nob3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDcudmFsdWUn
LCAnIiInKTsKK3Nob3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDgudmFsdWUnLCAnIiInKTsK
K3Nob3VsZEJlKCdwYXJzZXJHZW5lcmF0ZWRJbnB1dDkudmFsdWUnLCAnIiInKTsKKworCitkZWJ1
ZygnXG5UZXN0aW5nIGEgc2luZ2xlIGZpZWxkc2V0IGVsZW1lbnQuJyk7Cit2YXIgZmllbGRTZXQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWVsZHNldCcpOworZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChmaWVsZFNldCk7Cit2YXIgdGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnaW5wdXQnKTsKK3RleHRJbnB1dC50eXBlID0gInRleHQiOworZmllbGRTZXQuYXBwZW5kQ2hp
bGQodGV4dElucHV0KTsKKworZGVidWcoJ1ZlcmlmeWluZyBIVE1MRm9ybUNvbnRyb2wgY2FuIGJl
IGRpc2FibGVkIHJlZ2FyZGxlc3Mgb2YgZW5jbG9zaW5nIGZpZWxkc2V0LicpOwordGV4dElucHV0
LmRpc2FibGVkID0gdHJ1ZTsKK3Nob3VsZEJlVHJ1ZSgndGV4dElucHV0LmRpc2FibGVkJyk7Cit0
ZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFs
c2UsICdBJyk7CitzaG91bGRCZSgndGV4dElucHV0LnZhbHVlJywgJyIiJyk7CitzaG91bGRCZUZh
bHNlKCdmaWVsZFNldC5kaXNhYmxlZCcpOwordGV4dElucHV0LmRpc2FibGVkID0gZmFsc2U7CisK
K2RlYnVnKCdGaWVsZHNldCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIEEgdXNlciBjYW4gaW5zZXJ0
VGV4dCBpbnRvIHRoZSB0ZXh0IGlucHV0IGZpZWxkLicpOwordGV4dElucHV0LmZvY3VzKCk7Citk
b2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQScpOworc2hvdWxkQmUo
J3RleHRJbnB1dC52YWx1ZScsICciQSInKTsKKworZGVidWcoJ0Rpc2FibGUgZmllbGRzZXQuJyk7
CitmaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CitzaG91bGRCZVRydWUoJ2ZpZWxkU2V0LmRpc2Fi
bGVkJyk7CisKK2RlYnVnKCdPbmNlIHRoZSBmaWVsZHNldCBpcyBkaXNhYmxlZCwgdGV4dCBjYW5u
b3QgYmUgaW5zZXJ0ZWQuJyk7Cit0ZXh0SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21t
YW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdCJyk7CitzaG91bGRCZSgndGV4dElucHV0LnZhbHVl
JywgJyJBIicpOworCitkZWJ1ZygiQ2hlY2sgaWYgdGhlIHN0eWxlIG9mIHRoZSB0ZXh0IGVsZW1l
bnQgY2hhbmdlZC4iKTsKK3Nob3VsZEJlKCJnZXRDb21wdXRlZFN0eWxlKHRleHRJbnB1dCkuYmFj
a2dyb3VuZENvbG9yIiwgIidyZ2IoMjU1LCAwLCAwKSciKTsKKworZGVidWcoJ0VuYWJsZSBmaWVs
ZHNldC4nKTsKK2ZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CitzaG91bGRCZUZhbHNlKCdmaWVs
ZFNldC5kaXNhYmxlZCcpOworc2hvdWxkQmUoImdldENvbXB1dGVkU3R5bGUodGV4dElucHV0KS5i
YWNrZ3JvdW5kQ29sb3IiLCAiJ3JnYigyNTUsIDI1NSwgMTAwKSciKTsKKwordGV4dElucHV0LmZv
Y3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQicpOwor
c2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUIiJyk7CisKK2RlYnVnKCdNb3ZlIHRoZSB0
ZXh0aW5wdXQgZWxlbWVudCBvdXQgb2YgdGhlIGZpZWxkc2V0LicpOworZmllbGRTZXQucmVtb3Zl
Q2hpbGQodGV4dElucHV0KTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dElucHV0KTsK
KworZGVidWcoJ0Rpc2FibGUgdGhlIGZpZWxkc2V0LicpOworZmllbGRTZXQuZGlzYWJsZWQgPSB0
cnVlOworc2hvdWxkQmVUcnVlKCdmaWVsZFNldC5kaXNhYmxlZCcpOworCitkZWJ1ZygnVGV4dCBj
YW4gYmUgaW5zZXJ0ZWQsIGJlY2F1c2UgdGhlIHRleHRpbnB1dCBlbGVtZW50IGlzIG91dHNpZGUg
b2YgdGhlIGRpc2FibGVkIGZpZWxkc2V0LicpOwordGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVu
dC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQycpOworc2hvdWxkQmUoJ3RleHRJ
bnB1dC52YWx1ZScsICciQUJDIicpOworCitkZWJ1ZygnRW5hYmxlIHRoZSBmaWVsZHNldC4nKTsK
K2ZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7CitzaG91bGRCZUZhbHNlKCdmaWVsZFNldC5kaXNh
YmxlZCcpOworCitkZWJ1ZygnSW5zZXJ0IGEgdGFibGUgaW50byB0aGUgZmllbGRzZXQuJyk7Cit2
YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOworZmllbGRTZXQuYXBw
ZW5kQ2hpbGQodGFibGUpOwordmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsK
K3RhYmxlLmFwcGVuZENoaWxkKHRyKTsKK3ZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3RkJyk7Cit0ci5hcHBlbmRDaGlsZCh0ZCk7CisKK2RlYnVnKCdNb3ZlIHRoZSB0ZXh0aW5wdXQg
ZmllbGQgaW50byB0aGUgdGFibGUuJyk7Citkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRJ
bnB1dCk7Cit0ZC5hcHBlbmRDaGlsZCh0ZXh0SW5wdXQpOworCit0ZXh0SW5wdXQuZm9jdXMoKTsK
K2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdEJyk7CitzaG91bGRC
ZSgndGV4dElucHV0LnZhbHVlJywgJyJBQkNEIicpOworCitkZWJ1ZygnRGlzYWJsZSB0aGUgZmll
bGRzZXQuJyk7CitmaWVsZFNldC5kaXNhYmxlZCA9IHRydWU7CitzaG91bGRCZVRydWUoJ2ZpZWxk
U2V0LmRpc2FibGVkJyk7CisKK2RlYnVnKCdJbnNlcnRpbmcgdGV4dCBzaG91bGQgZmFpbC4nKQor
dGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZh
bHNlLCAnRScpOworc2hvdWxkQmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDRCInKTsKKworZGVi
dWcoJ0VuYWJsZSB0aGUgZmllbGRzZXQuJyk7CitmaWVsZFNldC5kaXNhYmxlZCA9IGZhbHNlOwor
c2hvdWxkQmVGYWxzZSgnZmllbGRTZXQuZGlzYWJsZWQnKTsKKwordGV4dElucHV0LmZvY3VzKCk7
Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRScpOworc2hvdWxk
QmUoJ3RleHRJbnB1dC52YWx1ZScsICciQUJDREUiJyk7CisKKworZGVidWcoJ1xuVGVzdGluZyBu
ZXN0ZWQgZmllbGRzZXQgZWxlbWVudHMuJyk7Cit2YXIgb3V0ZXJGaWVsZFNldCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2ZpZWxkc2V0Jyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91
dGVyRmllbGRTZXQpOwordmFyIGlubmVyRmllbGRTZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdmaWVsZHNldCcpOworb3V0ZXJGaWVsZFNldC5hcHBlbmRDaGlsZChpbm5lckZpZWxkU2V0KTsK
K3ZhciBvdXRlclRleHRJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Citv
dXRlclRleHRJbnB1dC50eXBlID0gInRleHQiOworb3V0ZXJGaWVsZFNldC5hcHBlbmRDaGlsZChv
dXRlclRleHRJbnB1dCk7Cit2YXIgaW5uZXJUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpbnB1dCcpOworaW5uZXJUZXh0SW5wdXQudHlwZSA9ICJ0ZXh0IjsKK2lubmVyRmllbGRT
ZXQuYXBwZW5kQ2hpbGQoaW5uZXJUZXh0SW5wdXQpOworCitkZWJ1ZygnVmVyaWZ5aW5nIHRoYXQg
c3Vib3JkaW5hdGVzIG9mIGJvdGggZmllbGRzZXRzIGFyZSBlbmFibGVkLicpOworb3V0ZXJUZXh0
SW5wdXQuZm9jdXMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2Us
ICdGJyk7Citpbm5lclRleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2lu
c2VydFRleHQnLCBmYWxzZSwgJ0YnKTsKK3Nob3VsZEJlKCdvdXRlclRleHRJbnB1dC52YWx1ZScs
ICciRiInKTsKK3Nob3VsZEJlKCdpbm5lclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKworZGVi
dWcoJ0Rpc2FibGluZyB0aGUgaW5uZXIgZmllbGRzZXQgb25seS4nKTsKK2lubmVyRmllbGRTZXQu
ZGlzYWJsZWQgPSB0cnVlOworc2hvdWxkQmVUcnVlKCdpbm5lckZpZWxkU2V0LmRpc2FibGVkJyk7
CitvdXRlclRleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRl
eHQnLCBmYWxzZSwgJ0cnKTsKK2lubmVyVGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVj
Q29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnRycpOworc2hvdWxkQmUoJ291dGVyVGV4dElu
cHV0LnZhbHVlJywgJyJGRyInKTsKK3Nob3VsZEJlKCdpbm5lclRleHRJbnB1dC52YWx1ZScsICci
RiInKTsKKworZGVidWcoJ0VuYWJsaW5nIHRoZSBpbm5lciBhbmQgZGlzYWJsaW5nIHRoZSBvdXRl
ciBmaWVsZHNldC4nKTsKK291dGVyRmllbGRTZXQuZGlzYWJsZWQgPSB0cnVlOworaW5uZXJGaWVs
ZFNldC5kaXNhYmxlZCA9IGZhbHNlOworc2hvdWxkQmVUcnVlKCdvdXRlckZpZWxkU2V0LmRpc2Fi
bGVkJyk7CitzaG91bGRCZUZhbHNlKCdpbm5lckZpZWxkU2V0LmRpc2FibGVkJyk7CitvdXRlclRl
eHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxz
ZSwgJ0gnKTsKK2lubmVyVGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgn
aW5zZXJ0VGV4dCcsIGZhbHNlLCAnSCcpOworc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVl
JywgJyJGRyInKTsKK3Nob3VsZEJlKCdpbm5lclRleHRJbnB1dC52YWx1ZScsICciRiInKTsKKwor
ZGVidWcoJ0Rpc2FibGluZyBib3RoIGZpZWxkc2V0IGVsZW1lbnRzLicpOworb3V0ZXJGaWVsZFNl
dC5kaXNhYmxlZCA9IHRydWU7Citpbm5lckZpZWxkU2V0LmRpc2FibGVkID0gdHJ1ZTsKK3Nob3Vs
ZEJlVHJ1ZSgnb3V0ZXJGaWVsZFNldC5kaXNhYmxlZCcpOworc2hvdWxkQmVUcnVlKCdpbm5lckZp
ZWxkU2V0LmRpc2FibGVkJyk7CitvdXRlclRleHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0gnKTsKK2lubmVyVGV4dElucHV0LmZvY3Vz
KCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnSCcpOworc2hv
dWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVlJywgJyJGRyInKTsKK3Nob3VsZEJlKCdpbm5lclRl
eHRJbnB1dC52YWx1ZScsICciRiInKTsKKworZGVidWcoJ0VuYWJsaW5nIGJvdGggZmllbGRzZXQg
ZWxlbWVudHMuJyk7CitvdXRlckZpZWxkU2V0LmRpc2FibGVkID0gZmFsc2U7Citpbm5lckZpZWxk
U2V0LmRpc2FibGVkID0gZmFsc2U7CitzaG91bGRCZUZhbHNlKCdvdXRlckZpZWxkU2V0LmRpc2Fi
bGVkJyk7CitzaG91bGRCZUZhbHNlKCdpbm5lckZpZWxkU2V0LmRpc2FibGVkJyk7CitvdXRlclRl
eHRJbnB1dC5mb2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxz
ZSwgJ0gnKTsKK2lubmVyVGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgn
aW5zZXJ0VGV4dCcsIGZhbHNlLCAnSCcpOworc2hvdWxkQmUoJ291dGVyVGV4dElucHV0LnZhbHVl
JywgJyJGR0giJyk7CitzaG91bGRCZSgnaW5uZXJUZXh0SW5wdXQudmFsdWUnLCAnIkZIIicpOwor
CisKK2RlYnVnKCdcblRlc3QgYmVoYXZpb3Igb2YgdGhlIGZpcnN0IGxlZ2VuZCBlbGVtZW50IGlu
IGEgZmllbGRzZXQgZWxlbWVudHMuJyk7Cit2YXIgbGVnZW5kRmllbGRTZXQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdmaWVsZHNldCcpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsZWdl
bmRGaWVsZFNldCk7Cit2YXIgZmlyc3RMZWdlbmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCds
ZWdlbmQnKTsKK2xlZ2VuZEZpZWxkU2V0LmFwcGVuZENoaWxkKGZpcnN0TGVnZW5kKTsKK3ZhciBz
ZWNvbmRMZWdlbmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsZWdlbmQnKTsKK2xlZ2VuZEZp
ZWxkU2V0LmFwcGVuZENoaWxkKHNlY29uZExlZ2VuZCk7CisKK3ZhciBmaXJzdExlZ2VuZFRleHRJ
bnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CitmaXJzdExlZ2VuZFRleHRJ
bnB1dC50eXBlID0gInRleHQiOworZmlyc3RMZWdlbmQuYXBwZW5kQ2hpbGQoZmlyc3RMZWdlbmRU
ZXh0SW5wdXQpOworCit2YXIgc2Vjb25kTGVnZW5kVGV4dElucHV0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnaW5wdXQnKTsKK3NlY29uZExlZ2VuZFRleHRJbnB1dC50eXBlID0gInRleHQiOwor
c2Vjb25kTGVnZW5kLmFwcGVuZENoaWxkKHNlY29uZExlZ2VuZFRleHRJbnB1dCk7CisKK2RlYnVn
KCdDaGlsZHJlbiBvZiB0aGUgZmlyc3QgbGVnZW5kIGVsZW1lbnQgaW4gYSBmaWVsZHNldCBzaG91
bGQgbm90IGdldCBkaXNhYmxlZCB3aXRoIHRoZSBmaWVsZHNldC4nKTsKK2xlZ2VuZEZpZWxkU2V0
LmRpc2FibGVkID0gdHJ1ZTsKK3Nob3VsZEJlVHJ1ZSgnbGVnZW5kRmllbGRTZXQuZGlzYWJsZWQn
KTsKK2ZpcnN0TGVnZW5kVGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgn
aW5zZXJ0VGV4dCcsIGZhbHNlLCAnSScpOworc2Vjb25kTGVnZW5kVGV4dElucHV0LmZvY3VzKCkK
K2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdJJyk7CitzaG91bGRC
ZSgnZmlyc3RMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIkkiJyk7CitzaG91bGRCZSgnc2Vjb25k
TGVnZW5kVGV4dElucHV0LnZhbHVlJywgJyIiJyk7CisKK2RlYnVnKCdJbnNlcnQgYW5vdGhlciBs
ZWdlbmQgZWxlbWVudCBiZWZvcmUgdGhlIGN1cnJlbnRseSBmaXJzdCBvbmUsIGFuZCBjaGVjayBh
Z2Fpbi4nKTsKK3ZhciBpbnNlcnRlZExlZ2VuZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xl
Z2VuZCcpOworbGVnZW5kRmllbGRTZXQuaW5zZXJ0QmVmb3JlKGluc2VydGVkTGVnZW5kLCBmaXJz
dExlZ2VuZCk7Cit2YXIgaW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdpbnB1dCcpOworaW5zZXJ0ZWRMZWdlbmQuYXBwZW5kQ2hpbGQoaW5zZXJ0ZWRMZWdl
bmRUZXh0SW5wdXQpOworCitpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC5mb2N1cygpOworZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0onKTsKK2ZpcnN0TGVnZW5kVGV4
dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNl
LCAnSicpOworc2Vjb25kTGVnZW5kVGV4dElucHV0LmZvY3VzKCkKK2RvY3VtZW50LmV4ZWNDb21t
YW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdKJyk7CitzaG91bGRCZSgnaW5zZXJ0ZWRMZWdlbmRU
ZXh0SW5wdXQudmFsdWUnLCAnIkoiJyk7CitzaG91bGRCZSgnZmlyc3RMZWdlbmRUZXh0SW5wdXQu
dmFsdWUnLCAnIkkiJyk7CitzaG91bGRCZSgnc2Vjb25kTGVnZW5kVGV4dElucHV0LnZhbHVlJywg
JyIiJyk7CisKK2RlYnVnKCdFbmFibGUgdGhlIGZpZWxkc2V0IGFnYWluIGFuZCBjaGVjayBmb3Ig
c2FuaXR5LicpOworbGVnZW5kRmllbGRTZXQuZGlzYWJsZWQgPSBmYWxzZTsKK3Nob3VsZEJlRmFs
c2UoJ2xlZ2VuZEZpZWxkU2V0LmRpc2FibGVkJyk7CitpbnNlcnRlZExlZ2VuZFRleHRJbnB1dC5m
b2N1cygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0snKTsK
K2ZpcnN0TGVnZW5kVGV4dElucHV0LmZvY3VzKCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5z
ZXJ0VGV4dCcsIGZhbHNlLCAnSycpOworc2Vjb25kTGVnZW5kVGV4dElucHV0LmZvY3VzKCkKK2Rv
Y3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdLJyk7CitzaG91bGRCZSgn
aW5zZXJ0ZWRMZWdlbmRUZXh0SW5wdXQudmFsdWUnLCAnIkpLIicpOworc2hvdWxkQmUoJ2ZpcnN0
TGVnZW5kVGV4dElucHV0LnZhbHVlJywgJyJJSyInKTsKK3Nob3VsZEJlKCdzZWNvbmRMZWdlbmRU
ZXh0SW5wdXQudmFsdWUnLCAnIksiJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGNjYmE3MzcuLmExNzE3NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMi0wMy0y
OCAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KKworICAgICAgICBGaWVsZHNldCBk
aXNhYmxlZCBhdHRyaWJ1dGUgZG9lcyBub3Qgd29yay4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODM3CisKKyAgICAgICAgTWFrZSBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50cyBpbmhlcml0IHRoZSBkaXNhYmxlZCBzdGF0ZQorICAgICAgICBmcm9tIEhU
TUxGaWVsZFNldEVsZW1lbnQgYW5jZXN0b3JzLiBTdWJvcmRpbmF0ZXMgb2YgdGhlCisgICAgICAg
IGZpcnN0IEhUTUxMZWdlbmRFbGVtZW50IGluIGEgZmllbGRzZXQgd2lsbCBuZXZlciBiZSBkaXNh
YmxlZC4KKworICAgICAgICBQYXRjaCBieSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9maWVsZHNldC1kaXNhYmxlZC5odG1sCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL0hUTUxG
aWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVu
dDo6ZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6bGVnZW5kKToKKyAgICAgICAgKiBodG1s
L0hUTUxGaWVsZFNldEVsZW1lbnQuaDoKKyAgICAgICAgKEhUTUxGaWVsZFNldEVsZW1lbnQpOgor
ICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlRmllbGRTZXRBbmRMZWdlbmRBbmNlc3Rvcik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWQpOgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KToKKwogMjAxMi0wMy0yMSAgTGkgWWluICA8bGkueWluQGludGVs
LmNvbT4KIAogICAgICAgICBbV2ViU29ja2V0XVRoZSBTZWMtV2ViU29ja2V0LUFjY2VwdCBNVVNU
IE5PVCBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgaW4gYW4gSFRUUCByZXNwb25zZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKaW5kZXggNGI5MDQxMi4uNjZkODIx
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCkBAIC0y
NCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MRmllbGRT
ZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExlZ2VuZEVsZW1lbnQuaCIKIAogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckZpZWxkc2V0LmgiCkBAIC00NCw2ICs0NSwx
OCBAQCBQYXNzUmVmUHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+IEhUTUxGaWVsZFNldEVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRN
TEZpZWxkU2V0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSkpOwogfQogCit2b2lkIEhU
TUxGaWVsZFNldEVsZW1lbnQ6OmRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpCit7CisgICAgLy8g
VGhpcyBlbGVtZW50IG11c3QgYmUgdXBkYXRlZCBiZWZvcmUgdGhlIHN0eWxlIG9mIG5vZGVzIGlu
IGl0cyBzdWJ0cmVlIGdldHMgcmVjYWxjdWxhdGVkLgorICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpOworCisgICAgZm9yIChOb2RlKiBjdXJyZW50
Tm9kZSA9IHRoaXM7IGN1cnJlbnROb2RlOyBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT50cmF2
ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9I
VE1MRWxlbWVudChjdXJyZW50Tm9kZSk7CisgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICB9
Cit9CisKIGJvb2wgSFRNTEZpZWxkU2V0RWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7CkBAIC02MCw0ICs3Mywx
MyBAQCBSZW5kZXJPYmplY3QqIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bAogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5k
ZXJGaWVsZHNldCh0aGlzKTsKIH0KIAorSFRNTExlZ2VuZEVsZW1lbnQqIEhUTUxGaWVsZFNldEVs
ZW1lbnQ6OmxlZ2VuZCgpIGNvbnN0Cit7CisgICAgZm9yIChFbGVtZW50KiBub2RlID0gZmlyc3RF
bGVtZW50Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRFbGVtZW50U2libGluZygpKSB7
CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnQqPihub2RlKTsKKyAgICB9CisgICAg
cmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZp
ZWxkU2V0RWxlbWVudC5oCmluZGV4IGRjYzhkMGMuLjllOTM1OTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCkBAIC0zMSw2ICszMSwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBIVE1MRmllbGRTZXRFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxGaWVsZFNl
dEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9y
bUVsZW1lbnQqKTsKKyAgICBIVE1MTGVnZW5kRWxlbWVudCogbGVnZW5kKCkgY29uc3Q7CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZWRBdHRyaWJ1dGVDaGFuZ2VkKCkgT1ZF
UlJJREU7CiAKIHByaXZhdGU6CiAgICAgSFRNTEZpZWxkU2V0RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsCmluZGV4IDBjMzRkZWUuLjYwMDZhZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbApAQCAtMjAsNiArMjAs
NyBAQAogbW9kdWxlIGh0bWwgewogCiAgICAgaW50ZXJmYWNlIEhUTUxGaWVsZFNldEVsZW1lbnQg
OiBIVE1MRWxlbWVudCB7CisgICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gYm9vbGVhbiBkaXNh
YmxlZDsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxGb3JtRWxlbWVudCBmb3JtOwog
ICAgICAgICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBuYW1lOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCAwZGFkMzQ2Li40
MmRhODA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKQEAgLTMwLDggKzMwLDEwIEBACiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZp
ZWxkU2V0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXZlbnRMaXN0ZW5lci5oIgpAQCAtNDYsNiArNDgsOSBAQCB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1F
bGVtZW50KiBmb3JtKQogICAgIDogTGFiZWxhYmxlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkK
KyAgICAsIG1fZmllbGRTZXRBbmNlc3RvcigwKQorICAgICwgbV9sZWdlbmRBbmNlc3RvcigwKQor
ICAgICwgbV9maWVsZFNldEFuY2VzdG9yVmFsaWQoZmFsc2UpCiAgICAgLCBtX2Rpc2FibGVkKGZh
bHNlKQogICAgICwgbV9yZWFkT25seShmYWxzZSkKICAgICAsIG1fcmVxdWlyZWQoZmFsc2UpCkBA
IC05NSw2ICsxMDAsMjEgQEAgYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTm9WYWxp
ZGF0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoZm9ybW5vdmFsaWRhdGVB
dHRyKTsKIH0KIAordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVGaWVsZFNldEFu
ZExlZ2VuZEFuY2VzdG9yKCkgY29uc3QKK3sKKyAgICBtX2ZpZWxkU2V0QW5jZXN0b3IgPSAwOwor
ICAgIG1fbGVnZW5kQW5jZXN0b3IgPSAwOworICAgIGZvciAoQ29udGFpbmVyTm9kZSogYW5jZXN0
b3IgPSBwYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRO
b2RlKCkpIHsKKyAgICAgICAgaWYgKCFtX2xlZ2VuZEFuY2VzdG9yICYmIGFuY2VzdG9yLT5oYXNU
YWdOYW1lKGxlZ2VuZFRhZykpCisgICAgICAgICAgICBtX2xlZ2VuZEFuY2VzdG9yID0gc3RhdGlj
X2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnQqPihhbmNlc3Rvcik7CisgICAgICAgIGlmIChhbmNlc3Rv
ci0+aGFzVGFnTmFtZShmaWVsZHNldFRhZykpIHsKKyAgICAgICAgICAgIG1fZmllbGRTZXRBbmNl
c3RvciA9IHN0YXRpY19jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnQqPihhbmNlc3Rvcik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2ZpZWxkU2V0QW5jZXN0b3JW
YWxpZCA9IHRydWU7Cit9CisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0
dHIpCkBAIC0xMDIsMTEgKzEyMiw4IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFy
c2VBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBkaXNhYmxlZEF0dHIpIHsKICAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7
CiAgICAgICAgIG1fZGlzYWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChvbGRE
aXNhYmxlZCAhPSBtX2Rpc2FibGVkKSB7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxj
KCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5o
YXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3Rh
dGVDaGFuZ2VkKHJlbmRlcmVyKCksIEVuYWJsZWRTdGF0ZSk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKG9sZERpc2FibGVkICE9IG1fZGlzYWJsZWQpCisgICAgICAgICAgICBkaXNhYmxlZEF0dHJp
YnV0ZUNoYW5nZWQoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZWFkb25seUF0
dHIpIHsKICAgICAgICAgYm9vbCBvbGRSZWFkT25seSA9IG1fcmVhZE9ubHk7CiAgICAgICAgIG1f
cmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7CkBAIC0xMjUsNiArMTQyLDEzIEBAIHZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogICAg
IHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKIH0KIAordm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKQoreworICAgIHNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKKyAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNB
cHBlYXJhbmNlKCkpCisgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCktPnN0YXRlQ2hhbmdlZChy
ZW5kZXJlcigpLCBFbmFibGVkU3RhdGUpOworfQorCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnJlcXVpcmVkQXR0cmlidXRlQ2hhbmdlZCgpCiB7CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNo
ZWNrKCk7CkBAIC0yMDUsNiArMjI5LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpp
bnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQogeworICAgIG1fZmllbGRTZXRBbmNlc3RvclZh
bGlkID0gZmFsc2U7CiAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUo
KTsKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOwogfQpAQCAtMjU0LDYg
KzI3OSwyMCBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRy
b2xJbnB1dEV2ZW50KCkKICAgICBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hJbnB1dEV2ZW50KCk7CiB9
CiAKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzYWJsZWQoKSBjb25zdAoreworICAg
IGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbV9maWVs
ZFNldEFuY2VzdG9yVmFsaWQpCisgICAgICAgIHVwZGF0ZUZpZWxkU2V0QW5kTGVnZW5kQW5jZXN0
b3IoKTsKKworICAgIC8vIEZvcm0gY29udHJvbHMgaW4gdGhlIGZpcnN0IGxlZ2VuZCBlbGVtZW50
IGluc2lkZSBhIGZpZWxkc2V0IGFyZSBub3QgYWZmZWN0ZWQgYnkgZmllbGRzZXQuZGlzYWJsZWQu
CisgICAgaWYgKG1fZmllbGRTZXRBbmNlc3RvciAmJiBtX2ZpZWxkU2V0QW5jZXN0b3ItPmRpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybiAhKG1fbGVnZW5kQW5jZXN0b3IgJiYgbV9sZWdlbmRBbmNl
c3RvciA9PSBtX2ZpZWxkU2V0QW5jZXN0b3ItPmxlZ2VuZCgpKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0RGlzYWJsZWQoYm9vbCBiKQog
ewogICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGIgPyAiIiA6IDApOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCAzZTYxZTc4Li42ZDk4
M2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaApA
QCAtMzAsNyArMzAsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb3JtRGF0YUxp
c3Q7CitjbGFzcyBIVE1MRmllbGRTZXRFbGVtZW50OwogY2xhc3MgSFRNTEZvcm1FbGVtZW50Owor
Y2xhc3MgSFRNTExlZ2VuZEVsZW1lbnQ7CiBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZTsKIGNsYXNz
IFZhbGlkaXR5U3RhdGU7CiAKQEAgLTQ5LDYgKzUxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Rm9ybU1ldGhvZChjb25zdCBTdHJpbmcmKTsKICAgICBib29sIGZvcm1Ob1ZhbGlkYXRlKCkgY29u
c3Q7CiAKKyAgICB2b2lkIHVwZGF0ZUZpZWxkU2V0QW5kTGVnZW5kQW5jZXN0b3IoKSBjb25zdDsK
KwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGZvcm1D
b250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hl
c1JlbmRlcmVyOyB9CkBAIC02MCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRm9ybUNvbnRyb2xJbnB1dEV2ZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9CisgICAgdmlydHVhbCBib29sIGRpc2FibGVk
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwpAQCAtMTEyLDYgKzExNiw3IEBAIHByb3RlY3RlZDoKIAog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZUF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2
b2lkIGRpc2FibGVkQXR0cmlidXRlQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2go
KTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKTsKQEAgLTE0NSw3ICsxNTAsMTAg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
OwogICAgIFN0cmluZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKIAorICAgIG11
dGFibGUgSFRNTEZpZWxkU2V0RWxlbWVudCogbV9maWVsZFNldEFuY2VzdG9yOworICAgIG11dGFi
bGUgSFRNTExlZ2VuZEVsZW1lbnQqIG1fbGVnZW5kQW5jZXN0b3I7CiAgICAgT3duUHRyPFZhbGlk
YXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25NZXNzYWdlOworICAgIG11dGFibGUgYm9vbCBtX2Zp
ZWxkU2V0QW5jZXN0b3JWYWxpZCA6IDE7CiAgICAgYm9vbCBtX2Rpc2FibGVkIDogMTsKICAgICBi
b29sIG1fcmVhZE9ubHkgOiAxOwogICAgIGJvb2wgbV9yZXF1aXJlZCA6IDE7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>