<?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>188172</bug_id>
          
          <creation_ts>2018-07-30 10:23:08 -0700</creation_ts>
          <short_desc>[WinCairo] &lt;select&gt; elements do not popup options</short_desc>
          <delta_ts>2018-08-01 20:24:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephan Szabo">stephan.szabo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fujii</cc>
    
    <cc>koivisto</cc>
    
    <cc>lforschler</cc>
    
    <cc>rniwa</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1446251</commentid>
    <comment_count>0</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2018-07-30 10:23:08 -0700</bug_when>
    <thetext>On WinCairo (non-legacy) &lt;select&gt; elements do not pop up the list of options. Selecting the element multiple times in a row can cause assertion failures because the menu is not up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446261</commentid>
    <comment_count>1</comment_count>
      <attachid>346069</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2018-07-30 10:49:35 -0700</bug_when>
    <thetext>Created attachment 346069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446466</commentid>
    <comment_count>2</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-07-30 19:29:48 -0700</bug_when>
    <thetext>https://github.com/WebKit/webkit/commit/43768040539a01ec2d52954f17fdb39763724623
This is the revision the original implementaion has been removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446468</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-07-30 19:32:39 -0700</bug_when>
    <thetext>Bug 48701 – Windows Popup widget support (&lt;select&gt;)
The original bug ticket.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446470</commentid>
    <comment_count>4</comment_count>
      <attachid>346069</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-07-30 19:40:29 -0700</bug_when>
    <thetext>Comment on attachment 346069
Patch

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

&gt; Source/WebKit/ChangeLog:21
&gt; +        removed wincairo implementation plus some fixes/api changes

Not &quot;wincairo implementation&quot; IIRC, but Windows implementation or AppleWin implementation.

&gt; Source/WebKit/ChangeLog:65
&gt; +        removed wincairo implementation plus some fixes/api changes

Ditto.

&gt; Source/WebKit/Shared/PlatformPopupMenuData.cpp:40
&gt; +    , m_itemHeight(0)

WebKit prefers member initializer.

&gt; Source/WebKit/Shared/PlatformPopupMenuData.h:58
&gt; +    int m_itemHeight;

I think WebKit prefers member initializer.
int m_clientPaddingLeft { 0 };
int m_clientPaddingRight { 0 };
int m_clientInsetLeft { 0 };
int m_clientInsetRight { 0 };
int m_popupWidth { 0 };
int m_itemHeight { 0 };

&gt; Source/WebKit/UIProcess/win/WebPopupMenuProxyWin.cpp:36
&gt; +#include &lt;WebCore/BString.h&gt;

Is BString used?

&gt; Source/WebKit/UIProcess/win/WebPopupMenuProxyWin.cpp:47
&gt; +using namespace std;

Don&apos;t &quot;using namespace std;&quot;
https://webkit.org/code-style-guidelines/#using-in-cpp

&gt; Source/WebKit/UIProcess/win/WebPopupMenuProxyWin.cpp:221
&gt; +        shouldAnimate = FALSE;

You added this line. But, It seems for me that this line not needed. Does SystemParametersInfo change shouldAnimate if it fails?

&gt; Source/WebKit/UIProcess/win/WebPopupMenuProxyWin.h:38
&gt; +typedef struct HBITMAP__* HBITMAP;

&lt;windows.h&gt; is included in WebCorePrefix.h. I think you can remove these typedefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446573</commentid>
    <comment_count>5</comment_count>
      <attachid>346069</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2018-07-31 09:51:23 -0700</bug_when>
    <thetext>Comment on attachment 346069
Patch

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

&gt;&gt; Source/WebKit/UIProcess/win/WebPopupMenuProxyWin.cpp:221
&gt;&gt; +        shouldAnimate = FALSE;
&gt; 
&gt; You added this line. But, It seems for me that this line not needed. Does SystemParametersInfo change shouldAnimate if it fails?

This was added in the similar place in the legacy path after the non-legacy code was removed.
&quot;[Win] Resolve various static analyzer warnings in WebCore.&quot;
https://github.sie.sony.com/WebCore/neko/commit/ca06693684d7a9bf69d7db2deb1c21ca823d6384#diff-d88e6bcdaacad433c28da98715f946d3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446575</commentid>
    <comment_count>6</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2018-07-31 09:52:37 -0700</bug_when>
    <thetext>Sorry, public ref is:
https://github.com/WebKit/webkit/commit/ca06693684d7a9bf69d7db2deb1c21ca823d6384#diff-d88e6bcdaacad433c28da98715f946d3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446658</commentid>
    <comment_count>7</comment_count>
      <attachid>346198</attachid>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2018-07-31 13:30:48 -0700</bug_when>
    <thetext>Created attachment 346198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446777</commentid>
    <comment_count>8</comment_count>
      <attachid>346198</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-31 18:40:47 -0700</bug_when>
    <thetext>Comment on attachment 346198
Patch

Clearing flags on attachment: 346198

Committed r234442: &lt;https://trac.webkit.org/changeset/234442&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446778</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-31 18:40:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1447124</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-01 20:24:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/42840235&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346069</attachid>
            <date>2018-07-30 10:49:35 -0700</date>
            <delta_ts>2018-07-31 13:30:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188172-20180730104934.patch</filename>
            <type>text/plain</type>
            <size>55200</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDdkYWM5NDhhOGY0MzdmZTFk
YjQyMjdhNDE4YWEyMTc4MGVjY2M4YTEuLjY4ZmQ1ZmNmMTRiYzE2OTE5OGE2ZWZlOWIzMzhjYThm
YmVkNWU3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTgtMDctMzAgIFN0ZXBoYW4g
U3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10gPHNl
bGVjdD4gZWxlbWVudHMgZG8gbm90IHBvcHVwIG9wdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODE3MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6IEFkZCBXZWJQ
b3B1cE1lbnVQcm94eVdpbgorICAgICAgICAqIFNoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybVBvcHVwTWVudURhdGE6OlBsYXRmb3JtUG9w
dXBNZW51RGF0YSk6IEFkZAorICAgICAgICBzZXR1cCBvZiBXaW5kb3dzIHBhcmFtZXRlcnMKKyAg
ICAgICAgKFdlYktpdDo6UGxhdGZvcm1Qb3B1cE1lbnVEYXRhOjplbmNvZGUgY29uc3QpOiBFbmNv
ZGUgd2luZG93cworICAgICAgICBwYXJhbWV0ZXJzCisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3Jt
UG9wdXBNZW51RGF0YTo6ZGVjb2RlKTogRGVjb2RlIHdpbmRvd3MKKyAgICAgICAgcGFyYW1ldGVy
cworICAgICAgICAqIFNoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuaDogQWRkIHRoZSB3aW5k
b3dzIHNwZWNpZmljCisgICAgICAgIHBhcmFtZXRlcnMgKGJhc2VkIG9uIHJlbW92ZWQgd2luY2Fp
cm8gaW1wbGVtZW50YXRpb24pCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVQb3B1cE1lbnVQ
cm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHA6
IEFkZGVkLiAoYmFzZWQgb24KKyAgICAgICAgcmVtb3ZlZCB3aW5jYWlybyBpbXBsZW1lbnRhdGlv
biBwbHVzIHNvbWUgZml4ZXMvYXBpIGNoYW5nZXMKKyAgICAgICAgc2luY2UgdGhlIHJlbW92YWwp
CisgICAgICAgIChXZWJLaXQ6OmlzQVNDSUlQcmludGFibGUpOgorICAgICAgICAoV2ViS2l0Ojp0
cmFuc2xhdGVQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpX
ZWJQb3B1cE1lbnVQcm94eVduZFByb2MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6d25kUHJvYyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2lu
OjpyZWdpc3RlcldpbmRvd0NsYXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJv
eHlXaW46OldlYlBvcHVwTWVudVByb3h5V2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBN
ZW51UHJveHlXaW46On5XZWJQb3B1cE1lbnVQcm94eVdpbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBvcHVwTWVudVByb3h5V2luOjpzaG93UG9wdXBNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UG9wdXBNZW51UHJveHlXaW46OmhpZGVQb3B1cE1lbnUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6Y2FsY3VsYXRlUG9zaXRpb25BbmRTaXplKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OmNsaWVudFJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6aW52YWxpZGF0ZUl0ZW0pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsU2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmlzaWJsZVNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y29udGVudHNTaXplIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6
c2Nyb2xsVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6aW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdp
bjo6b25Nb3VzZUFjdGl2YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlX
aW46Om9uU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpvbktl
eURvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25DaGFyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Om9uTW91c2VNb3ZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Om9uTEJ1dHRvbkRvd24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25MQnV0dG9uVXApOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25Nb3VzZVdoZWVsKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Om9uUGFpbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25QcmludENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudVByb3h5V2luOjpkb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBN
ZW51UHJveHlXaW46OnVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46
OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNldEZvY3Vz
ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjp2aXNpYmxl
SXRlbXMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6bGlz
dEluZGV4QXRQb2ludCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5
V2luOjpmb2N1c2VkSW5kZXggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6Zm9jdXNGaXJzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5
V2luOjpmb2N1c0xhc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6
aW5jcmVtZW50V2hlZWxEZWx0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5
V2luOjpyZWR1Y2VXaGVlbERlbHRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJv
eHlXaW46OnNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2lu
L1dlYlBvcHVwTWVudVByb3h5V2luLmg6IEFkZGVkLiAoYmFzZWQgb24KKyAgICAgICAgcmVtb3Zl
ZCB3aW5jYWlybyBpbXBsZW1lbnRhdGlvbiBwbHVzIHNvbWUgZml4ZXMvYXBpIGNoYW5nZXMKKyAg
ICAgICAgc2luY2UgdGhlbikKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpoaWRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbGJhciBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjppdGVtSGVpZ2h0IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OndpbmRvd1JlY3QgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6d2hlZWxEZWx0YSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzZXRXYXNDbGlj
a2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Ondhc0NsaWNrZWQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsYmFy
Q2FwdHVyaW5nTW91c2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eVdpbjo6c2V0U2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudTo6c2V0VXBQbGF0Zm9ybURhdGEpOiBNYWtlIHRoZSBkYXRhIHRvCisgICAg
ICAgIHBhc3MgYmV0d2VlbiBwcm9jZXNzZXMuCisKIDIwMTgtMDctMjYgIENvbW1pdCBRdWV1ZSAg
PGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHIyMzQxODEgYW5kIHIyMzQxODkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCBmZDI0
NTYzOTJlYWU0OTIyMzY1ZjFkODRiMDFkYTRiODRjMGQxYWYyLi5hY2Y2Nzc1MDc3ZGYzZjg0ZWUy
NWUzYmNjNDUwNjQ0NTIxMzE0MzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTUyLDYg
KzUyLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBVSVByb2Nlc3Mvd2luL1dl
YkNvbnRleHRNZW51UHJveHlXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQ
cm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAKKyAgICBV
SVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4v
V2ViUHJlZmVyZW5jZXNXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdp
bi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmNwcAppbmRleCA5ZWYxMjA0Mjc4NjA4MTE3OGQx
MmJiNzIxMDM0MTM3OTA3ZDgyMGI2Li5kYjJiOTg3MGU4ZjFlN2FkMWU4MTU3NTIxZjBhZWRiYzdk
NTQ3NDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbGF0Zm9ybVBvcHVwTWVu
dURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0
YS5jcHAKQEAgLTMxLDYgKzMxLDE0IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogUGxhdGZvcm1Q
b3B1cE1lbnVEYXRhOjpQbGF0Zm9ybVBvcHVwTWVudURhdGEoKQorI2lmIFBMQVRGT1JNKFdJTikK
KyAgICA6IG1fY2xpZW50UGFkZGluZ0xlZnQoMCkKKyAgICAsIG1fY2xpZW50UGFkZGluZ1JpZ2h0
KDApCisgICAgLCBtX2NsaWVudEluc2V0TGVmdCgwKQorICAgICwgbV9jbGllbnRJbnNldFJpZ2h0
KDApCisgICAgLCBtX3BvcHVwV2lkdGgoMCkKKyAgICAsIG1faXRlbUhlaWdodCgwKQorI2VuZGlm
CiB7CiB9CiAKQEAgLTQxLDYgKzQ5LDIxIEBAIHZvaWQgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhOjpl
bmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgc2hvdWxk
UG9wT3ZlcjsKICAgICBlbmNvZGVyIDw8IGhpZGVBcnJvd3M7CiAgICAgZW5jb2Rlci5lbmNvZGVF
bnVtKG1lbnVTaXplKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBlbmNvZGVyIDw8IG1fY2xp
ZW50UGFkZGluZ0xlZnQ7CisgICAgZW5jb2RlciA8PCBtX2NsaWVudFBhZGRpbmdSaWdodDsKKyAg
ICBlbmNvZGVyIDw8IG1fY2xpZW50SW5zZXRMZWZ0OworICAgIGVuY29kZXIgPDwgbV9jbGllbnRJ
bnNldFJpZ2h0OworICAgIGVuY29kZXIgPDwgbV9wb3B1cFdpZHRoOworICAgIGVuY29kZXIgPDwg
bV9pdGVtSGVpZ2h0OworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgbm90U2VsZWN0ZWRC
YWNraW5nU3RvcmVIYW5kbGU7CisgICAgbV9ub3RTZWxlY3RlZEJhY2tpbmdTdG9yZS0+Y3JlYXRl
SGFuZGxlKG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKTsKKyAgICBlbmNvZGVyIDw8IG5v
dFNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUgc2VsZWN0ZWRCYWNraW5nU3RvcmVIYW5kbGU7CisgICAgbV9zZWxlY3RlZEJhY2tpbmdTdG9y
ZS0+Y3JlYXRlSGFuZGxlKHNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKTsKKyAgICBlbmNvZGVy
IDw8IHNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
ZW5jb2Rlcik7CiAjZW5kaWYKQEAgLTU3LDYgKzgwLDI5IEBAIGJvb2wgUGxhdGZvcm1Qb3B1cE1l
bnVEYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBQbGF0Zm9ybVBvcHVwTWVudURh
dGEmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShk
YXRhLm1lbnVTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VsaWYgUExBVEZPUk0oV0lO
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5tX2NsaWVudFBhZGRpbmdMZWZ0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5tX2NsaWVu
dFBhZGRpbmdSaWdodCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGRhdGEubV9jbGllbnRJbnNldExlZnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLm1fY2xpZW50SW5zZXRSaWdodCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEubV9wb3B1cFdpZHRo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5t
X2l0ZW1IZWlnaHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSBub3RTZWxlY3RlZEJhY2tpbmdTdG9yZUhhbmRsZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGRhdGEubV9ub3RTZWxlY3RlZEJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlKG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKTsKKworICAgIFNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIHNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc2VsZWN0ZWRCYWNraW5nU3RvcmVIYW5kbGUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZGF0YS5tX3NlbGVjdGVkQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGUoc2VsZWN0ZWRCYWNraW5nU3RvcmVIYW5kbGUpOwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0oZGVjb2Rlcik7CiAgICAgVU5VU0VEX1BBUkFNKGRhdGEpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuaAppbmRleCAxMzk5MWYzMzViNWQyNzNh
MmIxZmNlYTBiZDg0M2UzYTgwNDhkZDg1Li42ZTE0Njg5NTY4MDc0OGIwMThkNmVmNzFiNmUyOTc1
MzY3NjRjZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbGF0Zm9ybVBvcHVw
TWVudURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURh
dGEuaApAQCAtNDksNiArNDksMTUgQEAgc3RydWN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSB7CiAg
ICAgYm9vbCBzaG91bGRQb3BPdmVyOwogICAgIGJvb2wgaGlkZUFycm93czsKICAgICBXZWJDb3Jl
OjpQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBtZW51U2l6ZTsKKyNlbGlmIFBMQVRGT1JN
KFdJTikKKyAgICBpbnQgbV9jbGllbnRQYWRkaW5nTGVmdDsKKyAgICBpbnQgbV9jbGllbnRQYWRk
aW5nUmlnaHQ7CisgICAgaW50IG1fY2xpZW50SW5zZXRMZWZ0OworICAgIGludCBtX2NsaWVudElu
c2V0UmlnaHQ7CisgICAgaW50IG1fcG9wdXBXaWR0aDsKKyAgICBpbnQgbV9pdGVtSGVpZ2h0Owor
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmU7Cisg
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9zZWxlY3RlZEJhY2tpbmdTdG9yZTsKICNlbmRp
ZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGll
bnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5j
cHAKaW5kZXggOGVjYzU5OTJlM2M5MDk5ZWJlYTE4ZDg2MzMzNDQxODUyOGE3NDUwYy4uYmY0MTMy
ZDU1YTBkMTI3NDg5ZGUzZTRkNWM5ZDQ1ODI2ZTk3ZTZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5V2lu
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJv
eHlXaW4uaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwpAQCAtMTcwLDcgKzE3MSw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZl
bnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQsIGJvb2wKIAogUmVmUHRyPFdl
YlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2Vi
UGFnZVByb3h5JiBwYWdlKQogewotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6Y3JlYXRlKCZtX3ZpZXcsIHBhZ2UpOwogfQogCiAjaWYgRU5BQkxF
KENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
V2ViUG9wdXBNZW51UHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dl
YlBvcHVwTWVudVByb3h5V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDNiYTM2MTFiNTQyMzE1MjU2MTMx
ZDJkMzFlOGQ1YTkwYmY5NzJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcApAQCAtMCwwICsxLDk2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gTk9URTogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IHNpbWlsYXIg
dG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHBvcHVwcyBpbiBXZWJDb3JlOjpQb3B1cE1lbnVXaW4u
CisvLyBXZSBzaG91bGQgdHJ5IGFuZCBmYWN0b3Igb3V0IHRoZSBjb21tb24gYml0cyBhbmQgc2hh
cmUgdGhlbS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBvcHVwTWVudVBy
b3h5V2luLmgiCisKKyNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvQlN0cmluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR0RJVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1l
V2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KKyNpbmNs
dWRlIDx3aW5kb3dzeC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVz
cGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgTFBDV1NUUiBr
V2ViS2l0MldlYlBvcHVwTWVudVByb3h5V2luZG93Q2xhc3NOYW1lID0gTCJXZWJLaXQyV2ViUG9w
dXBNZW51UHJveHlXaW5kb3dDbGFzcyI7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IGRlZmF1bHRB
bmltYXRpb25EdXJhdGlvbiA9IDIwMDsKK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heFBvcHVwSGVp
Z2h0ID0gMzIwOworc3RhdGljIGNvbnN0ZXhwciBpbnQgcG9wdXBXaW5kb3dCb3JkZXJXaWR0aCA9
IDE7CitzdGF0aWMgY29uc3RleHByIGludCBzZXBhcmF0b3JQYWRkaW5nID0gNDsKK3N0YXRpYyBj
b25zdGV4cHIgaW50IHNlcGFyYXRvckhlaWdodCA9IDE7CisKKy8vIFRoaXMgaXMgdXNlZCBmcm9t
IHdpdGhpbiBvdXIgY3VzdG9tIG1lc3NhZ2UgcHVtcCB3aGVuIHdlIHdhbnQgdG8gc2VuZCBhCisv
LyBtZXNzYWdlIHRvIHRoZSB3ZWIgdmlldyBhbmQgbm90IGhhdmUgb3VyIG1lc3NhZ2Ugc3RvbGVu
IGFuZCBzZW50IHRvCisvLyB0aGUgcG9wdXAgd2luZG93Lgorc3RhdGljIGNvbnN0ZXhwciBVSU5U
IFdNX0hPU1RfV0lORE9XX0ZJUlNUID0gV01fVVNFUjsKK3N0YXRpYyBjb25zdGV4cHIgVUlOVCBX
TV9IT1NUX1dJTkRPV19DSEFSID0gV01fVVNFUiArIFdNX0NIQVI7CitzdGF0aWMgY29uc3RleHBy
IFVJTlQgV01fSE9TVF9XSU5ET1dfTU9VU0VNT1ZFID0gV01fVVNFUiArIFdNX01PVVNFTU9WRTsK
Kworc3RhdGljIGlubGluZSBib29sIGlzQVNDSUlQcmludGFibGUodW5zaWduZWQgYykKK3sKKyAg
ICByZXR1cm4gYyA+PSAweDIwICYmIGMgPD0gMHg3RTsKK30KKworc3RhdGljIHZvaWQgdHJhbnNs
YXRlUG9pbnQoTFBBUkFNJiBsUGFyYW0sIEhXTkQgZnJvbSwgSFdORCB0bykKK3sKKyAgICBQT0lO
VCBwdDsKKyAgICBwdC54ID0gc3RhdGljX2Nhc3Q8c2hvcnQ+KEdFVF9YX0xQQVJBTShsUGFyYW0p
KTsKKyAgICBwdC55ID0gc3RhdGljX2Nhc3Q8c2hvcnQ+KEdFVF9ZX0xQQVJBTShsUGFyYW0pKTsK
KyAgICA6Ok1hcFdpbmRvd1BvaW50cyhmcm9tLCB0bywgJnB0LCAxKTsKKyAgICBsUGFyYW0gPSBN
QUtFTFBBUkFNKHB0LngsIHB0LnkpOworfQorCitMUkVTVUxUIENBTExCQUNLIFdlYlBvcHVwTWVu
dVByb3h5V2luOjpXZWJQb3B1cE1lbnVQcm94eVduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgTE9OR19QVFIgbG9uZ1B0
ciA9IDo6R2V0V2luZG93TG9uZ1B0cihoV25kLCAwKTsKKworICAgIGlmIChXZWJQb3B1cE1lbnVQ
cm94eVdpbiogcG9wdXBNZW51UHJveHkgPSByZWludGVycHJldF9jYXN0PFdlYlBvcHVwTWVudVBy
b3h5V2luKj4obG9uZ1B0cikpCisgICAgICAgIHJldHVybiBwb3B1cE1lbnVQcm94eS0+d25kUHJv
YyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisKKyAgICBpZiAobWVzc2FnZSA9PSBX
TV9DUkVBVEUpIHsKKyAgICAgICAgTFBDUkVBVEVTVFJVQ1QgY3JlYXRlU3RydWN0ID0gcmVpbnRl
cnByZXRfY2FzdDxMUENSRUFURVNUUlVDVD4obFBhcmFtKTsKKworICAgICAgICAvLyBBc3NvY2lh
dGUgdGhlIFdlYlZpZXcgd2l0aCB0aGUgd2luZG93LgorICAgICAgICA6OlNldFdpbmRvd0xvbmdQ
dHIoaFduZCwgMCwgKExPTkdfUFRSKWNyZWF0ZVN0cnVjdC0+bHBDcmVhdGVQYXJhbXMpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGhXbmQs
IG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94
eVdpbjo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSkKK3sKKyAgICBMUkVTVUxUIGxSZXN1bHQgPSAwOworICAgIGJvb2wgaGFuZGxl
ZCA9IHRydWU7CisKKyAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICBjYXNlIFdNX01PVVNFQUNU
SVZBVEU6CisgICAgICAgIGxSZXN1bHQgPSBvbk1vdXNlQWN0aXZhdGUoaFduZCwgbWVzc2FnZSwg
d1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1NJ
WkU6CisgICAgICAgIGxSZXN1bHQgPSBvblNpemUoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFy
YW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0tFWURPV046CisgICAg
ICAgIGxSZXN1bHQgPSBvbktleURvd24oaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhh
bmRsZWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0NIQVI6CisgICAgICAgIGxSZXN1
bHQgPSBvbkNoYXIoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdNX01PVVNFTU9WRToKKyAgICAgICAgbFJlc3VsdCA9IG9u
TW91c2VNb3ZlKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKKyAgICAgICAgbFJlc3VsdCA9IG9u
TEJ1dHRvbkRvd24oaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdNX0xCVVRUT05VUDoKKyAgICAgICAgbFJlc3VsdCA9IG9u
TEJ1dHRvblVwKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9NT1VTRVdIRUVMOgorICAgICAgICBsUmVzdWx0ID0gb25N
b3VzZVdoZWVsKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9QQUlOVDoKKyAgICAgICAgbFJlc3VsdCA9IG9uUGFpbnQo
aFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdNX1BSSU5UQ0xJRU5UOgorICAgICAgICBsUmVzdWx0ID0gb25QcmludENsaWVu
dChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaWYgKCFoYW5kbGVkKQorICAgICAgICBsUmVzdWx0ID0gOjpEZWZXaW5k
b3dQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKworICAgIHJldHVybiBsUmVz
dWx0OworfQorCitib29sIFdlYlBvcHVwTWVudVByb3h5V2luOjpyZWdpc3RlcldpbmRvd0NsYXNz
KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7
CisgICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOworCisgICAgV05EQ0xBU1NF
WCB3Y2V4OworICAgIHdjZXguY2JTaXplICAgICAgICAgPSBzaXplb2YoV05EQ0xBU1NFWCk7Cisg
ICAgd2NleC5zdHlsZSAgICAgICAgICA9IENTX0RST1BTSEFET1c7CisgICAgd2NleC5scGZuV25k
UHJvYyAgICA9IFdlYlBvcHVwTWVudVByb3h5V2luOjpXZWJQb3B1cE1lbnVQcm94eVduZFByb2M7
CisgICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7CisgICAgd2NleC5jYlduZEV4dHJhICAgICA9
IHNpemVvZihXZWJQb3B1cE1lbnVQcm94eVdpbiopOworICAgIHdjZXguaEluc3RhbmNlICAgICAg
PSBpbnN0YW5jZUhhbmRsZSgpOworICAgIHdjZXguaEljb24gICAgICAgICAgPSAwOworICAgIHdj
ZXguaEN1cnNvciAgICAgICAgPSA6OkxvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4
LmhickJhY2tncm91bmQgID0gMDsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKKyAgICB3
Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYktpdDJXZWJQb3B1cE1lbnVQcm94eVdpbmRvd0NsYXNz
TmFtZTsKKyAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKKworICAgIHJldHVybiAhITo6UmVn
aXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KKworV2ViUG9wdXBNZW51UHJveHlXaW46OldlYlBvcHVw
TWVudVByb3h5V2luKFdlYlZpZXcqIHdlYlZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQm
IGNsaWVudCkKKyAgICA6IFdlYlBvcHVwTWVudVByb3h5KGNsaWVudCkKKyAgICAsIG1fd2ViVmll
dyh3ZWJWaWV3KQoreworfQorCitXZWJQb3B1cE1lbnVQcm94eVdpbjo6fldlYlBvcHVwTWVudVBy
b3h5V2luKCkKK3sKKyAgICBpZiAobV9wb3B1cCkKKyAgICAgICAgOjpEZXN0cm95V2luZG93KG1f
cG9wdXApOworICAgIGlmIChtX3Njcm9sbGJhcikKKyAgICAgICAgbV9zY3JvbGxiYXItPnNldFBh
cmVudCgwKTsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2hvd1BvcHVwTWVudShj
b25zdCBJbnRSZWN0JiByZWN0LCBUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9y
LCBjb25zdCBWZWN0b3I8V2ViUG9wdXBJdGVtPiYgaXRlbXMsIGNvbnN0IFBsYXRmb3JtUG9wdXBN
ZW51RGF0YSYgZGF0YSwgaW50MzJfdCBzZWxlY3RlZEluZGV4KQoreworICAgIG1faXRlbXMgPSBp
dGVtczsKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIG1fbmV3U2VsZWN0ZWRJbmRleCA9IHNlbGVj
dGVkSW5kZXg7CisgICAgbV9zY2FsZUZhY3RvciA9IHBhZ2VTY2FsZUZhY3RvcjsKKworICAgIGNh
bGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZShyZWN0KTsKKyAgICBpZiAoY2xpZW50UmVjdCgpLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSFdORCBob3N0V2luZG93ID0gbV93ZWJWaWV3
LT53aW5kb3coKTsKKworICAgIGlmICghbV9zY3JvbGxiYXIgJiYgdmlzaWJsZUl0ZW1zKCkgPCBt
X2l0ZW1zLnNpemUoKSkgeworICAgICAgICBtX3Njcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRl
TmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgU21hbGxTY3JvbGxiYXIp
OworICAgICAgICBtX3Njcm9sbGJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgaWYg
KCFtX3BvcHVwKSB7CisgICAgICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKKworICAgICAgICBE
V09SRCBleFN0eWxlID0gV1NfRVhfTFRSUkVBRElORzsKKworICAgICAgICBtX3BvcHVwID0gOjpD
cmVhdGVXaW5kb3dFeChleFN0eWxlLCBrV2ViS2l0MldlYlBvcHVwTWVudVByb3h5V2luZG93Q2xh
c3NOYW1lLCBURVhUKCJQb3B1cE1lbnUiKSwKKyAgICAgICAgICAgIFdTX1BPUFVQIHwgV1NfQk9S
REVSLAorICAgICAgICAgICAgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93
aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgIGhv
c3RXaW5kb3csIDAsIGluc3RhbmNlSGFuZGxlKCksIHRoaXMpOworCisgICAgICAgIGlmICghbV9w
b3B1cCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBCT09MIHNob3VsZEFuaW1h
dGUgPSBGQUxTRTsKKworICAgIGlmIChzZWxlY3RlZEluZGV4ID4gMCkKKyAgICAgICAgc2V0Rm9j
dXNlZEluZGV4KHNlbGVjdGVkSW5kZXgpOworCisgICAgaWYgKCE6OlN5c3RlbVBhcmFtZXRlcnNJ
bmZvKFNQSV9HRVRDT01CT0JPWEFOSU1BVElPTiwgMCwgJnNob3VsZEFuaW1hdGUsIDApKQorICAg
ICAgICBzaG91bGRBbmltYXRlID0gRkFMU0U7CisKKyAgICBpZiAoc2hvdWxkQW5pbWF0ZSkgewor
ICAgICAgICBSRUNUIHZpZXdSZWN0ID0gezB9OworICAgICAgICA6OkdldFdpbmRvd1JlY3QoaG9z
dFdpbmRvdywgJnZpZXdSZWN0KTsKKworICAgICAgICBpZiAoITo6SXNSZWN0RW1wdHkoJnZpZXdS
ZWN0KSkgeworICAgICAgICAgICAgLy8gUG9wdXBzIHNob3VsZCBzbGlkZSBpbnRvIHZpZXcgYXdh
eSBmcm9tIHRoZSA8c2VsZWN0PiBib3gKKyAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgbWF5IGhh
dmUgdG8gY2hhbmdlIGZvciBWaXN0YQorICAgICAgICAgICAgRFdPUkQgc2xpZGVEaXJlY3Rpb24g
PSAobV93aW5kb3dSZWN0LnkoKSA8IHZpZXdSZWN0LnRvcCArIHJlY3QubG9jYXRpb24oKS55KCkp
ID8gQVdfVkVSX05FR0FUSVZFIDogQVdfVkVSX1BPU0lUSVZFOworCisgICAgICAgICAgICA6OkFu
aW1hdGVXaW5kb3cobV9wb3B1cCwgZGVmYXVsdEFuaW1hdGlvbkR1cmF0aW9uLCBBV19TTElERSB8
IHNsaWRlRGlyZWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICA6OlNob3dX
aW5kb3cobV9wb3B1cCwgU1dfU0hPV05PQUNUSVZBVEUpOworCisgICAgbV9zaG93UG9wdXAgPSB0
cnVlOworCisgICAgLy8gUHJvdGVjdCB0aGUgcG9wdXAgbWVudSBpbiBjYXNlIGl0cyBvd25lciBp
cyBkZXN0cm95ZWQgd2hpbGUgd2UncmUgcnVubmluZyB0aGUgbWVzc2FnZSBwdW1wLgorICAgIFJl
ZlB0cjxXZWJQb3B1cE1lbnVQcm94eVdpbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKworICAgIDo6
U2V0Q2FwdHVyZShob3N0V2luZG93KTsKKworICAgIE1TRyBtc2c7CisgICAgSFdORCBhY3RpdmVX
aW5kb3c7CisKKyAgICB3aGlsZSAoOjpHZXRNZXNzYWdlKCZtc2csIDAsIDAsIDApKSB7CisgICAg
ICAgIHN3aXRjaCAobXNnLm1lc3NhZ2UpIHsKKyAgICAgICAgY2FzZSBXTV9IT1NUX1dJTkRPV19N
T1VTRU1PVkU6CisgICAgICAgIGNhc2UgV01fSE9TVF9XSU5ET1dfQ0hBUjogCisgICAgICAgICAg
ICBpZiAobXNnLmh3bmQgPT0gbV9wb3B1cCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVz
c2FnZSBzaG91bGQgYmUgc2VudCB0byB0aGUgaG9zdCB3aW5kb3cuCisgICAgICAgICAgICAgICAg
bXNnLmh3bmQgPSBob3N0V2luZG93OworICAgICAgICAgICAgICAgIG1zZy5tZXNzYWdlIC09IFdN
X0hPU1RfV0lORE9XX0ZJUlNUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgLy8gU3RlYWwgbW91c2UgbWVzc2FnZXMuCisgICAgICAgIGNhc2UgV01fTkNNT1VT
RU1PVkU6CisgICAgICAgIGNhc2UgV01fTkNMQlVUVE9ORE9XTjoKKyAgICAgICAgY2FzZSBXTV9O
Q0xCVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9OQ0xCVVRUT05EQkxDTEs6CisgICAgICAgIGNh
c2UgV01fTkNSQlVUVE9ORE9XTjoKKyAgICAgICAgY2FzZSBXTV9OQ1JCVVRUT05VUDoKKyAgICAg
ICAgY2FzZSBXTV9OQ1JCVVRUT05EQkxDTEs6CisgICAgICAgIGNhc2UgV01fTkNNQlVUVE9ORE9X
TjoKKyAgICAgICAgY2FzZSBXTV9OQ01CVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9OQ01CVVRU
T05EQkxDTEs6CisgICAgICAgIGNhc2UgV01fTU9VU0VXSEVFTDoKKyAgICAgICAgICAgIG1zZy5o
d25kID0gbV9wb3B1cDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFRoZXNlIG1v
dXNlIG1lc3NhZ2VzIHVzZSBjbGllbnQgY29vcmRpbmF0ZXMgc28gd2UgbmVlZCB0byBjb252ZXJ0
IHRoZW0uCisgICAgICAgIGNhc2UgV01fTU9VU0VNT1ZFOgorICAgICAgICBjYXNlIFdNX0xCVVRU
T05ET1dOOgorICAgICAgICBjYXNlIFdNX0xCVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9MQlVU
VE9OREJMQ0xLOgorICAgICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgorICAgICAgICBjYXNlIFdN
X1JCVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9SQlVUVE9OREJMQ0xLOgorICAgICAgICBjYXNl
IFdNX01CVVRUT05ET1dOOgorICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAgICAgICAgY2Fz
ZSBXTV9NQlVUVE9OREJMQ0xLOiB7CisgICAgICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvb3Jk
aW5hdGUuCisgICAgICAgICAgICB0cmFuc2xhdGVQb2ludChtc2cubFBhcmFtLCBtc2cuaHduZCwg
bV9wb3B1cCk7CisgICAgICAgICAgICBtc2cuaHduZCA9IG1fcG9wdXA7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0ZWFsIGFsbCBrZXlib2FyZCBtZXNzYWdl
cy4KKyAgICAgICAgY2FzZSBXTV9LRVlET1dOOgorICAgICAgICBjYXNlIFdNX0tFWVVQOgorICAg
ICAgICBjYXNlIFdNX0NIQVI6CisgICAgICAgIGNhc2UgV01fREVBRENIQVI6CisgICAgICAgIGNh
c2UgV01fU1lTS0VZVVA6CisgICAgICAgIGNhc2UgV01fU1lTQ0hBUjoKKyAgICAgICAgY2FzZSBX
TV9TWVNERUFEQ0hBUjoKKyAgICAgICAgICAgIG1zZy5od25kID0gbV9wb3B1cDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgOjpUcmFuc2xhdGVNZXNzYWdlKCZtc2cp
OworICAgICAgICA6OkRpc3BhdGNoTWVzc2FnZSgmbXNnKTsKKworICAgICAgICBpZiAoIW1fc2hv
d1BvcHVwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGFjdGl2ZVdpbmRvdyA9IDo6R2V0
QWN0aXZlV2luZG93KCk7CisgICAgICAgIGlmIChhY3RpdmVXaW5kb3cgIT0gaG9zdFdpbmRvdyAm
JiAhOjpJc0NoaWxkKGFjdGl2ZVdpbmRvdywgaG9zdFdpbmRvdykpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKDo6R2V0Q2FwdHVyZSgpICE9IGhvc3RXaW5kb3cpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoOjpHZXRDYXB0dXJlKCkgPT0gaG9zdFdpbmRvdykK
KyAgICAgICAgOjpSZWxlYXNlQ2FwdHVyZSgpOworCisgICAgbV9zaG93UG9wdXAgPSBmYWxzZTsK
KyAgICA6OlNob3dXaW5kb3cobV9wb3B1cCwgU1dfSElERSk7CisKKyAgICBpZiAoIVdlYlBvcHVw
TWVudVByb3h5OjptX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViUG9wdXBNZW51
UHJveHk6Om1fY2xpZW50LT52YWx1ZUNoYW5nZWRGb3JQb3B1cE1lbnUodGhpcywgbV9uZXdTZWxl
Y3RlZEluZGV4KTsKKworICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTc5MDQ+IEluIG9yZGVyIHRvIHByb3Blcmx5IGNhbGwgdGhlIG9uQ2xpY2soKQorICAg
IC8vIGhhbmRsZXIgb24gYSA8c2VsZWN0PiBlbGVtZW50LCB3ZSBuZWVkIHRvIGZha2UgYSBtb3Vz
ZSB1cCBldmVudCBpbiB0aGUgbWFpbiB3aW5kb3cuCisgICAgLy8gVGhlIG1haW4gd2luZG93IGFs
cmVhZHkgcmVjZWl2ZWQgdGhlIG1vdXNlIGRvd24sIHdoaWNoIHNob3dlZCB0aGlzIHBvcHVwLCBi
dXQgdXBvbgorICAgIC8vIHNlbGVjdGlvbiBvZiBhbiBpdGVtIHRoZSBtb3VzZSB1cCBnZXRzIGVh
dGVuIGJ5IHRoZSBwb3B1cCBtZW51LiBTbyB3ZSB0YWtlIHRoZSBtb3VzZSBkb3duCisgICAgLy8g
ZXZlbnQsIGNoYW5nZSB0aGUgbWVzc2FnZSB0eXBlIHRvIGEgbW91c2UgdXAgZXZlbnQsIGFuZCBw
b3N0IHRoYXQgaW4gdGhlIG1lc3NhZ2UgcXVldWUuCisgICAgLy8gVGh1cywgd2UgYXJlIHZpcnR1
YWxseSBjbGlja2luZyBhdCB0aGUKKyAgICAvLyBzYW1lIGxvY2F0aW9uIHdoZXJlIHRoZSBtb3Vz
ZSBkb3duIGV2ZW50IG9jY3VycmVkLiBUaGlzIGFsbG93cyB0aGUgaGl0IHRlc3QgdG8gc2VsZWN0
CisgICAgLy8gdGhlIGNvcnJlY3QgZWxlbWVudCwgYW5kIHRoZXJlYnkgY2FsbCB0aGUgb25DbGlj
aygpIEpTIGhhbmRsZXIuCisgICAgaWYgKCFXZWJQb3B1cE1lbnVQcm94eTo6bV9jbGllbnQtPmN1
cnJlbnRseVByb2Nlc3NlZE1vdXNlRG93bkV2ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IE1TRyogaW5pdGlhdGluZ1dpbkV2ZW50ID0gV2ViUG9wdXBNZW51UHJveHk6Om1fY2xp
ZW50LT5jdXJyZW50bHlQcm9jZXNzZWRNb3VzZURvd25FdmVudCgpLT5uYXRpdmVFdmVudCgpOwor
ICAgIE1TRyBmYWtlRXZlbnQgPSAqaW5pdGlhdGluZ1dpbkV2ZW50OworICAgIGZha2VFdmVudC5t
ZXNzYWdlID0gV01fTEJVVFRPTlVQOworICAgIDo6UG9zdE1lc3NhZ2UoZmFrZUV2ZW50Lmh3bmQs
IGZha2VFdmVudC5tZXNzYWdlLCBmYWtlRXZlbnQud1BhcmFtLCBmYWtlRXZlbnQubFBhcmFtKTsK
K30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6aGlkZVBvcHVwTWVudSgpCit7CisgICAg
aWYgKCFtX3Nob3dQb3B1cCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvd1BvcHVwID0gZmFs
c2U7CisKKyAgICA6OlNob3dXaW5kb3cobV9wb3B1cCwgU1dfSElERSk7CisKKyAgICAvLyBQb3N0
IGEgV01fTlVMTCBtZXNzYWdlIHRvIHdha2UgdXAgdGhlIG1lc3NhZ2UgcHVtcCBpZiBuZWNlc3Nh
cnkuCisgICAgOjpQb3N0TWVzc2FnZShtX3BvcHVwLCBXTV9OVUxMLCAwLCAwKTsKK30KKwordm9p
ZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y2FsY3VsYXRlUG9zaXRpb25BbmRTaXplKGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgSW50UmVjdCByZWN0SW5TY3JlZW5Db29yZHMocmVjdCk7Cisg
ICAgcmVjdEluU2NyZWVuQ29vcmRzLnNjYWxlKG1fc2NhbGVGYWN0b3IpOworCisgICAgUE9JTlQg
bG9jYXRpb24ocmVjdEluU2NyZWVuQ29vcmRzIC5sb2NhdGlvbigpKTsKKyAgICBpZiAoITo6Q2xp
ZW50VG9TY3JlZW4obV93ZWJWaWV3LT53aW5kb3coKSwgJmxvY2F0aW9uKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHJlY3RJblNjcmVlbkNvb3Jkcy5zZXRMb2NhdGlvbihsb2NhdGlvbik7CisKKyAg
ICBpbnQgaXRlbUNvdW50ID0gbV9pdGVtcy5zaXplKCk7CisgICAgbV9pdGVtSGVpZ2h0ID0gbV9k
YXRhLm1faXRlbUhlaWdodDsKKworICAgIGludCBuYXR1cmFsSGVpZ2h0ID0gbV9pdGVtSGVpZ2h0
ICogaXRlbUNvdW50OworICAgIGludCBwb3B1cEhlaWdodCA9IG1pbihtYXhQb3B1cEhlaWdodCwg
bmF0dXJhbEhlaWdodCk7CisKKyAgICAvLyBUaGUgcG9wdXAgc2hvdWxkIHNob3cgYW4gaW50ZWdy
YWwgbnVtYmVyIG9mIGl0ZW1zIChpLmUuIG5vIHBhcnRpYWwgaXRlbXMgc2hvdWxkIGJlIHZpc2li
bGUpCisgICAgcG9wdXBIZWlnaHQgLT0gcG9wdXBIZWlnaHQgJSBtX2l0ZW1IZWlnaHQ7CisKKyAg
ICAvLyBOZXh0IGRldGVybWluZSBpdHMgd2lkdGgKKyAgICBpbnQgcG9wdXBXaWR0aCA9IG1fZGF0
YS5tX3BvcHVwV2lkdGg7CisKKyAgICBpZiAobmF0dXJhbEhlaWdodCA+IG1heFBvcHVwSGVpZ2h0
KSB7CisgICAgICAgIC8vIFdlIG5lZWQgcm9vbSBmb3IgYSBzY3JvbGxiYXIKKyAgICAgICAgcG9w
dXBXaWR0aCArPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoU21h
bGxTY3JvbGxiYXIpOworICAgIH0KKworICAgIHBvcHVwSGVpZ2h0ICs9IDIgKiBwb3B1cFdpbmRv
d0JvcmRlcldpZHRoOworCisgICAgLy8gVGhlIHBvcHVwIHNob3VsZCBiZSBhdCBsZWFzdCBhcyB3
aWRlIGFzIHRoZSBjb250cm9sIG9uIHRoZSBwYWdlCisgICAgcG9wdXBXaWR0aCA9IG1heChyZWN0
SW5TY3JlZW5Db29yZHMud2lkdGgoKSAtIG1fZGF0YS5tX2NsaWVudEluc2V0TGVmdCAtIG1fZGF0
YS5tX2NsaWVudEluc2V0UmlnaHQsIHBvcHVwV2lkdGgpOworCisgICAgLy8gQWx3YXlzIGxlZnQt
YWxpZ24gaXRlbXMgaW4gdGhlIHBvcHVwLiBUaGlzIG1hdGNoZXMgcG9wdXAgbWVudXMgb24gdGhl
IG1hYy4KKyAgICBpbnQgcG9wdXBYID0gcmVjdEluU2NyZWVuQ29vcmRzLngoKSArIG1fZGF0YS5t
X2NsaWVudEluc2V0TGVmdDsKKworICAgIEludFJlY3QgcG9wdXBSZWN0KHBvcHVwWCwgcmVjdElu
U2NyZWVuQ29vcmRzLm1heFkoKSwgcG9wdXBXaWR0aCwgcG9wdXBIZWlnaHQpOworCisgICAgLy8g
VGhlIHBvcHVwIG5lZWRzIHRvIHN0YXkgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHNjcmVlbiBh
bmQgbm90IG92ZXJsYXAgYW55IHRvb2xiYXJzCisgICAgSE1PTklUT1IgbW9uaXRvciA9IDo6TW9u
aXRvckZyb21XaW5kb3cobV93ZWJWaWV3LT53aW5kb3coKSwgTU9OSVRPUl9ERUZBVUxUVE9QUklN
QVJZKTsKKyAgICBNT05JVE9SSU5GT0VYIG1vbml0b3JJbmZvOworICAgIG1vbml0b3JJbmZvLmNi
U2l6ZSA9IHNpemVvZihNT05JVE9SSU5GT0VYKTsKKyAgICA6OkdldE1vbml0b3JJbmZvKG1vbml0
b3IsICZtb25pdG9ySW5mbyk7CisgICAgRmxvYXRSZWN0IHNjcmVlbiA9IHN0YXRpY19jYXN0PElu
dFJlY3Q+KG1vbml0b3JJbmZvLnJjV29yayk7CisKKyAgICAvLyBDaGVjayB0aGF0IHdlIGRvbid0
IGdvIG9mZiB0aGUgc2NyZWVuIHZlcnRpY2FsbHkKKyAgICBpZiAocG9wdXBSZWN0Lm1heFkoKSA+
IHNjcmVlbi5oZWlnaHQoKSkgeworICAgICAgICAvLyBUaGUgcG9wdXAgd2lsbCBnbyBvZmYgdGhl
IHNjcmVlbiwgc28gdHJ5IHBsYWNpbmcgaXQgYWJvdmUgdGhlIGNsaWVudAorICAgICAgICBpZiAo
cmVjdEluU2NyZWVuQ29vcmRzLnkoKSAtIHBvcHVwUmVjdC5oZWlnaHQoKSA8IDApIHsKKyAgICAg
ICAgICAgIC8vIFRoZSBwb3B1cCB3b24ndCBmaXQgYWJvdmUsIGVpdGhlciwgc28gcGxhY2UgaXQg
d2hlcmVldmVyJ3MgYmlnZ2VyIGFuZCByZXNpemUgaXQgdG8gZml0CisgICAgICAgICAgICBpZiAo
KHJlY3RJblNjcmVlbkNvb3Jkcy55KCkgKyByZWN0SW5TY3JlZW5Db29yZHMuaGVpZ2h0KCkgLyAy
KSA8IChzY3JlZW4uaGVpZ2h0KCkgLyAyKSkgeworICAgICAgICAgICAgICAgIC8vIEJlbG93IGlz
IGJpZ2dlcgorICAgICAgICAgICAgICAgIHBvcHVwUmVjdC5zZXRIZWlnaHQoc2NyZWVuLmhlaWdo
dCgpIC0gcG9wdXBSZWN0LnkoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIEFib3ZlIGlzIGJpZ2dlcgorICAgICAgICAgICAgICAgIHBvcHVwUmVjdC5zZXRZKDAp
OworICAgICAgICAgICAgICAgIHBvcHVwUmVjdC5zZXRIZWlnaHQocmVjdEluU2NyZWVuQ29vcmRz
LnkoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBU
aGUgcG9wdXAgZml0cyBhYm92ZSwgc28gcmVwb3NpdGlvbiBpdAorICAgICAgICAgICAgcG9wdXBS
ZWN0LnNldFkocmVjdEluU2NyZWVuQ29vcmRzLnkoKSAtIHBvcHVwUmVjdC5oZWlnaHQoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayB0aGF0IHdlIGRvbid0IGdvIG9mZiB0aGUg
c2NyZWVuIGhvcml6b250YWxseQorICAgIGlmIChwb3B1cFJlY3QueCgpIDwgc2NyZWVuLngoKSkg
eworICAgICAgICBwb3B1cFJlY3Quc2V0V2lkdGgocG9wdXBSZWN0LndpZHRoKCkgLSAoc2NyZWVu
LngoKSAtIHBvcHVwUmVjdC54KCkpKTsKKyAgICAgICAgcG9wdXBSZWN0LnNldFgoc2NyZWVuLngo
KSk7CisgICAgfQorCisgICAgbV93aW5kb3dSZWN0ID0gcG9wdXBSZWN0OworfQorCitJbnRSZWN0
IFdlYlBvcHVwTWVudVByb3h5V2luOjpjbGllbnRSZWN0KCkgY29uc3QKK3sKKyAgICBJbnRSZWN0
IGNsaWVudFJlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgY2xpZW50UmVjdC5pbmZsYXRlKC1wb3B1
cFdpbmRvd0JvcmRlcldpZHRoKTsKKyAgICBjbGllbnRSZWN0LnNldExvY2F0aW9uKEludFBvaW50
KDAsIDApKTsKKyAgICByZXR1cm4gY2xpZW50UmVjdDsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6aW52YWxpZGF0ZUl0ZW0oaW50IGluZGV4KQoreworICAgIGlmICghbV9wb3B1cCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBkYW1hZ2VSZWN0KGNsaWVudFJlY3QoKSk7
CisgICAgZGFtYWdlUmVjdC5zZXRZKG1faXRlbUhlaWdodCAqIChpbmRleCAtIG1fc2Nyb2xsT2Zm
c2V0KSk7CisgICAgZGFtYWdlUmVjdC5zZXRIZWlnaHQobV9pdGVtSGVpZ2h0KTsKKyAgICBpZiAo
bV9zY3JvbGxiYXIpCisgICAgICAgIGRhbWFnZVJlY3Quc2V0V2lkdGgoZGFtYWdlUmVjdC53aWR0
aCgpIC0gbV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLndpZHRoKCkpOworCisgICAgUkVDVCByID0g
ZGFtYWdlUmVjdDsKKyAgICA6OkludmFsaWRhdGVSZWN0KG1fcG9wdXAsICZyLCBUUlVFKTsKK30K
KworaW50IFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZl
cnRpY2FsU2Nyb2xsYmFyKSAmJiBtX3Njcm9sbGJhcikgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6
ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBXZWJQb3B1
cE1lbnVQcm94eVdpbjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7
CisgICAgc2Nyb2xsVG8ob2Zmc2V0LnkoKSk7Cit9CisKK0ludFNpemUgV2ViUG9wdXBNZW51UHJv
eHlXaW46OnZpc2libGVTaXplKCkgY29uc3QKK3sKKyAgICBpbnQgc2Nyb2xsYmFyV2lkdGggPSBt
X3Njcm9sbGJhciA/IG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS53aWR0aCgpIDogMDsKKyAgICBy
ZXR1cm4gSW50U2l6ZShjb250ZW50c1NpemUoKS53aWR0aCgpIC0gc2Nyb2xsYmFyV2lkdGgsIG1f
c2Nyb2xsYmFyID8gbV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkgOiBjb250ZW50c1NpemUoKS5o
ZWlnaHQoKSk7Cit9CisKK1dlYkNvcmU6OkludFNpemUgV2ViUG9wdXBNZW51UHJveHlXaW46OmNv
bnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUobV93aW5kb3dSZWN0Lndp
ZHRoKCksIG1fc2Nyb2xsYmFyID8gbV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIDogbV93aW5kb3dS
ZWN0LmhlaWdodCgpKTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBXZWJQb3B1cE1lbnVQcm94eVdp
bjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKK3sKKyAgICByZXR1cm4g
bV93aW5kb3dSZWN0OworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUbyhp
bnQgb2Zmc2V0KQoreworICAgIEFTU0VSVChtX3Njcm9sbGJhcik7CisKKyAgICBpZiAoIW1fcG9w
dXApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Njcm9sbE9mZnNldCA9PSBvZmZzZXQp
CisgICAgICAgIHJldHVybjsKKworICAgIGludCBzY3JvbGxlZExpbmVzID0gbV9zY3JvbGxPZmZz
ZXQgLSBvZmZzZXQ7CisgICAgbV9zY3JvbGxPZmZzZXQgPSBvZmZzZXQ7CisKKyAgICBVSU5UIGZs
YWdzID0gU1dfSU5WQUxJREFURTsKKworI2lmZGVmIENBTl9TRVRfU01PT1RIX1NDUk9MTElOR19E
VVJBVElPTgorICAgIEJPT0wgc2hvdWxkU21vb3RoU2Nyb2xsID0gRkFMU0U7CisgICAgOjpTeXN0
ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTElTVEJPWFNNT09USFNDUk9MTElORywgMCwgJnNob3Vs
ZFNtb290aFNjcm9sbCwgMCk7CisgICAgaWYgKHNob3VsZFNtb290aFNjcm9sbCkKKyAgICAgICAg
ZmxhZ3MgfD0gTUFLRVdPUkQoU1dfU01PT1RIU0NST0xMLCBzbW9vdGhTY3JvbGxBbmltYXRpb25E
dXJhdGlvbik7CisjZW5kaWYKKworICAgIEludFJlY3QgbGlzdFJlY3QgPSBjbGllbnRSZWN0KCk7
CisgICAgaWYgKG1fc2Nyb2xsYmFyKQorICAgICAgICBsaXN0UmVjdC5zZXRXaWR0aChsaXN0UmVj
dC53aWR0aCgpIC0gbV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLndpZHRoKCkpOworICAgIFJFQ1Qg
ciA9IGxpc3RSZWN0OworICAgIDo6U2Nyb2xsV2luZG93RXgobV9wb3B1cCwgMCwgc2Nyb2xsZWRM
aW5lcyAqIG1faXRlbUhlaWdodCwgJnIsIDAsIDAsIDAsIGZsYWdzKTsKKyAgICBpZiAobV9zY3Jv
bGxiYXIpIHsKKyAgICAgICAgciA9IG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAgICAgICAg
OjpJbnZhbGlkYXRlUmVjdChtX3BvcHVwLCAmciwgVFJVRSk7CisgICAgfQorICAgIDo6VXBkYXRl
V2luZG93KG1fcG9wdXApOworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjppbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSByZWN0OworICAgIHNjcm9sbFJlY3QubW92
ZShzY3JvbGxiYXIueCgpLCBzY3JvbGxiYXIueSgpKTsKKyAgICBSRUNUIHIgPSBzY3JvbGxSZWN0
OworICAgIDo6SW52YWxpZGF0ZVJlY3QobV9wb3B1cCwgJnIsIGZhbHNlKTsKK30KKworLy8gTWVz
c2FnZSBwdW1wIG1lc3NhZ2VzLgorCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvbk1v
dXNlQWN0aXZhdGUoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29s
JiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSB0cnVlOworICAgIHJldHVybiBNQV9OT0FDVElW
QVRFOworfQorCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvblNpemUoSFdORCBoV25k
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKK3sK
KyAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICBpZiAoIXNjcm9sbGJhcigpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIEludFNpemUgc2l6ZShMT1dPUkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSkp
OworICAgIHNjcm9sbGJhcigpLT5zZXRGcmFtZVJlY3QoSW50UmVjdChzaXplLndpZHRoKCkgLSBz
Y3JvbGxiYXIoKS0+d2lkdGgoKSwgMCwgc2Nyb2xsYmFyKCktPndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpKTsKKworICAgIGludCB2aXNpYmxlSXRlbXMgPSB0aGlzLT52aXNpYmxlSXRlbXMoKTsKKyAg
ICBzY3JvbGxiYXIoKS0+c2V0RW5hYmxlZCh2aXNpYmxlSXRlbXMgPCBtX2l0ZW1zLnNpemUoKSk7
CisgICAgc2Nyb2xsYmFyKCktPnNldFN0ZXBzKDEsIG1heCgxLCB2aXNpYmxlSXRlbXMgLSAxKSk7
CisgICAgc2Nyb2xsYmFyKCktPnNldFByb3BvcnRpb24odmlzaWJsZUl0ZW1zLCBtX2l0ZW1zLnNp
emUoKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK0xSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46
Om9uS2V5RG93bihIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFN
IGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5kbGVkID0gdHJ1ZTsKKworICAgIExS
RVNVTFQgbFJlc3VsdCA9IDA7CisgICAgc3dpdGNoIChMT1dPUkQod1BhcmFtKSkgeworICAgIGNh
c2UgVktfRE9XTjoKKyAgICBjYXNlIFZLX1JJR0hUOgorICAgICAgICBkb3duKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVktfVVA6CisgICAgY2FzZSBWS19MRUZUOgorICAgICAgICB1cCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX0hPTUU6CisgICAgICAgIGZvY3VzRmlyc3Qo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19FTkQ6CisgICAgICAgIGZvY3VzTGFzdCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX1BSSU9SOgorICAgICAgICBpZiAoZm9jdXNl
ZEluZGV4KCkgIT0gc2Nyb2xsT2Zmc2V0KFZlcnRpY2FsU2Nyb2xsYmFyKSkgeworICAgICAgICAg
ICAgLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIGZpcnN0IHZpc2libGUgaXRlbQorICAgICAg
ICAgICAgaW50IGZpcnN0VmlzaWJsZUl0ZW0gPSBzY3JvbGxPZmZzZXQoVmVydGljYWxTY3JvbGxi
YXIpOworICAgICAgICAgICAgdXAoZm9jdXNlZEluZGV4KCkgLSBmaXJzdFZpc2libGVJdGVtKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoZSBmaXJzdCB2aXNpYmxlIGl0ZW0g
aXMgc2VsZWN0ZWQsIHNvIG1vdmUgdGhlIHNlbGVjdGlvbiBiYWNrIG9uZSBwYWdlCisgICAgICAg
ICAgICB1cCh2aXNpYmxlSXRlbXMoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBWS19ORVhUOiB7CisgICAgICAgIGludCBsYXN0VmlzaWJsZUl0ZW0gPSBzY3JvbGxPZmZz
ZXQoVmVydGljYWxTY3JvbGxiYXIpICsgdmlzaWJsZUl0ZW1zKCkgLSAxOworICAgICAgICBpZiAo
Zm9jdXNlZEluZGV4KCkgIT0gbGFzdFZpc2libGVJdGVtKSB7CisgICAgICAgICAgICAvLyBTZXQg
dGhlIHNlbGVjdGlvbiB0byB0aGUgbGFzdCB2aXNpYmxlIGl0ZW0KKyAgICAgICAgICAgIGRvd24o
bGFzdFZpc2libGVJdGVtIC0gZm9jdXNlZEluZGV4KCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gVGhlIGxhc3QgdmlzaWJsZSBpdGVtIGlzIHNlbGVjdGVkLCBzbyBtb3ZlIHRo
ZSBzZWxlY3Rpb24gZm9yd2FyZCBvbmUgcGFnZQorICAgICAgICAgICAgZG93bih2aXNpYmxlSXRl
bXMoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVktfVEFC
OgorICAgICAgICA6OlNlbmRNZXNzYWdlKG1fd2ViVmlldy0+d2luZG93KCksIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtKTsKKyAgICAgICAgaGlkZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFZLX0VTQ0FQRToKKyAgICAgICAgaGlkZSgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBpZiAoaXNBU0NJSVByaW50YWJsZSh3UGFyYW0pKSB7CisgICAgICAgICAgICAv
LyBTZW5kIHRoZSBrZXlkb3duIHRvIHRoZSBXZWJWaWV3IHNvIGl0IGNhbiBiZSB1c2VkIGZvciB0
eXBlLXRvLXNlbGVjdC4KKyAgICAgICAgICAgIC8vIFNpbmNlIHdlIGtub3cgdGhhdCB0aGUgdmly
dHVhbCBrZXkgaXMgQVNDSUkgcHJpbnRhYmxlLCBpdCdzIE9LIHRvIGNvbnZlcnQgdGhpcyB0bwor
ICAgICAgICAgICAgLy8gYSBXTV9DSEFSIG1lc3NhZ2UuIChXZSBkb24ndCB3YW50IHRvIGNhbGwg
VHJhbnNsYXRlTWVzc2FnZSBiZWNhdXNlIHRoYXQgd2lsbCBwb3N0IGEKKyAgICAgICAgICAgIC8v
IFdNX0NIQVIgbWVzc2FnZSB0aGF0IHdpbGwgYmUgc3RvbGVuIGFuZCByZWRpcmVjdGVkIHRvIHRo
ZSBwb3B1cCBIV05ELgorICAgICAgICAgICAgOjpQb3N0TWVzc2FnZShtX3BvcHVwLCBXTV9IT1NU
X1dJTkRPV19DSEFSLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbFJlc3VsdCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBsUmVz
dWx0OworfQorCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvbkNoYXIoSFdORCBoV25k
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCkKK3sK
KyAgICBoYW5kbGVkID0gdHJ1ZTsKKworICAgIExSRVNVTFQgbFJlc3VsdCA9IDA7CisgICAgaW50
IGluZGV4OworICAgIHN3aXRjaCAod1BhcmFtKSB7CisgICAgY2FzZSAweDBEOiAvLyBFbnRlci9S
ZXR1cm4KKyAgICAgICAgaGlkZSgpOworICAgICAgICBpbmRleCA9IGZvY3VzZWRJbmRleCgpOwor
ICAgICAgICBBU1NFUlQoaW5kZXggPj0gMCk7CisgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIHNlbmQgYmFjayB0aGUgaW5kZXggcmlnaHQgYXdheT8KKyAgICAgICAgbV9uZXdTZWxlY3Rl
ZEluZGV4ID0gaW5kZXg7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgxQjogLy8gRXNjYXBl
CisgICAgICAgIGhpZGUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDA5OiAvLyBUQUIK
KyAgICBjYXNlIDB4MDg6IC8vIEJhY2tzcGFjZQorICAgIGNhc2UgMHgwQTogLy8gTGluZWZlZWQK
KyAgICBkZWZhdWx0OiAvLyBDaGFyYWN0ZXIKKyAgICAgICAgbFJlc3VsdCA9IDE7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBsUmVzdWx0OworfQorCitMUkVTVUxUIFdlYlBv
cHVwTWVudVByb3h5V2luOjpvbk1vdXNlTW92ZShIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5kbGVk
ID0gdHJ1ZTsKKworICAgIEludFBvaW50IG1vdXNlUG9pbnQoTUFLRVBPSU5UUyhsUGFyYW0pKTsK
KyAgICBpZiAoc2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxCYXJSZWN0ID0g
c2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworICAgICAgICBpZiAoc2Nyb2xsYmFyQ2FwdHVyaW5n
TW91c2UoKSB8fCBzY3JvbGxCYXJSZWN0LmNvbnRhaW5zKG1vdXNlUG9pbnQpKSB7CisgICAgICAg
ICAgICAvLyBQdXQgdGhlIHBvaW50IGludG8gY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIHNj
cm9sbCBiYXIKKyAgICAgICAgICAgIG1vdXNlUG9pbnQubW92ZSgtc2Nyb2xsQmFyUmVjdC54KCks
IC1zY3JvbGxCYXJSZWN0LnkoKSk7CisgICAgICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZl
bnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBtYWtlU2NhbGVkUG9pbnQobW91c2VQb2ludCwgbV9z
Y2FsZUZhY3RvcikpOworICAgICAgICAgICAgc2Nyb2xsYmFyKCktPm1vdXNlTW92ZWQoZXZlbnQp
OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBCT09MIHNo
b3VsZEhvdFRyYWNrID0gRkFMU0U7CisgICAgaWYgKCE6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQ
SV9HRVRDT01CT0JPWEFOSU1BVElPTiwgMCwgJnNob3VsZEhvdFRyYWNrLCAwKSkKKyAgICAgICAg
c2hvdWxkSG90VHJhY2sgPSBGQUxTRTsKKworICAgIFJFQ1QgYm91bmRzOworICAgIDo6R2V0Q2xp
ZW50UmVjdChtX3BvcHVwLCAmYm91bmRzKTsKKyAgICBpZiAoITo6UHRJblJlY3QoJmJvdW5kcywg
bW91c2VQb2ludCkgJiYgISh3UGFyYW0gJiBNS19MQlVUVE9OKSkgeworICAgICAgICAvLyBXaGVu
IHRoZSBtb3VzZSBpcyBub3QgaW5zaWRlIHRoZSBwb3B1cCBtZW51IGFuZCB0aGUgbGVmdCBidXR0
b24gaXNuJ3QgZG93biwganVzdAorICAgICAgICAvLyByZXBvc3QgdGhlIG1lc3NhZ2UgdG8gdGhl
IHdlYiB2aWV3LgorCisgICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29vcmRpbmF0ZS4KKyAgICAg
ICAgdHJhbnNsYXRlUG9pbnQobFBhcmFtLCBtX3BvcHVwLCBtX3dlYlZpZXctPndpbmRvdygpKTsK
KworICAgICAgICA6OlBvc3RNZXNzYWdlKG1fcG9wdXAsIFdNX0hPU1RfV0lORE9XX01PVVNFTU9W
RSwgd1BhcmFtLCBsUGFyYW0pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAo
KHNob3VsZEhvdFRyYWNrIHx8IHdQYXJhbSAmIE1LX0xCVVRUT04pICYmIDo6UHRJblJlY3QoJmJv
dW5kcywgbW91c2VQb2ludCkpIHsKKyAgICAgICAgc2V0Rm9jdXNlZEluZGV4KGxpc3RJbmRleEF0
UG9pbnQobW91c2VQb2ludCksIHRydWUpOworICAgICAgICBtX2hvdmVyZWRJbmRleCA9IGxpc3RJ
bmRleEF0UG9pbnQobW91c2VQb2ludCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0xS
RVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uTEJ1dHRvbkRvd24oSFdORCBoV25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCit7
CisgICAgaGFuZGxlZCA9IHRydWU7CisKKyAgICBJbnRQb2ludCBtb3VzZVBvaW50KE1BS0VQT0lO
VFMobFBhcmFtKSk7CisgICAgaWYgKHNjcm9sbGJhcigpKSB7CisgICAgICAgIEludFJlY3Qgc2Ny
b2xsQmFyUmVjdCA9IHNjcm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgaWYgKHNjcm9s
bEJhclJlY3QuY29udGFpbnMobW91c2VQb2ludCkpIHsKKyAgICAgICAgICAgIC8vIFB1dCB0aGUg
cG9pbnQgaW50byBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgc2Nyb2xsIGJhcgorICAgICAg
ICAgICAgbW91c2VQb2ludC5tb3ZlKC1zY3JvbGxCYXJSZWN0LngoKSwgLXNjcm9sbEJhclJlY3Qu
eSgpKTsKKyAgICAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudChoV25kLCBtZXNzYWdl
LCB3UGFyYW0sIG1ha2VTY2FsZWRQb2ludChtb3VzZVBvaW50LCBtX3NjYWxlRmFjdG9yKSk7Cisg
ICAgICAgICAgICBzY3JvbGxiYXIoKS0+bW91c2VEb3duKGV2ZW50KTsKKyAgICAgICAgICAgIHNl
dFNjcm9sbGJhckNhcHR1cmluZ01vdXNlKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB0aGUgbW91c2UgaXMgaW5zaWRlIHRoZSB3aW5k
b3csIHVwZGF0ZSB0aGUgZm9jdXNlZCBpbmRleC4gT3RoZXJ3aXNlLCAKKyAgICAvLyBoaWRlIHRo
ZSBwb3B1cC4KKyAgICBSRUNUIGJvdW5kczsKKyAgICA6OkdldENsaWVudFJlY3QobV9wb3B1cCwg
JmJvdW5kcyk7CisgICAgaWYgKDo6UHRJblJlY3QoJmJvdW5kcywgbW91c2VQb2ludCkpIHsKKyAg
ICAgICAgc2V0Rm9jdXNlZEluZGV4KGxpc3RJbmRleEF0UG9pbnQobW91c2VQb2ludCksIHRydWUp
OworICAgICAgICBtX2hvdmVyZWRJbmRleCA9IGxpc3RJbmRleEF0UG9pbnQobW91c2VQb2ludCk7
CisgICAgfSBlbHNlCisgICAgICAgIGhpZGUoKTsKKworICAgIHJldHVybiAwOworfQorCisKK0xS
RVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uTEJ1dHRvblVwKEhXTkQgaFduZCwgVUlOVCBt
ZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQorewor
ICAgIGhhbmRsZWQgPSB0cnVlOworCisgICAgSW50UG9pbnQgbW91c2VQb2ludChNQUtFUE9JTlRT
KGxQYXJhbSkpOworICAgIGlmIChzY3JvbGxiYXIoKSkgeworICAgICAgICBJbnRSZWN0IHNjcm9s
bEJhclJlY3QgPSBzY3JvbGxiYXIoKS0+ZnJhbWVSZWN0KCk7CisgICAgICAgIGlmIChzY3JvbGxi
YXJDYXB0dXJpbmdNb3VzZSgpIHx8IHNjcm9sbEJhclJlY3QuY29udGFpbnMobW91c2VQb2ludCkp
IHsKKyAgICAgICAgICAgIHNldFNjcm9sbGJhckNhcHR1cmluZ01vdXNlKGZhbHNlKTsKKyAgICAg
ICAgICAgIC8vIFB1dCB0aGUgcG9pbnQgaW50byBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUg
c2Nyb2xsIGJhcgorICAgICAgICAgICAgbW91c2VQb2ludC5tb3ZlKC1zY3JvbGxCYXJSZWN0Lngo
KSwgLXNjcm9sbEJhclJlY3QueSgpKTsKKyAgICAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBl
dmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIG1ha2VTY2FsZWRQb2ludChtb3VzZVBvaW50LCBt
X3NjYWxlRmFjdG9yKSk7CisgICAgICAgICAgICBzY3JvbGxiYXIoKS0+bW91c2VVcChldmVudCk7
CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91bmQgU2Ny
b2xsYmFyIG5vdCBpbnZhbGlkYXRpbmcgY29ycmVjdGx5IHdoZW4gaXQgZG9lc24ndCBoYXZlIGEg
cGFyZW50IHdpZGdldAorICAgICAgICAgICAgUkVDVCByID0gc2Nyb2xsQmFyUmVjdDsKKyAgICAg
ICAgICAgIDo6SW52YWxpZGF0ZVJlY3QobV9wb3B1cCwgJnIsIFRSVUUpOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gT25seSBoaWRlIHRoZSBwb3B1cCBp
ZiB0aGUgbW91c2UgaXMgaW5zaWRlIHRoZSBwb3B1cCB3aW5kb3cuCisgICAgUkVDVCBib3VuZHM7
CisgICAgOjpHZXRDbGllbnRSZWN0KG1fcG9wdXAsICZib3VuZHMpOworICAgIGlmICg6OlB0SW5S
ZWN0KCZib3VuZHMsIG1vdXNlUG9pbnQpKSB7CisgICAgICAgIGhpZGUoKTsKKyAgICAgICAgaW50
IGluZGV4ID0gbV9ob3ZlcmVkSW5kZXg7CisgICAgICAgIGlmICghbV9pdGVtc1tpbmRleF0ubV9p
c0VuYWJsZWQpCisgICAgICAgICAgICBpbmRleCA9IG1fZm9jdXNlZEluZGV4OworCisgICAgICAg
IGlmIChpbmRleCA+PSAwKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBz
ZW5kIGJhY2sgdGhlIGluZGV4IHJpZ2h0IGF3YXk/CisgICAgICAgICAgICBtX25ld1NlbGVjdGVk
SW5kZXggPSBpbmRleDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitM
UkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvbk1vdXNlV2hlZWwoSFdORCBoV25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBo
YW5kbGVkID0gdHJ1ZTsKKworICAgIGlmICghc2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaW50IGkgPSAwOworICAgIGZvciAoaW5jcmVtZW50V2hlZWxEZWx0YShHRVRfV0hF
RUxfREVMVEFfV1BBUkFNKHdQYXJhbSkpOyBhYnMod2hlZWxEZWx0YSgpKSA+PSBXSEVFTF9ERUxU
QTsgcmVkdWNlV2hlZWxEZWx0YShXSEVFTF9ERUxUQSkpIHsKKyAgICAgICAgaWYgKHdoZWVsRGVs
dGEoKSA+IDApCisgICAgICAgICAgICArK2k7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC0t
aTsKKyAgICB9CisKKyAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAg
OiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CisgICAgcmV0dXJuIDA7Cit9CisK
K0xSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uUGFpbnQoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSB0
cnVlOworCisgICAgUEFJTlRTVFJVQ1QgcGFpbnRTdHJ1Y3Q7CisgICAgOjpCZWdpblBhaW50KG1f
cG9wdXAsICZwYWludFN0cnVjdCk7CisgICAgcGFpbnQocGFpbnRTdHJ1Y3QucmNQYWludCwgcGFp
bnRTdHJ1Y3QuaGRjKTsKKyAgICA6OkVuZFBhaW50KG1fcG9wdXAsICZwYWludFN0cnVjdCk7CisK
KyAgICByZXR1cm4gMDsKK30KKworTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25Qcmlu
dENsaWVudChIV05EIGhXbmQsIFVJTlQsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSwgYm9vbCYgaGFu
ZGxlZCkKK3sKKyAgICBoYW5kbGVkID0gdHJ1ZTsKKworICAgIEhEQyBoZGMgPSByZWludGVycHJl
dF9jYXN0PEhEQz4od1BhcmFtKTsKKyAgICBwYWludChjbGllbnRSZWN0KCksIGhkYyk7CisKKyAg
ICByZXR1cm4gMDsKK30KKworYm9vbCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6ZG93bih1bnNpZ25l
ZCBsaW5lcykKK3sKKyAgICBpbnQgc2l6ZSA9IG1faXRlbXMuc2l6ZSgpOworCisgICAgaW50IGxh
c3RTZWxlY3RhYmxlSW5kZXgsIHNlbGVjdGVkTGlzdEluZGV4OworICAgIGxhc3RTZWxlY3RhYmxl
SW5kZXggPSBzZWxlY3RlZExpc3RJbmRleCA9IGZvY3VzZWRJbmRleCgpOworICAgIGZvciAoaW50
IGkgPSBzZWxlY3RlZExpc3RJbmRleCArIDE7IGkgPj0gMCAmJiBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX2l0ZW1zW2ldLm1faXNFbmFibGVkKSB7CisgICAgICAgICAgICBsYXN0U2Vs
ZWN0YWJsZUluZGV4ID0gaTsKKyAgICAgICAgICAgIGlmIChpID49IHNlbGVjdGVkTGlzdEluZGV4
ICsgKGludClsaW5lcykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBzZXRGb2N1c2VkSW5kZXgobGFzdFNlbGVjdGFibGVJbmRleCk7Cit9CisK
K2Jvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OnVwKHVuc2lnbmVkIGxpbmVzKQoreworICAgIGlu
dCBzaXplID0gbV9pdGVtcy5zaXplKCk7CisKKyAgICBpbnQgbGFzdFNlbGVjdGFibGVJbmRleCwg
c2VsZWN0ZWRMaXN0SW5kZXg7CisgICAgbGFzdFNlbGVjdGFibGVJbmRleCA9IHNlbGVjdGVkTGlz
dEluZGV4ID0gZm9jdXNlZEluZGV4KCk7CisgICAgZm9yIChpbnQgaSA9IHNlbGVjdGVkTGlzdElu
ZGV4IC0gMTsgaSA+PSAwICYmIGkgPCBzaXplOyAtLWkpIHsKKyAgICAgICAgaWYgKG1faXRlbXNb
aV0ubV9pc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGxhc3RTZWxlY3RhYmxlSW5kZXggPSBpOwor
ICAgICAgICAgICAgaWYgKGkgPD0gc2VsZWN0ZWRMaXN0SW5kZXggLSAoaW50KWxpbmVzKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNldEZv
Y3VzZWRJbmRleChsYXN0U2VsZWN0YWJsZUluZGV4KTsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6cGFpbnQoY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgSERDIGhkYykKK3sKKyAg
ICBpZiAoIW1fcG9wdXApCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9EQykgeworICAg
ICAgICBtX0RDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoSFduZERDKG1f
cG9wdXApKSk7CisgICAgICAgIGlmICghbV9EQykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9ibXApIHsKKyAgICAgICAgYm9vbCBrZWVwQml0bWFwID0gZmFsc2U7Cisg
ICAgICAgIEJJVE1BUCBiaXRtYXA7CisgICAgICAgIGlmICg6OkdldE9iamVjdChtX2JtcC5nZXQo
KSwgc2l6ZW9mKGJpdG1hcCksICZiaXRtYXApKQorICAgICAgICAgICAga2VlcEJpdG1hcCA9IGJp
dG1hcC5ibVdpZHRoID09IGNsaWVudFJlY3QoKS53aWR0aCgpICYmIGJpdG1hcC5ibUhlaWdodCA9
PSBjbGllbnRSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAgIGlmICgha2VlcEJpdG1hcCkKKyAgICAg
ICAgICAgIG1fYm1wLmNsZWFyKCk7CisgICAgfQorICAgIGlmICghbV9ibXApIHsKKyAgICAgICAg
Qml0bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoY2xpZW50
UmVjdCgpLnNpemUoKSk7CisgICAgICAgIHZvaWQqIHBpeGVscyA9IDA7CisgICAgICAgIG1fYm1w
ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKG1fREMuZ2V0KCksICZiaXRtYXBJ
bmZvLCBESUJfUkdCX0NPTE9SUywgJnBpeGVscywgMCwgMCkpOworICAgICAgICBpZiAoIW1fYm1w
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIDo6U2VsZWN0T2JqZWN0KG1fREMuZ2V0
KCksIG1fYm1wLmdldCgpKTsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCht
X0RDLmdldCgpKTsKKworICAgIEludFJlY3QgdHJhbnNsYXRlZERhbWFnZVJlY3QgPSBkYW1hZ2VS
ZWN0OworICAgIHRyYW5zbGF0ZWREYW1hZ2VSZWN0Lm1vdmUoSW50U2l6ZSgwLCBtX3Njcm9sbE9m
ZnNldCAqIG1faXRlbUhlaWdodCkpOworICAgIG1fZGF0YS5tX25vdFNlbGVjdGVkQmFja2luZ1N0
b3JlLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0LmxvY2F0aW9uKCksIHRyYW5zbGF0ZWREYW1h
Z2VSZWN0KTsKKworICAgIEludFJlY3Qgc2VsZWN0ZWRJbmRleFJlY3RJbkJhY2tpbmdTdG9yZSgw
LCBmb2N1c2VkSW5kZXgoKSAqIG1faXRlbUhlaWdodCwgbV9kYXRhLm1fc2VsZWN0ZWRCYWNraW5n
U3RvcmUtPnNpemUoKS53aWR0aCgpLCBtX2l0ZW1IZWlnaHQpOworICAgIEludFBvaW50IHNlbGVj
dGVkSW5kZXhEc3RQb2ludCA9IHNlbGVjdGVkSW5kZXhSZWN0SW5CYWNraW5nU3RvcmUubG9jYXRp
b24oKTsKKyAgICBzZWxlY3RlZEluZGV4RHN0UG9pbnQubW92ZSgwLCAtbV9zY3JvbGxPZmZzZXQg
KiBtX2l0ZW1IZWlnaHQpOworCisgICAgbV9kYXRhLm1fc2VsZWN0ZWRCYWNraW5nU3RvcmUtPnBh
aW50KGNvbnRleHQsIHNlbGVjdGVkSW5kZXhEc3RQb2ludCwgc2VsZWN0ZWRJbmRleFJlY3RJbkJh
Y2tpbmdTdG9yZSk7CisKKyAgICBpZiAobV9zY3JvbGxiYXIpCisgICAgICAgIG1fc2Nyb2xsYmFy
LT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKworCisgICAgSFduZERDIGhXbmREQzsKKyAg
ICBIREMgbG9jYWxEQyA9IGhkYyA/IGhkYyA6IGhXbmREQy5zZXRIV25kKG1fcG9wdXApOworCisg
ICAgOjpCaXRCbHQobG9jYWxEQywgZGFtYWdlUmVjdC54KCksIGRhbWFnZVJlY3QueSgpLCBkYW1h
Z2VSZWN0LndpZHRoKCksIGRhbWFnZVJlY3QuaGVpZ2h0KCksIG1fREMuZ2V0KCksIGRhbWFnZVJl
Y3QueCgpLCBkYW1hZ2VSZWN0LnkoKSwgU1JDQ09QWSk7Cit9CisKK2Jvb2wgV2ViUG9wdXBNZW51
UHJveHlXaW46OnNldEZvY3VzZWRJbmRleChpbnQgaSwgYm9vbCBob3RUcmFja2luZykKK3sKKyAg
ICBpZiAoaSA8IDAgfHwgaSA+PSBtX2l0ZW1zLnNpemUoKSB8fCBpID09IGZvY3VzZWRJbmRleCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1faXRlbXNbaV0ubV9pc0VuYWJs
ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludmFsaWRhdGVJdGVtKGZvY3VzZWRJ
bmRleCgpKTsKKyAgICBpbnZhbGlkYXRlSXRlbShpKTsKKworICAgIG1fZm9jdXNlZEluZGV4ID0g
aTsKKworICAgIGlmICghaG90VHJhY2tpbmcpIHsKKyAgICAgICAgaWYgKFdlYlBvcHVwTWVudVBy
b3h5OjptX2NsaWVudCkKKyAgICAgICAgICAgIFdlYlBvcHVwTWVudVByb3h5OjptX2NsaWVudC0+
c2V0VGV4dEZyb21JdGVtRm9yUG9wdXBNZW51KHRoaXMsIGkpOworICAgIH0KKworICAgIHNjcm9s
bFRvUmV2ZWFsU2VsZWN0aW9uKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFdlYlBv
cHVwTWVudVByb3h5V2luOjp2aXNpYmxlSXRlbXMoKSBjb25zdAoreworICAgIHJldHVybiBjbGll
bnRSZWN0KCkuaGVpZ2h0KCkgLyBtX2l0ZW1IZWlnaHQ7Cit9CisKK2ludCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6bGlzdEluZGV4QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0ICsgcG9pbnQueSgpIC8gbV9pdGVtSGVpZ2h0Owor
fQorCitpbnQgV2ViUG9wdXBNZW51UHJveHlXaW46OmZvY3VzZWRJbmRleCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZm9jdXNlZEluZGV4OworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2lu
Ojpmb2N1c0ZpcnN0KCkKK3sKKyAgICBpbnQgc2l6ZSA9IG1faXRlbXMuc2l6ZSgpOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1faXRlbXNbaV0u
bV9pc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHNldEZvY3VzZWRJbmRleChpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5
V2luOjpmb2N1c0xhc3QoKQoreworICAgIGludCBzaXplID0gbV9pdGVtcy5zaXplKCk7CisKKyAg
ICBmb3IgKGludCBpID0gc2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgaWYgKG1faXRl
bXNbaV0ubV9pc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHNldEZvY3VzZWRJbmRleChpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCisKK3ZvaWQgV2ViUG9wdXBN
ZW51UHJveHlXaW46OmluY3JlbWVudFdoZWVsRGVsdGEoaW50IGRlbHRhKQoreworICAgIG1fd2hl
ZWxEZWx0YSArPSBkZWx0YTsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6cmVkdWNl
V2hlZWxEZWx0YShpbnQgZGVsdGEpCit7CisgICAgQVNTRVJUKGRlbHRhID49IDApOworICAgIEFT
U0VSVChkZWx0YSA8PSBhYnMobV93aGVlbERlbHRhKSk7CisKKyAgICBpZiAobV93aGVlbERlbHRh
ID4gMCkKKyAgICAgICAgbV93aGVlbERlbHRhIC09IGRlbHRhOworICAgIGVsc2UgaWYgKG1fd2hl
ZWxEZWx0YSA8IDApCisgICAgICAgIG1fd2hlZWxEZWx0YSArPSBkZWx0YTsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybjsKK30KKworYm9vbCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsVG9S
ZXZlYWxTZWxlY3Rpb24oKQoreworICAgIGlmICghbV9zY3JvbGxiYXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGludCBpbmRleCA9IGZvY3VzZWRJbmRleCgpOworCisgICAgaWYgKGlu
ZGV4IDwgbV9zY3JvbGxPZmZzZXQpIHsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihWZXJ0aWNhbFNjcm9sbGJhciwgaW5kZXgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaW5kZXggPj0gbV9zY3JvbGxPZmZzZXQg
KyB2aXNpYmxlSXRlbXMoKSkgeworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKFZlcnRpY2FsU2Nyb2xsYmFyLCBpbmRleCAtIHZpc2libGVJdGVt
cygpICsgMSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyNDRjZjI5OTEx
NDE4M2E5MjE5ZmYzOTgzMmUxYWJjOWE4NzEzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaApAQCAtMCwwICsxLDE1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQbGF0Zm9ybVBv
cHVwTWVudURhdGEuaCIKKyNpbmNsdWRlICJXZWJQb3B1cEl0ZW0uaCIKKyNpbmNsdWRlICJXZWJQ
b3B1cE1lbnVQcm94eS5oIgorI2luY2x1ZGUgPE9sZUFjYy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U2Nyb2xsYWJsZUFyZWEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorCit0eXBl
ZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7Cit0eXBlZGVmIHN0cnVjdCBIRENfXyogSERDOwordHlw
ZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fKiBIQklUTUFQOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgV2ViVmlldzsKKworY2xhc3MgV2ViUG9wdXBNZW51UHJveHlXaW4gOiBwdWJsaWMgV2Vi
UG9wdXBNZW51UHJveHksIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8V2ViUG9wdXBNZW51UHJveHlXaW4+IGNyZWF0ZShXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50JiBjbGllbnQpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQb3B1cE1lbnVQcm94eVdpbih3ZWJWaWV3LCBjbGll
bnQpKTsKKyAgICB9CisgICAgfldlYlBvcHVwTWVudVByb3h5V2luKCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2hvd1BvcHVwTWVudShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6VGV4
dERpcmVjdGlvbiwgZG91YmxlIHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgVmVjdG9yPFdlYlBvcHVw
SXRlbT4mLCBjb25zdCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmLCBpbnQzMl90IHNlbGVjdGVkSW5k
ZXgpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlUG9wdXBNZW51KCk7CisKKyAgICBib29sIHNldEZv
Y3VzZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgaG90VHJhY2tpbmcgPSBmYWxzZSk7CisKKyAgICB2
b2lkIGhpZGUoKSB7IGhpZGVQb3B1cE1lbnUoKTsgfQorCitwcml2YXRlOgorICAgIFdlYlBvcHVw
TWVudVByb3h5V2luKFdlYlZpZXcqLCBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50Jik7CisKKyAg
ICBXZWJDb3JlOjpTY3JvbGxiYXIqIHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
YmFyLmdldCgpOyB9CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYQorICAgIGludCBzY3JvbGxTaXpl
KFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IHNldFNjcm9sbE9mZnNldChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIG92ZXJyaWRlOworICAg
IGludCBzY3JvbGxPZmZzZXQoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OyB9CisKKyAgICB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBXZWJDb3JlOjpJbnRSZWN0
IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBXZWJDb3JlOjpJbnRS
ZWN0KCk7IH0KKyAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpT
Y3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiAwOyB9CisgICAgV2ViQ29yZTo6SW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wq
ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGly
ZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNl
VGVzdGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisg
ICAgdm9pZCBzY3JvbGxUbyhpbnQgb2Zmc2V0KTsKKworICAgIHN0YXRpYyBib29sIHJlZ2lzdGVy
V2luZG93Q2xhc3MoKTsKKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJQb3B1cE1lbnVQ
cm94eVduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworICAgIExSRVNVTFQgd25k
UHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJh
bSk7CisKKyAgICAvLyBNZXNzYWdlIHB1bXAgbWVzc2FnZXMuCisgICAgTFJFU1VMVCBvbk1vdXNl
QWN0aXZhdGUoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxl
ZCk7CisgICAgTFJFU1VMVCBvblNpemUoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJB
TSwgYm9vbCYgaGFuZGxlZCk7CisgICAgTFJFU1VMVCBvbktleURvd24oSFdORCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7CisgICAgTFJFU1VMVCBvbkNoYXIo
SFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7CisgICAg
TFJFU1VMVCBvbk1vdXNlTW92ZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBi
b29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9uTEJ1dHRvbkRvd24oSFdORCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7CisgICAgTFJFU1VMVCBvbkxCdXR0
b25VcChIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsK
KyAgICBMUkVTVUxUIG9uTW91c2VXaGVlbChIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBB
UkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9uUGFpbnQoSFdORCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7CisgICAgTFJFU1VMVCBvblByaW50
Q2xpZW50KEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQp
OworICAgIExSRVNVTFQgb25HZXRPYmplY3QoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQ
QVJBTSwgYm9vbCAmaGFuZGxlZCk7CisKKyAgICB2b2lkIGNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgV2ViQ29yZTo6SW50UmVjdCBjbGllbnRS
ZWN0KCkgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlSXRlbShpbnQgaW5kZXgpOworCisKKyAg
ICBpbnQgaXRlbUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbUhlaWdodDsgfQorICAgIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3dpbmRv
d1JlY3Q7IH0KKyAgICBpbnQgd2hlZWxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxEZWx0
YTsgfQorICAgIHZvaWQgc2V0V2FzQ2xpY2tlZChib29sIGIgPSB0cnVlKSB7IG1fd2FzQ2xpY2tl
ZCA9IGI7IH0KKyAgICBib29sIHdhc0NsaWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dhc0NsaWNr
ZWQ7IH0KKyAgICBib29sIHNjcm9sbGJhckNhcHR1cmluZ01vdXNlKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsYmFyQ2FwdHVy
aW5nTW91c2UoYm9vbCBiKSB7IG1fc2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UgPSBiOyB9CisKKyAg
ICBib29sIHVwKHVuc2lnbmVkIGxpbmVzID0gMSk7CisgICAgYm9vbCBkb3duKHVuc2lnbmVkIGxp
bmVzID0gMSk7CisKKyAgICB2b2lkIHBhaW50KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRhbWFn
ZVJlY3QsIEhEQyA9IDApOworICAgIGludCB2aXNpYmxlSXRlbXMoKSBjb25zdDsKKyAgICBpbnQg
bGlzdEluZGV4QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIGlu
dCBmb2N1c2VkSW5kZXgoKSBjb25zdDsKKyAgICB2b2lkIGZvY3VzRmlyc3QoKTsKKyAgICB2b2lk
IGZvY3VzTGFzdCgpOworICAgIGJvb2wgc2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24oKTsKKyAgICB2
b2lkIGluY3JlbWVudFdoZWVsRGVsdGEoaW50IGRlbHRhKTsKKyAgICB2b2lkIHJlZHVjZVdoZWVs
RGVsdGEoaW50IGRlbHRhKTsKKworICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBWZWN0b3I8
V2ViUG9wdXBJdGVtPiBtX2l0ZW1zOworICAgIFBsYXRmb3JtUG9wdXBNZW51RGF0YSBtX2RhdGE7
CisgICAgaW50IG1fbmV3U2VsZWN0ZWRJbmRleCB7IDAgfTsKKworICAgIFJlZlB0cjxXZWJDb3Jl
OjpTY3JvbGxiYXI+IG1fc2Nyb2xsYmFyOworICAgIEdESU9iamVjdDxIREM+IG1fREM7CisgICAg
R0RJT2JqZWN0PEhCSVRNQVA+IG1fYm1wOworICAgIEhXTkQgbV9wb3B1cCB7IG51bGxwdHIgfTsK
KyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fd2luZG93UmVjdDsKKworICAgIGludCBtX2l0ZW1IZWln
aHQgeyAwIH07CisgICAgaW50IG1fc2Nyb2xsT2Zmc2V0IHsgMCB9OworICAgIGludCBtX3doZWVs
RGVsdGEgeyAwIH07CisgICAgaW50IG1fZm9jdXNlZEluZGV4IHsgMCB9OworICAgIGludCBtX2hv
dmVyZWRJbmRleCB7IDAgfTsKKyAgICBib29sIG1fd2FzQ2xpY2tlZCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3Njcm9sbGJhckNhcHR1cmluZ01vdXNlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hv
d1BvcHVwIHsgZmFsc2UgfTsKKyAgICBpbnQgbV9zY2FsZUZhY3RvciB7IDEgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVXaW4uY3BwCmluZGV4IGU4
NzZjNmVhMmVhOTI0ZTU2YWVmYThkMWJkNzU4ZGUzMzc5MjBmZjAuLjlhOTE3ZWQxZjdhMGFmMjBj
Njk0ZjQ1Yzg4NjNhYjEyYjY3MDM2ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBNZW51V2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHAK
QEAgLTI3LDE1ICsyNywxMjQgQEAKICNpbmNsdWRlICJXZWJQb3B1cE1lbnUuaCIKIAogI2luY2x1
ZGUgIlBsYXRmb3JtUG9wdXBNZW51RGF0YS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xlbmd0aEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUG9wdXBNZW51Q2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVt
ZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LXZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YShjb25zdCBJbnRSZWN0JiwgUGxh
dGZvcm1Qb3B1cE1lbnVEYXRhJikKK3N0YXRpYyBjb25zdCBpbnQgc2VwYXJhdG9yUGFkZGluZyA9
IDQ7CitzdGF0aWMgY29uc3QgaW50IHNlcGFyYXRvckhlaWdodCA9IDE7CitzdGF0aWMgY29uc3Qg
aW50IHBvcHVwV2luZG93Qm9yZGVyV2lkdGggPSAxOworCit2b2lkIFdlYlBvcHVwTWVudTo6c2V0
VXBQbGF0Zm9ybURhdGEoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFnZUNvb3JkaW5hdGVzLCBQ
bGF0Zm9ybVBvcHVwTWVudURhdGEmIGRhdGEpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBpbnQgaXRlbUNvdW50ID0gbV9wb3B1cENsaWVudC0+bGlzdFNpemUoKTsKKworICAgIGF1dG8g
Zm9udCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLmZvbnQoKTsKKworICAgIGRhdGEubV9j
bGllbnRQYWRkaW5nTGVmdCA9IG1fcG9wdXBDbGllbnQtPmNsaWVudFBhZGRpbmdMZWZ0KCk7Cisg
ICAgZGF0YS5tX2NsaWVudFBhZGRpbmdSaWdodCA9IG1fcG9wdXBDbGllbnQtPmNsaWVudFBhZGRp
bmdSaWdodCgpOworICAgIGRhdGEubV9jbGllbnRJbnNldExlZnQgPSBtX3BvcHVwQ2xpZW50LT5j
bGllbnRJbnNldExlZnQoKTsKKyAgICBkYXRhLm1fY2xpZW50SW5zZXRSaWdodCA9IG1fcG9wdXBD
bGllbnQtPmNsaWVudEluc2V0UmlnaHQoKTsKKyAgICBkYXRhLm1faXRlbUhlaWdodCA9IGZvbnQu
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKSArIDE7CisKKyAgICBpbnQgcG9wdXBXaWR0aCA9IDA7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtQ291bnQ7ICsraSkgeworICAgICAgICBTdHJp
bmcgdGV4dCA9IG1fcG9wdXBDbGllbnQtPml0ZW1UZXh0KGkpOworICAgICAgICBpZiAodGV4dC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRvIGl0ZW1Gb250
Q2FzY2FkZSA9IGZvbnQ7CisgICAgICAgIGlmIChtX3BvcHVwQ2xpZW50LT5pdGVtSXNMYWJlbChp
KSkgeworICAgICAgICAgICAgYXV0byBkID0gaXRlbUZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlv
bigpOworICAgICAgICAgICAgZC5zZXRXZWlnaHQoYm9sZFdlaWdodFZhbHVlKCkpOworICAgICAg
ICAgICAgaXRlbUZvbnRDYXNjYWRlID0gRm9udENhc2NhZGUoV1RGTW92ZShkKSwgaXRlbUZvbnRD
YXNjYWRlLmxldHRlclNwYWNpbmcoKSwgaXRlbUZvbnRDYXNjYWRlLndvcmRTcGFjaW5nKCkpOwor
ICAgICAgICAgICAgaXRlbUZvbnRDYXNjYWRlLnVwZGF0ZShtX3BvcHVwQ2xpZW50LT5mb250U2Vs
ZWN0b3IoKSk7CisgICAgICAgIH0KKworICAgICAgICBwb3B1cFdpZHRoID0gc3RkOjptYXg8Zmxv
YXQ+KHBvcHVwV2lkdGgsIGNlaWxmKGl0ZW1Gb250Q2FzY2FkZS53aWR0aChUZXh0UnVuKHRleHQp
KSkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBwb3B1cFdpZHRoIHNob3VsZCBwcm9iYWJseSB0
YWtlIGludG8gYWNjb3VudCBtb25pdG9yIGNvbnN0cmFpbnRzIGFzIGlzIGRvbmUgd2l0aCBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6Y2FsY3VsYXRlUG9zaXRpb25BbmRTaXplLgorICAgIHBvcHVwV2lk
dGggKz0gc3RkOjptYXgoMCwgZGF0YS5tX2NsaWVudFBhZGRpbmdSaWdodCAtIGRhdGEubV9jbGll
bnRJbnNldFJpZ2h0KSArIHN0ZDo6bWF4KDAsIGRhdGEubV9jbGllbnRQYWRkaW5nTGVmdCAtIGRh
dGEubV9jbGllbnRJbnNldExlZnQpOworICAgIHBvcHVwV2lkdGggKz0gMiAqIHBvcHVwV2luZG93
Qm9yZGVyV2lkdGg7CisgICAgZGF0YS5tX3BvcHVwV2lkdGggPSBwb3B1cFdpZHRoOworCisgICAg
Ly8gVGhlIGJhY2tpbmcgc3RvcmVzIHNob3VsZCBiZSBkcmF3biBhdCBsZWFzdCBhcyB3aWRlIGFz
IHRoZSBjb250cm9sIG9uIHRoZSBwYWdlIHRvIG1hdGNoIHRoZSB3aWR0aCBvZiB0aGUgcG9wdXAg
d2luZG93IHdlJ2xsIGNyZWF0ZS4KKyAgICBpbnQgYmFja2luZ1N0b3JlV2lkdGggPSBzdGQ6Om1h
eChwYWdlQ29vcmRpbmF0ZXMud2lkdGgoKSAtIG1fcG9wdXBDbGllbnQtPmNsaWVudEluc2V0TGVm
dCgpIC0gbV9wb3B1cENsaWVudC0+Y2xpZW50SW5zZXRSaWdodCgpLCBwb3B1cFdpZHRoKTsKKwor
ICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZShiYWNraW5nU3RvcmVXaWR0aCwgKGl0ZW1Db3Vu
dCAqIGRhdGEubV9pdGVtSGVpZ2h0KSk7CisgICAgZGF0YS5tX25vdFNlbGVjdGVkQmFja2luZ1N0
b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwg
eyB9KTsKKyAgICBkYXRhLm1fc2VsZWN0ZWRCYWNraW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZVNoYXJlYWJsZShiYWNraW5nU3RvcmVTaXplLCB7IH0pOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbm90U2VsZWN0ZWRCYWNraW5nU3RvcmVDb250ZXh0ID0g
ZGF0YS5tX25vdFNlbGVjdGVkQmFja2luZ1N0b3JlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBzZWxlY3RlZEJhY2tpbmdTdG9y
ZUNvbnRleHQgPSBkYXRhLm1fc2VsZWN0ZWRCYWNraW5nU3RvcmUtPmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dCgpOworCisgICAgQ29sb3IgYWN0aXZlT3B0aW9uQmFja2dyb3VuZENvbG9yID0gUmVuZGVy
VGhlbWU6OnNpbmdsZXRvbigpLmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
eyB9KTsKKyAgICBDb2xvciBhY3RpdmVPcHRpb25UZXh0Q29sb3IgPSBSZW5kZXJUaGVtZTo6c2lu
Z2xldG9uKCkuYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcih7IH0pOworCisg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpOyB5ICs9IGRh
dGEubV9pdGVtSGVpZ2h0KSB7CisgICAgICAgIGludCBpbmRleCA9IHkgLyBkYXRhLm1faXRlbUhl
aWdodDsKKworICAgICAgICBQb3B1cE1lbnVTdHlsZSBpdGVtU3R5bGUgPSBtX3BvcHVwQ2xpZW50
LT5pdGVtU3R5bGUoaW5kZXgpOworCisgICAgICAgIENvbG9yIG9wdGlvbkJhY2tncm91bmRDb2xv
ciA9IGl0ZW1TdHlsZS5iYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgQ29sb3Igb3B0aW9uVGV4
dENvbG9yID0gaXRlbVN0eWxlLmZvcmVncm91bmRDb2xvcigpOworCisgICAgICAgIEludFJlY3Qg
aXRlbVJlY3QoMCwgeSwgYmFja2luZ1N0b3JlV2lkdGgsIGRhdGEubV9pdGVtSGVpZ2h0KTsKKwor
ICAgICAgICAvLyBEcmF3IHRoZSBiYWNrZ3JvdW5kIGZvciB0aGlzIG1lbnUgaXRlbQorICAgICAg
ICBpZiAoaXRlbVN0eWxlLmlzVmlzaWJsZSgpKSB7CisgICAgICAgICAgICBub3RTZWxlY3RlZEJh
Y2tpbmdTdG9yZUNvbnRleHQtPmZpbGxSZWN0KGl0ZW1SZWN0LCBvcHRpb25CYWNrZ3JvdW5kQ29s
b3IpOworICAgICAgICAgICAgc2VsZWN0ZWRCYWNraW5nU3RvcmVDb250ZXh0LT5maWxsUmVjdChp
dGVtUmVjdCwgYWN0aXZlT3B0aW9uQmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX3BvcHVwQ2xpZW50LT5pdGVtSXNTZXBhcmF0b3IoaW5kZXgpKSB7CisgICAgICAg
ICAgICBJbnRSZWN0IHNlcGFyYXRvclJlY3QoaXRlbVJlY3QueCgpICsgc2VwYXJhdG9yUGFkZGlu
ZywgaXRlbVJlY3QueSgpICsgKGl0ZW1SZWN0LmhlaWdodCgpIC0gc2VwYXJhdG9ySGVpZ2h0KSAv
IDIsIGl0ZW1SZWN0LndpZHRoKCkgLSAyICogc2VwYXJhdG9yUGFkZGluZywgc2VwYXJhdG9ySGVp
Z2h0KTsKKworICAgICAgICAgICAgbm90U2VsZWN0ZWRCYWNraW5nU3RvcmVDb250ZXh0LT5maWxs
UmVjdChzZXBhcmF0b3JSZWN0LCBvcHRpb25UZXh0Q29sb3IpOworICAgICAgICAgICAgc2VsZWN0
ZWRCYWNraW5nU3RvcmVDb250ZXh0LT5maWxsUmVjdChzZXBhcmF0b3JSZWN0LCBhY3RpdmVPcHRp
b25UZXh0Q29sb3IpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBTdHJpbmcgaXRlbVRleHQgPSBtX3BvcHVwQ2xpZW50LT5pdGVtVGV4dChpbmRleCk7CisKKyAg
ICAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBpdGVtVGV4dC5kZWZhdWx0V3JpdGluZ0Rp
cmVjdGlvbigpID09IFVfUklHSFRfVE9fTEVGVCA/IFJUTCA6IExUUjsKKyAgICAgICAgVGV4dFJ1
biB0ZXh0UnVuKGl0ZW1UZXh0LCAwLCAwLCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBpdGVtU3R5
bGUudGV4dERpcmVjdGlvbigpLCBpdGVtU3R5bGUuaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlKCkp
OworCisgICAgICAgIG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dC0+c2V0RmlsbENvbG9y
KG9wdGlvblRleHRDb2xvcik7CisgICAgICAgIHNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dC0+
c2V0RmlsbENvbG9yKGFjdGl2ZU9wdGlvblRleHRDb2xvcik7CisKKyAgICAgICAgYXV0byBpdGVt
Rm9udENhc2NhZGUgPSBmb250OworICAgICAgICBpZiAobV9wb3B1cENsaWVudC0+aXRlbUlzTGFi
ZWwoaW5kZXgpKSB7CisgICAgICAgICAgICBhdXRvIGQgPSBpdGVtRm9udENhc2NhZGUuZm9udERl
c2NyaXB0aW9uKCk7CisgICAgICAgICAgICBkLnNldFdlaWdodChib2xkV2VpZ2h0VmFsdWUoKSk7
CisgICAgICAgICAgICBpdGVtRm9udENhc2NhZGUgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGQpLCBp
dGVtRm9udENhc2NhZGUubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udENhc2NhZGUud29yZFNwYWNp
bmcoKSk7CisgICAgICAgICAgICBpdGVtRm9udENhc2NhZGUudXBkYXRlKG1fcG9wdXBDbGllbnQt
PmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyYXcgdGhlIGl0ZW0g
dGV4dAorICAgICAgICBpZiAoaXRlbVN0eWxlLmlzVmlzaWJsZSgpKSB7CisgICAgICAgICAgICBp
bnQgdGV4dFggPSAwOworICAgICAgICAgICAgaWYgKG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgp
LnRleHREaXJlY3Rpb24oKSA9PSBMVFIpIHsKKyAgICAgICAgICAgICAgICB0ZXh0WCA9IHN0ZDo6
bWF4PGludD4oMCwgbV9wb3B1cENsaWVudC0+Y2xpZW50UGFkZGluZ0xlZnQoKSAtIG1fcG9wdXBD
bGllbnQtPmNsaWVudEluc2V0TGVmdCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoUmVuZGVyVGhl
bWU6OnNpbmdsZXRvbigpLnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkpCisgICAgICAg
ICAgICAgICAgICAgIHRleHRYICs9IG1pbmltdW1JbnRWYWx1ZUZvckxlbmd0aChpdGVtU3R5bGUu
dGV4dEluZGVudCgpLCBpdGVtUmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdGV4dFggPSBpdGVtUmVjdC53aWR0aCgpIC0gbV9wb3B1cENsaWVudC0+
bWVudVN0eWxlKCkuZm9udCgpLndpZHRoKHRleHRSdW4pOworICAgICAgICAgICAgICAgIHRleHRY
ID0gc3RkOjptaW48aW50Pih0ZXh0WCwgdGV4dFggLSBtX3BvcHVwQ2xpZW50LT5jbGllbnRQYWRk
aW5nUmlnaHQoKSArIG1fcG9wdXBDbGllbnQtPmNsaWVudEluc2V0UmlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5wb3B1cE9wdGlvblN1cHBvcnRz
VGV4dEluZGVudCgpKQorICAgICAgICAgICAgICAgICAgICB0ZXh0WCAtPSBtaW5pbXVtSW50VmFs
dWVGb3JMZW5ndGgoaXRlbVN0eWxlLnRleHRJbmRlbnQoKSwgaXRlbVJlY3Qud2lkdGgoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgdGV4dFkgPSBpdGVtUmVjdC55KCkgKyBpdGVt
Rm9udENhc2NhZGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSArIChpdGVtUmVjdC5oZWlnaHQoKSAt
IGl0ZW1Gb250Q2FzY2FkZS5mb250TWV0cmljcygpLmhlaWdodCgpKSAvIDI7CisKKyAgICAgICAg
ICAgIG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGl0ZW1Gb250
Q2FzY2FkZSwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CisgICAgICAgICAgICBz
ZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQtPmRyYXdCaWRpVGV4dChpdGVtRm9udENhc2NhZGUs
IHRleHRSdW4sIEludFBvaW50KHRleHRYLCB0ZXh0WSkpOworICAgICAgICB9CisgICAgfQogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346198</attachid>
            <date>2018-07-31 13:30:48 -0700</date>
            <delta_ts>2018-07-31 18:40:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188172-20180731133047.patch</filename>
            <type>text/plain</type>
            <size>54692</size>
            <attacher name="Stephan Szabo">stephan.szabo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDcxM2VhNzM0MWRmMjkyMDI1
MjQ1YjBhNmIzYTVlODQ4MjllMGQyNGMuLmE4MGM2OGU5MGYxZjQ4YTMyYTE4MDEzMmQ1MzQ2NzUy
NGVmOGFhNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEgQEAKKzIwMTgtMDctMzEgIFN0ZXBoYW4g
U3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10gPHNl
bGVjdD4gZWxlbWVudHMgZG8gbm90IHBvcHVwIG9wdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODE3MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6IEFkZCBXZWJQ
b3B1cE1lbnVQcm94eVdpbgorICAgICAgICAqIFNoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybVBvcHVwTWVudURhdGE6OmVuY29kZSBjb25z
dCk6IEVuY29kZQorICAgICAgICB3aW5kb3dzIHBhcmFtZXRlcnMKKyAgICAgICAgKFdlYktpdDo6
UGxhdGZvcm1Qb3B1cE1lbnVEYXRhOjpkZWNvZGUpOiBEZWNvZGUgd2luZG93cworICAgICAgICBw
YXJhbWV0ZXJzCisgICAgICAgICogU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0YS5oOiBBZGQg
dGhlIHdpbmRvd3Mgc3BlY2lmaWMKKyAgICAgICAgcGFyYW1ldGVycyAoYmFzZWQgb24gcmVtb3Zl
ZCBXaW5kb3dzIGltcGxlbWVudGF0aW9uKQorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vUGFnZUNs
aWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9w
dXBNZW51UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlX
aW4uY3BwOiBBZGRlZC4gKGJhc2VkIG9uCisgICAgICAgIHJlbW92ZWQgV2luZG93cyBpbXBsZW1l
bnRhdGlvbiBwbHVzIHNvbWUgZml4ZXMvYXBpIGNoYW5nZXMKKyAgICAgICAgc2luY2UgdGhlIHJl
bW92YWwpCisgICAgICAgIChXZWJLaXQ6OmlzQVNDSUlQcmludGFibGUpOgorICAgICAgICAoV2Vi
S2l0Ojp0cmFuc2xhdGVQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5
V2luOjpXZWJQb3B1cE1lbnVQcm94eVduZFByb2MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1
cE1lbnVQcm94eVdpbjo6d25kUHJvYyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVBy
b3h5V2luOjpyZWdpc3RlcldpbmRvd0NsYXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBN
ZW51UHJveHlXaW46OldlYlBvcHVwTWVudVByb3h5V2luKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UG9wdXBNZW51UHJveHlXaW46On5XZWJQb3B1cE1lbnVQcm94eVdpbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzaG93UG9wdXBNZW51KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUG9wdXBNZW51UHJveHlXaW46OmhpZGVQb3B1cE1lbnUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y2FsY3VsYXRlUG9zaXRpb25BbmRTaXplKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OmNsaWVudFJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6aW52YWxpZGF0ZUl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzZXRTY3JvbGxPZmZzZXQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmlzaWJsZVNpemUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y29udGVudHNTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbGFibGVB
cmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eVdpbjo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6b25Nb3VzZUFjdGl2YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51
UHJveHlXaW46Om9uU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2lu
OjpvbktleURvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25D
aGFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Om9uTW91c2VNb3Zl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Om9uTEJ1dHRvbkRvd24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25MQnV0dG9uVXApOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25Nb3VzZVdoZWVsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Om9uUGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25QcmludENsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpkb3duKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UG9wdXBNZW51UHJveHlXaW46OnVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJv
eHlXaW46OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNl
dEZvY3VzZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjp2
aXNpYmxlSXRlbXMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdp
bjo6bGlzdEluZGV4QXRQb2ludCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVu
dVByb3h5V2luOjpmb2N1c2VkSW5kZXggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1
cE1lbnVQcm94eVdpbjo6Zm9jdXNGaXJzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVu
dVByb3h5V2luOjpmb2N1c0xhc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eVdpbjo6aW5jcmVtZW50V2hlZWxEZWx0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVu
dVByb3h5V2luOjpyZWR1Y2VXaGVlbERlbHRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBN
ZW51UHJveHlXaW46OnNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmg6IEFkZGVkLiAoYmFzZWQgb24KKyAgICAgICAg
cmVtb3ZlZCBXaW5kb3dzIGltcGxlbWVudGF0aW9uIHBsdXMgc29tZSBmaXhlcy9hcGkgY2hhbmdl
cworICAgICAgICBzaW5jZSB0aGVuKQorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94
eVdpbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Omhp
ZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsYmFyIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Oml0ZW1IZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6d2luZG93UmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjp3aGVlbERl
bHRhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNldFdh
c0NsaWNrZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6d2FzQ2xp
Y2tlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzY3Jv
bGxiYXJDYXB0dXJpbmdNb3VzZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVu
dVByb3h5V2luOjpzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YSk6IE1ha2UgdGhlIGRhdGEgdG8K
KyAgICAgICAgcGFzcyBiZXR3ZWVuIHByb2Nlc3Nlcy4KKwogMjAxOC0wNy0zMSAgUm9iIEJ1aXMg
IDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJlbW92ZSBSZXNvdXJjZVJlc3BvbnNlOjpj
YWNoZUJvZHlLZXkgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCBmZDI0NTYzOTJlYWU0
OTIyMzY1ZjFkODRiMDFkYTRiODRjMGQxYWYyLi5hY2Y2Nzc1MDc3ZGYzZjg0ZWUyNWUzYmNjNDUw
NjQ0NTIxMzE0MzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTUyLDYgKzUyLDcgQEAg
bGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBVSVByb2Nlc3Mvd2luL1dlYkNvbnRleHRN
ZW51UHJveHlXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5j
cHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAKKyAgICBVSVByb2Nlc3Mv
d2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViUHJlZmVy
ZW5jZXNXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKICAg
ICBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUGxh
dGZvcm1Qb3B1cE1lbnVEYXRhLmNwcAppbmRleCA5ZWYxMjA0Mjc4NjA4MTE3OGQxMmJiNzIxMDM0
MTM3OTA3ZDgyMGI2Li4yYzA2NjkxMzYwNmViNzMwODZjNGNlMTU5MzQ0YjkxYWE4NjE5YmQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0YS5jcHAKQEAg
LTQxLDYgKzQxLDIxIEBAIHZvaWQgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhOjplbmNvZGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgc2hvdWxkUG9wT3ZlcjsKICAg
ICBlbmNvZGVyIDw8IGhpZGVBcnJvd3M7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1lbnVTaXpl
KTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBlbmNvZGVyIDw8IG1fY2xpZW50UGFkZGluZ0xl
ZnQ7CisgICAgZW5jb2RlciA8PCBtX2NsaWVudFBhZGRpbmdSaWdodDsKKyAgICBlbmNvZGVyIDw8
IG1fY2xpZW50SW5zZXRMZWZ0OworICAgIGVuY29kZXIgPDwgbV9jbGllbnRJbnNldFJpZ2h0Owor
ICAgIGVuY29kZXIgPDwgbV9wb3B1cFdpZHRoOworICAgIGVuY29kZXIgPDwgbV9pdGVtSGVpZ2h0
OworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgbm90U2VsZWN0ZWRCYWNraW5nU3RvcmVI
YW5kbGU7CisgICAgbV9ub3RTZWxlY3RlZEJhY2tpbmdTdG9yZS0+Y3JlYXRlSGFuZGxlKG5vdFNl
bGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKTsKKyAgICBlbmNvZGVyIDw8IG5vdFNlbGVjdGVkQmFj
a2luZ1N0b3JlSGFuZGxlOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgc2VsZWN0ZWRC
YWNraW5nU3RvcmVIYW5kbGU7CisgICAgbV9zZWxlY3RlZEJhY2tpbmdTdG9yZS0+Y3JlYXRlSGFu
ZGxlKHNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKTsKKyAgICBlbmNvZGVyIDw8IHNlbGVjdGVk
QmFja2luZ1N0b3JlSGFuZGxlOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZW5jb2Rlcik7CiAj
ZW5kaWYKQEAgLTU3LDYgKzcyLDI5IEBAIGJvb2wgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhOjpkZWNv
ZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShkYXRhLm1lbnVTaXpl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoZGF0YS5tX2NsaWVudFBhZGRpbmdMZWZ0KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5tX2NsaWVudFBhZGRpbmdSaWdo
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEu
bV9jbGllbnRJbnNldExlZnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShkYXRhLm1fY2xpZW50SW5zZXRSaWdodCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEubV9wb3B1cFdpZHRoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS5tX2l0ZW1IZWlnaHQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBu
b3RTZWxlY3RlZEJhY2tpbmdTdG9yZUhhbmRsZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5v
dFNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGRhdGEubV9ub3RTZWxlY3RlZEJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
KG5vdFNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlKTsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlIHNlbGVjdGVkQmFja2luZ1N0b3JlSGFuZGxlOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc2VsZWN0ZWRCYWNraW5nU3RvcmVIYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZGF0YS5tX3NlbGVjdGVkQmFja2luZ1N0b3JlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUo
c2VsZWN0ZWRCYWNraW5nU3RvcmVIYW5kbGUpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGVj
b2Rlcik7CiAgICAgVU5VU0VEX1BBUkFNKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Q
bGF0Zm9ybVBvcHVwTWVudURhdGEuaAppbmRleCAxMzk5MWYzMzViNWQyNzNhMmIxZmNlYTBiZDg0
M2UzYTgwNDhkZDg1Li5iMjk1YTY3YzVhYzFkNzc2YmMwNDJiOTk4MjA2OWY4ZTU2ZTcwOTNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9QbGF0Zm9ybVBvcHVwTWVudURhdGEuaApAQCAtNDks
NiArNDksMTUgQEAgc3RydWN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSB7CiAgICAgYm9vbCBzaG91
bGRQb3BPdmVyOwogICAgIGJvb2wgaGlkZUFycm93czsKICAgICBXZWJDb3JlOjpQb3B1cE1lbnVT
dHlsZTo6UG9wdXBNZW51U2l6ZSBtZW51U2l6ZTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBp
bnQgbV9jbGllbnRQYWRkaW5nTGVmdCB7IDAgfTsKKyAgICBpbnQgbV9jbGllbnRQYWRkaW5nUmln
aHQgeyAwIH07CisgICAgaW50IG1fY2xpZW50SW5zZXRMZWZ0IHsgMCB9OworICAgIGludCBtX2Ns
aWVudEluc2V0UmlnaHQgeyAwIH07CisgICAgaW50IG1fcG9wdXBXaWR0aCB7IDAgfTsKKyAgICBp
bnQgbV9pdGVtSGVpZ2h0IHsgMCB9OworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fbm90
U2VsZWN0ZWRCYWNraW5nU3RvcmU7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9zZWxl
Y3RlZEJhY2tpbmdTdG9yZTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggYTczMjhhZTg5MWJkNmNhYTg3NDk3MDAy
NmM2NzAyYjIxOTQzMTI0Mi4uYWE0YWUxODFhNDhjM2YyMDU2MDI4N2EyMGY0OWFjNjVlYzViOGJm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3Bw
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJXZWJDb250ZXh0TWVudVByb3h5V2luLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlXaW4uaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMTcwLDcgKzE3MSw3IEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYg
ZXZlbnQsIGJvb2wKIAogUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6
Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlKQogewotICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y3JlYXRlKCZtX3ZpZXcs
IHBhZ2UpOwogfQogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41MjI0NTRjMTk4MDA1YzdlNDJmZWMyM2Y5MWM3NTEwZjQ3Njk2ZGRhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNw
cApAQCAtMCwwICsxLDk2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gTk9URTogVGhpcyBpbXBsZW1l
bnRhdGlvbiBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHBvcHVwcyBp
biBXZWJDb3JlOjpQb3B1cE1lbnVXaW4uCisvLyBXZSBzaG91bGQgdHJ5IGFuZCBmYWN0b3Igb3V0
IHRoZSBjb21tb24gYml0cyBhbmQgc2hhcmUgdGhlbS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5V2luLmgiCisKKyNpbmNsdWRlICJOYXRpdmVXZWJN
b3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmgiCisjaW5jbHVk
ZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvR0RJVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U2Nyb2xsYmFyVGhlbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lV2luLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KKyNpbmNsdWRlIDx3
aW5kb3dzeC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3N0YXRpYyBjb25zdCBMUENXU1RSIGtXZWJLaXQyV2ViUG9wdXBNZW51UHJveHlXaW5k
b3dDbGFzc05hbWUgPSBMIldlYktpdDJXZWJQb3B1cE1lbnVQcm94eVdpbmRvd0NsYXNzIjsKKwor
c3RhdGljIGNvbnN0ZXhwciBpbnQgZGVmYXVsdEFuaW1hdGlvbkR1cmF0aW9uID0gMjAwOworc3Rh
dGljIGNvbnN0ZXhwciBpbnQgbWF4UG9wdXBIZWlnaHQgPSAzMjA7CitzdGF0aWMgY29uc3RleHBy
IGludCBwb3B1cFdpbmRvd0JvcmRlcldpZHRoID0gMTsKK3N0YXRpYyBjb25zdGV4cHIgaW50IHNl
cGFyYXRvclBhZGRpbmcgPSA0Oworc3RhdGljIGNvbnN0ZXhwciBpbnQgc2VwYXJhdG9ySGVpZ2h0
ID0gMTsKKworLy8gVGhpcyBpcyB1c2VkIGZyb20gd2l0aGluIG91ciBjdXN0b20gbWVzc2FnZSBw
dW1wIHdoZW4gd2Ugd2FudCB0byBzZW5kIGEKKy8vIG1lc3NhZ2UgdG8gdGhlIHdlYiB2aWV3IGFu
ZCBub3QgaGF2ZSBvdXIgbWVzc2FnZSBzdG9sZW4gYW5kIHNlbnQgdG8KKy8vIHRoZSBwb3B1cCB3
aW5kb3cuCitzdGF0aWMgY29uc3RleHByIFVJTlQgV01fSE9TVF9XSU5ET1dfRklSU1QgPSBXTV9V
U0VSOworc3RhdGljIGNvbnN0ZXhwciBVSU5UIFdNX0hPU1RfV0lORE9XX0NIQVIgPSBXTV9VU0VS
ICsgV01fQ0hBUjsKK3N0YXRpYyBjb25zdGV4cHIgVUlOVCBXTV9IT1NUX1dJTkRPV19NT1VTRU1P
VkUgPSBXTV9VU0VSICsgV01fTU9VU0VNT1ZFOworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNBU0NJ
SVByaW50YWJsZSh1bnNpZ25lZCBjKQoreworICAgIHJldHVybiBjID49IDB4MjAgJiYgYyA8PSAw
eDdFOworfQorCitzdGF0aWMgdm9pZCB0cmFuc2xhdGVQb2ludChMUEFSQU0mIGxQYXJhbSwgSFdO
RCBmcm9tLCBIV05EIHRvKQoreworICAgIFBPSU5UIHB0OworICAgIHB0LnggPSBzdGF0aWNfY2Fz
dDxzaG9ydD4oR0VUX1hfTFBBUkFNKGxQYXJhbSkpOworICAgIHB0LnkgPSBzdGF0aWNfY2FzdDxz
aG9ydD4oR0VUX1lfTFBBUkFNKGxQYXJhbSkpOworICAgIDo6TWFwV2luZG93UG9pbnRzKGZyb20s
IHRvLCAmcHQsIDEpOworICAgIGxQYXJhbSA9IE1BS0VMUEFSQU0ocHQueCwgcHQueSk7Cit9CisK
K0xSRVNVTFQgQ0FMTEJBQ0sgV2ViUG9wdXBNZW51UHJveHlXaW46OldlYlBvcHVwTWVudVByb3h5
V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKK3sKKyAgICBMT05HX1BUUiBsb25nUHRyID0gOjpHZXRXaW5kb3dMb25nUHRyKGhXbmQs
IDApOworCisgICAgaWYgKFdlYlBvcHVwTWVudVByb3h5V2luKiBwb3B1cE1lbnVQcm94eSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViUG9wdXBNZW51UHJveHlXaW4qPihsb25nUHRyKSkKKyAgICAgICAg
cmV0dXJuIHBvcHVwTWVudVByb3h5LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtKTsKKworICAgIGlmIChtZXNzYWdlID09IFdNX0NSRUFURSkgeworICAgICAgICBMUENSRUFU
RVNUUlVDVCBjcmVhdGVTdHJ1Y3QgPSByZWludGVycHJldF9jYXN0PExQQ1JFQVRFU1RSVUNUPihs
UGFyYW0pOworCisgICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgV2ViVmlldyB3aXRoIHRoZSB3aW5k
b3cuCisgICAgICAgIDo6U2V0V2luZG93TG9uZ1B0cihoV25kLCAwLCAoTE9OR19QVFIpY3JlYXRl
U3RydWN0LT5scENyZWF0ZVBhcmFtcyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHJldHVybiA6OkRlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwor
fQorCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjp3bmRQcm9jKEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIExSRVNVTFQg
bFJlc3VsdCA9IDA7CisgICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsKKworICAgIHN3aXRjaCAobWVz
c2FnZSkgeworICAgIGNhc2UgV01fTU9VU0VBQ1RJVkFURToKKyAgICAgICAgbFJlc3VsdCA9IG9u
TW91c2VBY3RpdmF0ZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgbFJlc3VsdCA9IG9uU2l6
ZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV01fS0VZRE9XTjoKKyAgICAgICAgbFJlc3VsdCA9IG9uS2V5RG93bihoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV01fQ0hBUjoKKyAgICAgICAgbFJlc3VsdCA9IG9uQ2hhcihoV25kLCBtZXNzYWdlLCB3
UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fTU9V
U0VNT1ZFOgorICAgICAgICBsUmVzdWx0ID0gb25Nb3VzZU1vdmUoaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0xCVVRU
T05ET1dOOgorICAgICAgICBsUmVzdWx0ID0gb25MQnV0dG9uRG93bihoV25kLCBtZXNzYWdlLCB3
UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fTEJV
VFRPTlVQOgorICAgICAgICBsUmVzdWx0ID0gb25MQnV0dG9uVXAoaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX01PVVNF
V0hFRUw6CisgICAgICAgIGxSZXN1bHQgPSBvbk1vdXNlV2hlZWwoaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1BBSU5U
OgorICAgICAgICBsUmVzdWx0ID0gb25QYWludChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJh
bSwgaGFuZGxlZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fUFJJTlRDTElFTlQ6Cisg
ICAgICAgIGxSZXN1bHQgPSBvblByaW50Q2xpZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtLCBoYW5kbGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaGFu
ZGxlZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWhhbmRsZWQp
CisgICAgICAgIGxSZXN1bHQgPSA6OkRlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0pOworCisgICAgcmV0dXJuIGxSZXN1bHQ7Cit9CisKK2Jvb2wgV2ViUG9wdXBNZW51
UHJveHlXaW46OnJlZ2lzdGVyV2luZG93Q2xhc3MoKQoreworICAgIHN0YXRpYyBib29sIGhhdmVS
ZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5k
b3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dD
bGFzcyA9IHRydWU7CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgICAg
ICAgICA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1Nf
RFJPUFNIQURPVzsKKyAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gV2ViUG9wdXBNZW51UHJveHlX
aW46OldlYlBvcHVwTWVudVByb3h5V25kUHJvYzsKKyAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0g
MDsKKyAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gc2l6ZW9mKFdlYlBvcHVwTWVudVByb3h5V2lu
Kik7CisgICAgd2NleC5oSW5zdGFuY2UgICAgICA9IGluc3RhbmNlSGFuZGxlKCk7CisgICAgd2Nl
eC5oSWNvbiAgICAgICAgICA9IDA7CisgICAgd2NleC5oQ3Vyc29yICAgICAgICA9IDo6TG9hZEN1
cnNvcigwLCBJRENfQVJST1cpOworICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAwOworICAgIHdj
ZXgubHBzek1lbnVOYW1lICAgPSAwOworICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBrV2ViS2l0
MldlYlBvcHVwTWVudVByb3h5V2luZG93Q2xhc3NOYW1lOworICAgIHdjZXguaEljb25TbSAgICAg
ICAgPSAwOworCisgICAgcmV0dXJuICEhOjpSZWdpc3RlckNsYXNzRXgoJndjZXgpOworfQorCitX
ZWJQb3B1cE1lbnVQcm94eVdpbjo6V2ViUG9wdXBNZW51UHJveHlXaW4oV2ViVmlldyogd2ViVmll
dywgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudCYgY2xpZW50KQorICAgIDogV2ViUG9wdXBNZW51
UHJveHkoY2xpZW50KQorICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCit7Cit9CisKK1dlYlBvcHVw
TWVudVByb3h5V2luOjp+V2ViUG9wdXBNZW51UHJveHlXaW4oKQoreworICAgIGlmIChtX3BvcHVw
KQorICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9wb3B1cCk7CisgICAgaWYgKG1fc2Nyb2xsYmFy
KQorICAgICAgICBtX3Njcm9sbGJhci0+c2V0UGFyZW50KDApOworfQorCit2b2lkIFdlYlBvcHVw
TWVudVByb3h5V2luOjpzaG93UG9wdXBNZW51KGNvbnN0IEludFJlY3QmIHJlY3QsIFRleHREaXJl
Y3Rpb24sIGRvdWJsZSBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFZlY3RvcjxXZWJQb3B1cEl0ZW0+
JiBpdGVtcywgY29uc3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhJiBkYXRhLCBpbnQzMl90IHNlbGVj
dGVkSW5kZXgpCit7CisgICAgbV9pdGVtcyA9IGl0ZW1zOworICAgIG1fZGF0YSA9IGRhdGE7Cisg
ICAgbV9uZXdTZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRJbmRleDsKKyAgICBtX3NjYWxlRmFjdG9y
ID0gcGFnZVNjYWxlRmFjdG9yOworCisgICAgY2FsY3VsYXRlUG9zaXRpb25BbmRTaXplKHJlY3Qp
OworICAgIGlmIChjbGllbnRSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBIV05EIGhvc3RXaW5kb3cgPSBtX3dlYlZpZXctPndpbmRvdygpOworCisgICAgaWYgKCFtX3Nj
cm9sbGJhciAmJiB2aXNpYmxlSXRlbXMoKSA8IG1faXRlbXMuc2l6ZSgpKSB7CisgICAgICAgIG1f
c2Nyb2xsYmFyID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIFZlcnRp
Y2FsU2Nyb2xsYmFyLCBTbWFsbFNjcm9sbGJhcik7CisgICAgICAgIG1fc2Nyb2xsYmFyLT5zdHls
ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBpZiAoIW1fcG9wdXApIHsKKyAgICAgICAgcmVnaXN0
ZXJXaW5kb3dDbGFzcygpOworCisgICAgICAgIERXT1JEIGV4U3R5bGUgPSBXU19FWF9MVFJSRUFE
SU5HOworCisgICAgICAgIG1fcG9wdXAgPSA6OkNyZWF0ZVdpbmRvd0V4KGV4U3R5bGUsIGtXZWJL
aXQyV2ViUG9wdXBNZW51UHJveHlXaW5kb3dDbGFzc05hbWUsIFRFWFQoIlBvcHVwTWVudSIpLAor
ICAgICAgICAgICAgV1NfUE9QVVAgfCBXU19CT1JERVIsCisgICAgICAgICAgICBtX3dpbmRvd1Jl
Y3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dS
ZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgaG9zdFdpbmRvdywgMCwgaW5zdGFuY2VIYW5kbGUo
KSwgdGhpcyk7CisKKyAgICAgICAgaWYgKCFtX3BvcHVwKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEJPT0wgc2hvdWxkQW5pbWF0ZSA9IEZBTFNFOworCisgICAgaWYgKHNlbGVj
dGVkSW5kZXggPiAwKQorICAgICAgICBzZXRGb2N1c2VkSW5kZXgoc2VsZWN0ZWRJbmRleCk7CisK
KyAgICBpZiAoITo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVENPTUJPQk9YQU5JTUFUSU9O
LCAwLCAmc2hvdWxkQW5pbWF0ZSwgMCkpCisgICAgICAgIHNob3VsZEFuaW1hdGUgPSBGQUxTRTsK
KworICAgIGlmIChzaG91bGRBbmltYXRlKSB7CisgICAgICAgIFJFQ1Qgdmlld1JlY3QgPSB7MH07
CisgICAgICAgIDo6R2V0V2luZG93UmVjdChob3N0V2luZG93LCAmdmlld1JlY3QpOworCisgICAg
ICAgIGlmICghOjpJc1JlY3RFbXB0eSgmdmlld1JlY3QpKSB7CisgICAgICAgICAgICAvLyBQb3B1
cHMgc2hvdWxkIHNsaWRlIGludG8gdmlldyBhd2F5IGZyb20gdGhlIDxzZWxlY3Q+IGJveAorICAg
ICAgICAgICAgLy8gTk9URTogVGhpcyBtYXkgaGF2ZSB0byBjaGFuZ2UgZm9yIFZpc3RhCisgICAg
ICAgICAgICBEV09SRCBzbGlkZURpcmVjdGlvbiA9IChtX3dpbmRvd1JlY3QueSgpIDwgdmlld1Jl
Y3QudG9wICsgcmVjdC5sb2NhdGlvbigpLnkoKSkgPyBBV19WRVJfTkVHQVRJVkUgOiBBV19WRVJf
UE9TSVRJVkU7CisKKyAgICAgICAgICAgIDo6QW5pbWF0ZVdpbmRvdyhtX3BvcHVwLCBkZWZhdWx0
QW5pbWF0aW9uRHVyYXRpb24sIEFXX1NMSURFIHwgc2xpZGVEaXJlY3Rpb24pOworICAgICAgICB9
CisgICAgfSBlbHNlCisgICAgICAgIDo6U2hvd1dpbmRvdyhtX3BvcHVwLCBTV19TSE9XTk9BQ1RJ
VkFURSk7CisKKyAgICBtX3Nob3dQb3B1cCA9IHRydWU7CisKKyAgICAvLyBQcm90ZWN0IHRoZSBw
b3B1cCBtZW51IGluIGNhc2UgaXRzIG93bmVyIGlzIGRlc3Ryb3llZCB3aGlsZSB3ZSdyZSBydW5u
aW5nIHRoZSBtZXNzYWdlIHB1bXAuCisgICAgUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5V2luPiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOworCisgICAgOjpTZXRDYXB0dXJlKGhvc3RXaW5kb3cpOworCisg
ICAgTVNHIG1zZzsKKyAgICBIV05EIGFjdGl2ZVdpbmRvdzsKKworICAgIHdoaWxlICg6OkdldE1l
c3NhZ2UoJm1zZywgMCwgMCwgMCkpIHsKKyAgICAgICAgc3dpdGNoIChtc2cubWVzc2FnZSkgewor
ICAgICAgICBjYXNlIFdNX0hPU1RfV0lORE9XX01PVVNFTU9WRToKKyAgICAgICAgY2FzZSBXTV9I
T1NUX1dJTkRPV19DSEFSOiAKKyAgICAgICAgICAgIGlmIChtc2cuaHduZCA9PSBtX3BvcHVwKSB7
CisgICAgICAgICAgICAgICAgLy8gVGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW50IHRvIHRoZSBo
b3N0IHdpbmRvdy4KKyAgICAgICAgICAgICAgICBtc2cuaHduZCA9IGhvc3RXaW5kb3c7CisgICAg
ICAgICAgICAgICAgbXNnLm1lc3NhZ2UgLT0gV01fSE9TVF9XSU5ET1dfRklSU1Q7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBTdGVhbCBtb3VzZSBtZXNz
YWdlcy4KKyAgICAgICAgY2FzZSBXTV9OQ01PVVNFTU9WRToKKyAgICAgICAgY2FzZSBXTV9OQ0xC
VVRUT05ET1dOOgorICAgICAgICBjYXNlIFdNX05DTEJVVFRPTlVQOgorICAgICAgICBjYXNlIFdN
X05DTEJVVFRPTkRCTENMSzoKKyAgICAgICAgY2FzZSBXTV9OQ1JCVVRUT05ET1dOOgorICAgICAg
ICBjYXNlIFdNX05DUkJVVFRPTlVQOgorICAgICAgICBjYXNlIFdNX05DUkJVVFRPTkRCTENMSzoK
KyAgICAgICAgY2FzZSBXTV9OQ01CVVRUT05ET1dOOgorICAgICAgICBjYXNlIFdNX05DTUJVVFRP
TlVQOgorICAgICAgICBjYXNlIFdNX05DTUJVVFRPTkRCTENMSzoKKyAgICAgICAgY2FzZSBXTV9N
T1VTRVdIRUVMOgorICAgICAgICAgICAgbXNnLmh3bmQgPSBtX3BvcHVwOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgLy8gVGhlc2UgbW91c2UgbWVzc2FnZXMgdXNlIGNsaWVudCBjb29y
ZGluYXRlcyBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlbS4KKyAgICAgICAgY2FzZSBXTV9NT1VT
RU1PVkU6CisgICAgICAgIGNhc2UgV01fTEJVVFRPTkRPV046CisgICAgICAgIGNhc2UgV01fTEJV
VFRPTlVQOgorICAgICAgICBjYXNlIFdNX0xCVVRUT05EQkxDTEs6CisgICAgICAgIGNhc2UgV01f
UkJVVFRPTkRPV046CisgICAgICAgIGNhc2UgV01fUkJVVFRPTlVQOgorICAgICAgICBjYXNlIFdN
X1JCVVRUT05EQkxDTEs6CisgICAgICAgIGNhc2UgV01fTUJVVFRPTkRPV046CisgICAgICAgIGNh
c2UgV01fTUJVVFRPTlVQOgorICAgICAgICBjYXNlIFdNX01CVVRUT05EQkxDTEs6IHsKKyAgICAg
ICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29vcmRpbmF0ZS4KKyAgICAgICAgICAgIHRyYW5zbGF0
ZVBvaW50KG1zZy5sUGFyYW0sIG1zZy5od25kLCBtX3BvcHVwKTsKKyAgICAgICAgICAgIG1zZy5o
d25kID0gbV9wb3B1cDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gU3RlYWwgYWxsIGtleWJvYXJkIG1lc3NhZ2VzLgorICAgICAgICBjYXNlIFdNX0tFWURPV046
CisgICAgICAgIGNhc2UgV01fS0VZVVA6CisgICAgICAgIGNhc2UgV01fQ0hBUjoKKyAgICAgICAg
Y2FzZSBXTV9ERUFEQ0hBUjoKKyAgICAgICAgY2FzZSBXTV9TWVNLRVlVUDoKKyAgICAgICAgY2Fz
ZSBXTV9TWVNDSEFSOgorICAgICAgICBjYXNlIFdNX1NZU0RFQURDSEFSOgorICAgICAgICAgICAg
bXNnLmh3bmQgPSBtX3BvcHVwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICA6OlRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CisgICAgICAgIDo6RGlzcGF0Y2hNZXNzYWdl
KCZtc2cpOworCisgICAgICAgIGlmICghbV9zaG93UG9wdXApCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgYWN0aXZlV2luZG93ID0gOjpHZXRBY3RpdmVXaW5kb3coKTsKKyAgICAgICAgaWYg
KGFjdGl2ZVdpbmRvdyAhPSBob3N0V2luZG93ICYmICE6OklzQ2hpbGQoYWN0aXZlV2luZG93LCBo
b3N0V2luZG93KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoOjpHZXRDYXB0dXJl
KCkgIT0gaG9zdFdpbmRvdykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICg6
OkdldENhcHR1cmUoKSA9PSBob3N0V2luZG93KQorICAgICAgICA6OlJlbGVhc2VDYXB0dXJlKCk7
CisKKyAgICBtX3Nob3dQb3B1cCA9IGZhbHNlOworICAgIDo6U2hvd1dpbmRvdyhtX3BvcHVwLCBT
V19ISURFKTsKKworICAgIGlmICghV2ViUG9wdXBNZW51UHJveHk6Om1fY2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBXZWJQb3B1cE1lbnVQcm94eTo6bV9jbGllbnQtPnZhbHVlQ2hhbmdl
ZEZvclBvcHVwTWVudSh0aGlzLCBtX25ld1NlbGVjdGVkSW5kZXgpOworCisgICAgLy8gPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzkwND4gSW4gb3JkZXIgdG8gcHJv
cGVybHkgY2FsbCB0aGUgb25DbGljaygpCisgICAgLy8gaGFuZGxlciBvbiBhIDxzZWxlY3Q+IGVs
ZW1lbnQsIHdlIG5lZWQgdG8gZmFrZSBhIG1vdXNlIHVwIGV2ZW50IGluIHRoZSBtYWluIHdpbmRv
dy4KKyAgICAvLyBUaGUgbWFpbiB3aW5kb3cgYWxyZWFkeSByZWNlaXZlZCB0aGUgbW91c2UgZG93
biwgd2hpY2ggc2hvd2VkIHRoaXMgcG9wdXAsIGJ1dCB1cG9uCisgICAgLy8gc2VsZWN0aW9uIG9m
IGFuIGl0ZW0gdGhlIG1vdXNlIHVwIGdldHMgZWF0ZW4gYnkgdGhlIHBvcHVwIG1lbnUuIFNvIHdl
IHRha2UgdGhlIG1vdXNlIGRvd24KKyAgICAvLyBldmVudCwgY2hhbmdlIHRoZSBtZXNzYWdlIHR5
cGUgdG8gYSBtb3VzZSB1cCBldmVudCwgYW5kIHBvc3QgdGhhdCBpbiB0aGUgbWVzc2FnZSBxdWV1
ZS4KKyAgICAvLyBUaHVzLCB3ZSBhcmUgdmlydHVhbGx5IGNsaWNraW5nIGF0IHRoZQorICAgIC8v
IHNhbWUgbG9jYXRpb24gd2hlcmUgdGhlIG1vdXNlIGRvd24gZXZlbnQgb2NjdXJyZWQuIFRoaXMg
YWxsb3dzIHRoZSBoaXQgdGVzdCB0byBzZWxlY3QKKyAgICAvLyB0aGUgY29ycmVjdCBlbGVtZW50
LCBhbmQgdGhlcmVieSBjYWxsIHRoZSBvbkNsaWNrKCkgSlMgaGFuZGxlci4KKyAgICBpZiAoIVdl
YlBvcHVwTWVudVByb3h5OjptX2NsaWVudC0+Y3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgTVNHKiBpbml0aWF0aW5nV2luRXZl
bnQgPSBXZWJQb3B1cE1lbnVQcm94eTo6bV9jbGllbnQtPmN1cnJlbnRseVByb2Nlc3NlZE1vdXNl
RG93bkV2ZW50KCktPm5hdGl2ZUV2ZW50KCk7CisgICAgTVNHIGZha2VFdmVudCA9ICppbml0aWF0
aW5nV2luRXZlbnQ7CisgICAgZmFrZUV2ZW50Lm1lc3NhZ2UgPSBXTV9MQlVUVE9OVVA7CisgICAg
OjpQb3N0TWVzc2FnZShmYWtlRXZlbnQuaHduZCwgZmFrZUV2ZW50Lm1lc3NhZ2UsIGZha2VFdmVu
dC53UGFyYW0sIGZha2VFdmVudC5sUGFyYW0pOworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5
V2luOjpoaWRlUG9wdXBNZW51KCkKK3sKKyAgICBpZiAoIW1fc2hvd1BvcHVwKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zaG93UG9wdXAgPSBmYWxzZTsKKworICAgIDo6U2hvd1dpbmRvdyhtX3Bv
cHVwLCBTV19ISURFKTsKKworICAgIC8vIFBvc3QgYSBXTV9OVUxMIG1lc3NhZ2UgdG8gd2FrZSB1
cCB0aGUgbWVzc2FnZSBwdW1wIGlmIG5lY2Vzc2FyeS4KKyAgICA6OlBvc3RNZXNzYWdlKG1fcG9w
dXAsIFdNX05VTEwsIDAsIDApOworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpjYWxj
dWxhdGVQb3NpdGlvbkFuZFNpemUoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0
IHJlY3RJblNjcmVlbkNvb3JkcyhyZWN0KTsKKyAgICByZWN0SW5TY3JlZW5Db29yZHMuc2NhbGUo
bV9zY2FsZUZhY3Rvcik7CisKKyAgICBQT0lOVCBsb2NhdGlvbihyZWN0SW5TY3JlZW5Db29yZHMg
LmxvY2F0aW9uKCkpOworICAgIGlmICghOjpDbGllbnRUb1NjcmVlbihtX3dlYlZpZXctPndpbmRv
dygpLCAmbG9jYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAgcmVjdEluU2NyZWVuQ29vcmRz
LnNldExvY2F0aW9uKGxvY2F0aW9uKTsKKworICAgIGludCBpdGVtQ291bnQgPSBtX2l0ZW1zLnNp
emUoKTsKKyAgICBtX2l0ZW1IZWlnaHQgPSBtX2RhdGEubV9pdGVtSGVpZ2h0OworCisgICAgaW50
IG5hdHVyYWxIZWlnaHQgPSBtX2l0ZW1IZWlnaHQgKiBpdGVtQ291bnQ7CisgICAgaW50IHBvcHVw
SGVpZ2h0ID0gc3RkOjptaW4obWF4UG9wdXBIZWlnaHQsIG5hdHVyYWxIZWlnaHQpOworCisgICAg
Ly8gVGhlIHBvcHVwIHNob3VsZCBzaG93IGFuIGludGVncmFsIG51bWJlciBvZiBpdGVtcyAoaS5l
LiBubyBwYXJ0aWFsIGl0ZW1zIHNob3VsZCBiZSB2aXNpYmxlKQorICAgIHBvcHVwSGVpZ2h0IC09
IHBvcHVwSGVpZ2h0ICUgbV9pdGVtSGVpZ2h0OworCisgICAgLy8gTmV4dCBkZXRlcm1pbmUgaXRz
IHdpZHRoCisgICAgaW50IHBvcHVwV2lkdGggPSBtX2RhdGEubV9wb3B1cFdpZHRoOworCisgICAg
aWYgKG5hdHVyYWxIZWlnaHQgPiBtYXhQb3B1cEhlaWdodCkgeworICAgICAgICAvLyBXZSBuZWVk
IHJvb20gZm9yIGEgc2Nyb2xsYmFyCisgICAgICAgIHBvcHVwV2lkdGggKz0gU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKFNtYWxsU2Nyb2xsYmFyKTsKKyAgICB9CisK
KyAgICBwb3B1cEhlaWdodCArPSAyICogcG9wdXBXaW5kb3dCb3JkZXJXaWR0aDsKKworICAgIC8v
IFRoZSBwb3B1cCBzaG91bGQgYmUgYXQgbGVhc3QgYXMgd2lkZSBhcyB0aGUgY29udHJvbCBvbiB0
aGUgcGFnZQorICAgIHBvcHVwV2lkdGggPSBzdGQ6Om1heChyZWN0SW5TY3JlZW5Db29yZHMud2lk
dGgoKSAtIG1fZGF0YS5tX2NsaWVudEluc2V0TGVmdCAtIG1fZGF0YS5tX2NsaWVudEluc2V0Umln
aHQsIHBvcHVwV2lkdGgpOworCisgICAgLy8gQWx3YXlzIGxlZnQtYWxpZ24gaXRlbXMgaW4gdGhl
IHBvcHVwLiBUaGlzIG1hdGNoZXMgcG9wdXAgbWVudXMgb24gdGhlIG1hYy4KKyAgICBpbnQgcG9w
dXBYID0gcmVjdEluU2NyZWVuQ29vcmRzLngoKSArIG1fZGF0YS5tX2NsaWVudEluc2V0TGVmdDsK
KworICAgIEludFJlY3QgcG9wdXBSZWN0KHBvcHVwWCwgcmVjdEluU2NyZWVuQ29vcmRzLm1heFko
KSwgcG9wdXBXaWR0aCwgcG9wdXBIZWlnaHQpOworCisgICAgLy8gVGhlIHBvcHVwIG5lZWRzIHRv
IHN0YXkgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHNjcmVlbiBhbmQgbm90IG92ZXJsYXAgYW55
IHRvb2xiYXJzCisgICAgSE1PTklUT1IgbW9uaXRvciA9IDo6TW9uaXRvckZyb21XaW5kb3cobV93
ZWJWaWV3LT53aW5kb3coKSwgTU9OSVRPUl9ERUZBVUxUVE9QUklNQVJZKTsKKyAgICBNT05JVE9S
SU5GT0VYIG1vbml0b3JJbmZvOworICAgIG1vbml0b3JJbmZvLmNiU2l6ZSA9IHNpemVvZihNT05J
VE9SSU5GT0VYKTsKKyAgICA6OkdldE1vbml0b3JJbmZvKG1vbml0b3IsICZtb25pdG9ySW5mbyk7
CisgICAgRmxvYXRSZWN0IHNjcmVlbiA9IHN0YXRpY19jYXN0PEludFJlY3Q+KG1vbml0b3JJbmZv
LnJjV29yayk7CisKKyAgICAvLyBDaGVjayB0aGF0IHdlIGRvbid0IGdvIG9mZiB0aGUgc2NyZWVu
IHZlcnRpY2FsbHkKKyAgICBpZiAocG9wdXBSZWN0Lm1heFkoKSA+IHNjcmVlbi5oZWlnaHQoKSkg
eworICAgICAgICAvLyBUaGUgcG9wdXAgd2lsbCBnbyBvZmYgdGhlIHNjcmVlbiwgc28gdHJ5IHBs
YWNpbmcgaXQgYWJvdmUgdGhlIGNsaWVudAorICAgICAgICBpZiAocmVjdEluU2NyZWVuQ29vcmRz
LnkoKSAtIHBvcHVwUmVjdC5oZWlnaHQoKSA8IDApIHsKKyAgICAgICAgICAgIC8vIFRoZSBwb3B1
cCB3b24ndCBmaXQgYWJvdmUsIGVpdGhlciwgc28gcGxhY2UgaXQgd2hlcmVldmVyJ3MgYmlnZ2Vy
IGFuZCByZXNpemUgaXQgdG8gZml0CisgICAgICAgICAgICBpZiAoKHJlY3RJblNjcmVlbkNvb3Jk
cy55KCkgKyByZWN0SW5TY3JlZW5Db29yZHMuaGVpZ2h0KCkgLyAyKSA8IChzY3JlZW4uaGVpZ2h0
KCkgLyAyKSkgeworICAgICAgICAgICAgICAgIC8vIEJlbG93IGlzIGJpZ2dlcgorICAgICAgICAg
ICAgICAgIHBvcHVwUmVjdC5zZXRIZWlnaHQoc2NyZWVuLmhlaWdodCgpIC0gcG9wdXBSZWN0Lnko
KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEFib3ZlIGlzIGJp
Z2dlcgorICAgICAgICAgICAgICAgIHBvcHVwUmVjdC5zZXRZKDApOworICAgICAgICAgICAgICAg
IHBvcHVwUmVjdC5zZXRIZWlnaHQocmVjdEluU2NyZWVuQ29vcmRzLnkoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgcG9wdXAgZml0cyBhYm92
ZSwgc28gcmVwb3NpdGlvbiBpdAorICAgICAgICAgICAgcG9wdXBSZWN0LnNldFkocmVjdEluU2Ny
ZWVuQ29vcmRzLnkoKSAtIHBvcHVwUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBDaGVjayB0aGF0IHdlIGRvbid0IGdvIG9mZiB0aGUgc2NyZWVuIGhvcml6b250YWxs
eQorICAgIGlmIChwb3B1cFJlY3QueCgpIDwgc2NyZWVuLngoKSkgeworICAgICAgICBwb3B1cFJl
Y3Quc2V0V2lkdGgocG9wdXBSZWN0LndpZHRoKCkgLSAoc2NyZWVuLngoKSAtIHBvcHVwUmVjdC54
KCkpKTsKKyAgICAgICAgcG9wdXBSZWN0LnNldFgoc2NyZWVuLngoKSk7CisgICAgfQorCisgICAg
bV93aW5kb3dSZWN0ID0gcG9wdXBSZWN0OworfQorCitJbnRSZWN0IFdlYlBvcHVwTWVudVByb3h5
V2luOjpjbGllbnRSZWN0KCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGNsaWVudFJlY3QgPSBtX3dp
bmRvd1JlY3Q7CisgICAgY2xpZW50UmVjdC5pbmZsYXRlKC1wb3B1cFdpbmRvd0JvcmRlcldpZHRo
KTsKKyAgICBjbGllbnRSZWN0LnNldExvY2F0aW9uKEludFBvaW50KDAsIDApKTsKKyAgICByZXR1
cm4gY2xpZW50UmVjdDsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6aW52YWxpZGF0
ZUl0ZW0oaW50IGluZGV4KQoreworICAgIGlmICghbV9wb3B1cCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgSW50UmVjdCBkYW1hZ2VSZWN0KGNsaWVudFJlY3QoKSk7CisgICAgZGFtYWdlUmVjdC5z
ZXRZKG1faXRlbUhlaWdodCAqIChpbmRleCAtIG1fc2Nyb2xsT2Zmc2V0KSk7CisgICAgZGFtYWdl
UmVjdC5zZXRIZWlnaHQobV9pdGVtSGVpZ2h0KTsKKyAgICBpZiAobV9zY3JvbGxiYXIpCisgICAg
ICAgIGRhbWFnZVJlY3Quc2V0V2lkdGgoZGFtYWdlUmVjdC53aWR0aCgpIC0gbV9zY3JvbGxiYXIt
PmZyYW1lUmVjdCgpLndpZHRoKCkpOworCisgICAgUkVDVCByID0gZGFtYWdlUmVjdDsKKyAgICA6
OkludmFsaWRhdGVSZWN0KG1fcG9wdXAsICZyLCBUUlVFKTsKK30KKworaW50IFdlYlBvcHVwTWVu
dVByb3h5V2luOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBj
b25zdAoreworICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSAm
JiBtX3Njcm9sbGJhcikgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gbV9zY3JvbGxiYXIt
PnZpc2libGVTaXplKCkpIDogMDsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgc2Nyb2xsVG8ob2Zm
c2V0LnkoKSk7Cit9CisKK0ludFNpemUgV2ViUG9wdXBNZW51UHJveHlXaW46OnZpc2libGVTaXpl
KCkgY29uc3QKK3sKKyAgICBpbnQgc2Nyb2xsYmFyV2lkdGggPSBtX3Njcm9sbGJhciA/IG1fc2Ny
b2xsYmFyLT5mcmFtZVJlY3QoKS53aWR0aCgpIDogMDsKKyAgICByZXR1cm4gSW50U2l6ZShjb250
ZW50c1NpemUoKS53aWR0aCgpIC0gc2Nyb2xsYmFyV2lkdGgsIG1fc2Nyb2xsYmFyID8gbV9zY3Jv
bGxiYXItPnZpc2libGVTaXplKCkgOiBjb250ZW50c1NpemUoKS5oZWlnaHQoKSk7Cit9CisKK1dl
YkNvcmU6OkludFNpemUgV2ViUG9wdXBNZW51UHJveHlXaW46OmNvbnRlbnRzU2l6ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEludFNpemUobV93aW5kb3dSZWN0LndpZHRoKCksIG1fc2Nyb2xsYmFy
ID8gbV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIDogbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKK30K
KworV2ViQ29yZTo6SW50UmVjdCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsYWJsZUFyZWFC
b3VuZGluZ0JveChib29sKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV93aW5kb3dSZWN0OworfQor
Cit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUbyhpbnQgb2Zmc2V0KQoreworICAg
IEFTU0VSVChtX3Njcm9sbGJhcik7CisKKyAgICBpZiAoIW1fcG9wdXApCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX3Njcm9sbE9mZnNldCA9PSBvZmZzZXQpCisgICAgICAgIHJldHVybjsK
KworICAgIGludCBzY3JvbGxlZExpbmVzID0gbV9zY3JvbGxPZmZzZXQgLSBvZmZzZXQ7CisgICAg
bV9zY3JvbGxPZmZzZXQgPSBvZmZzZXQ7CisKKyAgICBVSU5UIGZsYWdzID0gU1dfSU5WQUxJREFU
RTsKKworI2lmZGVmIENBTl9TRVRfU01PT1RIX1NDUk9MTElOR19EVVJBVElPTgorICAgIEJPT0wg
c2hvdWxkU21vb3RoU2Nyb2xsID0gRkFMU0U7CisgICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhT
UElfR0VUTElTVEJPWFNNT09USFNDUk9MTElORywgMCwgJnNob3VsZFNtb290aFNjcm9sbCwgMCk7
CisgICAgaWYgKHNob3VsZFNtb290aFNjcm9sbCkKKyAgICAgICAgZmxhZ3MgfD0gTUFLRVdPUkQo
U1dfU01PT1RIU0NST0xMLCBzbW9vdGhTY3JvbGxBbmltYXRpb25EdXJhdGlvbik7CisjZW5kaWYK
KworICAgIEludFJlY3QgbGlzdFJlY3QgPSBjbGllbnRSZWN0KCk7CisgICAgaWYgKG1fc2Nyb2xs
YmFyKQorICAgICAgICBsaXN0UmVjdC5zZXRXaWR0aChsaXN0UmVjdC53aWR0aCgpIC0gbV9zY3Jv
bGxiYXItPmZyYW1lUmVjdCgpLndpZHRoKCkpOworICAgIFJFQ1QgciA9IGxpc3RSZWN0OworICAg
IDo6U2Nyb2xsV2luZG93RXgobV9wb3B1cCwgMCwgc2Nyb2xsZWRMaW5lcyAqIG1faXRlbUhlaWdo
dCwgJnIsIDAsIDAsIDAsIGZsYWdzKTsKKyAgICBpZiAobV9zY3JvbGxiYXIpIHsKKyAgICAgICAg
ciA9IG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgOjpJbnZhbGlkYXRlUmVjdCht
X3BvcHVwLCAmciwgVFJVRSk7CisgICAgfQorICAgIDo6VXBkYXRlV2luZG93KG1fcG9wdXApOwor
fQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChT
Y3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0
IHNjcm9sbFJlY3QgPSByZWN0OworICAgIHNjcm9sbFJlY3QubW92ZShzY3JvbGxiYXIueCgpLCBz
Y3JvbGxiYXIueSgpKTsKKyAgICBSRUNUIHIgPSBzY3JvbGxSZWN0OworICAgIDo6SW52YWxpZGF0
ZVJlY3QobV9wb3B1cCwgJnIsIGZhbHNlKTsKK30KKworLy8gTWVzc2FnZSBwdW1wIG1lc3NhZ2Vz
LgorCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvbk1vdXNlQWN0aXZhdGUoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKQoreworICAg
IGhhbmRsZWQgPSB0cnVlOworICAgIHJldHVybiBNQV9OT0FDVElWQVRFOworfQorCitMUkVTVUxU
IFdlYlBvcHVwTWVudVByb3h5V2luOjpvblNpemUoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5kbGVkID0gdHJ1
ZTsKKyAgICBpZiAoIXNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEludFNp
emUgc2l6ZShMT1dPUkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSkpOworICAgIHNjcm9sbGJhcigp
LT5zZXRGcmFtZVJlY3QoSW50UmVjdChzaXplLndpZHRoKCkgLSBzY3JvbGxiYXIoKS0+d2lkdGgo
KSwgMCwgc2Nyb2xsYmFyKCktPndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKworICAgIGludCB2
aXNpYmxlSXRlbXMgPSB0aGlzLT52aXNpYmxlSXRlbXMoKTsKKyAgICBzY3JvbGxiYXIoKS0+c2V0
RW5hYmxlZCh2aXNpYmxlSXRlbXMgPCBtX2l0ZW1zLnNpemUoKSk7CisgICAgc2Nyb2xsYmFyKCkt
PnNldFN0ZXBzKDEsIHN0ZDo6bWF4KDEsIHZpc2libGVJdGVtcyAtIDEpKTsKKyAgICBzY3JvbGxi
YXIoKS0+c2V0UHJvcG9ydGlvbih2aXNpYmxlSXRlbXMsIG1faXRlbXMuc2l6ZSgpKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25LZXlEb3duKEhX
TkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29s
JiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSB0cnVlOworCisgICAgTFJFU1VMVCBsUmVzdWx0
ID0gMDsKKyAgICBzd2l0Y2ggKExPV09SRCh3UGFyYW0pKSB7CisgICAgY2FzZSBWS19ET1dOOgor
ICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgIGRvd24oKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBWS19VUDoKKyAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgIHVwKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgVktfSE9NRToKKyAgICAgICAgZm9jdXNGaXJzdCgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFZLX0VORDoKKyAgICAgICAgZm9jdXNMYXN0KCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgVktfUFJJT1I6CisgICAgICAgIGlmIChmb2N1c2VkSW5kZXgoKSAhPSBz
Y3JvbGxPZmZzZXQoVmVydGljYWxTY3JvbGxiYXIpKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhl
IHNlbGVjdGlvbiB0byB0aGUgZmlyc3QgdmlzaWJsZSBpdGVtCisgICAgICAgICAgICBpbnQgZmly
c3RWaXNpYmxlSXRlbSA9IHNjcm9sbE9mZnNldChWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAg
ICAgICB1cChmb2N1c2VkSW5kZXgoKSAtIGZpcnN0VmlzaWJsZUl0ZW0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHZpc2libGUgaXRlbSBpcyBzZWxlY3RlZCwg
c28gbW92ZSB0aGUgc2VsZWN0aW9uIGJhY2sgb25lIHBhZ2UKKyAgICAgICAgICAgIHVwKHZpc2li
bGVJdGVtcygpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX05FWFQ6
IHsKKyAgICAgICAgaW50IGxhc3RWaXNpYmxlSXRlbSA9IHNjcm9sbE9mZnNldChWZXJ0aWNhbFNj
cm9sbGJhcikgKyB2aXNpYmxlSXRlbXMoKSAtIDE7CisgICAgICAgIGlmIChmb2N1c2VkSW5kZXgo
KSAhPSBsYXN0VmlzaWJsZUl0ZW0pIHsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgc2VsZWN0aW9u
IHRvIHRoZSBsYXN0IHZpc2libGUgaXRlbQorICAgICAgICAgICAgZG93bihsYXN0VmlzaWJsZUl0
ZW0gLSBmb2N1c2VkSW5kZXgoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBU
aGUgbGFzdCB2aXNpYmxlIGl0ZW0gaXMgc2VsZWN0ZWQsIHNvIG1vdmUgdGhlIHNlbGVjdGlvbiBm
b3J3YXJkIG9uZSBwYWdlCisgICAgICAgICAgICBkb3duKHZpc2libGVJdGVtcygpKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBWS19UQUI6CisgICAgICAgIDo6
U2VuZE1lc3NhZ2UobV93ZWJWaWV3LT53aW5kb3coKSwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0p
OworICAgICAgICBoaWRlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfRVNDQVBFOgor
ICAgICAgICBoaWRlKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlm
IChpc0FTQ0lJUHJpbnRhYmxlKHdQYXJhbSkpIHsKKyAgICAgICAgICAgIC8vIFNlbmQgdGhlIGtl
eWRvd24gdG8gdGhlIFdlYlZpZXcgc28gaXQgY2FuIGJlIHVzZWQgZm9yIHR5cGUtdG8tc2VsZWN0
LgorICAgICAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGF0IHRoZSB2aXJ0dWFsIGtleSBpcyBB
U0NJSSBwcmludGFibGUsIGl0J3MgT0sgdG8gY29udmVydCB0aGlzIHRvCisgICAgICAgICAgICAv
LyBhIFdNX0NIQVIgbWVzc2FnZS4gKFdlIGRvbid0IHdhbnQgdG8gY2FsbCBUcmFuc2xhdGVNZXNz
YWdlIGJlY2F1c2UgdGhhdCB3aWxsIHBvc3QgYQorICAgICAgICAgICAgLy8gV01fQ0hBUiBtZXNz
YWdlIHRoYXQgd2lsbCBiZSBzdG9sZW4gYW5kIHJlZGlyZWN0ZWQgdG8gdGhlIHBvcHVwIEhXTkQu
CisgICAgICAgICAgICA6OlBvc3RNZXNzYWdlKG1fcG9wdXAsIFdNX0hPU1RfV0lORE9XX0NIQVIs
IHdQYXJhbSwgbFBhcmFtKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsUmVzdWx0ID0g
MTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGxSZXN1bHQ7Cit9CisKK0xS
RVNVTFQgV2ViUG9wdXBNZW51UHJveHlXaW46Om9uQ2hhcihIV05EIGhXbmQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQg
PSB0cnVlOworCisgICAgTFJFU1VMVCBsUmVzdWx0ID0gMDsKKyAgICBpbnQgaW5kZXg7CisgICAg
c3dpdGNoICh3UGFyYW0pIHsKKyAgICBjYXNlIDB4MEQ6IC8vIEVudGVyL1JldHVybgorICAgICAg
ICBoaWRlKCk7CisgICAgICAgIGluZGV4ID0gZm9jdXNlZEluZGV4KCk7CisgICAgICAgIEFTU0VS
VChpbmRleCA+PSAwKTsKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gc2VuZCBiYWNr
IHRoZSBpbmRleCByaWdodCBhd2F5PworICAgICAgICBtX25ld1NlbGVjdGVkSW5kZXggPSBpbmRl
eDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDFCOiAvLyBFc2NhcGUKKyAgICAgICAgaGlk
ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MDk6IC8vIFRBQgorICAgIGNhc2UgMHgw
ODogLy8gQmFja3NwYWNlCisgICAgY2FzZSAweDBBOiAvLyBMaW5lZmVlZAorICAgIGRlZmF1bHQ6
IC8vIENoYXJhY3RlcgorICAgICAgICBsUmVzdWx0ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuIGxSZXN1bHQ7Cit9CisKK0xSRVNVTFQgV2ViUG9wdXBNZW51UHJveHlX
aW46Om9uTW91c2VNb3ZlKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSB0cnVlOworCisg
ICAgSW50UG9pbnQgbW91c2VQb2ludChNQUtFUE9JTlRTKGxQYXJhbSkpOworICAgIGlmIChzY3Jv
bGxiYXIoKSkgeworICAgICAgICBJbnRSZWN0IHNjcm9sbEJhclJlY3QgPSBzY3JvbGxiYXIoKS0+
ZnJhbWVSZWN0KCk7CisgICAgICAgIGlmIChzY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSgpIHx8IHNj
cm9sbEJhclJlY3QuY29udGFpbnMobW91c2VQb2ludCkpIHsKKyAgICAgICAgICAgIC8vIFB1dCB0
aGUgcG9pbnQgaW50byBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgc2Nyb2xsIGJhcgorICAg
ICAgICAgICAgbW91c2VQb2ludC5tb3ZlKC1zY3JvbGxCYXJSZWN0LngoKSwgLXNjcm9sbEJhclJl
Y3QueSgpKTsKKyAgICAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudChoV25kLCBtZXNz
YWdlLCB3UGFyYW0sIG1ha2VTY2FsZWRQb2ludChtb3VzZVBvaW50LCBtX3NjYWxlRmFjdG9yKSk7
CisgICAgICAgICAgICBzY3JvbGxiYXIoKS0+bW91c2VNb3ZlZChldmVudCk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEJPT0wgc2hvdWxkSG90VHJhY2sg
PSBGQUxTRTsKKyAgICBpZiAoITo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVENPTUJPQk9Y
QU5JTUFUSU9OLCAwLCAmc2hvdWxkSG90VHJhY2ssIDApKQorICAgICAgICBzaG91bGRIb3RUcmFj
ayA9IEZBTFNFOworCisgICAgUkVDVCBib3VuZHM7CisgICAgOjpHZXRDbGllbnRSZWN0KG1fcG9w
dXAsICZib3VuZHMpOworICAgIGlmICghOjpQdEluUmVjdCgmYm91bmRzLCBtb3VzZVBvaW50KSAm
JiAhKHdQYXJhbSAmIE1LX0xCVVRUT04pKSB7CisgICAgICAgIC8vIFdoZW4gdGhlIG1vdXNlIGlz
IG5vdCBpbnNpZGUgdGhlIHBvcHVwIG1lbnUgYW5kIHRoZSBsZWZ0IGJ1dHRvbiBpc24ndCBkb3du
LCBqdXN0CisgICAgICAgIC8vIHJlcG9zdCB0aGUgbWVzc2FnZSB0byB0aGUgd2ViIHZpZXcuCisK
KyAgICAgICAgLy8gVHJhbnNsYXRlIHRoZSBjb29yZGluYXRlLgorICAgICAgICB0cmFuc2xhdGVQ
b2ludChsUGFyYW0sIG1fcG9wdXAsIG1fd2ViVmlldy0+d2luZG93KCkpOworCisgICAgICAgIDo6
UG9zdE1lc3NhZ2UobV9wb3B1cCwgV01fSE9TVF9XSU5ET1dfTU9VU0VNT1ZFLCB3UGFyYW0sIGxQ
YXJhbSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICgoc2hvdWxkSG90VHJh
Y2sgfHwgd1BhcmFtICYgTUtfTEJVVFRPTikgJiYgOjpQdEluUmVjdCgmYm91bmRzLCBtb3VzZVBv
aW50KSkgeworICAgICAgICBzZXRGb2N1c2VkSW5kZXgobGlzdEluZGV4QXRQb2ludChtb3VzZVBv
aW50KSwgdHJ1ZSk7CisgICAgICAgIG1faG92ZXJlZEluZGV4ID0gbGlzdEluZGV4QXRQb2ludCht
b3VzZVBvaW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworTFJFU1VMVCBXZWJQb3B1
cE1lbnVQcm94eVdpbjo6b25MQnV0dG9uRG93bihIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5kbGVk
ID0gdHJ1ZTsKKworICAgIEludFBvaW50IG1vdXNlUG9pbnQoTUFLRVBPSU5UUyhsUGFyYW0pKTsK
KyAgICBpZiAoc2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxCYXJSZWN0ID0g
c2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworICAgICAgICBpZiAoc2Nyb2xsQmFyUmVjdC5jb250
YWlucyhtb3VzZVBvaW50KSkgeworICAgICAgICAgICAgLy8gUHV0IHRoZSBwb2ludCBpbnRvIGNv
b3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGwgYmFyCisgICAgICAgICAgICBtb3VzZVBv
aW50Lm1vdmUoLXNjcm9sbEJhclJlY3QueCgpLCAtc2Nyb2xsQmFyUmVjdC55KCkpOworICAgICAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbWFr
ZVNjYWxlZFBvaW50KG1vdXNlUG9pbnQsIG1fc2NhbGVGYWN0b3IpKTsKKyAgICAgICAgICAgIHNj
cm9sbGJhcigpLT5tb3VzZURvd24oZXZlbnQpOworICAgICAgICAgICAgc2V0U2Nyb2xsYmFyQ2Fw
dHVyaW5nTW91c2UodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIElmIHRoZSBtb3VzZSBpcyBpbnNpZGUgdGhlIHdpbmRvdywgdXBkYXRlIHRo
ZSBmb2N1c2VkIGluZGV4LiBPdGhlcndpc2UsIAorICAgIC8vIGhpZGUgdGhlIHBvcHVwLgorICAg
IFJFQ1QgYm91bmRzOworICAgIDo6R2V0Q2xpZW50UmVjdChtX3BvcHVwLCAmYm91bmRzKTsKKyAg
ICBpZiAoOjpQdEluUmVjdCgmYm91bmRzLCBtb3VzZVBvaW50KSkgeworICAgICAgICBzZXRGb2N1
c2VkSW5kZXgobGlzdEluZGV4QXRQb2ludChtb3VzZVBvaW50KSwgdHJ1ZSk7CisgICAgICAgIG1f
aG92ZXJlZEluZGV4ID0gbGlzdEluZGV4QXRQb2ludChtb3VzZVBvaW50KTsKKyAgICB9IGVsc2UK
KyAgICAgICAgaGlkZSgpOworCisgICAgcmV0dXJuIDA7Cit9CisKKworTFJFU1VMVCBXZWJQb3B1
cE1lbnVQcm94eVdpbjo6b25MQnV0dG9uVXAoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCit7CisgICAgaGFuZGxlZCA9
IHRydWU7CisKKyAgICBJbnRQb2ludCBtb3VzZVBvaW50KE1BS0VQT0lOVFMobFBhcmFtKSk7Cisg
ICAgaWYgKHNjcm9sbGJhcigpKSB7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsQmFyUmVjdCA9IHNj
cm9sbGJhcigpLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgaWYgKHNjcm9sbGJhckNhcHR1cmluZ01v
dXNlKCkgfHwgc2Nyb2xsQmFyUmVjdC5jb250YWlucyhtb3VzZVBvaW50KSkgeworICAgICAgICAg
ICAgc2V0U2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UoZmFsc2UpOworICAgICAgICAgICAgLy8gUHV0
IHRoZSBwb2ludCBpbnRvIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGwgYmFyCisg
ICAgICAgICAgICBtb3VzZVBvaW50Lm1vdmUoLXNjcm9sbEJhclJlY3QueCgpLCAtc2Nyb2xsQmFy
UmVjdC55KCkpOworICAgICAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGhXbmQsIG1l
c3NhZ2UsIHdQYXJhbSwgbWFrZVNjYWxlZFBvaW50KG1vdXNlUG9pbnQsIG1fc2NhbGVGYWN0b3Ip
KTsKKyAgICAgICAgICAgIHNjcm9sbGJhcigpLT5tb3VzZVVwKGV2ZW50KTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBTY3JvbGxiYXIgbm90IGlu
dmFsaWRhdGluZyBjb3JyZWN0bHkgd2hlbiBpdCBkb2Vzbid0IGhhdmUgYSBwYXJlbnQgd2lkZ2V0
CisgICAgICAgICAgICBSRUNUIHIgPSBzY3JvbGxCYXJSZWN0OworICAgICAgICAgICAgOjpJbnZh
bGlkYXRlUmVjdChtX3BvcHVwLCAmciwgVFJVRSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAvLyBPbmx5IGhpZGUgdGhlIHBvcHVwIGlmIHRoZSBtb3VzZSBp
cyBpbnNpZGUgdGhlIHBvcHVwIHdpbmRvdy4KKyAgICBSRUNUIGJvdW5kczsKKyAgICA6OkdldENs
aWVudFJlY3QobV9wb3B1cCwgJmJvdW5kcyk7CisgICAgaWYgKDo6UHRJblJlY3QoJmJvdW5kcywg
bW91c2VQb2ludCkpIHsKKyAgICAgICAgaGlkZSgpOworICAgICAgICBpbnQgaW5kZXggPSBtX2hv
dmVyZWRJbmRleDsKKyAgICAgICAgaWYgKCFtX2l0ZW1zW2luZGV4XS5tX2lzRW5hYmxlZCkKKyAg
ICAgICAgICAgIGluZGV4ID0gbV9mb2N1c2VkSW5kZXg7CisKKyAgICAgICAgaWYgKGluZGV4ID49
IDApIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHNlbmQgYmFjayB0aGUg
aW5kZXggcmlnaHQgYXdheT8KKyAgICAgICAgICAgIG1fbmV3U2VsZWN0ZWRJbmRleCA9IGluZGV4
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0xSRVNVTFQgV2ViUG9w
dXBNZW51UHJveHlXaW46Om9uTW91c2VXaGVlbChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSB0cnVl
OworCisgICAgaWYgKCFzY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQg
aSA9IDA7CisgICAgZm9yIChpbmNyZW1lbnRXaGVlbERlbHRhKEdFVF9XSEVFTF9ERUxUQV9XUEFS
QU0od1BhcmFtKSk7IGFicyh3aGVlbERlbHRhKCkpID49IFdIRUVMX0RFTFRBOyByZWR1Y2VXaGVl
bERlbHRhKFdIRUVMX0RFTFRBKSkgeworICAgICAgICBpZiAod2hlZWxEZWx0YSgpID4gMCkKKyAg
ICAgICAgICAgICsraTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLS1pOworICAgIH0KKwor
ICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoaSA+IDAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24s
IFNjcm9sbEJ5TGluZSwgYWJzKGkpKTsKKyAgICByZXR1cm4gMDsKK30KKworTFJFU1VMVCBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6b25QYWludChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
LCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpCit7CisgICAgaGFuZGxlZCA9IHRydWU7CisKKyAgICBQ
QUlOVFNUUlVDVCBwYWludFN0cnVjdDsKKyAgICA6OkJlZ2luUGFpbnQobV9wb3B1cCwgJnBhaW50
U3RydWN0KTsKKyAgICBwYWludChwYWludFN0cnVjdC5yY1BhaW50LCBwYWludFN0cnVjdC5oZGMp
OworICAgIDo6RW5kUGFpbnQobV9wb3B1cCwgJnBhaW50U3RydWN0KTsKKworICAgIHJldHVybiAw
OworfQorCitMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpvblByaW50Q2xpZW50KEhXTkQg
aFduZCwgVUlOVCwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKQoreworICAg
IGhhbmRsZWQgPSB0cnVlOworCisgICAgSERDIGhkYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SERDPih3
UGFyYW0pOworICAgIHBhaW50KGNsaWVudFJlY3QoKSwgaGRjKTsKKworICAgIHJldHVybiAwOwor
fQorCitib29sIFdlYlBvcHVwTWVudVByb3h5V2luOjpkb3duKHVuc2lnbmVkIGxpbmVzKQorewor
ICAgIGludCBzaXplID0gbV9pdGVtcy5zaXplKCk7CisKKyAgICBpbnQgbGFzdFNlbGVjdGFibGVJ
bmRleCwgc2VsZWN0ZWRMaXN0SW5kZXg7CisgICAgbGFzdFNlbGVjdGFibGVJbmRleCA9IHNlbGVj
dGVkTGlzdEluZGV4ID0gZm9jdXNlZEluZGV4KCk7CisgICAgZm9yIChpbnQgaSA9IHNlbGVjdGVk
TGlzdEluZGV4ICsgMTsgaSA+PSAwICYmIGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
aXRlbXNbaV0ubV9pc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGxhc3RTZWxlY3RhYmxlSW5kZXgg
PSBpOworICAgICAgICAgICAgaWYgKGkgPj0gc2VsZWN0ZWRMaXN0SW5kZXggKyAoaW50KWxpbmVz
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHNldEZvY3VzZWRJbmRleChsYXN0U2VsZWN0YWJsZUluZGV4KTsKK30KKworYm9vbCBXZWJQb3B1
cE1lbnVQcm94eVdpbjo6dXAodW5zaWduZWQgbGluZXMpCit7CisgICAgaW50IHNpemUgPSBtX2l0
ZW1zLnNpemUoKTsKKworICAgIGludCBsYXN0U2VsZWN0YWJsZUluZGV4LCBzZWxlY3RlZExpc3RJ
bmRleDsKKyAgICBsYXN0U2VsZWN0YWJsZUluZGV4ID0gc2VsZWN0ZWRMaXN0SW5kZXggPSBmb2N1
c2VkSW5kZXgoKTsKKyAgICBmb3IgKGludCBpID0gc2VsZWN0ZWRMaXN0SW5kZXggLSAxOyBpID49
IDAgJiYgaSA8IHNpemU7IC0taSkgeworICAgICAgICBpZiAobV9pdGVtc1tpXS5tX2lzRW5hYmxl
ZCkgeworICAgICAgICAgICAgbGFzdFNlbGVjdGFibGVJbmRleCA9IGk7CisgICAgICAgICAgICBp
ZiAoaSA8PSBzZWxlY3RlZExpc3RJbmRleCAtIChpbnQpbGluZXMpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc2V0Rm9jdXNlZEluZGV4KGxh
c3RTZWxlY3RhYmxlSW5kZXgpOworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpwYWlu
dChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQoreworICAgIGlmICghbV9wb3B1
cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX0RDKSB7CisgICAgICAgIG1fREMgPSBh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQyhIV25kREMobV9wb3B1cCkpKTsKKyAg
ICAgICAgaWYgKCFtX0RDKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X2JtcCkgeworICAgICAgICBib29sIGtlZXBCaXRtYXAgPSBmYWxzZTsKKyAgICAgICAgQklUTUFQ
IGJpdG1hcDsKKyAgICAgICAgaWYgKDo6R2V0T2JqZWN0KG1fYm1wLmdldCgpLCBzaXplb2YoYml0
bWFwKSwgJmJpdG1hcCkpCisgICAgICAgICAgICBrZWVwQml0bWFwID0gYml0bWFwLmJtV2lkdGgg
PT0gY2xpZW50UmVjdCgpLndpZHRoKCkgJiYgYml0bWFwLmJtSGVpZ2h0ID09IGNsaWVudFJlY3Qo
KS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFrZWVwQml0bWFwKQorICAgICAgICAgICAgbV9ibXAu
Y2xlYXIoKTsKKyAgICB9CisgICAgaWYgKCFtX2JtcCkgeworICAgICAgICBCaXRtYXBJbmZvIGJp
dG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChjbGllbnRSZWN0KCkuc2l6ZSgp
KTsKKyAgICAgICAgdm9pZCogcGl4ZWxzID0gMDsKKyAgICAgICAgbV9ibXAgPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZURJQlNlY3Rpb24obV9EQy5nZXQoKSwgJmJpdG1hcEluZm8sIERJQl9SR0Jf
Q09MT1JTLCAmcGl4ZWxzLCAwLCAwKSk7CisgICAgICAgIGlmICghbV9ibXApCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgOjpTZWxlY3RPYmplY3QobV9EQy5nZXQoKSwgbV9ibXAuZ2V0
KCkpOworICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KG1fREMuZ2V0KCkpOwor
CisgICAgSW50UmVjdCB0cmFuc2xhdGVkRGFtYWdlUmVjdCA9IGRhbWFnZVJlY3Q7CisgICAgdHJh
bnNsYXRlZERhbWFnZVJlY3QubW92ZShJbnRTaXplKDAsIG1fc2Nyb2xsT2Zmc2V0ICogbV9pdGVt
SGVpZ2h0KSk7CisgICAgbV9kYXRhLm1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmUtPnBhaW50KGNv
bnRleHQsIGRhbWFnZVJlY3QubG9jYXRpb24oKSwgdHJhbnNsYXRlZERhbWFnZVJlY3QpOworCisg
ICAgSW50UmVjdCBzZWxlY3RlZEluZGV4UmVjdEluQmFja2luZ1N0b3JlKDAsIGZvY3VzZWRJbmRl
eCgpICogbV9pdGVtSGVpZ2h0LCBtX2RhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZS0+c2l6ZSgp
LndpZHRoKCksIG1faXRlbUhlaWdodCk7CisgICAgSW50UG9pbnQgc2VsZWN0ZWRJbmRleERzdFBv
aW50ID0gc2VsZWN0ZWRJbmRleFJlY3RJbkJhY2tpbmdTdG9yZS5sb2NhdGlvbigpOworICAgIHNl
bGVjdGVkSW5kZXhEc3RQb2ludC5tb3ZlKDAsIC1tX3Njcm9sbE9mZnNldCAqIG1faXRlbUhlaWdo
dCk7CisKKyAgICBtX2RhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZS0+cGFpbnQoY29udGV4dCwg
c2VsZWN0ZWRJbmRleERzdFBvaW50LCBzZWxlY3RlZEluZGV4UmVjdEluQmFja2luZ1N0b3JlKTsK
KworICAgIGlmIChtX3Njcm9sbGJhcikKKyAgICAgICAgbV9zY3JvbGxiYXItPnBhaW50KGNvbnRl
eHQsIGRhbWFnZVJlY3QpOworCisKKyAgICBIV25kREMgaFduZERDOworICAgIEhEQyBsb2NhbERD
ID0gaGRjID8gaGRjIDogaFduZERDLnNldEhXbmQobV9wb3B1cCk7CisKKyAgICA6OkJpdEJsdChs
b2NhbERDLCBkYW1hZ2VSZWN0LngoKSwgZGFtYWdlUmVjdC55KCksIGRhbWFnZVJlY3Qud2lkdGgo
KSwgZGFtYWdlUmVjdC5oZWlnaHQoKSwgbV9EQy5nZXQoKSwgZGFtYWdlUmVjdC54KCksIGRhbWFn
ZVJlY3QueSgpLCBTUkNDT1BZKTsKK30KKworYm9vbCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2V0
Rm9jdXNlZEluZGV4KGludCBpLCBib29sIGhvdFRyYWNraW5nKQoreworICAgIGlmIChpIDwgMCB8
fCBpID49IG1faXRlbXMuc2l6ZSgpIHx8IGkgPT0gZm9jdXNlZEluZGV4KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghbV9pdGVtc1tpXS5tX2lzRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaW52YWxpZGF0ZUl0ZW0oZm9jdXNlZEluZGV4KCkpOworICAg
IGludmFsaWRhdGVJdGVtKGkpOworCisgICAgbV9mb2N1c2VkSW5kZXggPSBpOworCisgICAgaWYg
KCFob3RUcmFja2luZykgeworICAgICAgICBpZiAoV2ViUG9wdXBNZW51UHJveHk6Om1fY2xpZW50
KQorICAgICAgICAgICAgV2ViUG9wdXBNZW51UHJveHk6Om1fY2xpZW50LT5zZXRUZXh0RnJvbUl0
ZW1Gb3JQb3B1cE1lbnUodGhpcywgaSk7CisgICAgfQorCisgICAgc2Nyb2xsVG9SZXZlYWxTZWxl
Y3Rpb24oKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgV2ViUG9wdXBNZW51UHJveHlX
aW46OnZpc2libGVJdGVtcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNsaWVudFJlY3QoKS5oZWln
aHQoKSAvIG1faXRlbUhlaWdodDsKK30KKworaW50IFdlYlBvcHVwTWVudVByb3h5V2luOjpsaXN0
SW5kZXhBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zY3JvbGxPZmZzZXQgKyBwb2ludC55KCkgLyBtX2l0ZW1IZWlnaHQ7Cit9CisKK2ludCBXZWJQ
b3B1cE1lbnVQcm94eVdpbjo6Zm9jdXNlZEluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9m
b2N1c2VkSW5kZXg7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OmZvY3VzRmlyc3Qo
KQoreworICAgIGludCBzaXplID0gbV9pdGVtcy5zaXplKCk7CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAobV9pdGVtc1tpXS5tX2lzRW5hYmxlZCkg
eworICAgICAgICAgICAgc2V0Rm9jdXNlZEluZGV4KGkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OmZvY3VzTGFz
dCgpCit7CisgICAgaW50IHNpemUgPSBtX2l0ZW1zLnNpemUoKTsKKworICAgIGZvciAoaW50IGkg
PSBzaXplIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICBpZiAobV9pdGVtc1tpXS5tX2lzRW5h
YmxlZCkgeworICAgICAgICAgICAgc2V0Rm9jdXNlZEluZGV4KGkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKKwordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6
aW5jcmVtZW50V2hlZWxEZWx0YShpbnQgZGVsdGEpCit7CisgICAgbV93aGVlbERlbHRhICs9IGRl
bHRhOworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpyZWR1Y2VXaGVlbERlbHRhKGlu
dCBkZWx0YSkKK3sKKyAgICBBU1NFUlQoZGVsdGEgPj0gMCk7CisgICAgQVNTRVJUKGRlbHRhIDw9
IGFicyhtX3doZWVsRGVsdGEpKTsKKworICAgIGlmIChtX3doZWVsRGVsdGEgPiAwKQorICAgICAg
ICBtX3doZWVsRGVsdGEgLT0gZGVsdGE7CisgICAgZWxzZSBpZiAobV93aGVlbERlbHRhIDwgMCkK
KyAgICAgICAgbV93aGVlbERlbHRhICs9IGRlbHRhOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
OworfQorCitib29sIFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUb1JldmVhbFNlbGVjdGlv
bigpCit7CisgICAgaWYgKCFtX3Njcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaW50IGluZGV4ID0gZm9jdXNlZEluZGV4KCk7CisKKyAgICBpZiAoaW5kZXggPCBtX3Njcm9s
bE9mZnNldCkgeworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKFZlcnRpY2FsU2Nyb2xsYmFyLCBpbmRleCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmIChpbmRleCA+PSBtX3Njcm9sbE9mZnNldCArIHZpc2libGVJdGVt
cygpKSB7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oVmVydGljYWxTY3JvbGxiYXIsIGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dp
bi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dl
YlBvcHVwTWVudVByb3h5V2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI5MmQ5NmM5Mjg2MTJhY2MyOTE5Zjhj
YTdjZjVmZTIyM2Q4ZWU2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBsYXRmb3JtUG9wdXBNZW51RGF0YS5o
IgorI2luY2x1ZGUgIldlYlBvcHVwSXRlbS5oIgorI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5
LmgiCisjaW5jbHVkZSA8T2xlQWNjLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJl
YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJWaWV3OworCitjbGFzcyBXZWJQb3B1cE1lbnVQcm94eVdpbiA6IHB1Ymxp
YyBXZWJQb3B1cE1lbnVQcm94eSwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJQb3B1cE1lbnVQcm94eVdpbj4gY3JlYXRlKFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQmIGNsaWVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlBvcHVwTWVudVByb3h5V2luKHdlYlZpZXcs
IGNsaWVudCkpOworICAgIH0KKyAgICB+V2ViUG9wdXBNZW51UHJveHlXaW4oKTsKKworICAgIHZp
cnR1YWwgdm9pZCBzaG93UG9wdXBNZW51KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBXZWJDb3Jl
OjpUZXh0RGlyZWN0aW9uLCBkb3VibGUgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBWZWN0b3I8V2Vi
UG9wdXBJdGVtPiYsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYsIGludDMyX3Qgc2VsZWN0
ZWRJbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGhpZGVQb3B1cE1lbnUoKTsKKworICAgIGJvb2wg
c2V0Rm9jdXNlZEluZGV4KGludCBpbmRleCwgYm9vbCBob3RUcmFja2luZyA9IGZhbHNlKTsKKwor
ICAgIHZvaWQgaGlkZSgpIHsgaGlkZVBvcHVwTWVudSgpOyB9CisKK3ByaXZhdGU6CisgICAgV2Vi
UG9wdXBNZW51UHJveHlXaW4oV2ViVmlldyosIFdlYlBvcHVwTWVudVByb3h5OjpDbGllbnQmKTsK
KworICAgIFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JvbGxiYXIuZ2V0KCk7IH0KKworICAgIC8vIFNjcm9sbGFibGVBcmVhCisgICAgaW50IHNjcm9s
bFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7
CisgICAgaW50IHNjcm9sbE9mZnNldChXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zY3JvbGxPZmZzZXQ7IH0KKworICAgIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgaXNBY3RpdmUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZp
c2libGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIFdlYkNvcmU6Oklu
dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFdlYkNvcmU6
OkludFJlY3QoKTsgfQorICAgIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQorICAgIFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIDA7IH0KKyAgICBXZWJDb3JlOjpJbnRTaXplIHZpc2libGVTaXplKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3go
Ym9vbCogPSBudWxscHRyKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9y
bWFuY2VUZXN0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBj
YWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJl
YS4KKyAgICB2b2lkIHNjcm9sbFRvKGludCBvZmZzZXQpOworCisgICAgc3RhdGljIGJvb2wgcmVn
aXN0ZXJXaW5kb3dDbGFzcygpOworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYlBvcHVw
TWVudVByb3h5V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisgICAgTFJFU1VM
VCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKTsKKworICAgIC8vIE1lc3NhZ2UgcHVtcCBtZXNzYWdlcy4KKyAgICBMUkVTVUxUIG9u
TW91c2VBY3RpdmF0ZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBo
YW5kbGVkKTsKKyAgICBMUkVTVUxUIG9uU2l6ZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwg
TFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9uS2V5RG93bihIV05ELCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9u
Q2hhcihIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsK
KyAgICBMUkVTVUxUIG9uTW91c2VNb3ZlKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFS
QU0sIGJvb2wmIGhhbmRsZWQpOworICAgIExSRVNVTFQgb25MQnV0dG9uRG93bihIV05ELCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9u
TEJ1dHRvblVwKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRs
ZWQpOworICAgIExSRVNVTFQgb25Nb3VzZVdoZWVsKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
LCBMUEFSQU0sIGJvb2wmIGhhbmRsZWQpOworICAgIExSRVNVTFQgb25QYWludChIV05ELCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9u
UHJpbnRDbGllbnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFu
ZGxlZCk7CisgICAgTFJFU1VMVCBvbkdldE9iamVjdChIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSwgTFBBUkFNLCBib29sICZoYW5kbGVkKTsKKworICAgIHZvaWQgY2FsY3VsYXRlUG9zaXRpb25B
bmRTaXplKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGNs
aWVudFJlY3QoKSBjb25zdDsKKyAgICB2b2lkIGludmFsaWRhdGVJdGVtKGludCBpbmRleCk7CisK
KworICAgIGludCBpdGVtSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtSGVpZ2h0OyB9Cisg
ICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2luZG93UmVjdDsgfQorICAgIGludCB3aGVlbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV93aGVl
bERlbHRhOyB9CisgICAgdm9pZCBzZXRXYXNDbGlja2VkKGJvb2wgYiA9IHRydWUpIHsgbV93YXND
bGlja2VkID0gYjsgfQorICAgIGJvb2wgd2FzQ2xpY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2Fz
Q2xpY2tlZDsgfQorICAgIGJvb2wgc2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbGJhckNhcHR1cmluZ01vdXNlOyB9CisgICAgdm9pZCBzZXRTY3JvbGxiYXJD
YXB0dXJpbmdNb3VzZShib29sIGIpIHsgbV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZSA9IGI7IH0K
KworICAgIGJvb2wgdXAodW5zaWduZWQgbGluZXMgPSAxKTsKKyAgICBib29sIGRvd24odW5zaWdu
ZWQgbGluZXMgPSAxKTsKKworICAgIHZvaWQgcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZGFtYWdlUmVjdCwgSERDID0gMCk7CisgICAgaW50IHZpc2libGVJdGVtcygpIGNvbnN0OworICAg
IGludCBsaXN0SW5kZXhBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Cisg
ICAgaW50IGZvY3VzZWRJbmRleCgpIGNvbnN0OworICAgIHZvaWQgZm9jdXNGaXJzdCgpOworICAg
IHZvaWQgZm9jdXNMYXN0KCk7CisgICAgYm9vbCBzY3JvbGxUb1JldmVhbFNlbGVjdGlvbigpOwor
ICAgIHZvaWQgaW5jcmVtZW50V2hlZWxEZWx0YShpbnQgZGVsdGEpOworICAgIHZvaWQgcmVkdWNl
V2hlZWxEZWx0YShpbnQgZGVsdGEpOworCisgICAgV2ViVmlldyogbV93ZWJWaWV3OworICAgIFZl
Y3RvcjxXZWJQb3B1cEl0ZW0+IG1faXRlbXM7CisgICAgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhIG1f
ZGF0YTsKKyAgICBpbnQgbV9uZXdTZWxlY3RlZEluZGV4IHsgMCB9OworCisgICAgUmVmUHRyPFdl
YkNvcmU6OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7CisgICAgR0RJT2JqZWN0PEhEQz4gbV9EQzsK
KyAgICBHRElPYmplY3Q8SEJJVE1BUD4gbV9ibXA7CisgICAgSFdORCBtX3BvcHVwIHsgbnVsbHB0
ciB9OworICAgIFdlYkNvcmU6OkludFJlY3QgbV93aW5kb3dSZWN0OworCisgICAgaW50IG1faXRl
bUhlaWdodCB7IDAgfTsKKyAgICBpbnQgbV9zY3JvbGxPZmZzZXQgeyAwIH07CisgICAgaW50IG1f
d2hlZWxEZWx0YSB7IDAgfTsKKyAgICBpbnQgbV9mb2N1c2VkSW5kZXggeyAwIH07CisgICAgaW50
IG1faG92ZXJlZEluZGV4IHsgMCB9OworICAgIGJvb2wgbV93YXNDbGlja2VkIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fc2Nyb2xsYmFyQ2FwdHVyaW5nTW91c2UgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9zaG93UG9wdXAgeyBmYWxzZSB9OworICAgIGludCBtX3NjYWxlRmFjdG9yIHsgMSB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHAKaW5k
ZXggZTg3NmM2ZWEyZWE5MjRlNTZhZWZhOGQxYmQ3NThkZTMzNzkyMGZmMC4uOWE5MTdlZDFmN2Ew
YWYyMGM2OTRmNDVjODg2M2FiMTJiNjcwMzZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBNZW51V2lu
LmNwcApAQCAtMjcsMTUgKzI3LDEyNCBAQAogI2luY2x1ZGUgIldlYlBvcHVwTWVudS5oIgogCiAj
aW5jbHVkZSAiUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTGVuZ3RoRnVuY3Rpb25zLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnVDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRl
clRoZW1lLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotdm9pZCBXZWJQb3B1cE1lbnU6OnNldFVwUGxhdGZvcm1EYXRhKGNvbnN0IEludFJlY3Qm
LCBQbGF0Zm9ybVBvcHVwTWVudURhdGEmKQorc3RhdGljIGNvbnN0IGludCBzZXBhcmF0b3JQYWRk
aW5nID0gNDsKK3N0YXRpYyBjb25zdCBpbnQgc2VwYXJhdG9ySGVpZ2h0ID0gMTsKK3N0YXRpYyBj
b25zdCBpbnQgcG9wdXBXaW5kb3dCb3JkZXJXaWR0aCA9IDE7CisKK3ZvaWQgV2ViUG9wdXBNZW51
OjpzZXRVcFBsYXRmb3JtRGF0YShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwYWdlQ29vcmRpbmF0
ZXMsIFBsYXRmb3JtUG9wdXBNZW51RGF0YSYgZGF0YSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIGludCBpdGVtQ291bnQgPSBtX3BvcHVwQ2xpZW50LT5saXN0U2l6ZSgpOworCisgICAg
YXV0byBmb250ID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkuZm9udCgpOworCisgICAgZGF0
YS5tX2NsaWVudFBhZGRpbmdMZWZ0ID0gbV9wb3B1cENsaWVudC0+Y2xpZW50UGFkZGluZ0xlZnQo
KTsKKyAgICBkYXRhLm1fY2xpZW50UGFkZGluZ1JpZ2h0ID0gbV9wb3B1cENsaWVudC0+Y2xpZW50
UGFkZGluZ1JpZ2h0KCk7CisgICAgZGF0YS5tX2NsaWVudEluc2V0TGVmdCA9IG1fcG9wdXBDbGll
bnQtPmNsaWVudEluc2V0TGVmdCgpOworICAgIGRhdGEubV9jbGllbnRJbnNldFJpZ2h0ID0gbV9w
b3B1cENsaWVudC0+Y2xpZW50SW5zZXRSaWdodCgpOworICAgIGRhdGEubV9pdGVtSGVpZ2h0ID0g
Zm9udC5mb250TWV0cmljcygpLmhlaWdodCgpICsgMTsKKworICAgIGludCBwb3B1cFdpZHRoID0g
MDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1Db3VudDsgKytpKSB7CisgICAgICAg
IFN0cmluZyB0ZXh0ID0gbV9wb3B1cENsaWVudC0+aXRlbVRleHQoaSk7CisgICAgICAgIGlmICh0
ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gaXRl
bUZvbnRDYXNjYWRlID0gZm9udDsKKyAgICAgICAgaWYgKG1fcG9wdXBDbGllbnQtPml0ZW1Jc0xh
YmVsKGkpKSB7CisgICAgICAgICAgICBhdXRvIGQgPSBpdGVtRm9udENhc2NhZGUuZm9udERlc2Ny
aXB0aW9uKCk7CisgICAgICAgICAgICBkLnNldFdlaWdodChib2xkV2VpZ2h0VmFsdWUoKSk7Cisg
ICAgICAgICAgICBpdGVtRm9udENhc2NhZGUgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGQpLCBpdGVt
Rm9udENhc2NhZGUubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udENhc2NhZGUud29yZFNwYWNpbmco
KSk7CisgICAgICAgICAgICBpdGVtRm9udENhc2NhZGUudXBkYXRlKG1fcG9wdXBDbGllbnQtPmZv
bnRTZWxlY3RvcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHBvcHVwV2lkdGggPSBzdGQ6Om1h
eDxmbG9hdD4ocG9wdXBXaWR0aCwgY2VpbGYoaXRlbUZvbnRDYXNjYWRlLndpZHRoKFRleHRSdW4o
dGV4dCkpKSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IHBvcHVwV2lkdGggc2hvdWxkIHByb2Jh
Ymx5IHRha2UgaW50byBhY2NvdW50IG1vbml0b3IgY29uc3RyYWludHMgYXMgaXMgZG9uZSB3aXRo
IFdlYlBvcHVwTWVudVByb3h5V2luOjpjYWxjdWxhdGVQb3NpdGlvbkFuZFNpemUuCisgICAgcG9w
dXBXaWR0aCArPSBzdGQ6Om1heCgwLCBkYXRhLm1fY2xpZW50UGFkZGluZ1JpZ2h0IC0gZGF0YS5t
X2NsaWVudEluc2V0UmlnaHQpICsgc3RkOjptYXgoMCwgZGF0YS5tX2NsaWVudFBhZGRpbmdMZWZ0
IC0gZGF0YS5tX2NsaWVudEluc2V0TGVmdCk7CisgICAgcG9wdXBXaWR0aCArPSAyICogcG9wdXBX
aW5kb3dCb3JkZXJXaWR0aDsKKyAgICBkYXRhLm1fcG9wdXBXaWR0aCA9IHBvcHVwV2lkdGg7CisK
KyAgICAvLyBUaGUgYmFja2luZyBzdG9yZXMgc2hvdWxkIGJlIGRyYXduIGF0IGxlYXN0IGFzIHdp
ZGUgYXMgdGhlIGNvbnRyb2wgb24gdGhlIHBhZ2UgdG8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBw
b3B1cCB3aW5kb3cgd2UnbGwgY3JlYXRlLgorICAgIGludCBiYWNraW5nU3RvcmVXaWR0aCA9IHN0
ZDo6bWF4KHBhZ2VDb29yZGluYXRlcy53aWR0aCgpIC0gbV9wb3B1cENsaWVudC0+Y2xpZW50SW5z
ZXRMZWZ0KCkgLSBtX3BvcHVwQ2xpZW50LT5jbGllbnRJbnNldFJpZ2h0KCksIHBvcHVwV2lkdGgp
OworCisgICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplKGJhY2tpbmdTdG9yZVdpZHRoLCAoaXRl
bUNvdW50ICogZGF0YS5tX2l0ZW1IZWlnaHQpKTsKKyAgICBkYXRhLm1fbm90U2VsZWN0ZWRCYWNr
aW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShiYWNraW5nU3RvcmVT
aXplLCB7IH0pOworICAgIGRhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9yZVNpemUsIHsgfSk7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBub3RTZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRl
eHQgPSBkYXRhLm1fbm90U2VsZWN0ZWRCYWNraW5nU3RvcmUtPmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IHNlbGVjdGVkQmFja2lu
Z1N0b3JlQ29udGV4dCA9IGRhdGEubV9zZWxlY3RlZEJhY2tpbmdTdG9yZS0+Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KCk7CisKKyAgICBDb2xvciBhY3RpdmVPcHRpb25CYWNrZ3JvdW5kQ29sb3IgPSBS
ZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcih7IH0pOworICAgIENvbG9yIGFjdGl2ZU9wdGlvblRleHRDb2xvciA9IFJlbmRlclRoZW1l
OjpzaW5nbGV0b24oKS5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKHsgfSk7
CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCk7IHkg
Kz0gZGF0YS5tX2l0ZW1IZWlnaHQpIHsKKyAgICAgICAgaW50IGluZGV4ID0geSAvIGRhdGEubV9p
dGVtSGVpZ2h0OworCisgICAgICAgIFBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSA9IG1fcG9wdXBD
bGllbnQtPml0ZW1TdHlsZShpbmRleCk7CisKKyAgICAgICAgQ29sb3Igb3B0aW9uQmFja2dyb3Vu
ZENvbG9yID0gaXRlbVN0eWxlLmJhY2tncm91bmRDb2xvcigpOworICAgICAgICBDb2xvciBvcHRp
b25UZXh0Q29sb3IgPSBpdGVtU3R5bGUuZm9yZWdyb3VuZENvbG9yKCk7CisKKyAgICAgICAgSW50
UmVjdCBpdGVtUmVjdCgwLCB5LCBiYWNraW5nU3RvcmVXaWR0aCwgZGF0YS5tX2l0ZW1IZWlnaHQp
OworCisgICAgICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgZm9yIHRoaXMgbWVudSBpdGVtCisg
ICAgICAgIGlmIChpdGVtU3R5bGUuaXNWaXNpYmxlKCkpIHsKKyAgICAgICAgICAgIG5vdFNlbGVj
dGVkQmFja2luZ1N0b3JlQ29udGV4dC0+ZmlsbFJlY3QoaXRlbVJlY3QsIG9wdGlvbkJhY2tncm91
bmRDb2xvcik7CisgICAgICAgICAgICBzZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQtPmZpbGxS
ZWN0KGl0ZW1SZWN0LCBhY3RpdmVPcHRpb25CYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG1fcG9wdXBDbGllbnQtPml0ZW1Jc1NlcGFyYXRvcihpbmRleCkpIHsKKyAg
ICAgICAgICAgIEludFJlY3Qgc2VwYXJhdG9yUmVjdChpdGVtUmVjdC54KCkgKyBzZXBhcmF0b3JQ
YWRkaW5nLCBpdGVtUmVjdC55KCkgKyAoaXRlbVJlY3QuaGVpZ2h0KCkgLSBzZXBhcmF0b3JIZWln
aHQpIC8gMiwgaXRlbVJlY3Qud2lkdGgoKSAtIDIgKiBzZXBhcmF0b3JQYWRkaW5nLCBzZXBhcmF0
b3JIZWlnaHQpOworCisgICAgICAgICAgICBub3RTZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQt
PmZpbGxSZWN0KHNlcGFyYXRvclJlY3QsIG9wdGlvblRleHRDb2xvcik7CisgICAgICAgICAgICBz
ZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQtPmZpbGxSZWN0KHNlcGFyYXRvclJlY3QsIGFjdGl2
ZU9wdGlvblRleHRDb2xvcik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFN0cmluZyBpdGVtVGV4dCA9IG1fcG9wdXBDbGllbnQtPml0ZW1UZXh0KGluZGV4KTsK
KworICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IGl0ZW1UZXh0LmRlZmF1bHRXcml0
aW5nRGlyZWN0aW9uKCkgPT0gVV9SSUdIVF9UT19MRUZUID8gUlRMIDogTFRSOworICAgICAgICBU
ZXh0UnVuIHRleHRSdW4oaXRlbVRleHQsIDAsIDAsIEFsbG93VHJhaWxpbmdFeHBhbnNpb24sIGl0
ZW1TdHlsZS50ZXh0RGlyZWN0aW9uKCksIGl0ZW1TdHlsZS5oYXNUZXh0RGlyZWN0aW9uT3ZlcnJp
ZGUoKSk7CisKKyAgICAgICAgbm90U2VsZWN0ZWRCYWNraW5nU3RvcmVDb250ZXh0LT5zZXRGaWxs
Q29sb3Iob3B0aW9uVGV4dENvbG9yKTsKKyAgICAgICAgc2VsZWN0ZWRCYWNraW5nU3RvcmVDb250
ZXh0LT5zZXRGaWxsQ29sb3IoYWN0aXZlT3B0aW9uVGV4dENvbG9yKTsKKworICAgICAgICBhdXRv
IGl0ZW1Gb250Q2FzY2FkZSA9IGZvbnQ7CisgICAgICAgIGlmIChtX3BvcHVwQ2xpZW50LT5pdGVt
SXNMYWJlbChpbmRleCkpIHsKKyAgICAgICAgICAgIGF1dG8gZCA9IGl0ZW1Gb250Q2FzY2FkZS5m
b250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgICAgIGQuc2V0V2VpZ2h0KGJvbGRXZWlnaHRWYWx1
ZSgpKTsKKyAgICAgICAgICAgIGl0ZW1Gb250Q2FzY2FkZSA9IEZvbnRDYXNjYWRlKFdURk1vdmUo
ZCksIGl0ZW1Gb250Q2FzY2FkZS5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250Q2FzY2FkZS53b3Jk
U3BhY2luZygpKTsKKyAgICAgICAgICAgIGl0ZW1Gb250Q2FzY2FkZS51cGRhdGUobV9wb3B1cENs
aWVudC0+Zm9udFNlbGVjdG9yKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRHJhdyB0aGUg
aXRlbSB0ZXh0CisgICAgICAgIGlmIChpdGVtU3R5bGUuaXNWaXNpYmxlKCkpIHsKKyAgICAgICAg
ICAgIGludCB0ZXh0WCA9IDA7CisgICAgICAgICAgICBpZiAobV9wb3B1cENsaWVudC0+bWVudVN0
eWxlKCkudGV4dERpcmVjdGlvbigpID09IExUUikgeworICAgICAgICAgICAgICAgIHRleHRYID0g
c3RkOjptYXg8aW50PigwLCBtX3BvcHVwQ2xpZW50LT5jbGllbnRQYWRkaW5nTGVmdCgpIC0gbV9w
b3B1cENsaWVudC0+Y2xpZW50SW5zZXRMZWZ0KCkpOworICAgICAgICAgICAgICAgIGlmIChSZW5k
ZXJUaGVtZTo6c2luZ2xldG9uKCkucG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dFggKz0gbWluaW11bUludFZhbHVlRm9yTGVuZ3RoKGl0ZW1T
dHlsZS50ZXh0SW5kZW50KCksIGl0ZW1SZWN0LndpZHRoKCkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB0ZXh0WCA9IGl0ZW1SZWN0LndpZHRoKCkgLSBtX3BvcHVwQ2xp
ZW50LT5tZW51U3R5bGUoKS5mb250KCkud2lkdGgodGV4dFJ1bik7CisgICAgICAgICAgICAgICAg
dGV4dFggPSBzdGQ6Om1pbjxpbnQ+KHRleHRYLCB0ZXh0WCAtIG1fcG9wdXBDbGllbnQtPmNsaWVu
dFBhZGRpbmdSaWdodCgpICsgbV9wb3B1cENsaWVudC0+Y2xpZW50SW5zZXRSaWdodCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoUmVuZGVyVGhlbWU6OnNpbmdsZXRvbigpLnBvcHVwT3B0aW9uU3Vw
cG9ydHNUZXh0SW5kZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHRleHRYIC09IG1pbmltdW1J
bnRWYWx1ZUZvckxlbmd0aChpdGVtU3R5bGUudGV4dEluZGVudCgpLCBpdGVtUmVjdC53aWR0aCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCB0ZXh0WSA9IGl0ZW1SZWN0LnkoKSAr
IGl0ZW1Gb250Q2FzY2FkZS5mb250TWV0cmljcygpLmFzY2VudCgpICsgKGl0ZW1SZWN0LmhlaWdo
dCgpIC0gaXRlbUZvbnRDYXNjYWRlLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpIC8gMjsKKworICAg
ICAgICAgICAgbm90U2VsZWN0ZWRCYWNraW5nU3RvcmVDb250ZXh0LT5kcmF3QmlkaVRleHQoaXRl
bUZvbnRDYXNjYWRlLCB0ZXh0UnVuLCBJbnRQb2ludCh0ZXh0WCwgdGV4dFkpKTsKKyAgICAgICAg
ICAgIHNlbGVjdGVkQmFja2luZ1N0b3JlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGl0ZW1Gb250Q2Fz
Y2FkZSwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CisgICAgICAgIH0KKyAgICB9
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>