<?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>68057</bug_id>
          
          <creation_ts>2011-09-13 22:26:59 -0700</creation_ts>
          <short_desc>Eliminate Length::undefinedLength = -1 and replace with Undefined LengthType.</short_desc>
          <delta_ts>2011-09-19 18:19:25 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Luke Macpherson">macpherson</reporter>
          <assigned_to name="Luke Macpherson">macpherson</assigned_to>
          <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>466843</commentid>
    <comment_count>0</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-09-13 22:26:59 -0700</bug_when>
    <thetext>Eliminate Length::undefinedLength = -1 and replace with Undefined LengthType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466847</commentid>
    <comment_count>1</comment_count>
      <attachid>107288</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-09-13 22:44:27 -0700</bug_when>
    <thetext>Created attachment 107288
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466857</commentid>
    <comment_count>2</comment_count>
      <attachid>107288</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-13 23:21:13 -0700</bug_when>
    <thetext>Comment on attachment 107288
Patch

Attachment 107288 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9651458</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467502</commentid>
    <comment_count>3</comment_count>
      <attachid>107430</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-09-14 17:59:46 -0700</bug_when>
    <thetext>Created attachment 107430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467524</commentid>
    <comment_count>4</comment_count>
      <attachid>107430</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-14 18:31:30 -0700</bug_when>
    <thetext>Comment on attachment 107430
Patch

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

Looks like a good change to make, but I am not sure you sufficiently covered all the code paths that might be working with an undefined value.

&gt; Source/WebCore/ChangeLog:8
&gt; +        There appear to be many cases where -1 is actually a valid Length.

If this is true, then we should be able to demonstrate that we fixed a bug with a test case.

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests / no behavioral changes.

But the comment above claims that -1 is a valid length, so it seems there must be at least some behavior changes.

&gt; Source/WebCore/css/CSSPrimitiveValue.cpp:405
&gt;          default:
&gt; +            ASSERT_NOT_REACHED();
&gt;              return -1.0;

Seems pretty strange to return -1 here. Not something new you added.

&gt; Source/WebCore/platform/Length.h:83
&gt;      int value() const {
&gt; +        ASSERT(!isUndefined());
&gt;          return getIntValue();
&gt;      }

Good to add an assertion, but maybe it should be inside the getIntValue function.

Also, if you are touching this function you should fix its incorrect brace style.

&gt; Source/WebCore/platform/Length.h:123
&gt; -    // note: works only for certain types, returns undefinedLength otherwise
&gt; +    // note: works only for certain types

This is unnecessarily vague. The old comment was too, but it would be much better if the comment explained the policy. It&apos;s now not even legal to call this function if the type is not one of the right ones.

&gt; Source/WebCore/platform/Length.h:134
&gt;              default:
&gt; -                return undefinedLength;
&gt; +                ASSERT_NOT_REACHED();
&gt; +                return 0;

Ideally we&apos;d get rid of the default case so we can take advantage of the compiler&apos;s warning about unhandled switch cases.

&gt; Source/WebCore/platform/Length.h:152
&gt;              default:
&gt; +                ASSERT_NOT_REACHED();
&gt;                  return 0;

Ideally we&apos;d get rid of the default case so we can take advantage of the compiler&apos;s warning about unhandled switch cases.

&gt; Source/WebCore/platform/Length.h:167
&gt;              default:
&gt; -                return static_cast&lt;float&gt;(undefinedLength);
&gt; +                ASSERT_NOT_REACHED();
&gt; +                return static_cast&lt;float&gt;(0);

Ideally we&apos;d get rid of the default case so we can take advantage of the compiler&apos;s warning about unhandled switch cases.

This can just be return 0, no need for the cast.

&gt; Source/WebCore/platform/Length.h:174
&gt;          return m_isFloat ? !m_floatValue : !m_intValue;

Doesn’t this need to assert !isUndefined()?

&gt; Source/WebCore/rendering/RenderImage.cpp:489
&gt; +        case Undefined:
&gt;              return false;

This seems to change behavior. Before the undefined values were always Fixed, so they returned true from this function.

If no undefined values are ever involved here, then I suggest that the undefined case should do an ASSERT_NOT_REACHED instead of just returning false.

If undefined values are involved here, then we can probably demonstrate with a test that there is a behavior change.

&gt; Source/WebCore/rendering/RenderImage.cpp:506
&gt; +        case Undefined:
&gt;              return false;

Ditto.

&gt; Source/WebCore/rendering/RenderListBox.cpp:197
&gt; -    if (style()-&gt;maxWidth().isFixed() &amp;&amp; style()-&gt;maxWidth().value() != undefinedLength) {
&gt; +    if (style()-&gt;maxWidth().isFixed() &amp;&amp; style()-&gt;maxWidth().value()) {

This one seems wrong, checking value() to see if it’s zero or not. In the other cases you correctly removed this clause entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467608</commentid>
    <comment_count>5</comment_count>
      <attachid>107430</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-09-14 21:36:20 -0700</bug_when>
    <thetext>Comment on attachment 107430
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        There appear to be many cases where -1 is actually a valid Length.
&gt; 
&gt; If this is true, then we should be able to demonstrate that we fixed a bug with a test case.

The reason this is not the case is that most code does not actually check whether the value returned by length is -1 or not, so 99% of the time Length(-1,Fixed) is still treated as a valid length.

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        No new tests / no behavioral changes.
&gt; 
&gt; But the comment above claims that -1 is a valid length, so it seems there must be at least some behavior changes.

My intent was to change the cases that treat -1 as invalid to use Lenght(Undefined), and leave the cases that treat Length(-1, Fixed) as an actual length alone.
The only case I&apos;m not confident about is in RenderListMarker::updateMargins() which sometimes sets MarginStart to Length(-1, Fixed). In this case the tests indicate that this -1 should be treated as a length, even though the intent is not clear from the code. In this case I have left it as a valid Length of -1 so that the tests continue to pass.

&gt;&gt; Source/WebCore/platform/Length.h:83
&gt;&gt;      }
&gt; 
&gt; Good to add an assertion, but maybe it should be inside the getIntValue function.
&gt; 
&gt; Also, if you are touching this function you should fix its incorrect brace style.

Done.

&gt;&gt; Source/WebCore/platform/Length.h:123
&gt;&gt; +    // note: works only for certain types
&gt; 
&gt; This is unnecessarily vague. The old comment was too, but it would be much better if the comment explained the policy. It&apos;s now not even legal to call this function if the type is not one of the right ones.

Comment updated.

&gt;&gt; Source/WebCore/platform/Length.h:134
&gt;&gt; +                return 0;
&gt; 
&gt; Ideally we&apos;d get rid of the default case so we can take advantage of the compiler&apos;s warning about unhandled switch cases.

Done.

&gt;&gt; Source/WebCore/platform/Length.h:152
&gt;&gt;                  return 0;
&gt; 
&gt; Ideally we&apos;d get rid of the default case so we can take advantage of the compiler&apos;s warning about unhandled switch cases.

Done.

&gt;&gt; Source/WebCore/platform/Length.h:174
&gt;&gt;          return m_isFloat ? !m_floatValue : !m_intValue;
&gt; 
&gt; Doesn’t this need to assert !isUndefined()?

Done.

&gt;&gt; Source/WebCore/rendering/RenderImage.cpp:489
&gt;&gt;              return false;
&gt; 
&gt; This seems to change behavior. Before the undefined values were always Fixed, so they returned true from this function.
&gt; 
&gt; If no undefined values are ever involved here, then I suggest that the undefined case should do an ASSERT_NOT_REACHED instead of just returning false.
&gt; 
&gt; If undefined values are involved here, then we can probably demonstrate with a test that there is a behavior change.

The existing case treated Length(-1, Fixed) as a valid value, and it is still treated as such, so there is no behavioral change here.

&gt;&gt; Source/WebCore/rendering/RenderImage.cpp:506
&gt;&gt;              return false;
&gt; 
&gt; Ditto.

As above.

&gt;&gt; Source/WebCore/rendering/RenderListBox.cpp:197
&gt;&gt; +    if (style()-&gt;maxWidth().isFixed() &amp;&amp; style()-&gt;maxWidth().value()) {
&gt; 
&gt; This one seems wrong, checking value() to see if it’s zero or not. In the other cases you correctly removed this clause entirely.

Agreed, done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467657</commentid>
    <comment_count>6</comment_count>
      <attachid>107461</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-09-14 23:28:45 -0700</bug_when>
    <thetext>Created attachment 107461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467791</commentid>
    <comment_count>7</comment_count>
      <attachid>107430</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-15 07:30:41 -0700</bug_when>
    <thetext>Comment on attachment 107430
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderImage.cpp:489
&gt;&gt;&gt;              return false;
&gt;&gt; 
&gt;&gt; This seems to change behavior. Before the undefined values were always Fixed, so they returned true from this function.
&gt;&gt; 
&gt;&gt; If no undefined values are ever involved here, then I suggest that the undefined case should do an ASSERT_NOT_REACHED instead of just returning false.
&gt;&gt; 
&gt;&gt; If undefined values are involved here, then we can probably demonstrate with a test that there is a behavior change.
&gt; 
&gt; The existing case treated Length(-1, Fixed) as a valid value, and it is still treated as such, so there is no behavioral change here.

I don’t think you understood which cases I was talking about.

There is a behavior change if this function gets a length that comes from the function in CSSStyleApplyProperty.cpp that this patch changes or from the result of the Length::initialMaxSize function.

If neither of those should ever happen, then I suggest that the undefined case should do an ASSERT_NOT_REACHED instead of just returning false.

If either of those things can happen, then we can probably demonstrate with a test that there is a behavior change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468142</commentid>
    <comment_count>8</comment_count>
      <attachid>107561</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-09-15 16:16:35 -0700</bug_when>
    <thetext>Created attachment 107561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468145</commentid>
    <comment_count>9</comment_count>
      <attachid>107430</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-09-15 16:18:08 -0700</bug_when>
    <thetext>Comment on attachment 107430
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderImage.cpp:489
&gt;&gt;&gt;&gt;              return false;
&gt;&gt;&gt; 
&gt;&gt;&gt; This seems to change behavior. Before the undefined values were always Fixed, so they returned true from this function.
&gt;&gt;&gt; 
&gt;&gt;&gt; If no undefined values are ever involved here, then I suggest that the undefined case should do an ASSERT_NOT_REACHED instead of just returning false.
&gt;&gt;&gt; 
&gt;&gt;&gt; If undefined values are involved here, then we can probably demonstrate with a test that there is a behavior change.
&gt;&gt; 
&gt;&gt; The existing case treated Length(-1, Fixed) as a valid value, and it is still treated as such, so there is no behavioral change here.
&gt; 
&gt; I don’t think you understood which cases I was talking about.
&gt; 
&gt; There is a behavior change if this function gets a length that comes from the function in CSSStyleApplyProperty.cpp that this patch changes or from the result of the Length::initialMaxSize function.
&gt; 
&gt; If neither of those should ever happen, then I suggest that the undefined case should do an ASSERT_NOT_REACHED instead of just returning false.
&gt; 
&gt; If either of those things can happen, then we can probably demonstrate with a test that there is a behavior change.

Ok, I&apos;ve added an ASSERT_NOT_REACHED there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468159</commentid>
    <comment_count>10</comment_count>
      <attachid>107561</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-15 16:41:34 -0700</bug_when>
    <thetext>Comment on attachment 107561
Patch

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

&gt; Source/WebCore/platform/Length.h:124
&gt; +    // Note: May only be called for Fixed, Percent and Auto lengths.
&gt; +    //       Other types will ASSERT in order to catch invalid length calculations.

We normally don’t line up subsequent lines with spaces like this.

&gt; Source/WebCore/platform/Length.h:139
&gt; +        return 0;

It would also be good to have an ASSERT_NOT_REACHED outside the switch statement.

&gt; Source/WebCore/platform/Length.h:160
&gt; +        return 0;

It would also be good to have an ASSERT_NOT_REACHED outside the switch statement.

&gt; Source/WebCore/platform/Length.h:178
&gt; +        return 0;

It would also be good to have an ASSERT_NOT_REACHED outside the switch statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468199</commentid>
    <comment_count>11</comment_count>
      <attachid>107561</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-09-15 18:03:22 -0700</bug_when>
    <thetext>Comment on attachment 107561
Patch

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

&gt;&gt; Source/WebCore/platform/Length.h:124
&gt;&gt; +    //       Other types will ASSERT in order to catch invalid length calculations.
&gt; 
&gt; We normally don’t line up subsequent lines with spaces like this.

Done.

&gt;&gt; Source/WebCore/platform/Length.h:139
&gt;&gt; +        return 0;
&gt; 
&gt; It would also be good to have an ASSERT_NOT_REACHED outside the switch statement.

Done.

&gt;&gt; Source/WebCore/platform/Length.h:160
&gt;&gt; +        return 0;
&gt; 
&gt; It would also be good to have an ASSERT_NOT_REACHED outside the switch statement.

Done.

&gt;&gt; Source/WebCore/platform/Length.h:178
&gt;&gt; +        return 0;
&gt; 
&gt; It would also be good to have an ASSERT_NOT_REACHED outside the switch statement.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468220</commentid>
    <comment_count>12</comment_count>
      <attachid>107580</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-09-15 18:34:26 -0700</bug_when>
    <thetext>Created attachment 107580
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469846</commentid>
    <comment_count>13</comment_count>
      <attachid>107580</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-19 18:19:20 -0700</bug_when>
    <thetext>Comment on attachment 107580
Patch

Clearing flags on attachment: 107580

Committed r95502: &lt;http://trac.webkit.org/changeset/95502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469848</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-19 18:19:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107288</attachid>
            <date>2011-09-13 22:44:27 -0700</date>
            <delta_ts>2011-09-14 17:59:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68057-20110914154424.patch</filename>
            <type>text/plain</type>
            <size>16454</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1MDc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDktMTMgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBFbGltaW5hdGUg
TGVuZ3RoOjp1bmRlZmluZWRMZW5ndGggPSAtMSBhbmQgcmVwbGFjZSB3aXRoIFVuZGVmaW5lZCBM
ZW5ndGhUeXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjgwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBhcHBlYXIgdG8gYmUgbWFueSBjYXNlcyB3aGVyZSAtMSBpcyBhY3R1YWxseSBhIHZh
bGlkIExlbmd0aC4KKyAgICAgICAgRW5jb2RpbmcgdGhlIHZhbGlkaXR5IG9mIExlbmd0aCBzZXBh
cmF0ZWx5IHRvIHRoZSB2YWx1ZSBpcyBhIG5hdHVyYWwgc29sdXRpb24uCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIC8gbm8gYmVoYXZpb3JhbCBjaGFuZ2VzLgorCisgICAgICAgICogY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZUFwcGx5UHJvcGVy
dHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1
ZSk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAgIChXZWJDb3JlOjpMZW5n
dGg6Okxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGg6OnZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6Okxlbmd0aDo6Y2FsY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6
Y2FsY01pblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6Y2FsY0Zsb2F0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6TGVuZ3RoOjppc1VuZGVmaW5lZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySW1hZ2U6OmlzTG9naWNhbFdpZHRoU3BlY2lmaWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlOjppc0xvZ2ljYWxIZWlnaHRTcGVjaWZpZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xp
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmluaXRpYWxNYXhTaXplKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorCiAyMDEx
LTA5LTEzICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
Q3Jhc2ggaW4gUmVuZGVyU2Nyb2xsYmFyUGFydDo6aW1hZ2VDaGFuZ2VkLgpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJl
dmlzaW9uIDk1MDU4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTUsMTMgKzEzOTUsMTMgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlYwogICAgICAgICAgICAgcmV0dXJuIHBy
aW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKHN0eWxlLT51c2VyTW9kaWZ5KCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5TWF4SGVpZ2h0OiB7CiAgICAgICAgICAgICBjb25zdCBMZW5n
dGgmIG1heEhlaWdodCA9IHN0eWxlLT5tYXhIZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChtYXhI
ZWlnaHQuaXNGaXhlZCgpICYmIG1heEhlaWdodC52YWx1ZSgpID09IHVuZGVmaW5lZExlbmd0aCkK
KyAgICAgICAgICAgIGlmIChtYXhIZWlnaHQuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSk7CiAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRl
VmFsdWUobWF4SGVpZ2h0KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWF4
V2lkdGg6IHsKICAgICAgICAgICAgIGNvbnN0IExlbmd0aCYgbWF4V2lkdGggPSBzdHlsZS0+bWF4
V2lkdGgoKTsKLSAgICAgICAgICAgIGlmIChtYXhXaWR0aC5pc0ZpeGVkKCkgJiYgbWF4V2lkdGgu
dmFsdWUoKSA9PSB1bmRlZmluZWRMZW5ndGgpCisgICAgICAgICAgICBpZiAobWF4V2lkdGguaXNV
bmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICByZXR1cm4g
cHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUobWF4V2lkdGgpOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDk1
MDU4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI2LDYgKzIyNiw3IEBAIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRp
dmVWYWx1ZShjb24KICAgICAgICAgICAgIG1fdmFsdWUubnVtID0gbGVuZ3RoLnBlcmNlbnQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlbGF0aXZlOgorICAgICAgICBjYXNl
IFVuZGVmaW5lZDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQ
cm9wZXJ0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBw
bHlQcm9wZXJ0eS5jcHAJKHJldmlzaW9uIDk1MDU4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNyBA
QCBwcml2YXRlOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKG5vbmVF
bmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9uZSkKICAg
ICAgICAgICAgIGlmIChub25lVW5kZWZpbmVkKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHNl
bGVjdG9yLT5zdHlsZSgpLCBMZW5ndGgodW5kZWZpbmVkTGVuZ3RoLCBGaXhlZCkpOworICAgICAg
ICAgICAgICAgIHNldFZhbHVlKHNlbGVjdG9yLT5zdHlsZSgpLCBMZW5ndGgoVW5kZWZpbmVkKSk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc2VsZWN0b3ItPnN0
eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgZWxzZSBpZiAoaW50cmluc2ljRW5hYmxlZCAmJiBw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUludHJpbnNpYykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lvbiA5NTA1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTAgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBpbnQgdW5kZWZpbmVkTGVuZ3RoID0gLTE7CiBj
b25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZmZmZmOyAvLyBtYXggdmFsdWUgZm9yIGEg
MjgtYml0IGludAogY29uc3QgaW50IGludE1pbkZvckxlbmd0aCA9ICgtMHg3ZmZmZmZmIC0gMSk7
IC8vIG1pbiB2YWx1ZSBmb3IgYSAyOC1iaXQgaW50CiAKLWVudW0gTGVuZ3RoVHlwZSB7IEF1dG8s
IFJlbGF0aXZlLCBQZXJjZW50LCBGaXhlZCwgSW50cmluc2ljLCBNaW5JbnRyaW5zaWMgfTsKK2Vu
dW0gTGVuZ3RoVHlwZSB7IEF1dG8sIFJlbGF0aXZlLCBQZXJjZW50LCBGaXhlZCwgSW50cmluc2lj
LCBNaW5JbnRyaW5zaWMsIFVuZGVmaW5lZCB9OwogCiBzdHJ1Y3QgTGVuZ3RoIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU2LDcgKzU1LDcgQEAgcHVibGljOgogICAgIAogICAg
IExlbmd0aChmbG9hdCB2LCBMZW5ndGhUeXBlIHQsIGJvb2wgcSA9IGZhbHNlKQogICAgIDogbV9m
bG9hdFZhbHVlKHYpLCBtX3F1aXJrKHEpLCBtX3R5cGUodCksIG1faXNGbG9hdCh0cnVlKQotICAg
IHsgICAgICAgICAgICAKKyAgICB7CiAgICAgfQogCiAgICAgTGVuZ3RoKGRvdWJsZSB2LCBMZW5n
dGhUeXBlIHQsIGJvb2wgcSA9IGZhbHNlKQpAQCAtNzksNiArNzgsNyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogICAgIGludCB2YWx1ZSgpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgcmV0dXJuIGdldEludFZhbHVlKCk7CiAgICAgfQogCkBAIC0xMjAs
NyArMTIwLDcgQEAgcHVibGljOgogICAgICAgICAqdGhpcyA9IExlbmd0aCh2YWx1ZSwgRml4ZWQp
OwogICAgIH0KIAotICAgIC8vIG5vdGU6IHdvcmtzIG9ubHkgZm9yIGNlcnRhaW4gdHlwZXMsIHJl
dHVybnMgdW5kZWZpbmVkTGVuZ3RoIG90aGVyd2lzZQorICAgIC8vIG5vdGU6IHdvcmtzIG9ubHkg
Zm9yIGNlcnRhaW4gdHlwZXMKICAgICBpbnQgY2FsY1ZhbHVlKGludCBtYXhWYWx1ZSwgYm9vbCBy
b3VuZFBlcmNlbnRhZ2VzID0gZmFsc2UpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5
cGUoKSkgewpAQCAtMTMwLDcgKzEzMCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQXV0
bzoKICAgICAgICAgICAgICAgICByZXR1cm4gbWF4VmFsdWU7CiAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRMZW5ndGg7CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTE0NSw3ICsxNDYsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgLy8gRG9uJ3QgcmVtb3ZlIHRoZSBleHRyYSBjYXN0IHRvIGZsb2F0LiBJdCBpcyBuZWVkZWQg
Zm9yIHJvdW5kaW5nIG9uIDMyLWJpdCBJbnRlbCBtYWNoaW5lcyB0aGF0IHVzZSB0aGUgRlBVIHN0
YWNrLgogICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0
PGZsb2F0PihtYXhWYWx1ZSAqIHBlcmNlbnQoKSAvIDEwMC4wZikpOwogICAgICAgICAgICAgY2Fz
ZSBBdXRvOgorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTE2MCwxMSArMTYzLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGNhc2UgQXV0bzoKICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1heFZhbHVlKTsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih1bmRlZmluZWRMZW5ndGgpOworICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oMCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGlzVW5kZWZp
bmVkKCkgY29uc3QgeyByZXR1cm4gdmFsdWUoKSA9PSB1bmRlZmluZWRMZW5ndGg7IH0KKyAgICBi
b29sIGlzVW5kZWZpbmVkKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFVuZGVmaW5lZDsgfQog
ICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgCiAgICAgeyAKICAgICAgICAgcmV0dXJuIG1faXNGbG9h
dCA/ICFtX2Zsb2F0VmFsdWUgOiAhbV9pbnRWYWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gOTUwNTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzY4LDcgKzQ3
NjgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhCiAgICAgICAg
IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5sb2dpY2FsTWluV2lk
dGgoKS52YWx1ZSgpKSk7CiAgICAgfQogICAgIAotICAgIGlmIChzdHlsZSgpLT5sb2dpY2FsTWF4
V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSAh
PSB1bmRlZmluZWRMZW5ndGgpIHsKKyAgICBpZiAoc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCku
aXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1f
bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChz
dHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRl
Q29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS52YWx1ZSgp
KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDk1MDU4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveDo6Y29tcHV0CiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4
KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0
aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKLSAgICBpZiAoc3R5bGUo
KS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9
IHVuZGVmaW5lZExlbmd0aCkgeworICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQo
KSkgewogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+
bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRo
ID0gbWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2lj
YWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAJKHJldmlzaW9uIDk1MDU4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw3IEBAIHZv
aWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVQcmUKICAgICBlbHNlCiAgICAgICAg
IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7
CiAKLSAgICBpZiAoc3R5bGUtPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlLT5tYXhXaWR0
aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgaWYgKHN0eWxlLT5tYXhXaWR0
aCgpLmlzRml4ZWQoKSkgewogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1p
bihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lk
dGgoc3R5bGUtPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgICAgICBtX21pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUtPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gOTUw
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OTIsNiArNDkyLDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6aXNMb2dpY2FsV2lk
dGhTcGVjaWZpZQogICAgICAgICBjYXNlIFJlbGF0aXZlOiAvLyBGSVhNRTogU2hvdWxkbid0IHRo
aXMgY2FzZSByZXR1cm4gdHJ1ZT8KICAgICAgICAgY2FzZSBJbnRyaW5zaWM6CiAgICAgICAgIGNh
c2UgTWluSW50cmluc2ljOgorICAgICAgICBjYXNlIFVuZGVmaW5lZDoKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgQVNTRVJUKGZhbHNlKTsKQEAgLTUwOCw2ICs1MDksNyBA
QCBib29sIFJlbmRlckltYWdlOjppc0xvZ2ljYWxIZWlnaHRTcGVjaWZpCiAgICAgICAgIGNhc2Ug
UmVsYXRpdmU6IC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyBjYXNlIHJldHVybiB0cnVlPwogICAg
ICAgICBjYXNlIEludHJpbnNpYzoKICAgICAgICAgY2FzZSBNaW5JbnRyaW5zaWM6CisgICAgICAg
IGNhc2UgVW5kZWZpbmVkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBB
U1NFUlQoZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAkocmV2aXNpb24gOTUwNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lkIFJl
bmRlckxpc3RCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpCiAgICAgZWxzZQogICAgICAgICBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoOwogCi0g
ICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRo
KCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKKyAgICBpZiAoc3R5bGUoKS0+bWF4V2lk
dGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSB7CiAgICAgICAg
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZh
bHVlKCkpKTsKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxl
KCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gOTUwNTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzMsNyArMjczLDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6Y29tcHV0ZVByZWZlcnJlZExvZwog
ICAgIGVsc2UKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aDsKIAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQo
KSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7Cisg
ICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJl
ZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsK
ICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdp
ZHRoKCkudmFsdWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gOTUwNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsNyArMzk3
LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVByZWZlcnJlZExvZwogICAgIExheW91
dFVuaXQgYm9yZGVyQW5kUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwogICAgIG1f
bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGZh
bHNlKSArIGJvcmRlckFuZFBhZGRpbmc7CiAKLSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5p
c0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0
aCkKKyAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpCiAgICAgICAgIG1fbWF4
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgKyAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09O
VEVOVF9CT1ggPyBib3JkZXJBbmRQYWRkaW5nIDogMCkpOwogCiAgICAgaWYgKHN0eWxlKCktPndp
ZHRoKCkuaXNQZXJjZW50KCkgfHwgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiA5NTA1
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjpjb21wdXRlUHJlZmVy
cmVkTG9naWMKICAgICBlbHNlCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAgICAgCi0gICAgaWYgKHN0eWxlKCktPm1heFdp
ZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmlu
ZWRMZW5ndGgpIHsKKyAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsKICAg
ICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRo
KCkudmFsdWUoKSkpOwogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbiht
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA5NTA1OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4OCw3ICsyODgsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjb21w
dXRlUHJlZmVycmVkCiAgICAgZWxzZQogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoOwogCi0gICAgaWYgKHN0eWxlKCktPm1heFdp
ZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmlu
ZWRMZW5ndGgpIHsKKyAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsKICAg
ICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRo
KCkudmFsdWUoKSkpOwogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbiht
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDk1MDU4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNTcsNyArMTM1Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50IGluaXRpYWxM
ZXR0ZXJXb3JkU3BhY2luZygpIHsgcmV0dXJuIDA7IH0KICAgICBzdGF0aWMgTGVuZ3RoIGluaXRp
YWxTaXplKCkgeyByZXR1cm4gTGVuZ3RoKCk7IH0KICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxN
aW5TaXplKCkgeyByZXR1cm4gTGVuZ3RoKDAsIEZpeGVkKTsgfQotICAgIHN0YXRpYyBMZW5ndGgg
aW5pdGlhbE1heFNpemUoKSB7IHJldHVybiBMZW5ndGgodW5kZWZpbmVkTGVuZ3RoLCBGaXhlZCk7
IH0KKyAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxNYXhTaXplKCkgeyByZXR1cm4gTGVuZ3RoKFVu
ZGVmaW5lZCk7IH0KICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxPZmZzZXQoKSB7IHJldHVybiBM
ZW5ndGgoKTsgfQogICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbE1hcmdpbigpIHsgcmV0dXJuIExl
bmd0aChGaXhlZCk7IH0KICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxQYWRkaW5nKCkgeyByZXR1
cm4gTGVuZ3RoKEZpeGVkKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiA5NTA1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3
ICsxMDIsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVQcmVmZXJyZWRMb2dpCiAgICAg
TGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAg
ICAgTGF5b3V0VW5pdCB3aWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChmYWxzZSkg
KyBib3JkZXJBbmRQYWRkaW5nOwogCi0gICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhl
ZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpCisg
ICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKQogICAgICAgICB3aWR0aCA9IG1p
bih3aWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemlu
ZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IDApKTsKIAogICAgIGlmIChz
dHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygp
ICYmIHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107430</attachid>
            <date>2011-09-14 17:59:46 -0700</date>
            <delta_ts>2011-09-15 16:18:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68057-20110915105944.patch</filename>
            <type>text/plain</type>
            <size>17752</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1MTMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDktMTMgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBFbGltaW5hdGUg
TGVuZ3RoOjp1bmRlZmluZWRMZW5ndGggPSAtMSBhbmQgcmVwbGFjZSB3aXRoIFVuZGVmaW5lZCBM
ZW5ndGhUeXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjgwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBhcHBlYXIgdG8gYmUgbWFueSBjYXNlcyB3aGVyZSAtMSBpcyBhY3R1YWxseSBhIHZh
bGlkIExlbmd0aC4KKyAgICAgICAgRW5jb2RpbmcgdGhlIHZhbGlkaXR5IG9mIExlbmd0aCBzZXBh
cmF0ZWx5IHRvIHRoZSB2YWx1ZSBpcyBhIG5hdHVyYWwgc29sdXRpb24uCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIC8gbm8gYmVoYXZpb3JhbCBjaGFuZ2VzLgorCisgICAgICAgICogY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZUFwcGx5UHJvcGVy
dHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1
ZSk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAgIChXZWJDb3JlOjpMZW5n
dGg6Okxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGg6OnZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6Okxlbmd0aDo6Y2FsY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6
Y2FsY01pblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6Y2FsY0Zsb2F0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6TGVuZ3RoOjppc1VuZGVmaW5lZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySW1hZ2U6OmlzTG9naWNhbFdpZHRoU3BlY2lmaWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlOjppc0xvZ2ljYWxIZWlnaHRTcGVjaWZpZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xp
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmluaXRpYWxNYXhTaXplKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorCiAyMDEx
LTA5LTE0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
R2V0IHJpZCBvZiBXZWJDb3JlVmlld0ZhY3RvcnkgYW5kIGl0cyBXZWJWaWV3RmFjdG9yeSBzdWJj
bGFzcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAkocmV2aXNpb24g
OTUxMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjMsOCArMTQyMyw4IEBA
IHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEYKICAgICAgICAgcmVzdWx0
ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUo
QVRLX1RFWFRfQVRUUl9SSVNFKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKLSAgICBpbnQgaW5k
ZW50YXRpb24gPSBzdHlsZS0+dGV4dEluZGVudCgpLmNhbGNWYWx1ZShvYmplY3QtPnNpemUoKS53
aWR0aCgpKTsKLSAgICBpZiAoaW5kZW50YXRpb24gIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAg
aWYgKCFzdHlsZS0+dGV4dEluZGVudCgpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgaW50IGlu
ZGVudGF0aW9uID0gc3R5bGUtPnRleHRJbmRlbnQoKS5jYWxjVmFsdWUob2JqZWN0LT5zaXplKCku
d2lkdGgoKSk7CiAgICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSIsIGluZGVu
dGF0aW9uKSk7CiAgICAgICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwgYXRr
X3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfSU5ERU5UKSwgYnVmZmVyLmdl
dCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gOTUxMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM5NSwxMyArMTM5NSwxMyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxl
RGVjCiAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUo
c3R5bGUtPnVzZXJNb2RpZnkoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWlnaHQ6
IHsKICAgICAgICAgICAgIGNvbnN0IExlbmd0aCYgbWF4SGVpZ2h0ID0gc3R5bGUtPm1heEhlaWdo
dCgpOwotICAgICAgICAgICAgaWYgKG1heEhlaWdodC5pc0ZpeGVkKCkgJiYgbWF4SGVpZ2h0LnZh
bHVlKCkgPT0gdW5kZWZpbmVkTGVuZ3RoKQorICAgICAgICAgICAgaWYgKG1heEhlaWdodC5pc1Vu
ZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIHJldHVybiBw
cmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShtYXhIZWlnaHQpOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhXaWR0aDogewogICAgICAgICAgICAgY29uc3QgTGVu
Z3RoJiBtYXhXaWR0aCA9IHN0eWxlLT5tYXhXaWR0aCgpOwotICAgICAgICAgICAgaWYgKG1heFdp
ZHRoLmlzRml4ZWQoKSAmJiBtYXhXaWR0aC52YWx1ZSgpID09IHVuZGVmaW5lZExlbmd0aCkKKyAg
ICAgICAgICAgIGlmIChtYXhXaWR0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b25lKTsKICAgICAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1
ZShtYXhXaWR0aCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmNwcAkocmV2aXNpb24gOTUxMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNiArMjI2LDcgQEAgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKGNvbgogICAgICAgICAgICAgbV92YWx1
ZS5udW0gPSBsZW5ndGgucGVyY2VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgUmVsYXRpdmU6CisgICAgICAgIGNhc2UgVW5kZWZpbmVkOgogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC00MDAsNiArNDAx
LDcgQEAgZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRAogICAgICAgICAg
ICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAqIDEyLjAgLyA3Mi4wOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIHJldHVybiAtMS4wOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHJldmlzaW9uIDk1MTMzKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyOCw3ICszMjgsNyBAQCBwcml2YXRlOgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKICAgICAgICAgaWYgKG5vbmVFbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIGlmIChub25lVW5kZWZpbmVkKQotICAgICAg
ICAgICAgICAgIHNldFZhbHVlKHNlbGVjdG9yLT5zdHlsZSgpLCBMZW5ndGgodW5kZWZpbmVkTGVu
Z3RoLCBGaXhlZCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHNlbGVjdG9yLT5zdHlsZSgp
LCBMZW5ndGgoVW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
c2V0VmFsdWUoc2VsZWN0b3ItPnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgZWxzZSBpZiAo
aW50cmluc2ljRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZUludHJpbnNpYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lvbiA5NTEz
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxMSArMzAsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBpbnQgdW5k
ZWZpbmVkTGVuZ3RoID0gLTE7CiBjb25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZmZmZm
OyAvLyBtYXggdmFsdWUgZm9yIGEgMjgtYml0IGludAogY29uc3QgaW50IGludE1pbkZvckxlbmd0
aCA9ICgtMHg3ZmZmZmZmIC0gMSk7IC8vIG1pbiB2YWx1ZSBmb3IgYSAyOC1iaXQgaW50CiAKLWVu
dW0gTGVuZ3RoVHlwZSB7IEF1dG8sIFJlbGF0aXZlLCBQZXJjZW50LCBGaXhlZCwgSW50cmluc2lj
LCBNaW5JbnRyaW5zaWMgfTsKK2VudW0gTGVuZ3RoVHlwZSB7IEF1dG8sIFJlbGF0aXZlLCBQZXJj
ZW50LCBGaXhlZCwgSW50cmluc2ljLCBNaW5JbnRyaW5zaWMsIFVuZGVmaW5lZCB9OwogCiBzdHJ1
Y3QgTGVuZ3RoIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU2LDEyICs1NSwx
MiBAQCBwdWJsaWM6CiAgICAgCiAgICAgTGVuZ3RoKGZsb2F0IHYsIExlbmd0aFR5cGUgdCwgYm9v
bCBxID0gZmFsc2UpCiAgICAgOiBtX2Zsb2F0VmFsdWUodiksIG1fcXVpcmsocSksIG1fdHlwZSh0
KSwgbV9pc0Zsb2F0KHRydWUpCi0gICAgeyAgICAgICAgICAgIAorICAgIHsKICAgICB9CiAKICAg
ICBMZW5ndGgoZG91YmxlIHYsIExlbmd0aFR5cGUgdCwgYm9vbCBxID0gZmFsc2UpCiAgICAgICAg
IDogbV9xdWlyayhxKSwgbV90eXBlKHQpLCBtX2lzRmxvYXQodHJ1ZSkKLSAgICB7ICAgICAgICAg
ICAKKyAgICB7CiAgICAgICAgIG1fZmxvYXRWYWx1ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pih2KTsg
ICAgCiAgICAgfQogCkBAIC03OSw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
aW50IHZhbHVlKCkgY29uc3QgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWZpbmVkKCkpOwogICAg
ICAgICByZXR1cm4gZ2V0SW50VmFsdWUoKTsKICAgICB9CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCBw
dWJsaWM6CiAgICAgICAgICp0aGlzID0gTGVuZ3RoKHZhbHVlLCBGaXhlZCk7CiAgICAgfQogCi0g
ICAgLy8gbm90ZTogd29ya3Mgb25seSBmb3IgY2VydGFpbiB0eXBlcywgcmV0dXJucyB1bmRlZmlu
ZWRMZW5ndGggb3RoZXJ3aXNlCisgICAgLy8gbm90ZTogd29ya3Mgb25seSBmb3IgY2VydGFpbiB0
eXBlcwogICAgIGludCBjYWxjVmFsdWUoaW50IG1heFZhbHVlLCBib29sIHJvdW5kUGVyY2VudGFn
ZXMgPSBmYWxzZSkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CkBAIC0x
MzAsNyArMTMwLDggQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBBdXRvOgogICAgICAgICAg
ICAgICAgIHJldHVybiBtYXhWYWx1ZTsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHVuZGVmaW5lZExlbmd0aDsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMTQ1LDcgKzE0Niw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAvLyBEb24ndCBy
ZW1vdmUgdGhlIGV4dHJhIGNhc3QgdG8gZmxvYXQuIEl0IGlzIG5lZWRlZCBmb3Igcm91bmRpbmcg
b24gMzItYml0IEludGVsIG1hY2hpbmVzIHRoYXQgdXNlIHRoZSBGUFUgc3RhY2suCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heFZh
bHVlICogcGVyY2VudCgpIC8gMTAwLjBmKSk7CiAgICAgICAgICAgICBjYXNlIEF1dG86CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTYwLDExICsxNjMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAg
Y2FzZSBBdXRvOgogICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obWF4
VmFsdWUpOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHVuZGVmaW5lZExlbmd0aCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PigwKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdCB7
IHJldHVybiB2YWx1ZSgpID09IHVuZGVmaW5lZExlbmd0aDsgfQorICAgIGJvb2wgaXNVbmRlZmlu
ZWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVW5kZWZpbmVkOyB9CiAgICAgYm9vbCBpc1pl
cm8oKSBjb25zdCAKICAgICB7IAogICAgICAgICByZXR1cm4gbV9pc0Zsb2F0ID8gIW1fZmxvYXRW
YWx1ZSA6ICFtX2ludFZhbHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCShyZXZpc2lvbiA5NTEzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NjgsNyArNDc2OCw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2EKICAgICAgICAgbV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVD
b250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkp
KTsKICAgICB9CiAgICAgCi0gICAgaWYgKHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpLmlzRml4
ZWQoKSAmJiBzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExl
bmd0aCkgeworICAgIGlmIChzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsK
ICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPmxvZ2lj
YWxNYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9n
aWNhbFdpZHRoKHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gOTUxMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94Ojpjb21w
dXQKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1p
bldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgp
LmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVu
Z3RoKSB7CisgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAg
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZh
bHVlKCkpKTsKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxl
KCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24g
OTUxMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBSZW5kZXJGaWxl
VXBsb2FkQ29udHJvbDo6Y29tcHV0ZVByZQogICAgIGVsc2UKICAgICAgICAgbV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKIAotICAgIGlmIChz
dHlsZS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUtPm1heFdpZHRoKCkudmFsdWUoKSAh
PSB1bmRlZmluZWRMZW5ndGgpIHsKKyAgICBpZiAoc3R5bGUtPm1heFdpZHRoKCkuaXNGaXhlZCgp
KSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZS0+bWF4
V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxX
aWR0aChzdHlsZS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA5NTEzMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
NSw2ICs0ODUsNyBAQCBib29sIFJlbmRlckltYWdlOjppc0xvZ2ljYWxXaWR0aFNwZWNpZmllCiAg
ICAgICAgIGNhc2UgUmVsYXRpdmU6IC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyBjYXNlIHJldHVy
biB0cnVlPwogICAgICAgICBjYXNlIEludHJpbnNpYzoKICAgICAgICAgY2FzZSBNaW5JbnRyaW5z
aWM6CisgICAgICAgIGNhc2UgVW5kZWZpbmVkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICBBU1NFUlQoZmFsc2UpOwpAQCAtNTAxLDYgKzUwMiw3IEBAIGJvb2wgUmVuZGVy
SW1hZ2U6OmlzTG9naWNhbEhlaWdodFNwZWNpZmkKICAgICAgICAgY2FzZSBSZWxhdGl2ZTogLy8g
RklYTUU6IFNob3VsZG4ndCB0aGlzIGNhc2UgcmV0dXJuIHRydWU/CiAgICAgICAgIGNhc2UgSW50
cmluc2ljOgogICAgICAgICBjYXNlIE1pbkludHJpbnNpYzoKKyAgICAgICAgY2FzZSBVbmRlZmlu
ZWQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIEFTU0VSVChmYWxzZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZp
c2lvbiA5NTEzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6
Y29tcHV0ZVByZWZlcnJlZExvZ2kKICAgICBlbHNlCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAKLSAgICBpZiAoc3R5bGUo
KS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9
IHVuZGVmaW5lZExlbmd0aCkgeworICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQo
KSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpIHsKICAgICAgICAgbV9tYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVD
b250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAg
ICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2lj
YWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgo
KS52YWx1ZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA5NTEzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBA
QCB2b2lkIFJlbmRlck1lbnVMaXN0Ojpjb21wdXRlUHJlZmVycmVkTG9nCiAgICAgZWxzZQogICAg
ICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoOwogCi0gICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKKyAgICBpZiAoc3R5bGUo
KS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsKICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94
TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgICAgICBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwg
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgp
KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwCShyZXZpc2lvbiA5NTEzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIFJl
bmRlclJlcGxhY2VkOjpjb21wdXRlUHJlZmVycmVkTG9nCiAgICAgTGF5b3V0VW5pdCBib3JkZXJB
bmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoZmFsc2UpICsgYm9yZGVy
QW5kUGFkZGluZzsKIAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQorICAgIGlmIChz
dHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkKICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIHN0eWxlKCktPm1heFdp
ZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IGJv
cmRlckFuZFBhZGRpbmcgOiAwKSk7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNl
bnQoKSB8fCBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHJldmlzaW9uIDk1MTMzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgz
LDcgKzgzLDcgQEAgdm9pZCBSZW5kZXJTbGlkZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpYwogICAg
IGVsc2UKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aDsKICAgICAKLSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVk
KCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewor
ICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkgewogICAgICAgICBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29t
cHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7
CiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhX
aWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDk1MTMzKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjg4LDcgKzI4OCw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNvbXB1dGVQcmVmZXJyZWQK
ICAgICBlbHNlCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGg7CiAKLSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVk
KCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewor
ICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkgewogICAgICAgICBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29t
cHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7
CiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhX
aWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gOTUxMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM1Nyw3
ICsxMzU3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgaW5pdGlhbExldHRlcldvcmRTcGFj
aW5nKCkgeyByZXR1cm4gMDsgfQogICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbFNpemUoKSB7IHJl
dHVybiBMZW5ndGgoKTsgfQogICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbE1pblNpemUoKSB7IHJl
dHVybiBMZW5ndGgoMCwgRml4ZWQpOyB9Ci0gICAgc3RhdGljIExlbmd0aCBpbml0aWFsTWF4U2l6
ZSgpIHsgcmV0dXJuIExlbmd0aCh1bmRlZmluZWRMZW5ndGgsIEZpeGVkKTsgfQorICAgIHN0YXRp
YyBMZW5ndGggaW5pdGlhbE1heFNpemUoKSB7IHJldHVybiBMZW5ndGgoVW5kZWZpbmVkKTsgfQog
ICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbE9mZnNldCgpIHsgcmV0dXJuIExlbmd0aCgpOyB9CiAg
ICAgc3RhdGljIExlbmd0aCBpbml0aWFsTWFyZ2luKCkgeyByZXR1cm4gTGVuZ3RoKEZpeGVkKTsg
fQogICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbFBhZGRpbmcoKSB7IHJldHVybiBMZW5ndGgoRml4
ZWQpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5jcHAJKHJldmlzaW9uIDk1MTMzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZv
aWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2kKICAgICBMYXlvdXRVbml0IGJv
cmRlckFuZFBhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKICAgICBMYXlvdXRVbml0
IHdpZHRoID0gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGZhbHNlKSArIGJvcmRlckFuZFBh
ZGRpbmc7CiAKLSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkKKyAgICBpZiAoc3R5bGUo
KS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpCiAgICAgICAgIHdpZHRoID0gbWluKHdpZHRoLCBzdHls
ZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgKyAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVO
VF9CT1ggPyBib3JkZXJBbmRQYWRkaW5nIDogMCkpOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRo
KCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkgJiYgc3R5bGUoKS0+
aGVpZ2h0KCkuaXNQZXJjZW50KCkpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107461</attachid>
            <date>2011-09-14 23:28:45 -0700</date>
            <delta_ts>2011-09-15 16:16:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68057-20110915162842.patch</filename>
            <type>text/plain</type>
            <size>19797</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1MTQ4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDktMTQgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBFbGltaW5hdGUg
TGVuZ3RoOjp1bmRlZmluZWRMZW5ndGggPSAtMSBhbmQgcmVwbGFjZSB3aXRoIFVuZGVmaW5lZCBM
ZW5ndGhUeXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjgwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBhcHBlYXIgdG8gYmUgbWFueSBjYXNlcyB3aGVyZSAtMSBpcyBhY3R1YWxseSBhIHZh
bGlkIExlbmd0aC4KKyAgICAgICAgRW5jb2RpbmcgdGhlIHZhbGlkaXR5IG9mIExlbmd0aCBzZXBh
cmF0ZWx5IHRvIHRoZSB2YWx1ZSBpcyBhIG5hdHVyYWwgc29sdXRpb24uCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIC8gbm8gYmVoYXZpb3JhbCBjaGFuZ2VzLgorCisgICAgICAgICogY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZUFwcGx5UHJvcGVy
dHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1
ZSk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAgIChXZWJDb3JlOjpMZW5n
dGg6Okxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGg6OnZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6Okxlbmd0aDo6Y2FsY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6
Y2FsY01pblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6Y2FsY0Zsb2F0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6TGVuZ3RoOjppc1VuZGVmaW5lZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySW1hZ2U6OmlzTG9naWNhbFdpZHRoU3BlY2lmaWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlOjppc0xvZ2ljYWxIZWlnaHRTcGVjaWZpZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xp
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmluaXRpYWxNYXhTaXplKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorCiAyMDEx
LTA5LTE0ICBBbnRvaW5lIExhYm91ciAgPHBpbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBB
ZGRlZCBhIHB1cmUgdmlydHVhbCBjbGFzcyBDQ0xheWVyRGVsZWdhdGUgd2hpY2ggaGVscHMgdG8g
aXNvbGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAkocmV2aXNp
b24gOTUxNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjMsOCArMTQyMyw4
IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEYKICAgICAgICAgcmVz
dWx0ID0gYWRkQXR0cmlidXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25h
bWUoQVRLX1RFWFRfQVRUUl9SSVNFKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAKLSAgICBpbnQg
aW5kZW50YXRpb24gPSBzdHlsZS0+dGV4dEluZGVudCgpLmNhbGNWYWx1ZShvYmplY3QtPnNpemUo
KS53aWR0aCgpKTsKLSAgICBpZiAoaW5kZW50YXRpb24gIT0gdW5kZWZpbmVkTGVuZ3RoKSB7Cisg
ICAgaWYgKCFzdHlsZS0+dGV4dEluZGVudCgpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgaW50
IGluZGVudGF0aW9uID0gc3R5bGUtPnRleHRJbmRlbnQoKS5jYWxjVmFsdWUob2JqZWN0LT5zaXpl
KCkud2lkdGgoKSk7CiAgICAgICAgIGJ1ZmZlci5zZXQoZ19zdHJkdXBfcHJpbnRmKCIlaSIsIGlu
ZGVudGF0aW9uKSk7CiAgICAgICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3VsdCwg
YXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfSU5ERU5UKSwgYnVmZmVy
LmdldCgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gOTUxNDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5NSwxMyArMTM5NSwxMyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjCiAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFs
dWUoc3R5bGUtPnVzZXJNb2RpZnkoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWln
aHQ6IHsKICAgICAgICAgICAgIGNvbnN0IExlbmd0aCYgbWF4SGVpZ2h0ID0gc3R5bGUtPm1heEhl
aWdodCgpOwotICAgICAgICAgICAgaWYgKG1heEhlaWdodC5pc0ZpeGVkKCkgJiYgbWF4SGVpZ2h0
LnZhbHVlKCkgPT0gdW5kZWZpbmVkTGVuZ3RoKQorICAgICAgICAgICAgaWYgKG1heEhlaWdodC5p
c1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hl
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIHJldHVy
biBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShtYXhIZWlnaHQpOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhXaWR0aDogewogICAgICAgICAgICAgY29uc3Qg
TGVuZ3RoJiBtYXhXaWR0aCA9IHN0eWxlLT5tYXhXaWR0aCgpOwotICAgICAgICAgICAgaWYgKG1h
eFdpZHRoLmlzRml4ZWQoKSAmJiBtYXhXaWR0aC52YWx1ZSgpID09IHVuZGVmaW5lZExlbmd0aCkK
KyAgICAgICAgICAgIGlmIChtYXhXaWR0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb25lKTsKICAgICAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVW
YWx1ZShtYXhXaWR0aCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmNwcAkocmV2aXNpb24gOTUxNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNiArMjI2LDcgQEAg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKGNvbgogICAgICAgICAgICAgbV92
YWx1ZS5udW0gPSBsZW5ndGgucGVyY2VudCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgUmVsYXRpdmU6CisgICAgICAgIGNhc2UgVW5kZWZpbmVkOgogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC00MDAsNiAr
NDAxLDcgQEAgZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRAogICAgICAg
ICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAqIDEyLjAgLyA3Mi4wOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIHJldHVybiAtMS4wOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHJldmlzaW9uIDk1MTQ4KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyOCw3ICszMjgsNyBAQCBwcml2YXRlOgogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKICAgICAgICAgaWYgKG5vbmVFbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIGlmIChub25lVW5kZWZpbmVkKQotICAg
ICAgICAgICAgICAgIHNldFZhbHVlKHNlbGVjdG9yLT5zdHlsZSgpLCBMZW5ndGgodW5kZWZpbmVk
TGVuZ3RoLCBGaXhlZCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHNlbGVjdG9yLT5zdHls
ZSgpLCBMZW5ndGgoVW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc2VsZWN0b3ItPnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgZWxzZSBp
ZiAoaW50cmluc2ljRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZUludHJpbnNpYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lvbiA5
NTE0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCwxMSArMzAsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBpbnQg
dW5kZWZpbmVkTGVuZ3RoID0gLTE7CiBjb25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZm
ZmZmOyAvLyBtYXggdmFsdWUgZm9yIGEgMjgtYml0IGludAogY29uc3QgaW50IGludE1pbkZvckxl
bmd0aCA9ICgtMHg3ZmZmZmZmIC0gMSk7IC8vIG1pbiB2YWx1ZSBmb3IgYSAyOC1iaXQgaW50CiAK
LWVudW0gTGVuZ3RoVHlwZSB7IEF1dG8sIFJlbGF0aXZlLCBQZXJjZW50LCBGaXhlZCwgSW50cmlu
c2ljLCBNaW5JbnRyaW5zaWMgfTsKK2VudW0gTGVuZ3RoVHlwZSB7IEF1dG8sIFJlbGF0aXZlLCBQ
ZXJjZW50LCBGaXhlZCwgSW50cmluc2ljLCBNaW5JbnRyaW5zaWMsIFVuZGVmaW5lZCB9OwogCiBz
dHJ1Y3QgTGVuZ3RoIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU2LDE3ICs1
NSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgTGVuZ3RoKGZsb2F0IHYsIExlbmd0aFR5cGUgdCwg
Ym9vbCBxID0gZmFsc2UpCiAgICAgOiBtX2Zsb2F0VmFsdWUodiksIG1fcXVpcmsocSksIG1fdHlw
ZSh0KSwgbV9pc0Zsb2F0KHRydWUpCi0gICAgeyAgICAgICAgICAgIAorICAgIHsKICAgICB9CiAK
ICAgICBMZW5ndGgoZG91YmxlIHYsIExlbmd0aFR5cGUgdCwgYm9vbCBxID0gZmFsc2UpCiAgICAg
ICAgIDogbV9xdWlyayhxKSwgbV90eXBlKHQpLCBtX2lzRmxvYXQodHJ1ZSkKLSAgICB7ICAgICAg
ICAgICAKKyAgICB7CiAgICAgICAgIG1fZmxvYXRWYWx1ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pih2
KTsgICAgCiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExlbmd0aCYgbykgY29u
c3QgeyByZXR1cm4gKGdldEZsb2F0VmFsdWUoKSA9PSBvLmdldEZsb2F0VmFsdWUoKSkgJiYgKG1f
dHlwZSA9PSBvLm1fdHlwZSkgJiYgKG1fcXVpcmsgPT0gby5tX3F1aXJrKTsgfQotICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBMZW5ndGgmIG8pIGNvbnN0IHsgcmV0dXJuIChnZXRGbG9hdFZhbHVl
KCkgIT0gby5nZXRGbG9hdFZhbHVlKCkpIHx8IChtX3R5cGUgIT0gby5tX3R5cGUpIHx8IChtX3F1
aXJrICE9IG8ubV9xdWlyayk7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGVuZ3RoJiBv
KSBjb25zdCB7IHJldHVybiAobV90eXBlID09IG8ubV90eXBlKSAmJiAobV9xdWlyayA9PSBvLm1f
cXVpcmspICYmIChpc1VuZGVmaW5lZCgpIHx8IChnZXRGbG9hdFZhbHVlKCkgPT0gby5nZXRGbG9h
dFZhbHVlKCkpKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBMZW5ndGgmIG8pIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KIAogICAgIGNvbnN0IExlbmd0aCYgb3BlcmF0b3Iq
PShmbG9hdCB2KQogICAgIHsgICAgICAgIApAQCAtNzgsNyArNzcsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICB9CiAgICAgCi0gICAgaW50IHZhbHVlKCkgY29uc3Qgewor
ICAgIGludCB2YWx1ZSgpIGNvbnN0CisgICAgewogICAgICAgICByZXR1cm4gZ2V0SW50VmFsdWUo
KTsKICAgICB9CiAKQEAgLTEyMCw3ICsxMjAsOCBAQCBwdWJsaWM6CiAgICAgICAgICp0aGlzID0g
TGVuZ3RoKHZhbHVlLCBGaXhlZCk7CiAgICAgfQogCi0gICAgLy8gbm90ZTogd29ya3Mgb25seSBm
b3IgY2VydGFpbiB0eXBlcywgcmV0dXJucyB1bmRlZmluZWRMZW5ndGggb3RoZXJ3aXNlCisgICAg
Ly8gTm90ZTogTWF5IG9ubHkgYmUgY2FsbGVkIGZvciBGaXhlZCwgUGVyY2VudCBhbmQgQXV0byBs
ZW5ndGhzLgorICAgIC8vICAgICAgIE90aGVyIHR5cGVzIHdpbGwgQVNTRVJUIGluIG9yZGVyIHRv
IGNhdGNoIGludmFsaWQgbGVuZ3RoIGNhbGN1bGF0aW9ucy4KICAgICBpbnQgY2FsY1ZhbHVlKGlu
dCBtYXhWYWx1ZSwgYm9vbCByb3VuZFBlcmNlbnRhZ2VzID0gZmFsc2UpIGNvbnN0CiAgICAgewog
ICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgewpAQCAtMTI5LDkgKzEzMCwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNNaW5WYWx1ZShtYXhWYWx1ZSwgcm91bmRQZXJjZW50
YWdlcyk7CiAgICAgICAgICAgICBjYXNlIEF1dG86CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
eFZhbHVlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gdW5k
ZWZpbmVkTGVuZ3RoOworICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZToKKyAgICAgICAgICAgIGNh
c2UgSW50cmluc2ljOgorICAgICAgICAgICAgY2FzZSBNaW5JbnRyaW5zaWM6CisgICAgICAgICAg
ICBjYXNlIFVuZGVmaW5lZDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBpbnQgY2FsY01pblZh
bHVlKGludCBtYXhWYWx1ZSwgYm9vbCByb3VuZFBlcmNlbnRhZ2VzID0gZmFsc2UpIGNvbnN0CkBA
IC0xNDUsOSArMTUwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAvLyBEb24ndCByZW1v
dmUgdGhlIGV4dHJhIGNhc3QgdG8gZmxvYXQuIEl0IGlzIG5lZWRlZCBmb3Igcm91bmRpbmcgb24g
MzItYml0IEludGVsIG1hY2hpbmVzIHRoYXQgdXNlIHRoZSBGUFUgc3RhY2suCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heFZhbHVl
ICogcGVyY2VudCgpIC8gMTAwLjBmKSk7CiAgICAgICAgICAgICBjYXNlIEF1dG86Ci0gICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2Fz
ZSBSZWxhdGl2ZToKKyAgICAgICAgICAgIGNhc2UgSW50cmluc2ljOgorICAgICAgICAgICAgY2Fz
ZSBNaW5JbnRyaW5zaWM6CisgICAgICAgICAgICBjYXNlIFVuZGVmaW5lZDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKICAgICBmbG9hdCBjYWxjRmxvYXRWYWx1ZShpbnQgbWF4VmFsdWUpIGNvbnN0CkBA
IC0xNTksMTkgKzE2OSwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihtYXhWYWx1ZSAqIHBlcmNlbnQoKSAvIDEwMC4wZik7CiAgICAgICAgICAg
ICBjYXNlIEF1dG86CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Piht
YXhWYWx1ZSk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4odW5kZWZpbmVkTGVuZ3RoKTsKKyAgICAgICAgICAgIGNhc2UgUmVs
YXRpdmU6CisgICAgICAgICAgICBjYXNlIEludHJpbnNpYzoKKyAgICAgICAgICAgIGNhc2UgTWlu
SW50cmluc2ljOgorICAgICAgICAgICAgY2FzZSBVbmRlZmluZWQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgYm9vbCBpc1VuZGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlKCkgPT0gdW5k
ZWZpbmVkTGVuZ3RoOyB9CisgICAgYm9vbCBpc1VuZGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBVbmRlZmluZWQ7IH0KICAgICBib29sIGlzWmVybygpIGNvbnN0IAotICAgIHsgCisg
ICAgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm4gbV9p
c0Zsb2F0ID8gIW1fZmxvYXRWYWx1ZSA6ICFtX2ludFZhbHVlOwogICAgIH0KICAgICAKLSAgICBi
b29sIGlzUG9zaXRpdmUoKSBjb25zdCB7IHJldHVybiBnZXRGbG9hdFZhbHVlKCkgPiAwOyB9Ci0g
ICAgYm9vbCBpc05lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxvYXRWYWx1ZSgpIDwgMDsg
fQorICAgIGJvb2wgaXNQb3NpdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGlzVW5kZWZpbmVkKCkgPyBm
YWxzZSA6IGdldEZsb2F0VmFsdWUoKSA+IDA7IH0KKyAgICBib29sIGlzTmVnYXRpdmUoKSBjb25z
dCB7IHJldHVybiBpc1VuZGVmaW5lZCgpID8gZmFsc2UgOiBnZXRGbG9hdFZhbHVlKCkgPCAwOyB9
CiAKICAgICBib29sIGlzQXV0bygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBBdXRvOyB9CiAg
ICAgYm9vbCBpc1JlbGF0aXZlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFJlbGF0aXZlOyB9
CkBAIC0yMDcsMTEgKzIyMiwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGludCBnZXRJbnRW
YWx1ZSgpIGNvbnN0CiAgICAgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWZpbmVkKCkpOwogICAg
ICAgICByZXR1cm4gbV9pc0Zsb2F0ID8gc3RhdGljX2Nhc3Q8aW50PihtX2Zsb2F0VmFsdWUpIDog
bV9pbnRWYWx1ZTsKICAgICB9CiAKICAgICBmbG9hdCBnZXRGbG9hdFZhbHVlKCkgY29uc3QKICAg
ICB7CisgICAgICAgIEFTU0VSVCghaXNVbmRlZmluZWQoKSk7CiAgICAgICAgIHJldHVybiBtX2lz
RmxvYXQgPyBtX2Zsb2F0VmFsdWUgOiBtX2ludFZhbHVlOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5NTE0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3NjgsNyArNDc2OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2EKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPmxv
Z2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKHN0eWxlKCkt
PmxvZ2ljYWxNYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgo
KS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgeworICAgIGlmIChzdHlsZSgpLT5sb2dpY2Fs
TWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsKICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9n
aWNhbFdpZHRoKHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAgICAg
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0
aCgpLnZhbHVlKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gOTUx
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxl
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgUmVuZGVyRGVw
cmVjYXRlZEZsZXhpYmxlQm94Ojpjb21wdXQKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBtYXgobV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94
TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAotICAg
IGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgp
LnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgaWYgKHN0eWxlKCktPm1heFdpZHRo
KCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWlu
KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0
aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAgICAgbV9taW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmNwcAkocmV2aXNpb24gOTUxNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyAr
MTg4LDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y29tcHV0ZVByZQogICAgIGVs
c2UKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aDsKIAotICAgIGlmIChzdHlsZS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5
bGUtPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKKyAgICBpZiAoc3R5
bGUtPm1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJv
eExvZ2ljYWxXaWR0aChzdHlsZS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShy
ZXZpc2lvbiA5NTE0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NSw2ICs0ODUsNyBAQCBib29sIFJlbmRlckltYWdlOjpp
c0xvZ2ljYWxXaWR0aFNwZWNpZmllCiAgICAgICAgIGNhc2UgUmVsYXRpdmU6IC8vIEZJWE1FOiBT
aG91bGRuJ3QgdGhpcyBjYXNlIHJldHVybiB0cnVlPwogICAgICAgICBjYXNlIEludHJpbnNpYzoK
ICAgICAgICAgY2FzZSBNaW5JbnRyaW5zaWM6CisgICAgICAgIGNhc2UgVW5kZWZpbmVkOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBBU1NFUlQoZmFsc2UpOwpAQCAtNTAx
LDYgKzUwMiw3IEBAIGJvb2wgUmVuZGVySW1hZ2U6OmlzTG9naWNhbEhlaWdodFNwZWNpZmkKICAg
ICAgICAgY2FzZSBSZWxhdGl2ZTogLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIGNhc2UgcmV0dXJu
IHRydWU/CiAgICAgICAgIGNhc2UgSW50cmluc2ljOgogICAgICAgICBjYXNlIE1pbkludHJpbnNp
YzoKKyAgICAgICAgY2FzZSBVbmRlZmluZWQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIEFTU0VSVChmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5NTE0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3
IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6Y29tcHV0ZVByZWZlcnJlZExvZ2kKICAgICBlbHNlCiAg
ICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGg7CiAKLSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgeworICAgIGlmIChzdHls
ZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkgewogICAgICAgICBtX21heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRC
b3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRo
LCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVl
KCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5jcHAJKHJldmlzaW9uIDk1MTQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQg
UmVuZGVyTWVudUxpc3Q6OmNvbXB1dGVQcmVmZXJyZWRMb2cKICAgICBlbHNlCiAgICAgICAgIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAK
LSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgeworICAgIGlmIChzdHlsZSgpLT5tYXhX
aWR0aCgpLmlzRml4ZWQoKSkgewogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRl
Q29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJ
KHJldmlzaW9uIDk1MTQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgUmVuZGVyUmVw
bGFjZWQ6OmNvbXB1dGVQcmVmZXJyZWRMb2cKICAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRp
bmcgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQYWRk
aW5nOwogCi0gICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpCisgICAgaWYgKHN0eWxlKCkt
Pm1heFdpZHRoKCkuaXNGaXhlZCgpKQogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52
YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5k
UGFkZGluZyA6IDApKTsKIAogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8
IHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkocmV2aXNpb24gOTUxNDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMs
NyBAQCB2b2lkIFJlbmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljCiAgICAgZWxzZQog
ICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoOwogICAgIAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgaWYg
KHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29u
dGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAg
ICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCku
dmFsdWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gOTUxNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNyAr
Mjg4LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZVByZWZlcnJlZAogICAgIGVs
c2UKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aDsKIAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgaWYg
KHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29u
dGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAg
ICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCku
dmFsdWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA5NTE0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU3LDcgKzEzNTcs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGludCBpbml0aWFsTGV0dGVyV29yZFNwYWNpbmcoKSB7
IHJldHVybiAwOyB9CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsU2l6ZSgpIHsgcmV0dXJuIExl
bmd0aCgpOyB9CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsTWluU2l6ZSgpIHsgcmV0dXJuIExl
bmd0aCgwLCBGaXhlZCk7IH0KLSAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxNYXhTaXplKCkgeyBy
ZXR1cm4gTGVuZ3RoKHVuZGVmaW5lZExlbmd0aCwgRml4ZWQpOyB9CisgICAgc3RhdGljIExlbmd0
aCBpbml0aWFsTWF4U2l6ZSgpIHsgcmV0dXJuIExlbmd0aChVbmRlZmluZWQpOyB9CiAgICAgc3Rh
dGljIExlbmd0aCBpbml0aWFsT2Zmc2V0KCkgeyByZXR1cm4gTGVuZ3RoKCk7IH0KICAgICBzdGF0
aWMgTGVuZ3RoIGluaXRpYWxNYXJnaW4oKSB7IHJldHVybiBMZW5ndGgoRml4ZWQpOyB9CiAgICAg
c3RhdGljIExlbmd0aCBpbml0aWFsUGFkZGluZygpIHsgcmV0dXJuIExlbmd0aChGaXhlZCk7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cAkocmV2aXNpb24gOTUxNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBSZW5k
ZXJTVkdSb290Ojpjb21wdXRlUHJlZmVycmVkTG9naQogICAgIExheW91dFVuaXQgYm9yZGVyQW5k
UGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwogICAgIExheW91dFVuaXQgd2lkdGgg
PSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoZmFsc2UpICsgYm9yZGVyQW5kUGFkZGluZzsK
IAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhX
aWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQorICAgIGlmIChzdHlsZSgpLT5tYXhX
aWR0aCgpLmlzRml4ZWQoKSkKICAgICAgICAgd2lkdGggPSBtaW4od2lkdGgsIHN0eWxlKCktPm1h
eFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/
IGJvcmRlckFuZFBhZGRpbmcgOiAwKSk7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1Bl
cmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWlnaHQo
KS5pc1BlcmNlbnQoKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107561</attachid>
            <date>2011-09-15 16:16:35 -0700</date>
            <delta_ts>2011-09-15 18:34:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68057-20110916091632.patch</filename>
            <type>text/plain</type>
            <size>19908</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1MjM4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDktMTQgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBFbGltaW5hdGUg
TGVuZ3RoOjp1bmRlZmluZWRMZW5ndGggPSAtMSBhbmQgcmVwbGFjZSB3aXRoIFVuZGVmaW5lZCBM
ZW5ndGhUeXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjgwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBhcHBlYXIgdG8gYmUgbWFueSBjYXNlcyB3aGVyZSAtMSBpcyBhY3R1YWxseSBhIHZh
bGlkIExlbmd0aC4KKyAgICAgICAgRW5jb2RpbmcgdGhlIHZhbGlkaXR5IG9mIExlbmd0aCBzZXBh
cmF0ZWx5IHRvIHRoZSB2YWx1ZSBpcyBhIG5hdHVyYWwgc29sdXRpb24uCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIC8gbm8gYmVoYXZpb3JhbCBjaGFuZ2VzLgorCisgICAgICAgICogY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZUFwcGx5UHJvcGVy
dHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1
ZSk6CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAgIChXZWJDb3JlOjpMZW5n
dGg6Okxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGg6OnZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6Okxlbmd0aDo6Y2FsY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6
Y2FsY01pblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6Y2FsY0Zsb2F0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6TGVuZ3RoOjppc1VuZGVmaW5lZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySW1hZ2U6OmlzTG9naWNhbFdpZHRoU3BlY2lmaWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckltYWdlOjppc0xvZ2ljYWxIZWlnaHRTcGVjaWZpZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xp
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmluaXRpYWxNYXhTaXplKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorCiAyMDEx
LTA5LTE1ICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAg
ICAgIENyYXNoIGluIFJlbmRlckJveDo6cGFpbnRNYXNrSW1hZ2VzIGR1ZSB0byBhIG1hc2sgd2l0
aG91dCBhbiBhc3NvY2lhdGVkIGltYWdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuY3BwCShyZXZpc2lvbiA5NTIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQyMyw4ICsxNDIzLDggQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0cmlidXRl
U2V0RgogICAgICAgICByZXN1bHQgPSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0
X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX1JJU0UpLCBidWZmZXIuZ2V0KCkpOwog
ICAgIH0KIAotICAgIGludCBpbmRlbnRhdGlvbiA9IHN0eWxlLT50ZXh0SW5kZW50KCkuY2FsY1Zh
bHVlKG9iamVjdC0+c2l6ZSgpLndpZHRoKCkpOwotICAgIGlmIChpbmRlbnRhdGlvbiAhPSB1bmRl
ZmluZWRMZW5ndGgpIHsKKyAgICBpZiAoIXN0eWxlLT50ZXh0SW5kZW50KCkuaXNVbmRlZmluZWQo
KSkgeworICAgICAgICBpbnQgaW5kZW50YXRpb24gPSBzdHlsZS0+dGV4dEluZGVudCgpLmNhbGNW
YWx1ZShvYmplY3QtPnNpemUoKS53aWR0aCgpKTsKICAgICAgICAgYnVmZmVyLnNldChnX3N0cmR1
cF9wcmludGYoIiVpIiwgaW5kZW50YXRpb24pKTsKICAgICAgICAgcmVzdWx0ID0gYWRkQXR0cmli
dXRlVG9TZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRU
Ul9JTkRFTlQpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA5NTIz
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzk1LDEzICsxMzk1LDEzIEBAIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1
ZUNhY2hlLT5jcmVhdGVWYWx1ZShzdHlsZS0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eU1heEhlaWdodDogewogICAgICAgICAgICAgY29uc3QgTGVuZ3RoJiBtYXhIZWln
aHQgPSBzdHlsZS0+bWF4SGVpZ2h0KCk7Ci0gICAgICAgICAgICBpZiAobWF4SGVpZ2h0LmlzRml4
ZWQoKSAmJiBtYXhIZWlnaHQudmFsdWUoKSA9PSB1bmRlZmluZWRMZW5ndGgpCisgICAgICAgICAg
ICBpZiAobWF4SGVpZ2h0LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBy
aW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwog
ICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKG1heEhl
aWdodCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOiB7CiAg
ICAgICAgICAgICBjb25zdCBMZW5ndGgmIG1heFdpZHRoID0gc3R5bGUtPm1heFdpZHRoKCk7Ci0g
ICAgICAgICAgICBpZiAobWF4V2lkdGguaXNGaXhlZCgpICYmIG1heFdpZHRoLnZhbHVlKCkgPT0g
dW5kZWZpbmVkTGVuZ3RoKQorICAgICAgICAgICAgaWYgKG1heFdpZHRoLmlzVW5kZWZpbmVkKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZh
bHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKG1heFdpZHRoKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiA5NTIzOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyNiw2ICsyMjYsNyBAQCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoY29u
CiAgICAgICAgICAgICBtX3ZhbHVlLm51bSA9IGxlbmd0aC5wZXJjZW50KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBSZWxhdGl2ZToKKyAgICAgICAgY2FzZSBVbmRlZmluZWQ6
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTQwMCw2ICs0MDEsNyBAQCBkb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1
dGVMZW5ndGhECiAgICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoICogMTIuMCAv
IDcyLjA7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIC0xLjA7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAko
cmV2aXNpb24gOTUyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3Bl
cnR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgaWYgKG5v
bmVVbmRlZmluZWQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc2VsZWN0b3ItPnN0eWxlKCks
IExlbmd0aCh1bmRlZmluZWRMZW5ndGgsIEZpeGVkKSk7CisgICAgICAgICAgICAgICAgc2V0VmFs
dWUoc2VsZWN0b3ItPnN0eWxlKCksIExlbmd0aChVbmRlZmluZWQpKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzZWxlY3Rvci0+c3R5bGUoKSwgTGVuZ3RoKCkp
OwogICAgICAgICBlbHNlIGlmIChpbnRyaW5zaWNFbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlSW50cmluc2ljKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVu
Z3RoLmgJKHJldmlzaW9uIDk1MjM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3Ro
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNvbnN0IGludCB1bmRlZmluZWRMZW5ndGggPSAtMTsKIGNvbnN0IGludCBpbnRNYXhG
b3JMZW5ndGggPSAweDdmZmZmZmY7IC8vIG1heCB2YWx1ZSBmb3IgYSAyOC1iaXQgaW50CiBjb25z
dCBpbnQgaW50TWluRm9yTGVuZ3RoID0gKC0weDdmZmZmZmYgLSAxKTsgLy8gbWluIHZhbHVlIGZv
ciBhIDI4LWJpdCBpbnQKIAotZW51bSBMZW5ndGhUeXBlIHsgQXV0bywgUmVsYXRpdmUsIFBlcmNl
bnQsIEZpeGVkLCBJbnRyaW5zaWMsIE1pbkludHJpbnNpYyB9OworZW51bSBMZW5ndGhUeXBlIHsg
QXV0bywgUmVsYXRpdmUsIFBlcmNlbnQsIEZpeGVkLCBJbnRyaW5zaWMsIE1pbkludHJpbnNpYywg
VW5kZWZpbmVkIH07CiAKIHN0cnVjdCBMZW5ndGggewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtNTYsMTcgKzU1LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICBMZW5ndGgoZmxvYXQg
diwgTGVuZ3RoVHlwZSB0LCBib29sIHEgPSBmYWxzZSkKICAgICA6IG1fZmxvYXRWYWx1ZSh2KSwg
bV9xdWlyayhxKSwgbV90eXBlKHQpLCBtX2lzRmxvYXQodHJ1ZSkKLSAgICB7ICAgICAgICAgICAg
CisgICAgewogICAgIH0KIAogICAgIExlbmd0aChkb3VibGUgdiwgTGVuZ3RoVHlwZSB0LCBib29s
IHEgPSBmYWxzZSkKICAgICAgICAgOiBtX3F1aXJrKHEpLCBtX3R5cGUodCksIG1faXNGbG9hdCh0
cnVlKQotICAgIHsgICAgICAgICAgIAorICAgIHsKICAgICAgICAgbV9mbG9hdFZhbHVlID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHYpOyAgICAKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgTGVuZ3RoJiBvKSBjb25zdCB7IHJldHVybiAoZ2V0RmxvYXRWYWx1ZSgpID09IG8uZ2V0Rmxv
YXRWYWx1ZSgpKSAmJiAobV90eXBlID09IG8ubV90eXBlKSAmJiAobV9xdWlyayA9PSBvLm1fcXVp
cmspOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExlbmd0aCYgbykgY29uc3QgeyByZXR1
cm4gKGdldEZsb2F0VmFsdWUoKSAhPSBvLmdldEZsb2F0VmFsdWUoKSkgfHwgKG1fdHlwZSAhPSBv
Lm1fdHlwZSkgfHwgKG1fcXVpcmsgIT0gby5tX3F1aXJrKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBMZW5ndGgmIG8pIGNvbnN0IHsgcmV0dXJuIChtX3R5cGUgPT0gby5tX3R5cGUpICYm
IChtX3F1aXJrID09IG8ubV9xdWlyaykgJiYgKGlzVW5kZWZpbmVkKCkgfHwgKGdldEZsb2F0VmFs
dWUoKSA9PSBvLmdldEZsb2F0VmFsdWUoKSkpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IExlbmd0aCYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQogCiAgICAgY29uc3Qg
TGVuZ3RoJiBvcGVyYXRvcio9KGZsb2F0IHYpCiAgICAgeyAgICAgICAgCkBAIC03OCw3ICs3Nyw4
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICAgICAKLSAgICBpbnQg
dmFsdWUoKSBjb25zdCB7CisgICAgaW50IHZhbHVlKCkgY29uc3QKKyAgICB7CiAgICAgICAgIHJl
dHVybiBnZXRJbnRWYWx1ZSgpOwogICAgIH0KIApAQCAtMTIwLDcgKzEyMCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgKnRoaXMgPSBMZW5ndGgodmFsdWUsIEZpeGVkKTsKICAgICB9CiAKLSAgICAvLyBu
b3RlOiB3b3JrcyBvbmx5IGZvciBjZXJ0YWluIHR5cGVzLCByZXR1cm5zIHVuZGVmaW5lZExlbmd0
aCBvdGhlcndpc2UKKyAgICAvLyBOb3RlOiBNYXkgb25seSBiZSBjYWxsZWQgZm9yIEZpeGVkLCBQ
ZXJjZW50IGFuZCBBdXRvIGxlbmd0aHMuCisgICAgLy8gICAgICAgT3RoZXIgdHlwZXMgd2lsbCBB
U1NFUlQgaW4gb3JkZXIgdG8gY2F0Y2ggaW52YWxpZCBsZW5ndGggY2FsY3VsYXRpb25zLgogICAg
IGludCBjYWxjVmFsdWUoaW50IG1heFZhbHVlLCBib29sIHJvdW5kUGVyY2VudGFnZXMgPSBmYWxz
ZSkgY29uc3QKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CkBAIC0xMjksOSArMTMw
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gY2FsY01pblZhbHVlKG1heFZh
bHVlLCByb3VuZFBlcmNlbnRhZ2VzKTsKICAgICAgICAgICAgIGNhc2UgQXV0bzoKICAgICAgICAg
ICAgICAgICByZXR1cm4gbWF4VmFsdWU7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiB1bmRlZmluZWRMZW5ndGg7CisgICAgICAgICAgICBjYXNlIFJlbGF0aXZl
OgorICAgICAgICAgICAgY2FzZSBJbnRyaW5zaWM6CisgICAgICAgICAgICBjYXNlIE1pbkludHJp
bnNpYzoKKyAgICAgICAgICAgIGNhc2UgVW5kZWZpbmVkOgorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAog
ICAgIGludCBjYWxjTWluVmFsdWUoaW50IG1heFZhbHVlLCBib29sIHJvdW5kUGVyY2VudGFnZXMg
PSBmYWxzZSkgY29uc3QKQEAgLTE0NSw5ICsxNTAsMTQgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIC8vIERvbid0IHJlbW92ZSB0aGUgZXh0cmEgY2FzdCB0byBmbG9hdC4gSXQgaXMgbmVlZGVk
IGZvciByb3VuZGluZyBvbiAzMi1iaXQgSW50ZWwgbWFjaGluZXMgdGhhdCB1c2UgdGhlIEZQVSBz
dGFjay4KICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2Fz
dDxmbG9hdD4obWF4VmFsdWUgKiBwZXJjZW50KCkgLyAxMDAuMGYpKTsKICAgICAgICAgICAgIGNh
c2UgQXV0bzoKLSAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBjYXNlIFJlbGF0aXZlOgorICAgICAgICAgICAgY2FzZSBJbnRyaW5zaWM6
CisgICAgICAgICAgICBjYXNlIE1pbkludHJpbnNpYzoKKyAgICAgICAgICAgIGNhc2UgVW5kZWZp
bmVkOgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGZsb2F0IGNhbGNGbG9hdFZhbHVlKGludCBt
YXhWYWx1ZSkgY29uc3QKQEAgLTE1OSwxOSArMTY5LDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heFZhbHVlICogcGVyY2VudCgpIC8gMTAw
LjBmKTsKICAgICAgICAgICAgIGNhc2UgQXV0bzoKICAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1heFZhbHVlKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih1bmRlZmluZWRMZW5ndGgpOworICAg
ICAgICAgICAgY2FzZSBSZWxhdGl2ZToKKyAgICAgICAgICAgIGNhc2UgSW50cmluc2ljOgorICAg
ICAgICAgICAgY2FzZSBNaW5JbnRyaW5zaWM6CisgICAgICAgICAgICBjYXNlIFVuZGVmaW5lZDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQorICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBib29sIGlzVW5kZWZpbmVkKCkgY29uc3QgeyByZXR1
cm4gdmFsdWUoKSA9PSB1bmRlZmluZWRMZW5ndGg7IH0KKyAgICBib29sIGlzVW5kZWZpbmVkKCkg
Y29uc3QgeyByZXR1cm4gdHlwZSgpID09IFVuZGVmaW5lZDsgfQogICAgIGJvb2wgaXNaZXJvKCkg
Y29uc3QgCi0gICAgeyAKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNVbmRlZmluZWQoKSk7CiAg
ICAgICAgIHJldHVybiBtX2lzRmxvYXQgPyAhbV9mbG9hdFZhbHVlIDogIW1faW50VmFsdWU7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaXNQb3NpdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsb2F0
VmFsdWUoKSA+IDA7IH0KLSAgICBib29sIGlzTmVnYXRpdmUoKSBjb25zdCB7IHJldHVybiBnZXRG
bG9hdFZhbHVlKCkgPCAwOyB9CisgICAgYm9vbCBpc1Bvc2l0aXZlKCkgY29uc3QgeyByZXR1cm4g
aXNVbmRlZmluZWQoKSA/IGZhbHNlIDogZ2V0RmxvYXRWYWx1ZSgpID4gMDsgfQorICAgIGJvb2wg
aXNOZWdhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGlzVW5kZWZpbmVkKCkgPyBmYWxzZSA6IGdldEZs
b2F0VmFsdWUoKSA8IDA7IH0KIAogICAgIGJvb2wgaXNBdXRvKCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpID09IEF1dG87IH0KICAgICBib29sIGlzUmVsYXRpdmUoKSBjb25zdCB7IHJldHVybiB0eXBl
KCkgPT0gUmVsYXRpdmU7IH0KQEAgLTIwNywxMSArMjIyLDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgaW50IGdldEludFZhbHVlKCkgY29uc3QKICAgICB7CisgICAgICAgIEFTU0VSVCghaXNV
bmRlZmluZWQoKSk7CiAgICAgICAgIHJldHVybiBtX2lzRmxvYXQgPyBzdGF0aWNfY2FzdDxpbnQ+
KG1fZmxvYXRWYWx1ZSkgOiBtX2ludFZhbHVlOwogICAgIH0KIAogICAgIGZsb2F0IGdldEZsb2F0
VmFsdWUoKSBjb25zdAogICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgcmV0dXJuIG1faXNGbG9hdCA/IG1fZmxvYXRWYWx1ZSA6IG1faW50VmFsdWU7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDk1MjM4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDc2OCw3ICs0NzY4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29t
cHV0ZVByZWZlcnJlZExvZ2ljYQogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1heChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
V2lkdGgoc3R5bGUoKS0+bG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KICAgICAK
LSAgICBpZiAoc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCkt
PmxvZ2ljYWxNYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgaWYg
KHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpLmlzRml4ZWQoKSkgewogICAgICAgICBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29t
cHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkudmFs
dWUoKSkpOwogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUo
KS0+bG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3gu
Y3BwCShyZXZpc2lvbiA5NTIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJE
ZXByZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDcg
QEAgdm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmNvbXB1dAogICAgICAgICBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwg
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgp
KSk7CiAgICAgfQogCi0gICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0
eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKKyAgICBpZiAo
c3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsKICAgICAgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250
ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgICAg
ICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52
YWx1ZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShyZXZpc2lvbiA5NTIzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpj
b21wdXRlUHJlCiAgICAgZWxzZQogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoOwogCi0gICAgaWYgKHN0eWxlLT5tYXhXaWR0aCgp
LmlzRml4ZWQoKSAmJiBzdHlsZS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0
aCkgeworICAgIGlmIChzdHlsZS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsKICAgICAgICAgbV9t
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgs
IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlLT5tYXhXaWR0aCgpLnZhbHVlKCkp
KTsKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlLT5tYXhX
aWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDk1MjM4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg2LDggKzQ4NiwxMSBAQCBi
b29sIFJlbmRlckltYWdlOjppc0xvZ2ljYWxXaWR0aFNwZWNpZmllCiAgICAgICAgIGNhc2UgSW50
cmluc2ljOgogICAgICAgICBjYXNlIE1pbkludHJpbnNpYzoKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgY2FzZSBVbmRlZmluZWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgQVNTRVJUKGZh
bHNlKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
QEAgLTUwMiw4ICs1MDUsMTEgQEAgYm9vbCBSZW5kZXJJbWFnZTo6aXNMb2dpY2FsSGVpZ2h0U3Bl
Y2lmaQogICAgICAgICBjYXNlIEludHJpbnNpYzoKICAgICAgICAgY2FzZSBNaW5JbnRyaW5zaWM6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVW5kZWZpbmVkOgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIEFTU0VSVChmYWxzZSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5NTIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6Y29tcHV0ZVByZWZlcnJlZExvZ2kKICAgICBlbHNlCiAgICAg
ICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lk
dGg7CiAKLSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+
bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgeworICAgIGlmIChzdHlsZSgp
LT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkgewogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hM
b2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkp
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5jcHAJKHJldmlzaW9uIDk1MjM4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgUmVu
ZGVyTWVudUxpc3Q6OmNvbXB1dGVQcmVmZXJyZWRMb2cKICAgICBlbHNlCiAgICAgICAgIG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAKLSAg
ICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgo
KS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgeworICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0
aCgpLmlzRml4ZWQoKSkgewogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1p
bihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lk
dGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29u
dGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJl
dmlzaW9uIDk1MjM4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgUmVuZGVyUmVwbGFj
ZWQ6OmNvbXB1dGVQcmVmZXJyZWRMb2cKICAgICBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmcg
PSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQYWRkaW5n
OwogCi0gICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1h
eFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpCisgICAgaWYgKHN0eWxlKCktPm1h
eFdpZHRoKCkuaXNGaXhlZCgpKQogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1
ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm9yZGVyQW5kUGFk
ZGluZyA6IDApKTsKIAogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IHN0
eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcAkocmV2aXNpb24gOTUyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCB2b2lkIFJlbmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljCiAgICAgZWxzZQogICAg
ICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoOwogICAgIAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHls
ZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgaWYgKHN0
eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVu
dEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAgICAg
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFs
dWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcAkocmV2aXNpb24gOTUyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNyArMjg4
LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZVByZWZlcnJlZAogICAgIGVsc2UK
ICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2lj
YWxXaWR0aDsKIAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHls
ZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgaWYgKHN0
eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVu
dEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAgICAg
bV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFs
dWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA5NTIzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU3LDcgKzEzNTcsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGludCBpbml0aWFsTGV0dGVyV29yZFNwYWNpbmcoKSB7IHJl
dHVybiAwOyB9CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsU2l6ZSgpIHsgcmV0dXJuIExlbmd0
aCgpOyB9CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsTWluU2l6ZSgpIHsgcmV0dXJuIExlbmd0
aCgwLCBGaXhlZCk7IH0KLSAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxNYXhTaXplKCkgeyByZXR1
cm4gTGVuZ3RoKHVuZGVmaW5lZExlbmd0aCwgRml4ZWQpOyB9CisgICAgc3RhdGljIExlbmd0aCBp
bml0aWFsTWF4U2l6ZSgpIHsgcmV0dXJuIExlbmd0aChVbmRlZmluZWQpOyB9CiAgICAgc3RhdGlj
IExlbmd0aCBpbml0aWFsT2Zmc2V0KCkgeyByZXR1cm4gTGVuZ3RoKCk7IH0KICAgICBzdGF0aWMg
TGVuZ3RoIGluaXRpYWxNYXJnaW4oKSB7IHJldHVybiBMZW5ndGgoRml4ZWQpOyB9CiAgICAgc3Rh
dGljIExlbmd0aCBpbml0aWFsUGFkZGluZygpIHsgcmV0dXJuIExlbmd0aChGaXhlZCk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAko
cmV2aXNpb24gOTUyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBSZW5kZXJT
VkdSb290Ojpjb21wdXRlUHJlZmVycmVkTG9naQogICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFk
ZGluZyA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwogICAgIExheW91dFVuaXQgd2lkdGggPSBj
b21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoZmFsc2UpICsgYm9yZGVyQW5kUGFkZGluZzsKIAot
ICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0
aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQorICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0
aCgpLmlzRml4ZWQoKSkKICAgICAgICAgd2lkdGggPSBtaW4od2lkdGgsIHN0eWxlKCktPm1heFdp
ZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IGJv
cmRlckFuZFBhZGRpbmcgOiAwKSk7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNl
bnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWlnaHQoKS5p
c1BlcmNlbnQoKSkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107580</attachid>
            <date>2011-09-15 18:34:26 -0700</date>
            <delta_ts>2011-09-19 18:19:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68057-20110916113423.patch</filename>
            <type>text/plain</type>
            <size>20030</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1MjQ0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDktMTUgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBFbGltaW5hdGUg
TGVuZ3RoOjp1bmRlZmluZWRMZW5ndGggPSAtMSBhbmQgcmVwbGFjZSB3aXRoIFVuZGVmaW5lZCBM
ZW5ndGhUeXBlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjgwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBU
aGVyZSBhcHBlYXIgdG8gYmUgbWFueSBjYXNlcyB3aGVyZSAtMSBpcyBhY3R1YWxseSBhIHZhbGlk
IExlbmd0aC4KKyAgICAgICAgRW5jb2RpbmcgdGhlIHZhbGlkaXR5IG9mIExlbmd0aCBzZXBhcmF0
ZWx5IHRvIHRoZSB2YWx1ZSBpcyBhIG5hdHVyYWwgc29sdXRpb24uCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIC8gbm8gYmVoYXZpb3JhbCBjaGFuZ2VzLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NQ
cmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxlbmd0aDo6YXBwbHlWYWx1ZSk6
CisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmg6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGg6
Okxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGg6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6Okxlbmd0aDo6Y2FsY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6Y2Fs
Y01pblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aDo6Y2FsY0Zsb2F0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGVuZ3RoOjppc1VuZGVmaW5lZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRl
cHJlY2F0ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySW1hZ2U6OmlzTG9naWNhbFdpZHRoU3BlY2lmaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckltYWdlOjppc0xvZ2ljYWxIZWlnaHRTcGVjaWZpZWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmluaXRpYWxNYXhTaXplKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorCiAyMDExLTA5
LTE1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4ODQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHAJKHJldmlzaW9uIDk1MjQ0KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIzLDggKzE0MjMsOCBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiBn
ZXRBdHRyaWJ1dGVTZXRGCiAgICAgICAgIHJlc3VsdCA9IGFkZEF0dHJpYnV0ZVRvU2V0KHJlc3Vs
dCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfUklTRSksIGJ1ZmZl
ci5nZXQoKSk7CiAgICAgfQogCi0gICAgaW50IGluZGVudGF0aW9uID0gc3R5bGUtPnRleHRJbmRl
bnQoKS5jYWxjVmFsdWUob2JqZWN0LT5zaXplKCkud2lkdGgoKSk7Ci0gICAgaWYgKGluZGVudGF0
aW9uICE9IHVuZGVmaW5lZExlbmd0aCkgeworICAgIGlmICghc3R5bGUtPnRleHRJbmRlbnQoKS5p
c1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGludCBpbmRlbnRhdGlvbiA9IHN0eWxlLT50ZXh0SW5k
ZW50KCkuY2FsY1ZhbHVlKG9iamVjdC0+c2l6ZSgpLndpZHRoKCkpOwogICAgICAgICBidWZmZXIu
c2V0KGdfc3RyZHVwX3ByaW50ZigiJWkiLCBpbmRlbnRhdGlvbikpOwogICAgICAgICByZXN1bHQg
PSBhZGRBdHRyaWJ1dGVUb1NldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShB
VEtfVEVYVF9BVFRSX0lOREVOVCksIGJ1ZmZlci5nZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJl
dmlzaW9uIDk1MjQ0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTUsMTMgKzEzOTUsMTMgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlYwogICAgICAgICAgICAgcmV0dXJuIHBy
aW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKHN0eWxlLT51c2VyTW9kaWZ5KCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5TWF4SGVpZ2h0OiB7CiAgICAgICAgICAgICBjb25zdCBMZW5n
dGgmIG1heEhlaWdodCA9IHN0eWxlLT5tYXhIZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChtYXhI
ZWlnaHQuaXNGaXhlZCgpICYmIG1heEhlaWdodC52YWx1ZSgpID09IHVuZGVmaW5lZExlbmd0aCkK
KyAgICAgICAgICAgIGlmIChtYXhIZWlnaHQuaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSk7CiAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRl
VmFsdWUobWF4SGVpZ2h0KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWF4
V2lkdGg6IHsKICAgICAgICAgICAgIGNvbnN0IExlbmd0aCYgbWF4V2lkdGggPSBzdHlsZS0+bWF4
V2lkdGgoKTsKLSAgICAgICAgICAgIGlmIChtYXhXaWR0aC5pc0ZpeGVkKCkgJiYgbWF4V2lkdGgu
dmFsdWUoKSA9PSB1bmRlZmluZWRMZW5ndGgpCisgICAgICAgICAgICBpZiAobWF4V2lkdGguaXNV
bmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICByZXR1cm4g
cHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUobWF4V2lkdGgpOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDk1
MjQ0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI2LDYgKzIyNiw3IEBAIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRp
dmVWYWx1ZShjb24KICAgICAgICAgICAgIG1fdmFsdWUubnVtID0gbGVuZ3RoLnBlcmNlbnQoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlbGF0aXZlOgorICAgICAgICBjYXNl
IFVuZGVmaW5lZDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtNDAwLDYgKzQwMSw3IEBAIGRvdWJsZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y29tcHV0ZUxlbmd0aEQKICAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1Blcklu
Y2ggKiAxMi4wIC8gNzIuMDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gLTEu
MDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVy
dHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJv
cGVydHkuY3BwCShyZXZpc2lvbiA5NTI0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZUFwcGx5UHJvcGVydHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlmIChub25lRW5hYmxl
ZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAg
ICAgICBpZiAobm9uZVVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzZWxlY3Rv
ci0+c3R5bGUoKSwgTGVuZ3RoKHVuZGVmaW5lZExlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgICAg
ICAgICBzZXRWYWx1ZShzZWxlY3Rvci0+c3R5bGUoKSwgTGVuZ3RoKFVuZGVmaW5lZCkpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHNlbGVjdG9yLT5zdHlsZSgp
LCBMZW5ndGgoKSk7CiAgICAgICAgIGVsc2UgaWYgKGludHJpbnNpY0VuYWJsZWQgJiYgcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9MZW5ndGguaAkocmV2aXNpb24gOTUyNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDEwIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY29uc3QgaW50IHVuZGVmaW5lZExlbmd0aCA9IC0xOwogY29uc3Qg
aW50IGludE1heEZvckxlbmd0aCA9IDB4N2ZmZmZmZjsgLy8gbWF4IHZhbHVlIGZvciBhIDI4LWJp
dCBpbnQKIGNvbnN0IGludCBpbnRNaW5Gb3JMZW5ndGggPSAoLTB4N2ZmZmZmZiAtIDEpOyAvLyBt
aW4gdmFsdWUgZm9yIGEgMjgtYml0IGludAogCi1lbnVtIExlbmd0aFR5cGUgeyBBdXRvLCBSZWxh
dGl2ZSwgUGVyY2VudCwgRml4ZWQsIEludHJpbnNpYywgTWluSW50cmluc2ljIH07CitlbnVtIExl
bmd0aFR5cGUgeyBBdXRvLCBSZWxhdGl2ZSwgUGVyY2VudCwgRml4ZWQsIEludHJpbnNpYywgTWlu
SW50cmluc2ljLCBVbmRlZmluZWQgfTsKIAogc3RydWN0IExlbmd0aCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC01NiwxNyArNTUsMTcgQEAgcHVibGljOgogICAgIAogICAgIExl
bmd0aChmbG9hdCB2LCBMZW5ndGhUeXBlIHQsIGJvb2wgcSA9IGZhbHNlKQogICAgIDogbV9mbG9h
dFZhbHVlKHYpLCBtX3F1aXJrKHEpLCBtX3R5cGUodCksIG1faXNGbG9hdCh0cnVlKQotICAgIHsg
ICAgICAgICAgICAKKyAgICB7CiAgICAgfQogCiAgICAgTGVuZ3RoKGRvdWJsZSB2LCBMZW5ndGhU
eXBlIHQsIGJvb2wgcSA9IGZhbHNlKQogICAgICAgICA6IG1fcXVpcmsocSksIG1fdHlwZSh0KSwg
bV9pc0Zsb2F0KHRydWUpCi0gICAgeyAgICAgICAgICAgCisgICAgewogICAgICAgICBtX2Zsb2F0
VmFsdWUgPSBzdGF0aWNfY2FzdDxmbG9hdD4odik7ICAgIAogICAgIH0KIAotICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBMZW5ndGgmIG8pIGNvbnN0IHsgcmV0dXJuIChnZXRGbG9hdFZhbHVlKCkg
PT0gby5nZXRGbG9hdFZhbHVlKCkpICYmIChtX3R5cGUgPT0gby5tX3R5cGUpICYmIChtX3F1aXJr
ID09IG8ubV9xdWlyayk7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTGVuZ3RoJiBvKSBj
b25zdCB7IHJldHVybiAoZ2V0RmxvYXRWYWx1ZSgpICE9IG8uZ2V0RmxvYXRWYWx1ZSgpKSB8fCAo
bV90eXBlICE9IG8ubV90eXBlKSB8fCAobV9xdWlyayAhPSBvLm1fcXVpcmspOyB9CisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IExlbmd0aCYgbykgY29uc3QgeyByZXR1cm4gKG1fdHlwZSA9PSBv
Lm1fdHlwZSkgJiYgKG1fcXVpcmsgPT0gby5tX3F1aXJrKSAmJiAoaXNVbmRlZmluZWQoKSB8fCAo
Z2V0RmxvYXRWYWx1ZSgpID09IG8uZ2V0RmxvYXRWYWx1ZSgpKSk7IH0KKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgTGVuZ3RoJiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9CiAK
ICAgICBjb25zdCBMZW5ndGgmIG9wZXJhdG9yKj0oZmxvYXQgdikKICAgICB7ICAgICAgICAKQEAg
LTc4LDcgKzc3LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogICAg
IAotICAgIGludCB2YWx1ZSgpIGNvbnN0IHsKKyAgICBpbnQgdmFsdWUoKSBjb25zdAorICAgIHsK
ICAgICAgICAgcmV0dXJuIGdldEludFZhbHVlKCk7CiAgICAgfQogCkBAIC0xMjAsNyArMTIwLDgg
QEAgcHVibGljOgogICAgICAgICAqdGhpcyA9IExlbmd0aCh2YWx1ZSwgRml4ZWQpOwogICAgIH0K
IAotICAgIC8vIG5vdGU6IHdvcmtzIG9ubHkgZm9yIGNlcnRhaW4gdHlwZXMsIHJldHVybnMgdW5k
ZWZpbmVkTGVuZ3RoIG90aGVyd2lzZQorICAgIC8vIE5vdGU6IE1heSBvbmx5IGJlIGNhbGxlZCBm
b3IgRml4ZWQsIFBlcmNlbnQgYW5kIEF1dG8gbGVuZ3Rocy4KKyAgICAvLyBPdGhlciB0eXBlcyB3
aWxsIEFTU0VSVCBpbiBvcmRlciB0byBjYXRjaCBpbnZhbGlkIGxlbmd0aCBjYWxjdWxhdGlvbnMu
CiAgICAgaW50IGNhbGNWYWx1ZShpbnQgbWF4VmFsdWUsIGJvb2wgcm91bmRQZXJjZW50YWdlcyA9
IGZhbHNlKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKQEAgLTEyOSw5
ICsxMzAsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVybiBjYWxjTWluVmFsdWUo
bWF4VmFsdWUsIHJvdW5kUGVyY2VudGFnZXMpOwogICAgICAgICAgICAgY2FzZSBBdXRvOgogICAg
ICAgICAgICAgICAgIHJldHVybiBtYXhWYWx1ZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZExlbmd0aDsKKyAgICAgICAgICAgIGNhc2UgUmVs
YXRpdmU6CisgICAgICAgICAgICBjYXNlIEludHJpbnNpYzoKKyAgICAgICAgICAgIGNhc2UgTWlu
SW50cmluc2ljOgorICAgICAgICAgICAgY2FzZSBVbmRlZmluZWQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAogICAgIGludCBjYWxjTWluVmFsdWUoaW50IG1heFZhbHVlLCBib29sIHJvdW5kUGVyY2Vu
dGFnZXMgPSBmYWxzZSkgY29uc3QKQEAgLTE0NSw5ICsxNTIsMTYgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIC8vIERvbid0IHJlbW92ZSB0aGUgZXh0cmEgY2FzdCB0byBmbG9hdC4gSXQgaXMg
bmVlZGVkIGZvciByb3VuZGluZyBvbiAzMi1iaXQgSW50ZWwgbWFjaGluZXMgdGhhdCB1c2UgdGhl
IEZQVSBzdGFjay4KICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGF0
aWNfY2FzdDxmbG9hdD4obWF4VmFsdWUgKiBwZXJjZW50KCkgLyAxMDAuMGYpKTsKICAgICAgICAg
ICAgIGNhc2UgQXV0bzoKLSAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBjYXNlIFJlbGF0aXZlOgorICAgICAgICAgICAgY2FzZSBJbnRy
aW5zaWM6CisgICAgICAgICAgICBjYXNlIE1pbkludHJpbnNpYzoKKyAgICAgICAgICAgIGNhc2Ug
VW5kZWZpbmVkOgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBmbG9hdCBjYWxjRmxvYXRWYWx1
ZShpbnQgbWF4VmFsdWUpIGNvbnN0CkBAIC0xNTksMTkgKzE3MywyNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtYXhWYWx1ZSAqIHBlcmNlbnQo
KSAvIDEwMC4wZik7CiAgICAgICAgICAgICBjYXNlIEF1dG86CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtYXhWYWx1ZSk7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odW5kZWZpbmVkTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGNhc2UgUmVsYXRpdmU6CisgICAgICAgICAgICBjYXNlIEludHJpbnNp
YzoKKyAgICAgICAgICAgIGNhc2UgTWluSW50cmluc2ljOgorICAgICAgICAgICAgY2FzZSBVbmRl
ZmluZWQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25z
dCB7IHJldHVybiB2YWx1ZSgpID09IHVuZGVmaW5lZExlbmd0aDsgfQorICAgIGJvb2wgaXNVbmRl
ZmluZWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVW5kZWZpbmVkOyB9CiAgICAgYm9vbCBp
c1plcm8oKSBjb25zdCAKLSAgICB7IAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgcmV0dXJuIG1faXNGbG9hdCA/ICFtX2Zsb2F0VmFsdWUgOiAhbV9pbnRW
YWx1ZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1Bvc2l0aXZlKCkgY29uc3QgeyByZXR1cm4g
Z2V0RmxvYXRWYWx1ZSgpID4gMDsgfQotICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuIGdldEZsb2F0VmFsdWUoKSA8IDA7IH0KKyAgICBib29sIGlzUG9zaXRpdmUoKSBjb25zdCB7
IHJldHVybiBpc1VuZGVmaW5lZCgpID8gZmFsc2UgOiBnZXRGbG9hdFZhbHVlKCkgPiAwOyB9Cisg
ICAgYm9vbCBpc05lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gaXNVbmRlZmluZWQoKSA/IGZhbHNl
IDogZ2V0RmxvYXRWYWx1ZSgpIDwgMDsgfQogCiAgICAgYm9vbCBpc0F1dG8oKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gQXV0bzsgfQogICAgIGJvb2wgaXNSZWxhdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBSZWxhdGl2ZTsgfQpAQCAtMjA3LDExICsyMjgsMTMgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBpbnQgZ2V0SW50VmFsdWUoKSBjb25zdAogICAgIHsKKyAgICAgICAgQVNT
RVJUKCFpc1VuZGVmaW5lZCgpKTsKICAgICAgICAgcmV0dXJuIG1faXNGbG9hdCA/IHN0YXRpY19j
YXN0PGludD4obV9mbG9hdFZhbHVlKSA6IG1faW50VmFsdWU7CiAgICAgfQogCiAgICAgZmxvYXQg
Z2V0RmxvYXRWYWx1ZSgpIGNvbnN0CiAgICAgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWZpbmVk
KCkpOwogICAgICAgICByZXR1cm4gbV9pc0Zsb2F0ID8gbV9mbG9hdFZhbHVlIDogbV9pbnRWYWx1
ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAkocmV2aXNpb24gOTUyNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzY4LDcgKzQ3NjgsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJv
eExvZ2ljYWxXaWR0aChzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAg
fQogICAgIAotICAgIGlmIChzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYg
c3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsK
KyAgICBpZiAoc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAg
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5sb2dpY2FsTWF4V2lk
dGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWlu
KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0
aChzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveC5jcHAJKHJldmlzaW9uIDk1MjQ0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3
ICsyMDIsNyBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6Y29tcHV0CiAgICAg
ICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgp
LnZhbHVlKCkpKTsKICAgICB9CiAKLSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVk
KCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewor
ICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkgewogICAgICAgICBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29t
cHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7
CiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhX
aWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDk1MjQ0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OmNvbXB1dGVQcmUKICAgICBlbHNlCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAKLSAgICBpZiAoc3R5bGUtPm1h
eFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZp
bmVkTGVuZ3RoKSB7CisgICAgaWYgKHN0eWxlLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkgewogICAg
ICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2lj
YWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUtPm1heFdpZHRoKCku
dmFsdWUoKSkpOwogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5
bGUtPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gOTUyNDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODYsOCArNDg2
LDExIEBAIGJvb2wgUmVuZGVySW1hZ2U6OmlzTG9naWNhbFdpZHRoU3BlY2lmaWUKICAgICAgICAg
Y2FzZSBJbnRyaW5zaWM6CiAgICAgICAgIGNhc2UgTWluSW50cmluc2ljOgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIFVuZGVmaW5lZDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBB
U1NFUlQoZmFsc2UpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApAQCAtNTAyLDggKzUwNSwxMSBAQCBib29sIFJlbmRlckltYWdlOjppc0xvZ2ljYWxI
ZWlnaHRTcGVjaWZpCiAgICAgICAgIGNhc2UgSW50cmluc2ljOgogICAgICAgICBjYXNlIE1pbklu
dHJpbnNpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBVbmRlZmlu
ZWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgQVNTRVJUKGZhbHNlKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDk1MjQ0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyAr
MTk0LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojpjb21wdXRlUHJlZmVycmVkTG9naQogICAgIGVs
c2UKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aDsKIAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgaWYg
KHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29u
dGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAg
ICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCku
dmFsdWUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAkocmV2aXNpb24gOTUyNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjczLDcgQEAg
dm9pZCBSZW5kZXJNZW51TGlzdDo6Y29tcHV0ZVByZWZlcnJlZExvZwogICAgIGVsc2UKICAgICAg
ICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0
aDsKIAotICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5t
YXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7CisgICAgaWYgKHN0eWxlKCkt
Pm1heFdpZHRoKCkuaXNGaXhlZCgpKSB7CiAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExv
Z2ljYWxXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAgICAgbV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNv
bXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmNwcAkocmV2aXNpb24gOTUyNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTcsNyArMzk3LDcgQEAgdm9pZCBSZW5k
ZXJSZXBsYWNlZDo6Y29tcHV0ZVByZWZlcnJlZExvZwogICAgIExheW91dFVuaXQgYm9yZGVyQW5k
UGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdXaWR0aCgpOwogICAgIG1fbWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGZhbHNlKSArIGJvcmRlckFu
ZFBhZGRpbmc7CiAKLSAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkKKyAgICBpZiAoc3R5
bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpCiAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBzdHlsZSgpLT5tYXhXaWR0
aCgpLnZhbHVlKCkgKyAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBib3Jk
ZXJBbmRQYWRkaW5nIDogMCkpOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50
KCkgfHwgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiA5NTI0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3
ICs4Myw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyOjpjb21wdXRlUHJlZmVycmVkTG9naWMKICAgICBl
bHNlCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGg7CiAgICAgCi0gICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgp
ICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKKyAg
ICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsKICAgICAgICAgbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1
dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwog
ICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA5NTI0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
OCw3ICsyODgsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjb21wdXRlUHJlZmVycmVkCiAg
ICAgZWxzZQogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoOwogCi0gICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgp
ICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKKyAg
ICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkpIHsKICAgICAgICAgbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGNvbXB1
dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwog
ICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDk1MjQ0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNTcsNyAr
MTM1Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50IGluaXRpYWxMZXR0ZXJXb3JkU3BhY2lu
ZygpIHsgcmV0dXJuIDA7IH0KICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxTaXplKCkgeyByZXR1
cm4gTGVuZ3RoKCk7IH0KICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxNaW5TaXplKCkgeyByZXR1
cm4gTGVuZ3RoKDAsIEZpeGVkKTsgfQotICAgIHN0YXRpYyBMZW5ndGggaW5pdGlhbE1heFNpemUo
KSB7IHJldHVybiBMZW5ndGgodW5kZWZpbmVkTGVuZ3RoLCBGaXhlZCk7IH0KKyAgICBzdGF0aWMg
TGVuZ3RoIGluaXRpYWxNYXhTaXplKCkgeyByZXR1cm4gTGVuZ3RoKFVuZGVmaW5lZCk7IH0KICAg
ICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxPZmZzZXQoKSB7IHJldHVybiBMZW5ndGgoKTsgfQogICAg
IHN0YXRpYyBMZW5ndGggaW5pdGlhbE1hcmdpbigpIHsgcmV0dXJuIExlbmd0aChGaXhlZCk7IH0K
ICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxQYWRkaW5nKCkgeyByZXR1cm4gTGVuZ3RoKEZpeGVk
KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwCShyZXZpc2lvbiA5NTI0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lk
IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVQcmVmZXJyZWRMb2dpCiAgICAgTGF5b3V0VW5pdCBib3Jk
ZXJBbmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAgICAgTGF5b3V0VW5pdCB3
aWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQYWRk
aW5nOwogCi0gICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpCisgICAgaWYgKHN0eWxlKCkt
Pm1heFdpZHRoKCkuaXNGaXhlZCgpKQogICAgICAgICB3aWR0aCA9IG1pbih3aWR0aCwgc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRf
Qk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IDApKTsKIAogICAgIGlmIChzdHlsZSgpLT53aWR0aCgp
LmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhl
aWdodCgpLmlzUGVyY2VudCgpKSkgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>