<?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>194328</bug_id>
          
          <creation_ts>2019-02-05 20:37:31 -0800</creation_ts>
          <short_desc>[LFC][IFC] Move line layout code to a dedicated file</short_desc>
          <delta_ts>2019-02-06 09:15:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1502674</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-02-05 20:37:31 -0800</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502675</commentid>
    <comment_count>1</comment_count>
      <attachid>361271</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-02-05 20:41:41 -0800</bug_when>
    <thetext>Created attachment 361271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502680</commentid>
    <comment_count>2</comment_count>
      <attachid>361274</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-02-05 20:56:43 -0800</bug_when>
    <thetext>Created attachment 361274
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502712</commentid>
    <comment_count>3</comment_count>
      <attachid>361274</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-02-06 00:48:09 -0800</bug_when>
    <thetext>Comment on attachment 361274
Patch

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

&gt; Source/WebCore/Sources.txt:1346
&gt; +layout/inlineformatting/InlineLineLayout.cpp

Since you are keeping LineLayout in InlineFormattingContext namespace you might also consider longer &apos;InlineFormattingContextLineLayout.cpp&apos;.

Or just LineLayout.cpp, especially if the plan is to move it outside of the namespace.

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.h:61
&gt; +        class Line {
&gt; +        public:
&gt; +            void init(const LayoutPoint&amp; topLeft, LayoutUnit availableWidth, LayoutUnit minimalHeight);
&gt; +            void close();

LineLayout::Line seems like a line layout internal thing so, maybe you can also move its definition to the new cpp file. You can forward declare a nested class (class Line;) here and define it later

class LineLayout::Line {
public:
   ...

The same pattern might work for the LineLayout type itself too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502768</commentid>
    <comment_count>4</comment_count>
      <attachid>361295</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-02-06 07:52:20 -0800</bug_when>
    <thetext>Created attachment 361295
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503151</commentid>
    <comment_count>5</comment_count>
      <attachid>361295</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-06 09:04:50 -0800</bug_when>
    <thetext>Comment on attachment 361295
Patch

Clearing flags on attachment: 361295

Committed r241023: &lt;https://trac.webkit.org/changeset/241023&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503152</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-06 09:04:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503155</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-06 09:15:49 -0800</bug_when>
    <thetext>&lt;rdar://problem/47851839&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361271</attachid>
            <date>2019-02-05 20:41:41 -0800</date>
            <delta_ts>2019-02-05 20:56:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194328-20190205204122.patch</filename>
            <type>text/plain</type>
            <size>37832</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwOTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmViZDM2YzYxODFmNGQy
YTFjZDk3ZGI1OGRjNWQ4NTFmZDVjNzgxZC4uYWU5MTVjMzVjMmM5NTcxZjNjMWZiZmY2ZWJkYjA0
NTA2ZTM5NjM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE5LTAyLTA1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGxp
bmUgbGF5b3V0IGNvZGUgdG8gYSBkZWRpY2F0ZWQgZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6aXNUcmltbWFibGVDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdM
aW5lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OnNwbGl0SW5saW5lUnVuSWZOZWVkZWQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRl
RmluYWxSdW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OnBvc3RQcm9jZXNzSW5saW5lUnVucyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
bG9zZUxpbmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXRJbmxpbmVDb250ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdFBvc2l0aW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxh
eW91dDo6TGluZTo6aGFzQ29udGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjppc0Nsb3NlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lTGF5b3V0OjpMaW5lOjppc0ZpcnN0TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpydW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVM
YXlvdXQ6OkxpbmU6OmNvbnRlbnRMb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjphdmFp
bGFibGVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpsYXN0UnVuVHlwZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
OjpMaW5lOjpsb2dpY2FsVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxCb3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
TGluZUxheW91dDo6TGluZTo6bG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpoYXNDb250ZW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmU6OmlzQ2xvc2VkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmlzRmlyc3RMaW5lIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmU6OnJ1bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmU6OmF2YWlsYWJsZVdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6Omxhc3RSdW5UeXBlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmU6OmxvZ2ljYWxUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6bG9naWNhbEJvdHRv
bSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lOjpsb2dpY2FsSGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6YWRqdXN0ZWRMaW5lTG9naWNhbExl
ZnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Omp1c3RpZnlSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlRXhw
YW5zaW9uT3Bwb3J0dW5pdGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6YWxpZ25SdW5zKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpydW5XaWR0aCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2lj
YWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpj
b250ZW50TG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFwcGVuZENvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxh
eW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6TGluZTo6aW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjphZGp1c3RMb2dpY2FsTGVmdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lOjphZGp1c3RMb2dpY2FsUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y29udGVudExvZ2ljYWxS
aWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpMaW5lOjphcHBlbmRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNsb3NlKTog
RGVsZXRlZC4KKwogMjAxOS0wMi0wNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFN0b3AgdXNpbmcgYmxvYlJlZ2lzdHJ5IGluIE5ldHdvcmtQ
cm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNmNDI5NmQ1MjQyZjQyM2U1OTBhMzg2ZDAyYjJiOTI5
YThkOGU2YTEuLjAyZWM1NDNlNjYyODc4ZTgwMDIyYzk2YWI0YWE1OThlZWI1OGE3OGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0xMzQzLDYgKzEzNDMsNyBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lSW52YWxpZGF0aW9uLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJy
ZWFrZXIuY3BwCitsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmNwcAog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuY3BwCiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9MaW5lLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0
VXRpbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA4NTU5MGY2ZGIyNzg4MGU4OTJlZDVkMGEzMTFhMTI3MTc4NGE2Mzk5Li40
ZGMxMmFlNmUzMGI1YzU5Njg1ZjgwZjIyODU5NjZkMmJkMDA3ZjZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MTk5LDYgKzkx
OTksNyBAQAogCQk2RjIxOUQ3NjIxNzhEMzcxMDBCQjAzM0MgLyogTGluZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAv
KiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBJbmxpbmVMaW5l
TGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmVMYXlvdXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFGNUYyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0
Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkYzRTFGNjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZsb2F0Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NjQ2Myw2ICsxNjQ2NCw3IEBACiAJCQkJNkZFN0NGQTAyMTc3RUVGMTAwNUIxNTczIC8qIElubGlu
ZUl0ZW0uaCAqLywKIAkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyogSW5saW5lTGluZUJy
ZWFrZXIuY3BwICovLAogCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5l
QnJlYWtlci5oICovLAorCQkJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBJbmxpbmVMaW5l
TGF5b3V0LmNwcCAqLywKIAkJCQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVu
LmggKi8sCiAJCQkJNkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVy
LmNwcCAqLywKIAkJCQk2RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlk
ZXIuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCAxZDFjYTll
Y2M3ZjJhYWY2NjJiNjg4N2U0MGU3MDNkYWY0NzZiNTg0Li40YjNiMzE2ZDQ2MTNiNTk4MWY2MjJl
N2M2MDBiMDhmNTg3NzdhYzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CkBAIC0yOCw4ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKIAotI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkZsb2F0aW5nU3Rh
dGUuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxp
bmVMaW5lQnJlYWtlci5oIgogI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCkBAIC04Nywy
NjAgKzg1LDEwIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCgpIGNvbnN0
CiAKICAgICBJbmxpbmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92aWRlcjsKICAgICBjb2xsZWN0
SW5saW5lQ29udGVudChpbmxpbmVSdW5Qcm92aWRlcik7Ci0gICAgbGF5b3V0SW5saW5lQ29udGVu
dChpbmxpbmVSdW5Qcm92aWRlcik7CisgICAgTGluZUxheW91dCgqdGhpcykubGF5b3V0KGlubGlu
ZVJ1blByb3ZpZGVyKTsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW0VuZF0gLT4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCAtPiBmb3Jt
YXR0aW5nIHJvb3QoIiA8PCAmcm9vdCA8PCAiKSIpOwogfQogCi1zdGF0aWMgYm9vbCBpc1RyaW1t
YWJsZUNvbnRlbnQoY29uc3QgSW5saW5lTGluZUJyZWFrZXI6OlJ1biYgcnVuKQotewotICAgIHJl
dHVybiBydW4uY29udGVudC5pc1doaXRlc3BhY2UoKSAmJiBydW4uY29udGVudC5zdHlsZSgpLmNv
bGxhcHNlV2hpdGVTcGFjZSgpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpp
bml0aWFsaXplTmV3TGluZShMaW5lJiBsaW5lKSBjb25zdAotewotICAgIGF1dG8mIGZvcm1hdHRp
bmdSb290ID0gZG93bmNhc3Q8Q29udGFpbmVyPihyb290KCkpOwotICAgIGF1dG8mIGZvcm1hdHRp
bmdSb290RGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChm
b3JtYXR0aW5nUm9vdCk7Ci0KLSAgICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGZvcm1hdHRpbmdS
b290RGlzcGxheUJveC5jb250ZW50Qm94TGVmdCgpOwotICAgIGF1dG8gbGluZUxvZ2ljYWxUb3Ag
PSBsaW5lLmlzRmlyc3RMaW5lKCkgPyBmb3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJv
eFRvcCgpIDogbGluZS5sb2dpY2FsQm90dG9tKCk7Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9
IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKTsKLQotICAgIC8vIENo
ZWNrIGZvciBpbnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJs
ZSB3aWR0aCBmb3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5LgotICAgIGF1dG8mIGZsb2F0aW5nU3Rh
dGUgPSBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCk7Ci0gICAgaWYgKCFmbG9hdGlu
Z1N0YXRlLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9h
dGluZ1N0YXRlLmNvbnN0cmFpbnRzKHsgbGluZUxvZ2ljYWxUb3AgfSwgZm9ybWF0dGluZ1Jvb3Qp
OwotICAgICAgICAvLyBDaGVjayBpZiB0aGVzZSBjb25zdHJhaW50cyBhY3R1YWxseSBwdXQgbGlt
aXRhdGlvbiBvbiB0aGUgbGluZS4KLSAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAm
JiAqZmxvYXRDb25zdHJhaW50cy5sZWZ0IDw9IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250
ZW50Qm94TGVmdCgpKQotICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5sZWZ0ID0geyB9Owot
Ci0gICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ICYmICpmbG9hdENvbnN0cmFpbnRz
LnJpZ2h0ID49IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94UmlnaHQoKSkKLSAg
ICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMucmlnaHQgPSB7IH07Ci0KLSAgICAgICAgaWYgKGZs
b2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoKmZsb2F0Q29uc3RyYWludHMubGVmdCA8ICpmbG9hdENvbnN0cmFpbnRzLnJp
Z2h0KTsKLSAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gKmZsb2F0Q29uc3RyYWludHMucmln
aHQgLSAqZmxvYXRDb25zdHJhaW50cy5sZWZ0OwotICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0
ID0gKmZsb2F0Q29uc3RyYWludHMubGVmdDsKLSAgICAgICAgfSBlbHNlIGlmIChmbG9hdENvbnN0
cmFpbnRzLmxlZnQpIHsKLSAgICAgICAgICAgIEFTU0VSVCgqZmxvYXRDb25zdHJhaW50cy5sZWZ0
ID4gbGluZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoIC09ICgqZmxv
YXRDb25zdHJhaW50cy5sZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGxpbmVM
b2dpY2FsTGVmdCA9ICpmbG9hdENvbnN0cmFpbnRzLmxlZnQ7Ci0gICAgICAgIH0gZWxzZSBpZiAo
ZmxvYXRDb25zdHJhaW50cy5yaWdodCkgewotICAgICAgICAgICAgQVNTRVJUKCpmbG9hdENvbnN0
cmFpbnRzLnJpZ2h0ID4gbGluZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGF2YWlsYWJsZVdp
ZHRoID0gKmZsb2F0Q29uc3RyYWludHMucmlnaHQgLSBsaW5lTG9naWNhbExlZnQ7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBsaW5lLmluaXQoeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2Fs
VG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmNvbXB1dGVkTGlu
ZUhlaWdodCgpKTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c3BsaXRJbmxp
bmVSdW5JZk5lZWRlZChjb25zdCBJbmxpbmVSdW4mIGlubGluZVJ1biwgSW5saW5lUnVucyYgc3Bs
aXRSdW5zKSBjb25zdAotewotICAgIEFTU0VSVChpbmxpbmVSdW4udGV4dENvbnRleHQoKSk7Ci0g
ICAgQVNTRVJUKGlubGluZVJ1bi5vdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSk7Ci0gICAg
Ly8gSW4gY2VydGFpbiBjYXNlcywgYSBydW4gY2FuIG92ZXJsYXAgbXVsdGlwbGUgaW5saW5lIGVs
ZW1lbnRzIGxpa2UgdGhpczoKLSAgICAvLyA8c3Bhbj5ub3JtYWwgdGV4dCBjb250ZW50PC9zcGFu
PjxzcGFuIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IGxlZnQ6IDEwcHg7Ij5idXQgdGhpcyBv
bmUgbmVlZHMgYSBkZWRpY2F0ZWQgcnVuPC9zcGFuPjxzcGFuPmVuZCBvZiB0ZXh0PC9zcGFuPgot
ICAgIC8vIFRoZSBjb250ZW50IGFib3ZlIGdlbmVyYXRlcyBvbmUgbG9uZyBydW4gPG5vcm1hbCB0
ZXh0IGNvbnRlbnRidXQgdGhpcyBvbmUgbmVlZHMgZGVkaWNhdGVkIHJ1bmVuZCBvZiB0ZXh0Pgot
ICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBtaWRkbGUgcnVuIGlzIHBvc2l0aW9uZWQsIGl0IG5l
ZWRzIHRvIGJlIG1vdmVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgcmVzdCBvZiB0aGUgY29udGVu
dCwgaGVuY2UgaXQgbmVlZHMgYSBkZWRpY2F0ZWQgaW5saW5lIHJ1bi4KLQotICAgIC8vIDEuIFN0
YXJ0IHdpdGggdGhlIGZpcnN0IGlubGluZSBpdGVtIChlbGVtZW50KSBhbmQgdHJhdmVycyB0aGUg
bGlzdCB1bnRpbAotICAgIC8vIDIuIGVpdGhlciBmaW5kIGFuIGlubGluZSBpdGVtIHRoYXQgbmVl
ZHMgYSBkZWRpY2F0ZWQgcnVuIG9yIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIHJ1bgotICAgIC8v
IDMuIENyZWF0ZSBkZWRpY2F0ZSBpbmxpbmUgcnVucy4KLSAgICBhdXRvJiBpbmxpbmVDb250ZW50
ID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lQ29udGVudCgpOwotICAgIGF1dG8gY29udGVudFN0
YXJ0ID0gaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgYXV0byBzdGFydFBvc2l0aW9uID0g
aW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCk7Ci0gICAgYXV0byByZW1hbmluZ0xlbmd0
aCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKTsKLQotICAgIHN0cnVjdCBVbmNv
bW1pdHRlZCB7Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGZpcnN0SW5saW5lSXRlbSB7IG51
bGxwdHIgfTsKLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0geyBudWxs
cHRyIH07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKLSAgICB9OwotICAgIE9wdGlv
bmFsPFVuY29tbWl0dGVkPiB1bmNvbW1pdHRlZDsKLQotICAgIGF1dG8gY29tbWl0ID0gWyZdIHsK
LSAgICAgICAgaWYgKCF1bmNvbW1pdHRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBjb250ZW50U3RhcnQgKz0gdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbS0+bm9uQnJlYWth
YmxlU3RhcnQoKTsKLQotICAgICAgICBhdXRvIHJ1bldpZHRoID0gR2VvbWV0cnk6OnJ1bldpZHRo
KGlubGluZUNvbnRlbnQsICp1bmNvbW1pdHRlZC0+Zmlyc3RJbmxpbmVJdGVtLCBzdGFydFBvc2l0
aW9uLCB1bmNvbW1pdHRlZC0+bGVuZ3RoLCBjb250ZW50U3RhcnQpOwotICAgICAgICBhdXRvIHJ1
biA9IElubGluZVJ1biB7IHsgaW5saW5lUnVuLmxvZ2ljYWxUb3AoKSwgY29udGVudFN0YXJ0LCBy
dW5XaWR0aCwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSB9LCAqdW5jb21taXR0ZWQtPmZpcnN0
SW5saW5lSXRlbSB9OwotICAgICAgICBydW4uc2V0VGV4dENvbnRleHQoeyBzdGFydFBvc2l0aW9u
LCB1bmNvbW1pdHRlZC0+bGVuZ3RoIH0pOwotICAgICAgICBzcGxpdFJ1bnMuYXBwZW5kKHJ1bik7
Ci0KLSAgICAgICAgY29udGVudFN0YXJ0ICs9IHJ1bldpZHRoICsgdW5jb21taXR0ZWQtPmxhc3RJ
bmxpbmVJdGVtLT5ub25CcmVha2FibGVFbmQoKTsKLQotICAgICAgICBzdGFydFBvc2l0aW9uID0g
MDsKLSAgICAgICAgdW5jb21taXR0ZWQgPSB7IH07Ci0gICAgfTsKLQotICAgIGZvciAoYXV0byBp
dGVyYXRvciA9IGlubGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0PElubGluZUl0ZW0qPigmaW5s
aW5lUnVuLmlubGluZUl0ZW0oKSkpOyBpdGVyYXRvciAhPSBpbmxpbmVDb250ZW50LmVuZCgpICYm
IHJlbWFuaW5nTGVuZ3RoID4gMDsgKytpdGVyYXRvcikgewotICAgICAgICBhdXRvJiBpbmxpbmVJ
dGVtID0gKippdGVyYXRvcjsKLQotICAgICAgICAvLyBTa2lwIGFsbCBub24taW5mbG93IGJveGVz
IChmbG9hdHMsIG91dC1vZi1mbG93IHBvc2l0aW9uZWQgZWxlbWVudHMpLiBUaGV5IGRvbid0IHBh
cnRpY2lwYXRlIGluIHRoZSBpbmxpbmUgcnVuIGNvbnRleHQuCi0gICAgICAgIGlmICghaW5saW5l
SXRlbS5sYXlvdXRCb3goKS5pc0luRmxvdygpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgYXV0byBjdXJyZW50TGVuZ3RoID0gWyZdIHsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1pbihyZW1hbmluZ0xlbmd0aCwgaW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0aCgpIC0g
c3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gMS4gQnJlYWsgYmVmb3Jl
L2FmdGVyIC0+IHJlcXVpcmVzIGRlZGljYXRlZCBydW4gLT4gY29tbWl0IHdoYXQgd2UndmUgZ290
IHNvIGZhciBhbmQgYWxzbyBjb21taXQgdGhlIGN1cnJlbnQgaW5saW5lIGVsZW1lbnQgYXMgYSBz
ZXBhcmF0ZSBpbmxpbmUgcnVuLgotICAgICAgICAvLyAyLiBCcmVhayBhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBpbmxpbmUgZWxlbWVudCAtPiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyLiBD
dXJyZW50IGVsZW1lbnQgYmVjb21lcyB0aGUgZmlyc3QgdW5jb21taXR0ZWQuCi0gICAgICAgIC8v
IDMuIEJyZWFrIGF0IHRoZSBlbmQgb2YgdGhlIGlubGluZSBlbGVtZW50IC0+IGNvbW1pdCB3aGF0
IHdlJ3ZlIGdvdCBzbyBmYXIgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgICAg
IC8vIDQuIElubGluZSBlbGVtZW50IGRvZXMgbm90IHJlcXVpcmUgcnVuIGJyZWFraW5nIC0+IGFk
ZCBjdXJyZW50IGlubGluZSBlbGVtZW50IHRvIHVuY29tbWl0dGVkLiBKdW1wIHRvIHRoZSBuZXh0
IGVsZW1lbnQuCi0gICAgICAgIGF1dG8gZGV0YWNoaW5nUnVsZXMgPSBpbmxpbmVJdGVtLmRldGFj
aGluZ1J1bGVzKCk7Ci0KLSAgICAgICAgLy8gIzEKLSAgICAgICAgaWYgKGRldGFjaGluZ1J1bGVz
LmNvbnRhaW5zQWxsKHsgSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdFN0YXJ0LCBJ
bmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0RW5kIH0pKSB7Ci0gICAgICAgICAgICBj
b21taXQoKTsKLSAgICAgICAgICAgIGF1dG8gY29udGVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGgo
KTsKLSAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5jb21taXR0ZWQgeyAmaW5saW5lSXRlbSwg
JmlubGluZUl0ZW0sIGNvbnRlbnRMZW5ndGggfTsKLSAgICAgICAgICAgIHJlbWFuaW5nTGVuZ3Ro
IC09IGNvbnRlbnRMZW5ndGg7Ci0gICAgICAgICAgICBjb21taXQoKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gIzIKLSAgICAgICAgaWYgKGRldGFjaGlu
Z1J1bGVzLmNvbnRhaW5zKElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRTdGFydCkp
Ci0gICAgICAgICAgICBjb21taXQoKTsKLQotICAgICAgICAvLyBBZGQgY3VycmVudCBpbmxpbmUg
aXRlbSB0byB1bmNvbW1pdHRlZC4KLSAgICAgICAgLy8gIzMgYW5kICM0Ci0gICAgICAgIGF1dG8g
Y29udGVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGgoKTsKLSAgICAgICAgaWYgKCF1bmNvbW1pdHRl
ZCkKLSAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5jb21taXR0ZWQgeyAmaW5saW5lSXRlbSwg
JmlubGluZUl0ZW0sIDAgfTsKLSAgICAgICAgdW5jb21taXR0ZWQtPmxlbmd0aCArPSBjb250ZW50
TGVuZ3RoOwotICAgICAgICB1bmNvbW1pdHRlZC0+bGFzdElubGluZUl0ZW0gPSAmaW5saW5lSXRl
bTsKLSAgICAgICAgcmVtYW5pbmdMZW5ndGggLT0gY29udGVudExlbmd0aDsKLQotICAgICAgICAv
LyAjMwotICAgICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29udGFpbnMoSW5saW5lSXRlbTo6RGV0
YWNoaW5nUnVsZTo6QnJlYWtBdEVuZCkpCi0gICAgICAgICAgICBjb21taXQoKTsKLSAgICB9Ci0g
ICAgLy8gRWl0aGVyIGFsbCBpbmxpbmUgZWxlbWVudHMgbmVlZGVkIGRlZGljYXRlZCBydW5zIG9y
IG5laXRoZXIgb2YgdGhlbS4KLSAgICBpZiAoIXJlbWFuaW5nTGVuZ3RoIHx8IHJlbWFuaW5nTGVu
Z3RoID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY29tbWl0KCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNy
ZWF0ZUZpbmFsUnVucyhMaW5lJiBsaW5lKSBjb25zdAotewotICAgIGF1dG8mIGlubGluZUZvcm1h
dHRpbmdTdGF0ZSA9IGZvcm1hdHRpbmdTdGF0ZSgpOwotICAgIGZvciAoYXV0byYgaW5saW5lUnVu
IDogbGluZS5ydW5zKCkpIHsKLSAgICAgICAgaWYgKGlubGluZVJ1bi5vdmVybGFwc011bHRpcGxl
SW5saW5lSXRlbXMoKSkgewotICAgICAgICAgICAgSW5saW5lUnVucyBzcGxpdFJ1bnM7Ci0gICAg
ICAgICAgICBzcGxpdElubGluZVJ1bklmTmVlZGVkKGlubGluZVJ1biwgc3BsaXRSdW5zKTsKLSAg
ICAgICAgICAgIGZvciAoYXV0byYgc3BsaXRSdW4gOiBzcGxpdFJ1bnMpCi0gICAgICAgICAgICAg
ICAgaW5saW5lRm9ybWF0dGluZ1N0YXRlLmFwcGVuZElubGluZVJ1bihzcGxpdFJ1bik7Ci0KLSAg
ICAgICAgICAgIGlmICghc3BsaXRSdW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gZmluYWxSdW4gPSBbJl0gewotICAgICAg
ICAgICAgYXV0byYgaW5saW5lSXRlbSA9IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7Ci0gICAgICAg
ICAgICBpZiAoaW5saW5lSXRlbS5kZXRhY2hpbmdSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaW5saW5lUnVuOwotCi0gICAgICAgICAgICBJbmxpbmVSdW4gYWRqdXN0
ZWRSdW4gPSBpbmxpbmVSdW47Ci0gICAgICAgICAgICBhdXRvIHdpZHRoID0gaW5saW5lUnVuLmxv
Z2ljYWxXaWR0aCgpIC0gaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpIC0gaW5saW5lSXRl
bS5ub25CcmVha2FibGVFbmQoKTsKLSAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxM
ZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFy
dCgpKTsKLSAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxXaWR0aCh3aWR0aCk7Ci0g
ICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRSdW47Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmFwcGVuZElubGluZVJ1bihmaW5hbFJ1bigpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnBvc3RQcm9jZXNzSW5saW5lUnVucyhM
aW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlzTGFzdExpbmUpIGNvbnN0Ci17Ci0gICAgR2VvbWV0cnk6
OmFsaWduUnVucyhyb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgbGluZSwgaXNMYXN0TGluZSk7
Ci0gICAgYXV0byBmaXJzdFJ1bkluZGV4ID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lUnVucygp
LnNpemUoKTsKLSAgICBjcmVhdGVGaW5hbFJ1bnMobGluZSk7Ci0KLSAgICBwbGFjZUluRmxvd1Bv
c2l0aW9uZWRDaGlsZHJlbihmaXJzdFJ1bkluZGV4KTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y2xvc2VMaW5lKExpbmUmIGxpbmUsIElzTGFzdExpbmUgaXNMYXN0TGluZSkg
Y29uc3QKLXsKLSAgICBsaW5lLmNsb3NlKCk7Ci0gICAgaWYgKCFsaW5lLmhhc0NvbnRlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcG9zdFByb2Nlc3NJbmxpbmVSdW5zKGxpbmUsIGlzTGFz
dExpbmUpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjphcHBlbmRDb250ZW50
VG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29u
c3QgTGF5b3V0U2l6ZSYgcnVuU2l6ZSkgY29uc3QKLXsKLSAgICBhdXRvIGxhc3RSdW5UeXBlID0g
bGluZS5sYXN0UnVuVHlwZSgpOwotICAgIGxpbmUuYXBwZW5kQ29udGVudChydW4sIHJ1blNpemUp
OwotCi0gICAgaWYgKHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6
Okp1c3RpZnkpCi0gICAgICAgIEdlb21ldHJ5Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGll
cyhsaW5lLCBydW4sIGxhc3RSdW5UeXBlLnZhbHVlT3IoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6
VHlwZTo6Tm9uV2hpdGVzcGFjZSkpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyJiBpbmxpbmVSdW5Q
cm92aWRlcikgY29uc3QKLXsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0
YXRlKCk7Ci0gICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gZm9ybWF0dGluZ1N0YXRl
KCk7Ci0gICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBpbmxpbmVG
b3JtYXR0aW5nU3RhdGUuZmxvYXRpbmdTdGF0ZSgpIH07Ci0KLSAgICBMaW5lIGxpbmU7Ci0gICAg
aW5pdGlhbGl6ZU5ld0xpbmUobGluZSk7Ci0KLSAgICBJbmxpbmVMaW5lQnJlYWtlciBsaW5lQnJl
YWtlcihsYXlvdXRTdGF0ZSwgaW5saW5lRm9ybWF0dGluZ1N0YXRlLmlubGluZUNvbnRlbnQoKSwg
aW5saW5lUnVuUHJvdmlkZXIucnVucygpKTsKLSAgICB3aGlsZSAoYXV0byBydW4gPSBsaW5lQnJl
YWtlci5uZXh0UnVuKGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgpLCBsaW5lLmF2YWlsYWJsZVdp
ZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSkpIHsKLSAgICAgICAgYXV0byBpc0ZpcnN0UnVuID0g
cnVuLT5wb3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQb3NpdGlvbjo6TGluZUJl
Z2luOwotICAgICAgICBhdXRvIGlzTGFzdFJ1biA9IHJ1bi0+cG9zaXRpb24gPT0gSW5saW5lTGlu
ZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVFbmQ7Ci0gICAgICAgIGF1dG8gZ2VuZXJhdGVz
SW5saW5lUnVuID0gdHJ1ZTsKLQotICAgICAgICAvLyBQb3NpdGlvbiBmbG9hdCBhbmQgYWRqdXN0
IHRoZSBydW5zIG9uIGxpbmUuCi0gICAgICAgIGlmIChydW4tPmNvbnRlbnQuaXNGbG9hdCgpKSB7
Ci0gICAgICAgICAgICBhdXRvJiBmbG9hdEJveCA9IHJ1bi0+Y29udGVudC5pbmxpbmVJdGVtKCku
bGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBjb21wdXRlRmxvYXRQb3NpdGlvbihmbG9hdGluZ0Nv
bnRleHQsIGxpbmUsIGZsb2F0Qm94KTsKLSAgICAgICAgICAgIGlubGluZUZvcm1hdHRpbmdTdGF0
ZS5mbG9hdGluZ1N0YXRlKCkuYXBwZW5kKGZsb2F0Qm94KTsKLQotICAgICAgICAgICAgYXV0byBm
bG9hdEJveFdpZHRoID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChmbG9hdEJv
eCkubWFyZ2luQm94KCkud2lkdGgoKTsKLSAgICAgICAgICAgIC8vIFNocmluayBhdmFpbGJsZSBz
cGFjZSBmb3IgY3VycmVudCBsaW5lIGFuZCBtb3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgotICAg
ICAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBsaW5lLmFkanVz
dExvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbGluZS5hZGp1c3RMb2dpY2FsUmlnaHQoZmxv
YXRCb3hXaWR0aCk7Ci0KLSAgICAgICAgICAgIGdlbmVyYXRlc0lubGluZVJ1biA9IGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gMS4gSW5pdGlhbGl6ZSBuZXcgbGluZSBpZiBuZWVkZWQu
Ci0gICAgICAgIC8vIDIuIEFwcGVuZCBpbmxpbmUgcnVuIHVubGVzcyBpdCBpcyBza2lwcGVkLgot
ICAgICAgICAvLyAzLiBDbG9zZSBjdXJyZW50IGxpbmUgaWYgbmVlZGVkLgotICAgICAgICBpZiAo
aXNGaXJzdFJ1bikgewotICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgcnVuIGRvZXMgbm90
IGdlbmVyYXRlIGFuIGFjdHVhbCBpbmxpbmUgcnVuLCB0aGUgbmV4dCBydW4gY29tZXMgaW4gZmly
c3QtcnVuIGFzIHdlbGwuCi0gICAgICAgICAgICAvLyBObyBuZWVkIHRvIHNwZW5kIHRpbWUgb24g
Y2xvc2luZy9pbml0aWFsaXppbmcuCi0gICAgICAgICAgICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVz
cGFjZS4KLSAgICAgICAgICAgIGlmICghZ2VuZXJhdGVzSW5saW5lUnVuIHx8IGlzVHJpbW1hYmxl
Q29udGVudCgqcnVuKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
aWYgKGxpbmUuaGFzQ29udGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gUHJldmlvdXMgcnVu
IGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5lIGVuZC4gQWRqdXN0IHRoZSBsaW5lIGFjY29yZGlu
Z2x5LgotICAgICAgICAgICAgICAgIGlmICghbGluZS5pc0Nsb3NlZCgpKQotICAgICAgICAgICAg
ICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGluZTo6Tm8pOwotICAgICAgICAgICAgICAg
IGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotCi0g
ICAgICAgIGlmIChnZW5lcmF0ZXNJbmxpbmVSdW4pIHsKLSAgICAgICAgICAgIGF1dG8gd2lkdGgg
PSBydW4tPndpZHRoOwotICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBydW4tPmNvbnRlbnQuaXNU
ZXh0KCkgPyBMYXlvdXRVbml0KHJvb3QoKS5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpKSA6
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocnVuLT5jb250ZW50LmlubGluZUl0
ZW0oKS5sYXlvdXRCb3goKSkuaGVpZ2h0KCk7IAotICAgICAgICAgICAgYXBwZW5kQ29udGVudFRv
TGluZShsaW5lLCBydW4tPmNvbnRlbnQsIHsgd2lkdGgsIGhlaWdodCB9KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChpc0xhc3RSdW4pCi0gICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNM
YXN0TGluZTo6Tm8pOwotICAgIH0KLQotICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpZ
ZXMpOwotfQotCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlTWFyZ2luQm9y
ZGVyQW5kUGFkZGluZyhjb25zdCBJbmxpbmVDb250YWluZXImIGlubGluZUNvbnRhaW5lcikgY29u
c3QKIHsKICAgICAvLyBOb24tcmVwbGFjZWQsIG5vbi1mb3JtYXR0aW5nIHJvb3QgY29udGFpbmVy
cyAoPHNwYW4+PC9zcGFuPikgZG9uJ3QgaGF2ZSB3aWR0aCBwcm9wZXJ0eSAtPiBub24gd2lkdGgg
Y29tcHV0YXRpb24uIApAQCAtNDE5LDQyICsxNjcsNiBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBC
bwogICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94KTsKIH0KIAotdm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdD
b250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIExpbmUmIGxpbmUsIGNvbnN0IEJveCYgZmxvYXRCb3gp
IGNvbnN0Ci17Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwot
ICAgIEFTU0VSVChsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGZsb2F0Qm94KSk7Ci0gICAgYXV0
byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRC
b3gpOwotCi0gICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJzdC4KLSAgICBkaXNwbGF5Qm94
LnNldFRvcExlZnQoeyBsaW5lLmNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbGluZS5sb2dpY2FsVG9w
KCkgfSk7Ci0gICAgLy8gRmxvYXQgaXQuCi0gICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGZsb2F0
aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGZsb2F0Qm94KSk7Ci19Ci0KLXZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVk
IGZpc3RSdW5JbmRleCkgY29uc3QKLXsKLSAgICBhdXRvJiBpbmxpbmVSdW5zID0gZm9ybWF0dGlu
Z1N0YXRlKCkuaW5saW5lUnVucygpOwotICAgIGZvciAoYXV0byBydW5JbmRleCA9IGZpc3RSdW5J
bmRleDsgcnVuSW5kZXggPCBpbmxpbmVSdW5zLnNpemUoKTsgKytydW5JbmRleCkgewotICAgICAg
ICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5zW3J1bkluZGV4XTsKLQotICAgICAgICBhdXRv
IHBvc2l0aW9uT2Zmc2V0ID0gWyZdKGF1dG8mIGxheW91dEJveCkgewotICAgICAgICAgICAgLy8g
RklYTUU6IE5lZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIGluLWZsb3cgb2Zmc2V0IHNob3VsZCBz
dGljay4gVGhpcyBtaWdodCB2ZXJ5IHdlbGwgYmUgdGVtcG9yYXJ5LgotICAgICAgICAgICAgT3B0
aW9uYWw8TGF5b3V0U2l6ZT4gb2Zmc2V0OwotICAgICAgICAgICAgZm9yIChhdXRvKiBib3ggPSAm
bGF5b3V0Qm94OyBib3ggIT0gJnJvb3QoKTsgYm94ID0gYm94LT5wYXJlbnQoKSkgewotICAgICAg
ICAgICAgICAgIGlmICghYm94LT5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0LnZhbHVlT3Io
TGF5b3V0U2l6ZSgpKSArIEdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQo
bGF5b3V0U3RhdGUoKSwgKmJveCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
b2Zmc2V0OwotICAgICAgICB9OwotCi0gICAgICAgIGlmIChhdXRvIG9mZnNldCA9IHBvc2l0aW9u
T2Zmc2V0KGlubGluZVJ1bi5pbmxpbmVJdGVtKCkubGF5b3V0Qm94KCkpKSB7Ci0gICAgICAgICAg
ICBpbmxpbmVSdW4ubW92ZVZlcnRpY2FsbHkob2Zmc2V0LT5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBpbmxpbmVSdW4ubW92ZUhvcml6b250YWxseShvZmZzZXQtPndpZHRoKCkpOwotICAgICAgICB9
Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBhZGREZXRhY2hpbmdSdWxlcyhJbmxpbmVJdGVtJiBp
bmxpbmVJdGVtLCBPcHRpb25hbDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdpZHRoLCBP
cHRpb25hbDxMYXlvdXRVbml0PiBub25CcmVha2FibGVFbmRXaWR0aCkKIHsKICAgICBPcHRpb25T
ZXQ8SW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCA5N2Y4ZWQ2YmFjNzMxY2MwMmEyYmZhMGZhM2M1YzYw
NTU1ZGVmYmFkLi4xZThjMjdmOGI4NjQ3NmRlZWE4OTIzOGI5M2Q1ZjcyNTA1YTMyYzNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTI5LDE0ICsyOSwxNSBAQAogCiAjaW5j
bHVkZSAiRGlzcGxheUJveC5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lUnVuLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgTGF5b3V0IHsKIAorY2xhc3MgRmxvYXRpbmdTdGF0ZTsKIGNsYXNzIElubGluZUNvbnRhaW5l
cjsKLWNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNzIElubGluZVJ1blByb3ZpZGVy
OwogCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGxheW91dCBsb2dpYyBmb3IgaW5saW5l
IGZvcm1hdHRpbmcgY29udGV4dHMuCkBAIC00NSw3OSArNDYsOTAgQEAgY2xhc3MgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQgewogICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW5saW5lRm9ybWF0dGluZ0NvbnRleHQpOwogcHVibGljOgogICAgIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0KGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBJ
bmxpbmVGb3JtYXR0aW5nU3RhdGUmKTsKLQogICAgIHZvaWQgbGF5b3V0KCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6Ci0gICAgY2xhc3MgTGluZSB7CisgICAgY2xhc3MgTGluZUxheW91dCB7
CiAgICAgcHVibGljOgotICAgICAgICB2b2lkIGluaXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExl
ZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIExheW91dFVuaXQgbWluaW1hbEhlaWdodCk7
Ci0gICAgICAgIHZvaWQgY2xvc2UoKTsKLQotICAgICAgICB2b2lkIGFwcGVuZENvbnRlbnQoY29u
c3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIGNvbnN0IExheW91dFNpemUmKTsKLQotICAgICAg
ICB2b2lkIGFkanVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpOwotICAgICAgICB2b2lk
IGFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKTsKLQotICAgICAgICBib29sIGhh
c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiAhbV9pbmxpbmVSdW5zLmlzRW1wdHkoKTsgfQotICAg
ICAgICBib29sIGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZWQ7IH0KLSAgICAgICAg
Ym9vbCBpc0ZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdExpbmU7IH0KLSAgICAg
ICAgVmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KLQot
ICAgICAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdDsKLSAgICAgICAg
TGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxS
ZWN0LmxlZnQoKTsgfQotICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aDsgfQotICAgICAgICBPcHRpb25hbDxJbmxpbmVSdW5Q
cm92aWRlcjo6UnVuOjpUeXBlPiBsYXN0UnVuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1
blR5cGU7IH0KLQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVy
biBtX2xvZ2ljYWxSZWN0LnRvcCgpOyB9Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KLSAgICAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0g
bG9naWNhbFRvcCgpOyB9CisgICAgICAgIExpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmKTsKKyAgICAgICAgdm9pZCBsYXlvdXQoY29uc3QgSW5saW5lUnVuUHJvdmlkZXIm
KSBjb25zdDsKKworICAgICAgICBlbnVtIGNsYXNzIElzTGFzdExpbmUgeyBObywgWWVzIH07Cisg
ICAgICAgIGNsYXNzIExpbmUgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB2b2lkIGlu
aXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgs
IExheW91dFVuaXQgbWluaW1hbEhlaWdodCk7CisgICAgICAgICAgICB2b2lkIGNsb3NlKCk7CisK
KyAgICAgICAgICAgIHZvaWQgYXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuJiwgY29uc3QgTGF5b3V0U2l6ZSYpOworCisgICAgICAgICAgICB2b2lkIGFkanVzdExvZ2lj
YWxMZWZ0KExheW91dFVuaXQgZGVsdGEpOworICAgICAgICAgICAgdm9pZCBhZGp1c3RMb2dpY2Fs
UmlnaHQoTGF5b3V0VW5pdCBkZWx0YSk7CisKKyAgICAgICAgICAgIGJvb2wgaGFzQ29udGVudCgp
IGNvbnN0IHsgcmV0dXJuICFtX2lubGluZVJ1bnMuaXNFbXB0eSgpOyB9CisgICAgICAgICAgICBi
b29sIGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZWQ7IH0KKyAgICAgICAgICAgIGJv
b2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9CisgICAgICAg
ICAgICBWZWN0b3I8SW5saW5lUnVuPiYgcnVucygpIHsgcmV0dXJuIG1faW5saW5lUnVuczsgfQor
CisgICAgICAgICAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdDsKKyAg
ICAgICAgICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KKyAgICAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRoOyB9CisgICAgICAgICAgICBP
cHRpb25hbDxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlPiBsYXN0UnVuVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdFJ1blR5cGU7IH0KKworICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAgICAgICAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVj
dC5ib3R0b20oKTsgfQorICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0gbG9naWNhbFRvcCgpOyB9CisKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIHN0cnVjdCBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgewor
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGg7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFRyYWlsaW5n
VHJpbW1hYmxlQ29udGVudD4gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ7CisgICAgICAgICAg
ICBPcHRpb25hbDxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlPiBtX2xhc3RSdW5UeXBlOwor
ICAgICAgICAgICAgYm9vbCBtX2xhc3RSdW5DYW5FeHBhbmQgeyBmYWxzZSB9OworCisgICAgICAg
ICAgICBEaXNwbGF5OjpCb3g6OlJlY3QgbV9sb2dpY2FsUmVjdDsKKyAgICAgICAgICAgIExheW91
dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKKworICAgICAgICAgICAgVmVjdG9yPElubGluZVJ1bj4g
bV9pbmxpbmVSdW5zOworICAgICAgICAgICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1ZSB9Owor
ICAgICAgICAgICAgYm9vbCBtX2Nsb3NlZCB7IHRydWUgfTsKKyAgICAgICAgfTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIHN0cnVjdCBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgewotICAgICAg
ICAgICAgTGF5b3V0VW5pdCB3aWR0aDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAg
ICAgICAgfTsKLSAgICAgICAgT3B0aW9uYWw8VHJhaWxpbmdUcmltbWFibGVDb250ZW50PiBtX3Ry
YWlsaW5nVHJpbW1hYmxlQ29udGVudDsKLSAgICAgICAgT3B0aW9uYWw8SW5saW5lUnVuUHJvdmlk
ZXI6OlJ1bjo6VHlwZT4gbV9sYXN0UnVuVHlwZTsKLSAgICAgICAgYm9vbCBtX2xhc3RSdW5DYW5F
eHBhbmQgeyBmYWxzZSB9OworICAgICAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBj
b25zdDsKKyAgICAgICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0Owor
ICAgICAgICB2b2lkIGFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blBy
b3ZpZGVyOjpSdW4mLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7CisgICAgICAgIHZvaWQgcG9z
dFByb2Nlc3NJbmxpbmVSdW5zKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKKyAgICAgICAgdm9p
ZCBjcmVhdGVGaW5hbFJ1bnMoTGluZSYpIGNvbnN0OworICAgICAgICB2b2lkIHNwbGl0SW5saW5l
UnVuSWZOZWVkZWQoY29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVucyYgc3BsaXRSdW5zKSBjb25z
dDsKKyAgICAgICAgdm9pZCBjb21wdXRlRmxvYXRQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRl
eHQmLCBMaW5lJiwgY29uc3QgQm94JikgY29uc3Q7CisgICAgICAgIHZvaWQgcGxhY2VJbkZsb3dQ
b3NpdGlvbmVkQ2hpbGRyZW4odW5zaWduZWQgZmlyc3RSdW5JbmRleCkgY29uc3Q7CisgICAgICAg
IHZvaWQgYWxpZ25SdW5zKFRleHRBbGlnbk1vZGUsIExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsK
KyAgICAgICAgdm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3Qg
SW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGUgbGFz
dFJ1blR5cGUpIGNvbnN0OworICAgICAgICBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGlu
ZUNvbnRlbnQmLCBjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVk
IGxlbmd0aCwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OwogCi0gICAgICAg
IERpc3BsYXk6OkJveDo6UmVjdCBtX2xvZ2ljYWxSZWN0OwotICAgICAgICBMYXlvdXRVbml0IG1f
YXZhaWxhYmxlV2lkdGg7CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIHZvaWQganVzdGlm
eVJ1bnMoTGluZUxheW91dDo6TGluZSYpOwogCi0gICAgICAgIFZlY3RvcjxJbmxpbmVSdW4+IG1f
aW5saW5lUnVuczsKLSAgICAgICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1ZSB9OwotICAgICAg
ICBib29sIG1fY2xvc2VkIHsgdHJ1ZSB9OworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2Zvcm1hdHRpbmdDb250ZXh0OworICAgICAgICBJbmxp
bmVGb3JtYXR0aW5nU3RhdGUmIG1fZm9ybWF0dGluZ1N0YXRlOworICAgICAgICBGbG9hdGluZ1N0
YXRlJiBtX2Zsb2F0aW5nU3RhdGU7CisgICAgICAgIGNvbnN0IENvbnRhaW5lciYgbV9mb3JtYXR0
aW5nUm9vdDsKICAgICB9OwotICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZSB7IE5vLCBZZXMgfTsK
IAogICAgIGNsYXNzIEdlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgSGVpZ2h0QW5kTWFyZ2luIGlubGluZUJs
b2NrSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CiAgICAg
ICAgIHN0YXRpYyBXaWR0aEFuZE1hcmdpbiBpbmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKExheW91
dFN0YXRlJiwgY29uc3QgQm94Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFsaWduUnVucyhUZXh0
QWxpZ25Nb2RlLCBMaW5lJiwgSXNMYXN0TGluZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXB1
dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKExpbmUmLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuJiwgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBsYXN0UnVuVHlwZSk7Ci0gICAgICAg
IHN0YXRpYyBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGluZUNvbnRlbnQmLCBjb25zdCBJ
bmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgTGF5b3V0VW5p
dCBjb250ZW50TG9naWNhbExlZnQpOyAKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGp1c3RpZnlSdW5zKExpbmUmKTsKICAgICB9OwogCi0gICAgdm9pZCBsYXlvdXRJbmxpbmVD
b250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyJikgY29uc3Q7Ci0gICAgdm9pZCBpbml0aWFs
aXplTmV3TGluZShMaW5lJikgY29uc3Q7Ci0gICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFz
dExpbmUpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kQ29udGVudFRvTGluZShMaW5lJiwgY29uc3Qg
SW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKLSAgICB2
b2lkIHBvc3RQcm9jZXNzSW5saW5lUnVucyhMaW5lJiwgSXNMYXN0TGluZSkgY29uc3Q7Ci0gICAg
dm9pZCBjcmVhdGVGaW5hbFJ1bnMoTGluZSYpIGNvbnN0OwotICAgIHZvaWQgc3BsaXRJbmxpbmVS
dW5JZk5lZWRlZChjb25zdCBJbmxpbmVSdW4mLCBJbmxpbmVSdW5zJiBzcGxpdFJ1bnMpIGNvbnN0
OwotCiAgICAgdm9pZCBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JikgY29u
c3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChj
b25zdCBCb3gmKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5n
KGNvbnN0IElubGluZUNvbnRhaW5lciYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZUhlaWdodEFu
ZE1hcmdpbihjb25zdCBCb3gmKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZE1hcmdp
bihjb25zdCBCb3gmKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVGbG9hdFBvc2l0aW9uKGNvbnN0
IEZsb2F0aW5nQ29udGV4dCYsIExpbmUmLCBjb25zdCBCb3gmKSBjb25zdDsKLSAgICB2b2lkIHBs
YWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpIGNvbnN0
OwogCiAgICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudChJbmxpbmVSdW5Qcm92aWRlciYpIGNv
bnN0OwogICAgIEluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGluc3RyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGUyNWU1YjJjMjM1MzJkZWU2NzgzYjA5NzgzMjc5YmJh
YmNjZTM3ZTguLmNmNmJkZDA3NDU0Yjc2YTM1OGRjODg4YzkzYTVjNzJjZTFmZTI2YTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC03OCwx
MjggKzc4LDYgQEAgSGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY28KICAgICByZXR1cm4gY29tcGxpY2F0
ZWRDYXNlcyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKIH0KIAotc3RhdGljIExheW91dFVuaXQg
YWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFsaWduTW9kZSBhbGlnbiwgTGF5b3V0VW5pdCBs
aW5lTG9naWNhbExlZnQsIExheW91dFVuaXQgcmVtYWluaW5nV2lkdGgpCi17Ci0gICAgc3dpdGNo
IChhbGlnbikgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAg
ICAgICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdDsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJp
Z2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQgKyBzdGQ6Om1h
eChyZW1haW5pbmdXaWR0aCwgMF9sdSk7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6
Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAgIHJldHVybiBs
aW5lTG9naWNhbExlZnQgKyBzdGQ6Om1heChyZW1haW5pbmdXaWR0aCAvIDIsIDBfbHUpOwotICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0OwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6anVzdGlmeVJ1bnMoTGluZSYgbGluZSkKLXsKLSAgICBhdXRvJiBpbmxp
bmVSdW5zID0gbGluZS5ydW5zKCk7Ci0gICAgYXV0byYgbGFzdElubGluZVJ1biA9IGlubGluZVJ1
bnMubGFzdCgpOwotCi0gICAgLy8gQWRqdXN0IChmb3JiaWQpIHRyYWlsaW5nIGV4cGFuc2lvbiBm
b3IgdGhlIGxhc3QgdGV4dCBydW4gb24gbGluZS4KLSAgICBhdXRvIGV4cGFuc2lvbkJlaGF2aW9y
ID0gbGFzdElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmJlaGF2aW9yOwotICAgIC8v
IFJlbW92ZSBhbGxvdyBhbmQgYWRkIGZvcmJpZC4KLSAgICBleHBhbnNpb25CZWhhdmlvciBePSBB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uOwotICAgIGV4cGFuc2lvbkJlaGF2aW9yIHw9IEZvcmJpZFRy
YWlsaW5nRXhwYW5zaW9uOwotICAgIGxhc3RJbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHko
KS5iZWhhdmlvciA9IGV4cGFuc2lvbkJlaGF2aW9yOwotCi0gICAgLy8gQ29sbGVjdCBleHBhbnNp
b24gb3Bwb3J0dW5pdGllcyBhbmQganVzdGlmeSB0aGUgcnVucy4KLSAgICBhdXRvIHdpZHRoVG9E
aXN0cmlidXRlID0gbGluZS5hdmFpbGFibGVXaWR0aCgpOwotICAgIGlmICh3aWR0aFRvRGlzdHJp
YnV0ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVu
aXRpZXMgPSAwOwotICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogaW5saW5lUnVucykKLSAgICAg
ICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyArPSBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5p
dHkoKS5jb3VudDsKLQotICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdGllcykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZmxvYXQgZXhwYW5zaW9uID0gd2lkdGhUb0Rpc3RyaWJ1dGUudG9GbG9h
dCgpIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdGllczsKLSAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVk
RXhwYW5zaW9uOwotICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogaW5saW5lUnVucykgewotICAg
ICAgICBhdXRvIGV4cGFuc2lvbkZvclJ1biA9IGlubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0
eSgpLmNvdW50ICogZXhwYW5zaW9uOwotCi0gICAgICAgIGlubGluZVJ1bi5leHBhbnNpb25PcHBv
cnR1bml0eSgpLmV4cGFuc2lvbiA9IGV4cGFuc2lvbkZvclJ1bjsKLSAgICAgICAgaW5saW5lUnVu
LnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgYWNjdW11bGF0ZWRFeHBh
bnNpb24pOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRoKGlubGluZVJ1bi5sb2dp
Y2FsV2lkdGgoKSArIGV4cGFuc2lvbkZvclJ1bik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5z
aW9uICs9IGV4cGFuc2lvbkZvclJ1bjsKLSAgICB9Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiBs
aW5lLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBydW4sIElubGluZVJ1blByb3ZpZGVy
OjpSdW46OlR5cGUgbGFzdFJ1blR5cGUpCi17Ci0gICAgYXV0byBpc0V4cGFuc2lvbk9wcG9ydHVu
aXR5ID0gW10oYXV0byBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlLCBhdXRvIGxhc3RSdW5Jc1doaXRl
c3BhY2UpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgfHwgKCFjdXJy
ZW50UnVuSXNXaGl0ZXNwYWNlICYmICFsYXN0UnVuSXNXaGl0ZXNwYWNlKTsKLSAgICB9OwotCi0g
ICAgYXV0byBleHBhbnNpb25CZWhhdmlvciA9IFtdKGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVu
aXR5KSB7Ci0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gQWxs
b3dUcmFpbGluZ0V4cGFuc2lvbjsKLSAgICAgICAgZXhwYW5zaW9uQmVoYXZpb3IgfD0gaXNBdEV4
cGFuc2lvbk9wcG9ydHVuaXR5ID8gRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiA6IEFsbG93TGVhZGlu
Z0V4cGFuc2lvbjsKLSAgICAgICAgcmV0dXJuIGV4cGFuc2lvbkJlaGF2aW9yOwotICAgIH07Ci0K
LSAgICBhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSA9IGlzRXhwYW5zaW9uT3Bwb3J0dW5p
dHkocnVuLmlzV2hpdGVzcGFjZSgpLCBsYXN0UnVuVHlwZSA9PSBJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuOjpUeXBlOjpXaGl0ZXNwYWNlKTsKLQotICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVSdW4gPSBs
aW5lLnJ1bnMoKS5sYXN0KCk7Ci0gICAgYXV0byYgZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBjdXJy
ZW50SW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCk7Ci0gICAgaWYgKGlzQXRFeHBhbnNp
b25PcHBvcnR1bml0eSkKLSAgICAgICAgKytleHBhbnNpb25PcHBvcnR1bml0eS5jb3VudDsKLQot
ICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5LmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3IoaXNB
dEV4cGFuc2lvbk9wcG9ydHVuaXR5KTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmFsaWduUnVucyhUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgTGluZSYgbGlu
ZSwgIElzTGFzdExpbmUgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGFkanV0ZWRUZXh0QWxpZ25t
ZW50ID0gdGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgPyB0ZXh0QWxpZ24gOiBp
c0xhc3RMaW5lID09IElzTGFzdExpbmU6Ok5vID8gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSA6IFRl
eHRBbGlnbk1vZGU6OkxlZnQ7Ci0gICAgaWYgKGFkanV0ZWRUZXh0QWxpZ25tZW50ID09IFRleHRB
bGlnbk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMobGluZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGxpbmUuY29udGVu
dExvZ2ljYWxMZWZ0KCk7Ci0gICAgYXV0byBhZGp1c3RlZExvZ2ljYWxMZWZ0ID0gYWRqdXN0ZWRM
aW5lTG9naWNhbExlZnQoYWRqdXRlZFRleHRBbGlnbm1lbnQsIGxpbmVMb2dpY2FsTGVmdCwgbGlu
ZS5hdmFpbGFibGVXaWR0aCgpKTsKLSAgICBpZiAoYWRqdXN0ZWRMb2dpY2FsTGVmdCA9PSBsaW5l
TG9naWNhbExlZnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gZGVsdGEgPSBhZGp1c3Rl
ZExvZ2ljYWxMZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0OwotICAgIGZvciAoYXV0byYgaW5saW5lUnVu
IDogbGluZS5ydW5zKCkpCi0gICAgICAgIGlubGluZVJ1bi5zZXRMb2dpY2FsTGVmdChpbmxpbmVS
dW4ubG9naWNhbExlZnQoKSArIGRlbHRhKTsKLX0KLQotTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OnJ1bldpZHRoKGNvbnN0IElubGluZUNvbnRlbnQmIGlubGlu
ZUNvbnRlbnQsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBmcm9t
LCB1bnNpZ25lZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSAKLXsKLSAg
ICBMYXlvdXRVbml0IHdpZHRoOwotICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGZyb207Ci0gICAg
YXV0byBpdGVyYXRvciA9IGlubGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0PElubGluZUl0ZW0q
PigmaW5saW5lSXRlbSkpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBhdXRvIGlubGluZUl0
ZW1FbmQgPSBpbmxpbmVDb250ZW50LmVuZCgpOwotI2VuZGlmCi0gICAgd2hpbGUgKGxlbmd0aCkg
ewotICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gaW5saW5lSXRlbUVuZCk7Ci0gICAgICAgIGF1
dG8mIGN1cnJlbnRJbmxpbmVJdGVtID0gKippdGVyYXRvcjsKLSAgICAgICAgYXV0byBlbmRQb3Np
dGlvbiA9IHN0ZDo6bWluPEl0ZW1Qb3NpdGlvbj4oc3RhcnRQb3NpdGlvbiArIGxlbmd0aCwgY3Vy
cmVudElubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKSk7Ci0gICAgICAgIGF1dG8gdGV4
dFdpZHRoID0gVGV4dFV0aWw6OndpZHRoKGN1cnJlbnRJbmxpbmVJdGVtLCBzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbiwgY29udGVudExvZ2ljYWxMZWZ0KTsKLQotICAgICAgICBjb250ZW50TG9n
aWNhbExlZnQgKz0gdGV4dFdpZHRoOwotICAgICAgICB3aWR0aCArPSB0ZXh0V2lkdGg7Ci0gICAg
ICAgIGxlbmd0aCAtPSAoZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKLQotICAgICAgICBz
dGFydFBvc2l0aW9uID0gMDsKLSAgICAgICAgKytpdGVyYXRvcjsKLSAgICB9Ci0gICAgcmV0dXJu
IHdpZHRoOwotfQotCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0xpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvTGluZS5jcHAKaW5kZXggYjEyNzNkMWIxYzVmYzY5ZmY5YWJlMDgwNTllYzQ2NTc3
NzI1NTYyMi4uZTZhNGE2YmRiZmU5YWRmYjgzNWNlZjhiNjAyYmExOTZhZDVmMzMwOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZS5jcHAKQEAgLTMy
LDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi12
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjppbml0KGNvbnN0IExheW91dFBvaW50
JiB0b3BMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBMYXlvdXRVbml0IG1pbmltYWxI
ZWlnaHQpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpp
bml0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRo
LCBMYXlvdXRVbml0IG1pbmltYWxIZWlnaHQpCiB7CiAgICAgbV9sb2dpY2FsUmVjdC5zZXRUb3BM
ZWZ0KHRvcExlZnQpOwogICAgIG1fbG9naWNhbFJlY3Quc2V0V2lkdGgoYXZhaWxhYmxlV2lkdGgp
OwpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpp
bml0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBMYXlvdXRVbml0CiAgICAgbV9jbG9zZWQg
PSBmYWxzZTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6YWRqdXN0
TG9naWNhbExlZnQoTGF5b3V0VW5pdCBkZWx0YSkKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEp
CiB7CiAgICAgQVNTRVJUKGRlbHRhID4gMCk7CiAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6YWRqdXN0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBk
ZWx0YSkKICAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOwogfQogCi12
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjphZGp1c3RMb2dpY2FsUmlnaHQoTGF5
b3V0VW5pdCBkZWx0YSkKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6
OkxpbmU6OmFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKQogewogICAgIEFTU0VS
VChkZWx0YSA+IDApOwogCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBib29sIGlzVHJpbW1hYmxl
Q29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBpbmxpbmVSdW4pCiAgICAgcmV0
dXJuIGlubGluZVJ1bi5pc1doaXRlc3BhY2UoKSAmJiBpbmxpbmVSdW4uc3R5bGUoKS5jb2xsYXBz
ZVdoaXRlU3BhY2UoKTsKIH0KIAotTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
TGluZTo6Y29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpjb250ZW50TG9naWNhbFJpZ2h0KCkgY29u
c3QKIHsKICAgICBpZiAobV9pbmxpbmVSdW5zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1f
bG9naWNhbFJlY3QubGVmdCgpOwpAQCAtNzgsNyArNzgsNyBAQCBMYXlvdXRVbml0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpMaW5lOjpjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QKICAgICBy
ZXR1cm4gbV9pbmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQoKTsKIH0KIAotdm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6YXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVSdW5Q
cm92aWRlcjo6UnVuJiBydW4sIGNvbnN0IExheW91dFNpemUmIHJ1blNpemUpCit2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjphcHBlbmRDb250ZW50KGNvbnN0
IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29uc3QgTGF5b3V0U2l6ZSYgcnVuU2l6ZSkK
IHsKICAgICBBU1NFUlQoIWlzQ2xvc2VkKCkpOwogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6YXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVS
dW5Qcm92aWRlcjo6UnVuJgogICAgICAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IFRy
YWlsaW5nVHJpbW1hYmxlQ29udGVudCB7IHJ1blNpemUud2lkdGgoKSwgdGV4dFJ1bi0+bGVuZ3Ro
KCkgfTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y2xvc2UoKQor
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6TGluZTo6Y2xvc2UoKQog
ewogICAgIGF1dG8gdHJpbVRyYWlsaW5nQ29udGVudCA9IFsmXXsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361274</attachid>
            <date>2019-02-05 20:56:43 -0800</date>
            <delta_ts>2019-02-06 07:52:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194328-20190205205625.patch</filename>
            <type>text/plain</type>
            <size>58212</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwOTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmViZDM2YzYxODFmNGQy
YTFjZDk3ZGI1OGRjNWQ4NTFmZDVjNzgxZC4uYWU5MTVjMzVjMmM5NTcxZjNjMWZiZmY2ZWJkYjA0
NTA2ZTM5NjM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE5LTAyLTA1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGxp
bmUgbGF5b3V0IGNvZGUgdG8gYSBkZWRpY2F0ZWQgZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6aXNUcmltbWFibGVDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdM
aW5lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OnNwbGl0SW5saW5lUnVuSWZOZWVkZWQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRl
RmluYWxSdW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OnBvc3RQcm9jZXNzSW5saW5lUnVucyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
bG9zZUxpbmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXRJbmxpbmVDb250ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdFBvc2l0aW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxh
eW91dDo6TGluZTo6aGFzQ29udGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjppc0Nsb3NlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lTGF5b3V0OjpMaW5lOjppc0ZpcnN0TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpydW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVM
YXlvdXQ6OkxpbmU6OmNvbnRlbnRMb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjphdmFp
bGFibGVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpsYXN0UnVuVHlwZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
OjpMaW5lOjpsb2dpY2FsVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxCb3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
TGluZUxheW91dDo6TGluZTo6bG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpoYXNDb250ZW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmU6OmlzQ2xvc2VkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmlzRmlyc3RMaW5lIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmU6OnJ1bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmU6OmF2YWlsYWJsZVdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6Omxhc3RSdW5UeXBlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmU6OmxvZ2ljYWxUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6bG9naWNhbEJvdHRv
bSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lOjpsb2dpY2FsSGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6YWRqdXN0ZWRMaW5lTG9naWNhbExl
ZnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Omp1c3RpZnlSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlRXhw
YW5zaW9uT3Bwb3J0dW5pdGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6YWxpZ25SdW5zKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpydW5XaWR0aCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2lj
YWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpj
b250ZW50TG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFwcGVuZENvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxh
eW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6TGluZTo6aW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjphZGp1c3RMb2dpY2FsTGVmdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lOjphZGp1c3RMb2dpY2FsUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y29udGVudExvZ2ljYWxS
aWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpMaW5lOjphcHBlbmRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNsb3NlKTog
RGVsZXRlZC4KKwogMjAxOS0wMi0wNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFN0b3AgdXNpbmcgYmxvYlJlZ2lzdHJ5IGluIE5ldHdvcmtQ
cm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNmNDI5NmQ1MjQyZjQyM2U1OTBhMzg2ZDAyYjJiOTI5
YThkOGU2YTEuLjAyZWM1NDNlNjYyODc4ZTgwMDIyYzk2YWI0YWE1OThlZWI1OGE3OGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0xMzQzLDYgKzEzNDMsNyBAQCBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lSW52YWxpZGF0aW9uLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJy
ZWFrZXIuY3BwCitsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmNwcAog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lUnVuUHJvdmlkZXIuY3BwCiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9MaW5lLmNwcAogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0
VXRpbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA4NTU5MGY2ZGIyNzg4MGU4OTJlZDVkMGEzMTFhMTI3MTc4NGE2Mzk5Li40
ZGMxMmFlNmUzMGI1YzU5Njg1ZjgwZjIyODU5NjZkMmJkMDA3ZjZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MTk5LDYgKzkx
OTksNyBAQAogCQk2RjIxOUQ3NjIxNzhEMzcxMDBCQjAzM0MgLyogTGluZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkYyMjJCNzQxQUI1MkQ2NDAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMjIyQjc1MUFCNTJEOEEwMDk0NjUxQSAv
KiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBJbmxpbmVMaW5l
TGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmVMYXlvdXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFGNUYyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0
Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkYzRTFGNjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZsb2F0Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NjQ2Myw2ICsxNjQ2NCw3IEBACiAJCQkJNkZFN0NGQTAyMTc3RUVGMTAwNUIxNTczIC8qIElubGlu
ZUl0ZW0uaCAqLywKIAkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDggLyogSW5saW5lTGluZUJy
ZWFrZXIuY3BwICovLAogCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5l
QnJlYWtlci5oICovLAorCQkJCTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBJbmxpbmVMaW5l
TGF5b3V0LmNwcCAqLywKIAkJCQk2RjIxOUQ3NDIxNzhEMzcxMDBCQjAzM0MgLyogSW5saW5lUnVu
LmggKi8sCiAJCQkJNkY1MjE3QzYyMTc3RjVBNjAwNjU4M0JCIC8qIElubGluZVJ1blByb3ZpZGVy
LmNwcCAqLywKIAkJCQk2RjUyMTdDNDIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlk
ZXIuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCAxZDFjYTll
Y2M3ZjJhYWY2NjJiNjg4N2U0MGU3MDNkYWY0NzZiNTg0Li40YjNiMzE2ZDQ2MTNiNTk4MWY2MjJl
N2M2MDBiMDhmNTg3NzdhYzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CkBAIC0yOCw4ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKIAotI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkZsb2F0aW5nU3Rh
dGUuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxp
bmVMaW5lQnJlYWtlci5oIgogI2luY2x1ZGUgIklubGluZVJ1blByb3ZpZGVyLmgiCkBAIC04Nywy
NjAgKzg1LDEwIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCgpIGNvbnN0
CiAKICAgICBJbmxpbmVSdW5Qcm92aWRlciBpbmxpbmVSdW5Qcm92aWRlcjsKICAgICBjb2xsZWN0
SW5saW5lQ29udGVudChpbmxpbmVSdW5Qcm92aWRlcik7Ci0gICAgbGF5b3V0SW5saW5lQ29udGVu
dChpbmxpbmVSdW5Qcm92aWRlcik7CisgICAgTGluZUxheW91dCgqdGhpcykubGF5b3V0KGlubGlu
ZVJ1blByb3ZpZGVyKTsKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW0VuZF0gLT4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCAtPiBmb3Jt
YXR0aW5nIHJvb3QoIiA8PCAmcm9vdCA8PCAiKSIpOwogfQogCi1zdGF0aWMgYm9vbCBpc1RyaW1t
YWJsZUNvbnRlbnQoY29uc3QgSW5saW5lTGluZUJyZWFrZXI6OlJ1biYgcnVuKQotewotICAgIHJl
dHVybiBydW4uY29udGVudC5pc1doaXRlc3BhY2UoKSAmJiBydW4uY29udGVudC5zdHlsZSgpLmNv
bGxhcHNlV2hpdGVTcGFjZSgpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpp
bml0aWFsaXplTmV3TGluZShMaW5lJiBsaW5lKSBjb25zdAotewotICAgIGF1dG8mIGZvcm1hdHRp
bmdSb290ID0gZG93bmNhc3Q8Q29udGFpbmVyPihyb290KCkpOwotICAgIGF1dG8mIGZvcm1hdHRp
bmdSb290RGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChm
b3JtYXR0aW5nUm9vdCk7Ci0KLSAgICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGZvcm1hdHRpbmdS
b290RGlzcGxheUJveC5jb250ZW50Qm94TGVmdCgpOwotICAgIGF1dG8gbGluZUxvZ2ljYWxUb3Ag
PSBsaW5lLmlzRmlyc3RMaW5lKCkgPyBmb3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJv
eFRvcCgpIDogbGluZS5sb2dpY2FsQm90dG9tKCk7Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9
IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKTsKLQotICAgIC8vIENo
ZWNrIGZvciBpbnRydWRpbmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJs
ZSB3aWR0aCBmb3IgdGhpcyBsaW5lIGFjY29yZGluZ2x5LgotICAgIGF1dG8mIGZsb2F0aW5nU3Rh
dGUgPSBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCk7Ci0gICAgaWYgKCFmbG9hdGlu
Z1N0YXRlLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9h
dGluZ1N0YXRlLmNvbnN0cmFpbnRzKHsgbGluZUxvZ2ljYWxUb3AgfSwgZm9ybWF0dGluZ1Jvb3Qp
OwotICAgICAgICAvLyBDaGVjayBpZiB0aGVzZSBjb25zdHJhaW50cyBhY3R1YWxseSBwdXQgbGlt
aXRhdGlvbiBvbiB0aGUgbGluZS4KLSAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAm
JiAqZmxvYXRDb25zdHJhaW50cy5sZWZ0IDw9IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250
ZW50Qm94TGVmdCgpKQotICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5sZWZ0ID0geyB9Owot
Ci0gICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ICYmICpmbG9hdENvbnN0cmFpbnRz
LnJpZ2h0ID49IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94UmlnaHQoKSkKLSAg
ICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMucmlnaHQgPSB7IH07Ci0KLSAgICAgICAgaWYgKGZs
b2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoKmZsb2F0Q29uc3RyYWludHMubGVmdCA8ICpmbG9hdENvbnN0cmFpbnRzLnJp
Z2h0KTsKLSAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gKmZsb2F0Q29uc3RyYWludHMucmln
aHQgLSAqZmxvYXRDb25zdHJhaW50cy5sZWZ0OwotICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0
ID0gKmZsb2F0Q29uc3RyYWludHMubGVmdDsKLSAgICAgICAgfSBlbHNlIGlmIChmbG9hdENvbnN0
cmFpbnRzLmxlZnQpIHsKLSAgICAgICAgICAgIEFTU0VSVCgqZmxvYXRDb25zdHJhaW50cy5sZWZ0
ID4gbGluZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoIC09ICgqZmxv
YXRDb25zdHJhaW50cy5sZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGxpbmVM
b2dpY2FsTGVmdCA9ICpmbG9hdENvbnN0cmFpbnRzLmxlZnQ7Ci0gICAgICAgIH0gZWxzZSBpZiAo
ZmxvYXRDb25zdHJhaW50cy5yaWdodCkgewotICAgICAgICAgICAgQVNTRVJUKCpmbG9hdENvbnN0
cmFpbnRzLnJpZ2h0ID4gbGluZUxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGF2YWlsYWJsZVdp
ZHRoID0gKmZsb2F0Q29uc3RyYWludHMucmlnaHQgLSBsaW5lTG9naWNhbExlZnQ7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBsaW5lLmluaXQoeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2Fs
VG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmNvbXB1dGVkTGlu
ZUhlaWdodCgpKTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c3BsaXRJbmxp
bmVSdW5JZk5lZWRlZChjb25zdCBJbmxpbmVSdW4mIGlubGluZVJ1biwgSW5saW5lUnVucyYgc3Bs
aXRSdW5zKSBjb25zdAotewotICAgIEFTU0VSVChpbmxpbmVSdW4udGV4dENvbnRleHQoKSk7Ci0g
ICAgQVNTRVJUKGlubGluZVJ1bi5vdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSk7Ci0gICAg
Ly8gSW4gY2VydGFpbiBjYXNlcywgYSBydW4gY2FuIG92ZXJsYXAgbXVsdGlwbGUgaW5saW5lIGVs
ZW1lbnRzIGxpa2UgdGhpczoKLSAgICAvLyA8c3Bhbj5ub3JtYWwgdGV4dCBjb250ZW50PC9zcGFu
PjxzcGFuIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IGxlZnQ6IDEwcHg7Ij5idXQgdGhpcyBv
bmUgbmVlZHMgYSBkZWRpY2F0ZWQgcnVuPC9zcGFuPjxzcGFuPmVuZCBvZiB0ZXh0PC9zcGFuPgot
ICAgIC8vIFRoZSBjb250ZW50IGFib3ZlIGdlbmVyYXRlcyBvbmUgbG9uZyBydW4gPG5vcm1hbCB0
ZXh0IGNvbnRlbnRidXQgdGhpcyBvbmUgbmVlZHMgZGVkaWNhdGVkIHJ1bmVuZCBvZiB0ZXh0Pgot
ICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBtaWRkbGUgcnVuIGlzIHBvc2l0aW9uZWQsIGl0IG5l
ZWRzIHRvIGJlIG1vdmVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgcmVzdCBvZiB0aGUgY29udGVu
dCwgaGVuY2UgaXQgbmVlZHMgYSBkZWRpY2F0ZWQgaW5saW5lIHJ1bi4KLQotICAgIC8vIDEuIFN0
YXJ0IHdpdGggdGhlIGZpcnN0IGlubGluZSBpdGVtIChlbGVtZW50KSBhbmQgdHJhdmVycyB0aGUg
bGlzdCB1bnRpbAotICAgIC8vIDIuIGVpdGhlciBmaW5kIGFuIGlubGluZSBpdGVtIHRoYXQgbmVl
ZHMgYSBkZWRpY2F0ZWQgcnVuIG9yIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIHJ1bgotICAgIC8v
IDMuIENyZWF0ZSBkZWRpY2F0ZSBpbmxpbmUgcnVucy4KLSAgICBhdXRvJiBpbmxpbmVDb250ZW50
ID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lQ29udGVudCgpOwotICAgIGF1dG8gY29udGVudFN0
YXJ0ID0gaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCk7Ci0gICAgYXV0byBzdGFydFBvc2l0aW9uID0g
aW5saW5lUnVuLnRleHRDb250ZXh0KCktPnN0YXJ0KCk7Ci0gICAgYXV0byByZW1hbmluZ0xlbmd0
aCA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKTsKLQotICAgIHN0cnVjdCBVbmNv
bW1pdHRlZCB7Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGZpcnN0SW5saW5lSXRlbSB7IG51
bGxwdHIgfTsKLSAgICAgICAgY29uc3QgSW5saW5lSXRlbSogbGFzdElubGluZUl0ZW0geyBudWxs
cHRyIH07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCB7IDAgfTsKLSAgICB9OwotICAgIE9wdGlv
bmFsPFVuY29tbWl0dGVkPiB1bmNvbW1pdHRlZDsKLQotICAgIGF1dG8gY29tbWl0ID0gWyZdIHsK
LSAgICAgICAgaWYgKCF1bmNvbW1pdHRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBjb250ZW50U3RhcnQgKz0gdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbS0+bm9uQnJlYWth
YmxlU3RhcnQoKTsKLQotICAgICAgICBhdXRvIHJ1bldpZHRoID0gR2VvbWV0cnk6OnJ1bldpZHRo
KGlubGluZUNvbnRlbnQsICp1bmNvbW1pdHRlZC0+Zmlyc3RJbmxpbmVJdGVtLCBzdGFydFBvc2l0
aW9uLCB1bmNvbW1pdHRlZC0+bGVuZ3RoLCBjb250ZW50U3RhcnQpOwotICAgICAgICBhdXRvIHJ1
biA9IElubGluZVJ1biB7IHsgaW5saW5lUnVuLmxvZ2ljYWxUb3AoKSwgY29udGVudFN0YXJ0LCBy
dW5XaWR0aCwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSB9LCAqdW5jb21taXR0ZWQtPmZpcnN0
SW5saW5lSXRlbSB9OwotICAgICAgICBydW4uc2V0VGV4dENvbnRleHQoeyBzdGFydFBvc2l0aW9u
LCB1bmNvbW1pdHRlZC0+bGVuZ3RoIH0pOwotICAgICAgICBzcGxpdFJ1bnMuYXBwZW5kKHJ1bik7
Ci0KLSAgICAgICAgY29udGVudFN0YXJ0ICs9IHJ1bldpZHRoICsgdW5jb21taXR0ZWQtPmxhc3RJ
bmxpbmVJdGVtLT5ub25CcmVha2FibGVFbmQoKTsKLQotICAgICAgICBzdGFydFBvc2l0aW9uID0g
MDsKLSAgICAgICAgdW5jb21taXR0ZWQgPSB7IH07Ci0gICAgfTsKLQotICAgIGZvciAoYXV0byBp
dGVyYXRvciA9IGlubGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0PElubGluZUl0ZW0qPigmaW5s
aW5lUnVuLmlubGluZUl0ZW0oKSkpOyBpdGVyYXRvciAhPSBpbmxpbmVDb250ZW50LmVuZCgpICYm
IHJlbWFuaW5nTGVuZ3RoID4gMDsgKytpdGVyYXRvcikgewotICAgICAgICBhdXRvJiBpbmxpbmVJ
dGVtID0gKippdGVyYXRvcjsKLQotICAgICAgICAvLyBTa2lwIGFsbCBub24taW5mbG93IGJveGVz
IChmbG9hdHMsIG91dC1vZi1mbG93IHBvc2l0aW9uZWQgZWxlbWVudHMpLiBUaGV5IGRvbid0IHBh
cnRpY2lwYXRlIGluIHRoZSBpbmxpbmUgcnVuIGNvbnRleHQuCi0gICAgICAgIGlmICghaW5saW5l
SXRlbS5sYXlvdXRCb3goKS5pc0luRmxvdygpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgYXV0byBjdXJyZW50TGVuZ3RoID0gWyZdIHsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1pbihyZW1hbmluZ0xlbmd0aCwgaW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0aCgpIC0g
c3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gMS4gQnJlYWsgYmVmb3Jl
L2FmdGVyIC0+IHJlcXVpcmVzIGRlZGljYXRlZCBydW4gLT4gY29tbWl0IHdoYXQgd2UndmUgZ290
IHNvIGZhciBhbmQgYWxzbyBjb21taXQgdGhlIGN1cnJlbnQgaW5saW5lIGVsZW1lbnQgYXMgYSBz
ZXBhcmF0ZSBpbmxpbmUgcnVuLgotICAgICAgICAvLyAyLiBCcmVhayBhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBpbmxpbmUgZWxlbWVudCAtPiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyLiBD
dXJyZW50IGVsZW1lbnQgYmVjb21lcyB0aGUgZmlyc3QgdW5jb21taXR0ZWQuCi0gICAgICAgIC8v
IDMuIEJyZWFrIGF0IHRoZSBlbmQgb2YgdGhlIGlubGluZSBlbGVtZW50IC0+IGNvbW1pdCB3aGF0
IHdlJ3ZlIGdvdCBzbyBmYXIgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgICAg
IC8vIDQuIElubGluZSBlbGVtZW50IGRvZXMgbm90IHJlcXVpcmUgcnVuIGJyZWFraW5nIC0+IGFk
ZCBjdXJyZW50IGlubGluZSBlbGVtZW50IHRvIHVuY29tbWl0dGVkLiBKdW1wIHRvIHRoZSBuZXh0
IGVsZW1lbnQuCi0gICAgICAgIGF1dG8gZGV0YWNoaW5nUnVsZXMgPSBpbmxpbmVJdGVtLmRldGFj
aGluZ1J1bGVzKCk7Ci0KLSAgICAgICAgLy8gIzEKLSAgICAgICAgaWYgKGRldGFjaGluZ1J1bGVz
LmNvbnRhaW5zQWxsKHsgSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdFN0YXJ0LCBJ
bmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0RW5kIH0pKSB7Ci0gICAgICAgICAgICBj
b21taXQoKTsKLSAgICAgICAgICAgIGF1dG8gY29udGVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGgo
KTsKLSAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5jb21taXR0ZWQgeyAmaW5saW5lSXRlbSwg
JmlubGluZUl0ZW0sIGNvbnRlbnRMZW5ndGggfTsKLSAgICAgICAgICAgIHJlbWFuaW5nTGVuZ3Ro
IC09IGNvbnRlbnRMZW5ndGg7Ci0gICAgICAgICAgICBjb21taXQoKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gIzIKLSAgICAgICAgaWYgKGRldGFjaGlu
Z1J1bGVzLmNvbnRhaW5zKElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRTdGFydCkp
Ci0gICAgICAgICAgICBjb21taXQoKTsKLQotICAgICAgICAvLyBBZGQgY3VycmVudCBpbmxpbmUg
aXRlbSB0byB1bmNvbW1pdHRlZC4KLSAgICAgICAgLy8gIzMgYW5kICM0Ci0gICAgICAgIGF1dG8g
Y29udGVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGgoKTsKLSAgICAgICAgaWYgKCF1bmNvbW1pdHRl
ZCkKLSAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5jb21taXR0ZWQgeyAmaW5saW5lSXRlbSwg
JmlubGluZUl0ZW0sIDAgfTsKLSAgICAgICAgdW5jb21taXR0ZWQtPmxlbmd0aCArPSBjb250ZW50
TGVuZ3RoOwotICAgICAgICB1bmNvbW1pdHRlZC0+bGFzdElubGluZUl0ZW0gPSAmaW5saW5lSXRl
bTsKLSAgICAgICAgcmVtYW5pbmdMZW5ndGggLT0gY29udGVudExlbmd0aDsKLQotICAgICAgICAv
LyAjMwotICAgICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29udGFpbnMoSW5saW5lSXRlbTo6RGV0
YWNoaW5nUnVsZTo6QnJlYWtBdEVuZCkpCi0gICAgICAgICAgICBjb21taXQoKTsKLSAgICB9Ci0g
ICAgLy8gRWl0aGVyIGFsbCBpbmxpbmUgZWxlbWVudHMgbmVlZGVkIGRlZGljYXRlZCBydW5zIG9y
IG5laXRoZXIgb2YgdGhlbS4KLSAgICBpZiAoIXJlbWFuaW5nTGVuZ3RoIHx8IHJlbWFuaW5nTGVu
Z3RoID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY29tbWl0KCk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNy
ZWF0ZUZpbmFsUnVucyhMaW5lJiBsaW5lKSBjb25zdAotewotICAgIGF1dG8mIGlubGluZUZvcm1h
dHRpbmdTdGF0ZSA9IGZvcm1hdHRpbmdTdGF0ZSgpOwotICAgIGZvciAoYXV0byYgaW5saW5lUnVu
IDogbGluZS5ydW5zKCkpIHsKLSAgICAgICAgaWYgKGlubGluZVJ1bi5vdmVybGFwc011bHRpcGxl
SW5saW5lSXRlbXMoKSkgewotICAgICAgICAgICAgSW5saW5lUnVucyBzcGxpdFJ1bnM7Ci0gICAg
ICAgICAgICBzcGxpdElubGluZVJ1bklmTmVlZGVkKGlubGluZVJ1biwgc3BsaXRSdW5zKTsKLSAg
ICAgICAgICAgIGZvciAoYXV0byYgc3BsaXRSdW4gOiBzcGxpdFJ1bnMpCi0gICAgICAgICAgICAg
ICAgaW5saW5lRm9ybWF0dGluZ1N0YXRlLmFwcGVuZElubGluZVJ1bihzcGxpdFJ1bik7Ci0KLSAg
ICAgICAgICAgIGlmICghc3BsaXRSdW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gZmluYWxSdW4gPSBbJl0gewotICAgICAg
ICAgICAgYXV0byYgaW5saW5lSXRlbSA9IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7Ci0gICAgICAg
ICAgICBpZiAoaW5saW5lSXRlbS5kZXRhY2hpbmdSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaW5saW5lUnVuOwotCi0gICAgICAgICAgICBJbmxpbmVSdW4gYWRqdXN0
ZWRSdW4gPSBpbmxpbmVSdW47Ci0gICAgICAgICAgICBhdXRvIHdpZHRoID0gaW5saW5lUnVuLmxv
Z2ljYWxXaWR0aCgpIC0gaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpIC0gaW5saW5lSXRl
bS5ub25CcmVha2FibGVFbmQoKTsKLSAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxM
ZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFy
dCgpKTsKLSAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxXaWR0aCh3aWR0aCk7Ci0g
ICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRSdW47Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmFwcGVuZElubGluZVJ1bihmaW5hbFJ1bigpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnBvc3RQcm9jZXNzSW5saW5lUnVucyhM
aW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlzTGFzdExpbmUpIGNvbnN0Ci17Ci0gICAgR2VvbWV0cnk6
OmFsaWduUnVucyhyb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgbGluZSwgaXNMYXN0TGluZSk7
Ci0gICAgYXV0byBmaXJzdFJ1bkluZGV4ID0gZm9ybWF0dGluZ1N0YXRlKCkuaW5saW5lUnVucygp
LnNpemUoKTsKLSAgICBjcmVhdGVGaW5hbFJ1bnMobGluZSk7Ci0KLSAgICBwbGFjZUluRmxvd1Bv
c2l0aW9uZWRDaGlsZHJlbihmaXJzdFJ1bkluZGV4KTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y2xvc2VMaW5lKExpbmUmIGxpbmUsIElzTGFzdExpbmUgaXNMYXN0TGluZSkg
Y29uc3QKLXsKLSAgICBsaW5lLmNsb3NlKCk7Ci0gICAgaWYgKCFsaW5lLmhhc0NvbnRlbnQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcG9zdFByb2Nlc3NJbmxpbmVSdW5zKGxpbmUsIGlzTGFz
dExpbmUpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjphcHBlbmRDb250ZW50
VG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29u
c3QgTGF5b3V0U2l6ZSYgcnVuU2l6ZSkgY29uc3QKLXsKLSAgICBhdXRvIGxhc3RSdW5UeXBlID0g
bGluZS5sYXN0UnVuVHlwZSgpOwotICAgIGxpbmUuYXBwZW5kQ29udGVudChydW4sIHJ1blNpemUp
OwotCi0gICAgaWYgKHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6
Okp1c3RpZnkpCi0gICAgICAgIEdlb21ldHJ5Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGll
cyhsaW5lLCBydW4sIGxhc3RSdW5UeXBlLnZhbHVlT3IoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6
VHlwZTo6Tm9uV2hpdGVzcGFjZSkpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyJiBpbmxpbmVSdW5Q
cm92aWRlcikgY29uc3QKLXsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0
YXRlKCk7Ci0gICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gZm9ybWF0dGluZ1N0YXRl
KCk7Ci0gICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBpbmxpbmVG
b3JtYXR0aW5nU3RhdGUuZmxvYXRpbmdTdGF0ZSgpIH07Ci0KLSAgICBMaW5lIGxpbmU7Ci0gICAg
aW5pdGlhbGl6ZU5ld0xpbmUobGluZSk7Ci0KLSAgICBJbmxpbmVMaW5lQnJlYWtlciBsaW5lQnJl
YWtlcihsYXlvdXRTdGF0ZSwgaW5saW5lRm9ybWF0dGluZ1N0YXRlLmlubGluZUNvbnRlbnQoKSwg
aW5saW5lUnVuUHJvdmlkZXIucnVucygpKTsKLSAgICB3aGlsZSAoYXV0byBydW4gPSBsaW5lQnJl
YWtlci5uZXh0UnVuKGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgpLCBsaW5lLmF2YWlsYWJsZVdp
ZHRoKCksICFsaW5lLmhhc0NvbnRlbnQoKSkpIHsKLSAgICAgICAgYXV0byBpc0ZpcnN0UnVuID0g
cnVuLT5wb3NpdGlvbiA9PSBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQb3NpdGlvbjo6TGluZUJl
Z2luOwotICAgICAgICBhdXRvIGlzTGFzdFJ1biA9IHJ1bi0+cG9zaXRpb24gPT0gSW5saW5lTGlu
ZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVFbmQ7Ci0gICAgICAgIGF1dG8gZ2VuZXJhdGVz
SW5saW5lUnVuID0gdHJ1ZTsKLQotICAgICAgICAvLyBQb3NpdGlvbiBmbG9hdCBhbmQgYWRqdXN0
IHRoZSBydW5zIG9uIGxpbmUuCi0gICAgICAgIGlmIChydW4tPmNvbnRlbnQuaXNGbG9hdCgpKSB7
Ci0gICAgICAgICAgICBhdXRvJiBmbG9hdEJveCA9IHJ1bi0+Y29udGVudC5pbmxpbmVJdGVtKCku
bGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBjb21wdXRlRmxvYXRQb3NpdGlvbihmbG9hdGluZ0Nv
bnRleHQsIGxpbmUsIGZsb2F0Qm94KTsKLSAgICAgICAgICAgIGlubGluZUZvcm1hdHRpbmdTdGF0
ZS5mbG9hdGluZ1N0YXRlKCkuYXBwZW5kKGZsb2F0Qm94KTsKLQotICAgICAgICAgICAgYXV0byBm
bG9hdEJveFdpZHRoID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChmbG9hdEJv
eCkubWFyZ2luQm94KCkud2lkdGgoKTsKLSAgICAgICAgICAgIC8vIFNocmluayBhdmFpbGJsZSBz
cGFjZSBmb3IgY3VycmVudCBsaW5lIGFuZCBtb3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgotICAg
ICAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBsaW5lLmFkanVz
dExvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbGluZS5hZGp1c3RMb2dpY2FsUmlnaHQoZmxv
YXRCb3hXaWR0aCk7Ci0KLSAgICAgICAgICAgIGdlbmVyYXRlc0lubGluZVJ1biA9IGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gMS4gSW5pdGlhbGl6ZSBuZXcgbGluZSBpZiBuZWVkZWQu
Ci0gICAgICAgIC8vIDIuIEFwcGVuZCBpbmxpbmUgcnVuIHVubGVzcyBpdCBpcyBza2lwcGVkLgot
ICAgICAgICAvLyAzLiBDbG9zZSBjdXJyZW50IGxpbmUgaWYgbmVlZGVkLgotICAgICAgICBpZiAo
aXNGaXJzdFJ1bikgewotICAgICAgICAgICAgLy8gV2hlbiB0aGUgZmlyc3QgcnVuIGRvZXMgbm90
IGdlbmVyYXRlIGFuIGFjdHVhbCBpbmxpbmUgcnVuLCB0aGUgbmV4dCBydW4gY29tZXMgaW4gZmly
c3QtcnVuIGFzIHdlbGwuCi0gICAgICAgICAgICAvLyBObyBuZWVkIHRvIHNwZW5kIHRpbWUgb24g
Y2xvc2luZy9pbml0aWFsaXppbmcuCi0gICAgICAgICAgICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVz
cGFjZS4KLSAgICAgICAgICAgIGlmICghZ2VuZXJhdGVzSW5saW5lUnVuIHx8IGlzVHJpbW1hYmxl
Q29udGVudCgqcnVuKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
aWYgKGxpbmUuaGFzQ29udGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gUHJldmlvdXMgcnVu
IGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5lIGVuZC4gQWRqdXN0IHRoZSBsaW5lIGFjY29yZGlu
Z2x5LgotICAgICAgICAgICAgICAgIGlmICghbGluZS5pc0Nsb3NlZCgpKQotICAgICAgICAgICAg
ICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGluZTo6Tm8pOwotICAgICAgICAgICAgICAg
IGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgfQotCi0g
ICAgICAgIGlmIChnZW5lcmF0ZXNJbmxpbmVSdW4pIHsKLSAgICAgICAgICAgIGF1dG8gd2lkdGgg
PSBydW4tPndpZHRoOwotICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBydW4tPmNvbnRlbnQuaXNU
ZXh0KCkgPyBMYXlvdXRVbml0KHJvb3QoKS5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpKSA6
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocnVuLT5jb250ZW50LmlubGluZUl0
ZW0oKS5sYXlvdXRCb3goKSkuaGVpZ2h0KCk7IAotICAgICAgICAgICAgYXBwZW5kQ29udGVudFRv
TGluZShsaW5lLCBydW4tPmNvbnRlbnQsIHsgd2lkdGgsIGhlaWdodCB9KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChpc0xhc3RSdW4pCi0gICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNM
YXN0TGluZTo6Tm8pOwotICAgIH0KLQotICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpZ
ZXMpOwotfQotCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlTWFyZ2luQm9y
ZGVyQW5kUGFkZGluZyhjb25zdCBJbmxpbmVDb250YWluZXImIGlubGluZUNvbnRhaW5lcikgY29u
c3QKIHsKICAgICAvLyBOb24tcmVwbGFjZWQsIG5vbi1mb3JtYXR0aW5nIHJvb3QgY29udGFpbmVy
cyAoPHNwYW4+PC9zcGFuPikgZG9uJ3QgaGF2ZSB3aWR0aCBwcm9wZXJ0eSAtPiBub24gd2lkdGgg
Y29tcHV0YXRpb24uIApAQCAtNDE5LDQyICsxNjcsNiBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBC
bwogICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94KTsKIH0KIAotdm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdD
b250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIExpbmUmIGxpbmUsIGNvbnN0IEJveCYgZmxvYXRCb3gp
IGNvbnN0Ci17Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwot
ICAgIEFTU0VSVChsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGZsb2F0Qm94KSk7Ci0gICAgYXV0
byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRC
b3gpOwotCi0gICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJzdC4KLSAgICBkaXNwbGF5Qm94
LnNldFRvcExlZnQoeyBsaW5lLmNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbGluZS5sb2dpY2FsVG9w
KCkgfSk7Ci0gICAgLy8gRmxvYXQgaXQuCi0gICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGZsb2F0
aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGZsb2F0Qm94KSk7Ci19Ci0KLXZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVk
IGZpc3RSdW5JbmRleCkgY29uc3QKLXsKLSAgICBhdXRvJiBpbmxpbmVSdW5zID0gZm9ybWF0dGlu
Z1N0YXRlKCkuaW5saW5lUnVucygpOwotICAgIGZvciAoYXV0byBydW5JbmRleCA9IGZpc3RSdW5J
bmRleDsgcnVuSW5kZXggPCBpbmxpbmVSdW5zLnNpemUoKTsgKytydW5JbmRleCkgewotICAgICAg
ICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5zW3J1bkluZGV4XTsKLQotICAgICAgICBhdXRv
IHBvc2l0aW9uT2Zmc2V0ID0gWyZdKGF1dG8mIGxheW91dEJveCkgewotICAgICAgICAgICAgLy8g
RklYTUU6IE5lZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIGluLWZsb3cgb2Zmc2V0IHNob3VsZCBz
dGljay4gVGhpcyBtaWdodCB2ZXJ5IHdlbGwgYmUgdGVtcG9yYXJ5LgotICAgICAgICAgICAgT3B0
aW9uYWw8TGF5b3V0U2l6ZT4gb2Zmc2V0OwotICAgICAgICAgICAgZm9yIChhdXRvKiBib3ggPSAm
bGF5b3V0Qm94OyBib3ggIT0gJnJvb3QoKTsgYm94ID0gYm94LT5wYXJlbnQoKSkgewotICAgICAg
ICAgICAgICAgIGlmICghYm94LT5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0LnZhbHVlT3Io
TGF5b3V0U2l6ZSgpKSArIEdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQo
bGF5b3V0U3RhdGUoKSwgKmJveCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
b2Zmc2V0OwotICAgICAgICB9OwotCi0gICAgICAgIGlmIChhdXRvIG9mZnNldCA9IHBvc2l0aW9u
T2Zmc2V0KGlubGluZVJ1bi5pbmxpbmVJdGVtKCkubGF5b3V0Qm94KCkpKSB7Ci0gICAgICAgICAg
ICBpbmxpbmVSdW4ubW92ZVZlcnRpY2FsbHkob2Zmc2V0LT5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBpbmxpbmVSdW4ubW92ZUhvcml6b250YWxseShvZmZzZXQtPndpZHRoKCkpOwotICAgICAgICB9
Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBhZGREZXRhY2hpbmdSdWxlcyhJbmxpbmVJdGVtJiBp
bmxpbmVJdGVtLCBPcHRpb25hbDxMYXlvdXRVbml0PiBub25CcmVha2FibGVTdGFydFdpZHRoLCBP
cHRpb25hbDxMYXlvdXRVbml0PiBub25CcmVha2FibGVFbmRXaWR0aCkKIHsKICAgICBPcHRpb25T
ZXQ8SW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZT4gZGV0YWNoaW5nUnVsZXM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCA5N2Y4ZWQ2YmFjNzMxY2MwMmEyYmZhMGZhM2M1YzYw
NTU1ZGVmYmFkLi4xZThjMjdmOGI4NjQ3NmRlZWE4OTIzOGI5M2Q1ZjcyNTA1YTMyYzNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTI5LDE0ICsyOSwxNSBAQAogCiAjaW5j
bHVkZSAiRGlzcGxheUJveC5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lUnVuLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgTGF5b3V0IHsKIAorY2xhc3MgRmxvYXRpbmdTdGF0ZTsKIGNsYXNzIElubGluZUNvbnRhaW5l
cjsKLWNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNzIElubGluZVJ1blByb3ZpZGVy
OwogCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGxheW91dCBsb2dpYyBmb3IgaW5saW5l
IGZvcm1hdHRpbmcgY29udGV4dHMuCkBAIC00NSw3OSArNDYsOTAgQEAgY2xhc3MgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQgewogICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW5saW5lRm9ybWF0dGluZ0NvbnRleHQpOwogcHVibGljOgogICAgIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0KGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBJ
bmxpbmVGb3JtYXR0aW5nU3RhdGUmKTsKLQogICAgIHZvaWQgbGF5b3V0KCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6Ci0gICAgY2xhc3MgTGluZSB7CisgICAgY2xhc3MgTGluZUxheW91dCB7
CiAgICAgcHVibGljOgotICAgICAgICB2b2lkIGluaXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExl
ZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIExheW91dFVuaXQgbWluaW1hbEhlaWdodCk7
Ci0gICAgICAgIHZvaWQgY2xvc2UoKTsKLQotICAgICAgICB2b2lkIGFwcGVuZENvbnRlbnQoY29u
c3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIGNvbnN0IExheW91dFNpemUmKTsKLQotICAgICAg
ICB2b2lkIGFkanVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpOwotICAgICAgICB2b2lk
IGFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKTsKLQotICAgICAgICBib29sIGhh
c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiAhbV9pbmxpbmVSdW5zLmlzRW1wdHkoKTsgfQotICAg
ICAgICBib29sIGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZWQ7IH0KLSAgICAgICAg
Ym9vbCBpc0ZpcnN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNGaXJzdExpbmU7IH0KLSAgICAg
ICAgVmVjdG9yPElubGluZVJ1bj4mIHJ1bnMoKSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KLQot
ICAgICAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdDsKLSAgICAgICAg
TGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxS
ZWN0LmxlZnQoKTsgfQotICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aDsgfQotICAgICAgICBPcHRpb25hbDxJbmxpbmVSdW5Q
cm92aWRlcjo6UnVuOjpUeXBlPiBsYXN0UnVuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1
blR5cGU7IH0KLQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVy
biBtX2xvZ2ljYWxSZWN0LnRvcCgpOyB9Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KLSAgICAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0g
bG9naWNhbFRvcCgpOyB9CisgICAgICAgIExpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmKTsKKyAgICAgICAgdm9pZCBsYXlvdXQoY29uc3QgSW5saW5lUnVuUHJvdmlkZXIm
KSBjb25zdDsKKworICAgICAgICBlbnVtIGNsYXNzIElzTGFzdExpbmUgeyBObywgWWVzIH07Cisg
ICAgICAgIGNsYXNzIExpbmUgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB2b2lkIGlu
aXQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgs
IExheW91dFVuaXQgbWluaW1hbEhlaWdodCk7CisgICAgICAgICAgICB2b2lkIGNsb3NlKCk7CisK
KyAgICAgICAgICAgIHZvaWQgYXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuJiwgY29uc3QgTGF5b3V0U2l6ZSYpOworCisgICAgICAgICAgICB2b2lkIGFkanVzdExvZ2lj
YWxMZWZ0KExheW91dFVuaXQgZGVsdGEpOworICAgICAgICAgICAgdm9pZCBhZGp1c3RMb2dpY2Fs
UmlnaHQoTGF5b3V0VW5pdCBkZWx0YSk7CisKKyAgICAgICAgICAgIGJvb2wgaGFzQ29udGVudCgp
IGNvbnN0IHsgcmV0dXJuICFtX2lubGluZVJ1bnMuaXNFbXB0eSgpOyB9CisgICAgICAgICAgICBi
b29sIGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZWQ7IH0KKyAgICAgICAgICAgIGJv
b2wgaXNGaXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9CisgICAgICAg
ICAgICBWZWN0b3I8SW5saW5lUnVuPiYgcnVucygpIHsgcmV0dXJuIG1faW5saW5lUnVuczsgfQor
CisgICAgICAgICAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdDsKKyAg
ICAgICAgICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KKyAgICAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRoOyB9CisgICAgICAgICAgICBP
cHRpb25hbDxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlPiBsYXN0UnVuVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdFJ1blR5cGU7IH0KKworICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAgICAgICAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVj
dC5ib3R0b20oKTsgfQorICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbG9naWNhbEJvdHRvbSgpIC0gbG9naWNhbFRvcCgpOyB9CisKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIHN0cnVjdCBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgewor
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGg7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIE9wdGlvbmFsPFRyYWlsaW5n
VHJpbW1hYmxlQ29udGVudD4gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ7CisgICAgICAgICAg
ICBPcHRpb25hbDxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlPiBtX2xhc3RSdW5UeXBlOwor
ICAgICAgICAgICAgYm9vbCBtX2xhc3RSdW5DYW5FeHBhbmQgeyBmYWxzZSB9OworCisgICAgICAg
ICAgICBEaXNwbGF5OjpCb3g6OlJlY3QgbV9sb2dpY2FsUmVjdDsKKyAgICAgICAgICAgIExheW91
dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKKworICAgICAgICAgICAgVmVjdG9yPElubGluZVJ1bj4g
bV9pbmxpbmVSdW5zOworICAgICAgICAgICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1ZSB9Owor
ICAgICAgICAgICAgYm9vbCBtX2Nsb3NlZCB7IHRydWUgfTsKKyAgICAgICAgfTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIHN0cnVjdCBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgewotICAgICAg
ICAgICAgTGF5b3V0VW5pdCB3aWR0aDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAg
ICAgICAgfTsKLSAgICAgICAgT3B0aW9uYWw8VHJhaWxpbmdUcmltbWFibGVDb250ZW50PiBtX3Ry
YWlsaW5nVHJpbW1hYmxlQ29udGVudDsKLSAgICAgICAgT3B0aW9uYWw8SW5saW5lUnVuUHJvdmlk
ZXI6OlJ1bjo6VHlwZT4gbV9sYXN0UnVuVHlwZTsKLSAgICAgICAgYm9vbCBtX2xhc3RSdW5DYW5F
eHBhbmQgeyBmYWxzZSB9OworICAgICAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBj
b25zdDsKKyAgICAgICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFzdExpbmUpIGNvbnN0Owor
ICAgICAgICB2b2lkIGFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blBy
b3ZpZGVyOjpSdW4mLCBjb25zdCBMYXlvdXRTaXplJikgY29uc3Q7CisgICAgICAgIHZvaWQgcG9z
dFByb2Nlc3NJbmxpbmVSdW5zKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKKyAgICAgICAgdm9p
ZCBjcmVhdGVGaW5hbFJ1bnMoTGluZSYpIGNvbnN0OworICAgICAgICB2b2lkIHNwbGl0SW5saW5l
UnVuSWZOZWVkZWQoY29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVucyYgc3BsaXRSdW5zKSBjb25z
dDsKKyAgICAgICAgdm9pZCBjb21wdXRlRmxvYXRQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRl
eHQmLCBMaW5lJiwgY29uc3QgQm94JikgY29uc3Q7CisgICAgICAgIHZvaWQgcGxhY2VJbkZsb3dQ
b3NpdGlvbmVkQ2hpbGRyZW4odW5zaWduZWQgZmlyc3RSdW5JbmRleCkgY29uc3Q7CisgICAgICAg
IHZvaWQgYWxpZ25SdW5zKFRleHRBbGlnbk1vZGUsIExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsK
KyAgICAgICAgdm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3Qg
SW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGUgbGFz
dFJ1blR5cGUpIGNvbnN0OworICAgICAgICBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGlu
ZUNvbnRlbnQmLCBjb25zdCBJbmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVk
IGxlbmd0aCwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0OwogCi0gICAgICAg
IERpc3BsYXk6OkJveDo6UmVjdCBtX2xvZ2ljYWxSZWN0OwotICAgICAgICBMYXlvdXRVbml0IG1f
YXZhaWxhYmxlV2lkdGg7CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIHZvaWQganVzdGlm
eVJ1bnMoTGluZUxheW91dDo6TGluZSYpOwogCi0gICAgICAgIFZlY3RvcjxJbmxpbmVSdW4+IG1f
aW5saW5lUnVuczsKLSAgICAgICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1ZSB9OwotICAgICAg
ICBib29sIG1fY2xvc2VkIHsgdHJ1ZSB9OworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2Zvcm1hdHRpbmdDb250ZXh0OworICAgICAgICBJbmxp
bmVGb3JtYXR0aW5nU3RhdGUmIG1fZm9ybWF0dGluZ1N0YXRlOworICAgICAgICBGbG9hdGluZ1N0
YXRlJiBtX2Zsb2F0aW5nU3RhdGU7CisgICAgICAgIGNvbnN0IENvbnRhaW5lciYgbV9mb3JtYXR0
aW5nUm9vdDsKICAgICB9OwotICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZSB7IE5vLCBZZXMgfTsK
IAogICAgIGNsYXNzIEdlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgSGVpZ2h0QW5kTWFyZ2luIGlubGluZUJs
b2NrSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IExheW91dFN0YXRlJiwgY29uc3QgQm94Jik7CiAgICAg
ICAgIHN0YXRpYyBXaWR0aEFuZE1hcmdpbiBpbmxpbmVCbG9ja1dpZHRoQW5kTWFyZ2luKExheW91
dFN0YXRlJiwgY29uc3QgQm94Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFsaWduUnVucyhUZXh0
QWxpZ25Nb2RlLCBMaW5lJiwgSXNMYXN0TGluZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXB1
dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKExpbmUmLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuJiwgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBsYXN0UnVuVHlwZSk7Ci0gICAgICAg
IHN0YXRpYyBMYXlvdXRVbml0IHJ1bldpZHRoKGNvbnN0IElubGluZUNvbnRlbnQmLCBjb25zdCBJ
bmxpbmVJdGVtJiwgSXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgTGF5b3V0VW5p
dCBjb250ZW50TG9naWNhbExlZnQpOyAKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGp1c3RpZnlSdW5zKExpbmUmKTsKICAgICB9OwogCi0gICAgdm9pZCBsYXlvdXRJbmxpbmVD
b250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyJikgY29uc3Q7Ci0gICAgdm9pZCBpbml0aWFs
aXplTmV3TGluZShMaW5lJikgY29uc3Q7Ci0gICAgdm9pZCBjbG9zZUxpbmUoTGluZSYsIElzTGFz
dExpbmUpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kQ29udGVudFRvTGluZShMaW5lJiwgY29uc3Qg
SW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIGNvbnN0IExheW91dFNpemUmKSBjb25zdDsKLSAgICB2
b2lkIHBvc3RQcm9jZXNzSW5saW5lUnVucyhMaW5lJiwgSXNMYXN0TGluZSkgY29uc3Q7Ci0gICAg
dm9pZCBjcmVhdGVGaW5hbFJ1bnMoTGluZSYpIGNvbnN0OwotICAgIHZvaWQgc3BsaXRJbmxpbmVS
dW5JZk5lZWRlZChjb25zdCBJbmxpbmVSdW4mLCBJbmxpbmVSdW5zJiBzcGxpdFJ1bnMpIGNvbnN0
OwotCiAgICAgdm9pZCBsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JikgY29u
c3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhBbmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChj
b25zdCBCb3gmKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5n
KGNvbnN0IElubGluZUNvbnRhaW5lciYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZUhlaWdodEFu
ZE1hcmdpbihjb25zdCBCb3gmKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZE1hcmdp
bihjb25zdCBCb3gmKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVGbG9hdFBvc2l0aW9uKGNvbnN0
IEZsb2F0aW5nQ29udGV4dCYsIExpbmUmLCBjb25zdCBCb3gmKSBjb25zdDsKLSAgICB2b2lkIHBs
YWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpIGNvbnN0
OwogCiAgICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudChJbmxpbmVSdW5Qcm92aWRlciYpIGNv
bnN0OwogICAgIEluc3RyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGluc3RyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGUyNWU1YjJjMjM1MzJkZWU2NzgzYjA5NzgzMjc5YmJh
YmNjZTM3ZTguLmNmNmJkZDA3NDU0Yjc2YTM1OGRjODg4YzkzYTVjNzJjZTFmZTI2YTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC03OCwx
MjggKzc4LDYgQEAgSGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6aW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY28KICAgICByZXR1cm4gY29tcGxpY2F0
ZWRDYXNlcyhsYXlvdXRTdGF0ZSwgbGF5b3V0Qm94KTsKIH0KIAotc3RhdGljIExheW91dFVuaXQg
YWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFsaWduTW9kZSBhbGlnbiwgTGF5b3V0VW5pdCBs
aW5lTG9naWNhbExlZnQsIExheW91dFVuaXQgcmVtYWluaW5nV2lkdGgpCi17Ci0gICAgc3dpdGNo
IChhbGlnbikgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAg
ICAgICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdDsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJp
Z2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQgKyBzdGQ6Om1h
eChyZW1haW5pbmdXaWR0aCwgMF9sdSk7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6
Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAgIHJldHVybiBs
aW5lTG9naWNhbExlZnQgKyBzdGQ6Om1heChyZW1haW5pbmdXaWR0aCAvIDIsIDBfbHUpOwotICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0OwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6anVzdGlmeVJ1bnMoTGluZSYgbGluZSkKLXsKLSAgICBhdXRvJiBpbmxp
bmVSdW5zID0gbGluZS5ydW5zKCk7Ci0gICAgYXV0byYgbGFzdElubGluZVJ1biA9IGlubGluZVJ1
bnMubGFzdCgpOwotCi0gICAgLy8gQWRqdXN0IChmb3JiaWQpIHRyYWlsaW5nIGV4cGFuc2lvbiBm
b3IgdGhlIGxhc3QgdGV4dCBydW4gb24gbGluZS4KLSAgICBhdXRvIGV4cGFuc2lvbkJlaGF2aW9y
ID0gbGFzdElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmJlaGF2aW9yOwotICAgIC8v
IFJlbW92ZSBhbGxvdyBhbmQgYWRkIGZvcmJpZC4KLSAgICBleHBhbnNpb25CZWhhdmlvciBePSBB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uOwotICAgIGV4cGFuc2lvbkJlaGF2aW9yIHw9IEZvcmJpZFRy
YWlsaW5nRXhwYW5zaW9uOwotICAgIGxhc3RJbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHko
KS5iZWhhdmlvciA9IGV4cGFuc2lvbkJlaGF2aW9yOwotCi0gICAgLy8gQ29sbGVjdCBleHBhbnNp
b24gb3Bwb3J0dW5pdGllcyBhbmQganVzdGlmeSB0aGUgcnVucy4KLSAgICBhdXRvIHdpZHRoVG9E
aXN0cmlidXRlID0gbGluZS5hdmFpbGFibGVXaWR0aCgpOwotICAgIGlmICh3aWR0aFRvRGlzdHJp
YnV0ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVu
aXRpZXMgPSAwOwotICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogaW5saW5lUnVucykKLSAgICAg
ICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyArPSBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5p
dHkoKS5jb3VudDsKLQotICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdGllcykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZmxvYXQgZXhwYW5zaW9uID0gd2lkdGhUb0Rpc3RyaWJ1dGUudG9GbG9h
dCgpIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdGllczsKLSAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVk
RXhwYW5zaW9uOwotICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDogaW5saW5lUnVucykgewotICAg
ICAgICBhdXRvIGV4cGFuc2lvbkZvclJ1biA9IGlubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0
eSgpLmNvdW50ICogZXhwYW5zaW9uOwotCi0gICAgICAgIGlubGluZVJ1bi5leHBhbnNpb25PcHBv
cnR1bml0eSgpLmV4cGFuc2lvbiA9IGV4cGFuc2lvbkZvclJ1bjsKLSAgICAgICAgaW5saW5lUnVu
LnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgYWNjdW11bGF0ZWRFeHBh
bnNpb24pOwotICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRoKGlubGluZVJ1bi5sb2dp
Y2FsV2lkdGgoKSArIGV4cGFuc2lvbkZvclJ1bik7Ci0gICAgICAgIGFjY3VtdWxhdGVkRXhwYW5z
aW9uICs9IGV4cGFuc2lvbkZvclJ1bjsKLSAgICB9Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiBs
aW5lLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBydW4sIElubGluZVJ1blByb3ZpZGVy
OjpSdW46OlR5cGUgbGFzdFJ1blR5cGUpCi17Ci0gICAgYXV0byBpc0V4cGFuc2lvbk9wcG9ydHVu
aXR5ID0gW10oYXV0byBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlLCBhdXRvIGxhc3RSdW5Jc1doaXRl
c3BhY2UpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgfHwgKCFjdXJy
ZW50UnVuSXNXaGl0ZXNwYWNlICYmICFsYXN0UnVuSXNXaGl0ZXNwYWNlKTsKLSAgICB9OwotCi0g
ICAgYXV0byBleHBhbnNpb25CZWhhdmlvciA9IFtdKGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVu
aXR5KSB7Ci0gICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gQWxs
b3dUcmFpbGluZ0V4cGFuc2lvbjsKLSAgICAgICAgZXhwYW5zaW9uQmVoYXZpb3IgfD0gaXNBdEV4
cGFuc2lvbk9wcG9ydHVuaXR5ID8gRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiA6IEFsbG93TGVhZGlu
Z0V4cGFuc2lvbjsKLSAgICAgICAgcmV0dXJuIGV4cGFuc2lvbkJlaGF2aW9yOwotICAgIH07Ci0K
LSAgICBhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSA9IGlzRXhwYW5zaW9uT3Bwb3J0dW5p
dHkocnVuLmlzV2hpdGVzcGFjZSgpLCBsYXN0UnVuVHlwZSA9PSBJbmxpbmVSdW5Qcm92aWRlcjo6
UnVuOjpUeXBlOjpXaGl0ZXNwYWNlKTsKLQotICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVSdW4gPSBs
aW5lLnJ1bnMoKS5sYXN0KCk7Ci0gICAgYXV0byYgZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBjdXJy
ZW50SW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCk7Ci0gICAgaWYgKGlzQXRFeHBhbnNp
b25PcHBvcnR1bml0eSkKLSAgICAgICAgKytleHBhbnNpb25PcHBvcnR1bml0eS5jb3VudDsKLQot
ICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5LmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3IoaXNB
dEV4cGFuc2lvbk9wcG9ydHVuaXR5KTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmFsaWduUnVucyhUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgTGluZSYgbGlu
ZSwgIElzTGFzdExpbmUgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGFkanV0ZWRUZXh0QWxpZ25t
ZW50ID0gdGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgPyB0ZXh0QWxpZ24gOiBp
c0xhc3RMaW5lID09IElzTGFzdExpbmU6Ok5vID8gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSA6IFRl
eHRBbGlnbk1vZGU6OkxlZnQ7Ci0gICAgaWYgKGFkanV0ZWRUZXh0QWxpZ25tZW50ID09IFRleHRB
bGlnbk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMobGluZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGxpbmUuY29udGVu
dExvZ2ljYWxMZWZ0KCk7Ci0gICAgYXV0byBhZGp1c3RlZExvZ2ljYWxMZWZ0ID0gYWRqdXN0ZWRM
aW5lTG9naWNhbExlZnQoYWRqdXRlZFRleHRBbGlnbm1lbnQsIGxpbmVMb2dpY2FsTGVmdCwgbGlu
ZS5hdmFpbGFibGVXaWR0aCgpKTsKLSAgICBpZiAoYWRqdXN0ZWRMb2dpY2FsTGVmdCA9PSBsaW5l
TG9naWNhbExlZnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gZGVsdGEgPSBhZGp1c3Rl
ZExvZ2ljYWxMZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0OwotICAgIGZvciAoYXV0byYgaW5saW5lUnVu
IDogbGluZS5ydW5zKCkpCi0gICAgICAgIGlubGluZVJ1bi5zZXRMb2dpY2FsTGVmdChpbmxpbmVS
dW4ubG9naWNhbExlZnQoKSArIGRlbHRhKTsKLX0KLQotTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OnJ1bldpZHRoKGNvbnN0IElubGluZUNvbnRlbnQmIGlubGlu
ZUNvbnRlbnQsIGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBmcm9t
LCB1bnNpZ25lZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSAKLXsKLSAg
ICBMYXlvdXRVbml0IHdpZHRoOwotICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGZyb207Ci0gICAg
YXV0byBpdGVyYXRvciA9IGlubGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0PElubGluZUl0ZW0q
PigmaW5saW5lSXRlbSkpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBhdXRvIGlubGluZUl0
ZW1FbmQgPSBpbmxpbmVDb250ZW50LmVuZCgpOwotI2VuZGlmCi0gICAgd2hpbGUgKGxlbmd0aCkg
ewotICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gaW5saW5lSXRlbUVuZCk7Ci0gICAgICAgIGF1
dG8mIGN1cnJlbnRJbmxpbmVJdGVtID0gKippdGVyYXRvcjsKLSAgICAgICAgYXV0byBlbmRQb3Np
dGlvbiA9IHN0ZDo6bWluPEl0ZW1Qb3NpdGlvbj4oc3RhcnRQb3NpdGlvbiArIGxlbmd0aCwgY3Vy
cmVudElubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5ndGgoKSk7Ci0gICAgICAgIGF1dG8gdGV4
dFdpZHRoID0gVGV4dFV0aWw6OndpZHRoKGN1cnJlbnRJbmxpbmVJdGVtLCBzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbiwgY29udGVudExvZ2ljYWxMZWZ0KTsKLQotICAgICAgICBjb250ZW50TG9n
aWNhbExlZnQgKz0gdGV4dFdpZHRoOwotICAgICAgICB3aWR0aCArPSB0ZXh0V2lkdGg7Ci0gICAg
ICAgIGxlbmd0aCAtPSAoZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKLQotICAgICAgICBz
dGFydFBvc2l0aW9uID0gMDsKLSAgICAgICAgKytpdGVyYXRvcjsKLSAgICB9Ci0gICAgcmV0dXJu
IHdpZHRoOwotfQotCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUxheW91dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM3
NGQyMmFkNjIzNTlhOWM0NzViY2MyNWExMjRhNWY1NzkwYmNhNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQu
Y3BwCkBAIC0wLDAgKzEsNDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUu
aCIKKyNpbmNsdWRlICJJbmxpbmVMaW5lQnJlYWtlci5oIgorI2luY2x1ZGUgIklubGluZVJ1blBy
b3ZpZGVyLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFp
bmVyLmgiCisjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIExheW91dCB7CisKK0lubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
OjpMaW5lTGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKKyAgICA6IG1fZm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQpCisgICAgLCBtX2Zvcm1hdHRpbmdTdGF0ZShtX2Zvcm1hdHRpbmdDb250ZXh0LmZvcm1h
dHRpbmdTdGF0ZSgpKQorICAgICwgbV9mbG9hdGluZ1N0YXRlKG1fZm9ybWF0dGluZ1N0YXRlLmZs
b2F0aW5nU3RhdGUoKSkKKyAgICAsIG1fZm9ybWF0dGluZ1Jvb3QoZG93bmNhc3Q8Q29udGFpbmVy
PihtX2Zvcm1hdHRpbmdDb250ZXh0LnJvb3QoKSkpCit7Cit9CisKK3N0YXRpYyBib29sIGlzVHJp
bW1hYmxlQ29udGVudChjb25zdCBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuJiBydW4pCit7CisgICAg
cmV0dXJuIHJ1bi5jb250ZW50LmlzV2hpdGVzcGFjZSgpICYmIHJ1bi5jb250ZW50LnN0eWxlKCku
Y29sbGFwc2VXaGl0ZVNwYWNlKCk7Cit9CisKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmVMYXlvdXQ6OmxheW91dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUHJv
dmlkZXIpIGNvbnN0Cit7CisgICAgYXV0byYgbGF5b3V0U3RhdGUgPSBtX2Zvcm1hdHRpbmdDb250
ZXh0LmxheW91dFN0YXRlKCk7CisgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0Nv
bnRleHQgeyBtX2Zsb2F0aW5nU3RhdGUgfTsKKworICAgIExpbmUgbGluZTsKKyAgICBpbml0aWFs
aXplTmV3TGluZShsaW5lKTsKKworICAgIElubGluZUxpbmVCcmVha2VyIGxpbmVCcmVha2VyKGxh
eW91dFN0YXRlLCBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVDb250ZW50KCksIGlubGluZVJ1blBy
b3ZpZGVyLnJ1bnMoKSk7CisgICAgd2hpbGUgKGF1dG8gcnVuID0gbGluZUJyZWFrZXIubmV4dFJ1
bihsaW5lLmNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbGluZS5hdmFpbGFibGVXaWR0aCgpLCAhbGlu
ZS5oYXNDb250ZW50KCkpKSB7CisgICAgICAgIGF1dG8gaXNGaXJzdFJ1biA9IHJ1bi0+cG9zaXRp
b24gPT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246OkxpbmVCZWdpbjsKKyAgICAg
ICAgYXV0byBpc0xhc3RSdW4gPSBydW4tPnBvc2l0aW9uID09IElubGluZUxpbmVCcmVha2VyOjpS
dW46OlBvc2l0aW9uOjpMaW5lRW5kOworICAgICAgICBhdXRvIGdlbmVyYXRlc0lubGluZVJ1biA9
IHRydWU7CisKKyAgICAgICAgLy8gUG9zaXRpb24gZmxvYXQgYW5kIGFkanVzdCB0aGUgcnVucyBv
biBsaW5lLgorICAgICAgICBpZiAocnVuLT5jb250ZW50LmlzRmxvYXQoKSkgeworICAgICAgICAg
ICAgYXV0byYgZmxvYXRCb3ggPSBydW4tPmNvbnRlbnQuaW5saW5lSXRlbSgpLmxheW91dEJveCgp
OworICAgICAgICAgICAgY29tcHV0ZUZsb2F0UG9zaXRpb24oZmxvYXRpbmdDb250ZXh0LCBsaW5l
LCBmbG9hdEJveCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nU3RhdGUuYXBwZW5kKGZsb2F0Qm94
KTsKKworICAgICAgICAgICAgYXV0byBmbG9hdEJveFdpZHRoID0gbGF5b3V0U3RhdGUuZGlzcGxh
eUJveEZvckxheW91dEJveChmbG9hdEJveCkubWFyZ2luQm94KCkud2lkdGgoKTsKKyAgICAgICAg
ICAgIC8vIFNocmluayBhdmFpbGJsZSBzcGFjZSBmb3IgY3VycmVudCBsaW5lIGFuZCBtb3ZlIGV4
aXN0aW5nIGlubGluZSBydW5zLgorICAgICAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQ
b3NpdGlvbmVkKCkgPyBsaW5lLmFkanVzdExvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbGlu
ZS5hZGp1c3RMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7CisKKyAgICAgICAgICAgIGdlbmVy
YXRlc0lubGluZVJ1biA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gMS4gSW5pdGlh
bGl6ZSBuZXcgbGluZSBpZiBuZWVkZWQuCisgICAgICAgIC8vIDIuIEFwcGVuZCBpbmxpbmUgcnVu
IHVubGVzcyBpdCBpcyBza2lwcGVkLgorICAgICAgICAvLyAzLiBDbG9zZSBjdXJyZW50IGxpbmUg
aWYgbmVlZGVkLgorICAgICAgICBpZiAoaXNGaXJzdFJ1bikgeworICAgICAgICAgICAgLy8gV2hl
biB0aGUgZmlyc3QgcnVuIGRvZXMgbm90IGdlbmVyYXRlIGFuIGFjdHVhbCBpbmxpbmUgcnVuLCB0
aGUgbmV4dCBydW4gY29tZXMgaW4gZmlyc3QtcnVuIGFzIHdlbGwuCisgICAgICAgICAgICAvLyBO
byBuZWVkIHRvIHNwZW5kIHRpbWUgb24gY2xvc2luZy9pbml0aWFsaXppbmcuCisgICAgICAgICAg
ICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgICAgIGlmICghZ2VuZXJhdGVz
SW5saW5lUnVuIHx8IGlzVHJpbW1hYmxlQ29udGVudCgqcnVuKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gUHJldmlvdXMgcnVuIGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5lIGVuZC4g
QWRqdXN0IHRoZSBsaW5lIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgICAgIGlmICghbGluZS5p
c0Nsb3NlZCgpKQorICAgICAgICAgICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGlu
ZTo6Tm8pOworICAgICAgICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGdlbmVyYXRlc0lubGluZVJ1bikgewor
ICAgICAgICAgICAgYXV0byB3aWR0aCA9IHJ1bi0+d2lkdGg7CisgICAgICAgICAgICBhdXRvIGhl
aWdodCA9IHJ1bi0+Y29udGVudC5pc1RleHQoKSA/IExheW91dFVuaXQobV9mb3JtYXR0aW5nUm9v
dC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpKSA6IGxheW91dFN0YXRlLmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3gocnVuLT5jb250ZW50LmlubGluZUl0ZW0oKS5sYXlvdXRCb3goKSkuaGVpZ2h0
KCk7IAorICAgICAgICAgICAgYXBwZW5kQ29udGVudFRvTGluZShsaW5lLCBydW4tPmNvbnRlbnQs
IHsgd2lkdGgsIGhlaWdodCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0xhc3RSdW4p
CisgICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGluZTo6Tm8pOworICAgIH0KKwor
ICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpZZXMpOworfQorCit2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0Ojppbml0aWFsaXplTmV3TGluZShMaW5lJiBsaW5l
KSBjb25zdAoreworICAgIGF1dG8mIGZvcm1hdHRpbmdSb290RGlzcGxheUJveCA9IG1fZm9ybWF0
dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KG1fZm9ybWF0
dGluZ1Jvb3QpOworCisgICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBmb3JtYXR0aW5nUm9vdERp
c3BsYXlCb3guY29udGVudEJveExlZnQoKTsKKyAgICBhdXRvIGxpbmVMb2dpY2FsVG9wID0gbGlu
ZS5pc0ZpcnN0TGluZSgpID8gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRCb3hUb3Ao
KSA6IGxpbmUubG9naWNhbEJvdHRvbSgpOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBmb3Jt
YXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCk7CisKKyAgICAvLyBDaGVjayBm
b3IgaW50cnVkaW5nIGZsb2F0cyBhbmQgYWRqdXN0IGxvZ2ljYWwgbGVmdC9hdmFpbGFibGUgd2lk
dGggZm9yIHRoaXMgbGluZSBhY2NvcmRpbmdseS4KKyAgICBpZiAoIW1fZmxvYXRpbmdTdGF0ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0gbV9mbG9hdGluZ1N0
YXRlLmNvbnN0cmFpbnRzKHsgbGluZUxvZ2ljYWxUb3AgfSwgbV9mb3JtYXR0aW5nUm9vdCk7Cisg
ICAgICAgIC8vIENoZWNrIGlmIHRoZXNlIGNvbnN0cmFpbnRzIGFjdHVhbGx5IHB1dCBsaW1pdGF0
aW9uIG9uIHRoZSBsaW5lLgorICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0ICYmICpm
bG9hdENvbnN0cmFpbnRzLmxlZnQgPD0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRC
b3hMZWZ0KCkpCisgICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRzLmxlZnQgPSB7IH07CisKKyAg
ICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQgJiYgKmZsb2F0Q29uc3RyYWludHMucmln
aHQgPj0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRCb3hSaWdodCgpKQorICAgICAg
ICAgICAgZmxvYXRDb25zdHJhaW50cy5yaWdodCA9IHsgfTsKKworICAgICAgICBpZiAoZmxvYXRD
b25zdHJhaW50cy5sZWZ0ICYmIGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKKyAgICAgICAgICAg
IEFTU0VSVCgqZmxvYXRDb25zdHJhaW50cy5sZWZ0IDwgKmZsb2F0Q29uc3RyYWludHMucmlnaHQp
OworICAgICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSAqZmxvYXRDb25zdHJhaW50cy5yaWdodCAt
ICpmbG9hdENvbnN0cmFpbnRzLmxlZnQ7CisgICAgICAgICAgICBsaW5lTG9naWNhbExlZnQgPSAq
ZmxvYXRDb25zdHJhaW50cy5sZWZ0OworICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWlu
dHMubGVmdCkgeworICAgICAgICAgICAgQVNTRVJUKCpmbG9hdENvbnN0cmFpbnRzLmxlZnQgPiBs
aW5lTG9naWNhbExlZnQpOworICAgICAgICAgICAgYXZhaWxhYmxlV2lkdGggLT0gKCpmbG9hdENv
bnN0cmFpbnRzLmxlZnQgLSBsaW5lTG9naWNhbExlZnQpOworICAgICAgICAgICAgbGluZUxvZ2lj
YWxMZWZ0ID0gKmZsb2F0Q29uc3RyYWludHMubGVmdDsKKyAgICAgICAgfSBlbHNlIGlmIChmbG9h
dENvbnN0cmFpbnRzLnJpZ2h0KSB7CisgICAgICAgICAgICBBU1NFUlQoKmZsb2F0Q29uc3RyYWlu
dHMucmlnaHQgPiBsaW5lTG9naWNhbExlZnQpOworICAgICAgICAgICAgYXZhaWxhYmxlV2lkdGgg
PSAqZmxvYXRDb25zdHJhaW50cy5yaWdodCAtIGxpbmVMb2dpY2FsTGVmdDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGxpbmUuaW5pdCh7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3Ag
fSwgYXZhaWxhYmxlV2lkdGgsIG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5jb21wdXRlZExpbmVI
ZWlnaHQoKSk7Cit9CisKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6
OnNwbGl0SW5saW5lUnVuSWZOZWVkZWQoY29uc3QgSW5saW5lUnVuJiBpbmxpbmVSdW4sIElubGlu
ZVJ1bnMmIHNwbGl0UnVucykgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5saW5lUnVuLnRleHRDb250
ZXh0KCkpOworICAgIEFTU0VSVChpbmxpbmVSdW4ub3ZlcmxhcHNNdWx0aXBsZUlubGluZUl0ZW1z
KCkpOworICAgIC8vIEluIGNlcnRhaW4gY2FzZXMsIGEgcnVuIGNhbiBvdmVybGFwIG11bHRpcGxl
IGlubGluZSBlbGVtZW50cyBsaWtlIHRoaXM6CisgICAgLy8gPHNwYW4+bm9ybWFsIHRleHQgY29u
dGVudDwvc3Bhbj48c3BhbiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyBsZWZ0OiAxMHB4OyI+
YnV0IHRoaXMgb25lIG5lZWRzIGEgZGVkaWNhdGVkIHJ1bjwvc3Bhbj48c3Bhbj5lbmQgb2YgdGV4
dDwvc3Bhbj4KKyAgICAvLyBUaGUgY29udGVudCBhYm92ZSBnZW5lcmF0ZXMgb25lIGxvbmcgcnVu
IDxub3JtYWwgdGV4dCBjb250ZW50YnV0IHRoaXMgb25lIG5lZWRzIGRlZGljYXRlZCBydW5lbmQg
b2YgdGV4dD4KKyAgICAvLyBIb3dldmVyLCBzaW5jZSB0aGUgbWlkZGxlIHJ1biBpcyBwb3NpdGlv
bmVkLCBpdCBuZWVkcyB0byBiZSBtb3ZlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHJlc3Qgb2Yg
dGhlIGNvbnRlbnQsIGhlbmNlIGl0IG5lZWRzIGEgZGVkaWNhdGVkIGlubGluZSBydW4uCisKKyAg
ICAvLyAxLiBTdGFydCB3aXRoIHRoZSBmaXJzdCBpbmxpbmUgaXRlbSAoZWxlbWVudCkgYW5kIHRy
YXZlcnMgdGhlIGxpc3QgdW50aWwKKyAgICAvLyAyLiBlaXRoZXIgZmluZCBhbiBpbmxpbmUgaXRl
bSB0aGF0IG5lZWRzIGEgZGVkaWNhdGVkIHJ1biBvciB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBy
dW4KKyAgICAvLyAzLiBDcmVhdGUgZGVkaWNhdGUgaW5saW5lIHJ1bnMuCisgICAgYXV0byYgaW5s
aW5lQ29udGVudCA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZUNvbnRlbnQoKTsKKyAgICBhdXRv
IGNvbnRlbnRTdGFydCA9IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpOworICAgIGF1dG8gc3RhcnRQ
b3NpdGlvbiA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpOworICAgIGF1dG8gcmVt
YW5pbmdMZW5ndGggPSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCk7CisKKyAgICBz
dHJ1Y3QgVW5jb21taXR0ZWQgeworICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBmaXJzdElubGlu
ZUl0ZW0geyBudWxscHRyIH07CisgICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGxhc3RJbmxpbmVJ
dGVtIHsgbnVsbHB0ciB9OworICAgICAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07CisgICAgfTsK
KyAgICBPcHRpb25hbDxVbmNvbW1pdHRlZD4gdW5jb21taXR0ZWQ7CisKKyAgICBhdXRvIGNvbW1p
dCA9IFsmXSB7CisgICAgICAgIGlmICghdW5jb21taXR0ZWQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgY29udGVudFN0YXJ0ICs9IHVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0t
Pm5vbkJyZWFrYWJsZVN0YXJ0KCk7CisKKyAgICAgICAgYXV0byBydW5XaWR0aCA9IHRoaXMtPnJ1
bldpZHRoKGlubGluZUNvbnRlbnQsICp1bmNvbW1pdHRlZC0+Zmlyc3RJbmxpbmVJdGVtLCBzdGFy
dFBvc2l0aW9uLCB1bmNvbW1pdHRlZC0+bGVuZ3RoLCBjb250ZW50U3RhcnQpOworICAgICAgICBh
dXRvIHJ1biA9IElubGluZVJ1biB7IHsgaW5saW5lUnVuLmxvZ2ljYWxUb3AoKSwgY29udGVudFN0
YXJ0LCBydW5XaWR0aCwgaW5saW5lUnVuLmxvZ2ljYWxIZWlnaHQoKSB9LCAqdW5jb21taXR0ZWQt
PmZpcnN0SW5saW5lSXRlbSB9OworICAgICAgICBydW4uc2V0VGV4dENvbnRleHQoeyBzdGFydFBv
c2l0aW9uLCB1bmNvbW1pdHRlZC0+bGVuZ3RoIH0pOworICAgICAgICBzcGxpdFJ1bnMuYXBwZW5k
KHJ1bik7CisKKyAgICAgICAgY29udGVudFN0YXJ0ICs9IHJ1bldpZHRoICsgdW5jb21taXR0ZWQt
Pmxhc3RJbmxpbmVJdGVtLT5ub25CcmVha2FibGVFbmQoKTsKKworICAgICAgICBzdGFydFBvc2l0
aW9uID0gMDsKKyAgICAgICAgdW5jb21taXR0ZWQgPSB7IH07CisgICAgfTsKKworICAgIGZvciAo
YXV0byBpdGVyYXRvciA9IGlubGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0PElubGluZUl0ZW0q
PigmaW5saW5lUnVuLmlubGluZUl0ZW0oKSkpOyBpdGVyYXRvciAhPSBpbmxpbmVDb250ZW50LmVu
ZCgpICYmIHJlbWFuaW5nTGVuZ3RoID4gMDsgKytpdGVyYXRvcikgeworICAgICAgICBhdXRvJiBp
bmxpbmVJdGVtID0gKippdGVyYXRvcjsKKworICAgICAgICAvLyBTa2lwIGFsbCBub24taW5mbG93
IGJveGVzIChmbG9hdHMsIG91dC1vZi1mbG93IHBvc2l0aW9uZWQgZWxlbWVudHMpLiBUaGV5IGRv
bid0IHBhcnRpY2lwYXRlIGluIHRoZSBpbmxpbmUgcnVuIGNvbnRleHQuCisgICAgICAgIGlmICgh
aW5saW5lSXRlbS5sYXlvdXRCb3goKS5pc0luRmxvdygpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgYXV0byBjdXJyZW50TGVuZ3RoID0gWyZdIHsKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1pbihyZW1hbmluZ0xlbmd0aCwgaW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0
aCgpIC0gc3RhcnRQb3NpdGlvbik7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gMS4gQnJlYWsg
YmVmb3JlL2FmdGVyIC0+IHJlcXVpcmVzIGRlZGljYXRlZCBydW4gLT4gY29tbWl0IHdoYXQgd2Un
dmUgZ290IHNvIGZhciBhbmQgYWxzbyBjb21taXQgdGhlIGN1cnJlbnQgaW5saW5lIGVsZW1lbnQg
YXMgYSBzZXBhcmF0ZSBpbmxpbmUgcnVuLgorICAgICAgICAvLyAyLiBCcmVhayBhdCB0aGUgYmVn
aW5uaW5nIG9mIHRoZSBpbmxpbmUgZWxlbWVudCAtPiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28g
ZmFyLiBDdXJyZW50IGVsZW1lbnQgYmVjb21lcyB0aGUgZmlyc3QgdW5jb21taXR0ZWQuCisgICAg
ICAgIC8vIDMuIEJyZWFrIGF0IHRoZSBlbmQgb2YgdGhlIGlubGluZSBlbGVtZW50IC0+IGNvbW1p
dCB3aGF0IHdlJ3ZlIGdvdCBzbyBmYXIgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGVsZW1lbnQuCisg
ICAgICAgIC8vIDQuIElubGluZSBlbGVtZW50IGRvZXMgbm90IHJlcXVpcmUgcnVuIGJyZWFraW5n
IC0+IGFkZCBjdXJyZW50IGlubGluZSBlbGVtZW50IHRvIHVuY29tbWl0dGVkLiBKdW1wIHRvIHRo
ZSBuZXh0IGVsZW1lbnQuCisgICAgICAgIGF1dG8gZGV0YWNoaW5nUnVsZXMgPSBpbmxpbmVJdGVt
LmRldGFjaGluZ1J1bGVzKCk7CisKKyAgICAgICAgLy8gIzEKKyAgICAgICAgaWYgKGRldGFjaGlu
Z1J1bGVzLmNvbnRhaW5zQWxsKHsgSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdFN0
YXJ0LCBJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0RW5kIH0pKSB7CisgICAgICAg
ICAgICBjb21taXQoKTsKKyAgICAgICAgICAgIGF1dG8gY29udGVudExlbmd0aCA9IGN1cnJlbnRM
ZW5ndGgoKTsKKyAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5jb21taXR0ZWQgeyAmaW5saW5l
SXRlbSwgJmlubGluZUl0ZW0sIGNvbnRlbnRMZW5ndGggfTsKKyAgICAgICAgICAgIHJlbWFuaW5n
TGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7CisgICAgICAgICAgICBjb21taXQoKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gIzIKKyAgICAgICAgaWYgKGRl
dGFjaGluZ1J1bGVzLmNvbnRhaW5zKElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRT
dGFydCkpCisgICAgICAgICAgICBjb21taXQoKTsKKworICAgICAgICAvLyBBZGQgY3VycmVudCBp
bmxpbmUgaXRlbSB0byB1bmNvbW1pdHRlZC4KKyAgICAgICAgLy8gIzMgYW5kICM0CisgICAgICAg
IGF1dG8gY29udGVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGgoKTsKKyAgICAgICAgaWYgKCF1bmNv
bW1pdHRlZCkKKyAgICAgICAgICAgIHVuY29tbWl0dGVkID0gVW5jb21taXR0ZWQgeyAmaW5saW5l
SXRlbSwgJmlubGluZUl0ZW0sIDAgfTsKKyAgICAgICAgdW5jb21taXR0ZWQtPmxlbmd0aCArPSBj
b250ZW50TGVuZ3RoOworICAgICAgICB1bmNvbW1pdHRlZC0+bGFzdElubGluZUl0ZW0gPSAmaW5s
aW5lSXRlbTsKKyAgICAgICAgcmVtYW5pbmdMZW5ndGggLT0gY29udGVudExlbmd0aDsKKworICAg
ICAgICAvLyAjMworICAgICAgICBpZiAoZGV0YWNoaW5nUnVsZXMuY29udGFpbnMoSW5saW5lSXRl
bTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdEVuZCkpCisgICAgICAgICAgICBjb21taXQoKTsKKyAg
ICB9CisgICAgLy8gRWl0aGVyIGFsbCBpbmxpbmUgZWxlbWVudHMgbmVlZGVkIGRlZGljYXRlZCBy
dW5zIG9yIG5laXRoZXIgb2YgdGhlbS4KKyAgICBpZiAoIXJlbWFuaW5nTGVuZ3RoIHx8IHJlbWFu
aW5nTGVuZ3RoID09IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY29tbWl0KCk7Cit9CisKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OmNyZWF0ZUZpbmFsUnVucyhMaW5lJiBsaW5lKSBjb25zdAoreworICAg
IGZvciAoYXV0byYgaW5saW5lUnVuIDogbGluZS5ydW5zKCkpIHsKKyAgICAgICAgaWYgKGlubGlu
ZVJ1bi5vdmVybGFwc011bHRpcGxlSW5saW5lSXRlbXMoKSkgeworICAgICAgICAgICAgSW5saW5l
UnVucyBzcGxpdFJ1bnM7CisgICAgICAgICAgICBzcGxpdElubGluZVJ1bklmTmVlZGVkKGlubGlu
ZVJ1biwgc3BsaXRSdW5zKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgc3BsaXRSdW4gOiBzcGxp
dFJ1bnMpCisgICAgICAgICAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBwZW5kSW5saW5lUnVu
KHNwbGl0UnVuKTsKKworICAgICAgICAgICAgaWYgKCFzcGxpdFJ1bnMuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBmaW5hbFJ1
biA9IFsmXSB7CisgICAgICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gaW5saW5lUnVuLmlubGlu
ZUl0ZW0oKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVJdGVtLmRldGFjaGluZ1J1bGVzKCkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVSdW47CisKKyAgICAgICAgICAg
IElubGluZVJ1biBhZGp1c3RlZFJ1biA9IGlubGluZVJ1bjsKKyAgICAgICAgICAgIGF1dG8gd2lk
dGggPSBpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkgLSBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZVN0
YXJ0KCkgLSBpbmxpbmVJdGVtLm5vbkJyZWFrYWJsZUVuZCgpOworICAgICAgICAgICAgYWRqdXN0
ZWRSdW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgKyBpbmxpbmVJdGVt
Lm5vbkJyZWFrYWJsZVN0YXJ0KCkpOworICAgICAgICAgICAgYWRqdXN0ZWRSdW4uc2V0TG9naWNh
bFdpZHRoKHdpZHRoKTsKKyAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZFJ1bjsKKyAgICAgICAg
fTsKKworICAgICAgICBtX2Zvcm1hdHRpbmdTdGF0ZS5hcHBlbmRJbmxpbmVSdW4oZmluYWxSdW4o
KSk7CisgICAgfQorfQorCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
Ojpwb3N0UHJvY2Vzc0lubGluZVJ1bnMoTGluZSYgbGluZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5l
KSBjb25zdAoreworICAgIGFsaWduUnVucyhtX2Zvcm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFs
aWduKCksIGxpbmUsIGlzTGFzdExpbmUpOworICAgIGF1dG8gZmlyc3RSdW5JbmRleCA9IG1fZm9y
bWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKS5zaXplKCk7CisgICAgY3JlYXRlRmluYWxSdW5zKGxp
bmUpOworCisgICAgcGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4oZmlyc3RSdW5JbmRleCk7
Cit9CisKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNsb3NlTGlu
ZShMaW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlzTGFzdExpbmUpIGNvbnN0Cit7CisgICAgbGluZS5j
bG9zZSgpOworICAgIGlmICghbGluZS5oYXNDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHBvc3RQcm9jZXNzSW5saW5lUnVucyhsaW5lLCBpc0xhc3RMaW5lKTsKK30KKwordm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6YXBwZW5kQ29udGVudFRvTGluZShM
aW5lJiBsaW5lLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBydW4sIGNvbnN0IExheW91
dFNpemUmIHJ1blNpemUpIGNvbnN0Cit7CisgICAgYXV0byBsYXN0UnVuVHlwZSA9IGxpbmUubGFz
dFJ1blR5cGUoKTsKKyAgICBsaW5lLmFwcGVuZENvbnRlbnQocnVuLCBydW5TaXplKTsKKworICAg
IGlmIChtX2Zvcm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9k
ZTo6SnVzdGlmeSkKKyAgICAgICAgY29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMobGluZSwg
cnVuLCBsYXN0UnVuVHlwZS52YWx1ZU9yKElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6Ok5v
bldoaXRlc3BhY2UpKTsKK30KKwordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxh
eW91dDo6Y29tcHV0ZUZsb2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGlu
Z0NvbnRleHQsIExpbmUmIGxpbmUsIGNvbnN0IEJveCYgZmxvYXRCb3gpIGNvbnN0Cit7CisgICAg
YXV0byYgbGF5b3V0U3RhdGUgPSBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7Cisg
ICAgQVNTRVJUKGxheW91dFN0YXRlLmhhc0Rpc3BsYXlCb3goZmxvYXRCb3gpKTsKKyAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChmbG9hdEJv
eCk7CisKKyAgICAvLyBTZXQgc3RhdGljIHBvc2l0aW9uIGZpcnN0LgorICAgIGRpc3BsYXlCb3gu
c2V0VG9wTGVmdCh7IGxpbmUuY29udGVudExvZ2ljYWxSaWdodCgpLCBsaW5lLmxvZ2ljYWxUb3Ao
KSB9KTsKKyAgICAvLyBGbG9hdCBpdC4KKyAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoZmxvYXRp
bmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQoZmxvYXRCb3gpKTsKK30KKwordm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRy
ZW4odW5zaWduZWQgZmlzdFJ1bkluZGV4KSBjb25zdAoreworICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOworICAgIGF1dG8mIGlubGluZVJ1
bnMgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCk7CisgICAgZm9yIChhdXRvIHJ1bklu
ZGV4ID0gZmlzdFJ1bkluZGV4OyBydW5JbmRleCA8IGlubGluZVJ1bnMuc2l6ZSgpOyArK3J1bklu
ZGV4KSB7CisgICAgICAgIGF1dG8mIGlubGluZVJ1biA9IGlubGluZVJ1bnNbcnVuSW5kZXhdOwor
CisgICAgICAgIGF1dG8gcG9zaXRpb25PZmZzZXQgPSBbJl0oYXV0byYgbGF5b3V0Qm94KSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBmaWd1cmUgb3V0IHdoZXRoZXIgaW4tZmxvdyBv
ZmZzZXQgc2hvdWxkIHN0aWNrLiBUaGlzIG1pZ2h0IHZlcnkgd2VsbCBiZSB0ZW1wb3JhcnkuCisg
ICAgICAgICAgICBPcHRpb25hbDxMYXlvdXRTaXplPiBvZmZzZXQ7CisgICAgICAgICAgICBmb3Ig
KGF1dG8qIGJveCA9ICZsYXlvdXRCb3g7IGJveCAhPSAmbV9mb3JtYXR0aW5nUm9vdDsgYm94ID0g
Ym94LT5wYXJlbnQoKSkgeworICAgICAgICAgICAgICAgIGlmICghYm94LT5pc0luRmxvd1Bvc2l0
aW9uZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gb2Zmc2V0LnZhbHVlT3IoTGF5b3V0U2l6ZSgpKSArIEdlb21ldHJ5OjppbkZsb3dQ
b3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0U3RhdGUsICpib3gpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAo
YXV0byBvZmZzZXQgPSBwb3NpdGlvbk9mZnNldChpbmxpbmVSdW4uaW5saW5lSXRlbSgpLmxheW91
dEJveCgpKSkgeworICAgICAgICAgICAgaW5saW5lUnVuLm1vdmVWZXJ0aWNhbGx5KG9mZnNldC0+
aGVpZ2h0KCkpOworICAgICAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0
LT53aWR0aCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIExheW91dFVuaXQgYWRq
dXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFsaWduTW9kZSBhbGlnbiwgTGF5b3V0VW5pdCBsaW5l
TG9naWNhbExlZnQsIExheW91dFVuaXQgcmVtYWluaW5nV2lkdGgpCit7CisgICAgc3dpdGNoIChh
bGlnbikgeworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdExlZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAg
ICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdDsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0
OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6CisgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpFbmQ6CisgICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQgKyBzdGQ6Om1heChy
ZW1haW5pbmdXaWR0aCwgMF9sdSk7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Cisg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAgIHJldHVybiBsaW5l
TG9naWNhbExlZnQgKyBzdGQ6Om1heChyZW1haW5pbmdXaWR0aCAvIDIsIDBfbHUpOworICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gbGluZUxvZ2ljYWxMZWZ0OworfQorCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lTGF5b3V0OjpqdXN0aWZ5UnVucyhMaW5lJiBsaW5lKQoreworICAgIGF1dG8mIGlubGlu
ZVJ1bnMgPSBsaW5lLnJ1bnMoKTsKKyAgICBhdXRvJiBsYXN0SW5saW5lUnVuID0gaW5saW5lUnVu
cy5sYXN0KCk7CisKKyAgICAvLyBBZGp1c3QgKGZvcmJpZCkgdHJhaWxpbmcgZXhwYW5zaW9uIGZv
ciB0aGUgbGFzdCB0ZXh0IHJ1biBvbiBsaW5lLgorICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3Ig
PSBsYXN0SW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuYmVoYXZpb3I7CisgICAgLy8g
UmVtb3ZlIGFsbG93IGFuZCBhZGQgZm9yYmlkLgorICAgIGV4cGFuc2lvbkJlaGF2aW9yIF49IEFs
bG93VHJhaWxpbmdFeHBhbnNpb247CisgICAgZXhwYW5zaW9uQmVoYXZpb3IgfD0gRm9yYmlkVHJh
aWxpbmdFeHBhbnNpb247CisgICAgbGFzdElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgp
LmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3I7CisKKyAgICAvLyBDb2xsZWN0IGV4cGFuc2lv
biBvcHBvcnR1bml0aWVzIGFuZCBqdXN0aWZ5IHRoZSBydW5zLgorICAgIGF1dG8gd2lkdGhUb0Rp
c3RyaWJ1dGUgPSBsaW5lLmF2YWlsYWJsZVdpZHRoKCk7CisgICAgaWYgKHdpZHRoVG9EaXN0cmli
dXRlIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZXhwYW5zaW9uT3Bwb3J0dW5p
dGllcyA9IDA7CisgICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBpbmxpbmVSdW5zKQorICAgICAg
ICBleHBhbnNpb25PcHBvcnR1bml0aWVzICs9IGlubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0
eSgpLmNvdW50OworCisgICAgaWYgKCFleHBhbnNpb25PcHBvcnR1bml0aWVzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmbG9hdCBleHBhbnNpb24gPSB3aWR0aFRvRGlzdHJpYnV0ZS50b0Zsb2F0
KCkgLyBleHBhbnNpb25PcHBvcnR1bml0aWVzOworICAgIExheW91dFVuaXQgYWNjdW11bGF0ZWRF
eHBhbnNpb247CisgICAgZm9yIChhdXRvJiBpbmxpbmVSdW4gOiBpbmxpbmVSdW5zKSB7CisgICAg
ICAgIGF1dG8gZXhwYW5zaW9uRm9yUnVuID0gaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5
KCkuY291bnQgKiBleHBhbnNpb247CisKKyAgICAgICAgaW5saW5lUnVuLmV4cGFuc2lvbk9wcG9y
dHVuaXR5KCkuZXhwYW5zaW9uID0gZXhwYW5zaW9uRm9yUnVuOworICAgICAgICBpbmxpbmVSdW4u
c2V0TG9naWNhbExlZnQoaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgKyBhY2N1bXVsYXRlZEV4cGFu
c2lvbik7CisgICAgICAgIGlubGluZVJ1bi5zZXRMb2dpY2FsV2lkdGgoaW5saW5lUnVuLmxvZ2lj
YWxXaWR0aCgpICsgZXhwYW5zaW9uRm9yUnVuKTsKKyAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNp
b24gKz0gZXhwYW5zaW9uRm9yUnVuOworICAgIH0KK30KKwordm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoTGluZSYg
bGluZSwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgcnVuLCBJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuOjpUeXBlIGxhc3RSdW5UeXBlKSBjb25zdAoreworICAgIGF1dG8gaXNFeHBhbnNpb25P
cHBvcnR1bml0eSA9IFtdKGF1dG8gY3VycmVudFJ1bklzV2hpdGVzcGFjZSwgYXV0byBsYXN0UnVu
SXNXaGl0ZXNwYWNlKSB7CisgICAgICAgIHJldHVybiBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlIHx8
ICghY3VycmVudFJ1bklzV2hpdGVzcGFjZSAmJiAhbGFzdFJ1bklzV2hpdGVzcGFjZSk7CisgICAg
fTsKKworICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBbXShhdXRvIGlzQXRFeHBhbnNpb25P
cHBvcnR1bml0eSkgeworICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlv
ciA9IEFsbG93VHJhaWxpbmdFeHBhbnNpb247CisgICAgICAgIGV4cGFuc2lvbkJlaGF2aW9yIHw9
IGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSA/IEZvcmJpZExlYWRpbmdFeHBhbnNpb24gOiBBbGxv
d0xlYWRpbmdFeHBhbnNpb247CisgICAgICAgIHJldHVybiBleHBhbnNpb25CZWhhdmlvcjsKKyAg
ICB9OworCisgICAgYXV0byBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBpc0V4cGFuc2lvbk9w
cG9ydHVuaXR5KHJ1bi5pc1doaXRlc3BhY2UoKSwgbGFzdFJ1blR5cGUgPT0gSW5saW5lUnVuUHJv
dmlkZXI6OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSk7CisKKyAgICBhdXRvJiBjdXJyZW50SW5saW5l
UnVuID0gbGluZS5ydW5zKCkubGFzdCgpOworICAgIGF1dG8mIGV4cGFuc2lvbk9wcG9ydHVuaXR5
ID0gY3VycmVudElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpOworICAgIGlmIChpc0F0
RXhwYW5zaW9uT3Bwb3J0dW5pdHkpCisgICAgICAgICsrZXhwYW5zaW9uT3Bwb3J0dW5pdHkuY291
bnQ7CisKKyAgICBleHBhbnNpb25PcHBvcnR1bml0eS5iZWhhdmlvciA9IGV4cGFuc2lvbkJlaGF2
aW9yKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSk7Cit9CisKK3ZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFsaWduUnVucyhUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwg
TGluZSYgbGluZSwgIElzTGFzdExpbmUgaXNMYXN0TGluZSkgY29uc3QKK3sKKyAgICBhdXRvIGFk
anV0ZWRUZXh0QWxpZ25tZW50ID0gdGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkg
PyB0ZXh0QWxpZ24gOiBpc0xhc3RMaW5lID09IElzTGFzdExpbmU6Ok5vID8gVGV4dEFsaWduTW9k
ZTo6SnVzdGlmeSA6IFRleHRBbGlnbk1vZGU6OkxlZnQ7CisgICAgaWYgKGFkanV0ZWRUZXh0QWxp
Z25tZW50ID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKKyAgICAgICAganVzdGlmeVJ1bnMo
bGluZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGxpbmVMb2dpY2FsTGVm
dCA9IGxpbmUuY29udGVudExvZ2ljYWxMZWZ0KCk7CisgICAgYXV0byBhZGp1c3RlZExvZ2ljYWxM
ZWZ0ID0gYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoYWRqdXRlZFRleHRBbGlnbm1lbnQsIGxpbmVM
b2dpY2FsTGVmdCwgbGluZS5hdmFpbGFibGVXaWR0aCgpKTsKKyAgICBpZiAoYWRqdXN0ZWRMb2dp
Y2FsTGVmdCA9PSBsaW5lTG9naWNhbExlZnQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
ZGVsdGEgPSBhZGp1c3RlZExvZ2ljYWxMZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0OworICAgIGZvciAo
YXV0byYgaW5saW5lUnVuIDogbGluZS5ydW5zKCkpCisgICAgICAgIGlubGluZVJ1bi5zZXRMb2dp
Y2FsTGVmdChpbmxpbmVSdW4ubG9naWNhbExlZnQoKSArIGRlbHRhKTsKK30KKworTGF5b3V0VW5p
dCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6cnVuV2lkdGgoY29uc3QgSW5s
aW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwg
SXRlbVBvc2l0aW9uIGZyb20sIHVuc2lnbmVkIGxlbmd0aCwgTGF5b3V0VW5pdCBjb250ZW50TG9n
aWNhbExlZnQpIGNvbnN0IAoreworICAgIExheW91dFVuaXQgd2lkdGg7CisgICAgYXV0byBzdGFy
dFBvc2l0aW9uID0gZnJvbTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gaW5saW5lQ29udGVudC5maW5k
KGNvbnN0X2Nhc3Q8SW5saW5lSXRlbSo+KCZpbmxpbmVJdGVtKSk7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIGF1dG8gaW5saW5lSXRlbUVuZCA9IGlubGluZUNvbnRlbnQuZW5kKCk7CisjZW5k
aWYKKyAgICB3aGlsZSAobGVuZ3RoKSB7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBpbmxp
bmVJdGVtRW5kKTsKKyAgICAgICAgYXV0byYgY3VycmVudElubGluZUl0ZW0gPSAqKml0ZXJhdG9y
OworICAgICAgICBhdXRvIGVuZFBvc2l0aW9uID0gc3RkOjptaW48SXRlbVBvc2l0aW9uPihzdGFy
dFBvc2l0aW9uICsgbGVuZ3RoLCBjdXJyZW50SW5saW5lSXRlbS50ZXh0Q29udGVudCgpLmxlbmd0
aCgpKTsKKyAgICAgICAgYXV0byB0ZXh0V2lkdGggPSBUZXh0VXRpbDo6d2lkdGgoY3VycmVudElu
bGluZUl0ZW0sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjb250ZW50TG9naWNhbExlZnQp
OworCisgICAgICAgIGNvbnRlbnRMb2dpY2FsTGVmdCArPSB0ZXh0V2lkdGg7CisgICAgICAgIHdp
ZHRoICs9IHRleHRXaWR0aDsKKyAgICAgICAgbGVuZ3RoIC09IChlbmRQb3NpdGlvbiAtIHN0YXJ0
UG9zaXRpb24pOworCisgICAgICAgIHN0YXJ0UG9zaXRpb24gPSAwOworICAgICAgICArK2l0ZXJh
dG9yOworICAgIH0KKyAgICByZXR1cm4gd2lkdGg7Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmUuY3BwCmluZGV4IGIx
MjczZDFiMWM1ZmM2OWZmOWFiZTA4MDU5ZWM0NjU3NzcyNTU2MjIuLmU2YTRhNmJkYmZlOWFkZmI4
MzVjZWY4YjYwMmJhMTk2YWQ1ZjMzMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0xpbmUuY3BwCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFp
bGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVpZ2h0KQordm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6TGluZUxheW91dDo6TGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2ludCYgdG9w
TGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVpZ2h0
KQogewogICAgIG1fbG9naWNhbFJlY3Quc2V0VG9wTGVmdCh0b3BMZWZ0KTsKICAgICBtX2xvZ2lj
YWxSZWN0LnNldFdpZHRoKGF2YWlsYWJsZVdpZHRoKTsKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2ludCYgdG9w
TGVmdCwgTGF5b3V0VW5pdAogICAgIG1fY2xvc2VkID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmFkanVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVs
dGEpCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjphZGp1
c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKQogewogICAgIEFTU0VSVChkZWx0YSA+IDAp
OwogCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6
OmFkanVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpCiAgICAgICAgIGlubGluZVJ1bi5t
b3ZlSG9yaXpvbnRhbGx5KGRlbHRhKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZTo6YWRqdXN0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEpCit2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjphZGp1c3RMb2dpY2FsUmlnaHQo
TGF5b3V0VW5pdCBkZWx0YSkKIHsKICAgICBBU1NFUlQoZGVsdGEgPiAwKTsKIApAQCAtNzAsNyAr
NzAsNyBAQCBzdGF0aWMgYm9vbCBpc1RyaW1tYWJsZUNvbnRlbnQoY29uc3QgSW5saW5lUnVuUHJv
dmlkZXI6OlJ1biYgaW5saW5lUnVuKQogICAgIHJldHVybiBpbmxpbmVSdW4uaXNXaGl0ZXNwYWNl
KCkgJiYgaW5saW5lUnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CiB9CiAKLUxheW91
dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNvbnRlbnRMb2dpY2FsUmlnaHQo
KSBjb25zdAorTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6
TGluZTo6Y29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0CiB7CiAgICAgaWYgKG1faW5saW5lUnVu
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsKQEAgLTc4
LDcgKzc4LDcgQEAgTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y29u
dGVudExvZ2ljYWxSaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5saW5lUnVucy5sYXN0KCku
bG9naWNhbFJpZ2h0KCk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6
OmFwcGVuZENvbnRlbnQoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgcnVuLCBjb25zdCBM
YXlvdXRTaXplJiBydW5TaXplKQordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxh
eW91dDo6TGluZTo6YXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBy
dW4sIGNvbnN0IExheW91dFNpemUmIHJ1blNpemUpCiB7CiAgICAgQVNTRVJUKCFpc0Nsb3NlZCgp
KTsKIApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okxp
bmU6OmFwcGVuZENvbnRlbnQoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYKICAgICAgICAg
bV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgPSBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgeyBy
dW5TaXplLndpZHRoKCksIHRleHRSdW4tPmxlbmd0aCgpIH07CiB9CiAKLXZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNsb3NlKCkKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmNsb3NlKCkKIHsKICAgICBhdXRvIHRyaW1UcmFpbGluZ0Nv
bnRlbnQgPSBbJl17CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361295</attachid>
            <date>2019-02-06 07:52:20 -0800</date>
            <delta_ts>2019-02-06 09:04:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194328-20190206075201.patch</filename>
            <type>text/plain</type>
            <size>66307</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxMDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZkYTc1Y2I5YWRlOTI5
NGMyNjYyYjA1ZDZiNDMzYjNjZTUzMDdjMi4uMmQ1MmZlZWFhZmVjNDJmNDUxNDIyYWFmODY2ZmZm
OGM2ODgwZDFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE5LTAyLTA1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGxp
bmUgbGF5b3V0IGNvZGUgdG8gYSBkZWRpY2F0ZWQgZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6aXNUcmltbWFibGVDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdM
aW5lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OnNwbGl0SW5saW5lUnVuSWZOZWVkZWQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRl
RmluYWxSdW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OnBvc3RQcm9jZXNzSW5saW5lUnVucyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
bG9zZUxpbmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlv
dXRJbmxpbmVDb250ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdFBvc2l0aW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxh
eW91dDo6TGluZTo6aGFzQ29udGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjppc0Nsb3NlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lTGF5b3V0OjpMaW5lOjppc0ZpcnN0TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpydW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVM
YXlvdXQ6OkxpbmU6OmNvbnRlbnRMb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjphdmFp
bGFibGVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpsYXN0UnVuVHlwZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0
OjpMaW5lOjpsb2dpY2FsVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmxvZ2ljYWxCb3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
TGluZUxheW91dDo6TGluZTo6bG9naWNhbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpoYXNDb250ZW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmU6OmlzQ2xvc2VkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmlzRmlyc3RMaW5lIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OkxpbmU6OnJ1bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmU6OmF2YWlsYWJsZVdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6Omxhc3RSdW5UeXBlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmU6OmxvZ2ljYWxUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6bG9naWNhbEJvdHRv
bSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lOjpsb2dpY2FsSGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6YWRqdXN0ZWRMaW5lTG9naWNhbExl
ZnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Omp1c3RpZnlSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlRXhw
YW5zaW9uT3Bwb3J0dW5pdGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6YWxpZ25SdW5zKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpydW5XaWR0aCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2lj
YWxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFkanVzdExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpMaW5lOjpj
b250ZW50TG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OkxpbmU6OmFwcGVuZENvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxh
eW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6TGluZTo6aW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjphZGp1c3RMb2dpY2FsTGVmdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lOjphZGp1c3RMb2dpY2FsUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y29udGVudExvZ2ljYWxS
aWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpMaW5lOjphcHBlbmRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNsb3NlKTog
RGVsZXRlZC4KKwogMjAxOS0wMi0wNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSRUdSRVNTSU9OIChyMjQwOTA5KTogUmVsZWFzZSBhc3NlcnQgaW4gRnJhbWVM
b2FkZXI6OmxvYWRVUkwgd2hlbiBuYXZpZ2F0aW5nIHdpdGggYSBub24tZXhpc3RlbnQgdGFyZ2V0
IG5hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggM2Y0Mjk2ZDUyNDJmNDIzZTU5MGEzODZkMDJiMmI5Mjlh
OGQ4ZTZhMS4uNTQzNjMwY2IyNzZkYTc5NDdkYTkxMDdkZGIzMzQwZWVjZTRmN2Q1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTEzNDAsMTEgKzEzNDAsMTEgQEAgbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0Nv
bnRleHQuY3BwCiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCitsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwCiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVJbnZhbGlkYXRpb24uY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVJ1
blByb3ZpZGVyLmNwcAotbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZS5jcHAKIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL3RleHQvVGV4dFV0aWwuY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlv
dXRCbG9ja0NvbnRhaW5lci5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBkYWIxMTE0MzdiZDVjMzc5OWViZjBiYWQxYTQxMjEwMTdmZGVmMTk3Li5lZmIyMzA4Yjg2ZjQ5
MjBmZWIzN2M2MjA2ZmEwZWUyZmEzYTljMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MTk2LDkgKzkxOTYsOSBAQAogCQk2
RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjA4MzBERjIwQjQ2OTUxMDA4QTk0NUIg
LyogQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAvKiBJbmxpbmVSdW4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lUnVuLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZGMjE5RDc2MjE3OEQzNzEwMEJCMDMzQyAvKiBMaW5lLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjIyMkI3NDFBQjUyRDY0MDA5NDY1MUEgLyogV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYyMjJCNzUxQUI1MkQ4QTAwOTQ2NTFB
IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElubGluZUZv
cm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkYzRTFGNUYyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZsb2F0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFG
NjEyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0Qm94
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjQ1Niw2ICsxNjQ1Niw3IEBACiAJ
CQkJNkY3Q0EzQzkyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cCAqLywKIAkJCQk2RjdDQTNDODIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaCAqLywKIAkJCQk2RjM1RUZBRjIxODdDQkQ1MDA0NEUwRjQgLyogSW5saW5lRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFC
IC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAgKi8sCiAJCQkJMTE1Q0ZB
N0QyMDhCOEUxMDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJCQkJ
MTE1Q0ZBN0MyMDhCOEUxMDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0ZS5oICovLAog
CQkJCTExMjNBRkREMjA5QUJCQkEwMDczNkFDQyAvKiBJbmxpbmVJbnZhbGlkYXRpb24uY3BwICov
LApAQCAtMTY0NjYsNyArMTY0NjcsNiBAQAogCQkJCTZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAv
KiBJbmxpbmVSdW4uaCAqLywKIAkJCQk2RjUyMTdDNjIxNzdGNUE2MDA2NTgzQkIgLyogSW5saW5l
UnVuUHJvdmlkZXIuY3BwICovLAogCQkJCTZGNTIxN0M0MjE3N0Y1QTYwMDY1ODNCQiAvKiBJbmxp
bmVSdW5Qcm92aWRlci5oICovLAotCQkJCTZGMjE5RDc2MjE3OEQzNzEwMEJCMDMzQyAvKiBMaW5l
LmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gaW5saW5lZm9ybWF0dGluZzsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXgg
MWQxY2E5ZWNjN2YyYWFmNjYyYjY4ODdlNDBlNzAzZGFmNDc2YjU4NC4uNGIzYjMxNmQ0NjEzYjU5
ODFmNjIyZTdjNjAwYjA4ZjU4Nzc3YWM0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmNwcApAQCAtMjgsOCArMjgsNiBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCiAKLSNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJGbG9h
dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVk
ZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKICNpbmNsdWRlICJJbmxpbmVSdW5Qcm92aWRlci5oIgpA
QCAtODcsMjYwICs4NSwxMCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQo
KSBjb25zdAogCiAgICAgSW5saW5lUnVuUHJvdmlkZXIgaW5saW5lUnVuUHJvdmlkZXI7CiAgICAg
Y29sbGVjdElubGluZUNvbnRlbnQoaW5saW5lUnVuUHJvdmlkZXIpOwotICAgIGxheW91dElubGlu
ZUNvbnRlbnQoaW5saW5lUnVuUHJvdmlkZXIpOworICAgIExpbmVMYXlvdXQoKnRoaXMpLmxheW91
dChpbmxpbmVSdW5Qcm92aWRlcik7CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltFbmRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQg
LT4gZm9ybWF0dGluZyByb290KCIgPDwgJnJvb3QgPDwgIikiKTsKIH0KIAotc3RhdGljIGJvb2wg
aXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZUxpbmVCcmVha2VyOjpSdW4mIHJ1bikKLXsK
LSAgICByZXR1cm4gcnVuLmNvbnRlbnQuaXNXaGl0ZXNwYWNlKCkgJiYgcnVuLmNvbnRlbnQuc3R5
bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6aW5pdGlhbGl6ZU5ld0xpbmUoTGluZSYgbGluZSkgY29uc3QKLXsKLSAgICBhdXRvJiBm
b3JtYXR0aW5nUm9vdCA9IGRvd25jYXN0PENvbnRhaW5lcj4ocm9vdCgpKTsKLSAgICBhdXRvJiBm
b3JtYXR0aW5nUm9vdERpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlv
dXRCb3goZm9ybWF0dGluZ1Jvb3QpOwotCi0gICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBmb3Jt
YXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJveExlZnQoKTsKLSAgICBhdXRvIGxpbmVMb2dp
Y2FsVG9wID0gbGluZS5pc0ZpcnN0TGluZSgpID8gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNv
bnRlbnRCb3hUb3AoKSA6IGxpbmUubG9naWNhbEJvdHRvbSgpOwotICAgIGF1dG8gYXZhaWxhYmxl
V2lkdGggPSBmb3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCk7Ci0KLSAg
ICAvLyBDaGVjayBmb3IgaW50cnVkaW5nIGZsb2F0cyBhbmQgYWRqdXN0IGxvZ2ljYWwgbGVmdC9h
dmFpbGFibGUgd2lkdGggZm9yIHRoaXMgbGluZSBhY2NvcmRpbmdseS4KLSAgICBhdXRvJiBmbG9h
dGluZ1N0YXRlID0gZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpOwotICAgIGlmICgh
ZmxvYXRpbmdTdGF0ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRz
ID0gZmxvYXRpbmdTdGF0ZS5jb25zdHJhaW50cyh7IGxpbmVMb2dpY2FsVG9wIH0sIGZvcm1hdHRp
bmdSb290KTsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlc2UgY29uc3RyYWludHMgYWN0dWFsbHkg
cHV0IGxpbWl0YXRpb24gb24gdGhlIGxpbmUuCi0gICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRz
LmxlZnQgJiYgKmZsb2F0Q29uc3RyYWludHMubGVmdCA8PSBmb3JtYXR0aW5nUm9vdERpc3BsYXlC
b3guY29udGVudEJveExlZnQoKSkKLSAgICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9
IHsgfTsKLQotICAgICAgICBpZiAoZmxvYXRDb25zdHJhaW50cy5yaWdodCAmJiAqZmxvYXRDb25z
dHJhaW50cy5yaWdodCA+PSBmb3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJveFJpZ2h0
KCkpCi0gICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ID0geyB9OwotCi0gICAgICAg
IGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodCkgewot
ICAgICAgICAgICAgQVNTRVJUKCpmbG9hdENvbnN0cmFpbnRzLmxlZnQgPCAqZmxvYXRDb25zdHJh
aW50cy5yaWdodCk7Ci0gICAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9ICpmbG9hdENvbnN0cmFp
bnRzLnJpZ2h0IC0gKmZsb2F0Q29uc3RyYWludHMubGVmdDsKLSAgICAgICAgICAgIGxpbmVMb2dp
Y2FsTGVmdCA9ICpmbG9hdENvbnN0cmFpbnRzLmxlZnQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmxv
YXRDb25zdHJhaW50cy5sZWZ0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoKmZsb2F0Q29uc3RyYWlu
dHMubGVmdCA+IGxpbmVMb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICBhdmFpbGFibGVXaWR0aCAt
PSAoKmZsb2F0Q29uc3RyYWludHMubGVmdCAtIGxpbmVMb2dpY2FsTGVmdCk7Ci0gICAgICAgICAg
ICBsaW5lTG9naWNhbExlZnQgPSAqZmxvYXRDb25zdHJhaW50cy5sZWZ0OwotICAgICAgICB9IGVs
c2UgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKLSAgICAgICAgICAgIEFTU0VSVCgqZmxv
YXRDb25zdHJhaW50cy5yaWdodCA+IGxpbmVMb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICBhdmFp
bGFibGVXaWR0aCA9ICpmbG9hdENvbnN0cmFpbnRzLnJpZ2h0IC0gbGluZUxvZ2ljYWxMZWZ0Owot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgbGluZS5pbml0KHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5l
TG9naWNhbFRvcCB9LCBhdmFpbGFibGVXaWR0aCwgZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5jb21w
dXRlZExpbmVIZWlnaHQoKSk7Ci19Ci0KLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNw
bGl0SW5saW5lUnVuSWZOZWVkZWQoY29uc3QgSW5saW5lUnVuJiBpbmxpbmVSdW4sIElubGluZVJ1
bnMmIHNwbGl0UnVucykgY29uc3QKLXsKLSAgICBBU1NFUlQoaW5saW5lUnVuLnRleHRDb250ZXh0
KCkpOwotICAgIEFTU0VSVChpbmxpbmVSdW4ub3ZlcmxhcHNNdWx0aXBsZUlubGluZUl0ZW1zKCkp
OwotICAgIC8vIEluIGNlcnRhaW4gY2FzZXMsIGEgcnVuIGNhbiBvdmVybGFwIG11bHRpcGxlIGlu
bGluZSBlbGVtZW50cyBsaWtlIHRoaXM6Ci0gICAgLy8gPHNwYW4+bm9ybWFsIHRleHQgY29udGVu
dDwvc3Bhbj48c3BhbiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyBsZWZ0OiAxMHB4OyI+YnV0
IHRoaXMgb25lIG5lZWRzIGEgZGVkaWNhdGVkIHJ1bjwvc3Bhbj48c3Bhbj5lbmQgb2YgdGV4dDwv
c3Bhbj4KLSAgICAvLyBUaGUgY29udGVudCBhYm92ZSBnZW5lcmF0ZXMgb25lIGxvbmcgcnVuIDxu
b3JtYWwgdGV4dCBjb250ZW50YnV0IHRoaXMgb25lIG5lZWRzIGRlZGljYXRlZCBydW5lbmQgb2Yg
dGV4dD4KLSAgICAvLyBIb3dldmVyLCBzaW5jZSB0aGUgbWlkZGxlIHJ1biBpcyBwb3NpdGlvbmVk
LCBpdCBuZWVkcyB0byBiZSBtb3ZlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHJlc3Qgb2YgdGhl
IGNvbnRlbnQsIGhlbmNlIGl0IG5lZWRzIGEgZGVkaWNhdGVkIGlubGluZSBydW4uCi0KLSAgICAv
LyAxLiBTdGFydCB3aXRoIHRoZSBmaXJzdCBpbmxpbmUgaXRlbSAoZWxlbWVudCkgYW5kIHRyYXZl
cnMgdGhlIGxpc3QgdW50aWwKLSAgICAvLyAyLiBlaXRoZXIgZmluZCBhbiBpbmxpbmUgaXRlbSB0
aGF0IG5lZWRzIGEgZGVkaWNhdGVkIHJ1biBvciB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBydW4K
LSAgICAvLyAzLiBDcmVhdGUgZGVkaWNhdGUgaW5saW5lIHJ1bnMuCi0gICAgYXV0byYgaW5saW5l
Q29udGVudCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUNvbnRlbnQoKTsKLSAgICBhdXRvIGNv
bnRlbnRTdGFydCA9IGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpOwotICAgIGF1dG8gc3RhcnRQb3Np
dGlvbiA9IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5zdGFydCgpOwotICAgIGF1dG8gcmVtYW5p
bmdMZW5ndGggPSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCk7Ci0KLSAgICBzdHJ1
Y3QgVW5jb21taXR0ZWQgewotICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBmaXJzdElubGluZUl0
ZW0geyBudWxscHRyIH07Ci0gICAgICAgIGNvbnN0IElubGluZUl0ZW0qIGxhc3RJbmxpbmVJdGVt
IHsgbnVsbHB0ciB9OwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07Ci0gICAgfTsKLSAg
ICBPcHRpb25hbDxVbmNvbW1pdHRlZD4gdW5jb21taXR0ZWQ7Ci0KLSAgICBhdXRvIGNvbW1pdCA9
IFsmXSB7Ci0gICAgICAgIGlmICghdW5jb21taXR0ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgY29udGVudFN0YXJ0ICs9IHVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0tPm5v
bkJyZWFrYWJsZVN0YXJ0KCk7Ci0KLSAgICAgICAgYXV0byBydW5XaWR0aCA9IEdlb21ldHJ5Ojpy
dW5XaWR0aChpbmxpbmVDb250ZW50LCAqdW5jb21taXR0ZWQtPmZpcnN0SW5saW5lSXRlbSwgc3Rh
cnRQb3NpdGlvbiwgdW5jb21taXR0ZWQtPmxlbmd0aCwgY29udGVudFN0YXJ0KTsKLSAgICAgICAg
YXV0byBydW4gPSBJbmxpbmVSdW4geyB7IGlubGluZVJ1bi5sb2dpY2FsVG9wKCksIGNvbnRlbnRT
dGFydCwgcnVuV2lkdGgsIGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0KCkgfSwgKnVuY29tbWl0dGVk
LT5maXJzdElubGluZUl0ZW0gfTsKLSAgICAgICAgcnVuLnNldFRleHRDb250ZXh0KHsgc3RhcnRQ
b3NpdGlvbiwgdW5jb21taXR0ZWQtPmxlbmd0aCB9KTsKLSAgICAgICAgc3BsaXRSdW5zLmFwcGVu
ZChydW4pOwotCi0gICAgICAgIGNvbnRlbnRTdGFydCArPSBydW5XaWR0aCArIHVuY29tbWl0dGVk
LT5sYXN0SW5saW5lSXRlbS0+bm9uQnJlYWthYmxlRW5kKCk7Ci0KLSAgICAgICAgc3RhcnRQb3Np
dGlvbiA9IDA7Ci0gICAgICAgIHVuY29tbWl0dGVkID0geyB9OwotICAgIH07Ci0KLSAgICBmb3Ig
KGF1dG8gaXRlcmF0b3IgPSBpbmxpbmVDb250ZW50LmZpbmQoY29uc3RfY2FzdDxJbmxpbmVJdGVt
Kj4oJmlubGluZVJ1bi5pbmxpbmVJdGVtKCkpKTsgaXRlcmF0b3IgIT0gaW5saW5lQ29udGVudC5l
bmQoKSAmJiByZW1hbmluZ0xlbmd0aCA+IDA7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgYXV0byYg
aW5saW5lSXRlbSA9ICoqaXRlcmF0b3I7Ci0KLSAgICAgICAgLy8gU2tpcCBhbGwgbm9uLWluZmxv
dyBib3hlcyAoZmxvYXRzLCBvdXQtb2YtZmxvdyBwb3NpdGlvbmVkIGVsZW1lbnRzKS4gVGhleSBk
b24ndCBwYXJ0aWNpcGF0ZSBpbiB0aGUgaW5saW5lIHJ1biBjb250ZXh0LgotICAgICAgICBpZiAo
IWlubGluZUl0ZW0ubGF5b3V0Qm94KCkuaXNJbkZsb3coKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IFsmXSB7Ci0gICAgICAgICAgICByZXR1
cm4gc3RkOjptaW4ocmVtYW5pbmdMZW5ndGgsIGlubGluZUl0ZW0udGV4dENvbnRlbnQoKS5sZW5n
dGgoKSAtIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIDEuIEJyZWFr
IGJlZm9yZS9hZnRlciAtPiByZXF1aXJlcyBkZWRpY2F0ZWQgcnVuIC0+IGNvbW1pdCB3aGF0IHdl
J3ZlIGdvdCBzbyBmYXIgYW5kIGFsc28gY29tbWl0IHRoZSBjdXJyZW50IGlubGluZSBlbGVtZW50
IGFzIGEgc2VwYXJhdGUgaW5saW5lIHJ1bi4KLSAgICAgICAgLy8gMi4gQnJlYWsgYXQgdGhlIGJl
Z2lubmluZyBvZiB0aGUgaW5saW5lIGVsZW1lbnQgLT4gY29tbWl0IHdoYXQgd2UndmUgZ290IHNv
IGZhci4gQ3VycmVudCBlbGVtZW50IGJlY29tZXMgdGhlIGZpcnN0IHVuY29tbWl0dGVkLgotICAg
ICAgICAvLyAzLiBCcmVhayBhdCB0aGUgZW5kIG9mIHRoZSBpbmxpbmUgZWxlbWVudCAtPiBjb21t
aXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyIGluY2x1ZGluZyB0aGUgY3VycmVudCBlbGVtZW50Lgot
ICAgICAgICAvLyA0LiBJbmxpbmUgZWxlbWVudCBkb2VzIG5vdCByZXF1aXJlIHJ1biBicmVha2lu
ZyAtPiBhZGQgY3VycmVudCBpbmxpbmUgZWxlbWVudCB0byB1bmNvbW1pdHRlZC4gSnVtcCB0byB0
aGUgbmV4dCBlbGVtZW50LgotICAgICAgICBhdXRvIGRldGFjaGluZ1J1bGVzID0gaW5saW5lSXRl
bS5kZXRhY2hpbmdSdWxlcygpOwotCi0gICAgICAgIC8vICMxCi0gICAgICAgIGlmIChkZXRhY2hp
bmdSdWxlcy5jb250YWluc0FsbCh7IElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRT
dGFydCwgSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtBdEVuZCB9KSkgewotICAgICAg
ICAgICAgY29tbWl0KCk7Ci0gICAgICAgICAgICBhdXRvIGNvbnRlbnRMZW5ndGggPSBjdXJyZW50
TGVuZ3RoKCk7Ci0gICAgICAgICAgICB1bmNvbW1pdHRlZCA9IFVuY29tbWl0dGVkIHsgJmlubGlu
ZUl0ZW0sICZpbmxpbmVJdGVtLCBjb250ZW50TGVuZ3RoIH07Ci0gICAgICAgICAgICByZW1hbmlu
Z0xlbmd0aCAtPSBjb250ZW50TGVuZ3RoOwotICAgICAgICAgICAgY29tbWl0KCk7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICMyCi0gICAgICAgIGlmIChk
ZXRhY2hpbmdSdWxlcy5jb250YWlucyhJbmxpbmVJdGVtOjpEZXRhY2hpbmdSdWxlOjpCcmVha0F0
U3RhcnQpKQotICAgICAgICAgICAgY29tbWl0KCk7Ci0KLSAgICAgICAgLy8gQWRkIGN1cnJlbnQg
aW5saW5lIGl0ZW0gdG8gdW5jb21taXR0ZWQuCi0gICAgICAgIC8vICMzIGFuZCAjNAotICAgICAg
ICBhdXRvIGNvbnRlbnRMZW5ndGggPSBjdXJyZW50TGVuZ3RoKCk7Ci0gICAgICAgIGlmICghdW5j
b21taXR0ZWQpCi0gICAgICAgICAgICB1bmNvbW1pdHRlZCA9IFVuY29tbWl0dGVkIHsgJmlubGlu
ZUl0ZW0sICZpbmxpbmVJdGVtLCAwIH07Ci0gICAgICAgIHVuY29tbWl0dGVkLT5sZW5ndGggKz0g
Y29udGVudExlbmd0aDsKLSAgICAgICAgdW5jb21taXR0ZWQtPmxhc3RJbmxpbmVJdGVtID0gJmlu
bGluZUl0ZW07Ci0gICAgICAgIHJlbWFuaW5nTGVuZ3RoIC09IGNvbnRlbnRMZW5ndGg7Ci0KLSAg
ICAgICAgLy8gIzMKLSAgICAgICAgaWYgKGRldGFjaGluZ1J1bGVzLmNvbnRhaW5zKElubGluZUl0
ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRFbmQpKQotICAgICAgICAgICAgY29tbWl0KCk7Ci0g
ICAgfQotICAgIC8vIEVpdGhlciBhbGwgaW5saW5lIGVsZW1lbnRzIG5lZWRlZCBkZWRpY2F0ZWQg
cnVucyBvciBuZWl0aGVyIG9mIHRoZW0uCi0gICAgaWYgKCFyZW1hbmluZ0xlbmd0aCB8fCByZW1h
bmluZ0xlbmd0aCA9PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNvbW1pdCgpOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpjcmVhdGVGaW5hbFJ1bnMoTGluZSYgbGluZSkgY29uc3QKLXsKLSAgICBhdXRvJiBpbmxp
bmVGb3JtYXR0aW5nU3RhdGUgPSBmb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBmb3IgKGF1dG8mIGlu
bGluZVJ1biA6IGxpbmUucnVucygpKSB7Ci0gICAgICAgIGlmIChpbmxpbmVSdW4ub3ZlcmxhcHNN
dWx0aXBsZUlubGluZUl0ZW1zKCkpIHsKLSAgICAgICAgICAgIElubGluZVJ1bnMgc3BsaXRSdW5z
OwotICAgICAgICAgICAgc3BsaXRJbmxpbmVSdW5JZk5lZWRlZChpbmxpbmVSdW4sIHNwbGl0UnVu
cyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHNwbGl0UnVuIDogc3BsaXRSdW5zKQotICAgICAg
ICAgICAgICAgIGlubGluZUZvcm1hdHRpbmdTdGF0ZS5hcHBlbmRJbmxpbmVSdW4oc3BsaXRSdW4p
OwotCi0gICAgICAgICAgICBpZiAoIXNwbGl0UnVucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGZpbmFsUnVuID0gWyZdIHsK
LSAgICAgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBpbmxpbmVSdW4uaW5saW5lSXRlbSgpOwot
ICAgICAgICAgICAgaWYgKGlubGluZUl0ZW0uZGV0YWNoaW5nUnVsZXMoKS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZVJ1bjsKLQotICAgICAgICAgICAgSW5saW5lUnVu
IGFkanVzdGVkUnVuID0gaW5saW5lUnVuOwotICAgICAgICAgICAgYXV0byB3aWR0aCA9IGlubGlu
ZVJ1bi5sb2dpY2FsV2lkdGgoKSAtIGlubGluZUl0ZW0ubm9uQnJlYWthYmxlU3RhcnQoKSAtIGlu
bGluZUl0ZW0ubm9uQnJlYWthYmxlRW5kKCk7Ci0gICAgICAgICAgICBhZGp1c3RlZFJ1bi5zZXRM
b2dpY2FsTGVmdChpbmxpbmVSdW4ubG9naWNhbExlZnQoKSArIGlubGluZUl0ZW0ubm9uQnJlYWth
YmxlU3RhcnQoKSk7Ci0gICAgICAgICAgICBhZGp1c3RlZFJ1bi5zZXRMb2dpY2FsV2lkdGgod2lk
dGgpOwotICAgICAgICAgICAgcmV0dXJuIGFkanVzdGVkUnVuOwotICAgICAgICB9OwotCi0gICAg
ICAgIGlubGluZUZvcm1hdHRpbmdTdGF0ZS5hcHBlbmRJbmxpbmVSdW4oZmluYWxSdW4oKSk7Ci0g
ICAgfQotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpwb3N0UHJvY2Vzc0lubGlu
ZVJ1bnMoTGluZSYgbGluZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5lKSBjb25zdAotewotICAgIEdl
b21ldHJ5OjphbGlnblJ1bnMocm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmUsIGlzTGFz
dExpbmUpOwotICAgIGF1dG8gZmlyc3RSdW5JbmRleCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGlu
ZVJ1bnMoKS5zaXplKCk7Ci0gICAgY3JlYXRlRmluYWxSdW5zKGxpbmUpOwotCi0gICAgcGxhY2VJ
bkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4oZmlyc3RSdW5JbmRleCk7Ci19Ci0KLXZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmNsb3NlTGluZShMaW5lJiBsaW5lLCBJc0xhc3RMaW5lIGlzTGFz
dExpbmUpIGNvbnN0Ci17Ci0gICAgbGluZS5jbG9zZSgpOwotICAgIGlmICghbGluZS5oYXNDb250
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBvc3RQcm9jZXNzSW5saW5lUnVucyhsaW5l
LCBpc0xhc3RMaW5lKTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6YXBwZW5k
Q29udGVudFRvTGluZShMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBy
dW4sIGNvbnN0IExheW91dFNpemUmIHJ1blNpemUpIGNvbnN0Ci17Ci0gICAgYXV0byBsYXN0UnVu
VHlwZSA9IGxpbmUubGFzdFJ1blR5cGUoKTsKLSAgICBsaW5lLmFwcGVuZENvbnRlbnQocnVuLCBy
dW5TaXplKTsKLQotICAgIGlmIChyb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxp
Z25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICBHZW9tZXRyeTo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9y
dHVuaXRpZXMobGluZSwgcnVuLCBsYXN0UnVuVHlwZS52YWx1ZU9yKElubGluZVJ1blByb3ZpZGVy
OjpSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UpKTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6bGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYgaW5s
aW5lUnVuUHJvdmlkZXIpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5s
YXlvdXRTdGF0ZSgpOwotICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGZvcm1hdHRp
bmdTdGF0ZSgpOwotICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsg
aW5saW5lRm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKSB9OwotCi0gICAgTGluZSBsaW5l
OwotICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwotCi0gICAgSW5saW5lTGluZUJyZWFrZXIg
bGluZUJyZWFrZXIobGF5b3V0U3RhdGUsIGlubGluZUZvcm1hdHRpbmdTdGF0ZS5pbmxpbmVDb250
ZW50KCksIGlubGluZVJ1blByb3ZpZGVyLnJ1bnMoKSk7Ci0gICAgd2hpbGUgKGF1dG8gcnVuID0g
bGluZUJyZWFrZXIubmV4dFJ1bihsaW5lLmNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbGluZS5hdmFp
bGFibGVXaWR0aCgpLCAhbGluZS5oYXNDb250ZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gaXNGaXJz
dFJ1biA9IHJ1bi0+cG9zaXRpb24gPT0gSW5saW5lTGluZUJyZWFrZXI6OlJ1bjo6UG9zaXRpb246
OkxpbmVCZWdpbjsKLSAgICAgICAgYXV0byBpc0xhc3RSdW4gPSBydW4tPnBvc2l0aW9uID09IElu
bGluZUxpbmVCcmVha2VyOjpSdW46OlBvc2l0aW9uOjpMaW5lRW5kOwotICAgICAgICBhdXRvIGdl
bmVyYXRlc0lubGluZVJ1biA9IHRydWU7Ci0KLSAgICAgICAgLy8gUG9zaXRpb24gZmxvYXQgYW5k
IGFkanVzdCB0aGUgcnVucyBvbiBsaW5lLgotICAgICAgICBpZiAocnVuLT5jb250ZW50LmlzRmxv
YXQoKSkgewotICAgICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBydW4tPmNvbnRlbnQuaW5saW5l
SXRlbSgpLmxheW91dEJveCgpOwotICAgICAgICAgICAgY29tcHV0ZUZsb2F0UG9zaXRpb24oZmxv
YXRpbmdDb250ZXh0LCBsaW5lLCBmbG9hdEJveCk7Ci0gICAgICAgICAgICBpbmxpbmVGb3JtYXR0
aW5nU3RhdGUuZmxvYXRpbmdTdGF0ZSgpLmFwcGVuZChmbG9hdEJveCk7Ci0KLSAgICAgICAgICAg
IGF1dG8gZmxvYXRCb3hXaWR0aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
ZmxvYXRCb3gpLm1hcmdpbkJveCgpLndpZHRoKCk7Ci0gICAgICAgICAgICAvLyBTaHJpbmsgYXZh
aWxibGUgc3BhY2UgZm9yIGN1cnJlbnQgbGluZSBhbmQgbW92ZSBleGlzdGluZyBpbmxpbmUgcnVu
cy4KLSAgICAgICAgICAgIGZsb2F0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8gbGlu
ZS5hZGp1c3RMb2dpY2FsTGVmdChmbG9hdEJveFdpZHRoKSA6IGxpbmUuYWRqdXN0TG9naWNhbFJp
Z2h0KGZsb2F0Qm94V2lkdGgpOwotCi0gICAgICAgICAgICBnZW5lcmF0ZXNJbmxpbmVSdW4gPSBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEuIEluaXRpYWxpemUgbmV3IGxpbmUgaWYg
bmVlZGVkLgotICAgICAgICAvLyAyLiBBcHBlbmQgaW5saW5lIHJ1biB1bmxlc3MgaXQgaXMgc2tp
cHBlZC4KLSAgICAgICAgLy8gMy4gQ2xvc2UgY3VycmVudCBsaW5lIGlmIG5lZWRlZC4KLSAgICAg
ICAgaWYgKGlzRmlyc3RSdW4pIHsKLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IHJ1biBk
b2VzIG5vdCBnZW5lcmF0ZSBhbiBhY3R1YWwgaW5saW5lIHJ1biwgdGhlIG5leHQgcnVuIGNvbWVz
IGluIGZpcnN0LXJ1biBhcyB3ZWxsLgotICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBzcGVuZCB0
aW1lIG9uIGNsb3NpbmcvaW5pdGlhbGl6aW5nLgotICAgICAgICAgICAgLy8gU2tpcCBsZWFkaW5n
IHdoaXRlc3BhY2UuCi0gICAgICAgICAgICBpZiAoIWdlbmVyYXRlc0lubGluZVJ1biB8fCBpc1Ry
aW1tYWJsZUNvbnRlbnQoKnJ1bikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIGlmIChsaW5lLmhhc0NvbnRlbnQoKSkgewotICAgICAgICAgICAgICAgIC8vIFByZXZp
b3VzIHJ1biBlbmRlZCB1cCBiZWluZyBhdCB0aGUgbGluZSBlbmQuIEFkanVzdCB0aGUgbGluZSBh
Y2NvcmRpbmdseS4KLSAgICAgICAgICAgICAgICBpZiAoIWxpbmUuaXNDbG9zZWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUsIElzTGFzdExpbmU6Ok5vKTsKLSAgICAgICAg
ICAgICAgICBpbml0aWFsaXplTmV3TGluZShsaW5lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
IH0KLQotICAgICAgICBpZiAoZ2VuZXJhdGVzSW5saW5lUnVuKSB7Ci0gICAgICAgICAgICBhdXRv
IHdpZHRoID0gcnVuLT53aWR0aDsKLSAgICAgICAgICAgIGF1dG8gaGVpZ2h0ID0gcnVuLT5jb250
ZW50LmlzVGV4dCgpID8gTGF5b3V0VW5pdChyb290KCkuc3R5bGUoKS5jb21wdXRlZExpbmVIZWln
aHQoKSkgOiBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJ1bi0+Y29udGVudC5p
bmxpbmVJdGVtKCkubGF5b3V0Qm94KCkpLmhlaWdodCgpOyAKLSAgICAgICAgICAgIGFwcGVuZENv
bnRlbnRUb0xpbmUobGluZSwgcnVuLT5jb250ZW50LCB7IHdpZHRoLCBoZWlnaHQgfSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoaXNMYXN0UnVuKQotICAgICAgICAgICAgY2xvc2VMaW5lKGxp
bmUsIElzTGFzdExpbmU6Ok5vKTsKLSAgICB9Ci0KLSAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0
TGluZTo6WWVzKTsKLX0KLQogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1h
cmdpbkJvcmRlckFuZFBhZGRpbmcoY29uc3QgSW5saW5lQ29udGFpbmVyJiBpbmxpbmVDb250YWlu
ZXIpIGNvbnN0CiB7CiAgICAgLy8gTm9uLXJlcGxhY2VkLCBub24tZm9ybWF0dGluZyByb290IGNv
bnRhaW5lcnMgKDxzcGFuPjwvc3Bhbj4pIGRvbid0IGhhdmUgd2lkdGggcHJvcGVydHkgLT4gbm9u
IHdpZHRoIGNvbXB1dGF0aW9uLiAKQEAgLTQxOSw0MiArMTY3LDYgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJbmxpbmVCb3go
Y29uc3QgQm8KICAgICBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCk7CiB9CiAKLXZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdFBvc2l0aW9uKGNvbnN0IEZs
b2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBMaW5lJiBsaW5lLCBjb25zdCBCb3gmIGZs
b2F0Qm94KSBjb25zdAotewotICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3Rh
dGUoKTsKLSAgICBBU1NFUlQobGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChmbG9hdEJveCkpOwot
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KGZsb2F0Qm94KTsKLQotICAgIC8vIFNldCBzdGF0aWMgcG9zaXRpb24gZmlyc3QuCi0gICAgZGlz
cGxheUJveC5zZXRUb3BMZWZ0KHsgbGluZS5jb250ZW50TG9naWNhbFJpZ2h0KCksIGxpbmUubG9n
aWNhbFRvcCgpIH0pOwotICAgIC8vIEZsb2F0IGl0LgotICAgIGRpc3BsYXlCb3guc2V0VG9wTGVm
dChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChmbG9hdEJveCkpOwotfQotCi12b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbih1
bnNpZ25lZCBmaXN0UnVuSW5kZXgpIGNvbnN0Ci17Ci0gICAgYXV0byYgaW5saW5lUnVucyA9IGZv
cm1hdHRpbmdTdGF0ZSgpLmlubGluZVJ1bnMoKTsKLSAgICBmb3IgKGF1dG8gcnVuSW5kZXggPSBm
aXN0UnVuSW5kZXg7IHJ1bkluZGV4IDwgaW5saW5lUnVucy5zaXplKCk7ICsrcnVuSW5kZXgpIHsK
LSAgICAgICAgYXV0byYgaW5saW5lUnVuID0gaW5saW5lUnVuc1tydW5JbmRleF07Ci0KLSAgICAg
ICAgYXV0byBwb3NpdGlvbk9mZnNldCA9IFsmXShhdXRvJiBsYXlvdXRCb3gpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBpbi1mbG93IG9mZnNldCBz
aG91bGQgc3RpY2suIFRoaXMgbWlnaHQgdmVyeSB3ZWxsIGJlIHRlbXBvcmFyeS4KLSAgICAgICAg
ICAgIE9wdGlvbmFsPExheW91dFNpemU+IG9mZnNldDsKLSAgICAgICAgICAgIGZvciAoYXV0byog
Ym94ID0gJmxheW91dEJveDsgYm94ICE9ICZyb290KCk7IGJveCA9IGJveC0+cGFyZW50KCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIWJveC0+aXNJbkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldC52
YWx1ZU9yKExheW91dFNpemUoKSkgKyBHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9u
T2Zmc2V0KGxheW91dFN0YXRlKCksICpib3gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIG9mZnNldDsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoYXV0byBvZmZzZXQgPSBw
b3NpdGlvbk9mZnNldChpbmxpbmVSdW4uaW5saW5lSXRlbSgpLmxheW91dEJveCgpKSkgewotICAg
ICAgICAgICAgaW5saW5lUnVuLm1vdmVWZXJ0aWNhbGx5KG9mZnNldC0+aGVpZ2h0KCkpOwotICAg
ICAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkob2Zmc2V0LT53aWR0aCgpKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQogc3RhdGljIHZvaWQgYWRkRGV0YWNoaW5nUnVsZXMoSW5saW5l
SXRlbSYgaW5saW5lSXRlbSwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlU3RhcnRX
aWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbm9uQnJlYWthYmxlRW5kV2lkdGgpCiB7CiAgICAg
T3B0aW9uU2V0PElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU+IGRldGFjaGluZ1J1bGVzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggOTdmOGVkNmJhYzczMWNjMDJhMmJmYTBm
YTNjNWM2MDU1NWRlZmJhZC4uZDRlMTBjMjY5MWYxNjZmZWZmNjE4YzkzM2ZkMmNkMzI1ZGRmMTc1
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0yOSwxNSArMjksMTcgQEAK
IAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZVJ1
bi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIExheW91dCB7CiAKK2NsYXNzIEZsb2F0aW5nU3RhdGU7CiBjbGFzcyBJbmxpbmVD
b250YWluZXI7Ci1jbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGU7CiBjbGFzcyBJbmxpbmVSdW5Q
cm92aWRlcjsKK2NsYXNzIExpbmU7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbGF5
b3V0IGxvZ2ljIGZvciBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cy4KIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9DU1MyMi92aXN1cmVuLmh0bWwjaW5saW5lLWZvcm1hdHRpbmcKQEAgLTQ1LDc5
ICs0Nyw0OSBAQCBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCA6IHB1YmxpYyBGb3JtYXR0
aW5nQ29udGV4dCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCk7CiBwdWJsaWM6CiAgICAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQm94
JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIElubGluZUZvcm1hdHRpbmdTdGF0ZSYpOwotCiAgICAg
dm9pZCBsYXlvdXQoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBjbGFzcyBMaW5l
IHsKKyAgICBjbGFzcyBMaW5lTGF5b3V0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgaW5p
dChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwg
TGF5b3V0VW5pdCBtaW5pbWFsSGVpZ2h0KTsKLSAgICAgICAgdm9pZCBjbG9zZSgpOwotCi0gICAg
ICAgIHZvaWQgYXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgY29u
c3QgTGF5b3V0U2l6ZSYpOwotCi0gICAgICAgIHZvaWQgYWRqdXN0TG9naWNhbExlZnQoTGF5b3V0
VW5pdCBkZWx0YSk7Ci0gICAgICAgIHZvaWQgYWRqdXN0TG9naWNhbFJpZ2h0KExheW91dFVuaXQg
ZGVsdGEpOwotCi0gICAgICAgIGJvb2wgaGFzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuICFtX2lu
bGluZVJ1bnMuaXNFbXB0eSgpOyB9Ci0gICAgICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7IHJl
dHVybiBtX2Nsb3NlZDsgfQotICAgICAgICBib29sIGlzRmlyc3RMaW5lKCkgY29uc3QgeyByZXR1
cm4gbV9pc0ZpcnN0TGluZTsgfQotICAgICAgICBWZWN0b3I8SW5saW5lUnVuPiYgcnVucygpIHsg
cmV0dXJuIG1faW5saW5lUnVuczsgfQotCi0gICAgICAgIExheW91dFVuaXQgY29udGVudExvZ2lj
YWxSaWdodCgpIGNvbnN0OwotICAgICAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QubGVmdCgpOyB9Ci0gICAgICAgIExheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2F2YWlsYWJsZVdpZHRoOyB9Ci0g
ICAgICAgIE9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU+IGxhc3RSdW5UeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuVHlwZTsgfQotCi0gICAgICAgIExheW91dFVuaXQg
bG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9wKCk7IH0KLSAgICAg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVj
dC5ib3R0b20oKTsgfQotICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBsb2dpY2FsQm90dG9tKCkgLSBsb2dpY2FsVG9wKCk7IH0KKyAgICAgICAgTGluZUxh
eW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOworICAgICAgICB2b2lkIGxheW91
dChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgc3RydWN0IFRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCB7Ci0gICAgICAgICAgICBMYXlvdXRV
bml0IHdpZHRoOwotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoOwotICAgICAgICB9OwotICAg
ICAgICBPcHRpb25hbDxUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ+IG1fdHJhaWxpbmdUcmltbWFi
bGVDb250ZW50OwotICAgICAgICBPcHRpb25hbDxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBl
PiBtX2xhc3RSdW5UeXBlOwotICAgICAgICBib29sIG1fbGFzdFJ1bkNhbkV4cGFuZCB7IGZhbHNl
IH07CisgICAgICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZSB7IE5vLCBZZXMgfTsKKyAgICAgICAg
dm9pZCBpbml0aWFsaXplTmV3TGluZShMaW5lJikgY29uc3Q7CisgICAgICAgIHZvaWQgY2xvc2VM
aW5lKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKKyAgICAgICAgdm9pZCBhcHBlbmRDb250ZW50
VG9MaW5lKExpbmUmLCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiwgY29uc3QgTGF5b3V0
U2l6ZSYpIGNvbnN0OworICAgICAgICB2b2lkIHBvc3RQcm9jZXNzSW5saW5lUnVucyhMaW5lJiwg
SXNMYXN0TGluZSkgY29uc3Q7CisgICAgICAgIHZvaWQgY3JlYXRlRmluYWxSdW5zKExpbmUmKSBj
b25zdDsKKyAgICAgICAgdm9pZCBzcGxpdElubGluZVJ1bklmTmVlZGVkKGNvbnN0IElubGluZVJ1
biYsIElubGluZVJ1bnMmIHNwbGl0UnVucykgY29uc3Q7CisgICAgICAgIHZvaWQgY29tcHV0ZUZs
b2F0UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250ZXh0JiwgTGluZSYsIGNvbnN0IEJveCYpIGNv
bnN0OworICAgICAgICB2b2lkIHBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVk
IGZpcnN0UnVuSW5kZXgpIGNvbnN0OworICAgICAgICB2b2lkIGFsaWduUnVucyhUZXh0QWxpZ25N
b2RlLCBMaW5lJiwgSXNMYXN0TGluZSkgY29uc3Q7CisgICAgICAgIHZvaWQgY29tcHV0ZUV4cGFu
c2lvbk9wcG9ydHVuaXRpZXMoTGluZSYsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJ
bmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIGxhc3RSdW5UeXBlKSBjb25zdDsKKyAgICAgICAg
TGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxpbmVDb250ZW50JiwgY29uc3QgSW5saW5lSXRl
bSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVu
dExvZ2ljYWxMZWZ0KSBjb25zdDsKIAotICAgICAgICBEaXNwbGF5OjpCb3g6OlJlY3QgbV9sb2dp
Y2FsUmVjdDsKLSAgICAgICAgTGF5b3V0VW5pdCBtX2F2YWlsYWJsZVdpZHRoOworICAgIHByaXZh
dGU6CisgICAgICAgIHN0YXRpYyB2b2lkIGp1c3RpZnlSdW5zKExpbmUmKTsKIAotICAgICAgICBW
ZWN0b3I8SW5saW5lUnVuPiBtX2lubGluZVJ1bnM7Ci0gICAgICAgIGJvb2wgbV9pc0ZpcnN0TGlu
ZSB7IHRydWUgfTsKLSAgICAgICAgYm9vbCBtX2Nsb3NlZCB7IHRydWUgfTsKKyAgICBwcml2YXRl
OgorICAgICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9mb3JtYXR0aW5nQ29u
dGV4dDsKKyAgICAgICAgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBtX2Zvcm1hdHRpbmdTdGF0ZTsK
KyAgICAgICAgRmxvYXRpbmdTdGF0ZSYgbV9mbG9hdGluZ1N0YXRlOworICAgICAgICBjb25zdCBD
b250YWluZXImIG1fZm9ybWF0dGluZ1Jvb3Q7CiAgICAgfTsKLSAgICBlbnVtIGNsYXNzIElzTGFz
dExpbmUgeyBObywgWWVzIH07CiAKICAgICBjbGFzcyBHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnkgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEhlaWdo
dEFuZE1hcmdpbiBpbmxpbmVCbG9ja0hlaWdodEFuZE1hcmdpbihjb25zdCBMYXlvdXRTdGF0ZSYs
IGNvbnN0IEJveCYpOwogICAgICAgICBzdGF0aWMgV2lkdGhBbmRNYXJnaW4gaW5saW5lQmxvY2tX
aWR0aEFuZE1hcmdpbihMYXlvdXRTdGF0ZSYsIGNvbnN0IEJveCYpOwotICAgICAgICBzdGF0aWMg
dm9pZCBhbGlnblJ1bnMoVGV4dEFsaWduTW9kZSwgTGluZSYsIElzTGFzdExpbmUpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhMaW5lJiwgY29uc3Qg
SW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGUgbGFz
dFJ1blR5cGUpOwotICAgICAgICBzdGF0aWMgTGF5b3V0VW5pdCBydW5XaWR0aChjb25zdCBJbmxp
bmVDb250ZW50JiwgY29uc3QgSW5saW5lSXRlbSYsIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25l
ZCBsZW5ndGgsIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KTsgCi0KLSAgICBwcml2YXRl
OgotICAgICAgICBzdGF0aWMgdm9pZCBqdXN0aWZ5UnVucyhMaW5lJik7CiAgICAgfTsKIAotICAg
IHZvaWQgbGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYpIGNvbnN0
OwotICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0xpbmUoTGluZSYpIGNvbnN0OwotICAgIHZvaWQgY2xv
c2VMaW5lKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKLSAgICB2b2lkIGFwcGVuZENvbnRlbnRU
b0xpbmUoTGluZSYsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBjb25zdCBMYXlvdXRT
aXplJikgY29uc3Q7Ci0gICAgdm9pZCBwb3N0UHJvY2Vzc0lubGluZVJ1bnMoTGluZSYsIElzTGFz
dExpbmUpIGNvbnN0OwotICAgIHZvaWQgY3JlYXRlRmluYWxSdW5zKExpbmUmKSBjb25zdDsKLSAg
ICB2b2lkIHNwbGl0SW5saW5lUnVuSWZOZWVkZWQoY29uc3QgSW5saW5lUnVuJiwgSW5saW5lUnVu
cyYgc3BsaXRSdW5zKSBjb25zdDsKLQogICAgIHZvaWQgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRS
b290KGNvbnN0IEJveCYpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9y
UmVwbGFjZWRJbmxpbmVCb3goY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlTWFy
Z2luQm9yZGVyQW5kUGFkZGluZyhjb25zdCBJbmxpbmVDb250YWluZXImKSBjb25zdDsKICAgICB2
b2lkIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBj
b21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JikgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRl
RmxvYXRQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmLCBMaW5lJiwgY29uc3QgQm94Jikg
Y29uc3Q7Ci0gICAgdm9pZCBwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbih1bnNpZ25lZCBm
aXJzdFJ1bkluZGV4KSBjb25zdDsKIAogICAgIHZvaWQgY29sbGVjdElubGluZUNvbnRlbnQoSW5s
aW5lUnVuUHJvdmlkZXImKSBjb25zdDsKICAgICBJbnN0cmluc2ljV2lkdGhDb25zdHJhaW50cyBp
bnN0cmluc2ljV2lkdGhDb25zdHJhaW50cygpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCBlMjVlNWIyYzIzNTMy
ZGVlNjc4M2IwOTc4MzI3OWJiYWJjY2UzN2U4Li5jZjZiZGQwNzQ1NGI3NmEzNThkYzg4OGM5M2E1
YzcyY2UxZmUyNmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcApAQCAtNzgsMTI4ICs3OCw2IEBAIEhlaWdodEFuZE1hcmdpbiBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGNvCiAg
ICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiB9CiAK
LXN0YXRpYyBMYXlvdXRVbml0IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KFRleHRBbGlnbk1vZGUg
YWxpZ24sIExheW91dFVuaXQgbGluZUxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IHJlbWFpbmluZ1dp
ZHRoKQotewotICAgIHN3aXRjaCAoYWxpZ24pIHsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okxl
ZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQ7Ci0gICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJp
Z2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAgICByZXR1cm4gbGluZUxv
Z2ljYWxMZWZ0ICsgc3RkOjptYXgocmVtYWluaW5nV2lkdGgsIDBfbHUpOwotICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6Q2VudGVyOgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVy
OgotICAgICAgICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0ICsgc3RkOjptYXgocmVtYWluaW5nV2lk
dGggLyAyLCAwX2x1KTsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdDsKLX0KLQotdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Omp1c3RpZnlSdW5zKExpbmUmIGxpbmUp
Ci17Ci0gICAgYXV0byYgaW5saW5lUnVucyA9IGxpbmUucnVucygpOwotICAgIGF1dG8mIGxhc3RJ
bmxpbmVSdW4gPSBpbmxpbmVSdW5zLmxhc3QoKTsKLQotICAgIC8vIEFkanVzdCAoZm9yYmlkKSB0
cmFpbGluZyBleHBhbnNpb24gZm9yIHRoZSBsYXN0IHRleHQgcnVuIG9uIGxpbmUuCi0gICAgYXV0
byBleHBhbnNpb25CZWhhdmlvciA9IGxhc3RJbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHko
KS5iZWhhdmlvcjsKLSAgICAvLyBSZW1vdmUgYWxsb3cgYW5kIGFkZCBmb3JiaWQuCi0gICAgZXhw
YW5zaW9uQmVoYXZpb3IgXj0gQWxsb3dUcmFpbGluZ0V4cGFuc2lvbjsKLSAgICBleHBhbnNpb25C
ZWhhdmlvciB8PSBGb3JiaWRUcmFpbGluZ0V4cGFuc2lvbjsKLSAgICBsYXN0SW5saW5lUnVuLmV4
cGFuc2lvbk9wcG9ydHVuaXR5KCkuYmVoYXZpb3IgPSBleHBhbnNpb25CZWhhdmlvcjsKLQotICAg
IC8vIENvbGxlY3QgZXhwYW5zaW9uIG9wcG9ydHVuaXRpZXMgYW5kIGp1c3RpZnkgdGhlIHJ1bnMu
Ci0gICAgYXV0byB3aWR0aFRvRGlzdHJpYnV0ZSA9IGxpbmUuYXZhaWxhYmxlV2lkdGgoKTsKLSAg
ICBpZiAod2lkdGhUb0Rpc3RyaWJ1dGUgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBleHBhbnNpb25PcHBvcnR1bml0aWVzID0gMDsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6
IGlubGluZVJ1bnMpCi0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgKz0gaW5saW5lUnVu
LmV4cGFuc2lvbk9wcG9ydHVuaXR5KCkuY291bnQ7Ci0KLSAgICBpZiAoIWV4cGFuc2lvbk9wcG9y
dHVuaXRpZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IGV4cGFuc2lvbiA9IHdpZHRo
VG9EaXN0cmlidXRlLnRvRmxvYXQoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXM7Ci0gICAgTGF5
b3V0VW5pdCBhY2N1bXVsYXRlZEV4cGFuc2lvbjsKLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6
IGlubGluZVJ1bnMpIHsKLSAgICAgICAgYXV0byBleHBhbnNpb25Gb3JSdW4gPSBpbmxpbmVSdW4u
ZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5jb3VudCAqIGV4cGFuc2lvbjsKLQotICAgICAgICBpbmxp
bmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5leHBhbnNpb24gPSBleHBhbnNpb25Gb3JSdW47
Ci0gICAgICAgIGlubGluZVJ1bi5zZXRMb2dpY2FsTGVmdChpbmxpbmVSdW4ubG9naWNhbExlZnQo
KSArIGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgaW5saW5lUnVuLnNldExvZ2ljYWxX
aWR0aChpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkgKyBleHBhbnNpb25Gb3JSdW4pOwotICAgICAg
ICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBleHBhbnNpb25Gb3JSdW47Ci0gICAgfQotfQotCi12
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZUV4cGFuc2lvbk9w
cG9ydHVuaXRpZXMoTGluZSYgbGluZSwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgcnVu
LCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIGxhc3RSdW5UeXBlKQotewotICAgIGF1dG8g
aXNFeHBhbnNpb25PcHBvcnR1bml0eSA9IFtdKGF1dG8gY3VycmVudFJ1bklzV2hpdGVzcGFjZSwg
YXV0byBsYXN0UnVuSXNXaGl0ZXNwYWNlKSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50UnVuSXNX
aGl0ZXNwYWNlIHx8ICghY3VycmVudFJ1bklzV2hpdGVzcGFjZSAmJiAhbGFzdFJ1bklzV2hpdGVz
cGFjZSk7Ci0gICAgfTsKLQotICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBbXShhdXRvIGlz
QXRFeHBhbnNpb25PcHBvcnR1bml0eSkgewotICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBh
bnNpb25CZWhhdmlvciA9IEFsbG93VHJhaWxpbmdFeHBhbnNpb247Ci0gICAgICAgIGV4cGFuc2lv
bkJlaGF2aW9yIHw9IGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSA/IEZvcmJpZExlYWRpbmdFeHBh
bnNpb24gOiBBbGxvd0xlYWRpbmdFeHBhbnNpb247Ci0gICAgICAgIHJldHVybiBleHBhbnNpb25C
ZWhhdmlvcjsKLSAgICB9OwotCi0gICAgYXV0byBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBp
c0V4cGFuc2lvbk9wcG9ydHVuaXR5KHJ1bi5pc1doaXRlc3BhY2UoKSwgbGFzdFJ1blR5cGUgPT0g
SW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZTo6V2hpdGVzcGFjZSk7Ci0KLSAgICBhdXRvJiBj
dXJyZW50SW5saW5lUnVuID0gbGluZS5ydW5zKCkubGFzdCgpOwotICAgIGF1dG8mIGV4cGFuc2lv
bk9wcG9ydHVuaXR5ID0gY3VycmVudElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpOwot
ICAgIGlmIChpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpCi0gICAgICAgICsrZXhwYW5zaW9uT3Bw
b3J0dW5pdHkuY291bnQ7Ci0KLSAgICBleHBhbnNpb25PcHBvcnR1bml0eS5iZWhhdmlvciA9IGV4
cGFuc2lvbkJlaGF2aW9yKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSk7Ci19Ci0KLXZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjphbGlnblJ1bnMoVGV4dEFsaWduTW9kZSB0
ZXh0QWxpZ24sIExpbmUmIGxpbmUsICBJc0xhc3RMaW5lIGlzTGFzdExpbmUpCi17Ci0gICAgYXV0
byBhZGp1dGVkVGV4dEFsaWdubWVudCA9IHRleHRBbGlnbiAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5ID8gdGV4dEFsaWduIDogaXNMYXN0TGluZSA9PSBJc0xhc3RMaW5lOjpObyA/IFRleHRBbGln
bk1vZGU6Okp1c3RpZnkgOiBUZXh0QWxpZ25Nb2RlOjpMZWZ0OwotICAgIGlmIChhZGp1dGVkVGV4
dEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7Ci0gICAgICAgIGp1c3RpZnlS
dW5zKGxpbmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBsaW5lTG9naWNh
bExlZnQgPSBsaW5lLmNvbnRlbnRMb2dpY2FsTGVmdCgpOwotICAgIGF1dG8gYWRqdXN0ZWRMb2dp
Y2FsTGVmdCA9IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KGFkanV0ZWRUZXh0QWxpZ25tZW50LCBs
aW5lTG9naWNhbExlZnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSk7Ci0gICAgaWYgKGFkanVzdGVk
TG9naWNhbExlZnQgPT0gbGluZUxvZ2ljYWxMZWZ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGRlbHRhID0gYWRqdXN0ZWRMb2dpY2FsTGVmdCAtIGxpbmVMb2dpY2FsTGVmdDsKLSAgICBm
b3IgKGF1dG8mIGlubGluZVJ1biA6IGxpbmUucnVucygpKQotICAgICAgICBpbmxpbmVSdW4uc2V0
TG9naWNhbExlZnQoaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgKyBkZWx0YSk7Ci19Ci0KLUxheW91
dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpydW5XaWR0aChjb25zdCBJ
bmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVt
LCBJdGVtUG9zaXRpb24gZnJvbSwgdW5zaWduZWQgbGVuZ3RoLCBMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCkgCi17Ci0gICAgTGF5b3V0VW5pdCB3aWR0aDsKLSAgICBhdXRvIHN0YXJ0UG9z
aXRpb24gPSBmcm9tOwotICAgIGF1dG8gaXRlcmF0b3IgPSBpbmxpbmVDb250ZW50LmZpbmQoY29u
c3RfY2FzdDxJbmxpbmVJdGVtKj4oJmlubGluZUl0ZW0pKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci0gICAgYXV0byBpbmxpbmVJdGVtRW5kID0gaW5saW5lQ29udGVudC5lbmQoKTsKLSNlbmRpZgot
ICAgIHdoaWxlIChsZW5ndGgpIHsKLSAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IGlubGluZUl0
ZW1FbmQpOwotICAgICAgICBhdXRvJiBjdXJyZW50SW5saW5lSXRlbSA9ICoqaXRlcmF0b3I7Ci0g
ICAgICAgIGF1dG8gZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxJdGVtUG9zaXRpb24+KHN0YXJ0UG9z
aXRpb24gKyBsZW5ndGgsIGN1cnJlbnRJbmxpbmVJdGVtLnRleHRDb250ZW50KCkubGVuZ3RoKCkp
OwotICAgICAgICBhdXRvIHRleHRXaWR0aCA9IFRleHRVdGlsOjp3aWR0aChjdXJyZW50SW5saW5l
SXRlbSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNvbnRlbnRMb2dpY2FsTGVmdCk7Ci0K
LSAgICAgICAgY29udGVudExvZ2ljYWxMZWZ0ICs9IHRleHRXaWR0aDsKLSAgICAgICAgd2lkdGgg
Kz0gdGV4dFdpZHRoOwotICAgICAgICBsZW5ndGggLT0gKGVuZFBvc2l0aW9uIC0gc3RhcnRQb3Np
dGlvbik7Ci0KLSAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICsraXRlcmF0b3I7
Ci0gICAgfQotICAgIHJldHVybiB3aWR0aDsKLX0KLQogfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjEzYWIw
YjRlYmNiZDI1NzFmZTZjMzY4YThmNzcwMTZmY2FhMGU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHRMaW5lTGF5b3V0LmNwcApAQCAtMCwwICsxLDYwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgorCisjaWYg
RU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGbG9hdGluZ0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKKyNpbmNsdWRl
ICJJbmxpbmVSdW5Qcm92aWRlci5oIgorI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUg
IkxheW91dENvbnRhaW5lci5oIgorI2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCisjaW5jbHVkZSAi
VGV4dFV0aWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisK
K2NsYXNzIExpbmUgeworcHVibGljOgorICAgIHZvaWQgaW5pdChjb25zdCBMYXlvdXRQb2ludCYg
dG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFsSGVp
Z2h0KTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIGFwcGVuZENvbnRlbnQoY29uc3Qg
SW5saW5lUnVuUHJvdmlkZXI6OlJ1biYsIGNvbnN0IExheW91dFNpemUmKTsKKworICAgIHZvaWQg
YWRqdXN0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBkZWx0YSk7CisgICAgdm9pZCBhZGp1c3RMb2dp
Y2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0YSk7CisKKyAgICBib29sIGhhc0NvbnRlbnQoKSBjb25z
dCB7IHJldHVybiAhbV9pbmxpbmVSdW5zLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNDbG9zZWQo
KSBjb25zdCB7IHJldHVybiBtX2Nsb3NlZDsgfQorICAgIGJvb2wgaXNGaXJzdExpbmUoKSBjb25z
dCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9CisgICAgVmVjdG9yPElubGluZVJ1bj4mIHJ1bnMo
KSB7IHJldHVybiBtX2lubGluZVJ1bnM7IH0KKworICAgIExheW91dFVuaXQgY29udGVudExvZ2lj
YWxSaWdodCgpIGNvbnN0OworICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KCkgY29u
c3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KKyAgICBMYXlvdXRVbml0IGF2YWls
YWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aDsgfQorICAgIE9wdGlv
bmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU+IGxhc3RSdW5UeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0UnVuVHlwZTsgfQorCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29u
c3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC50b3AoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNh
bEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsQm90dG9tKCkg
LSBsb2dpY2FsVG9wKCk7IH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVHJhaWxpbmdUcmltbWFi
bGVDb250ZW50IHsKKyAgICAgICAgTGF5b3V0VW5pdCB3aWR0aDsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoOworICAgIH07CisgICAgT3B0aW9uYWw8VHJhaWxpbmdUcmltbWFibGVDb250ZW50PiBt
X3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudDsKKyAgICBPcHRpb25hbDxJbmxpbmVSdW5Qcm92aWRl
cjo6UnVuOjpUeXBlPiBtX2xhc3RSdW5UeXBlOworICAgIGJvb2wgbV9sYXN0UnVuQ2FuRXhwYW5k
IHsgZmFsc2UgfTsKKworICAgIERpc3BsYXk6OkJveDo6UmVjdCBtX2xvZ2ljYWxSZWN0OworICAg
IExheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKKworICAgIFZlY3RvcjxJbmxpbmVSdW4+IG1f
aW5saW5lUnVuczsKKyAgICBib29sIG1faXNGaXJzdExpbmUgeyB0cnVlIH07CisgICAgYm9vbCBt
X2Nsb3NlZCB7IHRydWUgfTsKK307CisKK3ZvaWQgTGluZTo6aW5pdChjb25zdCBMYXlvdXRQb2lu
dCYgdG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5pbWFs
SGVpZ2h0KQoreworICAgIG1fbG9naWNhbFJlY3Quc2V0VG9wTGVmdCh0b3BMZWZ0KTsKKyAgICBt
X2xvZ2ljYWxSZWN0LnNldFdpZHRoKGF2YWlsYWJsZVdpZHRoKTsKKyAgICBtX2xvZ2ljYWxSZWN0
LnNldEhlaWdodChtaW5pbWFsSGVpZ2h0KTsKKyAgICBtX2F2YWlsYWJsZVdpZHRoID0gYXZhaWxh
YmxlV2lkdGg7CisKKyAgICBtX2lubGluZVJ1bnMuY2xlYXIoKTsKKyAgICBtX2xhc3RSdW5UeXBl
ID0geyB9OworICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9IGZhbHNlOworICAgIG1fdHJhaWxpbmdU
cmltbWFibGVDb250ZW50ID0geyB9OworICAgIG1fY2xvc2VkID0gZmFsc2U7Cit9CisKK3ZvaWQg
TGluZTo6YWRqdXN0TG9naWNhbExlZnQoTGF5b3V0VW5pdCBkZWx0YSkKK3sKKyAgICBBU1NFUlQo
ZGVsdGEgPiAwKTsKKworICAgIG1fYXZhaWxhYmxlV2lkdGggLT0gZGVsdGE7CisgICAgbV9sb2dp
Y2FsUmVjdC5zaGlmdExlZnRUbyhtX2xvZ2ljYWxSZWN0LmxlZnQoKSArIGRlbHRhKTsKKworICAg
IGZvciAoYXV0byYgaW5saW5lUnVuIDogbV9pbmxpbmVSdW5zKQorICAgICAgICBpbmxpbmVSdW4u
bW92ZUhvcml6b250YWxseShkZWx0YSk7Cit9CisKK3ZvaWQgTGluZTo6YWRqdXN0TG9naWNhbFJp
Z2h0KExheW91dFVuaXQgZGVsdGEpCit7CisgICAgQVNTRVJUKGRlbHRhID4gMCk7CisKKyAgICBt
X2F2YWlsYWJsZVdpZHRoIC09IGRlbHRhOworICAgIG1fbG9naWNhbFJlY3Quc2hpZnRSaWdodFRv
KG1fbG9naWNhbFJlY3QucmlnaHQoKSAtIGRlbHRhKTsKK30KKworc3RhdGljIGJvb2wgaXNUcmlt
bWFibGVDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIGlubGluZVJ1bikKK3sK
KyAgICByZXR1cm4gaW5saW5lUnVuLmlzV2hpdGVzcGFjZSgpICYmIGlubGluZVJ1bi5zdHlsZSgp
LmNvbGxhcHNlV2hpdGVTcGFjZSgpOworfQorCitMYXlvdXRVbml0IExpbmU6OmNvbnRlbnRMb2dp
Y2FsUmlnaHQoKSBjb25zdAoreworICAgIGlmIChtX2lubGluZVJ1bnMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7CisKKyAgICByZXR1cm4gbV9pbmxpbmVS
dW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQoKTsKK30KKwordm9pZCBMaW5lOjphcHBlbmRDb250ZW50
KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1biwgY29uc3QgTGF5b3V0U2l6ZSYgcnVu
U2l6ZSkKK3sKKyAgICBBU1NFUlQoIWlzQ2xvc2VkKCkpOworCisgICAgLy8gQXBwZW5kIHRoaXMg
dGV4dCBydW4gdG8gdGhlIGVuZCBvZiB0aGUgbGFzdCB0ZXh0IHJ1biwgaWYgdGhlIGxhc3QgcnVu
IGlzIGNvbnRpbnVvdXMuCisgICAgT3B0aW9uYWw8SW5saW5lUnVuOjpUZXh0Q29udGV4dD4gdGV4
dFJ1bjsKKyAgICBpZiAocnVuLmlzVGV4dCgpKSB7CisgICAgICAgIGF1dG8gdGV4dENvbnRleHQg
PSBydW4udGV4dENvbnRleHQoKTsKKyAgICAgICAgYXV0byBydW5MZW5ndGggPSB0ZXh0Q29udGV4
dC0+aXNDb2xsYXBzZWQoKSA/IDEgOiB0ZXh0Q29udGV4dC0+bGVuZ3RoKCk7CisgICAgICAgIHRl
eHRSdW4gPSBJbmxpbmVSdW46OlRleHRDb250ZXh0IHsgdGV4dENvbnRleHQtPnN0YXJ0KCksIHJ1
bkxlbmd0aCB9OworICAgIH0KKworICAgIGF1dG8gcmVxdWlyZXNOZXdJbmxpbmVSdW4gPSAhaGFz
Q29udGVudCgpIHx8ICFydW4uaXNUZXh0KCkgfHwgIW1fbGFzdFJ1bkNhbkV4cGFuZDsKKyAgICBp
ZiAocmVxdWlyZXNOZXdJbmxpbmVSdW4pIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMg
cHJvcGVyIGJhc2VsaW5lIGhhbmRsaW5nCisgICAgICAgIGF1dG8gaW5saW5lUnVuID0gSW5saW5l
UnVuIHsgeyBsb2dpY2FsVG9wKCksIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgcnVuU2l6ZS53aWR0
aCgpLCBydW5TaXplLmhlaWdodCgpIH0sIHJ1bi5pbmxpbmVJdGVtKCkgfTsKKyAgICAgICAgaWYg
KHRleHRSdW4pCisgICAgICAgICAgICBpbmxpbmVSdW4uc2V0VGV4dENvbnRleHQoeyB0ZXh0UnVu
LT5zdGFydCgpLCB0ZXh0UnVuLT5sZW5ndGgoKSB9KTsKKyAgICAgICAgbV9pbmxpbmVSdW5zLmFw
cGVuZChpbmxpbmVSdW4pOworICAgICAgICBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChzdGQ6Om1h
eChydW5TaXplLmhlaWdodCgpLCBtX2xvZ2ljYWxSZWN0LmhlaWdodCgpKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gTm9uLXRleHQgcnVucyBhbHdheXMgcmVxdWlyZSBuZXcgaW5saW5lIHJ1
bi4KKyAgICAgICAgQVNTRVJUKHRleHRSdW4pOworICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBt
X2lubGluZVJ1bnMubGFzdCgpOworICAgICAgICBBU1NFUlQocnVuU2l6ZS5oZWlnaHQoKSA9PSBp
bmxpbmVSdW4ubG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgaW5saW5lUnVuLnNldExvZ2ljYWxX
aWR0aChpbmxpbmVSdW4ubG9naWNhbFdpZHRoKCkgKyBydW5TaXplLndpZHRoKCkpOworICAgICAg
ICBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c2V0TGVuZ3RoKGlubGluZVJ1bi50ZXh0Q29udGV4
dCgpLT5sZW5ndGgoKSArIHRleHRSdW4tPmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBtX2F2YWls
YWJsZVdpZHRoIC09IHJ1blNpemUud2lkdGgoKTsKKyAgICBtX2xhc3RSdW5UeXBlID0gcnVuLnR5
cGUoKTsKKyAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBydW4uaXNUZXh0KCkgJiYgIXJ1bi50ZXh0
Q29udGV4dCgpLT5pc0NvbGxhcHNlZCgpOworICAgIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50
ID0geyB9OworICAgIGlmIChpc1RyaW1tYWJsZUNvbnRlbnQocnVuKSkKKyAgICAgICAgbV90cmFp
bGluZ1RyaW1tYWJsZUNvbnRlbnQgPSBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgeyBydW5TaXpl
LndpZHRoKCksIHRleHRSdW4tPmxlbmd0aCgpIH07Cit9CisKK3ZvaWQgTGluZTo6Y2xvc2UoKQor
eworICAgIGF1dG8gdHJpbVRyYWlsaW5nQ29udGVudCA9IFsmXSB7CisgICAgICAgIGlmICghbV90
cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1
dG8mIGxhc3RJbmxpbmVSdW4gPSBtX2lubGluZVJ1bnMubGFzdCgpOworICAgICAgICBsYXN0SW5s
aW5lUnVuLnNldExvZ2ljYWxXaWR0aChsYXN0SW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIC0gbV90
cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQtPndpZHRoKTsKKyAgICAgICAgbGFzdElubGluZVJ1bi50
ZXh0Q29udGV4dCgpLT5zZXRMZW5ndGgobGFzdElubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5n
dGgoKSAtIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50LT5sZW5ndGgpOworCisgICAgICAgIGlm
ICghbGFzdElubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG1f
aW5saW5lUnVucy5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fYXZhaWxhYmxlV2lkdGggKz0gbV90
cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQtPndpZHRoOworICAgICAgICBtX3RyYWlsaW5nVHJpbW1h
YmxlQ29udGVudCA9IHsgfTsKKyAgICB9OworCisgICAgaWYgKCFoYXNDb250ZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHRyaW1UcmFpbGluZ0NvbnRlbnQoKTsKKyAgICBtX2lzRmlyc3RM
aW5lID0gZmFsc2U7CisgICAgbV9jbG9zZWQgPSB0cnVlOworfQorCitJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6TGluZUxheW91dDo6TGluZUxheW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0
KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwgbV9mb3JtYXR0aW5nU3RhdGUobV9mb3Jt
YXR0aW5nQ29udGV4dC5mb3JtYXR0aW5nU3RhdGUoKSkKKyAgICAsIG1fZmxvYXRpbmdTdGF0ZSht
X2Zvcm1hdHRpbmdTdGF0ZS5mbG9hdGluZ1N0YXRlKCkpCisgICAgLCBtX2Zvcm1hdHRpbmdSb290
KGRvd25jYXN0PENvbnRhaW5lcj4obV9mb3JtYXR0aW5nQ29udGV4dC5yb290KCkpKQoreworfQor
CitzdGF0aWMgYm9vbCBpc1RyaW1tYWJsZUNvbnRlbnQoY29uc3QgSW5saW5lTGluZUJyZWFrZXI6
OlJ1biYgcnVuKQoreworICAgIHJldHVybiBydW4uY29udGVudC5pc1doaXRlc3BhY2UoKSAmJiBy
dW4uY29udGVudC5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpOworfQorCit2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpsYXlvdXQoY29uc3QgSW5saW5lUnVuUHJv
dmlkZXImIGlubGluZVJ1blByb3ZpZGVyKSBjb25zdAoreworICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOworICAgIGF1dG8gZmxvYXRpbmdD
b250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgbV9mbG9hdGluZ1N0YXRlIH07CisKKyAgICBMaW5l
IGxpbmU7CisgICAgaW5pdGlhbGl6ZU5ld0xpbmUobGluZSk7CisKKyAgICBJbmxpbmVMaW5lQnJl
YWtlciBsaW5lQnJlYWtlcihsYXlvdXRTdGF0ZSwgbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lQ29u
dGVudCgpLCBpbmxpbmVSdW5Qcm92aWRlci5ydW5zKCkpOworICAgIHdoaWxlIChhdXRvIHJ1biA9
IGxpbmVCcmVha2VyLm5leHRSdW4obGluZS5jb250ZW50TG9naWNhbFJpZ2h0KCksIGxpbmUuYXZh
aWxhYmxlV2lkdGgoKSwgIWxpbmUuaGFzQ29udGVudCgpKSkgeworICAgICAgICBhdXRvIGlzRmly
c3RSdW4gPSBydW4tPnBvc2l0aW9uID09IElubGluZUxpbmVCcmVha2VyOjpSdW46OlBvc2l0aW9u
OjpMaW5lQmVnaW47CisgICAgICAgIGF1dG8gaXNMYXN0UnVuID0gcnVuLT5wb3NpdGlvbiA9PSBJ
bmxpbmVMaW5lQnJlYWtlcjo6UnVuOjpQb3NpdGlvbjo6TGluZUVuZDsKKyAgICAgICAgYXV0byBn
ZW5lcmF0ZXNJbmxpbmVSdW4gPSB0cnVlOworCisgICAgICAgIC8vIFBvc2l0aW9uIGZsb2F0IGFu
ZCBhZGp1c3QgdGhlIHJ1bnMgb24gbGluZS4KKyAgICAgICAgaWYgKHJ1bi0+Y29udGVudC5pc0Zs
b2F0KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gcnVuLT5jb250ZW50LmlubGlu
ZUl0ZW0oKS5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGNvbXB1dGVGbG9hdFBvc2l0aW9uKGZs
b2F0aW5nQ29udGV4dCwgbGluZSwgZmxvYXRCb3gpOworICAgICAgICAgICAgbV9mbG9hdGluZ1N0
YXRlLmFwcGVuZChmbG9hdEJveCk7CisKKyAgICAgICAgICAgIGF1dG8gZmxvYXRCb3hXaWR0aCA9
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpLm1hcmdpbkJveCgp
LndpZHRoKCk7CisgICAgICAgICAgICAvLyBTaHJpbmsgYXZhaWxibGUgc3BhY2UgZm9yIGN1cnJl
bnQgbGluZSBhbmQgbW92ZSBleGlzdGluZyBpbmxpbmUgcnVucy4KKyAgICAgICAgICAgIGZsb2F0
Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8gbGluZS5hZGp1c3RMb2dpY2FsTGVmdChm
bG9hdEJveFdpZHRoKSA6IGxpbmUuYWRqdXN0TG9naWNhbFJpZ2h0KGZsb2F0Qm94V2lkdGgpOwor
CisgICAgICAgICAgICBnZW5lcmF0ZXNJbmxpbmVSdW4gPSBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIDEuIEluaXRpYWxpemUgbmV3IGxpbmUgaWYgbmVlZGVkLgorICAgICAgICAvLyAy
LiBBcHBlbmQgaW5saW5lIHJ1biB1bmxlc3MgaXQgaXMgc2tpcHBlZC4KKyAgICAgICAgLy8gMy4g
Q2xvc2UgY3VycmVudCBsaW5lIGlmIG5lZWRlZC4KKyAgICAgICAgaWYgKGlzRmlyc3RSdW4pIHsK
KyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpcnN0IHJ1biBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBh
Y3R1YWwgaW5saW5lIHJ1biwgdGhlIG5leHQgcnVuIGNvbWVzIGluIGZpcnN0LXJ1biBhcyB3ZWxs
LgorICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBzcGVuZCB0aW1lIG9uIGNsb3NpbmcvaW5pdGlh
bGl6aW5nLgorICAgICAgICAgICAgLy8gU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UuCisgICAgICAg
ICAgICBpZiAoIWdlbmVyYXRlc0lubGluZVJ1biB8fCBpc1RyaW1tYWJsZUNvbnRlbnQoKnJ1bikp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChsaW5lLmhhc0Nv
bnRlbnQoKSkgeworICAgICAgICAgICAgICAgIC8vIFByZXZpb3VzIHJ1biBlbmRlZCB1cCBiZWlu
ZyBhdCB0aGUgbGluZSBlbmQuIEFkanVzdCB0aGUgbGluZSBhY2NvcmRpbmdseS4KKyAgICAgICAg
ICAgICAgICBpZiAoIWxpbmUuaXNDbG9zZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgY2xvc2VM
aW5lKGxpbmUsIElzTGFzdExpbmU6Ok5vKTsKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplTmV3
TGluZShsaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChnZW5l
cmF0ZXNJbmxpbmVSdW4pIHsKKyAgICAgICAgICAgIGF1dG8gd2lkdGggPSBydW4tPndpZHRoOwor
ICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBydW4tPmNvbnRlbnQuaXNUZXh0KCkgPyBMYXlvdXRV
bml0KG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5jb21wdXRlZExpbmVIZWlnaHQoKSkgOiBsYXlv
dXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJ1bi0+Y29udGVudC5pbmxpbmVJdGVtKCku
bGF5b3V0Qm94KCkpLmhlaWdodCgpOyAKKyAgICAgICAgICAgIGFwcGVuZENvbnRlbnRUb0xpbmUo
bGluZSwgcnVuLT5jb250ZW50LCB7IHdpZHRoLCBoZWlnaHQgfSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaXNMYXN0UnVuKQorICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUsIElzTGFzdExp
bmU6Ok5vKTsKKyAgICB9CisKKyAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGluZTo6WWVzKTsK
K30KKwordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6aW5pdGlhbGl6
ZU5ld0xpbmUoTGluZSYgbGluZSkgY29uc3QKK3sKKyAgICBhdXRvJiBmb3JtYXR0aW5nUm9vdERp
c3BsYXlCb3ggPSBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCkuZGlzcGxheUJveEZv
ckxheW91dEJveChtX2Zvcm1hdHRpbmdSb290KTsKKworICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0
ID0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRCb3hMZWZ0KCk7CisgICAgYXV0byBs
aW5lTG9naWNhbFRvcCA9IGxpbmUuaXNGaXJzdExpbmUoKSA/IGZvcm1hdHRpbmdSb290RGlzcGxh
eUJveC5jb250ZW50Qm94VG9wKCkgOiBsaW5lLmxvZ2ljYWxCb3R0b20oKTsKKyAgICBhdXRvIGF2
YWlsYWJsZVdpZHRoID0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRCb3hXaWR0aCgp
OworCisgICAgLy8gQ2hlY2sgZm9yIGludHJ1ZGluZyBmbG9hdHMgYW5kIGFkanVzdCBsb2dpY2Fs
IGxlZnQvYXZhaWxhYmxlIHdpZHRoIGZvciB0aGlzIGxpbmUgYWNjb3JkaW5nbHkuCisgICAgaWYg
KCFtX2Zsb2F0aW5nU3RhdGUuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gZmxvYXRDb25zdHJh
aW50cyA9IG1fZmxvYXRpbmdTdGF0ZS5jb25zdHJhaW50cyh7IGxpbmVMb2dpY2FsVG9wIH0sIG1f
Zm9ybWF0dGluZ1Jvb3QpOworICAgICAgICAvLyBDaGVjayBpZiB0aGVzZSBjb25zdHJhaW50cyBh
Y3R1YWxseSBwdXQgbGltaXRhdGlvbiBvbiB0aGUgbGluZS4KKyAgICAgICAgaWYgKGZsb2F0Q29u
c3RyYWludHMubGVmdCAmJiAqZmxvYXRDb25zdHJhaW50cy5sZWZ0IDw9IGZvcm1hdHRpbmdSb290
RGlzcGxheUJveC5jb250ZW50Qm94TGVmdCgpKQorICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50
cy5sZWZ0ID0geyB9OworCisgICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ICYmICpm
bG9hdENvbnN0cmFpbnRzLnJpZ2h0ID49IGZvcm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50
Qm94UmlnaHQoKSkKKyAgICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMucmlnaHQgPSB7IH07CisK
KyAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLnJp
Z2h0KSB7CisgICAgICAgICAgICBBU1NFUlQoKmZsb2F0Q29uc3RyYWludHMubGVmdCA8ICpmbG9h
dENvbnN0cmFpbnRzLnJpZ2h0KTsKKyAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gKmZsb2F0
Q29uc3RyYWludHMucmlnaHQgLSAqZmxvYXRDb25zdHJhaW50cy5sZWZ0OworICAgICAgICAgICAg
bGluZUxvZ2ljYWxMZWZ0ID0gKmZsb2F0Q29uc3RyYWludHMubGVmdDsKKyAgICAgICAgfSBlbHNl
IGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQpIHsKKyAgICAgICAgICAgIEFTU0VSVCgqZmxvYXRD
b25zdHJhaW50cy5sZWZ0ID4gbGluZUxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAgIGF2YWlsYWJs
ZVdpZHRoIC09ICgqZmxvYXRDb25zdHJhaW50cy5sZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0KTsKKyAg
ICAgICAgICAgIGxpbmVMb2dpY2FsTGVmdCA9ICpmbG9hdENvbnN0cmFpbnRzLmxlZnQ7CisgICAg
ICAgIH0gZWxzZSBpZiAoZmxvYXRDb25zdHJhaW50cy5yaWdodCkgeworICAgICAgICAgICAgQVNT
RVJUKCpmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ID4gbGluZUxvZ2ljYWxMZWZ0KTsKKyAgICAgICAg
ICAgIGF2YWlsYWJsZVdpZHRoID0gKmZsb2F0Q29uc3RyYWludHMucmlnaHQgLSBsaW5lTG9naWNh
bExlZnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsaW5lLmluaXQoeyBsaW5lTG9naWNhbExl
ZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGF2YWlsYWJsZVdpZHRoLCBtX2Zvcm1hdHRpbmdSb290LnN0
eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOworfQorCit2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpMaW5lTGF5b3V0OjpzcGxpdElubGluZVJ1bklmTmVlZGVkKGNvbnN0IElubGluZVJ1
biYgaW5saW5lUnVuLCBJbmxpbmVSdW5zJiBzcGxpdFJ1bnMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGlubGluZVJ1bi50ZXh0Q29udGV4dCgpKTsKKyAgICBBU1NFUlQoaW5saW5lUnVuLm92ZXJsYXBz
TXVsdGlwbGVJbmxpbmVJdGVtcygpKTsKKyAgICAvLyBJbiBjZXJ0YWluIGNhc2VzLCBhIHJ1biBj
YW4gb3ZlcmxhcCBtdWx0aXBsZSBpbmxpbmUgZWxlbWVudHMgbGlrZSB0aGlzOgorICAgIC8vIDxz
cGFuPm5vcm1hbCB0ZXh0IGNvbnRlbnQ8L3NwYW4+PHNwYW4gc3R5bGU9InBvc2l0aW9uOiByZWxh
dGl2ZTsgbGVmdDogMTBweDsiPmJ1dCB0aGlzIG9uZSBuZWVkcyBhIGRlZGljYXRlZCBydW48L3Nw
YW4+PHNwYW4+ZW5kIG9mIHRleHQ8L3NwYW4+CisgICAgLy8gVGhlIGNvbnRlbnQgYWJvdmUgZ2Vu
ZXJhdGVzIG9uZSBsb25nIHJ1biA8bm9ybWFsIHRleHQgY29udGVudGJ1dCB0aGlzIG9uZSBuZWVk
cyBkZWRpY2F0ZWQgcnVuZW5kIG9mIHRleHQ+CisgICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIG1p
ZGRsZSBydW4gaXMgcG9zaXRpb25lZCwgaXQgbmVlZHMgdG8gYmUgbW92ZWQgaW5kZXBlbmRlbnRs
eSBmcm9tIHRoZSByZXN0IG9mIHRoZSBjb250ZW50LCBoZW5jZSBpdCBuZWVkcyBhIGRlZGljYXRl
ZCBpbmxpbmUgcnVuLgorCisgICAgLy8gMS4gU3RhcnQgd2l0aCB0aGUgZmlyc3QgaW5saW5lIGl0
ZW0gKGVsZW1lbnQpIGFuZCB0cmF2ZXJzIHRoZSBsaXN0IHVudGlsCisgICAgLy8gMi4gZWl0aGVy
IGZpbmQgYW4gaW5saW5lIGl0ZW0gdGhhdCBuZWVkcyBhIGRlZGljYXRlZCBydW4gb3Igd2UgcmVh
Y2ggdGhlIGVuZCBvZiB0aGUgcnVuCisgICAgLy8gMy4gQ3JlYXRlIGRlZGljYXRlIGlubGluZSBy
dW5zLgorICAgIGF1dG8mIGlubGluZUNvbnRlbnQgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVD
b250ZW50KCk7CisgICAgYXV0byBjb250ZW50U3RhcnQgPSBpbmxpbmVSdW4ubG9naWNhbExlZnQo
KTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c3Rh
cnQoKTsKKyAgICBhdXRvIHJlbWFuaW5nTGVuZ3RoID0gaW5saW5lUnVuLnRleHRDb250ZXh0KCkt
Pmxlbmd0aCgpOworCisgICAgc3RydWN0IFVuY29tbWl0dGVkIHsKKyAgICAgICAgY29uc3QgSW5s
aW5lSXRlbSogZmlyc3RJbmxpbmVJdGVtIHsgbnVsbHB0ciB9OworICAgICAgICBjb25zdCBJbmxp
bmVJdGVtKiBsYXN0SW5saW5lSXRlbSB7IG51bGxwdHIgfTsKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoIHsgMCB9OworICAgIH07CisgICAgT3B0aW9uYWw8VW5jb21taXR0ZWQ+IHVuY29tbWl0dGVk
OworCisgICAgYXV0byBjb21taXQgPSBbJl0geworICAgICAgICBpZiAoIXVuY29tbWl0dGVkKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnRlbnRTdGFydCArPSB1bmNvbW1pdHRl
ZC0+Zmlyc3RJbmxpbmVJdGVtLT5ub25CcmVha2FibGVTdGFydCgpOworCisgICAgICAgIGF1dG8g
cnVuV2lkdGggPSB0aGlzLT5ydW5XaWR0aChpbmxpbmVDb250ZW50LCAqdW5jb21taXR0ZWQtPmZp
cnN0SW5saW5lSXRlbSwgc3RhcnRQb3NpdGlvbiwgdW5jb21taXR0ZWQtPmxlbmd0aCwgY29udGVu
dFN0YXJ0KTsKKyAgICAgICAgYXV0byBydW4gPSBJbmxpbmVSdW4geyB7IGlubGluZVJ1bi5sb2dp
Y2FsVG9wKCksIGNvbnRlbnRTdGFydCwgcnVuV2lkdGgsIGlubGluZVJ1bi5sb2dpY2FsSGVpZ2h0
KCkgfSwgKnVuY29tbWl0dGVkLT5maXJzdElubGluZUl0ZW0gfTsKKyAgICAgICAgcnVuLnNldFRl
eHRDb250ZXh0KHsgc3RhcnRQb3NpdGlvbiwgdW5jb21taXR0ZWQtPmxlbmd0aCB9KTsKKyAgICAg
ICAgc3BsaXRSdW5zLmFwcGVuZChydW4pOworCisgICAgICAgIGNvbnRlbnRTdGFydCArPSBydW5X
aWR0aCArIHVuY29tbWl0dGVkLT5sYXN0SW5saW5lSXRlbS0+bm9uQnJlYWthYmxlRW5kKCk7CisK
KyAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7CisgICAgICAgIHVuY29tbWl0dGVkID0geyB9Owor
ICAgIH07CisKKyAgICBmb3IgKGF1dG8gaXRlcmF0b3IgPSBpbmxpbmVDb250ZW50LmZpbmQoY29u
c3RfY2FzdDxJbmxpbmVJdGVtKj4oJmlubGluZVJ1bi5pbmxpbmVJdGVtKCkpKTsgaXRlcmF0b3Ig
IT0gaW5saW5lQ29udGVudC5lbmQoKSAmJiByZW1hbmluZ0xlbmd0aCA+IDA7ICsraXRlcmF0b3Ip
IHsKKyAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9ICoqaXRlcmF0b3I7CisKKyAgICAgICAgLy8g
U2tpcCBhbGwgbm9uLWluZmxvdyBib3hlcyAoZmxvYXRzLCBvdXQtb2YtZmxvdyBwb3NpdGlvbmVk
IGVsZW1lbnRzKS4gVGhleSBkb24ndCBwYXJ0aWNpcGF0ZSBpbiB0aGUgaW5saW5lIHJ1biBjb250
ZXh0LgorICAgICAgICBpZiAoIWlubGluZUl0ZW0ubGF5b3V0Qm94KCkuaXNJbkZsb3coKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IFsmXSB7
CisgICAgICAgICAgICByZXR1cm4gc3RkOjptaW4ocmVtYW5pbmdMZW5ndGgsIGlubGluZUl0ZW0u
dGV4dENvbnRlbnQoKS5sZW5ndGgoKSAtIHN0YXJ0UG9zaXRpb24pOworICAgICAgICB9OworCisg
ICAgICAgIC8vIDEuIEJyZWFrIGJlZm9yZS9hZnRlciAtPiByZXF1aXJlcyBkZWRpY2F0ZWQgcnVu
IC0+IGNvbW1pdCB3aGF0IHdlJ3ZlIGdvdCBzbyBmYXIgYW5kIGFsc28gY29tbWl0IHRoZSBjdXJy
ZW50IGlubGluZSBlbGVtZW50IGFzIGEgc2VwYXJhdGUgaW5saW5lIHJ1bi4KKyAgICAgICAgLy8g
Mi4gQnJlYWsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5saW5lIGVsZW1lbnQgLT4gY29tbWl0
IHdoYXQgd2UndmUgZ290IHNvIGZhci4gQ3VycmVudCBlbGVtZW50IGJlY29tZXMgdGhlIGZpcnN0
IHVuY29tbWl0dGVkLgorICAgICAgICAvLyAzLiBCcmVhayBhdCB0aGUgZW5kIG9mIHRoZSBpbmxp
bmUgZWxlbWVudCAtPiBjb21taXQgd2hhdCB3ZSd2ZSBnb3Qgc28gZmFyIGluY2x1ZGluZyB0aGUg
Y3VycmVudCBlbGVtZW50LgorICAgICAgICAvLyA0LiBJbmxpbmUgZWxlbWVudCBkb2VzIG5vdCBy
ZXF1aXJlIHJ1biBicmVha2luZyAtPiBhZGQgY3VycmVudCBpbmxpbmUgZWxlbWVudCB0byB1bmNv
bW1pdHRlZC4gSnVtcCB0byB0aGUgbmV4dCBlbGVtZW50LgorICAgICAgICBhdXRvIGRldGFjaGlu
Z1J1bGVzID0gaW5saW5lSXRlbS5kZXRhY2hpbmdSdWxlcygpOworCisgICAgICAgIC8vICMxCisg
ICAgICAgIGlmIChkZXRhY2hpbmdSdWxlcy5jb250YWluc0FsbCh7IElubGluZUl0ZW06OkRldGFj
aGluZ1J1bGU6OkJyZWFrQXRTdGFydCwgSW5saW5lSXRlbTo6RGV0YWNoaW5nUnVsZTo6QnJlYWtB
dEVuZCB9KSkgeworICAgICAgICAgICAgY29tbWl0KCk7CisgICAgICAgICAgICBhdXRvIGNvbnRl
bnRMZW5ndGggPSBjdXJyZW50TGVuZ3RoKCk7CisgICAgICAgICAgICB1bmNvbW1pdHRlZCA9IFVu
Y29tbWl0dGVkIHsgJmlubGluZUl0ZW0sICZpbmxpbmVJdGVtLCBjb250ZW50TGVuZ3RoIH07Cisg
ICAgICAgICAgICByZW1hbmluZ0xlbmd0aCAtPSBjb250ZW50TGVuZ3RoOworICAgICAgICAgICAg
Y29tbWl0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
ICMyCisgICAgICAgIGlmIChkZXRhY2hpbmdSdWxlcy5jb250YWlucyhJbmxpbmVJdGVtOjpEZXRh
Y2hpbmdSdWxlOjpCcmVha0F0U3RhcnQpKQorICAgICAgICAgICAgY29tbWl0KCk7CisKKyAgICAg
ICAgLy8gQWRkIGN1cnJlbnQgaW5saW5lIGl0ZW0gdG8gdW5jb21taXR0ZWQuCisgICAgICAgIC8v
ICMzIGFuZCAjNAorICAgICAgICBhdXRvIGNvbnRlbnRMZW5ndGggPSBjdXJyZW50TGVuZ3RoKCk7
CisgICAgICAgIGlmICghdW5jb21taXR0ZWQpCisgICAgICAgICAgICB1bmNvbW1pdHRlZCA9IFVu
Y29tbWl0dGVkIHsgJmlubGluZUl0ZW0sICZpbmxpbmVJdGVtLCAwIH07CisgICAgICAgIHVuY29t
bWl0dGVkLT5sZW5ndGggKz0gY29udGVudExlbmd0aDsKKyAgICAgICAgdW5jb21taXR0ZWQtPmxh
c3RJbmxpbmVJdGVtID0gJmlubGluZUl0ZW07CisgICAgICAgIHJlbWFuaW5nTGVuZ3RoIC09IGNv
bnRlbnRMZW5ndGg7CisKKyAgICAgICAgLy8gIzMKKyAgICAgICAgaWYgKGRldGFjaGluZ1J1bGVz
LmNvbnRhaW5zKElubGluZUl0ZW06OkRldGFjaGluZ1J1bGU6OkJyZWFrQXRFbmQpKQorICAgICAg
ICAgICAgY29tbWl0KCk7CisgICAgfQorICAgIC8vIEVpdGhlciBhbGwgaW5saW5lIGVsZW1lbnRz
IG5lZWRlZCBkZWRpY2F0ZWQgcnVucyBvciBuZWl0aGVyIG9mIHRoZW0uCisgICAgaWYgKCFyZW1h
bmluZ0xlbmd0aCB8fCByZW1hbmluZ0xlbmd0aCA9PSBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbW1pdCgpOworfQorCit2b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjpjcmVhdGVGaW5hbFJ1bnMoTGluZSYg
bGluZSkgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGxpbmUucnVucygpKSB7
CisgICAgICAgIGlmIChpbmxpbmVSdW4ub3ZlcmxhcHNNdWx0aXBsZUlubGluZUl0ZW1zKCkpIHsK
KyAgICAgICAgICAgIElubGluZVJ1bnMgc3BsaXRSdW5zOworICAgICAgICAgICAgc3BsaXRJbmxp
bmVSdW5JZk5lZWRlZChpbmxpbmVSdW4sIHNwbGl0UnVucyk7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIHNwbGl0UnVuIDogc3BsaXRSdW5zKQorICAgICAgICAgICAgICAgIG1fZm9ybWF0dGluZ1N0
YXRlLmFwcGVuZElubGluZVJ1bihzcGxpdFJ1bik7CisKKyAgICAgICAgICAgIGlmICghc3BsaXRS
dW5zLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gZmluYWxSdW4gPSBbJl0geworICAgICAgICAgICAgYXV0byYgaW5saW5lSXRl
bSA9IGlubGluZVJ1bi5pbmxpbmVJdGVtKCk7CisgICAgICAgICAgICBpZiAoaW5saW5lSXRlbS5k
ZXRhY2hpbmdSdWxlcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5l
UnVuOworCisgICAgICAgICAgICBJbmxpbmVSdW4gYWRqdXN0ZWRSdW4gPSBpbmxpbmVSdW47Cisg
ICAgICAgICAgICBhdXRvIHdpZHRoID0gaW5saW5lUnVuLmxvZ2ljYWxXaWR0aCgpIC0gaW5saW5l
SXRlbS5ub25CcmVha2FibGVTdGFydCgpIC0gaW5saW5lSXRlbS5ub25CcmVha2FibGVFbmQoKTsK
KyAgICAgICAgICAgIGFkanVzdGVkUnVuLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2Fs
TGVmdCgpICsgaW5saW5lSXRlbS5ub25CcmVha2FibGVTdGFydCgpKTsKKyAgICAgICAgICAgIGFk
anVzdGVkUnVuLnNldExvZ2ljYWxXaWR0aCh3aWR0aCk7CisgICAgICAgICAgICByZXR1cm4gYWRq
dXN0ZWRSdW47CisgICAgICAgIH07CisKKyAgICAgICAgbV9mb3JtYXR0aW5nU3RhdGUuYXBwZW5k
SW5saW5lUnVuKGZpbmFsUnVuKCkpOworICAgIH0KK30KKwordm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6TGluZUxheW91dDo6cG9zdFByb2Nlc3NJbmxpbmVSdW5zKExpbmUmIGxpbmUsIElz
TGFzdExpbmUgaXNMYXN0TGluZSkgY29uc3QKK3sKKyAgICBhbGlnblJ1bnMobV9mb3JtYXR0aW5n
Um9vdC5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lLCBpc0xhc3RMaW5lKTsKKyAgICBhdXRvIGZp
cnN0UnVuSW5kZXggPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCkuc2l6ZSgpOworICAg
IGNyZWF0ZUZpbmFsUnVucyhsaW5lKTsKKworICAgIHBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxk
cmVuKGZpcnN0UnVuSW5kZXgpOworfQorCit2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lTGF5b3V0OjpjbG9zZUxpbmUoTGluZSYgbGluZSwgSXNMYXN0TGluZSBpc0xhc3RMaW5lKSBj
b25zdAoreworICAgIGxpbmUuY2xvc2UoKTsKKyAgICBpZiAoIWxpbmUuaGFzQ29udGVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwb3N0UHJvY2Vzc0lubGluZVJ1bnMobGluZSwgaXNMYXN0
TGluZSk7Cit9CisKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmFw
cGVuZENvbnRlbnRUb0xpbmUoTGluZSYgbGluZSwgY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1
biYgcnVuLCBjb25zdCBMYXlvdXRTaXplJiBydW5TaXplKSBjb25zdAoreworICAgIGF1dG8gbGFz
dFJ1blR5cGUgPSBsaW5lLmxhc3RSdW5UeXBlKCk7CisgICAgbGluZS5hcHBlbmRDb250ZW50KHJ1
biwgcnVuU2l6ZSk7CisKKyAgICBpZiAobV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpLnRleHRBbGln
bigpID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAgIGNvbXB1dGVFeHBhbnNpb25P
cHBvcnR1bml0aWVzKGxpbmUsIHJ1biwgbGFzdFJ1blR5cGUudmFsdWVPcihJbmxpbmVSdW5Qcm92
aWRlcjo6UnVuOjpUeXBlOjpOb25XaGl0ZXNwYWNlKSk7Cit9CisKK3ZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVGbG9hdFBvc2l0aW9uKGNvbnN0IEZsb2F0
aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBMaW5lJiBsaW5lLCBjb25zdCBCb3gmIGZsb2F0
Qm94KSBjb25zdAoreworICAgIGF1dG8mIGxheW91dFN0YXRlID0gbV9mb3JtYXR0aW5nQ29udGV4
dC5sYXlvdXRTdGF0ZSgpOworICAgIEFTU0VSVChsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGZs
b2F0Qm94KSk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goZmxvYXRCb3gpOworCisgICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJz
dC4KKyAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lLmNvbnRlbnRMb2dpY2FsUmlnaHQo
KSwgbGluZS5sb2dpY2FsVG9wKCkgfSk7CisgICAgLy8gRmxvYXQgaXQuCisgICAgZGlzcGxheUJv
eC5zZXRUb3BMZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGZsb2F0Qm94KSk7
Cit9CisKK3ZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OnBsYWNlSW5G
bG93UG9zaXRpb25lZENoaWxkcmVuKHVuc2lnbmVkIGZpc3RSdW5JbmRleCkgY29uc3QKK3sKKyAg
ICBhdXRvJiBsYXlvdXRTdGF0ZSA9IG1fZm9ybWF0dGluZ0NvbnRleHQubGF5b3V0U3RhdGUoKTsK
KyAgICBhdXRvJiBpbmxpbmVSdW5zID0gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpOwor
ICAgIGZvciAoYXV0byBydW5JbmRleCA9IGZpc3RSdW5JbmRleDsgcnVuSW5kZXggPCBpbmxpbmVS
dW5zLnNpemUoKTsgKytydW5JbmRleCkgeworICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxp
bmVSdW5zW3J1bkluZGV4XTsKKworICAgICAgICBhdXRvIHBvc2l0aW9uT2Zmc2V0ID0gWyZdKGF1
dG8mIGxheW91dEJveCkgeworICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gZmlndXJlIG91
dCB3aGV0aGVyIGluLWZsb3cgb2Zmc2V0IHNob3VsZCBzdGljay4gVGhpcyBtaWdodCB2ZXJ5IHdl
bGwgYmUgdGVtcG9yYXJ5LgorICAgICAgICAgICAgT3B0aW9uYWw8TGF5b3V0U2l6ZT4gb2Zmc2V0
OworICAgICAgICAgICAgZm9yIChhdXRvKiBib3ggPSAmbGF5b3V0Qm94OyBib3ggIT0gJm1fZm9y
bWF0dGluZ1Jvb3Q7IGJveCA9IGJveC0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWJveC0+aXNJbkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldC52YWx1ZU9yKExheW91dFNpemUoKSkg
KyBHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dFN0YXRlLCAq
Ym94KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKGF1dG8gb2Zmc2V0ID0gcG9zaXRpb25PZmZzZXQoaW5saW5lUnVu
LmlubGluZUl0ZW0oKS5sYXlvdXRCb3goKSkpIHsKKyAgICAgICAgICAgIGlubGluZVJ1bi5tb3Zl
VmVydGljYWxseShvZmZzZXQtPmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlubGluZVJ1bi5tb3Zl
SG9yaXpvbnRhbGx5KG9mZnNldC0+d2lkdGgoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0
YXRpYyBMYXlvdXRVbml0IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KFRleHRBbGlnbk1vZGUgYWxp
Z24sIExheW91dFVuaXQgbGluZUxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IHJlbWFpbmluZ1dpZHRo
KQoreworICAgIHN3aXRjaCAoYWxpZ24pIHsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6
CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6U3RhcnQ6CisgICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQ7CisgICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0
OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAgICByZXR1cm4gbGluZUxvZ2lj
YWxMZWZ0ICsgc3RkOjptYXgocmVtYWluaW5nV2lkdGgsIDBfbHUpOworICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgor
ICAgICAgICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0ICsgc3RkOjptYXgocmVtYWluaW5nV2lkdGgg
LyAyLCAwX2x1KTsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdDsKK30KKwordm9pZCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUxheW91dDo6anVzdGlmeVJ1bnMoTGluZSYgbGluZSkK
K3sKKyAgICBhdXRvJiBpbmxpbmVSdW5zID0gbGluZS5ydW5zKCk7CisgICAgYXV0byYgbGFzdElu
bGluZVJ1biA9IGlubGluZVJ1bnMubGFzdCgpOworCisgICAgLy8gQWRqdXN0IChmb3JiaWQpIHRy
YWlsaW5nIGV4cGFuc2lvbiBmb3IgdGhlIGxhc3QgdGV4dCBydW4gb24gbGluZS4KKyAgICBhdXRv
IGV4cGFuc2lvbkJlaGF2aW9yID0gbGFzdElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgp
LmJlaGF2aW9yOworICAgIC8vIFJlbW92ZSBhbGxvdyBhbmQgYWRkIGZvcmJpZC4KKyAgICBleHBh
bnNpb25CZWhhdmlvciBePSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uOworICAgIGV4cGFuc2lvbkJl
aGF2aW9yIHw9IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uOworICAgIGxhc3RJbmxpbmVSdW4uZXhw
YW5zaW9uT3Bwb3J0dW5pdHkoKS5iZWhhdmlvciA9IGV4cGFuc2lvbkJlaGF2aW9yOworCisgICAg
Ly8gQ29sbGVjdCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBhbmQganVzdGlmeSB0aGUgcnVucy4K
KyAgICBhdXRvIHdpZHRoVG9EaXN0cmlidXRlID0gbGluZS5hdmFpbGFibGVXaWR0aCgpOworICAg
IGlmICh3aWR0aFRvRGlzdHJpYnV0ZSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgPSAwOworICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDog
aW5saW5lUnVucykKKyAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyArPSBpbmxpbmVSdW4u
ZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5jb3VudDsKKworICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0
dW5pdGllcykKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgZXhwYW5zaW9uID0gd2lkdGhU
b0Rpc3RyaWJ1dGUudG9GbG9hdCgpIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdGllczsKKyAgICBMYXlv
dXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uOworICAgIGZvciAoYXV0byYgaW5saW5lUnVuIDog
aW5saW5lUnVucykgeworICAgICAgICBhdXRvIGV4cGFuc2lvbkZvclJ1biA9IGlubGluZVJ1bi5l
eHBhbnNpb25PcHBvcnR1bml0eSgpLmNvdW50ICogZXhwYW5zaW9uOworCisgICAgICAgIGlubGlu
ZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmV4cGFuc2lvbiA9IGV4cGFuc2lvbkZvclJ1bjsK
KyAgICAgICAgaW5saW5lUnVuLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgp
ICsgYWNjdW11bGF0ZWRFeHBhbnNpb24pOworICAgICAgICBpbmxpbmVSdW4uc2V0TG9naWNhbFdp
ZHRoKGlubGluZVJ1bi5sb2dpY2FsV2lkdGgoKSArIGV4cGFuc2lvbkZvclJ1bik7CisgICAgICAg
IGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGV4cGFuc2lvbkZvclJ1bjsKKyAgICB9Cit9CisKK3Zv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6OmNvbXB1dGVFeHBhbnNpb25P
cHBvcnR1bml0aWVzKExpbmUmIGxpbmUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mIHJ1
biwgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBsYXN0UnVuVHlwZSkgY29uc3QKK3sKKyAg
ICBhdXRvIGlzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBbXShhdXRvIGN1cnJlbnRSdW5Jc1doaXRl
c3BhY2UsIGF1dG8gbGFzdFJ1bklzV2hpdGVzcGFjZSkgeworICAgICAgICByZXR1cm4gY3VycmVu
dFJ1bklzV2hpdGVzcGFjZSB8fCAoIWN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgJiYgIWxhc3RSdW5J
c1doaXRlc3BhY2UpOworICAgIH07CisKKyAgICBhdXRvIGV4cGFuc2lvbkJlaGF2aW9yID0gW10o
YXV0byBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpIHsKKyAgICAgICAgRXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uOworICAgICAgICBl
eHBhbnNpb25CZWhhdmlvciB8PSBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkgPyBGb3JiaWRMZWFk
aW5nRXhwYW5zaW9uIDogQWxsb3dMZWFkaW5nRXhwYW5zaW9uOworICAgICAgICByZXR1cm4gZXhw
YW5zaW9uQmVoYXZpb3I7CisgICAgfTsKKworICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVu
aXR5ID0gaXNFeHBhbnNpb25PcHBvcnR1bml0eShydW4uaXNXaGl0ZXNwYWNlKCksIGxhc3RSdW5U
eXBlID09IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6OldoaXRlc3BhY2UpOworCisgICAg
YXV0byYgY3VycmVudElubGluZVJ1biA9IGxpbmUucnVucygpLmxhc3QoKTsKKyAgICBhdXRvJiBl
eHBhbnNpb25PcHBvcnR1bml0eSA9IGN1cnJlbnRJbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5p
dHkoKTsKKyAgICBpZiAoaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5KQorICAgICAgICArK2V4cGFu
c2lvbk9wcG9ydHVuaXR5LmNvdW50OworCisgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHkuYmVoYXZp
b3IgPSBleHBhbnNpb25CZWhhdmlvcihpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpOworfQorCit2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lTGF5b3V0OjphbGlnblJ1bnMoVGV4dEFs
aWduTW9kZSB0ZXh0QWxpZ24sIExpbmUmIGxpbmUsICBJc0xhc3RMaW5lIGlzTGFzdExpbmUpIGNv
bnN0Cit7CisgICAgYXV0byBhZGp1dGVkVGV4dEFsaWdubWVudCA9IHRleHRBbGlnbiAhPSBUZXh0
QWxpZ25Nb2RlOjpKdXN0aWZ5ID8gdGV4dEFsaWduIDogaXNMYXN0TGluZSA9PSBJc0xhc3RMaW5l
OjpObyA/IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgOiBUZXh0QWxpZ25Nb2RlOjpMZWZ0OworICAg
IGlmIChhZGp1dGVkVGV4dEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7Cisg
ICAgICAgIGp1c3RpZnlSdW5zKGxpbmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
YXV0byBsaW5lTG9naWNhbExlZnQgPSBsaW5lLmNvbnRlbnRMb2dpY2FsTGVmdCgpOworICAgIGF1
dG8gYWRqdXN0ZWRMb2dpY2FsTGVmdCA9IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KGFkanV0ZWRU
ZXh0QWxpZ25tZW50LCBsaW5lTG9naWNhbExlZnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSk7Cisg
ICAgaWYgKGFkanVzdGVkTG9naWNhbExlZnQgPT0gbGluZUxvZ2ljYWxMZWZ0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIGRlbHRhID0gYWRqdXN0ZWRMb2dpY2FsTGVmdCAtIGxpbmVMb2dp
Y2FsTGVmdDsKKyAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IGxpbmUucnVucygpKQorICAgICAg
ICBpbmxpbmVSdW4uc2V0TG9naWNhbExlZnQoaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgKyBkZWx0
YSk7Cit9CisKK0xheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVMYXlvdXQ6
OnJ1bldpZHRoKGNvbnN0IElubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIGNvbnN0IElubGlu
ZUl0ZW0mIGlubGluZUl0ZW0sIEl0ZW1Qb3NpdGlvbiBmcm9tLCB1bnNpZ25lZCBsZW5ndGgsIExh
eW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdCAKK3sKKyAgICBMYXlvdXRVbml0IHdp
ZHRoOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGZyb207CisgICAgYXV0byBpdGVyYXRvciA9
IGlubGluZUNvbnRlbnQuZmluZChjb25zdF9jYXN0PElubGluZUl0ZW0qPigmaW5saW5lSXRlbSkp
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBhdXRvIGlubGluZUl0ZW1FbmQgPSBpbmxpbmVD
b250ZW50LmVuZCgpOworI2VuZGlmCisgICAgd2hpbGUgKGxlbmd0aCkgeworICAgICAgICBBU1NF
UlQoaXRlcmF0b3IgIT0gaW5saW5lSXRlbUVuZCk7CisgICAgICAgIGF1dG8mIGN1cnJlbnRJbmxp
bmVJdGVtID0gKippdGVyYXRvcjsKKyAgICAgICAgYXV0byBlbmRQb3NpdGlvbiA9IHN0ZDo6bWlu
PEl0ZW1Qb3NpdGlvbj4oc3RhcnRQb3NpdGlvbiArIGxlbmd0aCwgY3VycmVudElubGluZUl0ZW0u
dGV4dENvbnRlbnQoKS5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8gdGV4dFdpZHRoID0gVGV4dFV0
aWw6OndpZHRoKGN1cnJlbnRJbmxpbmVJdGVtLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwg
Y29udGVudExvZ2ljYWxMZWZ0KTsKKworICAgICAgICBjb250ZW50TG9naWNhbExlZnQgKz0gdGV4
dFdpZHRoOworICAgICAgICB3aWR0aCArPSB0ZXh0V2lkdGg7CisgICAgICAgIGxlbmd0aCAtPSAo
ZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKKworICAgICAgICBzdGFydFBvc2l0aW9uID0g
MDsKKyAgICAgICAgKytpdGVyYXRvcjsKKyAgICB9CisgICAgcmV0dXJuIHdpZHRoOworfQorCit9
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9MaW5lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEyNzNkMWIxYzVmYzY5
ZmY5YWJlMDgwNTllYzQ2NTc3NzI1NTYyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9M
aW5lLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW5saW5lUnVuUHJvdmlkZXIuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsK
LQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6aW5pdChjb25zdCBMYXlvdXRQ
b2ludCYgdG9wTGVmdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgTGF5b3V0VW5pdCBtaW5p
bWFsSGVpZ2h0KQotewotICAgIG1fbG9naWNhbFJlY3Quc2V0VG9wTGVmdCh0b3BMZWZ0KTsKLSAg
ICBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKGF2YWlsYWJsZVdpZHRoKTsKLSAgICBtX2xvZ2ljYWxS
ZWN0LnNldEhlaWdodChtaW5pbWFsSGVpZ2h0KTsKLSAgICBtX2F2YWlsYWJsZVdpZHRoID0gYXZh
aWxhYmxlV2lkdGg7Ci0KLSAgICBtX2lubGluZVJ1bnMuY2xlYXIoKTsKLSAgICBtX2xhc3RSdW5U
eXBlID0geyB9OwotICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9IGZhbHNlOwotICAgIG1fdHJhaWxp
bmdUcmltbWFibGVDb250ZW50ID0geyB9OwotICAgIG1fY2xvc2VkID0gZmFsc2U7Ci19Ci0KLXZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmFkanVzdExvZ2ljYWxMZWZ0KExheW91
dFVuaXQgZGVsdGEpCi17Ci0gICAgQVNTRVJUKGRlbHRhID4gMCk7Ci0KLSAgICBtX2F2YWlsYWJs
ZVdpZHRoIC09IGRlbHRhOwotICAgIG1fbG9naWNhbFJlY3Quc2hpZnRMZWZ0VG8obV9sb2dpY2Fs
UmVjdC5sZWZ0KCkgKyBkZWx0YSk7Ci0KLSAgICBmb3IgKGF1dG8mIGlubGluZVJ1biA6IG1faW5s
aW5lUnVucykKLSAgICAgICAgaW5saW5lUnVuLm1vdmVIb3Jpem9udGFsbHkoZGVsdGEpOwotfQot
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjphZGp1c3RMb2dpY2FsUmlnaHQo
TGF5b3V0VW5pdCBkZWx0YSkKLXsKLSAgICBBU1NFUlQoZGVsdGEgPiAwKTsKLQotICAgIG1fYXZh
aWxhYmxlV2lkdGggLT0gZGVsdGE7Ci0gICAgbV9sb2dpY2FsUmVjdC5zaGlmdFJpZ2h0VG8obV9s
b2dpY2FsUmVjdC5yaWdodCgpIC0gZGVsdGEpOwotfQotCi1zdGF0aWMgYm9vbCBpc1RyaW1tYWJs
ZUNvbnRlbnQoY29uc3QgSW5saW5lUnVuUHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuKQotewotICAg
IHJldHVybiBpbmxpbmVSdW4uaXNXaGl0ZXNwYWNlKCkgJiYgaW5saW5lUnVuLnN0eWxlKCkuY29s
bGFwc2VXaGl0ZVNwYWNlKCk7Ci19Ci0KLUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmU6OmNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdAotewotICAgIGlmIChtX2lubGlu
ZVJ1bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7Ci0K
LSAgICByZXR1cm4gbV9pbmxpbmVSdW5zLmxhc3QoKS5sb2dpY2FsUmlnaHQoKTsKLX0KLQotdm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6YXBwZW5kQ29udGVudChjb25zdCBJbmxp
bmVSdW5Qcm92aWRlcjo6UnVuJiBydW4sIGNvbnN0IExheW91dFNpemUmIHJ1blNpemUpCi17Ci0g
ICAgQVNTRVJUKCFpc0Nsb3NlZCgpKTsKLQotICAgIC8vIEFwcGVuZCB0aGlzIHRleHQgcnVuIHRv
IHRoZSBlbmQgb2YgdGhlIGxhc3QgdGV4dCBydW4sIGlmIHRoZSBsYXN0IHJ1biBpcyBjb250aW51
b3VzLgotICAgIE9wdGlvbmFsPElubGluZVJ1bjo6VGV4dENvbnRleHQ+IHRleHRSdW47Ci0gICAg
aWYgKHJ1bi5pc1RleHQoKSkgewotICAgICAgICBhdXRvIHRleHRDb250ZXh0ID0gcnVuLnRleHRD
b250ZXh0KCk7Ci0gICAgICAgIGF1dG8gcnVuTGVuZ3RoID0gdGV4dENvbnRleHQtPmlzQ29sbGFw
c2VkKCkgPyAxIDogdGV4dENvbnRleHQtPmxlbmd0aCgpOwotICAgICAgICB0ZXh0UnVuID0gSW5s
aW5lUnVuOjpUZXh0Q29udGV4dCB7IHRleHRDb250ZXh0LT5zdGFydCgpLCBydW5MZW5ndGggfTsK
LSAgICB9Ci0KLSAgICBhdXRvIHJlcXVpcmVzTmV3SW5saW5lUnVuID0gIWhhc0NvbnRlbnQoKSB8
fCAhcnVuLmlzVGV4dCgpIHx8ICFtX2xhc3RSdW5DYW5FeHBhbmQ7Ci0gICAgaWYgKHJlcXVpcmVz
TmV3SW5saW5lUnVuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHByb3BlciBiYXNl
bGluZSBoYW5kbGluZwotICAgICAgICBhdXRvIGlubGluZVJ1biA9IElubGluZVJ1biB7IHsgbG9n
aWNhbFRvcCgpLCBjb250ZW50TG9naWNhbFJpZ2h0KCksIHJ1blNpemUud2lkdGgoKSwgcnVuU2l6
ZS5oZWlnaHQoKSB9LCBydW4uaW5saW5lSXRlbSgpIH07Ci0gICAgICAgIGlmICh0ZXh0UnVuKQot
ICAgICAgICAgICAgaW5saW5lUnVuLnNldFRleHRDb250ZXh0KHsgdGV4dFJ1bi0+c3RhcnQoKSwg
dGV4dFJ1bi0+bGVuZ3RoKCkgfSk7Ci0gICAgICAgIG1faW5saW5lUnVucy5hcHBlbmQoaW5saW5l
UnVuKTsKLSAgICAgICAgbV9sb2dpY2FsUmVjdC5zZXRIZWlnaHQoc3RkOjptYXgocnVuU2l6ZS5o
ZWlnaHQoKSwgbV9sb2dpY2FsUmVjdC5oZWlnaHQoKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIE5vbi10ZXh0IHJ1bnMgYWx3YXlzIHJlcXVpcmUgbmV3IGlubGluZSBydW4uCi0gICAgICAg
IEFTU0VSVCh0ZXh0UnVuKTsKLSAgICAgICAgYXV0byYgaW5saW5lUnVuID0gbV9pbmxpbmVSdW5z
Lmxhc3QoKTsKLSAgICAgICAgQVNTRVJUKHJ1blNpemUuaGVpZ2h0KCkgPT0gaW5saW5lUnVuLmxv
Z2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgIGlubGluZVJ1bi5zZXRMb2dpY2FsV2lkdGgoaW5saW5l
UnVuLmxvZ2ljYWxXaWR0aCgpICsgcnVuU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgaW5saW5lUnVu
LnRleHRDb250ZXh0KCktPnNldExlbmd0aChpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3Ro
KCkgKyB0ZXh0UnVuLT5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgbV9hdmFpbGFibGVXaWR0aCAt
PSBydW5TaXplLndpZHRoKCk7Ci0gICAgbV9sYXN0UnVuVHlwZSA9IHJ1bi50eXBlKCk7Ci0gICAg
bV9sYXN0UnVuQ2FuRXhwYW5kID0gcnVuLmlzVGV4dCgpICYmICFydW4udGV4dENvbnRleHQoKS0+
aXNDb2xsYXBzZWQoKTsKLSAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsgfTsKLSAg
ICBpZiAoaXNUcmltbWFibGVDb250ZW50KHJ1bikpCi0gICAgICAgIG1fdHJhaWxpbmdUcmltbWFi
bGVDb250ZW50ID0gVHJhaWxpbmdUcmltbWFibGVDb250ZW50IHsgcnVuU2l6ZS53aWR0aCgpLCB0
ZXh0UnVuLT5sZW5ndGgoKSB9OwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lOjpjbG9zZSgpCi17Ci0gICAgYXV0byB0cmltVHJhaWxpbmdDb250ZW50ID0gWyZdewotCi0g
ICAgICAgIGlmICghbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgYXV0byYgbGFzdElubGluZVJ1biA9IG1faW5saW5lUnVucy5sYXN0KCk7
Ci0gICAgICAgIGxhc3RJbmxpbmVSdW4uc2V0TG9naWNhbFdpZHRoKGxhc3RJbmxpbmVSdW4ubG9n
aWNhbFdpZHRoKCkgLSBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudC0+d2lkdGgpOwotICAgICAg
ICBsYXN0SW5saW5lUnVuLnRleHRDb250ZXh0KCktPnNldExlbmd0aChsYXN0SW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPmxlbmd0aCgpIC0gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQtPmxlbmd0
aCk7Ci0KLSAgICAgICAgaWYgKCFsYXN0SW5saW5lUnVuLnRleHRDb250ZXh0KCktPmxlbmd0aCgp
KQotICAgICAgICAgICAgbV9pbmxpbmVSdW5zLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgbV9hdmFp
bGFibGVXaWR0aCArPSBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudC0+d2lkdGg7Ci0gICAgICAg
IG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0geyB9OwotICAgIH07Ci0KLSAgICBpZiAoIWhh
c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJpbVRyYWlsaW5nQ29udGVudCgp
OwotICAgIG1faXNGaXJzdExpbmUgPSBmYWxzZTsKLSAgICBtX2Nsb3NlZCA9IHRydWU7Ci19Ci0K
LX0KLX0KLQotI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>