<?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>78647</bug_id>
          
          <creation_ts>2012-02-14 15:54:39 -0800</creation_ts>
          <short_desc>Switch drawLineForBoxSide to use integers</short_desc>
          <delta_ts>2012-02-23 19:55:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556724</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-14 15:54:39 -0800</bug_when>
    <thetext>drawLineForBoxSide handles painting lines for boxes which it&apos;s important to be done on pixel boundaries. Its interface doesn&apos;t make it possible to pixel snap properly within the function itself -- it draws one side of the box at a time, and the logical right and bottom lines can only be properly determined using the logical top and left positions -- so it needs to be treated like a graphics context function, whereby the caller handles the proper pixel snapping before passing the values in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556834</commentid>
    <comment_count>1</comment_count>
      <attachid>127094</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-14 18:02:07 -0800</bug_when>
    <thetext>Created attachment 127094
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556860</commentid>
    <comment_count>2</comment_count>
      <attachid>127094</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-14 18:36:48 -0800</bug_when>
    <thetext>Comment on attachment 127094
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:2506
&gt; +                // FIXME: These values will be pixel snapped before being passed to drawLineForBoxSide.

Why does this code have to wait? Can’t we add some pixel-snaping inline functions now that do nothing when fractional positioning is off?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557326</commentid>
    <comment_count>3</comment_count>
      <attachid>127094</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-15 09:40:09 -0800</bug_when>
    <thetext>Comment on attachment 127094
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:2506
&gt;&gt; +                // FIXME: These values will be pixel snapped before being passed to drawLineForBoxSide.
&gt; 
&gt; Why does this code have to wait? Can’t we add some pixel-snaping inline functions now that do nothing when fractional positioning is off?

Here is the code being left out: http://trac.webkit.org/changeset/107640/branches/subpixellayout/Source/WebCore/rendering/RenderBlock.cpp

There are a few reasons why I&apos;ve chosen to not use entirely inline functions to get trunk looking like our subpixel branch:
- There are places where pixel snapping involves calling additional non-inline functions, the results of which will just be thrown out.
- We&apos;ll need to use explicit wrapping on constants (think zero mostly) used in places like ternary operators.
- I&apos;m partial to putting methods like round() directly on the FractionalLayoutUnit class, which we obviously can&apos;t do for integral types.

The last point was my rationale here. If you disagree, I&apos;ll happily go the inline route.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557341</commentid>
    <comment_count>4</comment_count>
      <attachid>127094</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-15 09:58:52 -0800</bug_when>
    <thetext>Comment on attachment 127094
Patch

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

Please consider my comments.

&gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:2506
&gt;&gt;&gt; +                // FIXME: These values will be pixel snapped before being passed to drawLineForBoxSide.
&gt;&gt; 
&gt;&gt; Why does this code have to wait? Can’t we add some pixel-snaping inline functions now that do nothing when fractional positioning is off?
&gt; 
&gt; Here is the code being left out: http://trac.webkit.org/changeset/107640/branches/subpixellayout/Source/WebCore/rendering/RenderBlock.cpp
&gt; 
&gt; There are a few reasons why I&apos;ve chosen to not use entirely inline functions to get trunk looking like our subpixel branch:
&gt; - There are places where pixel snapping involves calling additional non-inline functions, the results of which will just be thrown out.
&gt; - We&apos;ll need to use explicit wrapping on constants (think zero mostly) used in places like ternary operators.
&gt; - I&apos;m partial to putting methods like round() directly on the FractionalLayoutUnit class, which we obviously can&apos;t do for integral types.
&gt; 
&gt; The last point was my rationale here. If you disagree, I&apos;ll happily go the inline route.

&gt; There are places where pixel snapping involves calling additional functions, the results of which will just be thrown out.

I’d like to raise the level of abstraction a bit and use a well named function rather than four lines of code in cases like this:

    int pixelSnappedRuleLeft = ruleLeft.round(); 
    int pixelSnappedRuleRight = snapSizeToPixel(ruleRight - ruleLeft, ruleLeft) + pixelSnappedRuleLeft; 
    int pixelSnappedRuleTop = ruleTop.round(); 
    int pixelSnappedRuleBottom = snapSizeToPixel(ruleBottom - ruleTop, ruleTop) + pixelSnappedRuleTop; 

I think this should be a function that takes a rectangle or other struct and returns one rather than code written out like this. The name of the function can be the best documentation for something like this.

I also think that drawLineForBoxSide should take a struct, not four separate layout unit arguments.

&gt; We&apos;ll need to use explicit wrapping on constants (think zero mostly) used in places like ternary operators.

I think that best for this is a named constant zeroLayoutUnit or something like that. Actual explicit wrapping is far inferior.

&gt; I&apos;m partial to putting methods like round() directly on the FractionalLayoutUnit class, which we obviously can&apos;t do for integral types.

I don’t think that member functions are better than non-member functions for this sort of thing. I’d like to see us add these functions and start using them in TOT instead of having adding them be a part of flipping the switch. I’d like to see almost no code changes at all required when flipping the switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557370</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-15 10:30:54 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 127094 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127094&amp;action=review
&gt; 
&gt; Please consider my comments.
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:2506
&gt; &gt;&gt;&gt; +                // FIXME: These values will be pixel snapped before being passed to drawLineForBoxSide.
&gt; &gt;&gt; 
&gt; &gt;&gt; Why does this code have to wait? Can’t we add some pixel-snaping inline functions now that do nothing when fractional positioning is off?
&gt; &gt; 
&gt; &gt; Here is the code being left out: http://trac.webkit.org/changeset/107640/branches/subpixellayout/Source/WebCore/rendering/RenderBlock.cpp
&gt; &gt; 
&gt; &gt; There are a few reasons why I&apos;ve chosen to not use entirely inline functions to get trunk looking like our subpixel branch:
&gt; &gt; - There are places where pixel snapping involves calling additional non-inline functions, the results of which will just be thrown out.
&gt; &gt; - We&apos;ll need to use explicit wrapping on constants (think zero mostly) used in places like ternary operators.
&gt; &gt; - I&apos;m partial to putting methods like round() directly on the FractionalLayoutUnit class, which we obviously can&apos;t do for integral types.
&gt; &gt; 
&gt; &gt; The last point was my rationale here. If you disagree, I&apos;ll happily go the inline route.
&gt; 
&gt; &gt; There are places where pixel snapping involves calling additional functions, the results of which will just be thrown out.
&gt; 
&gt; I’d like to raise the level of abstraction a bit and use a well named function rather than four lines of code in cases like this:
&gt; 
&gt;     int pixelSnappedRuleLeft = ruleLeft.round(); 
&gt;     int pixelSnappedRuleRight = snapSizeToPixel(ruleRight - ruleLeft, ruleLeft) + pixelSnappedRuleLeft; 
&gt;     int pixelSnappedRuleTop = ruleTop.round(); 
&gt;     int pixelSnappedRuleBottom = snapSizeToPixel(ruleBottom - ruleTop, ruleTop) + pixelSnappedRuleTop; 
&gt; 
&gt; I think this should be a function that takes a rectangle or other struct and returns one rather than code written out like this. The name of the function can be the best documentation for something like this.

Good point.

&gt; 
&gt; I also think that drawLineForBoxSide should take a struct, not four separate layout unit arguments.

Agreed. It only ends up being really ugly in RenderInline::paintOutlineForLine.

&gt; 
&gt; &gt; We&apos;ll need to use explicit wrapping on constants (think zero mostly) used in places like ternary operators.
&gt; 
&gt; I think that best for this is a named constant zeroLayoutUnit or something like that. Actual explicit wrapping is far inferior.

We&apos;ve been trying to avoid explicit wrapping wherever possible, but there are quite a few un-named constants that seem to come from nowhere. Just adding a zero constant would solve many of these... I&apos;ll create that one.

&gt; 
&gt; &gt; I&apos;m partial to putting methods like round() directly on the FractionalLayoutUnit class, which we obviously can&apos;t do for integral types.
&gt; 
&gt; I don’t think that member functions are better than non-member functions for this sort of thing. I’d like to see us add these functions and start using them in TOT instead of having adding them be a part of flipping the switch. I’d like to see almost no code changes at all required when flipping the switch.

Thanks for sharing your thoughts. I&apos;ll work to make that happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557652</commentid>
    <comment_count>6</comment_count>
      <attachid>127253</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-15 15:41:49 -0800</bug_when>
    <thetext>Created attachment 127253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557654</commentid>
    <comment_count>7</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-15 15:42:14 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=127253) [details]
&gt; Patch

Hey Darin, I think this is a better patch (nothing is left out :)

Mind taking another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559310</commentid>
    <comment_count>8</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-17 10:37:11 -0800</bug_when>
    <thetext>Darin? Eric? Take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562375</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-22 14:11:38 -0800</bug_when>
    <thetext>One more friendly ping :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562742</commentid>
    <comment_count>10</comment_count>
      <attachid>127253</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-22 20:00:49 -0800</bug_when>
    <thetext>Comment on attachment 127253
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:2537
&gt; +            IntRect pixelSnappedRuleRect = pixelSnappedIntRect(ruleRect);
&gt;              drawLineForBoxSide(paintInfo.context, ruleRect.x(), ruleRect.y(), ruleRect.maxX(), ruleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias);

Um...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563333</commentid>
    <comment_count>11</comment_count>
      <attachid>128525</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-23 11:58:21 -0800</bug_when>
    <thetext>Created attachment 128525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563409</commentid>
    <comment_count>12</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-23 13:24:26 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 127253 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127253&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.cpp:2537
&gt; &gt; +            IntRect pixelSnappedRuleRect = pixelSnappedIntRect(ruleRect);
&gt; &gt;              drawLineForBoxSide(paintInfo.context, ruleRect.x(), ruleRect.y(), ruleRect.maxX(), ruleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias);
&gt; 
&gt; Um...

Good catch... take another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563444</commentid>
    <comment_count>13</comment_count>
      <attachid>128525</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-23 13:57:56 -0800</bug_when>
    <thetext>Comment on attachment 128525
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:2597
&gt; +                drawLineForBoxSide(paintInfo.context, pixelSnappedRuleRect.x(), pixelSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnappedRuleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias);

Seems we should have a version of this method which takes a rect?  Possibly a LayoutRect event...

&gt; Source/WebCore/rendering/RenderInline.cpp:1459
&gt; +    IntRect pixelSnappedBox = pixelSnappedIntRect(box);

I would have used &quot;snappedBox&quot; or something shorter.  pixelBox?  intBox?

&gt; Source/WebCore/rendering/RenderInline.cpp:1534
&gt; +            pixelSnappedBox.maxY(),
&gt; +            pixelSnappedBox.maxX() + outlineWidth,
&gt; +            pixelSnappedBox.maxY() + outlineWidth,

This seems like a theme... seems like we should have a helper method to help with this theme...

&gt; Source/WebCore/rendering/RenderObject.cpp:1184
&gt; +    int leftOuter = outer.x();
&gt; +    int leftInner = inner.x();
&gt; +    int rightOuter = outer.maxX();
&gt; +    int rightInner = inner.maxX();

Oh, split coords, you are so error prone. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563471</commentid>
    <comment_count>14</comment_count>
      <attachid>128525</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-02-23 14:17:20 -0800</bug_when>
    <thetext>Comment on attachment 128525
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:2597
&gt;&gt; +                drawLineForBoxSide(paintInfo.context, pixelSnappedRuleRect.x(), pixelSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnappedRuleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias);
&gt; 
&gt; Seems we should have a version of this method which takes a rect?  Possibly a LayoutRect event...

We could turn the current contract into an inline version that builds an IntRect for the real implementation. We wouldn&apos;t want to use a LayoutRect though... we don&apos;t have enough information by the time we get into this function to do pixel snapping in the RenderInline case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563856</commentid>
    <comment_count>15</comment_count>
      <attachid>128525</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 19:55:33 -0800</bug_when>
    <thetext>Comment on attachment 128525
Patch

Clearing flags on attachment: 128525

Committed r108719: &lt;http://trac.webkit.org/changeset/108719&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563857</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 19:55:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127094</attachid>
            <date>2012-02-14 18:02:07 -0800</date>
            <delta_ts>2012-02-15 15:41:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78647-20120214180206.patch</filename>
            <type>text/plain</type>
            <size>14455</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzc2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAyLTE0ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBTd2l0Y2ggZHJhd0xpbmVG
b3JCb3hTaWRlIHRvIHVzZSBpbnRlZ2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBkcmF3TGluZUZvckJveFNpZGUgaGFuZGxlcyBwYWludGluZyBsaW5l
cyBmb3IgYm94ZXMgd2hpY2ggbXVzdCBiZSBkb25lIG9uIHBpeGVsIGJvdW5kYXJpZXMuCisgICAg
ICAgIEl0cyBpbnRlcmZhY2UgZG9lc24ndCBtYWtlIGl0IHBvc3NpYmxlIHRvIHBpeGVsIHNuYXAg
cHJvcGVybHkgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYgLS0KKyAgICAgICAgaXQgZHJhd3Mg
b25lIHNpZGUgb2YgdGhlIGJveCBhdCBhIHRpbWUsIGFuZCB0aGUgbG9naWNhbCByaWdodCBhbmQg
Ym90dG9tIGxpbmVzIGNhbiBvbmx5IGJlCisgICAgICAgIHByb3Blcmx5IGRldGVybWluZWQgdXNp
bmcgdGhlIGxvZ2ljYWwgdG9wIGFuZCBsZWZ0IHBvc2l0aW9ucyAtLSBzbyBpdCBuZWVkcyB0byBi
ZSB0cmVhdGVkIAorICAgICAgICBsaWtlIGEgZ3JhcGhpY3MgY29udGV4dCBmdW5jdGlvbiwgd2hl
cmVieSB0aGUgY2FsbGVyIGhhbmRsZXMgdGhlIHByb3BlciBwaXhlbCBzbmFwcGluZyBiZWZvcmUK
KyAgICAgICAgcGFzc2luZyB0aGUgdmFsdWVzIGluLgorCisgICAgICAgIE5vdCBhbGwgY2hhbmdl
cyB0byBzdXBwb3J0IG1ha2Ugc2Vuc2UgdG8gYmUgaW4gdHJ1bmsgdW50aWwgd2Ugc3dpdGNoIHRv
IHN1YnBpeGVsIHBvc2l0aW9uaW5nLgorICAgICAgICBGaXhtZXMgd2VyZSBhZGRlZCB0byB0aGUg
c3BvdHMgd2hlcmUgYWRkaXRpb25hbCBsb2dpYyB3aWxsIGdvLiBTZWUKKyAgICAgICAgaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTA3NjQwIGZvciB0aGUgcmVtYWluaW5nIGxvZ2lj
IGFzIGl0IHdlbnQgaW50byB0aGUKKyAgICAgICAgc3VicGl4ZWxsYXlvdXQgYnJhbmNoLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpwYWludENvbHVtblJ1bGVzKTogUGl4ZWwgc25hcHBpbmcgdGhlIGNvbHVtbiBydWxlIHJlY3Qg
YW5kIGFkZGluZyBhCisgICAgICAgIGZpeG1lIHdoZXJlIGFkZGl0aW9uYWwgc25hcHBpbmcgbG9n
aWMgd2lsbCBsaXZlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRPbmVCb3Jk
ZXJTaWRlKTogU2lkZSByZWN0cyBhcmUgbm93IEludFJlY3RzIGJ5IHRoZSB0aW1lCisgICAgICAg
IHRoZXkgZ2V0IHRvIHBhaW50T25lQm9yZGVyU2lkZS4KKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1
bGF0ZVNpZGVSZWN0KTogUHJvcGVybHkgdXNlIFJvdW5kZWRSZWN0IGFzIEludFJlY3RzIGluc3Rl
YWQgb2YgTGF5b3V0UmVjdHMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnRCb3JkZXJTaWRlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjYWxj
dWxhdGVTaWRlUmVjdEluY2x1ZGluZ0lubmVyKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAgIChSZW5kZXJCb3hNb2RlbE9iamVjdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxpbmUpOiBPdXRsaW5lIHdpZHRocyBhcmUg
cmVsYXRlZCB0byBib3JkZXJzIGFuZCBzdG9yZWQKKyAgICAgICAgYXMgaW50cy4gUmVtb3Zpbmcg
YW4gdW5uZWNlc3NhcnkgY29udmVyc2lvbiB0byBMYXlvdXRVbml0cy4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
ZHJhd0xpbmVGb3JCb3hTaWRlKTogQWRkaW5nIGEgZml4bWUgd2hlcmUgYWRkaXRpb25hbCBwaXhl
bCBzbmFwcGluZworICAgICAgICBsb2dpYyB3aWxsIGxpdmUuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZSk6IFBpeGVsIHNuYXBwaW5nIHRoZSBjb2x1bW4gcnVs
ZSByZWN0LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFJl
bmRlck9iamVjdCk6CisKIDIwMTItMDItMTQgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDb21wYXJlIGZpbHRlcnMgb24gaW1wbCB0aHJl
YWQgd2hlbiBzZXR0aW5nIHRoZW0sIGFuZCB0ZXN0IHNldHRpbmcgaW4gdW5pdCB0ZXN0cwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxMDc3
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAzLDYgKzI1MDMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVt
blJ1bGVzKFBhaW50CiAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTm93IHBhaW50IHRoZSBj
b2x1bW4gcnVsZS4KICAgICAgICAgICAgIGlmIChpIDwgY29sQ291bnQgLSAxKSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFRoZXNlIHZhbHVlcyB3aWxsIGJlIHBpeGVsIHNuYXBwZWQgYmVm
b3JlIGJlaW5nIHBhc3NlZCB0byBkcmF3TGluZUZvckJveFNpZGUuCiAgICAgICAgICAgICAgICAg
TGF5b3V0VW5pdCBydWxlTGVmdCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwYWludE9m
ZnNldC54KCkgKyBydWxlTG9naWNhbExlZnQgLSBydWxlVGhpY2tuZXNzIC8gMiArIHJ1bGVBZGQg
OiBwYWludE9mZnNldC54KCkgKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgcnVsZVJpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IHJ1bGVMZWZ0ICsgcnVsZVRoaWNrbmVzcyA6IHJ1bGVMZWZ0ICsgY29udGVudFdpZHRoKCk7
CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBydWxlVG9wID0gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IHBhaW50T2Zmc2V0LnkoKSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIDog
cGFpbnRPZmZzZXQueSgpICsgcnVsZUxvZ2ljYWxMZWZ0IC0gcnVsZVRoaWNrbmVzcyAvIDIgKyBy
dWxlQWRkOwpAQCAtMjUzMiw2ICsyNTMzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1
bW5SdWxlcyhQYWludAogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjb2xDb3Vu
dDsgaSsrKSB7CiAgICAgICAgICAgICBydWxlUmVjdC5tb3ZlKHN0ZXApOworICAgICAgICAgICAg
SW50UmVjdCBwaXhlbFNuYXBwZWRSdWxlUmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QocnVsZVJl
Y3QpOwogICAgICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKHBhaW50SW5mby5jb250ZXh0LCBy
dWxlUmVjdC54KCksIHJ1bGVSZWN0LnkoKSwgcnVsZVJlY3QubWF4WCgpLCBydWxlUmVjdC5tYXhZ
KCksIGJveFNpZGUsIHJ1bGVDb2xvciwgcnVsZVN0eWxlLCAwLCAwLCBhbnRpYWxpYXMpOwogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMDc3NDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTI3LDcgKzE1MjcsNyBAQCBzdGF0aWMgYm9vbCBqb2luUmVxdWlyZXNNaXRyZShCb3hTaWRlIHNp
CiB9CiAKIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50T25lQm9yZGVyU2lkZShHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IFJvdW5kZWRSZWN0JiBpbm5lckJv
cmRlciwKLSAgICBjb25zdCBMYXlvdXRSZWN0JiBzaWRlUmVjdCwgQm94U2lkZSBzaWRlLCBCb3hT
aWRlIGFkamFjZW50U2lkZTEsIEJveFNpZGUgYWRqYWNlbnRTaWRlMiwgY29uc3QgQm9yZGVyRWRn
ZSBlZGdlc1tdLCBjb25zdCBQYXRoKiBwYXRoLAorICAgIGNvbnN0IEludFJlY3QmIHNpZGVSZWN0
LCBCb3hTaWRlIHNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRlMSwgQm94U2lkZSBhZGphY2VudFNp
ZGUyLCBjb25zdCBCb3JkZXJFZGdlIGVkZ2VzW10sIGNvbnN0IFBhdGgqIHBhdGgsCiAgICAgQmFj
a2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVMb2dpY2Fs
TGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGJvb2wgYW50aWFsaWFzLCBj
b25zdCBDb2xvciogb3ZlcnJpZGVDb2xvcikKIHsKICAgICBjb25zdCBCb3JkZXJFZGdlJiBlZGdl
VG9SZW5kZXIgPSBlZGdlc1tzaWRlXTsKQEAgLTE1NzIsOSArMTU3Miw5IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50T25lQm9yZGUKICAgICB9CiB9CiAKLXN0YXRpYyBMYXlvdXRS
ZWN0IGNhbGN1bGF0ZVNpZGVSZWN0KGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29u
c3QgQm9yZGVyRWRnZSBlZGdlc1tdLCBpbnQgc2lkZSkKK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0
ZVNpZGVSZWN0KGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgQm9yZGVyRWRn
ZSBlZGdlc1tdLCBpbnQgc2lkZSkKIHsKLSAgICBMYXlvdXRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJC
b3JkZXIucmVjdCgpOworICAgIEludFJlY3Qgc2lkZVJlY3QgPSBvdXRlckJvcmRlci5yZWN0KCk7
CiAgICAgaW50IHdpZHRoID0gZWRnZXNbc2lkZV0ud2lkdGg7CiAKICAgICBpZiAoc2lkZSA9PSBC
U1RvcCkKQEAgLTE2MDAsNyArMTYwMCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50Qm9yZGVyU2kKICAgICAgICAgcm91bmRlZFBhdGguYWRkUm91bmRlZFJlY3Qob3V0ZXJCb3Jk
ZXIpOwogICAgIAogICAgIGlmIChlZGdlc1tCU1RvcF0uc2hvdWxkUmVuZGVyKCkgJiYgaW5jbHVk
ZXNFZGdlKGVkZ2VTZXQsIEJTVG9wKSkgewotICAgICAgICBMYXlvdXRSZWN0IHNpZGVSZWN0ID0g
b3V0ZXJCb3JkZXIucmVjdCgpOworICAgICAgICBJbnRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3Jk
ZXIucmVjdCgpOwogICAgICAgICBzaWRlUmVjdC5zZXRIZWlnaHQoZWRnZXNbQlNUb3BdLndpZHRo
KTsKIAogICAgICAgICBib29sIHVzZVBhdGggPSByZW5kZXJSYWRpaSAmJiAoYm9yZGVyU3R5bGVI
YXNJbm5lckRldGFpbChlZGdlc1tCU1RvcF0uc3R5bGUpIHx8IGJvcmRlcldpbGxBcmNJbm5lckVk
Z2UoaW5uZXJCb3JkZXIucmFkaWkoKS50b3BMZWZ0KCksIGlubmVyQm9yZGVyLnJhZGlpKCkudG9w
UmlnaHQoKSkpOwpAQCAtMTYwOCw3ICsxNjA4LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnRCb3JkZXJTaQogICAgIH0KIAogICAgIGlmIChlZGdlc1tCU0JvdHRvbV0uc2hvdWxk
UmVuZGVyKCkgJiYgaW5jbHVkZXNFZGdlKGVkZ2VTZXQsIEJTQm90dG9tKSkgewotICAgICAgICBM
YXlvdXRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOworICAgICAgICBJbnRSZWN0
IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwogICAgICAgICBzaWRlUmVjdC5zaGlmdFlF
ZGdlVG8oc2lkZVJlY3QubWF4WSgpIC0gZWRnZXNbQlNCb3R0b21dLndpZHRoKTsKIAogICAgICAg
ICBib29sIHVzZVBhdGggPSByZW5kZXJSYWRpaSAmJiAoYm9yZGVyU3R5bGVIYXNJbm5lckRldGFp
bChlZGdlc1tCU0JvdHRvbV0uc3R5bGUpIHx8IGJvcmRlcldpbGxBcmNJbm5lckVkZ2UoaW5uZXJC
b3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCksIGlubmVyQm9yZGVyLnJhZGlpKCkuYm90dG9tUmln
aHQoKSkpOwpAQCAtMTYxNiw3ICsxNjE2LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRCb3JkZXJTaQogICAgIH0KIAogICAgIGlmIChlZGdlc1tCU0xlZnRdLnNob3VsZFJlbmRl
cigpICYmIGluY2x1ZGVzRWRnZShlZGdlU2V0LCBCU0xlZnQpKSB7Ci0gICAgICAgIExheW91dFJl
Y3Qgc2lkZVJlY3QgPSBvdXRlckJvcmRlci5yZWN0KCk7CisgICAgICAgIEludFJlY3Qgc2lkZVJl
Y3QgPSBvdXRlckJvcmRlci5yZWN0KCk7CiAgICAgICAgIHNpZGVSZWN0LnNldFdpZHRoKGVkZ2Vz
W0JTTGVmdF0ud2lkdGgpOwogCiAgICAgICAgIGJvb2wgdXNlUGF0aCA9IHJlbmRlclJhZGlpICYm
IChib3JkZXJTdHlsZUhhc0lubmVyRGV0YWlsKGVkZ2VzW0JTTGVmdF0uc3R5bGUpIHx8IGJvcmRl
cldpbGxBcmNJbm5lckVkZ2UoaW5uZXJCb3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCksIGlubmVy
Qm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpKSk7CkBAIC0xNjI0LDcgKzE2MjQsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlclNpCiAgICAgfQogCiAgICAgaWYgKGVkZ2Vz
W0JTUmlnaHRdLnNob3VsZFJlbmRlcigpICYmIGluY2x1ZGVzRWRnZShlZGdlU2V0LCBCU1JpZ2h0
KSkgewotICAgICAgICBMYXlvdXRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwor
ICAgICAgICBJbnRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwogICAgICAgICBz
aWRlUmVjdC5zaGlmdFhFZGdlVG8oc2lkZVJlY3QubWF4WCgpIC0gZWRnZXNbQlNSaWdodF0ud2lk
dGgpOwogCiAgICAgICAgIGJvb2wgdXNlUGF0aCA9IHJlbmRlclJhZGlpICYmIChib3JkZXJTdHls
ZUhhc0lubmVyRGV0YWlsKGVkZ2VzW0JTUmlnaHRdLnN0eWxlKSB8fCBib3JkZXJXaWxsQXJjSW5u
ZXJFZGdlKGlubmVyQm9yZGVyLnJhZGlpKCkuYm90dG9tUmlnaHQoKSwgaW5uZXJCb3JkZXIucmFk
aWkoKS50b3BSaWdodCgpKSk7CkBAIC0xNzUzLDcgKzE3NTMsNyBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludEJvcmRlcihjCiAgICAgICAgICAgICBmb3IgKGludCBpID0gQlNUb3A7
IGkgPD0gQlNMZWZ0OyArK2kpIHsKICAgICAgICAgICAgICAgICBjb25zdCBCb3JkZXJFZGdlJiBj
dXJyRWRnZSA9IGVkZ2VzW2ldOwogICAgICAgICAgICAgICAgIGlmIChjdXJyRWRnZS5zaG91bGRS
ZW5kZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHNpZGVSZWN0ID0gY2Fs
Y3VsYXRlU2lkZVJlY3Qob3V0ZXJCb3JkZXIsIGVkZ2VzLCBpKTsKKyAgICAgICAgICAgICAgICAg
ICAgSW50UmVjdCBzaWRlUmVjdCA9IGNhbGN1bGF0ZVNpZGVSZWN0KG91dGVyQm9yZGVyLCBlZGdl
cywgaSk7CiAgICAgICAgICAgICAgICAgICAgIHBhdGguYWRkUmVjdChzaWRlUmVjdCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjM3NSw5ICsyMzc1LDkgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZAogICAgIGdyYXBoaWNzQ29udGV4dC0+
Y2xpcENvbnZleFBvbHlnb24oNCwgc2Vjb25kUXVhZCwgIXNlY29uZEVkZ2VNYXRjaGVzKTsKIH0K
IAotc3RhdGljIExheW91dFJlY3QgY2FsY3VsYXRlU2lkZVJlY3RJbmNsdWRpbmdJbm5lcihjb25z
dCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEJvcmRlckVkZ2UgZWRnZXNbXSwgQm94
U2lkZSBzaWRlKQorc3RhdGljIEludFJlY3QgY2FsY3VsYXRlU2lkZVJlY3RJbmNsdWRpbmdJbm5l
cihjb25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEJvcmRlckVkZ2UgZWRnZXNb
XSwgQm94U2lkZSBzaWRlKQogewotICAgIExheW91dFJlY3Qgc2lkZVJlY3QgPSBvdXRlckJvcmRl
ci5yZWN0KCk7CisgICAgSW50UmVjdCBzaWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKICAg
ICBpbnQgd2lkdGg7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiAxMDc3NDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjE4LDcgKzIxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQm94U2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRjaGVzLCBib29sIHNlY29u
ZEVkZ2VNYXRjaGVzKTsKICAgICB2b2lkIGNsaXBCb3JkZXJTaWRlRm9yQ29tcGxleElubmVyUGF0
aChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSb3VuZGVkUmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0
JiwgQm94U2lkZSwgY29uc3QgY2xhc3MgQm9yZGVyRWRnZVtdKTsKICAgICB2b2lkIHBhaW50T25l
Qm9yZGVyU2lkZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJv
dW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgUm91bmRlZFJlY3QmIGlubmVyQm9yZGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBzaWRlUmVj
dCwgQm94U2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUxLCBCb3hTaWRlIGFkamFjZW50U2lkZTIs
IGNvbnN0IGNsYXNzIEJvcmRlckVkZ2VbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgc2lkZVJlY3QsIEJveFNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRl
MSwgQm94U2lkZSBhZGphY2VudFNpZGUyLCBjb25zdCBjbGFzcyBCb3JkZXJFZGdlW10sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhdGgqLCBCYWNrZ3JvdW5kQmxlZWRB
dm9pZGFuY2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNh
bFJpZ2h0RWRnZSwgYm9vbCBhbnRpYWxpYXMsIGNvbnN0IENvbG9yKiBvdmVycmlkZUNvbG9yID0g
MCk7CiAgICAgdm9pZCBwYWludFRyYW5zbHVjZW50Qm9yZGVyU2lkZXMoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNv
bnN0IFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2xhc3MgQm9yZGVyRWRnZVtdLCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UsIGJvb2wg
aW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSwgYm9v
bCBhbnRpYWxpYXMgPSBmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTA3NzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDMsMTMgKzE0MDMsMTQg
QEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxpbmUoRwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sb3Igb3V0bGluZUNvbG9yKQogewog
ICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAgICBMYXlvdXRVbml0IG91
dGxpbmVXaWR0aCA9IHN0eWxlVG9Vc2UtPm91dGxpbmVXaWR0aCgpOworICAgIGludCBvdXRsaW5l
V2lkdGggPSBzdHlsZVRvVXNlLT5vdXRsaW5lV2lkdGgoKTsKICAgICBFQm9yZGVyU3R5bGUgb3V0
bGluZVN0eWxlID0gc3R5bGVUb1VzZS0+b3V0bGluZVN0eWxlKCk7CiAKICAgICBib29sIGFudGlh
bGlhcyA9IHNob3VsZEFudGlhbGlhc0xpbmVzKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBMYXlv
dXRVbml0IG9mZnNldCA9IHN0eWxlKCktPm91dGxpbmVPZmZzZXQoKTsKIAorICAgIC8vIEZJWE1F
OiBUaGVzZSB2YWx1ZXMgd2lsbCBiZSBwaXhlbCBzbmFwcGVkIGJlZm9yZSBiZWluZyBwYXNzZWQg
dG8gZHJhd0xpbmVGb3JCb3hTaWRlLgogICAgIExheW91dFVuaXQgdG9wID0gcGFpbnRPZmZzZXQu
eSgpICsgdGhpc2xpbmUueSgpIC0gb2Zmc2V0OwogICAgIExheW91dFVuaXQgbGVmdCA9IHBhaW50
T2Zmc2V0LngoKSArIHRoaXNsaW5lLngoKSAtIG9mZnNldDsKICAgICBMYXlvdXRVbml0IGJvdHRv
bSA9IHBhaW50T2Zmc2V0LnkoKSArIHRoaXNsaW5lLm1heFkoKSArIG9mZnNldDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxMDc3NDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzkwLDcgKzc5MCw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjptdXN0UmVwYWludEJh
Y2tncm91bmQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3
TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIExheW91dFVu
aXQgeDEsIExheW91dFVuaXQgeTEsIExheW91dFVuaXQgeDIsIExheW91dFVuaXQgeTIsCit2b2lk
IFJlbmRlck9iamVjdDo6ZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEVCb3Jk
ZXJTdHlsZSBzdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGFkamFjZW50V2lkdGgxLCBpbnQgYWRqYWNlbnRXaWR0aDIsIGJvb2wgYW50aWFsaWFzKQogewpA
QCAtMTEyNCw3ICsxMTI0LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShHcmFw
aGljcwogCiAgICAgQ29sb3Igb3V0bGluZUNvbG9yID0gc3R5bGVUb1VzZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yKTsKIAotICAgIExheW91dFVuaXQgb3V0
bGluZU9mZnNldCA9IHN0eWxlVG9Vc2UtPm91dGxpbmVPZmZzZXQoKTsKKyAgICBpbnQgb3V0bGlu
ZU9mZnNldCA9IHN0eWxlVG9Vc2UtPm91dGxpbmVPZmZzZXQoKTsKIAogICAgIGlmIChzdHlsZVRv
VXNlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSB8fCBoYXNPdXRsaW5lQW5ub3RhdGlvbigpKSB7CiAg
ICAgICAgIGlmICghdGhlbWUoKS0+c3VwcG9ydHNGb2N1c1Jpbmcoc3R5bGVUb1VzZSkpIHsKQEAg
LTExMzYsMTAgKzExMzYsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShHcmFw
aGljcwogICAgIGlmIChzdHlsZVRvVXNlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSB8fCBzdHlsZVRv
VXNlLT5vdXRsaW5lU3R5bGUoKSA9PSBCTk9ORSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5
b3V0UmVjdCBpbm5lciA9IHBhaW50UmVjdDsKKyAgICBJbnRSZWN0IGlubmVyID0gcGl4ZWxTbmFw
cGVkSW50UmVjdChwYWludFJlY3QpOwogICAgIGlubmVyLmluZmxhdGUob3V0bGluZU9mZnNldCk7
CiAKLSAgICBMYXlvdXRSZWN0IG91dGVyID0gaW5uZXI7CisgICAgSW50UmVjdCBvdXRlciA9IHBp
eGVsU25hcHBlZEludFJlY3QoaW5uZXIpOwogICAgIG91dGVyLmluZmxhdGUob3V0bGluZVdpZHRo
KTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHByZXZlbnRzIG91dGxpbmVzIGZyb20gcGFpbnRpbmcg
aW5zaWRlIHRoZSBvYmplY3QuIFNlZSBidWcgMTIwNDIKQEAgLTExNjEsMTQgKzExNjEsMTQgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShHcmFwaGljcwogICAgICAgICBvdXRsaW5l
Q29sb3IgPSBDb2xvcihvdXRsaW5lQ29sb3IucmVkKCksIG91dGxpbmVDb2xvci5ncmVlbigpLCBv
dXRsaW5lQ29sb3IuYmx1ZSgpKTsKICAgICB9CiAKLSAgICBMYXlvdXRVbml0IGxlZnRPdXRlciA9
IG91dGVyLngoKTsKLSAgICBMYXlvdXRVbml0IGxlZnRJbm5lciA9IGlubmVyLngoKTsKLSAgICBM
YXlvdXRVbml0IHJpZ2h0T3V0ZXIgPSBvdXRlci5tYXhYKCk7Ci0gICAgTGF5b3V0VW5pdCByaWdo
dElubmVyID0gaW5uZXIubWF4WCgpOwotICAgIExheW91dFVuaXQgdG9wT3V0ZXIgPSBvdXRlci55
KCk7Ci0gICAgTGF5b3V0VW5pdCB0b3BJbm5lciA9IGlubmVyLnkoKTsKLSAgICBMYXlvdXRVbml0
IGJvdHRvbU91dGVyID0gb3V0ZXIubWF4WSgpOwotICAgIExheW91dFVuaXQgYm90dG9tSW5uZXIg
PSBpbm5lci5tYXhZKCk7CisgICAgaW50IGxlZnRPdXRlciA9IG91dGVyLngoKTsKKyAgICBpbnQg
bGVmdElubmVyID0gaW5uZXIueCgpOworICAgIGludCByaWdodE91dGVyID0gb3V0ZXIubWF4WCgp
OworICAgIGludCByaWdodElubmVyID0gaW5uZXIubWF4WCgpOworICAgIGludCB0b3BPdXRlciA9
IG91dGVyLnkoKTsKKyAgICBpbnQgdG9wSW5uZXIgPSBpbm5lci55KCk7CisgICAgaW50IGJvdHRv
bU91dGVyID0gb3V0ZXIubWF4WSgpOworICAgIGludCBib3R0b21Jbm5lciA9IGlubmVyLm1heFko
KTsKICAgICAKICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBsZWZ0T3V0
ZXIsIHRvcE91dGVyLCBsZWZ0SW5uZXIsIGJvdHRvbU91dGVyLCBCU0xlZnQsIG91dGxpbmVDb2xv
ciwgb3V0bGluZVN0eWxlLCBvdXRsaW5lV2lkdGgsIG91dGxpbmVXaWR0aCk7CiAgICAgZHJhd0xp
bmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgbGVmdE91dGVyLCB0b3BPdXRlciwgcmlnaHRP
dXRlciwgdG9wSW5uZXIsIEJTVG9wLCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwgb3V0bGlu
ZVdpZHRoLCBvdXRsaW5lV2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAkocmV2aXNpb24gMTA3NzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjIsNyArODYyLDcgQEAgcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAgICAgdm9pZCBwcm9wYWdhdGVTdHlsZVRvQW5v
bnltb3VzQ2hpbGRyZW4oYm9vbCBibG9ja0NoaWxkcmVuT25seSA9IGZhbHNlKTsKIAotICAgIHZv
aWQgZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIExheW91dFVuaXQgeDEsIExh
eW91dFVuaXQgeTEsIExheW91dFVuaXQgeDIsIExheW91dFVuaXQgeTIsIEJveFNpZGUsCisgICAg
dm9pZCBkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHgxLCBpbnQgeTEs
IGludCB4MiwgaW50IHkyLCBCb3hTaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bG9yLCBFQm9yZGVyU3R5bGUsIGludCBhZGpidzEsIGludCBhZGpidzIsIGJvb2wgYW50aWFsaWFz
ID0gZmFsc2UpOwogCiAgICAgdm9pZCBwYWludEZvY3VzUmluZyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBMYXlvdXRQb2ludCYsIFJlbmRlclN0eWxlKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127253</attachid>
            <date>2012-02-15 15:41:49 -0800</date>
            <delta_ts>2012-02-23 11:58:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78647-20120215154148.patch</filename>
            <type>text/plain</type>
            <size>22941</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzc2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAyLTE0ICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBTd2l0Y2ggZHJhd0xpbmVG
b3JCb3hTaWRlIHRvIHVzZSBpbnRlZ2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBkcmF3TGluZUZvckJveFNpZGUgaGFuZGxlcyBwYWludGluZyBsaW5l
cyBmb3IgYm94ZXMgd2hpY2ggbXVzdCBiZSBkb25lIG9uIHBpeGVsIGJvdW5kYXJpZXMuCisgICAg
ICAgIEl0cyBpbnRlcmZhY2UgZG9lc24ndCBtYWtlIGl0IHBvc3NpYmxlIHRvIHBpeGVsIHNuYXAg
cHJvcGVybHkgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYgLS0KKyAgICAgICAgaXQgZHJhd3Mg
b25lIHNpZGUgb2YgdGhlIGJveCBhdCBhIHRpbWUsIGFuZCB0aGUgbG9naWNhbCByaWdodCBhbmQg
Ym90dG9tIGxpbmVzIGNhbiBvbmx5IGJlCisgICAgICAgIHByb3Blcmx5IGRldGVybWluZWQgdXNp
bmcgdGhlIGxvZ2ljYWwgdG9wIGFuZCBsZWZ0IHBvc2l0aW9ucyAtLSBzbyBpdCBuZWVkcyB0byBi
ZSB0cmVhdGVkIAorICAgICAgICBsaWtlIGEgZ3JhcGhpY3MgY29udGV4dCBmdW5jdGlvbiwgd2hl
cmVieSB0aGUgY2FsbGVyIGhhbmRsZXMgdGhlIHByb3BlciBwaXhlbCBzbmFwcGluZyBiZWZvcmUK
KyAgICAgICAgcGFzc2luZyB0aGUgdmFsdWVzIGluLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
Tm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFR5cGVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpwaXhlbFNuYXBwZWRJbnRSZWN0RnJvbUVkZ2VzKTogY29u
dmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJldHVybmluZyBhIHBpeGVsIHNuYXBwZWQKKyAgICAgICAg
aW50IHJlY3QgZnJvbSBmb3VyIExheW91dFVuaXRzIHRoYXQgYXJlIGl0cyBlZGdlcyAoYXMgb3Bw
b3NlZCB0byBwb3NpdGlvbiBhbmQgc2l6ZSkuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVz
KTogUGl4ZWwgc25hcHBpbmcgdGhlIGNvbHVtbiBydWxlIHJlY3QuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludE9uZUJvcmRlclNpZGUpOiBTaWRlIHJlY3RzIGFyZSBub3cgSW50
UmVjdHMgYnkgdGhlIHRpbWUKKyAgICAgICAgdGhleSBnZXQgdG8gcGFpbnRPbmVCb3JkZXJTaWRl
LgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU2lkZVJlY3QpOiBQcm9wZXJseSB1c2UgUm91
bmRlZFJlY3QgYXMgSW50UmVjdHMgaW5zdGVhZCBvZiBMYXlvdXRSZWN0cy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlclNpZGVzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVNpZGVSZWN0SW5jbHVkaW5nSW5uZXIpOiBE
aXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAg
ICAgKFJlbmRlckJveE1vZGVsT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9y
TGluZSk6IE91dGxpbmUgd2lkdGhzIGFyZSByZWxhdGVkIHRvIGJvcmRlcnMgYW5kIHN0b3JlZAor
ICAgICAgICBhcyBpbnRzLiBSZW1vdmluZyBhbiB1bm5lY2Vzc2FyeSBjb252ZXJzaW9uIHRvIExh
eW91dFVuaXRzLiBQaXhlbCBzbmFwcGluZyB0aGUgZWRnZXMgb2YgdGhlIGJveC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6ZHJhd0xpbmVGb3JCb3hTaWRlKTogTW92aW5nIGJhY2sgdG8gaW50ZWdlcnMgYW5kIHJl
bW92aW5nIGFuCisgICAgICAgIHVubmVjZXNzYXJ5IHBpeGVsU25hcHBlZEludFJlY3QgY2FsbC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKTogUGl4ZWwgc25h
cHBpbmcgdGhlIGNvbHVtbiBydWxlIHJlY3QgYW5kIHVzaW5nIGFuIGludGVnZXIKKyAgICAgICAg
Zm9yIG91dGxpbmVPZmZzZXQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgor
ICAgICAgICAoUmVuZGVyT2JqZWN0KToKKwogMjAxMi0wMi0xNCAgRGFuYSBKYW5zZW5zICA8ZGFu
YWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIENvbXBhcmUgZmlsdGVycyBv
biBpbXBsIHRocmVhZCB3aGVuIHNldHRpbmcgdGhlbSwgYW5kIHRlc3Qgc2V0dGluZyBpbiB1bml0
IHRlc3RzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkocmV2aXNp
b24gMTA3NzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDExIEBAIGlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBl
ZEludFJlY3QoY29uc3QKICAgICByZXR1cm4gcmVjdDsKIH0KIAoraW5saW5lIEludFJlY3QgcGl4
ZWxTbmFwcGVkSW50UmVjdEZyb21FZGdlcyhMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQgdG9w
LCBMYXlvdXRVbml0IHJpZ2h0LCBMYXlvdXRVbml0IGJvdHRvbSkKK3sKKyAgICByZXR1cm4gSW50
UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKK30KKwogaW5saW5l
IEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgTGF5b3V0U2l6ZSYgcykKIHsKICAgICByZXR1
cm4gczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2
aXNpb24gMTA3NzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUwNyw3ICsyNTA3LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRDb2x1bW5SdWxlcyhQYWludAogICAgICAgICAgICAgICAgIExheW91dFVuaXQgcnVsZVJp
Z2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJ1bGVMZWZ0ICsgcnVsZVRoaWNrbmVz
cyA6IHJ1bGVMZWZ0ICsgY29udGVudFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBydWxlVG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBhaW50T2Zmc2V0LnkoKSAr
IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIDogcGFpbnRPZmZzZXQueSgpICsgcnVsZUxvZ2lj
YWxMZWZ0IC0gcnVsZVRoaWNrbmVzcyAvIDIgKyBydWxlQWRkOwogICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgcnVsZUJvdHRvbSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBydWxlVG9w
ICsgY29udGVudEhlaWdodCgpIDogcnVsZVRvcCArIHJ1bGVUaGlja25lc3M7Ci0gICAgICAgICAg
ICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKHBhaW50SW5mby5jb250ZXh0LCBydWxlTGVmdCwgcnVs
ZVRvcCwgcnVsZVJpZ2h0LCBydWxlQm90dG9tLCBib3hTaWRlLCBydWxlQ29sb3IsIHJ1bGVTdHls
ZSwgMCwgMCwgYW50aWFsaWFzKTsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHBpeGVsU25hcHBl
ZFJ1bGVSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdEZyb21FZGdlcyhydWxlTGVmdCwgcnVsZVRv
cCwgcnVsZVJpZ2h0LCBydWxlQm90dG9tKTsKKyAgICAgICAgICAgICAgICBkcmF3TGluZUZvckJv
eFNpZGUocGFpbnRJbmZvLmNvbnRleHQsIHBpeGVsU25hcHBlZFJ1bGVSZWN0LngoKSwgcGl4ZWxT
bmFwcGVkUnVsZVJlY3QueSgpLCBwaXhlbFNuYXBwZWRSdWxlUmVjdC5tYXhYKCksIHBpeGVsU25h
cHBlZFJ1bGVSZWN0Lm1heFkoKSwgYm94U2lkZSwgcnVsZUNvbG9yLCBydWxlU3R5bGUsIDAsIDAs
IGFudGlhbGlhcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJ1
bGVMb2dpY2FsTGVmdCA9IGN1cnJMb2dpY2FsTGVmdE9mZnNldDsKQEAgLTI1MzIsNiArMjUzMyw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnQKIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY29sQ291bnQ7IGkrKykgewogICAgICAgICAgICAgcnVs
ZVJlY3QubW92ZShzdGVwKTsKKyAgICAgICAgICAgIEludFJlY3QgcGl4ZWxTbmFwcGVkUnVsZVJl
Y3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KHJ1bGVSZWN0KTsKICAgICAgICAgICAgIGRyYXdMaW5l
Rm9yQm94U2lkZShwYWludEluZm8uY29udGV4dCwgcnVsZVJlY3QueCgpLCBydWxlUmVjdC55KCks
IHJ1bGVSZWN0Lm1heFgoKSwgcnVsZVJlY3QubWF4WSgpLCBib3hTaWRlLCBydWxlQ29sb3IsIHJ1
bGVTdHlsZSwgMCwgMCwgYW50aWFsaWFzKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2
aXNpb24gMTA3NzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyNyw3ICsxNTI3LDcgQEAgc3RhdGljIGJv
b2wgam9pblJlcXVpcmVzTWl0cmUoQm94U2lkZSBzaQogfQogCiB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludE9uZUJvcmRlclNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUm91bmRlZFJlY3QmIG91dGVyQm9y
ZGVyLCBjb25zdCBSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsCi0gICAgY29uc3QgTGF5b3V0UmVj
dCYgc2lkZVJlY3QsIEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUxLCBCb3hTaWRl
IGFkamFjZW50U2lkZTIsIGNvbnN0IEJvcmRlckVkZ2UgZWRnZXNbXSwgY29uc3QgUGF0aCogcGF0
aCwKKyAgICBjb25zdCBJbnRSZWN0JiBzaWRlUmVjdCwgQm94U2lkZSBzaWRlLCBCb3hTaWRlIGFk
amFjZW50U2lkZTEsIEJveFNpZGUgYWRqYWNlbnRTaWRlMiwgY29uc3QgQm9yZGVyRWRnZSBlZGdl
c1tdLCBjb25zdCBQYXRoKiBwYXRoLAogICAgIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBibGVl
ZEF2b2lkYW5jZSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGluY2x1ZGVMb2dp
Y2FsUmlnaHRFZGdlLCBib29sIGFudGlhbGlhcywgY29uc3QgQ29sb3IqIG92ZXJyaWRlQ29sb3Ip
CiB7CiAgICAgY29uc3QgQm9yZGVyRWRnZSYgZWRnZVRvUmVuZGVyID0gZWRnZXNbc2lkZV07CkBA
IC0xNTcyLDkgKzE1NzIsOSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE9uZUJv
cmRlCiAgICAgfQogfQogCi1zdGF0aWMgTGF5b3V0UmVjdCBjYWxjdWxhdGVTaWRlUmVjdChjb25z
dCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEJvcmRlckVkZ2UgZWRnZXNbXSwgaW50
IHNpZGUpCitzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVTaWRlUmVjdChjb25zdCBSb3VuZGVkUmVj
dCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEJvcmRlckVkZ2UgZWRnZXNbXSwgaW50IHNpZGUpCiB7Ci0g
ICAgTGF5b3V0UmVjdCBzaWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKKyAgICBJbnRSZWN0
IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwogICAgIGludCB3aWR0aCA9IGVkZ2VzW3Np
ZGVdLndpZHRoOwogCiAgICAgaWYgKHNpZGUgPT0gQlNUb3ApCkBAIC0xNjAwLDcgKzE2MDAsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlclNpCiAgICAgICAgIHJvdW5k
ZWRQYXRoLmFkZFJvdW5kZWRSZWN0KG91dGVyQm9yZGVyKTsKICAgICAKICAgICBpZiAoZWRnZXNb
QlNUb3BdLnNob3VsZFJlbmRlcigpICYmIGluY2x1ZGVzRWRnZShlZGdlU2V0LCBCU1RvcCkpIHsK
LSAgICAgICAgTGF5b3V0UmVjdCBzaWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKKyAgICAg
ICAgSW50UmVjdCBzaWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKICAgICAgICAgc2lkZVJl
Y3Quc2V0SGVpZ2h0KGVkZ2VzW0JTVG9wXS53aWR0aCk7CiAKICAgICAgICAgYm9vbCB1c2VQYXRo
ID0gcmVuZGVyUmFkaWkgJiYgKGJvcmRlclN0eWxlSGFzSW5uZXJEZXRhaWwoZWRnZXNbQlNUb3Bd
LnN0eWxlKSB8fCBib3JkZXJXaWxsQXJjSW5uZXJFZGdlKGlubmVyQm9yZGVyLnJhZGlpKCkudG9w
TGVmdCgpLCBpbm5lckJvcmRlci5yYWRpaSgpLnRvcFJpZ2h0KCkpKTsKQEAgLTE2MDgsNyArMTYw
OCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyU2kKICAgICB9CiAK
ICAgICBpZiAoZWRnZXNbQlNCb3R0b21dLnNob3VsZFJlbmRlcigpICYmIGluY2x1ZGVzRWRnZShl
ZGdlU2V0LCBCU0JvdHRvbSkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBzaWRlUmVjdCA9IG91dGVy
Qm9yZGVyLnJlY3QoKTsKKyAgICAgICAgSW50UmVjdCBzaWRlUmVjdCA9IG91dGVyQm9yZGVyLnJl
Y3QoKTsKICAgICAgICAgc2lkZVJlY3Quc2hpZnRZRWRnZVRvKHNpZGVSZWN0Lm1heFkoKSAtIGVk
Z2VzW0JTQm90dG9tXS53aWR0aCk7CiAKICAgICAgICAgYm9vbCB1c2VQYXRoID0gcmVuZGVyUmFk
aWkgJiYgKGJvcmRlclN0eWxlSGFzSW5uZXJEZXRhaWwoZWRnZXNbQlNCb3R0b21dLnN0eWxlKSB8
fCBib3JkZXJXaWxsQXJjSW5uZXJFZGdlKGlubmVyQm9yZGVyLnJhZGlpKCkuYm90dG9tTGVmdCgp
LCBpbm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkpKTsKQEAgLTE2MTYsNyArMTYxNiw3
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyU2kKICAgICB9CiAKICAg
ICBpZiAoZWRnZXNbQlNMZWZ0XS5zaG91bGRSZW5kZXIoKSAmJiBpbmNsdWRlc0VkZ2UoZWRnZVNl
dCwgQlNMZWZ0KSkgewotICAgICAgICBMYXlvdXRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIu
cmVjdCgpOworICAgICAgICBJbnRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwog
ICAgICAgICBzaWRlUmVjdC5zZXRXaWR0aChlZGdlc1tCU0xlZnRdLndpZHRoKTsKIAogICAgICAg
ICBib29sIHVzZVBhdGggPSByZW5kZXJSYWRpaSAmJiAoYm9yZGVyU3R5bGVIYXNJbm5lckRldGFp
bChlZGdlc1tCU0xlZnRdLnN0eWxlKSB8fCBib3JkZXJXaWxsQXJjSW5uZXJFZGdlKGlubmVyQm9y
ZGVyLnJhZGlpKCkuYm90dG9tTGVmdCgpLCBpbm5lckJvcmRlci5yYWRpaSgpLnRvcExlZnQoKSkp
OwpAQCAtMTYyNCw3ICsxNjI0LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRC
b3JkZXJTaQogICAgIH0KIAogICAgIGlmIChlZGdlc1tCU1JpZ2h0XS5zaG91bGRSZW5kZXIoKSAm
JiBpbmNsdWRlc0VkZ2UoZWRnZVNldCwgQlNSaWdodCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBz
aWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKKyAgICAgICAgSW50UmVjdCBzaWRlUmVjdCA9
IG91dGVyQm9yZGVyLnJlY3QoKTsKICAgICAgICAgc2lkZVJlY3Quc2hpZnRYRWRnZVRvKHNpZGVS
ZWN0Lm1heFgoKSAtIGVkZ2VzW0JTUmlnaHRdLndpZHRoKTsKIAogICAgICAgICBib29sIHVzZVBh
dGggPSByZW5kZXJSYWRpaSAmJiAoYm9yZGVyU3R5bGVIYXNJbm5lckRldGFpbChlZGdlc1tCU1Jp
Z2h0XS5zdHlsZSkgfHwgYm9yZGVyV2lsbEFyY0lubmVyRWRnZShpbm5lckJvcmRlci5yYWRpaSgp
LmJvdHRvbVJpZ2h0KCksIGlubmVyQm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKSkpOwpAQCAtMTc1
Myw3ICsxNzUzLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoYwog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IEJTVG9wOyBpIDw9IEJTTGVmdDsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgY29uc3QgQm9yZGVyRWRnZSYgY3VyckVkZ2UgPSBlZGdlc1tpXTsKICAgICAg
ICAgICAgICAgICBpZiAoY3VyckVkZ2Uuc2hvdWxkUmVuZGVyKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdCBzaWRlUmVjdCA9IGNhbGN1bGF0ZVNpZGVSZWN0KG91dGVyQm9yZGVy
LCBlZGdlcywgaSk7CisgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc2lkZVJlY3QgPSBjYWxj
dWxhdGVTaWRlUmVjdChvdXRlckJvcmRlciwgZWRnZXMsIGkpOwogICAgICAgICAgICAgICAgICAg
ICBwYXRoLmFkZFJlY3Qoc2lkZVJlY3QpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KQEAgLTIzNzUsOSArMjM3NSw5IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBC
b3JkZXJTaWQKICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBDb252ZXhQb2x5Z29uKDQsIHNlY29u
ZFF1YWQsICFzZWNvbmRFZGdlTWF0Y2hlcyk7CiB9CiAKLXN0YXRpYyBMYXlvdXRSZWN0IGNhbGN1
bGF0ZVNpZGVSZWN0SW5jbHVkaW5nSW5uZXIoY29uc3QgUm91bmRlZFJlY3QmIG91dGVyQm9yZGVy
LCBjb25zdCBCb3JkZXJFZGdlIGVkZ2VzW10sIEJveFNpZGUgc2lkZSkKK3N0YXRpYyBJbnRSZWN0
IGNhbGN1bGF0ZVNpZGVSZWN0SW5jbHVkaW5nSW5uZXIoY29uc3QgUm91bmRlZFJlY3QmIG91dGVy
Qm9yZGVyLCBjb25zdCBCb3JkZXJFZGdlIGVkZ2VzW10sIEJveFNpZGUgc2lkZSkKIHsKLSAgICBM
YXlvdXRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOworICAgIEludFJlY3Qgc2lk
ZVJlY3QgPSBvdXRlckJvcmRlci5yZWN0KCk7CiAgICAgaW50IHdpZHRoOwogCiAgICAgc3dpdGNo
IChzaWRlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaAkocmV2aXNpb24gMTA3NzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw3ICsyMTgs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJveFNpZGUsIGJv
b2wgZmlyc3RFZGdlTWF0Y2hlcywgYm9vbCBzZWNvbmRFZGdlTWF0Y2hlcyk7CiAgICAgdm9pZCBj
bGlwQm9yZGVyU2lkZUZvckNvbXBsZXhJbm5lclBhdGgoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
Um91bmRlZFJlY3QmLCBjb25zdCBSb3VuZGVkUmVjdCYsIEJveFNpZGUsIGNvbnN0IGNsYXNzIEJv
cmRlckVkZ2VbXSk7CiAgICAgdm9pZCBwYWludE9uZUJvcmRlclNpZGUoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNv
bnN0IFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTGF5b3V0UmVjdCYgc2lkZVJlY3QsIEJveFNpZGUsIEJveFNpZGUgYWRqYWNl
bnRTaWRlMSwgQm94U2lkZSBhZGphY2VudFNpZGUyLCBjb25zdCBjbGFzcyBCb3JkZXJFZGdlW10s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHNpZGVSZWN0
LCBCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZTEsIEJveFNpZGUgYWRqYWNlbnRTaWRlMiwg
Y29uc3QgY2xhc3MgQm9yZGVyRWRnZVtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQYXRoKiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVMb2dp
Y2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGJvb2wgYW50aWFsaWFz
LCBjb25zdCBDb2xvciogb3ZlcnJpZGVDb2xvciA9IDApOwogICAgIHZvaWQgcGFpbnRUcmFuc2x1
Y2VudEJvcmRlclNpZGVzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29u
c3QgUm91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBSb3VuZGVkUmVjdCYgaW5uZXJCb3Jk
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzIEJvcmRlckVkZ2VbXSwg
QmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJv
b2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGJvb2wgYW50aWFsaWFzID0gZmFsc2UpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDEw
Nzc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDAzLDI0ICsxNDAzLDI0IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWlu
dE91dGxpbmVGb3JMaW5lKEcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IENvbG9yIG91dGxpbmVDb2xvcikKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1Vz
ZSA9IHN0eWxlKCk7Ci0gICAgTGF5b3V0VW5pdCBvdXRsaW5lV2lkdGggPSBzdHlsZVRvVXNlLT5v
dXRsaW5lV2lkdGgoKTsKKyAgICBpbnQgb3V0bGluZVdpZHRoID0gc3R5bGVUb1VzZS0+b3V0bGlu
ZVdpZHRoKCk7CiAgICAgRUJvcmRlclN0eWxlIG91dGxpbmVTdHlsZSA9IHN0eWxlVG9Vc2UtPm91
dGxpbmVTdHlsZSgpOwogCiAgICAgYm9vbCBhbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXNMaW5l
cyhncmFwaGljc0NvbnRleHQpOwogCi0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBzdHlsZSgpLT5v
dXRsaW5lT2Zmc2V0KCk7CisgICAgaW50IG9mZnNldCA9IHN0eWxlKCktPm91dGxpbmVPZmZzZXQo
KTsKIAotICAgIExheW91dFVuaXQgdG9wID0gcGFpbnRPZmZzZXQueSgpICsgdGhpc2xpbmUueSgp
IC0gb2Zmc2V0OwotICAgIExheW91dFVuaXQgbGVmdCA9IHBhaW50T2Zmc2V0LngoKSArIHRoaXNs
aW5lLngoKSAtIG9mZnNldDsKLSAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHBhaW50T2Zmc2V0Lnko
KSArIHRoaXNsaW5lLm1heFkoKSArIG9mZnNldDsKLSAgICBMYXlvdXRVbml0IHJpZ2h0ID0gcGFp
bnRPZmZzZXQueCgpICsgdGhpc2xpbmUubWF4WCgpICsgb2Zmc2V0OworICAgIExheW91dFJlY3Qg
Ym94KExheW91dFBvaW50KHBhaW50T2Zmc2V0LngoKSArIHRoaXNsaW5lLngoKSAtIG9mZnNldCwg
cGFpbnRPZmZzZXQueSgpICsgdGhpc2xpbmUueSgpIC0gb2Zmc2V0KSwKKyAgICAgICAgICAgICAg
ICAgICBMYXlvdXRTaXplKHRoaXNsaW5lLndpZHRoKCkgKyBvZmZzZXQsIHRoaXNsaW5lLmhlaWdo
dCgpICsgb2Zmc2V0KSk7CisKKyAgICBJbnRSZWN0IHBpeGVsU25hcHBlZEJveCA9IHBpeGVsU25h
cHBlZEludFJlY3QoYm94KTsKICAgICAKICAgICAvLyBsZWZ0IGVkZ2UKICAgICBkcmF3TGluZUZv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICBsZWZ0IC0gb3V0bGluZVdpZHRoLAot
ICAgICAgICB0b3AgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3Rs
aW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3V0bGlu
ZVdpZHRoIDogMCksCi0gICAgICAgIGxlZnQsCi0gICAgICAgIGJvdHRvbSArIChuZXh0bGluZS5p
c0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDw9IG5leHRsaW5lLngoKSB8fCAobmV4dGxpbmUubWF4
WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3V0bGluZVdpZHRoIDogMCksCisgICAgICAgIHBp
eGVsU25hcHBlZEJveC54KCkgLSBvdXRsaW5lV2lkdGgsCisgICAgICAgIHBpeGVsU25hcHBlZEJv
eC55KCkgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngo
KSB8fCAobGFzdGxpbmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3V0bGluZVdpZHRo
IDogMCksCisgICAgICAgIHBpeGVsU25hcHBlZEJveC54KCksCisgICAgICAgIHBpeGVsU25hcHBl
ZEJveC5tYXhZKCkgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8PSBuZXh0
bGluZS54KCkgfHwgKG5leHRsaW5lLm1heFgoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG91dGxp
bmVXaWR0aCA6IDApLAogICAgICAgICBCU0xlZnQsCiAgICAgICAgIG91dGxpbmVDb2xvciwgb3V0
bGluZVN0eWxlLAogICAgICAgICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8
IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8g
b3V0bGluZVdpZHRoIDogLW91dGxpbmVXaWR0aCksCkBAIC0xNDI5LDEwICsxNDI5LDEwIEBAIHZv
aWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEcKICAgICAKICAgICAvLyByaWdo
dCBlZGdlCiAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAg
cmlnaHQsCi0gICAgICAgIHRvcCAtIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgbGFzdGxpbmUubWF4
WCgpIDwgdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBsYXN0bGlu
ZS54KCkgPyBvdXRsaW5lV2lkdGggOiAwKSwKLSAgICAgICAgcmlnaHQgKyBvdXRsaW5lV2lkdGgs
Ci0gICAgICAgIGJvdHRvbSArIChuZXh0bGluZS5pc0VtcHR5KCkgfHwgbmV4dGxpbmUubWF4WCgp
IDw9IHRoaXNsaW5lLm1heFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbmV4dGxpbmUu
eCgpID8gb3V0bGluZVdpZHRoIDogMCksCisgICAgICAgIHBpeGVsU25hcHBlZEJveC5tYXhYKCks
CisgICAgICAgIHBpeGVsU25hcHBlZEJveC55KCkgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxh
c3RsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkg
PD0gbGFzdGxpbmUueCgpID8gb3V0bGluZVdpZHRoIDogMCksCisgICAgICAgIHBpeGVsU25hcHBl
ZEJveC5tYXhYKCkgKyBvdXRsaW5lV2lkdGgsCisgICAgICAgIHBpeGVsU25hcHBlZEJveC5tYXhZ
KCkgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0aGlzbGluZS5t
YXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG91dGxpbmVX
aWR0aCA6IDApLAogICAgICAgICBCU1JpZ2h0LAogICAgICAgICBvdXRsaW5lQ29sb3IsIG91dGxp
bmVTdHlsZSwKICAgICAgICAgKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCBsYXN0bGluZS5tYXhYKCkg
PCB0aGlzbGluZS5tYXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IGxhc3RsaW5lLngo
KSA/IG91dGxpbmVXaWR0aCA6IC1vdXRsaW5lV2lkdGgpLApAQCAtMTQ0MSwzMSArMTQ0MSwzMSBA
QCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHCiAgICAgLy8gdXBwZXIg
ZWRnZQogICAgIGlmICh0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkpCiAgICAgICAgIGRyYXdM
aW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsCi0gICAgICAgICAgICBsZWZ0IC0gb3V0bGlu
ZVdpZHRoLAotICAgICAgICAgICAgdG9wIC0gb3V0bGluZVdpZHRoLAotICAgICAgICAgICAgbWlu
KHJpZ2h0ICsgb3V0bGluZVdpZHRoLCAobGFzdGxpbmUuaXNFbXB0eSgpID8gMTAwMDAwMCA6IHBh
aW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLngoKSkpLAotICAgICAgICAgICAgdG9wLAorICAgICAg
ICAgICAgcGl4ZWxTbmFwcGVkQm94LngoKSAtIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIHBp
eGVsU25hcHBlZEJveC55KCkgLSBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICBtaW4ocGl4ZWxT
bmFwcGVkQm94Lm1heFgoKSArIG91dGxpbmVXaWR0aCwgKGxhc3RsaW5lLmlzRW1wdHkoKSA/IDEw
MDAwMDAgOiBwYWludE9mZnNldC54KCkgKyBsYXN0bGluZS54KCkpKSwKKyAgICAgICAgICAgIHBp
eGVsU25hcHBlZEJveC55KCksCiAgICAgICAgICAgICBCU1RvcCwgb3V0bGluZUNvbG9yLCBvdXRs
aW5lU3R5bGUsCiAgICAgICAgICAgICBvdXRsaW5lV2lkdGgsCi0gICAgICAgICAgICAoIWxhc3Rs
aW5lLmlzRW1wdHkoKSAmJiBwYWludE9mZnNldC54KCkgKyBsYXN0bGluZS54KCkgKyAxIDwgcmln
aHQgKyBvdXRsaW5lV2lkdGgpID8gLW91dGxpbmVXaWR0aCA6IG91dGxpbmVXaWR0aCwKKyAgICAg
ICAgICAgICghbGFzdGxpbmUuaXNFbXB0eSgpICYmIHBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5l
LngoKSArIDEgPCBwaXhlbFNuYXBwZWRCb3gubWF4WCgpICsgb3V0bGluZVdpZHRoKSA/IC1vdXRs
aW5lV2lkdGggOiBvdXRsaW5lV2lkdGgsCiAgICAgICAgICAgICBhbnRpYWxpYXMpOwogICAgIAog
ICAgIGlmIChsYXN0bGluZS5tYXhYKCkgPCB0aGlzbGluZS5tYXhYKCkpCiAgICAgICAgIGRyYXdM
aW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsCi0gICAgICAgICAgICBtYXgobGFzdGxpbmUu
aXNFbXB0eSgpID8gLTEwMDAwMDAgOiBwYWludE9mZnNldC54KCkgKyBsYXN0bGluZS5tYXhYKCks
IGxlZnQgLSBvdXRsaW5lV2lkdGgpLAotICAgICAgICAgICAgdG9wIC0gb3V0bGluZVdpZHRoLAot
ICAgICAgICAgICAgcmlnaHQgKyBvdXRsaW5lV2lkdGgsCi0gICAgICAgICAgICB0b3AsCisgICAg
ICAgICAgICBtYXgobGFzdGxpbmUuaXNFbXB0eSgpID8gLTEwMDAwMDAgOiBwYWludE9mZnNldC54
KCkgKyBsYXN0bGluZS5tYXhYKCksIHBpeGVsU25hcHBlZEJveC54KCkgLSBvdXRsaW5lV2lkdGgp
LAorICAgICAgICAgICAgcGl4ZWxTbmFwcGVkQm94LnkoKSAtIG91dGxpbmVXaWR0aCwKKyAgICAg
ICAgICAgIHBpeGVsU25hcHBlZEJveC5tYXhYKCkgKyBvdXRsaW5lV2lkdGgsCisgICAgICAgICAg
ICBwaXhlbFNuYXBwZWRCb3gueSgpLAogICAgICAgICAgICAgQlNUb3AsIG91dGxpbmVDb2xvciwg
b3V0bGluZVN0eWxlLAotICAgICAgICAgICAgKCFsYXN0bGluZS5pc0VtcHR5KCkgJiYgbGVmdCAt
IG91dGxpbmVXaWR0aCA8IHBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLm1heFgoKSkgPyAtb3V0
bGluZVdpZHRoIDogb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgKCFsYXN0bGluZS5pc0VtcHR5
KCkgJiYgcGl4ZWxTbmFwcGVkQm94LngoKSAtIG91dGxpbmVXaWR0aCA8IHBhaW50T2Zmc2V0Lngo
KSArIGxhc3RsaW5lLm1heFgoKSkgPyAtb3V0bGluZVdpZHRoIDogb3V0bGluZVdpZHRoLAogICAg
ICAgICAgICAgb3V0bGluZVdpZHRoLCBhbnRpYWxpYXMpOwogCiAgICAgaWYgKHRoaXNsaW5lLngo
KSA9PSB0aGlzbGluZS5tYXhYKCkpCiAgICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBo
aWNzQ29udGV4dCwKLSAgICAgICAgICAgIGxlZnQgLSBvdXRsaW5lV2lkdGgsCi0gICAgICAgICAg
ICB0b3AgLSBvdXRsaW5lV2lkdGgsCi0gICAgICAgICAgICByaWdodCArIG91dGxpbmVXaWR0aCwK
LSAgICAgICAgICAgIHRvcCwKKyAgICAgICAgICAgIHBpeGVsU25hcHBlZEJveC54KCkgLSBvdXRs
aW5lV2lkdGgsCisgICAgICAgICAgICBwaXhlbFNuYXBwZWRCb3gueSgpIC0gb3V0bGluZVdpZHRo
LAorICAgICAgICAgICAgcGl4ZWxTbmFwcGVkQm94Lm1heFgoKSArIG91dGxpbmVXaWR0aCwKKyAg
ICAgICAgICAgIHBpeGVsU25hcHBlZEJveC55KCksCiAgICAgICAgICAgICBCU1RvcCwgb3V0bGlu
ZUNvbG9yLCBvdXRsaW5lU3R5bGUsCiAgICAgICAgICAgICBvdXRsaW5lV2lkdGgsCiAgICAgICAg
ICAgICBvdXRsaW5lV2lkdGgsCkBAIC0xNDc0LDMxICsxNDc0LDMxIEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEcKICAgICAvLyBsb3dlciBlZGdlCiAgICAgaWYgKHRo
aXNsaW5lLngoKSA8IG5leHRsaW5lLngoKSkKICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdy
YXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgIGxlZnQgLSBvdXRsaW5lV2lkdGgsCi0gICAgICAg
ICAgICBib3R0b20sCi0gICAgICAgICAgICBtaW4ocmlnaHQgKyBvdXRsaW5lV2lkdGgsICFuZXh0
bGluZS5pc0VtcHR5KCkgPyBwYWludE9mZnNldC54KCkgKyBuZXh0bGluZS54KCkgKyAxIDogMTAw
MDAwMCksCi0gICAgICAgICAgICBib3R0b20gKyBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICBw
aXhlbFNuYXBwZWRCb3gueCgpIC0gb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgcGl4ZWxTbmFw
cGVkQm94Lm1heFkoKSwKKyAgICAgICAgICAgIG1pbihwaXhlbFNuYXBwZWRCb3gubWF4WCgpICsg
b3V0bGluZVdpZHRoLCAhbmV4dGxpbmUuaXNFbXB0eSgpID8gcGFpbnRPZmZzZXQueCgpICsgbmV4
dGxpbmUueCgpICsgMSA6IDEwMDAwMDApLAorICAgICAgICAgICAgcGl4ZWxTbmFwcGVkQm94Lm1h
eFkoKSArIG91dGxpbmVXaWR0aCwKICAgICAgICAgICAgIEJTQm90dG9tLCBvdXRsaW5lQ29sb3Is
IG91dGxpbmVTdHlsZSwKICAgICAgICAgICAgIG91dGxpbmVXaWR0aCwKLSAgICAgICAgICAgICgh
bmV4dGxpbmUuaXNFbXB0eSgpICYmIHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLngoKSArIDEg
PCByaWdodCArIG91dGxpbmVXaWR0aCkgPyAtb3V0bGluZVdpZHRoIDogb3V0bGluZVdpZHRoLAor
ICAgICAgICAgICAgKCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgcGFpbnRPZmZzZXQueCgpICsgbmV4
dGxpbmUueCgpICsgMSA8IHBpeGVsU25hcHBlZEJveC5tYXhYKCkgKyBvdXRsaW5lV2lkdGgpID8g
LW91dGxpbmVXaWR0aCA6IG91dGxpbmVXaWR0aCwKICAgICAgICAgICAgIGFudGlhbGlhcyk7CiAg
ICAgCiAgICAgaWYgKG5leHRsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSkKICAgICAgICAg
ZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgIG1heCghbmV4
dGxpbmUuaXNFbXB0eSgpID8gcGFpbnRPZmZzZXQueCgpICsgbmV4dGxpbmUubWF4WCgpIDogLTEw
MDAwMDAsIGxlZnQgLSBvdXRsaW5lV2lkdGgpLAotICAgICAgICAgICAgYm90dG9tLAotICAgICAg
ICAgICAgcmlnaHQgKyBvdXRsaW5lV2lkdGgsCi0gICAgICAgICAgICBib3R0b20gKyBvdXRsaW5l
V2lkdGgsCisgICAgICAgICAgICBtYXgoIW5leHRsaW5lLmlzRW1wdHkoKSA/IHBhaW50T2Zmc2V0
LngoKSArIG5leHRsaW5lLm1heFgoKSA6IC0xMDAwMDAwLCBwaXhlbFNuYXBwZWRCb3gueCgpIC0g
b3V0bGluZVdpZHRoKSwKKyAgICAgICAgICAgIHBpeGVsU25hcHBlZEJveC5tYXhZKCksCisgICAg
ICAgICAgICBwaXhlbFNuYXBwZWRCb3gubWF4WCgpICsgb3V0bGluZVdpZHRoLAorICAgICAgICAg
ICAgcGl4ZWxTbmFwcGVkQm94Lm1heFkoKSArIG91dGxpbmVXaWR0aCwKICAgICAgICAgICAgIEJT
Qm90dG9tLCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHlsZSwKLSAgICAgICAgICAgICghbmV4dGxp
bmUuaXNFbXB0eSgpICYmIGxlZnQgLSBvdXRsaW5lV2lkdGggPCBwYWludE9mZnNldC54KCkgKyBu
ZXh0bGluZS5tYXhYKCkpID8gLW91dGxpbmVXaWR0aCA6IG91dGxpbmVXaWR0aCwKKyAgICAgICAg
ICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYmIHBpeGVsU25hcHBlZEJveC54KCkgLSBvdXRsaW5l
V2lkdGggPCBwYWludE9mZnNldC54KCkgKyBuZXh0bGluZS5tYXhYKCkpID8gLW91dGxpbmVXaWR0
aCA6IG91dGxpbmVXaWR0aCwKICAgICAgICAgICAgIG91dGxpbmVXaWR0aCwgYW50aWFsaWFzKTsK
IAogICAgIGlmICh0aGlzbGluZS54KCkgPT0gdGhpc2xpbmUubWF4WCgpKQogICAgICAgICAgIGRy
YXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsCi0gICAgICAgICAgICBsZWZ0IC0gb3V0
bGluZVdpZHRoLAotICAgICAgICAgICAgYm90dG9tLAotICAgICAgICAgICAgcmlnaHQgKyBvdXRs
aW5lV2lkdGgsCi0gICAgICAgICAgICBib3R0b20gKyBvdXRsaW5lV2lkdGgsCisgICAgICAgICAg
ICBwaXhlbFNuYXBwZWRCb3gueCgpIC0gb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgcGl4ZWxT
bmFwcGVkQm94Lm1heFkoKSwKKyAgICAgICAgICAgIHBpeGVsU25hcHBlZEJveC5tYXhYKCkgKyBv
dXRsaW5lV2lkdGgsCisgICAgICAgICAgICBwaXhlbFNuYXBwZWRCb3gubWF4WSgpICsgb3V0bGlu
ZVdpZHRoLAogICAgICAgICAgICAgQlNCb3R0b20sIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxl
LAogICAgICAgICAgICAgb3V0bGluZVdpZHRoLAogICAgICAgICAgICAgb3V0bGluZVdpZHRoLApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9u
IDEwNzc0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OTAsNyArNzkwLDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Om11c3RS
ZXBhaW50QmFja2dyb3VuZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJPYmpl
Y3Q6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwg
TGF5b3V0VW5pdCB4MSwgTGF5b3V0VW5pdCB5MSwgTGF5b3V0VW5pdCB4MiwgTGF5b3V0VW5pdCB5
MiwKK3ZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xv
ciwgRUJvcmRlclN0eWxlIHN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgYWRqYWNlbnRXaWR0aDEsIGludCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxp
YXMpCiB7CkBAIC05NjUsNyArOTY1LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdMaW5lRm9y
Qm94U2lkZShHcgogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWF0dGVycyBmb3IgcmVjdHMgaW4g
dHJhbnNmb3JtZWQgY29udGV4dHMuCiAgICAgICAgICAgICAgICAgYm9vbCB3YXNBbnRpYWxpYXNl
ZCA9IGdyYXBoaWNzQ29udGV4dC0+c2hvdWxkQW50aWFsaWFzKCk7CiAgICAgICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoYW50aWFsaWFzKTsKLSAgICAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdSZWN0KHBpeGVsU25hcHBlZEludFJlY3QoTGF5
b3V0UmVjdCh4MSwgeTEsIHgyIC0geDEsIHkyIC0geTEpKSk7CisgICAgICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3UmVjdChJbnRSZWN0KHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSkp
OwogICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHdh
c0FudGlhbGlhc2VkKTsKICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9r
ZVN0eWxlKG9sZFN0cm9rZVN0eWxlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTI0
LDcgKzExMjQsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKEdyYXBoaWNzCiAK
ICAgICBDb2xvciBvdXRsaW5lQ29sb3IgPSBzdHlsZVRvVXNlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IpOwogCi0gICAgTGF5b3V0VW5pdCBvdXRsaW5lT2Zm
c2V0ID0gc3R5bGVUb1VzZS0+b3V0bGluZU9mZnNldCgpOworICAgIGludCBvdXRsaW5lT2Zmc2V0
ID0gc3R5bGVUb1VzZS0+b3V0bGluZU9mZnNldCgpOwogCiAgICAgaWYgKHN0eWxlVG9Vc2UtPm91
dGxpbmVTdHlsZUlzQXV0bygpIHx8IGhhc091dGxpbmVBbm5vdGF0aW9uKCkpIHsKICAgICAgICAg
aWYgKCF0aGVtZSgpLT5zdXBwb3J0c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkgewpAQCAtMTEzNiwx
MCArMTEzNiwxMCBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKEdyYXBoaWNzCiAg
ICAgaWYgKHN0eWxlVG9Vc2UtPm91dGxpbmVTdHlsZUlzQXV0bygpIHx8IHN0eWxlVG9Vc2UtPm91
dGxpbmVTdHlsZSgpID09IEJOT05FKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRSZWN0
IGlubmVyID0gcGFpbnRSZWN0OworICAgIEludFJlY3QgaW5uZXIgPSBwaXhlbFNuYXBwZWRJbnRS
ZWN0KHBhaW50UmVjdCk7CiAgICAgaW5uZXIuaW5mbGF0ZShvdXRsaW5lT2Zmc2V0KTsKIAotICAg
IExheW91dFJlY3Qgb3V0ZXIgPSBpbm5lcjsKKyAgICBJbnRSZWN0IG91dGVyID0gcGl4ZWxTbmFw
cGVkSW50UmVjdChpbm5lcik7CiAgICAgb3V0ZXIuaW5mbGF0ZShvdXRsaW5lV2lkdGgpOwogCiAg
ICAgLy8gRklYTUU6IFRoaXMgcHJldmVudHMgb3V0bGluZXMgZnJvbSBwYWludGluZyBpbnNpZGUg
dGhlIG9iamVjdC4gU2VlIGJ1ZyAxMjA0MgpAQCAtMTE2MSwxNCArMTE2MSwxNCBAQCB2b2lkIFJl
bmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKEdyYXBoaWNzCiAgICAgICAgIG91dGxpbmVDb2xvciA9
IENvbG9yKG91dGxpbmVDb2xvci5yZWQoKSwgb3V0bGluZUNvbG9yLmdyZWVuKCksIG91dGxpbmVD
b2xvci5ibHVlKCkpOwogICAgIH0KIAotICAgIExheW91dFVuaXQgbGVmdE91dGVyID0gb3V0ZXIu
eCgpOwotICAgIExheW91dFVuaXQgbGVmdElubmVyID0gaW5uZXIueCgpOwotICAgIExheW91dFVu
aXQgcmlnaHRPdXRlciA9IG91dGVyLm1heFgoKTsKLSAgICBMYXlvdXRVbml0IHJpZ2h0SW5uZXIg
PSBpbm5lci5tYXhYKCk7Ci0gICAgTGF5b3V0VW5pdCB0b3BPdXRlciA9IG91dGVyLnkoKTsKLSAg
ICBMYXlvdXRVbml0IHRvcElubmVyID0gaW5uZXIueSgpOwotICAgIExheW91dFVuaXQgYm90dG9t
T3V0ZXIgPSBvdXRlci5tYXhZKCk7Ci0gICAgTGF5b3V0VW5pdCBib3R0b21Jbm5lciA9IGlubmVy
Lm1heFkoKTsKKyAgICBpbnQgbGVmdE91dGVyID0gb3V0ZXIueCgpOworICAgIGludCBsZWZ0SW5u
ZXIgPSBpbm5lci54KCk7CisgICAgaW50IHJpZ2h0T3V0ZXIgPSBvdXRlci5tYXhYKCk7CisgICAg
aW50IHJpZ2h0SW5uZXIgPSBpbm5lci5tYXhYKCk7CisgICAgaW50IHRvcE91dGVyID0gb3V0ZXIu
eSgpOworICAgIGludCB0b3BJbm5lciA9IGlubmVyLnkoKTsKKyAgICBpbnQgYm90dG9tT3V0ZXIg
PSBvdXRlci5tYXhZKCk7CisgICAgaW50IGJvdHRvbUlubmVyID0gaW5uZXIubWF4WSgpOwogICAg
IAogICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIGxlZnRPdXRlciwgdG9w
T3V0ZXIsIGxlZnRJbm5lciwgYm90dG9tT3V0ZXIsIEJTTGVmdCwgb3V0bGluZUNvbG9yLCBvdXRs
aW5lU3R5bGUsIG91dGxpbmVXaWR0aCwgb3V0bGluZVdpZHRoKTsKICAgICBkcmF3TGluZUZvckJv
eFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBsZWZ0T3V0ZXIsIHRvcE91dGVyLCByaWdodE91dGVyLCB0
b3BJbm5lciwgQlNUb3AsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBvdXRsaW5lV2lkdGgs
IG91dGxpbmVXaWR0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCShyZXZpc2lvbiAxMDc3NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2Miw3ICs4NjIsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKTsKICAgICB2b2lkIHByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXND
aGlsZHJlbihib29sIGJsb2NrQ2hpbGRyZW5Pbmx5ID0gZmFsc2UpOwogCi0gICAgdm9pZCBkcmF3
TGluZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiwgTGF5b3V0VW5pdCB4MSwgTGF5b3V0VW5p
dCB5MSwgTGF5b3V0VW5pdCB4MiwgTGF5b3V0VW5pdCB5MiwgQm94U2lkZSwKKyAgICB2b2lkIGRy
YXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQqLCBpbnQgeDEsIGludCB5MSwgaW50IHgy
LCBpbnQgeTIsIEJveFNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IsIEVC
b3JkZXJTdHlsZSwgaW50IGFkamJ3MSwgaW50IGFkamJ3MiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxz
ZSk7CiAKICAgICB2b2lkIHBhaW50Rm9jdXNSaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExh
eW91dFBvaW50JiwgUmVuZGVyU3R5bGUqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128525</attachid>
            <date>2012-02-23 11:58:21 -0800</date>
            <delta_ts>2012-02-23 19:55:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78647-20120223115820.patch</filename>
            <type>text/plain</type>
            <size>23162</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODY0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAyLTIzICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBTd2l0Y2ggZHJhd0xpbmVG
b3JCb3hTaWRlIHRvIHVzZSBpbnRlZ2VycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBkcmF3TGluZUZvckJveFNpZGUgaGFuZGxlcyBwYWludGluZyBsaW5l
cyBmb3IgYm94ZXMgd2hpY2ggbXVzdCBiZSBkb25lIG9uIHBpeGVsIGJvdW5kYXJpZXMuCisgICAg
ICAgIEl0cyBpbnRlcmZhY2UgZG9lc24ndCBtYWtlIGl0IHBvc3NpYmxlIHRvIHBpeGVsIHNuYXAg
cHJvcGVybHkgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYgLS0KKyAgICAgICAgaXQgZHJhd3Mg
b25lIHNpZGUgb2YgdGhlIGJveCBhdCBhIHRpbWUsIGFuZCB0aGUgbG9naWNhbCByaWdodCBhbmQg
Ym90dG9tIGxpbmVzIGNhbiBvbmx5IGJlCisgICAgICAgIHByb3Blcmx5IGRldGVybWluZWQgdXNp
bmcgdGhlIGxvZ2ljYWwgdG9wIGFuZCBsZWZ0IHBvc2l0aW9ucyAtLSBzbyBpdCBuZWVkcyB0byBi
ZSB0cmVhdGVkIAorICAgICAgICBsaWtlIGEgZ3JhcGhpY3MgY29udGV4dCBmdW5jdGlvbiwgd2hl
cmVieSB0aGUgY2FsbGVyIGhhbmRsZXMgdGhlIHByb3BlciBwaXhlbCBzbmFwcGluZyBiZWZvcmUK
KyAgICAgICAgcGFzc2luZyB0aGUgdmFsdWVzIGluLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
Tm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcmVuZGVyaW5nL0xheW91dFR5cGVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpwaXhlbFNuYXBwZWRJbnRSZWN0RnJvbUVkZ2VzKTogY29u
dmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJldHVybmluZyBhIHBpeGVsIHNuYXBwZWQKKyAgICAgICAg
aW50IHJlY3QgZnJvbSBmb3VyIExheW91dFVuaXRzIHRoYXQgYXJlIGl0cyBlZGdlcyAoYXMgb3Bw
b3NlZCB0byBwb3NpdGlvbiBhbmQgc2l6ZSkuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVz
KTogUGl4ZWwgc25hcHBpbmcgdGhlIGNvbHVtbiBydWxlIHJlY3QuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludE9uZUJvcmRlclNpZGUpOiBTaWRlIHJlY3RzIGFyZSBub3cgSW50
UmVjdHMgYnkgdGhlIHRpbWUKKyAgICAgICAgdGhleSBnZXQgdG8gcGFpbnRPbmVCb3JkZXJTaWRl
LgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlU2lkZVJlY3QpOiBQcm9wZXJseSB1c2UgUm91
bmRlZFJlY3QgYXMgSW50UmVjdHMgaW5zdGVhZCBvZiBMYXlvdXRSZWN0cy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlclNpZGVzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVNpZGVSZWN0SW5jbHVkaW5nSW5uZXIpOiBE
aXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAg
ICAgKFJlbmRlckJveE1vZGVsT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9y
TGluZSk6IE91dGxpbmUgd2lkdGhzIGFyZSByZWxhdGVkIHRvIGJvcmRlcnMgYW5kIHN0b3JlZAor
ICAgICAgICBhcyBpbnRzLiBSZW1vdmluZyBhbiB1bm5lY2Vzc2FyeSBjb252ZXJzaW9uIHRvIExh
eW91dFVuaXRzLiBQaXhlbCBzbmFwcGluZyB0aGUgZWRnZXMgb2YgdGhlIGJveC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6ZHJhd0xpbmVGb3JCb3hTaWRlKTogTW92aW5nIGJhY2sgdG8gaW50ZWdlcnMgYW5kIHJl
bW92aW5nIGFuCisgICAgICAgIHVubmVjZXNzYXJ5IHBpeGVsU25hcHBlZEludFJlY3QgY2FsbC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKTogUGl4ZWwgc25h
cHBpbmcgdGhlIGNvbHVtbiBydWxlIHJlY3QgYW5kIHVzaW5nIGFuIGludGVnZXIKKyAgICAgICAg
Zm9yIG91dGxpbmVPZmZzZXQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgor
ICAgICAgICAoUmVuZGVyT2JqZWN0KToKKwogMjAxMi0wMi0yMyAgUGF0cmljayBHYW5zdGVyZXIg
IDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBbQ01ha2VdIEFkZCBXRUJLSVRfSU5DTFVE
RV9DT05GSUdfRklMRVNfSUZfRVhJU1RTIG1hY3JvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0VHlwZXMuaAkocmV2aXNpb24gMTA4NjQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xheW91dFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDExIEBAIGlu
bGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QKICAgICByZXR1cm4gcmVjdDsK
IH0KIAoraW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdEZyb21FZGdlcyhMYXlvdXRV
bml0IGxlZnQsIExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IHJpZ2h0LCBMYXlvdXRVbml0IGJv
dHRvbSkKK3sKKyAgICByZXR1cm4gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKTsKK30KKwogaW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgTGF5
b3V0U2l6ZSYgcykKIHsKICAgICByZXR1cm4gczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTA4NjQ4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5Myw3ICsyNTkz
LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAogICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgcnVsZVJpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IHJ1bGVMZWZ0ICsgcnVsZVRoaWNrbmVzcyA6IHJ1bGVMZWZ0ICsgY29udGVudFdpZHRoKCk7CiAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBydWxlVG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IHBhaW50T2Zmc2V0LnkoKSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIDogcGFp
bnRPZmZzZXQueSgpICsgcnVsZUxvZ2ljYWxMZWZ0IC0gcnVsZVRoaWNrbmVzcyAvIDIgKyBydWxl
QWRkOwogICAgICAgICAgICAgICAgIExheW91dFVuaXQgcnVsZUJvdHRvbSA9IGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBydWxlVG9wICsgY29udGVudEhlaWdodCgpIDogcnVsZVRvcCArIHJ1
bGVUaGlja25lc3M7Ci0gICAgICAgICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKHBhaW50SW5m
by5jb250ZXh0LCBydWxlTGVmdCwgcnVsZVRvcCwgcnVsZVJpZ2h0LCBydWxlQm90dG9tLCBib3hT
aWRlLCBydWxlQ29sb3IsIHJ1bGVTdHlsZSwgMCwgMCwgYW50aWFsaWFzKTsKKyAgICAgICAgICAg
ICAgICBJbnRSZWN0IHBpeGVsU25hcHBlZFJ1bGVSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdEZy
b21FZGdlcyhydWxlTGVmdCwgcnVsZVRvcCwgcnVsZVJpZ2h0LCBydWxlQm90dG9tKTsKKyAgICAg
ICAgICAgICAgICBkcmF3TGluZUZvckJveFNpZGUocGFpbnRJbmZvLmNvbnRleHQsIHBpeGVsU25h
cHBlZFJ1bGVSZWN0LngoKSwgcGl4ZWxTbmFwcGVkUnVsZVJlY3QueSgpLCBwaXhlbFNuYXBwZWRS
dWxlUmVjdC5tYXhYKCksIHBpeGVsU25hcHBlZFJ1bGVSZWN0Lm1heFkoKSwgYm94U2lkZSwgcnVs
ZUNvbG9yLCBydWxlU3R5bGUsIDAsIDAsIGFudGlhbGlhcyk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIHJ1bGVMb2dpY2FsTGVmdCA9IGN1cnJMb2dpY2FsTGVmdE9m
ZnNldDsKQEAgLTI2MTgsNyArMjYxOSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1u
UnVsZXMoUGFpbnQKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY29sQ291bnQ7
IGkrKykgewogICAgICAgICAgICAgcnVsZVJlY3QubW92ZShzdGVwKTsKLSAgICAgICAgICAgIGRy
YXdMaW5lRm9yQm94U2lkZShwYWludEluZm8uY29udGV4dCwgcnVsZVJlY3QueCgpLCBydWxlUmVj
dC55KCksIHJ1bGVSZWN0Lm1heFgoKSwgcnVsZVJlY3QubWF4WSgpLCBib3hTaWRlLCBydWxlQ29s
b3IsIHJ1bGVTdHlsZSwgMCwgMCwgYW50aWFsaWFzKTsKKyAgICAgICAgICAgIEludFJlY3QgcGl4
ZWxTbmFwcGVkUnVsZVJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KHJ1bGVSZWN0KTsKKyAgICAg
ICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShwYWludEluZm8uY29udGV4dCwgcGl4ZWxTbmFwcGVk
UnVsZVJlY3QueCgpLCBwaXhlbFNuYXBwZWRSdWxlUmVjdC55KCksIHBpeGVsU25hcHBlZFJ1bGVS
ZWN0Lm1heFgoKSwgcGl4ZWxTbmFwcGVkUnVsZVJlY3QubWF4WSgpLCBib3hTaWRlLCBydWxlQ29s
b3IsIHJ1bGVTdHlsZSwgMCwgMCwgYW50aWFsaWFzKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAkocmV2aXNpb24gMTA4NjQ4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4NSw3ICsxNTg1LDcgQEAg
c3RhdGljIGJvb2wgam9pblJlcXVpcmVzTWl0cmUoQm94U2lkZSBzaQogfQogCiB2b2lkIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludE9uZUJvcmRlclNpZGUoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUm91bmRlZFJlY3Qm
IG91dGVyQm9yZGVyLCBjb25zdCBSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIsCi0gICAgY29uc3Qg
TGF5b3V0UmVjdCYgc2lkZVJlY3QsIEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUx
LCBCb3hTaWRlIGFkamFjZW50U2lkZTIsIGNvbnN0IEJvcmRlckVkZ2UgZWRnZXNbXSwgY29uc3Qg
UGF0aCogcGF0aCwKKyAgICBjb25zdCBJbnRSZWN0JiBzaWRlUmVjdCwgQm94U2lkZSBzaWRlLCBC
b3hTaWRlIGFkamFjZW50U2lkZTEsIEJveFNpZGUgYWRqYWNlbnRTaWRlMiwgY29uc3QgQm9yZGVy
RWRnZSBlZGdlc1tdLCBjb25zdCBQYXRoKiBwYXRoLAogICAgIEJhY2tncm91bmRCbGVlZEF2b2lk
YW5jZSBibGVlZEF2b2lkYW5jZSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBib29sIGlu
Y2x1ZGVMb2dpY2FsUmlnaHRFZGdlLCBib29sIGFudGlhbGlhcywgY29uc3QgQ29sb3IqIG92ZXJy
aWRlQ29sb3IpCiB7CiAgICAgY29uc3QgQm9yZGVyRWRnZSYgZWRnZVRvUmVuZGVyID0gZWRnZXNb
c2lkZV07CkBAIC0xNjMwLDkgKzE2MzAsOSBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludE9uZUJvcmRlCiAgICAgfQogfQogCi1zdGF0aWMgTGF5b3V0UmVjdCBjYWxjdWxhdGVTaWRl
UmVjdChjb25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEJvcmRlckVkZ2UgZWRn
ZXNbXSwgaW50IHNpZGUpCitzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVTaWRlUmVjdChjb25zdCBS
b3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEJvcmRlckVkZ2UgZWRnZXNbXSwgaW50IHNp
ZGUpCiB7Ci0gICAgTGF5b3V0UmVjdCBzaWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKKyAg
ICBJbnRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwogICAgIGludCB3aWR0aCA9
IGVkZ2VzW3NpZGVdLndpZHRoOwogCiAgICAgaWYgKHNpZGUgPT0gQlNUb3ApCkBAIC0xNjU4LDcg
KzE2NTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlclNpCiAgICAg
ICAgIHJvdW5kZWRQYXRoLmFkZFJvdW5kZWRSZWN0KG91dGVyQm9yZGVyKTsKICAgICAKICAgICBp
ZiAoZWRnZXNbQlNUb3BdLnNob3VsZFJlbmRlcigpICYmIGluY2x1ZGVzRWRnZShlZGdlU2V0LCBC
U1RvcCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBzaWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3Qo
KTsKKyAgICAgICAgSW50UmVjdCBzaWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKICAgICAg
ICAgc2lkZVJlY3Quc2V0SGVpZ2h0KGVkZ2VzW0JTVG9wXS53aWR0aCk7CiAKICAgICAgICAgYm9v
bCB1c2VQYXRoID0gcmVuZGVyUmFkaWkgJiYgKGJvcmRlclN0eWxlSGFzSW5uZXJEZXRhaWwoZWRn
ZXNbQlNUb3BdLnN0eWxlKSB8fCBib3JkZXJXaWxsQXJjSW5uZXJFZGdlKGlubmVyQm9yZGVyLnJh
ZGlpKCkudG9wTGVmdCgpLCBpbm5lckJvcmRlci5yYWRpaSgpLnRvcFJpZ2h0KCkpKTsKQEAgLTE2
NjYsNyArMTY2Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyU2kK
ICAgICB9CiAKICAgICBpZiAoZWRnZXNbQlNCb3R0b21dLnNob3VsZFJlbmRlcigpICYmIGluY2x1
ZGVzRWRnZShlZGdlU2V0LCBCU0JvdHRvbSkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBzaWRlUmVj
dCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKKyAgICAgICAgSW50UmVjdCBzaWRlUmVjdCA9IG91dGVy
Qm9yZGVyLnJlY3QoKTsKICAgICAgICAgc2lkZVJlY3Quc2hpZnRZRWRnZVRvKHNpZGVSZWN0Lm1h
eFkoKSAtIGVkZ2VzW0JTQm90dG9tXS53aWR0aCk7CiAKICAgICAgICAgYm9vbCB1c2VQYXRoID0g
cmVuZGVyUmFkaWkgJiYgKGJvcmRlclN0eWxlSGFzSW5uZXJEZXRhaWwoZWRnZXNbQlNCb3R0b21d
LnN0eWxlKSB8fCBib3JkZXJXaWxsQXJjSW5uZXJFZGdlKGlubmVyQm9yZGVyLnJhZGlpKCkuYm90
dG9tTGVmdCgpLCBpbm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCkpKTsKQEAgLTE2NzQs
NyArMTY3NCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyU2kKICAg
ICB9CiAKICAgICBpZiAoZWRnZXNbQlNMZWZ0XS5zaG91bGRSZW5kZXIoKSAmJiBpbmNsdWRlc0Vk
Z2UoZWRnZVNldCwgQlNMZWZ0KSkgewotICAgICAgICBMYXlvdXRSZWN0IHNpZGVSZWN0ID0gb3V0
ZXJCb3JkZXIucmVjdCgpOworICAgICAgICBJbnRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIu
cmVjdCgpOwogICAgICAgICBzaWRlUmVjdC5zZXRXaWR0aChlZGdlc1tCU0xlZnRdLndpZHRoKTsK
IAogICAgICAgICBib29sIHVzZVBhdGggPSByZW5kZXJSYWRpaSAmJiAoYm9yZGVyU3R5bGVIYXNJ
bm5lckRldGFpbChlZGdlc1tCU0xlZnRdLnN0eWxlKSB8fCBib3JkZXJXaWxsQXJjSW5uZXJFZGdl
KGlubmVyQm9yZGVyLnJhZGlpKCkuYm90dG9tTGVmdCgpLCBpbm5lckJvcmRlci5yYWRpaSgpLnRv
cExlZnQoKSkpOwpAQCAtMTY4Miw3ICsxNjgyLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnRCb3JkZXJTaQogICAgIH0KIAogICAgIGlmIChlZGdlc1tCU1JpZ2h0XS5zaG91bGRS
ZW5kZXIoKSAmJiBpbmNsdWRlc0VkZ2UoZWRnZVNldCwgQlNSaWdodCkpIHsKLSAgICAgICAgTGF5
b3V0UmVjdCBzaWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKKyAgICAgICAgSW50UmVjdCBz
aWRlUmVjdCA9IG91dGVyQm9yZGVyLnJlY3QoKTsKICAgICAgICAgc2lkZVJlY3Quc2hpZnRYRWRn
ZVRvKHNpZGVSZWN0Lm1heFgoKSAtIGVkZ2VzW0JTUmlnaHRdLndpZHRoKTsKIAogICAgICAgICBi
b29sIHVzZVBhdGggPSByZW5kZXJSYWRpaSAmJiAoYm9yZGVyU3R5bGVIYXNJbm5lckRldGFpbChl
ZGdlc1tCU1JpZ2h0XS5zdHlsZSkgfHwgYm9yZGVyV2lsbEFyY0lubmVyRWRnZShpbm5lckJvcmRl
ci5yYWRpaSgpLmJvdHRvbVJpZ2h0KCksIGlubmVyQm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKSkp
OwpAQCAtMTgxMSw3ICsxODExLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRC
b3JkZXIoYwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IEJTVG9wOyBpIDw9IEJTTGVmdDsgKytp
KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQm9yZGVyRWRnZSYgY3VyckVkZ2UgPSBlZGdlc1tp
XTsKICAgICAgICAgICAgICAgICBpZiAoY3VyckVkZ2Uuc2hvdWxkUmVuZGVyKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBzaWRlUmVjdCA9IGNhbGN1bGF0ZVNpZGVSZWN0KG91
dGVyQm9yZGVyLCBlZGdlcywgaSk7CisgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc2lkZVJl
Y3QgPSBjYWxjdWxhdGVTaWRlUmVjdChvdXRlckJvcmRlciwgZWRnZXMsIGkpOwogICAgICAgICAg
ICAgICAgICAgICBwYXRoLmFkZFJlY3Qoc2lkZVJlY3QpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTI0MzMsOSArMjQzMyw5IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmNsaXBCb3JkZXJTaWQKICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBDb252ZXhQb2x5Z29u
KDQsIHNlY29uZFF1YWQsICFzZWNvbmRFZGdlTWF0Y2hlcyk7CiB9CiAKLXN0YXRpYyBMYXlvdXRS
ZWN0IGNhbGN1bGF0ZVNpZGVSZWN0SW5jbHVkaW5nSW5uZXIoY29uc3QgUm91bmRlZFJlY3QmIG91
dGVyQm9yZGVyLCBjb25zdCBCb3JkZXJFZGdlIGVkZ2VzW10sIEJveFNpZGUgc2lkZSkKK3N0YXRp
YyBJbnRSZWN0IGNhbGN1bGF0ZVNpZGVSZWN0SW5jbHVkaW5nSW5uZXIoY29uc3QgUm91bmRlZFJl
Y3QmIG91dGVyQm9yZGVyLCBjb25zdCBCb3JkZXJFZGdlIGVkZ2VzW10sIEJveFNpZGUgc2lkZSkK
IHsKLSAgICBMYXlvdXRSZWN0IHNpZGVSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOworICAgIElu
dFJlY3Qgc2lkZVJlY3QgPSBvdXRlckJvcmRlci5yZWN0KCk7CiAgICAgaW50IHdpZHRoOwogCiAg
ICAgc3dpdGNoIChzaWRlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gMTA4NjQ4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
MCw3ICsyMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJv
eFNpZGUsIGJvb2wgZmlyc3RFZGdlTWF0Y2hlcywgYm9vbCBzZWNvbmRFZGdlTWF0Y2hlcyk7CiAg
ICAgdm9pZCBjbGlwQm9yZGVyU2lkZUZvckNvbXBsZXhJbm5lclBhdGgoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgUm91bmRlZFJlY3QmLCBjb25zdCBSb3VuZGVkUmVjdCYsIEJveFNpZGUsIGNvbnN0
IGNsYXNzIEJvcmRlckVkZ2VbXSk7CiAgICAgdm9pZCBwYWludE9uZUJvcmRlclNpZGUoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJC
b3JkZXIsIGNvbnN0IFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgc2lkZVJlY3QsIEJveFNpZGUsIEJveFNp
ZGUgYWRqYWNlbnRTaWRlMSwgQm94U2lkZSBhZGphY2VudFNpZGUyLCBjb25zdCBjbGFzcyBCb3Jk
ZXJFZGdlW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3Qm
IHNpZGVSZWN0LCBCb3hTaWRlLCBCb3hTaWRlIGFkamFjZW50U2lkZTEsIEJveFNpZGUgYWRqYWNl
bnRTaWRlMiwgY29uc3QgY2xhc3MgQm9yZGVyRWRnZVtdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBQYXRoKiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBib29sIGlu
Y2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGJvb2wg
YW50aWFsaWFzLCBjb25zdCBDb2xvciogb3ZlcnJpZGVDb2xvciA9IDApOwogICAgIHZvaWQgcGFp
bnRUcmFuc2x1Y2VudEJvcmRlclNpZGVzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFJlbmRlclN0
eWxlKiwgY29uc3QgUm91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBSb3VuZGVkUmVjdCYg
aW5uZXJCb3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzIEJvcmRl
ckVkZ2VbXSwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlLCBib29sIGluY2x1ZGVMb2dpY2FsTGVm
dEVkZ2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UsIGJvb2wgYW50aWFsaWFzID0gZmFs
c2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJl
dmlzaW9uIDEwODY0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ2LDI0ICsxNDQ2LDI0IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENvbG9yIG91dGxpbmVDb2xvcikKIHsKICAgICBSZW5kZXJTdHlsZSog
c3R5bGVUb1VzZSA9IHN0eWxlKCk7Ci0gICAgTGF5b3V0VW5pdCBvdXRsaW5lV2lkdGggPSBzdHls
ZVRvVXNlLT5vdXRsaW5lV2lkdGgoKTsKKyAgICBpbnQgb3V0bGluZVdpZHRoID0gc3R5bGVUb1Vz
ZS0+b3V0bGluZVdpZHRoKCk7CiAgICAgRUJvcmRlclN0eWxlIG91dGxpbmVTdHlsZSA9IHN0eWxl
VG9Vc2UtPm91dGxpbmVTdHlsZSgpOwogCiAgICAgYm9vbCBhbnRpYWxpYXMgPSBzaG91bGRBbnRp
YWxpYXNMaW5lcyhncmFwaGljc0NvbnRleHQpOwogCi0gICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBz
dHlsZSgpLT5vdXRsaW5lT2Zmc2V0KCk7CisgICAgaW50IG9mZnNldCA9IHN0eWxlKCktPm91dGxp
bmVPZmZzZXQoKTsKIAotICAgIExheW91dFVuaXQgdG9wID0gcGFpbnRPZmZzZXQueSgpICsgdGhp
c2xpbmUueSgpIC0gb2Zmc2V0OwotICAgIExheW91dFVuaXQgbGVmdCA9IHBhaW50T2Zmc2V0Lngo
KSArIHRoaXNsaW5lLngoKSAtIG9mZnNldDsKLSAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHBhaW50
T2Zmc2V0LnkoKSArIHRoaXNsaW5lLm1heFkoKSArIG9mZnNldDsKLSAgICBMYXlvdXRVbml0IHJp
Z2h0ID0gcGFpbnRPZmZzZXQueCgpICsgdGhpc2xpbmUubWF4WCgpICsgb2Zmc2V0OworICAgIExh
eW91dFJlY3QgYm94KExheW91dFBvaW50KHBhaW50T2Zmc2V0LngoKSArIHRoaXNsaW5lLngoKSAt
IG9mZnNldCwgcGFpbnRPZmZzZXQueSgpICsgdGhpc2xpbmUueSgpIC0gb2Zmc2V0KSwKKyAgICAg
ICAgTGF5b3V0U2l6ZSh0aGlzbGluZS53aWR0aCgpICsgb2Zmc2V0LCB0aGlzbGluZS5oZWlnaHQo
KSArIG9mZnNldCkpOworCisgICAgSW50UmVjdCBwaXhlbFNuYXBwZWRCb3ggPSBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGJveCk7CiAgICAgCiAgICAgLy8gbGVmdCBlZGdlCiAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgbGVmdCAtIG91dGxpbmVXaWR0aCwKLSAg
ICAgICAgdG9wIC0gKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPCBsYXN0bGlu
ZS54KCkgfHwgKGxhc3RsaW5lLm1heFgoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG91dGxpbmVX
aWR0aCA6IHplcm9MYXlvdXRVbml0KSwKLSAgICAgICAgbGVmdCwKLSAgICAgICAgYm90dG9tICsg
KG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChu
ZXh0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdXRsaW5lV2lkdGggOiB6ZXJv
TGF5b3V0VW5pdCksCisgICAgICAgIHBpeGVsU25hcHBlZEJveC54KCkgLSBvdXRsaW5lV2lkdGgs
CisgICAgICAgIHBpeGVsU25hcHBlZEJveC55KCkgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRo
aXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgpIC0gMSkgPD0gdGhp
c2xpbmUueCgpID8gb3V0bGluZVdpZHRoIDogMCksCisgICAgICAgIHBpeGVsU25hcHBlZEJveC54
KCksCisgICAgICAgIHBpeGVsU25hcHBlZEJveC5tYXhZKCkgKyAobmV4dGxpbmUuaXNFbXB0eSgp
IHx8IHRoaXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwgKG5leHRsaW5lLm1heFgoKSAtIDEp
IDw9IHRoaXNsaW5lLngoKSA/IG91dGxpbmVXaWR0aCA6IDApLAogICAgICAgICBCU0xlZnQsCiAg
ICAgICAgIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLAogICAgICAgICAobGFzdGxpbmUuaXNF
bXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgp
IC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3V0bGluZVdpZHRoIDogLW91dGxpbmVXaWR0aCksCkBA
IC0xNDcyLDEwICsxNDcyLDEwIEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JM
aW5lKEcKICAgICAKICAgICAvLyByaWdodCBlZGdlCiAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdy
YXBoaWNzQ29udGV4dCwKLSAgICAgICAgcmlnaHQsCi0gICAgICAgIHRvcCAtIChsYXN0bGluZS5p
c0VtcHR5KCkgfHwgbGFzdGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGlu
ZS5tYXhYKCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdXRsaW5lV2lkdGggOiB6ZXJvTGF5b3V0
VW5pdCksCi0gICAgICAgIHJpZ2h0ICsgb3V0bGluZVdpZHRoLAotICAgICAgICBib3R0b20gKyAo
bmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0aGlzbGluZS5tYXhYKCkg
fHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG91dGxpbmVXaWR0aCA6
IHplcm9MYXlvdXRVbml0KSwKKyAgICAgICAgcGl4ZWxTbmFwcGVkQm94Lm1heFgoKSwKKyAgICAg
ICAgcGl4ZWxTbmFwcGVkQm94LnkoKSAtIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgbGFzdGxpbmUu
bWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBsYXN0
bGluZS54KCkgPyBvdXRsaW5lV2lkdGggOiAwKSwKKyAgICAgICAgcGl4ZWxTbmFwcGVkQm94Lm1h
eFgoKSArIG91dGxpbmVXaWR0aCwKKyAgICAgICAgcGl4ZWxTbmFwcGVkQm94Lm1heFkoKSArIChu
ZXh0bGluZS5pc0VtcHR5KCkgfHwgbmV4dGxpbmUubWF4WCgpIDw9IHRoaXNsaW5lLm1heFgoKSB8
fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbmV4dGxpbmUueCgpID8gb3V0bGluZVdpZHRoIDog
MCksCiAgICAgICAgIEJTUmlnaHQsCiAgICAgICAgIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxl
LAogICAgICAgICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLm1heFgoKSA8IHRoaXNs
aW5lLm1heFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3V0
bGluZVdpZHRoIDogLW91dGxpbmVXaWR0aCksCkBAIC0xNDg0LDMxICsxNDg0LDMxIEBAIHZvaWQg
UmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEcKICAgICAvLyB1cHBlciBlZGdlCiAg
ICAgaWYgKHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSkKICAgICAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgIGxlZnQgLSBvdXRsaW5lV2lkdGgs
Ci0gICAgICAgICAgICB0b3AgLSBvdXRsaW5lV2lkdGgsCi0gICAgICAgICAgICBtaW4ocmlnaHQg
KyBvdXRsaW5lV2lkdGgsIChsYXN0bGluZS5pc0VtcHR5KCkgPyAxMDAwMDAwIDogcGFpbnRPZmZz
ZXQueCgpICsgbGFzdGxpbmUueCgpKSksCi0gICAgICAgICAgICB0b3AsCisgICAgICAgICAgICBw
aXhlbFNuYXBwZWRCb3gueCgpIC0gb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgcGl4ZWxTbmFw
cGVkQm94LnkoKSAtIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIG1pbihwaXhlbFNuYXBwZWRC
b3gubWF4WCgpICsgb3V0bGluZVdpZHRoLCAobGFzdGxpbmUuaXNFbXB0eSgpID8gMTAwMDAwMCA6
IHBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLngoKSkpLAorICAgICAgICAgICAgcGl4ZWxTbmFw
cGVkQm94LnkoKSwKICAgICAgICAgICAgIEJTVG9wLCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHls
ZSwKICAgICAgICAgICAgIG91dGxpbmVXaWR0aCwKLSAgICAgICAgICAgICghbGFzdGxpbmUuaXNF
bXB0eSgpICYmIHBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLngoKSArIDEgPCByaWdodCArIG91
dGxpbmVXaWR0aCkgPyAtb3V0bGluZVdpZHRoIDogb3V0bGluZVdpZHRoLAorICAgICAgICAgICAg
KCFsYXN0bGluZS5pc0VtcHR5KCkgJiYgcGFpbnRPZmZzZXQueCgpICsgbGFzdGxpbmUueCgpICsg
MSA8IHBpeGVsU25hcHBlZEJveC5tYXhYKCkgKyBvdXRsaW5lV2lkdGgpID8gLW91dGxpbmVXaWR0
aCA6IG91dGxpbmVXaWR0aCwKICAgICAgICAgICAgIGFudGlhbGlhcyk7CiAgICAgCiAgICAgaWYg
KGxhc3RsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSkKICAgICAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgIG1heChsYXN0bGluZS5pc0VtcHR5
KCkgPyAtMTAwMDAwMCA6IHBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLm1heFgoKSwgbGVmdCAt
IG91dGxpbmVXaWR0aCksCi0gICAgICAgICAgICB0b3AgLSBvdXRsaW5lV2lkdGgsCi0gICAgICAg
ICAgICByaWdodCArIG91dGxpbmVXaWR0aCwKLSAgICAgICAgICAgIHRvcCwKKyAgICAgICAgICAg
IG1heChsYXN0bGluZS5pc0VtcHR5KCkgPyAtMTAwMDAwMCA6IHBhaW50T2Zmc2V0LngoKSArIGxh
c3RsaW5lLm1heFgoKSwgcGl4ZWxTbmFwcGVkQm94LngoKSAtIG91dGxpbmVXaWR0aCksCisgICAg
ICAgICAgICBwaXhlbFNuYXBwZWRCb3gueSgpIC0gb3V0bGluZVdpZHRoLAorICAgICAgICAgICAg
cGl4ZWxTbmFwcGVkQm94Lm1heFgoKSArIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIHBpeGVs
U25hcHBlZEJveC55KCksCiAgICAgICAgICAgICBCU1RvcCwgb3V0bGluZUNvbG9yLCBvdXRsaW5l
U3R5bGUsCi0gICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1wdHkoKSAmJiBsZWZ0IC0gb3V0bGlu
ZVdpZHRoIDwgcGFpbnRPZmZzZXQueCgpICsgbGFzdGxpbmUubWF4WCgpKSA/IC1vdXRsaW5lV2lk
dGggOiBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1wdHkoKSAmJiBw
aXhlbFNuYXBwZWRCb3gueCgpIC0gb3V0bGluZVdpZHRoIDwgcGFpbnRPZmZzZXQueCgpICsgbGFz
dGxpbmUubWF4WCgpKSA/IC1vdXRsaW5lV2lkdGggOiBvdXRsaW5lV2lkdGgsCiAgICAgICAgICAg
ICBvdXRsaW5lV2lkdGgsIGFudGlhbGlhcyk7CiAKICAgICBpZiAodGhpc2xpbmUueCgpID09IHRo
aXNsaW5lLm1heFgoKSkKICAgICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250
ZXh0LAotICAgICAgICAgICAgbGVmdCAtIG91dGxpbmVXaWR0aCwKLSAgICAgICAgICAgIHRvcCAt
IG91dGxpbmVXaWR0aCwKLSAgICAgICAgICAgIHJpZ2h0ICsgb3V0bGluZVdpZHRoLAotICAgICAg
ICAgICAgdG9wLAorICAgICAgICAgICAgcGl4ZWxTbmFwcGVkQm94LngoKSAtIG91dGxpbmVXaWR0
aCwKKyAgICAgICAgICAgIHBpeGVsU25hcHBlZEJveC55KCkgLSBvdXRsaW5lV2lkdGgsCisgICAg
ICAgICAgICBwaXhlbFNuYXBwZWRCb3gubWF4WCgpICsgb3V0bGluZVdpZHRoLAorICAgICAgICAg
ICAgcGl4ZWxTbmFwcGVkQm94LnkoKSwKICAgICAgICAgICAgIEJTVG9wLCBvdXRsaW5lQ29sb3Is
IG91dGxpbmVTdHlsZSwKICAgICAgICAgICAgIG91dGxpbmVXaWR0aCwKICAgICAgICAgICAgIG91
dGxpbmVXaWR0aCwKQEAgLTE1MTcsMzEgKzE1MTcsMzEgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBh
aW50T3V0bGluZUZvckxpbmUoRwogICAgIC8vIGxvd2VyIGVkZ2UKICAgICBpZiAodGhpc2xpbmUu
eCgpIDwgbmV4dGxpbmUueCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3ND
b250ZXh0LAotICAgICAgICAgICAgbGVmdCAtIG91dGxpbmVXaWR0aCwKLSAgICAgICAgICAgIGJv
dHRvbSwKLSAgICAgICAgICAgIG1pbihyaWdodCArIG91dGxpbmVXaWR0aCwgIW5leHRsaW5lLmlz
RW1wdHkoKSA/IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLngoKSArIDEgOiAxMDAwMDAwKSwK
LSAgICAgICAgICAgIGJvdHRvbSArIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIHBpeGVsU25h
cHBlZEJveC54KCkgLSBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICBwaXhlbFNuYXBwZWRCb3gu
bWF4WSgpLAorICAgICAgICAgICAgbWluKHBpeGVsU25hcHBlZEJveC5tYXhYKCkgKyBvdXRsaW5l
V2lkdGgsICFuZXh0bGluZS5pc0VtcHR5KCkgPyBwYWludE9mZnNldC54KCkgKyBuZXh0bGluZS54
KCkgKyAxIDogMTAwMDAwMCksCisgICAgICAgICAgICBwaXhlbFNuYXBwZWRCb3gubWF4WSgpICsg
b3V0bGluZVdpZHRoLAogICAgICAgICAgICAgQlNCb3R0b20sIG91dGxpbmVDb2xvciwgb3V0bGlu
ZVN0eWxlLAogICAgICAgICAgICAgb3V0bGluZVdpZHRoLAotICAgICAgICAgICAgKCFuZXh0bGlu
ZS5pc0VtcHR5KCkgJiYgcGFpbnRPZmZzZXQueCgpICsgbmV4dGxpbmUueCgpICsgMSA8IHJpZ2h0
ICsgb3V0bGluZVdpZHRoKSA/IC1vdXRsaW5lV2lkdGggOiBvdXRsaW5lV2lkdGgsCisgICAgICAg
ICAgICAoIW5leHRsaW5lLmlzRW1wdHkoKSAmJiBwYWludE9mZnNldC54KCkgKyBuZXh0bGluZS54
KCkgKyAxIDwgcGl4ZWxTbmFwcGVkQm94Lm1heFgoKSArIG91dGxpbmVXaWR0aCkgPyAtb3V0bGlu
ZVdpZHRoIDogb3V0bGluZVdpZHRoLAogICAgICAgICAgICAgYW50aWFsaWFzKTsKICAgICAKICAg
ICBpZiAobmV4dGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpKQogICAgICAgICBkcmF3TGlu
ZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICAgICAgbWF4KCFuZXh0bGluZS5p
c0VtcHR5KCkgPyBwYWludE9mZnNldC54KCkgKyBuZXh0bGluZS5tYXhYKCkgOiAtMTAwMDAwMCwg
bGVmdCAtIG91dGxpbmVXaWR0aCksCi0gICAgICAgICAgICBib3R0b20sCi0gICAgICAgICAgICBy
aWdodCArIG91dGxpbmVXaWR0aCwKLSAgICAgICAgICAgIGJvdHRvbSArIG91dGxpbmVXaWR0aCwK
KyAgICAgICAgICAgIG1heCghbmV4dGxpbmUuaXNFbXB0eSgpID8gcGFpbnRPZmZzZXQueCgpICsg
bmV4dGxpbmUubWF4WCgpIDogLTEwMDAwMDAsIHBpeGVsU25hcHBlZEJveC54KCkgLSBvdXRsaW5l
V2lkdGgpLAorICAgICAgICAgICAgcGl4ZWxTbmFwcGVkQm94Lm1heFkoKSwKKyAgICAgICAgICAg
IHBpeGVsU25hcHBlZEJveC5tYXhYKCkgKyBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICBwaXhl
bFNuYXBwZWRCb3gubWF4WSgpICsgb3V0bGluZVdpZHRoLAogICAgICAgICAgICAgQlNCb3R0b20s
IG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLAotICAgICAgICAgICAgKCFuZXh0bGluZS5pc0Vt
cHR5KCkgJiYgbGVmdCAtIG91dGxpbmVXaWR0aCA8IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5l
Lm1heFgoKSkgPyAtb3V0bGluZVdpZHRoIDogb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgKCFu
ZXh0bGluZS5pc0VtcHR5KCkgJiYgcGl4ZWxTbmFwcGVkQm94LngoKSAtIG91dGxpbmVXaWR0aCA8
IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLm1heFgoKSkgPyAtb3V0bGluZVdpZHRoIDogb3V0
bGluZVdpZHRoLAogICAgICAgICAgICAgb3V0bGluZVdpZHRoLCBhbnRpYWxpYXMpOwogCiAgICAg
aWYgKHRoaXNsaW5lLngoKSA9PSB0aGlzbGluZS5tYXhYKCkpCiAgICAgICAgICAgZHJhd0xpbmVG
b3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgIGxlZnQgLSBvdXRsaW5lV2lk
dGgsCi0gICAgICAgICAgICBib3R0b20sCi0gICAgICAgICAgICByaWdodCArIG91dGxpbmVXaWR0
aCwKLSAgICAgICAgICAgIGJvdHRvbSArIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIHBpeGVs
U25hcHBlZEJveC54KCkgLSBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICBwaXhlbFNuYXBwZWRC
b3gubWF4WSgpLAorICAgICAgICAgICAgcGl4ZWxTbmFwcGVkQm94Lm1heFgoKSArIG91dGxpbmVX
aWR0aCwKKyAgICAgICAgICAgIHBpeGVsU25hcHBlZEJveC5tYXhZKCkgKyBvdXRsaW5lV2lkdGgs
CiAgICAgICAgICAgICBCU0JvdHRvbSwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsCiAgICAg
ICAgICAgICBvdXRsaW5lV2lkdGgsCiAgICAgICAgICAgICBvdXRsaW5lV2lkdGgsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTA4NjQ4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgwNyw3ICs4MDcsNyBAQCBib29sIFJlbmRlck9iamVjdDo6bXVzdFJlcGFpbnRC
YWNrZ3JvdW5kCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6ZHJh
d0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBMYXlvdXRV
bml0IHgxLCBMYXlvdXRVbml0IHkxLCBMYXlvdXRVbml0IHgyLCBMYXlvdXRVbml0IHkyLAordm9p
ZCBSZW5kZXJPYmplY3Q6OmRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCb3hTaWRlIHNpZGUsIENvbG9yIGNvbG9yLCBFQm9y
ZGVyU3R5bGUgc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhZGphY2VudFdpZHRoMSwgaW50IGFkamFjZW50V2lkdGgyLCBib29sIGFudGlhbGlhcykKIHsK
QEAgLTk4Miw3ICs5ODIsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0xpbmVGb3JCb3hTaWRl
KEdyCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBtYXR0ZXJzIGZvciByZWN0cyBpbiB0cmFuc2Zv
cm1lZCBjb250ZXh0cy4KICAgICAgICAgICAgICAgICBib29sIHdhc0FudGlhbGlhc2VkID0gZ3Jh
cGhpY3NDb250ZXh0LT5zaG91bGRBbnRpYWxpYXMoKTsKICAgICAgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhhbnRpYWxpYXMpOwotICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd1JlY3QocGl4ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRSZWN0
KHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSkpKTsKKyAgICAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdSZWN0KEludFJlY3QoeDEsIHkxLCB4MiAtIHgxLCB5MiAtIHkxKSk7CiAgICAg
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMod2FzQW50aWFs
aWFzZWQpOwogICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUo
b2xkU3Ryb2tlU3R5bGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNDEsNyArMTE0
MSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoR3JhcGhpY3MKIAogICAgIENv
bG9yIG91dGxpbmVDb2xvciA9IHN0eWxlVG9Vc2UtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eU91dGxpbmVDb2xvcik7CiAKLSAgICBMYXlvdXRVbml0IG91dGxpbmVPZmZzZXQgPSBz
dHlsZVRvVXNlLT5vdXRsaW5lT2Zmc2V0KCk7CisgICAgaW50IG91dGxpbmVPZmZzZXQgPSBzdHls
ZVRvVXNlLT5vdXRsaW5lT2Zmc2V0KCk7CiAKICAgICBpZiAoc3R5bGVUb1VzZS0+b3V0bGluZVN0
eWxlSXNBdXRvKCkgfHwgaGFzT3V0bGluZUFubm90YXRpb24oKSkgewogICAgICAgICBpZiAoIXRo
ZW1lKCktPnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxlVG9Vc2UpKSB7CkBAIC0xMTUzLDEwICsxMTUz
LDEwIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoR3JhcGhpY3MKICAgICBpZiAo
c3R5bGVUb1VzZS0+b3V0bGluZVN0eWxlSXNBdXRvKCkgfHwgc3R5bGVUb1VzZS0+b3V0bGluZVN0
eWxlKCkgPT0gQk5PTkUpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91dFJlY3QgaW5uZXIg
PSBwYWludFJlY3Q7CisgICAgSW50UmVjdCBpbm5lciA9IHBpeGVsU25hcHBlZEludFJlY3QocGFp
bnRSZWN0KTsKICAgICBpbm5lci5pbmZsYXRlKG91dGxpbmVPZmZzZXQpOwogCi0gICAgTGF5b3V0
UmVjdCBvdXRlciA9IGlubmVyOworICAgIEludFJlY3Qgb3V0ZXIgPSBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGlubmVyKTsKICAgICBvdXRlci5pbmZsYXRlKG91dGxpbmVXaWR0aCk7CiAKICAgICAvLyBG
SVhNRTogVGhpcyBwcmV2ZW50cyBvdXRsaW5lcyBmcm9tIHBhaW50aW5nIGluc2lkZSB0aGUgb2Jq
ZWN0LiBTZWUgYnVnIDEyMDQyCkBAIC0xMTc4LDE0ICsxMTc4LDE0IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpwYWludE91dGxpbmUoR3JhcGhpY3MKICAgICAgICAgb3V0bGluZUNvbG9yID0gQ29sb3Io
b3V0bGluZUNvbG9yLnJlZCgpLCBvdXRsaW5lQ29sb3IuZ3JlZW4oKSwgb3V0bGluZUNvbG9yLmJs
dWUoKSk7CiAgICAgfQogCi0gICAgTGF5b3V0VW5pdCBsZWZ0T3V0ZXIgPSBvdXRlci54KCk7Ci0g
ICAgTGF5b3V0VW5pdCBsZWZ0SW5uZXIgPSBpbm5lci54KCk7Ci0gICAgTGF5b3V0VW5pdCByaWdo
dE91dGVyID0gb3V0ZXIubWF4WCgpOwotICAgIExheW91dFVuaXQgcmlnaHRJbm5lciA9IGlubmVy
Lm1heFgoKTsKLSAgICBMYXlvdXRVbml0IHRvcE91dGVyID0gb3V0ZXIueSgpOwotICAgIExheW91
dFVuaXQgdG9wSW5uZXIgPSBpbm5lci55KCk7Ci0gICAgTGF5b3V0VW5pdCBib3R0b21PdXRlciA9
IG91dGVyLm1heFkoKTsKLSAgICBMYXlvdXRVbml0IGJvdHRvbUlubmVyID0gaW5uZXIubWF4WSgp
OworICAgIGludCBsZWZ0T3V0ZXIgPSBvdXRlci54KCk7CisgICAgaW50IGxlZnRJbm5lciA9IGlu
bmVyLngoKTsKKyAgICBpbnQgcmlnaHRPdXRlciA9IG91dGVyLm1heFgoKTsKKyAgICBpbnQgcmln
aHRJbm5lciA9IGlubmVyLm1heFgoKTsKKyAgICBpbnQgdG9wT3V0ZXIgPSBvdXRlci55KCk7Cisg
ICAgaW50IHRvcElubmVyID0gaW5uZXIueSgpOworICAgIGludCBib3R0b21PdXRlciA9IG91dGVy
Lm1heFkoKTsKKyAgICBpbnQgYm90dG9tSW5uZXIgPSBpbm5lci5tYXhZKCk7CiAgICAgCiAgICAg
ZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgbGVmdE91dGVyLCB0b3BPdXRlciwg
bGVmdElubmVyLCBib3R0b21PdXRlciwgQlNMZWZ0LCBvdXRsaW5lQ29sb3IsIG91dGxpbmVTdHls
ZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgpOwogICAgIGRyYXdMaW5lRm9yQm94U2lkZShn
cmFwaGljc0NvbnRleHQsIGxlZnRPdXRlciwgdG9wT3V0ZXIsIHJpZ2h0T3V0ZXIsIHRvcElubmVy
LCBCU1RvcCwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIG91dGxpbmVXaWR0aCwgb3V0bGlu
ZVdpZHRoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJl
dmlzaW9uIDEwODY0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtODYwLDcgKzg2MCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOwogICAgIHZvaWQgcHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVu
KGJvb2wgYmxvY2tDaGlsZHJlbk9ubHkgPSBmYWxzZSk7CiAKLSAgICB2b2lkIGRyYXdMaW5lRm9y
Qm94U2lkZShHcmFwaGljc0NvbnRleHQqLCBMYXlvdXRVbml0IHgxLCBMYXlvdXRVbml0IHkxLCBM
YXlvdXRVbml0IHgyLCBMYXlvdXRVbml0IHkyLCBCb3hTaWRlLAorICAgIHZvaWQgZHJhd0xpbmVG
b3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5
MiwgQm94U2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciwgRUJvcmRlclN0
eWxlLCBpbnQgYWRqYncxLCBpbnQgYWRqYncyLCBib29sIGFudGlhbGlhcyA9IGZhbHNlKTsKIAog
ICAgIHZvaWQgcGFpbnRGb2N1c1JpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBSZW5kZXJTdHlsZSopOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>