<?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>122371</bug_id>
          
          <creation_ts>2013-10-04 19:48:20 -0700</creation_ts>
          <short_desc>Move paint() to RenderElement</short_desc>
          <delta_ts>2013-10-06 15:55:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>122381</dependson>
    
    <dependson>122410</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>d-r</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>rego+ews</cc>
    
    <cc>schenney</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>936487</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-04 19:48:20 -0700</bug_when>
    <thetext>RenderText does not paint itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936490</commentid>
    <comment_count>1</comment_count>
      <attachid>213435</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-04 20:06:01 -0700</bug_when>
    <thetext>Created attachment 213435
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936493</commentid>
    <comment_count>2</comment_count>
      <attachid>213435</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-04 20:32:50 -0700</bug_when>
    <thetext>Comment on attachment 213435
patch

Attachment 213435 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/3335002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936517</commentid>
    <comment_count>3</comment_count>
      <attachid>213435</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-04 22:51:48 -0700</bug_when>
    <thetext>Comment on attachment 213435
patch

Attachment 213435 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/3339031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936535</commentid>
    <comment_count>4</comment_count>
      <attachid>213435</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-10-05 00:35:06 -0700</bug_when>
    <thetext>Comment on attachment 213435
patch

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

&gt; Source/WebCore/rendering/RenderBox.cpp:1105
&gt; +        if (!child-&gt;isRenderElement())
&gt; +            continue;

Why is this check needed? We didn’t add a check in RenderFrameSet::paint, but we did here. I think the old code would have asserted if it ever called paint on a text renderer. And toRenderElement will assert. Is adding the check fixing some kind of bug?

&gt; Source/WebCore/rendering/RenderElement.h:90
&gt; +    virtual void paint(PaintInfo&amp;, const LayoutPoint&amp;) { }

Could this be pure virtual instead of empty? Are there any concrete element classes that actually paint nothing?

&gt; Source/WebCore/rendering/RenderObject.cpp:1241
&gt;  
&gt; -void RenderObject::paint(PaintInfo&amp;, const LayoutPoint&amp;)
&gt; -{
&gt; -}
&gt;  

Should remove one of the blank lines too.

&gt; Source/WebCore/rendering/svg/RenderSVGContainer.cpp:144
&gt; +                if (!child-&gt;isRenderElement())
&gt; +                    continue;

Why is this check needed? We didn’t add a check in RenderFrameSet::paint, but we did here. I think the old code would have asserted if it ever called paint on a text renderer. And toRenderElement will assert. Is adding the check fixing some kind of bug?

&gt; Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp:121
&gt; +    auto svgChildren = childrenOfType&lt;SVGElement&gt;(&amp;maskElement());

I think it would be nicer to call this just children, even if it’s limited to the SVG children. I just like words better than acronym-word combinations. Same applies to the other copies of this code in other files.

Looks like some non-Mac builds require an ElementChildIterator.h include in this file. I think that’s why the EWS bots are red.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp:124
&gt; +        SVGElement&amp; child = *it;
&gt; +        RenderElement* renderer = child.renderer();

I would have written:

    auto renderer = it-&gt;renderer();

No reason to have to repeat the type SVGElement nor the type RenderElement* and it would be nice to get a more specific type automatically in the future if possible.

Same applies to the other copies of this code in other files.

&gt; Source/WebCore/rendering/svg/SVGRenderingContext.h:83
&gt; +    static void renderSubtreeToImageBuffer(ImageBuffer*, RenderElement*, const AffineTransform&amp;);

Could change this to RenderElement&amp;; all the callers are already null checking it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936550</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-05 03:09:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Why is this check needed? We didn’t add a check in RenderFrameSet::paint, but we did here. I think the old code would have asserted if it ever called paint on a text renderer. And toRenderElement will assert. Is adding the check fixing some kind of bug?

It can be easily shown that RenderFrameSet can only have RenderElement children. This is definitely not true for all RenderBoxes. Almost everyone has their specialised paint but at least RenderSVGRoot calls to RenderBox::paint(). I&apos;m not sure it can&apos;t have RenderSVGInlineText children.

The right move would probably be to get rid of RenderBox::paint completely.

&gt; &gt; Source/WebCore/rendering/RenderElement.h:90
&gt; &gt; +    virtual void paint(PaintInfo&amp;, const LayoutPoint&amp;) { }
&gt; 
&gt; Could this be pure virtual instead of empty? Are there any concrete element classes that actually paint nothing?

Just RenderLineBreak. I&apos;ll add empty paint there and make this pure virtual.

&gt; Why is this check needed? We didn’t add a check in RenderFrameSet::paint, but we did here. I think the old code would have asserted if it ever called paint on a text renderer. And toRenderElement will assert. Is adding the check fixing some kind of bug?

Same as RenderBox. I can&apos;t easily prove that this can&apos;t happen. Old code would still be ok in release build. With new code we would have unsafe cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936551</commentid>
    <comment_count>6</comment_count>
      <attachid>213448</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-05 04:04:28 -0700</bug_when>
    <thetext>Created attachment 213448
for bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936554</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-05 04:57:36 -0700</bug_when>
    <thetext>https://trac.webkit.org/r156952</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936573</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-05 08:33:23 -0700</bug_when>
    <thetext>This made debug bots crash with an assertion, and Antti is not on IRC, so I&apos;m going to roll out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936575</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-05 08:35:48 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 122381</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936580</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-05 08:55:44 -0700</bug_when>
    <thetext>Rolled out in &lt;https://trac.webkit.org/r156954&gt;.

Crash log is here:

http://build.webkit.org/results/Apple%20MountainLion%20Debug%20WK2%20(Tests)/r156952%20(13137)/svg/custom/large-image-pattern-crash-crash-log.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936753</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-06 04:00:20 -0700</bug_when>
    <thetext>That assert is an existing bug revealed by switching to element iterators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936871</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-06 15:55:19 -0700</bug_when>
    <thetext>Relanded in https://trac.webkit.org/r157011</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213435</attachid>
            <date>2013-10-04 20:06:01 -0700</date>
            <delta_ts>2013-10-05 04:04:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderelement-paint-3.patch</filename>
            <type>text/plain</type>
            <size>29828</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTEwLTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHBhaW50KCkgdG8gUmVu
ZGVyRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIyMzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuZGVyVGV4dCBkb2VzIG5vdCBwYWludCBpdHNlbGYgKHRleHQgaXMgcGFpbnRlZCBieSBs
aW5lIGJveGVzKS4gV2UgY2FuIG1vdmUgcGFpbnQoKSBkb3duCisgICAgICAgIHRvIFJlbmRlckVs
ZW1lbnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGFsc28gcmVxdWlyZXMgc29tZSB0eXBlIHRp
Z2h0ZW5pbmcgZWxzZXdoZXJlIGluIHRoZSBjb2RlLgorCiAyMDEzLTEwLTA0ICBBbmRyZWFzIEts
aW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBDVFRFOiBQb2xpY3lDaGVja2VyIGJh
Y2twb2ludGVyIHRvIEZyYW1lIHNob3VsZCBiZSBhIHJlZmVyZW5jZS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNTY5MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDEy
ICsyMjYsMTMgQEAgdm9pZCBJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGZsb2F0IGR4LAogCiB2
b2lkIElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCAvKiBsaW5lVG9wICovLCBMYXlvdXRVbml0IC8q
bGluZUJvdHRvbSovKQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9v
dCgmcmVuZGVyZXIoKSkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpCisgICAgUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIgPSB0b1JlbmRlckVsZW1lbnQodGhpcy0+cmVuZGVyZXIoKSk7Cisg
ICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKSB8fCAocGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAh
PSBQYWludFBoYXNlU2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0UG9p
bnQgY2hpbGRQb2ludCA9IHBhaW50T2Zmc2V0OwotICAgIGlmIChwYXJlbnQoKS0+cmVuZGVyZXIo
KS5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpICYmIHJlbmRlcmVyKCkuaXNC
b3goKSkgLy8gRmFzdGVyIHRoYW4gY2FsbGluZyBjb250YWluaW5nQmxvY2soKS4KLSAgICAgICAg
Y2hpbGRQb2ludCA9IG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPmZsaXBGb3JXcml0aW5n
TW9kZUZvckNoaWxkKCZ0b1JlbmRlckJveChyZW5kZXJlcigpKSwgY2hpbGRQb2ludCk7CisgICAg
aWYgKHBhcmVudCgpLT5yZW5kZXJlcigpLnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkgJiYgcmVuZGVyZXIuaXNCb3goKSkgLy8gRmFzdGVyIHRoYW4gY2FsbGluZyBjb250YWlu
aW5nQmxvY2soKS4KKyAgICAgICAgY2hpbGRQb2ludCA9IG1fcmVuZGVyZXIuY29udGFpbmluZ0Js
b2NrKCktPmZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKCZ0b1JlbmRlckJveChyZW5kZXJlciks
IGNoaWxkUG9pbnQpOwogICAgIAogICAgIC8vIFBhaW50IGFsbCBwaGFzZXMgb2YgcmVwbGFjZWQg
ZWxlbWVudHMgYXRvbWljYWxseSwgYXMgdGhvdWdoIHRoZSByZXBsYWNlZCBlbGVtZW50IGVzdGFi
bGlzaGVkIGl0cwogICAgIC8vIG93biBzdGFja2luZyBjb250ZXh0LiAgKFNlZSBBcHBlbmRpeCBF
LjIsIHNlY3Rpb24gNi40IG9uIGlubGluZSBibG9jay90YWJsZSBlbGVtZW50cyBpbiB0aGUgQ1NT
Mi4xCkBAIC0yMzksMTYgKzI0MCwxNiBAQCB2b2lkIElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluCiAgICAgYm9vbCBwcmVzZXJ2ZVBoYXNlID0gcGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VTZWxlY3Rpb24gfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VUZXh0Q2xp
cDsKICAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOwogICAgIGluZm8ucGhhc2UgPSBwcmVz
ZXJ2ZVBoYXNlID8gcGFpbnRJbmZvLnBoYXNlIDogUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZDsK
LSAgICBtX3JlbmRlcmVyLnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOworICAgIHJlbmRlcmVyLnBh
aW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgIGlmICghcHJlc2VydmVQaGFzZSkgewogICAgICAg
ICBpbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kczsKLSAgICAgICAg
bV9yZW5kZXJlci5wYWludChpbmZvLCBjaGlsZFBvaW50KTsKKyAgICAgICAgcmVuZGVyZXIucGFp
bnQoaW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgIGluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxv
YXQ7Ci0gICAgICAgIG1fcmVuZGVyZXIucGFpbnQoaW5mbywgY2hpbGRQb2ludCk7CisgICAgICAg
IHJlbmRlcmVyLnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAgICAgICBpbmZvLnBoYXNlID0g
UGFpbnRQaGFzZUZvcmVncm91bmQ7Ci0gICAgICAgIG1fcmVuZGVyZXIucGFpbnQoaW5mbywgY2hp
bGRQb2ludCk7CisgICAgICAgIHJlbmRlcmVyLnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAg
ICAgICBpbmZvLnBoYXNlID0gUGFpbnRQaGFzZU91dGxpbmU7Ci0gICAgICAgIG1fcmVuZGVyZXIu
cGFpbnQoaW5mbywgY2hpbGRQb2ludCk7CisgICAgICAgIHJlbmRlcmVyLnBhaW50KGluZm8sIGNo
aWxkUG9pbnQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVC
b3guaAkocmV2aXNpb24gMTU2OTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNiArMTgxLDcgQEAgcHVibGljOgogICAgIElu
bGluZUJveCogbmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkgY29uc3Q7CiAgICAgSW5s
aW5lQm94KiBwcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKSBjb25zdDsKIAorICAgIC8v
IEZJWE1FOiBUaGVyZSBzaG91bGQgYmUgYSBzdWJjbGFzcyB0aGF0IHJldHVybnMgUmVuZGVyRWxl
bWVudC4gUGxhaW4gSW5saW5lQm94IHNob3VsZG4ndCBiZSBpbnN0YW50aWF0ZWQuCiAgICAgUmVu
ZGVyT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KIAogICAg
IElubGluZUZsb3dCb3gqIHBhcmVudCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNTY5MzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOTgs
NyArMTI5OCw3IEBAIHN0YXRpYyBMYXlvdXRSZWN0IGNsaXBSZWN0Rm9yTmluZVBpZWNlSW0KIAog
dm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgaWYgKCFwYWludElu
Zm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCZyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLnN0eWxl
KCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBo
YXNlRm9yZWdyb3VuZCkKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3Qo
cmVuZGVyZXIoKSkgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSB8fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFBpeGVsIHNuYXAgYmFja2dyb3VuZC9ib3JkZXIgcGFpbnRpbmcuCkBA
IC0xMzcyLDcgKzEzNzIsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlv
bnMoCiAKIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRNYXNrKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgaWYgKCFwYWludEluZm8u
c2hvdWxkUGFpbnRXaXRoaW5Sb290KCZyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLnN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
TWFzaykKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QocmVuZGVyZXIo
KSkgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZU1hc2spCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFBpeGVsIHNuYXAgbWFzayBwYWludGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDggKzUx
OCw4IEBAIHN0YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGMKIAogdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0IC8qbGluZVRvcCovLCBMYXlvdXRVbml0IC8qbGlu
ZUJvdHRvbSovKQogewotICAgIGlmIChpc0xpbmVCcmVhaygpIHx8ICFwYWludEluZm8uc2hvdWxk
UGFpbnRXaXRoaW5Sb290KCZyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLnN0eWxlKCktPnZpc2li
aWxpdHkoKSAhPSBWSVNJQkxFIHx8Ci0gICAgICAgIG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5j
YXRpb24gfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8ICFtX2xlbikK
KyAgICBpZiAoaXNMaW5lQnJlYWsoKSB8fCAhcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9v
dChyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJ
QkxFCisgICAgICAgIHx8IG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24gfHwgcGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8ICFtX2xlbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgQVNTRVJUKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZk91dGxpbmUg
JiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODAsOSAr
ODAsOSBAQCBzdHJ1Y3QgUGFpbnRJbmZvIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wg
c2hvdWxkUGFpbnRXaXRoaW5Sb290KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpIGNvbnN0
CisgICAgYm9vbCBzaG91bGRQYWludFdpdGhpblJvb3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhc3VidHJlZVBhaW50Um9vdCB8fCBz
dWJ0cmVlUGFpbnRSb290ID09IHJlbmRlcmVyOworICAgICAgICByZXR1cm4gIXN1YnRyZWVQYWlu
dFJvb3QgfHwgc3VidHJlZVBhaW50Um9vdCA9PSAmcmVuZGVyZXI7CiAgICAgfQogCiAgICAgYm9v
bCBmb3JjZUJsYWNrVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHBhaW50QmVoYXZpb3IgJiBQYWludEJl
aGF2aW9yRm9yY2VCbGFja1RleHQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTU2OTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzNSw3ICsyMjM1LDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgIC8vIE91ciBzY3Jv
bGxiYXIgd2lkZ2V0cyBwYWludCBleGFjdGx5IHdoZW4gd2UgdGVsbCB0aGVtIHRvLCBzbyB0aGF0
IHRoZXkgd29yayBwcm9wZXJseSB3aXRoCiAgICAgLy8gei1pbmRleC4gIFdlIHBhaW50IGFmdGVy
IHdlIHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3JvbGxiYXJz
IHdpbGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVyLgotICAgIGlmICho
YXNPdmVyZmxvd0NsaXAoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiAo
cGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwaGFzZSA9PSBQYWludFBoYXNl
Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3Qo
dGhpcykgJiYgIXBhaW50SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQorICAgIGlmICho
YXNPdmVyZmxvd0NsaXAoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiAo
cGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwaGFzZSA9PSBQYWludFBoYXNl
Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3Qo
KnRoaXMpICYmICFwYWludEluZm8ucGFpbnRSb290QmFja2dyb3VuZE9ubHkoKSkKICAgICAgICAg
bGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0LCByb3VuZGVk
SW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50SW5mby5yZWN0KTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDE1NjkzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTAwLDggKzExMDAsMTEgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbgogICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uIEp1c3QgcGFzcyBwYWludCB0
aHJvdWdoIHRvIHRoZSBjaGlsZHJlbgogICAgIFBhaW50SW5mbyBjaGlsZEluZm8ocGFpbnRJbmZv
KTsKICAgICBjaGlsZEluZm8udXBkYXRlU3VidHJlZVBhaW50Um9vdEZvckNoaWxkcmVuKHRoaXMp
OwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5wYWludChjaGlsZElu
Zm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgaWYgKCFjaGlsZC0+aXNSZW5kZXJFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgdG9SZW5kZXJFbGVtZW50KGNoaWxkKS0+cGFpbnQoY2hpbGRJbmZvLCBhZGp1
c3RlZFBhaW50T2Zmc2V0KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpwYWludFJvb3RC
b3hGaWxsTGF5ZXJzKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQpAQCAtMTE1NCw3ICsxMTU3
LDcgQEAgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlIFJlbmRlckJveDo6ZGV0ZQogCiB2b2lkIFJl
bmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBh
aW50V2l0aGluUm9vdCh0aGlzKSkKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhp
blJvb3QoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRSZWN0IHBhaW50UmVj
dCA9IGJvcmRlckJveFJlY3RJblJlZ2lvbihwYWludEluZm8ucmVuZGVyUmVnaW9uKTsKQEAgLTEz
NzUsNyArMTM3OCw3IEBAIGJvb2wgUmVuZGVyQm94OjpiYWNrZ3JvdW5kSGFzT3BhcXVlVG9wTGEK
IAogdm9pZCBSZW5kZXJCb3g6OnBhaW50TWFzayhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBh
aW50V2l0aGluUm9vdCh0aGlzKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8
fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZU1hc2sgfHwgcGFpbnRJbmZvLmNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhp
blJvb3QoKnRoaXMpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlTWFzayB8fCBwYWludEluZm8uY29udGV4dC0+cGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRSZWN0IHBhaW50UmVj
dCA9IExheW91dFJlY3QocGFpbnRPZmZzZXQsIHNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYg
Kzg3LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlv
dXQoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKICAgICB2b2lkIHNldE5lZWRzU2ltcGxp
ZmllZE5vcm1hbEZsb3dMYXlvdXQoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIHsgfQorCiAgICAgLy8gUmV0dXJuIHRoZSByZW5kZXJl
ciB3aG9zZSBiYWNrZ3JvdW5kIHN0eWxlIGlzIHVzZWQgdG8gcGFpbnQgdGhlIHJvb3QgYmFja2dy
b3VuZC4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSByZW5kZXJlciBmb3Igd2hpY2ggaXNS
b290KCkgaXMgdHJ1ZS4KICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclJvb3RCYWNrZ3Jv
dW5kKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0
LmNwcAkocmV2aXNpb24gMTU2OTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZpZWxkc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIFJlbmRlckJv
eCogUmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdlbmQoRmkKIAogdm9pZCBSZW5kZXJGaWVsZHNldDo6
cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGlu
Um9vdCh0aGlzKSkKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRo
aXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRSZWN0IHBhaW50UmVjdChwYWludE9m
ZnNldCwgc2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFt
ZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0LmNwcAkocmV2aXNpb24gMTU2OTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZv
aWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICBmb3IgKHNpemVfdCBy
ID0gMDsgciA8IHJvd3M7IHIrKykgewogICAgICAgICBMYXlvdXRVbml0IHhQb3MgPSAwOwogICAg
ICAgICBmb3IgKHNpemVfdCBjID0gMDsgYyA8IGNvbHM7IGMrKykgewotICAgICAgICAgICAgY2hp
bGQtPnBhaW50KHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CisgICAgICAgICAgICB0
b1JlbmRlckVsZW1lbnQoY2hpbGQpLT5wYWludChwYWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZz
ZXQpOwogICAgICAgICAgICAgeFBvcyArPSBtX2NvbHMubV9zaXplc1tjXTsKICAgICAgICAgICAg
IGlmIChib3JkZXJUaGlja25lc3MgJiYgbV9jb2xzLm1fYWxsb3dCb3JkZXJbYyArIDFdKSB7CiAg
ICAgICAgICAgICAgICAgcGFpbnRDb2x1bW5Cb3JkZXIocGFpbnRJbmZvLCBwaXhlbFNuYXBwZWRJ
bnRSZWN0KExheW91dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyB4UG9zLCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LnkoKSArIHlQb3MsIGJvcmRlclRoaWNrbmVzcywgaGVpZ2h0KCkpKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24g
MTU2OTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMzgsOSArMTIzOCw2IEBAIExheW91dFJlY3QgUmVuZGVyT2JqZWN0
OjpwYWludGluZ1Jvb3RSZWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlbmRlck9i
amVjdDo6cGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKQotewotfQogCiBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5lckZvclJlcGFpbnQoKSBj
b25zdAogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2
aXNpb24gMTU2OTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NTMsOCArNjUzLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
SGFzVHJhbnNmb3JtKGJvb2wgYiA9IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0SGFzVHJhbnNmb3Jt
KGIpOyB9CiAgICAgdm9pZCBzZXRIYXNSZWZsZWN0aW9uKGJvb2wgYiA9IHRydWUpIHsgbV9iaXRm
aWVsZHMuc2V0SGFzUmVmbGVjdGlvbihiKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0KICAgICAvLyBSZWN1cnNpdmUgZnVuY3Rp
b24gdGhhdCBjb21wdXRlcyB0aGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhpcyBvYmplY3QgYW5k
IGFsbCBpdHMgZGVzY2VuZGFudHMuCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9u
IDE1NjkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpw
YWludChQYWludEluZm8mIHBhCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
Rm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiAh
Y2FuSGF2ZUNoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoIXBhaW50
SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QodGhpcykpCisgICAgaWYgKCFwYWludEluZm8uc2hv
dWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGJv
b2wgZHJhd1NlbGVjdGlvblRpbnQgPSBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUg
JiYgIWRvY3VtZW50KCkucHJpbnRpbmcoKTsKQEAgLTE3Niw3ICsxNzYsNyBAQCBib29sIFJlbmRl
clJlcGxhY2VkOjpzaG91bGRQYWludChQYWludEluCiAgICAgICAgICAgICAmJiBwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZU1hc2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghcGFpbnRJbmZvLnNo
b3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSkKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWlu
dFdpdGhpblJvb3QoKnRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAg
IC8vIGlmIHdlJ3JlIGludmlzaWJsZSBvciBoYXZlbid0IHJlY2VpdmVkIGEgbGF5b3V0IHlldCwg
dGhlbiBqdXN0IGJhaWwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAJKHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1MSw5ICs2NTEsMTIgQEAgdm9pZCBSZW5k
ZXJUYWJsZTo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJgogICAgIGluZm8udXBkYXRlU3VidHJlZVBh
aW50Um9vdEZvckNoaWxkcmVuKHRoaXMpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewot
ICAgICAgICBpZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQtPmlz
VGFibGVDYXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0g
ZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQodG9SZW5kZXJCb3goY2hpbGQpLCBwYWludE9mZnNl
dCk7Ci0gICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgY2hpbGRQb2ludCk7CisgICAgICAg
IGlmICghY2hpbGQtPmlzQm94KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVu
ZGVyQm94JiBib3ggPSB0b1JlbmRlckJveCgqY2hpbGQpOworICAgICAgICBpZiAoIWJveC5oYXNT
ZWxmUGFpbnRpbmdMYXllcigpICYmIChib3guaXNUYWJsZVNlY3Rpb24oKSB8fCBib3guaXNUYWJs
ZUNhcHRpb24oKSkpIHsKKyAgICAgICAgICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBmbGlw
Rm9yV3JpdGluZ01vZGVGb3JDaGlsZCgmYm94LCBwYWludE9mZnNldCk7CisgICAgICAgICAgICBi
b3gucGFpbnQoaW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02
OTcsNyArNzAwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6c3VidHJhY3RDYXB0aW9uUmVjdChMYQog
CiB2b2lkIFJlbmRlclRhYmxlOjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgaWYgKCFwYWludElu
Zm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpKQorICAgIGlmICghcGFpbnRJbmZvLnNob3Vs
ZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFJl
Y3QgcmVjdChwYWludE9mZnNldCwgc2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAxNTY5MzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE1Niw3ICsxMTU2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9y
ZAogewogICAgIEFTU0VSVChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNvbGxhcHNlZFRh
YmxlQm9yZGVycyk7CiAKLSAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3Qo
dGhpcykgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYgKCFwYWlu
dEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0UmVjdCBsb2NhbFJl
cGFpbnRSZWN0ID0gcGFpbnRJbmZvLnJlY3Q7CkBAIC0xMjY2LDcgKzEyNjYsNyBAQCB2b2lkIFJl
bmRlclRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkCiAKIHZvaWQgUmVuZGVyVGFibGVDZWxs
OjpwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBSZW5kZXJFbGVtZW50KiBiYWNrZ3JvdW5kT2JqZWN0
KQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSkKKyAg
ICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIWJhY2tncm91bmRPYmplY3QpCkBAIC0xMzAyLDcgKzEzMDIsNyBA
QCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlCiAKIHZvaWQgUmVuZGVy
VGFibGVDZWxsOjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgaWYgKCFwYWludEluZm8uc2hvdWxk
UGFpbnRXaXRoaW5Sb290KHRoaXMpKQorICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0
aGluUm9vdCgqdGhpcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlclRhYmxlKiB0YWJs
ZUVsdCA9IHRhYmxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJ
KHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNiBAQCBwcml2YXRlOgogICAgIC8vIGNh
bGxlcnMgd2l0aCBhIFJlbmRlck9iamVjdCogY2FuIGNvbnRpbnVlIHRvIHVzZSBsZW5ndGgoKS4K
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0
dXJuIHRleHRMZW5ndGgoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50JikgT1ZFUlJJREUgRklOQUwgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERSBGSU5BTCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0
IExheW91dFBvaW50JiwgSGl0VGVzdEFjdGlvbikgT1ZFUlJJREUgRklOQUwgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM4LDcgKzQzOCw3IEBA
IHZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEkKICAgICBBU1NFUlQoTGF5
b3V0UG9pbnQoSW50UG9pbnQocGFpbnRPZmZzZXQueCgpLCBwYWludE9mZnNldC55KCkpKSA9PSBw
YWludE9mZnNldCk7CiAKICAgICAvLyBUaGlzIGF2b2lkcyBwYWludGluZyBnYXJiYWdlIGJldHdl
ZW4gY29sdW1ucyBpZiB0aGVyZSBpcyBhIGNvbHVtbiBnYXAuCi0gICAgaWYgKGZyYW1lVmlldygp
LnBhZ2luYXRpb24oKS5tb2RlICE9IFBhZ2luYXRpb246OlVucGFnaW5hdGVkICYmIHBhaW50SW5m
by5zaG91bGRQYWludFdpdGhpblJvb3QodGhpcykpCisgICAgaWYgKGZyYW1lVmlldygpLnBhZ2lu
YXRpb24oKS5tb2RlICE9IFBhZ2luYXRpb246OlVucGFnaW5hdGVkICYmIHBhaW50SW5mby5zaG91
bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQogICAgICAgICBwYWludEluZm8uY29udGV4dC0+Zmls
bFJlY3QocGFpbnRJbmZvLnJlY3QsIGZyYW1lVmlldygpLmJhc2VCYWNrZ3JvdW5kQ29sb3IoKSwg
Q29sb3JTcGFjZURldmljZVJHQik7CiAKICAgICBwYWludE9iamVjdChwYWludEluZm8sIHBhaW50
T2Zmc2V0KTsKQEAgLTQ3Miw3ICs0NzIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmVuZGVyZXJP
YnNjdXJlc0JhY2tnCiAKIHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQogewotICAgIGlmICghcGFpbnRJ
bmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSkKKyAgICBpZiAoIXBhaW50SW5mby5zaG91
bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgd2UgYXJlIGVuY2xvc2VkIGJ5IGEgbGF5ZXIgdGhhdCByZXF1aXJlcyBjb21w
bGV4IHBhaW50aW5nIHJ1bGVzLiAgSWYgc28sIHdlIGNhbm5vdCBibGl0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNTY5MzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OSw3ICsxNjksNyBAQCBmbG9hdCBSb290SW5saW5lQm94OjpwbGFjZUVsbGlwc2lz
Qm94KGJvCiAKIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnRFbGxpcHNpc0JveChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3QKIHsKLSAgICBpZiAoaGFzRWxsaXBz
aXNCb3goKSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCZyZW5kZXJlcigpKSAm
JiByZW5kZXJlcigpLnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFCisgICAgaWYgKGhh
c0VsbGlwc2lzQm94KCkgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJl
cigpKSAmJiByZW5kZXJlcigpLnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFCiAgICAg
ICAgICAgICAmJiBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAg
ICAgIGVsbGlwc2lzQm94KCktPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIGxpbmVUb3As
IGxpbmVCb3R0b20pOwogfQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6
YWRkSGlnaGxpZ2h0T3ZlcmZsb3cKIAogdm9pZCBSb290SW5saW5lQm94OjpwYWludEN1c3RvbUhp
Z2hsaWdodChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGhpZ2hsaWdodFR5cGUpCiB7Ci0gICAgaWYgKCFwYWlu
dEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCZyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLnN0
eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlRm9yZWdyb3VuZCkKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJv
b3QocmVuZGVyZXIoKSkgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklT
SUJMRSB8fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFBhZ2UqIHBhZ2UgPSByZW5kZXJlcigpLmZyYW1lKCkucGFnZSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcAkocmV2aXNpb24gMTU2OTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksOCArMTM5
LDExIEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8KIAogICAgICAg
ICBpZiAoY29udGludWVSZW5kZXJpbmcpIHsKICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZvLnVw
ZGF0ZVN1YnRyZWVQYWludFJvb3RGb3JDaGlsZHJlbih0aGlzKTsKLSAgICAgICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJ
bmZvLCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNoaWxkLT5pc1JlbmRlckVsZW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdG9SZW5kZXJFbGVtZW50KGNoaWxk
KS0+cGFpbnQoY2hpbGRQYWludEluZm8sIEludFBvaW50KCkpOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2aXNpb24gMTU2
OTM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
KyNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMjIwLDEwICsyMjEs
MTMgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZQogICAgIHZpZXco
KS5mcmFtZVZpZXcoKS5zZXRQYWludEJlaGF2aW9yKG9sZEJlaGF2aW9yIHwgUGFpbnRCZWhhdmlv
clJlbmRlcmluZ1NWR01hc2spOwogCiAgICAgLy8gRHJhdyBhbGwgY2xpcFBhdGggY2hpbGRyZW4g
aW50byBhIGdsb2JhbCBtYXNrLgotICAgIGZvciAoTm9kZSogY2hpbGROb2RlID0gY2xpcFBhdGhF
bGVtZW50KCkuZmlyc3RDaGlsZCgpOyBjaGlsZE5vZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+
bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY2hpbGRO
b2RlLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIWNoaWxkTm9kZS0+aXNTVkdFbGVtZW50KCkg
fHwgIXJlbmRlcmVyKQorICAgIGF1dG8gc3ZnQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdF
bGVtZW50PigmY2xpcFBhdGhFbGVtZW50KCkpOworICAgIGZvciAoYXV0byBpdCA9IHN2Z0NoaWxk
cmVuLmJlZ2luKCksIGVuZCA9IHN2Z0NoaWxkcmVuLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgU1ZHRWxlbWVudCYgY2hpbGQgPSAqaXQ7CisgICAgICAgIFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyID0gY2hpbGQucmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIGlmIChyZW5kZXJlci0+bmVlZHNMYXlvdXQo
KSkgewogICAgICAgICAgICAgdmlldygpLmZyYW1lVmlldygpLnNldFBhaW50QmVoYXZpb3Iob2xk
QmVoYXZpb3IpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjMzLDEzICsyMzcsMTMg
QEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZQogICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgV2luZFJ1bGUgbmV3Q2xpcFJ1bGUgPSBzdHlsZS0+c3ZnU3R5
bGUoKS0+Y2xpcFJ1bGUoKTsKLSAgICAgICAgYm9vbCBpc1VzZUVsZW1lbnQgPSBjaGlsZE5vZGUt
Pmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZyk7CisgICAgICAgIGJvb2wgaXNVc2VFbGVtZW50
ID0gY2hpbGQuaGFzVGFnTmFtZShTVkdOYW1lczo6dXNlVGFnKTsKICAgICAgICAgaWYgKGlzVXNl
RWxlbWVudCkgewotICAgICAgICAgICAgU1ZHVXNlRWxlbWVudCogdXNlRWxlbWVudCA9IHRvU1ZH
VXNlRWxlbWVudChjaGlsZE5vZGUpOwotICAgICAgICAgICAgcmVuZGVyZXIgPSB1c2VFbGVtZW50
LT5yZW5kZXJlckNsaXBDaGlsZCgpOworICAgICAgICAgICAgU1ZHVXNlRWxlbWVudCYgdXNlRWxl
bWVudCA9IHRvU1ZHVXNlRWxlbWVudChjaGlsZCk7CisgICAgICAgICAgICByZW5kZXJlciA9IHVz
ZUVsZW1lbnQucmVuZGVyZXJDbGlwQ2hpbGQoKTsKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXVzZUVsZW1lbnQt
Pmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6Y2xpcF9ydWxlQXR0cikpCisgICAgICAgICAgICBpZiAo
IXVzZUVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjpjbGlwX3J1bGVBdHRyKSkKICAgICAg
ICAgICAgICAgICBuZXdDbGlwUnVsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5j
bGlwUnVsZSgpOwogICAgICAgICB9CiAKQEAgLTI1Miw3ICsyNTYsNyBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlCiAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEg
PHVzZT4gZWxlbWVudCwgd2Ugb2J0YWluZWQgaXRzIHJlbmRlcmVyZSBhYm92ZSwgdG8gcmV0cmll
dmUgaXRzIGNsaXBSdWxlLgogICAgICAgICAvLyBXZSBoYXZlIHRvIHBhc3MgdGhlIDx1c2U+IHJl
bmRlcmVyIGl0c2VsZiB0byByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcigpIHRvIGFwcGx5IGl0
J3MgeC95L3RyYW5zZm9ybS9ldGMuIHZhbHVlcyB3aGVuIHJlbmRlcmluZy4KICAgICAgICAgLy8g
U28gaWYgaXNVc2VFbGVtZW50IGlzIHRydWUsIHJlZmV0Y2ggdGhlIGNoaWxkTm9kZS0+cmVuZGVy
ZXIoKSwgYXMgcmVuZGVyZXIgZ290IG92ZXJyaWRlbiBhYm92ZS4KLSAgICAgICAgU1ZHUmVuZGVy
aW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoY2xpcHBlckRhdGEtPmNsaXBN
YXNrSW1hZ2UuZ2V0KCksIGlzVXNlRWxlbWVudCA/IGNoaWxkTm9kZS0+cmVuZGVyZXIoKSA6IHJl
bmRlcmVyLCBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKKyAgICAgICAgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoY2xpcHBlckRhdGEtPmNsaXBNYXNr
SW1hZ2UuZ2V0KCksIGlzVXNlRWxlbWVudCA/IGNoaWxkLnJlbmRlcmVyKCkgOiByZW5kZXJlciwg
bWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbik7CiAgICAgfQogCiAgICAgdmlldygpLmZyYW1lVmll
dygpLnNldFBhaW50QmVoYXZpb3Iob2xkQmVoYXZpb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJ
KHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOSArMTE4LDExIEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmRyYXdDb250ZW4KICAgICB9CiAKICAgICAv
LyBEcmF3IHRoZSBjb250ZW50IGludG8gdGhlIEltYWdlQnVmZmVyLgotICAgIGZvciAoTm9kZSog
bm9kZSA9IG1hc2tFbGVtZW50KCkuZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVu
ZGVyZXIoKTsKLSAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSB8fCAhcmVuZGVyZXIp
CisgICAgYXV0byBzdmdDaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNWR0VsZW1lbnQ+KCZtYXNr
RWxlbWVudCgpKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBzdmdDaGlsZHJlbi5iZWdpbigpLCBlbmQg
PSBzdmdDaGlsZHJlbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFNWR0VsZW1l
bnQmIGNoaWxkID0gKml0OworICAgICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGNoaWxk
LnJlbmRlcmVyKCk7CisgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5uZWVkc0xheW91dCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAkocmV2aXNpb24gMTU2OTM5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsMTIgKzI3MSwxNSBAQCBQYXNzT3duUHRyPEltYWdlQnVm
ZmVyPiBSZW5kZXJTVkdSZXNvdXJjCiAgICAgICAgIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IHRp
bGVJbWFnZVRyYW5zZm9ybTsKIAogICAgIC8vIERyYXcgdGhlIGNvbnRlbnQgaW50byB0aGUgSW1h
Z2VCdWZmZXIuCi0gICAgZm9yIChOb2RlKiBub2RlID0gYXR0cmlidXRlcy5wYXR0ZXJuQ29udGVu
dEVsZW1lbnQoKS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICBpZiAoIW5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFub2RlLT5yZW5kZXJl
cigpKQorICAgIGF1dG8gc3ZnQ2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxTVkdFbGVtZW50Pihh
dHRyaWJ1dGVzLnBhdHRlcm5Db250ZW50RWxlbWVudCgpKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBz
dmdDaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBzdmdDaGlsZHJlbi5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIGNvbnN0IFNWR0VsZW1lbnQmIGNoaWxkID0gKml0OworICAgICAgICBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGNoaWxkLnJlbmRlcmVyKCk7CisgICAgICAgIGlmICgh
cmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKG5vZGUtPnJlbmRl
cmVyKCktPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIGlmIChyZW5kZXJlci0+bmVlZHNMYXlvdXQo
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBTVkdSZW5kZXJpbmdDb250
ZXh0OjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcih0aWxlSW1hZ2UuZ2V0KCksIG5vZGUtPnJl
bmRlcmVyKCksIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7CisgICAgICAgIFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKHRpbGVJbWFnZS5nZXQoKSwgcmVuZGVy
ZXIsIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7CiAgICAgfQogCiAgICAgcmV0dXJuIHRpbGVJbWFn
ZS5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1NjkzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBib29sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6
cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBSZW5kZXJPYmpl
Y3QqIGl0ZW0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3VidHJlZUNvbnRlbnRUcmFuc2Zvcm1h
dGlvbikKK3ZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBSZW5kZXJFbGVtZW50KiBpdGVtLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHN1YnRyZWVDb250ZW50VHJhbnNmb3JtYXRpb24pCiB7CiAgICAgQVNTRVJUKGl0
ZW0pOwogICAgIEFTU0VSVChpbWFnZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTU2OTM5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
QWZmaW5lVHJhbnNmb3JtOworY2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlck9iamVj
dDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOwpAQCAt
NzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgLy8gUGF0dGVybnMgbmVlZCBhIGRpZmZlcmVudCBm
bG9hdC10by1pbnRlZ2VyIGNvb3JkaW5hdGUgbWFwcGluZy4KICAgICBzdGF0aWMgYm9vbCBjcmVh
dGVJbWFnZUJ1ZmZlckZvclBhdHRlcm4oY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgT3duUHRyPElt
YWdlQnVmZmVyPiYsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUpOwogCi0gICAgc3RhdGljIHZv
aWQgcmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBSZW5kZXJPYmplY3Qq
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICBzdGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVl
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKTsKICAgICBzdGF0aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mLCBib29sIHNhZmVUb0Ns
ZWFyKTsKIAogICAgIHN0YXRpYyBmbG9hdCBjYWxjdWxhdGVTY3JlZW5Gb250U2l6ZVNjYWxpbmdG
YWN0b3IoY29uc3QgUmVuZGVyT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNTY5MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIFNWR1Vz
ZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0CiAgICAgfQogfQogCi1SZW5kZXJPYmplY3Qq
IFNWR1VzZUVsZW1lbnQ6OnJlbmRlcmVyQ2xpcENoaWxkKCkgY29uc3QKK1JlbmRlckVsZW1lbnQq
IFNWR1VzZUVsZW1lbnQ6OnJlbmRlcmVyQ2xpcENoaWxkKCkgY29uc3QKIHsKICAgICBOb2RlKiBu
ID0gbV90YXJnZXRFbGVtZW50SW5zdGFuY2UgPyBtX3RhcmdldEVsZW1lbnRJbnN0YW5jZS0+c2hh
ZG93VHJlZUVsZW1lbnQoKSA6IDA7CiAgICAgaWYgKCFuKQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1VzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VXNlRWxlbWVudC5oCShyZXZpc2lvbiAxNTY5MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGludmFsaWRhdGVTaGFkb3dUcmVlKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlRGVwZW5k
ZW50U2hhZG93VHJlZXMoKTsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXJDbGlwQ2hpbGQo
KSBjb25zdDsKKyAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlckNsaXBDaGlsZCgpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIFNWR1VzZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50JiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCShyZXZpc2lvbiAxNTY5
MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBSZW5kZXJFbGVtZW50KiBGRUltYWdl
OjpyZWZlcmVuY2VkUmVuZGVyCiAKIHZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCk7
CisgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKTsKICAg
ICBpZiAoIW1faW1hZ2UgJiYgIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTEyNSw3
ICsxMjUsNyBAQCB2b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0gPSBzdmdGaWx0ZXItPmFi
c29sdXRlVHJhbnNmb3JtKCk7CiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmNvbmNh
dENUTShhYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICAgICAgU1ZHRWxlbWVudCogY29udGV4dE5v
ZGUgPSB0b1NWR0VsZW1lbnQocmVuZGVyZXItPm5vZGUoKSk7CisgICAgICAgIFNWR0VsZW1lbnQq
IGNvbnRleHROb2RlID0gdG9TVkdFbGVtZW50KHJlbmRlcmVyLT5lbGVtZW50KCkpOwogICAgICAg
ICBpZiAoY29udGV4dE5vZGUtPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7CiAgICAgICAgICAgICBT
VkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoY29udGV4dE5vZGUpOwogICAgICAgICAgICAg
ZmxvYXQgd2lkdGggPSAwOwo=
</data>
<flag name="review"
          id="235798"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="235801"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213448</attachid>
            <date>2013-10-05 04:04:28 -0700</date>
            <delta_ts>2013-10-05 04:04:28 -0700</delta_ts>
            <desc>for bots</desc>
            <filename>renderelement-paint-4.patch</filename>
            <type>text/plain</type>
            <size>35785</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTEwLTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHBhaW50KCkgdG8gUmVu
ZGVyRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIyMzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAg
UmVuZGVyVGV4dCBkb2VzIG5vdCBwYWludCBpdHNlbGYgKHRleHQgaXMgcGFpbnRlZCBieSBsaW5l
IGJveGVzKS4gV2UgY2FuIG1vdmUgcGFpbnQoKSBkb3duCisgICAgICAgIHRvIFJlbmRlckVsZW1l
bnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGFsc28gcmVxdWlyZXMgc29tZSB0eXBlIHRpZ2h0
ZW5pbmcgZWxzZXdoZXJlIGluIHRoZSBjb2RlLgorCiAyMDEzLTEwLTA0ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBhbiBhc3NlcnRpb24gZmFpbHVyZSBp
bnRyb2R1Y2VkIGluIHIxNTY5MjUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmNwcAkocmV2aXNpb24gMTU2OTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwxMiArMjI2LDEzIEBAIHZvaWQgSW5s
aW5lQm94OjphZGp1c3RQb3NpdGlvbihmbG9hdCBkeCwKIAogdm9pZCBJbmxpbmVCb3g6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExh
eW91dFVuaXQgLyogbGluZVRvcCAqLywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0b20qLykKIHsKLSAg
ICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoJnJlbmRlcmVyKCkpIHx8IChw
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNl
ICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pKQorICAgIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyID0g
dG9SZW5kZXJFbGVtZW50KHRoaXMtPnJlbmRlcmVyKCkpOworICAgIGlmICghcGFpbnRJbmZvLnNo
b3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJlcikgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlv
bikpCiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBwYWlu
dE9mZnNldDsKLSAgICBpZiAocGFyZW50KCktPnJlbmRlcmVyKCkuc3R5bGUoKS0+aXNGbGlwcGVk
QmxvY2tzV3JpdGluZ01vZGUoKSAmJiByZW5kZXJlcigpLmlzQm94KCkpIC8vIEZhc3RlciB0aGFu
IGNhbGxpbmcgY29udGFpbmluZ0Jsb2NrKCkuCi0gICAgICAgIGNoaWxkUG9pbnQgPSBtX3JlbmRl
cmVyLmNvbnRhaW5pbmdCbG9jaygpLT5mbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZCgmdG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSksIGNoaWxkUG9pbnQpOworICAgIGlmIChwYXJlbnQoKS0+cmVuZGVy
ZXIoKS5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpICYmIHJlbmRlcmVyLmlz
Qm94KCkpIC8vIEZhc3RlciB0aGFuIGNhbGxpbmcgY29udGFpbmluZ0Jsb2NrKCkuCisgICAgICAg
IGNoaWxkUG9pbnQgPSBtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5mbGlwRm9yV3JpdGlu
Z01vZGVGb3JDaGlsZCgmdG9SZW5kZXJCb3gocmVuZGVyZXIpLCBjaGlsZFBvaW50KTsKICAgICAK
ICAgICAvLyBQYWludCBhbGwgcGhhc2VzIG9mIHJlcGxhY2VkIGVsZW1lbnRzIGF0b21pY2FsbHks
IGFzIHRob3VnaCB0aGUgcmVwbGFjZWQgZWxlbWVudCBlc3RhYmxpc2hlZCBpdHMKICAgICAvLyBv
d24gc3RhY2tpbmcgY29udGV4dC4gIChTZWUgQXBwZW5kaXggRS4yLCBzZWN0aW9uIDYuNCBvbiBp
bmxpbmUgYmxvY2svdGFibGUgZWxlbWVudHMgaW4gdGhlIENTUzIuMQpAQCAtMjM5LDE2ICsyNDAs
MTYgQEAgdm9pZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbgogICAgIGJvb2wg
cHJlc2VydmVQaGFzZSA9IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uIHx8
IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlVGV4dENsaXA7CiAgICAgUGFpbnRJbmZvIGlu
Zm8ocGFpbnRJbmZvKTsKICAgICBpbmZvLnBoYXNlID0gcHJlc2VydmVQaGFzZSA/IHBhaW50SW5m
by5waGFzZSA6IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQ7Ci0gICAgbV9yZW5kZXJlci5wYWlu
dChpbmZvLCBjaGlsZFBvaW50KTsKKyAgICByZW5kZXJlci5wYWludChpbmZvLCBjaGlsZFBvaW50
KTsKICAgICBpZiAoIXByZXNlcnZlUGhhc2UpIHsKICAgICAgICAgaW5mby5waGFzZSA9IFBhaW50
UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7Ci0gICAgICAgIG1fcmVuZGVyZXIucGFpbnQoaW5m
bywgY2hpbGRQb2ludCk7CisgICAgICAgIHJlbmRlcmVyLnBhaW50KGluZm8sIGNoaWxkUG9pbnQp
OwogICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZsb2F0OwotICAgICAgICBtX3JlbmRl
cmVyLnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOworICAgICAgICByZW5kZXJlci5wYWludChpbmZv
LCBjaGlsZFBvaW50KTsKICAgICAgICAgaW5mby5waGFzZSA9IFBhaW50UGhhc2VGb3JlZ3JvdW5k
OwotICAgICAgICBtX3JlbmRlcmVyLnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOworICAgICAgICBy
ZW5kZXJlci5wYWludChpbmZvLCBjaGlsZFBvaW50KTsKICAgICAgICAgaW5mby5waGFzZSA9IFBh
aW50UGhhc2VPdXRsaW5lOwotICAgICAgICBtX3JlbmRlcmVyLnBhaW50KGluZm8sIGNoaWxkUG9p
bnQpOworICAgICAgICByZW5kZXJlci5wYWludChpbmZvLCBjaGlsZFBvaW50KTsKICAgICB9CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDE1Njk1
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtMTgxLDYgKzE4MSw3IEBAIHB1YmxpYzoKICAgICBJbmxpbmVCb3gqIG5leHRMZWFmQ2hp
bGRJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0OwogICAgIElubGluZUJveCogcHJldkxlYWZDaGls
ZElnbm9yaW5nTGluZUJyZWFrKCkgY29uc3Q7CiAKKyAgICAvLyBGSVhNRTogVGhlcmUgc2hvdWxk
IGJlIGEgc3ViY2xhc3MgdGhhdCByZXR1cm5zIFJlbmRlckVsZW1lbnQuIFBsYWluIElubGluZUJv
eCBzaG91bGRuJ3QgYmUgaW5zdGFudGlhdGVkLgogICAgIFJlbmRlck9iamVjdCYgcmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9CiAKICAgICBJbmxpbmVGbG93Qm94KiBwYXJl
bnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAkocmV2aXNpb24gMTU2OTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjk4LDcgKzEyOTgsNyBAQCBzdGF0aWMg
TGF5b3V0UmVjdCBjbGlwUmVjdEZvck5pbmVQaWVjZUltCiAKIHZvaWQgSW5saW5lRmxvd0JveDo6
cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGlu
Um9vdCgmcmVuZGVyZXIoKSkgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSB8fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAg
aWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkpIHx8IHJlbmRl
cmVyKCkuc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgcGFpbnRJbmZvLnBoYXNl
ICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQaXhl
bCBzbmFwIGJhY2tncm91bmQvYm9yZGVyIHBhaW50aW5nLgpAQCAtMTM3Miw3ICsxMzcyLDcgQEAg
dm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKAogCiB2b2lkIElubGluZUZs
b3dCb3g6OnBhaW50TWFzayhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9v
dCgmcmVuZGVyZXIoKSkgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklT
SUJMRSB8fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZU1hc2spCisgICAgaWYgKCFwYWlu
dEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkpIHx8IHJlbmRlcmVyKCkuc3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2VNYXNrKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQaXhlbCBzbmFwIG1hc2sgcGFp
bnRpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CShyZXZpc2lvbiAxNTY5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxOCw4ICs1MTgsOCBAQCBzdGF0aWMgaW5saW5l
IEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihjCiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5
b3V0VW5pdCAvKmxpbmVUb3AqLywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0b20qLykKIHsKLSAgICBp
ZiAoaXNMaW5lQnJlYWsoKSB8fCAhcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgmcmVu
ZGVyZXIoKSkgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8
fAotICAgICAgICBtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uIHx8IHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCAhbV9sZW4pCisgICAgaWYgKGlzTGluZUJyZWFr
KCkgfHwgIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QocmVuZGVyZXIoKSkgfHwgcmVu
ZGVyZXIoKS5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRQorICAgICAgICB8fCBtX3Ry
dW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBo
YXNlT3V0bGluZSB8fCAhbV9sZW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAh
PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUGFpbnRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Bh
aW50SW5mby5oCShyZXZpc2lvbiAxNTY5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UGFpbnRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDkgQEAgc3RydWN0IFBhaW50
SW5mbyB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIHNob3VsZFBhaW50V2l0aGluUm9v
dChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSBjb25zdAorICAgIGJvb2wgc2hvdWxkUGFp
bnRXaXRoaW5Sb290KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gIXN1YnRyZWVQYWludFJvb3QgfHwgc3VidHJlZVBhaW50Um9vdCA9PSBy
ZW5kZXJlcjsKKyAgICAgICAgcmV0dXJuICFzdWJ0cmVlUGFpbnRSb290IHx8IHN1YnRyZWVQYWlu
dFJvb3QgPT0gJnJlbmRlcmVyOwogICAgIH0KIAogICAgIGJvb2wgZm9yY2VCbGFja1RleHQoKSBj
b25zdCB7IHJldHVybiBwYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDE1Njk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMzUsNyArMjIzNSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnQKICAgICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQg
ZXhhY3RseSB3aGVuIHdlIHRlbGwgdGhlbSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkg
d2l0aAogICAgIC8vIHotaW5kZXguICBXZSBwYWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNr
Z3JvdW5kL2JvcmRlciwgc28gdGhhdCB0aGUgc2Nyb2xsYmFycyB3aWxsCiAgICAgLy8gc2l0IGFi
b3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRlci4KLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgKHBoYXNlID09IFBhaW50UGhhc2VC
bG9ja0JhY2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5k
KSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpICYmICFwYWludEluZm8u
cGFpbnRSb290QmFja2dyb3VuZE9ubHkoKSkKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgKHBoYXNlID09IFBhaW50UGhhc2VC
bG9ja0JhY2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5k
KSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZv
LnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCiAgICAgICAgIGxheWVyKCktPnBhaW50T3ZlcmZs
b3dDb250cm9scyhwYWludEluZm8uY29udGV4dCwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFp
bnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxNTY5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5NCwxNiArMTA5NCw2
IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXMKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIHBhaW50aW5nIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotdm9pZCBSZW5kZXJCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKLSAgICAvLyBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uLiBKdXN0IHBhc3MgcGFpbnQgdGhyb3VnaCB0byB0aGUgY2hpbGRyZW4KLSAg
ICBQYWludEluZm8gY2hpbGRJbmZvKHBhaW50SW5mbyk7Ci0gICAgY2hpbGRJbmZvLnVwZGF0ZVN1
YnRyZWVQYWludFJvb3RGb3JDaGlsZHJlbih0aGlzKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KQotICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsK
LX0KLQogdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveEZpbGxMYXllcnMoY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8pCiB7CiAgICAgaWYgKHBhaW50SW5mby5za2lwUm9vdEJhY2tncm91bmQo
KSkKQEAgLTExNTQsNyArMTE0NCw3IEBAIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBSZW5kZXJC
b3g6OmRldGUKIAogdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBpZiAo
IXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QodGhpcykpCisgICAgaWYgKCFwYWludElu
Zm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
TGF5b3V0UmVjdCBwYWludFJlY3QgPSBib3JkZXJCb3hSZWN0SW5SZWdpb24ocGFpbnRJbmZvLnJl
bmRlclJlZ2lvbik7CkBAIC0xMzc1LDcgKzEzNjUsNyBAQCBib29sIFJlbmRlckJveDo6YmFja2dy
b3VuZEhhc09wYXF1ZVRvcExhCiAKIHZvaWQgUmVuZGVyQm94OjpwYWludE1hc2soUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBpZiAo
IXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QodGhpcykgfHwgc3R5bGUoKS0+dmlzaWJp
bGl0eSgpICE9IFZJU0lCTEUgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VNYXNrIHx8
IHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKCFwYWludElu
Zm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSB8fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZU1hc2sgfHwgcGFpbnRJ
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
TGF5b3V0UmVjdCBwYWludFJlY3QgPSBMYXlvdXRSZWN0KHBhaW50T2Zmc2V0LCBzaXplKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMTU2OTUxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTcsNyArMjk3LDYgQEAgcHVibGljOgogICAgIExheW91dFJlY3QgcmVmbGVjdGVkUmVjdChj
b25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAg
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklE
RTsKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAkocmV2
aXNpb24gMTU2OTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRO
ZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dChjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
OwogICAgIHZvaWQgc2V0TmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOwogCisgICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikgPSAwOwor
CiAgICAgLy8gUmV0dXJuIHRoZSByZW5kZXJlciB3aG9zZSBiYWNrZ3JvdW5kIHN0eWxlIGlzIHVz
ZWQgdG8gcGFpbnQgdGhlIHJvb3QgYmFja2dyb3VuZC4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9u
IHRoZSByZW5kZXJlciBmb3Igd2hpY2ggaXNSb290KCkgaXMgdHJ1ZS4KICAgICBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlckZvclJvb3RCYWNrZ3JvdW5kKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gMTU2OTUxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM4LDcgKzEzOCw3IEBAIFJlbmRlckJveCogUmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdlbmQo
RmkKIAogdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIGlmICgh
cGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSkKKyAgICBpZiAoIXBhaW50SW5m
by5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBM
YXlvdXRSZWN0IHBhaW50UmVjdChwYWludE9mZnNldCwgc2l6ZSgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gMTU2OTUxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50
SW5mbyYgcGEKICAgICBmb3IgKHNpemVfdCByID0gMDsgciA8IHJvd3M7IHIrKykgewogICAgICAg
ICBMYXlvdXRVbml0IHhQb3MgPSAwOwogICAgICAgICBmb3IgKHNpemVfdCBjID0gMDsgYyA8IGNv
bHM7IGMrKykgewotICAgICAgICAgICAgY2hpbGQtPnBhaW50KHBhaW50SW5mbywgYWRqdXN0ZWRQ
YWludE9mZnNldCk7CisgICAgICAgICAgICB0b1JlbmRlckVsZW1lbnQoY2hpbGQpLT5wYWludChw
YWludEluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgeFBvcyArPSBtX2Nv
bHMubV9zaXplc1tjXTsKICAgICAgICAgICAgIGlmIChib3JkZXJUaGlja25lc3MgJiYgbV9jb2xz
Lm1fYWxsb3dCb3JkZXJbYyArIDFdKSB7CiAgICAgICAgICAgICAgICAgcGFpbnRDb2x1bW5Cb3Jk
ZXIocGFpbnRJbmZvLCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91dFJlY3QoYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCkgKyB4UG9zLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHlQb3MsIGJvcmRl
clRoaWNrbmVzcywgaGVpZ2h0KCkpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJyZWFrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpbmVCcmVhay5oCShyZXZpc2lvbiAxNTY5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIG5vZGUoKSBjb25zdCBXVEZfREVMRVRFRF9GVU5DVElPTjsK
IAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYpIE9WRVJSSURFIEZJTkFMIHsgfQogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3QgT1ZFUlJJREU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTU2OTUxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMzgsMTAgKzEyMzgsNiBAQCBMYXlvdXRSZWN0IFJlbmRlck9iamVjdDo6cGFpbnRp
bmdSb290UmVjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnBh
aW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JikKLXsKLX0KLQogUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogUmVuZGVyT2JqZWN0Ojpjb250YWluZXJGb3JSZXBhaW50KCkgY29uc3QKIHsK
ICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE1Njk1MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUzLDggKzY1Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1RyYW5zZm9ybShi
b29sIGIgPSB0cnVlKSB7IG1fYml0ZmllbGRzLnNldEhhc1RyYW5zZm9ybShiKTsgfQogICAgIHZv
aWQgc2V0SGFzUmVmbGVjdGlvbihib29sIGIgPSB0cnVlKSB7IG1fYml0ZmllbGRzLnNldEhhc1Jl
ZmxlY3Rpb24oYik7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25z
dCBMYXlvdXRQb2ludCYpOwotCiAgICAgLy8gUmVjdXJzaXZlIGZ1bmN0aW9uIHRoYXQgY29tcHV0
ZXMgdGhlIHNpemUgYW5kIHBvc2l0aW9uIG9mIHRoaXMgb2JqZWN0IGFuZCBhbGwgaXRzIGRlc2Nl
bmRhbnRzLgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAxNTY5NTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZv
JiBwYQogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYg
cGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24gJiYgIWNhbkhhdmVDaGlsZHJl
bigpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFp
bnRXaXRoaW5Sb290KHRoaXMpKQorICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGlu
Um9vdCgqdGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBib29sIGRyYXdTZWxlY3Rp
b25UaW50ID0gc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lICYmICFkb2N1bWVudCgp
LnByaW50aW5nKCk7CkBAIC0xNzYsNyArMTc2LDcgQEAgYm9vbCBSZW5kZXJSZXBsYWNlZDo6c2hv
dWxkUGFpbnQoUGFpbnRJbgogICAgICAgICAgICAgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VNYXNrKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhp
blJvb3QodGhpcykpCisgICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0
aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAvLyBpZiB3ZSdyZSBp
bnZpc2libGUgb3IgaGF2ZW4ndCByZWNlaXZlZCBhIGxheW91dCB5ZXQsIHRoZW4ganVzdCBiYWls
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lv
biAxNTY5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NTEsOSArNjUxLDEyIEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50
T2JqZWN0KFBhaW50SW5mbyYKICAgICBpbmZvLnVwZGF0ZVN1YnRyZWVQYWludFJvb3RGb3JDaGls
ZHJlbih0aGlzKTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNo
aWxkLT5pc0JveCgpICYmICF0b1JlbmRlckJveChjaGlsZCktPmhhc1NlbGZQYWludGluZ0xheWVy
KCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkLT5pc1RhYmxlQ2FwdGlvbigp
KSkgewotICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5n
TW9kZUZvckNoaWxkKHRvUmVuZGVyQm94KGNoaWxkKSwgcGFpbnRPZmZzZXQpOwotICAgICAgICAg
ICAgY2hpbGQtPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOworICAgICAgICBpZiAoIWNoaWxkLT5p
c0JveCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlckJveCYgYm94ID0g
dG9SZW5kZXJCb3goKmNoaWxkKTsKKyAgICAgICAgaWYgKCFib3guaGFzU2VsZlBhaW50aW5nTGF5
ZXIoKSAmJiAoYm94LmlzVGFibGVTZWN0aW9uKCkgfHwgYm94LmlzVGFibGVDYXB0aW9uKCkpKSB7
CisgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2Rl
Rm9yQ2hpbGQoJmJveCwgcGFpbnRPZmZzZXQpOworICAgICAgICAgICAgYm94LnBhaW50KGluZm8s
IGNoaWxkUG9pbnQpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNjk3LDcgKzcwMCw3IEBA
IHZvaWQgUmVuZGVyVGFibGU6OnN1YnRyYWN0Q2FwdGlvblJlY3QoTGEKIAogdm9pZCBSZW5kZXJU
YWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50
V2l0aGluUm9vdCh0aGlzKSkKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJv
b3QoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRSZWN0IHJlY3QocGFpbnRP
ZmZzZXQsIHNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcAkocmV2aXNpb24gMTU2OTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTYsNyArMTE1Niw3
IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmQKIHsKICAgICBBU1NF
UlQocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMpOwog
Ci0gICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpIHx8IHN0eWxl
KCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBh
aW50V2l0aGluUm9vdCgqdGhpcykgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUp
CiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFJlY3QgbG9jYWxSZXBhaW50UmVjdCA9IHBh
aW50SW5mby5yZWN0OwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6
OnBhaW50Q29sbGFwc2VkQm9yZAogCiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3Jv
dW5kc0JlaGluZENlbGwoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCwgUmVuZGVyRWxlbWVudCogYmFja2dyb3VuZE9iamVjdCkKIHsKLSAgICBpZiAo
IXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QodGhpcykpCisgICAgaWYgKCFwYWludElu
Zm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKCFiYWNrZ3JvdW5kT2JqZWN0KQpAQCAtMTMwMiw3ICsxMzAyLDcgQEAgdm9pZCBSZW5kZXJU
YWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZQogCiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFp
bnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9v
dCh0aGlzKSkKKyAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMp
KQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJUYWJsZSogdGFibGVFbHQgPSB0YWJsZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgJKHJldmlz
aW9uIDE1Njk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCkgT1ZF
UlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIE9WRVJSSURFIHsgfQogCiAg
ICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTU2OTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDcgKzE3MSw2IEBAIHBy
aXZhdGU6CiAgICAgLy8gY2FsbGVycyB3aXRoIGEgUmVuZGVyT2JqZWN0KiBjYW4gY29udGludWUg
dG8gdXNlIGxlbmd0aCgpLgogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgT1ZF
UlJJREUgRklOQUwgeyByZXR1cm4gdGV4dExlbmd0aCgpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBPVkVSUklERSBGSU5BTCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIE9WRVJSSURF
IEZJTkFMIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERSBG
SU5BTCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gMTU2OTUxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzgsNyArNDM4LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpwYWludChQYWludEluZm8mIHBhaW50
SQogICAgIEFTU0VSVChMYXlvdXRQb2ludChJbnRQb2ludChwYWludE9mZnNldC54KCksIHBhaW50
T2Zmc2V0LnkoKSkpID09IHBhaW50T2Zmc2V0KTsKIAogICAgIC8vIFRoaXMgYXZvaWRzIHBhaW50
aW5nIGdhcmJhZ2UgYmV0d2VlbiBjb2x1bW5zIGlmIHRoZXJlIGlzIGEgY29sdW1uIGdhcC4KLSAg
ICBpZiAoZnJhbWVWaWV3KCkucGFnaW5hdGlvbigpLm1vZGUgIT0gUGFnaW5hdGlvbjo6VW5wYWdp
bmF0ZWQgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSkKKyAgICBpZiAo
ZnJhbWVWaWV3KCkucGFnaW5hdGlvbigpLm1vZGUgIT0gUGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQg
JiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCiAgICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT5maWxsUmVjdChwYWludEluZm8ucmVjdCwgZnJhbWVWaWV3KCkuYmFzZUJh
Y2tncm91bmRDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAgIHBhaW50T2JqZWN0
KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwpAQCAtNDcyLDcgKzQ3Miw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCByZW5kZXJlck9ic2N1cmVzQmFja2cKIAogdm9pZCBSZW5kZXJWaWV3OjpwYWludEJv
eERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCiB7
Ci0gICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpKQorICAgIGlm
ICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgZW5jbG9zZWQgYnkgYSBsYXllciB0
aGF0IHJlcXVpcmVzIGNvbXBsZXggcGFpbnRpbmcgcnVsZXMuICBJZiBzbywgd2UgY2Fubm90IGJs
aXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJl
dmlzaW9uIDE1Njk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIGZsb2F0IFJvb3RJbmxpbmVC
b3g6OnBsYWNlRWxsaXBzaXNCb3goYm8KIAogdm9pZCBSb290SW5saW5lQm94OjpwYWludEVsbGlw
c2lzQm94KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBjb25zdAogewot
ICAgIGlmIChoYXNFbGxpcHNpc0JveCgpICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJv
b3QoJnJlbmRlcmVyKCkpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJ
U0lCTEUKKyAgICBpZiAoaGFzRWxsaXBzaXNCb3goKSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRX
aXRoaW5Sb290KHJlbmRlcmVyKCkpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUKICAgICAgICAgICAgICYmIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkKICAgICAgICAgZWxsaXBzaXNCb3goKS0+cGFpbnQocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CiB9CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9p
ZCBSb290SW5saW5lQm94OjphZGRIaWdobGlnaHRPdmVyZmxvdwogCiB2b2lkIFJvb3RJbmxpbmVC
b3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgaGlnaGxpZ2h0VHlwZSkK
IHsKLSAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoJnJlbmRlcmVyKCkp
IHx8IHJlbmRlcmVyKCkuc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgcGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQorICAgIGlmICghcGFpbnRJbmZvLnNo
b3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLnN0eWxlKCktPnZp
c2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUGFnZSogcGFnZSA9IHJlbmRlcmVyKCku
ZnJhbWUoKS5wYWdlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAxNTY5NTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzOSw4ICsxMzksMTEgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBh
aW50SW5mbwogCiAgICAgICAgIGlmIChjb250aW51ZVJlbmRlcmluZykgewogICAgICAgICAgICAg
Y2hpbGRQYWludEluZm8udXBkYXRlU3VidHJlZVBhaW50Um9vdEZvckNoaWxkcmVuKHRoaXMpOwot
ICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICBjaGlsZC0+
cGFpbnQoY2hpbGRQYWludEluZm8sIEludFBvaW50KCkpOworICAgICAgICAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgIGlmICghY2hpbGQtPmlzUmVuZGVyRWxlbWVu
dCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB0b1Jl
bmRlckVsZW1lbnQoY2hpbGQpLT5wYWludChjaGlsZFBhaW50SW5mbywgSW50UG9pbnQoKSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgJKHJldmlz
aW9uIDE1Njk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgcHJvdGVjdGVkOgog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpIE9WRVJSSURFIEZJTkFMIHsgfQogCiAgICAgU1ZHR3JhZGll
bnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQoKSBjb25zdDsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwCShyZXZpc2lvbiAxNTY5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKIAogI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCkBAIC0yMjAsOSArMjIxLDExIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpk
cmF3Q29udGUKICAgICB2aWV3KCkuZnJhbWVWaWV3KCkuc2V0UGFpbnRCZWhhdmlvcihvbGRCZWhh
dmlvciB8IFBhaW50QmVoYXZpb3JSZW5kZXJpbmdTVkdNYXNrKTsKIAogICAgIC8vIERyYXcgYWxs
IGNsaXBQYXRoIGNoaWxkcmVuIGludG8gYSBnbG9iYWwgbWFzay4KLSAgICBmb3IgKE5vZGUqIGNo
aWxkTm9kZSA9IGNsaXBQYXRoRWxlbWVudCgpLmZpcnN0Q2hpbGQoKTsgY2hpbGROb2RlOyBjaGls
ZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGNoaWxkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFjaGlsZE5v
ZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFyZW5kZXJlcikKKyAgICBhdXRvIGNoaWxkcmVuID0gY2hp
bGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oJmNsaXBQYXRoRWxlbWVudCgpKTsKKyAgICBmb3IgKGF1
dG8gaXQgPSBjaGlsZHJlbi5iZWdpbigpLCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIFNWR0VsZW1lbnQmIGNoaWxkID0gKml0OworICAgICAgICBhdXRv
IHJlbmRlcmVyID0gY2hpbGQucmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAocmVuZGVyZXItPm5lZWRzTGF5b3V0KCkp
IHsKICAgICAgICAgICAgIHZpZXcoKS5mcmFtZVZpZXcoKS5zZXRQYWludEJlaGF2aW9yKG9sZEJl
aGF2aW9yKTsKQEAgLTIzMywxMyArMjM2LDEzIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjpkcmF3Q29udGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFdpbmRSdWxl
IG5ld0NsaXBSdWxlID0gc3R5bGUtPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCk7Ci0gICAgICAgIGJv
b2wgaXNVc2VFbGVtZW50ID0gY2hpbGROb2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp1c2VUYWcp
OworICAgICAgICBib29sIGlzVXNlRWxlbWVudCA9IGNoaWxkLmhhc1RhZ05hbWUoU1ZHTmFtZXM6
OnVzZVRhZyk7CiAgICAgICAgIGlmIChpc1VzZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIFNWR1Vz
ZUVsZW1lbnQqIHVzZUVsZW1lbnQgPSB0b1NWR1VzZUVsZW1lbnQoY2hpbGROb2RlKTsKLSAgICAg
ICAgICAgIHJlbmRlcmVyID0gdXNlRWxlbWVudC0+cmVuZGVyZXJDbGlwQ2hpbGQoKTsKKyAgICAg
ICAgICAgIFNWR1VzZUVsZW1lbnQmIHVzZUVsZW1lbnQgPSB0b1NWR1VzZUVsZW1lbnQoY2hpbGQp
OworICAgICAgICAgICAgcmVuZGVyZXIgPSB1c2VFbGVtZW50LnJlbmRlcmVyQ2xpcENoaWxkKCk7
CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKCF1c2VFbGVtZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmNsaXBf
cnVsZUF0dHIpKQorICAgICAgICAgICAgaWYgKCF1c2VFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdO
YW1lczo6Y2xpcF9ydWxlQXR0cikpCiAgICAgICAgICAgICAgICAgbmV3Q2xpcFJ1bGUgPSByZW5k
ZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcFJ1bGUoKTsKICAgICAgICAgfQogCkBAIC0y
NTIsNyArMjU1LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZQog
ICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIDx1c2U+IGVsZW1lbnQsIHdlIG9idGFpbmVkIGl0
cyByZW5kZXJlcmUgYWJvdmUsIHRvIHJldHJpZXZlIGl0cyBjbGlwUnVsZS4KICAgICAgICAgLy8g
V2UgaGF2ZSB0byBwYXNzIHRoZSA8dXNlPiByZW5kZXJlciBpdHNlbGYgdG8gcmVuZGVyU3VidHJl
ZVRvSW1hZ2VCdWZmZXIoKSB0byBhcHBseSBpdCdzIHgveS90cmFuc2Zvcm0vZXRjLiB2YWx1ZXMg
d2hlbiByZW5kZXJpbmcuCiAgICAgICAgIC8vIFNvIGlmIGlzVXNlRWxlbWVudCBpcyB0cnVlLCBy
ZWZldGNoIHRoZSBjaGlsZE5vZGUtPnJlbmRlcmVyKCksIGFzIHJlbmRlcmVyIGdvdCBvdmVycmlk
ZW4gYWJvdmUuCi0gICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0lt
YWdlQnVmZmVyKGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLmdldCgpLCBpc1VzZUVsZW1lbnQg
PyBjaGlsZE5vZGUtPnJlbmRlcmVyKCkgOiByZW5kZXJlciwgbWFza0NvbnRlbnRUcmFuc2Zvcm1h
dGlvbik7CisgICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0ltYWdl
QnVmZmVyKGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLmdldCgpLCBpc1VzZUVsZW1lbnQgPyAq
Y2hpbGQucmVuZGVyZXIoKSA6ICpyZW5kZXJlciwgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbik7
CiAgICAgfQogCiAgICAgdmlldygpLmZyYW1lVmlldygpLnNldFBhaW50QmVoYXZpb3Iob2xkQmVo
YXZpb3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9uIDE1Njk1MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMTE4LDE2ICsxMTksMTggQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbgogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGNvbnRl
bnQgaW50byB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgZm9yIChOb2RlKiBub2RlID0gbWFza0VsZW1l
bnQoKS5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgICAg
ICBpZiAoIW5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8ICFyZW5kZXJlcikKKyAgICBhdXRvIGNoaWxk
cmVuID0gY2hpbGRyZW5PZlR5cGU8U1ZHRWxlbWVudD4oJm1hc2tFbGVtZW50KCkpOworICAgIGZv
ciAoYXV0byBpdCA9IGNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU1ZHRWxlbWVudCYgY2hpbGQgPSAqaXQ7CisgICAgICAg
IGF1dG8gcmVuZGVyZXIgPSBjaGlsZC5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChyZW5kZXJlci0+bmVlZHNMYXlv
dXQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmRp
c3BsYXkoKSA9PSBOT05FIHx8IHN0eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJTdWJ0
cmVlVG9JbWFnZUJ1ZmZlcihtYXNrZXJEYXRhLT5tYXNrSW1hZ2UuZ2V0KCksIHJlbmRlcmVyLCBt
YXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsKKyAgICAgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6
cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIobWFza2VyRGF0YS0+bWFza0ltYWdlLmdldCgpLCAq
cmVuZGVyZXIsIG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb24pOwogICAgIH0KIAogI2lmICFVU0Uo
Q0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiAxNTY5NTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlUGF0dGVybi5oIgogCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiUGF0dGVybkF0dHJpYnV0ZXMuaCIKQEAgLTI3MSwxMiArMjcyLDE1IEBAIFBhc3NP
d25QdHI8SW1hZ2VCdWZmZXI+IFJlbmRlclNWR1Jlc291cmMKICAgICAgICAgY29udGVudFRyYW5z
Zm9ybWF0aW9uID0gdGlsZUltYWdlVHJhbnNmb3JtOwogCiAgICAgLy8gRHJhdyB0aGUgY29udGVu
dCBpbnRvIHRoZSBJbWFnZUJ1ZmZlci4KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBhdHRyaWJ1dGVz
LnBhdHRlcm5Db250ZW50RWxlbWVudCgpLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkgfHwg
IW5vZGUtPnJlbmRlcmVyKCkpCisgICAgYXV0byBjaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPFNW
R0VsZW1lbnQ+KGF0dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCkpOworICAgIGZvciAo
YXV0byBpdCA9IGNoaWxkcmVuLmJlZ2luKCksIGVuZCA9IGNoaWxkcmVuLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgU1ZHRWxlbWVudCYgY2hpbGQgPSAqaXQ7CisgICAg
ICAgIGF1dG8gcmVuZGVyZXIgPSBjaGlsZC5yZW5kZXJlcigpOworICAgICAgICBpZiAoIXJlbmRl
cmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigp
LT5uZWVkc0xheW91dCgpKQorICAgICAgICBpZiAocmVuZGVyZXItPm5lZWRzTGF5b3V0KCkpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6
cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIodGlsZUltYWdlLmdldCgpLCBub2RlLT5yZW5kZXJl
cigpLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOworICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0
OjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcih0aWxlSW1hZ2UuZ2V0KCksICpyZW5kZXJlciwg
Y29udGVudFRyYW5zZm9ybWF0aW9uKTsKICAgICB9CiAKICAgICByZXR1cm4gdGlsZUltYWdlLnJl
bGVhc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcAkocmV2aXNpb24gMTU2OTUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDggKzI5MSwxNSBA
QCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJCiAgICAgICAgICAgICBj
b250aW51ZVJlbmRlcmluZyA9IHJlbmRlcmluZ0NvbnRleHQuaXNSZW5kZXJpbmdQcmVwYXJlZCgp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNvbnRpbnVlUmVuZGVyaW5nKQotICAgICAgICAg
ICAgUmVuZGVyQm94OjpwYWludChjaGlsZFBhaW50SW5mbywgTGF5b3V0UG9pbnQoKSk7CisgICAg
ICAgIGlmIChjb250aW51ZVJlbmRlcmluZykgeworICAgICAgICAgICAgY2hpbGRQYWludEluZm8u
dXBkYXRlU3VidHJlZVBhaW50Um9vdEZvckNoaWxkcmVuKHRoaXMpOworICAgICAgICAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBl
dmVyIGhhdmUgUmVuZGVyVGV4dCBjaGlsZHJlbj8KKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxk
LT5pc1JlbmRlckVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgdG9SZW5kZXJFbGVtZW50KGNoaWxkKS0+cGFpbnQoY2hpbGRQYWludEluZm8s
IGxvY2F0aW9uKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgY2hp
bGRQYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNTY5NTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHRleHRT
aG91bGRCZVBhaW50ZWQoYwogCiB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9u
QmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbykKIHsKLSAgICBBU1NFUlQocGFpbnRJbmZv
LnNob3VsZFBhaW50V2l0aGluUm9vdCgmcmVuZGVyZXIoKSkpOworICAgIEFTU0VSVChwYWludElu
Zm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkpKTsKICAgICBBU1NFUlQocGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlU2VsZWN0aW9uKTsKICAgICBBU1NFUlQodHJ1bmNhdGlvbigpID09IGNOb1RydW5j
YXRpb24pOwogCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWlu
dFNlbGVjdGlvbkJhYwogCiB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQsIExheW91dFVuaXQpCiB7
Ci0gICAgQVNTRVJUKHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoJnJlbmRlcmVyKCkp
KTsKKyAgICBBU1NFUlQocGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJlcigp
KSk7CiAgICAgQVNTRVJUKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8
fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7CiAgICAgQVNTRVJUKHRy
dW5jYXRpb24oKSA9PSBjTm9UcnVuY2F0aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAx
NTY5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsOSArMjc0LDggQEAgYm9vbCBTVkdSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNW
R1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
KiBpbWFnZSwgUmVuZGVyT2JqZWN0KiBpdGVtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN1YnRy
ZWVDb250ZW50VHJhbnNmb3JtYXRpb24pCit2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRl
clN1YnRyZWVUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgUmVuZGVyRWxlbWVudCYg
aXRlbSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdWJ0cmVlQ29udGVudFRyYW5zZm9ybWF0aW9u
KQogewotICAgIEFTU0VSVChpdGVtKTsKICAgICBBU1NFUlQoaW1hZ2UpOwogICAgIEFTU0VSVChp
bWFnZS0+Y29udGV4dCgpKTsKIApAQCAtMjg2LDggKzI4NSw4IEBAIHZvaWQgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6cmVuZGVyU3VidHJlZVQKICAgICBBZmZpbmVUcmFuc2Zvcm0gc2F2ZWRDb250ZW50
VHJhbnNmb3JtYXRpb24gPSBjb250ZW50VHJhbnNmb3JtYXRpb247CiAgICAgY29udGVudFRyYW5z
Zm9ybWF0aW9uID0gc3VidHJlZUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiAqIGNvbnRlbnRUcmFuc2Zv
cm1hdGlvbjsKIAotICAgIEFTU0VSVCghaXRlbS0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgaXRlbS0+
cGFpbnQoaW5mbywgSW50UG9pbnQoKSk7CisgICAgQVNTRVJUKCFpdGVtLm5lZWRzTGF5b3V0KCkp
OworICAgIGl0ZW0ucGFpbnQoaW5mbywgSW50UG9pbnQoKSk7CiAKICAgICBjb250ZW50VHJhbnNm
b3JtYXRpb24gPSBzYXZlZENvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5oCShyZXZp
c2lvbiAxNTY5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBSZW5kZXJFbGVtZW50Owog
Y2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI7CkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAvLyBQYXR0ZXJucyBu
ZWVkIGEgZGlmZmVyZW50IGZsb2F0LXRvLWludGVnZXIgY29vcmRpbmF0ZSBtYXBwaW5nLgogICAg
IHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVmZmVyRm9yUGF0dGVybihjb25zdCBGbG9hdFJlY3Qm
IGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSk7
CiAKLSAgICBzdGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIFJlbmRlck9iamVjdCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHN0YXRpYyB2
b2lkIHJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgUmVuZGVyRWxlbWVu
dCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogICAgIHN0YXRpYyB2b2lkIGNsaXBUb0ltYWdl
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgT3duUHRyPEltYWdlQnVmZmVy
PiYsIGJvb2wgc2FmZVRvQ2xlYXIpOwogCiAgICAgc3RhdGljIGZsb2F0IGNhbGN1bGF0ZVNjcmVl
bkZvbnRTaXplU2NhbGluZ0ZhY3Rvcihjb25zdCBSZW5kZXJPYmplY3QqKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1Njk1MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcwLDcgKzU3
MCw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aChQYXRoJiBwYXQKICAgICB9CiB9
CiAKLVJlbmRlck9iamVjdCogU1ZHVXNlRWxlbWVudDo6cmVuZGVyZXJDbGlwQ2hpbGQoKSBjb25z
dAorUmVuZGVyRWxlbWVudCogU1ZHVXNlRWxlbWVudDo6cmVuZGVyZXJDbGlwQ2hpbGQoKSBjb25z
dAogewogICAgIE5vZGUqIG4gPSBtX3RhcmdldEVsZW1lbnRJbnN0YW5jZSA/IG1fdGFyZ2V0RWxl
bWVudEluc3RhbmNlLT5zaGFkb3dUcmVlRWxlbWVudCgpIDogMDsKICAgICBpZiAoIW4pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHJldmlzaW9uIDE1Njk1MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZVNoYWRvd1RyZWUoKTsKICAgICB2b2lk
IGludmFsaWRhdGVEZXBlbmRlbnRTaGFkb3dUcmVlcygpOwogCi0gICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlckNsaXBDaGlsZCgpIGNvbnN0OworICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyQ2xp
cENoaWxkKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHVXNlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQmLCBib29sIHdhc0luc2VydGVkQnlQYXJzZXIpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5j
cHAJKHJldmlzaW9uIDE1Njk1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIFJlbmRl
ckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXIKIAogdm9pZCBGRUltYWdlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSByZWZl
cmVuY2VkUmVuZGVyZXIoKTsKKyAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5j
ZWRSZW5kZXJlcigpOwogICAgIGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9y
bSA9IHN2Z0ZpbHRlci0+YWJzb2x1dGVUcmFuc2Zvcm0oKTsKICAgICAgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS0+Y29uY2F0Q1RNKGFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgICAgICBTVkdF
bGVtZW50KiBjb250ZXh0Tm9kZSA9IHRvU1ZHRWxlbWVudChyZW5kZXJlci0+bm9kZSgpKTsKKyAg
ICAgICAgU1ZHRWxlbWVudCogY29udGV4dE5vZGUgPSB0b1NWR0VsZW1lbnQocmVuZGVyZXItPmVs
ZW1lbnQoKSk7CiAgICAgICAgIGlmIChjb250ZXh0Tm9kZS0+aGFzUmVsYXRpdmVMZW5ndGhzKCkp
IHsKICAgICAgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChjb250ZXh0Tm9k
ZSk7CiAgICAgICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CkBAIC0xMzgsNyArMTM4LDcgQEAgdm9p
ZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICB9CiAKICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKLSAgICAgICAgU1ZHUmVuZGVy
aW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIocmVzdWx0SW1hZ2UsIHJlbmRl
cmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOworICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0
OjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgKnJlbmRlcmVyLCBjb250
ZW50VHJhbnNmb3JtYXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>