<?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>67742</bug_id>
          
          <creation_ts>2011-09-07 15:30:18 -0700</creation_ts>
          <short_desc>Push more code from HTMLInputElement::setValue to TextFieldInputType::setValue</short_desc>
          <delta_ts>2011-09-08 23:15:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>67360</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>adele</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>morrita</cc>
    
    <cc>tkent</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>463702</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 15:30:18 -0700</bug_when>
    <thetext>We have too much code for TextFieldInputType in HTMLInputElement::setValue. We should those into TextFieldInputType::setValue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463725</commentid>
    <comment_count>1</comment_count>
      <attachid>106663</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 15:47:49 -0700</bug_when>
    <thetext>Created attachment 106663
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463726</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 15:48:47 -0700</bug_when>
    <thetext>I feel like I&apos;m doing too much at once in this patch still but I&apos;ll be happy nontheless if someone feels brave enough to review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463803</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-07 18:26:13 -0700</bug_when>
    <thetext>I’m planning on reviewing soon.

I’m more concerned about the confusing idiom of the bool&amp; for sendChangeEvent than I am about the pure &quot;too much in one patch&quot; issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463807</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 18:39:11 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I’m planning on reviewing soon.
&gt; 
&gt; I’m more concerned about the confusing idiom of the bool&amp; for sendChangeEvent than I am about the pure &quot;too much in one patch&quot; issue.

Thanks! The problem is that dispatching change/input event needs to happen at the every end for text fields. Because InputType::setValue is called at the beginning of setValue methods in the derived classes, it prevents us from dispatching the event there.  On the other hand, we can&apos;t always dispatch change events because text fields needs to dispatch input events in some cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463859</commentid>
    <comment_count>5</comment_count>
      <attachid>106663</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-09-07 20:36:42 -0700</bug_when>
    <thetext>Comment on attachment 106663
Patch

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

&gt; Source/WebCore/html/HTMLInputElement.cpp:1092
&gt; -            dispatchFormControlInputEvent();
&gt; -        else
&gt; -            dispatchFormControlChangeEvent();
&gt; -    }
&gt;  
&gt; +    // FIXME: why do we do this when !sendChangeEvent?
&gt;      if (isTextField() &amp;&amp; (!focused() || !sendChangeEvent))
&gt;          setTextAsOfLastFormControlChangeEvent(value);

This code is dangerous. &apos;change&apos; / &apos;input&apos; event handlers can delete &apos;this&apos; though it&apos;s not your failure.

&gt; Source/WebCore/html/HTMLInputElement.h:239
&gt; +    class OffsetForCacheSelection {

What&apos;s the purpose of this class?
Passing an int to cacheSelectionInResponseToSetValue() looks enough.

&gt; Source/WebCore/html/TextFieldInputType.cpp:97
&gt; +    if (sendChangeEvent) {
&gt; +        // If the user is still editing this field, dispatch an input event rather than a change event.
&gt; +        // The change event will be dispatched when editing finishes.
&gt; +        if (element()-&gt;focused())
&gt; +            element()-&gt;dispatchFormControlInputEvent();
&gt; +        else
&gt; +            element()-&gt;dispatchFormControlChangeEvent();

The original code dispatches a &apos;change&apos; event for non text fields. Moving this code to here looks wrong.
Have you run layout tests?

&gt; Source/WebCore/html/TextFieldInputType.cpp:98
&gt; +        sendChangeEvent = false;

Why do we need to update sendChangeEvent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463862</commentid>
    <comment_count>6</comment_count>
      <attachid>106663</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 20:41:51 -0700</bug_when>
    <thetext>Comment on attachment 106663
Patch

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

&gt; Source/WebCore/html/HTMLInputElement.cpp:-1120
&gt; -    if (sendChangeEvent) {
&gt; -        // If the user is still editing this field, dispatch an input event rather than a change event.
&gt; -        // The change event will be dispatched when editing finishes.
&gt; -        if (isTextField() &amp;&amp; focused())
&gt; -            dispatchFormControlInputEvent();
&gt; -        else
&gt; -            dispatchFormControlChangeEvent();
&gt; -    }

Oops, this is wrong. It should be replaced by:
if (sendChangeEvent)
    dispatchFormControlChangeEvent();

&gt;&gt; Source/WebCore/html/HTMLInputElement.h:239
&gt;&gt; +    class OffsetForCacheSelection {
&gt; 
&gt; What&apos;s the purpose of this class?
&gt; Passing an int to cacheSelectionInResponseToSetValue() looks enough.

To restrict the access to cacheSelectionInResponseToSetValue to HTMLInputElement and TextFieldInputType.

&gt;&gt; Source/WebCore/html/TextFieldInputType.cpp:98

&gt; 
&gt; Why do we need to update sendChangeEvent?

To prevent HTMLInputElement::setValue from firing the change event. Apparently, there&apos;s no test for this :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463886</commentid>
    <comment_count>7</comment_count>
      <attachid>106697</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 22:13:10 -0700</bug_when>
    <thetext>Created attachment 106697
Updated per comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463893</commentid>
    <comment_count>8</comment_count>
      <attachid>106697</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-09-07 22:41:10 -0700</bug_when>
    <thetext>Comment on attachment 106697
Updated per comment

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

&gt; Source/WebCore/html/HTMLInputElement.cpp:1102
&gt; +    if (sendChangeEvent)
&gt; +        dispatchFormControlChangeEvent();

I prefer
 - copying the dispatchFormControlChangeEvent() call to non-TextField InputTypes too, or
 - introduce another virtual function, InputType::dispatchChangeEvent(), and TextFieldInputType overrides it.

&gt; Source/WebCore/html/HTMLInputElement.h:240
&gt; +    void cacheSelectionInReponseToSetValue(int caretOffset) { cacheSelection(caretOffset, caretOffset, SelectionHasNoDirection); }
&gt; +

Please move this into a section above connectToColorChooser().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463894</commentid>
    <comment_count>9</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-09-07 22:43:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt;  - introduce another virtual function, InputType::dispatchChangeEvent(), and TextFieldInputType overrides it.

This might be a role of valueChanged().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463905</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 23:35:57 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt;  - introduce another virtual function, InputType::dispatchChangeEvent(), and TextFieldInputType overrides it.

That&apos;s much cleaner!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463908</commentid>
    <comment_count>11</comment_count>
      <attachid>106699</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 23:40:02 -0700</bug_when>
    <thetext>Created attachment 106699
Updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464071</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-08 08:44:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Why do we need to update sendChangeEvent?
&gt; 
&gt; To prevent HTMLInputElement::setValue from firing the change event. Apparently, there&apos;s no test for this :(

If you haven’t done it already, I think it’s clear we should make a test for that and land it before landing this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464089</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-08 09:20:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #6)
&gt; &gt; &gt; Why do we need to update sendChangeEvent?
&gt; &gt; 
&gt; &gt; To prevent HTMLInputElement::setValue from firing the change event. Apparently, there&apos;s no test for this :(
&gt; 
&gt; If you haven’t done it already, I think it’s clear we should make a test for that and land it before landing this change.

I&apos;ve tried but I haven&apos;t been able to make one. This code path is used for non-text field but checkbox and ratiobox fire change event elsewhere when clicked.  I can&apos;t think of any input type that uses this code path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464119</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-08 10:10:23 -0700</bug_when>
    <thetext>FYI, it is possible that tkent&apos;s new color, etc... UI makes use of this code path.  But as far as I can tell this code can&apos;t be hit in Mac port at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464120</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-08 10:11:32 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; FYI, it is possible that tkent&apos;s new color, etc... UI makes use of this code path.  But as far as I can tell this code can&apos;t be hit in Mac port at the moment.

Let me rephrase, the function itself may be called but change event is never fired from that call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464257</commentid>
    <comment_count>16</comment_count>
      <attachid>106699</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-08 12:41:04 -0700</bug_when>
    <thetext>Comment on attachment 106699
Updated

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

&gt; Source/WebCore/html/HTMLInputElement.cpp:1093
&gt; +    m_suggestedValue = String(); // TextFieldInputType::setValue uses the suggested value.

This comment does not make clear why clearing the suggested value is the correct thing to do. Neither did the old comment.

&gt; Source/WebCore/html/HTMLInputElement.cpp:1104
&gt; +    // FIXME: why do we do this when !sendChangeEvent?

The word “why” should be capitalized.

&gt; Source/WebCore/html/TextFieldInputType.cpp:98
&gt; +    if (element()-&gt;focused())
&gt; +        element()-&gt;dispatchFormControlInputEvent();
&gt; +    else
&gt; +        element()-&gt;dispatchFormControlChangeEvent();

I think this should use early return instead of else, and call through to the base class dispatchChangeEventInResponseToSetValue instead of calling dispatchFormControlChangeEvent after the early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464658</commentid>
    <comment_count>17</comment_count>
      <attachid>106699</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-08 22:56:42 -0700</bug_when>
    <thetext>Comment on attachment 106699
Updated

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

Thanks for the review!

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:1093
&gt;&gt; +    m_suggestedValue = String(); // TextFieldInputType::setValue uses the suggested value.
&gt; 
&gt; This comment does not make clear why clearing the suggested value is the correct thing to do. Neither did the old comment.

Revised.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:1104
&gt;&gt; +    // FIXME: why do we do this when !sendChangeEvent?
&gt; 
&gt; The word “why” should be capitalized.

Fixed.

&gt;&gt; Source/WebCore/html/TextFieldInputType.cpp:98
&gt;&gt; +        element()-&gt;dispatchFormControlChangeEvent();
&gt; 
&gt; I think this should use early return instead of else, and call through to the base class dispatchChangeEventInResponseToSetValue instead of calling dispatchFormControlChangeEvent after the early return.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464666</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-08 23:15:47 -0700</bug_when>
    <thetext>Committed r94836: &lt;http://trac.webkit.org/changeset/94836&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106663</attachid>
            <date>2011-09-07 15:47:49 -0700</date>
            <delta_ts>2011-09-07 22:13:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67742-20110907154748.patch</filename>
            <type>text/plain</type>
            <size>23894</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NzE5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDktMDcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUHVzaCBtb3JlIGNvZGUgZnJvbSBI
VE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSB0byBUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIG1v
cmUgY29kZSBpbiBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSB0byBUZXh0RmllbGRJbnB1dFR5
cGU6OnNldFZhbHVlLCBtZXJnZWQgSW5wdXRUeXBlOjp2YWx1ZUNoYW5nZWQKKyAgICAgICAgaW50
byBJbnB1dFR5cGU6OnZhbHVlQ2hhbmdlZCwgYW5kIGdvdCByaWQgb2YgbV9mb3JtQ29udHJvbFZh
bHVlTWF0Y2hlc1JlbmRlcmVyLgorCisgICAgICAgICogaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VCdXR0b25JbnB1dFR5cGU6OnNldFZhbHVlKToK
KyAgICAgICAgKiBodG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL0Jh
c2VDaGVja2FibGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNoZWNrYWJs
ZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvQmFzZUNoZWNrYWJsZUlucHV0
VHlwZS5oOgorICAgICAgICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAqIGh0
bWwvQ29sb3JJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZUlucHV0VHlwZTo6ZmlsZXNDaG9zZW4pOgorICAgICAgICAqIGh0bWwvRmlsZUlu
cHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6dXBkYXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50Ojp1cGRhdGVJbm5lclRleHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0U3VnZ2VzdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVG
cm9tUmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6T2Zmc2V0Rm9yQ2FjaGVTZWxlY3Rpb246Ok9m
ZnNldEZvckNhY2hlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmNhY2hlU2VsZWN0aW9uSW5SZXBvbnNlVG9TZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudDo6c3VidHJlZUhhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudDo6dXBkYXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6c2V0VmFsdWVDb21tb24pOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnNldElubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKiBodG1sL0hpZGRlbklucHV0VHlwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIaWRkZW5JbnB1dFR5cGU6OnNldFZhbHVlKToKKyAgICAgICAg
KiBodG1sL0hpZGRlbklucHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwv
SW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TnVtYmVySW5wdXRUeXBlOjp3aWxsQmx1cik6CisgICAgICAgICogaHRtbC9S
YW5nZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUlucHV0VHlwZTo6c2V0
VmFsdWUpOgorICAgICAgICAqIGh0bWwvUmFuZ2VJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1s
L1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1
dFR5cGU6OnNldFZhbHVlKToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOgor
CiAyMDExLTA5LTA3ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ2hhbmdlcyB0byBhcmlhLWhpZGRlbiBkb24ndCBjaGFuZ2UgVk8gbmF2aWdhdGlvbgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiA5NDY5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBib29sIEJhc2VCdXR0b25JbnB1
dFR5cGU6OnN0b3Jlc1ZhbHVlU2VwCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEJhc2VC
dXR0b25JbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJv
b2wpCit2b2lkIEJhc2VCdXR0b25JbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2Fu
aXRpemVkVmFsdWUsIGJvb2wsIGJvb2wmKQogewogICAgIGVsZW1lbnQoKS0+c2V0QXR0cmlidXRl
KHZhbHVlQXR0ciwgc2FuaXRpemVkVmFsdWUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9CYXNlQnV0dG9uSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9CYXNlQnV0dG9uSW5wdXRUeXBlLmgJKHJldmlzaW9uIDk0Njk5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhY2Nl
c3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKICAgICB2aXJ0dWFsIGJvb2wgc3Rv
cmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0
IFN0cmluZyYsIGJvb2wsIGJvb2wmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcAko
cmV2aXNpb24gOTQ2OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1
dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgYm9vbCBCYXNlQ2hl
Y2thYmxlSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXpl
ZFZhbHVlLCBib29sKQordm9pZCBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sLCBib29sJikKIHsKICAgICBlbGVtZW50KCkt
PnNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHNhbml0aXplZFZhbHVlKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5oCShyZXZpc2lvbiA5NDY5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGFj
Y2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOwogICAgIHZpcnR1YWwgU3RyaW5n
IGZhbGxiYWNrVmFsdWUoKTsKICAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzVmFsdWVTZXBhcmF0ZUZy
b21BdHRyaWJ1dGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwg
Ym9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wsIGJv
b2wmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2FibGUoKTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA5NDY5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEs
OCArMTIxLDEzIEBAIHZvaWQgQ29sb3JJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUKICAg
ICB1cGRhdGVDb2xvclN3YXRjaCgpOwogfQogCi12b2lkIENvbG9ySW5wdXRUeXBlOjp2YWx1ZUNo
YW5nZWQoKQordm9pZCBDb2xvcklucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIGJvb2wmIHNlbmRDaGFuZ2VFdmVudCk7CiB7CisgICAgSW5w
dXRUeXBlOjpzZXRWYWx1ZSh2YWx1ZSwgdmFsdWVDaGFuZ2VkLCBzZW5kQ2hhbmdlRXZlbnQpOwor
CisgICAgaWYgKCF2YWx1ZUNoYW5nZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIHVwZGF0ZUNv
bG9yU3dhdGNoKCk7CiAgICAgaWYgKENvbG9yQ2hvb3Nlcjo6Y2hvb3NlcigpLT5jbGllbnQoKSA9
PSB0aGlzKSB7CiAgICAgICAgIGlmIChDaHJvbWUqIGNocm9tZSA9IHRoaXMtPmNocm9tZSgpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuaAkocmV2aXNpb24gOTQ2OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVl
KGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgQ29sb3IgdmFsdWVBc0NvbG9yKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYWRvd1N1YnRyZWUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdmFsdWVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYsIGJvb2wgdmFsdWVDaGFuZ2VkLCBib29sJiBzZW5kQ2hhbmdlRXZlbnQpOwogICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVDbGlja0V2ZW50KE1vdXNlRXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCopOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2go
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gOTQ2
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgYm9vbCBGaWxlSW5wdXRUeXBlOjpzdG9yZXNWYWx1ZVNl
cGFyYXRlRgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZpbGVJbnB1dFR5cGU6OnNldFZh
bHVlKGNvbnN0IFN0cmluZyYsIGJvb2wpCit2b2lkIEZpbGVJbnB1dFR5cGU6OnNldFZhbHVlKGNv
bnN0IFN0cmluZyYsIGJvb2wsIGJvb2wmKQogewogICAgIG1fZmlsZUxpc3QtPmNsZWFyKCk7CiAg
ICAgbV9pY29uLmNsZWFyKCk7CkBAIC0yOTksNyArMjk5LDYgQEAgdm9pZCBGaWxlSW5wdXRUeXBl
OjpmaWxlc0Nob3Nlbihjb25zdCBWZQogCiAgICAgc2V0RmlsZUxpc3QocGF0aHMpOwogCi0gICAg
aW5wdXQtPnNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiAgICAgaW5w
dXQtPm5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKTsKICAgICBpbnB1dC0+c2V0TmVlZHNWYWxpZGl0
eUNoZWNrKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCShyZXZpc2lv
biA5NDY5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNhblNl
dFZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUeXBlU3BlY2lmaWNW
YWx1ZShTdHJpbmcmKTsgLy8gQ2hlY2tlZCBmaXJzdCwgYmVmb3JlIGludGVybmFsIHN0b3JhZ2Ug
b3IgdGhlIHZhbHVlIGF0dHJpYnV0ZS4KICAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzVmFsdWVTZXBh
cmF0ZUZyb21BdHRyaWJ1dGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3Ry
aW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShj
b25zdCBTdHJpbmcmLCBib29sIHZhbHVlQ2hhbmdlZCwgYm9vbCYgc2VuZENoYW5nZUV2ZW50KTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwogICAgIHZpcnR1YWwgSWNvbiogaWNvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c0ZpbGVVcGxvYWQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gOTQ2OTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3
ICs1NCw2IEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEUKICAgICAs
IG1fZGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlYWRPbmx5KGZhbHNlKQogICAgICwgbV9yZXF1
aXJlZChmYWxzZSkKLSAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCiAgICAgLCBt
X3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV93aWxsVmFsaWRhdGUodHJ1
ZSkKICAgICAsIG1faXNWYWxpZCh0cnVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlzaW9uIDk0Njk5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkg
KzQ3LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyB9CiAKLSAgICB2
aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybUNv
bnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIGIpIHsgbV92YWx1ZU1hdGNoZXNSZW5kZXJl
ciA9IGI7IH0KLQogICAgIHZpcnR1YWwgYm9vbCB3YXNDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRy
b2xDaGFuZ2VFdmVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGFuZ2VkU2luY2VM
YXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudChib29sKTsKIApAQCAtMTQ2LDcgKzE0Myw2IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2Rpc2FibGVkIDogMTsKICAgICBib29sIG1fcmVhZE9ubHkgOiAx
OwogICAgIGJvb2wgbV9yZXF1aXJlZCA6IDE7Ci0gICAgYm9vbCBtX3ZhbHVlTWF0Y2hlc1JlbmRl
cmVyIDogMTsKIAogICAgIC8vIFRoZSBpbml0aWFsIHZhbHVlIG9mIG1fd2lsbFZhbGlkYXRlIGRl
cGVuZHMgb24gdGhlIGRlcml2ZWQgY2xhc3MuIFdlIGNhbid0CiAgICAgLy8gaW5pdGlhbGl6ZSBp
dCB3aXRoIGEgdmlydHVhbCBmdW5jdGlvbiBpbiB0aGUgY29uc3RydWN0b3IuIG1fd2lsbFZhbGlk
YXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDk0Njk5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTkwLDcgKzU5MCw2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
dXBkYXRlVHlwZSgpCiAgICAgZWxzZQogICAgICAgICB1cGRhdGVWYWx1ZUlmTmVlZGVkKCk7CiAK
LSAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKICAgICB1cGRh
dGVJbm5lclRleHRWYWx1ZSgpOwogCiAgICAgbV93YXNNb2RpZmllZEJ5VXNlciA9IGZhbHNlOwpA
QCAtNjMwLDEzICs2MjksNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUlubmVyVGV4
dFZhCiAgICAgaWYgKCFpc1RleHRGaWVsZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IXN1Z2dlc3RlZFZhbHVlKCkuaXNOdWxsKCkpCi0gICAgICAgIHNldElubmVyVGV4dFZhbHVlKHN1
Z2dlc3RlZFZhbHVlKCkpOwotICAgIGVsc2UgaWYgKCFmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1Jl
bmRlcmVyKCkpIHsKLSAgICAgICAgLy8gVXBkYXRlIHRoZSByZW5kZXJlciB2YWx1ZSBpZiB0aGUg
Zm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGZsYWcgaXMgZmFsc2UuCi0gICAgICAg
IC8vIEl0IHByb3RlY3RzIGFuIHVuYWNjZXB0YWJsZSByZW5kZXJlciB2YWx1ZSBmcm9tIGJlaW5n
IG92ZXJ3cml0dGVuIHdpdGggdGhlIERPTSB2YWx1ZS4KLSAgICAgICAgc2V0SW5uZXJUZXh0VmFs
dWUodmlzaWJsZVZhbHVlKCkpOwotICAgIH0KKyAgICBzZXRJbm5lclRleHRWYWx1ZSghc3VnZ2Vz
dGVkVmFsdWUoKS5pc051bGwoKSA/IHN1Z2dlc3RlZFZhbHVlKCkgOiB2aXNpYmxlVmFsdWUoKSk7
CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3VidHJlZUhhc0NoYW5nZWQoKQpAQCAtNzU4
LDcgKzc1MSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAg
ICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIHNldENoYW5nZWQgaWYgdGhlIGZvcm0gaXMgbG9va2lu
ZyBhdCB0aGUgZGVmYXVsdCB2YWx1ZSByaWdodCBub3cuCiAgICAgICAgIGlmICghaGFzRGlydHlW
YWx1ZSgpKQogICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgICAgICBzZXRG
b3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKKyAgICAgICAgdXBkYXRlSW5u
ZXJUZXh0VmFsdWUoKTsKICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY2hlY2tlZEF0dHIpIHsKICAgICAgICAgLy8gQW5vdGhl
ciByYWRpbyBidXR0b24gaW4gdGhlIHNhbWUgZ3JvdXAgbWlnaHQgYmUgY2hlY2tlZCBieSBzdGF0
ZQpAQCAtODQ4LDggKzg0MSw4IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWIKICAgICAgICAgICAgIG1faW5wdXRUeXBlLT5kZXN0cm95U2hhZG93U3VidHJlZSgpOwog
ICAgICAgICAgICAgbV9pbnB1dFR5cGUtPmNyZWF0ZVNoYWRvd1N1YnRyZWUoKTsKICAgICAgICAg
fQotICAgICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKICAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICB1cGRhdGVJbm5lclRleHRWYWx1
ZSgpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ud2Via2l0c3BlZWNoY2hhbmdl
QXR0cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkud2Vi
a2l0c3BlZWNoY2hhbmdlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywg
YXR0cikpOwogI2VuZGlmCkBAIC05MDAsNyArODkzLDYgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjphdHRhY2goKQogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZXRhY2goKQogewogICAgIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKTsKLSAgICBzZXRGb3JtQ29udHJvbFZhbHVl
TWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKICAgICBtX2lucHV0VHlwZS0+ZGV0YWNoKCk7CiB9CiAK
QEAgLTEwNzIsNyArMTA2NCw2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0U3VnZ2VzdGVk
VmFsdWUKIHsKICAgICBpZiAoIW1faW5wdXRUeXBlLT5jYW5TZXRTdWdnZXN0ZWRWYWx1ZSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihm
YWxzZSk7CiAgICAgbV9zdWdnZXN0ZWRWYWx1ZSA9IHNhbml0aXplVmFsdWUodmFsdWUpOwogICAg
IHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwpAQCAtMTA4OCwzNyArMTA3OSwxNSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFZhbHVlKGNvbnN0IFN0CiAgICAgYm9vbCB2YWx1ZUNoYW5nZWQgPSBzYW5pdGl6ZWRWYWx1ZSAh
PSB0aGlzLT52YWx1ZSgpOwogCiAgICAgc2V0TGFzdENoYW5nZVdhc05vdFVzZXJFZGl0KCk7Ci0g
ICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7Ci0gICAgbV9pbnB1
dFR5cGUtPnNldFZhbHVlKHNhbml0aXplZFZhbHVlLCBzZW5kQ2hhbmdlRXZlbnQpOworICAgIG1f
c3VnZ2VzdGVkVmFsdWUgPSBTdHJpbmcoKTsgLy8gVGV4dEZpZWxkSW5wdXRUeXBlOjpzZXRWYWx1
ZSB1c2VzIHRoZSBzdWdnZXN0ZWQgdmFsdWUuCisgICAgbV9pbnB1dFR5cGUtPnNldFZhbHVlKHNh
bml0aXplZFZhbHVlLCB2YWx1ZUNoYW5nZWQsIHNlbmRDaGFuZ2VFdmVudCk7CiAKICAgICBzZXRO
ZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIAotICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBTdHJpbmcoKTsg
Ly8gdXBkYXRlSW5uZXJUZXh0VmFsdWUgdXNlcyB0aGUgc3VnZ2VzdGVkIHZhbHVlLgotICAgIGlm
ICh2YWx1ZUNoYW5nZWQpCi0gICAgICAgIHVwZGF0ZUlubmVyVGV4dFZhbHVlKCk7Ci0KLSAgICBp
ZiAoaXNUZXh0RmllbGQoKSkgewotICAgICAgICB1bnNpZ25lZCBtYXggPSB2aXNpYmxlVmFsdWUo
KS5sZW5ndGgoKTsKLSAgICAgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gdGhp
cykKLSAgICAgICAgICAgIHNldFNlbGVjdGlvblJhbmdlKG1heCwgbWF4KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY2FjaGVTZWxlY3Rpb24obWF4LCBtYXgsIFNlbGVjdGlvbkhhc05vRGly
ZWN0aW9uKTsKLSAgICB9Ci0KICAgICBpZiAoIXZhbHVlQ2hhbmdlZCkKICAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIG1faW5wdXRUeXBlLT52YWx1ZUNoYW5nZWQoKTsKLQotICAgIGlmIChzZW5k
Q2hhbmdlRXZlbnQpIHsKLSAgICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgc3RpbGwgZWRpdGluZyB0
aGlzIGZpZWxkLCBkaXNwYXRjaCBhbiBpbnB1dCBldmVudCByYXRoZXIgdGhhbiBhIGNoYW5nZSBl
dmVudC4KLSAgICAgICAgLy8gVGhlIGNoYW5nZSBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgd2hl
biBlZGl0aW5nIGZpbmlzaGVzLgotICAgICAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiBmb2N1c2Vk
KCkpCi0gICAgICAgICAgICBkaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKLSAg
ICB9CiAKKyAgICAvLyBGSVhNRTogd2h5IGRvIHdlIGRvIHRoaXMgd2hlbiAhc2VuZENoYW5nZUV2
ZW50PwogICAgIGlmIChpc1RleHRGaWVsZCgpICYmICghZm9jdXNlZCgpIHx8ICFzZW5kQ2hhbmdl
RXZlbnQpKQogICAgICAgICBzZXRUZXh0QXNPZkxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KHZh
bHVlKTsKIApAQCAtMTE4NSw3ICsxMTU0LDYgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRW
YWx1ZUZyb21SZW5kZQogICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk2NjEKICAgICBtX3ZhbHVlSWZEaXJ0eSA9IHZhbHVlID09ICJcbiIgPyBTdHJpbmcoIiIp
IDogdmFsdWU7CiAKLSAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUp
OwogICAgIG1fd2FzTW9kaWZpZWRCeVVzZXIgPSB0cnVlOwogCiAgICAgLy8gSW5wdXQgZXZlbnQg
aXMgZmlyZWQgYnkgdGhlIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIgZm9yIGVkaXRhYmxlIGNv
bnRyb2xzLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlz
aW9uIDk0Njk5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYsMTkgQEAgcHVibGljOgogICAgIGJvb2wgY29ubmVj
dFRvQ29sb3JDaG9vc2VyKCk7CiAjZW5kaWYKIAorICAgIGNsYXNzIE9mZnNldEZvckNhY2hlU2Vs
ZWN0aW9uIHsKKyAgICBwcml2YXRlOgorICAgICAgICBPZmZzZXRGb3JDYWNoZVNlbGVjdGlvbihp
bnQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkgeyB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBIVE1M
SW5wdXRFbGVtZW50OworICAgICAgICBmcmllbmQgY2xhc3MgVGV4dEZpZWxkSW5wdXRUeXBlOwor
CisgICAgICAgIGludCBtX3ZhbHVlOworICAgIH07CisgICAgdm9pZCBjYWNoZVNlbGVjdGlvbklu
UmVwb25zZVRvU2V0VmFsdWUoT2Zmc2V0Rm9yQ2FjaGVTZWxlY3Rpb24gY2FyZXRPZmZzZXQpCisg
ICAgeworICAgICAgICBjYWNoZVNlbGVjdGlvbihjYXJldE9mZnNldC5tX3ZhbHVlLCBjYXJldE9m
ZnNldC5tX3ZhbHVlLCBTZWxlY3Rpb25IYXNOb0RpcmVjdGlvbik7CisgICAgfQorCiAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhpbXVtTGVuZ3RoOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDk0Njk5KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTksNyArNTksNiBAQCBIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFF
bGVtZW50CiAgICAgLCBtX3dhc01vZGlmaWVkQnlVc2VyKGZhbHNlKQogewogICAgIEFTU0VSVCho
YXNUYWdOYW1lKHRleHRhcmVhVGFnKSk7Ci0gICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNS
ZW5kZXJlcih0cnVlKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MVGV4dEFyZWFFbGVtZW50PiBIVE1M
VGV4dEFyZWFFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCkBAIC0yMjksNyArMjI4LDcg
QEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYQogdm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCiB7CiAgICAgc2V0Q2hhbmdlZFNpbmNl
TGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQodHJ1ZSk7Ci0gICAgc2V0Rm9ybUNvbnRyb2xWYWx1
ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CisgICAgdXBkYXRlVmFsdWUoKTsKICAgICBzZXROZWVk
c1ZhbGlkaXR5Q2hlY2soKTsKIAogICAgIGlmICghZm9jdXNlZCgpKQpAQCAtMjgyLDEyICsyODEs
NyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnJlbmRlcmVyV2lsbEJlCiAKIHZvaWQgSFRN
TFRleHRBcmVhRWxlbWVudDo6dXBkYXRlVmFsdWUoKSBjb25zdAogewotICAgIGlmIChmb3JtQ29u
dHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChyZW5kZXJlcigpKTsKICAgICBtX3ZhbHVlID0gaW5uZXJUZXh0VmFsdWUoKTsKLSAgICBjb25z
dF9jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPih0aGlzKS0+c2V0Rm9ybUNvbnRyb2xWYWx1ZU1h
dGNoZXNSZW5kZXJlcih0cnVlKTsKICAgICBjb25zdF9jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQq
Pih0aGlzKS0+bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOwogICAgIG1faXNEaXJ0eSA9IHRydWU7
CiAgICAgbV93YXNNb2RpZmllZEJ5VXNlciA9IHRydWU7CkBAIC0yOTYsNyArMjkwLDYgQEAgdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp1cGRhdGVWYWx1ZSgpIAogCiBTdHJpbmcgSFRNTFRleHRB
cmVhRWxlbWVudDo6dmFsdWUoKSBjb25zdAogewotICAgIHVwZGF0ZVZhbHVlKCk7CiAgICAgcmV0
dXJuIG1fdmFsdWU7CiB9CiAKQEAgLTMzMyw3ICszMjYsNiBAQCB2b2lkIEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OnNldFZhbHVlQ29tbW9uCiAgICAgc2V0TGFzdENoYW5nZVdhc05vdFVzZXJFZGl0KCk7
CiAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7Ci0gICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVl
KTsKIAogICAgIC8vIFNldCB0aGUgY2FyZXQgdG8gdGhlIGVuZCBvZiB0aGUgdGV4dCB2YWx1ZS4K
ICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAko
cmV2aXNpb24gOTQ2OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDggKzQ2OSw2IEBAIHZvaWQgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldElubmUKICAgICAgICAgICAgIEFTU0VSVCghZWMp
OwogICAgICAgICB9CiAgICAgfQotCi0gICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5k
ZXJlcih0cnVlKTsKIH0KIAogc3RhdGljIFN0cmluZyBmaW5pc2hUZXh0KFN0cmluZ0J1aWxkZXIm
IHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAJKHJl
dmlzaW9uIDk0Njk5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIGJvb2wgSGlkZGVuSW5wdXRUeXBlOjpz
dG9yZXNWYWx1ZVNlcGFyYXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSGlkZGVuSW5w
dXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sKQordm9p
ZCBIaWRkZW5JbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUs
IGJvb2wsIGJvb2wmKQogewogICAgIGVsZW1lbnQoKS0+c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwg
c2FuaXRpemVkVmFsdWUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1
dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlw
ZS5oCShyZXZpc2lvbiA5NDY5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgc3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNIaWRkZW5UeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3Bl
Y3RIZWlnaHRBbmRXaWR0aEF0dHJpYnV0ZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0
cmluZyYsIGJvb2wsIGJvb2wmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHJldmlzaW9uIDk0Njk5KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDksMTAgKzQ0OSw2
IEBAIHZvaWQgSW5wdXRUeXBlOjpzcmNBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKIH0KIAotdm9pZCBJ
bnB1dFR5cGU6OnZhbHVlQ2hhbmdlZCgpCi17Ci19Ci0KIHZvaWQgSW5wdXRUeXBlOjp3aWxsTW92
ZVRvTmV3T3duZXJEb2N1bWVudCgpCiB7CiB9CkBAIC01MjUsNyArNTIxLDcgQEAgYm9vbCBJbnB1
dFR5cGU6OnN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQQogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIElucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9v
bCBzZW5kQ2hhbmdlRXZlbnQpCit2b2lkIElucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5n
JiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCwgYm9vbCYgc2VuZENoYW5nZUV2ZW50KQogewogICAgIGVs
ZW1lbnQoKS0+c2V0VmFsdWVJbnRlcm5hbChzYW5pdGl6ZWRWYWx1ZSwgc2VuZENoYW5nZUV2ZW50
KTsKICAgICBlbGVtZW50KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9JbnB1dFR5cGUuaAkocmV2aXNpb24gOTQ2OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzdGVwQXR0cmlidXRlQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBh
bHRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNyY0F0dHJpYnV0ZUNoYW5n
ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lk
IHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJl
c3BlY3RBbGlnbkF0dHJpYnV0ZSgpOwogICAgIHZpcnR1YWwgRmlsZUxpc3QqIGZpbGVzKCk7CkBA
IC0yMjQsNyArMjIzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTZW5kQ2hh
bmdlRXZlbnRBZnRlckNoZWNrZWRDaGFuZ2VkKCk7CiAgICAgdmlydHVhbCBib29sIGNhblNldFZh
bHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNWYWx1ZVNlcGFyYXRl
RnJvbUF0dHJpYnV0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
LCBib29sIHNlbmRDaGFuZ2VFdmVudCk7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0
IFN0cmluZyYsIGJvb2wgdmFsdWVDaGFuZ2VkLCBib29sJiBzZW5kQ2hhbmdlRXZlbnQpOwogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRSZXNldE9uRG9jdW1lbnRBY3RpdmF0aW9uKCk7CiAgICAgdmly
dHVhbCBib29sIHNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCk7CiAgICAgdmlydHVhbCBib29s
IHNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvTnVtYmVySW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L051bWJlcklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDk0Njk5KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9OdW1iZXJJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsOSArMjc1LDYg
QEAgZG91YmxlIE51bWJlcklucHV0VHlwZTo6YWNjZXB0YWJsZUVycm9yKAogCiB2b2lkIE51bWJl
cklucHV0VHlwZTo6d2lsbEJsdXIoKQogewotICAgIC8vIFJlc2V0IHRoZSByZW5kZXJlciB2YWx1
ZSwgd2hpY2ggbWlnaHQgYmUgdW5tYXRjaGVkIHdpdGggdGhlIGVsZW1lbnQgdmFsdWUuCi0gICAg
ZWxlbWVudCgpLT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKLQog
ICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHJlbmRlcmVyIHZhbHVlIGV4cGxpY2l0bHkgYmVj
YXVzZSBhbiB1bmFjY2VwdGFibGUKICAgICAvLyByZW5kZXJlciB2YWx1ZSBzaG91bGQgYmUgcHVy
Z2VkIGJlZm9yZSBzdHlsZSBjYWxjdWxhdGlvbi4KICAgICBlbGVtZW50KCktPnVwZGF0ZUlubmVy
VGV4dFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNwcAko
cmV2aXNpb24gOTQ2OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDggKzI4NSwxMyBAQCB2b2lkIFJhbmdlSW5wdXRUeXBl
OjptaW5Pck1heEF0dHJpYnV0ZUNoCiAgICAgZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxj
KCk7CiB9CiAKLXZvaWQgUmFuZ2VJbnB1dFR5cGU6OnZhbHVlQ2hhbmdlZCgpCit2b2lkIFJhbmdl
SW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHZhbHVlQ2hhbmdl
ZCwgYm9vbCYgc2VuZENoYW5nZUV2ZW50KQogeworICAgIElucHV0VHlwZTo6c2V0VmFsdWUodmFs
dWUsIHZhbHVlQ2hhbmdlZCwgc2VuZENoYW5nZUV2ZW50KTsKKworICAgIGlmICghdmFsdWVDaGFu
Z2VkKQorICAgICAgICByZXR1cm47CisKICAgICBzbGlkZXJUaHVtYkVsZW1lbnRPZihlbGVtZW50
KCkpLT5zZXRQb3NpdGlvbkZyb21WYWx1ZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL1JhbmdlSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9S
YW5nZUlucHV0VHlwZS5oCShyZXZpc2lvbiA5NDY5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
UmFuZ2VJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgU3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKICAgICB2aXJ0
dWFsIHZvaWQgbWluT3JNYXhBdHRyaWJ1dGVDaGFuZ2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHZh
bHVlQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBi
b29sIHZhbHVlQ2hhbmdlZCwgYm9vbCYgc2VuZENoYW5nZUV2ZW50KTsKICAgICB2aXJ0dWFsIFN0
cmluZyBmYWxsYmFja1ZhbHVlKCk7CiAgICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShj
b25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNw
ZWN0TGlzdEF0dHJpYnV0ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxk
SW5wdXRUeXBlLmNwcAkocmV2aXNpb24gOTQ2OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1Rl
eHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywzMCBAQCBi
b29sIFRleHRGaWVsZElucHV0VHlwZTo6Y2FuU2V0U3VnZ2VzdGVkCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNh
bml0aXplZFZhbHVlLCBib29sIHNlbmRDaGFuZ2VFdmVudCkKK3ZvaWQgVGV4dEZpZWxkSW5wdXRU
eXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sIHZhbHVlQ2hh
bmdlZCwgYm9vbCYgc2VuZENoYW5nZUV2ZW50KQogewotICAgIElucHV0VHlwZTo6c2V0VmFsdWUo
c2FuaXRpemVkVmFsdWUsIHNlbmRDaGFuZ2VFdmVudCk7CisgICAgSW5wdXRUeXBlOjpzZXRWYWx1
ZShzYW5pdGl6ZWRWYWx1ZSwgdmFsdWVDaGFuZ2VkLCBzZW5kQ2hhbmdlRXZlbnQpOwogICAgIGVs
ZW1lbnQoKS0+dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICBpZiAoIXZh
bHVlQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZWxlbWVudCgpLT51cGRhdGVJbm5l
clRleHRWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbWF4ID0gdmlzaWJsZVZhbHVlKCkubGVuZ3Ro
KCk7CisgICAgaWYgKGVsZW1lbnQoKS0+Zm9jdXNlZCgpKQorICAgICAgICBlbGVtZW50KCktPnNl
dFNlbGVjdGlvblJhbmdlKG1heCwgbWF4KTsKKyAgICBlbHNlCisgICAgICAgIGVsZW1lbnQoKS0+
Y2FjaGVTZWxlY3Rpb25JblJlcG9uc2VUb1NldFZhbHVlKG1heCk7CisKKyAgICBpZiAoc2VuZENo
YW5nZUV2ZW50KSB7CisgICAgICAgIC8vIElmIHRoZSB1c2VyIGlzIHN0aWxsIGVkaXRpbmcgdGhp
cyBmaWVsZCwgZGlzcGF0Y2ggYW4gaW5wdXQgZXZlbnQgcmF0aGVyIHRoYW4gYSBjaGFuZ2UgZXZl
bnQuCisgICAgICAgIC8vIFRoZSBjaGFuZ2UgZXZlbnQgd2lsbCBiZSBkaXNwYXRjaGVkIHdoZW4g
ZWRpdGluZyBmaW5pc2hlcy4KKyAgICAgICAgaWYgKGVsZW1lbnQoKS0+Zm9jdXNlZCgpKQorICAg
ICAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCgpOworICAgICAgICBzZW5kQ2hhbmdlRXZlbnQgPSBmYWxzZTsKKyAgICB9CiB9CiAK
IHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVu
dCogZXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmgJ
KHJldmlzaW9uIDk0Njk5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50Kik7CiAgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sIHZhbHVlQ2hh
bmdlZCwgYm9vbCYgc2VuZENoYW5nZUV2ZW50KTsKICAgICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6
ZVZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0TGlz
dEF0dHJpYnV0ZSgpOwogICAgIHZpcnR1YWwgSFRNTEVsZW1lbnQqIHBsYWNlaG9sZGVyRWxlbWVu
dCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106697</attachid>
            <date>2011-09-07 22:13:10 -0700</date>
            <delta_ts>2011-09-07 22:41:10 -0700</delta_ts>
            <desc>Updated per comment</desc>
            <filename>bug-67742-20110907221308.patch</filename>
            <type>text/plain</type>
            <size>16020</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NzQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDktMDcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUHVzaCBtb3JlIGNvZGUgZnJvbSBI
VE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSB0byBUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIG1v
cmUgY29kZSBpbiBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSB0byBUZXh0RmllbGRJbnB1dFR5
cGU6OnNldFZhbHVlLAorICAgICAgICBhbmQgbWVyZ2VkIElucHV0VHlwZTo6dmFsdWVDaGFuZ2Vk
IGludG8gSW5wdXRUeXBlOjpzZXRWYWx1ZS4KKworICAgICAgICAqIGh0bWwvQmFzZUJ1dHRvbklu
cHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQnV0dG9uSW5wdXRUeXBlOjpzZXRW
YWx1ZSk6CisgICAgICAgICogaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmg6CisgICAgICAgICog
aHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VD
aGVja2FibGVJbnB1dFR5cGU6OnNldFZhbHVlKToKKyAgICAgICAgKiBodG1sL0Jhc2VDaGVja2Fi
bGVJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL0NvbG9ySW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKiBodG1sL0NvbG9ySW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnNldFZhbHVlKToKKyAgICAg
ICAgKiBodG1sL0ZpbGVJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUpOgor
ICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6Y2FjaGVTZWxlY3Rpb25JblJlcG9uc2VUb1NldFZhbHVlKToKKyAgICAg
ICAgKiBodG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1ZSk6CisgICAg
ICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlkZGVu
SW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuaDoK
KyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OnNldFZhbHVlKToKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5oOgorICAgICAgICAqIGh0
bWwvUmFuZ2VJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VJbnB1dFR5cGU6
OnNldFZhbHVlKToKKyAgICAgICAgKiBodG1sL1JhbmdlSW5wdXRUeXBlLmg6CisgICAgICAgICog
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxk
SW5wdXRUeXBlOjpzZXRWYWx1ZSk6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUu
aDoKKwogMjAxMS0wOS0wNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjk0Njc0IGFuZCByOTQ2ODku
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAJKHJl
dmlzaW9uIDk0NzQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIGJvb2wgQmFzZUJ1dHRvbklu
cHV0VHlwZTo6c3RvcmVzVmFsdWVTZXAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQmFz
ZUJ1dHRvbklucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwg
Ym9vbCkKK3ZvaWQgQmFzZUJ1dHRvbklucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBz
YW5pdGl6ZWRWYWx1ZSwgYm9vbCwgYm9vbCYpCiB7CiAgICAgZWxlbWVudCgpLT5zZXRBdHRyaWJ1
dGUodmFsdWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuaAkocmV2aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFj
Y2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOwogICAgIHZpcnR1YWwgYm9vbCBz
dG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZShjb25zdCBTdHJpbmcmLCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29u
c3QgU3RyaW5nJiwgYm9vbCwgYm9vbCYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiA5NDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlu
cHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBib29sIEJhc2VD
aGVja2FibGVJbnB1dFR5cGU6OnN0b3Jlc1ZhbHVlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRp
emVkVmFsdWUsIGJvb2wpCit2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnNldFZhbHVlKGNv
bnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wsIGJvb2wmKQogewogICAgIGVsZW1lbnQo
KS0+c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgc2FuaXRpemVkVmFsdWUpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmgJKHJldmlzaW9uIDk0
NzQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7CiAgICAgdmlydHVhbCBTdHJp
bmcgZmFsbGJhY2tWYWx1ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNWYWx1ZVNlcGFyYXRl
RnJvbUF0dHJpYnV0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
LCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCwg
Ym9vbCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYWJsZSgpOwogfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDk0NzQxKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MSw4ICsxMjEsMTMgQEAgdm9pZCBDb2xvcklucHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZQog
ICAgIHVwZGF0ZUNvbG9yU3dhdGNoKCk7CiB9CiAKLXZvaWQgQ29sb3JJbnB1dFR5cGU6OnZhbHVl
Q2hhbmdlZCgpCit2b2lkIENvbG9ySW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZh
bHVlLCBib29sIHZhbHVlQ2hhbmdlZCwgYm9vbCYgc2VuZENoYW5nZUV2ZW50KTsKIHsKKyAgICBJ
bnB1dFR5cGU6OnNldFZhbHVlKHZhbHVlLCB2YWx1ZUNoYW5nZWQsIHNlbmRDaGFuZ2VFdmVudCk7
CisKKyAgICBpZiAoIXZhbHVlQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgdXBkYXRl
Q29sb3JTd2F0Y2goKTsKICAgICBpZiAoQ29sb3JDaG9vc2VyOjpjaG9vc2VyKCktPmNsaWVudCgp
ID09IHRoaXMpIHsKICAgICAgICAgaWYgKENocm9tZSogY2hyb21lID0gdGhpcy0+Y2hyb21lKCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5oCShyZXZpc2lvbiA5NDc0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0aXplVmFs
dWUoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBDb2xvciB2YWx1ZUFzQ29sb3IoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpOwotICAgIHZpcnR1YWwg
dm9pZCB2YWx1ZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3Ry
aW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQsIGJvb2wmIHNlbmRDaGFuZ2VFdmVudCk7CiAgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUNsaWNrRXZlbnQoTW91c2VFdmVudCopOwogICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGRldGFj
aCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA5
NDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBib29sIEZpbGVJbnB1dFR5cGU6OnN0b3Jlc1ZhbHVl
U2VwYXJhdGVGCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRmlsZUlucHV0VHlwZTo6c2V0
VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCkKK3ZvaWQgRmlsZUlucHV0VHlwZTo6c2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCYpCiB7CiAgICAgbV9maWxlTGlzdC0+Y2xlYXIoKTsK
ICAgICBtX2ljb24uY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5o
CShyZXZpc2lvbiA5NDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGNhblNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUeXBl
U3BlY2lmaWNWYWx1ZShTdHJpbmcmKTsgLy8gQ2hlY2tlZCBmaXJzdCwgYmVmb3JlIGludGVybmFs
IHN0b3JhZ2Ugb3IgdGhlIHZhbHVlIGF0dHJpYnV0ZS4KICAgICB2aXJ0dWFsIGJvb2wgc3RvcmVz
VmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sIHZhbHVlQ2hhbmdlZCwgYm9vbCYgc2VuZENoYW5n
ZUV2ZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYpOwogICAgIHZpcnR1YWwgSWNvbiogaWNvbigpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBpc0ZpbGVVcGxvYWQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg0LDQxICsxMDg0
LDI0IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3QKICAgICBpZiAo
IW1faW5wdXRUeXBlLT5jYW5TZXRWYWx1ZSh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CiAgICAgU3RyaW5nIHNh
bml0aXplZFZhbHVlID0gc2FuaXRpemVWYWx1ZSh2YWx1ZSk7CiAgICAgYm9vbCB2YWx1ZUNoYW5n
ZWQgPSBzYW5pdGl6ZWRWYWx1ZSAhPSB0aGlzLT52YWx1ZSgpOwogCiAgICAgc2V0TGFzdENoYW5n
ZVdhc05vdFVzZXJFZGl0KCk7CiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJl
cihmYWxzZSk7Ci0gICAgbV9pbnB1dFR5cGUtPnNldFZhbHVlKHNhbml0aXplZFZhbHVlLCBzZW5k
Q2hhbmdlRXZlbnQpOworICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBTdHJpbmcoKTsgLy8gVGV4dEZp
ZWxkSW5wdXRUeXBlOjpzZXRWYWx1ZSB1c2VzIHRoZSBzdWdnZXN0ZWQgdmFsdWUuCisgICAgbV9p
bnB1dFR5cGUtPnNldFZhbHVlKHNhbml0aXplZFZhbHVlLCB2YWx1ZUNoYW5nZWQsIHNlbmRDaGFu
Z2VFdmVudCk7CiAKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIAotICAgIG1fc3VnZ2Vz
dGVkVmFsdWUgPSBTdHJpbmcoKTsgLy8gdXBkYXRlSW5uZXJUZXh0VmFsdWUgdXNlcyB0aGUgc3Vn
Z2VzdGVkIHZhbHVlLgotICAgIGlmICh2YWx1ZUNoYW5nZWQpCi0gICAgICAgIHVwZGF0ZUlubmVy
VGV4dFZhbHVlKCk7Ci0KLSAgICBpZiAoaXNUZXh0RmllbGQoKSkgewotICAgICAgICB1bnNpZ25l
ZCBtYXggPSB2aXNpYmxlVmFsdWUoKS5sZW5ndGgoKTsKLSAgICAgICAgaWYgKGRvY3VtZW50KCkt
PmZvY3VzZWROb2RlKCkgPT0gdGhpcykKLSAgICAgICAgICAgIHNldFNlbGVjdGlvblJhbmdlKG1h
eCwgbWF4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FjaGVTZWxlY3Rpb24obWF4LCBt
YXgsIFNlbGVjdGlvbkhhc05vRGlyZWN0aW9uKTsKLSAgICB9Ci0KICAgICBpZiAoIXZhbHVlQ2hh
bmdlZCkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1faW5wdXRUeXBlLT52YWx1ZUNoYW5n
ZWQoKTsKIAotICAgIGlmIChzZW5kQ2hhbmdlRXZlbnQpIHsKLSAgICAgICAgLy8gSWYgdGhlIHVz
ZXIgaXMgc3RpbGwgZWRpdGluZyB0aGlzIGZpZWxkLCBkaXNwYXRjaCBhbiBpbnB1dCBldmVudCBy
YXRoZXIgdGhhbiBhIGNoYW5nZSBldmVudC4KLSAgICAgICAgLy8gVGhlIGNoYW5nZSBldmVudCB3
aWxsIGJlIGRpc3BhdGNoZWQgd2hlbiBlZGl0aW5nIGZpbmlzaGVzLgotICAgICAgICBpZiAoaXNU
ZXh0RmllbGQoKSAmJiBmb2N1c2VkKCkpCi0gICAgICAgICAgICBkaXNwYXRjaEZvcm1Db250cm9s
SW5wdXRFdmVudCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaXNwYXRjaEZvcm1Db250
cm9sQ2hhbmdlRXZlbnQoKTsKLSAgICB9CisgICAgaWYgKHNlbmRDaGFuZ2VFdmVudCkKKyAgICAg
ICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAKKyAgICAvLyBGSVhNRTogd2h5
IGRvIHdlIGRvIHRoaXMgd2hlbiAhc2VuZENoYW5nZUV2ZW50PwogICAgIGlmIChpc1RleHRGaWVs
ZCgpICYmICghZm9jdXNlZCgpIHx8ICFzZW5kQ2hhbmdlRXZlbnQpKQogICAgICAgICBzZXRUZXh0
QXNPZkxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KHZhbHVlKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDk0NzQxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsy
MzYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb25uZWN0VG9Db2xvckNob29zZXIoKTsKICNlbmRp
ZgogCisgICAgdm9pZCBjYWNoZVNlbGVjdGlvbkluUmVwb25zZVRvU2V0VmFsdWUoaW50IGNhcmV0
T2Zmc2V0KSB7IGNhY2hlU2VsZWN0aW9uKGNhcmV0T2Zmc2V0LCBjYXJldE9mZnNldCwgU2VsZWN0
aW9uSGFzTm9EaXJlY3Rpb24pOyB9CisKICAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1MZW5n
dGg7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDc0MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NjksOCArNDY5LDYgQEAgdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0
SW5uZQogICAgICAgICAgICAgQVNTRVJUKCFlYyk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBz
ZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOwogfQogCiBzdGF0aWMgU3Ry
aW5nIGZpbmlzaFRleHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0
LDcgQEAgYm9vbCBIaWRkZW5JbnB1dFR5cGU6OnN0b3Jlc1ZhbHVlU2VwYXJhdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBIaWRkZW5JbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wpCit2b2lkIEhpZGRlbklucHV0VHlwZTo6c2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCwgYm9vbCYpCiB7CiAgICAgZWxlbWVu
dCgpLT5zZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmgJKHJldmlzaW9uIDk0NzQxKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDks
NyArNDksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNWYWx1ZVNlcGFyYXRl
RnJvbUF0dHJpYnV0ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBpc0hpZGRlblR5cGUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cmlidXRlcygp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCYpOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAko
cmV2aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0OSwxMCArNDQ5LDYgQEAgdm9pZCBJbnB1dFR5cGU6OnNyY0F0dHJp
YnV0ZUNoYW5nZWQoKQogewogfQogCi12b2lkIElucHV0VHlwZTo6dmFsdWVDaGFuZ2VkKCkKLXsK
LX0KLQogdm9pZCBJbnB1dFR5cGU6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKIHsKIH0K
QEAgLTUyNSw3ICs1MjEsNyBAQCBib29sIElucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZy
b21BCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sIHNlbmRDaGFuZ2VFdmVudCkKK3ZvaWQgSW5w
dXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sLCBib29s
JiBzZW5kQ2hhbmdlRXZlbnQpCiB7CiAgICAgZWxlbWVudCgpLT5zZXRWYWx1ZUludGVybmFsKHNh
bml0aXplZFZhbHVlLCBzZW5kQ2hhbmdlRXZlbnQpOwogICAgIGVsZW1lbnQoKS0+c2V0TmVlZHNT
dHlsZVJlY2FsYygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCShyZXZpc2lvbiA5NDc0
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxMyw3ICsyMTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0ZXBBdHRyaWJ1dGVD
aGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIGFsdEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3JjQXR0cmlidXRlQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdEFsaWduQXR0cmlidXRlKCk7CiAgICAg
dmlydHVhbCBGaWxlTGlzdCogZmlsZXMoKTsKQEAgLTIyNCw3ICsyMjMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIHNob3VsZFNlbmRDaGFuZ2VFdmVudEFmdGVyQ2hlY2tlZENoYW5nZWQo
KTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdmly
dHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgc2VuZENoYW5nZUV2ZW50KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQs
IGJvb2wmIHNlbmRDaGFuZ2VFdmVudCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc2V0T25E
b2N1bWVudEFjdGl2YXRpb24oKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdExpc3RB
dHRyaWJ1dGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0
ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAJKHJldmlzaW9u
IDk0NzQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4NSw4ICsyODUsMTMgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6bWluT3JN
YXhBdHRyaWJ1dGVDaAogICAgIGVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQog
Ci12b2lkIFJhbmdlSW5wdXRUeXBlOjp2YWx1ZUNoYW5nZWQoKQordm9pZCBSYW5nZUlucHV0VHlw
ZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIGJvb2wm
IHNlbmRDaGFuZ2VFdmVudCkKIHsKKyAgICBJbnB1dFR5cGU6OnNldFZhbHVlKHZhbHVlLCB2YWx1
ZUNoYW5nZWQsIHNlbmRDaGFuZ2VFdmVudCk7CisKKyAgICBpZiAoIXZhbHVlQ2hhbmdlZCkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgc2xpZGVyVGh1bWJFbGVtZW50T2YoZWxlbWVudCgpKS0+c2V0
UG9zaXRpb25Gcm9tVmFsdWUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9SYW5n
ZUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1
dFR5cGUuaAkocmV2aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5w
dXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIFN0cmluZyBzZXJpYWxpemUoZG91YmxlKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7CiAgICAgdmlydHVhbCB2b2lk
IG1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5n
ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1
ZUNoYW5nZWQsIGJvb2wmIHNlbmRDaGFuZ2VFdmVudCk7CiAgICAgdmlydHVhbCBTdHJpbmcgZmFs
bGJhY2tWYWx1ZSgpOwogICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3Ry
aW5nJiBwcm9wb3NlZFZhbHVlKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdExpc3RB
dHRyaWJ1dGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlw
ZS5jcHAJKHJldmlzaW9uIDk0NzQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMsMzAgQEAgYm9vbCBUZXh0
RmllbGRJbnB1dFR5cGU6OmNhblNldFN1Z2dlc3RlZAogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRW
YWx1ZSwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQpCit2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6c2V0
VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRWYWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIGJv
b2wmIHNlbmRDaGFuZ2VFdmVudCkKIHsKLSAgICBJbnB1dFR5cGU6OnNldFZhbHVlKHNhbml0aXpl
ZFZhbHVlLCBzZW5kQ2hhbmdlRXZlbnQpOworICAgIElucHV0VHlwZTo6c2V0VmFsdWUoc2FuaXRp
emVkVmFsdWUsIHZhbHVlQ2hhbmdlZCwgc2VuZENoYW5nZUV2ZW50KTsKICAgICBlbGVtZW50KCkt
PnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CisgICAgaWYgKCF2YWx1ZUNoYW5n
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGVsZW1lbnQoKS0+dXBkYXRlSW5uZXJUZXh0VmFs
dWUoKTsKKworICAgIHVuc2lnbmVkIG1heCA9IHZpc2libGVWYWx1ZSgpLmxlbmd0aCgpOworICAg
IGlmIChlbGVtZW50KCktPmZvY3VzZWQoKSkKKyAgICAgICAgZWxlbWVudCgpLT5zZXRTZWxlY3Rp
b25SYW5nZShtYXgsIG1heCk7CisgICAgZWxzZQorICAgICAgICBlbGVtZW50KCktPmNhY2hlU2Vs
ZWN0aW9uSW5SZXBvbnNlVG9TZXRWYWx1ZShtYXgpOworCisgICAgaWYgKHNlbmRDaGFuZ2VFdmVu
dCkgeworICAgICAgICAvLyBJZiB0aGUgdXNlciBpcyBzdGlsbCBlZGl0aW5nIHRoaXMgZmllbGQs
IGRpc3BhdGNoIGFuIGlucHV0IGV2ZW50IHJhdGhlciB0aGFuIGEgY2hhbmdlIGV2ZW50LgorICAg
ICAgICAvLyBUaGUgY2hhbmdlIGV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZCB3aGVuIGVkaXRpbmcg
ZmluaXNoZXMuCisgICAgICAgIGlmIChlbGVtZW50KCktPmZvY3VzZWQoKSkKKyAgICAgICAgICAg
IGVsZW1lbnQoKS0+ZGlzcGF0Y2hGb3JtQ29udHJvbElucHV0RXZlbnQoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQo
KTsKKyAgICAgICAgc2VuZENoYW5nZUV2ZW50ID0gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIFRl
eHRGaWVsZElucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5oCShyZXZpc2lv
biA5NDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVudCopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgc2VuZENoYW5nZUV2ZW50KTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQsIGJv
b2wmIHNlbmRDaGFuZ2VFdmVudCk7CiAgICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShj
b25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1
dGUoKTsKICAgICB2aXJ0dWFsIEhUTUxFbGVtZW50KiBwbGFjZWhvbGRlckVsZW1lbnQoKSBjb25z
dDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106699</attachid>
            <date>2011-09-07 23:40:02 -0700</date>
            <delta_ts>2011-09-08 22:56:42 -0700</delta_ts>
            <desc>Updated</desc>
            <filename>bug-67742-20110907234001.patch</filename>
            <type>text/plain</type>
            <size>16039</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NzQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDktMDcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUHVzaCBtb3JlIGNvZGUgZnJvbSBI
VE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSB0byBUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIG1v
cmUgY29kZSBpbiBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSB0byBUZXh0RmllbGRJbnB1dFR5
cGU6OnNldFZhbHVlLCBhbmQgbWVyZ2VkCisgICAgICAgIElucHV0VHlwZTo6dmFsdWVDaGFuZ2Vk
IGludG8gSW5wdXRUeXBlOjpzZXRWYWx1ZS4gQWxzbyBpbnRyb2R1Y2VkCisgICAgICAgIElucHV0
VHlwZTo6ZGlzcGF0Y2hDaGFuZ2VFdmVudEluUmVzcG9uc2VUb1NldFZhbHVlIHRvIGJlIG92ZXJy
aWRkZW4gYnkgVGV4dEZpZWxkSW5wdXRUeXBlLgorCisgICAgICAgICogaHRtbC9CYXNlQnV0dG9u
SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VCdXR0b25JbnB1dFR5cGU6OnNl
dFZhbHVlKToKKyAgICAgICAgKiBodG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuaDoKKyAgICAgICAg
KiBodG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmFz
ZUNoZWNrYWJsZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvQmFzZUNoZWNr
YWJsZUlucHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAg
ICAgICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL0ZpbGVJbnB1dFR5
cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAg
ICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSk6
CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpjYWNoZVNlbGVjdGlvbkluUmVzcG9uc2VUb1NldFZhbHVlKToKKyAg
ICAgICAgKiBodG1sL0hpZGRlbklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaWRk
ZW5JbnB1dFR5cGU6OnNldFZhbHVlKToKKyAgICAgICAgKiBodG1sL0hpZGRlbklucHV0VHlwZS5o
OgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0
VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjpkaXNwYXRjaENo
YW5nZUV2ZW50SW5SZXNwb25zZVRvU2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBl
Lmg6CisgICAgICAgICogaHRtbC9SYW5nZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZUlucHV0VHlwZTo6c2V0VmFsdWUpOgorICAgICAgICAqIGh0bWwvUmFuZ2VJbnB1dFR5
cGUuaDoKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRGaWVsZElucHV0VHlwZTo6ZGlzcGF0Y2hDaGFuZ2VFdmVudEluUmVzcG9uc2VUb1NldFZh
bHVlKToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOgorCiAyMDExLTA5LTA3
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByOTQ2NzQgYW5kIHI5NDY4OS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gOTQ3NDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgYm9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjpzdG9yZXNW
YWx1ZVNlcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBCYXNlQnV0dG9uSW5wdXRUeXBl
OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sKQordm9pZCBCYXNl
QnV0dG9uSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVlLCBi
b29sLCBib29sKQogewogICAgIGVsZW1lbnQoKS0+c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgc2Fu
aXRpemVkVmFsdWUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5w
dXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0dG9uSW5w
dXRUeXBlLmgJKHJldmlzaW9uIDk0NzQxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlQnV0
dG9uSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBS
ZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9v
bCBzZW5kVG9BbnlFbGVtZW50KTsKICAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzVmFsdWVTZXBhcmF0
ZUZyb21BdHRyaWJ1dGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5n
JiwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2ws
IGJvb2wpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9CYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiA5NDc0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBib29sIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6
OnN0b3Jlc1ZhbHVlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEJhc2VDaGVja2FibGVJ
bnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wpCit2
b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRp
emVkVmFsdWUsIGJvb2wsIGJvb2wpCiB7CiAgICAgZWxlbWVudCgpLT5zZXRBdHRyaWJ1dGUodmFs
dWVBdHRyLCBzYW5pdGl6ZWRWYWx1ZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jh
c2VDaGVja2FibGVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuaAkocmV2aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9v
bCBzZW5kVG9BbnlFbGVtZW50KTsKICAgICB2aXJ0dWFsIFN0cmluZyBmYWxsYmFja1ZhbHVlKCk7
CiAgICAgdmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sLCBib29sKTsKICAgICB2aXJ0dWFs
IGJvb2wgaXNDaGVja2FibGUoKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29s
b3JJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJ
bnB1dFR5cGUuY3BwCShyZXZpc2lvbiA5NDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29s
b3JJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsOCArMTIxLDEzIEBAIHZvaWQg
Q29sb3JJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUKICAgICB1cGRhdGVDb2xvclN3YXRj
aCgpOwogfQogCi12b2lkIENvbG9ySW5wdXRUeXBlOjp2YWx1ZUNoYW5nZWQoKQordm9pZCBDb2xv
cklucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCB2YWx1ZUNoYW5n
ZWQsIGJvb2wgc2VuZENoYW5nZUV2ZW50KTsKIHsKKyAgICBJbnB1dFR5cGU6OnNldFZhbHVlKHZh
bHVlLCB2YWx1ZUNoYW5nZWQsIHNlbmRDaGFuZ2VFdmVudCk7CisKKyAgICBpZiAoIXZhbHVlQ2hh
bmdlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgdXBkYXRlQ29sb3JTd2F0Y2goKTsKICAgICBp
ZiAoQ29sb3JDaG9vc2VyOjpjaG9vc2VyKCktPmNsaWVudCgpID09IHRoaXMpIHsKICAgICAgICAg
aWYgKENocm9tZSogY2hyb21lID0gdGhpcy0+Y2hyb21lKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0NvbG9ySW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9Db2xvcklucHV0VHlwZS5oCShyZXZpc2lvbiA5NDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvQ29sb3JJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJik7CiAg
ICAgdmlydHVhbCBDb2xvciB2YWx1ZUFzQ29sb3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlU2hhZG93U3VidHJlZSgpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5n
ZWQsIGJvb2wgc2VuZENoYW5nZUV2ZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQ2xpY2tF
dmVudChNb3VzZUV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZURPTUFjdGl2YXRlRXZl
bnQoRXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDk0NzQxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw3
IEBAIGJvb2wgRmlsZUlucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUYKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBGaWxlSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBi
b29sKQordm9pZCBGaWxlSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sLCBi
b29sKQogewogICAgIG1fZmlsZUxpc3QtPmNsZWFyKCk7CiAgICAgbV9pY29uLmNsZWFyKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkocmV2aXNpb24gOTQ3NDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRWYWx1ZShjb25zdCBT
dHJpbmcmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VHlwZVNwZWNpZmljVmFsdWUoU3RyaW5nJik7
IC8vIENoZWNrZWQgZmlyc3QsIGJlZm9yZSBpbnRlcm5hbCBzdG9yYWdlIG9yIHRoZSB2YWx1ZSBh
dHRyaWJ1dGUuCiAgICAgdmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmli
dXRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgc2Vu
ZENoYW5nZUV2ZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwg
Ym9vbCB2YWx1ZUNoYW5nZWQsIGJvb2wgc2VuZENoYW5nZUV2ZW50KTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHZpcnR1
YWwgSWNvbiogaWNvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGVVcGxvYWQoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2
aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDg0LDQxICsxMDg0LDI0IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6c2V0VmFsdWUoY29uc3QgU3QKICAgICBpZiAoIW1faW5wdXRUeXBlLT5jYW5TZXRWYWx1
ZSh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50
PiBwcm90ZWN0b3IodGhpcyk7CiAgICAgU3RyaW5nIHNhbml0aXplZFZhbHVlID0gc2FuaXRpemVW
YWx1ZSh2YWx1ZSk7CiAgICAgYm9vbCB2YWx1ZUNoYW5nZWQgPSBzYW5pdGl6ZWRWYWx1ZSAhPSB0
aGlzLT52YWx1ZSgpOwogCiAgICAgc2V0TGFzdENoYW5nZVdhc05vdFVzZXJFZGl0KCk7CiAgICAg
c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7Ci0gICAgbV9pbnB1dFR5
cGUtPnNldFZhbHVlKHNhbml0aXplZFZhbHVlLCBzZW5kQ2hhbmdlRXZlbnQpOworICAgIG1fc3Vn
Z2VzdGVkVmFsdWUgPSBTdHJpbmcoKTsgLy8gVGV4dEZpZWxkSW5wdXRUeXBlOjpzZXRWYWx1ZSB1
c2VzIHRoZSBzdWdnZXN0ZWQgdmFsdWUuCisgICAgbV9pbnB1dFR5cGUtPnNldFZhbHVlKHNhbml0
aXplZFZhbHVlLCB2YWx1ZUNoYW5nZWQsIHNlbmRDaGFuZ2VFdmVudCk7CiAKICAgICBzZXROZWVk
c1ZhbGlkaXR5Q2hlY2soKTsKIAotICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBTdHJpbmcoKTsgLy8g
dXBkYXRlSW5uZXJUZXh0VmFsdWUgdXNlcyB0aGUgc3VnZ2VzdGVkIHZhbHVlLgotICAgIGlmICh2
YWx1ZUNoYW5nZWQpCi0gICAgICAgIHVwZGF0ZUlubmVyVGV4dFZhbHVlKCk7Ci0KLSAgICBpZiAo
aXNUZXh0RmllbGQoKSkgewotICAgICAgICB1bnNpZ25lZCBtYXggPSB2aXNpYmxlVmFsdWUoKS5s
ZW5ndGgoKTsKLSAgICAgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gdGhpcykK
LSAgICAgICAgICAgIHNldFNlbGVjdGlvblJhbmdlKG1heCwgbWF4KTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgY2FjaGVTZWxlY3Rpb24obWF4LCBtYXgsIFNlbGVjdGlvbkhhc05vRGlyZWN0
aW9uKTsKLSAgICB9Ci0KICAgICBpZiAoIXZhbHVlQ2hhbmdlZCkKICAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIG1faW5wdXRUeXBlLT52YWx1ZUNoYW5nZWQoKTsKIAotICAgIGlmIChzZW5kQ2hh
bmdlRXZlbnQpIHsKLSAgICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgc3RpbGwgZWRpdGluZyB0aGlz
IGZpZWxkLCBkaXNwYXRjaCBhbiBpbnB1dCBldmVudCByYXRoZXIgdGhhbiBhIGNoYW5nZSBldmVu
dC4KLSAgICAgICAgLy8gVGhlIGNoYW5nZSBldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQgd2hlbiBl
ZGl0aW5nIGZpbmlzaGVzLgotICAgICAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiBmb2N1c2VkKCkp
Ci0gICAgICAgICAgICBkaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKLSAgICB9
CisgICAgaWYgKHNlbmRDaGFuZ2VFdmVudCkKKyAgICAgICAgbV9pbnB1dFR5cGUtPmRpc3BhdGNo
Q2hhbmdlRXZlbnRJblJlc3BvbnNlVG9TZXRWYWx1ZSgpOwogCisgICAgLy8gRklYTUU6IHdoeSBk
byB3ZSBkbyB0aGlzIHdoZW4gIXNlbmRDaGFuZ2VFdmVudD8KICAgICBpZiAoaXNUZXh0RmllbGQo
KSAmJiAoIWZvY3VzZWQoKSB8fCAhc2VuZENoYW5nZUV2ZW50KSkKICAgICAgICAgc2V0VGV4dEFz
T2ZMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh2YWx1ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA5NDc0MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNiArMjMx
LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgU3RyaW5n
JikgY29uc3Q7CiAjZW5kaWYKIAorICAgIHZvaWQgY2FjaGVTZWxlY3Rpb25JblJlc3BvbnNlVG9T
ZXRWYWx1ZShpbnQgY2FyZXRPZmZzZXQpIHsgY2FjaGVTZWxlY3Rpb24oY2FyZXRPZmZzZXQsIGNh
cmV0T2Zmc2V0LCBTZWxlY3Rpb25IYXNOb0RpcmVjdGlvbik7IH0KKwogI2lmIEVOQUJMRShJTlBV
VF9DT0xPUikKICAgICAvLyBGb3IgdGVzdCBwdXJwb3Nlcy4KICAgICBib29sIGNvbm5lY3RUb0Nv
bG9yQ2hvb3NlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSGlkZGVuSW5wdXRUeXBlLmNw
cAkocmV2aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgYm9vbCBIaWRkZW5JbnB1dFR5
cGU6OnN0b3Jlc1ZhbHVlU2VwYXJhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBIaWRk
ZW5JbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wp
Cit2b2lkIEhpZGRlbklucHV0VHlwZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBzYW5pdGl6ZWRW
YWx1ZSwgYm9vbCwgYm9vbCkKIHsKICAgICBlbGVtZW50KCktPnNldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIsIHNhbml0aXplZFZhbHVlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSGlkZGVu
SW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1
dFR5cGUuaAkocmV2aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklu
cHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBib29sIHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7CiAgICAgdmly
dHVhbCBib29sIGlzSGlkZGVuVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRS
ZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlKGNvbnN0IFN0cmluZyYsIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmLCBib29sLCBib29sKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHJldmlzaW9uIDk0NzQxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDksMTAgKzQ0
OSw2IEBAIHZvaWQgSW5wdXRUeXBlOjpzcmNBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKIH0KIAotdm9p
ZCBJbnB1dFR5cGU6OnZhbHVlQ2hhbmdlZCgpCi17Ci19Ci0KIHZvaWQgSW5wdXRUeXBlOjp3aWxs
TW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCiB7CiB9CkBAIC01MjUsMTIgKzUyMSwxNyBAQCBib29s
IElucHV0VHlwZTo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHNhbml0aXplZFZhbHVl
LCBib29sIHNlbmRDaGFuZ2VFdmVudCkKK3ZvaWQgSW5wdXRUeXBlOjpzZXRWYWx1ZShjb25zdCBT
dHJpbmcmIHNhbml0aXplZFZhbHVlLCBib29sLCBib29sIHNlbmRDaGFuZ2VFdmVudCkKIHsKICAg
ICBlbGVtZW50KCktPnNldFZhbHVlSW50ZXJuYWwoc2FuaXRpemVkVmFsdWUsIHNlbmRDaGFuZ2VF
dmVudCk7CiAgICAgZWxlbWVudCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKK3ZvaWQg
SW5wdXRUeXBlOjpkaXNwYXRjaENoYW5nZUV2ZW50SW5SZXNwb25zZVRvU2V0VmFsdWUoKQorewor
ICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7Cit9CisKIGJv
b2wgSW5wdXRUeXBlOjpjYW5TZXRWYWx1ZShjb25zdCBTdHJpbmcmKQogewogICAgIHJldHVybiB0
cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCShyZXZpc2lvbiA5NDc0MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsy
MTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0ZXBBdHRyaWJ1dGVDaGFuZ2VkKCk7
CiAgICAgdmlydHVhbCB2b2lkIGFsdEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3JjQXR0cmlidXRlQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdEFsaWduQXR0cmlidXRlKCk7CiAgICAgdmlydHVhbCBG
aWxlTGlzdCogZmlsZXMoKTsKQEAgLTIyNCw3ICsyMjMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIHNob3VsZFNlbmRDaGFuZ2VFdmVudEFmdGVyQ2hlY2tlZENoYW5nZWQoKTsKICAgICB2
aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBib29s
IHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgc2VuZENoYW5nZUV2ZW50KTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQsIGJvb2wgc2Vu
ZENoYW5nZUV2ZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hDaGFuZ2VFdmVudEluUmVz
cG9uc2VUb1NldFZhbHVlKCk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc2V0T25Eb2N1bWVu
dEFjdGl2YXRpb24oKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1
dGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDk0NzQx
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4NSw4ICsyODUsMTMgQEAgdm9pZCBSYW5nZUlucHV0VHlwZTo6bWluT3JNYXhBdHRy
aWJ1dGVDaAogICAgIGVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQogCi12b2lk
IFJhbmdlSW5wdXRUeXBlOjp2YWx1ZUNoYW5nZWQoKQordm9pZCBSYW5nZUlucHV0VHlwZTo6c2V0
VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCB2YWx1ZUNoYW5nZWQsIGJvb2wgc2VuZENo
YW5nZUV2ZW50KQogeworICAgIElucHV0VHlwZTo6c2V0VmFsdWUodmFsdWUsIHZhbHVlQ2hhbmdl
ZCwgc2VuZENoYW5nZUV2ZW50KTsKKworICAgIGlmICghdmFsdWVDaGFuZ2VkKQorICAgICAgICBy
ZXR1cm47CisKICAgICBzbGlkZXJUaHVtYkVsZW1lbnRPZihlbGVtZW50KCkpLT5zZXRQb3NpdGlv
bkZyb21WYWx1ZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1JhbmdlSW5wdXRU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0VHlwZS5o
CShyZXZpc2lvbiA5NDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJbnB1dFR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
U3RyaW5nIHNlcmlhbGl6ZShkb3VibGUpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NL
ZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgbWluT3JN
YXhBdHRyaWJ1dGVDaGFuZ2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sIHZhbHVlQ2hhbmdl
ZCwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQpOwogICAgIHZpcnR1YWwgU3RyaW5nIGZhbGxiYWNrVmFs
dWUoKTsKICAgICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJv
cG9zZWRWYWx1ZSk7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCShy
ZXZpc2lvbiA5NDc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDI5IEBAIGJvb2wgVGV4dEZpZWxkSW5w
dXRUeXBlOjpjYW5TZXRTdWdnZXN0ZWQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0
RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJv
b2wgc2VuZENoYW5nZUV2ZW50KQordm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OnNldFZhbHVlKGNv
bnN0IFN0cmluZyYgc2FuaXRpemVkVmFsdWUsIGJvb2wgdmFsdWVDaGFuZ2VkLCBib29sIHNlbmRD
aGFuZ2VFdmVudCkKIHsKLSAgICBJbnB1dFR5cGU6OnNldFZhbHVlKHNhbml0aXplZFZhbHVlLCBz
ZW5kQ2hhbmdlRXZlbnQpOworICAgIElucHV0VHlwZTo6c2V0VmFsdWUoc2FuaXRpemVkVmFsdWUs
IHZhbHVlQ2hhbmdlZCwgc2VuZENoYW5nZUV2ZW50KTsKICAgICBlbGVtZW50KCktPnVwZGF0ZVBs
YWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CisKKyAgICBpZiAodmFsdWVDaGFuZ2VkKQorICAg
ICAgICBlbGVtZW50KCktPnVwZGF0ZUlubmVyVGV4dFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBt
YXggPSB2aXNpYmxlVmFsdWUoKS5sZW5ndGgoKTsKKyAgICBpZiAoZWxlbWVudCgpLT5mb2N1c2Vk
KCkpCisgICAgICAgIGVsZW1lbnQoKS0+c2V0U2VsZWN0aW9uUmFuZ2UobWF4LCBtYXgpOworICAg
IGVsc2UKKyAgICAgICAgZWxlbWVudCgpLT5jYWNoZVNlbGVjdGlvbkluUmVzcG9uc2VUb1NldFZh
bHVlKG1heCk7Cit9CisKK3ZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpkaXNwYXRjaENoYW5nZUV2
ZW50SW5SZXNwb25zZVRvU2V0VmFsdWUoKQoreworICAgIC8vIElmIHRoZSB1c2VyIGlzIHN0aWxs
IGVkaXRpbmcgdGhpcyBmaWVsZCwgZGlzcGF0Y2ggYW4gaW5wdXQgZXZlbnQgcmF0aGVyIHRoYW4g
YSBjaGFuZ2UgZXZlbnQuCisgICAgLy8gVGhlIGNoYW5nZSBldmVudCB3aWxsIGJlIGRpc3BhdGNo
ZWQgd2hlbiBlZGl0aW5nIGZpbmlzaGVzLgorICAgIGlmIChlbGVtZW50KCktPmZvY3VzZWQoKSkK
KyAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sSW5wdXRFdmVudCgpOworICAg
IGVsc2UKKyAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQo
KTsKIH0KIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudChLZXli
b2FyZEV2ZW50KiBldmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1
dFR5cGUuaAkocmV2aXNpb24gOTQ3NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw4IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIHNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqKTsKICAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHls
ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sIHNlbmRDaGFu
Z2VFdmVudCk7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wg
dmFsdWVDaGFuZ2VkLCBib29sIHNlbmRDaGFuZ2VFdmVudCk7CisgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoQ2hhbmdlRXZlbnRJblJlc3BvbnNlVG9TZXRWYWx1ZSgpOwogICAgIHZpcnR1YWwgU3Ry
aW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZFJlc3BlY3RMaXN0QXR0cmlidXRlKCk7CiAgICAgdmlydHVhbCBIVE1MRWxlbWVudCogcGxhY2Vo
b2xkZXJFbGVtZW50KCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="103182"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>