<?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>47841</bug_id>
          
          <creation_ts>2010-10-18 11:48:47 -0700</creation_ts>
          <short_desc>Rework baselinePosition and lineHeight to be writing-mode-aware.</short_desc>
          <delta_ts>2010-10-19 12:42: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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>46123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>295663</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-10-18 11:48:47 -0700</bug_when>
    <thetext>Rework baselinePosition and lineHeight to be writing-mode-aware.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295665</commentid>
    <comment_count>1</comment_count>
      <attachid>71067</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-10-18 11:51:19 -0700</bug_when>
    <thetext>Created attachment 71067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295683</commentid>
    <comment_count>2</comment_count>
      <attachid>71067</attachid>
    <who name="">mitz</who>
    <bug_when>2010-10-18 12:21:55 -0700</bug_when>
    <thetext>Comment on attachment 71067
Patch

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

&gt; WebCore/rendering/InlineBox.h:25
&gt;  #include &quot;RenderBoxModelObject.h&quot;
&gt; +#include &quot;RenderBR.h&quot;

R comes before o.

&gt; WebCore/rendering/RenderBlock.cpp:5139
&gt; +        bool ignoreBaseline = (layer() &amp;&amp; (layer()-&gt;marquee() || (direction == HorizontalLine ? (layer()-&gt;verticalScrollbar() || layer()-&gt;scrollYOffset() != 0)
&gt; +            : (layer()-&gt;horizontalScrollbar() || layer()-&gt;scrollXOffset() != 0)))) || isWritingModeRoot();
&gt; +        int baselinePos = ignoreBaseline ? -1 : lastLineBoxBaseline();
&gt; +        
&gt; +        int bottomOfContent = direction == HorizontalLine ? borderTop() + paddingTop() + contentHeight() : borderRight() + paddingRight() + contentWidth();
&gt; +        if (baselinePos != -1 &amp;&amp; baselinePos &lt;= bottomOfContent)
&gt; +            return direction == HorizontalLine ? marginTop() + baselinePos : marginRight() + baselinePos;
&gt; +            
&gt; +        return RenderBox::baselinePosition(firstLine, direction, linePositionMode);

I think you can easily get rid of the -1 and just use the boolean.

&gt; WebCore/rendering/RenderBlock.cpp:5179
&gt; +            const Font&amp; f = style(true)-&gt;font();

I prefer firstLineStyle() here, so people don’t have to guess what &apos;true&apos; means.

&gt; WebCore/rendering/RenderBlock.cpp:5196
&gt; +            const Font&amp; f = style(true)-&gt;font();

Ditto

&gt; WebCore/rendering/RenderSlider.cpp:158
&gt; +int RenderSlider::baselinePosition(bool /*firstLine*/, LineDirectionMode /*direction*/, LinePositionMode /*linePositionMode*/) const

Don’t need the 2nd and 3rd commented-out parameter names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296314</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-10-19 11:45:18 -0700</bug_when>
    <thetext>Fixed in r70072.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296342</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-19 12:42:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/70072 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71067</attachid>
            <date>2010-10-18 11:51:19 -0700</date>
            <delta_ts>2010-10-18 12:21:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>67071</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTk3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA4IEBACisyMDEwLTEwLTE4ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc4NDEKKworICAgICAgICBSZXdv
cmsgYmFzZWxpbmVQb3NpdGlvbiBhbmQgbGluZUhlaWdodCB0byBiZSB3cml0aW5nLW1vZGUtYXdh
cmUuICBUaGVyZSdzIGEgbG90IG9mIHJlZmFjdG9yaW5nIGhlcmUgdG8gY2xlYW4gdXAKKyAgICAg
ICAgdGhlIG1ldGhvZCBwYXJhbWV0ZXJzIHRvIGJlIG1vcmUgcmVhZGFibGUgYW5kIHRvIHNpbXBs
aWZ5IHRoZSBzdWJjbGFzc2luZyBvZiB0aGUgdmFyaW91cyBtZXRob2RzIGluIG9yZGVyIHRvIAor
ICAgICAgICBrZWVwIHRoZSBob3Jpem9udGFsL3ZlcnRpY2FsIHF1ZXJ5aW5nIHRvIGEgbWluaW11
bS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MRnJhY3Rpb246OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAqIG1hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oOgorICAgICAgICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxP
cGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6YmFz
ZWxpbmVQb3NpdGlvbik6CisgICAgICAgICogbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6
CisgICAgICAgICogbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxSb3c6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAqIG1hdGhtbC9S
ZW5kZXJNYXRoTUxSb3cuaDoKKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFN1YlN1cDo6YmFzZWxpbmVQb3NpdGlv
bik6CisgICAgICAgICogbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5oOgorICAgICAgICAqIG1h
dGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MVW5kZXJPdmVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
VW5kZXJPdmVyOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0
aE1MVW5kZXJPdmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lQm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUJveDo6bGluZUhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6YWRqdXN0TWF4QXNj
ZW50QW5kRGVzY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpjb21wdXRl
TG9naWNhbEJveEhlaWdodHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGxh
Y2VCb3hlc0luQmxvY2tEaXJlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmJhc2VsaW5lUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bGluZUhlaWdodCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQlIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQlI6OmxpbmVIZWlnaHQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCUi5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJC
Uik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpm
aXJzdExpbmVCb3hCYXNlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGFz
dExpbmVCb3hCYXNlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9jYWxD
YXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bGluZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6
OnZlcnRpY2FsUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbEJveCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCb3gpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6YmFz
ZWxpbmVQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RCb3g6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpiYXNl
bGluZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ29sOjppc1RhYmxlQ29sKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpj
b21wdXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290
SW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpiYXNlbGluZVBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmxpbmVIZWlnaHQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVCb3VuZGFyaWVzKToKKwogMjAxMC0x
MC0xOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwOTUsNyArNTA5
NSw3IEBACiAJCUJDRUE0ODYxMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCb3guY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4MjIwOTdEOTMw
MjAwOTRDOUU0IC8qIFJlbmRlckJveC5jcHAgKi87IH07CiAJCUJDRUE0ODYyMDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRUE0ODIzMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCb3guaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg2MzA5N0Q5
MzAyMDA5NEM5RTQgLyogUmVuZGVyQlIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4MjQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJSLmNw
cCAqLzsgfTsKLQkJQkNFQTQ4NjQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckJSLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgyNTA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyQlIuaCAqLzsgfTsKKwkJQkNFQTQ4NjQwOTdEOTMwMjAwOTRDOUU0
IC8qIFJlbmRlckJSLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0VBNDgyNTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQlIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg2NTA5N0Q5MzAyMDA5
NEM5RTQgLyogUmVuZGVyQnV0dG9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRUE0ODI2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJCdXR0b24u
Y3BwICovOyB9OwogCQlCQ0VBNDg2NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQnV0dG9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgyNzA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQnV0dG9uLmggKi87IH07CiAJCUJDRUE0ODY3MDk3RDkz
MDIwMDk0QzlFNCAvKiBSZW5kZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODI4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJWaWV3
LmNwcCAqLzsgfTsKSW5kZXg6IFdlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAJ
KHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxG
cmFjdGlvbjo6cGFpbnQoUGFpbnRJbgogICAgIGluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQog
Ci1pbnQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExp
bmUsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK2ludCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6
YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgbGluZURp
cmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAogewogICAg
IGlmIChmaXJzdENoaWxkKCkgJiYgZmlyc3RDaGlsZCgpLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkp
IHsKICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2sqIG51bWVyYXRvciA9IHRvUmVuZGVyTWF0aE1M
QmxvY2soZmlyc3RDaGlsZCgpKTsKQEAgLTE4NCw3ICsxODQsNyBAQCBpbnQgUmVuZGVyTWF0aE1M
RnJhY3Rpb246OmJhc2VsaW5lUG9zaXRpCiAgICAgICAgIC8vIGEgZ29vZCBndWVzcy4KICAgICAg
ICAgcmV0dXJuIG51bWVyYXRvci0+b2Zmc2V0SGVpZ2h0KCkgKyBzdHlsZSgpLT5mb250U2l6ZSgp
IC8gMzsKICAgICB9Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKGZp
cnN0TGluZSwgaXNSb290TGluZUJveCk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNlbGlu
ZVBvc2l0aW9uKGZpcnN0TGluZSwgbGluZURpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CiB9
CiAKIH0KSW5kZXg6IFdlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaAkocmV2aXNpb24g
Njk2MjUpCisrKyBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJNYXRoTUxGcmFjdGlv
bihFbGVtZW50KiBmcmFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9i
amVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0
aW9uKGJvb2wgLCBib29sKSBjb25zdDsgCisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlv
bihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQ
b3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OyAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKSW5kZXg6IFdlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJ
KHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsMTMgKzM0NSwxMyBAQCBSZW5kZXJCbG9jayogUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OmNyZWF0CiAgICAgcmV0dXJuIGNvbnRhaW5lcjsKIH0KIAotaW50
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBi
b29sIGlzUm9vdExpbmVCb3gpIGNvbnN0CitpbnQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmJhc2Vs
aW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3Rp
b24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKIHsKICAgICBpZiAo
bV9pc1N0YWNrZWQpCiAgICAgICAgIHJldHVybiBtX3N0cmV0Y2hIZWlnaHQgKiAyIC8gMyAtICht
X3N0cmV0Y2hIZWlnaHQgLSBzdGF0aWNfY2FzdDxpbnQ+KG1fc3RyZXRjaEhlaWdodCAvIGdPcGVy
YXRvckV4cGFuc2lvbikpIC8gMjsKLSAgICBpZiAobV9pc0NlbnRlcmVkICYmIGZpcnN0Q2hpbGQo
KSkgCi0gICAgICAgIHJldHVybiBmaXJzdENoaWxkKCktPmJhc2VsaW5lUG9zaXRpb24oZmlyc3RM
aW5lLCBpc1Jvb3RMaW5lQm94KTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9z
aXRpb24oZmlyc3RMaW5lLCBpc1Jvb3RMaW5lQm94KTsKKyAgICBpZiAobV9pc0NlbnRlcmVkICYm
IGZpcnN0Q2hpbGRCb3goKSkgCisgICAgICAgIHJldHVybiBmaXJzdENoaWxkQm94KCktPmJhc2Vs
aW5lUG9zaXRpb24oZmlyc3RMaW5lLCBsaW5lRGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsK
KyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBsaW5l
RGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKIH0KICAgICAKIH0KSW5kZXg6IFdlYkNvcmUv
bWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RyZXRjaFRvSGVpZ2h0KGludCBwaXhlbEhl
aWdodCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7IAogICAgIHZpcnR1
YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCAsIGJvb2wpIGNvbnN0OyAg
ICAKLSAgICAKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5l
LCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWlu
aW5nTGluZSkgY29uc3Q7CisgICAgICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXQoKTsKICAgICB2aXJ0dWFsIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlU3RhY2thYmxl
U3R5bGUoaW50IHNpemUsIGludCB0b3BSZWxhdGl2ZSk7CkluZGV4OiBXZWJDb3JlL21hdGhtbC9S
ZW5kZXJNYXRoTUxSb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbWF0aG1sL1JlbmRlck1h
dGhNTFJvdy5jcHAJKHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0
aE1MUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDE1ICsxNDUsMTUgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxSb3c6OmxheW91dCgpIAogICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKIH0gICAg
CiAKLWludCBSZW5kZXJNYXRoTUxSb3c6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUs
IGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK2ludCBSZW5kZXJNYXRoTUxSb3c6OmJhc2VsaW5l
UG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGlu
ZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAogewogICAgIGlmIChmaXJzdENo
aWxkKCkgJiYgZmlyc3RDaGlsZCgpLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKICAgICAgICAg
UmVuZGVyTWF0aE1MQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJNYXRoTUxCbG9jayhmaXJzdENoaWxk
KCkpOwogICAgICAgICBpZiAoYmxvY2stPmlzUmVuZGVyTWF0aE1MT3BlcmF0b3IoKSkKLSAgICAg
ICAgICAgIHJldHVybiBibG9jay0+YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGlzUm9vdExp
bmVCb3gpOworICAgICAgICAgICAgcmV0dXJuIGJsb2NrLT5iYXNlbGluZVBvc2l0aW9uKGZpcnN0
TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKICAgICB9CiAgICAgCi0gICAgcmV0
dXJuIFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgaXNSb290TGluZUJv
eCk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwg
ZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKIH0KICAgICAKIH0KSW5kZXg6IFdlYkNvcmUv
bWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvdy5oCShyZXZpc2lvbiA2OTYyNSkKKysrIFdlYkNvcmUvbWF0aG1sL1JlbmRl
ck1hdGhNTFJvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAg
ICBSZW5kZXJNYXRoTUxSb3coTm9kZSogY29udGFpbmVyKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNS
ZW5kZXJNYXRoTUxSb3coKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBpbnQg
bm9uT3BlcmF0b3JIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0
aW9uKGJvb2wgLCBib29sKSBjb25zdDsgICAgCisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3Np
dGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUg
PSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OyAgICAKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiB9OwpJbmRleDogV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0
aE1MU3ViU3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxT
dWJTdXAuY3BwCShyZXZpc2lvbiA2OTYyNSkKKysrIFdlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhN
TFN1YlN1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw0OSArMTczLDQ3IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MU3ViU3VwOjpsYXlvdXQoKSAKICAgICB9ICAgIAogfQogCi1pbnQgUmVuZGVyTWF0
aE1MU3ViU3VwOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExp
bmVCb3gpIGNvbnN0CitpbnQgUmVuZGVyTWF0aE1MU3ViU3VwOjpiYXNlbGluZVBvc2l0aW9uKGJv
b2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1v
ZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIGJhc2UgPSBm
aXJzdENoaWxkKCk7CiAgICAgaWYgKCFiYXNlKSAKICAgICAgICAgcmV0dXJuIG9mZnNldEhlaWdo
dCgpOwogICAgIGJhc2UgPSBiYXNlLT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKCFiYXNlKSAKLSAg
ICAgICAgcmV0dXJuIG9mZnNldEhlaWdodCgpOwogICAgIAogICAgIGludCBiYXNlbGluZSA9IG9m
ZnNldEhlaWdodCgpOwotICAgIAorICAgIGlmICghYmFzZSB8fCAhYmFzZS0+aXNCb3hNb2RlbE9i
amVjdCgpKSAKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lOworCisgICAgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoYmFzZSk7CisKICAgICBzd2l0Y2gg
KG1fa2luZCkgewogICAgIGNhc2UgU3ViU3VwOgogICAgICAgICBpZiAobV9zY3JpcHRzKSB7Ci0g
ICAgICAgICAgICBpbnQgdG9wQWRqdXN0ID0gMDsKLSAgICAgICAgICAgIGlmIChiYXNlLT5pc0Jv
eE1vZGVsT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCog
Ym94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNlKTsKLSAgICAgICAgICAgICAgICB0b3BB
ZGp1c3QgPSAobV9zY3JpcHRzLT5vZmZzZXRIZWlnaHQoKSAtIGJveC0+b2Zmc2V0SGVpZ2h0KCkp
IC8gMjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCB0b3BBZGp1c3QgPSAobV9zY3Jp
cHRzLT5vZmZzZXRIZWlnaHQoKSAtIGJveC0+b2Zmc2V0SGVpZ2h0KCkpIC8gMjsKKyAgICAgICAg
CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGxhc3QgYml0IG9mIHRoaXMgY2FsY3VsYXRpb24g
c2hvdWxkIGJlIG1vcmUgZXhhY3QuICBXaHkgaXMgdGhlIDItM3B4IHNjYWxlZCBmb3Igem9vbSBu
ZWNlc3Nhcnk/CiAgICAgICAgICAgICAvLyBUaGUgYmFzZWxpbmUgaXMgdG9wIHNwYWNpbmcgb2Yg
dGhlIGJhc2UgKyB0aGUgYmFzZWxpbmUgb2YgdGhlIGJhc2UgKyBhZGp1c3RlZCBzcGFjZSBmb3Ig
em9vbQogICAgICAgICAgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKTsKLSAgICAgICAgICAgIHJldHVybiB0b3BBZGp1c3QgKyBiYXNlLT5iYXNlbGluZVBvc2l0
aW9uKGZpcnN0TGluZSwgaXNSb290TGluZUJveCkgKyBzdGF0aWNfY2FzdDxpbnQ+KCh6b29tRmFj
dG9yID4gMS4yNSA/IDIgOiAzKSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRv
cEFkanVzdCArIGJveC0+YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGlu
ZVBvc2l0aW9uTW9kZSkgKyBzdGF0aWNfY2FzdDxpbnQ+KCh6b29tRmFjdG9yID4gMS4yNSA/IDIg
OiAzKSAqIHpvb21GYWN0b3IpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
U3VwOgotICAgICAgICBpZiAoYmFzZSkgewotICAgICAgICAgICAgYmFzZWxpbmUgPSBiYXNlLT5i
YXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgaXNSb290TGluZUJveCkgKyA0OwotICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZSBleHRyYSBhbW91bnQgb2YgdGhlIHN1cGVyc2NyaXB0IGFzY2VuZGlu
ZyBhYm92ZSB0aGUgYmFzZSdzIGJveAotICAgICAgICAgICAgLy8gaXNuJ3QgdGFrZW4gaW50byBh
Y2NvdW50LiAgVGhpcyBzaG91bGQgYmUgY2FsY3VsYXRlZCBpbiBhIG1vcmUgcmVsaWFibGUKLSAg
ICAgICAgICAgIC8vIHdheS4KLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogc3VwID0gYmFzZS0+
bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmIChzdXAgJiYgc3VwLT5pc0JveE1vZGVsT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChzdXApOwotICAgICAgICAgICAgICAgIC8vIHdlJ2xsIHRha2Ug
aGFsZiBvZiB0aGUgc3VwJ3MgYm94IGhlaWdodCBpbnRvIGFjY291bnQgaW4gdGhlIGJhc2VsaW5l
Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmUgKz0gc3RhdGljX2Nhc3Q8aW50Pihib3gtPm9mZnNl
dEhlaWdodCgpICogMC41KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJhc2VsaW5lKys7
CisgICAgY2FzZSBTdXA6IHsKKyAgICAgICAgYmFzZWxpbmUgPSBib3gtPmJhc2VsaW5lUG9zaXRp
b24oZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1vZGUpICsgNDsKKyAgICAgICAg
Ly8gRklYTUU6IFRoZSBleHRyYSBhbW91bnQgb2YgdGhlIHN1cGVyc2NyaXB0IGFzY2VuZGluZyBh
Ym92ZSB0aGUgYmFzZSdzIGJveAorICAgICAgICAvLyBpc24ndCB0YWtlbiBpbnRvIGFjY291bnQu
ICBUaGlzIHNob3VsZCBiZSBjYWxjdWxhdGVkIGluIGEgbW9yZSByZWxpYWJsZQorICAgICAgICAv
LyB3YXkuCisgICAgICAgIFJlbmRlck9iamVjdCogc3VwID0gYmFzZS0+bmV4dFNpYmxpbmcoKTsK
KyAgICAgICAgaWYgKHN1cCAmJiBzdXAtPmlzQm94TW9kZWxPYmplY3QoKSkgeworICAgICAgICAg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qoc3Vw
KTsKKyAgICAgICAgICAgIC8vIHdlJ2xsIHRha2UgaGFsZiBvZiB0aGUgc3VwJ3MgYm94IGhlaWdo
dCBpbnRvIGFjY291bnQgaW4gdGhlIGJhc2VsaW5lCisgICAgICAgICAgICBiYXNlbGluZSArPSBz
dGF0aWNfY2FzdDxpbnQ+KGJveC0+b2Zmc2V0SGVpZ2h0KCkgKiAwLjUpOwogICAgICAgICB9Cisg
ICAgICAgIGJhc2VsaW5lKys7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFN1YjoK
LSAgICAgICAgaWYgKGJhc2UpIAotICAgICAgICAgICAgYmFzZWxpbmUgPSBiYXNlLT5iYXNlbGlu
ZVBvc2l0aW9uKHRydWUpICsgNDsKKyAgICAgICAgYmFzZWxpbmUgPSBib3gtPmJhc2VsaW5lUG9z
aXRpb24odHJ1ZSwgZGlyZWN0aW9uKSArIDQ7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAK
ICAgICByZXR1cm4gYmFzZWxpbmU7CkluZGV4OiBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxT
dWJTdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAu
aAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGhhc0Jhc2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBpbnQgbm9u
T3BlcmF0b3JIZWlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZXRjaFRvSGVpZ2h0
KGludCBwaXhlbEhlaWdodCk7Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29s
LCBib29sKSBjb25zdDsgICAgCisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29s
IGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlv
bk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwpJbmRleDogV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3Bw
CShyZXZpc2lvbiA2OTYyNSkKKysrIFdlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsMTAgQEAgdm9pZCBSZW5kZXJNYXRo
TUxVbmRlck92ZXI6OmxheW91dCgpIAogICAgICAgICBpZiAob3ZlcikgewogICAgICAgICAgICAg
Ly8gRklYTUU6IGRlc2NlbmRpbmcgZ2x5cGhzIGludHJ1ZGUgaW50byBiYXNlIChlLmcuIGxvd2Vy
Y2FzZSB5IG92ZXIgYmFzZSkKICAgICAgICAgICAgIC8vIEZJWE1FOiBiYXNlcyB0aGF0IGFzY2Vu
ZCBoaWdoZXIgdGhhbiB0aGUgbGluZSBib3ggaW50cnVkZSBpbnRvIHRoZSBvdmVyCi0gICAgICAg
ICAgICBpbnQgb3ZlclNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGdPdmVyU3BhY2luZ0FkanVz
dG1lbnQgKiAoZ2V0T2Zmc2V0SGVpZ2h0KG92ZXIpIC0gb3Zlci0+Zmlyc3RDaGlsZCgpLT5iYXNl
bGluZVBvc2l0aW9uKHRydWUpKSk7CisgICAgICAgICAgICBpZiAoIW92ZXItPmZpcnN0Q2hpbGQo
KS0+aXNCb3hNb2RlbE9iamVjdCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpbnQgb3ZlclNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGdPdmVy
U3BhY2luZ0FkanVzdG1lbnQgKiAoZ2V0T2Zmc2V0SGVpZ2h0KG92ZXIpIC0gdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChvdmVyLT5maXJzdENoaWxkKCkpLT5iYXNlbGluZVBvc2l0aW9uKHRydWUsIEhv
cml6b250YWxMaW5lKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBiYXNlIHJvdyB3
cmFwcGVyCiAgICAgICAgICAgICBiYXNlID0gb3Zlci0+bmV4dFNpYmxpbmcoKTsKQEAgLTE4Miw5
ICsxODUsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCgpIAogICAgICAg
ICAgICAgaW50IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFzZSk7CiAgICAgICAgICAg
ICAvLyBhY3R1YWwgYmFzZQogICAgICAgICAgICAgYmFzZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsK
KyAgICAgICAgICAgIGlmICghYmFzZS0+aXNCb3hNb2RlbE9iamVjdCgpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0
byBsb29rIGF0IHRoZSBzcGFjZSBiZXR3ZWVuIGEgc2luZ2xlIG1heGltdW0gaGVpZ2h0IG9mCiAg
ICAgICAgICAgICAvLyAgICAgICAgdGhlIGxpbmUgYm94ZXMgYW5kIHRoZSBiYXNlbGluZSBhbmQg
c3F1ZWV6ZSB0aGVtIHRvZ2V0aGVyCi0gICAgICAgICAgICBpbnQgdW5kZXJTcGFjaW5nID0gYmFz
ZUhlaWdodCAtIGJhc2UtPmJhc2VsaW5lUG9zaXRpb24odHJ1ZSk7CisgICAgICAgICAgICBpbnQg
dW5kZXJTcGFjaW5nID0gYmFzZUhlaWdodCAtIHRvUmVuZGVyQm94TW9kZWxPYmplY3QoYmFzZSkt
PmJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgSG9yaXpvbnRhbExpbmUpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBhZGp1c3QgdGhlIGJhc2UncyBpbnRydXNpb24gaW50byB0aGUgdW5kZXIK
ICAgICAgICAgICAgIFJlbmRlck9iamVjdCogdW5kZXIgPSBsYXN0Q2hpbGQoKTsKQEAgLTIwMyw3
ICsyMDksOSBAQCB2b2lkIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6bGF5b3V0KCkgCiAgICAgICAg
IGlmIChvdmVyKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogZGVzY2VuZGluZyBnbHlwaHMgaW50
cnVkZSBpbnRvIGJhc2UgKGUuZy4gbG93ZXJjYXNlIHkgb3ZlciBiYXNlKQogICAgICAgICAgICAg
Ly8gRklYTUU6IGJhc2VzIHRoYXQgYXNjZW5kIGhpZ2hlciB0aGFuIHRoZSBsaW5lIGJveCBpbnRy
dWRlIGludG8gdGhlIG92ZXIKLSAgICAgICAgICAgIGludCBvdmVyU3BhY2luZyA9IHN0YXRpY19j
YXN0PGludD4oZ092ZXJTcGFjaW5nQWRqdXN0bWVudCAqIChnZXRPZmZzZXRIZWlnaHQob3Zlcikg
LSBvdmVyLT5maXJzdENoaWxkKCktPmJhc2VsaW5lUG9zaXRpb24odHJ1ZSkpKTsKKyAgICAgICAg
ICAgIGlmICghb3Zlci0+Zmlyc3RDaGlsZCgpLT5pc0JveE1vZGVsT2JqZWN0KCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpbnQgb3ZlclNwYWNpbmcgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGdPdmVyU3BhY2luZ0FkanVzdG1lbnQgKiAoZ2V0T2Zmc2V0SGVpZ2h0KG92ZXIpIC0g
dG9SZW5kZXJCb3hNb2RlbE9iamVjdChvdmVyLT5maXJzdENoaWxkKCkpLT5iYXNlbGluZVBvc2l0
aW9uKHRydWUsIEhvcml6b250YWxMaW5lKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAv
LyBiYXNlIHJvdyB3cmFwcGVyCiAgICAgICAgICAgICBiYXNlID0gb3Zlci0+bmV4dFNpYmxpbmco
KTsKQEAgLTIxOCw5ICsyMjYsMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91
dCgpIAogICAgICAgICAgICAgICAgIGludCBiYXNlSGVpZ2h0ID0gZ2V0T2Zmc2V0SGVpZ2h0KGJh
c2UpOwogICAgICAgICAgICAgICAgIC8vIGFjdHVhbCBiYXNlCiAgICAgICAgICAgICAgICAgYmFz
ZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJhc2UtPmlzQm94
TW9kZWxPYmplY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBsb29rIGF0IHRoZSBzcGFjZSBiZXR3ZWVuIGEgc2lu
Z2xlIG1heGltdW0gaGVpZ2h0IG9mCiAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoZSBsaW5l
IGJveGVzIGFuZCB0aGUgYmFzZWxpbmUgYW5kIHNxdWVlemUgdGhlbSB0b2dldGhlcgotICAgICAg
ICAgICAgICAgIGludCB1bmRlclNwYWNpbmcgPSBiYXNlSGVpZ2h0IC0gYmFzZS0+YmFzZWxpbmVQ
b3NpdGlvbih0cnVlKTsKKyAgICAgICAgICAgICAgICBpbnQgdW5kZXJTcGFjaW5nID0gYmFzZUhl
aWdodCAtIHRvUmVuZGVyQm94TW9kZWxPYmplY3QoYmFzZSktPmJhc2VsaW5lUG9zaXRpb24odHJ1
ZSwgSG9yaXpvbnRhbExpbmUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogdW5kZXIgPSBsYXN0Q2hpbGQoKTsKICAgICAgICAgICAgICAgICBpZiAodW5k
ZXIgJiYgdW5kZXItPmZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJJbmxpbmUoKSAmJiB1bmRlclNwYWNp
bmcgPiAwKQpAQCAtMjM0LDExICsyNDUsMTEgQEAgdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6
OmxheW91dCgpIAogICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKIH0KIAotaW50IFJlbmRlck1h
dGhNTFVuZGVyT3Zlcjo6YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jv
b3RMaW5lQm94KSBjb25zdAoraW50IFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6YmFzZWxpbmVQb3Np
dGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9z
aXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiBj
dXJyZW50ID0gZmlyc3RDaGlsZCgpOwogICAgIGlmICghY3VycmVudCkKLSAgICAgICAgcmV0dXJu
IFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgaXNSb290TGluZUJveCk7
CisgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUs
IGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CiAKICAgICBpbnQgYmFzZWxpbmUgPSAwOwog
ICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC0yNDksMTcgKzI2MCwxNyBAQCBpbnQgUmVuZGVyTWF0
aE1MVW5kZXJPdmVyOjpiYXNlbGluZVBvc2l0CiAgICAgICAgIGlmIChjdXJyZW50KSB7CiAgICAg
ICAgICAgICAvLyBhY3R1YWwgYmFzZQogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBiYXNlID0g
Y3VycmVudC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgaWYgKCFiYXNlKQorICAgICAgICAg
ICAgaWYgKCFiYXNlIHx8ICFiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBiYXNlbGluZSArPSBiYXNlLT5iYXNlbGluZVBvc2l0aW9u
KGZpcnN0TGluZSwgaXNSb290TGluZUJveCk7CisgICAgICAgICAgICBiYXNlbGluZSArPSB0b1Jl
bmRlckJveE1vZGVsT2JqZWN0KGJhc2UpLT5iYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgSG9y
aXpvbnRhbExpbmUsIGxpbmVQb3NpdGlvbk1vZGUpOwogICAgICAgICAgICAgLy8gYWRkZWQgdGhl
IG5lZ2F0aXZlIHRvcCBtYXJnaW4KICAgICAgICAgICAgIGJhc2VsaW5lICs9IGN1cnJlbnQtPnN0
eWxlKCktPm1hcmdpblRvcCgpLnZhbHVlKCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBVbmRlcjoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBiYXNlID0gY3VycmVudC0+Zmly
c3RDaGlsZCgpOwotICAgICAgICBpZiAoYmFzZSkKLSAgICAgICAgICAgIGJhc2VsaW5lICs9IGJh
c2UtPmJhc2VsaW5lUG9zaXRpb24odHJ1ZSk7CisgICAgICAgIGlmIChiYXNlICYmIGJhc2UtPmlz
Qm94TW9kZWxPYmplY3QoKSkKKyAgICAgICAgICAgIGJhc2VsaW5lICs9IHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QoYmFzZSktPmJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgSG9yaXpvbnRhbExpbmUpOwog
ICAgIH0KIAogICAgIC8vIEZJWE1FOiBXaGVyZSBpcyB0aGUgZXh0cmEgMi0zcHggYWRqdXN0ZWQg
Zm9yIHpvb20gY29taW5nIGZyb20/CkluZGV4OiBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxV
bmRlck92ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRl
ck92ZXIuaAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxV
bmRlck92ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNCYXNlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgaW50IG5vbk9wZXJhdG9ySGVpZ2h0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sICwgYm9vbCkgY29uc3Q7
ICAgIAorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExp
bmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdM
aW5lKSBjb25zdDsgICAgCiAgICAgdmlydHVhbCB2b2lkIHN0cmV0Y2hUb0hlaWdodChpbnQgcGl4
ZWxIZWlnaHQpOwogcHJpdmF0ZToKICAgICBlbnVtIFVuZGVyT3ZlclR5cGUgeyBVbmRlciwgT3Zl
ciwgVW5kZXJPdmVyIH07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gNjk2MjUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NiArMjIsNyBAQAogI2RlZmluZSBJbmxpbmVCb3hfaAogCiAjaW5jbHVkZSAiUmVuZGVyQm94TW9k
ZWxPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJCUi5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rp
b24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjQzLDggKzI0NCw5IEBAIHB1YmxpYzoK
ICAgICAvLyBUaGUgbG9naWNhbCBoZWlnaHQgaXMgb3VyIGV4dGVudCBpbiB0aGUgYmxvY2sgZmxv
dyBkaXJlY3Rpb24sIGkuZS4sIGhlaWdodCBmb3IgaG9yaXpvbnRhbCB0ZXh0IGFuZCB3aWR0aCBm
b3IgdmVydGljYWwgdGV4dC4KICAgICBpbnQgbG9naWNhbEhlaWdodCgpIGNvbnN0OwogCi0gICAg
aW5saW5lIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgaXNSb290TGluZUJveCkgY29uc3QgeyBy
ZXR1cm4gcmVuZGVyZXIoKS0+YmFzZWxpbmVQb3NpdGlvbihtX2ZpcnN0TGluZSwgaXNSb290TGlu
ZUJveCk7IH0KLSAgICBpbmxpbmUgaW50IGxpbmVIZWlnaHQoYm9vbCBpc1Jvb3RMaW5lQm94KSBj
b25zdCB7IHJldHVybiByZW5kZXJlcigpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lLCBpc1Jvb3RM
aW5lQm94KTsgfQorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBib3hNb2RlbE9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9uKG1fZmlyc3RMaW5lLCBtX2lz
VmVydGljYWwgPyBWZXJ0aWNhbExpbmUgOiBIb3Jpem9udGFsTGluZSwgUG9zaXRpb25PbkNvbnRh
aW5pbmdMaW5lKTsgfQorICAgIHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoKSBjb25zdCB7IHJldHVy
biBib3hNb2RlbE9iamVjdCgpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lLCBtX2lzVmVydGljYWwg
PyBWZXJ0aWNhbExpbmUgOiBIb3Jpem9udGFsTGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5l
KTsgfQorICAgIAogCiAgICAgdmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lk
IElubGluZUZsb3dCb3g6OmFkanVzdE1heEFzY2VudEFuZERlCiAgICAgICAgIGlmIChjdXJyLT5y
ZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBQb3Np
dGlvbmVkIHBsYWNlaG9sZGVycyBkb24ndCBhZmZlY3QgY2FsY3VsYXRpb25zLgogICAgICAgICBp
ZiAoY3Vyci0+eSgpID09IFBvc2l0aW9uVG9wIHx8IGN1cnItPnkoKSA9PSBQb3NpdGlvbkJvdHRv
bSkgewotICAgICAgICAgICAgaW50IGxpbmVIZWlnaHQgPSBjdXJyLT5saW5lSGVpZ2h0KGZhbHNl
KTsKKyAgICAgICAgICAgIGludCBsaW5lSGVpZ2h0ID0gY3Vyci0+bGluZUhlaWdodCgpOwogICAg
ICAgICAgICAgaWYgKGN1cnItPnkoKSA9PSBQb3NpdGlvblRvcCkgewogICAgICAgICAgICAgICAg
IGlmIChtYXhBc2NlbnQgKyBtYXhEZXNjZW50IDwgbGluZUhlaWdodCkKICAgICAgICAgICAgICAg
ICAgICAgbWF4RGVzY2VudCA9IGxpbmVIZWlnaHQgLSBtYXhBc2NlbnQ7CkBAIC00MDEsOCArNDAx
LDggQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaQogewogICAgIGlm
IChpc1Jvb3RJbmxpbmVCb3goKSkgewogICAgICAgICAvLyBFeGFtaW5lIG91ciByb290IGJveC4K
LSAgICAgICAgaW50IGhlaWdodCA9IGxpbmVIZWlnaHQodHJ1ZSk7Ci0gICAgICAgIGludCBiYXNl
bGluZSA9IGJhc2VsaW5lUG9zaXRpb24odHJ1ZSk7CisgICAgICAgIGludCBoZWlnaHQgPSBsaW5l
SGVpZ2h0KCk7CisgICAgICAgIGludCBiYXNlbGluZSA9IGJhc2VsaW5lUG9zaXRpb24oKTsKICAg
ICAgICAgaWYgKGhhc1RleHRDaGlsZHJlbigpIHx8IHN0cmljdE1vZGUpIHsKICAgICAgICAgICAg
IGludCBhc2NlbnQgPSBiYXNlbGluZTsKICAgICAgICAgICAgIGludCBkZXNjZW50ID0gaGVpZ2h0
IC0gYXNjZW50OwpAQCAtNDU1LDggKzQ1NSw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29tcHV0
ZUxvZ2ljYWxCb3hIZWkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gY3Vyci0+bGluZUhlaWdodChmYWxz
ZSk7Ci0gICAgICAgICAgICBiYXNlbGluZSA9IGN1cnItPmJhc2VsaW5lUG9zaXRpb24oZmFsc2Up
OworICAgICAgICAgICAgbGluZUhlaWdodCA9IGN1cnItPmxpbmVIZWlnaHQoKTsKKyAgICAgICAg
ICAgIGJhc2VsaW5lID0gY3Vyci0+YmFzZWxpbmVQb3NpdGlvbigpOwogICAgICAgICB9CiAKICAg
ICAgICAgY3Vyci0+c2V0WSh2ZXJ0aWNhbFBvc2l0aW9uRm9yQm94KGN1cnIsIG1fZmlyc3RMaW5l
KSk7CkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNh
bEJveEhlaQogdm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlvbihp
bnQgeVBvcywgaW50IG1heEhlaWdodCwgaW50IG1heEFzY2VudCwgYm9vbCBzdHJpY3RNb2RlLCBp
bnQmIHNlbGVjdGlvblRvcCwgaW50JiBzZWxlY3Rpb25Cb3R0b20pCiB7CiAgICAgaWYgKGlzUm9v
dElubGluZUJveCgpKQotICAgICAgICBzZXRZKHlQb3MgKyBtYXhBc2NlbnQgLSBiYXNlbGluZVBv
c2l0aW9uKHRydWUpKTsgLy8gUGxhY2Ugb3VyIHJvb3QgYm94LgorICAgICAgICBzZXRZKHlQb3Mg
KyBtYXhBc2NlbnQgLSBiYXNlbGluZVBvc2l0aW9uKCkpOyAvLyBQbGFjZSBvdXIgcm9vdCBib3gu
CiAKICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9
IGN1cnItPm5leHRPbkxpbmUoKSkgewogICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+aXNQ
b3NpdGlvbmVkKCkpCkBAIC00OTksMTggKzQ5OSwxOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBs
YWNlQm94ZXNJbkJsb2NrRGlyCiAgICAgICAgIGlmIChjdXJyLT55KCkgPT0gUG9zaXRpb25Ub3Ap
CiAgICAgICAgICAgICBjdXJyLT5zZXRZKHlQb3MpOwogICAgICAgICBlbHNlIGlmIChjdXJyLT55
KCkgPT0gUG9zaXRpb25Cb3R0b20pCi0gICAgICAgICAgICBjdXJyLT5zZXRZKHlQb3MgKyBtYXhI
ZWlnaHQgLSBjdXJyLT5saW5lSGVpZ2h0KGZhbHNlKSk7CisgICAgICAgICAgICBjdXJyLT5zZXRZ
KHlQb3MgKyBtYXhIZWlnaHQgLSBjdXJyLT5saW5lSGVpZ2h0KCkpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGlmICgoaXNJbmxpbmVGbG93ICYmICFzdGF0aWNfY2FzdDxJbmxpbmVGbG93
Qm94Kj4oY3VyciktPmhhc1RleHRDaGlsZHJlbigpKSAmJiAhY3Vyci0+Ym94TW9kZWxPYmplY3Qo
KS0+aGFzSW5saW5lRGlyZWN0aW9uQm9yZGVyc09yUGFkZGluZygpICYmICFzdHJpY3RNb2RlKQog
ICAgICAgICAgICAgICAgIGNoaWxkQWZmZWN0c1RvcEJvdHRvbVBvcyA9IGZhbHNlOwotICAgICAg
ICAgICAgaW50IHBvc0FkanVzdCA9IG1heEFzY2VudCAtIGN1cnItPmJhc2VsaW5lUG9zaXRpb24o
ZmFsc2UpOworICAgICAgICAgICAgaW50IHBvc0FkanVzdCA9IG1heEFzY2VudCAtIGN1cnItPmJh
c2VsaW5lUG9zaXRpb24oKTsKICAgICAgICAgICAgIGN1cnItPnNldFkoY3Vyci0+eSgpICsgeVBv
cyArIHBvc0FkanVzdCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGludCBuZXdZID0g
Y3Vyci0+eSgpOwogICAgICAgICBpZiAoY3Vyci0+aXNUZXh0KCkgfHwgY3Vyci0+aXNJbmxpbmVG
bG93Qm94KCkpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBjdXJyLT5yZW5kZXJl
cigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnQoKTsKLSAgICAgICAgICAgIG5ld1kgKz0gY3Vy
ci0+YmFzZWxpbmVQb3NpdGlvbihmYWxzZSkgLSBmb250LmFzY2VudCgpOworICAgICAgICAgICAg
bmV3WSArPSBjdXJyLT5iYXNlbGluZVBvc2l0aW9uKCkgLSBmb250LmFzY2VudCgpOwogICAgICAg
ICAgICAgaWYgKGN1cnItPmlzSW5saW5lRmxvd0JveCgpKQogICAgICAgICAgICAgICAgIG5ld1kg
LT0gY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+Ym9yZGVyVG9wKCkgKyBjdXJyLT5ib3hNb2RlbE9i
amVjdCgpLT5wYWRkaW5nVG9wKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoIWN1cnItPnJlbmRlcmVy
KCktPmlzQlIoKSkgewpAQCAtNTI5LDcgKzUyOSw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxh
Y2VCb3hlc0luQmxvY2tEaXIKIAogICAgIGlmIChpc1Jvb3RJbmxpbmVCb3goKSkgewogICAgICAg
ICBjb25zdCBGb250JiBmb250ID0gcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250
KCk7Ci0gICAgICAgIHNldFkoeSgpICsgYmFzZWxpbmVQb3NpdGlvbih0cnVlKSAtIGZvbnQuYXNj
ZW50KCkpOworICAgICAgICBzZXRZKHkoKSArIGJhc2VsaW5lUG9zaXRpb24oKSAtIGZvbnQuYXNj
ZW50KCkpOwogICAgICAgICBpZiAoaGFzVGV4dENoaWxkcmVuKCkgfHwgc3RyaWN0TW9kZSkgewog
ICAgICAgICAgICAgc2VsZWN0aW9uVG9wID0gbWluKHNlbGVjdGlvblRvcCwgeSgpKTsKICAgICAg
ICAgICAgIHNlbGVjdGlvbkJvdHRvbSA9IG1heChzZWxlY3Rpb25Cb3R0b20sIHkoKSArIGxvZ2lj
YWxIZWlnaHQoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNp
b24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNiArNDMsMjIgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitpbnQgSW5saW5lVGV4dEJveDo6YmFzZWxpbmVQb3NpdGlvbigpIGNv
bnN0Cit7CisgICAgaWYgKCFpc1RleHQoKSB8fCAhcGFyZW50KCkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBwYXJlbnQoKS0+YmFzZWxpbmVQb3NpdGlvbigpOworfQorICAgIAoraW50
IElubGluZVRleHRCb3g6OmxpbmVIZWlnaHQoKSBjb25zdAoreworICAgIGlmICghaXNUZXh0KCkg
fHwgIXBhcmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9yZW5kZXJlci0+aXNC
UigpKQorICAgICAgICByZXR1cm4gdG9SZW5kZXJCUihtX3JlbmRlcmVyKS0+bGluZUhlaWdodCht
X2ZpcnN0TGluZSk7CisgICAgcmV0dXJuIHBhcmVudCgpLT5saW5lSGVpZ2h0KCk7Cit9CisKIGlu
dCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25Ub3AoKQogewogICAgIHJldHVybiByb290KCktPnNl
bGVjdGlvblRvcCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24g
Njk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDYgKzY5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc0h5cGhlbihib29s
IGhhc0h5cGhlbikgeyBtX2hhc0VsbGlwc2lzQm94T3JIeXBoZW4gPSBoYXNIeXBoZW47IH0KICAg
ICBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUJ5U3RhcnQoY29uc3QgSW5saW5lVGV4dEJveCog
Zmlyc3QsIGNvbnN0IElubGluZVRleHRCb3gqIHNlY29uZCkgeyByZXR1cm4gZmlyc3QtPnN0YXJ0
KCkgPCBzZWNvbmQtPnN0YXJ0KCk7IH0KIAorICAgIAorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5l
UG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KCkgY29uc3Q7CisK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uVG9wKCk7CiAgICAgdmlydHVhbCBp
bnQgc2VsZWN0aW9uSGVpZ2h0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQlIuY3BwCShyZXZpc2lv
biA2OTYyNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJSLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMzYgKzM4LDE3IEBAIFJlbmRlckJSOjp+UmVuZGVyQlIoKQogewogfQogCi1pbnQg
UmVuZGVyQlI6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGlu
ZUJveCkgY29uc3QKK2ludCBSZW5kZXJCUjo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSkgY29u
c3QKIHsKLSAgICBpZiAoZmlyc3RUZXh0Qm94KCkgJiYgIWZpcnN0VGV4dEJveCgpLT5pc1RleHQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFJlbmRlclRleHQ6OmJhc2VsaW5lUG9z
aXRpb24oZmlyc3RMaW5lLCBpc1Jvb3RMaW5lQm94KTsKLX0KLQotaW50IFJlbmRlckJSOjpsaW5l
SGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIC8qaXNSb290TGluZUJveCovKSBjb25zdAotewot
ICAgIGlmIChmaXJzdFRleHRCb3goKSAmJiAhZmlyc3RUZXh0Qm94KCktPmlzVGV4dCgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGlmIChmaXJzdExpbmUpIHsKKyAgICBpZiAoZmlyc3RMaW5l
ICYmIGRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIFJlbmRlclN0
eWxlKiBzID0gc3R5bGUoZmlyc3RMaW5lKTsKLSAgICAgICAgTGVuZ3RoIGxoID0gcy0+bGluZUhl
aWdodCgpOwotICAgICAgICBpZiAobGguaXNOZWdhdGl2ZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
cyA9PSBzdHlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbGluZUhlaWdodCA9PSAtMSkK
LSAgICAgICAgICAgICAgICAgICAgbV9saW5lSGVpZ2h0ID0gUmVuZGVyT2JqZWN0OjpsaW5lSGVp
Z2h0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9saW5lSGVpZ2h0OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHMtPmZvbnQoKS5saW5lU3BhY2luZygpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChsaC5pc1BlcmNlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBs
aC5jYWxjTWluVmFsdWUocy0+Zm9udFNpemUoKSk7Ci0gICAgICAgIHJldHVybiBsaC52YWx1ZSgp
OworICAgICAgICBpZiAocyAhPSBzdHlsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHMtPmNvbXB1
dGVkTGluZUhlaWdodCgpOwogICAgIH0KLQorICAgIAogICAgIGlmIChtX2xpbmVIZWlnaHQgPT0g
LTEpCi0gICAgICAgIG1fbGluZUhlaWdodCA9IFJlbmRlck9iamVjdDo6bGluZUhlaWdodChmYWxz
ZSk7CisgICAgICAgIG1fbGluZUhlaWdodCA9IHN0eWxlKCktPmNvbXB1dGVkTGluZUhlaWdodCgp
OworICAgIAogICAgIHJldHVybiBtX2xpbmVIZWlnaHQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJSLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QlIuaAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCUi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIHdpZHRoKHVuc2lnbmVkIC8qZnJvbSovLCB1bnNpZ25lZCAvKmxlbiovLCBjb25zdCBGb250
JiwgaW50IC8qeHBvcyovKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCB3aWR0aCh1bnNpZ25lZCAvKmZyb20qLywgdW5zaWduZWQgLypsZW4qLywgaW50IC8qeHBvcyov
LCBib29sIC8qZmlyc3RMaW5lID0gZmFsc2UqLykgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAg
dmlydHVhbCBpbnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94
ID0gZmFsc2UpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBm
aXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKKyAgICBpbnQgbGlu
ZUhlaWdodChib29sIGZpcnN0TGluZSkgY29uc3Q7CiAKICAgICAvLyBvdmVycmlkZXMKICAgICB2
aXJ0dWFsIGJvb2wgaXNCUigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTYyLDYgKzYxLDIy
IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBpbnQgbV9saW5lSGVpZ2h0OwogfTsKIAorCitpbmxp
bmUgUmVuZGVyQlIqIHRvUmVuZGVyQlIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7IAorICAgIEFT
U0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNCUigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyQlIqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyQlIqIHRvUmVuZGVy
QlIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7IAorICAgIEFTU0VSVCghb2JqZWN0IHx8
IG9iamVjdC0+aXNCUigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQlIq
PihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVj
ZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyQlIoY29uc3QgUmVuZGVyQlIqKTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUmVuZGVyQlJfaApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNjk2MjgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwODcsMTUgKzUwODcsMTUgQEAgYm9v
bCBSZW5kZXJCbG9jazo6aGFzTGluZUlmRW1wdHkoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotaW50IFJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlz
Um9vdExpbmVCb3gpIGNvbnN0CitpbnQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9vbCBmaXJz
dExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5l
UG9zaXRpb25Nb2RlKSBjb25zdAogewogICAgIC8vIElubGluZSBibG9ja3MgYXJlIHJlcGxhY2Vk
IGVsZW1lbnRzLiBPdGhlcndpc2UsIGp1c3QgcGFzcyBvZmYgdG8KICAgICAvLyB0aGUgYmFzZSBj
bGFzcy4gIElmIHdlJ3JlIGJlaW5nIHF1ZXJpZWQgYXMgdGhvdWdoIHdlJ3JlIHRoZSByb290IGxp
bmUKICAgICAvLyBib3gsIHRoZW4gdGhlIGZhY3QgdGhhdCB3ZSdyZSBhbiBpbmxpbmUtYmxvY2sg
aXMgaXJyZWxldmFudCwgYW5kIHdlIGJlaGF2ZQogICAgIC8vIGp1c3QgbGlrZSBhIGJsb2NrLgot
ICAgIGlmIChpc1JlcGxhY2VkKCkgJiYgIWlzUm9vdExpbmVCb3gpCi0gICAgICAgIHJldHVybiBo
ZWlnaHQoKSArIG1hcmdpblRvcCgpICsgbWFyZ2luQm90dG9tKCk7Ci0gICAgCisgICAgaWYgKGlz
UmVwbGFjZWQoKSAmJiBsaW5lUG9zaXRpb25Nb2RlID09IFBvc2l0aW9uT25Db250YWluaW5nTGlu
ZSkKKyAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVj
dGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CisKICAgICBpZiAoZmlyc3RMaW5lICYmIGRvY3VtZW50
KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzID0gc3R5
bGUoZmlyc3RMaW5lKTsKICAgICAgICAgaWYgKHMgIT0gc3R5bGUoKSkKQEAgLTUxMDgsMTYgKzUx
MDgsMTcgQEAgaW50IFJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaQogICAgIHJl
dHVybiBtX2xpbmVIZWlnaHQ7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlv
bihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKK2ludCBSZW5kZXJCbG9jazo6YmFz
ZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9u
LCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CiB7CiAgICAgLy8gSW5s
aW5lIGJsb2NrcyBhcmUgcmVwbGFjZWQgZWxlbWVudHMuIE90aGVyd2lzZSwganVzdCBwYXNzIG9m
ZiB0bwogICAgIC8vIHRoZSBiYXNlIGNsYXNzLiAgSWYgd2UncmUgYmVpbmcgcXVlcmllZCBhcyB0
aG91Z2ggd2UncmUgdGhlIHJvb3QgbGluZQogICAgIC8vIGJveCwgdGhlbiB0aGUgZmFjdCB0aGF0
IHdlJ3JlIGFuIGlubGluZS1ibG9jayBpcyBpcnJlbGV2YW50LCBhbmQgd2UgYmVoYXZlCiAgICAg
Ly8ganVzdCBsaWtlIGEgYmxvY2suCi0gICAgaWYgKGlzUmVwbGFjZWQoKSAmJiAhaXNSb290TGlu
ZUJveCkgeworICAgIGlmIChpc1JlcGxhY2VkKCkgJiYgbGluZVBvc2l0aW9uTW9kZSA9PSBQb3Np
dGlvbk9uQ29udGFpbmluZ0xpbmUpIHsKICAgICAgICAgLy8gRm9yICJsZWFmIiB0aGVtZSBvYmpl
Y3RzLCBsZXQgdGhlIHRoZW1lIGRlY2lkZSB3aGF0IHRoZSBiYXNlbGluZSBwb3NpdGlvbiBpcy4K
ICAgICAgICAgLy8gRklYTUU6IE1pZ2h0IGJlIGJldHRlciB0byBoYXZlIGEgY3VzdG9tIENTUyBw
cm9wZXJ0eSBpbnN0ZWFkLCBzbyB0aGF0IGlmIHRoZSB0aGVtZQogICAgICAgICAvLyBpcyB0dXJu
ZWQgb2ZmLCBjaGVja2JveGVzL3JhZGlvcyB3aWxsIHN0aWxsIGhhdmUgZGVjZW50IGJhc2VsaW5l
cy4KKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gcGF0Y2ggZm9ybSBjb250cm9scyB0byBkZWFs
IHdpdGggdmVydGljYWwgbGluZXMuCiAgICAgICAgIGlmIChzdHlsZSgpLT5oYXNBcHBlYXJhbmNl
KCkgJiYgIXRoZW1lKCktPmlzQ29udHJvbENvbnRhaW5lcihzdHlsZSgpLT5hcHBlYXJhbmNlKCkp
KQogICAgICAgICAgICAgcmV0dXJuIHRoZW1lKCktPmJhc2VsaW5lUG9zaXRpb24odGhpcyk7CiAg
ICAgICAgICAgICAKQEAgLTUxMjcsMjIgKzUxMjgsMjkgQEAgaW50IFJlbmRlckJsb2NrOjpiYXNl
bGluZVBvc2l0aW9uKGJvb2wgYgogICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAgb24gZmluZGlu
ZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9yIGlmIHdlIGFy
ZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVyZmxvdzpoaWRk
ZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkgb3IgaWYgdGhlIGJhc2VsaW5l
IGlzIG91dHNpZGUKICAgICAgICAgLy8gb2Ygb3VyIGNvbnRlbnQgYm94LgotICAgICAgICBpbnQg
YmFzZWxpbmVQb3MgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8IGxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgpICE9IDApKSA/
IC0xIDogbGFzdExpbmVCb3hCYXNlbGluZSgpOwotICAgICAgICBpZiAoYmFzZWxpbmVQb3MgIT0g
LTEgJiYgYmFzZWxpbmVQb3MgPD0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBjb250ZW50
SGVpZ2h0KCkpCi0gICAgICAgICAgICByZXR1cm4gbWFyZ2luVG9wKCkgKyBiYXNlbGluZVBvczsK
LSAgICAgICAgcmV0dXJuIGhlaWdodCgpICsgbWFyZ2luVG9wKCkgKyBtYXJnaW5Cb3R0b20oKTsK
KyAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9IChsYXllcigpICYmIChsYXllcigpLT5tYXJx
dWVlKCkgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IChsYXllcigpLT52ZXJ0aWNh
bFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbFlPZmZzZXQoKSAhPSAwKQorICAgICAgICAg
ICAgOiAobGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbFhP
ZmZzZXQoKSAhPSAwKSkpKSB8fCBpc1dyaXRpbmdNb2RlUm9vdCgpOworICAgICAgICBpbnQgYmFz
ZWxpbmVQb3MgPSBpZ25vcmVCYXNlbGluZSA/IC0xIDogbGFzdExpbmVCb3hCYXNlbGluZSgpOwor
ICAgICAgICAKKyAgICAgICAgaW50IGJvdHRvbU9mQ29udGVudCA9IGRpcmVjdGlvbiA9PSBIb3Jp
em9udGFsTGluZSA/IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29udGVudEhlaWdodCgp
IDogYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgpICsgY29udGVudFdpZHRoKCk7CisgICAg
ICAgIGlmIChiYXNlbGluZVBvcyAhPSAtMSAmJiBiYXNlbGluZVBvcyA8PSBib3R0b21PZkNvbnRl
bnQpCisgICAgICAgICAgICByZXR1cm4gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gbWFy
Z2luVG9wKCkgKyBiYXNlbGluZVBvcyA6IG1hcmdpblJpZ2h0KCkgKyBiYXNlbGluZVBvczsKKyAg
ICAgICAgICAgIAorICAgICAgICByZXR1cm4gUmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKGZp
cnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKICAgICB9Ci0gICAgcmV0dXJu
IFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihiLCBpc1Jvb3RMaW5lQm94KTsKKworICAgIGNv
bnN0IEZvbnQmIGYgPSBzdHlsZShmaXJzdExpbmUpLT5mb250KCk7CisgICAgcmV0dXJuIGYuYXNj
ZW50KCkgKyAobGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9k
ZSkgLSBmLmhlaWdodCgpKSAvIDI7CiB9CiAKIGludCBSZW5kZXJCbG9jazo6Zmlyc3RMaW5lQm94
QmFzZWxpbmUoKSBjb25zdAogewotICAgIGlmICghaXNCbG9ja0Zsb3coKSkKKyAgICBpZiAoIWlz
QmxvY2tGbG93KCkgfHwgaXNXcml0aW5nTW9kZVJvb3QoKSkKICAgICAgICAgcmV0dXJuIC0xOwog
CiAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgaWYgKGZpcnN0TGluZUJveCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGluZUJveCgpLT55KCkgKyBzdHlsZSh0cnVlKS0+
Zm9udCgpLmFzY2VudCgpOworICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGluZUJveCgpLT5sb2dp
Y2FsVG9wKCkgKyBzdHlsZSh0cnVlKS0+Zm9udCgpLmFzY2VudCgpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtNTE1MSw3ICs1MTU5LDcgQEAgaW50IFJl
bmRlckJsb2NrOjpmaXJzdExpbmVCb3hCYXNlbGluZSgpIAogICAgICAgICAgICAgaWYgKCFjdXJy
LT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0
ID0gY3Vyci0+Zmlyc3RMaW5lQm94QmFzZWxpbmUoKTsKICAgICAgICAgICAgICAgICBpZiAocmVz
dWx0ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyci0+eSgpICsgcmVzdWx0
OyAvLyBUcmFuc2xhdGUgdG8gb3VyIGNvb3JkaW5hdGUgc3BhY2UuCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjdXJyLT5sb2dpY2FsVG9wKCkgKyByZXN1bHQ7IC8vIFRyYW5zbGF0ZSB0byBv
dXIgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTUxNjEsMjggKzUxNjksMzMgQEAgaW50IFJlbmRlckJsb2NrOjpmaXJzdExpbmVCb3hCYXNlbGlu
ZSgpIAogCiBpbnQgUmVuZGVyQmxvY2s6Omxhc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdAogewot
ICAgIGlmICghaXNCbG9ja0Zsb3coKSkKKyAgICBpZiAoIWlzQmxvY2tGbG93KCkgfHwgaXNXcml0
aW5nTW9kZVJvb3QoKSkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgTGluZURpcmVjdGlvbk1v
ZGUgbGluZURpcmVjdGlvbiA9IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBI
b3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZTsKKwogICAgIGlmIChjaGlsZHJlbklubGluZSgp
KSB7Ci0gICAgICAgIGlmICghZmlyc3RMaW5lQm94KCkgJiYgaGFzTGluZUlmRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBSZW5kZXJCb3g6OmJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgdHJ1ZSkg
KyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKKyAgICAgICAgaWYgKCFmaXJzdExpbmVCb3go
KSAmJiBoYXNMaW5lSWZFbXB0eSgpKSB7CisgICAgICAgICAgICBjb25zdCBGb250JiBmID0gc3R5
bGUodHJ1ZSktPmZvbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBmLmFzY2VudCgpICsgKGxpbmVI
ZWlnaHQodHJ1ZSwgbGluZURpcmVjdGlvbiwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSAt
IGYuaGVpZ2h0KCkpIC8gMiArIChsaW5lRGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gYm9y
ZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgOiBib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkp
OworICAgICAgICB9CiAgICAgICAgIGlmIChsYXN0TGluZUJveCgpKQotICAgICAgICAgICAgcmV0
dXJuIGxhc3RMaW5lQm94KCktPnkoKSArIHN0eWxlKGxhc3RMaW5lQm94KCkgPT0gZmlyc3RMaW5l
Qm94KCkpLT5mb250KCkuYXNjZW50KCk7CisgICAgICAgICAgICByZXR1cm4gbGFzdExpbmVCb3go
KS0+bG9naWNhbFRvcCgpICsgc3R5bGUobGFzdExpbmVCb3goKSA9PSBmaXJzdExpbmVCb3goKSkt
PmZvbnQoKS5hc2NlbnQoKTsKICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBlbHNlIHsK
KyAgICB9IGVsc2UgewogICAgICAgICBib29sIGhhdmVOb3JtYWxGbG93Q2hpbGQgPSBmYWxzZTsK
ICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGN1cnIgPSBsYXN0Q2hpbGRCb3goKTsgY3VycjsgY3Vy
ciA9IGN1cnItPnByZXZpb3VzU2libGluZ0JveCgpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnIt
PmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgICAgIGhhdmVOb3JtYWxG
bG93Q2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBjdXJyLT5sYXN0
TGluZUJveEJhc2VsaW5lKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnItPnkoKSArIHJlc3VsdDsgLy8gVHJhbnNsYXRl
IHRvIG91ciBjb29yZGluYXRlIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vy
ci0+bG9naWNhbFRvcCgpICsgcmVzdWx0OyAvLyBUcmFuc2xhdGUgdG8gb3VyIGNvb3JkaW5hdGUg
c3BhY2UuCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFoYXZlTm9ybWFs
Rmxvd0NoaWxkICYmIGhhc0xpbmVJZkVtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gUmVuZGVy
Qm94OjpiYXNlbGluZVBvc2l0aW9uKHRydWUsIHRydWUpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCk7CisgICAgICAgIGlmICghaGF2ZU5vcm1hbEZsb3dDaGlsZCAmJiBoYXNMaW5lSWZFbXB0
eSgpKSB7CisgICAgICAgICAgICBjb25zdCBGb250JiBmID0gc3R5bGUodHJ1ZSktPmZvbnQoKTsK
KyAgICAgICAgICAgIHJldHVybiBmLmFzY2VudCgpICsgKGxpbmVIZWlnaHQodHJ1ZSwgbGluZURp
cmVjdGlvbiwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSAtIGYuaGVpZ2h0KCkpIC8gMiAr
IChsaW5lRGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCkgOiBib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkpOworICAgICAgICB9CiAgICAg
fQogCiAgICAgcmV0dXJuIC0xOwpAQCAtNTcyNyw3ICs1NzQwLDcgQEAgSW50UmVjdCBSZW5kZXJC
bG9jazo6bG9jYWxDYXJldFJlY3QoSW5saQogICAgIC8vIGNvbnN0cnVjdGVkIGFuZCB0aGlzIGts
dWRnZSBpcyBub3QgY2FsbGVkIGFueSBtb3JlLiBTbyBvbmx5IHRoZSBjYXJldCBzaXplCiAgICAg
Ly8gb2YgYW4gZW1wdHkgOmZpcnN0LWxpbmUnZCBibG9jayBpcyB3cm9uZy4gSSB0aGluayB3ZSBj
YW4gbGl2ZSB3aXRoIHRoYXQuCiAgICAgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9IGZpcnN0
TGluZVN0eWxlKCk7Ci0gICAgaW50IGhlaWdodCA9IGxpbmVIZWlnaHQodHJ1ZSk7CisgICAgaW50
IGhlaWdodCA9IGxpbmVIZWlnaHQodHJ1ZSwgY3VycmVudFN0eWxlLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUpOwogCiAgICAgZW51bSBD
YXJldEFsaWdubWVudCB7IGFsaWduTGVmdCwgYWxpZ25SaWdodCwgYWxpZ25DZW50ZXIgfTsKIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA2OTYyOCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKICAgICAvLyBUaGVzZSB0d28g
ZnVuY3Rpb25zIGFyZSBvdmVycmlkZGVuIGZvciBpbmxpbmUtYmxvY2suCi0gICAgdmlydHVhbCBp
bnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2Up
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUs
IGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsaW5l
SGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9k
ZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3Np
dGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwogCiAgICAgUmVuZGVy
TGluZUJveExpc3QqIGxpbmVCb3hlcygpIHsgcmV0dXJuICZtX2xpbmVCb3hlczsgfQogICAgIGNv
bnN0IFJlbmRlckxpbmVCb3hMaXN0KiBsaW5lQm94ZXMoKSBjb25zdCB7IHJldHVybiAmbV9saW5l
Qm94ZXM7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDgsNyArOTA4LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgIHNldExvZ2ljYWxIZWlnaHQobG9n
aWNhbEhlaWdodCgpICsgYm9yZGVyQWZ0ZXIoKSArIHBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFy
TG9naWNhbEhlaWdodCgpKTsKIAogICAgIGlmICghZmlyc3RMaW5lQm94KCkgJiYgaGFzTGluZUlm
RW1wdHkoKSkKLSAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgKyBsaW5l
SGVpZ2h0KHRydWUsIHRydWUpKTsKKyAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVp
Z2h0KCkgKyBsaW5lSGVpZ2h0KHRydWUsIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGlu
ZUJveGVzKSk7CiAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhbnkgbGluZXMgdGhhdCBzcGlsbCBv
dXQgb2Ygb3VyIGJsb2NrLiAgSWYgd2UgZG8sIHRoZW4gd2Ugd2lsbCBwb3NzaWJseSBuZWVkIHRv
CiAgICAgLy8gdHJ1bmNhdGUgdGV4dC4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2
aXNpb24gNjk2MjgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTI2LDQgKzMxMjYsMTggQEAgdm9pZCBSZW5kZXJCb3g6OmNsZWFyTGF5b3V0
T3ZlcmZsb3coKQogICAgIG1fb3ZlcmZsb3ctPnJlc2V0TGF5b3V0T3ZlcmZsb3coYm9yZGVyQm94
UmVjdCgpKTsKIH0KIAoraW50IFJlbmRlckJveDo6bGluZUhlaWdodChib29sIC8qZmlyc3RMaW5l
Ki8sIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSAvKmxpbmVQ
b3NpdGlvbk1vZGUqLykgY29uc3QKK3sKKyAgICBpZiAoaXNSZXBsYWNlZCgpKQorICAgICAgICBy
ZXR1cm4gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gbV9tYXJnaW5Ub3AgKyBoZWlnaHQo
KSArIG1fbWFyZ2luQm90dG9tIDogbV9tYXJnaW5SaWdodCArIHdpZHRoKCkgKyBtX21hcmdpbkxl
ZnQ7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBSZW5kZXJCb3g6OmJhc2VsaW5lUG9zaXRpb24o
Ym9vbCAvKmZpcnN0TGluZSovLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3Np
dGlvbk1vZGUgLypsaW5lUG9zaXRpb25Nb2RlKi8pIGNvbnN0Cit7CisgICAgaWYgKGlzUmVwbGFj
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IG1fbWFy
Z2luVG9wICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJvdHRvbSA6IG1fbWFyZ2luUmlnaHQgKyB3aWR0
aCgpICsgbV9tYXJnaW5MZWZ0OworICAgIHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gNjk2MjgpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDYgKzM2NSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvclBhZ2luYXRpb25SZWxheW91dElm
TmVlZGVkKCkgeyB9CiAKICAgICBib29sIGlzV3JpdGluZ01vZGVSb290KCkgY29uc3QgeyByZXR1
cm4gIXBhcmVudCgpIHx8IHBhcmVudCgpLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpICE9IHN0eWxl
KCktPndyaXRpbmdNb2RlKCk7IH0KKyAgICAKKyAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJv
b2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0
aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3Np
dGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUg
PSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBuZXdTdHlsZSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCShyZXZpc2lvbiA2OTYyNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU1LDIzICs4NTUsMjUgQEAgaW50
IFJlbmRlckJveE1vZGVsT2JqZWN0Ojp2ZXJ0aWNhbFBvc2l0aQogICAgICAgICBjb25zdCBGb250
JiBmID0gcGFyZW50KCktPnN0eWxlKGZpcnN0TGluZSktPmZvbnQoKTsKICAgICAgICAgaW50IGZv
bnRzaXplID0gZi5waXhlbFNpemUoKTsKIAorICAgICAgICBMaW5lRGlyZWN0aW9uTW9kZSBsaW5l
RGlyZWN0aW9uID0gcGFyZW50KCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZTsKKwogICAgICAgICBpZiAodmEgPT0gU1VC
KQogICAgICAgICAgICAgdnBvcyArPSBmb250c2l6ZSAvIDUgKyAxOwogICAgICAgICBlbHNlIGlm
ICh2YSA9PSBTVVBFUikKICAgICAgICAgICAgIHZwb3MgLT0gZm9udHNpemUgLyAzICsgMTsKICAg
ICAgICAgZWxzZSBpZiAodmEgPT0gVEVYVF9UT1ApCi0gICAgICAgICAgICB2cG9zICs9IGJhc2Vs
aW5lUG9zaXRpb24oZmlyc3RMaW5lKSAtIGYuYXNjZW50KCk7CisgICAgICAgICAgICB2cG9zICs9
IGJhc2VsaW5lUG9zaXRpb24oZmlyc3RMaW5lLCBsaW5lRGlyZWN0aW9uKSAtIGYuYXNjZW50KCk7
CiAgICAgICAgIGVsc2UgaWYgKHZhID09IE1JRERMRSkKLSAgICAgICAgICAgIHZwb3MgKz0gLXN0
YXRpY19jYXN0PGludD4oZi54SGVpZ2h0KCkgLyAyKSAtIGxpbmVIZWlnaHQoZmlyc3RMaW5lKSAv
IDIgKyBiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSk7CisgICAgICAgICAgICB2cG9zICs9IC1z
dGF0aWNfY2FzdDxpbnQ+KGYueEhlaWdodCgpIC8gMikgLSBsaW5lSGVpZ2h0KGZpcnN0TGluZSwg
bGluZURpcmVjdGlvbikgLyAyICsgYmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGxpbmVEaXJl
Y3Rpb24pOwogICAgICAgICBlbHNlIGlmICh2YSA9PSBURVhUX0JPVFRPTSkgewogICAgICAgICAg
ICAgdnBvcyArPSBmLmRlc2NlbnQoKTsKICAgICAgICAgICAgIC8vIGxpbmVIZWlnaHQgLSBiYXNl
bGluZVBvc2l0aW9uIGlzIGFsd2F5cyAwIGZvciByZXBsYWNlZCBlbGVtZW50cyAoZXhjZXB0IGlu
bGluZSBibG9ja3MpLCBzbyBkb24ndCBib3RoZXIgd2FzdGluZyB0aW1lIGluIHRoYXQgY2FzZS4K
ICAgICAgICAgICAgIGlmICghaXNSZXBsYWNlZCgpIHx8IHN0eWxlKCktPmRpc3BsYXkoKSA9PSBJ
TkxJTkVfQkxPQ0spCi0gICAgICAgICAgICAgICAgdnBvcyAtPSAobGluZUhlaWdodChmaXJzdExp
bmUpIC0gYmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUpKTsKKyAgICAgICAgICAgICAgICB2cG9z
IC09IChsaW5lSGVpZ2h0KGZpcnN0TGluZSwgbGluZURpcmVjdGlvbikgLSBiYXNlbGluZVBvc2l0
aW9uKGZpcnN0TGluZSwgbGluZURpcmVjdGlvbikpOwogICAgICAgICB9IGVsc2UgaWYgKHZhID09
IEJBU0VMSU5FX01JRERMRSkKLSAgICAgICAgICAgIHZwb3MgKz0gLWxpbmVIZWlnaHQoZmlyc3RM
aW5lKSAvIDIgKyBiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSk7CisgICAgICAgICAgICB2cG9z
ICs9IC1saW5lSGVpZ2h0KGZpcnN0TGluZSwgbGluZURpcmVjdGlvbikgLyAyICsgYmFzZWxpbmVQ
b3NpdGlvbihmaXJzdExpbmUsIGxpbmVEaXJlY3Rpb24pOwogICAgICAgICBlbHNlIGlmICh2YSA9
PSBMRU5HVEgpCi0gICAgICAgICAgICB2cG9zIC09IHN0eWxlKCktPnZlcnRpY2FsQWxpZ25MZW5n
dGgoKS5jYWxjVmFsdWUobGluZUhlaWdodChmaXJzdExpbmUpKTsKKyAgICAgICAgICAgIHZwb3Mg
LT0gc3R5bGUoKS0+dmVydGljYWxBbGlnbkxlbmd0aCgpLmNhbGNWYWx1ZShsaW5lSGVpZ2h0KGZp
cnN0TGluZSwgbGluZURpcmVjdGlvbikpOwogICAgIH0KIAogICAgIHJldHVybiB2cG9zOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA2OTYy
NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDEwIEBAIGNvbnN0IGludCBQb3NpdGlvblRvcCA9IC0weDdmZmZm
ZmZmOwogY29uc3QgaW50IFBvc2l0aW9uQm90dG9tID0gMHg3ZmZmZmZmZjsKIGNvbnN0IGludCBQ
b3NpdGlvblVuZGVmaW5lZCA9IDB4ODAwMDAwMDA7CiAKKy8vIE1vZGVzIGZvciBzb21lIG9mIHRo
ZSBsaW5lLXJlbGF0ZWQgZnVuY3Rpb25zLgorZW51bSBMaW5lUG9zaXRpb25Nb2RlIHsgUG9zaXRp
b25PbkNvbnRhaW5pbmdMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMgfTsKK2VudW0g
TGluZURpcmVjdGlvbk1vZGUgeyBIb3Jpem9udGFsTGluZSwgVmVydGljYWxMaW5lIH07CisKIC8v
IFRoaXMgY2xhc3MgaXMgdGhlIGJhc2UgZm9yIGFsbCBvYmplY3RzIHRoYXQgYWRoZXJlIHRvIHRo
ZSBDU1MgYm94IG1vZGVsIGFzIGRlc2NyaWJlZAogLy8gYXQgaHR0cDovL3d3dy53My5vcmcvVFIv
Q1NTMjEvYm94Lmh0bWwKIApAQCAtMTEyLDYgKzExNiwxMCBAQCBwdWJsaWM6CiAKICAgICAvLyBU
aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgaW5saW5lJ3MgYmFzZWxpbmUgcG9zaXRpb24gYW5k
IHRoZSBsaW5lJ3MgYmFzZWxpbmUgcG9zaXRpb24uCiAgICAgaW50IHZlcnRpY2FsUG9zaXRpb24o
Ym9vbCBmaXJzdExpbmUpIGNvbnN0OworICAgIAorICAgIC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xh
c3NlcyB0byBkZXRlcm1pbmUgbGluZSBoZWlnaHQgYW5kIGJhc2VsaW5lIHBvc2l0aW9uLgorICAg
IHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
LCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURp
cmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUp
IGNvbnN0ID0gMDsKIAogICAgIC8vIENhbGxlZCBieSBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKSAo
YW5kIFJlbmRlcldpZGdldDo6ZGVzdHJveSgpKSBhbmQgaXMgdGhlIG9ubHkgd2F5IGxheWVycyBz
aG91bGQgZXZlciBiZSBkZXN0cm95ZWQKICAgICB2b2lkIGRlc3Ryb3lMYXllcigpOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNp
b24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjpwYWludE9iamVjCiAgICAgICAgIFJlbmRlckJ1dHRvbiogYnV0dG9uUmVuZGVy
ZXIgPSB0b1JlbmRlckJ1dHRvbihtX2J1dHRvbi0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGludCB0
ZXh0WSA9IGJ1dHRvblJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLnkoKQogICAg
ICAgICAgICAgKyBidXR0b25SZW5kZXJlci0+bWFyZ2luVG9wKCkgKyBidXR0b25SZW5kZXJlci0+
Ym9yZGVyVG9wKCkgKyBidXR0b25SZW5kZXJlci0+cGFkZGluZ1RvcCgpCi0gICAgICAgICAgICAr
IGJ1dHRvblJlbmRlcmVyLT5iYXNlbGluZVBvc2l0aW9uKHRydWUsIGZhbHNlKTsKKyAgICAgICAg
ICAgICsgYnV0dG9uUmVuZGVyZXItPmJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgSG9yaXpvbnRhbExp
bmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7CiAKICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvciksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gNjk2MjgpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
NCw3ICszOTQsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghaXRlcmF0b3IuZmlyc3QoKSAmJiBoYXNM
aW5lSWZFbXB0eSgpKQotICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdo
dCh0cnVlLCB0cnVlKSk7CisgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyBsaW5lSGVp
Z2h0KHRydWUsIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFs
TGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSk7CiAgICAg
ICAgIAogICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyB0b0FkZCk7CiAgICAgICAgIApAQCAt
NzM3LDcgKzczNyw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8K
ICAgICAgICAgeVBvcyA9IGhlaWdodCgpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpdGVyYXRv
ci5maXJzdCgpICYmIGhhc0xpbmVJZkVtcHR5KCkpCi0gICAgICAgICAgICBzZXRIZWlnaHQoaGVp
Z2h0KCkgKyBsaW5lSGVpZ2h0KHRydWUsIHRydWUpKTsKKyAgICAgICAgICAgIHNldEhlaWdodCho
ZWlnaHQoKSArIGxpbmVIZWlnaHQodHJ1ZSwgc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JM
aW5lQm94ZXMpKTsKICAgICAKICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgdG9BZGQpOwog
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDY5NjI1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc4
LDcgKzg3OCw3IEBAIElubGluZUZsb3dCb3gqIFJlbmRlcklubGluZTo6Y3JlYXRlQW5kQXAKICAg
ICByZXR1cm4gZmxvd0JveDsKIH0KIAotaW50IFJlbmRlcklubGluZTo6bGluZUhlaWdodChib29s
IGZpcnN0TGluZSwgYm9vbCAvKmlzUm9vdExpbmVCb3gqLykgY29uc3QKK2ludCBSZW5kZXJJbmxp
bmU6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIC8qZGlyZWN0
aW9uKi8sIExpbmVQb3NpdGlvbk1vZGUgLypsaW5lUG9zaXRpb25Nb2RlKi8pIGNvbnN0CiB7CiAg
ICAgaWYgKGZpcnN0TGluZSAmJiBkb2N1bWVudCgpLT51c2VzRmlyc3RMaW5lUnVsZXMoKSkgewog
ICAgICAgICBSZW5kZXJTdHlsZSogcyA9IHN0eWxlKGZpcnN0TGluZSk7CkBAIC04OTIsNiArODky
LDEyIEBAIGludCBSZW5kZXJJbmxpbmU6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdEwKICAgICByZXR1
cm4gbV9saW5lSGVpZ2h0OwogfQogCitpbnQgUmVuZGVySW5saW5lOjpiYXNlbGluZVBvc2l0aW9u
KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlv
bk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKK3sKKyAgICBjb25zdCBGb250JiBmID0gc3R5
bGUoZmlyc3RMaW5lKS0+Zm9udCgpOworICAgIHJldHVybiBmLmFzY2VudCgpICsgKGxpbmVIZWln
aHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1vZGUpIC0gZi5oZWlnaHQoKSkg
LyAyOworfQorCiBpbnQgUmVuZGVySW5saW5lOjp2ZXJ0aWNhbFBvc2l0aW9uRnJvbUNhY2hlKGJv
b2wgZmlyc3RMaW5lKSBjb25zdAogewogICAgIGlmIChmaXJzdExpbmUpIC8vIFdlJ3JlIG9ubHkg
cmVhbGx5IGEgZmlyc3QtbGluZSBzdHlsZSBpZiB0aGUgZG9jdW1lbnQgYWN0dWFsbHkgdXNlcyBm
aXJzdC1saW5lIHJ1bGVzLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9u
IDY5NjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMyw3ICsxMzMsOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIGRpcnR5
TGluZXNGcm9tQ2hhbmdlZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQpIHsgbV9saW5lQm94ZXMu
ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQodGhpcywgY2hpbGQpOyB9CiAKLSAgICB2aXJ0dWFs
IGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxz
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExp
bmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRh
aW5pbmdMaW5lKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRCZWNhbWVOb25J
bmxpbmUoUmVuZGVyT2JqZWN0KiBjaGlsZCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCShyZXZpc2lvbiA2OTYyNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsOSArMjM4LDkgQEAgdm9pZCBSZW5kZXJM
aXN0Qm94Ojpjb21wdXRlTG9naWNhbEhlaWdodAogICAgIH0KIH0KIAotaW50IFJlbmRlckxpc3RC
b3g6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCkgY29uc3QKK2ludCBSZW5kZXJMaXN0Qm94
OjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBsaW5l
RGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGhlaWdodCgpICsgbWFyZ2luVG9wKCkgKyBtYXJnaW5Cb3R0b20oKSAtIGJhc2Vs
aW5lQWRqdXN0bWVudDsKKyAgICByZXR1cm4gUmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKGZp
cnN0TGluZSwgbGluZURpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSkgLSBiYXNlbGluZUFkanVz
dG1lbnQ7CiB9CiAKIEludFJlY3QgUmVuZGVyTGlzdEJveDo6aXRlbUJvdW5kaW5nQm94UmVjdChp
bnQgdHgsIGludCB0eSwgaW50IGluZGV4KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
aAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9z
aXRpb24oYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1v
ZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodCgpOwogCiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJ
KHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDUsMjAgKzE1MDUsMTggQEAgdm9pZCBSZW5kZXJMaXN0
TWFya2VyOjp1cGRhdGVNYXJnaW5zKCkKICAgICBzdHlsZSgpLT5zZXRNYXJnaW5SaWdodChMZW5n
dGgobWFyZ2luUmlnaHQsIEZpeGVkKSk7CiB9CiAKLWludCBSZW5kZXJMaXN0TWFya2VyOjpsaW5l
SGVpZ2h0KGJvb2wsIGJvb2wpIGNvbnN0CitpbnQgUmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdo
dChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRp
b25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0ltYWdlKCkpCi0g
ICAgICAgIHJldHVybiBtX2xpc3RJdGVtLT5saW5lSGVpZ2h0KGZhbHNlLCB0cnVlKTsKLSAgICBy
ZXR1cm4gaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBtX2xpc3RJdGVtLT5saW5lSGVpZ2h0KGZp
cnN0TGluZSwgZGlyZWN0aW9uLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOworICAgIHJl
dHVybiBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3Np
dGlvbk1vZGUpOwogfQogCi1pbnQgUmVuZGVyTGlzdE1hcmtlcjo6YmFzZWxpbmVQb3NpdGlvbihi
b29sLCBib29sKSBjb25zdAoraW50IFJlbmRlckxpc3RNYXJrZXI6OmJhc2VsaW5lUG9zaXRpb24o
Ym9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9u
TW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAogewotICAgIGlmICghaXNJbWFnZSgpKSB7Ci0g
ICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgICAgIHJldHVy
biBmb250LmFzY2VudCgpICsgKGxpbmVIZWlnaHQoZmFsc2UpIC0gZm9udC5oZWlnaHQoKSkvMjsK
LSAgICB9Ci0gICAgcmV0dXJuIGhlaWdodCgpOworICAgIGlmICghaXNJbWFnZSgpKQorICAgICAg
ICByZXR1cm4gbV9saXN0SXRlbS0+YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGRpcmVjdGlv
biwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKKyAgICByZXR1cm4gUmVuZGVyQm94Ojpi
YXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsK
IH0KIAogU3RyaW5nIFJlbmRlckxpc3RNYXJrZXI6OnN1ZmZpeCgpIGNvbnN0CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCShyZXZpc2lvbiA2OTYyNSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgs
OCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveCgp
OwogCi0gICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jv
b3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRp
b24oYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9k
ZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURpcmVj
dGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNv
bnN0OwogCiAgICAgYm9vbCBpc0ltYWdlKCkgY29uc3Q7CiAgICAgYm9vbCBpc1RleHQoKSBjb25z
dCB7IHJldHVybiAhaXNJbWFnZSgpOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI3MiwxNyArMjI3Miw2IEBAIGJvb2wgUmVuZGVyT2JqZWN0
Ojpub2RlQXRQb2ludChjb25zdCBIaXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBSZW5k
ZXJPYmplY3Q6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgLyppc1Jvb3RMaW5lQm94
Ki8pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0eWxlKGZpcnN0TGluZSktPmNvbXB1dGVkTGluZUhl
aWdodCgpOwotfQotCi1pbnQgUmVuZGVyT2JqZWN0OjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmly
c3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0Ci17Ci0gICAgY29uc3QgRm9udCYgZiA9
IHN0eWxlKGZpcnN0TGluZSktPmZvbnQoKTsKLSAgICByZXR1cm4gZi5hc2NlbnQoKSArIChsaW5l
SGVpZ2h0KGZpcnN0TGluZSwgaXNSb290TGluZUJveCkgLSBmLmhlaWdodCgpKSAvIDI7Ci19Ci0K
IHZvaWQgUmVuZGVyT2JqZWN0OjpzY2hlZHVsZVJlbGF5b3V0KCkKIHsKICAgICBpZiAoaXNSZW5k
ZXJWaWV3KCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA2OTYy
NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00ODMsMTEgKzQ4Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZpbGxJbWFnZXMoY29u
c3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKik7CiAgICAgdm9pZCB1cGRhdGVJbWFnZShT
dHlsZUltYWdlKiwgU3R5bGVJbWFnZSopOwogCi0gICAgLy8gZm9yIGRpc2N1c3Npb24gb2YgbGlu
ZUhlaWdodCBzZWUgQ1NTMiBzcGVjCi0gICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChib29sIGZp
cnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwotICAgIC8vIGZvciB0
aGUgdmVydGljYWwtYWxpZ24gcHJvcGVydHkgb2YgaW5saW5lIGVsZW1lbnRzCi0gICAgLy8gdGhl
IG9mZnNldCBvZiBiYXNlbGluZSBmcm9tIHRoZSB0b3Agb2YgdGhlIG9iamVjdC4KLSAgICB2aXJ0
dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVC
b3ggPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGlu
dCB0eCwgaW50IHR5KTsKIAogICAgIC8vIFJlY3Vyc2l2ZSBmdW5jdGlvbiB0aGF0IGNvbXB1dGVz
IHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdCBhbmQgYWxsIGl0cyBkZXNjZW5k
YW50cy4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDY5
NjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjksMTYgKzI2OSw2IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVQcmVm
ZXJyZWRMb2cKICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogfQog
Ci1pbnQgUmVuZGVyUmVwbGFjZWQ6OmxpbmVIZWlnaHQoYm9vbCwgYm9vbCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gaGVpZ2h0KCkgKyBtYXJnaW5Ub3AoKSArIG1hcmdpbkJvdHRvbSgpOwotfQotCi1p
bnQgUmVuZGVyUmVwbGFjZWQ6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCwgYm9vbCkgY29uc3QKLXsK
LSAgICByZXR1cm4gaGVpZ2h0KCkgKyBtYXJnaW5Ub3AoKSArIG1hcmdpbkJvdHRvbSgpOwotfQot
CiB1bnNpZ25lZCBSZW5kZXJSZXBsYWNlZDo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIDE7IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCShy
ZXZpc2lvbiA2OTYyNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDkgKzYwLDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9v
bCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVh
bCBpbnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFs
c2UpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExp
bmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9p
ZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogCiAgICAgaW50IGNhbGNBc3BlY3RS
YXRpb0xvZ2ljYWxXaWR0aCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9v
dC5jcHAJKHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9v
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDE2ICs1Nyw2IEBAIFJlbmRlclNWR1Jvb3Q6On5S
ZW5kZXJTVkdSb290KCkKIHsKIH0KIAotaW50IFJlbmRlclNWR1Jvb3Q6OmxpbmVIZWlnaHQoYm9v
bCwgYm9vbCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGVpZ2h0KCkgKyBtYXJnaW5Ub3AoKSArIG1h
cmdpbkJvdHRvbSgpOwotfQotCi1pbnQgUmVuZGVyU1ZHUm9vdDo6YmFzZWxpbmVQb3NpdGlvbihi
b29sLCBib29sKSBjb25zdAotewotICAgIHJldHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpICsg
bWFyZ2luQm90dG9tKCk7Ci19Ci0KIHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMoKQogewogICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGly
dHkoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA2OTYyNSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsOCArNTIsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jvb3QoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1Jvb3QiOyB9CiAKLSAgICB2aXJ0dWFsIGludCBsaW5l
SGVpZ2h0KGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3ggPSBm
YWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzKCk7CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wg
aW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJl
cGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuY3BwCShyZXZpc2lvbiA2OTYyNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBSZW5kZXJTbGlkZXI6On5S
ZW5kZXJTbGlkZXIoKQogICAgICAgICBtX3RodW1iLT5kZXRhY2goKTsKIH0KIAotaW50IFJlbmRl
clNsaWRlcjo6YmFzZWxpbmVQb3NpdGlvbihib29sLCBib29sKSBjb25zdAoraW50IFJlbmRlclNs
aWRlcjo6YmFzZWxpbmVQb3NpdGlvbihib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25N
b2RlIC8qZGlyZWN0aW9uKi8sIExpbmVQb3NpdGlvbk1vZGUgLypsaW5lUG9zaXRpb25Nb2RlKi8p
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGhlaWdodCgpICsgbWFyZ2luVG9wKCk7CiB9CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTbGlkZXIuaAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTbGlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTbGlkZXIiOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1NsaWRlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgICAgICB2aXJ0dWFsIGludCBi
YXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBi
YXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBv
c2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVu
dCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA2
OTYyNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5MSwxMCArMjkxLDExIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRl
UmVjdEZvclJlcGEKICAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFp
bnRDb250YWluZXIsIHIsIGZpeGVkKTsKIH0KIAotaW50IFJlbmRlclRhYmxlQ2VsbDo6YmFzZWxp
bmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdAoraW50
IFJlbmRlclRhYmxlQ2VsbDo6YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgTGluZURp
cmVjdGlvbk1vZGUgbGluZURpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25N
b2RlKSBjb25zdAogewotICAgIGlmIChpc1Jvb3RMaW5lQm94KQotICAgICAgICByZXR1cm4gUmVu
ZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKGZpcnN0TGluZSwgaXNSb290TGluZUJveCk7CisgICAg
Ly8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc3RpbGwgbmVlZHMgdG8gYmUgcGF0Y2hlZCBmb3Igd3Jp
dGluZy1tb2RlLgorICAgIGlmIChsaW5lUG9zaXRpb25Nb2RlID09IFBvc2l0aW9uT2ZJbnRlcmlv
ckxpbmVCb3hlcykKKyAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9u
KGZpcnN0TGluZSwgbGluZURpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CiAKICAgICAvLyA8
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwNy9DUi1DU1MyMS0yMDA3MDcxOS90YWJsZXMuaHRtbCNo
ZWlnaHQtbGF5b3V0PjogVGhlIGJhc2VsaW5lIG9mIGEgY2VsbCBpcyB0aGUgYmFzZWxpbmUgb2YK
ICAgICAvLyB0aGUgZmlyc3QgaW4tZmxvdyBsaW5lIGJveCBpbiB0aGUgY2VsbCwgb3IgdGhlIGZp
cnN0IGluLWZsb3cgdGFibGUtcm93IGluIHRoZSBjZWxsLCB3aGljaGV2ZXIgY29tZXMgZmlyc3Qu
IElmIHRoZXJlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2aXNpb24g
Njk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50QmFja2dyb3Vu
ZHNCZWhpbmRDZWxsKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBSZW5kZXJPYmplY3QqIGJh
Y2tncm91bmRPYmplY3QpOwogCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29s
IGZpcnN0TGluZSA9IGZhbHNlLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSA9IGZhbHNlLCBM
aW5lRGlyZWN0aW9uTW9kZSA9IEhvcml6b250YWxMaW5lLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9z
aXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKIAogICAgIHZvaWQgc2V0SW50cmluc2ljUGFk
ZGluZ0JlZm9yZShpbnQgcCkgeyBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmUgPSBwOyB9CiAgICAg
dm9pZCBzZXRJbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoaW50IHApIHsgbV9pbnRyaW5zaWNQYWRkaW5n
QWZ0ZXIgPSBwOyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgJKHJldmlzaW9u
IDY5NjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclRhYmxlQ29sIjsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc1RhYmxlQ29sKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1
YWwgaW50IGxpbmVIZWlnaHQoYm9vbCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxv
d2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmgJKHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwot
ICAgIHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gMDsg
fQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIpOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZp
c2lvbiA2OTYyNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDgsOCArMTQ4LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIHZpcnR1
YWwgaW50IGxpbmVIZWlnaHQoYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gMDsgfQotCiAgICAg
Ym9vbCBlbnN1cmVSb3dzKGludCk7CiAgICAgdm9pZCBjbGVhckdyaWQoKTsKIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzksMTIgKzExMzksNiBAQCBT
dHJpbmcgUmVuZGVyVGV4dDo6dGV4dFdpdGhvdXRUcmFuc2NvZGluCiAgICAgcmV0dXJuIHRleHQ7
CiB9CiAKLWludCBSZW5kZXJUZXh0OjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sKSBj
b25zdAotewotICAgIC8vIEFsd2F5cyB1c2UgdGhlIGludGVyaW9yIGxpbmUgaGVpZ2h0IG9mIHRo
ZSBwYXJlbnQgKGUuZy4sIGlmIG91ciBwYXJlbnQgaXMgYW4gaW5saW5lIGJsb2NrKS4KLSAgICBy
ZXR1cm4gcGFyZW50KCktPmxpbmVIZWlnaHQoZmlyc3RMaW5lLCB0cnVlKTsKLX0KLQogdm9pZCBS
ZW5kZXJUZXh0OjpkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpCiB7CiAgICAgaWYgKGZ1
bGxMYXlvdXQpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiA2OTYyNSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCAr
NzQsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCB3aWR0aCh1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnQmLCBpbnQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25z
dDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxl
biwgaW50IHhQb3MsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9v
dExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIGludCBtaW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBtYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNyw3ICs0MDcsNyBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sOjpjb21wdXRlTG9naWNhbEhlCiAgICAgICAgICAgICAgIG1faW5uZXJUZXh0LT5y
ZW5kZXJCb3goKS0+cGFkZGluZ1RvcCgpICsgbV9pbm5lclRleHQtPnJlbmRlckJveCgpLT5wYWRk
aW5nQm90dG9tKCkgKwogICAgICAgICAgICAgICBtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPm1h
cmdpblRvcCgpICsgbV9pbm5lclRleHQtPnJlbmRlckJveCgpLT5tYXJnaW5Cb3R0b20oKSk7CiAK
LSAgICBhZGp1c3RDb250cm9sSGVpZ2h0QmFzZWRPbkxpbmVIZWlnaHQobV9pbm5lclRleHQtPnJl
bmRlcmVyKCktPmxpbmVIZWlnaHQodHJ1ZSwgdHJ1ZSkpOworICAgIGFkanVzdENvbnRyb2xIZWln
aHRCYXNlZE9uTGluZUhlaWdodChtX2lubmVyVGV4dC0+cmVuZGVyQm94KCktPmxpbmVIZWlnaHQo
dHJ1ZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykpOwogICAg
IHNldEhlaWdodChoZWlnaHQoKSArIGJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSk7CiAKICAgICAv
LyBXZSBhcmUgYWJsZSB0byBoYXZlIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaWYgdGhlIG92ZXJm
bG93IHN0eWxlIGlzIHNjcm9sbCwgb3IgaWYgaXRzIGF1dG8gYW5kIHRoZXJlJ3Mgbm8gd29yZCB3
cmFwLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lLmNwcAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDkgKzk5LDkgQEAg
dm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6YWRqdXN0QwogICAgIHNldEhlaWdodCho
ZWlnaHQoKSArIGxpbmVIZWlnaHQgKiBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4o
bm9kZSgpKS0+cm93cygpKTsKIH0KIAotaW50IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpi
YXNlbGluZVBvc2l0aW9uKGJvb2wsIGJvb2wpIGNvbnN0CitpbnQgUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmU6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25N
b2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAog
ewotICAgIHJldHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpICsgbWFyZ2luQm90dG9tKCk7Cisg
ICAgcmV0dXJuIFJlbmRlckJveDo6YmFzZWxpbmVQb3NpdGlvbihmaXJzdExpbmUsIGRpcmVjdGlv
biwgbGluZVBvc2l0aW9uTW9kZSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmU6OnVwZGF0ZUZyb21FbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBmbG9hdCBnZXRBdmdDaGFyV2lkdGgo
QXRvbWljU3RyaW5nIGZhbWlseSk7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVudFdp
ZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENvbnRy
b2xIZWlnaHRCYXNlZE9uTGluZUhlaWdodChpbnQgbGluZUhlaWdodCk7Ci0gICAgdmlydHVhbCBp
bnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBM
aW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5n
TGluZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKTsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjYsNyArNzI2LDcgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRybwogICAgIHRleHRCbG9ja1N0eWxlLT5z
ZXRPdmVyZmxvd1koT0hJRERFTik7CiAKICAgICAvLyBEbyBub3QgYWxsb3cgbGluZS1oZWlnaHQg
dG8gYmUgc21hbGxlciB0aGFuIG91ciBkZWZhdWx0LgotICAgIGlmICh0ZXh0QmxvY2tTdHlsZS0+
Zm9udCgpLmxpbmVTcGFjaW5nKCkgPiBsaW5lSGVpZ2h0KHRydWUsIHRydWUpKQorICAgIGlmICh0
ZXh0QmxvY2tTdHlsZS0+Zm9udCgpLmxpbmVTcGFjaW5nKCkgPiBsaW5lSGVpZ2h0KHRydWUsIEhv
cml6b250YWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpKQogICAgICAgICB0ZXh0
QmxvY2tTdHlsZS0+c2V0TGluZUhlaWdodChMZW5ndGgoLTEwMC4wZiwgUGVyY2VudCkpOwogCiAg
ICAgV2ViQ29yZTo6RURpc3BsYXkgZGlzcGxheSA9IChtX2lubmVyQmxvY2sgfHwgaW5wdXRFbGVt
ZW50KCktPmhhc1NwaW5CdXR0b24oKSA/IElOTElORV9CTE9DSyA6IEJMT0NLKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmgJKHJldmlzaW9uIDY5NjI1KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw5IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhclRydW5jYXRpb24oKTsKIAorICAgIHZpcnR1
YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBib3hNb2RlbE9iamVjdCgp
LT5iYXNlbGluZVBvc2l0aW9uKG1fZmlyc3RMaW5lLCBtX2lzVmVydGljYWwgPyBWZXJ0aWNhbExp
bmUgOiBIb3Jpem9udGFsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsgfQorICAg
IHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBib3hNb2RlbE9iamVjdCgp
LT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lLCBtX2lzVmVydGljYWwgPyBWZXJ0aWNhbExpbmUgOiBI
b3Jpem9udGFsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsgfQorCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIHZvaWQgYWRkSGlnaGxpZ2h0T3ZlcmZsb3coKTsKICAgICB2b2lkIHBh
aW50Q3VzdG9tSGlnaGxpZ2h0KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBjb25zdCBBdG9t
aWNTdHJpbmcmIGhpZ2hsaWdodFR5cGUpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNjk2MjUpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4OCw3ICs1ODgs
NyBAQCBJbnRSZWN0IFNWR0lubGluZVRleHRCb3g6OmNhbGN1bGF0ZUJvdW5kCiAgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gdGV4dFJlbmRlcmVyLT5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZSk7
CiAKLSAgICBpbnQgYmFzZWxpbmUgPSBiYXNlbGluZVBvc2l0aW9uKHRydWUpOworICAgIGludCBi
YXNlbGluZSA9IGJhc2VsaW5lUG9zaXRpb24oKTsKICAgICBpbnQgaGVpZ2h0RGlmZmVyZW5jZSA9
IGJhc2VsaW5lIC0gc3R5bGUtPmZvbnQoKS5hc2NlbnQoKTsKIAogICAgIHVuc2lnbmVkIHRleHRG
cmFnbWVudHNTaXplID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsK
</data>
<flag name="review"
          id="61026"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>