<?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>45712</bug_id>
          
          <creation_ts>2010-09-13 15:21:36 -0700</creation_ts>
          <short_desc>Add selectionchange event</short_desc>
          <delta_ts>2012-05-07 16:16:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>48151</dependson>
    
    <dependson>49785</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>ayg</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
    
    <cc>timdown</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>278514</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-13 15:21:36 -0700</bug_when>
    <thetext>There is currently no event for selection changes in the contenteditable area.  However, many rich text editors want to detect selection change, and say change the state in their toolbar (e.g. bold, italic buttons) or do other operations based on new selection or based on how selection has changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278547</commentid>
    <comment_count>1</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-09-13 15:57:42 -0700</bug_when>
    <thetext>No need to restrict this to contentEditable regions. selectionChange events anywhere on the page are useful.

Also, IE documentation claims to have this event already, but I remember there being issues with it: http://msdn.microsoft.com/en-us/library/ms536968(VS.85).aspx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296592</commentid>
    <comment_count>2</comment_count>
      <attachid>71240</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-19 18:36:15 -0700</bug_when>
    <thetext>Created attachment 71240
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296593</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-19 18:38:33 -0700</bug_when>
    <thetext>onselectionchange event is weird in that the event handler is always attached to document (even if it came from onselectionchange attribute of body element) and doesn&apos;t bubble.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296978</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-20 13:34:09 -0700</bug_when>
    <thetext>The key to implementing this is making sure that we&apos;re ready for arbitrary DOM mutations after event dispatch. Synchronous events like this are a huge cause of WebKit crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297075</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-20 15:32:36 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The key to implementing this is making sure that we&apos;re ready for arbitrary DOM mutations after event dispatch. Synchronous events like this are a huge cause of WebKit crashes.

After making the event asynchronous, I just realized that SelectionController::setSelection already has a call to setFocusedNodeIfNeeded when the current selection is none.  So dispatching one more event in this function should not introduce new vulnerability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297078</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-20 15:38:30 -0700</bug_when>
    <thetext>This is likely, but not a 100% guarantee of safety. The focus event isn&apos;t always dispatched, so we may only be prepared for DOM modifications in cases when it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297100</commentid>
    <comment_count>7</comment_count>
      <attachid>71354</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-20 16:15:36 -0700</bug_when>
    <thetext>Created attachment 71354
implements selectionchange event</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297114</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-20 16:31:13 -0700</bug_when>
    <thetext>
(In reply to comment #7)
&gt; Created an attachment (id=71354) [details]
&gt; implements selectionchange event

The selectionchange event is already implemented by Internet Explorer (http://msdn.microsoft.com/en-us/library/ms536968(VS.85).aspx) and fired whenever selection is changed. The event is not cancelable and does not bubble.  An event listener can be attached to a document by body element&apos;s onselectionchange attribute or via document.selectionchange.

In this implementation, selection change event is fired inside SelectionController::setSelection, which is a function used to update selection in various parts of WebKit.  Our implementation slightly differs from Internet Explorer in that we fire focus event before selection change event whereas Internet Explorer fires selectionchange event before focus event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297132</commentid>
    <comment_count>9</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-20 16:43:34 -0700</bug_when>
    <thetext>Attachment 71354 did not build on qt:
Build output: http://queues.webkit.org/results/4608002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297143</commentid>
    <comment_count>10</comment_count>
      <attachid>71367</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-20 16:56:54 -0700</bug_when>
    <thetext>Created attachment 71367
added onselectionchange to HTMLAttributesNames.idl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297157</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-20 17:15:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; This is likely, but not a 100% guarantee of safety. The focus event isn&apos;t always dispatched, so we may only be prepared for DOM modifications in cases when it is.

Do you think we should not add the event until we can make such a guarantee?  I briefly looked at the call sites of setSelection and many call sites do modify DOM so they should be resilient to the changes in the DOM.  However, there are simply too many to be &quot;verified&quot; in a reasonable amount of time.  If your answer to this question is yes, it might make more sense to implement this event asynchronously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297160</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-20 17:18:40 -0700</bug_when>
    <thetext>We certainly shouldn&apos;t add the event if there is a reason to believe that it introduces security bugs!

I don&apos;t know this code well enough to have an informed opinion on the likelihood of that. I was just pointing out that the existence of focus event is not formally a guarantee that we aren&apos;t adding new problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297182</commentid>
    <comment_count>13</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-20 17:57:41 -0700</bug_when>
    <thetext>Attachment 71354 did not build on qt:
Build output: http://queues.webkit.org/results/4604005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297242</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-20 23:11:32 -0700</bug_when>
    <thetext>Attachment 71354 did not build on mac:
Build output: http://queues.webkit.org/results/4704004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297854</commentid>
    <comment_count>15</comment_count>
      <attachid>71367</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-10-22 00:17:13 -0700</bug_when>
    <thetext>Comment on attachment 71367
added onselectionchange to HTMLAttributesNames.idl

I agree with ap.
For example, HTMLInputElement::setValue() updates selection only if the element has focus, and access a data member. If we apply this patch, HTMLInputElement::setValue() will have new crash.
We need to check all of code paths to SelectionController::setSelection() if &apos;selectionchange&apos; event is synchronous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298144</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-22 13:25:48 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; We certainly shouldn&apos;t add the event if there is a reason to believe that it introduces security bugs!
&gt; 
&gt; I don&apos;t know this code well enough to have an informed opinion on the likelihood of that. I was just pointing out that the existence of focus event is not formally a guarantee that we aren&apos;t adding new problems.

(In reply to comment #15)
&gt; (From update of attachment 71367 [details])
&gt; I agree with ap.
&gt; For example, HTMLInputElement::setValue() updates selection only if the element has focus, and access a data member. If we apply this patch, HTMLInputElement::setValue() will have new crash.
&gt; We need to check all of code paths to SelectionController::setSelection() if &apos;selectionchange&apos; event is synchronous.

I talked with ojan &amp; other folks today, and I think we want to add a setSelectionFiringEvent (tentative name) which calls the current setSelection and also fires the event.  The event dispatch can be hidden behind ifdef and we can gradually migrate other caller to use the new version.  That way, we can verify each change carefully rather than having to locate &amp; fix 100+ possible call sites of setSelection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298701</commentid>
    <comment_count>17</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-10-24 19:20:51 -0700</bug_when>
    <thetext>&gt; I talked with ojan &amp; other folks today, and I think we want to add a setSelectionFiringEvent (tentative name) which calls the current setSelection and also fires the event.  The event dispatch can be hidden behind ifdef and we can gradually migrate other caller to use the new version.  That way, we can verify each change carefully rather than having to locate &amp; fix 100+ possible call sites of setSelection.

It sounds reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298913</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-25 09:37:46 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; I talked with ojan &amp; other folks today, and I think we want to add a setSelectionFiringEvent (tentative name) which calls the current setSelection and also fires the event.  The event dispatch can be hidden behind ifdef and we can gradually migrate other caller to use the new version.  That way, we can verify each change carefully rather than having to locate &amp; fix 100+ possible call sites of setSelection.

That seems like a strange plan. It means we’ll have an event that doesn’t fire correctly; depending on different end-user use patterns it will either work or fail. The project of changing all the setSelection call sites seems like a long one.

Doesn’t seem OK to me. This doesn’t seem like the right way to make incremental progress on this task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298953</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-25 10:40:51 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; That seems like a strange plan. It means we’ll have an event that doesn’t fire correctly; depending on different end-user use patterns it will either work or fail. The project of changing all the setSelection call sites seems like a long one.
&gt; 
&gt; Doesn’t seem OK to me. This doesn’t seem like the right way to make incremental progress on this task.

But I don&apos;t think we can verify the safety of all 100+ call sites in one patch.  It&apos;s true that we&apos;ll have half-broken event while we&apos;re implementing the event but the feature will be disabled by default so we won&apos;t expose it to users or to the Web.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298966</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-25 10:57:37 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; That seems like a strange plan. It means we’ll have an event that doesn’t fire correctly; depending on different end-user use patterns it will either work or fail. The project of changing all the setSelection call sites seems like a long one.
&gt; &gt; 
&gt; &gt; Doesn’t seem OK to me. This doesn’t seem like the right way to make incremental progress on this task.
&gt; 
&gt; But I don&apos;t think we can verify the safety of all 100+ call sites in one patch.  It&apos;s true that we&apos;ll have half-broken event while we&apos;re implementing the event but the feature will be disabled by default so we won&apos;t expose it to users or to the Web.

An incremental approach is good, but the right incremental approach is one we can test. Changing one call site at a time won’t do any good unless we have actual test cases that change the DOM in response to the event.

I think we should take an incremental approach with testing, then turn the event sending on once we can pass all the tests.

Sending the event in certain places just invites us to ship broken software and helps create an illusion that we are testing incrementally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298981</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-25 11:22:16 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; An incremental approach is good, but the right incremental approach is one we can test. Changing one call site at a time won’t do any good unless we have actual test cases that change the DOM in response to the event.

I think the point of breaking into smaller pieces is so that we can verify adding this event doesn&apos;t make a new security hole.  It&apos;s not necessary that we want to incrementally implement the event.

&gt; Sending the event in certain places just invites us to ship broken software and helps create an illusion that we are testing incrementally.

If you&apos;re talking about the completeness, then we can easily ensure it by simply deprecating (renaming or removing) the old function once we replaced all calls to setSelection.  It&apos;s true that we won&apos;t be testing the safety of firing event while adding the event but I don&apos;t think we can test it.  FYI, https://bug-45712-attachments.webkit.org/attachment.cgi?id=71367 implements selection change event in one patch without verifying the safety of call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299057</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-25 13:05:09 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; I think the point of breaking into smaller pieces is so that we can verify adding this event doesn&apos;t make a new security hole.  It&apos;s not necessary that we want to incrementally implement the event.

The verification comes from the testing, though, not the way we stage calls to each call site.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299123</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-25 15:09:08 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; I think the point of breaking into smaller pieces is so that we can verify adding this event doesn&apos;t make a new security hole.  It&apos;s not necessary that we want to incrementally implement the event.
&gt; 
&gt; The verification comes from the testing, though, not the way we stage calls to each call site.

But how do we add a feature incrementally if we were to expose it to DRT?  Should we add a preference / setting that enables onselectionchange event?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299130</commentid>
    <comment_count>24</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-10-25 15:20:46 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; I think the point of breaking into smaller pieces is so that we can verify adding this event doesn&apos;t make a new security hole.  It&apos;s not necessary that we want to incrementally implement the event.
&gt; &gt; 
&gt; &gt; The verification comes from the testing, though, not the way we stage calls to each call site.
&gt; 
&gt; But how do we add a feature incrementally if we were to expose it to DRT?  Should we add a preference / setting that enables onselectionchange event?

What&apos;s the problem with just using a #IF? Darin is just saying we shouldn&apos;t do something incremental.
1. Add the code change with enclosed in a #IF.
2. Add test cases for all the places where we set the selection to make sure we don&apos;t crash.
3. When you have reasonable confidence, remove the #IF.

During step 2, there may be cases where tests are technically failing, but it&apos;s appropriate in those cases to check in a failing expectation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299150</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-25 15:53:04 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; 1. Add the code change with enclosed in a #IF.
&gt; 2. Add test cases for all the places where we set the selection to make sure we don&apos;t crash.
&gt; 3. When you have reasonable confidence, remove the #IF.
&gt; 
&gt; During step 2, there may be cases where tests are technically failing, but it&apos;s appropriate in those cases to check in a failing expectation.

How do make a test in step 2?  WebKit doesn&apos;t crash without selectionchange event.  How do we write a test for a crash that doesn&apos;t exist?  Of course, I agree that we can and should write tests if we&apos;re modifying the existing code to avoid crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299151</commentid>
    <comment_count>26</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-10-25 15:57:14 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; 1. Add the code change with enclosed in a #IF.
&gt; &gt; 2. Add test cases for all the places where we set the selection to make sure we don&apos;t crash.
&gt; &gt; 3. When you have reasonable confidence, remove the #IF.
&gt; &gt; 
&gt; &gt; During step 2, there may be cases where tests are technically failing, but it&apos;s appropriate in those cases to check in a failing expectation.
&gt; 
&gt; How do make a test in step 2?  WebKit doesn&apos;t crash without selectionchange event.  How do we write a test for a crash that doesn&apos;t exist?  Of course, I agree that we can and should write tests if we&apos;re modifying the existing code to avoid crashes.

It shouldn&apos;t crash with or without the event, right? So you can write the test and check it in. When actually working on this, you&apos;ll need to modify your build locally to enable the event. The bots won&apos;t test the code until the feature is enable.

This is how it is with every feature that&apos;s enabled behind a define.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299160</commentid>
    <comment_count>27</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-25 16:09:46 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; It shouldn&apos;t crash with or without the event, right? So you can write the test and check it in. When actually working on this, you&apos;ll need to modify your build locally to enable the event. The bots won&apos;t test the code until the feature is enable.
&gt; 

Sure, but how do we write a test that might cause a crash under correct circumstances?  I mean just attaching an event listener surely doesn&apos;t crash WebKit even in my native implementation.  Maybe we should modify DOM in such a way to cause a crash?  But how do we know how to cause a crash if we didn&apos;t make any change to the existing code (i.e. we believe that firing event is safe without modification)?  Do we guess a sequence of DOM modifications that may or may not cause crash?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299163</commentid>
    <comment_count>28</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-10-25 16:15:55 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Sure, but how do we write a test that might cause a crash under correct circumstances?  I mean just attaching an event listener surely doesn&apos;t crash WebKit even in my native implementation.  Maybe we should modify DOM in such a way to cause a crash?  But how do we know how to cause a crash if we didn&apos;t make any change to the existing code (i.e. we believe that firing event is safe without modification)?  Do we guess a sequence of DOM modifications that may or may not cause crash?

You can&apos;t capture every possible codepath, but you can look at each place where we use setSelection and see what expectations the code following the setSelection call expects of the state of the DOM. Then write tests for those cases. You&apos;re never going to get 100% confidence, but you&apos;d like to have reasonable confidence that you&apos;re not introducing crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299175</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-25 16:24:50 -0700</bug_when>
    <thetext>Maybe document.open() to remove all document nodes, and then force garbage collection?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300716</commentid>
    <comment_count>30</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-27 17:04:24 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; You can&apos;t capture every possible codepath, but you can look at each place where we use setSelection and see what expectations the code following the setSelection call expects of the state of the DOM. Then write tests for those cases. You&apos;re never going to get 100% confidence, but you&apos;d like to have reasonable confidence that you&apos;re not introducing crashes.

(In reply to comment #29)
&gt; Maybe document.open() to remove all document nodes, and then force garbage collection?

That sounds good to me.  We still do want to implement it incrementally, correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307035</commentid>
    <comment_count>31</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-11-09 16:02:34 -0800</bug_when>
    <thetext>It is not clear to me why the option of implementing this asynchronously has been dropped from discussion.  Give that we wish to move away from synchronous mutation events, I am not sure it makes sense to add new events that could have many of the same issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307385</commentid>
    <comment_count>32</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-10 09:40:16 -0800</bug_when>
    <thetext>Erik, Maciej, Sam, &amp; I talked on IRC, and came to the consensus that we should impalement selection change event as an asynchronous event to make it easier to verify that we&apos;re not making new security vulnerabilities.  Because selection change event is not cancelable and does not bubble, it doesn&apos;t need to be synchronous.  We haven&apos;t agreed on the exact method to implement the event, however.

One major problem with completely asynchronous implementation of selection change event using a timer is that when a script modifies the selection by some function, say selectAllChildren, it may expect the corresponding selection change event to be fired before we return from the function, namely selectAllChildren in this case.  If the script had attached an event handler to the selection change event, it may also expect certain global state or DOM be updated accordingly by this event handler and the fact we implemented selection change event asynchronously will be visible and developers may need to work-around this issue.

To reconcile this problem, Erik suggested that we queue up events and fire them all when we cross WebCore and JavaScriptCore/V8 boundary.  I suggested that we can also use this solution to resolve the bug 46936 since this approach hides the fact it&apos;s implemented asynchronously.  Maciej suggested an alternative approach using a scope object but I didn&apos;t quite get what he really meant.

Maciej &amp; Sam, could you elaborate on how scoping object works?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309525</commentid>
    <comment_count>33</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-15 17:20:11 -0800</bug_when>
    <thetext>I talked with Maciej about his scoping object idea.  Here&apos;s summary:

We define a class, let&apos;s say SelectionOperationScope, which is used as a RAII object.
 SelectionOperationScope has a static counter which tracks the level of nesting.  When there&apos;s at least one level of nesting, we&apos;ll queue up events, and when the nesting level goes to 0, we&apos;ll fire the queued events.

We can define this scope object in functions that should prohibit event firing.  For example, all editing commands will define this object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309530</commentid>
    <comment_count>34</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-15 17:30:37 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; We can define this scope object in functions that should prohibit event firing.  For example, all editing commands will define this object.

I’d use the word “defer” here rather than “prohibit”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309601</commentid>
    <comment_count>35</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-15 23:17:31 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; &gt; We can define this scope object in functions that should prohibit event firing.  For example, all editing commands will define this object.
&gt; 
&gt; I’d use the word “defer” here rather than “prohibit”.

Right, that&apos;s a better word here.

Anyway, here&apos;s my thought about implementing this event asynchronously.  I&apos;m currently in a conversation with other Googlers who are familiar with challenges in RTE applications, and I&apos;ve got the feeling that what we really want is selectstart event (http://msdn.microsoft.com/en-us/library/ms536969(VS.85).aspx).  This event is cancellable and bubbles so it can&apos;t be implemented as an asynchronous event.

If we were ever to support selectstart event, then there isn&apos;t really a point in implementing selectionchange event asynchronously because we&apos;ll run into the same problem when we implement selectstart event.

Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310629</commentid>
    <comment_count>36</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-11-17 17:13:39 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; If we were ever to support selectstart event, then there isn&apos;t really a point in implementing selectionchange event asynchronously because we&apos;ll run into the same problem when we implement selectstart event.

selectionchange is useful even if we add a beforeselectionchange-style event. I think we should go ahead and implement it async. We can make it sync later if we really want to.

Google&apos;s rich text library (http://closuretools.blogspot.com/2010/07/introducing-closure-library-editor.html) had a custom selectionchange event (using mouse and key events) that fires before the selection is changed. That library could be ported to use an async selectionchange event if it had a property that showed what the selection was before it changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322724</commentid>
    <comment_count>37</comment_count>
      <attachid>76675</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-15 11:49:34 -0800</bug_when>
    <thetext>Created attachment 76675
async implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330617</commentid>
    <comment_count>38</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-06 19:44:57 -0800</bug_when>
    <thetext>Could someone review my patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346454</commentid>
    <comment_count>39</comment_count>
      <attachid>81446</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-06 20:49:38 -0800</bug_when>
    <thetext>Created attachment 81446
updated to apply on TOT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352631</commentid>
    <comment_count>40</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-16 23:55:05 -0800</bug_when>
    <thetext>Can someone review my patch?  Or give me a feedback?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354509</commentid>
    <comment_count>41</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-21 03:24:57 -0800</bug_when>
    <thetext>Committed r79208: &lt;http://trac.webkit.org/changeset/79208&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612543</commentid>
    <comment_count>42</comment_count>
    <who name="Tim Down">timdown</who>
    <bug_when>2012-04-30 04:41:29 -0700</bug_when>
    <thetext>The upshot is that the selectionchange event fires asynchronously, which leaves web developers (such as me, right now) with precisely the problem Ryosuke described in comment #32. Is there a solution that doesn&apos;t involve timers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612669</commentid>
    <comment_count>43</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-30 08:50:33 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; The upshot is that the selectionchange event fires asynchronously, which leaves web developers (such as me, right now) with precisely the problem Ryosuke described in comment #32. Is there a solution that doesn&apos;t involve timers?

Unfortunately the ship has sailed already. I don&apos;t think we can change our behavior at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612681</commentid>
    <comment_count>44</comment_count>
    <who name="Tim Down">timdown</who>
    <bug_when>2012-04-30 09:10:11 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (In reply to comment #42)
&gt; &gt; The upshot is that the selectionchange event fires asynchronously, which leaves web developers (such as me, right now) with precisely the problem Ryosuke described in comment #32. Is there a solution that doesn&apos;t involve timers?
&gt; 
&gt; Unfortunately the ship has sailed already. I don&apos;t think we can change our behavior at this point.

Yep. A dirty, dirty timer it is then.

The only options I can think of to improve matters are:

- a new event that is the same as selectionchange except that it fires only in response to a direct user action changing the selection, although I think it could be hard to pin down what should and shouldn&apos;t fire such an event. I don&apos;t really like it.

- a new property of the selectionchange event object that indicates what kind of action initiated the event (e.g. mouse drag, menu option, keyboard, execCommand, method of Selection object)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612781</commentid>
    <comment_count>45</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-30 11:18:26 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; - a new event that is the same as selectionchange except that it fires only in response to a direct user action changing the selection, although I think it could be hard to pin down what should and shouldn&apos;t fire such an event. I don&apos;t really like it.

selectstart is like that although it fires before the selection changes.

&gt; - a new property of the selectionchange event object that indicates what kind of action initiated the event (e.g. mouse drag, menu option, keyboard, execCommand, method of Selection object)

Possible. We should probably discuss this on a standard mailing list first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612797</commentid>
    <comment_count>46</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-04-30 11:35:17 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (In reply to comment #42)
&gt; &gt; The upshot is that the selectionchange event fires asynchronously, which leaves web developers (such as me, right now) with precisely the problem Ryosuke described in comment #32. Is there a solution that doesn&apos;t involve timers?
&gt; 
&gt; Unfortunately the ship has sailed already. I don&apos;t think we can change our behavior at this point.

Since this event is sync in IE, I expect we could get away with making it sync (but deferred, the way we defer mutation events) in WebKit without backwards compat issues. I don&apos;t have strong opinions on which way we implement it. In either case, the editing spec should probably cover this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613322</commentid>
    <comment_count>47</comment_count>
    <who name="Aryeh Gregor">ayg</who>
    <bug_when>2012-05-01 03:31:15 -0700</bug_when>
    <thetext>There&apos;s an open spec bug: https://www.w3.org/Bugs/Public/show_bug.cgi?id=13952  As always, if you&apos;re interested in working on this and are blocked by a spec bug, please say so explicitly on the bug and I&apos;ll see if I can prioritize it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71240</attachid>
            <date>2010-10-19 18:36:15 -0700</date>
            <delta_ts>2010-10-20 16:15:32 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>wip45712</filename>
            <type>text/plain</type>
            <size>6556</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9FdmVudE5hbWVzLmgJKHJldmlzaW9uIDcwMTA1KQorKysgV2ViQ29yZS9kb20vRXZlbnROYW1l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBACiAgICAgbWFjcm8oc2VhcmNoKSBc
CiAgICAgbWFjcm8oc2VsZWN0KSBcCiAgICAgbWFjcm8oc2VsZWN0c3RhcnQpIFwKKyAgICBtYWNy
byhzZWxlY3Rpb25jaGFuZ2UpIFwKICAgICBtYWNybyhzdG9yYWdlKSBcCiAgICAgbWFjcm8oc3Vi
bWl0KSBcCiAgICAgbWFjcm8odGV4dElucHV0KSBcCkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnQuY3BwCShyZXZpc2lvbiA3MDEwNSkK
KysrIFdlYkNvcmUvZG9tL0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDE5ICsyMzcs
MjcgQEAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSB0aGlzLT50eXBlKCk7CiAgICAg
cmV0dXJuCiAgICAgICAgIC8vIG1vdXNlIGV2ZW50cwotICAgICAgICB0eXBlID09IGV2ZW50TmFt
ZXMoKS5jbGlja0V2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50IAot
ICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgfHwgdHlwZSA9PSBl
dmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCAKKyAgICAgICAgdHlwZSA9PSBldmVudE5hbWVzKCku
Y2xpY2tFdmVudAorICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVu
dCAKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50CisgICAgICAg
IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQgCiAgICAgICAgIC8vIGtleWJv
YXJkIGV2ZW50cwotICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQg
fHwgdHlwZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudAorICAgICAgICB8fCB0eXBlID09
IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVz
KCkua2V5cHJlc3NFdmVudAogICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2
ZW50CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgLy8gdG91Y2ggZXZlbnRzCi0g
ICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnRvdWNoc3RhcnRFdmVudCB8fCB0eXBlID09
IGV2ZW50TmFtZXMoKS50b3VjaG1vdmVFdmVudAotICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFt
ZXMoKS50b3VjaGVuZEV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnRvdWNoY2FuY2VsRXZl
bnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkudG91Y2hzdGFydEV2ZW50CisgICAg
ICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnRvdWNobW92ZUV2ZW50CisgICAgICAgIHx8IHR5
cGUgPT0gZXZlbnROYW1lcygpLnRvdWNoZW5kRXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVu
dE5hbWVzKCkudG91Y2hjYW5jZWxFdmVudAogI2VuZGlmCiAgICAgICAgIC8vIG90aGVyIGFjY2Vw
dGVkIGV2ZW50cwotICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCB8
fCB0eXBlID09IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudAotICAgICAgICB8fCB0eXBlID09IGV2
ZW50TmFtZXMoKS5mb2N1c0V2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudAor
ICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAorICAgICAgICB8fCB0
eXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudAorICAgICAgICB8fCB0eXBl
ID09IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudAorICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFt
ZXMoKS5mb2N1c0V2ZW50CisgICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVu
dAogICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudDsKIH0KIApJbmRl
eDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiA3MDEwNSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3Myw2ICsyNzMsNyBAQAogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIocmVzZXQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2Vh
cmNoKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdHN0YXJ0KTsK
KyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdGlvbmNoYW5nZSk7CiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKHRvdWNoc3RhcnQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIodG91
Y2htb3ZlKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHJldmlzaW9uIDcwMTA1KQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNiArMzE3LDcgQEAKICAgICAgICAg
YXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbnJlc2V0OwogICAgICAgICBhdHRy
aWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uc2VhcmNoOwogICAgICAgICBhdHRyaWJ1
dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uc2VsZWN0c3RhcnQ7CisgICAgICAgIGF0dHJp
YnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25zZWxlY3Rpb25jaGFuZ2U7CiAgICAgICAg
IGF0dHJpYnV0ZSBbRG9udEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRBdFJ1
bnRpbWVdIEV2ZW50TGlzdGVuZXIgb250b3VjaHN0YXJ0OwogICAgICAgICBhdHRyaWJ1dGUgW0Rv
bnRFbnVtLENvbmRpdGlvbmFsPVRPVUNIX0VWRU5UUyxFbmFibGVkQXRSdW50aW1lXSBFdmVudExp
c3RlbmVyIG9udG91Y2htb3ZlOwogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLENvbmRpdGlv
bmFsPVRPVUNIX0VWRU5UUyxFbmFibGVkQXRSdW50aW1lXSBFdmVudExpc3RlbmVyIG9udG91Y2hl
bmQ7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNzAxMDUpCisrKyBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDEzICs0NTQsNiBAQAogICAgIHJl
dHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShlbGVt
ZW50KTsKIH0KIAotdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQotewotICAgIGlmIChjbGllbnQoKSkKLSAg
ICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKTsKLSAgICBtX2RlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
KTsKLX0KLQogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiB7CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6
OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKQEAgLTM2MjUsNyArMzYxOCw5IEBACiAgICAgaWYg
KCFpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIpOwogCi0gICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOworICAg
IGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24oKTsKKyAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxl
Y3Rpb24ob2xkU2VsZWN0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFz
U3BlbGxpbmdNYXJrZXJGb3IoaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MDEwNSkKKysrIFdl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgwLDYgKzE4MCw4IEBACiAgICAgfQogCiAgICAgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVj
dGlvbkNoYW5nZSgpOworCisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgZmFsc2UsIGZh
bHNlKSk7CiB9CiAKIHN0YXRpYyBib29sIHJlbW92aW5nTm9kZVJlbW92ZXNQb3NpdGlvbihOb2Rl
KiBub2RlLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lv
biA3MDEwNSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE5LDggKzExOSw3IEBACiAgICAgYm9vbCBzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlKEhUTUxF
bGVtZW50KikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIGNvbnN0
OwogICAgIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmFuZ2Uq
KTsKLSAgICAKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKTsKKwogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENv
bnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbik7CiAKICAgICBU
cmlTdGF0ZSBzZWxlY3Rpb25IYXNTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAkocmV2aXNpb24gNzAxMDUpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2Niw4
IEBACiAgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGRv
Y3VtZW50KCktPmZyYW1lKCksIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25zY3JvbGxBdHRyKQogICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihkb2N1bWVudCgpLT5mcmFtZSgpLCBhdHRyKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG9uc2VsZWN0aW9uY2hhbmdlQXR0cikKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2VsZWN0aW9uY2hhbmdlRXZlbnQs
IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgYXR0cikp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnN0b3JhZ2VBdHRyKQogICAgICAgICBk
b2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5z
dG9yYWdlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQoKS0+ZnJh
bWUoKSwgYXR0cikpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbm9ubGluZUF0dHIp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71354</attachid>
            <date>2010-10-20 16:15:36 -0700</date>
            <delta_ts>2010-10-20 16:56:50 -0700</delta_ts>
            <desc>implements selectionchange event</desc>
            <filename>bug-45712-20101020161534.patch</filename>
            <type>text/plain</type>
            <size>18880</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE4NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMTAtMjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHNlbGVjdGlvbmNoYW5nZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDU3MTIKKworICAgICAgICBJbXBsZW1lbnRlZCBzZWxlY3Rpb25jaGFu
Z2UgZXZlbnQgKHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1
MzY5NjgoVlMuODUpLmFzcHgpLAorICAgICAgICB3aGljaCBpcyBmaXJlZCB3aGVuZXZlciBzZWxl
Y3Rpb24gaXMgY2hhbmdlZC4gVGhpcyBldmVudCBpcyBub3QgY2FuY2VsYWJsZSBhbmQgZG9lcyBu
b3QgYnViYmxlLgorICAgICAgICBBbiBldmVudCBsaXN0ZW5lciBjYW4gYmUgYXR0YWNoZWQgdG8g
YSBkb2N1bWVudCBieSBib2R5IGVsZW1lbnQncyBvbnNlbGVjdGlvbmNoYW5nZSBhdHRyaWJ1dGUK
KyAgICAgICAgb3IgdmlhIGRvY3VtZW50LnNlbGVjdGlvbmNoYW5nZS4KKworICAgICAgICBXZWJL
aXQncyBpbXBsZW1lbnRhdGlvbiBmaXJlcyBmb2N1cyBldmVudCBiZWZvcmUgc2VsZWN0aW9uY2hh
bmdlIGV2ZW50IHdoZXJlYXMKKyAgICAgICAgSW50ZXJuZXQgRXhwbG9yZXIgZmlyZXMgc2VsZWN0
aW9uY2hhbmdlIGV2ZW50IGZpcnN0IGFuZCB0aGVuIGZvY3VzIGV2ZW50LgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtaWZyYW1lLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC5odG1sCisKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDogQWRkZWQgdGhlIGV2ZW50IGxpc3RlbmVyIGZvciBzZWxl
Y3Rpb25jaGFuZ2UuCisgICAgICAgICogZG9tL0RvY3VtZW50LmlkbDogQWRkZWQgb25zZWxlY3Rp
b25jaGFuZ2UgYXR0cmlidXRlLgorICAgICAgICAqIGRvbS9FdmVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudDo6ZnJvbVVzZXJHZXN0dXJlKTogQWRkZWQgc2VsZWN0aW9uY2hhbmdlRXZl
bnQuCisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDogQWRkZWQgc2VsZWN0aW9uY2hhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IE1vdmVkIHRoZSB2ZXJzaW9uIG9mIHJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24KKyAgICAgICAgdGhhdCB0YWtlcyBvbmUgYXJndW1lbnQgaW50byBt
b3JlIGdlbmVyYWwgdmVyc2lvbiBvZiByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uLgorICAgICAg
ICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVj
dGlvbik6IERpc3BhdGNoZXMgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LgorICAgICAgICAqIGh0bWwv
SFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBTdXBwb3J0cyBvbnNlbGVjdGlvbmNoYW5nZSBhdHRyaWJ1
dGUuCisKIDIwMTAtMTAtMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MDE2NS4KSW5kZXg6IFdl
YkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkocmV2aXNpb24gNzAxMDUpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzMsNiArMjczLDcgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIocmVzZXQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
c2VhcmNoKTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdHN0YXJ0
KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdGlvbmNoYW5nZSk7
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKHRvdWNoc3RhcnQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
dG91Y2htb3ZlKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHJldmlzaW9uIDcwMTA1KQorKysgV2ViQ29yZS9k
b20vRG9jdW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNiArMzE3LDcgQEAgbW9kdWxl
IGNvcmUgewogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9ucmVz
ZXQ7CiAgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25zZWFyY2g7
CiAgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25zZWxlY3RzdGFy
dDsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbnNlbGVjdGlv
bmNoYW5nZTsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSxDb25kaXRpb25hbD1UT1VDSF9F
VkVOVFMsRW5hYmxlZEF0UnVudGltZV0gRXZlbnRMaXN0ZW5lciBvbnRvdWNoc3RhcnQ7CiAgICAg
ICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRB
dFJ1bnRpbWVdIEV2ZW50TGlzdGVuZXIgb250b3VjaG1vdmU7CiAgICAgICAgIGF0dHJpYnV0ZSBb
RG9udEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRBdFJ1bnRpbWVdIEV2ZW50
TGlzdGVuZXIgb250b3VjaGVuZDsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudC5jcHAJKHJldmlzaW9uIDcwMTA1KQorKysgV2ViQ29y
ZS9kb20vRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsMTkgKzIzNywyNyBAQCBib29s
IEV2ZW50Ojpmcm9tVXNlckdlc3R1cmUoKQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9
IHRoaXMtPnR5cGUoKTsKICAgICByZXR1cm4KICAgICAgICAgLy8gbW91c2UgZXZlbnRzCi0gICAg
ICAgIHR5cGUgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgCi0gICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNl
dXBFdmVudCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50IAorICAgICAgICB0
eXBlID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50CisgICAgICAgIHx8IHR5cGUgPT0gZXZlbnRO
YW1lcygpLm1vdXNlZG93bkV2ZW50IAorICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVu
dCAKICAgICAgICAgLy8ga2V5Ym9hcmQgZXZlbnRzCi0gICAgICAgIHx8IHR5cGUgPT0gZXZlbnRO
YW1lcygpLmtleWRvd25FdmVudCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50
CisgICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudAorICAgICAgICB8
fCB0eXBlID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50CiAgICAgICAgIHx8IHR5cGUgPT0g
ZXZlbnROYW1lcygpLmtleXVwRXZlbnQKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgICAg
ICAvLyB0b3VjaCBldmVudHMKLSAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkudG91Y2hz
dGFydEV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnRvdWNobW92ZUV2ZW50Ci0gICAgICAg
IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnRvdWNoZW5kRXZlbnQgfHwgdHlwZSA9PSBldmVudE5h
bWVzKCkudG91Y2hjYW5jZWxFdmVudAorICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS50
b3VjaHN0YXJ0RXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkudG91Y2htb3Zl
RXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkudG91Y2hlbmRFdmVudAorICAg
ICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS50b3VjaGNhbmNlbEV2ZW50CiAjZW5kaWYKICAg
ICAgICAgLy8gb3RoZXIgYWNjZXB0ZWQgZXZlbnRzCi0gICAgICAgIHx8IHR5cGUgPT0gZXZlbnRO
YW1lcygpLnNlbGVjdEV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50Ci0g
ICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmZvY3VzRXZlbnQgfHwgdHlwZSA9PSBldmVu
dE5hbWVzKCkuYmx1ckV2ZW50CisgICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVj
dEV2ZW50CisgICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdGlvbmNoYW5nZUV2
ZW50CisgICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50CisgICAgICAg
IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmZvY3VzRXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBl
dmVudE5hbWVzKCkuYmx1ckV2ZW50CiAgICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnN1
Ym1pdEV2ZW50OwogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCShyZXZpc2lvbiA3MDEwNSkKKysrIFdlYkNv
cmUvZG9tL0V2ZW50TmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8oc2VhcmNoKSBcCiAgICAgbWFjcm8oc2VsZWN0KSBc
CiAgICAgbWFjcm8oc2VsZWN0c3RhcnQpIFwKKyAgICBtYWNybyhzZWxlY3Rpb25jaGFuZ2UpIFwK
ICAgICBtYWNybyhzdG9yYWdlKSBcCiAgICAgbWFjcm8oc3VibWl0KSBcCiAgICAgbWFjcm8odGV4
dElucHV0KSBcCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNzAxMDUpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDEzICs0NTQsNiBAQCBi
b29sIEVkaXRvcjo6c2hvdWxkU2hvd0RlbGV0ZUludGVyZmFjZShICiAgICAgcmV0dXJuIGNsaWVu
dCgpICYmIGNsaWVudCgpLT5zaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlKGVsZW1lbnQpOwogfQog
Ci12b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24pCi17Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGll
bnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpOwotICAgIG1fZGVsZXRlQnV0dG9uQ29u
dHJvbGxlci0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotfQotCiB2
b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGVuZGluZ1NlbGVjdGlvbikKIHsKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSkgewpAQCAtMzYyNSw3ICszNjE4LDkgQEAgdm9pZCBFZGl0b3I6OnJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oYwogICAgIGlmICghaXNDb250aW51b3VzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCkKICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1v
dmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKIAotICAgIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uKTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNs
aWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCk7CisgICAgbV9kZWxldGVCdXR0b25D
b250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CiB9CiAK
IGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yKGludCBmcm9t
LCBpbnQgbGVuZ3RoKSBjb25zdApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gNzAxMDUpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw4ICsxMTksNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlKEhUTUxFbGVtZW50
KikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShSYW5nZSopIGNvbnN0OwogICAg
IGJvb2wgc2hvdWxkQXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmFuZ2UqKTsKLSAg
ICAKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgb2xkU2VsZWN0aW9uKTsKKwogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbik7CiAKICAgICBUcmlTdGF0
ZSBzZWxlY3Rpb25IYXNTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MDEwNSkKKysr
IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9u
KGMKICAgICBtX3NlbGVjdGlvbiA9IHM7CiAgICAgCiAgICAgbV9jYXJldFJlY3ROZWVkc1VwZGF0
ZSA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoIXMuaXNOb25lKCkpCiAgICAgICAgIHNldEZvY3Vz
ZWROb2RlSWZOZWVkZWQoKTsKICAgICAKQEAgLTE4MCw2ICsxODAsOCBAQCB2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbihjCiAgICAgfQogCiAgICAgbm90aWZ5QWNjZXNzaWJp
bGl0eUZvclNlbGVjdGlvbkNoYW5nZSgpOworCisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGlz
cGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVu
dCwgZmFsc2UsIGZhbHNlKSk7CiB9CiAKIHN0YXRpYyBib29sIHJlbW92aW5nTm9kZVJlbW92ZXNQ
b3NpdGlvbihOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEJvZHlFbGVtZW50LmNwcAkocmV2aXNpb24gNzAxMDUpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEJvZHlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2Niw4IEBAIHZvaWQg
SFRNTEJvZHlFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICAgICAgZG9jdW1lbnQoKS0+
c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVzaXplRXZlbnQs
IGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgYXR0cikp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNjcm9sbEF0dHIpCiAgICAgICAgIGRv
Y3VtZW50KCktPnNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNj
cm9sbEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGRvY3VtZW50KCktPmZyYW1l
KCksIGF0dHIpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3Rpb25jaGFu
Z2VBdHRyKQorICAgICAgICBkb2N1bWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5zZWxlY3Rpb25jaGFuZ2VFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihkb2N1bWVudCgpLT5mcmFtZSgpLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9uc3RvcmFnZUF0dHIpCiAgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0F0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwgY3JlYXRlQXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCgpLT5mcmFtZSgpLCBhdHRyKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG9ub25saW5lQXR0cikKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcwMTg1
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTAtMTAtMjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNlbGVjdGlvbmNo
YW5nZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDU3MTIKKworICAgICAgICBBZGRlZCBhIHRlc3QgdG8gZW5zdXJlIFdlYktpdCBmaXJlcyBz
ZWxlY3Rpb25jaGFuZ2UgZXZlbnQgZm9yIHRoZSBjb3JyZWN0IGRvY3VtZW50CisgICAgICAgIHdo
ZW4gdGhlIGRvY3VtZW50IGhhcyBhbiBpZnJhbWUsIGFuZCBhIHRlc3QgdG8gZW5zdXJlIHNlbGVj
dGlvbmNoYW5nZSBldmVudHMgYXJlIGZpcmVkCisgICAgICAgIG9uIHVzZXItaW5pdGlhdGVkIGV2
ZW50cy4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2Ut
aWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5n
ZS11c2VyLWluaXRpYXRlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZl
bnRzL3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC5odG1sOiBBZGRlZC4KKwogMjAxMC0x
MC0yMCAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNo
YW5nZS1pZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLWlmcmFtZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorVGhpcyB0ZXN0cyB0aGF0IGNoYW5n
aW5nIHNlbGVjdGlvbiBpbiBhbiBpZnJhbWUgZG9lcyBub3QgZmlyZSBzZWxlY3Rpb25jaGFuZ2Ug
ZXZlbnQgaW4gdGhlIHBhcmVudCBkb2N1bWVudCBhbmQgdmljZSB2ZXJzYS4KKworUEFTUzogc2Vs
ZWN0aW5nIGFsbCBvZiBwYXJlbnQncyBkb2N1bWVudCBib2R5IGZpcmVkIHNlbGVjdGlvbiBjaGFu
Z2UgZXZlbnRzIGZyb20gcGFyZW50CitQQVNTOiBzZWxlY3RpbmcgYWxsIG9mIHBhcmVudCdzIGRv
Y3VtZW50IGJvZHkgZmlyZWQgc2VsZWN0aW9uIGNoYW5nZSBldmVudHMgZnJvbSBjaGlsZAorUEFT
Uzogc2VsZWN0aW5nICJyb2NrcyIgb2YgIldlYktpdCByb2NrcyIgaW4gdGhlIHBhcmVudCBmaXJl
ZCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50cyBmcm9tIHBhcmVudCwgcGFyZW50CitQQVNTOiBzZWxl
Y3RpbmcgIndvcmxkIiBvZiAiaGVsbG8gd29ybGQiIGluIHRoZSBjaGlsZCBmaXJlZCBzZWxlY3Rp
b24gY2hhbmdlIGV2ZW50cyBmcm9tIGNoaWxkLCBjaGlsZApJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLWlmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
Kzxib2R5PgorPHA+VGhpcyB0ZXN0cyB0aGF0IGNoYW5naW5nIHNlbGVjdGlvbiBpbiBhbiBpZnJh
bWUgZG9lcyBub3QgZmlyZSBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQgaW4gdGhlIHBhcmVudCBkb2N1
bWVudCBhbmQgdmljZSB2ZXJzYS48L3A+Cis8ZGl2IGlkPSJjb250YWluZXIiPgorPGlmcmFtZSBp
ZD0iY2hpbGQiIHNyYz0iYWJvdXQ6YmxhbmsiPjwvaWZyYW1lPgorPGRpdiBpZD0icGFyZW50Ij5X
ZWJLaXQgcm9ja3M8L2Rpdj4KKzwvZGl2PgorPHVsIGlkPSJjb25zb2xlIj4KKzwvdWw+Cis8c2Ny
aXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwordmFyIHBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdwYXJlbnQnKTsKK3ZhciBjaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
aGlsZCcpOwordmFyIGNoaWxkRG9jdW1lbnQgPSAoY2hpbGQuY29udGVudFdpbmRvdyB8fCBjaGls
ZC5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50OworaWYgKCFjaGlsZERvY3VtZW50LmJvZHkpCisg
ICBjaGlsZERvY3VtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JvZHkn
KSk7CitjaGlsZERvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJ2hlbGxvIHdvcmxkJzsKKwordmFy
IGxvZyA9IFtdOworCitmdW5jdGlvbiBydW5UZXN0KHNlbGVjdG9yLCBleHBlY3RlZCwgYWx0X2V4
cGVjdGVkKSB7CisgICAgbG9nID0gW107CisgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0b3IoKTsK
KyAgICB2YXIgYWN0dWFsID0gbG9nLmxlbmd0aCA/ICcnIDogJ25vbmUnOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbG9nLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChhY3R1YWwubGVuZ3Ro
KQorICAgICAgICAgICAgYWN0dWFsICs9ICcsICc7CisgICAgICAgIGFjdHVhbCArPSBsb2dbaV07
CisgICAgfQorICAgIHZhciByZXN1bHQgPSAnc2VsZWN0aW5nICcgKyBzZWxlY3RlZCArICcgZmly
ZWQgc2VsZWN0aW9uIGNoYW5nZSBldmVudHMgZnJvbSAnICsgYWN0dWFsOworICAgIGlmIChhY3R1
YWwgPT0gZXhwZWN0ZWQgfHwgYWN0dWFsID09IGFsdF9leHBlY3RlZCkKKyAgICAgICAgcmVzdWx0
ID0gJ1BBU1M6ICcgKyByZXN1bHQ7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSAnRkFJTDog
JyArIHJlc3VsdCArICcgYnV0IGV4cGVjdGVkICcgKyBleHBlY3RlZCArIChhbHRfZXhwZWN0ZWQg
PyAnIG9yICcgKyBhbHRfZXhwZWN0ZWQgOiAnJyk7CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworICAgIHZhciBsaXN0SXRlbSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CisgICAgY29uc29sZS5hcHBlbmRDaGlsZChsaXN0SXRlbSk7
CisgICAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdWx0
KSk7Cit9CisKK2Z1bmN0aW9uIGxvZ2dlcihldmVudCkgeworICAgIGlmIChldmVudC50YXJnZXQg
PT0gY2hpbGREb2N1bWVudCkKKyAgICAgICAgbG9nLnB1c2goJ2NoaWxkJyk7CisgICAgZWxzZSBp
ZiAoZXZlbnQudGFyZ2V0ID09IGRvY3VtZW50KQorICAgICAgICBsb2cucHVzaCgncGFyZW50Jyk7
CisgICAgZWxzZQorICAgICAgICBsb2cucHVzaCgndW5rbm93bicpOworfQorCitkb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBsb2dnZXIsIGZhbHNlKTsKK2NoaWxk
RG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgbG9nZ2VyLCBmYWxz
ZSk7CisKK3ZhciBzZWxlY3Rpb25PZlBhcmVudCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKK3Zh
ciBzZWxlY3Rpb25PZkNoaWxkID0gY2hpbGQuY29udGVudERvY3VtZW50LmdldFNlbGVjdGlvbigp
OworCitydW5UZXN0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgc2VsZWN0aW9uT2ZQYXJlbnQuc2Vs
ZWN0QWxsQ2hpbGRyZW4oZG9jdW1lbnQuYm9keSk7CisgICAgICAgIHJldHVybiAiYWxsIG9mIHBh
cmVudCdzIGRvY3VtZW50IGJvZHkiOworICAgIH0sICdwYXJlbnQnKTsKK3J1blRlc3QoIGZ1bmN0
aW9uKCkgeworICAgICAgICBzZWxlY3Rpb25PZkNoaWxkLnNlbGVjdEFsbENoaWxkcmVuKGNoaWxk
RG9jdW1lbnQuYm9keSk7CisgICAgICAgIHJldHVybiAiYWxsIG9mIHBhcmVudCdzIGRvY3VtZW50
IGJvZHkiOworICAgIH0sICdjaGlsZCcpOworcnVuVGVzdCggZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICAgIHJhbmdlLnNldFN0
YXJ0KHBhcmVudC5maXJzdENoaWxkLCA3KTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5kKHBhcmVudC5m
aXJzdENoaWxkLCAxMik7CisgICAgICAgIHNlbGVjdGlvbk9mUGFyZW50LnJlbW92ZUFsbFJhbmdl
cygpOworICAgICAgICBzZWxlY3Rpb25PZlBhcmVudC5hZGRSYW5nZShyYW5nZSk7CisgICAgICAg
IHJldHVybiAnInJvY2tzIiBvZiAiV2ViS2l0IHJvY2tzIiBpbiB0aGUgcGFyZW50JzsKKyAgICB9
LCAncGFyZW50LCBwYXJlbnQnLCAncGFyZW50Jyk7CitydW5UZXN0KCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIHJhbmdlID0gY2hpbGREb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgICBy
YW5nZS5zZXRTdGFydChjaGlsZERvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCwgNik7CisgICAgICAg
IHJhbmdlLnNldEVuZChjaGlsZERvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCwgMTEpOworICAgICAg
ICBzZWxlY3Rpb25PZkNoaWxkLnJlbW92ZUFsbFJhbmdlcygpOworICAgICAgICBzZWxlY3Rpb25P
ZkNoaWxkLmFkZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgcmV0dXJuICcid29ybGQiIG9mICJoZWxs
byB3b3JsZCIgaW4gdGhlIGNoaWxkJzsKKyAgICB9LCAnY2hpbGQsIGNoaWxkJywgJ2NoaWxkJyk7
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9u
Y2hhbmdlLXVzZXItaW5pdGlhdGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSA4ODogUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IHRlc3QKK1RvIHRlc3Qg
dGhpcyBtYW51YWxseSwgY2xpY2sgb24gImhlbGxvIiwgYW5kIGV4dGVuZCBzZWxlY3Rpb24gdG8g
cmlnaHQgYnkgcHJlc3NpbmcgcmlnaHQgYXJyb3cga2V5cyB3aXRoIHNoaWZ0IHR3aWNlLiBUaGVu
IGNsaWNrIGFnYWluIG9uICJ3b3JsZCIgYW5kIGV4dGVuZCBzZWxlY3Rpb24gdHdpY2UgdGhlIHNh
bWUgd2F5LgorCitoZWxsbword29ybGQKK0VYUEVDVDogbW91c2Vkb3duCitFWFBFQ1Q6IHNlbGVj
dGlvbmNoYW5nZQorT1BUSU9OQUw6IHNlbGVjdGlvbmNoYW5nZQorRVhQRUNUOiBtb3VzZXVwCitF
WFBFQ1Q6IGNsaWNrCitFWFBFQ1Q6IGtleWRvd24KK09QVElPTkFMOiBrZXlkb3duCitFWFBFQ1Q6
IHNlbGVjdGlvbmNoYW5nZQorRVhQRUNUOiBrZXl1cAorRVhQRUNUOiBrZXlkb3duCitFWFBFQ1Q6
IHNlbGVjdGlvbmNoYW5nZQorRVhQRUNUOiBrZXl1cAorT1BUSU9OQUw6IGtleXVwCitFWFBFQ1Q6
IG1vdXNlZG93bgorRVhQRUNUOiBzZWxlY3Rpb25jaGFuZ2UKK09QVElPTkFMOiBzZWxlY3Rpb25j
aGFuZ2UKK0VYUEVDVDogbW91c2V1cAorRVhQRUNUOiBjbGljaworRVhQRUNUOiBrZXlkb3duCitP
UFRJT05BTDoga2V5ZG93bgorRVhQRUNUOiBzZWxlY3Rpb25jaGFuZ2UKK0VYUEVDVDoga2V5dXAK
K0VYUEVDVDoga2V5ZG93bgorRVhQRUNUOiBzZWxlY3Rpb25jaGFuZ2UKK0VYUEVDVDoga2V5dXAK
K09QVElPTkFMOiBrZXl1cApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9u
Y2hhbmdlLXVzZXItaW5pdGlhdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLXVzZXItaW5pdGlhdGVkLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtdXNlci1pbml0aWF0
ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8Ym9keT4KKzxwPlRvIHRlc3QgdGhpcyBtYW51YWxseSwgY2xpY2sgb24gImhlbGxv
IiwgYW5kIGV4dGVuZCBzZWxlY3Rpb24gdG8gcmlnaHQgYnkgcHJlc3NpbmcgcmlnaHQgYXJyb3cg
a2V5cyB3aXRoIHNoaWZ0IHR3aWNlLgorVGhlbiBjbGljayBhZ2FpbiBvbiAid29ybGQiIGFuZCBl
eHRlbmQgc2VsZWN0aW9uIHR3aWNlIHRoZSBzYW1lIHdheS48L3A+Cis8ZGl2IGlkPSJoZWxsbyIg
Y29udGVudGVkaXRhYmxlPmhlbGxvPC9kaXY+Cis8ZGl2IGlkPSJ3b3JsZCIgY29udGVudGVkaXRh
YmxlPndvcmxkPC9kaXY+Cis8dWwgaWQ9ImNvbnNvbGUiCis+PGxpPkVYUEVDVDogbW91c2Vkb3du
PC9saQorPjxsaT5FWFBFQ1Q6IHNlbGVjdGlvbmNoYW5nZTwvbGkKKz48bGk+T1BUSU9OQUw6IHNl
bGVjdGlvbmNoYW5nZTwvbGkKKz48bGk+RVhQRUNUOiBtb3VzZXVwPC9saQorPjxsaT5FWFBFQ1Q6
IGNsaWNrPC9saQorPjxsaT5FWFBFQ1Q6IGtleWRvd248L2xpCis+PGxpPk9QVElPTkFMOiBrZXlk
b3duPC9saQorPjxsaT5FWFBFQ1Q6IHNlbGVjdGlvbmNoYW5nZTwvbGkKKz48bGk+RVhQRUNUOiBr
ZXl1cDwvbGkKKz48bGk+RVhQRUNUOiBrZXlkb3duPC9saQorPjxsaT5FWFBFQ1Q6IHNlbGVjdGlv
bmNoYW5nZTwvbGkKKz48bGk+RVhQRUNUOiBrZXl1cDwvbGkKKz48bGkgY2xhc3M9Im9wdGlvbmFs
Ij5PUFRJT05BTDoga2V5dXA8L2xpCis+PGxpPkVYUEVDVDogbW91c2Vkb3duPC9saQorPjxsaT5F
WFBFQ1Q6IHNlbGVjdGlvbmNoYW5nZTwvbGkKKz48bGk+T1BUSU9OQUw6IHNlbGVjdGlvbmNoYW5n
ZTwvbGkKKz48bGk+RVhQRUNUOiBtb3VzZXVwPC9saQorPjxsaT5FWFBFQ1Q6IGNsaWNrPC9saQor
PjxsaT5FWFBFQ1Q6IGtleWRvd248L2xpCis+PGxpPk9QVElPTkFMOiBrZXlkb3duPC9saQorPjxs
aT5FWFBFQ1Q6IHNlbGVjdGlvbmNoYW5nZTwvbGkKKz48bGk+RVhQRUNUOiBrZXl1cDwvbGkKKz48
bGk+RVhQRUNUOiBrZXlkb3duPC9saQorPjxsaT5FWFBFQ1Q6IHNlbGVjdGlvbmNoYW5nZTwvbGkK
Kz48bGk+RVhQRUNUOiBrZXl1cDwvbGkKKz48bGkgY2xhc3M9Im9wdGlvbmFsIj5PUFRJT05BTDog
a2V5dXA8L2xpCis+PC91bD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlv
biBleHBlY3RlZCh0ZXh0KSB7CisgICAgcmV0dXJuIHRleHQuc3Vic3RyKHRleHQuaW5kZXhPZign
OicpICsgMik7Cit9CisKK3ZhciBpID0gMDsKKworZnVuY3Rpb24gbG9nZ2VyKGV2ZW50KSB7Cisg
ICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworICAg
IHZhciBsaXN0SXRlbSA9IG51bGw7CisgICAgaWYgKGkgPCBjb25zb2xlLmNoaWxkTm9kZXMubGVu
Z3RoKSB7CisgICAgICAgIHZhciB0ZXh0ID0gbnVsbDsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgbGlzdEl0ZW0gPSBjb25zb2xlLmNoaWxkTm9kZXNbaSsrXTsKKyAgICAgICAgICAgIHRleHQg
PSBsaXN0SXRlbS5pbm5lclRleHQ7CisgICAgICAgIH0gd2hpbGUgKHRleHQuaW5kZXhPZignT1BU
SU9OQUw6JykgPj0gMCAmJiBleHBlY3RlZCh0ZXh0KSAhPSBldmVudC50eXBlICYmIGkgPCBjb25z
b2xlLmNoaWxkTm9kZXMubGVuZ3RoKTsKKyAgICB9CisKKyAgICBpZiAoIWxpc3RJdGVtKSB7Cisg
ICAgICAgIHZhciBsaXN0SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CisgICAg
ICAgIGxpc3RJdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdGQUlMOiAn
ICsgZXZlbnQudHlwZSArICcgYnV0IGRpZG5cJ3QgZXhwZWN0IHRvIGZpcmUnKSk7CisgICAgICAg
IGNvbnNvbGUuYXBwZW5kQ2hpbGQobGlzdEl0ZW0pOworICAgICAgICBpID0gY29uc29sZS5jaGls
ZE5vZGVzLmxlbmd0aDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChleHBlY3Rl
ZChsaXN0SXRlbS5pbm5lclRleHQpID09IGV2ZW50LnR5cGUpCisgICAgICAgIGxpc3RJdGVtLmlu
bmVySFRNTCA9ICdQQVNTOiAnICsgZXZlbnQudHlwZTsKKyAgICBlbHNlCisgICAgICAgIGxpc3RJ
dGVtLmlubmVySFRNTCA9ICdGQUlMOiAnICsgZXZlbnQudHlwZSArICcgYnV0IGV4cGVjdGVkICcg
KyBleHBlY3RlZChsaXN0SXRlbS5pbm5lclRleHQpOworfQorCitmdW5jdGlvbiBhdHRhY2hMb2dn
ZXIoZWxlbWVudCwgbmFtZSkgeworICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vk
b3duJywgbG9nZ2VyLCBmYWxzZSk7CisgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3Vz
ZXVwJywgbG9nZ2VyLCBmYWxzZSk7CisgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGlj
aycsIGxvZ2dlciwgZmFsc2UpOworICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93
bicsIGxvZ2dlciwgZmFsc2UpOworICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAn
LCBsb2dnZXIsIGZhbHNlKTsKK30KKwordmFyIGhlbGxvRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2hlbGxvJyk7Cit2YXIgd29ybGREaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
d29ybGQnKTsKKworZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywg
bG9nZ2VyLCBmYWxzZSk7CithdHRhY2hMb2dnZXIoaGVsbG9EaXYpOworYXR0YWNoTG9nZ2VyKHdv
cmxkRGl2KTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuZXZl
bnRTZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhoZWxsb0Rpdi5vZmZzZXRM
ZWZ0ICsgMTAsIHRlc3Qub2Zmc2V0VG9wICsgMik7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3du
KCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgIGV2ZW50U2VuZGVyLmtleURvd24o
ImxlZnRBcnJvdyIsIFsnc2hpZnRLZXknXSk7CisgICAgZXZlbnRTZW5kZXIua2V5RG93bigibGVm
dEFycm93IiwgWydzaGlmdEtleSddKTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh3b3Js
ZERpdi5vZmZzZXRMZWZ0ICsgMTAsIHRlc3Qub2Zmc2V0VG9wICsgMik7CisgICAgZXZlbnRTZW5k
ZXIubW91c2VEb3duKCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgIGV2ZW50U2Vu
ZGVyLmtleURvd24oImxlZnRBcnJvdyIsIFsnc2hpZnRLZXknXSk7CisgICAgZXZlbnRTZW5kZXIu
a2V5RG93bigibGVmdEFycm93IiwgWydzaGlmdEtleSddKTsKK30KKworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71367</attachid>
            <date>2010-10-20 16:56:54 -0700</date>
            <delta_ts>2010-12-15 11:49:29 -0800</delta_ts>
            <desc>added onselectionchange to HTMLAttributesNames.idl</desc>
            <filename>bug-45712-20101020165652.patch</filename>
            <type>text/plain</type>
            <size>19302</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMTAtMjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IHNlbGVjdGlvbmNoYW5nZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDU3MTIKKworICAgICAgICBJbXBsZW1lbnRlZCBzZWxlY3Rpb25jaGFu
Z2UgZXZlbnQgKHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1
MzY5NjgoVlMuODUpLmFzcHgpLAorICAgICAgICB3aGljaCBpcyBmaXJlZCB3aGVuZXZlciBzZWxl
Y3Rpb24gaXMgY2hhbmdlZC4gVGhpcyBldmVudCBpcyBub3QgY2FuY2VsYWJsZSBhbmQgZG9lcyBu
b3QgYnViYmxlLgorICAgICAgICBBbiBldmVudCBsaXN0ZW5lciBjYW4gYmUgYXR0YWNoZWQgdG8g
YSBkb2N1bWVudCBieSBib2R5IGVsZW1lbnQncyBvbnNlbGVjdGlvbmNoYW5nZSBhdHRyaWJ1dGUK
KyAgICAgICAgb3IgdmlhIGRvY3VtZW50LnNlbGVjdGlvbmNoYW5nZS4KKworICAgICAgICBXZWJL
aXQncyBpbXBsZW1lbnRhdGlvbiBmaXJlcyBmb2N1cyBldmVudCBiZWZvcmUgc2VsZWN0aW9uY2hh
bmdlIGV2ZW50IHdoZXJlYXMKKyAgICAgICAgSW50ZXJuZXQgRXhwbG9yZXIgZmlyZXMgc2VsZWN0
aW9uY2hhbmdlIGV2ZW50IGZpcnN0IGFuZCB0aGVuIGZvY3VzIGV2ZW50LgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtaWZyYW1lLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC5odG1sCisKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDogQWRkZWQgdGhlIGV2ZW50IGxpc3RlbmVyIGZvciBzZWxl
Y3Rpb25jaGFuZ2UuCisgICAgICAgICogZG9tL0RvY3VtZW50LmlkbDogQWRkZWQgb25zZWxlY3Rp
b25jaGFuZ2UgYXR0cmlidXRlLgorICAgICAgICAqIGRvbS9FdmVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudDo6ZnJvbVVzZXJHZXN0dXJlKTogQWRkZWQgc2VsZWN0aW9uY2hhbmdlRXZl
bnQuCisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDogQWRkZWQgc2VsZWN0aW9uY2hhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6IE1vdmVkIHRoZSB2ZXJzaW9uIG9mIHJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24KKyAgICAgICAgdGhhdCB0YWtlcyBvbmUgYXJndW1lbnQgaW50byBt
b3JlIGdlbmVyYWwgdmVyc2lvbiBvZiByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uLgorICAgICAg
ICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVj
dGlvbik6IERpc3BhdGNoZXMgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LgorICAgICAgICAqIGh0bWwv
SFRNTEF0dHJpYnV0ZU5hbWVzLmluOiBBZGRlZCBvbnNlbGVjdGlvbmNoYW5nZSBhdHRyaWJ1dGUu
CisgICAgICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEJvZHlFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IFN1cHBvcnRzIG9uc2VsZWN0
aW9uY2hhbmdlIGF0dHJpYnV0ZS4KKwogMjAxMC0xMC0yMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjcwMTY1LgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA3MDEwNSkKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw2ICsyNzMsNyBAQCBwdWJsaWM6CiAgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihyZXNldCk7CiAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihzZWFyY2gpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIoc2VsZWN0c3RhcnQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
c2VsZWN0aW9uY2hhbmdlKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIodG91Y2hzdGFydCk7CiAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUih0b3VjaG1vdmUpOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkocmV2aXNpb24gNzAx
MDUpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw2
ICszMTcsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2
ZW50TGlzdGVuZXIgb25yZXNldDsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRM
aXN0ZW5lciBvbnNlYXJjaDsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0
ZW5lciBvbnNlbGVjdHN0YXJ0OworICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExp
c3RlbmVyIG9uc2VsZWN0aW9uY2hhbmdlOwogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLENv
bmRpdGlvbmFsPVRPVUNIX0VWRU5UUyxFbmFibGVkQXRSdW50aW1lXSBFdmVudExpc3RlbmVyIG9u
dG91Y2hzdGFydDsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSxDb25kaXRpb25hbD1UT1VD
SF9FVkVOVFMsRW5hYmxlZEF0UnVudGltZV0gRXZlbnRMaXN0ZW5lciBvbnRvdWNobW92ZTsKICAg
ICAgICAgYXR0cmlidXRlIFtEb250RW51bSxDb25kaXRpb25hbD1UT1VDSF9FVkVOVFMsRW5hYmxl
ZEF0UnVudGltZV0gRXZlbnRMaXN0ZW5lciBvbnRvdWNoZW5kOwpJbmRleDogV2ViQ29yZS9kb20v
RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50LmNwcAkocmV2aXNpb24g
NzAxMDUpCisrKyBXZWJDb3JlL2RvbS9FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNywx
OSArMjM3LDI3IEBAIGJvb2wgRXZlbnQ6OmZyb21Vc2VyR2VzdHVyZSgpCiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlID0gdGhpcy0+dHlwZSgpOwogICAgIHJldHVybgogICAgICAgICAvLyBt
b3VzZSBldmVudHMKLSAgICAgICAgdHlwZSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCB0
eXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAKLSAgICAgICAgfHwgdHlwZSA9PSBl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmRibGNsaWNr
RXZlbnQgCisgICAgICAgIHR5cGUgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQKKyAgICAgICAg
fHwgdHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgCisgICAgICAgIHx8IHR5cGUg
PT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudAorICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFt
ZXMoKS5kYmxjbGlja0V2ZW50IAogICAgICAgICAvLyBrZXlib2FyZCBldmVudHMKLSAgICAgICAg
fHwgdHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1l
cygpLmtleXByZXNzRXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93
bkV2ZW50CisgICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQKICAg
ICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudAogI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAgICAgICAgIC8vIHRvdWNoIGV2ZW50cwotICAgICAgICB8fCB0eXBlID09IGV2
ZW50TmFtZXMoKS50b3VjaHN0YXJ0RXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkudG91Y2ht
b3ZlRXZlbnQKLSAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkudG91Y2hlbmRFdmVudCB8
fCB0eXBlID09IGV2ZW50TmFtZXMoKS50b3VjaGNhbmNlbEV2ZW50CisgICAgICAgIHx8IHR5cGUg
PT0gZXZlbnROYW1lcygpLnRvdWNoc3RhcnRFdmVudAorICAgICAgICB8fCB0eXBlID09IGV2ZW50
TmFtZXMoKS50b3VjaG1vdmVFdmVudAorICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS50
b3VjaGVuZEV2ZW50CisgICAgICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnRvdWNoY2FuY2Vs
RXZlbnQKICNlbmRpZgogICAgICAgICAvLyBvdGhlciBhY2NlcHRlZCBldmVudHMKLSAgICAgICAg
fHwgdHlwZSA9PSBldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVz
KCkuY2hhbmdlRXZlbnQKLSAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkuZm9jdXNFdmVu
dCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBl
dmVudE5hbWVzKCkuc2VsZWN0RXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCku
c2VsZWN0aW9uY2hhbmdlRXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkuY2hh
bmdlRXZlbnQKKyAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkuZm9jdXNFdmVudAorICAg
ICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQKICAgICAgICAgfHwgdHlwZSA9
PSBldmVudE5hbWVzKCkuc3VibWl0RXZlbnQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50
TmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgJKHJldmlzaW9u
IDcwMTA1KQorKysgV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05
OCw2ICs5OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhzZWFyY2gpIFwKICAg
ICBtYWNybyhzZWxlY3QpIFwKICAgICBtYWNybyhzZWxlY3RzdGFydCkgXAorICAgIG1hY3JvKHNl
bGVjdGlvbmNoYW5nZSkgXAogICAgIG1hY3JvKHN0b3JhZ2UpIFwKICAgICBtYWNybyhzdWJtaXQp
IFwKICAgICBtYWNybyh0ZXh0SW5wdXQpIFwKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA3
MDEwNSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTQsMTMgKzQ1NCw2IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlKEgK
ICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZFNob3dEZWxldGVJbnRlcmZh
Y2UoZWxlbWVudCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKLXsKLSAgICBpZiAoY2xpZW50
KCkpCi0gICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCk7Ci0gICAg
bV9kZWxldGVCdXR0b25Db250cm9sbGVyLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNl
bGVjdGlvbik7Ci19Ci0KIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogewogICAgIGlmIChBWE9iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CkBAIC0zNjI1LDcgKzM2MTgsOSBAQCB2
b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjCiAgICAgaWYgKCFpc0NvbnRp
bnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogCi0g
ICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOworICAgIGlmIChjbGll
bnQoKSkKKyAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKTsKKyAg
ICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xk
U2VsZWN0aW9uKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdN
YXJrZXJGb3IoaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZp
c2lvbiA3MDEwNSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDggKzExOSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZFNob3dEZWxldGVJbnRl
cmZhY2UoSFRNTEVsZW1lbnQqKSBjb25zdDsKICAgICBib29sIHNob3VsZERlbGV0ZVJhbmdlKFJh
bmdlKikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRBcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qLCBSYW5nZSopOwotICAgIAotICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pOworCiAgICAgdm9pZCByZXNwb25k
VG9DaGFuZ2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9u
KTsKIAogICAgIFRyaVN0YXRlIHNlbGVjdGlvbkhhc1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24q
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDcwMTA1KQorKysgV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRTZWxlY3Rpb24oYwogICAgIG1fc2VsZWN0aW9uID0gczsKICAgICAKICAgICBtX2Nh
cmV0UmVjdE5lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICAKKwogICAgIGlmICghcy5pc05vbmUoKSkK
ICAgICAgICAgc2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpOwogICAgIApAQCAtMTgwLDYgKzE4MCw4
IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGMKICAgICB9CiAKICAg
ICBub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKCk7CisKKyAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNl
bGVjdGlvbmNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogc3RhdGljIGJvb2wgcmVt
b3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbikKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgkocmV2aXNpb24gNzAxMDUp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDYsNiArMjA2LDcgQEAgb25zZWVrZWQKIG9uc2Vla2luZwogb25zZWxlY3QKIG9uc2VsZWN0
c3RhcnQKK29uc2VsZWN0aW9uY2hhbmdlCiBvbndlYmtpdHNwZWVjaGNoYW5nZQogb25zdGFsbGVk
CiBvbnN0b3JhZ2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MDEw
NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjYsNiArMTY2LDggQEAgdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dQogICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihkb2N1
bWVudCgpLT5mcmFtZSgpLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
c2Nyb2xsQXR0cikKICAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgYXR0cikpOworICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbnNlbGVjdGlvbmNoYW5nZUF0dHIpCisgICAgICAgIGRvY3VtZW50KCktPnNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBj
cmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGRvY3VtZW50KCktPmZyYW1lKCksIGF0dHIpKTsK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zdG9yYWdlQXR0cikKICAgICAgICAgZG9j
dW1lbnQoKS0+c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3Rv
cmFnZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGRvY3VtZW50KCktPmZyYW1l
KCksIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25vbmxpbmVBdHRyKQpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNzAxODUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0xMC0yMCAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgc2VsZWN0aW9uY2hhbmdlIGV2ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTcxMgorCisgICAgICAgIEFkZGVkIGEgdGVzdCB0
byBlbnN1cmUgV2ViS2l0IGZpcmVzIHNlbGVjdGlvbmNoYW5nZSBldmVudCBmb3IgdGhlIGNvcnJl
Y3QgZG9jdW1lbnQKKyAgICAgICAgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGFuIGlmcmFtZSwgYW5k
IGEgdGVzdCB0byBlbnN1cmUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50cyBhcmUgZmlyZWQKKyAgICAg
ICAgb24gdXNlci1pbml0aWF0ZWQgZXZlbnRzLgorCisgICAgICAgICogZmFzdC9ldmVudHMvc2Vs
ZWN0aW9uY2hhbmdlLWlmcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLXVzZXItaW5pdGlhdGVkLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLXVzZXItaW5pdGlhdGVk
Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTEwLTIwICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAcmltLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLWlmcmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLWlmcmFtZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rp
b25jaGFuZ2UtaWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBA
CitUaGlzIHRlc3RzIHRoYXQgY2hhbmdpbmcgc2VsZWN0aW9uIGluIGFuIGlmcmFtZSBkb2VzIG5v
dCBmaXJlIHNlbGVjdGlvbmNoYW5nZSBldmVudCBpbiB0aGUgcGFyZW50IGRvY3VtZW50IGFuZCB2
aWNlIHZlcnNhLgorCitQQVNTOiBzZWxlY3RpbmcgYWxsIG9mIHBhcmVudCdzIGRvY3VtZW50IGJv
ZHkgZmlyZWQgc2VsZWN0aW9uIGNoYW5nZSBldmVudHMgZnJvbSBwYXJlbnQKK1BBU1M6IHNlbGVj
dGluZyBhbGwgb2YgcGFyZW50J3MgZG9jdW1lbnQgYm9keSBmaXJlZCBzZWxlY3Rpb24gY2hhbmdl
IGV2ZW50cyBmcm9tIGNoaWxkCitQQVNTOiBzZWxlY3RpbmcgInJvY2tzIiBvZiAiV2ViS2l0IHJv
Y2tzIiBpbiB0aGUgcGFyZW50IGZpcmVkIHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnRzIGZyb20gcGFy
ZW50LCBwYXJlbnQKK1BBU1M6IHNlbGVjdGluZyAid29ybGQiIG9mICJoZWxsbyB3b3JsZCIgaW4g
dGhlIGNoaWxkIGZpcmVkIHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnRzIGZyb20gY2hpbGQsIGNoaWxk
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtaWZyYW1lLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdl
LWlmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2Vs
ZWN0aW9uY2hhbmdlLWlmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3RzIHRoYXQgY2hhbmdp
bmcgc2VsZWN0aW9uIGluIGFuIGlmcmFtZSBkb2VzIG5vdCBmaXJlIHNlbGVjdGlvbmNoYW5nZSBl
dmVudCBpbiB0aGUgcGFyZW50IGRvY3VtZW50IGFuZCB2aWNlIHZlcnNhLjwvcD4KKzxkaXYgaWQ9
ImNvbnRhaW5lciI+Cis8aWZyYW1lIGlkPSJjaGlsZCIgc3JjPSJhYm91dDpibGFuayI+PC9pZnJh
bWU+Cis8ZGl2IGlkPSJwYXJlbnQiPldlYktpdCByb2NrczwvZGl2PgorPC9kaXY+Cis8dWwgaWQ9
ImNvbnNvbGUiPgorPC91bD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2YXIgcGFy
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcmVudCcpOwordmFyIGNoaWxkID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7Cit2YXIgY2hpbGREb2N1bWVudCA9IChjaGls
ZC5jb250ZW50V2luZG93IHx8IGNoaWxkLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQ7CitpZiAo
IWNoaWxkRG9jdW1lbnQuYm9keSkKKyAgIGNoaWxkRG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnYm9keScpKTsKK2NoaWxkRG9jdW1lbnQuYm9keS5pbm5lckhUTUwg
PSAnaGVsbG8gd29ybGQnOworCit2YXIgbG9nID0gW107CisKK2Z1bmN0aW9uIHJ1blRlc3Qoc2Vs
ZWN0b3IsIGV4cGVjdGVkLCBhbHRfZXhwZWN0ZWQpIHsKKyAgICBsb2cgPSBbXTsKKyAgICB2YXIg
c2VsZWN0ZWQgPSBzZWxlY3RvcigpOworICAgIHZhciBhY3R1YWwgPSBsb2cubGVuZ3RoID8gJycg
OiAnbm9uZSc7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2cubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgaWYgKGFjdHVhbC5sZW5ndGgpCisgICAgICAgICAgICBhY3R1YWwgKz0gJywgJzsKKyAg
ICAgICAgYWN0dWFsICs9IGxvZ1tpXTsKKyAgICB9CisgICAgdmFyIHJlc3VsdCA9ICdzZWxlY3Rp
bmcgJyArIHNlbGVjdGVkICsgJyBmaXJlZCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50cyBmcm9tICcg
KyBhY3R1YWw7CisgICAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCB8fCBhY3R1YWwgPT0gYWx0X2V4
cGVjdGVkKQorICAgICAgICByZXN1bHQgPSAnUEFTUzogJyArIHJlc3VsdDsKKyAgICBlbHNlCisg
ICAgICAgIHJlc3VsdCA9ICdGQUlMOiAnICsgcmVzdWx0ICsgJyBidXQgZXhwZWN0ZWQgJyArIGV4
cGVjdGVkICsgKGFsdF9leHBlY3RlZCA/ICcgb3IgJyArIGFsdF9leHBlY3RlZCA6ICcnKTsKKyAg
ICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CisgICAg
dmFyIGxpc3RJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKKyAgICBjb25zb2xl
LmFwcGVuZENoaWxkKGxpc3RJdGVtKTsKKyAgICBsaXN0SXRlbS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShyZXN1bHQpKTsKK30KKworZnVuY3Rpb24gbG9nZ2VyKGV2ZW50KSB7
CisgICAgaWYgKGV2ZW50LnRhcmdldCA9PSBjaGlsZERvY3VtZW50KQorICAgICAgICBsb2cucHVz
aCgnY2hpbGQnKTsKKyAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gZG9jdW1lbnQpCisgICAg
ICAgIGxvZy5wdXNoKCdwYXJlbnQnKTsKKyAgICBlbHNlCisgICAgICAgIGxvZy5wdXNoKCd1bmtu
b3duJyk7Cit9CisKK2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScs
IGxvZ2dlciwgZmFsc2UpOworY2hpbGREb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rp
b25jaGFuZ2UnLCBsb2dnZXIsIGZhbHNlKTsKKwordmFyIHNlbGVjdGlvbk9mUGFyZW50ID0gd2lu
ZG93LmdldFNlbGVjdGlvbigpOwordmFyIHNlbGVjdGlvbk9mQ2hpbGQgPSBjaGlsZC5jb250ZW50
RG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7CisKK3J1blRlc3QoIGZ1bmN0aW9uKCkgeworICAgICAg
ICBzZWxlY3Rpb25PZlBhcmVudC5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5ib2R5KTsKKyAg
ICAgICAgcmV0dXJuICJhbGwgb2YgcGFyZW50J3MgZG9jdW1lbnQgYm9keSI7CisgICAgfSwgJ3Bh
cmVudCcpOworcnVuVGVzdCggZnVuY3Rpb24oKSB7CisgICAgICAgIHNlbGVjdGlvbk9mQ2hpbGQu
c2VsZWN0QWxsQ2hpbGRyZW4oY2hpbGREb2N1bWVudC5ib2R5KTsKKyAgICAgICAgcmV0dXJuICJh
bGwgb2YgcGFyZW50J3MgZG9jdW1lbnQgYm9keSI7CisgICAgfSwgJ2NoaWxkJyk7CitydW5UZXN0
KCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTsKKyAgICAgICAgcmFuZ2Uuc2V0U3RhcnQocGFyZW50LmZpcnN0Q2hpbGQsIDcpOworICAgICAg
ICByYW5nZS5zZXRFbmQocGFyZW50LmZpcnN0Q2hpbGQsIDEyKTsKKyAgICAgICAgc2VsZWN0aW9u
T2ZQYXJlbnQucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgIHNlbGVjdGlvbk9mUGFyZW50LmFk
ZFJhbmdlKHJhbmdlKTsKKyAgICAgICAgcmV0dXJuICcicm9ja3MiIG9mICJXZWJLaXQgcm9ja3Mi
IGluIHRoZSBwYXJlbnQnOworICAgIH0sICdwYXJlbnQsIHBhcmVudCcsICdwYXJlbnQnKTsKK3J1
blRlc3QoIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmFuZ2UgPSBjaGlsZERvY3VtZW50LmNy
ZWF0ZVJhbmdlKCk7CisgICAgICAgIHJhbmdlLnNldFN0YXJ0KGNoaWxkRG9jdW1lbnQuYm9keS5m
aXJzdENoaWxkLCA2KTsKKyAgICAgICAgcmFuZ2Uuc2V0RW5kKGNoaWxkRG9jdW1lbnQuYm9keS5m
aXJzdENoaWxkLCAxMSk7CisgICAgICAgIHNlbGVjdGlvbk9mQ2hpbGQucmVtb3ZlQWxsUmFuZ2Vz
KCk7CisgICAgICAgIHNlbGVjdGlvbk9mQ2hpbGQuYWRkUmFuZ2UocmFuZ2UpOworICAgICAgICBy
ZXR1cm4gJyJ3b3JsZCIgb2YgImhlbGxvIHdvcmxkIiBpbiB0aGUgY2hpbGQnOworICAgIH0sICdj
aGlsZCwgY2hpbGQnLCAnY2hpbGQnKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuc3R5bGUuZGlzcGxh
eSA9ICdub25lJzsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hh
bmdlLXVzZXItaW5pdGlhdGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtdXNlci1pbml0aWF0ZWQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdl
LXVzZXItaW5pdGlhdGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBA
QAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDg4OiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2
YXJpYWJsZTogdGVzdAorVG8gdGVzdCB0aGlzIG1hbnVhbGx5LCBjbGljayBvbiAiaGVsbG8iLCBh
bmQgZXh0ZW5kIHNlbGVjdGlvbiB0byByaWdodCBieSBwcmVzc2luZyByaWdodCBhcnJvdyBrZXlz
IHdpdGggc2hpZnQgdHdpY2UuIFRoZW4gY2xpY2sgYWdhaW4gb24gIndvcmxkIiBhbmQgZXh0ZW5k
IHNlbGVjdGlvbiB0d2ljZSB0aGUgc2FtZSB3YXkuCisKK2hlbGxvCit3b3JsZAorRVhQRUNUOiBt
b3VzZWRvd24KK0VYUEVDVDogc2VsZWN0aW9uY2hhbmdlCitPUFRJT05BTDogc2VsZWN0aW9uY2hh
bmdlCitFWFBFQ1Q6IG1vdXNldXAKK0VYUEVDVDogY2xpY2sKK0VYUEVDVDoga2V5ZG93bgorT1BU
SU9OQUw6IGtleWRvd24KK0VYUEVDVDogc2VsZWN0aW9uY2hhbmdlCitFWFBFQ1Q6IGtleXVwCitF
WFBFQ1Q6IGtleWRvd24KK0VYUEVDVDogc2VsZWN0aW9uY2hhbmdlCitFWFBFQ1Q6IGtleXVwCitP
UFRJT05BTDoga2V5dXAKK0VYUEVDVDogbW91c2Vkb3duCitFWFBFQ1Q6IHNlbGVjdGlvbmNoYW5n
ZQorT1BUSU9OQUw6IHNlbGVjdGlvbmNoYW5nZQorRVhQRUNUOiBtb3VzZXVwCitFWFBFQ1Q6IGNs
aWNrCitFWFBFQ1Q6IGtleWRvd24KK09QVElPTkFMOiBrZXlkb3duCitFWFBFQ1Q6IHNlbGVjdGlv
bmNoYW5nZQorRVhQRUNUOiBrZXl1cAorRVhQRUNUOiBrZXlkb3duCitFWFBFQ1Q6IHNlbGVjdGlv
bmNoYW5nZQorRVhQRUNUOiBrZXl1cAorT1BUSU9OQUw6IGtleXVwCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtdXNlci1pbml0aWF0ZWQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtdXNlci1pbml0
aWF0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NlbGVj
dGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VG8gdGVzdCB0aGlzIG1h
bnVhbGx5LCBjbGljayBvbiAiaGVsbG8iLCBhbmQgZXh0ZW5kIHNlbGVjdGlvbiB0byByaWdodCBi
eSBwcmVzc2luZyByaWdodCBhcnJvdyBrZXlzIHdpdGggc2hpZnQgdHdpY2UuCitUaGVuIGNsaWNr
IGFnYWluIG9uICJ3b3JsZCIgYW5kIGV4dGVuZCBzZWxlY3Rpb24gdHdpY2UgdGhlIHNhbWUgd2F5
LjwvcD4KKzxkaXYgaWQ9ImhlbGxvIiBjb250ZW50ZWRpdGFibGU+aGVsbG88L2Rpdj4KKzxkaXYg
aWQ9IndvcmxkIiBjb250ZW50ZWRpdGFibGU+d29ybGQ8L2Rpdj4KKzx1bCBpZD0iY29uc29sZSIK
Kz48bGk+RVhQRUNUOiBtb3VzZWRvd248L2xpCis+PGxpPkVYUEVDVDogc2VsZWN0aW9uY2hhbmdl
PC9saQorPjxsaT5PUFRJT05BTDogc2VsZWN0aW9uY2hhbmdlPC9saQorPjxsaT5FWFBFQ1Q6IG1v
dXNldXA8L2xpCis+PGxpPkVYUEVDVDogY2xpY2s8L2xpCis+PGxpPkVYUEVDVDoga2V5ZG93bjwv
bGkKKz48bGk+T1BUSU9OQUw6IGtleWRvd248L2xpCis+PGxpPkVYUEVDVDogc2VsZWN0aW9uY2hh
bmdlPC9saQorPjxsaT5FWFBFQ1Q6IGtleXVwPC9saQorPjxsaT5FWFBFQ1Q6IGtleWRvd248L2xp
Cis+PGxpPkVYUEVDVDogc2VsZWN0aW9uY2hhbmdlPC9saQorPjxsaT5FWFBFQ1Q6IGtleXVwPC9s
aQorPjxsaSBjbGFzcz0ib3B0aW9uYWwiPk9QVElPTkFMOiBrZXl1cDwvbGkKKz48bGk+RVhQRUNU
OiBtb3VzZWRvd248L2xpCis+PGxpPkVYUEVDVDogc2VsZWN0aW9uY2hhbmdlPC9saQorPjxsaT5P
UFRJT05BTDogc2VsZWN0aW9uY2hhbmdlPC9saQorPjxsaT5FWFBFQ1Q6IG1vdXNldXA8L2xpCis+
PGxpPkVYUEVDVDogY2xpY2s8L2xpCis+PGxpPkVYUEVDVDoga2V5ZG93bjwvbGkKKz48bGk+T1BU
SU9OQUw6IGtleWRvd248L2xpCis+PGxpPkVYUEVDVDogc2VsZWN0aW9uY2hhbmdlPC9saQorPjxs
aT5FWFBFQ1Q6IGtleXVwPC9saQorPjxsaT5FWFBFQ1Q6IGtleWRvd248L2xpCis+PGxpPkVYUEVD
VDogc2VsZWN0aW9uY2hhbmdlPC9saQorPjxsaT5FWFBFQ1Q6IGtleXVwPC9saQorPjxsaSBjbGFz
cz0ib3B0aW9uYWwiPk9QVElPTkFMOiBrZXl1cDwvbGkKKz48L3VsPgorPHNjcmlwdD4KKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGV4cGVjdGVkKHRleHQpIHsKKyAgICByZXR1cm4gdGV4
dC5zdWJzdHIodGV4dC5pbmRleE9mKCc6JykgKyAyKTsKK30KKwordmFyIGkgPSAwOworCitmdW5j
dGlvbiBsb2dnZXIoZXZlbnQpIHsKKyAgICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb25zb2xlJyk7CisgICAgdmFyIGxpc3RJdGVtID0gbnVsbDsKKyAgICBpZiAoaSA8
IGNvbnNvbGUuY2hpbGROb2Rlcy5sZW5ndGgpIHsKKyAgICAgICAgdmFyIHRleHQgPSBudWxsOwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBsaXN0SXRlbSA9IGNvbnNvbGUuY2hpbGROb2Rlc1tp
KytdOworICAgICAgICAgICAgdGV4dCA9IGxpc3RJdGVtLmlubmVyVGV4dDsKKyAgICAgICAgfSB3
aGlsZSAodGV4dC5pbmRleE9mKCdPUFRJT05BTDonKSA+PSAwICYmIGV4cGVjdGVkKHRleHQpICE9
IGV2ZW50LnR5cGUgJiYgaSA8IGNvbnNvbGUuY2hpbGROb2Rlcy5sZW5ndGgpOworICAgIH0KKwor
ICAgIGlmICghbGlzdEl0ZW0pIHsKKyAgICAgICAgdmFyIGxpc3RJdGVtID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnbGknKTsKKyAgICAgICAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoJ0ZBSUw6ICcgKyBldmVudC50eXBlICsgJyBidXQgZGlkblwndCBleHBl
Y3QgdG8gZmlyZScpKTsKKyAgICAgICAgY29uc29sZS5hcHBlbmRDaGlsZChsaXN0SXRlbSk7Cisg
ICAgICAgIGkgPSBjb25zb2xlLmNoaWxkTm9kZXMubGVuZ3RoOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGV4cGVjdGVkKGxpc3RJdGVtLmlubmVyVGV4dCkgPT0gZXZlbnQudHlw
ZSkKKyAgICAgICAgbGlzdEl0ZW0uaW5uZXJIVE1MID0gJ1BBU1M6ICcgKyBldmVudC50eXBlOwor
ICAgIGVsc2UKKyAgICAgICAgbGlzdEl0ZW0uaW5uZXJIVE1MID0gJ0ZBSUw6ICcgKyBldmVudC50
eXBlICsgJyBidXQgZXhwZWN0ZWQgJyArIGV4cGVjdGVkKGxpc3RJdGVtLmlubmVyVGV4dCk7Cit9
CisKK2Z1bmN0aW9uIGF0dGFjaExvZ2dlcihlbGVtZW50LCBuYW1lKSB7CisgICAgZWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBsb2dnZXIsIGZhbHNlKTsKKyAgICBlbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBsb2dnZXIsIGZhbHNlKTsKKyAgICBlbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbG9nZ2VyLCBmYWxzZSk7CisgICAgZWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgbG9nZ2VyLCBmYWxzZSk7CisgICAgZWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGxvZ2dlciwgZmFsc2UpOworfQorCit2YXIgaGVsbG9E
aXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVsbG8nKTsKK3ZhciB3b3JsZERpdiA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCd3b3JsZCcpOworCitkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBsb2dnZXIsIGZhbHNlKTsKK2F0dGFjaExvZ2dlcihoZWxs
b0Rpdik7CithdHRhY2hMb2dnZXIod29ybGREaXYpOworCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyICYmIHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNl
TW92ZVRvKGhlbGxvRGl2Lm9mZnNldExlZnQgKyAxMCwgdGVzdC5vZmZzZXRUb3AgKyAyKTsKKyAg
ICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cisg
ICAgZXZlbnRTZW5kZXIua2V5RG93bigibGVmdEFycm93IiwgWydzaGlmdEtleSddKTsKKyAgICBl
dmVudFNlbmRlci5rZXlEb3duKCJsZWZ0QXJyb3ciLCBbJ3NoaWZ0S2V5J10pOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlTW92ZVRvKHdvcmxkRGl2Lm9mZnNldExlZnQgKyAxMCwgdGVzdC5vZmZzZXRU
b3AgKyAyKTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5t
b3VzZVVwKCk7CisgICAgZXZlbnRTZW5kZXIua2V5RG93bigibGVmdEFycm93IiwgWydzaGlmdEtl
eSddKTsKKyAgICBldmVudFNlbmRlci5rZXlEb3duKCJsZWZ0QXJyb3ciLCBbJ3NoaWZ0S2V5J10p
OworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76675</attachid>
            <date>2010-12-15 11:49:34 -0800</date>
            <delta_ts>2011-02-06 20:49:34 -0800</delta_ts>
            <desc>async implementation</desc>
            <filename>bug-45712-20101215114933.patch</filename>
            <type>text/plain</type>
            <size>18030</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzY2JiODI5OGU0NGE4OWNiYmUyMGFmZThmZTUwZDk3OTg4MzJhMDRkLi40NGI3ODkw
OWVmNmM2ZTU0NjFiOTQyMGJhMjlkNGU4NzI1YTEyNzQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMTItMTUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNlbGVjdGlvbmNoYW5n
ZSBldmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDU3MTIKKworICAgICAgICBBZGRlZCBhIHRlc3QgdG8gZW5zdXJlIFdlYktpdCBmaXJlcyBzZWxl
Y3Rpb25jaGFuZ2UgZXZlbnQgZm9yIHRoZSBjb3JyZWN0IGRvY3VtZW50CisgICAgICAgIHdoZW4g
dGhlIGRvY3VtZW50IGhhcyBhbiBpZnJhbWUsIGFuZCBhIHRlc3QgdG8gZW5zdXJlIHNlbGVjdGlv
bmNoYW5nZSBldmVudHMgYXJlIGZpcmVkCisgICAgICAgIG9uIHVzZXItaW5pdGlhdGVkIGV2ZW50
cy4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtaWZy
YW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS11
c2VyLWluaXRpYXRlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRz
L3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC5odG1sOiBBZGRlZC4KKwogMjAxMC0xMi0x
NCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NlbGVj
dGlvbmNoYW5nZS1pZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
c2VsZWN0aW9uY2hhbmdlLWlmcmFtZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTIxMjI2ODkw
MzY0ZmQ5MDY3YThiYTg4MmU3MGIwYmUzMjllNDE0ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0cyB0aGF0IGNoYW5naW5nIHNlbGVjdGlvbiBpbiBhbiBp
ZnJhbWUgZG9lcyBub3QgZmlyZSBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQgaW4gdGhlIHBhcmVudCBk
b2N1bWVudCBhbmQgdmljZSB2ZXJzYS4KKworUEFTUzogc2VsZWN0aW5nIGFsbCBvZiBwYXJlbnQn
cyBkb2N1bWVudCBib2R5IGZpcmVkIHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnRzIGZyb20gcGFyZW50
CitQQVNTOiBzZWxlY3RpbmcgYWxsIG9mIHBhcmVudCdzIGRvY3VtZW50IGJvZHkgZmlyZWQgc2Vs
ZWN0aW9uIGNoYW5nZSBldmVudHMgZnJvbSBjaGlsZAorUEFTUzogc2VsZWN0aW5nICJyb2NrcyIg
b2YgIldlYktpdCByb2NrcyIgaW4gdGhlIHBhcmVudCBmaXJlZCBzZWxlY3Rpb24gY2hhbmdlIGV2
ZW50cyBmcm9tIHBhcmVudCwgcGFyZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9zZWxlY3Rpb25jaGFuZ2UtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9zZWxlY3Rpb25jaGFuZ2UtaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzMxMzQ3Mzc2NjA4OWE5
NGM1MzQ2Mzg1NmZjYmU0M2JjMGNkYWI4MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUuaHRtbApAQCAtMCwwICsxLDEzMCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0cyB0aGF0IGNo
YW5naW5nIHNlbGVjdGlvbiBpbiBhbiBpZnJhbWUgZG9lcyBub3QgZmlyZSBzZWxlY3Rpb25jaGFu
Z2UgZXZlbnQgaW4gdGhlIHBhcmVudCBkb2N1bWVudCBhbmQgdmljZSB2ZXJzYS48L3A+Cis8ZGl2
IGlkPSJjb250YWluZXIiPgorPGlmcmFtZSBpZD0iY2hpbGQiIHNyYz0iYWJvdXQ6YmxhbmsiPjwv
aWZyYW1lPgorPGRpdiBpZD0icGFyZW50Ij5XZWJLaXQgcm9ja3M8L2Rpdj4KKzwvZGl2PgorPHVs
IGlkPSJjb25zb2xlIj4KKzwvdWw+Cis8c2NyaXB0PgorCit2YXIgcGFyZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3BhcmVudCcpOwordmFyIGNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2NoaWxkJyk7Cit2YXIgY2hpbGREb2N1bWVudCA9IChjaGlsZC5jb250ZW50V2luZG93
IHx8IGNoaWxkLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQ7CitpZiAoIWNoaWxkRG9jdW1lbnQu
Ym9keSkKKyAgIGNoaWxkRG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnYm9keScpKTsKK2NoaWxkRG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnaGVsbG8gd29ybGQn
OworCit2YXIgc2VsZWN0aW9uT2ZQYXJlbnQgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Cit2YXIg
c2VsZWN0aW9uT2ZDaGlsZCA9IGNoaWxkLmNvbnRlbnREb2N1bWVudC5nZXRTZWxlY3Rpb24oKTsK
KwordGVzdHMgPSBbCisgICAgeworICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBzZWxlY3Rpb25PZlBhcmVudC5zZWxlY3RBbGxDaGlsZHJlbihkb2N1bWVudC5ib2R5
KTsKKyAgICAgICAgICAgIHJldHVybiAiYWxsIG9mIHBhcmVudCdzIGRvY3VtZW50IGJvZHkiOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQ6ICdwYXJlbnQnLAorICAgICAgICBhbHRf
ZXhwZWN0ZWQ6IG51bGwsCisgICAgfSwKKyAgICB7CisgICAgICAgIHNlbGVjdG9yOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb25PZkNoaWxkLnNlbGVjdEFsbENoaWxkcmVu
KGNoaWxkRG9jdW1lbnQuYm9keSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICJhbGwgb2YgcGFy
ZW50J3MgZG9jdW1lbnQgYm9keSI7CisgICAgICAgICAgICB9LAorICAgICAgICBleHBlY3RlZDog
J2NoaWxkJywKKyAgICAgICAgYWx0X2V4cGVjdGVkOiBudWxsLAorICAgIH0sCisgICAgeworICAg
ICAgICBzZWxlY3RvcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0g
ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChw
YXJlbnQuZmlyc3RDaGlsZCwgNyk7CisgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHBhcmVu
dC5maXJzdENoaWxkLCAxMik7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uT2ZQYXJlbnQucmVt
b3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uT2ZQYXJlbnQuYWRkUmFu
Z2UocmFuZ2UpOworICAgICAgICAgICAgICAgIHJldHVybiAnInJvY2tzIiBvZiAiV2ViS2l0IHJv
Y2tzIiBpbiB0aGUgcGFyZW50JzsKKyAgICAgICAgICAgIH0sCisgICAgICAgIGV4cGVjdGVkOiAn
cGFyZW50LCBwYXJlbnQnLAorICAgICAgICBhbHRfZXhwZWN0ZWQ6ICdwYXJlbnQnLAorICAgIH0s
CisgICAgeworICAgICAgICBzZWxlY3RvcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
dmFyIHJhbmdlID0gY2hpbGREb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgICAgICAgICAg
IHJhbmdlLnNldFN0YXJ0KGNoaWxkRG9jdW1lbnQuYm9keS5maXJzdENoaWxkLCA2KTsKKyAgICAg
ICAgICAgICAgICByYW5nZS5zZXRFbmQoY2hpbGREb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQsIDEx
KTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb25PZkNoaWxkLnJlbW92ZUFsbFJhbmdlcygpOwor
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9mQ2hpbGQuYWRkUmFuZ2UocmFuZ2UpOworICAgICAg
ICAgICAgICAgIHJldHVybiAnIndvcmxkIiBvZiAiaGVsbG8gd29ybGQiIGluIHRoZSBjaGlsZCc7
CisgICAgICAgICAgICB9LAorICAgICAgICBleHBlY3RlZDogJ2NoaWxkLCBjaGlsZCcsCisgICAg
ICAgIGFsdF9leHBlY3RlZDogJ2NoaWxkJywKKyAgICB9CitdOwordmFyIGkgPSAwOwordmFyIHNl
bGVjdGVkID0gbnVsbDsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBsb2cgPSBbXTsKKworZnVuY3Rpb24gbG9n
Z2VyKGV2ZW50KSB7CisgICAgaWYgKGV2ZW50LnRhcmdldCA9PSBjaGlsZERvY3VtZW50KQorICAg
ICAgICBsb2cucHVzaCgnY2hpbGQnKTsKKyAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gZG9j
dW1lbnQpCisgICAgICAgIGxvZy5wdXNoKCdwYXJlbnQnKTsKKyAgICBlbHNlCisgICAgICAgIGxv
Zy5wdXNoKCd1bmtub3duJyk7Cit9CisKK2Z1bmN0aW9uIHZlcmlmeShzZWxlY3RlZCwgZXhwZWN0
ZWQsIGFsdF9leHBlY3RlZCkgeworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgYWN0dWFsID0gbG9nLmxlbmd0aCA/ICcnIDogJ25vbmUnOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxvZy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGFjdHVhbC5s
ZW5ndGgpCisgICAgICAgICAgICAgICAgYWN0dWFsICs9ICcsICc7CisgICAgICAgICAgICBhY3R1
YWwgKz0gbG9nW2ldOworICAgICAgICB9CisgICAgICAgIHZhciByZXN1bHQgPSAnc2VsZWN0aW5n
ICcgKyBzZWxlY3RlZCArICcgZmlyZWQgc2VsZWN0aW9uIGNoYW5nZSBldmVudHMgZnJvbSAnICsg
YWN0dWFsOworICAgICAgICBpZiAoYWN0dWFsID09IGV4cGVjdGVkIHx8IGFjdHVhbCA9PSBhbHRf
ZXhwZWN0ZWQpCisgICAgICAgICAgICByZXN1bHQgPSAnUEFTUzogJyArIHJlc3VsdDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gJ0ZBSUw6ICcgKyByZXN1bHQgKyAnIGJ1dCBl
eHBlY3RlZCAnICsgZXhwZWN0ZWQgKyAoYWx0X2V4cGVjdGVkID8gJyBvciAnICsgYWx0X2V4cGVj
dGVkIDogJycpOworICAgICAgICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb25zb2xlJyk7CisgICAgICAgIHZhciBsaXN0SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2xpJyk7CisgICAgICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQobGlzdEl0ZW0pOworICAgICAg
ICBsaXN0SXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyZXN1bHQpKTsK
KyAgICB9LCAwKTsKK30KKworLy8gc2VsZWN0cyBhbmQgdmVyaWZ5IGluIHR1cm4gdW50aWwgYWxs
IHRlc3RzIGFyZSByYW4KK2Z1bmN0aW9uIHRpbWVyKCkgeworICAgIGlmICghc2VsZWN0ZWQpIHsK
KyAgICAgICAgbG9nID0gW107CisgICAgICAgIHNlbGVjdGVkID0gdGVzdHNbaV0uc2VsZWN0b3Io
KTsKKyAgICB9IGVsc2UgeworICAgICAgICB2ZXJpZnkoc2VsZWN0ZWQsIHRlc3RzW2ldLmV4cGVj
dGVkLCB0ZXN0c1tpXS5hbHRfZXhwZWN0ZWQpOworICAgICAgICBzZWxlY3RlZCA9IG51bGw7Cisg
ICAgICAgIGkrKzsKKyAgICAgICAgaWYgKGkgPT0gdGVzdHMubGVuZ3RoKSB7CisgICAgICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwor
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIHNldFRpbWVvdXQodGltZXIsIDApOwor
fQorCitkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBsb2dnZXIs
IGZhbHNlKTsKK2NoaWxkRG9jdW1lbnQub25zZWxlY3Rpb25jaGFuZ2UgPSBsb2dnZXI7CisKK3Rp
bWVyKCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLXVzZXItaW5pdGlhdGVkLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRp
YXRlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQwZjAzNzJiZDQwZDA5YTNlY2Q5YTMzMWI4
NDllOTRlNGNmNzU1YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwy
NSBAQAorVG8gdGVzdCB0aGlzIG1hbnVhbGx5LCBjbGljayBvbiAiaGVsbG8iLCBhbmQgZXh0ZW5k
IHNlbGVjdGlvbiB0byByaWdodCBieSBwcmVzc2luZyByaWdodCBhcnJvdyBrZXlzIHdpdGggc2hp
ZnQgdHdpY2UuIFRoZW4gY2xpY2sgYWdhaW4gb24gIndvcmxkIiBhbmQgZXh0ZW5kIHNlbGVjdGlv
biB0d2ljZSB0aGUgc2FtZSB3YXkuCisKK2hlbGxvCit3b3JsZAorUEFTUzogbW91c2Vkb3duCitQ
QVNTOiBzZWxlY3Rpb25jaGFuZ2UKK1BBU1M6IG1vdXNldXAKK1BBU1M6IGNsaWNrCitQQVNTOiBr
ZXlkb3duCitQQVNTOiBrZXl1cAorUEFTUzogc2VsZWN0aW9uY2hhbmdlCitQQVNTOiBrZXlkb3du
CitQQVNTOiBrZXl1cAorUEFTUzogc2VsZWN0aW9uY2hhbmdlCitQQVNTOiBtb3VzZWRvd24KK1BB
U1M6IHNlbGVjdGlvbmNoYW5nZQorUEFTUzogc2VsZWN0aW9uY2hhbmdlCitQQVNTOiBtb3VzZXVw
CitQQVNTOiBjbGljaworUEFTUzoga2V5ZG93bgorUEFTUzoga2V5dXAKK1BBU1M6IHNlbGVjdGlv
bmNoYW5nZQorUEFTUzoga2V5ZG93bgorUEFTUzoga2V5dXAKK1BBU1M6IHNlbGVjdGlvbmNoYW5n
ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLXVz
ZXItaW5pdGlhdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFu
Z2UtdXNlci1pbml0aWF0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ODYzYzIzZWJlMzQ0NTQ0NTY5Nzcx
ZjY5ZjAwZmI1MjI2ODdmMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvc2VsZWN0aW9uY2hhbmdlLXVzZXItaW5pdGlhdGVkLmh0bWwKQEAgLTAsMCArMSwxMTcg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9u
IGV4cGVjdGVkKHRleHQpIHsKKyAgICByZXR1cm4gdGV4dC5zdWJzdHIodGV4dC5pbmRleE9mKCc6
JykgKyAyKTsKK30KKwordmFyIGkgPSAwOworCitmdW5jdGlvbiBsb2dnZXIoZXZlbnQpIHsKKyAg
ICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CisgICAg
dmFyIGxpc3RJdGVtID0gbnVsbDsKKyAgICBpZiAoaSA8IGNvbnNvbGUuY2hpbGROb2Rlcy5sZW5n
dGgpIHsKKyAgICAgICAgdmFyIHRleHQgPSBudWxsOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICBsaXN0SXRlbSA9IGNvbnNvbGUuY2hpbGROb2Rlc1tpKytdOworICAgICAgICAgICAgdGV4dCA9
IGxpc3RJdGVtLmlubmVyVGV4dDsKKyAgICAgICAgfSB3aGlsZSAodGV4dC5pbmRleE9mKCdPUFRJ
T05BTDonKSA+PSAwICYmIGV4cGVjdGVkKHRleHQpICE9IGV2ZW50LnR5cGUgJiYgaSA8IGNvbnNv
bGUuY2hpbGROb2Rlcy5sZW5ndGgpOworICAgIH0KKworICAgIGlmICghbGlzdEl0ZW0pIHsKKyAg
ICAgICAgdmFyIGxpc3RJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKKyAgICAg
ICAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0ZBSUw6ICcg
KyBldmVudC50eXBlICsgJyBidXQgZGlkblwndCBleHBlY3QgdG8gZmlyZScpKTsKKyAgICAgICAg
Y29uc29sZS5hcHBlbmRDaGlsZChsaXN0SXRlbSk7CisgICAgICAgIGkgPSBjb25zb2xlLmNoaWxk
Tm9kZXMubGVuZ3RoOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV4cGVjdGVk
KGxpc3RJdGVtLmlubmVyVGV4dCkgPT0gZXZlbnQudHlwZSkKKyAgICAgICAgbGlzdEl0ZW0uaW5u
ZXJIVE1MID0gJ1BBU1M6ICcgKyBldmVudC50eXBlOworICAgIGVsc2UKKyAgICAgICAgbGlzdEl0
ZW0uaW5uZXJIVE1MID0gJ0ZBSUw6ICcgKyBldmVudC50eXBlICsgJyBidXQgZXhwZWN0ZWQgJyAr
IGV4cGVjdGVkKGxpc3RJdGVtLmlubmVyVGV4dCk7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgb25zZWxlY3Rpb25jaGFuZ2U9ImxvZ2dlcihldmVudCkiPgorPHA+VG8gdGVzdCB0aGlz
IG1hbnVhbGx5LCBjbGljayBvbiAiaGVsbG8iLCBhbmQgZXh0ZW5kIHNlbGVjdGlvbiB0byByaWdo
dCBieSBwcmVzc2luZyByaWdodCBhcnJvdyBrZXlzIHdpdGggc2hpZnQgdHdpY2UuCitUaGVuIGNs
aWNrIGFnYWluIG9uICJ3b3JsZCIgYW5kIGV4dGVuZCBzZWxlY3Rpb24gdHdpY2UgdGhlIHNhbWUg
d2F5LjwvcD4KKzxkaXYgaWQ9ImhlbGxvIiBjb250ZW50ZWRpdGFibGU+aGVsbG88L2Rpdj4KKzxk
aXYgaWQ9IndvcmxkIiBjb250ZW50ZWRpdGFibGU+d29ybGQ8L2Rpdj4KKzx1bCBpZD0iY29uc29s
ZSIKKz48bGk+RVhQRUNUOiBtb3VzZWRvd248L2xpCis+PGxpPkVYUEVDVDogc2VsZWN0aW9uY2hh
bmdlPC9saQorPjxsaT5FWFBFQ1Q6IG1vdXNldXA8L2xpCis+PGxpPkVYUEVDVDogY2xpY2s8L2xp
Cis+PGxpPkVYUEVDVDoga2V5ZG93bjwvbGkKKz48bGk+RVhQRUNUOiBrZXl1cDwvbGkKKz48bGk+
RVhQRUNUOiBzZWxlY3Rpb25jaGFuZ2U8L2xpCis+PGxpPkVYUEVDVDoga2V5ZG93bjwvbGkKKz48
bGk+RVhQRUNUOiBrZXl1cDwvbGkKKz48bGk+RVhQRUNUOiBzZWxlY3Rpb25jaGFuZ2U8L2xpCis+
PGxpPkVYUEVDVDogbW91c2Vkb3duPC9saQorPjxsaT5FWFBFQ1Q6IHNlbGVjdGlvbmNoYW5nZTwv
bGkKKz48bGk+T1BUSU9OQUw6IHNlbGVjdGlvbmNoYW5nZTwvbGkKKz48bGk+RVhQRUNUOiBtb3Vz
ZXVwPC9saQorPjxsaT5FWFBFQ1Q6IGNsaWNrPC9saQorPjxsaT5FWFBFQ1Q6IGtleWRvd248L2xp
Cis+PGxpPkVYUEVDVDoga2V5dXA8L2xpCis+PGxpPkVYUEVDVDogc2VsZWN0aW9uY2hhbmdlPC9s
aQorPjxsaT5FWFBFQ1Q6IGtleWRvd248L2xpCis+PGxpPkVYUEVDVDoga2V5dXA8L2xpCis+PGxp
PkVYUEVDVDogc2VsZWN0aW9uY2hhbmdlPC9saQorPjwvdWw+Cis8c2NyaXB0PgorCitmdW5jdGlv
biBhdHRhY2hMb2dnZXIoZWxlbWVudCwgbmFtZSkgeworICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcignbW91c2Vkb3duJywgbG9nZ2VyLCBmYWxzZSk7CisgICAgZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCdtb3VzZXVwJywgbG9nZ2VyLCBmYWxzZSk7CisgICAgZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCdjbGljaycsIGxvZ2dlciwgZmFsc2UpOworICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigna2V5ZG93bicsIGxvZ2dlciwgZmFsc2UpOworICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigna2V5dXAnLCBsb2dnZXIsIGZhbHNlKTsKK30KKwordmFyIGhlbGxvRGl2ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbGxvJyk7Cit2YXIgd29ybGREaXYgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnd29ybGQnKTsKKworYXR0YWNoTG9nZ2VyKGhlbGxvRGl2KTsKK2F0dGFjaExv
Z2dlcih3b3JsZERpdik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgJiYgd2lu
ZG93LmV2ZW50U2VuZGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIHZhciBl
dmVudHMgPSBbCisgICAgICAgIGZ1bmN0aW9uICgpIHsgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8o
aGVsbG9EaXYub2Zmc2V0TGVmdCArIDEwLCBoZWxsb0Rpdi5vZmZzZXRUb3AgKyAyKTsgfSwKKyAg
ICAgICAgZnVuY3Rpb24gKCkgeyBldmVudFNlbmRlci5tb3VzZURvd24oKTsgfSwKKyAgICAgICAg
ZnVuY3Rpb24gKCkgeyBldmVudFNlbmRlci5tb3VzZVVwKCk7IH0sCisgICAgICAgIGZ1bmN0aW9u
ICgpIHsgZXZlbnRTZW5kZXIua2V5RG93bigibGVmdEFycm93IiwgWydzaGlmdEtleSddKTsgfSwK
KyAgICAgICAgZnVuY3Rpb24gKCkgeyBldmVudFNlbmRlci5rZXlEb3duKCJyaWdodEFycm93Iiwg
WydzaGlmdEtleSddKTsgfSwKKyAgICAgICAgZnVuY3Rpb24gKCkgeyBldmVudFNlbmRlci5tb3Vz
ZU1vdmVUbyh3b3JsZERpdi5vZmZzZXRMZWZ0ICsgMTAsIHdvcmxkRGl2Lm9mZnNldFRvcCArIDIp
OyB9LAorICAgICAgICBmdW5jdGlvbiAoKSB7IGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOyB9LAor
ICAgICAgICBmdW5jdGlvbiAoKSB7IGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsgfSwKKyAgICAgICAg
ZnVuY3Rpb24gKCkgeyBldmVudFNlbmRlci5rZXlEb3duKCJsZWZ0QXJyb3ciLCBbJ3NoaWZ0S2V5
J10pOyB9LAorICAgICAgICBmdW5jdGlvbiAoKSB7IGV2ZW50U2VuZGVyLmtleURvd24oInJpZ2h0
QXJyb3ciLCBbJ3NoaWZ0S2V5J10pOyB9LAorICAgIF07CisgICAgdmFyIGogPSAwOworCisgICAg
ZnVuY3Rpb24gdGltZXIoKSB7CisgICAgICAgIC8vIE5lZWQgdG8gd2FpdCBvbmUgbW9yZSBpdGVy
YXRpb24gZm9yIGV2ZW50cyB0byBiZSBwcm9jZXNzZWQKKyAgICAgICAgaWYgKGogPj0gZXZlbnRz
Lmxlbmd0aCkgeworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGV2ZW50c1tqXSgpOwor
ICAgICAgICBqKys7CisgICAgICAgIHNldFRpbWVvdXQodGltZXIsIDApOworICAgIH0KKworICAg
IHRpbWVyKCk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyZmJkMzBmZDAxNjY5
NmUwNzk5ZmMwMjk4MGNiYzM2NDc4YTAxM2E4Li41MzBmZDA4N2ViYWRmNjI5ZjZiNjY5Mzk5NTFk
ZDE5OGEzMTcwMTY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEwLTEyLTE1ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NzEyCisKKyAgICAgICAgQWRkZWQgdGhlIHN1
cHBvcnQgZm9yIGFzeW5jaHJvbm91cyBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQsIHdoaWNoIGlzIGZp
cmVkIHdoZW5ldmVyIHNlbGVjdGlvbiBpcyBjaGFuZ2VkLgorICAgICAgICBUaGlzIGV2ZW50IGlz
IG5vdCBjYW5jZWxhYmxlIGFuZCBkb2VzIG5vdCBidWJibGUuIEFuIGV2ZW50IGxpc3RlbmVyIGNh
biBiZSBhdHRhY2hlZCB0byBhIGRvY3VtZW50IGJ5CisgICAgICAgIGJvZHkgZWxlbWVudCdzIG9u
c2VsZWN0aW9uY2hhbmdlIGF0dHJpYnV0ZSBvciB2aWEgZG9jdW1lbnQncyBvbnNlbGVjdGlvbmNo
YW5nZSBwcm9wZXJ0eS4KKworICAgICAgICBOb3RlIHRoYXQgV2ViS2l0J3MgaW1wbGVtZW50YXRp
b24gZmlyZXMgdGhlIGV2ZW50IGFzeW5jaHJvbm91c2x5IHdoZXJlYXMgSW50ZXJuZXQgRXhwbG9y
ZXIncyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBmaXJlcyBpdCBzeW5jaHJvbm91c2x5LiBUaGlz
IGltcGxpZXMgdGhhdCBhIHNjcmlwdCB0aGF0IG1vZGlmeSBzZWxlY3Rpb24gKGUuZy4gdmlhIHNl
bGVjdGlvbidzIGFkZFJhbmdlKQorICAgICAgICB3aWxsIG5vdCBvYnNlcnZlIHRoZSBldmVudCBi
ZWZvcmUgdGhlIGNvbnRyb2wgcmV0dXJucyB0byBKYXZhU2NyaXB0LgorCisgICAgICAgIFNlZSBh
bHNvOiBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY5NjgoVlMu
ODUpLmFzcHgKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLWlm
cmFtZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtdXNl
ci1pbml0aWF0ZWQuaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjplbnF1ZXVlRG9jdW1lbnRFdmVudCk6IEFkZGVkLgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOiBBZGRlZCBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQgbGlzdGVuZXIu
CisgICAgICAgICogZG9tL0RvY3VtZW50LmlkbDogQWRkZWQgb25zZWxlY3Rpb25jaGFnbmUgYXR0
cmlidXRlLgorICAgICAgICAqIGRvbS9FdmVudE5hbWVzLmg6IEFkZGVkIHNlbGVjdGlvbmNoYW5n
ZQorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb24pOiBGaXJlcyBzZWxlY3Rp
b25jaGFuZ2UgZXZlbnQuCisgICAgICAgICogaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW46IEFk
ZGVkIG9uc2VsZWN0aW9uY2hhbmdlLgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOiBIYW5kbGVzIG9uc2VsZWN0aW9uY2hhbmdlIGF0dHJpYnV0ZS4KKwogMjAxMC0xMi0xNCAg
QW50b24gRCdBdXJpYSAgPGFkYXVyaWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDg3YTQwZDY0N2Q1MDc4MGMxNDQ0MzM2ZjRlMDE1
M2QyNzRjZjlmMDMuLjBjMDg0MzA5YmFkMTM3NjAwYTRmN2Y2MDc3MTYxODQ2NDQyYTNhMTIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKQEAgLTM0ODAsNiArMzQ4MCwxMiBAQCB2b2lkIERvY3VtZW50OjplbnF1ZXVlV2lu
ZG93RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgbV9ldmVudFF1ZXVlLT5lbnF1
ZXVlRXZlbnQoZXZlbnQpOwogfQogCit2b2lkIERvY3VtZW50OjplbnF1ZXVlRG9jdW1lbnRFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMp
OworICAgIG1fZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KGV2ZW50KTsKK30KKwogUGFzc1JlZlB0
cjxFdmVudD4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXgg
N2RmMGY4ZTBmOGZiODZjMjk4MDU4MDAxYjA3ZGY1MjcwYzE2NDMxMC4uZjA4ZTM3YTMzMmY3NmMz
MWM4YzBkYjBiNDlmMjQ4MzUwYmE2YTA4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0yODEsNiArMjgxLDcgQEAgcHVi
bGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIocmVzZXQpOwogICAgIERF
RklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2VhcmNoKTsKICAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKHNlbGVjdHN0YXJ0KTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKHNlbGVjdGlvbmNoYW5nZSk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
ICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHRvdWNoc3RhcnQpOwogICAgIERF
RklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIodG91Y2htb3ZlKTsKQEAgLTEwMjgsNiArMTAy
OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkg
eyBtX2NvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzID0gdHJ1ZTsgfQogCiAgICAgdm9pZCBlbnF1
ZXVlV2luZG93RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIHZvaWQgZW5xdWV1ZURvY3Vt
ZW50RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAgIHZvaWQgZW5xdWV1ZVBhZ2VzaG93RXZl
bnQoUGFnZXNob3dFdmVudFBlcnNpc3RlbmNlKTsKICAgICB2b2lkIGVucXVldWVIYXNoY2hhbmdl
RXZlbnQoY29uc3QgU3RyaW5nJiBvbGRVUkwsIGNvbnN0IFN0cmluZyYgbmV3VVJMKTsKICAgICB2
b2lkIGVucXVldWVQb3BzdGF0ZUV2ZW50KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzdGF0ZU9iamVjdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwgYi9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXggMTM4NzU3ZjllZDZhYjdiYTE3Mzc1Yjc4NDQ5
OTlhZjAyNjA4MmIzYS4uZjQ3ZTExMzA0YWY5ZWI3ZTIwZTBkYzMzYjZmZmJiMTM3MjEyOTEzMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCisrKyBiL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmlkbApAQCAtMzE3LDYgKzMxNyw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgYXR0
cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbnJlc2V0OwogICAgICAgICBhdHRyaWJ1
dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uc2VhcmNoOwogICAgICAgICBhdHRyaWJ1dGUg
W0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uc2VsZWN0c3RhcnQ7CisgICAgICAgIGF0dHJpYnV0
ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25zZWxlY3Rpb25jaGFuZ2U7CiAgICAgICAgIGF0
dHJpYnV0ZSBbRG9udEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRBdFJ1bnRp
bWVdIEV2ZW50TGlzdGVuZXIgb250b3VjaHN0YXJ0OwogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRF
bnVtLENvbmRpdGlvbmFsPVRPVUNIX0VWRU5UUyxFbmFibGVkQXRSdW50aW1lXSBFdmVudExpc3Rl
bmVyIG9udG91Y2htb3ZlOwogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLENvbmRpdGlvbmFs
PVRPVUNIX0VWRU5UUyxFbmFibGVkQXRSdW50aW1lXSBFdmVudExpc3RlbmVyIG9udG91Y2hlbmQ7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmggYi9XZWJDb3JlL2RvbS9FdmVu
dE5hbWVzLmgKaW5kZXggNDk2ODA0ZWU1MGFmOGNiZjNjN2EzMTdjMmNhZDc3YzUxMWMxM2Y3NC4u
OGY1MDExNDcyNTA4MjkzZGQ4ZTNlZDM4NWYxOTE0ODJmMDVjOWM5YyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vRXZlbnROYW1lcy5oCisrKyBiL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaApAQCAt
OTgsNiArOTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8oc2VhcmNoKSBcCiAg
ICAgbWFjcm8oc2VsZWN0KSBcCiAgICAgbWFjcm8oc2VsZWN0c3RhcnQpIFwKKyAgICBtYWNybyhz
ZWxlY3Rpb25jaGFuZ2UpIFwKICAgICBtYWNybyhzdG9yYWdlKSBcCiAgICAgbWFjcm8oc3VibWl0
KSBcCiAgICAgbWFjcm8odGV4dElucHV0KSBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
U2VsZWN0aW9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAKaW5kZXggNGZjNmJiZWIzNzVmMjIwNDFkYTAyMzI1NmJlYjFmMDdlOTMxMThlMS4u
Njg2N2Q4MWYzMDViYTY2NDkwM2E4MjQzZDJkYzc1N2Y0ZWMyZDNjOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGlu
Zy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcApAQCAtMTgwLDYgKzE4MCw3IEBAIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHMsIGJv
b2wgY2xvc2VUeXBpCiAgICAgfQogCiAgICAgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlv
bkNoYW5nZSgpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmVucXVldWVEb2N1bWVudEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBmYWxzZSwg
ZmFsc2UpKTsKIH0KIAogc3RhdGljIGJvb2wgcmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKE5v
ZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4gYi9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5h
bWVzLmluCmluZGV4IDA4OWIyODBiNjliOWE3ZjgzZDYyYmUxYzNkZTU1MzU2YzE4YjgwZTQuLjc4
NjJiN2I4MDMxZmQzMGRhYWM0Nzg5M2ViNjQ1NTk0YWEwYjM0ZWMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KKysrIGIvV2ViQ29yZS9odG1sL0hUTUxBdHRy
aWJ1dGVOYW1lcy5pbgpAQCAtMjEyLDYgKzIxMiw3IEBAIG9uc2Vla2VkCiBvbnNlZWtpbmcKIG9u
c2VsZWN0CiBvbnNlbGVjdHN0YXJ0CitvbnNlbGVjdGlvbmNoYW5nZQogb253ZWJraXRzcGVlY2hj
aGFuZ2UKIG9uc3RhbGxlZAogb25zdG9yYWdlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRN
TEJvZHlFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCmluZGV4
IGFjOTY3NDFkNGZiZWE4NWMzODc2ZWVmNGNiOTkzYmIzZWQ4NmVmMDMuLjdlZmZiYTQ4MThlOTQ1
MDBhM2VhZDk4N2U4YWY0NGNiZTZmYzQ4MzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1M
Qm9keUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCkBA
IC0xNjYsNiArMTY2LDggQEAgdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSogYXR0cikKICAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGNyZWF0ZUF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgYXR0cikpOwogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbnNjcm9sbEF0dHIpCiAgICAgICAgIGRvY3VtZW50KCktPnNldFdp
bmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBjcmVh
dGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGRvY3VtZW50KCktPmZyYW1lKCksIGF0dHIpKTsKKyAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3Rpb25jaGFuZ2VBdHRyKQorICAgICAg
ICBkb2N1bWVudCgpLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxl
Y3Rpb25jaGFuZ2VFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCgp
LT5mcmFtZSgpLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc3RvcmFn
ZUF0dHIpCiAgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0F0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihkb2N1bWVudCgpLT5mcmFtZSgpLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9ub25saW5lQXR0cikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81446</attachid>
            <date>2011-02-06 20:49:38 -0800</date>
            <delta_ts>2011-02-21 00:12:25 -0800</delta_ts>
            <desc>updated to apply on TOT</desc>
            <filename>bug-45712-20110206204936.patch</filename>
            <type>text/plain</type>
            <size>17677</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NzgxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDItMDYgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHNlbGVjdGlvbmNoYW5nZSBldmVudAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU3MTIKKworICAgICAgICBBZGRl
ZCB0aGUgc3VwcG9ydCBmb3IgYXN5bmNocm9ub3VzIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgd2hp
Y2ggaXMgZmlyZWQgd2hlbmV2ZXIgc2VsZWN0aW9uIGlzIGNoYW5nZWQuCisgICAgICAgIFRoaXMg
ZXZlbnQgaXMgbm90IGNhbmNlbGFibGUgYW5kIGRvZXMgbm90IGJ1YmJsZS4gQW4gZXZlbnQgbGlz
dGVuZXIgY2FuIGJlIGF0dGFjaGVkIHRvIGEgZG9jdW1lbnQgYnkKKyAgICAgICAgYm9keSBlbGVt
ZW50J3Mgb25zZWxlY3Rpb25jaGFuZ2UgYXR0cmlidXRlIG9yIHZpYSBkb2N1bWVudCdzIG9uc2Vs
ZWN0aW9uY2hhbmdlIHByb3BlcnR5LgorCisgICAgICAgIE5vdGUgdGhhdCBXZWJLaXQncyBpbXBs
ZW1lbnRhdGlvbiBmaXJlcyB0aGUgZXZlbnQgYXN5bmNocm9ub3VzbHkgd2hlcmVhcyBJbnRlcm5l
dCBFeHBsb3JlcidzIGltcGxlbWVudGF0aW9uCisgICAgICAgIGZpcmVzIGl0IHN5bmNocm9ub3Vz
bHkuIFRoaXMgaW1wbGllcyB0aGF0IGEgc2NyaXB0IHRoYXQgbW9kaWZ5IHNlbGVjdGlvbiAoZS5n
LiB2aWEgc2VsZWN0aW9uJ3MgYWRkUmFuZ2UpCisgICAgICAgIHdpbGwgbm90IG9ic2VydmUgdGhl
IGV2ZW50IGJlZm9yZSB0aGUgY29udHJvbCByZXR1cm5zIHRvIEphdmFTY3JpcHQuCisKKyAgICAg
ICAgU2VlIGFsc286IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUz
Njk2OChWUy44NSkuYXNweAorCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50cy9zZWxlY3Rpb25j
aGFuZ2UtaWZyYW1lLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3NlbGVjdGlvbmNo
YW5nZS11c2VyLWluaXRpYXRlZC5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmVucXVldWVEb2N1bWVudEV2ZW50KTogQWRkZWQu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6IEFkZGVkIHNlbGVjdGlvbmNoYW5nZSBldmVudCBs
aXN0ZW5lci4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOiBBZGRlZCBvbnNlbGVjdGlvbmNo
YWduZSBhdHRyaWJ1dGUuCisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDogQWRkZWQgc2VsZWN0
aW9uY2hhbmdlCisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbik6IEZpcmVz
IHNlbGVjdGlvbmNoYW5nZSBldmVudC4KKyAgICAgICAgKiBodG1sL0hUTUxBdHRyaWJ1dGVOYW1l
cy5pbjogQWRkZWQgb25zZWxlY3Rpb25jaGFuZ2UuCisgICAgICAgICogaHRtbC9IVE1MQm9keUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6IEhhbmRsZXMgb25zZWxlY3Rpb25jaGFuZ2UgYXR0cmlidXRlLgorCiAyMDEx
LTAyLTAzICBEb21pbmljIENvb25leSAgPGRvbWluaWNjQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiA3Nzc4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0NTksNiArMzQ1OSwxMiBAQCB2b2lkIERvY3VtZW50OjplbnF1ZXVl
V2luZG93RXZlbnQoUGFzc1JlCiAgICAgbV9ldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQp
OwogfQogCit2b2lkIERvY3VtZW50OjplbnF1ZXVlRG9jdW1lbnRFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiBldmVudCkKK3sKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgIG1fZXZlbnRR
dWV1ZS0+ZW5xdWV1ZUV2ZW50KGV2ZW50KTsKK30KKwogUGFzc1JlZlB0cjxFdmVudD4gRG9jdW1l
bnQ6OmNyZWF0ZUV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnRUeXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDc3NzgxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4OSw2ICsyODksNyBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihyZXNldCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihzZWFyY2gpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2VsZWN0
c3RhcnQpOworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc2VsZWN0aW9uY2hh
bmdlKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIodG91Y2hzdGFydCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUih0b3VjaG1vdmUpOwpAQCAtMTAzMyw2ICsxMDM0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Q29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSB7IG1fY29udGFpbnNWYWxpZGl0eVN0eWxl
UnVsZXMgPSB0cnVlOyB9CiAKICAgICB2b2lkIGVucXVldWVXaW5kb3dFdmVudChQYXNzUmVmUHRy
PEV2ZW50Pik7CisgICAgdm9pZCBlbnF1ZXVlRG9jdW1lbnRFdmVudChQYXNzUmVmUHRyPEV2ZW50
Pik7CiAgICAgdm9pZCBlbnF1ZXVlUGFnZXNob3dFdmVudChQYWdlc2hvd0V2ZW50UGVyc2lzdGVu
Y2UpOwogICAgIHZvaWQgZW5xdWV1ZUhhc2hjaGFuZ2VFdmVudChjb25zdCBTdHJpbmcmIG9sZFVS
TCwgY29uc3QgU3RyaW5nJiBuZXdVUkwpOwogICAgIHZvaWQgZW5xdWV1ZVBvcHN0YXRlRXZlbnQo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHN0YXRlT2JqZWN0KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmlkbAkocmV2aXNpb24gNzc3ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNiArMzE3LDcgQEAgbW9kdWxl
IGNvcmUgewogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9ucmVz
ZXQ7CiAgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25zZWFyY2g7
CiAgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25zZWxlY3RzdGFy
dDsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbnNlbGVjdGlv
bmNoYW5nZTsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSxDb25kaXRpb25hbD1UT1VDSF9F
VkVOVFMsRW5hYmxlZEF0UnVudGltZV0gRXZlbnRMaXN0ZW5lciBvbnRvdWNoc3RhcnQ7CiAgICAg
ICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRB
dFJ1bnRpbWVdIEV2ZW50TGlzdGVuZXIgb250b3VjaG1vdmU7CiAgICAgICAgIGF0dHJpYnV0ZSBb
RG9udEVudW0sQ29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTLEVuYWJsZWRBdFJ1bnRpbWVdIEV2ZW50
TGlzdGVuZXIgb250b3VjaGVuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkocmV2aXNp
b24gNzc3ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKHNl
YXJjaCkgXAogICAgIG1hY3JvKHNlbGVjdCkgXAogICAgIG1hY3JvKHNlbGVjdHN0YXJ0KSBcCisg
ICAgbWFjcm8oc2VsZWN0aW9uY2hhbmdlKSBcCiAgICAgbWFjcm8oc3RvcmFnZSkgXAogICAgIG1h
Y3JvKHN1Ym1pdCkgXAogICAgIG1hY3JvKHRleHRJbnB1dCkgXApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3Nzc4MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MSw2ICsxODEsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNl
dFNlbGVjdGlvbihjCiAgICAgfQogCiAgICAgbm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlv
bkNoYW5nZSgpOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmVucXVldWVEb2N1bWVudEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnNlbGVjdGlvbmNoYW5nZUV2ZW50LCBmYWxzZSwg
ZmFsc2UpKTsKIH0KIAogc3RhdGljIGJvb2wgcmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKE5v
ZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiA3Nzc4MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUs
NiArMjE1LDcgQEAgb25zZWVrZWQKIG9uc2Vla2luZwogb25zZWxlY3QKIG9uc2VsZWN0c3RhcnQK
K29uc2VsZWN0aW9uY2hhbmdlCiBvbndlYmtpdHNwZWVjaGNoYW5nZQogb25zdGFsbGVkCiBvbnN0
b3JhZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHJldmlz
aW9uIDc3NzgxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjYsNiArMTY2LDggQEAgdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidQogICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihkb2N1bWVudCgpLT5mcmFtZSgpLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uc2Nyb2xsQXR0cikKICAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIGNyZWF0ZUF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgYXR0cikpOworICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlbGVjdGlvbmNoYW5nZUF0dHIpCisgICAgICAgIGRv
Y3VtZW50KCktPnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNlbGVjdGlv
bmNoYW5nZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGRvY3VtZW50KCktPmZy
YW1lKCksIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zdG9yYWdlQXR0
cikKICAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGRv
Y3VtZW50KCktPmZyYW1lKCksIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25vbmxpbmVBdHRyKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzc3ODEpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0wMi0wNiAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc2VsZWN0aW9uY2hhbmdlIGV2ZW50CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTcxMgorCisgICAgICAg
IEFkZGVkIGEgdGVzdCB0byBlbnN1cmUgV2ViS2l0IGZpcmVzIHNlbGVjdGlvbmNoYW5nZSBldmVu
dCBmb3IgdGhlIGNvcnJlY3QgZG9jdW1lbnQKKyAgICAgICAgd2hlbiB0aGUgZG9jdW1lbnQgaGFz
IGFuIGlmcmFtZSwgYW5kIGEgdGVzdCB0byBlbnN1cmUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50cyBh
cmUgZmlyZWQKKyAgICAgICAgb24gdXNlci1pbml0aWF0ZWQgZXZlbnRzLgorCisgICAgICAgICog
ZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLWlmcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLXVzZXItaW5pdGlhdGVkLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdl
LXVzZXItaW5pdGlhdGVkLmh0bWw6IEFkZGVkLgorCiAyMDExLTAyLTA2ICBEb21pbmljIENvb25l
eSAgPGRvbWluaWNjQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBH
bGF6a292LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc2VsZWN0aW9uY2hhbmdlLWlm
cmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
c2VsZWN0aW9uY2hhbmdlLWlmcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtaWZyYW1lLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitUaGlzIHRlc3RzIHRoYXQgY2hhbmdpbmcgc2Vs
ZWN0aW9uIGluIGFuIGlmcmFtZSBkb2VzIG5vdCBmaXJlIHNlbGVjdGlvbmNoYW5nZSBldmVudCBp
biB0aGUgcGFyZW50IGRvY3VtZW50IGFuZCB2aWNlIHZlcnNhLgorCitQQVNTOiBzZWxlY3Rpbmcg
YWxsIG9mIHBhcmVudCdzIGRvY3VtZW50IGJvZHkgZmlyZWQgc2VsZWN0aW9uIGNoYW5nZSBldmVu
dHMgZnJvbSBwYXJlbnQKK1BBU1M6IHNlbGVjdGluZyBhbGwgb2YgcGFyZW50J3MgZG9jdW1lbnQg
Ym9keSBmaXJlZCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50cyBmcm9tIGNoaWxkCitQQVNTOiBzZWxl
Y3RpbmcgInJvY2tzIiBvZiAiV2ViS2l0IHJvY2tzIiBpbiB0aGUgcGFyZW50IGZpcmVkIHNlbGVj
dGlvbiBjaGFuZ2UgZXZlbnRzIGZyb20gcGFyZW50LCBwYXJlbnQKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS1pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtaWZyYW1lLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtaWZyYW1l
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3RzIHRoYXQgY2hhbmdpbmcgc2VsZWN0aW9uIGluIGFu
IGlmcmFtZSBkb2VzIG5vdCBmaXJlIHNlbGVjdGlvbmNoYW5nZSBldmVudCBpbiB0aGUgcGFyZW50
IGRvY3VtZW50IGFuZCB2aWNlIHZlcnNhLjwvcD4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+Cis8aWZy
YW1lIGlkPSJjaGlsZCIgc3JjPSJhYm91dDpibGFuayI+PC9pZnJhbWU+Cis8ZGl2IGlkPSJwYXJl
bnQiPldlYktpdCByb2NrczwvZGl2PgorPC9kaXY+Cis8dWwgaWQ9ImNvbnNvbGUiPgorPC91bD4K
KzxzY3JpcHQ+CisKK3ZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50
Jyk7Cit2YXIgY2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hpbGQnKTsKK3ZhciBj
aGlsZERvY3VtZW50ID0gKGNoaWxkLmNvbnRlbnRXaW5kb3cgfHwgY2hpbGQuY29udGVudERvY3Vt
ZW50KS5kb2N1bWVudDsKK2lmICghY2hpbGREb2N1bWVudC5ib2R5KQorICAgY2hpbGREb2N1bWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdib2R5JykpOworY2hpbGREb2N1
bWVudC5ib2R5LmlubmVySFRNTCA9ICdoZWxsbyB3b3JsZCc7CisKK3ZhciBzZWxlY3Rpb25PZlBh
cmVudCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKK3ZhciBzZWxlY3Rpb25PZkNoaWxkID0gY2hp
bGQuY29udGVudERvY3VtZW50LmdldFNlbGVjdGlvbigpOworCit0ZXN0cyA9IFsKKyAgICB7Cisg
ICAgICAgIHNlbGVjdG9yOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlbGVjdGlvbk9mUGFy
ZW50LnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmJvZHkpOworICAgICAgICAgICAgcmV0dXJu
ICJhbGwgb2YgcGFyZW50J3MgZG9jdW1lbnQgYm9keSI7CisgICAgICAgICAgICB9LAorICAgICAg
ICBleHBlY3RlZDogJ3BhcmVudCcsCisgICAgICAgIGFsdF9leHBlY3RlZDogbnVsbCwKKyAgICB9
LAorICAgIHsKKyAgICAgICAgc2VsZWN0b3I6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHNlbGVjdGlvbk9mQ2hpbGQuc2VsZWN0QWxsQ2hpbGRyZW4oY2hpbGREb2N1bWVudC5ib2R5KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gImFsbCBvZiBwYXJlbnQncyBkb2N1bWVudCBib2R5IjsK
KyAgICAgICAgICAgIH0sCisgICAgICAgIGV4cGVjdGVkOiAnY2hpbGQnLAorICAgICAgICBhbHRf
ZXhwZWN0ZWQ6IG51bGwsCisgICAgfSwKKyAgICB7CisgICAgICAgIHNlbGVjdG9yOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgp
OworICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHBhcmVudC5maXJzdENoaWxkLCA3KTsK
KyAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQocGFyZW50LmZpcnN0Q2hpbGQsIDEyKTsKKyAg
ICAgICAgICAgICAgICBzZWxlY3Rpb25PZlBhcmVudC5yZW1vdmVBbGxSYW5nZXMoKTsKKyAgICAg
ICAgICAgICAgICBzZWxlY3Rpb25PZlBhcmVudC5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICcicm9ja3MiIG9mICJXZWJLaXQgcm9ja3MiIGluIHRoZSBwYXJlbnQnOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQ6ICdwYXJlbnQsIHBhcmVudCcsCisgICAg
ICAgIGFsdF9leHBlY3RlZDogJ3BhcmVudCcsCisgICAgfSwKKyAgICB7CisgICAgICAgIHNlbGVj
dG9yOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBjaGlsZERvY3Vt
ZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY2hpbGRE
b2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQsIDYpOworICAgICAgICAgICAgICAgIHJhbmdlLnNldEVu
ZChjaGlsZERvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCwgMTEpOworICAgICAgICAgICAgICAgIHNl
bGVjdGlvbk9mQ2hpbGQucmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgICAgICAgICAgc2VsZWN0
aW9uT2ZDaGlsZC5hZGRSYW5nZShyYW5nZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICcid29y
bGQiIG9mICJoZWxsbyB3b3JsZCIgaW4gdGhlIGNoaWxkJzsKKyAgICAgICAgICAgIH0sCisgICAg
ICAgIGV4cGVjdGVkOiAnY2hpbGQsIGNoaWxkJywKKyAgICAgICAgYWx0X2V4cGVjdGVkOiAnY2hp
bGQnLAorICAgIH0KK107Cit2YXIgaSA9IDA7Cit2YXIgc2VsZWN0ZWQgPSBudWxsOworCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
K30KKwordmFyIGxvZyA9IFtdOworCitmdW5jdGlvbiBsb2dnZXIoZXZlbnQpIHsKKyAgICBpZiAo
ZXZlbnQudGFyZ2V0ID09IGNoaWxkRG9jdW1lbnQpCisgICAgICAgIGxvZy5wdXNoKCdjaGlsZCcp
OworICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSBkb2N1bWVudCkKKyAgICAgICAgbG9nLnB1
c2goJ3BhcmVudCcpOworICAgIGVsc2UKKyAgICAgICAgbG9nLnB1c2goJ3Vua25vd24nKTsKK30K
KworZnVuY3Rpb24gdmVyaWZ5KHNlbGVjdGVkLCBleHBlY3RlZCwgYWx0X2V4cGVjdGVkKSB7Cisg
ICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBhY3R1YWwgPSBsb2cubGVu
Z3RoID8gJycgOiAnbm9uZSc7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9nLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYWN0dWFsLmxlbmd0aCkKKyAgICAgICAgICAgICAg
ICBhY3R1YWwgKz0gJywgJzsKKyAgICAgICAgICAgIGFjdHVhbCArPSBsb2dbaV07CisgICAgICAg
IH0KKyAgICAgICAgdmFyIHJlc3VsdCA9ICdzZWxlY3RpbmcgJyArIHNlbGVjdGVkICsgJyBmaXJl
ZCBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50cyBmcm9tICcgKyBhY3R1YWw7CisgICAgICAgIGlmIChh
Y3R1YWwgPT0gZXhwZWN0ZWQgfHwgYWN0dWFsID09IGFsdF9leHBlY3RlZCkKKyAgICAgICAgICAg
IHJlc3VsdCA9ICdQQVNTOiAnICsgcmVzdWx0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXN1bHQgPSAnRkFJTDogJyArIHJlc3VsdCArICcgYnV0IGV4cGVjdGVkICcgKyBleHBlY3RlZCAr
IChhbHRfZXhwZWN0ZWQgPyAnIG9yICcgKyBhbHRfZXhwZWN0ZWQgOiAnJyk7CisgICAgICAgIHZh
ciBjb25zb2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKKyAgICAgICAg
dmFyIGxpc3RJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKKyAgICAgICAgY29u
c29sZS5hcHBlbmRDaGlsZChsaXN0SXRlbSk7CisgICAgICAgIGxpc3RJdGVtLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc3VsdCkpOworICAgIH0sIDApOworfQorCisvLyBz
ZWxlY3RzIGFuZCB2ZXJpZnkgaW4gdHVybiB1bnRpbCBhbGwgdGVzdHMgYXJlIHJhbgorZnVuY3Rp
b24gdGltZXIoKSB7CisgICAgaWYgKCFzZWxlY3RlZCkgeworICAgICAgICBsb2cgPSBbXTsKKyAg
ICAgICAgc2VsZWN0ZWQgPSB0ZXN0c1tpXS5zZWxlY3RvcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHZlcmlmeShzZWxlY3RlZCwgdGVzdHNbaV0uZXhwZWN0ZWQsIHRlc3RzW2ldLmFsdF9leHBl
Y3RlZCk7CisgICAgICAgIHNlbGVjdGVkID0gbnVsbDsKKyAgICAgICAgaSsrOworICAgICAgICBp
ZiAoaSA9PSB0ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nv
bnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgc2V0VGltZW91dCh0aW1lciwgMCk7Cit9CisKK2RvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIGxvZ2dlciwgZmFsc2UpOworY2hpbGREb2N1bWVu
dC5vbnNlbGVjdGlvbmNoYW5nZSA9IGxvZ2dlcjsKKwordGltZXIoKTsKKworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25j
aGFuZ2UtdXNlci1pbml0aWF0ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFu
Z2UtdXNlci1pbml0aWF0ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1
IEBACitUbyB0ZXN0IHRoaXMgbWFudWFsbHksIGNsaWNrIG9uICJoZWxsbyIsIGFuZCBleHRlbmQg
c2VsZWN0aW9uIHRvIHJpZ2h0IGJ5IHByZXNzaW5nIHJpZ2h0IGFycm93IGtleXMgd2l0aCBzaGlm
dCB0d2ljZS4gVGhlbiBjbGljayBhZ2FpbiBvbiAid29ybGQiIGFuZCBleHRlbmQgc2VsZWN0aW9u
IHR3aWNlIHRoZSBzYW1lIHdheS4KKworaGVsbG8KK3dvcmxkCitQQVNTOiBtb3VzZWRvd24KK1BB
U1M6IHNlbGVjdGlvbmNoYW5nZQorUEFTUzogbW91c2V1cAorUEFTUzogY2xpY2sKK1BBU1M6IGtl
eWRvd24KK1BBU1M6IGtleXVwCitQQVNTOiBzZWxlY3Rpb25jaGFuZ2UKK1BBU1M6IGtleWRvd24K
K1BBU1M6IGtleXVwCitQQVNTOiBzZWxlY3Rpb25jaGFuZ2UKK1BBU1M6IG1vdXNlZG93bgorUEFT
Uzogc2VsZWN0aW9uY2hhbmdlCitQQVNTOiBzZWxlY3Rpb25jaGFuZ2UKK1BBU1M6IG1vdXNldXAK
K1BBU1M6IGNsaWNrCitQQVNTOiBrZXlkb3duCitQQVNTOiBrZXl1cAorUEFTUzogc2VsZWN0aW9u
Y2hhbmdlCitQQVNTOiBrZXlkb3duCitQQVNTOiBrZXl1cAorUEFTUzogc2VsZWN0aW9uY2hhbmdl
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rpb25jaGFuZ2UtdXNlci1pbml0
aWF0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zZWxlY3Rp
b25jaGFuZ2UtdXNlci1pbml0aWF0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3NlbGVjdGlvbmNoYW5nZS11c2VyLWluaXRpYXRlZC5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdD4KKworZnVuY3Rpb24gZXhwZWN0ZWQodGV4dCkgeworICAgIHJldHVybiB0ZXh0LnN1
YnN0cih0ZXh0LmluZGV4T2YoJzonKSArIDIpOworfQorCit2YXIgaSA9IDA7CisKK2Z1bmN0aW9u
IGxvZ2dlcihldmVudCkgeworICAgIHZhciBjb25zb2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnNvbGUnKTsKKyAgICB2YXIgbGlzdEl0ZW0gPSBudWxsOworICAgIGlmIChpIDwgY29u
c29sZS5jaGlsZE5vZGVzLmxlbmd0aCkgeworICAgICAgICB2YXIgdGV4dCA9IG51bGw7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGxpc3RJdGVtID0gY29uc29sZS5jaGlsZE5vZGVzW2krK107
CisgICAgICAgICAgICB0ZXh0ID0gbGlzdEl0ZW0uaW5uZXJUZXh0OworICAgICAgICB9IHdoaWxl
ICh0ZXh0LmluZGV4T2YoJ09QVElPTkFMOicpID49IDAgJiYgZXhwZWN0ZWQodGV4dCkgIT0gZXZl
bnQudHlwZSAmJiBpIDwgY29uc29sZS5jaGlsZE5vZGVzLmxlbmd0aCk7CisgICAgfQorCisgICAg
aWYgKCFsaXN0SXRlbSkgeworICAgICAgICB2YXIgbGlzdEl0ZW0gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdsaScpOworICAgICAgICBsaXN0SXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgnRkFJTDogJyArIGV2ZW50LnR5cGUgKyAnIGJ1dCBkaWRuXCd0IGV4cGVjdCB0
byBmaXJlJykpOworICAgICAgICBjb25zb2xlLmFwcGVuZENoaWxkKGxpc3RJdGVtKTsKKyAgICAg
ICAgaSA9IGNvbnNvbGUuY2hpbGROb2Rlcy5sZW5ndGg7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoZXhwZWN0ZWQobGlzdEl0ZW0uaW5uZXJUZXh0KSA9PSBldmVudC50eXBlKQor
ICAgICAgICBsaXN0SXRlbS5pbm5lckhUTUwgPSAnUEFTUzogJyArIGV2ZW50LnR5cGU7CisgICAg
ZWxzZQorICAgICAgICBsaXN0SXRlbS5pbm5lckhUTUwgPSAnRkFJTDogJyArIGV2ZW50LnR5cGUg
KyAnIGJ1dCBleHBlY3RlZCAnICsgZXhwZWN0ZWQobGlzdEl0ZW0uaW5uZXJUZXh0KTsKK30KKwor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbnNlbGVjdGlvbmNoYW5nZT0ibG9nZ2VyKGV2ZW50
KSI+Cis8cD5UbyB0ZXN0IHRoaXMgbWFudWFsbHksIGNsaWNrIG9uICJoZWxsbyIsIGFuZCBleHRl
bmQgc2VsZWN0aW9uIHRvIHJpZ2h0IGJ5IHByZXNzaW5nIHJpZ2h0IGFycm93IGtleXMgd2l0aCBz
aGlmdCB0d2ljZS4KK1RoZW4gY2xpY2sgYWdhaW4gb24gIndvcmxkIiBhbmQgZXh0ZW5kIHNlbGVj
dGlvbiB0d2ljZSB0aGUgc2FtZSB3YXkuPC9wPgorPGRpdiBpZD0iaGVsbG8iIGNvbnRlbnRlZGl0
YWJsZT5oZWxsbzwvZGl2PgorPGRpdiBpZD0id29ybGQiIGNvbnRlbnRlZGl0YWJsZT53b3JsZDwv
ZGl2PgorPHVsIGlkPSJjb25zb2xlIgorPjxsaT5FWFBFQ1Q6IG1vdXNlZG93bjwvbGkKKz48bGk+
RVhQRUNUOiBzZWxlY3Rpb25jaGFuZ2U8L2xpCis+PGxpPkVYUEVDVDogbW91c2V1cDwvbGkKKz48
bGk+RVhQRUNUOiBjbGljazwvbGkKKz48bGk+RVhQRUNUOiBrZXlkb3duPC9saQorPjxsaT5FWFBF
Q1Q6IGtleXVwPC9saQorPjxsaT5FWFBFQ1Q6IHNlbGVjdGlvbmNoYW5nZTwvbGkKKz48bGk+RVhQ
RUNUOiBrZXlkb3duPC9saQorPjxsaT5FWFBFQ1Q6IGtleXVwPC9saQorPjxsaT5FWFBFQ1Q6IHNl
bGVjdGlvbmNoYW5nZTwvbGkKKz48bGk+RVhQRUNUOiBtb3VzZWRvd248L2xpCis+PGxpPkVYUEVD
VDogc2VsZWN0aW9uY2hhbmdlPC9saQorPjxsaT5PUFRJT05BTDogc2VsZWN0aW9uY2hhbmdlPC9s
aQorPjxsaT5FWFBFQ1Q6IG1vdXNldXA8L2xpCis+PGxpPkVYUEVDVDogY2xpY2s8L2xpCis+PGxp
PkVYUEVDVDoga2V5ZG93bjwvbGkKKz48bGk+RVhQRUNUOiBrZXl1cDwvbGkKKz48bGk+RVhQRUNU
OiBzZWxlY3Rpb25jaGFuZ2U8L2xpCis+PGxpPkVYUEVDVDoga2V5ZG93bjwvbGkKKz48bGk+RVhQ
RUNUOiBrZXl1cDwvbGkKKz48bGk+RVhQRUNUOiBzZWxlY3Rpb25jaGFuZ2U8L2xpCis+PC91bD4K
KzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGF0dGFjaExvZ2dlcihlbGVtZW50LCBuYW1lKSB7CisgICAg
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBsb2dnZXIsIGZhbHNlKTsKKyAg
ICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBsb2dnZXIsIGZhbHNlKTsKKyAg
ICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbG9nZ2VyLCBmYWxzZSk7CisgICAg
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgbG9nZ2VyLCBmYWxzZSk7CisgICAg
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGxvZ2dlciwgZmFsc2UpOworfQorCit2
YXIgaGVsbG9EaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVsbG8nKTsKK3ZhciB3b3Js
ZERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3b3JsZCcpOworCithdHRhY2hMb2dnZXIo
aGVsbG9EaXYpOworYXR0YWNoTG9nZ2VyKHdvcmxkRGl2KTsKKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworCisgICAgdmFyIGV2ZW50cyA9IFsKKyAgICAgICAgZnVuY3Rpb24gKCkgeyBldmVu
dFNlbmRlci5tb3VzZU1vdmVUbyhoZWxsb0Rpdi5vZmZzZXRMZWZ0ICsgMTAsIGhlbGxvRGl2Lm9m
ZnNldFRvcCArIDIpOyB9LAorICAgICAgICBmdW5jdGlvbiAoKSB7IGV2ZW50U2VuZGVyLm1vdXNl
RG93bigpOyB9LAorICAgICAgICBmdW5jdGlvbiAoKSB7IGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsg
fSwKKyAgICAgICAgZnVuY3Rpb24gKCkgeyBldmVudFNlbmRlci5rZXlEb3duKCJsZWZ0QXJyb3ci
LCBbJ3NoaWZ0S2V5J10pOyB9LAorICAgICAgICBmdW5jdGlvbiAoKSB7IGV2ZW50U2VuZGVyLmtl
eURvd24oInJpZ2h0QXJyb3ciLCBbJ3NoaWZ0S2V5J10pOyB9LAorICAgICAgICBmdW5jdGlvbiAo
KSB7IGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHdvcmxkRGl2Lm9mZnNldExlZnQgKyAxMCwgd29y
bGREaXYub2Zmc2V0VG9wICsgMik7IH0sCisgICAgICAgIGZ1bmN0aW9uICgpIHsgZXZlbnRTZW5k
ZXIubW91c2VEb3duKCk7IH0sCisgICAgICAgIGZ1bmN0aW9uICgpIHsgZXZlbnRTZW5kZXIubW91
c2VVcCgpOyB9LAorICAgICAgICBmdW5jdGlvbiAoKSB7IGV2ZW50U2VuZGVyLmtleURvd24oImxl
ZnRBcnJvdyIsIFsnc2hpZnRLZXknXSk7IH0sCisgICAgICAgIGZ1bmN0aW9uICgpIHsgZXZlbnRT
ZW5kZXIua2V5RG93bigicmlnaHRBcnJvdyIsIFsnc2hpZnRLZXknXSk7IH0sCisgICAgXTsKKyAg
ICB2YXIgaiA9IDA7CisKKyAgICBmdW5jdGlvbiB0aW1lcigpIHsKKyAgICAgICAgLy8gTmVlZCB0
byB3YWl0IG9uZSBtb3JlIGl0ZXJhdGlvbiBmb3IgZXZlbnRzIHRvIGJlIHByb2Nlc3NlZAorICAg
ICAgICBpZiAoaiA+PSBldmVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgZXZlbnRzW2pdKCk7CisgICAgICAgIGorKzsKKyAgICAgICAgc2V0VGltZW91dCh0aW1l
ciwgMCk7CisgICAgfQorCisgICAgdGltZXIoKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>
<flag name="review"
          id="73028"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>