<?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>72124</bug_id>
          
          <creation_ts>2011-11-11 07:49:04 -0800</creation_ts>
          <short_desc>REGRESSION(r99964): Broke too many Qt tests (Requested by tronical_ on #webkit).</short_desc>
          <delta_ts>2011-11-13 13:21:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>67773</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>hausmann</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>pierre.rossi</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>500767</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-11 07:49:04 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/99964 broke the build:
Broke too many Qt tests (Requested by tronical_ on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500768</commentid>
    <comment_count>1</comment_count>
      <attachid>114698</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-11 07:49:33 -0800</bug_when>
    <thetext>Created attachment 114698
ROLLOUT of r99964

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500769</commentid>
    <comment_count>2</comment_count>
      <attachid>114698</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-11 07:52:23 -0800</bug_when>
    <thetext>Comment on attachment 114698
ROLLOUT of r99964

Clearing flags on attachment: 114698

Committed r99968: &lt;http://trac.webkit.org/changeset/99968&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500770</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-11 07:52:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501517</commentid>
    <comment_count>4</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-11-13 07:27:45 -0800</bug_when>
    <thetext>I don&apos;t know how, but it broke the build on the Qt SL bot on build.webkit.org:
http://build.webkit.org/builders/Qt%20SnowLeopard%20Release/builds/4094/steps/compile-webkit/logs/stdio

But the build works fine on the Qt SL bot on build.webkit.sed.hu.

Maybe a build system bug caused it, I don&apos;t know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501535</commentid>
    <comment_count>5</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-11-13 12:38:59 -0800</bug_when>
    <thetext>The rollout or the original patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501538</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-13 13:21:25 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; The rollout or the original patch?

The rollout broke the build: http://build.webkit.org/builders/Qt%20SnowLeopard%20Release/builds/4094

It&apos;s strange, it&apos;s in a totally unrelated file, qmake was run on the .pro file but somehow the generated makefile doesn&apos;t compile &amp; link in the moc generated code.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114698</attachid>
            <date>2011-11-11 07:49:33 -0800</date>
            <delta_ts>2011-11-11 07:52:23 -0800</delta_ts>
            <desc>ROLLOUT of r99964</desc>
            <filename>bug-72124-20111111155005.patch</filename>
            <type>text/plain</type>
            <size>148867</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk5NjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYWEzYmRmZGMyZTc0YmQ3
N2E1YjRiYzNmYjRkNGM1MzdmYmFkOWU1Li5hZGMyMTdhOGQ3M2ZhZWNhODQxMGFkYTJhNDljNGQy
NzhmMWFkMTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUgQEAKKzIwMTEtMTEtMTEgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgorCisgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHI5OTk2NC4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvOTk5NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMTI0CisKKyAgICAgICAgQnJva2UgdG9vIG1hbnkgUXQgdGVzdHMgKFJlcXVlc3Rl
ZCBieSB0cm9uaWNhbF8gb24gI3dlYmtpdCkuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50Ojp1c2VzTWVudUxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1F0TW9i
aWxlV2ViU3R5bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFF0TW9iaWxlV2ViU3R5bGU6OlF0TW9i
aWxlV2ViU3R5bGUpOgorICAgICAgICAoZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQp
OgorICAgICAgICAoUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd0NoZWNrZXIpOgorICAgICAgICAoUXRN
b2JpbGVXZWJTdHlsZTo6ZmluZENoZWNrZXIpOgorICAgICAgICAoUXRNb2JpbGVXZWJTdHlsZTo6
ZHJhd1JhZGlvKToKKyAgICAgICAgKFF0TW9iaWxlV2ViU3R5bGU6OmZpbmRSYWRpbyk6CisgICAg
ICAgIChRdE1vYmlsZVdlYlN0eWxlOjpkcmF3Q29udHJvbCk6CisgICAgICAgIChRdE1vYmlsZVdl
YlN0eWxlOjpkcmF3UHJpbWl0aXZlKToKKyAgICAgICAgKFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdN
dWx0aXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdTaW1w
bGVDb21ib0J1dHRvbik6CisgICAgICAgIChRdE1vYmlsZVdlYlN0eWxlOjpnZXRCdXR0b25JbWFn
ZVNpemUpOgorICAgICAgICAoUXRNb2JpbGVXZWJTdHlsZTo6ZmluZENvbWJvQnV0dG9uKToKKyAg
ICAgICAgKFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdDb21wbGV4Q29udHJvbCk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlF0U3R5
bGVPcHRpb25XZWJDb21ib0JveDo6UXRTdHlsZU9wdGlvbldlYkNvbWJvQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlF0U3R5bGVPcHRpb25XZWJDb21ib0JveDo6Y2hlY2tNdWx0aXBsZSk6CisgICAg
ICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0U3R5
bGVPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjppbml0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlcjo6flN0eWxlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1l
Rm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpSZW5kZXJUaGVtZVF0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6On5SZW5kZXJUaGVtZVF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpmYWxsYmFja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lUXQ6OmZpbmRGcmFtZUxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjppbmZs
YXRlQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RS
ZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjptaW5pbXVtTWVu
dUxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmNvbXB1dGVTaXpl
QmFzZWRPblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldEJ1dHRvblBh
ZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRCdXR0b24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRUZXh0RmllbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRQb3B1cFBhZGRpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmluaXRpYWxpemVDb21tb25RU3R5
bGVPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFG
dWxsc2NyZWVuQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50
TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50
TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50
TWVkaWFDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lUXQ6OmNhcmV0QmxpbmtJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0OjpmaWxlTGlzdE5hbWVGb3JXaWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdC5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjppc1ZhbGlk
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd1ByaW1pdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmRyYXdDb250cm9sKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlcjo6ZHJhd0NvbXBsZXhDb250cm9sKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
cXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZTo6bmF0aXZlVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRdDo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRdDo6c2Nyb2xsYmFyVGhpY2tu
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lUXQ6OnBhaW50U2Nyb2xsQ29y
bmVyKToKKwogMjAxMS0xMS0xMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+
CiAKICAgICAgICAgTm90IHJldmlld2VkOiBmaXggU25vdyBMZW9wYXJkIGJ1aWxkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwppbmRleCAxMjAxOThhYWE1NDVhZWJkZDE2NjM1NmQ0MGNlYmYyMWY5NDg4MGJlLi44OGY2
MTBlYzQzMDAwYWYwZDg0NWRjNzY2ZWM3MzQzZTljNjUwZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDExLTExLTExICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90
QGdtYWlsLmNvbT4KKworICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTk5NjQuCisg
ICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk5OTY0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjEyNAorCisgICAgICAgIEJy
b2tlIHRvbyBtYW55IFF0IHRlc3RzIChSZXF1ZXN0ZWQgYnkgdHJvbmljYWxfIG9uICN3ZWJraXQp
LgorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjpzd2Fs
bG93Q29udGV4dE1lbnVFdmVudCk6CisgICAgICAgICogdGVzdHMvdGVzdHMucHJpOgorCiAyMDEx
LTExLTExICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgogCiAgICAgICAg
IFtRdF0gUmVtb3ZlIHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBpbiBRdCdzIG1vYmlsZSB0aGVtZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKaW5kZXggMGU2YzIwM2YxNGMyZWJmMGIyYTdhNDZhMjc4NThiNjZkZDU2YWQwMC4u
Y2ZiNDFlOTY2ZTdjMzdiNTc4YTQ1NmM4MTFjMWJjZmE3ZGQ1YzU4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBA
IC0yMCw2ICsyMCwxMCBAQCBERUZJTkVTICs9IFFUX01BS0VETEwKIAogY29udGFpbnMoUVRfQ09O
RklHLCByZWR1Y2VfZXhwb3J0cyk6Q09ORklHICs9IGhpZGVfc3ltYm9scwogCitjb250YWlucyhE
RUZJTkVTLCBXVEZfVVNFX1FUX01PQklMRV9USEVNRT0xKSB7CisgICAgREVGSU5FUyArPSBFTkFC
TEVfTk9fTElTVEJPWF9SRU5ERVJJTkc9MQorfQorCiBoYXZlUXQoNSkgewogICAgICMgQWRkIGEg
UXRTY3JpcHQgZGVwZW5kZW5jeSBmb3IgdGhlIHRpbWUgYmVpbmcsIGluIG9yZGVyIHRvIHB1bGwg
aW4gdGhlIGluY2x1ZGUKICAgICAjIHBhdGggZm9yIFF0U2NyaXB0IHdoZW4gaXQncyBidWlsdCBh
cyBhIHN0YW5kYWxvbmUgbW9kdWxlCkBAIC0yMjAyLDggKzIyMDYsOSBAQCBIRUFERVJTICs9IFwK
ICAgICBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9Db29raWVK
YXJRdC5oIFwKICAgICBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIFwKKyAgICBwbGF0Zm9y
bS9xdC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5oIFwKLSAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggXAorICAg
IHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBcCiAgICAgcGxhdGZvcm0v
U2Nyb2xsYmFyLmggXApAQCAtMjc2OSw3ICsyNzc0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxh
dGZvcm0vcXQvUGxhdGZvcm1Ub3VjaEV2ZW50UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0
Zm9ybVRvdWNoUG9pbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3Bw
IFwKLSAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcCBcCisgICAgcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0
LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcCBcCiAgICAgcGxhdGZvcm0v
cXQvU2hhcmVkVGltZXJRdC5jcHAgXApAQCAtMjc4OCwxMiArMjc5Myw5IEBAIFNPVVJDRVMgKz0g
XAogICAgIFNPVVJDRVMgKz0geG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAogfQog
Ci1jb250YWlucyhERUZJTkVTLCBIQVZFX1FTVFlMRT0xKSB7Ci0gICAgSEVBREVSUyArPSBwbGF0
Zm9ybS9xdC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCBcCi0gICAgICAgICAgICAgICBwbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIFwKLSAgICAgICAgICAgICAgIHBsYXRmb3JtL3F0
L1Njcm9sbGJhclRoZW1lUXQuaAotICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRU3R5bGUuY3BwIFwKLSAgICAgICAgICAgICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNw
cAorY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9RVF9NT0JJTEVfVEhFTUU9MSkgeworICAgIEhF
QURFUlMgKz0gcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5oCisgICAgU09VUkNFUyArPSBw
bGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxlLmNwcAogfQogCiBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfU01PT1RIX1NDUk9MTElORz0xKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmgKaW5kZXggY2NkN2E1YTk5NjJkZTc1YmU0MDI2YmVlMjQ0NjE5OTFhMmI2ZjVlZi4u
YzMwMGZkYzQ3MDdjZjY3M2I0OTM4ZGJmNGJiNTJkZWU2YTExMmEyZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaApAQCAtMjksOSArMjksNiBAQAogI2luY2x1ZGUgIkNv
bGxlY3Rpb25DYWNoZS5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1D
b250cm9sRWxlbWVudC5oIgotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgIlJlbmRlclRoZW1l
UXQuaCIKLSNlbmRpZgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMjAyLDE0ICsxOTksMTAgQEAgcHJpdmF0ZToKIGlubGluZSBib29sIEhUTUxTZWxl
Y3RFbGVtZW50Ojp1c2VzTWVudUxpc3QoKSBjb25zdAogewogI2lmIEVOQUJMRShOT19MSVNUQk9Y
X1JFTkRFUklORykKLSNpZiBQTEFURk9STShRVCkKLSAgICBpZiAoUmVuZGVyVGhlbWVRdDo6dXNl
TW9iaWxlVGhlbWUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxzZQogICAgIHJldHVybiB0
cnVlOwotI2VuZGlmCi0jZW5kaWYKKyNlbHNlCiAgICAgcmV0dXJuICFtX211bHRpcGxlICYmIG1f
c2l6ZSA8PSAxOworI2VuZGlmCiB9CiAKIEhUTUxTZWxlY3RFbGVtZW50KiB0b0hUTUxTZWxlY3RF
bGVtZW50KE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0
TW9iaWxlV2ViU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRNb2JpbGVX
ZWJTdHlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmNhMTgxN2Q3MjJiOTVlZTkyMmY3Y2Y2NDhmY2RiNGU1
MTkxY2E4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0
TW9iaWxlV2ViU3R5bGUuY3BwCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRdE1vYmlsZVdlYlN0eWxlLmgiCisKKyNpbmNs
dWRlICJRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCIKKworI2luY2x1ZGUgPFFQYWludGVyPgor
I2luY2x1ZGUgPFFQaXhtYXBDYWNoZT4KKyNpbmNsdWRlIDxRU3R5bGVPcHRpb24+CisKK1F0TW9i
aWxlV2ViU3R5bGU6OlF0TW9iaWxlV2ViU3R5bGUoKQoreworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNv
bnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0IFFCcnVzaCYgYnJ1c2gpCit7
CisgICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsKKyAgICBRQnJ1c2ggb2xkQnJ1c2gg
PSBwYWludGVyLT5icnVzaCgpOworICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6
OkFudGlhbGlhc2luZywgdHJ1ZSk7CisgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CisgICAgcGFp
bnRlci0+c2V0QnJ1c2goYnJ1c2gpOworCisgICAgaW50IGxpbmUgPSAxOworICAgIHBhaW50ZXIt
PmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVkKGxpbmUsIGxpbmUsIC1saW5lLCAtbGluZSks
CisgICAgICAgICAgICAvKiB4UmFkaXVzICovIDUuMCwgLyogeVJhZGlvdXMgKi8gNS4wKTsKKyAg
ICBwYWludGVyLT5zZXRQZW4ob2xkUGVuKTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChvbGRCcnVz
aCk7Cit9CisKK3ZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd0NoZWNrZXIoUVBhaW50ZXIqIHBh
aW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0Cit7CisgICAgaW50IGJvcmRlciA9
IHFNaW4ocU1heCgxLCBpbnQoMC4yICogc2l6ZSkpLCA2KTsKKyAgICBpbnQgY2hlY2tlclNpemUg
PSBxTWF4KHNpemUgLSAyICogYm9yZGVyLCAzKTsKKyAgICBpbnQgd2lkdGggPSBjaGVja2VyU2l6
ZSAvIDM7CisgICAgaW50IG1pZGRsZSA9IHFNYXgoMyAqIGNoZWNrZXJTaXplIC8gNywgMyk7Cisg
ICAgaW50IHggPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSk7CisgICAgaW50IHkgPSAoKHNp
emUgLSBjaGVja2VyU2l6ZSkgPj4gMSkgKyAoY2hlY2tlclNpemUgLSB3aWR0aCAtIG1pZGRsZSk7
CisgICAgUVZlY3RvcjxRTGluZUY+IGxpbmVzKGNoZWNrZXJTaXplICsgMSk7CisgICAgcGFpbnRl
ci0+c2V0UGVuKGNvbG9yKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pZGRsZTsgKytpKSB7
CisgICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgsIHkgKyB3aWR0aCk7CisgICAgICAg
ICsreDsKKyAgICAgICAgKyt5OworICAgIH0KKyAgICBmb3IgKGludCBpID0gbWlkZGxlOyBpIDw9
IGNoZWNrZXJTaXplOyArK2kpIHsKKyAgICAgICAgbGluZXNbaV0gPSBRTGluZUYoeCwgeSwgeCwg
eSArIHdpZHRoKTsKKyAgICAgICAgKyt4OworICAgICAgICAtLXk7CisgICAgfQorICAgIHBhaW50
ZXItPmRyYXdMaW5lcyhsaW5lcy5jb25zdERhdGEoKSwgbGluZXMuc2l6ZSgpKTsKK30KKworUVBp
eG1hcCBRdE1vYmlsZVdlYlN0eWxlOjpmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYgcmVjdCwgYm9v
bCBkaXNhYmxlZCkgY29uc3QKK3sKKyAgICBpbnQgc2l6ZSA9IHFNaW4ocmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKKyAgICBRUGl4bWFwIHJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3QgUVN0
cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LSIpICsgUUxhdGluMVN0cmlu
ZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSsgUUxhdGluMVN0cmluZygiLWNoZWNrZXItIik7
CisgICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZSkgKyBRTGF0
aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDog
UUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKKyAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChr
ZXksIHJlc3VsdCkpIHsKKyAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplLCBzaXplKTsKKyAg
ICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50ZXIgcGFp
bnRlcigmcmVzdWx0KTsKKyAgICAgICAgZHJhd0NoZWNrZXIoJnBhaW50ZXIsIHNpemUsIGRpc2Fi
bGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAgICAgIFFQaXhtYXBDYWNo
ZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0
IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3QKK3sKKyAgICBw
YWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworCisg
ICAgLy8gZ2V0IG1pbm9yIHNpemUgdG8gZG8gbm90IHBhaW50IGEgd2lkZSBlbGlwc2UKKyAgICBx
cmVhbCBzcXVhcmVTaXplID0gcU1pbihzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAg
IC8vIGRlZmxhdGUgb25lIHBpeGVsCisgICAgUVJlY3QgcmVjdCA9IFFSZWN0KFFQb2ludCgxLCAx
KSwgUVNpemUoc3F1YXJlU2l6ZSAtIDIsIHNxdWFyZVNpemUgLSAyKSk7CisgICAgY29uc3QgUVBv
aW50IGNlbnRlckdyYWRpZW50KHJlY3QuYm90dG9tUmlnaHQoKSAqIDAuNyk7CisKKyAgICBRUmFk
aWFsR3JhZGllbnQgcmFkaWFsR3JhZGllbnQoY2VudGVyR3JhZGllbnQsIGNlbnRlckdyYWRpZW50
LngoKSAtIDEpOworICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6d2hpdGUp
OworICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC42LCBRdDo6d2hpdGUpOworICAgIHJh
ZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBjb2xvcik7CisKKyAgICBwYWludGVyLT5zZXRQ
ZW4oY29sb3IpOworICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKKyAgICBwYWludGVyLT5k
cmF3RWxsaXBzZShyZWN0KTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChyYWRpYWxHcmFkaWVudCk7
CisgICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7CisKKyAgICBpbnQgYm9yZGVyID0gMC4x
ICogKHJlY3Qud2lkdGgoKSArIHJlY3QuaGVpZ2h0KCkpOworICAgIGJvcmRlciA9IHFNaW4ocU1h
eCgyLCBib3JkZXIpLCAxMCk7CisgICAgcmVjdC5hZGp1c3QoYm9yZGVyLCBib3JkZXIsIC1ib3Jk
ZXIsIC1ib3JkZXIpOworICAgIGlmIChjaGVja2VkKSB7CisgICAgICAgIHBhaW50ZXItPnNldFBl
bihRdDo6Tm9QZW4pOworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7CisgICAgICAg
IHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOworICAgIH0KK30KKworUVBpeG1hcCBRdE1vYmls
ZVdlYlN0eWxlOjpmaW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9v
bCBkaXNhYmxlZCkgY29uc3QKK3sKKyAgICBRUGl4bWFwIHJlc3VsdDsKKyAgICBzdGF0aWMgY29u
c3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LSIpICsgUUxhdGlu
MVN0cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSArIFFMYXRpbjFTdHJpbmcoIi1yYWRp
by0iKTsKKyAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXplLndp
ZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKHNpemUuaGVpZ2h0
KCkpICsgUUxhdGluMVN0cmluZygiLSIpCisgICAgICAgICsgKGRpc2FibGVkID8gUUxhdGluMVN0
cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSkgKyAoY2hlY2tlZCA/
IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikgOiBRTGF0aW4xU3RyaW5nKCIiKSk7CisgICAgaWYg
KCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgICAgIHJlc3VsdCA9IFFQ
aXhtYXAoc2l6ZSk7CisgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAg
ICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7CisgICAgICAgIGRyYXdSYWRpbygmcGFpbnRl
ciwgc2l6ZSwgY2hlY2tlZCwgZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5
KTsKKyAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdDb250cm9s
KENvbnRyb2xFbGVtZW50IGVsZW1lbnQsIGNvbnN0IFFTdHlsZU9wdGlvbiogb3B0aW9uLCBRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgUVdpZGdldCogd2lkZ2V0KSBjb25zdAoreworICAgIHN3aXRj
aCAoZWxlbWVudCkgeworICAgIGNhc2UgQ0VfQ2hlY2tCb3g6IHsKKyAgICAgICAgUVJlY3QgcmVj
dCA9IG9wdGlvbi0+cmVjdDsKKyAgICAgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0aW9u
LT5zdGF0ZSAmIFN0YXRlX0VuYWJsZWQpOworCisgICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5l
YXJHcmFkaWVudChyZWN0LnRvcExlZnQoKSwgcmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBp
ZiAoZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4w
LCBRdDo6bGlnaHRHcmF5KTsKKyAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQo
MC41LCBRdDo6d2hpdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpkYXJrR3JheSk7CisgICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKKyAgICAgICAgfQorCisgICAgICAg
IHBhaW50ZXItPnNldFBlbihRUGVuKGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJr
R3JheSkpOworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChsaW5lYXJHcmFkaWVudCk7CisgICAg
ICAgIHBhaW50ZXItPmRyYXdSZWN0KHJlY3QpOworICAgICAgICByZWN0LmFkanVzdCgxLCAxLCAt
MSwgLTEpOworCisgICAgICAgIGlmIChvcHRpb24tPnN0YXRlICYgU3RhdGVfT2ZmKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgUVBpeG1hcCBjaGVja2VyID0gZmluZENoZWNrZXIocmVj
dCwgZGlzYWJsZWQpOworICAgICAgICBpZiAoY2hlY2tlci5pc051bGwoKSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGludCB4ID0gKHJlY3Qud2lkdGgoKSAtIGNoZWNrZXIud2lkdGgo
KSkgPj4gMTsKKyAgICAgICAgaW50IHkgPSAocmVjdC5oZWlnaHQoKSAtIGNoZWNrZXIuaGVpZ2h0
KCkpID4+IDE7CisgICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdC54KCkgKyB4LCByZWN0
LnkoKSArIHksIGNoZWNrZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDRV9S
YWRpb0J1dHRvbjogeworICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0
YXRlICYgU3RhdGVfRW5hYmxlZCk7CisgICAgICAgIFFQaXhtYXAgcmFkaW8gPSBmaW5kUmFkaW8o
b3B0aW9uLT5yZWN0LnNpemUoKSwgb3B0aW9uLT5zdGF0ZSAmIFN0YXRlX09uLCBkaXNhYmxlZCk7
CisgICAgICAgIGlmIChyYWRpby5pc051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBwYWludGVyLT5kcmF3UGl4bWFwKG9wdGlvbi0+cmVjdC54KCksIG9wdGlvbi0+cmVjdC55KCks
IHJhZGlvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ0VfUHVzaEJ1dHRvbjog
eworICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3RhdGVf
RW5hYmxlZCk7CisgICAgICAgIFFSZWN0IHJlY3QgPSBvcHRpb24tPnJlY3Q7CisgICAgICAgIFFQ
ZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0
OjpSb3VuZEpvaW4pOworICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKKworICAgICAgICBj
b25zdCBib29sIHN1bmtlbiA9IChvcHRpb24tPnN0YXRlICYgU3RhdGVfU3Vua2VuKTsKKyAgICAg
ICAgaWYgKHN1bmtlbikgeworICAgICAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tn
cm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJH
cmFkaWVudDsKKyAgICAgICAgaWYgKGRpc2FibGVkKSB7CisgICAgICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOworICAgICAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKKyAgICAgICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAg
ICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJvdHRvbUxlZnQo
KS54KCksCisgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmJvdHRvbUxlZnQoKS55KCkgLSAv
KiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7CisgICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOworICAgICAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0Q29sb3JBdCgwLjQsIFF0Ojp3aGl0ZSk7CisgICAgICAgIH0KKworICAgICAgICBk
cmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxpbmVh
ckdyYWRpZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IFFXaW5kb3dzU3R5bGU6OmRyYXdDb250cm9sKGVsZW1lbnQsIG9wdGlvbiwgcGFpbnRlciwgd2lk
Z2V0KTsKKyAgICB9Cit9Cit2b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdQcmltaXRpdmUoUHJp
bWl0aXZlRWxlbWVudCBlbGVtZW50LCBjb25zdCBRU3R5bGVPcHRpb24qIG9wdGlvbiwgUVBhaW50
ZXIqIHBhaW50ZXIsIGNvbnN0IFFXaWRnZXQqIHdpZGdldCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KGVsZW1lbnQpIHsKKyAgICBjYXNlIFFTdHlsZTo6UEVfUGFuZWxMaW5lRWRpdDogeworICAgICAg
ICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7
CisgICAgICAgIGNvbnN0IGJvb2wgc3Vua2VuID0gKG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9TdW5r
ZW4pOworICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5yZWN0OworICAgICAgICBRUGVuIHBl
bihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91
bmRKb2luKTsKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CisKKyAgICAgICAgaWYgKHN1
bmtlbikgeworICAgICAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFp
bnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudDsK
KyAgICAgICAgaWYgKGRpc2FibGVkKSB7CisgICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRT
dGFydChyZWN0LnRvcExlZnQoKSk7CisgICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5h
bFN0b3AocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOworICAgICAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7CisgICAgICAgICAgICBs
aW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QudG9wTGVmdCgpLngoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY3QudG9wTGVmdCgpLnkoKSArIC8qIG9mZnNldCBsaW1p
dCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKKyAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENv
bG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOworICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
Q29sb3JBdCgwLjM1LCBRdDo6d2hpdGUpOworICAgICAgICB9CisKKyAgICAgICAgZHJhd1JlY3Rh
bmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBsaW5lYXJHcmFkaWVu
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBRV2luZG93
c1N0eWxlOjpkcmF3UHJpbWl0aXZlKGVsZW1lbnQsIG9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsK
KyAgICB9Cit9CisKK3ZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd011bHRpcGxlQ29tYm9CdXR0
b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBRQ29sb3IgY29sb3IpIGNv
bnN0Cit7CisgICAgaW50IHJlY3RXaWR0aCA9IHNpemUud2lkdGgoKSAtIDE7CisgICAgaW50IHdp
ZHRoID0gcU1heCgyLCByZWN0V2lkdGggPj4gMyk7CisgICAgaW50IGRpc3RhbmNlID0gKHJlY3RX
aWR0aCAtIDMgKiB3aWR0aCkgPj4gMTsKKyAgICBpbnQgdG9wID0gKHNpemUuaGVpZ2h0KCkgLSB3
aWR0aCkgPj4gMTsKKworICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7CisgICAgcGFpbnRlci0+
c2V0QnJ1c2goY29sb3IpOworCisgICAgcGFpbnRlci0+ZHJhd1JlY3QoMCwgdG9wLCB3aWR0aCwg
d2lkdGgpOworICAgIHBhaW50ZXItPmRyYXdSZWN0KHdpZHRoICsgZGlzdGFuY2UsIHRvcCwgd2lk
dGgsIHdpZHRoKTsKKyAgICBwYWludGVyLT5kcmF3UmVjdCgyICogKHdpZHRoICsgZGlzdGFuY2Up
LCB0b3AsIHdpZHRoLCB3aWR0aCk7Cit9CisKK3ZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd1Np
bXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNv
bG9yIGNvbG9yKSBjb25zdAoreworICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBp
bnQgbWlkbGUgPSB3aWR0aCA+PiAxOworICAgIFFWZWN0b3I8UUxpbmU+IGxpbmVzKHdpZHRoICsg
MSk7CisKKyAgICBmb3IgKGludCB4ID0gMCwgeSA9IDA7ICB4IDwgbWlkbGU7IHgrKywgeSsrKSB7
CisgICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwgeSwgeCwgeSArIDIpOworICAgICAgICBsaW5l
c1t4ICsgbWlkbGVdID0gUUxpbmUod2lkdGggLSB4IC0gMSwgeSwgd2lkdGggLSB4IC0gMSwgeSAr
IDIpOworICAgIH0KKyAgICAvLyBKdXN0IHRvIGVuc3VyZSB0aGUgbGluZXMnIGludGVyc2VjdGlv
bi4KKyAgICBsaW5lc1t3aWR0aF0gPSBRTGluZShtaWRsZSwgbWlkbGUsIG1pZGxlLCBtaWRsZSAr
IDIpOworCisgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBwYWludGVyLT5zZXRCcnVz
aChjb2xvcik7CisgICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxpbmVzKTsKK30KKworUVNpemUgUXRN
b2JpbGVXZWJTdHlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFTaXplJiBidXR0b25TaXpl
KSBjb25zdAoreworICAgIGNvbnN0IGludCBib3JkZXIgPSBxTWF4KDMsIGJ1dHRvblNpemUud2lk
dGgoKSA+PiAzKSA8PCAxOworCisgICAgaW50IHdpZHRoID0gYnV0dG9uU2l6ZS53aWR0aCgpIC0g
Ym9yZGVyOworICAgIGludCBoZWlnaHQgPSBidXR0b25TaXplLmhlaWdodCgpIC0gYm9yZGVyOwor
CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICByZXR1cm4gUVNpemUo
KTsKKworICAgIGlmIChoZWlnaHQgPj0gKHdpZHRoID4+IDEpKQorICAgICAgICB3aWR0aCA9IHdp
ZHRoID4+IDEgPDwgMTsKKyAgICBlbHNlCisgICAgICAgIHdpZHRoID0gaGVpZ2h0IDw8IDE7CisK
KyAgICByZXR1cm4gUVNpemUod2lkdGggKyAxLCB3aWR0aCk7Cit9CisKK1FQaXhtYXAgUXRNb2Jp
bGVXZWJTdHlsZTo6ZmluZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiBzaXplLCBib29sIG11bHRp
cGxlLCBib29sIGRpc2FibGVkKSBjb25zdAoreworICAgIFFQaXhtYXAgcmVzdWx0OworICAgIFFT
aXplIGltYWdlU2l6ZSA9IGdldEJ1dHRvbkltYWdlU2l6ZShzaXplKTsKKworICAgIGlmIChpbWFn
ZVNpemUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisgICAgc3RhdGljIGNv
bnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS0iKSArIFFMYXRp
bjFTdHJpbmcobWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkgKyBRTGF0aW4xU3RyaW5nKCItY29t
Ym8tIik7CisgICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyAobXVsdGlwbGUgPyBRTGF0aW4xU3Ry
aW5nKCJtdWx0aXBsZS0iKSA6IFFMYXRpbjFTdHJpbmcoInNpbXBsZS0iKSkKKyAgICAgICAgKyBR
U3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsg
UVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgKyBRTGF0aW4xU3Ry
aW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDogUUxhdGlu
MVN0cmluZygiZW5hYmxlZCIpKTsKKyAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJl
c3VsdCkpIHsKKyAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChpbWFnZVNpemUpOworICAgICAgICBy
ZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICBRUGFpbnRlciBwYWludGVyKCZy
ZXN1bHQpOworICAgICAgICBpZiAobXVsdGlwbGUpCisgICAgICAgICAgICBkcmF3TXVsdGlwbGVD
b21ib0J1dHRvbigmcGFpbnRlciwgaW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkg
OiBRdDo6ZGFya0dyYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkcmF3U2ltcGxlQ29t
Ym9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5IDog
UXQ6OmRhcmtHcmF5KTsKKyAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQp
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFF0TW9iaWxlV2ViU3R5bGU6
OmRyYXdDb21wbGV4Q29udHJvbChDb21wbGV4Q29udHJvbCBjb250cm9sLCBjb25zdCBRU3R5bGVP
cHRpb25Db21wbGV4KiBvcHRpb24sIFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRV2lkZ2V0KiB3
aWRnZXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb250cm9sKSB7CisgICAgY2FzZSBDQ19Db21i
b0JveDogeworICAgICAgICBib29sIG11bHRpcGxlID0gZmFsc2U7CisgICAgICAgIGNvbnN0IGJv
b2wgZGlzYWJsZWQgPSAhKG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9FbmFibGVkKTsKKworICAgICAg
ICBjb25zdCBRU3R5bGVPcHRpb25Db21ib0JveCogY21iID0gMDsKKyAgICAgICAgY29uc3QgV2Vi
Q29yZTo6UXRTdHlsZU9wdGlvbldlYkNvbWJvQm94KiB3ZWJDb21ibyA9IHN0YXRpY19jYXN0PGNv
bnN0IFdlYkNvcmU6OlF0U3R5bGVPcHRpb25XZWJDb21ib0JveCo+KG9wdGlvbik7CisKKyAgICAg
ICAgaWYgKHdlYkNvbWJvKSB7CisgICAgICAgICAgICBtdWx0aXBsZSA9IHdlYkNvbWJvLT5tdWx0
aXBsZSgpOworICAgICAgICAgICAgY21iID0gd2ViQ29tYm87CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgY21iID0gcXN0eWxlb3B0aW9uX2Nhc3Q8Y29uc3QgUVN0eWxlT3B0aW9uQ29tYm9C
b3gqPihvcHRpb24pOworCisgICAgICAgIGlmICghY21iKSB7CisgICAgICAgICAgICBRV2luZG93
c1N0eWxlOjpkcmF3Q29tcGxleENvbnRyb2woY29udHJvbCwgb3B0aW9uLCBwYWludGVyLCB3aWRn
ZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShjbWIt
PnN1YkNvbnRyb2xzICYgU0NfQ29tYm9Cb3hBcnJvdykpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5yZWN0OworICAgICAgICBRUGVuIHBlbihRdDo6
ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2lu
KTsKKyAgICAgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OworICAgICAgICBpZiAo
ZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90
dG9tTGVmdCgpKTsKKyAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChyZWN0
LnRvcExlZnQoKSk7CisgICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwg
UXQ6OmdyYXkpOworICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0
Ojp3aGl0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgpLngoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnkoKSAtIC8qIG9mZnNldCBsaW1pdCBmb3IgZ3Jh
ZGllbnQgKi8gMjApKTsKKyAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4w
LCBRdDo6Z3JheSk7CisgICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNCwg
UXQ6OndoaXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xC
YWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOworCisgICAgICAg
IHJlY3QgPSBzdWJDb250cm9sUmVjdChDQ19Db21ib0JveCwgY21iLCBTQ19Db21ib0JveEFycm93
LCB3aWRnZXQpOworICAgICAgICBRUGl4bWFwIHBpYyA9IGZpbmRDb21ib0J1dHRvbihyZWN0LnNp
emUoKSwgbXVsdGlwbGUsIGRpc2FibGVkKTsKKworICAgICAgICBpZiAocGljLmlzTnVsbCgpKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHggPSAocmVjdC53aWR0aCgpIC0gcGlj
LndpZHRoKCkpID4+IDE7CisgICAgICAgIGludCB5ID0gKHJlY3QuaGVpZ2h0KCkgLSBwaWMuaGVp
Z2h0KCkpID4+IDE7CisgICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdC54KCkgKyB4LCBy
ZWN0LnkoKSArIHksIHBpYyk7CisKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKGRpc2FibGVkID8g
UXQ6OmdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAgICAgICBwYWludGVyLT5kcmF3TGluZShyZWN0
LmxlZnQoKSAtIDIsIHJlY3QudG9wKCkgKyAyLCByZWN0LmxlZnQoKSAtIDIsIHJlY3QuYm90dG9t
KCkgLSAyKTsKKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UVdpbmRvd3NTdHlsZTo6ZHJhd0NvbXBsZXhDb250cm9sKGNvbnRyb2wsIG9wdGlvbiwgcGFpbnRl
ciwgd2lkZ2V0KTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0
TW9iaWxlV2ViU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjk5ZDJiOGI1YTM5Yzk0YzBiOWExNzJhMThm
ZTRiYWVjMDQyNjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUXRNb2JpbGVXZWJTdHlsZS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFF0TW9iaWxlV2ViU3R5bGVfaAorI2RlZmluZSBRdE1vYmlsZVdlYlN0eWxlX2gK
KworI2luY2x1ZGUgPFFXaW5kb3dzU3R5bGU+CisKK2NsYXNzIFF0TW9iaWxlV2ViU3R5bGUgOiBw
dWJsaWMgUVdpbmRvd3NTdHlsZSB7CitwdWJsaWM6CisgICAgUXRNb2JpbGVXZWJTdHlsZSgpOwor
CisgICAgdm9pZCBkcmF3Q29udHJvbChDb250cm9sRWxlbWVudCwgY29uc3QgUVN0eWxlT3B0aW9u
KiwgUVBhaW50ZXIqLCBjb25zdCBRV2lkZ2V0KikgY29uc3Q7CisgICAgdm9pZCBkcmF3Q29tcGxl
eENvbnRyb2woQ29tcGxleENvbnRyb2wsIGNvbnN0IFFTdHlsZU9wdGlvbkNvbXBsZXgqLCBRUGFp
bnRlciosIGNvbnN0IFFXaWRnZXQqKSBjb25zdDsKKyAgICB2b2lkIGRyYXdQcmltaXRpdmUoUHJp
bWl0aXZlRWxlbWVudCwgY29uc3QgUVN0eWxlT3B0aW9uKiwgUVBhaW50ZXIqLCBjb25zdCBRV2lk
Z2V0KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkcmF3Q2hlY2tlcihRUGFpbnRlciog
cGFpbnRlciwgaW50IHNpemUsIFFDb2xvciBjb2xvcikgY29uc3Q7CisgICAgUVBpeG1hcCBmaW5k
Q2hlY2tlcihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7CisKKyAgICB2
b2lkIGRyYXdSYWRpbyhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIGJvb2wg
Y2hlY2tlZCwgUUNvbG9yIGNvbG9yKSBjb25zdDsKKyAgICBRUGl4bWFwIGZpbmRSYWRpbyhjb25z
dCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGRpc2FibGVkKSBjb25zdDsKKworICAg
IFFTaXplIGdldEJ1dHRvbkltYWdlU2l6ZShjb25zdCBRU2l6ZSYgYnV0dG9uU2l6ZSkgY29uc3Q7
CisgICAgdm9pZCBkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0
IFFTaXplJiBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0OworICAgIHZvaWQgZHJhd011bHRpcGxl
Q29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBRQ29sb3Ig
Y29sb3IpIGNvbnN0OworICAgIFFQaXhtYXAgZmluZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiBz
aXplLCBib29sIG11bHRpcGxlLCBib29sIGRpc2FibGVkKSBjb25zdDsKKworfTsKKworI2VuZGlm
IC8vIFF0TW9iaWxlV2ViU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaAppbmRleCBkYWUxNjk2NWFlZWNmNDJkZWZj
MmMzZTkxMjEwNTQ3MWQ1NDk0YzBmLi4yOWM4MjIwYWNhOTE4ZGZhNjQzNzZiZTVhMWYwZWQ2N2Vm
OTU0Y2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdFN0eWxlT3B0
aW9uV2ViQ29tYm9Cb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdFN0eWxl
T3B0aW9uV2ViQ29tYm9Cb3guaApAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAiSFRNTFNl
bGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUaGVtZVF0LmgiCiAKICNpbmNsdWRlIDxRU3R5bGVPcHRpb24+CiAKQEAgLTM1LDcgKzM0LDEx
IEBAIGNsYXNzIFF0U3R5bGVPcHRpb25XZWJDb21ib0JveCA6IHB1YmxpYyBRU3R5bGVPcHRpb25D
b21ib0JveCB7CiBwdWJsaWM6CiAgICAgUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94KFJlbmRlck9i
amVjdCogbykKICAgICAgICAgOiBRU3R5bGVPcHRpb25Db21ib0JveCgpCisgICAgI2lmIEVOQUJM
RShOT19MSVNUQk9YX1JFTkRFUklORykKICAgICAgICAgLCBtX211bHRpcGxlKGNoZWNrTXVsdGlw
bGUobykpCisgICAgI2Vsc2UKKyAgICAgICAgLCBtX211bHRpcGxlKGZhbHNlKQorICAgICNlbmRp
ZgogICAgIHsKICAgICB9CiAKQEAgLTQ2LDggKzQ5LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
Y2hlY2tNdWx0aXBsZShSZW5kZXJPYmplY3QqIG8pCiAgICAgewotICAgICAgICBpZiAoUmVuZGVy
VGhlbWVRdDo6dXNlTW9iaWxlVGhlbWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG8gPyBzdGF0aWNfY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudCo+KG8tPm5vZGUoKSkgOiAwOwogICAgICAgICByZXR1cm4gc2VsZWN0ID8gc2Vs
ZWN0LT5tdWx0aXBsZSgpIDogZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0NmQwNTA0NWMxNWQ3YzY2NGI3NmI4YjMzNWJkNmE5NmRlOTBiOWRkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgyNCArMCww
IEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0Br
ZGUub3JnPgotICogICAgICAgICAgICAgICAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUu
b3JnPgotICogICAgICAgICAgICAgICAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgotCi0jaW5jbHVkZSAiQ1NTRm9udFNlbGVj
dG9yLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1ZhbHVl
S2V5d29yZHMuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnRR
dC5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJGb250LmgiCi0jaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgotI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKLSNp
bmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgotI2luY2x1ZGUgIlF0U3R5bGVPcHRpb25XZWJDb21i
b0JveC5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcp
Ci0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNlbmRpZgotI2luY2x1ZGUgIlJlbmRlclNs
aWRlci5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUXQuaCIKLSNpbmNsdWRlICJTbGlkZXJU
aHVtYkVsZW1lbnQuaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotCi0jaW5j
bHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFDb2xvcj4KLSNpbmNsdWRlIDxRRmlsZT4K
LSNpbmNsdWRlIDxRRm9udE1ldHJpY3M+Ci0jaW5jbHVkZSA8UUxpbmVFZGl0PgotI2luY2x1ZGUg
PFFNYWNTdHlsZT4KLSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRUGxhc3RpcXVlU3R5
bGU+Ci0jaW5jbHVkZSA8UVB1c2hCdXR0b24+Ci0jaW5jbHVkZSA8UVN0eWxlRmFjdG9yeT4KLSNp
bmNsdWRlIDxRU3R5bGVPcHRpb25CdXR0b24+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uRnJhbWVW
Mj4KLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotI2luY2x1ZGUgPFFTdHlsZU9wdGlvblByb2dy
ZXNzQmFyVjI+Ci0jZW5kaWYKLSNpbmNsdWRlIDxRU3R5bGVPcHRpb25TbGlkZXI+Ci0jaW5jbHVk
ZSA8UVdpZGdldD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwotCi1pbmxpbmUgc3RhdGljIHZvaWQgaW5pdFN0eWxlT3B0aW9uKFFXaWRnZXQgKndp
ZGdldCwgUVN0eWxlT3B0aW9uJiBvcHRpb24pCi17Ci0gICAgaWYgKHdpZGdldCkKLSAgICAgICAg
b3B0aW9uLmluaXRGcm9tKHdpZGdldCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAg
ICAgSWYgYSB3aWRnZXQgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBmb3IgcmVuZGVyaW5nLCB3
ZSBmYWxsYmFjayB0byBkZWZhdWx0Ci0gICAgICAgICAgdmFsdWUgZm9yIGFuIGFjdGl2ZSB3aWRn
ZXQuCi0gICAgICAgICAqLwotICAgICAgICBvcHRpb24uc3RhdGUgPSBRU3R5bGU6OlN0YXRlX0Fj
dGl2ZSB8IFFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKLSAgICB9Ci19Ci0KLQotUVNoYXJlZFBvaW50
ZXI8U3R5bGVQYWludGVyPiBSZW5kZXJUaGVtZVFTdHlsZTo6Z2V0U3R5bGVQYWludGVyKGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvKQotewotICAgIHJldHVybiBRU2hhcmVkUG9pbnRlcjxTdHls
ZVBhaW50ZXI+KG5ldyBTdHlsZVBhaW50ZXJRU3R5bGUodGhpcywgcGFpbnRJbmZvKSk7Ci19Ci0K
LVN0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxl
KiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCi0gICAgOiBTdHlsZVBhaW50ZXIo
dGhlbWUsIHBhaW50SW5mbykKLXsKLSAgICBpbml0KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJ
bmZvLmNvbnRleHQgOiAwLCB0aGVtZS0+cVN0eWxlKCkpOwotfQotCi1TdHlsZVBhaW50ZXJRU3R5
bGU6OlN0eWxlUGFpbnRlclFTdHlsZShTY3JvbGxiYXJUaGVtZVF0KiB0aGVtZSwgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KQotICAgIDogU3R5bGVQYWludGVyKCkKLXsKLSAgICBpbml0KGNvbnRl
eHQsIHRoZW1lLT5zdHlsZSgpKTsKLX0KLQotdm9pZCBTdHlsZVBhaW50ZXJRU3R5bGU6OmluaXQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBRU3R5bGUqIHRoZW1lU3R5bGUpCi17Ci0gICAgcGFp
bnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIHdpZGdldCA9IDA7Ci0gICAgUVBhaW50RGV2aWNlKiBkZXYgPSAwOwotICAgIGlmIChw
YWludGVyKQotICAgICAgICBkZXYgPSBwYWludGVyLT5kZXZpY2UoKTsKLSAgICBpZiAoZGV2ICYm
IGRldi0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6V2lkZ2V0KQotICAgICAgICB3aWRnZXQgPSBz
dGF0aWNfY2FzdDxRV2lkZ2V0Kj4oZGV2KTsKLSAgICBzdHlsZSA9IHRoZW1lU3R5bGU7Ci0KLSAg
ICBTdHlsZVBhaW50ZXI6OmluaXQoY29udGV4dCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyVGhl
bWU+IFJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFJlbmRlclRoZW1lUVN0eWxlKHBhZ2UpKTsKLX0KLQotUmVuZGVyVGhlbWVR
U3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKFBhZ2UqIHBhZ2UpCi0gICAgOiBSZW5kZXJUaGVtZVF0
KHBhZ2UpCi0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgLCBtX2xpbmVFZGl0KDApCi0jZW5k
aWYKLXsKLSAgICBRUHVzaEJ1dHRvbiBidXR0b247Ci0gICAgUUZvbnQgZGVmYXVsdEJ1dHRvbkZv
bnQgPSBRQXBwbGljYXRpb246OmZvbnQoJmJ1dHRvbik7Ci0gICAgbV9idXR0b25Gb250RmFtaWx5
ID0gZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7Ci0jaWZkZWYgUV9PU19NQUMKLSAgICBidXR0
b24uc2V0QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOwotICAgIFFGb250SW5mbyBmb250
SW5mbyhkZWZhdWx0QnV0dG9uRm9udCk7Ci0gICAgbV9idXR0b25Gb250UGl4ZWxTaXplID0gZm9u
dEluZm8ucGl4ZWxTaXplKCk7Ci0jZW5kaWYKLQotICAgIG1fZmFsbGJhY2tTdHlsZSA9IFFTdHls
ZUZhY3Rvcnk6OmNyZWF0ZShRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIikpOwotfQotCi1SZW5kZXJU
aGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKLXsKLSAgICBkZWxldGUgbV9mYWxsYmFj
a1N0eWxlOwotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIGRlbGV0ZSBtX2xpbmVFZGl0Owot
I2VuZGlmCi19Ci0KLQotLy8gZm9yIHNvbWUgd2lkZ2V0IHBhaW50aW5nLCB3ZSBuZWVkIHRvIGZh
bGxiYWNrIHRvIFdpbmRvd3Mgc3R5bGUKLVFTdHlsZSogUmVuZGVyVGhlbWVRU3R5bGU6OmZhbGxi
YWNrU3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiAobV9mYWxsYmFja1N0eWxlKSA/IG1fZmFs
bGJhY2tTdHlsZSA6IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KLQotUVN0eWxlKiBSZW5kZXJU
aGVtZVFTdHlsZTo6cVN0eWxlKCkgY29uc3QKLXsKLSAgICBpZiAobV9wYWdlKSB7Ci0gICAgICAg
IFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gbV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PnBsYXRmb3JtUGFnZUNsaWVudCgpOwotCi0gICAgICAgIGlmIChwYWdlQ2xpZW50KQotICAgICAg
ICAgICAgcmV0dXJuIHBhZ2VDbGllbnQtPnN0eWxlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFFB
cHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KLQotaW50IFJlbmRlclRoZW1lUVN0eWxlOjpmaW5kRnJh
bWVMaW5lV2lkdGgoUVN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSNpZm5kZWYgUVRfTk9fTElORUVE
SVQKLSAgICBpZiAoIW1fbGluZUVkaXQpCi0gICAgICAgIG1fbGluZUVkaXQgPSBuZXcgUUxpbmVF
ZGl0KCk7Ci0jZW5kaWYKLQotICAgIFFTdHlsZU9wdGlvbkZyYW1lVjIgb3B0OwotICAgIFFXaWRn
ZXQqIHdpZGdldCA9IDA7Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0gICAgd2lkZ2V0ID0gbV9s
aW5lRWRpdDsKLSNlbmRpZgotICAgIHJldHVybiBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQ
TV9EZWZhdWx0RnJhbWVXaWR0aCwgJm9wdCwgd2lkZ2V0KTsKLX0KLQotUVJlY3QgUmVuZGVyVGhl
bWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNv
bnN0Ci17Ci0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsKLSAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICBvcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVjdDsK
LQotICAgIFFSZWN0IGxheW91dFJlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxl
OjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwgJm9wdGlvbiwgMCk7Ci0gICAgaWYgKCFsYXlvdXRS
ZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIGludCBwYWRkaW5nTGVmdCA9IGxheW91dFJlY3QubGVm
dCgpIC0gb3JpZ2luYWxSZWN0LmxlZnQoKTsKLSAgICAgICAgaW50IHBhZGRpbmdSaWdodCA9IG9y
aWdpbmFsUmVjdC5yaWdodCgpIC0gbGF5b3V0UmVjdC5yaWdodCgpOwotICAgICAgICBpbnQgcGFk
ZGluZ1RvcCA9IGxheW91dFJlY3QudG9wKCkgLSBvcmlnaW5hbFJlY3QudG9wKCk7Ci0gICAgICAg
IGludCBwYWRkaW5nQm90dG9tID0gb3JpZ2luYWxSZWN0LmJvdHRvbSgpIC0gbGF5b3V0UmVjdC5i
b3R0b20oKTsKLQotICAgICAgICByZXR1cm4gb3JpZ2luYWxSZWN0LmFkanVzdGVkKC1wYWRkaW5n
TGVmdCwgLXBhZGRpbmdUb3AsIHBhZGRpbmdSaWdodCwgcGFkZGluZ0JvdHRvbSk7Ci0gICAgfQot
ICAgIHJldHVybiBvcmlnaW5hbFJlY3Q7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmNv
bXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29uc3QKLXsK
LSAgICBRU2l6ZSBzaXplKDAsIDApOwotICAgIGNvbnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJT
dHlsZS0+Zm9udCgpLmZvbnQoKSk7Ci0gICAgUVN0eWxlKiBzdHlsZSA9IHFTdHlsZSgpOwotCi0g
ICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBUZXh0QXJl
YVBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0RmllbGRQYXJ0
OiB7Ci0gICAgICAgIGludCBwYWRkaW5nID0gZmluZEZyYW1lTGluZVdpZHRoKHN0eWxlKTsKLSAg
ICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkp
OwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBG
aXhlZCkpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3Ro
KHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJl
IGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXJl
bmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXJlbmRlclN0eWxlLT5o
ZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChyZW5kZXJT
dHlsZS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6IHsKLSAgICAgICAg
UVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgY2hlY2tCb3hXaWR0aCA9IHN0eWxlLT5w
aXhlbE1ldHJpYyhRU3R5bGU6OlBNX0luZGljYXRvcldpZHRoLCAmc3R5bGVPcHRpb24pOwotICAg
ICAgICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAg
ICAgIHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0JveFdpZHRoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUmFkaW9QYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlv
biBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0
ZV9TbWFsbDsKLSAgICAgICAgaW50IHJhZGlvV2lkdGggPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0
eWxlOjpQTV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgJnN0eWxlT3B0aW9uKTsKLSAgICAgICAg
cmFkaW9XaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBzaXpl
ID0gUVNpemUocmFkaW9XaWR0aCwgcmFkaW9XaWR0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFydDogewotICAgICAg
ICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIFFTaXplIGNvbnRlbnRTaXplID0g
Zm0uc2l6ZShRdDo6VGV4dFNob3dNbmVtb25pYywgUVN0cmluZzo6ZnJvbUxhdGluMSgiWCIpKTsK
LSAgICAgICAgUVNpemUgcHVzaEJ1dHRvblNpemUgPSBzdHlsZS0+c2l6ZUZyb21Db250ZW50cyhR
U3R5bGU6OkNUX1B1c2hCdXR0b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCBjb250ZW50U2l6ZSwgMCk7Ci0gICAg
ICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBRUmVjdCgwLCAwLCBwdXNoQnV0dG9uU2l6ZS53aWR0aCgp
LCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIFFSZWN0IGxheW91dFJlY3QgPSBz
dHlsZS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRp
b24sIDApOwotCi0gICAgICAgIC8vIElmIHRoZSBzdHlsZSBzdXBwb3J0cyBsYXlvdXQgcmVjdHMg
d2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBhY2NvcmRpbmdseQotICAgICAgICAvLyBpbiBw
YWludEJ1dHRvbigpIGJlbG93LgotICAgICAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpCi0g
ICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlvdXRSZWN0LmhlaWdodCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQocHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkp
OwotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE1lbnVsaXN0UGFydDogewotICAg
ICAgICBRU3R5bGVPcHRpb25Db21ib0JveCBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRp
b24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgaW50IGNvbnRlbnRIZWln
aHQgPSBxTWF4KGZtLmxpbmVTcGFjaW5nKCksIDE0KSArIDI7Ci0gICAgICAgIFFTaXplIG1lbnVM
aXN0U2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6Q1RfQ29tYm9Cb3gsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHls
ZU9wdGlvbiwgUVNpemUoMCwgY29udGVudEhlaWdodCksIDApOwotICAgICAgICBzaXplLnNldEhl
aWdodChtZW51TGlzdFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IENoZWNrIGlz
IGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBh
Y2NvdW50LgotICAgIGlmIChyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
ICYmIHNpemUud2lkdGgoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRNaW5XaWR0aChM
ZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChyZW5kZXJTdHlsZS0+aGVpZ2h0
KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxlLT5z
ZXRNaW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLQotCi12b2lk
IFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBE
aXRjaCB0aGUgYm9yZGVyLgotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotCi0jaWZkZWYgUV9P
U19NQUMKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkgewot
ICAgICAgICAvLyBUaGUgTWFjIHBvcnRzIGlnbm9yZSB0aGUgc3BlY2lmaWVkIGhlaWdodCBmb3Ig
PGlucHV0IHR5cGU9ImJ1dHRvbiI+IGVsZW1lbnRzCi0gICAgICAgIC8vIHVubGVzcyBhIGJvcmRl
ciBhbmQvb3IgYmFja2dyb3VuZCBDU1MgcHJvcGVydHkgaXMgYWxzbyBzcGVjaWZpZWQuCi0gICAg
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwotCi0jaWZk
ZWYgUV9PU19NQUMgLy8gVXNlIGZpeGVkIGZvbnQgc2l6ZSBhbmQgZmFtaWx5IG9uIE1hYyAobGlr
ZSBTYWZhcmkgZG9lcykKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShtX2J1
dHRvbkZvbnRQaXhlbFNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
bV9idXR0b25Gb250UGl4ZWxTaXplKTsKLSNlbHNlCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFNw
ZWNpZmllZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOwotI2VuZGlmCi0KLSAgICBGb250RmFtaWx5
IGZvbnRGYW1pbHk7Ci0gICAgZm9udEZhbWlseS5zZXRGYW1pbHkobV9idXR0b25Gb250RmFtaWx5
KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KGZvbnRGYW1pbHkpOwotICAgIHN0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICBzdHlsZS0+Zm9udCgp
LnVwZGF0ZShzZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCkpOwotICAgIHN0eWxlLT5zZXRMaW5lSGVp
Z2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBzZXRCdXR0b25TaXpl
KHN0eWxlKTsKLSAgICBzZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJU
aGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17
Ci0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgIHN0eWxlT3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0KLSAgICAvLyBGYWtlIGEgYnV0dG9uIHJlY3Qg
aGVyZSwgc2luY2Ugd2UncmUganVzdCBjb21wdXRpbmcgZGVsdGFzCi0gICAgUVJlY3Qgb3JpZ2lu
YWxSZWN0ID0gUVJlY3QoMCwgMCwgMTAwLCAzMCk7Ci0gICAgc3R5bGVPcHRpb24ucmVjdCA9IG9y
aWdpbmFsUmVjdDsKLQotICAgIC8vIERlZmF1bHQgcGFkZGluZyBpcyBiYXNlZCBvbiB0aGUgYnV0
dG9uIG1hcmdpbiBwaXhlbCBtZXRyaWMKLSAgICBpbnQgYnV0dG9uTWFyZ2luID0gcVN0eWxlKCkt
PnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRpb24sIDApOwot
ICAgIGludCBwYWRkaW5nTGVmdCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1JpZ2h0
ID0gYnV0dG9uTWFyZ2luOwotICAgIGludCBwYWRkaW5nVG9wID0gYnV0dG9uTWFyZ2luOwotICAg
IGludCBwYWRkaW5nQm90dG9tID0gYnV0dG9uTWFyZ2luOwotCi0gICAgLy8gVGhlbiBjaGVjayBp
ZiB0aGUgc3R5bGUgdXNlcyBsYXlvdXQgbWFyZ2lucwotICAgIFFSZWN0IGxheW91dFJlY3QgPSBx
U3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9w
dGlvbiwgMCk7Ci0gICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIFFSZWN0
IGNvbnRlbnRzUmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hC
dXR0b25Db250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0gICAgICAgIHBhZGRpbmdMZWZ0ID0gY29u
dGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3QubGVmdCgpOwotICAgICAgICBwYWRkaW5nUmln
aHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50c1JlY3QucmlnaHQoKTsKLSAgICAgICAg
cGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxheW91dFJlY3QudG9wKCk7Ci0KLSAg
ICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0
aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQotICAgICAgICAvLyBwYWRkaW5nQm90dG9tID0gbGF5
b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0b20oKTsKLSAgICB9Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBzdHls
ZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlclFTdHls
ZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihw
LndpZGdldCwgb3B0aW9uKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0KLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0g
aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBpZiAoYXBwZWFy
YW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBhcHBlYXJhbmNlID09IEJ1dHRvblBhcnQpIHsKLSAg
ICAgICAgb3B0aW9uLnJlY3QgPSBpbmZsYXRlQnV0dG9uUmVjdChvcHRpb24ucmVjdCk7Ci0gICAg
ICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNoQnV0dG9uLCBvcHRpb24pOwotICAgIH0g
ZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBSYWRpb1BhcnQpCi0gICAgICAgcC5kcmF3Q29udHJvbChR
U3R5bGU6OkNFX1JhZGlvQnV0dG9uLCBvcHRpb24pOwotICAgIGVsc2UgaWYgKGFwcGVhcmFuY2Ug
PT0gQ2hlY2tib3hQYXJ0KQotICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9DaGVja0Jv
eCwgb3B0aW9uKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVFT
dHlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gUmVzZXR0aW5nIHRoZSBzdHlsZSBs
aWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVyZW5jZXMgbGlrZToKLSAgICAvLyAtIFJlbmRlclRleHRD
b250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAxNjh4MjUgW2JnY29sb3I9I0ZGRkZGRl0gYm9y
ZGVyOiAoMnB4IGluc2V0ICMwMDAwMDApXQotICAgIC8vICsgUmVuZGVyVGV4dENvbnRyb2wge0lO
UFVUfSBhdCAoMiwyKSBzaXplIDE2NngyNgotICAgIC8vIGluIGxheW91dCB0ZXN0cyB3aGVuIGEg
Q1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhhdCBkb2Vzbid0IGFmZmVjdCBiYWNrZ3JvdW5kIGNvbG9y
LCBib3JkZXIgb3IKLSAgICAvLyBwYWRkaW5nLiBKdXN0IHdvcnRoIGtlZXBpbmcgaW4gbWluZCEK
LSAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7Ci0gICAg
c3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOwotICAgIGNv
bXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHls
ZTo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgaSk7Ci0g
ICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVP
cHRpb25GcmFtZVYyIHBhbmVsOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgcGFuZWwp
OwotICAgIHBhbmVsLnJlY3QgPSByOwotICAgIHBhbmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxp
bmVXaWR0aChxU3R5bGUoKSk7Ci0gICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5r
ZW47Ci0gICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5bGVPcHRpb25GcmFtZVYyOjpOb25lOwotCi0g
ICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4dCBmaWVsZAotICAgIENv
bnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhwYW5l
bCwgbyk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4dEZpZWxkUGFydAotICAgICAgICAmJiBh
cHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFRl
eHRBcmVhUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0KQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4KLSAgICBw
LmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCBwYW5lbCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgYWRqdXN0VGV4dEZpZWxkU3R5bGUoc2VsZWN0b3Is
IHN0eWxlLCBlbGVtZW50KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0
QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVRU3R5bGU6OnNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Ci17Ci0gICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0gNDsKLSAgICBjb25zdCBpbnQgcGFkZGlu
Z1JpZ2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVy
Y2VudCgpID8gNSA6IDg7Ci0KLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRp
bmdMZWZ0LCBGaXhlZCkpOwotCi0gICAgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggb3B0OwotICAgIGlu
dCB3ID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uSWNvblNpemUsICZv
cHQsIDApOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmdSaWdodCAr
IHcsIEZpeGVkKSk7Ci0KLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoMiwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMiwgRml4ZWQpKTsKLX0KLQot
Ci1ib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRl
clFTdHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94IG9wdChvKTsKLSAgICBpbml0
U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdCk7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9w
dGlvbnMob3B0LCBvKTsKLQotICAgIEludFJlY3QgcmVjdCA9IHI7Ci0KLSNpZiBkZWZpbmVkKFFf
T1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCi0gICAgLy8gUU1hY1N0eWxlIG1h
a2VzIHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21hbGxlciB0byBsZWF2ZSBzcGFjZSBm
b3IgdGhlIGZvY3VzIHJlY3QuCi0gICAgLy8gQmVjYXVzZSBvZiBpdCwgdGhlIGNvbWJvIGJ1dHRv
biBpcyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9mIHdoZXJlIGl0IHdhcyBleHBlY3Qg
dG8gYmUgYW5kIG1heSBlbmQgdXAKLSAgICAvLyBvdmVybGFwcGVkIHdpdGggdGhlIHRleHQuIFRo
aXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUgY29tYm8gYm94IHdpdGggdGhlIGV4
cGVjdGVkIHdpZHRoLgotICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5zdHlsZSkp
Ci0gICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7Ci0jZW5kaWYKLQotICAgIGNvbnN0IFFQb2ludCB0
b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExl
ZnQpOwotICAgIG9wdC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIG9wdC5yZWN0LnNl
dFNpemUocmVjdC5zaXplKCkpOwotCi0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpD
Q19Db21ib0JveCwgb3B0KTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAotewotICAgIC8vIFdPUktBUk9VTkQgYmVjYXVzZSBodG1sLmNzcyBzcGVj
aWZpZXMgLXdlYmtpdC1ib3JkZXItcmFkaXVzIGZvciA8c2VsZWN0PiBzbyB3ZSBvdmVycmlkZSBp
dCBoZXJlCi0gICAgLy8gc2VlIGFsc28gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgzOTkKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLQotICAgIC8vIEhl
aWdodCBpcyBsb2NrZWQgdG8gYXV0by4KLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRv
KSk7Ci0KLSAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0gICAgc3R5bGUtPnNl
dFdoaXRlU3BhY2UoUFJFKTsKLQotICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsK
LQotICAgIC8vIEFkZCBpbiB0aGUgcGFkZGluZyB0aGF0IHdlJ2QgbGlrZSB0byB1c2UuCi0gICAg
c2V0UG9wdXBQYWRkaW5nKHN0eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFp
bnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQot
ewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94
IG9wdGlvbihvKTsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAg
aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVj
dCA9IHI7Ci0KLSAgICAvLyBmb3IgZHJhd2luZyB0aGUgY29tYm8gYm94IGFycm93LCByZWx5IG9u
bHkgb24gdGhlIGZhbGxiYWNrIHN0eWxlCi0gICAgcC5zdHlsZSA9IGZhbGxiYWNrU3R5bGUoKTsK
LSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX0NvbWJvQm94QXJyb3c7Ci0gICAg
cC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwgb3B0aW9uKTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi1kb3VibGUgUmVu
ZGVyVGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAotewotICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+
cG9zaXRpb24oKSA+PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFFTdHlsZU9wdGlvblBy
b2dyZXNzQmFyVjIgb3B0aW9uOwotICAgIG9wdGlvbi5yZWN0LnNldFNpemUocmVuZGVyUHJvZ3Jl
c3MtPnNpemUoKSk7Ci0gICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5v
a2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKLSAgICAvLyB3ZSBzaW11bGF0ZSBv
bmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KLSAgICByZXR1cm4g
KG9wdGlvbi5yZWN0LndpZHRoKCkgLyBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Q
cm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pKSAqIGFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0
eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
aSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBpZiAoIW8tPmlzUHJvZ3Jlc3MoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7Ci0g
ICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9w
dGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwg
b3B0aW9uKTsKLSAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwot
Ci0gICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhv
KTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgb3B0aW9uLm1heGltdW0gPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpOwotICAgIG9wdGlvbi5taW5pbXVtID0gMDsKLSAgICBvcHRp
b24ucHJvZ3Jlc3MgPSAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgKiBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKTsKLQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2Nh
dGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwotICAgIG9wdGlvbi5y
ZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwotICAgIG9wdGlvbi5yZWN0LnNldFNpemUoci5zaXpl
KCkpOwotCi0gICAgaWYgKG9wdGlvbi5wcm9ncmVzcyA8IDApIHsKLSAgICAgICAgLy8gRklYTUU6
IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBp
cyBmaXhlZCwKLSAgICAgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNy
b3NzIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Q
cm9ncmVzc0Jhckdyb292ZSwgb3B0aW9uKTsKLSAgICAgICAgaW50IGNodW5rV2lkdGggPSBxU3R5
bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRp
b24pOwotICAgICAgICBRQ29sb3IgY29sb3IgPSAob3B0aW9uLnBhbGV0dGUuaGlnaGxpZ2h0KCkg
PT0gb3B0aW9uLnBhbGV0dGUuYmFja2dyb3VuZCgpKSA/IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQ
YWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpIDogb3B0aW9uLnBhbGV0dGUuY29s
b3IoUVBhbGV0dGU6OkhpZ2hsaWdodCk7Ci0gICAgICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICAgICAgcC5wYWludGVyLT5maWxsUmVj
dChvcHRpb24ucmVjdC5yaWdodCgpIC0gY2h1bmtXaWR0aCAgLSByZW5kZXJQcm9ncmVzcy0+YW5p
bWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9w
dGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHAu
cGFpbnRlci0+ZmlsbFJlY3QocmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCkgKiBv
cHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwg
Y29sb3IpOwotICAgIH0gZWxzZQotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJv
Z3Jlc3NCYXIsIG9wdGlvbik7Ci0KLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVFTdHls
ZTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikK
LXsKLSAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFwLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0
aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBvcHRpb24u
c3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckdyb292ZTsKLSAgICBDb250cm9sUGFydCBh
cHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAg
ICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gU2xpZGVyVmVydGljYWxQ
YXJ0KQotICAgICAgICBvcHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYg
KGlzUHJlc3NlZChvKSkKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vu
a2VuOwotCi0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlv
bik7Ci0KLSAgICBpZiAob3B0aW9uLnN0YXRlICYgUVN0eWxlOjpTdGF0ZV9IYXNGb2N1cykgewot
ICAgICAgICBRU3R5bGVPcHRpb25Gb2N1c1JlY3QgZm9jdXNPcHRpb247Ci0gICAgICAgIGZvY3Vz
T3B0aW9uLnJlY3QgPSByOwotICAgICAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFt
ZUZvY3VzUmVjdCwgZm9jdXNPcHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUVN0eWxl
OjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQot
ewotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIHBpKTsKLSAgICBpZiAoIXAuaXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRp
b247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5z
dWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxlOwotICAgIENvbnRyb2xQYXJ0IGFw
cGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAg
IG9wdGlvbi5yZWN0ID0gcjsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydCkKLSAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotICAg
IGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0g
UVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6
OlN0YXRlX1N1bmtlbjsKLSAgICB9Ci0KLSAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6
OkNDX1NsaWRlciwgb3B0aW9uKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewot
ICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHNlbGVjdG9yLCBzdHlsZSwg
ZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKLX0KLQotYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOwot
fQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICAv
LyBSZXNldHRpbmcgdGhlIHN0eWxlIGxpa2UgdGhpcyBsZWFkcyB0byBkaWZmZXJlbmNlcyBsaWtl
OgotICAgIC8vIC0gUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2OHgy
NSBbYmdjb2xvcj0jRkZGRkZGXSBib3JkZXI6ICgycHggaW5zZXQgIzAwMDAwMCldCi0gICAgLy8g
KyBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY2eDI2Ci0gICAgLy8g
aW4gbGF5b3V0IHRlc3RzIHdoZW4gYSBDU1Mgc3R5bGUgaXMgYXBwbGllZCB0aGF0IGRvZXNuJ3Qg
YWZmZWN0IGJhY2tncm91bmQgY29sb3IsIGJvcmRlciBvcgotICAgIC8vIHBhZGRpbmcuIEp1c3Qg
d29ydGgga2VlcGluZyBpbiBtaW5kIQotICAgIHN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29s
b3I6OnRyYW5zcGFyZW50KTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+
cmVzZXRQYWRkaW5nKCk7Ci0gICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50KiBl
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgUmVuZGVyVGhlbWU6OmFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRp
b24obywgcGksIHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb24obywgcGksIHIpOwotfQotCi0jaWZuZGVmIFFUX05PX1NQSU5CT1gKLQotYm9vbCBSZW5k
ZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHls
ZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkp
Ci0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25TcGluQm94IG9wdGlvbjsK
LSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOwot
ICAgIGlmICghaXNSZWFkT25seUNvbnRyb2wobykpIHsKLSAgICAgICAgaWYgKGlzRW5hYmxlZChv
KSkKLSAgICAgICAgICAgIG9wdGlvbi5zdGVwRW5hYmxlZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0
ZXBVcEVuYWJsZWQgfCBRQWJzdHJhY3RTcGluQm94OjpTdGVwRG93bkVuYWJsZWQ7Ci0gICAgICAg
IGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6
OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgICAgIGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2Vk
KG8pKQotICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6
U0NfU3BpbkJveFVwOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9wdGlvbi5h
Y3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveERvd247Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgLy8gUmVuZGVyIHRoZSBzcGluIGJ1dHRvbnMgZm9yIExUUiBvciBSVEwgYWNjb3Jk
aW5nbHkuCi0gICAgb3B0aW9uLmRpcmVjdGlvbiA9IG8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IFF0OjpMZWZ0VG9SaWdodCA6IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIElu
dFJlY3QgYnV0dG9uUmVjdCA9IHJlY3Q7Ci0gICAgLy8gRGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1
dHRvbnMgYSBsaXR0bGUgYml0IHdpdGhpbiB0aGUgZWRpdG9yIGZyYW1lLgotICAgIGludCBpbmZs
YXRlWCA9IC0yOwotICAgIGludCBpbmZsYXRlWSA9IC0yOwotI2lmIGRlZmluZWQoUV9PU19NQUMp
ICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykKLSAgICAvLyBRTWFjU3R5bGUgd2lsbCBwb3Np
dGlvbiB0aGUgYXF1YSBidXR0b25zIGZsdXNoIHRvIHRoZSByaWdodC4KLSAgICAvLyBUaGlzIHdp
bGwgbW92ZSB0aGVtIG1vcmUgd2l0aGluIHRoZSBjb250cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEg
bGEKLSAgICAvLyBDaHJvbWl1bSBsb29rICYgZmVlbC4KLSAgICBpZiAocW9iamVjdF9jYXN0PFFN
YWNTdHlsZSo+KHAuc3R5bGUpKSB7Ci0gICAgICAgIGluZmxhdGVYID0gLTQ7Ci0gICAgICAgIC8v
IFJlbmRlciBtaW5pIGFxdWEgc3BpbiBidXR0b25zIGZvciBRTWFjU3R5bGUgdG8gZml0IG5pY2Vs
eSBpbnRvCi0gICAgICAgIC8vIHRoZSBlZGl0b3IgYXJlYSwgbGlrZSBDaHJvbWl1bS4KLSAgICAg
ICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAgICB9Ci0jZW5kaWYKLSNp
ZiAhZGVmaW5lZChRVF9OT19TVFlMRV9QTEFTVElRVUUpCi0gICAgLy8gUVBsYXN0aXF1ZVN0eWxl
IGxvb2tzIGJlc3Qgd2hlbiB0aGUgc3BpbiBidXR0b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFt
ZSdzIGVkZ2UuCi0gICAgaWYgKHFvYmplY3RfY2FzdDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxl
KSkgewotICAgICAgICBpbmZsYXRlWCA9IDA7Ci0gICAgICAgIGluZmxhdGVZID0gMDsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwotICAgIGJ1dHRv
blJlY3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOwotICAgIG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsK
LQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotQ29udHJvbFBhcnQgUmVuZGVyVGhlbWVR
U3R5bGU6OmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYgb3B0aW9u
LCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAgLy8gRGVmYXVsdCBiaXRzOiBubyBmb2N1
cywgbm8gbW91c2Ugb3ZlcgotICAgIG9wdGlvbi5zdGF0ZSAmPSB+KFFTdHlsZTo6U3RhdGVfSGFz
Rm9jdXMgfCBRU3R5bGU6OlN0YXRlX01vdXNlT3Zlcik7Ci0KLSAgICBpZiAoaXNSZWFkT25seUNv
bnRyb2wobykpCi0gICAgICAgIC8vIFJlYWRvbmx5IGlzIHN1cHBvcnRlZCBvbiB0ZXh0ZmllbGRz
LgotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SZWFkT25seTsKLQotICAg
IG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6TGVmdFRvUmlnaHQ7Ci0KLSAgICBpZiAoaXNIb3ZlcmVk
KG8pKQotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7Ci0K
LSAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhvcHRpb24ucGFsZXR0ZSk7Ci0K
LSAgICBpZiAoIWlzRW5hYmxlZChvKSkgewotICAgICAgICBvcHRpb24ucGFsZXR0ZS5zZXRDdXJy
ZW50Q29sb3JHcm91cChRUGFsZXR0ZTo6RGlzYWJsZWQpOwotICAgICAgICBvcHRpb24uc3RhdGUg
Jj0gflFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKLSAgICB9Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBvLT5zdHlsZSgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBOb0NvbnRy
b2xQYXJ0OwotCi0gICAgQ29udHJvbFBhcnQgcmVzdWx0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsK
LSAgICBpZiAoc3VwcG9ydHNGb2N1cyhyZXN1bHQpICYmIGlzRm9jdXNlZChvKSkgewotICAgICAg
ICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9IYXNGb2N1czsKLSAgICAgICAgb3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfS2V5Ym9hcmRGb2N1c0NoYW5nZTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFdlYkNvcmU6OlJUTCkKLSAgICAgICAgb3B0aW9u
LmRpcmVjdGlvbiA9IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0g
ICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6Ci0gICAg
Y2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uQmV2ZWxQYXJ0OgotICAgIGNhc2UgTGlz
dEl0ZW1QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
UGFydDogewotICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0g
UHVzaEJ1dHRvblBhcnQgfHwgcmVzdWx0ID09IEJ1dHRvblBhcnQpCi0gICAgICAgICAgICBvcHRp
b24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SYWlzZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgb3B0
aW9uLnN0YXRlIHw9IChpc0NoZWNrZWQobykgPyBRU3R5bGU6OlN0YXRlX09uIDogUVN0eWxlOjpT
dGF0ZV9PZmYpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Ci17Ci0gICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7
Ci0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNs
aWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRp
b247Ci0gICAgICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAg
ICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotCi0gICAgICAgIFFTdHls
ZSogcXN0eWxlID0gcVN0eWxlKCk7Ci0KLSAgICAgICAgaW50IGxlbmd0aCA9IHFzdHlsZS0+cGl4
ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJMZW5ndGgsICZvcHRpb24pOwotICAgICAgICBpbnQg
dGhpY2tuZXNzID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlclRoaWNrbmVz
cywgJm9wdGlvbik7Ci0gICAgICAgIGlmIChvcHRpb24ub3JpZW50YXRpb24gPT0gUXQ6OlZlcnRp
Y2FsKSB7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywgRml4
ZWQpKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
bGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGhp
Y2tuZXNzLCBGaXhlZCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIFJlbmRlclRo
ZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSk7Ci19Ci0KLX0KLQotLy8gdmltOiB0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUVN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFT
dHlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzQ3ZmU0N2VkZGQ0MmNjOTRi
NjlmOGYzOWFkYmRiNWNkMTQ0Mzk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJD
b3JlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICoKLSAqLwotI2lmbmRlZiBSZW5kZXJUaGVtZVFTdHlsZV9oCi0jZGVm
aW5lIFJlbmRlclRoZW1lUVN0eWxlX2gKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKLQot
I2luY2x1ZGUgPFFTdHlsZT4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi0jaWZuZGVmIFFUX05PX0xJ
TkVFRElUCi1jbGFzcyBRTGluZUVkaXQ7Ci0jZW5kaWYKLWNsYXNzIFFQYWludGVyOwotY2xhc3Mg
UVdpZGdldDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBTY3JvbGxiYXJUaGVtZVF0OwotCi1jbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBS
ZW5kZXJUaGVtZVF0IHsKLXByaXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVRU3R5bGUoUGFnZSopOwot
ICAgIHZpcnR1YWwgflJlbmRlclRoZW1lUVN0eWxlKCk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIFFTdHls
ZSogcVN0eWxlKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLQotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgLy8gUmV0dXJu
cyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAg
ICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0KLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRy
YWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotI2lmbmRlZiBRVF9OT19TUElOQk9YCi0gICAg
dmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gZ2V0U3R5bGVQYWludGVy
KGNvbnN0IFBhaW50SW5mbyYpOwotCi0gICAgdmlydHVhbCBRUmVjdCBpbmZsYXRlQnV0dG9uUmVj
dChjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBDb250
cm9sUGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mLCBSZW5k
ZXJPYmplY3QqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHls
ZSopIGNvbnN0OwotCi0gICAgaW50IGZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqKSBjb25zdDsK
LQotICAgIFFTdHlsZSogZmFsbGJhY2tTdHlsZSgpIGNvbnN0OwotCi0gICAgUGFnZSogbV9wYWdl
OwotCi0jaWZkZWYgUV9PU19NQUMKLSAgICBpbnQgbV9idXR0b25Gb250UGl4ZWxTaXplOwotI2Vu
ZGlmCi0KLSAgICBRU3R5bGUqIG1fZmFsbGJhY2tTdHlsZTsKLSNpZm5kZWYgUVRfTk9fTElORUVE
SVQKLSAgICBtdXRhYmxlIFFMaW5lRWRpdCogbV9saW5lRWRpdDsKLSNlbmRpZgotfTsKLQotY2xh
c3MgU3R5bGVQYWludGVyUVN0eWxlIDogcHVibGljIFN0eWxlUGFpbnRlciB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiwgY29uc3Qg
UGFpbnRJbmZvJik7Ci0gICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRo
ZW1lUXQqLCBHcmFwaGljc0NvbnRleHQqKTsKLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIHN0eWxlICYmIFN0eWxlUGFpbnRlcjo6aXNWYWxpZCgpOyB9Ci0KLSAgICBRV2lkZ2V0
KiB3aWRnZXQ7Ci0gICAgUVN0eWxlKiBzdHlsZTsKLQotICAgIHZvaWQgZHJhd1ByaW1pdGl2ZShR
U3R5bGU6OlByaW1pdGl2ZUVsZW1lbnQgcGUsIGNvbnN0IFFTdHlsZU9wdGlvbiYgb3B0KQotICAg
IHsgc3R5bGUtPmRyYXdQcmltaXRpdmUocGUsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KLSAg
ICB2b2lkIGRyYXdDb250cm9sKFFTdHlsZTo6Q29udHJvbEVsZW1lbnQgY2UsIGNvbnN0IFFTdHls
ZU9wdGlvbiYgb3B0KQotICAgIHsgc3R5bGUtPmRyYXdDb250cm9sKGNlLCAmb3B0LCBwYWludGVy
LCB3aWRnZXQpOyB9Ci0gICAgdm9pZCBkcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDb21wbGV4
Q29udHJvbCBjYywgY29uc3QgUVN0eWxlT3B0aW9uQ29tcGxleCYgb3B0KQotICAgIHsgc3R5bGUt
PmRyYXdDb21wbGV4Q29udHJvbChjYywgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQotCi1wcml2
YXRlOgotICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRleHQqLCBRU3R5bGUqKTsKLQotICAgIFFf
RElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlclFTdHlsZSkKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFJl
bmRlclRoZW1lUVN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdC5jcHAKaW5kZXggNmM1N2M5NzQyMzI4OWRkN2FjMjMyNTZmYjY0ZDE0OTkyODA1MGU3Zi4u
YzBlOGFjN2ZiNTMzZTI5NWQ0Yjg1MTQ0ZTg2NjQ4Yjk0ZTMwOTA4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKQEAgLTMwLDQ0ICszMCw3OSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKIAorI2luY2x1
ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgog
I2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCiAjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCisjaW5j
bHVkZSAiUXRNb2JpbGVXZWJTdHlsZS5oIgorI2VuZGlmCiAjaW5jbHVkZSAiTG9jYWxpemVkU3Ry
aW5ncy5oIgogI2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50
cy5oIgogI2VuZGlmCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94Lmgi
CisjaW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaWYg
RU5BQkxFKFBST0dSRVNTX1RBRykKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgogI2VuZGlm
CisjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUXQuaCIK
KyNpbmNsdWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgi
CiAjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKIAogI2luY2x1ZGUgPFFBcHBsaWNh
dGlvbj4KICNpbmNsdWRlIDxRQ29sb3I+CisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KICNp
bmNsdWRlIDxRRmlsZT4KICNpbmNsdWRlIDxRRm9udE1ldHJpY3M+Ci0KKyNpbmNsdWRlIDxRTGlu
ZUVkaXQ+CisjaW5jbHVkZSA8UU1hY1N0eWxlPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1
ZGUgPFFQbGFzdGlxdWVTdHlsZT4KKyNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4KKyNpbmNsdWRlIDxR
U3R5bGVGYWN0b3J5PgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkJ1dHRvbj4KKyNpbmNsdWRlIDxR
U3R5bGVPcHRpb25GcmFtZVYyPgorI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisjaW5jbHVkZSA8
UVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMj4KKyNlbmRpZgorI2luY2x1ZGUgPFFTdHlsZU9wdGlv
blNsaWRlcj4KKyNpbmNsdWRlIDxRV2lkZ2V0PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK2lubGluZSBzdGF0aWMgdm9pZCBpbml0U3R5bGVP
cHRpb24oUVdpZGdldCAqd2lkZ2V0LCBRU3R5bGVPcHRpb24mIG9wdGlvbikKK3sKKyAgICBpZiAo
d2lkZ2V0KQorICAgICAgICBvcHRpb24uaW5pdEZyb20od2lkZ2V0KTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgLyoKKyAgICAgICAgICBJZiBhIHdpZGdldCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxl
IGZvciByZW5kZXJpbmcsIHdlIGZhbGxiYWNrIHRvIGRlZmF1bHQKKyAgICAgICAgICB2YWx1ZSBm
b3IgYW4gYWN0aXZlIHdpZGdldC4KKyAgICAgICAgICovCisgICAgICAgIG9wdGlvbi5zdGF0ZSA9
IFFTdHlsZTo6U3RhdGVfQWN0aXZlIHwgUVN0eWxlOjpTdGF0ZV9FbmFibGVkOworICAgIH0KK30K
IC8vIFRoZXNlIHZhbHVlcyBhbGwgbWF0Y2ggU2FmYXJpL1dpbi9DaHJvbWl1bQogc3RhdGljIGNv
bnN0IGZsb2F0IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZSA9IDEzOwogc3RhdGljIGNvbnN0
IGZsb2F0IGRlZmF1bHRDYW5jZWxCdXR0b25TaXplID0gOTsKQEAgLTc4LDIyICsxMTMsMTI5IEBA
IHN0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9
IDk7CiBzdGF0aWMgY29uc3QgZmxvYXQgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNp
emUgPSAzMDsKIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uV2lkdGggPSAxODsKIAorI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCituYW1lc3BhY2Ugewor
ICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdMZWZ0ID0gMTg7CisgICAgZmxvYXQgYnV0dG9uUGFkZGlu
Z1JpZ2h0ID0gMTg7CisgICAgZmxvYXQgYnV0dG9uUGFkZGluZ1RvcCA9IDI7CisgICAgZmxvYXQg
YnV0dG9uUGFkZGluZ0JvdHRvbSA9IDM7CisgICAgZmxvYXQgbWVudUxpc3RQYWRkaW5nID0gOTsK
KyAgICBmbG9hdCB0ZXh0RmllbGRQYWRkaW5nID0gNTsKK30KKyNlbmRpZgorCitTdHlsZVBhaW50
ZXI6OlN0eWxlUGFpbnRlcihSZW5kZXJUaGVtZVF0KiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8pCit7CisgICAgaW5pdChwYWludEluZm8uY29udGV4dCA/IHBhaW50SW5mby5jb250
ZXh0IDogMCwgdGhlbWUtPnFTdHlsZSgpKTsKK30KKworU3R5bGVQYWludGVyOjpTdHlsZVBhaW50
ZXIoU2Nyb2xsYmFyVGhlbWVRdCogdGhlbWUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBpbml0KGNvbnRleHQsIHRoZW1lLT5zdHlsZSgpKTsKK30KKwordm9pZCBTdHlsZVBhaW50
ZXI6OmluaXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBRU3R5bGUqIHRoZW1lU3R5bGUpCit7
CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCkpOworICAgIHdpZGdldCA9IDA7CisgICAgUVBhaW50RGV2aWNlKiBkZXYgPSAwOwor
ICAgIGlmIChwYWludGVyKQorICAgICAgICBkZXYgPSBwYWludGVyLT5kZXZpY2UoKTsKKyAgICBp
ZiAoZGV2ICYmIGRldi0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6V2lkZ2V0KQorICAgICAgICB3
aWRnZXQgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4oZGV2KTsKKyAgICBzdHlsZSA9IHRoZW1lU3R5
bGU7CisKKyAgICBpZiAocGFpbnRlcikgeworICAgICAgICAvLyB0aGUgc3R5bGVzIG9mdGVuIGFz
c3VtZSBiZWluZyBjYWxsZWQgd2l0aCBhIHByaXN0aW5lIHBhaW50ZXIgd2hlcmUgbm8gYnJ1c2gg
aXMgc2V0LAorICAgICAgICAvLyBzbyByZXNldCBpdCBtYW51YWxseQorICAgICAgICBvbGRCcnVz
aCA9IHBhaW50ZXItPmJydXNoKCk7CisgICAgICAgIHBhaW50ZXItPnNldEJydXNoKFF0OjpOb0Jy
dXNoKTsKKworICAgICAgICAvLyBwYWludGluZyB0aGUgd2lkZ2V0IHdpdGggYW50aS1hbGlhc2lu
ZyB3aWxsIG1ha2UgaXQgYmx1cnJ5CisgICAgICAgIC8vIGRpc2FibGUgaXQgaGVyZSBhbmQgcmVz
dG9yZSBpdCBsYXRlcgorICAgICAgICBvbGRBbnRpYWxpYXNpbmcgPSBwYWludGVyLT50ZXN0UmVu
ZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKKyAgICAgICAgcGFpbnRlci0+c2V0UmVu
ZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBmYWxzZSk7CisgICAgfQorfQorCitTdHls
ZVBhaW50ZXI6On5TdHlsZVBhaW50ZXIoKQoreworICAgIGlmIChwYWludGVyKSB7CisgICAgICAg
IHBhaW50ZXItPnNldEJydXNoKG9sZEJydXNoKTsKKyAgICAgICAgcGFpbnRlci0+c2V0UmVuZGVy
SGludHMoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgb2xkQW50aWFsaWFzaW5nKTsKKyAgICB9Cit9
CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUXQ6OmNyZWF0ZShQYWdlKiBw
YWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVRdChwYWdlKSk7Cit9
CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFn
ZSogcGFnZSkKK3sKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lUXQ6
OmNyZWF0ZShwYWdlKTsKKworICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogZmFsbGJhY2sgPSBSZW5k
ZXJUaGVtZVF0OjpjcmVhdGUoMCkubGVha1JlZigpOworICAgIHJldHVybiBmYWxsYmFjazsKK30K
KwogUmVuZGVyVGhlbWVRdDo6UmVuZGVyVGhlbWVRdChQYWdlKiBwYWdlKQogICAgIDogUmVuZGVy
VGhlbWUoKQogICAgICwgbV9wYWdlKHBhZ2UpCi17Ci0gICAgbV9idXR0b25Gb250RmFtaWx5ID0g
UUFwcGxpY2F0aW9uOjpmb250KCkuZmFtaWx5KCk7CisgICAgLCBtX2xpbmVFZGl0KDApCit7Cisg
ICAgUVB1c2hCdXR0b24gYnV0dG9uOworICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoUXQ6OldBX01h
Y1NtYWxsU2l6ZSk7CisgICAgUUZvbnQgZGVmYXVsdEJ1dHRvbkZvbnQgPSBRQXBwbGljYXRpb246
OmZvbnQoJmJ1dHRvbik7CisgICAgUUZvbnRJbmZvIGZvbnRJbmZvKGRlZmF1bHRCdXR0b25Gb250
KTsKKyAgICBtX2J1dHRvbkZvbnRGYW1pbHkgPSBkZWZhdWx0QnV0dG9uRm9udC5mYW1pbHkoKTsK
KyNpZmRlZiBRX1dTX01BQworICAgIG1fYnV0dG9uRm9udFBpeGVsU2l6ZSA9IGZvbnRJbmZvLnBp
eGVsU2l6ZSgpOworI2VuZGlmCisKKyNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQorICAgIG1fZmFs
bGJhY2tTdHlsZSA9IG5ldyBRdE1vYmlsZVdlYlN0eWxlOworI2Vsc2UKKyAgICBtX2ZhbGxiYWNr
U3R5bGUgPSBRU3R5bGVGYWN0b3J5OjpjcmVhdGUoUUxhdGluMVN0cmluZygid2luZG93cyIpKTsK
KyNlbmRpZgogfQogCi1ib29sIFJlbmRlclRoZW1lUXQ6OnVzZU1vYmlsZVRoZW1lKCkKK1JlbmRl
clRoZW1lUXQ6On5SZW5kZXJUaGVtZVF0KCkKIHsKLSNpZiBIQVZFKFFTVFlMRSkKLSAgICByZXR1
cm4gIXFnZXRlbnYoIlFUX1dFQktJVF9VU0VfTU9CSUxFX1RIRU1FIikuaXNOdWxsKCk7Ci0jZWxz
ZQotICAgIHJldHVybiB0cnVlOworICAgIGRlbGV0ZSBtX2ZhbGxiYWNrU3R5bGU7CisjaWZuZGVm
IFFUX05PX0xJTkVFRElUCisgICAgZGVsZXRlIG1fbGluZUVkaXQ7CiAjZW5kaWYKIH0KIAorI2lm
IFVTRShRVF9NT0JJTEVfVEhFTUUpCitib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxl
ZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29u
c3QgRmlsbExheWVyJiBmaWxsLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAor
eworICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgUHVzaEJ1dHRv
blBhcnQ6CisgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RQYXJ0OgorICAg
IGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKKyAgICBjYXNl
IFRleHRBcmVhUGFydDoKKyAgICAgICAgLy8gVGVzdCB0aGUgc3R5bGUgdG8gc2VlIGlmIHRoZSBV
QSBib3JkZXIgYW5kIGJhY2tncm91bmQgbWF0Y2guCisgICAgICAgIHJldHVybiAoc3R5bGUtPmJv
cmRlcigpICE9IGJvcmRlcgorICAgICAgICAgICAgICAgIHx8ICpzdHlsZS0+YmFja2dyb3VuZExh
eWVycygpICE9IGZpbGwKKyAgICAgICAgICAgICAgICB8fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5kQ29sb3IpOwor
ICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0Nv
bnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENvbG9yKTsKKyAgICB9
Cit9CisKK2ludCBSZW5kZXJUaGVtZVF0Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisjZWxzZQogLy8gUmVt
b3ZlIHRoaXMgd2hlbiBTZWFyY2hGaWVsZFBhcnQgaXMgc3R5bGUtYWJsZSBpbiBSZW5kZXJUaGVt
ZTo6aXNDb250cm9sU3R5bGVkKCkKIGJvb2wgUmVuZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVk
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25z
dCBGaWxsTGF5ZXImIGZpbGwsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7
CkBAIC0xMDcsMTIgKzI0OSwzNiBAQCBib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxl
ZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmCiAgICAgICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGZpbGwsIGJh
Y2tncm91bmRDb2xvcik7CiAgICAgfQogfQorI2VuZGlmCisKKy8vIGZvciBzb21lIHdpZGdldCBw
YWludGluZywgd2UgbmVlZCB0byBmYWxsYmFjayB0byBXaW5kb3dzIHN0eWxlCitRU3R5bGUqIFJl
bmRlclRoZW1lUXQ6OmZhbGxiYWNrU3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiAobV9mYWxs
YmFja1N0eWxlKSA/IG1fZmFsbGJhY2tTdHlsZSA6IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKK30K
KworUVN0eWxlKiBSZW5kZXJUaGVtZVF0OjpxU3R5bGUoKSBjb25zdAoreworI2lmIFVTRShRVF9N
T0JJTEVfVEhFTUUpCisgICAgcmV0dXJuIGZhbGxiYWNrU3R5bGUoKTsKKyNlbmRpZgorCisgICAg
aWYgKG1fcGFnZSkgeworICAgICAgICBRV2ViUGFnZUNsaWVudCogcGFnZUNsaWVudCA9IG1fcGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKworICAgICAgICBp
ZiAocGFnZUNsaWVudCkKKyAgICAgICAgICAgIHJldHVybiBwYWdlQ2xpZW50LT5zdHlsZSgpOwor
ICAgIH0KKworICAgIHJldHVybiBRQXBwbGljYXRpb246OnN0eWxlKCk7Cit9CiAKIFN0cmluZyBS
ZW5kZXJUaGVtZVF0OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKIHsKICAgICBTdHJpbmcgcmVz
dWx0ID0gUmVuZGVyVGhlbWU6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKLSAgICBpZiAodXNl
TW9iaWxlVGhlbWUoKSkKLSAgICAgICAgcmVzdWx0ICs9IFN0cmluZyh0aGVtZVF0Tm9MaXN0Ym94
ZXNVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhlbWVRdE5vTGlzdGJveGVzVXNlckFnZW50
U3R5bGVTaGVldCkpOworI2lmIEVOQUJMRShOT19MSVNUQk9YX1JFTkRFUklORykKKyAgICByZXN1
bHQgKz0gU3RyaW5nKHRoZW1lUXROb0xpc3Rib3hlc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVv
Zih0aGVtZVF0Tm9MaXN0Ym94ZXNVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisjZW5kaWYKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNzcsOCArMzQzLDM2IEBAIGJvb2wgUmVuZGVyVGhlbWVR
dDo6c3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1R
UmVjdCBSZW5kZXJUaGVtZVF0OjppbmZsYXRlQnV0dG9uUmVjdChjb25zdCBRUmVjdCYgb3JpZ2lu
YWxSZWN0KSBjb25zdAoraW50IFJlbmRlclRoZW1lUXQ6OmZpbmRGcmFtZUxpbmVXaWR0aChRU3R5
bGUqIHN0eWxlKSBjb25zdAogeworI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAgIGlmICghbV9s
aW5lRWRpdCkKKyAgICAgICAgbV9saW5lRWRpdCA9IG5ldyBRTGluZUVkaXQoKTsKKyNlbmRpZgor
CisgICAgUVN0eWxlT3B0aW9uRnJhbWVWMiBvcHQ7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gMDsK
KyNpZm5kZWYgUVRfTk9fTElORUVESVQKKyAgICB3aWRnZXQgPSBtX2xpbmVFZGl0OworI2VuZGlm
CisgICAgcmV0dXJuIHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdp
ZHRoLCAmb3B0LCB3aWRnZXQpOworfQorCitzdGF0aWMgUVJlY3QgaW5mbGF0ZUJ1dHRvblJlY3Qo
Y29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCwgUVN0eWxlKiBzdHlsZSkKK3sKKyAgICBRU3R5bGVP
cHRpb25CdXR0b24gb3B0aW9uOworICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1Nt
YWxsOworICAgIG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OworCisgICAgUVJlY3QgbGF5b3V0
UmVjdCA9IHN0eWxlLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJ
dGVtLCAmb3B0aW9uLCAwKTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKKyAgICAg
ICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBvcmlnaW5hbFJlY3QubGVm
dCgpOworICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxSZWN0LnJpZ2h0KCkgLSBs
YXlvdXRSZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCBwYWRkaW5nVG9wID0gbGF5b3V0UmVjdC50
b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50IHBhZGRpbmdCb3R0b20gPSBv
cmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgpOworCisgICAgICAgIHJl
dHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAtcGFkZGluZ1RvcCwgcGFk
ZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKKyAgICB9CiAgICAgcmV0dXJuIG9yaWdpbmFsUmVj
dDsKIH0KIApAQCAtMTkxLDcgKzM4NSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0UmVw
YWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByZWN0KQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgIGNhc2UgQnV0dG9uUGFydDogewot
ICAgICAgICBRUmVjdCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlQnV0dG9uUmVjdChyZWN0KTsKKyAg
ICAgICAgUVJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZUJ1dHRvblJlY3QocmVjdCwgcVN0eWxl
KCkpOwogICAgICAgICByZWN0ID0gSW50UmVjdChpbmZsYXRlZFJlY3QueCgpLCBpbmZsYXRlZFJl
Y3QueSgpLCBpbmZsYXRlZFJlY3Qud2lkdGgoKSwgaW5mbGF0ZWRSZWN0LmhlaWdodCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjU4LDExICs0NTIsOTMgQEAgQ29sb3IgUmVuZGVyVGhl
bWVRdDo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0CiAKIGludCBSZW5kZXJUaGVt
ZVF0OjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogTGF0ZXIgd2UgbmVlZCBhIHdheSB0byBxdWVyeSB0aGUgVUkgcHJvY2VzcyBmb3IgdGhl
IGRwaQogICAgIGNvbnN0IFFGb250TWV0cmljcyAmZm0gPSBRQXBwbGljYXRpb246OmZvbnRNZXRy
aWNzKCk7CiAgICAgcmV0dXJuIGZtLndpZHRoKFFMYXRpbjFDaGFyKCd4JykpOwogfQogCit2b2lk
IFJlbmRlclRoZW1lUXQ6OmNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKiByZW5k
ZXJTdHlsZSkgY29uc3QKK3sKKyAgICBRU2l6ZSBzaXplKDAsIDApOworICAgIGNvbnN0IFFGb250
TWV0cmljcyBmbShyZW5kZXJTdHlsZS0+Zm9udCgpLmZvbnQoKSk7CisgICAgUVN0eWxlKiBzdHls
ZSA9IHFTdHlsZSgpOworCisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7
CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAg
Y2FzZSBUZXh0RmllbGRQYXJ0OiB7CisgICAgICAgIGludCBwYWRkaW5nID0gZmluZEZyYW1lTGlu
ZVdpZHRoKHN0eWxlKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1JpZ2h0
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGlu
Z1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gSWYgdGhlIHdp
ZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0
byBkby4KKyAgICBpZiAoIXJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBDaGVja2Jv
eFBhcnQ6IHsKKyAgICAgICAgUVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOworICAgICAgICBzdHls
ZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOworICAgICAgICBpbnQgY2hlY2tC
b3hXaWR0aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0luZGljYXRvcldpZHRoLCAm
c3R5bGVPcHRpb24pOworICAgICAgICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZl
Y3RpdmVab29tKCk7CisgICAgICAgIHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVja0Jv
eFdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OiB7Cisg
ICAgICAgIFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKKyAgICAgICAgc3R5bGVPcHRpb24uc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKKyAgICAgICAgaW50IHJhZGlvV2lkdGggPSBzdHls
ZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgJnN0eWxl
T3B0aW9uKTsKKyAgICAgICAgcmFkaW9XaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpOworICAgICAgICBzaXplID0gUVNpemUocmFkaW9XaWR0aCwgcmFkaW9XaWR0aCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyNpZiAhVVNFKFFUX01PQklMRV9USEVNRSkKKyAgICBjYXNlIFB1
c2hCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDogeworICAgICAgICBRU3R5bGVPcHRp
b25CdXR0b24gc3R5bGVPcHRpb247CisgICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfU21hbGw7CisgICAgICAgIFFTaXplIGNvbnRlbnRTaXplID0gZm0uc2l6ZShRdDo6
VGV4dFNob3dNbmVtb25pYywgUVN0cmluZzo6ZnJvbUxhdGluMSgiWCIpKTsKKyAgICAgICAgUVNp
emUgcHVzaEJ1dHRvblNpemUgPSBzdHlsZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX1B1
c2hCdXR0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnN0eWxlT3B0aW9uLCBjb250ZW50U2l6ZSwgMCk7CisgICAgICAgIHN0eWxlT3B0
aW9uLnJlY3QgPSBRUmVjdCgwLCAwLCBwdXNoQnV0dG9uU2l6ZS53aWR0aCgpLCBwdXNoQnV0dG9u
U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIFFSZWN0IGxheW91dFJlY3QgPSBzdHlsZS0+c3ViRWxl
bWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOworCisg
ICAgICAgIC8vIElmIHRoZSBzdHlsZSBzdXBwb3J0cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQs
IGFuZCAgY29tcGVuc2F0ZSBhY2NvcmRpbmdseQorICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigp
IGJlbG93LgorICAgICAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpCisgICAgICAgICAgICBz
aXplLnNldEhlaWdodChsYXlvdXRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc2l6ZS5zZXRIZWlnaHQocHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOworCisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIE1lbnVsaXN0UGFydDogeworICAgICAgICBRU3R5bGVP
cHRpb25Db21ib0JveCBzdHlsZU9wdGlvbjsKKyAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0g
UVN0eWxlOjpTdGF0ZV9TbWFsbDsKKyAgICAgICAgaW50IGNvbnRlbnRIZWlnaHQgPSBxTWF4KGZt
LmxpbmVTcGFjaW5nKCksIDE0KSArIDI7CisgICAgICAgIFFTaXplIG1lbnVMaXN0U2l6ZSA9IHN0
eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6Q1RfQ29tYm9Cb3gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgUVNp
emUoMCwgY29udGVudEhlaWdodCksIDApOworICAgICAgICBzaXplLnNldEhlaWdodChtZW51TGlz
dFNpemUuaGVpZ2h0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxh
d2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291
bnQuCisgICAgaWYgKHJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
c2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0
aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgaWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5p
c0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1p
bkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKK30KKwogdm9pZCBSZW5kZXJU
aGVtZVF0OjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAg
IGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKQEAgLTI4MywxMSArNTU5LDExNyBAQCBi
b29sIFJlbmRlclRoZW1lUXQ6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlYwogICAgIHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsK
IH0KIAordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAg
ICAvLyBEaXRjaCB0aGUgYm9yZGVyLgorICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworCisjaWZk
ZWYgUV9XU19NQUMKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFy
dCkgeworICAgICAgICAvLyBUaGUgTWFjIHBvcnRzIGlnbm9yZSB0aGUgc3BlY2lmaWVkIGhlaWdo
dCBmb3IgPGlucHV0IHR5cGU9ImJ1dHRvbiI+IGVsZW1lbnRzCisgICAgICAgIC8vIHVubGVzcyBh
IGJvcmRlciBhbmQvb3IgYmFja2dyb3VuZCBDU1MgcHJvcGVydHkgaXMgYWxzbyBzcGVjaWZpZWQu
CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICB9CisjZW5kaWYK
KworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwor
CisjaWZkZWYgUV9XU19NQUMgLy8gVXNlIGZpeGVkIGZvbnQgc2l6ZSBhbmQgZmFtaWx5IG9uIE1h
YyAobGlrZSBTYWZhcmkgZG9lcykKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6
ZShtX2J1dHRvbkZvbnRQaXhlbFNpemUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyNlbHNlCisgICAgZm9udERlc2NyaXB0aW9u
LnNldFNwZWNpZmllZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOworI2VuZGlmCisKKyNpZiAhVVNF
KFFUX01PQklMRV9USEVNRSkKKyAgICBGb250RmFtaWx5IGZvbnRGYW1pbHk7CisgICAgZm9udEZh
bWlseS5zZXRGYW1pbHkobV9idXR0b25Gb250RmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24u
c2V0RmFtaWx5KGZvbnRGYW1pbHkpOworICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShzZWxlY3Rvci0+Zm9udFNl
bGVjdG9yKCkpOworI2VuZGlmCisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOworICAgIHNl
dEJ1dHRvblBhZGRpbmcoc3R5bGUpOworfQorCiB2b2lkIFJlbmRlclRoZW1lUXQ6OnNldEJ1dHRv
blNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIGNvbXB1dGVTaXplQmFzZWRP
blN0eWxlKHN0eWxlKTsKIH0KIAorI2lmICFVU0UoUVRfTU9CSUxFX1RIRU1FKQordm9pZCBSZW5k
ZXJUaGVtZVF0OjpzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sK
KyAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247CisgICAgc3R5bGVPcHRpb24uc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKKworICAgIC8vIEZha2UgYSBidXR0b24gcmVjdCBo
ZXJlLCBzaW5jZSB3ZSdyZSBqdXN0IGNvbXB1dGluZyBkZWx0YXMKKyAgICBRUmVjdCBvcmlnaW5h
bFJlY3QgPSBRUmVjdCgwLCAwLCAxMDAsIDMwKTsKKyAgICBzdHlsZU9wdGlvbi5yZWN0ID0gb3Jp
Z2luYWxSZWN0OworCisgICAgLy8gRGVmYXVsdCBwYWRkaW5nIGlzIGJhc2VkIG9uIHRoZSBidXR0
b24gbWFyZ2luIHBpeGVsIG1ldHJpYworICAgIGludCBidXR0b25NYXJnaW4gPSBxU3R5bGUoKS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9CdXR0b25NYXJnaW4sICZzdHlsZU9wdGlvbiwgMCk7Cisg
ICAgaW50IHBhZGRpbmdMZWZ0ID0gYnV0dG9uTWFyZ2luOworICAgIGludCBwYWRkaW5nUmlnaHQg
PSBidXR0b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdUb3AgPSBidXR0b25NYXJnaW47CisgICAg
aW50IHBhZGRpbmdCb3R0b20gPSBidXR0b25NYXJnaW47CisKKyAgICAvLyBUaGVuIGNoZWNrIGlm
IHRoZSBzdHlsZSB1c2VzIGxheW91dCBtYXJnaW5zCisgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHFT
dHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0
aW9uLCAwKTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgUVJlY3Qg
Y29udGVudHNSZWN0ID0gcVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1
dHRvbkNvbnRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKKyAgICAgICAgcGFkZGluZ0xlZnQgPSBjb250
ZW50c1JlY3QubGVmdCgpIC0gbGF5b3V0UmVjdC5sZWZ0KCk7CisgICAgICAgIHBhZGRpbmdSaWdo
dCA9IGxheW91dFJlY3QucmlnaHQoKSAtIGNvbnRlbnRzUmVjdC5yaWdodCgpOworICAgICAgICBw
YWRkaW5nVG9wID0gY29udGVudHNSZWN0LnRvcCgpIC0gbGF5b3V0UmVjdC50b3AoKTsKKworICAg
ICAgICAvLyBDYW4ndCB1c2UgdGhpcyByaWdodCBub3cgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRo
ZSBiYXNlbGluZSB0byBjb21wZW5zYXRlCisgICAgICAgIC8vIHBhZGRpbmdCb3R0b20gPSBsYXlv
dXRSZWN0LmJvdHRvbSgpIC0gY29udGVudHNSZWN0LmJvdHRvbSgpOworICAgIH0KKyAgICBzdHls
ZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxl
LT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmdSaWdodCwgRml4ZWQpKTsKKyAgICBzdHls
ZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+
c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKK30KKyNlbHNl
Cit2b2lkIFJlbmRlclRoZW1lUXQ6OnNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoreworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICBzdHlsZS0+
c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKGJ1dHRvblBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0
eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGJ1dHRvblBhZGRpbmdSaWdodCwgRml4ZWQpKTsK
KyAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoYnV0dG9uUGFkZGluZ1RvcCwgRml4ZWQp
KTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoYnV0dG9uUGFkZGluZ0JvdHRv
bSwgRml4ZWQpKTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
eworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOworICAg
IGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBvcHRpb24ucmVjdCA9IHI7
CisgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisKKyAgICBDb250cm9s
UGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBv
KTsKKyAgICBpZiAoYXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBhcHBlYXJhbmNlID09
IEJ1dHRvblBhcnQpIHsKKyAgICAgICAgb3B0aW9uLnJlY3QgPSBpbmZsYXRlQnV0dG9uUmVjdChv
cHRpb24ucmVjdCwgcVN0eWxlKCkpOworICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0Vf
UHVzaEJ1dHRvbiwgb3B0aW9uKTsKKyAgICB9IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gUmFkaW9Q
YXJ0KQorICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9SYWRpb0J1dHRvbiwgb3B0aW9u
KTsKKyAgICBlbHNlIGlmIChhcHBlYXJhbmNlID09IENoZWNrYm94UGFydCkKKyAgICAgICBwLmRy
YXdDb250cm9sKFFTdHlsZTo6Q0VfQ2hlY2tCb3gsIG9wdGlvbik7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
Ly8gUmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVyZW5jZXMgbGlr
ZToKQEAgLTI5OSw2ICs2ODEsNDEgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RUZXh0Rmll
bGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLAogICAgIHN0eWxl
LT5yZXNldEJvcmRlcigpOwogICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKICAgICBjb21wdXRl
U2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7CisjaWYgVVNFKFFUX01PQklMRV9USEVNRSkKKyAgICBz
dHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHRleHRGaWVsZFBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgodGV4dEZpZWxkUGFkZGluZywgRml4ZWQp
KTsKKyNlbmRpZgorfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50VGV4dEZpZWxkKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAg
IFN0eWxlUGFpbnRlciBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uRnJhbWVWMiBwYW5lbDsKKyAgICBpbml0
U3R5bGVPcHRpb24ocC53aWRnZXQsIHBhbmVsKTsKKyAgICBwYW5lbC5yZWN0ID0gcjsKKyAgICBw
YW5lbC5saW5lV2lkdGggPSBmaW5kRnJhbWVMaW5lV2lkdGgocVN0eWxlKCkpOworI2lmIFVTRShR
VF9NT0JJTEVfVEhFTUUpCisgICAgaWYgKGlzUHJlc3NlZChvKSkKKyAgICAgICAgcGFuZWwuc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisjZWxzZQorICAgIHBhbmVsLnN0YXRlIHw9IFFT
dHlsZTo6U3RhdGVfU3Vua2VuOworI2VuZGlmCisgICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5bGVP
cHRpb25GcmFtZVYyOjpOb25lOworCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEg
Zm9yIGEgdGV4dCBmaWVsZAorICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXpl
Q29tbW9uUVN0eWxlT3B0aW9ucyhwYW5lbCwgbyk7CisgICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4
dEZpZWxkUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAorICAg
ICAgICAmJiBhcHBlYXJhbmNlICE9IFRleHRBcmVhUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNl
ICE9IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBwYWlu
dCB0aGUgdGV4dCBmaWVsZC4KKyAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExp
bmVFZGl0LCBwYW5lbCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFJlbmRlclRoZW1l
UXQ6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKQEAgLTMyNSwxMyArNzQyLDY2
IEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFCiAKICAgICAvLyBBZGQgaW4gdGhlIHBhZGRpbmcg
dGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgogICAgIHNldFBvcHVwUGFkZGluZyhzdHlsZSk7CisjaWYg
VVNFKFFUX01PQklMRV9USEVNRSkKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKG1l
bnVMaXN0UGFkZGluZywgRml4ZWQpKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6
OnNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29uc3Qg
aW50IHBhZGRpbmdMZWZ0ID0gNDsKKyAgICBjb25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gc3R5bGUt
PndpZHRoKCkuaXNGaXhlZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVyY2VudCgpID8gNSA6IDg7
CisKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkp
OworCisgICAgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggb3B0OworICAgIGludCB3ID0gcVN0eWxlKCkt
PnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uSWNvblNpemUsICZvcHQsIDApOworICAgIHN0
eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmdSaWdodCArIHcsIEZpeGVkKSk7CisK
KyAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoMiwgRml4ZWQpKTsKKyAgICBzdHlsZS0+
c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMiwgRml4ZWQpKTsKK30KKworCitib29sIFJlbmRlclRo
ZW1lUXQ6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgaSk7CisgICAg
aWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBRdFN0eWxlT3B0
aW9uV2ViQ29tYm9Cb3ggb3B0KG8pOworICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0
KTsKKyAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHQsIG8pOworCisgICAgSW50
UmVjdCByZWN0ID0gcjsKKworI2lmIGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVkKFFUX05P
X1NUWUxFX01BQykKKyAgICAvLyBRTWFjU3R5bGUgbWFrZXMgdGhlIGNvbWJvIGJveGVzIGEgbGl0
dGxlIGJpdCBzbWFsbGVyIHRvIGxlYXZlIHNwYWNlIGZvciB0aGUgZm9jdXMgcmVjdC4KKyAgICAv
LyBCZWNhdXNlIG9mIGl0LCB0aGUgY29tYm8gYnV0dG9uIGlzIGRyYXduIGF0IGEgcG9pbnQgdG8g
dGhlIGxlZnQgb2Ygd2hlcmUgaXQgd2FzIGV4cGVjdCB0byBiZSBhbmQgbWF5IGVuZCB1cAorICAg
IC8vIG92ZXJsYXBwZWQgd2l0aCB0aGUgdGV4dC4gVGhpcyB3aWxsIGZvcmNlIFFNYWNTdHlsZSB0
byBkcmF3IHRoZSBjb21ibyBib3ggd2l0aCB0aGUgZXhwZWN0ZWQgd2lkdGguCisgICAgaWYgKHFv
YmplY3RfY2FzdDxRTWFjU3R5bGUqPihwLnN0eWxlKSkKKyAgICAgICAgcmVjdC5pbmZsYXRlWCgz
KTsKKyNlbmRpZgorCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7
CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgb3B0LnJlY3QubW92ZVRv
KFFQb2ludCgwLCAwKSk7CisgICAgb3B0LnJlY3Quc2V0U2l6ZShyZWN0LnNpemUoKSk7CisKKyAg
ICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHQpOworICAgIHAu
cGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZv
aWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKKyNpZiBVU0UoUVRf
TU9CSUxFX1RIRU1FKQorICAgIC8vIE1vYmlsZSB0aGVtZSB1c2VzIGJvcmRlciByYWRpdXMuCisj
ZWxzZQogICAgIC8vIFdPUktBUk9VTkQgYmVjYXVzZSBodG1sLmNzcyBzcGVjaWZpZXMgLXdlYmtp
dC1ib3JkZXItcmFkaXVzIGZvciA8c2VsZWN0PiBzbyB3ZSBvdmVycmlkZSBpdCBoZXJlCiAgICAg
Ly8gc2VlIGFsc28gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzOTkK
ICAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKKyNlbmRpZgogCiAgICAgLy8gSGVpZ2h0
IGlzIGxvY2tlZCB0byBhdXRvLgogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsK
QEAgLTM0NSw2ICs4MTUsMjYgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3QKICAgICBzZXRQb3B1
cFBhZGRpbmcoc3R5bGUpOwogfQogCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3RC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHls
ZVBhaW50ZXIgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIFF0U3R5bGVPcHRpb25XZWJDb21ib0JveCBvcHRpb24obyk7CisgICAg
aW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOworICAgIGluaXRpYWxpemVDb21tb25R
U3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CisgICAgb3B0aW9uLnJlY3QgPSByOworCisgICAgLy8g
Zm9yIGRyYXdpbmcgdGhlIGNvbWJvIGJveCBhcnJvdywgcmVseSBvbmx5IG9uIHRoZSBmYWxsYmFj
ayBzdHlsZQorICAgIHAuc3R5bGUgPSBmYWxsYmFja1N0eWxlKCk7CisgICAgb3B0aW9uLnN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19Db21ib0JveEFycm93OworICAgIHAuZHJhd0NvbXBsZXhDb250
cm9sKFFTdHlsZTo6Q0NfQ29tYm9Cb3gsIG9wdGlvbik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQogZG91YmxlIFJlbmRlclRoZW1lUXQ6OmFuaW1h
dGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclBy
b2dyZXNzKSBjb25zdAogewpAQCAtMzU2LDE3ICs4NDYsMTIzIEBAIGRvdWJsZSBSZW5kZXJUaGVt
ZVF0OjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNz
KiByZW5kCiAgICAgcmV0dXJuIDAuMTsKIH0KIAorZG91YmxlIFJlbmRlclRoZW1lUXQ6OmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNz
KSBjb25zdAoreworICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA+PSAwKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOwor
ICAgIG9wdGlvbi5yZWN0LnNldFNpemUocmVuZGVyUHJvZ3Jlc3MtPnNpemUoKSk7CisgICAgLy8g
RklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUct
OTE3MSBpcyBmaXhlZCwKKyAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBh
Y3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICByZXR1cm4gKG9wdGlvbi5yZWN0LndpZHRoKCkg
LyBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgs
ICZvcHRpb24pKSAqIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVy
UHJvZ3Jlc3MpOworfQorCiB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFByb2dyZXNzQmFyU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
CiB7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KKworYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBpZiAoIW8tPmlzUHJvZ3Jlc3MoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwaSk7CisgICAg
aWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFFTdHlsZU9wdGlv
blByb2dyZXNzQmFyVjIgb3B0aW9uOworICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0
aW9uKTsKKyAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOworCisg
ICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvKTsK
KyAgICBvcHRpb24ucmVjdCA9IHI7CisgICAgb3B0aW9uLm1heGltdW0gPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOworICAgIG9wdGlvbi5taW5pbXVtID0gMDsKKyAgICBvcHRpb24u
cHJvZ3Jlc3MgPSAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgKiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpKTsKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlv
bigpOworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworICAgIG9wdGlvbi5yZWN0
Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworICAgIG9wdGlvbi5yZWN0LnNldFNpemUoci5zaXplKCkp
OworCisgICAgaWYgKG9wdGlvbi5wcm9ncmVzcyA8IDApIHsKKyAgICAgICAgLy8gRklYTUU6IFVu
dGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBm
aXhlZCwKKyAgICAgICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3Nz
IHRoZSBwcm9ncmVzcyBiYXIuCisgICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9n
cmVzc0Jhckdyb292ZSwgb3B0aW9uKTsKKyAgICAgICAgaW50IGNodW5rV2lkdGggPSBxU3R5bGUo
KS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24p
OworICAgICAgICBRQ29sb3IgY29sb3IgPSAob3B0aW9uLnBhbGV0dGUuaGlnaGxpZ2h0KCkgPT0g
b3B0aW9uLnBhbGV0dGUuYmFja2dyb3VuZCgpKSA/IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQYWxl
dHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpIDogb3B0aW9uLnBhbGV0dGUuY29sb3Io
UVBhbGV0dGU6OkhpZ2hsaWdodCk7CisgICAgICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICAgICAgcC5wYWludGVyLT5maWxsUmVjdChv
cHRpb24ucmVjdC5yaWdodCgpIC0gY2h1bmtXaWR0aCAgLSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0
aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlv
bi5yZWN0LmhlaWdodCgpLCBjb2xvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHAucGFp
bnRlci0+ZmlsbFJlY3QocmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCkgKiBvcHRp
b24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29s
b3IpOworICAgIH0gZWxzZQorICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jl
c3NCYXIsIG9wdGlvbik7CisKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CiAjZW5kaWYKIAorYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWlu
dFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAg
IFN0eWxlUGFpbnRlciBwKHRoaXMsIHBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CisgICAgaW5p
dFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOworICAgIG9wdGlvbi5zdWJDb250cm9scyA9
IFFTdHlsZTo6U0NfU2xpZGVyR3Jvb3ZlOworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBp
bml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOworICAgIG9wdGlvbi5yZWN0
ID0gcjsKKyAgICBpZiAoYXBwZWFyYW5jZSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgICAg
IG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsKKyAgICBpZiAoaXNQcmVzc2VkKG8p
KQorICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisKKyAgICBw
LmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKKworICAgIGlm
IChvcHRpb24uc3RhdGUgJiBRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzKSB7CisgICAgICAgIFFTdHls
ZU9wdGlvbkZvY3VzUmVjdCBmb2N1c09wdGlvbjsKKyAgICAgICAgZm9jdXNPcHRpb24ucmVjdCA9
IHI7CisgICAgICAgIHAuZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlBFX0ZyYW1lRm9jdXNSZWN0LCBm
b2N1c09wdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFJlbmRl
clRoZW1lUXQ6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNldEJveFNoYWRv
dyhudWxscHRyKTsKIH0KIAorYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNsaWRlclRodW1iKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlciBw
KHRoaXMsIHBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CisgICAgaW5pdFN0eWxlT3B0aW9uKHAu
d2lkZ2V0LCBvcHRpb24pOworICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xp
ZGVySGFuZGxlOworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9u
UVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKyAgICBpZiAo
YXBwZWFyYW5jZSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgb3B0aW9uLm9y
aWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1ByZXNzZWQobykpIHsKKyAgICAg
ICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7Cisg
ICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKyAgICB9CisKKyAg
ICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKQEAgLTQzMiw4ICsxMDI4LDggQEAg
Ym9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmYKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0
b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94LgogICAgIGlu
dCBjYW5jZWxCdXR0b25TaXplID0gcU1pbihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgcU1pbihp
bnB1dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKICAgICAvLyBDYWxjdWxhdGUg
Y2FuY2VsIGJ1dHRvbidzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBlbGVtZW50
LgotICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuIFJvdW5kIHVwIHRob3VnaCwg
c28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCi0gICAgLy8g
YmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gVGhpcyB0ZW5k
cyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgorICAgIC8vIENlbnRlciB0aGUgYnV0dG9u
IHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4
ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhl
IGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhl
IHRleHQuCiAgICAgSW50UmVjdCBjYW5jZWxCdXR0b25SZWN0KG8tPm9mZnNldEZyb21BbmNlc3Rv
ckNvbnRhaW5lcihpbnB1dFJlbmRlckJveCkud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkg
LSBjYW5jZWxCdXR0b25TaXplICsgMSkgLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYW5jZWxCdXR0b25TaXplLCBjYW5jZWxCdXR0b25TaXplKTsKQEAgLTQ4Miw2ICsxMDc4LDYw
IEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlCiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3
aWR0aCwgRml4ZWQpKTsKICAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOwogfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAu
aXNWYWxpZCgpKQorICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uU3BpbkJv
eCBvcHRpb247CisgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOworICAgIG9w
dGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwIHwgUVN0eWxlOjpTQ19TcGlu
Qm94RG93bjsKKyAgICBpZiAoIWlzUmVhZE9ubHlDb250cm9sKG8pKSB7CisgICAgICAgIGlmIChp
c0VuYWJsZWQobykpCisgICAgICAgICAgICBvcHRpb24uc3RlcEVuYWJsZWQgPSBRQWJzdHJhY3RT
cGluQm94OjpTdGVwVXBFbmFibGVkIHwgUUFic3RyYWN0U3BpbkJveDo6U3RlcERvd25FbmFibGVk
OworICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKSB7CisgICAgICAgICAgICBvcHRpb24uc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisgICAgICAgICAgICBpZiAoaXNTcGluVXBCdXR0b25Q
YXJ0UHJlc3NlZChvKSkKKyAgICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMg
PSBRU3R5bGU6OlNDX1NwaW5Cb3hVcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOworICAg
ICAgICB9CisgICAgfQorICAgIC8vIFJlbmRlciB0aGUgc3BpbiBidXR0b25zIGZvciBMVFIgb3Ig
UlRMIGFjY29yZGluZ2x5LgorICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBvLT5zdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBRdDo6TGVmdFRvUmlnaHQgOiBRdDo6UmlnaHRUb0xlZnQ7
CisKKyAgICBJbnRSZWN0IGJ1dHRvblJlY3QgPSByZWN0OworICAgIC8vIERlZmF1bHQgdG8gbW92
aW5nIHRoZSBidXR0b25zIGEgbGl0dGxlIGJpdCB3aXRoaW4gdGhlIGVkaXRvciBmcmFtZS4KKyAg
ICBpbnQgaW5mbGF0ZVggPSAtMjsKKyAgICBpbnQgaW5mbGF0ZVkgPSAtMjsKKyNpZiBkZWZpbmVk
KFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCisgICAgLy8gUU1hY1N0eWxl
IHdpbGwgcG9zaXRpb24gdGhlIGFxdWEgYnV0dG9ucyBmbHVzaCB0byB0aGUgcmlnaHQuCisgICAg
Ly8gVGhpcyB3aWxsIG1vdmUgdGhlbSBtb3JlIHdpdGhpbiB0aGUgY29udHJvbCBmb3IgYmV0dGVy
IHN0eWxlLCBhIGxhCisgICAgLy8gQ2hyb21pdW0gbG9vayAmIGZlZWwuCisgICAgaWYgKHFvYmpl
Y3RfY2FzdDxRTWFjU3R5bGUqPihwLnN0eWxlKSkgeworICAgICAgICBpbmZsYXRlWCA9IC00Owor
ICAgICAgICAvLyBSZW5kZXIgbWluaSBhcXVhIHNwaW4gYnV0dG9ucyBmb3IgUU1hY1N0eWxlIHRv
IGZpdCBuaWNlbHkgaW50bworICAgICAgICAvLyB0aGUgZWRpdG9yIGFyZWEsIGxpa2UgQ2hyb21p
dW0uCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7CisgICAgfQor
I2VuZGlmCisjaWYgZGVmaW5lZChRX1dTX1gxMSkgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfUExB
U1RJUVVFKQorICAgIC8vIFFQbGFzdGlxdWVTdHlsZSBsb29rcyBiZXN0IHdoZW4gdGhlIHNwaW4g
YnV0dG9ucyBhcmUgZmx1c2ggd2l0aCB0aGUgZnJhbWUncyBlZGdlLgorICAgIGlmIChxb2JqZWN0
X2Nhc3Q8UVBsYXN0aXF1ZVN0eWxlKj4ocC5zdHlsZSkpIHsKKyAgICAgICAgaW5mbGF0ZVggPSAw
OworICAgICAgICBpbmZsYXRlWSA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgICBidXR0b25SZWN0
LmluZmxhdGVYKGluZmxhdGVYKTsKKyAgICBidXR0b25SZWN0LmluZmxhdGVZKGluZmxhdGVZKTsK
KyAgICBvcHRpb24ucmVjdCA9IGJ1dHRvblJlY3Q7CisKKyAgICBwLmRyYXdDb21wbGV4Q29udHJv
bChRU3R5bGU6OkNDX1NwaW5Cb3gsIG9wdGlvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQogI2Vu
ZGlmCiAKIGJvb2wgUmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBl
YXJhbmNlKSBjb25zdApAQCAtNTA1LDYgKzExNTUsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZVF0Ojpz
dXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpIGNvbnN0CiAKIHZvaWQgUmVuZGVy
VGhlbWVRdDo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmIHBhbGV0
dGUpIGNvbnN0CiB7CisjaWYgVVNFKFFUX01PQklMRV9USEVNRSkKKyAgICBzdGF0aWMgUVBhbGV0
dGUgbGlnaHRHcmF5UGFsZXR0ZShRdDo6bGlnaHRHcmF5KTsKKyAgICBwYWxldHRlID0gbGlnaHRH
cmF5UGFsZXR0ZTsKKyAgICByZXR1cm47CisjZW5kaWYKICAgICAvLyBJZiB0aGUgd2VidmlldyBo
YXMgYSBjdXN0b20gcGFsZXR0ZSwgdXNlIGl0CiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJl
dHVybjsKQEAgLTUyMCw2ICsxMTc1LDYzIEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0UGFsZXR0
ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmIHBhbGV0dGUpIGNvbnN0CiAgICAgcGFs
ZXR0ZSA9IHBhZ2VDbGllbnQtPnBhbGV0dGUoKTsKIH0KIAorQ29udHJvbFBhcnQgUmVuZGVyVGhl
bWVRdDo6aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMoUVN0eWxlT3B0aW9uJiBvcHRpb24s
IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICAvLyBEZWZhdWx0IGJpdHM6IG5vIGZvY3Vz
LCBubyBtb3VzZSBvdmVyCisgICAgb3B0aW9uLnN0YXRlICY9IH4oUVN0eWxlOjpTdGF0ZV9IYXNG
b2N1cyB8IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyKTsKKworICAgIGlmIChpc1JlYWRPbmx5Q29u
dHJvbChvKSkKKyAgICAgICAgLy8gUmVhZG9ubHkgaXMgc3VwcG9ydGVkIG9uIHRleHRmaWVsZHMu
CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1JlYWRPbmx5OworCisgICAg
b3B0aW9uLmRpcmVjdGlvbiA9IFF0OjpMZWZ0VG9SaWdodDsKKworICAgIGlmIChpc0hvdmVyZWQo
bykpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01vdXNlT3ZlcjsKKwor
ICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKG9wdGlvbi5wYWxldHRlKTsKKwor
ICAgIGlmICghaXNFbmFibGVkKG8pKSB7CisgICAgICAgIG9wdGlvbi5wYWxldHRlLnNldEN1cnJl
bnRDb2xvckdyb3VwKFFQYWxldHRlOjpEaXNhYmxlZCk7CisgICAgICAgIG9wdGlvbi5zdGF0ZSAm
PSB+UVN0eWxlOjpTdGF0ZV9FbmFibGVkOworICAgIH0KKworICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IG8tPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIE5vQ29udHJv
bFBhcnQ7CisKKyAgICBDb250cm9sUGFydCByZXN1bHQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOwor
ICAgIGlmIChzdXBwb3J0c0ZvY3VzKHJlc3VsdCkgJiYgaXNGb2N1c2VkKG8pKSB7CisgICAgICAg
IG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzOworICAgICAgICBvcHRpb24u
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9LZXlib2FyZEZvY3VzQ2hhbmdlOworICAgIH0KKworICAg
IGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6UlRMKQorICAgICAgICBvcHRpb24u
ZGlyZWN0aW9uID0gUXQ6OlJpZ2h0VG9MZWZ0OworCisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAg
ICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICBj
YXNlIEJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0b25CZXZlbFBhcnQ6CisgICAgY2FzZSBMaXN0
SXRlbVBhcnQ6CisgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6CisgICAgY2FzZSBTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25QYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25Q
YXJ0OiB7CisgICAgICAgIGlmIChpc1ByZXNzZWQobykpCisgICAgICAgICAgICBvcHRpb24uc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisgICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBQ
dXNoQnV0dG9uUGFydCB8fCByZXN1bHQgPT0gQnV0dG9uUGFydCkKKyAgICAgICAgICAgIG9wdGlv
bi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1JhaXNlZDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgICAgICBvcHRp
b24uc3RhdGUgfD0gKGlzQ2hlY2tlZChvKSA/IFFTdHlsZTo6U3RhdGVfT24gOiBRU3R5bGU6OlN0
YXRlX09mZik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogI2lmIEVOQUJMRShW
SURFTykKIAogU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hl
ZXQoKQpAQCAtNTk5LDIwICsxMzExLDIwIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRp
YUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mCiAgICAg
aWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFFTaGFyZWRQ
b2ludGVyPFN0eWxlUGFpbnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOwotICAg
IGlmIChwLmlzTnVsbCgpIHx8ICFwLT5pc1ZhbGlkKCkpCisgICAgU3R5bGVQYWludGVyIHAodGhp
cywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIHAtPnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
ZywgdHJ1ZSk7CisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxp
YXNpbmcsIHRydWUpOwogCi0gICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC0+cGFpbnRlciwgcik7
CisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKIAotICAgIFdvcmxkTWF0
cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC0+cGFpbnRlciwgbywgcik7CisgICAgV29ybGRN
YXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOwogICAgIGNvbnN0
IFFQb2ludEYgYXJyb3dQb2x5Z29uWzldID0geyBRUG9pbnRGKDIwLCAwKSwgUVBvaW50RigxMDAs
IDApLCBRUG9pbnRGKDEwMCwgODApLAogICAgICAgICAgICAgUVBvaW50Rig4MCwgODApLCBRUG9p
bnRGKDgwLCAzMCksIFFQb2ludEYoMTAsIDEwMCksIFFQb2ludEYoMCwgOTApLCBRUG9pbnRGKDcw
LCAyMCksIFFQb2ludEYoMjAsIDIwKX07CiAKLSAgICBwLT5wYWludGVyLT5zZXRCcnVzaChnZXRN
ZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwotICAgIHAtPnBhaW50ZXItPmRyYXdQb2x5
Z29uKGFycm93UG9seWdvbiwgOSk7CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNv
bnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1BvbHlnb24oYXJy
b3dQb2x5Z29uLCA5KTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTYyMywyMCArMTMzNSwy
MCBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIGlmICghbWVkaWFFbGVtZW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IHAg
PSBnZXRTdHlsZVBhaW50ZXIocGFpbnRJbmZvKTsKLSAgICBpZiAocC5pc051bGwoKSB8fCAhcC0+
aXNWYWxpZCgpKQorICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYg
KCFwLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBwLT5wYWludGVyLT5z
ZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIHAucGFpbnRl
ci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKIAotICAgIHBh
aW50TWVkaWFCYWNrZ3JvdW5kKHAtPnBhaW50ZXIsIHIpOworICAgIHBhaW50TWVkaWFCYWNrZ3Jv
dW5kKHAucGFpbnRlciwgcik7CiAKLSAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9y
bWVyKHAtPnBhaW50ZXIsIG8sIHIpOworICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNm
b3JtZXIocC5wYWludGVyLCBvLCByKTsKICAgICBjb25zdCBRUG9pbnRGIHNwZWFrZXJQb2x5Z29u
WzZdID0geyBRUG9pbnRGKDIwLCAzMCksIFFQb2ludEYoNTAsIDMwKSwgUVBvaW50Rig4MCwgMCks
CiAgICAgICAgICAgICBRUG9pbnRGKDgwLCAxMDApLCBRUG9pbnRGKDUwLCA3MCksIFFQb2ludEYo
MjAsIDcwKX07CiAKLSAgICBwLT5wYWludGVyLT5zZXRCcnVzaChtZWRpYUVsZW1lbnQtPm11dGVk
KCkgPyBRdDo6ZGFya1JlZCA6IGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7Ci0g
ICAgcC0+cGFpbnRlci0+ZHJhd1BvbHlnb24oc3BlYWtlclBvbHlnb24sIDYpOworICAgIHAucGFp
bnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5tdXRlZCgpID8gUXQ6OmRhcmtSZWQgOiBnZXRN
ZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1BvbHln
b24oc3BlYWtlclBvbHlnb24sIDYpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNjQ3LDIy
ICsxMzU5LDIyIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50CiAgICAgaWYgKCFtZWRpYUVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFp
bnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOwotICAgIGlmIChwLmlzTnVsbCgp
IHx8ICFwLT5pc1ZhbGlkKCkpCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsK
KyAgICBpZiAoIXAuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHAtPnBh
aW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisgICAg
cC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwog
Ci0gICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC0+cGFpbnRlciwgcik7CisgICAgcGFpbnRNZWRp
YUJhY2tncm91bmQocC5wYWludGVyLCByKTsKIAotICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIg
dHJhbnNmb3JtZXIocC0+cGFpbnRlciwgbywgcik7Ci0gICAgcC0+cGFpbnRlci0+c2V0QnJ1c2go
Z2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBXb3JsZE1hdHJpeFRyYW5z
Zm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgcC5wYWludGVyLT5zZXRC
cnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwogICAgIGlmIChtZWRpYUVs
ZW1lbnQtPmNhblBsYXkoKSkgewogICAgICAgICBjb25zdCBRUG9pbnRGIHBsYXlQb2x5Z29uWzNd
ID0geyBRUG9pbnRGKDAsIDApLCBRUG9pbnRGKDEwMCwgNTApLCBRUG9pbnRGKDAsIDEwMCl9Owot
ICAgICAgICBwLT5wYWludGVyLT5kcmF3UG9seWdvbihwbGF5UG9seWdvbiwgMyk7CisgICAgICAg
IHAucGFpbnRlci0+ZHJhd1BvbHlnb24ocGxheVBvbHlnb24sIDMpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHAtPnBhaW50ZXItPmRyYXdSZWN0KDAsIDAsIDMwLCAxMDApOwotICAgICAgICBwLT5w
YWludGVyLT5kcmF3UmVjdCg3MCwgMCwgMzAsIDEwMCk7CisgICAgICAgIHAucGFpbnRlci0+ZHJh
d1JlY3QoMCwgMCwgMzAsIDEwMCk7CisgICAgICAgIHAucGFpbnRlci0+ZHJhd1JlY3QoNzAsIDAs
IDMwLCAxMDApOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTY4MiwxMiArMTM5NCwx
MiBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLAogCiBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50
TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRl
cj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOwotICAgIGlmIChwLmlzTnVsbCgpIHx8
ICFwLT5pc1ZhbGlkKCkpCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAg
ICBpZiAoIXAuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHAtPnBhaW50
ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0gICAgcGFp
bnRNZWRpYUJhY2tncm91bmQocC0+cGFpbnRlciwgcik7CisgICAgcC5wYWludGVyLT5zZXRSZW5k
ZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIHBhaW50TWVkaWFCYWNr
Z3JvdW5kKHAucGFpbnRlciwgcik7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC03MDQsMTMg
KzE0MTYsMTMgQEAgU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNSZW1h
aW5pbmdUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdAogCiBib29sIFJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QgKm8sIGNvbnN0IFBhaW50
SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQogewotICAgIFFTaGFyZWRQb2ludGVy
PFN0eWxlUGFpbnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOwotICAgIGlmIChw
LmlzTnVsbCgpIHx8ICFwLT5pc1ZhbGlkKCkpCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFp
bnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIHAtPnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1
ZSk7CisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcs
IHRydWUpOwogCi0gICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC0+cGFpbnRlciwgcik7CisgICAg
cGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKIAogICAgIGlmICghby0+aXNTbGlk
ZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzMwLDggKzE0NDIsOCBAQCBib29sIFJl
bmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QgKm8s
IGNvbnN0IFBhaW50SW5mbwogICAgIGNvbnN0IFFDb2xvciBzY2FsZUNvbG9yKGhpZ2hsaWdodFRl
eHQucmVkKCksIGhpZ2hsaWdodFRleHQuZ3JlZW4oKSwgaGlnaGxpZ2h0VGV4dC5ibHVlKCksIG1l
ZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSAqIDI1NSk7CiAKICAgICAvLyBEcmF3IHRoZSBv
dXRlciByZWN0YW5nbGUKLSAgICBwLT5wYWludGVyLT5zZXRCcnVzaChzY2FsZUNvbG9yKTsKLSAg
ICBwLT5wYWludGVyLT5kcmF3UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworICAgIHAu
cGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7CisgICAgcC5wYWludGVyLT5kcmF3UmVjdChs
ZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5v
ZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc0
MywxNyArMTQ1NSwxNyBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QgKm8sIGNvbnN0IFBhaW50SW5mbwogICAgIHRvcCArPSBiLmhl
aWdodCgpIC0gaGVpZ2h0OwogCiAgICAgLy8gRHJhdyB0aGUgaW5uZXIgcmVjdGFuZ2xlCi0gICAg
cC0+cGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7Ci0gICAgcC0+cGFpbnRlci0+c2V0QnJ1c2go
Z2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKLSAgICBwLT5wYWludGVyLT5kcmF3
UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworICAgIHAucGFpbnRlci0+c2V0UGVuKFF0
OjpOb1Blbik7CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3Jv
dW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0aCwg
aGVpZ2h0KTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVF0Ojpw
YWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0ICpvLCBjb25zdCBQYWludElu
Zm8gJnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKIHsKLSAgICBRU2hhcmVkUG9pbnRlcjxT
dHlsZVBhaW50ZXI+IHAgPSBnZXRTdHlsZVBhaW50ZXIocGFpbnRJbmZvKTsKLSAgICBpZiAocC5p
c051bGwoKSB8fCAhcC0+aXNWYWxpZCgpKQorICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50
SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVyZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sK
QEAgLTc2NiwyOCArMTQ3OCwyOCBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbgogICAgIGlmICgh
bWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBRU2hhcmVkUG9pbnRl
cjxTdHlsZVBhaW50ZXI+IHAgPSBnZXRTdHlsZVBhaW50ZXIocGFpbnRJbmZvKTsKLSAgICBpZiAo
cC5pc051bGwoKSB8fCAhcC0+aXNWYWxpZCgpKQorICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBh
aW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICBwLT5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRy
dWUpOworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5n
LCB0cnVlKTsKIAotICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAtPnBhaW50ZXIsIHIpOworICAg
IHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CiAKICAgICBpZiAoTWVkaWFQbGF5
ZXIqIHBsYXllciA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCkpIHsKICAgICAgICAgLy8gR2V0IHRo
ZSBidWZmZXJlZCBwYXJ0cyBvZiB0aGUgbWVkaWEKLSAgICAgICAgUmVmUHRyPFRpbWVSYW5nZXM+
IGJ1ZmZlcmVkID0gcGxheWVyLT5idWZmZXJlZCgpOworICAgICAgICBQYXNzUmVmUHRyPFRpbWVS
YW5nZXM+IGJ1ZmZlcmVkID0gcGxheWVyLT5idWZmZXJlZCgpOwogICAgICAgICBpZiAoYnVmZmVy
ZWQtPmxlbmd0aCgpID4gMCAmJiBwbGF5ZXItPmR1cmF0aW9uKCkgPCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkgewogICAgICAgICAgICAgLy8gU2V0IHRoZSB0cmFuc2Zv
cm0gYW5kIGJydXNoCi0gICAgICAgICAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9y
bWVyKHAtPnBhaW50ZXIsIG8sIHIpOwotICAgICAgICAgICAgcC0+cGFpbnRlci0+c2V0QnJ1c2go
Z2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKCkpOworICAgICAgICAgICAgV29ybGRNYXRy
aXhUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgICAgICAgICAg
cC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoKSk7CiAK
ICAgICAgICAgICAgIC8vIFBhaW50IGVhY2ggYnVmZmVyZWQgc2VjdGlvbgogICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBleDsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVmZmVy
ZWQtPmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFggPSAoYnVm
ZmVyZWQtPnN0YXJ0KGksIGV4KSAvIHBsYXllci0+ZHVyYXRpb24oKSkgKiAxMDA7CiAgICAgICAg
ICAgICAgICAgZmxvYXQgd2lkdGggPSAoKGJ1ZmZlcmVkLT5lbmQoaSwgZXgpIC8gcGxheWVyLT5k
dXJhdGlvbigpKSAqIDEwMCkgLSBzdGFydFg7Ci0gICAgICAgICAgICAgICAgcC0+cGFpbnRlci0+
ZHJhd1JlY3Qoc3RhcnRYLCAzNywgd2lkdGgsIDI2KTsKKyAgICAgICAgICAgICAgICBwLnBhaW50
ZXItPmRyYXdSZWN0KHN0YXJ0WCwgMzcsIHdpZHRoLCAyNik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC04MDQsMTUgKzE1MTYsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZVF0Ojpw
YWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW4KICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBwID0gZ2V0U3R5bGVQYWludGVyKHBhaW50SW5m
byk7Ci0gICAgaWYgKHAuaXNOdWxsKCkgfHwgIXAtPmlzVmFsaWQoKSkKKyAgICBTdHlsZVBhaW50
ZXIgcCh0aGlzLCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgcC0+cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50
aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6
OkFudGlhbGlhc2luZywgdHJ1ZSk7CiAKLSAgICBwLT5wYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVu
KTsKLSAgICBwLT5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29s
b3IoaG9zdE5vZGUtPnJlbmRlcmVyKCkpKTsKLSAgICBwLT5wYWludGVyLT5kcmF3UmVjdChyLngo
KSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgcC5wYWludGVyLT5zZXRQZW4o
UXQ6Ok5vUGVuKTsKKyAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVn
cm91bmRDb2xvcihob3N0Tm9kZS0+cmVuZGVyZXIoKSkpOworICAgIHAucGFpbnRlci0+ZHJhd1Jl
Y3Qoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtODM0LDIyICsxNTQ2LDQyIEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICB9IGVsc2UgaWYg
KHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpIHsKICAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgodm9sdW1lVGh1bWJIZWlnaHQsIEZpeGVkKSk7CiAgICAgICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgodm9sdW1lVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICB9IGVsc2Ug
aWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247Cisg
ICAgICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICAgICAg
b3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworCisgICAgICAgIFFTdHlsZSogcXN0
eWxlID0gcVN0eWxlKCk7CisKKyAgICAgICAgaW50IGxlbmd0aCA9IHFzdHlsZS0+cGl4ZWxNZXRy
aWMoUVN0eWxlOjpQTV9TbGlkZXJMZW5ndGgsICZvcHRpb24pOworICAgICAgICBpbnQgdGhpY2tu
ZXNzID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlclRoaWNrbmVzcywgJm9w
dGlvbik7CisgICAgICAgIGlmIChvcHRpb24ub3JpZW50YXRpb24gPT0gUXQ6OlZlcnRpY2FsKSB7
CisgICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsK
KyAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVuZ3Ro
LCBGaXhlZCkpOworICAgICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGhpY2tuZXNz
LCBGaXhlZCkpOworICAgICAgICB9CiAgICAgfQogfQogCiBkb3VibGUgUmVuZGVyVGhlbWVRdDo6
Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpj
dXJzb3JGbGFzaFRpbWUoKSAvIDEwMDAuMCAvIDIuMDsKKyAgICByZXR1cm4gIFFBcHBsaWNhdGlv
bjo6Y3Vyc29yRmxhc2hUaW1lKCkgLyAxMDAwLjAgLyAyLjA7CiB9CiAKLVN0cmluZyBSZW5kZXJU
aGVtZVF0OjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5h
bWVzLCBjb25zdCBGb250JiBmb250LCBpbnQgd2lkdGgpCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6
ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29u
c3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKQogewog
ICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBTdHJp
bmcgc3RyaW5nOwotICAgIGlmIChmaWxlbmFtZXMuaXNFbXB0eSgpKQotICAgICAgICBzdHJpbmcg
PSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOworICAgIGlmIChmaWxlbmFtZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIGlmIChtdWx0aXBsZUZpbGVzQWxsb3dlZCkKKyAgICAgICAgICAg
IHN0cmluZyA9IGZpbGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOwor
ICAgIH0KICAgICBlbHNlIGlmIChmaWxlbmFtZXMuc2l6ZSgpID09IDEpIHsKICAgICAgICAgU3Ry
aW5nIGZuYW1lID0gZmlsZW5hbWVzWzBdOwogICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udC5m
b250KCkpOwpAQCAtODY0LDQzICsxNTk2LDYgQEAgU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZpbGVM
aXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnMKICAg
ICByZXR1cm4gc3RyaW5nOwogfQogCi1TdHlsZVBhaW50ZXI6OlN0eWxlUGFpbnRlcihSZW5kZXJU
aGVtZVF0KiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCi0gICAgOiBwYWludGVy
KDApCi17Ci0gICAgUV9VTlVTRUQodGhlbWUpOwotICAgIGluaXQocGFpbnRJbmZvLmNvbnRleHQg
PyBwYWludEluZm8uY29udGV4dCA6IDApOwotfQotCi1TdHlsZVBhaW50ZXI6OlN0eWxlUGFpbnRl
cigpCi0gICAgOiBwYWludGVyKDApCi17Ci19Ci0KLXZvaWQgU3R5bGVQYWludGVyOjppbml0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBwYWludGVyID0gc3RhdGljX2Nhc3Q8UVBh
aW50ZXIqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBpZiAocGFpbnRlcikg
ewotICAgICAgICAvLyB0aGUgc3R5bGVzIG9mdGVuIGFzc3VtZSBiZWluZyBjYWxsZWQgd2l0aCBh
IHByaXN0aW5lIHBhaW50ZXIgd2hlcmUgbm8gYnJ1c2ggaXMgc2V0LAotICAgICAgICAvLyBzbyBy
ZXNldCBpdCBtYW51YWxseQotICAgICAgICBvbGRCcnVzaCA9IHBhaW50ZXItPmJydXNoKCk7Ci0g
ICAgICAgIHBhaW50ZXItPnNldEJydXNoKFF0OjpOb0JydXNoKTsKLQotICAgICAgICAvLyBwYWlu
dGluZyB0aGUgd2lkZ2V0IHdpdGggYW50aS1hbGlhc2luZyB3aWxsIG1ha2UgaXQgYmx1cnJ5Ci0g
ICAgICAgIC8vIGRpc2FibGUgaXQgaGVyZSBhbmQgcmVzdG9yZSBpdCBsYXRlcgotICAgICAgICBv
bGRBbnRpYWxpYXNpbmcgPSBwYWludGVyLT50ZXN0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFs
aWFzaW5nKTsKLSAgICAgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFs
aWFzaW5nLCBmYWxzZSk7Ci0gICAgfQotfQotCi1TdHlsZVBhaW50ZXI6On5TdHlsZVBhaW50ZXIo
KQotewotICAgIGlmIChwYWludGVyKSB7Ci0gICAgICAgIHBhaW50ZXItPnNldEJydXNoKG9sZEJy
dXNoKTsKLSAgICAgICAgcGFpbnRlci0+c2V0UmVuZGVySGludHMoUVBhaW50ZXI6OkFudGlhbGlh
c2luZywgb2xkQW50aWFsaWFzaW5nKTsKLSAgICB9Ci19Ci0KIH0KIAogLy8gdmltOiB0cz00IHN3
PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaAppbmRleCA2
YzBhYjA2YjdjNzk4NWI1ODQ1YTkzMTY0ZTA1ZmM5NDc4MTBkMDkwLi43YzdlNjZmODAyMzk1OTFj
NWJjMjNhMTk5NGRlZDdmZmU1YjViNWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdC5oCkBAIC0yNCwxMiArMjQsMTIgQEAKIAogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCiAKLSNpbmNsdWRlIDxRQnJ1c2g+Ci0jaW5jbHVkZSA8UVNoYXJlZFBvaW50ZXI+Ci0j
aW5jbHVkZSA8UVN0cmluZz4KKyNpbmNsdWRlIDxRU3R5bGU+CiAKIFFUX0JFR0lOX05BTUVTUEFD
RQorY2xhc3MgUUxpbmVFZGl0OwogY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBRV2lkZ2V0OwogUVRf
RU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwyMSArMzksMjIgQEAg
Y2xhc3MgUmVuZGVyUHJvZ3Jlc3M7CiAjZW5kaWYKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3Mg
SFRNTE1lZGlhRWxlbWVudDsKLWNsYXNzIFN0eWxlUGFpbnRlcjsKK2NsYXNzIFNjcm9sbGJhclRo
ZW1lUXQ7CiAKIGNsYXNzIFJlbmRlclRoZW1lUXQgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworcHJp
dmF0ZToKKyAgICBSZW5kZXJUaGVtZVF0KFBhZ2UqIHBhZ2UpOworICAgIHZpcnR1YWwgflJlbmRl
clRoZW1lUXQoKTsKIAogcHVibGljOgotICAgIFJlbmRlclRoZW1lUXQoUGFnZSopOwotCi0gICAg
c3RhdGljIGJvb2wgdXNlTW9iaWxlVGhlbWUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5k
ZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKIAogICAgIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNo
ZWV0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHls
ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5k
ZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQ
b3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBiYXNl
bGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3Q7CiAKICAgICAvLyBBIG1l
dGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5k
b3cgaGFzIGZvY3VzIG9yIG5vdC4KICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGlu
dHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CkBAIC02MSw3ICs2Miw3IEBAIHB1YmxpYzoK
ICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlz
IHN1cHBvcnRlZCBhdCBhbGwuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRz
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVu
ZGVyT2JqZWN0KiwgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVj
dChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHIpOwogCiAgICAgLy8gVGhlIHBsYXRm
b3JtIHNlbGVjdGlvbiBjb2xvci4KICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC04MCwzOCArODEsNDkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3Qg
Qm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJv
cmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KSBjb25zdDsKKyNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQorICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7CisjZW5kaWYKIAogI2lm
IEVOQUJMRShWSURFTykKICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KCk7CiAjZW5kaWYKIAorICAgIFFTdHlsZSogcVN0eWxlKCkgY29uc3Q7CisKIHByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hl
Y2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCisgICAg
dmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCisgICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhl
IGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmlt
YXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCisgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKQEAgLTEyOCw2ICsxNDAsMTQgQEAgcHJvdGVjdGVkOgog
CiAjaWZuZGVmIFFUX05PX1NQSU5CT1gKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworI2lmIEVOQUJM
RShQUk9HUkVTU19UQUcpCisgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRo
ZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5p
bWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVy
UHJvZ3Jlc3MpIGNvbnN0OworICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmlt
YXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
RHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNv
bnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0xNDQsNTAgKzE2NCw2OSBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRU
aW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CiAgICAgdmlydHVh
bCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRp
bWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3duRGlzYWJs
ZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Citw
cml2YXRlOgogCi0gICAgdm9pZCBwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlciosIGNvbnN0
IEludFJlY3QmKSBjb25zdDsKKyAgICB2b2lkIHBhaW50TWVkaWFCYWNrZ3JvdW5kKFFQYWludGVy
KiBwYWludGVyLCBjb25zdCBJbnRSZWN0JiByKSBjb25zdDsKICAgICBkb3VibGUgbWVkaWFDb250
cm9sc0Jhc2VsaW5lT3BhY2l0eSgpIGNvbnN0OwotICAgIFFDb2xvciBnZXRNZWRpYUNvbnRyb2xG
b3JlZ3JvdW5kQ29sb3IoUmVuZGVyT2JqZWN0KiA9IDApIGNvbnN0OworICAgIFFDb2xvciBnZXRN
ZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoUmVuZGVyT2JqZWN0KiBvID0gMCkgY29uc3Q7CiAj
ZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5
bGUqKSBjb25zdCA9IDA7CisgICAgdm9pZCBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJT
dHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3RO
YW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgRm9udCYs
IGludCB3aWR0aCk7Citwcml2YXRlOgorICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZv
cldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IEZvbnQmLCBpbnQg
d2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpOwogCi0gICAgdmlydHVhbCBRUmVjdCBp
bmZsYXRlQnV0dG9uUmVjdChjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdDsKKyAgICBi
b29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRQYWxl
dHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OworICAgIENvbnRyb2xQ
YXJ0IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYsIFJlbmRlck9i
amVjdCopIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJT
dHlsZSopIGNvbnN0ID0gMDsKKyAgICB2b2lkIHNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUq
KSBjb25zdDsKKyAgICB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IGdldFN0eWxlUGFpbnRl
cihjb25zdCBQYWludEluZm8mKSA9IDA7CisgICAgdm9pZCBzZXRQYWxldHRlRnJvbVBhZ2VDbGll
bnRJZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OwogCi0gICAgYm9vbCBzdXBwb3J0c0ZvY3VzKENv
bnRyb2xQYXJ0KSBjb25zdDsKKyAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRoKFFTdHlsZSogc3R5
bGUpIGNvbnN0OworCisgICAgUVN0eWxlKiBmYWxsYmFja1N0eWxlKCkgY29uc3Q7CiAKICAgICBJ
bnRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIs
IGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBJbnRSZWN0IHBhcnRSZWN0LCBjb25z
dCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3Q7CiAKICAgICBQYWdlKiBtX3BhZ2U7CiAKKyNp
ZmRlZiBRX1dTX01BQworICAgIGludCBtX2J1dHRvbkZvbnRQaXhlbFNpemU7CisjZW5kaWYKICAg
ICBRU3RyaW5nIG1fYnV0dG9uRm9udEZhbWlseTsKIAorICAgIFFTdHlsZSogbV9mYWxsYmFja1N0
eWxlOworICAgIG11dGFibGUgUUxpbmVFZGl0KiBtX2xpbmVFZGl0OwogfTsKIAogY2xhc3MgU3R5
bGVQYWludGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TdHlsZVBhaW50ZXIoKTsKKyAgICBl
eHBsaWNpdCBTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdCosIGNvbnN0IFBhaW50SW5mbyYpOwor
ICAgIGV4cGxpY2l0IFN0eWxlUGFpbnRlcihTY3JvbGxiYXJUaGVtZVF0KiwgR3JhcGhpY3NDb250
ZXh0Kik7CisgICAgflN0eWxlUGFpbnRlcigpOwogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gcGFpbnRlcjsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHBh
aW50ZXIgJiYgc3R5bGU7IH0KIAogICAgIFFQYWludGVyKiBwYWludGVyOworICAgIFFXaWRnZXQq
IHdpZGdldDsKKyAgICBRU3R5bGUqIHN0eWxlOwogCi1wcm90ZWN0ZWQ6Ci0gICAgU3R5bGVQYWlu
dGVyKFJlbmRlclRoZW1lUXQqLCBjb25zdCBQYWludEluZm8mKTsKLSAgICBTdHlsZVBhaW50ZXIo
KTsKLSAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0Kik7CisgICAgdm9pZCBkcmF3UHJpbWl0
aXZlKFFTdHlsZTo6UHJpbWl0aXZlRWxlbWVudCBwZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQp
CisgICAgeyBzdHlsZS0+ZHJhd1ByaW1pdGl2ZShwZSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsg
fQorICAgIHZvaWQgZHJhd0NvbnRyb2woUVN0eWxlOjpDb250cm9sRWxlbWVudCBjZSwgY29uc3Qg
UVN0eWxlT3B0aW9uJiBvcHQpCisgICAgeyBzdHlsZS0+ZHJhd0NvbnRyb2woY2UsICZvcHQsIHBh
aW50ZXIsIHdpZGdldCk7IH0KKyAgICB2b2lkIGRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNv
bXBsZXhDb250cm9sIGNjLCBjb25zdCBRU3R5bGVPcHRpb25Db21wbGV4JiBvcHQpCisgICAgeyBz
dHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKGNjLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9CiAK
IHByaXZhdGU6CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVN0eWxl
Kik7CisKICAgICBRQnJ1c2ggb2xkQnJ1c2g7CiAgICAgYm9vbCBvbGRBbnRpYWxpYXNpbmc7CiAK
KyAgICBRX0RJU0FCTEVfQ09QWShTdHlsZVBhaW50ZXIpCiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhYWEwNWY4OWUxMzM5MmFjOWJhYmI0NTk4MzFiZjFmOGE3OWMz
YTg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNjY0ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IHByb2plY3QuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lUXRNb2JpbGUuaCIKLQotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0
b3IuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJIVE1M
SW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFNl
bGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFpbnRJbmZv
LmgiCi0jaW5jbHVkZSAiUGFzc1JlZlB0ci5oIgotI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLSNpbmNs
dWRlICJSZW5kZXJQcm9ncmVzcy5oIgotI2VuZGlmCi0jaWYgSEFWRShRU1RZTEUpCi0jaW5jbHVk
ZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8UUNvbG9yPgotI2lu
Y2x1ZGUgPFFGaWxlPgotI2luY2x1ZGUgPFFGb250TWV0cmljcz4KLSNpbmNsdWRlIDxRUGFpbnRl
cj4KLSNpbmNsdWRlIDxRUGl4bWFwQ2FjaGU+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotLy8gQ29uc3RhbnRzIGV4dHJhY3RlZCBmcm9tIFFD
b21tb25TdHlsZSBhbmQgUVdpbmRvd3NTdHlsZQotc3RhdGljIGNvbnN0IGludCBhcnJvd0JveFdp
ZHRoID0gMTY7Ci1zdGF0aWMgY29uc3QgaW50IGZyYW1lV2lkdGggPSAyOwotc3RhdGljIGNvbnN0
IGludCBjaGVja0JveFdpZHRoID0gMTM7Ci1zdGF0aWMgY29uc3QgaW50IHJhZGlvV2lkdGggPSAx
MjsKLXN0YXRpYyBjb25zdCBpbnQgYnV0dG9uSWNvblNpemUgPSAxNjsKLXN0YXRpYyBjb25zdCBp
bnQgc2xpZGVyV2lkdGggPSAxMTsKLXN0YXRpYyBjb25zdCBpbnQgc2xpZGVySGVpZ2h0ID0gMDsK
LQotLy8gT3RoZXIgY29uc3RhbnRzIHVzZWQgYnkgdGhlIG1vYmlsZSB0aGVtZQotc3RhdGljIGZs
b2F0IGJ1dHRvblBhZGRpbmdMZWZ0ID0gMTg7Ci1zdGF0aWMgZmxvYXQgYnV0dG9uUGFkZGluZ1Jp
Z2h0ID0gMTg7Ci1zdGF0aWMgZmxvYXQgYnV0dG9uUGFkZGluZ1RvcCA9IDI7Ci1zdGF0aWMgZmxv
YXQgYnV0dG9uUGFkZGluZ0JvdHRvbSA9IDM7Ci1zdGF0aWMgZmxvYXQgbWVudUxpc3RQYWRkaW5n
ID0gOTsKLXN0YXRpYyBmbG9hdCB0ZXh0RmllbGRQYWRkaW5nID0gNTsKLQotCi1zdGF0aWMgaW5s
aW5lIHZvaWQgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50
ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0IFFCcnVzaCYgYnJ1
c2gpCi17Ci0gICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsKLSAgICBRQnJ1c2ggb2xk
QnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOwotICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBh
aW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+c2V0UGVuKHBlbik7Ci0g
ICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOwotCi0gICAgaW50IGxpbmUgPSAxOwotICAgIHBh
aW50ZXItPmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVkKGxpbmUsIGxpbmUsIC1saW5lLCAt
bGluZSksCi0gICAgICAgICAgICAvKiB4UmFkaXVzICovIDUuMCwgLyogeVJhZGlvdXMgKi8gNS4w
KTsKLSAgICBwYWludGVyLT5zZXRQZW4ob2xkUGVuKTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChv
bGRCcnVzaCk7Ci19Ci0KLVFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gUmVuZGVyVGhlbWVR
dE1vYmlsZTo6Z2V0U3R5bGVQYWludGVyKGNvbnN0IFBhaW50SW5mbyYgcGkpCi17Ci0gICAgcmV0
dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3IFN0eWxlUGFpbnRlck1vYmlsZSh0
aGlzLCBwaSkpOwotfQotCi1TdHlsZVBhaW50ZXJNb2JpbGU6OlN0eWxlUGFpbnRlck1vYmlsZShS
ZW5kZXJUaGVtZVF0TW9iaWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCi0g
ICAgOiBTdHlsZVBhaW50ZXIodGhlbWUsIHBhaW50SW5mbykKLXsKLX0KLQotdm9pZCBTdHlsZVBh
aW50ZXJNb2JpbGU6OmRyYXdDaGVja2VyKFFQYWludGVyKiBwYWludGVyLCBpbnQgc2l6ZSwgUUNv
bG9yIGNvbG9yKSBjb25zdAotewotICAgIGludCBib3JkZXIgPSBxTWluKHFNYXgoMSwgaW50KDAu
MiAqIHNpemUpKSwgNik7Ci0gICAgaW50IGNoZWNrZXJTaXplID0gcU1heChzaXplIC0gMiAqIGJv
cmRlciwgMyk7Ci0gICAgaW50IHdpZHRoID0gY2hlY2tlclNpemUgLyAzOwotICAgIGludCBtaWRk
bGUgPSBxTWF4KDMgKiBjaGVja2VyU2l6ZSAvIDcsIDMpOwotICAgIGludCB4ID0gKChzaXplIC0g
Y2hlY2tlclNpemUpID4+IDEpOwotICAgIGludCB5ID0gKChzaXplIC0gY2hlY2tlclNpemUpID4+
IDEpICsgKGNoZWNrZXJTaXplIC0gd2lkdGggLSBtaWRkbGUpOwotICAgIFFWZWN0b3I8UUxpbmVG
PiBsaW5lcyhjaGVja2VyU2l6ZSArIDEpOwotICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWRkbGU7ICsraSkgewotICAgICAgICBsaW5lc1tpXSA9
IFFMaW5lRih4LCB5LCB4LCB5ICsgd2lkdGgpOwotICAgICAgICArK3g7Ci0gICAgICAgICsreTsK
LSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IG1pZGRsZTsgaSA8PSBjaGVja2VyU2l6ZTsgKytpKSB7
Ci0gICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgsIHkgKyB3aWR0aCk7Ci0gICAgICAg
ICsreDsKLSAgICAgICAgLS15OwotICAgIH0KLSAgICBwYWludGVyLT5kcmF3TGluZXMobGluZXMu
Y29uc3REYXRhKCksIGxpbmVzLnNpemUoKSk7Ci19Ci0KLVFQaXhtYXAgU3R5bGVQYWludGVyTW9i
aWxlOjpmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBkaXNhYmxlZCkgY29uc3QK
LXsKLSAgICBpbnQgc2l6ZSA9IHFNaW4ocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAg
ICBRUGl4bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0
aW4xU3RyaW5nKCIkcXQtbWFlbW81LW1vYmlsZS10aGVtZS1jaGVja2VyLSIpOwotICAgIFFTdHJp
bmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUpICsgUUxhdGluMVN0cmluZygi
LSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJp
bmcoImVuYWJsZWQiKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQp
KSB7Ci0gICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSwgc2l6ZSk7Ci0gICAgICAgIHJlc3Vs
dC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3Vs
dCk7Ci0gICAgICAgIGRyYXdDaGVja2VyKCZwYWludGVyLCBzaXplLCBkaXNhYmxlZCA/IFF0Ojps
aWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChr
ZXksIHJlc3VsdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgU3R5bGVQ
YWludGVyTW9iaWxlOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBz
aXplLCBib29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3QKLXsKLSAgICBwYWludGVyLT5z
ZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwotCi0gICAgLy8gZ2V0
IG1pbm9yIHNpemUgdG8gZG8gbm90IHBhaW50IGEgd2lkZSBlbGlwc2UKLSAgICBxcmVhbCBzcXVh
cmVTaXplID0gcU1pbihzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIC8vIGRlZmxh
dGUgb25lIHBpeGVsCi0gICAgUVJlY3QgcmVjdCA9IFFSZWN0KFFQb2ludCgxLCAxKSwgUVNpemUo
c3F1YXJlU2l6ZSAtIDIsIHNxdWFyZVNpemUgLSAyKSk7Ci0gICAgY29uc3QgUVBvaW50IGNlbnRl
ckdyYWRpZW50KHJlY3QuYm90dG9tUmlnaHQoKSAqIDAuNyk7Ci0KLSAgICBRUmFkaWFsR3JhZGll
bnQgcmFkaWFsR3JhZGllbnQoY2VudGVyR3JhZGllbnQsIGNlbnRlckdyYWRpZW50LngoKSAtIDEp
OwotICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6d2hpdGUpOwotICAgIHJh
ZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC42LCBRdDo6d2hpdGUpOwotICAgIHJhZGlhbEdyYWRp
ZW50LnNldENvbG9yQXQoMS4wLCBjb2xvcik7Ci0KLSAgICBwYWludGVyLT5zZXRQZW4oY29sb3Ip
OwotICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKLSAgICBwYWludGVyLT5kcmF3RWxsaXBz
ZShyZWN0KTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChyYWRpYWxHcmFkaWVudCk7Ci0gICAgcGFp
bnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0KLSAgICBpbnQgYm9yZGVyID0gMC4xICogKHJlY3Qu
d2lkdGgoKSArIHJlY3QuaGVpZ2h0KCkpOwotICAgIGJvcmRlciA9IHFNaW4ocU1heCgyLCBib3Jk
ZXIpLCAxMCk7Ci0gICAgcmVjdC5hZGp1c3QoYm9yZGVyLCBib3JkZXIsIC1ib3JkZXIsIC1ib3Jk
ZXIpOwotICAgIGlmIChjaGVja2VkKSB7Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihRdDo6Tm9Q
ZW4pOwotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgICAgIHBhaW50ZXIt
PmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIH0KLX0KLQotUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2Jp
bGU6OmZpbmRSYWRpbyhjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGRpc2Fi
bGVkKSBjb25zdAotewotICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIHN0YXRpYyBjb25zdCBRU3Ry
aW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9iaWxlLXRoZW1lLXJhZGlv
LSIpOwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lk
dGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQo
KSkgKyBRTGF0aW4xU3RyaW5nKCItIikKLSAgICAgICAgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3Ry
aW5nKCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKSArIChjaGVja2VkID8g
UUxhdGluMVN0cmluZygiLWNoZWNrZWQiKSA6IFFMYXRpbjFTdHJpbmcoIiIpKTsKLSAgICBpZiAo
IVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBp
eG1hcChzaXplKTsKLSAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAg
ICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKLSAgICAgICAgZHJhd1JhZGlvKCZwYWludGVy
LCBzaXplLCBjaGVja2VkLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkp
OwotICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3TXVsdGlw
bGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xv
ciBjb2xvcikgY29uc3QKLXsKLSAgICBpbnQgcmVjdFdpZHRoID0gc2l6ZS53aWR0aCgpIC0gMTsK
LSAgICBpbnQgd2lkdGggPSBxTWF4KDIsIHJlY3RXaWR0aCA+PiAzKTsKLSAgICBpbnQgZGlzdGFu
Y2UgPSAocmVjdFdpZHRoIC0gMyAqIHdpZHRoKSA+PiAxOwotICAgIGludCB0b3AgPSAoc2l6ZS5o
ZWlnaHQoKSAtIHdpZHRoKSA+PiAxOwotCi0gICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKLSAg
ICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0KLSAgICBwYWludGVyLT5kcmF3UmVjdCgwLCB0
b3AsIHdpZHRoLCB3aWR0aCk7Ci0gICAgcGFpbnRlci0+ZHJhd1JlY3Qod2lkdGggKyBkaXN0YW5j
ZSwgdG9wLCB3aWR0aCwgd2lkdGgpOwotICAgIHBhaW50ZXItPmRyYXdSZWN0KDIgKiAod2lkdGgg
KyBkaXN0YW5jZSksIHRvcCwgd2lkdGgsIHdpZHRoKTsKLX0KLQotdm9pZCBTdHlsZVBhaW50ZXJN
b2JpbGU6OmRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNp
emUmIHNpemUsIFFDb2xvciBjb2xvcikgY29uc3QKLXsKLSAgICBpbnQgd2lkdGggPSBzaXplLndp
ZHRoKCk7Ci0gICAgaW50IG1pZGxlID0gd2lkdGggPj4gMTsKLSAgICBRVmVjdG9yPFFMaW5lPiBs
aW5lcyh3aWR0aCArIDEpOwotCi0gICAgZm9yIChpbnQgeCA9IDAsIHkgPSAwOyAgeCA8IG1pZGxl
OyB4KyssIHkrKykgewotICAgICAgICBsaW5lc1t4XSA9IFFMaW5lKHgsIHksIHgsIHkgKyAyKTsK
LSAgICAgICAgbGluZXNbeCArIG1pZGxlXSA9IFFMaW5lKHdpZHRoIC0geCAtIDEsIHksIHdpZHRo
IC0geCAtIDEsIHkgKyAyKTsKLSAgICB9Ci0gICAgLy8gSnVzdCB0byBlbnN1cmUgdGhlIGxpbmVz
JyBpbnRlcnNlY3Rpb24uCi0gICAgbGluZXNbd2lkdGhdID0gUUxpbmUobWlkbGUsIG1pZGxlLCBt
aWRsZSwgbWlkbGUgKyAyKTsKLQotICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7Ci0gICAgcGFp
bnRlci0+c2V0QnJ1c2goY29sb3IpOwotICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcyk7Ci19
Ci0KLVFTaXplIFN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFT
aXplJiBidXR0b25TaXplKSBjb25zdAotewotICAgIGNvbnN0IGludCBib3JkZXIgPSBxTWF4KDMs
IGJ1dHRvblNpemUud2lkdGgoKSA+PiAzKSA8PCAxOwotCi0gICAgaW50IHdpZHRoID0gYnV0dG9u
U2l6ZS53aWR0aCgpIC0gYm9yZGVyOwotICAgIGludCBoZWlnaHQgPSBidXR0b25TaXplLmhlaWdo
dCgpIC0gYm9yZGVyOwotCi0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAg
ICByZXR1cm4gUVNpemUoKTsKLQotICAgIGlmIChoZWlnaHQgPj0gKHdpZHRoID4+IDEpKQotICAg
ICAgICB3aWR0aCA9IHdpZHRoID4+IDEgPDwgMTsKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0g
aGVpZ2h0IDw8IDE7Ci0KLSAgICByZXR1cm4gUVNpemUod2lkdGggKyAxLCB3aWR0aCk7Ci19Ci0K
LVFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUm
IHNpemUsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZGlzYWJsZWQpIGNvbnN0Ci17Ci0gICAgUVBpeG1h
cCByZXN1bHQ7Ci0gICAgUVNpemUgaW1hZ2VTaXplID0gZ2V0QnV0dG9uSW1hZ2VTaXplKHNpemUp
OwotCi0gICAgaWYgKGltYWdlU2l6ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFFQaXhtYXAo
KTsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQt
bWFlbW81LW1vYmlsZS10aGVtZS1jb21iby0iKTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCAr
IChtdWx0aXBsZSA/IFFMYXRpbjFTdHJpbmcoIm11bHRpcGxlLSIpIDogUUxhdGluMVN0cmluZygi
c2ltcGxlLSIpKQotICAgICAgICArIFFTdHJpbmc6Om51bWJlcihpbWFnZVNpemUud2lkdGgoKSkg
KyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLmhlaWdodCgp
KQotICAgICAgICArIFFMYXRpbjFTdHJpbmcoIi0iKSArIChkaXNhYmxlZCA/IFFMYXRpbjFTdHJp
bmcoImRpc2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFibGVkIikpOwotICAgIGlmICghUVBp
eG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgewotICAgICAgICByZXN1bHQgPSBRUGl4bWFw
KGltYWdlU2l6ZSk7Ci0gICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAg
ICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7Ci0gICAgICAgIGlmIChtdWx0aXBsZSkKLSAg
ICAgICAgICAgIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKCZwYWludGVyLCBpbWFnZVNpemUsIGRp
c2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGRyYXdTaW1wbGVDb21ib0J1dHRvbigmcGFpbnRlciwgaW1hZ2VTaXplLCBkaXNh
YmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBRUGl4bWFwQ2Fj
aGU6Omluc2VydChrZXksIHJlc3VsdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3TGluZUVkaXQoY29uc3QgUVJlY3QmIHJlY3Qs
IGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQpCi17Ci0gICAgUVBlbiBwZW4oUXQ6OmRhcmtHcmF5
LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7Ci0gICAg
cGFpbnRlci0+c2V0UGVuKHBlbik7Ci0KLSAgICBpZiAoc3Vua2VuKSB7Ci0gICAgICAgIGRyYXdS
ZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgUUJydXNoKFF0
OjpkYXJrR3JheSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUUxpbmVhckdyYWRp
ZW50IGxpbmVhckdyYWRpZW50OwotICAgIGlmICghZW5hYmxlZCkgewotICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50
LnNldEZpbmFsU3RvcChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50
LnNldENvbG9yQXQoMC4wLCBRdDo6bGlnaHRHcmF5KTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0U3RhcnQocmVjdC50b3BMZWZ0KCkpOwotICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QudG9wTGVmdCgpLngoKSwKLSAgICAgICAgICAgICAg
ICAgICAgcmVjdC50b3BMZWZ0KCkueSgpICsgLyogb2Zmc2V0IGxpbWl0IGZvciBncmFkaWVudCAq
LyAyMCkpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmRhcmtH
cmF5KTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjM1LCBRdDo6d2hpdGUp
OwotICAgIH0KLQotICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIs
IHBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOwotfQotCi12b2lkIFN0eWxlUGFpbnRlck1vYmls
ZTo6ZHJhd0NoZWNrQm94KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGNoZWNrZWQsIGJvb2wgZW5h
YmxlZCkKLXsKLSAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQocmVjdC50b3BMZWZ0
KCksIHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICBpZiAoIWVuYWJsZWQpIHsKLSAgICAgICAgbGlu
ZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOwotICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmRhcmtHcmF5KTsKLSAgICAg
ICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjUsIFF0Ojp3aGl0ZSk7Ci0gICAgfQotCi0g
ICAgcGFpbnRlci0+c2V0UGVuKFFQZW4oZW5hYmxlZCA/IFF0OjpkYXJrR3JheSA6IFF0OjpsaWdo
dEdyYXkpKTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChsaW5lYXJHcmFkaWVudCk7Ci0gICAgcGFp
bnRlci0+ZHJhd1JlY3QocmVjdCk7Ci0gICAgY29uc3QgUVJlY3QgciA9IHJlY3QuYWRqdXN0ZWQo
MSwgMSwgLTEsIC0xKTsKLQotICAgIGlmICghY2hlY2tlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUVBpeG1hcCBjaGVja2VyID0gZmluZENoZWNrZXIociwgIWVuYWJsZWQpOwotICAgIGlmIChj
aGVja2VyLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeCA9IChyLndpZHRo
KCkgLSBjaGVja2VyLndpZHRoKCkpID4+IDE7Ci0gICAgaW50IHkgPSAoci5oZWlnaHQoKSAtIGNo
ZWNrZXIuaGVpZ2h0KCkpID4+IDE7Ci0gICAgcGFpbnRlci0+ZHJhd1BpeG1hcChyLngoKSArIHgs
IHIueSgpICsgeSwgY2hlY2tlcik7Ci19Ci0KLXZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3
UmFkaW9CdXR0b24oY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVk
KQotewotICAgIFFQaXhtYXAgcmFkaW8gPSBmaW5kUmFkaW8ocmVjdC5zaXplKCksIGNoZWNrZWQs
ICFlbmFibGVkKTsKLSAgICBpZiAocmFkaW8uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QueCgpLCByZWN0LnkoKSwgcmFkaW8pOwotfQotCi12
b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1B1c2hCdXR0b24oY29uc3QgUVJlY3QmIHJlY3Qs
IGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQpCi17Ci0gICAgUVBlbiBwZW4oUXQ6OmRhcmtHcmF5
LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7Ci0gICAg
cGFpbnRlci0+c2V0UGVuKHBlbik7Ci0KLSAgICBpZiAoc3Vua2VuKSB7Ci0gICAgICAgIGRyYXdS
ZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgUUJydXNoKFF0
OjpkYXJrR3JheSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUUxpbmVhckdyYWRp
ZW50IGxpbmVhckdyYWRpZW50OwotICAgIGlmICghZW5hYmxlZCkgewotICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50
LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNldENv
bG9yQXQoMS4wLCBRdDo6d2hpdGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJvdHRvbUxlZnQoKS54KCksCi0gICAgICAgICAgICAg
ICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnkoKSAtIC8qIG9mZnNldCBsaW1pdCBmb3IgZ3JhZGll
bnQgKi8gMjApKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0Ojpn
cmF5KTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjQsIFF0Ojp3aGl0ZSk7
Ci0gICAgfQotCi0gICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwg
cGVuLCByZWN0LCBsaW5lYXJHcmFkaWVudCk7Ci19Ci0KLXZvaWQgU3R5bGVQYWludGVyTW9iaWxl
OjpkcmF3Q29tYm9Cb3goY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5h
YmxlZCkKLXsKLSAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwg
UXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKLSAgICBRTGluZWFyR3JhZGllbnQgbGluZWFy
R3JhZGllbnQ7Ci0gICAgaWYgKCFlbmFibGVkKSB7Ci0gICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Rmlu
YWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JB
dCgwLjAsIFF0OjpncmF5KTsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAs
IFF0Ojp3aGl0ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3Rh
cnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0
b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgcmVj
dC5ib3R0b21MZWZ0KCkueSgpIC0gLyogb2Zmc2V0IGxpbWl0IGZvciBncmFkaWVudCAqLyAyMCkp
OwotICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOwotICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNCwgUXQ6OndoaXRlKTsKLSAgICB9Ci0K
LSAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3Qs
IGxpbmVhckdyYWRpZW50KTsKLQotICAgIGNvbnN0IFFSZWN0IHIocmVjdC54KCkgKyByZWN0Lndp
ZHRoKCkgLSBmcmFtZVdpZHRoIC0gYXJyb3dCb3hXaWR0aCwgcmVjdC55KCkgKyBmcmFtZVdpZHRo
Ci0gICAgICAgICAgICAgICAgICAgLCBhcnJvd0JveFdpZHRoLCByZWN0LmhlaWdodCgpIC0gMiAq
IGZyYW1lV2lkdGgpOwotICAgIFFQaXhtYXAgcGljID0gZmluZENvbWJvQnV0dG9uKHIuc2l6ZSgp
LCBtdWx0aXBsZSwgIWVuYWJsZWQpOwotCi0gICAgaWYgKHBpYy5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW50IHggPSAoci53aWR0aCgpIC0gcGljLndpZHRoKCkpID4+IDE7Ci0g
ICAgaW50IHkgPSAoci5oZWlnaHQoKSAtIHBpYy5oZWlnaHQoKSkgPj4gMTsKLSAgICBwYWludGVy
LT5kcmF3UGl4bWFwKHIueCgpICsgeCwgci55KCkgKyB5LCBwaWMpOwotCi0gICAgcGFpbnRlci0+
c2V0UGVuKGVuYWJsZWQgPyBRdDo6ZGFya0dyYXkgOiBRdDo6Z3JheSk7Ci0gICAgcGFpbnRlci0+
ZHJhd0xpbmUoci5sZWZ0KCkgLSAyLCByLnRvcCgpICsgMiwgci5sZWZ0KCkgLSAyLCByLmJvdHRv
bSgpIC0gMik7Ci19Ci0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVRdE1v
YmlsZTo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5k
ZXJUaGVtZVF0TW9iaWxlKHBhZ2UpKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVu
ZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKiBwYWdlKQotewotICAgIGlmIChwYWdlKSB7Ci0j
aWYgSEFWRShRU1RZTEUpCi0gICAgICAgIGlmICghUmVuZGVyVGhlbWVRdDo6dXNlTW9iaWxlVGhl
bWUoKSkKLSAgICAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZVFTdHlsZTo6Y3JlYXRlKHBhZ2Up
OwotI2VuZGlmCi0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjcmVhdGUocGFn
ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlbmRlclRoZW1lKiBmYWxsYmFjayA9IFJlbmRlclRo
ZW1lUXRNb2JpbGU6OmNyZWF0ZSgwKS5yZWxlYXNlUmVmKCk7Ci0gICAgcmV0dXJuIGZhbGxiYWNr
OwotfQotCi1SZW5kZXJUaGVtZVF0TW9iaWxlOjpSZW5kZXJUaGVtZVF0TW9iaWxlKFBhZ2UqIHBh
Z2UpCi0gICAgOiBSZW5kZXJUaGVtZVF0KHBhZ2UpCi17Ci19Ci0KLVJlbmRlclRoZW1lUXRNb2Jp
bGU6On5SZW5kZXJUaGVtZVF0TW9iaWxlKCkKLXsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0TW9i
aWxlOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3Jk
ZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgZmlsbCwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHN0eWxlLT5hcHBlYXJhbmNlKCkpIHsK
LSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZVF0Ojpp
c0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENvbG9yKTsKLSAg
ICB9Ci19Ci0KLWludCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwb3B1cEludGVybmFsUGFkZGluZ0Jv
dHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXZv
aWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5
bGUqIHJlbmRlclN0eWxlKSBjb25zdAotewotICAgIFFTaXplIHNpemUoMCwgMCk7Ci0gICAgY29u
c3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5mb250KCkuZm9udCgpKTsKLQotICAgIHN3
aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgVGV4dEFyZWFQYXJ0
OgotICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDogewot
ICAgICAgICBpbnQgcGFkZGluZyA9IGZyYW1lV2lkdGg7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5z
ZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5
bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVu
ZGVyU3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAg
IHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhl
biB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFyZW5kZXJTdHlsZS0+d2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmICFyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkg
ewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OiB7Ci0gICAgICAgIGNvbnN0IGludCB3ID0gY2hlY2tC
b3hXaWR0aCAqIHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIHNpemUgPSBR
U2l6ZSh3LCB3KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUmFkaW9QYXJ0OiB7
Ci0gICAgICAgIGNvbnN0IGludCB3ID0gcmFkaW9XaWR0aCAqIHJlbmRlclN0eWxlLT5lZmZlY3Rp
dmVab29tKCk7Ci0gICAgICAgIHNpemUgPSBRU2l6ZSh3LCB3KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIEZJWE1F
OiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdp
ZHRoIGludG8gYWNjb3VudC4KLSAgICBpZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQotICAgICAgICByZW5kZXJTdHlsZS0+c2V0
TWluV2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBpZiAocmVuZGVyU3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQotICAgICAgICByZW5k
ZXJTdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewot
ICAgIC8vIERpdGNoIHRoZSBib3JkZXIuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0KLSAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLQotICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLQot
ICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
KTsKLSAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLSAgICBzZXRCdXR0b25QYWRkaW5nKHN0eWxl
KTsKLX0KLQotCi12b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OnNldEJ1dHRvblBhZGRpbmcoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVy
bjsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKGJ1dHRvblBhZGRpbmdMZWZ0LCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGJ1dHRvblBhZGRpbmdS
aWdodCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoYnV0dG9uUGFk
ZGluZ1RvcCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoYnV0
dG9uUGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxl
OjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXJNb2JpbGUgcCh0aGlzLCBpKTsKLSAgICBp
ZiAoIXAuaXNWYWxpZCgpKQotICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQ29udHJvbFBhcnQg
YXBwZWFyYW5jZSA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKLSAgICBpZiAoYXBwZWFyYW5j
ZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBhcHBlYXJhbmNlID09IEJ1dHRvblBhcnQpIHsKLSAgICAg
ICAgcC5kcmF3UHVzaEJ1dHRvbihyLCBpc1ByZXNzZWQobykpOwotICAgIH0gZWxzZSBpZiAoYXBw
ZWFyYW5jZSA9PSBSYWRpb1BhcnQpCi0gICAgICAgcC5kcmF3UmFkaW9CdXR0b24ociwgaXNDaGVj
a2VkKG8pKTsKLSAgICBlbHNlIGlmIChhcHBlYXJhbmNlID09IENoZWNrYm94UGFydCkKLSAgICAg
ICBwLmRyYXdDaGVja0JveChyLCBpc0NoZWNrZWQobykpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAg
IC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0aGlzIGxlYWRzIHRvIGRpZmZlcmVuY2VzIGxp
a2U6Ci0gICAgLy8gLSBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY4
eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRlcjogKDJweCBpbnNldCAjMDAwMDAwKV0KLSAgICAv
LyArIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAxNjZ4MjYKLSAgICAv
LyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENTUyBzdHlsZSBpcyBhcHBsaWVkIHRoYXQgZG9lc24n
dCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwgYm9yZGVyIG9yCi0gICAgLy8gcGFkZGluZy4gSnVz
dCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCi0gICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihD
b2xvcjo6dHJhbnNwYXJlbnQpOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0eWxl
LT5yZXNldFBhZGRpbmcoKTsKLSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Ci0g
ICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aCh0ZXh0RmllbGRQYWRkaW5nLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHRleHRGaWVsZFBhZGRpbmcsIEZp
eGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgU3R5bGVQYWludGVyTW9iaWxlIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gby0+
c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwotICAgIGlmIChhcHBlYXJhbmNlICE9IFRleHRGaWVsZFBh
cnQKLSAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKLSAgICAgICAgJiYg
YXBwZWFyYW5jZSAhPSBUZXh0QXJlYVBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBMaXN0
Ym94UGFydCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBOb3cgcGFpbnQgdGhlIHRl
eHQgZmllbGQuCi0gICAgcC5kcmF3TGluZUVkaXQociwgLypzdW5rZW4gPSAqL2lzUHJlc3NlZChv
KSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFk
anVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Ci17Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0KLSAgICAvLyBI
ZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0
bykpOwotCi0gICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5z
ZXRXaGl0ZVNwYWNlKFBSRSk7Ci0KLSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7
Ci0KLSAgICAvLyBBZGQgaW4gdGhlIHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgotICAg
IHNldFBvcHVwUGFkZGluZyhzdHlsZSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0
aChtZW51TGlzdFBhZGRpbmcsIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdE1vYmls
ZTo6c2V0UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBjb25z
dCBpbnQgcGFkZGluZ0xlZnQgPSA0OwotICAgIGNvbnN0IGludCBwYWRkaW5nUmlnaHQgPSBzdHls
ZS0+d2lkdGgoKS5pc0ZpeGVkKCkgfHwgc3R5bGUtPndpZHRoKCkuaXNQZXJjZW50KCkgPyA1IDog
ODsKLQotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgYnV0
dG9uSWNvblNpemUsIEZpeGVkKSk7Ci0KLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgo
MiwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMiwgRml4ZWQp
KTsKLX0KLQotCi1ib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
U3R5bGVQYWludGVyTW9iaWxlIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRp
b24oKTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBjb25zdCBRUmVj
dCByZWN0KFFQb2ludCgwLCAwKSwgci5zaXplKCkpOwotCi0gICAgcC5kcmF3Q29tYm9Cb3gocmVj
dCwgY2hlY2tNdWx0aXBsZShvKSk7Ci0gICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWlu
dE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgU3R5bGVQYWludGVyTW9iaWxlIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBwLmRyYXdDb21ib0JveChyLCBjaGVja011
bHRpcGxlKG8pKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShQUk9HUkVT
U19UQUcpCi1kb3VibGUgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Ci17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMC47Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi1ib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRS
ZWN0JiByKQotewotICAgIC8vIFdlJ3ZlIGFscmVhZHkgcGFpbnRlZCBpdCBpbiBwYWludFNsaWRl
clRyYWNrKCksIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNo
ZWNrTXVsdGlwbGUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIEhUTUxTZWxlY3RFbGVt
ZW50KiBzZWxlY3QgPSBvID8gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihvLT5ub2Rl
KCkpIDogMDsKLSAgICByZXR1cm4gc2VsZWN0ID8gc2VsZWN0LT5tdWx0aXBsZSgpIDogZmFsc2U7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50
SWZFeGlzdHMoUVBhbGV0dGUmIHBhbGV0dGUpIGNvbnN0Ci17Ci0gICAgc3RhdGljIFFQYWxldHRl
IGxpZ2h0R3JheVBhbGV0dGUoUXQ6OmxpZ2h0R3JheSk7Ci0gICAgcGFsZXR0ZSA9IGxpZ2h0R3Jh
eVBhbGV0dGU7Ci0gICAgcmV0dXJuOwotfQotCi12b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgY29u
c3QgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYgKHBhcnQg
PT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZp
eGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlckhlaWdodCwgRml4
ZWQpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1
bWJTaXplKHN0eWxlKTsKLX0KLQotfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiNmNiNDZlY2EyZDE0MGE2OTc1NDg0ZjNkYzc4OWQ5MDUxZmFl
ZDVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaAorKysgL2Rldi9udWxs
CkBAIC0xLDExMCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1l
IGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUuCi0gKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0jaWZuZGVmIFJlbmRlclRoZW1lUXRNb2JpbGVfaAotI2RlZmluZSBSZW5kZXJUaGVt
ZVF0TW9iaWxlX2gKLQotI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKLQotI2luY2x1ZGUgPFFC
cnVzaD4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRQ29sb3I7Ci1jbGFzcyBRUGl4bWFw
OwotY2xhc3MgUVNpemU7Ci1RVF9FTkRfTkFNRVNQQUNFCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgUmVuZGVyVGhlbWVRdE1vYmlsZSA6IHB1YmxpYyBSZW5kZXJUaGVtZVF0IHsKLXBy
aXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVRdE1vYmlsZShQYWdlKik7Ci0gICAgdmlydHVhbCB+UmVu
ZGVyVGhlbWVRdE1vYmlsZSgpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVu
ZGVyVGhlbWU+IGNyZWF0ZShQYWdlKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVy
VGh1bWJTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZp
bGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsK
LQotcHJvdGVjdGVkOgotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotI2lmIEVO
QUJMRShQUk9HUkVTU19UQUcpCi0gICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFu
aW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRp
b25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVT
aXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBRU2hhcmVk
UG9pbnRlcjxTdHlsZVBhaW50ZXI+IGdldFN0eWxlUGFpbnRlcihjb25zdCBQYWludEluZm8mKTsK
LQotcHJpdmF0ZToKLSAgICBib29sIGNoZWNrTXVsdGlwbGUoUmVuZGVyT2JqZWN0KikgY29uc3Q7
Ci0gICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmKSBjb25zdDsKLX07Ci0KLWNsYXNz
IFN0eWxlUGFpbnRlck1vYmlsZSA6IHB1YmxpYyBTdHlsZVBhaW50ZXIgewotcHVibGljOgotICAg
IGV4cGxpY2l0IFN0eWxlUGFpbnRlck1vYmlsZShSZW5kZXJUaGVtZVF0TW9iaWxlKiwgY29uc3Qg
UGFpbnRJbmZvJik7Ci0KLSAgICB2b2lkIGRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYsIGJvb2wg
c3Vua2VuLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKLSAgICB2b2lkIGRyYXdDaGVja0JveChjb25z
dCBRUmVjdCYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7Ci0gICAgdm9pZCBk
cmF3UmFkaW9CdXR0b24oY29uc3QgUVJlY3QmLCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCA9
IHRydWUpOwotICAgIHZvaWQgZHJhd1B1c2hCdXR0b24oY29uc3QgUVJlY3QmLCBib29sIHN1bmtl
biwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7Ci0gICAgdm9pZCBkcmF3Q29tYm9Cb3goY29uc3QgUVJl
Y3QmLCBib29sIG11bHRpcGxlLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIGRyYXdDaGVja2VyKFFQYWludGVyKiwgaW50IHNpemUsIFFDb2xvcikgY29uc3Q7Ci0g
ICAgUVBpeG1hcCBmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYsIGJvb2wgZGlzYWJsZWQpIGNvbnN0
OwotCi0gICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50ZXIqLCBjb25zdCBRU2l6ZSYsIGJvb2wgY2hl
Y2tlZCwgUUNvbG9yKSBjb25zdDsKLSAgICBRUGl4bWFwIGZpbmRSYWRpbyhjb25zdCBRU2l6ZSYs
IGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7Ci0KLSAgICBRU2l6ZSBnZXRCdXR0
b25JbWFnZVNpemUoY29uc3QgUVNpemUmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdTaW1wbGVDb21i
b0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgUUNvbG9yKSBjb25zdDsKLSAgICB2b2lk
IGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiwgY29uc3QgUVNpemUmLCBRQ29sb3Ip
IGNvbnN0OwotICAgIFFQaXhtYXAgZmluZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiwgYm9vbCBt
dWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7Ci0KLSAgICBRX0RJU0FCTEVfQ09QWShTdHls
ZVBhaW50ZXJNb2JpbGUpOwotfTsKLX0KLQotI2VuZGlmIC8vIFJlbmRlclRoZW1lUXRNb2JpbGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVR
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcApp
bmRleCAwODlhZjY2OTE4YWUwNDk2ZDAxMWM2OTJmYzZhMWY0Y2RiZDBjYjIxLi4zZGE1YTc0Zjg2
ZDQ1MzcyODQ5ZGNjNzQzM2IwMWJkNGEwMTRmMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcApAQCAtMjYsNDcgKzI2LDMxIEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgIUhBVkUoUVNUWUxFKQotI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lLmgiCi0KLSNlbHNlCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRdC5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2
ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJU
aGVtZVF0TW9iaWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgogI2luY2x1ZGUgIlNj
cm9sbFZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1ZGUgPFFBcHBsaWNh
dGlvbj4KLSNpZmRlZiBRX09TX01BQworI2lmZGVmIFFfV1NfTUFDCiAjaW5jbHVkZSA8UU1hY1N0
eWxlPgogI2VuZGlmCiAjaW5jbHVkZSA8UU1lbnU+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5j
bHVkZSA8UVN0eWxlPgogI2luY2x1ZGUgPFFTdHlsZU9wdGlvblNsaWRlcj4KLSNlbmRpZiAvLyBI
QVZFKFFTVFlMRSkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JvbGxiYXJUaGVtZSogU2Ny
b2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKIHsKLSAgICBzdGF0aWMgU2Nyb2xsYmFyVGhlbWUq
IHRoZW1lID0gMDsKLSAgICBpZiAodGhlbWUpCi0gICAgICAgIHJldHVybiB0aGVtZTsKLSNpZiBI
QVZFKFFTVFlMRSkKLSAgICBpZiAoIVJlbmRlclRoZW1lUXQ6OnVzZU1vYmlsZVRoZW1lKCkpCi0g
ICAgICAgIHRoZW1lID0gbmV3IFNjcm9sbGJhclRoZW1lUXQoKTsKLSAgICBlbHNlCi0jZW5kaWYK
LSAgICAgICAgdGhlbWUgPSBuZXcgU2Nyb2xsYmFyVGhlbWUoKTsKLSAgICByZXR1cm4gdGhlbWU7
CisgICAgc3RhdGljIFNjcm9sbGJhclRoZW1lUXQgdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZTsK
IH0KIAotI2lmIEhBVkUoUVNUWUxFKQogU2Nyb2xsYmFyVGhlbWVRdDo6flNjcm9sbGJhclRoZW1l
UXQoKQogewogfQpAQCAtMTYyLDcgKzE0Niw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVRdDo6cGFp
bnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250CiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRo
aXMsIGdyYXBoaWNzQ29udGV4dCk7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgZ3JhcGhpY3ND
b250ZXh0KTsKICAgICBpZiAoIXAuaXNWYWxpZCgpKQogICAgICAgcmV0dXJuIHRydWU7CiAKQEAg
LTE3MSw3ICsxNTUsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lUXQ6OnBhaW50KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udAogCiAgICAgcC5wYWludGVy
LT5zZXRDbGlwUmVjdChvcHQtPnJlY3QuaW50ZXJzZWN0ZWQoZGFtYWdlUmVjdCksIFF0OjpJbnRl
cnNlY3RDbGlwKTsKIAotI2lmZGVmIFFfT1NfTUFDCisjaWZkZWYgUV9XU19NQUMKICAgICAvLyBG
SVhNRTogV2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSB3aWRnZXQgc3R5bGUgYnV0IHRvZGF5IFNj
cm9sbGJhclRoZW1lIGlzIG5vdCBhd2FyZSBvZiB0aGUgcGFnZSBzbyB3ZQogICAgIC8vIGNhbid0
IGdldCB0aGUgd2lkZ2V0LgogICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4oc3R5bGUo
KSkpCkBAIC0yMTYsNiArMjAwLDkgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZVF0OjppbnZhbGlkYXRl
UGFydChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCkKIAogaW50IFNjcm9sbGJh
clRoZW1lUXQ6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSkKIHsKKyNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQorICAgIHJldHVybiAwOworI2VuZGlm
CiAgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG87CiAgICAgby5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0
aWNhbDsKICAgICBvLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6b250YWw7CkBAIC0yNTYs
NyArMjQzLDcgQEAgaW50IFNjcm9sbGJhclRoZW1lUXQ6OnRyYWNrTGVuZ3RoKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQogCiB2b2lkIFNjcm9sbGJhclRoZW1lUXQ6OnBhaW50U2Nyb2xsQ29ybmVyKFNj
cm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7Ci0gICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgY29udGV4dCk7CisgICAgU3R5bGVQ
YWludGVyIHAodGhpcywgY29udGV4dCk7CiAgICAgaWYgKCFwLmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNzAsNiArMjU3LDUgQEAgUVN0eWxlKiBTY3JvbGxiYXJUaGVtZVF0Ojpz
dHlsZSgpIGNvbnN0CiAgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKIH0KIAotI2Vu
ZGlmIC8vIEhBVkUoUVNUWUxFKQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXgg
MDBlMzk0OTg5Y2EzNWE5MjcwODA5YmNiNzg1MzA5NDMyMjRjZDkyNy4uOTg1NzdiNWNkY2QxZGU4
ZTRkYTk5MDU2NzM5Zjc2OGZkYmM0Y2VkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApA
QCAtMTAyLDcgKzEwMiw2IEBACiAjaW5jbHVkZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgogI2luY2x1
ZGUgIlJlZlB0ci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCi0jaW5jbHVkZSAi
UmVuZGVyVGhlbWVRdC5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTMyNzMsMTUgKzMy
NzIsMTEgQEAgYm9vbCBRV2ViUGFnZTo6c3dhbGxvd0NvbnRleHRNZW51RXZlbnQoUUNvbnRleHRN
ZW51RXZlbnQgKmV2ZW50KQogewogICAgIGQtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigp
LT5jbGVhckNvbnRleHRNZW51KCk7CiAKLSNpZiBIQVZFKFFTVFlMRSkKLSAgICBpZiAoIVJlbmRl
clRoZW1lUXQ6OnVzZU1vYmlsZVRoZW1lKCkpIHsKLSAgICAgICAgaWYgKFFXZWJGcmFtZSogd2Vi
RnJhbWUgPSBmcmFtZUF0KGV2ZW50LT5wb3MoKSkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFt
ZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUod2ViRnJhbWUpOwotICAgICAgICAgICAgaWYgKFNj
cm9sbGJhciogc2Nyb2xsYmFyID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYmFyQXRQb2ludChQbGF0
Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIDEpLnBvcygpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyLT5jb250ZXh0TWVudShQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIDEpKTsKLSAg
ICAgICAgfQorICAgIGlmIChRV2ViRnJhbWUqIHdlYkZyYW1lID0gZnJhbWVBdChldmVudC0+cG9z
KCkpKSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUod2Vi
RnJhbWUpOworICAgICAgICBpZiAoU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBmcmFtZS0+dmlldygp
LT5zY3JvbGxiYXJBdFBvaW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCwgMSkucG9zKCkpKQor
ICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udGV4dE1lbnUoUGxhdGZvcm1Nb3VzZUV2
ZW50KGV2ZW50LCAxKSk7CiAgICAgfQotI2VuZGlmCiAKICAgICBXZWJDb3JlOjpGcmFtZSogZm9j
dXNlZEZyYW1lID0gZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpOwogICAgIGZvY3VzZWRGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2
ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCwgMSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC90ZXN0cy90ZXN0cy5wcmkgYi9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBy
aQppbmRleCAyYTA4MTM2YjE5ZGY2ZjkwMzI3ODRmOGI0ZGEzMmE3N2ZjNGNmNTYwLi5iNjk5OWNi
YmE4MzY2MGI4ODZkOWQ4ODQzNTQzNjhhZTQ2ZDY4YjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L3Rlc3RzL3Rlc3RzLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Rlc3Rz
LnByaQpAQCAtMjcsNSArMjcsOCBAQCBoYXZlUXQoNSkgewogICAgIGNvbnRhaW5zKFFUX0NPTkZJ
RywgZGVjbGFyYXRpdmUpOiBRVCArPSBkZWNsYXJhdGl2ZQogfQogCisjIFVzZSB0aGUgUXQgTW9i
aWxlIHRoZW1lIGlmIGl0IGlzIGluIHRoZSBDT05GSUcKK3VzZV9xdF9tb2JpbGVfdGhlbWU6IERF
RklORVMgKz0gV1RGX1VTRV9RVF9NT0JJTEVfVEhFTUU9MQorCiAjIFRoaXMgZGVmaW5lIGlzIHVz
ZWQgYnkgc29tZSB0ZXN0cyB0byBsb29rIHVwIHJlc291cmNlcyBpbiB0aGUgc291cmNlIHRyZWUK
IERFRklORVMgKz0gVEVTVFNfU09VUkNFX0RJUj1cXFwiJCRQV0QvXFxcIgpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGIyZTQxMmMyZGQzOGU1MTcx
NmI5ODMzMTdjMjAyZjk5ZmFlOWE0ZGQuLmIyNWFkNDM2YWFiY2EwZTViNGZiODQ3M2U4YjY0MWIy
MWRiNzdlZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0xMS0xMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2
aWV3LmJvdEBnbWFpbC5jb20+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjk5
OTY0LgorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85OTk2NAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMjQKKworICAg
ICAgICBCcm9rZSB0b28gbWFueSBRdCB0ZXN0cyAoUmVxdWVzdGVkIGJ5IHRyb25pY2FsXyBvbiAj
d2Via2l0KS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQv
QWN0aXZhdGVGb250c1F0LmNwcDoKKyAgICAgICAgKFdUUjo6YWN0aXZhdGVGb250cyk6CisgICAg
ICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmY6CisgICAgICAgICogcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJjb3JlLnByZjoKKwogMjAxMS0xMS0xMSAgUGllcnJlIFJv
c3NpICA8cGllcnJlLnJvc3NpQGdtYWlsLmNvbT4KIAogICAgICAgICBbUXRdIFJlbW92ZSB0aGUg
UVN0eWxlIGRlcGVuZGVuY3kgaW4gUXQncyBtb2JpbGUgdGhlbWUKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQvQWN0aXZhdGVGb250c1F0LmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQvQWN0aXZhdGVGb250c1F0
LmNwcAppbmRleCBmMjFiOGM5YzRkZGU0ZTExNjE5NzMyYzU5ZWEyNTM0YmNjMDA3ZDU1Li5iOGJl
MjUxMDcyYTM0MzhjNGJkMzZjNzhmZWYxNGFhMjg1ZTljYmMxIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0FjdGl2YXRlRm9udHNRdC5jcHAKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9BY3RpdmF0ZUZvbnRz
UXQuY3BwCkBAIC04OSw5ICs4OSw3IEBAIHZvaWQgYWN0aXZhdGVGb250cygpCiAjZW5kaWYKIAog
ICAgIFFBcHBsaWNhdGlvbjo6c2V0R3JhcGhpY3NTeXN0ZW0oUUxhdGluMVN0cmluZygicmFzdGVy
IikpOwotI2lmIEhBVkUoUVNUWUxFKQogICAgIFFBcHBsaWNhdGlvbjo6c2V0U3R5bGUobmV3IFFX
aW5kb3dzU3R5bGUpOwotI2VuZGlmCiAKICNpZiBkZWZpbmVkKFFfV1NfWDExKQogICAgIFFYMTFJ
bmZvOjpzZXRBcHBEcGlYKDAsIDk2KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvZmVhdHVyZXMucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0
dXJlcy5wcmYKaW5kZXggZDI2M2M1NjVmYTUxZDBkZWU5YTFkMmU2ZjA4YjI4OGZkY2M2Yjg2ZS4u
ZDRiYmM4NWI3OGMwYmJkNTg3ZjMwMzI0YTQ1MDVkYTc4M2EzM2Q3ZCAxMDA2NDQKLS0tIGEvVG9v
bHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKKysrIGIvVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKQEAgLTcyLDcgKzcyLDYgQEAgaXNFbXB0eShI
QVZFX1FSQVdGT05UKSB7CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPX1RSQUNLPS4p
OiBERUZJTkVTICs9IEVOQUJMRV9WSURFT19UUkFDSz0wCiAhY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1RPVUNIX0lDT05fTE9BRElORz0uKTogREVGSU5FUyArPSBFTkFCTEVfVE9VQ0hfSUNPTl9M
T0FESU5HPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfQU5JTUFUSU9OX0FQST0uKTogREVG
SU5FUyArPSBFTkFCTEVfQU5JTUFUSU9OX0FQST0wCi0hY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X05PX0xJU1RCT1hfUkVOREVSSU5HPS4pOiBERUZJTkVTICs9IEVOQUJMRV9OT19MSVNUQk9YX1JF
TkRFUklORz0xCiAKICMgU1ZHIHN1cHBvcnQKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZH
PTApIHsKQEAgLTEwOCw5ICsxMDcsNiBAQCBpc0VtcHR5KEhBVkVfUVJBV0ZPTlQpIHsKICAgICB9
CiB9CiAKLSMgUVN0eWxlIGRldGVjdGlvbgotaGF2ZVF0KDQpfCFpc0VtcHR5KFFULndpZGdldHMu
bmFtZSk6IERFRklORVMgKz0gSEFWRV9RU1RZTEU9MQotCiAjIFdlYkdMIHN1cHBvcnQKIGNvbnRh
aW5zKFFUX0NPTkZJRywgb3BlbmdsKTohd2luMzItKiB7CiAgICAgIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9XRUJHTD0uKTogREVGSU5FUyArPSBFTkFCTEVfV0VCR0w9MQpkaWZmIC0tZ2l0IGEv
VG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJjb3JlLnByZiBiL1Rvb2xzL3FtYWtlL21r
c3BlY3MvZmVhdHVyZXMvd2ViY29yZS5wcmYKaW5kZXggODdhZGNjOThkMzRjNjUxMTE4NTRiYWNj
ODljNjM2MTMyZWU2OTgyYi4uYzBlNWI5ODQ1MGNmNjkwNGZjMTAzMWYxOTI1ODk4MWEzNTRiZWJj
MyAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJjb3JlLnByZgor
KysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3dlYmNvcmUucHJmCkBAIC0yODUsNiAr
Mjg1LDggQEAgdW5peHx3aW4zMi1nKysqIHsKIAogZW5hYmxlX2Zhc3RfbW9iaWxlX3Njcm9sbGlu
ZzogREVGSU5FUyArPSBFTkFCTEVfRkFTVF9NT0JJTEVfU0NST0xMSU5HPTEKIAordXNlX3F0X21v
YmlsZV90aGVtZTogREVGSU5FUyArPSBXVEZfVVNFX1FUX01PQklMRV9USEVNRT0xCisKIGNvbmZp
Z19zdGVwIHsKICAgICBwYXRoVG9XZWJDb3JlT3V0cHV0ID0gJCRidWlsZERpckZvclNvdXJjZShT
b3VyY2UvV2ViQ29yZSkvJCRXRUJDT1JFX0RFU1RESVIKICAgICBsaW5rU3RhdGljTGlicmFyeSgk
JHBhdGhUb1dlYkNvcmVPdXRwdXQsICQkV0VCQ09SRV9UQVJHRVQpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>