<?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>214527</bug_id>
          
          <creation_ts>2020-07-18 20:45:11 -0700</creation_ts>
          <short_desc>[LFC][IFC] Move inline run alignment logic to a dedicated class</short_desc>
          <delta_ts>2020-08-26 09:46:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>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>
          
          <blocked>215087</blocked>
    
    <blocked>215752</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</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>1672845</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-07-18 20:45:11 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672847</commentid>
    <comment_count>1</comment_count>
      <attachid>404652</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-07-18 20:50:29 -0700</bug_when>
    <thetext>Created attachment 404652
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672849</commentid>
    <comment_count>2</comment_count>
      <attachid>404652</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-07-18 20:59:12 -0700</bug_when>
    <thetext>Comment on attachment 404652
Patch

oops, &quot;vertical-align: middle&quot; logic got in here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672850</commentid>
    <comment_count>3</comment_count>
      <attachid>404653</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-07-18 21:12:12 -0700</bug_when>
    <thetext>Created attachment 404653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675044</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-25 20:46:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/66115796&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676787</commentid>
    <comment_count>5</comment_count>
      <attachid>405680</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-07-31 03:51:27 -0700</bug_when>
    <thetext>Created attachment 405680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682903</commentid>
    <comment_count>6</comment_count>
      <attachid>407269</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-25 20:35:04 -0700</bug_when>
    <thetext>Created attachment 407269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682972</commentid>
    <comment_count>7</comment_count>
      <attachid>407293</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-26 06:25:10 -0700</bug_when>
    <thetext>Created attachment 407293
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682978</commentid>
    <comment_count>8</comment_count>
      <attachid>407297</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-26 07:52:16 -0700</bug_when>
    <thetext>Created attachment 407297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683001</commentid>
    <comment_count>9</comment_count>
      <attachid>407297</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-08-26 09:25:47 -0700</bug_when>
    <thetext>Comment on attachment 407297
Patch

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

&gt; Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp:67
&gt; +class LineContentAligner {

Might it deserve a file of its own?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683002</commentid>
    <comment_count>10</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-08-26 09:27:42 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #9)
&gt; Comment on attachment 407297 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407297&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp:67
&gt; &gt; +class LineContentAligner {
&gt; 
&gt; Might it deserve a file of its own?
It&apos;s coming!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683004</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-26 09:46:08 -0700</bug_when>
    <thetext>Committed r266169: &lt;https://trac.webkit.org/changeset/266169&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407297.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404652</attachid>
            <date>2020-07-18 20:50:29 -0700</date>
            <delta_ts>2020-07-31 03:51:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214527-20200718205028.patch</filename>
            <type>text/plain</type>
            <size>42794</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2RmNzE3YWUxY2U1YjMw
OWU3NmVjYzU4ODA0ZjQ1NDVkNTVkYmU1MC4uNTQ0ZjM2ZGQ2Zjg1NGRlOWZjYWRlM2FiNTcyZTAw
YjY4MjRlNjA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTA3LTE4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBydW4gYWxpZ25tZW50IGxvZ2ljIHRvIGEgZGVkaWNhdGVkIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ1MjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCB3aWxsIGtlZXAgdGhlIGNv
ZGUgY2xlYW4gd2hlbiB3ZSBzdGFydCBpbnRyb2R1Y2luZyB2ZXJ0aWNhbCBhbGlnbWVudCByZWxh
dGVkIHN0YXRlICh3aGljaCBvbmx5IHJlcXVpcmVkIGR1cmluZworICAgICAgICBhbGlnbm1lbnQs
IHNvIGFkZGluZyB0aGUgc3RhdGUgdG8gdGhlIExpbmVCdWlsZGVyIGNsYXNzIHdvdWxkIGJlIGNv
bmZ1c2luZykuCisKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRB
bGlnbmVyOjpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6cm9vdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6bGF5b3V0U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFs
bHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWdu
VmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25l
cjo6anVzdGlmeVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFs
aWduZXI6OmFsaWduUnVuc1ZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpMaW5lQnVpbGRl
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjp+TGluZUJ1aWxkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpyZXNldENvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y2xvc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBwZW5kSW5saW5lQ29udGFpbmVyRW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFsaWduQ29udGVudFZlcnRpY2Fs
bHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6anVz
dGlmeVJ1bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6YWxpZ25Ib3Jpem9udGFsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJ1bkNvbnRlbnRIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bGF5
b3V0U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpsb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6bG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OmNvbnRlbnRMb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bG9naWNhbFRvcCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsQm90dG9tIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxvZ2lj
YWxMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6YmFzZWxpbmVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorCiAy
MDIwLTA3LTE4ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xG
Q11bSUZDXSBBZGQgaW5pdGlhbCB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlIHN1cHBvcnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IGJjMTliMmZmYjhiYTNiNzU2YzA4N2RiZTQ0
NmMzMGYyODFiMTQ0Y2MuLjcyMWIzNDNmYmM5MjI4ZjU1YmY0ZWIzMjcwNGQwMzhkM2FkZDdhMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtOTQsNyArOTQsNyBAQCBwcml2
YXRlOgogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkg
Y29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5n
Q29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiAgICAgSW5saW5lRm9ybWF0dGluZ1N0YXRl
JiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3Rh
dGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KICAgICAvLyBGSVhN
RTogQ29tZSB1cCB3aXRoIGEgc3RydWN0dXJlIHRoYXQgcmVxdWlyZXMgbm8gZnJpZW5kaW5nLgot
ICAgIGZyaWVuZCBjbGFzcyBMaW5lQnVpbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgTGluZUNvbnRl
bnRBbGlnbmVyOwogfTsKIAogaW5saW5lIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6R2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IGYyMzJmOGM5N2NhMDMxMGM2
M2E4MGY1MTExODc3MWQ3YzRlMmJlMTMuLjEzYjIyODI5NDBiNGNjOWJmNmQ4ZTkyOTdiY2JjOTli
ZDk3NzJjYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTY0LDYxICs2NCw5MyBAQCB2
b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgpCiAgICAgbV93aWR0aCA9ICAwOwogfQogCi1MaW5l
QnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LCBJbnRyaW5zaWNTaXppbmcgaW50cmluc2ljU2l6aW5nKQotICAg
IDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKLSAg
ICAsIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykKLSAgICAsIG1faXNJbnRyaW5z
aWNTaXppbmcoaW50cmluc2ljU2l6aW5nID09IEludHJpbnNpY1NpemluZzo6WWVzKQotICAgICwg
bV9zaG91bGRJZ25vcmVUcmFpbGluZ0xldHRlclNwYWNpbmcoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5h
YmxlZCgpKQotewotfQorY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyIHsKK3B1YmxpYzoKKyAgICBM
aW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBJbmxpbmVC
b3gmLCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYpOwogCi1MaW5lQnVpbGRlcjo6fkxpbmVCdWlsZGVy
KCkKKyAgICB2b2lkIGFsaWduSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgsIExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOworICAgIHZv
aWQgYWxpZ25WZXJ0aWNhbGx5KE9wdGlvbmFsPElubGluZUJveDo6QmFzZWxpbmU+IGluaXRpYWxT
dHJ1dCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQo
T3B0aW9uYWw8SW5saW5lQm94OjpCYXNlbGluZT4gaW5pdGlhbFN0cnV0KTsKKyAgICB2b2lkIGFs
aWduUnVuc1ZlcnRpY2FsbHkoKTsKKyAgICB2b2lkIGp1c3RpZnlSdW5zKElubGluZUxheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgpOworICAgIElubGluZUxheW91dFVuaXQgcnVuQ29udGVudEhlaWdo
dChjb25zdCBMaW5lQnVpbGRlcjo6UnVuJikgY29uc3Q7CisKKyAgICBjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OyB9CisgICAgY29uc3QgQ29udGFpbmVyQm94JiByb290KCkgY29u
c3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0KKyAgICBMYXlvdXRTdGF0
ZSYgbGF5b3V0U3RhdGUoKSB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRl
KCk7IH0KKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1h
dHRpbmdDb250ZXh0OworICAgIElubGluZUJveCYgbV9saW5lQm94OworICAgIExpbmVCdWlsZGVy
OjpSdW5MaXN0JiBtX3J1bnM7Cit9OworCitMaW5lQ29udGVudEFsaWduZXI6OkxpbmVDb250ZW50
QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQsIElubGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMpCisg
ICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQor
ICAgICwgbV9saW5lQm94KGxpbmVCb3gpCisgICAgLCBtX3J1bnMocnVucykKIHsKIH0KIAotdm9p
ZCBMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShjb25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludHMp
Cit2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoSW5saW5lTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCBpc0xhc3RMaW5lKQogewotICAgIEFTU0VSVChtX2lzSW50cmluc2ljU2l6aW5nIHx8IGNv
bnN0cmFpbnRzLmhlaWdodEFuZEJhc2VsaW5lKTsKKyAgICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8
fCBhdmFpbGFibGVXaWR0aCA8PSAwKQorICAgICAgICByZXR1cm47CiAKLSAgICBJbmxpbmVMYXlv
dXRVbml0IGluaXRpYWxMaW5lSGVpZ2h0ID0gMDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGluaXRp
YWxCYXNlbGluZU9mZnNldCA9IDA7Ci0gICAgaWYgKGNvbnN0cmFpbnRzLmhlaWdodEFuZEJhc2Vs
aW5lKSB7Ci0gICAgICAgIG1faW5pdGlhbFN0cnV0ID0gY29uc3RyYWludHMuaGVpZ2h0QW5kQmFz
ZWxpbmUtPnN0cnV0OwotICAgICAgICBpbml0aWFsTGluZUhlaWdodCA9IGNvbnN0cmFpbnRzLmhl
aWdodEFuZEJhc2VsaW5lLT5oZWlnaHQ7Ci0gICAgICAgIGluaXRpYWxCYXNlbGluZU9mZnNldCA9
IGNvbnN0cmFpbnRzLmhlaWdodEFuZEJhc2VsaW5lLT5iYXNlbGluZU9mZnNldDsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9pbml0aWFsU3RydXQgPSB7IH07CisgICAgYXV0byBjb21wdXRlZEhvcml6
b250YWxBbGlnbm1lbnQgPSBbJl0geworICAgICAgICBpZiAocm9vdCgpLnN0eWxlKCkudGV4dEFs
aWduKCkgIT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkKKyAgICAgICAgICAgIHJldHVybiByb290
KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsKKyAgICAgICAgLy8gVGV4dCBpcyBqdXN0aWZpZWQgYWNj
b3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0LWp1c3RpZnkgcHJvcGVy
dHksCisgICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0aGUgbGluZSBib3guIFVu
bGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFzdCwKKyAgICAgICAgLy8g
dGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxv
Y2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAgICAgaWYgKG1fcnVucy5sYXN0KCkuaXNMaW5lQnJl
YWsoKSB8fCBpc0xhc3RMaW5lID09IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQ6OlllcykKKyAgICAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKKyAg
ICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7CisgICAgfSgpOwogCi0gICAgYXV0
byBsaW5lUmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyBjb25zdHJhaW50cy5sb2dpY2FsVG9w
TGVmdCwgMF9sdSwgaW5pdGlhbExpbmVIZWlnaHQgfTsKLSAgICBhdXRvIGJhc2VsaW5lID0gSW5s
aW5lQm94OjpCYXNlbGluZSB7IGluaXRpYWxCYXNlbGluZU9mZnNldCwgaW5pdGlhbExpbmVIZWln
aHQgLSBpbml0aWFsQmFzZWxpbmVPZmZzZXQgfTsKLSAgICBtX2xpbmVCb3ggPSBJbmxpbmVCb3gg
eyBsaW5lUmVjdCwgYmFzZWxpbmUsIGluaXRpYWxCYXNlbGluZU9mZnNldCB9OwotICAgIG1fbGlu
ZUxvZ2ljYWxXaWR0aCA9IGNvbnN0cmFpbnRzLmF2YWlsYWJsZUxvZ2ljYWxXaWR0aDsKLSAgICBt
X2hhc0ludHJ1c2l2ZUZsb2F0ID0gY29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0
OworICAgIGlmIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6
SnVzdGlmeSkgeworICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICByZXNldENvbnRlbnQoKTsKLX0KKyAgICBhdXRvIGFkanVz
dG1lbnRGb3JBbGlnbm1lbnQgPSBbXSAoYXV0byBob3Jpem9udGFsQWxpZ25tZW50LCBhdXRvIGF2
YWlsYWJsZVdpZHRoKSAtPiBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7CisgICAgICAgIHN3
aXRjaCAoaG9yaXpvbnRhbEFsaWdubWVudCkgeworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OkxlZnQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICAgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0UmlnaHQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoLCAw
KTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAgICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElu
bGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoIC8gMiwgMCk7CisgICAgICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6SnVzdGlmeToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfTsKIAotdm9pZCBMaW5lQnVpbGRlcjo6cmVz
ZXRDb250ZW50KCkKLXsKLSAgICBtX2xpbmVCb3guc2V0TG9naWNhbFdpZHRoKHsgfSk7Ci0gICAg
bV9saW5lQm94LnNldElzQ29uc2lkZXJlZEVtcHR5KCk7Ci0gICAgbV9ydW5zLmNsZWFyKCk7Ci0g
ICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKLSAgICBtX2xpbmVJc1Zpc3Vh
bGx5RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgPSB7IH07CisgICAgYXV0byBh
ZGp1c3RtZW50ID0gYWRqdXN0bWVudEZvckFsaWdubWVudChjb21wdXRlZEhvcml6b250YWxBbGln
bm1lbnQsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICBpZiAoIWFkanVzdG1lbnQpCisgICAgICAgIHJl
dHVybjsKKyAgICAvLyBIb3Jpem9udGFsIGFsaWdubWVudCBtZWFucyB0aGF0IHdlIG5vdCBvbmx5
IGFkanVzdCB0aGUgcnVucyBidXQgYWxzbyBtYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBsaW5l
IGJveCBpcyBhbGlnbmVkIGFzIHdlbGwKKyAgICAvLyBlLmcuIDxkaXYgc3R5bGU9InRleHQtYWxp
Z246IGNlbnRlcjsgd2lkdGg6IDEwMHB4OyI+Y2VudGVyZWQgdGV4dDwvZGl2PiA6IHRoZSBsaW5l
IGJveCB3aWxsIGFsc28gYmUgY2VudGVyZWQKKyAgICAvLyBhcyBvcHBvc2VkIHRvIHN0YXJ0IGF0
IDBweCBhbGwgdGhlIHdheSB0byBbY2VudGVyZWQgdGV4dF0gcnVuJ3MgcmlnaHQgZWRnZS4KKyAg
ICBtX2xpbmVCb3gubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CisgICAgZm9yIChhdXRv
JiBydW4gOiBtX3J1bnMpCisgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50
KTsKIH0KIAotTGluZUJ1aWxkZXI6OlJ1bkxpc3QgTGluZUJ1aWxkZXI6OmNsb3NlKElzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCit2b2lkIExp
bmVDb250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5KE9wdGlvbmFsPElubGluZUJveDo6QmFz
ZWxpbmU+IGluaXRpYWxTdHJ1dCkKIHsKLSAgICAvLyAxLiBSZW1vdmUgdHJpbW1hYmxlIHRyYWls
aW5nIGNvbnRlbnQuCi0gICAgLy8gMi4gQWxpZ24gbWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNhbGx5
IGFuZCBob3Jpem9udGFsbHkuCi0gICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7
Ci0gICAgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKLSAgICBpZiAo
bV9pc0ludHJpbnNpY1NpemluZykKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV9ydW5zKTsKLQot
ICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoaXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsK
LSAgICBpZiAoaXNWaXN1YWxseUVtcHR5KCkpIHsKKyAgICBhZGp1c3RCYXNlbGluZUFuZExpbmVI
ZWlnaHQoaW5pdGlhbFN0cnV0KTsKKyAgICBpZiAobV9saW5lQm94LmlzQ29uc2lkZXJlZEVtcHR5
KCkpIHsKICAgICAgICAgbV9saW5lQm94LnJlc2V0QmFzZWxpbmUoKTsKICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHQoeyB9KTsKICAgICB9CkBAIC0xMjcsMTQgKzE1OSw0OCBAQCBM
aW5lQnVpbGRlcjo6UnVuTGlzdCBMaW5lQnVpbGRlcjo6Y2xvc2UoSXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50IGlzTGFzdExpbmVXaQogICAgICAgICBtX2xpbmVCb3guc2hyaW5rVmVydGljYWxs
eShtX2xpbmVCb3guYmFzZWxpbmUoKS5kZXNjZW50KCkpOwogICAgICAgICBtX2xpbmVCb3gucmVz
ZXREZXNjZW50KCk7CiAgICAgfQotICAgIGFsaWduQ29udGVudFZlcnRpY2FsbHkoKTsKLSAgICBh
bGlnbkhvcml6b250YWxseShoYW5naW5nQ29udGVudCwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KTsKLSAgICByZXR1cm4gV1RGTW92ZShtX3J1bnMpOworICAgIGFsaWduUnVuc1ZlcnRpY2Fs
bHkoKTsKIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseSgpCit2
b2lkIExpbmVDb250ZW50QWxpZ25lcjo6anVzdGlmeVJ1bnMoSW5saW5lTGF5b3V0VW5pdCBhdmFp
bGFibGVXaWR0aCkKK3sKKyAgICBBU1NFUlQoYXZhaWxhYmxlV2lkdGggPiAwKTsKKyAgICAvLyBD
b2xsZWN0IHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdHkgbnVtYmVycyBhbmQgZmluZCB0aGUgbGFz
dCBydW4gd2l0aCBjb250ZW50LgorICAgIGF1dG8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9
IDA7CisgICAgTGluZUJ1aWxkZXI6OlJ1biogbGFzdFJ1bldpdGhDb250ZW50ID0gbnVsbHB0cjsK
KyAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50ICs9IHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7CisgICAgICAgIGlm
IChydW4uaXNUZXh0KCkgfHwgcnVuLmlzQm94KCkpCisgICAgICAgICAgICBsYXN0UnVuV2l0aENv
bnRlbnQgPSAmcnVuOworICAgIH0KKyAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFzdCBydW4n
cyB0cmFpbGluZyBleHBhbnNpb24uCisgICAgaWYgKGxhc3RSdW5XaXRoQ29udGVudCAmJiBsYXN0
UnVuV2l0aENvbnRlbnQtPmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKKyAgICAgICAgLy8g
VHVybiBvZmYgdGhlIHRyYWlsaW5nIGJpdHMgZmlyc3QgYW5kIGFkZCB0aGUgZm9yYmlkIHRyYWls
aW5nIGV4cGFuc2lvbi4KKyAgICAgICAgYXV0byBsZWFkaW5nRXhwYW5zaW9uID0gbGFzdFJ1bldp
dGhDb250ZW50LT5leHBhbnNpb25CZWhhdmlvcigpICYgTGVhZGluZ0V4cGFuc2lvbk1hc2s7Cisg
ICAgICAgIGxhc3RSdW5XaXRoQ29udGVudC0+c2V0RXhwYW5zaW9uQmVoYXZpb3IobGVhZGluZ0V4
cGFuc2lvbiB8IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uKTsKKyAgICB9CisgICAgLy8gTm90aGlu
ZyB0byBkaXN0cmlidXRlPworICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKKyAg
ICAgICAgcmV0dXJuOworICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlLgorICAgIGF1
dG8gZXhwYW5zaW9uVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGggLyBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50OworICAgIGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNpb24gPSBJbmxpbmVMYXlv
dXRVbml0IHsgfTsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICAvLyBF
eHBhbmQgYW5kIG1vdmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KKyAgICAg
ICAgaWYgKCFydW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgeworICAgICAgICAgICAgcnVu
Lm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KCkpOworICAgICAgICBhdXRvIGNvbXB1dGVkRXhwYW5zaW9uID0gZXhwYW5zaW9uVG9E
aXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKKyAgICAgICAgcnVu
LnNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7CisgICAg
ICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKyAgICAgICAg
YWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gY29tcHV0ZWRFeHBhbnNpb247CisgICAgfQorfQorCit2
b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25SdW5zVmVydGljYWxseSgpCiB7Ci0gICAgQVNT
RVJUKCFtX2lzSW50cmluc2ljU2l6aW5nKTsKICAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1Jl
Y3QgPSBtX2xpbmVCb3gubG9naWNhbFJlY3QoKTsKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVu
cykgewogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSAwOwpAQCAtMTQ1LDEw
ICsyMTEsMTAgQEAgdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseSgpCiAg
ICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgewogICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OkJhc2VsaW5lOgogICAgICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpIHx8IHJ1bi5p
c1RleHQoKSkKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZzZXQoKSAt
IGFzY2VudDsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmJhc2VsaW5l
T2Zmc2V0KCkgLSBhc2NlbnQ7CiAgICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWluZXJT
dGFydCgpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9n
aWNhbFRvcCA9IGJhc2VsaW5lT2Zmc2V0KCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5ib3JkZXJU
b3AoKSAtIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOworICAgICAgICAgICAg
ICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYmFzZWxpbmVPZmZzZXQoKSAtIGFzY2VudCAtIGJv
eEdlb21ldHJ5LmJvcmRlclRvcCgpIC0gYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3Io
MCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkg
JiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAg
ICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJs
aXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRC
b3gpKTsKICAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0
IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgpAQCAtMTY3LDE3ICsyMzMsMTcgQEAgdm9p
ZCBMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseSgpCiAgICAgICAgICAgICAgICAg
Ly8KICAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKICAgICAgICAgICAgICAgICBhdXRvIGJhc2Vs
aW5lT2Zmc2V0RnJvbU1hcmdpbkJveCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgYm94
R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigw
KSArIGlubGluZUJsb2NrQmFzZWxpbmVPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRv
cCA9IGJhc2VsaW5lT2Zmc2V0KCkgLSBiYXNlbGluZU9mZnNldEZyb21NYXJnaW5Cb3g7CisgICAg
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5iYXNlbGluZU9mZnNldCgpIC0gYmFz
ZWxpbmVPZmZzZXRGcm9tTWFyZ2luQm94OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmVP
ZmZzZXQoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVy
dGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSArIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgp
ICsgYm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKSk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRv
cCA9IG1fbGluZUJveC5iYXNlbGluZU9mZnNldCgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9y
ZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVu
LmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCkgKyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OlRvcDoKICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSAwX2x1OwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgotICAgICAgICAgICAgbG9n
aWNhbFRvcCA9IGxvZ2ljYWxCb3R0b20oKSAtIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpOwor
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5sb2dpY2FsQm90dG9tKCkgLSBydW4u
bG9naWNhbFJlY3QoKS5oZWlnaHQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogewogICAgICAgICAgICAgLy8gQWxpZ24gdGhlIHZlcnRp
Y2FsIG1pZHBvaW50IG9mIHRoZSBib3ggd2l0aCB0aGUgYmFzZWxpbmUgb2YgdGhlIHBhcmVudCBi
b3ggcGx1cyBoYWxmIHRoZSB4LWhlaWdodCBvZiB0aGUgcGFyZW50LgpAQCAtMTkzLDEwNCArMjU5
LDIyOSBAQCB2b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCkKICAgICAg
ICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhlIHJ1biBvdmVyZmxvd3MgdGhl
IGxpbmUuCiAgICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QuZXhwYW5kVmVydGljYWxseVRv
Q29udGFpbihydW4ubG9naWNhbFJlY3QoKSk7CiAgICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9t
IHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBi
b3JkZXIgYm94IHRvcC9sZWZ0LgotICAgICAgICBydW4ubW92ZVZlcnRpY2FsbHkodGhpcy0+bG9n
aWNhbFRvcCgpKTsKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkodGhpcy0+bG9naWNhbExl
ZnQoKSk7CisgICAgICAgIHJ1bi5tb3ZlVmVydGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgp
KTsKKyAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkobV9saW5lQm94LmxvZ2ljYWxMZWZ0KCkp
OwogICAgIH0KICAgICBtX2xpbmVCb3guc2V0U2Nyb2xsYWJsZU92ZXJmbG93KHNjcm9sbGFibGVP
dmVyZmxvd1JlY3QpOwogfQogCi12b2lkIExpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyhJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQordm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFkanVz
dEJhc2VsaW5lQW5kTGluZUhlaWdodChPcHRpb25hbDxJbmxpbmVCb3g6OkJhc2VsaW5lPiBpbml0
aWFsU3RydXQpCiB7Ci0gICAgQVNTRVJUKGF2YWlsYWJsZVdpZHRoID4gMCk7Ci0gICAgLy8gQ29s
bGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51bWJlcnMgYW5kIGZpbmQgdGhlIGxhc3Qg
cnVuIHdpdGggY29udGVudC4KLSAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAw
OwotICAgIFJ1biogbGFzdFJ1bldpdGhDb250ZW50ID0gbnVsbHB0cjsKLSAgICBmb3IgKGF1dG8m
IHJ1biA6IG1fcnVucykgewotICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICs9IHJ1
bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7Ci0gICAgICAgIGlmIChydW4uaXNUZXh0KCkg
fHwgcnVuLmlzQm94KCkpCi0gICAgICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQgPSAmcnVuOwot
ICAgIH0KLSAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFzdCBydW4ncyB0cmFpbGluZyBleHBh
bnNpb24uCi0gICAgaWYgKGxhc3RSdW5XaXRoQ29udGVudCAmJiBsYXN0UnVuV2l0aENvbnRlbnQt
Pmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKLSAgICAgICAgLy8gVHVybiBvZmYgdGhlIHRy
YWlsaW5nIGJpdHMgZmlyc3QgYW5kIGFkZCB0aGUgZm9yYmlkIHRyYWlsaW5nIGV4cGFuc2lvbi4K
LSAgICAgICAgYXV0byBsZWFkaW5nRXhwYW5zaW9uID0gbGFzdFJ1bldpdGhDb250ZW50LT5leHBh
bnNpb25CZWhhdmlvcigpICYgTGVhZGluZ0V4cGFuc2lvbk1hc2s7Ci0gICAgICAgIGxhc3RSdW5X
aXRoQ29udGVudC0+c2V0RXhwYW5zaW9uQmVoYXZpb3IobGVhZGluZ0V4cGFuc2lvbiB8IEZvcmJp
ZFRyYWlsaW5nRXhwYW5zaW9uKTsKLSAgICB9Ci0gICAgLy8gTm90aGluZyB0byBkaXN0cmlidXRl
PwotICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlLgotICAgIGF1dG8gZXhwYW5zaW9uVG9E
aXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGggLyBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50Owot
ICAgIElubGluZUxheW91dFVuaXQgYWNjdW11bGF0ZWRFeHBhbnNpb24gPSAwOworICAgIHVuc2ln
bmVkIGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7CisgICAgYXV0byBoYXNTZWVuRGly
ZWN0VGV4dE9yTGluZUJyZWFrID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMp
IHsKLSAgICAgICAgLy8gRXhwYW5kIGFuZCBtb3ZlcyBydW5zIGJ5IHRoZSBhY2N1bXVsYXRlZCBl
eHBhbnNpb24uCi0gICAgICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsK
LSAgICAgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsK
KyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBhdXRv
JiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworCisgICAgICAgIHJ1bi5zZXRMb2dpY2FsSGVp
Z2h0KHJ1bkNvbnRlbnRIZWlnaHQocnVuKSk7CisKKyAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8
fCBydW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgLy8gRm9yIHRleHQgY29udGVudCB3
ZSBzZXQgdGhlIGJhc2VsaW5lIGVpdGhlciB0aHJvdWdoIHRoZSBpbml0aWFsIHN0cnV0IChzZXQg
YnkgdGhlIGZvcm1hdHRpbmcgY29udGV4dCByb290KSBvcgorICAgICAgICAgICAgLy8gdGhyb3Vn
aCB0aGUgaW5saW5lIGNvbnRhaW5lciAoc3RhcnQpLiBOb3JtYWxseSB0aGUgdGV4dCBjb250ZW50
IGl0c2VsZiBkb2VzIG5vdCBzdHJldGNoIHRoZSBsaW5lLgorICAgICAgICAgICAgaWYgKCFpbml0
aWFsU3RydXQpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gc3RhbmRhcmRzIG1vZGUg
d2hlcmUgdGhlIGJhc2VsaW5lIGFuZCBsaW5lIGhlaWdodCBhcmUgZXhwbGljaXQuCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5saW5l
Q29udGFpbmVyTmVzdGluZ0xldmVsKSB7CisgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFk
eSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlu
bGluZSBjb250YWluZXIuIAorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKKyAgICAg
ICAgICAgICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0
ZWQ8c3Bhbj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJl
YWsgPSB0cnVlOworICAgICAgICAgICAgLy8gV2UgYXJlIGluIHF1aXJrcyBtb2RlIHdoZXJlIHRo
ZSBmb250LW1ldHJpY3MgbWlnaHQgY2hhbmdlIHRoZSBsaW5lIGxpbmUgaGVpZ2h0L2Jhc2VsaW5l
IGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0ZXh0IGNvbnRlbnQgb24gdGhlIGxpbmUKKyAgICAgICAg
ICAgIC8vIG91dHNpZGUgb2YgYW4gaW5saW5lIGNvbnRhaW5lci4KKyAgICAgICAgICAgIG1fbGlu
ZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIoaW5pdGlhbFN0cnV0LT5hc2NlbnQoKSk7CisgICAgICAg
ICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlcihpbml0aWFsU3RydXQtPmRlc2NlbnQo
KSk7CisgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihpbml0
aWFsU3RydXQtPmhlaWdodCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgYXV0byBtaWRkbGVWZXJ0aWNhbEFsaWduID0gWyZdKGF1dG8gcnVuTG9naWNhbEhl
aWdodCkgeworICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdmVydGljYWwgbWlkcG9pbnQgb2Yg
dGhlIGJveCB3aXRoIHRoZSBiYXNlbGluZSBvZiB0aGUgcGFyZW50IGJveCBwbHVzIGhhbGYgdGhl
IHgtaGVpZ2h0IG9mIHRoZSBwYXJlbnQKKyAgICAgICAgICAgIC8vIGFuZCBjaGVjayBvZiB3ZSBu
ZWVkIHRvIHB1c2ggdGhlIGJhc2VsaW5lIG9yIHN0cmV0Y2ggdGhlIGxpbmUuCisgICAgICAgICAg
ICBhdXRvIGN1cnJlbnRCYXNlbGluZU9mZnNldCA9IG1fbGluZUJveC5iYXNlbGluZU9mZnNldCgp
OworICAgICAgICAgICAgYXV0byBwYXJlbnRYSGVpZ2h0ID0gcm9vdCgpLnN0eWxlKCkuZm9udE1l
dHJpY3MoKS54SGVpZ2h0KCk7CisgICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBjdXJyZW50
QmFzZWxpbmVPZmZzZXQgLSBydW5Mb2dpY2FsSGVpZ2h0IC8gMiAtIHBhcmVudFhIZWlnaHQgLyAy
OworICAgICAgICAgICAgaWYgKGxvZ2ljYWxUb3AgPCAwKSB7CisgICAgICAgICAgICAgICAgLy8g
UHVzaCB0aGUgYmFzZWxpbmUgZG93biBvbmx5IGlmIHRoZSBydW4gb3ZlcmZsb3dzIGF0IHRoZSB0
b3AuCisgICAgICAgICAgICAgICAgYXV0byBvZmZzZXQgPSAtbG9naWNhbFRvcDsKKyAgICAgICAg
ICAgICAgICBtX2xpbmVCb3guc2V0QmFzZWxpbmVPZmZzZXRJZkdyZWF0ZXIoY3VycmVudEJhc2Vs
aW5lT2Zmc2V0ICsgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAvLyBFbm91Z2ggc3BhY2UgZm9y
IHRoaXMgaW5saW5lIGNvbnRhaW5lcj8KKyAgICAgICAgICAgICAgICBhdXRvIHNwYWNlRm9yUnVu
ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIHJ1bkxvZ2ljYWxIZWlnaHQ7CisgICAgICAg
ICAgICAgICAgLy8gRW5vdWdoIHNwYWNlIGZvciB0aGUgZGVzY2VudD8KKyAgICAgICAgICAgICAg
ICBhdXRvIHNwYWNlRm9yRGVzY2VudCA9IG1fbGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSAobV9s
aW5lQm94LmJhc2VsaW5lT2Zmc2V0KCkgKyBtX2xpbmVCb3guYmFzZWxpbmUoKS5kZXNjZW50KCkp
OworICAgICAgICAgICAgICAgIGF1dG8gc3BhY2VGb3JDb250ZW50ID0gc3RkOjptaW4oc3BhY2VG
b3JSdW4sIHNwYWNlRm9yRGVzY2VudCk7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNlRm9yQ29u
dGVudCA8IDApCisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0
SWZHcmVhdGVyKG1fbGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSBzcGFjZUZvckNvbnRlbnQpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fbGlu
ZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKGxvZ2ljYWxUb3AgKyBydW5Mb2dpY2FsSGVp
Z2h0KTsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduID0gc3R5bGUudmVy
dGljYWxBbGlnbigpOworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAg
ICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7CisgICAgICAgICAgICAvLyBJ
bmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KKyAg
ICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0
IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0LgorICAgICAgICAgICAgYXV0byYgZm9udE1l
dHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOworICAgICAgICAgICAgc3dpdGNoICh2ZXJ0aWNh
bEFsaWduKSB7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7Cisg
ICAgICAgICAgICAgICAgYXV0byBoYWxmTGVhZGluZyA9IExpbmVCdWlsZGVyOjpoYWxmTGVhZGlu
Z01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2VudCBjb3VsZCBi
ZSBuZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1ZSkKKyAgICAg
ICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCgpID4gMCkKKyAgICAgICAgICAgICAg
ICAgICAgbV9saW5lQm94LnNldERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuZGVzY2VudCgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuYXNjZW50KCkgPiAwKQorICAgICAg
ICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmFz
Y2VudCgpKTsKKyAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihtX2xpbmVCb3guYmFzZWxpbmUoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRs
ZTogeworICAgICAgICAgICAgICAgIG1pZGRsZVZlcnRpY2FsQWxpZ24oZm9udE1ldHJpY3MuaGVp
Z2h0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElm
R3JlYXRlcihmb250TWV0cmljcy5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChydW4uaXNDb250YWluZXJFbmQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGxpbmUncyBi
YXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVzdGVkIGF0IENvbnRhaW5l
clN0YXJ0LgorICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCk7
CisgICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7CisgICAg
ICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gYm94
R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodmVydGlj
YWxBbGlnbikgeworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewor
ICAgICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91
dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gSW5saW5lLWJsb2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZl
IGJhc2VsaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0g
bGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxD
b250YWluZXJCb3g+KGxheW91dEJveCkpOworICAgICAgICAgICAgICAgICAgICAvLyBTcGVjIG1h
a2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5Lgor
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5k
aXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpOworICAgICAgICAgICAgICAg
ICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZUJveC5iYXNlbGluZSgpOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdp
bkJlZm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5n
VG9wKCkudmFsdWVPcigwKTsKKworICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNj
ZW50SWZHcmVhdGVyKGlubGluZUJsb2NrQmFzZWxpbmUuYXNjZW50KCkpOworICAgICAgICAgICAg
ICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlcihpbmxpbmVCbG9ja0Jhc2VsaW5l
LmRlc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRCYXNlbGluZU9m
ZnNldElmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZU9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0
ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUg
KGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFyZ2luKS4KKyAgICAgICAgICAgICAgICAgICAgbV9s
aW5lQm94LnNldEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAg
ICAgICAgICAvLyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50
IGlzIGEgdGhpbmcpLgorICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhl
aWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0
PigwLCBtX2xpbmVCb3guYmFzZWxpbmUoKS5kZXNjZW50KCkpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVu
dCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBv
ZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCisgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExv
Z2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7CisgICAgICAg
ICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMgdGhlIGJhc2Vs
aW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KKyAgICAgICAgICAgICAgICBhdXRv
IGxpbmVMb2dpY2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2lu
Qm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEJhc2VsaW5lT2Zm
c2V0SWZHcmVhdGVyKG1fbGluZUJveC5iYXNlbGluZU9mZnNldCgpICsgKG1hcmdpbkJveEhlaWdo
dCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWdu
OjpNaWRkbGU6IHsKKyAgICAgICAgICAgICAgICBtaWRkbGVWZXJ0aWNhbEFsaWduKG1hcmdpbkJv
eEhlaWdodCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVU
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQocnVuLmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQoKSk7Ci0gICAgICAgIGF1dG8gY29tcHV0ZWRFeHBhbnNpb24gPSBleHBhbnNpb25U
b0Rpc3RyaWJ1dGUgKiBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOwotICAgICAgICBy
dW4uc2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKGNvbXB1dGVkRXhwYW5zaW9uKTsKLSAg
ICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOwotICAgICAg
ICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBjb21wdXRlZEV4cGFuc2lvbjsKICAgICB9CiB9CiAK
LXZvaWQgTGluZUJ1aWxkZXI6OmFsaWduSG9yaXpvbnRhbGx5KGNvbnN0IEhhbmdpbmdDb250ZW50
JiBoYW5naW5nQ29udGVudCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmUp
CitJbmxpbmVMYXlvdXRVbml0IExpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodChj
b25zdCBMaW5lQnVpbGRlcjo6UnVuJiBydW4pIGNvbnN0Cit7CisgICAgYXV0byYgZm9udE1ldHJp
Y3MgPSBydW4uc3R5bGUoKS5mb250TWV0cmljcygpOworICAgIGlmIChydW4uaXNUZXh0KCkgfHwg
cnVuLmlzTGluZUJyZWFrKCkpCisgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsK
KworICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgp
KQorICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisKKyAgICBhdXRvJiBsYXlv
dXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgaWYgKGxheW91dEJv
eC5pc1JlcGxhY2VkQm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCisg
ICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7CisKKyAgICAvLyBO
b24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJp
dCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRl
bnQgaGVpZ2h0IGhlcmUuCisgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgp
OworfQorCitMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBJbnRyaW5zaWNTaXppbmcgaW50cmluc2lj
U2l6aW5nKQorICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCkKKyAgICAsIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykKKyAgICAs
IG1faXNJbnRyaW5zaWNTaXppbmcoaW50cmluc2ljU2l6aW5nID09IEludHJpbnNpY1NpemluZzo6
WWVzKQorICAgICwgbV9zaG91bGRJZ25vcmVUcmFpbGluZ0xldHRlclNwYWNpbmcoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dElu
dGVncmF0aW9uRW5hYmxlZCgpKQogewotICAgIEFTU0VSVCghbV9pc0ludHJpbnNpY1NpemluZyk7
Cit9CiAKLSAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gdGhpcy0+YXZhaWxhYmxlV2lkdGgoKSAr
IGhhbmdpbmdDb250ZW50LndpZHRoKCk7Ci0gICAgaWYgKG1fcnVucy5pc0VtcHR5KCkgfHwgYXZh
aWxhYmxlV2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJuOworTGluZUJ1aWxkZXI6On5MaW5lQnVp
bGRlcigpCit7Cit9CiAKLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCA9IFsm
XSB7Ci0gICAgICAgIGlmIChyb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSAhPSBUZXh0QWxpZ25N
b2RlOjpKdXN0aWZ5KQotICAgICAgICAgICAgcmV0dXJuIHJvb3QoKS5zdHlsZSgpLnRleHRBbGln
bigpOwotICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhv
ZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAgLy8gaW4g
b3JkZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVj
aWZpZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAotICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9y
ZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVk
LgotICAgICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUg
PT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCi0gICAgICAgICAgICByZXR1cm4g
VGV4dEFsaWduTW9kZTo6U3RhcnQ7Ci0gICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5OwotICAgIH0oKTsKK3ZvaWQgTGluZUJ1aWxkZXI6OmluaXRpYWxpemUoY29uc3QgQ29uc3Ry
YWludHMmIGNvbnN0cmFpbnRzKQoreworICAgIEFTU0VSVChtX2lzSW50cmluc2ljU2l6aW5nIHx8
IGNvbnN0cmFpbnRzLmhlaWdodEFuZEJhc2VsaW5lKTsKIAotICAgIGlmIChjb21wdXRlZEhvcml6
b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0
aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgSW5s
aW5lTGF5b3V0VW5pdCBpbml0aWFsTGluZUhlaWdodCA9IDA7CisgICAgSW5saW5lTGF5b3V0VW5p
dCBpbml0aWFsQmFzZWxpbmVPZmZzZXQgPSAwOworICAgIGlmIChjb25zdHJhaW50cy5oZWlnaHRB
bmRCYXNlbGluZSkgeworICAgICAgICBtX2luaXRpYWxTdHJ1dCA9IGNvbnN0cmFpbnRzLmhlaWdo
dEFuZEJhc2VsaW5lLT5zdHJ1dDsKKyAgICAgICAgaW5pdGlhbExpbmVIZWlnaHQgPSBjb25zdHJh
aW50cy5oZWlnaHRBbmRCYXNlbGluZS0+aGVpZ2h0OworICAgICAgICBpbml0aWFsQmFzZWxpbmVP
ZmZzZXQgPSBjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNlbGluZS0+YmFzZWxpbmVPZmZzZXQ7Cisg
ICAgfSBlbHNlCisgICAgICAgIG1faW5pdGlhbFN0cnV0ID0geyB9OwogCi0gICAgYXV0byBhZGp1
c3RtZW50Rm9yQWxpZ25tZW50ID0gW10gKGF1dG8gaG9yaXpvbnRhbEFsaWdubWVudCwgYXV0byBh
dmFpbGFibGVXaWR0aCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gewotICAgICAgICBz
d2l0Y2ggKGhvcml6b250YWxBbGlnbm1lbnQpIHsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OldlYktpdFJpZ2h0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCwg
MCk7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgICAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxJ
bmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCAvIDIsIDApOwotICAgICAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH07CisgICAgYXV0byBsaW5lUmVjdCA9IERp
c3BsYXk6OklubGluZVJlY3QgeyBjb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgMF9sdSwgaW5p
dGlhbExpbmVIZWlnaHQgfTsKKyAgICBhdXRvIGJhc2VsaW5lID0gSW5saW5lQm94OjpCYXNlbGlu
ZSB7IGluaXRpYWxCYXNlbGluZU9mZnNldCwgaW5pdGlhbExpbmVIZWlnaHQgLSBpbml0aWFsQmFz
ZWxpbmVPZmZzZXQgfTsKKyAgICBtX2xpbmVCb3ggPSBJbmxpbmVCb3ggeyBsaW5lUmVjdCwgYmFz
ZWxpbmUsIGluaXRpYWxCYXNlbGluZU9mZnNldCB9OworICAgIG1fbGluZUxvZ2ljYWxXaWR0aCA9
IGNvbnN0cmFpbnRzLmF2YWlsYWJsZUxvZ2ljYWxXaWR0aDsKKyAgICBtX2hhc0ludHJ1c2l2ZUZs
b2F0ID0gY29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0OwogCi0gICAgYXV0byBh
ZGp1c3RtZW50ID0gYWRqdXN0bWVudEZvckFsaWdubWVudChjb21wdXRlZEhvcml6b250YWxBbGln
bm1lbnQsIGF2YWlsYWJsZVdpZHRoKTsKLSAgICBpZiAoIWFkanVzdG1lbnQpCi0gICAgICAgIHJl
dHVybjsKLSAgICAvLyBIb3Jpem9udGFsIGFsaWdubWVudCBtZWFucyB0aGF0IHdlIG5vdCBvbmx5
IGFkanVzdCB0aGUgcnVucyBidXQgYWxzbyBtYWtlIHN1cmUKLSAgICAvLyB0aGF0IHRoZSBsaW5l
IGJveCBpcyBhbGlnbmVkIGFzIHdlbGwKLSAgICAvLyBlLmcuIDxkaXYgc3R5bGU9InRleHQtYWxp
Z246IGNlbnRlcjsgd2lkdGg6IDEwMHB4OyI+Y2VudGVyZWQgdGV4dDwvZGl2PiA6IHRoZSBsaW5l
IGJveCB3aWxsIGFsc28gYmUgY2VudGVyZWQKLSAgICAvLyBhcyBvcHBvc2VkIHRvIHN0YXJ0IGF0
IDBweCBhbGwgdGhlIHdheSB0byBbY2VudGVyZWQgdGV4dF0gcnVuJ3MgcmlnaHQgZWRnZS4KLSAg
ICBtX2xpbmVCb3gubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7Ci0gICAgZm9yIChhdXRv
JiBydW4gOiBtX3J1bnMpCi0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50
KTsKKyAgICByZXNldENvbnRlbnQoKTsKK30KKwordm9pZCBMaW5lQnVpbGRlcjo6cmVzZXRDb250
ZW50KCkKK3sKKyAgICBtX2xpbmVCb3guc2V0TG9naWNhbFdpZHRoKHsgfSk7CisgICAgbV9saW5l
Qm94LnNldElzQ29uc2lkZXJlZEVtcHR5KCk7CisgICAgbV9ydW5zLmNsZWFyKCk7CisgICAgbV90
cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKKyAgICBtX2xpbmVJc1Zpc3VhbGx5RW1w
dHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgPSB7IH07Cit9CisKK0xpbmVCdWlsZGVy
OjpSdW5MaXN0IExpbmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
aXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQoreworICAgIC8vIDEuIFJlbW92ZSB0cmltbWFi
bGUgdHJhaWxpbmcgY29udGVudC4KKyAgICAvLyAyLiBBbGlnbiBtZXJnZWQgcnVucyBib3RoIHZl
cnRpY2FsbHkgYW5kIGhvcml6b250YWxseS4KKyAgICByZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNv
bnRlbnQoKTsKKyAgICB2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpOwor
ICAgIGlmIChtX2lzSW50cmluc2ljU2l6aW5nKQorICAgICAgICByZXR1cm4gV1RGTW92ZShtX3J1
bnMpOworCisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IGNvbGxlY3RIYW5naW5nQ29udGVudChp
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOworICAgIGF1dG8gY29udGVudEFsaWduZXIgPSBM
aW5lQ29udGVudEFsaWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpLCBtX2xpbmVCb3gsIG1fcnVu
cyB9OworICAgIGNvbnRlbnRBbGlnbmVyLmFsaWduSG9yaXpvbnRhbGx5KGF2YWlsYWJsZVdpZHRo
KCkgKyBoYW5naW5nQ29udGVudC53aWR0aCgpLCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQp
OworICAgIGNvbnRlbnRBbGlnbmVyLmFsaWduVmVydGljYWxseShtX2luaXRpYWxTdHJ1dCk7Cisg
ICAgcmV0dXJuIFdURk1vdmUobV9ydW5zKTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6cmVtb3Zl
VHJhaWxpbmdUcmltbWFibGVDb250ZW50KCkKQEAgLTQ2Niw3ICs2NTcsNyBAQCB2b2lkIExpbmVC
dWlsZGVyOjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbSwgSW5saW5lTAogICAgIC8vIFByZXZlbnQgdHJhaWxpbmcgbGV0dGVyLXNwYWNpbmcgZnJv
bSBzcGlsbGluZyBvdXQgb2YgdGhlIGlubGluZSBjb250YWluZXIuCiAgICAgLy8gaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy10ZXh0LTMvI2xldHRlci1zcGFjaW5nLXByb3BlcnR5IFNlZSBl
eGFtcGxlIDIxLgogICAgIHJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZygpOwotICAgIGFwcGVu
ZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0ZW0sIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbG9n
aWNhbFdpZHRoKTsKKyAgICBhcHBlbmROb25CcmVha2FibGVTcGFjZShpbmxpbmVJdGVtLCBsb2dp
Y2FsUmlnaHQoKSwgbG9naWNhbFdpZHRoKTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5k
VGV4dENvbnRlbnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtLCBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBuZWVkc0h5cGhlbikKQEAgLTU1MywxNjcgKzc0
NCw2IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZExpbmVCcmVhayhjb25zdCBJbmxpbmVJdGVt
JiBpbmxpbmVJdGVtKQogICAgIG1fcnVucy5hcHBlbmQoeyBkb3duY2FzdDxJbmxpbmVTb2Z0TGlu
ZUJyZWFrSXRlbT4oaW5saW5lSXRlbSksIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSB9KTsKIH0KIAot
dm9pZCBMaW5lQnVpbGRlcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKLXsKLSAgICB1
bnNpZ25lZCBpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwgPSAwOwotICAgIGF1dG8gaGFzU2Vl
bkRpcmVjdFRleHRPckxpbmVCcmVhayA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9y
dW5zKSB7Ci0gICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICAg
ICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLQotICAgICAgICBydW4uc2V0TG9n
aWNhbEhlaWdodChydW5Db250ZW50SGVpZ2h0KHJ1bikpOwotCi0gICAgICAgIGlmIChydW4uaXNU
ZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIC8vIEZvciB0ZXh0IGNv
bnRlbnQgd2Ugc2V0IHRoZSBiYXNlbGluZSBlaXRoZXIgdGhyb3VnaCB0aGUgaW5pdGlhbCBzdHJ1
dCAoc2V0IGJ5IHRoZSBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdCkgb3IKLSAgICAgICAgICAgIC8v
IHRocm91Z2ggdGhlIGlubGluZSBjb250YWluZXIgKHN0YXJ0KS4gTm9ybWFsbHkgdGhlIHRleHQg
Y29udGVudCBpdHNlbGYgZG9lcyBub3Qgc3RyZXRjaCB0aGUgbGluZS4KLSAgICAgICAgICAgIGlm
ICghbV9pbml0aWFsU3RydXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gc3RhbmRh
cmRzIG1vZGUgd2hlcmUgdGhlIGJhc2VsaW5lIGFuZCBsaW5lIGhlaWdodCBhcmUgZXhwbGljaXQu
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Un
dmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUg
cGFyZW50IGlubGluZSBjb250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsp
IHsKLSAgICAgICAgICAgICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48
c3Bhbj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0
T3JMaW5lQnJlYWsgPSB0cnVlOwotICAgICAgICAgICAgLy8gV2UgYXJlIGluIHF1aXJrcyBtb2Rl
IHdoZXJlIHRoZSBmb250LW1ldHJpY3MgbWlnaHQgY2hhbmdlIHRoZSBsaW5lIGxpbmUgaGVpZ2h0
L2Jhc2VsaW5lIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0ZXh0IGNvbnRlbnQgb24gdGhlIGxpbmUK
LSAgICAgICAgICAgIC8vIG91dHNpZGUgb2YgYW4gaW5saW5lIGNvbnRhaW5lci4KLSAgICAgICAg
ICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIobV9pbml0aWFsU3RydXQtPmFzY2VudCgp
KTsKLSAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKG1faW5pdGlhbFN0
cnV0LT5kZXNjZW50KCkpOwotICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJ
ZkdyZWF0ZXIobV9pbml0aWFsU3RydXQtPmhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBtaWRkbGVWZXJ0aWNhbEFsaWduID0gWyZdKGF1
dG8gcnVuTG9naWNhbEhlaWdodCkgewotICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdmVydGlj
YWwgbWlkcG9pbnQgb2YgdGhlIGJveCB3aXRoIHRoZSBiYXNlbGluZSBvZiB0aGUgcGFyZW50IGJv
eCBwbHVzIGhhbGYgdGhlIHgtaGVpZ2h0IG9mIHRoZSBwYXJlbnQKLSAgICAgICAgICAgIC8vIGFu
ZCBjaGVjayBvZiB3ZSBuZWVkIHRvIHB1c2ggdGhlIGJhc2VsaW5lIG9yIHN0cmV0Y2ggdGhlIGxp
bmUuCi0gICAgICAgICAgICBhdXRvIGN1cnJlbnRCYXNlbGluZU9mZnNldCA9IG1fbGluZUJveC5i
YXNlbGluZU9mZnNldCgpOwotICAgICAgICAgICAgYXV0byBwYXJlbnRYSGVpZ2h0ID0gcm9vdCgp
LnN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7Ci0gICAgICAgICAgICBhdXRvIGxvZ2lj
YWxUb3AgPSBjdXJyZW50QmFzZWxpbmVPZmZzZXQgLSBydW5Mb2dpY2FsSGVpZ2h0IC8gMiAtIHBh
cmVudFhIZWlnaHQgLyAyOwotICAgICAgICAgICAgaWYgKGxvZ2ljYWxUb3AgPCAwKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gUHVzaCB0aGUgYmFzZWxpbmUgZG93biBvbmx5IGlmIHRoZSBydW4gb3Zl
cmZsb3dzIGF0IHRoZSB0b3AuCi0gICAgICAgICAgICAgICAgYXV0byBvZmZzZXQgPSAtbG9naWNh
bFRvcDsKLSAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QmFzZWxpbmVPZmZzZXRJZkdyZWF0
ZXIoY3VycmVudEJhc2VsaW5lT2Zmc2V0ICsgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAvLyBF
bm91Z2ggc3BhY2UgZm9yIHRoaXMgaW5saW5lIGNvbnRhaW5lcj8KLSAgICAgICAgICAgICAgICBh
dXRvIHNwYWNlRm9yUnVuID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIHJ1bkxvZ2ljYWxI
ZWlnaHQ7Ci0gICAgICAgICAgICAgICAgLy8gRW5vdWdoIHNwYWNlIGZvciB0aGUgZGVzY2VudD8K
LSAgICAgICAgICAgICAgICBhdXRvIHNwYWNlRm9yRGVzY2VudCA9IG1fbGluZUJveC5sb2dpY2Fs
SGVpZ2h0KCkgLSAobV9saW5lQm94LmJhc2VsaW5lT2Zmc2V0KCkgKyBtX2xpbmVCb3guYmFzZWxp
bmUoKS5kZXNjZW50KCkpOwotICAgICAgICAgICAgICAgIGF1dG8gc3BhY2VGb3JDb250ZW50ID0g
c3RkOjptaW4oc3BhY2VGb3JSdW4sIHNwYWNlRm9yRGVzY2VudCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHNwYWNlRm9yQ29udGVudCA8IDApCi0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5z
ZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1fbGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSBzcGFj
ZUZvckNvbnRlbnQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKGxvZ2ljYWxUb3Ag
KyBydW5Mb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgfTsKLSAgICAgICAgYXV0byB2ZXJ0aWNhbEFs
aWduID0gc3R5bGUudmVydGljYWxBbGlnbigpOwotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVy
U3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7Ci0g
ICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBsaW5lIGJ5IHRoZWly
IGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMsIHBhZGRpbmdzIGFu
ZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0LgotICAgICAgICAg
ICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOwotICAgICAgICAgICAg
c3dpdGNoICh2ZXJ0aWNhbEFsaWduKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OkJhc2VsaW5lOiB7Ci0gICAgICAgICAgICAgICAgYXV0byBoYWxmTGVhZGluZyA9IGhhbGZMZWFk
aW5nTWV0cmljcyhmb250TWV0cmljcywgc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOwotICAg
ICAgICAgICAgICAgIC8vIEJvdGggaGFsZmxlYWRpbmcgYXNjZW50IGFuZCBkZXNjZW50IGNvdWxk
IGJlIG5lZ2F0aXZlICh0YWxsIGZvbnQgdnMuIHNtYWxsIGxpbmUtaGVpZ2h0IHZhbHVlKQotICAg
ICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5kZXNjZW50KCkgPiAwKQotICAgICAgICAgICAg
ICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5kZXNjZW50
KCkpOwotICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQoKSA+IDApCi0gICAg
ICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcu
YXNjZW50KCkpOwotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZH
cmVhdGVyKG1fbGluZUJveC5iYXNlbGluZSgpLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlk
ZGxlOiB7Ci0gICAgICAgICAgICAgICAgbWlkZGxlVmVydGljYWxBbGlnbihmb250TWV0cmljcy5o
ZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0
SWZHcmVhdGVyKGZvbnRNZXRyaWNzLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgbGluZSdz
IGJhc2VsaW5lIGFuZCBoZWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQgYXQgQ29udGFp
bmVyU3RhcnQuCi0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVs
KTsKLSAgICAgICAgICAgIC0taW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQm94KCkpIHsKLSAg
ICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3hIZWlnaHQgPSBi
b3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLQotICAgICAgICAgICAgc3dpdGNoICh2ZXJ0
aWNhbEFsaWduKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7
Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5
b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5saW5lIGNvbnRlbnQgYWx3YXlzIGhh
dmUgYmFzZWxpbmVzLgotICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUg
PSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0
PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNwZWMg
bWFrZXMgdXMgZ2VuZXJhdGUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHku
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5lQm94ID0gZm9ybWF0dGluZ1N0YXRl
LmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5sYXN0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGxhc3RMaW5lQm94LmJhc2VsaW5lKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYmVmb3JlSGVpZ2h0ID0gYm94R2VvbWV0cnkubWFy
Z2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRp
bmdUb3AoKS52YWx1ZU9yKDApOwotCi0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRB
c2NlbnRJZkdyZWF0ZXIoaW5saW5lQmxvY2tCYXNlbGluZS5hc2NlbnQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGlubGluZUJsb2NrQmFzZWxp
bmUuZGVzY2VudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEJhc2VsaW5l
T2Zmc2V0SWZHcmVhdGVyKGJlZm9yZUhlaWdodCArIGxhc3RMaW5lQm94LmJhc2VsaW5lT2Zmc2V0
KCkpOwotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIE5vbiBpbmxpbmUtYmxvY2sgYm94ZXMgc2l0IG9uIHRoZSBiYXNlbGlu
ZSAoaW5jbHVkaW5nIHRoZWlyIGJvdHRvbSBtYXJnaW4pLgotICAgICAgICAgICAgICAgICAgICBt
X2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIElnbm9yZSBuZWdhdGl2ZSBkZXNjZW50ICh5ZXMsIG5lZ2F0aXZlIGRlc2Nl
bnQgaXMgYSB0aGluZykuCi0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2Fs
SGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCArIHN0ZDo6bWF4PElubGluZUxheW91dFVu
aXQ+KDAsIG1fbGluZUJveC5iYXNlbGluZSgpLmRlc2NlbnQoKSkpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAgICAgIC8vIFRvcCBhbGlnbiBjb250
ZW50IG5ldmVyIGNoYW5nZXMgdGhlIGJhc2VsaW5lLCBpdCBvbmx5IHB1c2hlcyB0aGUgYm90dG9t
IG9mIHRoZSBsaW5lIGZ1cnRoZXIgZG93bi4KLSAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0
TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsKLSAgICAg
ICAgICAgICAgICAvLyBCb3R0b20gYWxpZ25lZCwgdGFsbCBjb250ZW50IHB1c2hlcyB0aGUgYmFz
ZWxpbmUgZnVydGhlciBkb3duIGZyb20gdGhlIGxpbmUgdG9wLgotICAgICAgICAgICAgICAgIGF1
dG8gbGluZUxvZ2ljYWxIZWlnaHQgPSBtX2xpbmVCb3gubG9naWNhbEhlaWdodCgpOwotICAgICAg
ICAgICAgICAgIGlmIChtYXJnaW5Cb3hIZWlnaHQgPiBsaW5lTG9naWNhbEhlaWdodCkgewotICAg
ICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJn
aW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QmFzZWxpbmVP
ZmZzZXRJZkdyZWF0ZXIobV9saW5lQm94LmJhc2VsaW5lT2Zmc2V0KCkgKyAobWFyZ2luQm94SGVp
Z2h0IC0gbGluZUxvZ2ljYWxIZWlnaHQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246Ok1pZGRsZTogewotICAgICAgICAgICAgICAgIG1pZGRsZVZlcnRpY2FsQWxpZ24obWFyZ2lu
Qm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9Z
RVQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1JbmxpbmVMYXlvdXRVbml0IExpbmVC
dWlsZGVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IFJ1biYgcnVuKSBjb25zdAotewotICAgIEFT
U0VSVCghbV9pc0ludHJpbnNpY1NpemluZyk7Ci0gICAgYXV0byYgZm9udE1ldHJpY3MgPSBydW4u
c3R5bGUoKS5mb250TWV0cmljcygpOwotICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGlu
ZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQotICAgIGlm
IChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAg
ICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBhdXRvJiBsYXlvdXRCb3ggPSBy
dW4ubGF5b3V0Qm94KCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgaWYgKGxheW91dEJveC5pc1JlcGxh
Y2VkQm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJl
dHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7Ci0KLSAgICAvLyBOb24tcmVwbGFj
ZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNsZWFk
aW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0
IGhlcmUuCi0gICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwotfQotCiBi
b29sIExpbmVCdWlsZGVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoY29uc3QgUnVuJiBydW4pIGNvbnN0
CiB7CiAgICAgaWYgKHJ1bi5pc1RleHQoKSkKQEAgLTc2MCwxMSArNzkwLDYgQEAgSW5saW5lQm94
OjpCYXNlbGluZSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRy
aWNzJiBmb250TWV0cmkKICAgICByZXR1cm4geyBhZGp1c3RlZEFzY2VudCwgYWRqdXN0ZWREZXNj
ZW50IH07CiB9CiAKLUxheW91dFN0YXRlJiBMaW5lQnVpbGRlcjo6bGF5b3V0U3RhdGUoKSBjb25z
dAoteyAKLSAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOwotfQot
CiBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgTGluZUJ1aWxkZXI6OmZvcm1hdHRpbmdD
b250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQnVpbGRlci5oCmluZGV4IDQ5ZmViOTBmNmNhOWE5MzRmNjYzNmM3YTNiMjQ4OGQ0
MzIzZjk3YTIuLmM0YjA4YjhjYmY4N2FmMzJhZjk2ODlmNzYzMzQ1N2ZjYWU0Y2U5Y2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVC
dWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lTGluZUJ1aWxkZXIuaApAQCAtMzgsMTAgKzM4LDkgQEAgbmFtZXNwYWNlIExheW91dCB7CiBz
dHJ1Y3QgSGFuZ2luZ0NvbnRlbnQ7CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIGNs
YXNzIElubGluZVNvZnRMaW5lQnJlYWtJdGVtOworY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyOwog
CiBjbGFzcyBMaW5lQnVpbGRlciB7Ci0gICAgc3RydWN0IENvbnRpbnVvdXNDb250ZW50OwotCiBw
dWJsaWM6CiAgICAgc3RydWN0IENvbnN0cmFpbnRzIHsKICAgICAgICAgSW5saW5lTGF5b3V0UG9p
bnQgbG9naWNhbFRvcExlZnQ7CkBAIC05Miw2ICs5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgUnVu
JiBvcGVyYXRvcj0oUnVuJiYgb3RoZXIpID0gZGVmYXVsdDsKIAogICAgIHByaXZhdGU6CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBMaW5lQ29udGVudEFsaWduZXI7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBMaW5lQnVpbGRlcjsKIAogICAgICAgICBSdW4oY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwg
Ym9vbCBuZWVkc0h5cGVuKTsKQEAgLTE1MSwxOCArMTUxLDExIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgSW5saW5lQm94OjpCYXNlbGluZSBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJp
Y3MmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KTsKIAogcHJpdmF0ZToKLSAg
ICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gu
bG9naWNhbFRvcCgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29u
c3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKTsgfQotCi0gICAgSW5saW5lTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsTGVm
dCgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVy
biBsb2dpY2FsTGVmdCgpICsgbG9naWNhbFdpZHRoKCk7IH0KLQorICAgIElubGluZUxheW91dFVu
aXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxMZWZ0KCkg
KyBsb2dpY2FsV2lkdGgoKTsgfQogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lTG9naWNhbFdpZHRoOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQo
KTsgfQogCiAgICAgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxXaWR0aCgpOyB9CiAgICAgSW5saW5lTGF5b3V0VW5p
dCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxS
aWdodCgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZU9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUJveC5iYXNlbGluZU9mZnNldCgpOyB9CiAKICAgICBzdHJ1Y3QgSW5saW5l
UnVuRGV0YWlscyB7CiAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoIHsgMCB9
OwpAQCAtMTgwLDE3ICsxNzMsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdU
cmltbWFibGVDb250ZW50KCk7CiAgICAgdm9pZCB2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJm
bG93Q29udGVudCgpOwogICAgIEhhbmdpbmdDb250ZW50IGNvbGxlY3RIYW5naW5nQ29udGVudChJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHko
Y29uc3QgSGFuZ2luZ0NvbnRlbnQmLCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAg
IHZvaWQgYWxpZ25Db250ZW50VmVydGljYWxseSgpOwotCi0gICAgdm9pZCBhZGp1c3RCYXNlbGlu
ZUFuZExpbmVIZWlnaHQoKTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQo
Y29uc3QgUnVuJikgY29uc3Q7Ci0KLSAgICB2b2lkIGp1c3RpZnlSdW5zKElubGluZUxheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgpOwogCiAgICAgYm9vbCBpc1Zpc3VhbGx5Tm9uRW1wdHkoY29uc3Qg
UnVuJikgY29uc3Q7CiAKLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKICAg
ICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25z
dDsKICAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404653</attachid>
            <date>2020-07-18 21:12:12 -0700</date>
            <delta_ts>2020-07-19 12:59:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214527-20200718211211.patch</filename>
            <type>text/plain</type>
            <size>41688</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2RmNzE3YWUxY2U1YjMw
OWU3NmVjYzU4ODA0ZjQ1NDVkNTVkYmU1MC4uNTQ0ZjM2ZGQ2Zjg1NGRlOWZjYWRlM2FiNTcyZTAw
YjY4MjRlNjA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTA3LTE4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBydW4gYWxpZ25tZW50IGxvZ2ljIHRvIGEgZGVkaWNhdGVkIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ1MjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCB3aWxsIGtlZXAgdGhlIGNv
ZGUgY2xlYW4gd2hlbiB3ZSBzdGFydCBpbnRyb2R1Y2luZyB2ZXJ0aWNhbCBhbGlnbWVudCByZWxh
dGVkIHN0YXRlICh3aGljaCBvbmx5IHJlcXVpcmVkIGR1cmluZworICAgICAgICBhbGlnbm1lbnQs
IHNvIGFkZGluZyB0aGUgc3RhdGUgdG8gdGhlIExpbmVCdWlsZGVyIGNsYXNzIHdvdWxkIGJlIGNv
bmZ1c2luZykuCisKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRB
bGlnbmVyOjpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6cm9vdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6bGF5b3V0U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25lcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFs
bHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWdu
VmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25l
cjo6anVzdGlmeVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFs
aWduZXI6OmFsaWduUnVuc1ZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpMaW5lQnVpbGRl
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjp+TGluZUJ1aWxkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpyZXNldENvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y2xvc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBwZW5kSW5saW5lQ29udGFpbmVyRW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFsaWduQ29udGVudFZlcnRpY2Fs
bHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6anVz
dGlmeVJ1bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6YWxpZ25Ib3Jpem9udGFsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJ1bkNvbnRlbnRIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bGF5
b3V0U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpsb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6bG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6OmNvbnRlbnRMb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bG9naWNhbFRvcCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsQm90dG9tIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxvZ2lj
YWxMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6YmFzZWxpbmVPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorCiAy
MDIwLTA3LTE4ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xG
Q11bSUZDXSBBZGQgaW5pdGlhbCB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlIHN1cHBvcnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IGJjMTliMmZmYjhiYTNiNzU2YzA4N2RiZTQ0
NmMzMGYyODFiMTQ0Y2MuLjcyMWIzNDNmYmM5MjI4ZjU1YmY0ZWIzMjcwNGQwMzhkM2FkZDdhMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtOTQsNyArOTQsNyBAQCBwcml2
YXRlOgogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkg
Y29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5n
Q29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiAgICAgSW5saW5lRm9ybWF0dGluZ1N0YXRl
JiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3Rh
dGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KICAgICAvLyBGSVhN
RTogQ29tZSB1cCB3aXRoIGEgc3RydWN0dXJlIHRoYXQgcmVxdWlyZXMgbm8gZnJpZW5kaW5nLgot
ICAgIGZyaWVuZCBjbGFzcyBMaW5lQnVpbGRlcjsKKyAgICBmcmllbmQgY2xhc3MgTGluZUNvbnRl
bnRBbGlnbmVyOwogfTsKIAogaW5saW5lIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6R2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IGYyMzJmOGM5N2NhMDMxMGM2
M2E4MGY1MTExODc3MWQ3YzRlMmJlMTMuLmFkZmJjOWNiNGZlMzY3ZDY2MmEyNzUxN2YyNzAxMWUw
NjM2M2I5MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTY0LDYxICs2NCw5MyBAQCB2
b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgpCiAgICAgbV93aWR0aCA9ICAwOwogfQogCi1MaW5l
QnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LCBJbnRyaW5zaWNTaXppbmcgaW50cmluc2ljU2l6aW5nKQotICAg
IDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKLSAg
ICAsIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykKLSAgICAsIG1faXNJbnRyaW5z
aWNTaXppbmcoaW50cmluc2ljU2l6aW5nID09IEludHJpbnNpY1NpemluZzo6WWVzKQotICAgICwg
bV9zaG91bGRJZ25vcmVUcmFpbGluZ0xldHRlclNwYWNpbmcoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5h
YmxlZCgpKQotewotfQorY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyIHsKK3B1YmxpYzoKKyAgICBM
aW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBJbmxpbmVC
b3gmLCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYpOwogCi1MaW5lQnVpbGRlcjo6fkxpbmVCdWlsZGVy
KCkKKyAgICB2b2lkIGFsaWduSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgsIExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOworICAgIHZv
aWQgYWxpZ25WZXJ0aWNhbGx5KE9wdGlvbmFsPElubGluZUJveDo6QmFzZWxpbmU+IGluaXRpYWxT
dHJ1dCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQo
T3B0aW9uYWw8SW5saW5lQm94OjpCYXNlbGluZT4gaW5pdGlhbFN0cnV0KTsKKyAgICB2b2lkIGFs
aWduUnVuc1ZlcnRpY2FsbHkoKTsKKyAgICB2b2lkIGp1c3RpZnlSdW5zKElubGluZUxheW91dFVu
aXQgYXZhaWxhYmxlV2lkdGgpOworICAgIElubGluZUxheW91dFVuaXQgcnVuQ29udGVudEhlaWdo
dChjb25zdCBMaW5lQnVpbGRlcjo6UnVuJikgY29uc3Q7CisKKyAgICBjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OyB9CisgICAgY29uc3QgQ29udGFpbmVyQm94JiByb290KCkgY29u
c3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0KKyAgICBMYXlvdXRTdGF0
ZSYgbGF5b3V0U3RhdGUoKSB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRl
KCk7IH0KKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1h
dHRpbmdDb250ZXh0OworICAgIElubGluZUJveCYgbV9saW5lQm94OworICAgIExpbmVCdWlsZGVy
OjpSdW5MaXN0JiBtX3J1bnM7Cit9OworCitMaW5lQ29udGVudEFsaWduZXI6OkxpbmVDb250ZW50
QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQsIElubGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMpCisg
ICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQor
ICAgICwgbV9saW5lQm94KGxpbmVCb3gpCisgICAgLCBtX3J1bnMocnVucykKIHsKIH0KIAotdm9p
ZCBMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShjb25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludHMp
Cit2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25Ib3Jpem9udGFsbHkoSW5saW5lTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCBpc0xhc3RMaW5lKQogewotICAgIEFTU0VSVChtX2lzSW50cmluc2ljU2l6aW5nIHx8IGNv
bnN0cmFpbnRzLmhlaWdodEFuZEJhc2VsaW5lKTsKKyAgICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8
fCBhdmFpbGFibGVXaWR0aCA8PSAwKQorICAgICAgICByZXR1cm47CiAKLSAgICBJbmxpbmVMYXlv
dXRVbml0IGluaXRpYWxMaW5lSGVpZ2h0ID0gMDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGluaXRp
YWxCYXNlbGluZU9mZnNldCA9IDA7Ci0gICAgaWYgKGNvbnN0cmFpbnRzLmhlaWdodEFuZEJhc2Vs
aW5lKSB7Ci0gICAgICAgIG1faW5pdGlhbFN0cnV0ID0gY29uc3RyYWludHMuaGVpZ2h0QW5kQmFz
ZWxpbmUtPnN0cnV0OwotICAgICAgICBpbml0aWFsTGluZUhlaWdodCA9IGNvbnN0cmFpbnRzLmhl
aWdodEFuZEJhc2VsaW5lLT5oZWlnaHQ7Ci0gICAgICAgIGluaXRpYWxCYXNlbGluZU9mZnNldCA9
IGNvbnN0cmFpbnRzLmhlaWdodEFuZEJhc2VsaW5lLT5iYXNlbGluZU9mZnNldDsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9pbml0aWFsU3RydXQgPSB7IH07CisgICAgYXV0byBjb21wdXRlZEhvcml6
b250YWxBbGlnbm1lbnQgPSBbJl0geworICAgICAgICBpZiAocm9vdCgpLnN0eWxlKCkudGV4dEFs
aWduKCkgIT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkKKyAgICAgICAgICAgIHJldHVybiByb290
KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsKKyAgICAgICAgLy8gVGV4dCBpcyBqdXN0aWZpZWQgYWNj
b3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0LWp1c3RpZnkgcHJvcGVy
dHksCisgICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0aGUgbGluZSBib3guIFVu
bGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFzdCwKKyAgICAgICAgLy8g
dGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxv
Y2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAgICAgaWYgKG1fcnVucy5sYXN0KCkuaXNMaW5lQnJl
YWsoKSB8fCBpc0xhc3RMaW5lID09IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQ6OlllcykKKyAgICAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKKyAg
ICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7CisgICAgfSgpOwogCi0gICAgYXV0
byBsaW5lUmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyBjb25zdHJhaW50cy5sb2dpY2FsVG9w
TGVmdCwgMF9sdSwgaW5pdGlhbExpbmVIZWlnaHQgfTsKLSAgICBhdXRvIGJhc2VsaW5lID0gSW5s
aW5lQm94OjpCYXNlbGluZSB7IGluaXRpYWxCYXNlbGluZU9mZnNldCwgaW5pdGlhbExpbmVIZWln
aHQgLSBpbml0aWFsQmFzZWxpbmVPZmZzZXQgfTsKLSAgICBtX2xpbmVCb3ggPSBJbmxpbmVCb3gg
eyBsaW5lUmVjdCwgYmFzZWxpbmUsIGluaXRpYWxCYXNlbGluZU9mZnNldCB9OwotICAgIG1fbGlu
ZUxvZ2ljYWxXaWR0aCA9IGNvbnN0cmFpbnRzLmF2YWlsYWJsZUxvZ2ljYWxXaWR0aDsKLSAgICBt
X2hhc0ludHJ1c2l2ZUZsb2F0ID0gY29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0
OworICAgIGlmIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6
SnVzdGlmeSkgeworICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICByZXNldENvbnRlbnQoKTsKLX0KKyAgICBhdXRvIGFkanVz
dG1lbnRGb3JBbGlnbm1lbnQgPSBbXSAoYXV0byBob3Jpem9udGFsQWxpZ25tZW50LCBhdXRvIGF2
YWlsYWJsZVdpZHRoKSAtPiBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7CisgICAgICAgIHN3
aXRjaCAoaG9yaXpvbnRhbEFsaWdubWVudCkgeworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OkxlZnQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICAgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0UmlnaHQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoLCAw
KTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAgICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElu
bGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoIC8gMiwgMCk7CisgICAgICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6SnVzdGlmeToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfTsKIAotdm9pZCBMaW5lQnVpbGRlcjo6cmVz
ZXRDb250ZW50KCkKLXsKLSAgICBtX2xpbmVCb3guc2V0TG9naWNhbFdpZHRoKHsgfSk7Ci0gICAg
bV9saW5lQm94LnNldElzQ29uc2lkZXJlZEVtcHR5KCk7Ci0gICAgbV9ydW5zLmNsZWFyKCk7Ci0g
ICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKLSAgICBtX2xpbmVJc1Zpc3Vh
bGx5RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgPSB7IH07CisgICAgYXV0byBh
ZGp1c3RtZW50ID0gYWRqdXN0bWVudEZvckFsaWdubWVudChjb21wdXRlZEhvcml6b250YWxBbGln
bm1lbnQsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICBpZiAoIWFkanVzdG1lbnQpCisgICAgICAgIHJl
dHVybjsKKyAgICAvLyBIb3Jpem9udGFsIGFsaWdubWVudCBtZWFucyB0aGF0IHdlIG5vdCBvbmx5
IGFkanVzdCB0aGUgcnVucyBidXQgYWxzbyBtYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBsaW5l
IGJveCBpcyBhbGlnbmVkIGFzIHdlbGwKKyAgICAvLyBlLmcuIDxkaXYgc3R5bGU9InRleHQtYWxp
Z246IGNlbnRlcjsgd2lkdGg6IDEwMHB4OyI+Y2VudGVyZWQgdGV4dDwvZGl2PiA6IHRoZSBsaW5l
IGJveCB3aWxsIGFsc28gYmUgY2VudGVyZWQKKyAgICAvLyBhcyBvcHBvc2VkIHRvIHN0YXJ0IGF0
IDBweCBhbGwgdGhlIHdheSB0byBbY2VudGVyZWQgdGV4dF0gcnVuJ3MgcmlnaHQgZWRnZS4KKyAg
ICBtX2xpbmVCb3gubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CisgICAgZm9yIChhdXRv
JiBydW4gOiBtX3J1bnMpCisgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50
KTsKIH0KIAotTGluZUJ1aWxkZXI6OlJ1bkxpc3QgTGluZUJ1aWxkZXI6OmNsb3NlKElzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCit2b2lkIExp
bmVDb250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5KE9wdGlvbmFsPElubGluZUJveDo6QmFz
ZWxpbmU+IGluaXRpYWxTdHJ1dCkKIHsKLSAgICAvLyAxLiBSZW1vdmUgdHJpbW1hYmxlIHRyYWls
aW5nIGNvbnRlbnQuCi0gICAgLy8gMi4gQWxpZ24gbWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNhbGx5
IGFuZCBob3Jpem9udGFsbHkuCi0gICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7
Ci0gICAgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKLSAgICBpZiAo
bV9pc0ludHJpbnNpY1NpemluZykKLSAgICAgICAgcmV0dXJuIFdURk1vdmUobV9ydW5zKTsKLQot
ICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoaXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsK
LSAgICBpZiAoaXNWaXN1YWxseUVtcHR5KCkpIHsKKyAgICBhZGp1c3RCYXNlbGluZUFuZExpbmVI
ZWlnaHQoaW5pdGlhbFN0cnV0KTsKKyAgICBpZiAobV9saW5lQm94LmlzQ29uc2lkZXJlZEVtcHR5
KCkpIHsKICAgICAgICAgbV9saW5lQm94LnJlc2V0QmFzZWxpbmUoKTsKICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHQoeyB9KTsKICAgICB9CkBAIC0xMjcsMjggKzE1OSw2MSBAQCBM
aW5lQnVpbGRlcjo6UnVuTGlzdCBMaW5lQnVpbGRlcjo6Y2xvc2UoSXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50IGlzTGFzdExpbmVXaQogICAgICAgICBtX2xpbmVCb3guc2hyaW5rVmVydGljYWxs
eShtX2xpbmVCb3guYmFzZWxpbmUoKS5kZXNjZW50KCkpOwogICAgICAgICBtX2xpbmVCb3gucmVz
ZXREZXNjZW50KCk7CiAgICAgfQotICAgIGFsaWduQ29udGVudFZlcnRpY2FsbHkoKTsKLSAgICBh
bGlnbkhvcml6b250YWxseShoYW5naW5nQ29udGVudCwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KTsKLSAgICByZXR1cm4gV1RGTW92ZShtX3J1bnMpOworICAgIGFsaWduUnVuc1ZlcnRpY2Fs
bHkoKTsKK30KKwordm9pZCBMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKElubGluZUxh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCit7CisgICAgQVNTRVJUKGF2YWlsYWJsZVdpZHRoID4g
MCk7CisgICAgLy8gQ29sbGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51bWJlcnMgYW5k
IGZpbmQgdGhlIGxhc3QgcnVuIHdpdGggY29udGVudC4KKyAgICBhdXRvIGV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQgPSAwOworICAgIExpbmVCdWlsZGVyOjpSdW4qIGxhc3RSdW5XaXRoQ29udGVu
dCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgp
OworICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQorICAgICAgICAgICAg
bGFzdFJ1bldpdGhDb250ZW50ID0gJnJ1bjsKKyAgICB9CisgICAgLy8gTmVlZCB0byBmaXggdXAg
dGhlIGxhc3QgcnVuJ3MgdHJhaWxpbmcgZXhwYW5zaW9uLgorICAgIGlmIChsYXN0UnVuV2l0aENv
bnRlbnQgJiYgbGFzdFJ1bldpdGhDb250ZW50LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7
CisgICAgICAgIC8vIFR1cm4gb2ZmIHRoZSB0cmFpbGluZyBiaXRzIGZpcnN0IGFuZCBhZGQgdGhl
IGZvcmJpZCB0cmFpbGluZyBleHBhbnNpb24uCisgICAgICAgIGF1dG8gbGVhZGluZ0V4cGFuc2lv
biA9IGxhc3RSdW5XaXRoQ29udGVudC0+ZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlYWRpbmdFeHBh
bnNpb25NYXNrOworICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQtPnNldEV4cGFuc2lvbkJlaGF2
aW9yKGxlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRUcmFpbGluZ0V4cGFuc2lvbik7CisgICAgfQor
ICAgIC8vIE5vdGhpbmcgdG8gZGlzdHJpYnV0ZT8KKyAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBEaXN0cmlidXRlIHRoZSBleHRyYSBz
cGFjZS4KKyAgICBhdXRvIGV4cGFuc2lvblRvRGlzdHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoIC8g
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKKyAgICBhdXRvIGFjY3VtdWxhdGVkRXhwYW5zaW9u
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsK
KyAgICAgICAgLy8gRXhwYW5kIGFuZCBtb3ZlcyBydW5zIGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBh
bnNpb24uCisgICAgICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKKyAg
ICAgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChydW4uZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudCgpKTsKKyAgICAgICAgYXV0byBjb21wdXRlZEV4cGFuc2lvbiA9
IGV4cGFuc2lvblRvRGlzdHJpYnV0ZSAqIHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7
CisgICAgICAgIHJ1bi5zZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24oY29tcHV0ZWRFeHBh
bnNpb24pOworICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lv
bik7CisgICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGNvbXB1dGVkRXhwYW5zaW9uOwor
ICAgIH0KIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseSgpCit2
b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25SdW5zVmVydGljYWxseSgpCiB7Ci0gICAgQVNT
RVJUKCFtX2lzSW50cmluc2ljU2l6aW5nKTsKICAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1Jl
Y3QgPSBtX2xpbmVCb3gubG9naWNhbFJlY3QoKTsKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVu
cykgewotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSAwOworICAgICAgICBh
dXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKICAgICAgICAgYXV0byYgbGF5
b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBs
YXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7Ci0gICAgICAgIGF1dG8gYXNjZW50ID0g
bGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKIAotICAgICAgICBzd2l0
Y2ggKHZlcnRpY2FsQWxpZ24pIHsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGlu
ZToKKyAgICAgICAgc3dpdGNoIChsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkpIHsK
KyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgYXV0
byBhc2NlbnQgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpOwogICAg
ICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpIHx8IHJ1bi5pc1RleHQoKSkKLSAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIGFzY2VudDsKKyAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmJhc2VsaW5lT2Zmc2V0KCkgLSBhc2NlbnQ7
CiAgICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5
Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGJhc2VsaW5l
T2Zmc2V0KCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSAtIGJveEdlb21ldHJ5
LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOworICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBt
X2xpbmVCb3guYmFzZWxpbmVPZmZzZXQoKSAtIGFzY2VudCAtIGJveEdlb21ldHJ5LmJvcmRlclRv
cCgpIC0gYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFi
bGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAgICAgICAgICAgICAgIGF1dG8m
IGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0
aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKICAgICAgICAgICAg
ICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlm
IGl0IGlzIGVtcHR5LgpAQCAtMTY3LDI0ICsyMzIsMTkgQEAgdm9pZCBMaW5lQnVpbGRlcjo6YWxp
Z25Db250ZW50VmVydGljYWxseSgpCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94KTsKICAgICAgICAgICAgICAgICBhdXRvIGJhc2VsaW5lT2Zmc2V0RnJvbU1hcmdp
bkJveCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9w
KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFz
ZWxpbmVPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGJhc2VsaW5lT2Zmc2V0
KCkgLSBiYXNlbGluZU9mZnNldEZyb21NYXJnaW5Cb3g7CisgICAgICAgICAgICAgICAgbG9naWNh
bFRvcCA9IG1fbGluZUJveC5iYXNlbGluZU9mZnNldCgpIC0gYmFzZWxpbmVPZmZzZXRGcm9tTWFy
Z2luQm94OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBhdXRvJiBib3hH
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsK
LSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIChib3hHZW9t
ZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFs
dWVPcigwX2x1KSArIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpICsgYm94R2VvbWV0cnkubWFy
Z2luQWZ0ZXIoKSk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5iYXNl
bGluZU9mZnNldCgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hHZW9tZXRy
eS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVuLmxvZ2ljYWxSZWN0KCkuaGVp
Z2h0KCkgKyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9w
OgogICAgICAgICAgICAgbG9naWNhbFRvcCA9IDBfbHU7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBsb2dpY2FsVG9w
ID0gbG9naWNhbEJvdHRvbSgpIC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKLSAgICAg
ICAgICAgIC8vIEFsaWduIHRoZSB2ZXJ0aWNhbCBtaWRwb2ludCBvZiB0aGUgYm94IHdpdGggdGhl
IGJhc2VsaW5lIG9mIHRoZSBwYXJlbnQgYm94IHBsdXMgaGFsZiB0aGUgeC1oZWlnaHQgb2YgdGhl
IHBhcmVudC4KLSAgICAgICAgICAgIGF1dG8geEhlaWdodCA9IHJvb3QoKS5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCkueEhlaWdodCgpOwotICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5i
YXNlbGluZU9mZnNldCgpIC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCkgLyAyIC0geEhlaWdo
dCAvIDI7CisgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmxvZ2ljYWxCb3R0b20o
KSAtIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5U
RURfWUVUKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5MywxMDQgKzI1MywyMDAgQEAgdm9p
ZCBMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseSgpCiAgICAgICAgIC8vIEFkanVz
dCBzY3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBydW4gb3ZlcmZsb3dzIHRoZSBsaW5lLgogICAg
ICAgICBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVu
LmxvZ2ljYWxSZWN0KCkpOwogICAgICAgICAvLyBDb252ZXJ0IHJ1bnMgZnJvbSByZWxhdGl2ZSB0
byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290J3MgYm9yZGVyIGJveCB0
b3AvbGVmdC4KLSAgICAgICAgcnVuLm1vdmVWZXJ0aWNhbGx5KHRoaXMtPmxvZ2ljYWxUb3AoKSk7
Ci0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KHRoaXMtPmxvZ2ljYWxMZWZ0KCkpOworICAg
ICAgICBydW4ubW92ZVZlcnRpY2FsbHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7CisgICAgICAg
IHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KG1fbGluZUJveC5sb2dpY2FsTGVmdCgpKTsKICAgICB9CiAg
ICAgbV9saW5lQm94LnNldFNjcm9sbGFibGVPdmVyZmxvdyhzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0
KTsKIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6anVzdGlmeVJ1bnMoSW5saW5lTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aCkKK3ZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFu
ZExpbmVIZWlnaHQoT3B0aW9uYWw8SW5saW5lQm94OjpCYXNlbGluZT4gaW5pdGlhbFN0cnV0KQog
ewotICAgIEFTU0VSVChhdmFpbGFibGVXaWR0aCA+IDApOwotICAgIC8vIENvbGxlY3QgdGhlIGV4
cGFuc2lvbiBvcHBvcnR1bml0eSBudW1iZXJzIGFuZCBmaW5kIHRoZSBsYXN0IHJ1biB3aXRoIGNv
bnRlbnQuCi0gICAgYXV0byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMDsKLSAgICBSdW4q
IGxhc3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKLSAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCgpOwotICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0Jv
eCgpKQotICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50ID0gJnJ1bjsKLSAgICB9Ci0gICAg
Ly8gTmVlZCB0byBmaXggdXAgdGhlIGxhc3QgcnVuJ3MgdHJhaWxpbmcgZXhwYW5zaW9uLgotICAg
IGlmIChsYXN0UnVuV2l0aENvbnRlbnQgJiYgbGFzdFJ1bldpdGhDb250ZW50LT5oYXNFeHBhbnNp
b25PcHBvcnR1bml0eSgpKSB7Ci0gICAgICAgIC8vIFR1cm4gb2ZmIHRoZSB0cmFpbGluZyBiaXRz
IGZpcnN0IGFuZCBhZGQgdGhlIGZvcmJpZCB0cmFpbGluZyBleHBhbnNpb24uCi0gICAgICAgIGF1
dG8gbGVhZGluZ0V4cGFuc2lvbiA9IGxhc3RSdW5XaXRoQ29udGVudC0+ZXhwYW5zaW9uQmVoYXZp
b3IoKSAmIExlYWRpbmdFeHBhbnNpb25NYXNrOwotICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQt
PnNldEV4cGFuc2lvbkJlaGF2aW9yKGxlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRUcmFpbGluZ0V4
cGFuc2lvbik7Ci0gICAgfQotICAgIC8vIE5vdGhpbmcgdG8gZGlzdHJpYnV0ZT8KLSAgICBpZiAo
IWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBEaXN0
cmlidXRlIHRoZSBleHRyYSBzcGFjZS4KLSAgICBhdXRvIGV4cGFuc2lvblRvRGlzdHJpYnV0ZSA9
IGF2YWlsYWJsZVdpZHRoIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKLSAgICBJbmxpbmVM
YXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKKyAgICB1bnNpZ25lZCBpbmxpbmVD
b250YWluZXJOZXN0aW5nTGV2ZWwgPSAwOworICAgIGF1dG8gaGFzU2VlbkRpcmVjdFRleHRPckxp
bmVCcmVhayA9IGZhbHNlOwogICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAgICAg
IC8vIEV4cGFuZCBhbmQgbW92ZXMgcnVucyBieSB0aGUgYWNjdW11bGF0ZWQgZXhwYW5zaW9uLgot
ICAgICAgICBpZiAoIXJ1bi5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7Ci0gICAgICAgICAg
ICBydW4ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7CisgICAgICAgIGF1
dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICAgICAgYXV0byYgc3R5bGUgPSBs
YXlvdXRCb3guc3R5bGUoKTsKKworICAgICAgICBydW4uc2V0TG9naWNhbEhlaWdodChydW5Db250
ZW50SGVpZ2h0KHJ1bikpOworCisgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGlu
ZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIC8vIEZvciB0ZXh0IGNvbnRlbnQgd2Ugc2V0IHRoZSBi
YXNlbGluZSBlaXRoZXIgdGhyb3VnaCB0aGUgaW5pdGlhbCBzdHJ1dCAoc2V0IGJ5IHRoZSBmb3Jt
YXR0aW5nIGNvbnRleHQgcm9vdCkgb3IKKyAgICAgICAgICAgIC8vIHRocm91Z2ggdGhlIGlubGlu
ZSBjb250YWluZXIgKHN0YXJ0KS4gTm9ybWFsbHkgdGhlIHRleHQgY29udGVudCBpdHNlbGYgZG9l
cyBub3Qgc3RyZXRjaCB0aGUgbGluZS4KKyAgICAgICAgICAgIGlmICghaW5pdGlhbFN0cnV0KSB7
CisgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGluIHN0YW5kYXJkcyBtb2RlIHdoZXJlIHRoZSBi
YXNlbGluZSBhbmQgbGluZSBoZWlnaHQgYXJlIGV4cGxpY2l0LgorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlubGluZUNvbnRhaW5lck5l
c3RpbmdMZXZlbCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYWRqdXN0ZWQg
dGhlIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91Z2ggdGhlIHBhcmVudCBpbmxpbmUgY29udGFp
bmVyLiAKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrKSB7CisgICAgICAgICAgICAgICAg
Ly8gZS5nIGRpdj5maXJzdCB0ZXh0PC9kaXY+IG9yIDxkaXY+PHNwYW4+bmVzdGVkPHNwYW4+Zmly
c3QgZGlyZWN0IHRleHQ8L2Rpdj4uCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gdHJ1ZTsK
KyAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBxdWlya3MgbW9kZSB3aGVyZSB0aGUgZm9udC1tZXRy
aWNzIG1pZ2h0IGNoYW5nZSB0aGUgbGluZSBsaW5lIGhlaWdodC9iYXNlbGluZSBhbmQgdGhpcyBp
cyB0aGUgZmlyc3QgdGV4dCBjb250ZW50IG9uIHRoZSBsaW5lCisgICAgICAgICAgICAvLyBvdXRz
aWRlIG9mIGFuIGlubGluZSBjb250YWluZXIuCisgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNj
ZW50SWZHcmVhdGVyKGluaXRpYWxTdHJ1dC0+YXNjZW50KCkpOworICAgICAgICAgICAgbV9saW5l
Qm94LnNldERlc2NlbnRJZkdyZWF0ZXIoaW5pdGlhbFN0cnV0LT5kZXNjZW50KCkpOworICAgICAg
ICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoaW5pdGlhbFN0cnV0LT5o
ZWlnaHQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gdmVydGljYWxBbGlnbiA9IHN0eWxlLnZlcnRpY2FsQWxpZ24oKTsKKyAgICAgICAgaWYgKHJ1
bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICsraW5saW5lQ29udGFpbmVyTmVz
dGluZ0xldmVsOworICAgICAgICAgICAgLy8gSW5saW5lIGNvbnRhaW5lcnMgc3RyZXRjaCB0aGUg
bGluZSBieSB0aGVpciBmb250IHNpemUuCisgICAgICAgICAgICAvLyBWZXJ0aWNhbCBtYXJnaW5z
LCBwYWRkaW5ncyBhbmQgYm9yZGVycyBkb24ndCBjb250cmlidXRlIHRvIHRoZSBsaW5lIGhlaWdo
dC4KKyAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gc3R5bGUuZm9udE1ldHJpY3MoKTsK
KyAgICAgICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgeworICAgICAgICAgICAgY2FzZSBW
ZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRp
bmcgPSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBzdHlsZS5j
b21wdXRlZExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgLy8gQm90aCBoYWxmbGVhZGlu
ZyBhc2NlbnQgYW5kIGRlc2NlbnQgY291bGQgYmUgbmVnYXRpdmUgKHRhbGwgZm9udCB2cy4gc21h
bGwgbGluZS1oZWlnaHQgdmFsdWUpCisgICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRl
c2NlbnQoKSA+IDApCisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZH
cmVhdGVyKGhhbGZMZWFkaW5nLmRlc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGhhbGZM
ZWFkaW5nLmFzY2VudCgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFz
Y2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5hc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgbV9s
aW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobV9saW5lQm94LmJhc2VsaW5lKCkuaGVp
Z2h0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElm
R3JlYXRlcihmb250TWV0cmljcy5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChydW4uaXNDb250YWluZXJFbmQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGxpbmUncyBi
YXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVzdGVkIGF0IENvbnRhaW5l
clN0YXJ0LgorICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCk7
CisgICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7CisgICAg
ICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gYm94
R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodmVydGlj
YWxBbGlnbikgeworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewor
ICAgICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91
dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gSW5saW5lLWJsb2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZl
IGJhc2VsaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0g
bGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxD
b250YWluZXJCb3g+KGxheW91dEJveCkpOworICAgICAgICAgICAgICAgICAgICAvLyBTcGVjIG1h
a2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5Lgor
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5k
aXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpOworICAgICAgICAgICAgICAg
ICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZUJveC5iYXNlbGluZSgpOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdp
bkJlZm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5n
VG9wKCkudmFsdWVPcigwKTsKKworICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNj
ZW50SWZHcmVhdGVyKGlubGluZUJsb2NrQmFzZWxpbmUuYXNjZW50KCkpOworICAgICAgICAgICAg
ICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlcihpbmxpbmVCbG9ja0Jhc2VsaW5l
LmRlc2NlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRCYXNlbGluZU9m
ZnNldElmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZU9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0
ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUg
KGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFyZ2luKS4KKyAgICAgICAgICAgICAgICAgICAgbV9s
aW5lQm94LnNldEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAg
ICAgICAgICAvLyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50
IGlzIGEgdGhpbmcpLgorICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhl
aWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0
PigwLCBtX2xpbmVCb3guYmFzZWxpbmUoKS5kZXNjZW50KCkpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVu
dCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBv
ZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCisgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExv
Z2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7CisgICAgICAg
ICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMgdGhlIGJhc2Vs
aW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KKyAgICAgICAgICAgICAgICBhdXRv
IGxpbmVMb2dpY2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2lu
Qm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEJhc2VsaW5lT2Zm
c2V0SWZHcmVhdGVyKG1fbGluZUJveC5iYXNlbGluZU9mZnNldCgpICsgKG1hcmdpbkJveEhlaWdo
dCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAg
ICAgICAgQVNTRVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOwotICAgICAgICBh
dXRvIGNvbXB1dGVkRXhwYW5zaW9uID0gZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKLSAgICAgICAgcnVuLnNldENvbXB1dGVkSG9yaXpvbnRh
bEV4cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRh
bGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24g
Kz0gY29tcHV0ZWRFeHBhbnNpb247CiAgICAgfQogfQogCi12b2lkIExpbmVCdWlsZGVyOjphbGln
bkhvcml6b250YWxseShjb25zdCBIYW5naW5nQ29udGVudCYgaGFuZ2luZ0NvbnRlbnQsIElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQorSW5saW5lTGF5b3V0VW5pdCBMaW5l
Q29udGVudEFsaWduZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYg
cnVuKSBjb25zdAogewotICAgIEFTU0VSVCghbV9pc0ludHJpbnNpY1NpemluZyk7CisgICAgYXV0
byYgZm9udE1ldHJpY3MgPSBydW4uc3R5bGUoKS5mb250TWV0cmljcygpOworICAgIGlmIChydW4u
aXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpCisgICAgICAgIHJldHVybiBmb250TWV0cmlj
cy5oZWlnaHQoKTsKIAotICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSB0aGlzLT5hdmFpbGFibGVX
aWR0aCgpICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsKLSAgICBpZiAobV9ydW5zLmlzRW1wdHko
KSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHJ1bi5p
c0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgIHJldHVy
biBmb250TWV0cmljcy5oZWlnaHQoKTsKIAotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxp
Z25tZW50ID0gWyZdIHsKLSAgICAgICAgaWYgKHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpICE9
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgICAgICByZXR1cm4gcm9vdCgpLnN0eWxl
KCkudGV4dEFsaWduKCk7Ci0gICAgICAgIC8vIFRleHQgaXMganVzdGlmaWVkIGFjY29yZGluZyB0
byB0aGUgbWV0aG9kIHNwZWNpZmllZCBieSB0aGUgdGV4dC1qdXN0aWZ5IHByb3BlcnR5LAotICAg
ICAgICAvLyBpbiBvcmRlciB0byBleGFjdGx5IGZpbGwgdGhlIGxpbmUgYm94LiBVbmxlc3Mgb3Ro
ZXJ3aXNlIHNwZWNpZmllZCBieSB0ZXh0LWFsaWduLWxhc3QsCi0gICAgICAgIC8vIHRoZSBsYXN0
IGxpbmUgYmVmb3JlIGEgZm9yY2VkIGJyZWFrIG9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrIGlzIHN0
YXJ0LWFsaWduZWQuCi0gICAgICAgIGlmIChtX3J1bnMubGFzdCgpLmlzTGluZUJyZWFrKCkgfHwg
aXNMYXN0TGluZSA9PSBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcykKLSAgICAgICAg
ICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKLSAgICAgICAgcmV0dXJuIFRleHRBbGln
bk1vZGU6Okp1c3RpZnk7Ci0gICAgfSgpOworICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlv
dXRCb3goKTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3go
KSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuIGJv
eEdlb21ldHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKIAotICAgIGlmIChjb21wdXRlZEhvcml6b250
YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5
UnVucyhhdmFpbGFibGVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgLy8gTm9u
LXJlcGxhY2VkIGlubGluZSBib3ggKGUuZy4gaW5saW5lLWJsb2NrKS4gSXQgbG9va3MgYSBiaXQg
bWlzbGVhZGluZyBidXQgdGhlaXIgbWFyZ2luIGJveCBpcyBjb25zaWRlcmVkIHRoZSBjb250ZW50
IGhlaWdodCBoZXJlLgorICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsK
K30KIAotICAgIGF1dG8gYWRqdXN0bWVudEZvckFsaWdubWVudCA9IFtdIChhdXRvIGhvcml6b250
YWxBbGlnbm1lbnQsIGF1dG8gYXZhaWxhYmxlV2lkdGgpIC0+IE9wdGlvbmFsPElubGluZUxheW91
dFVuaXQ+IHsKLSAgICAgICAgc3dpdGNoIChob3Jpem9udGFsQWxpZ25tZW50KSB7Ci0gICAgICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKLSAgICAg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpFbmQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5p
dD4oYXZhaWxhYmxlV2lkdGgsIDApOwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRl
cjoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGggLyAyLCAw
KTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9OworTGlu
ZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCwgSW50cmluc2ljU2l6aW5nIGludHJpbnNpY1NpemluZykKKyAg
ICA6IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisg
ICAgLCBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudChtX3J1bnMpCisgICAgLCBtX2lzSW50cmlu
c2ljU2l6aW5nKGludHJpbnNpY1NpemluZyA9PSBJbnRyaW5zaWNTaXppbmc6OlllcykKKyAgICAs
IG1fc2hvdWxkSWdub3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVu
YWJsZWQoKSkKK3sKK30KIAotICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGln
bm1lbnQoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50LCBhdmFpbGFibGVXaWR0aCk7Ci0gICAg
aWYgKCFhZGp1c3RtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gSG9yaXpvbnRhbCBhbGln
bm1lbnQgbWVhbnMgdGhhdCB3ZSBub3Qgb25seSBhZGp1c3QgdGhlIHJ1bnMgYnV0IGFsc28gbWFr
ZSBzdXJlCi0gICAgLy8gdGhhdCB0aGUgbGluZSBib3ggaXMgYWxpZ25lZCBhcyB3ZWxsCi0gICAg
Ly8gZS5nLiA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHdpZHRoOiAxMDBweDsiPmNl
bnRlcmVkIHRleHQ8L2Rpdj4gOiB0aGUgbGluZSBib3ggd2lsbCBhbHNvIGJlIGNlbnRlcmVkCi0g
ICAgLy8gYXMgb3Bwb3NlZCB0byBzdGFydCBhdCAwcHggYWxsIHRoZSB3YXkgdG8gW2NlbnRlcmVk
IHRleHRdIHJ1bidzIHJpZ2h0IGVkZ2UuCi0gICAgbV9saW5lQm94Lm1vdmVIb3Jpem9udGFsbHko
KmFkanVzdG1lbnQpOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKQotICAgICAgICBydW4u
bW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CitMaW5lQnVpbGRlcjo6fkxpbmVCdWlsZGVy
KCkKK3sKK30KKwordm9pZCBMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShjb25zdCBDb25zdHJhaW50
cyYgY29uc3RyYWludHMpCit7CisgICAgQVNTRVJUKG1faXNJbnRyaW5zaWNTaXppbmcgfHwgY29u
c3RyYWludHMuaGVpZ2h0QW5kQmFzZWxpbmUpOworCisgICAgSW5saW5lTGF5b3V0VW5pdCBpbml0
aWFsTGluZUhlaWdodCA9IDA7CisgICAgSW5saW5lTGF5b3V0VW5pdCBpbml0aWFsQmFzZWxpbmVP
ZmZzZXQgPSAwOworICAgIGlmIChjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNlbGluZSkgeworICAg
ICAgICBtX2luaXRpYWxTdHJ1dCA9IGNvbnN0cmFpbnRzLmhlaWdodEFuZEJhc2VsaW5lLT5zdHJ1
dDsKKyAgICAgICAgaW5pdGlhbExpbmVIZWlnaHQgPSBjb25zdHJhaW50cy5oZWlnaHRBbmRCYXNl
bGluZS0+aGVpZ2h0OworICAgICAgICBpbml0aWFsQmFzZWxpbmVPZmZzZXQgPSBjb25zdHJhaW50
cy5oZWlnaHRBbmRCYXNlbGluZS0+YmFzZWxpbmVPZmZzZXQ7CisgICAgfSBlbHNlCisgICAgICAg
IG1faW5pdGlhbFN0cnV0ID0geyB9OworCisgICAgYXV0byBsaW5lUmVjdCA9IERpc3BsYXk6Oklu
bGluZVJlY3QgeyBjb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgMF9sdSwgaW5pdGlhbExpbmVI
ZWlnaHQgfTsKKyAgICBhdXRvIGJhc2VsaW5lID0gSW5saW5lQm94OjpCYXNlbGluZSB7IGluaXRp
YWxCYXNlbGluZU9mZnNldCwgaW5pdGlhbExpbmVIZWlnaHQgLSBpbml0aWFsQmFzZWxpbmVPZmZz
ZXQgfTsKKyAgICBtX2xpbmVCb3ggPSBJbmxpbmVCb3ggeyBsaW5lUmVjdCwgYmFzZWxpbmUsIGlu
aXRpYWxCYXNlbGluZU9mZnNldCB9OworICAgIG1fbGluZUxvZ2ljYWxXaWR0aCA9IGNvbnN0cmFp
bnRzLmF2YWlsYWJsZUxvZ2ljYWxXaWR0aDsKKyAgICBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gY29u
c3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0OworCisgICAgcmVzZXRDb250ZW50KCk7
Cit9CisKK3ZvaWQgTGluZUJ1aWxkZXI6OnJlc2V0Q29udGVudCgpCit7CisgICAgbV9saW5lQm94
LnNldExvZ2ljYWxXaWR0aCh7IH0pOworICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWRFbXB0
eSgpOworICAgIG1fcnVucy5jbGVhcigpOworICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50
LnJlc2V0KCk7CisgICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50ID0geyB9OworfQorCitMaW5lQnVpbGRlcjo6UnVuTGlzdCBMaW5lQnVpbGRlcjo6
Y2xvc2UoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCkKK3sKKyAgICAvLyAxLiBSZW1vdmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQuCisg
ICAgLy8gMi4gQWxpZ24gbWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFs
bHkuCisgICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7CisgICAgdmlzdWFsbHlD
b2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKKyAgICBpZiAobV9pc0ludHJpbnNpY1Np
emluZykKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9ydW5zKTsKKworICAgIGF1dG8gaGFuZ2lu
Z0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KTsKKyAgICBhdXRvIGNvbnRlbnRBbGlnbmVyID0gTGluZUNvbnRlbnRBbGlnbmVyIHsgZm9y
bWF0dGluZ0NvbnRleHQoKSwgbV9saW5lQm94LCBtX3J1bnMgfTsKKyAgICBjb250ZW50QWxpZ25l
ci5hbGlnbkhvcml6b250YWxseShhdmFpbGFibGVXaWR0aCgpICsgaGFuZ2luZ0NvbnRlbnQud2lk
dGgoKSwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICBjb250ZW50QWxpZ25lci5h
bGlnblZlcnRpY2FsbHkobV9pbml0aWFsU3RydXQpOworICAgIHJldHVybiBXVEZNb3ZlKG1fcnVu
cyk7CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVu
dCgpCkBAIC00NjYsNyArNjIyLDcgQEAgdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kSW5saW5lQ29u
dGFpbmVyRW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUwKICAgICAvLyBQ
cmV2ZW50IHRyYWlsaW5nIGxldHRlci1zcGFjaW5nIGZyb20gc3BpbGxpbmcgb3V0IG9mIHRoZSBp
bmxpbmUgY29udGFpbmVyLgogICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdGV4
dC0zLyNsZXR0ZXItc3BhY2luZy1wcm9wZXJ0eSBTZWUgZXhhbXBsZSAyMS4KICAgICByZW1vdmVU
cmFpbGluZ0xldHRlclNwYWNpbmcoKTsKLSAgICBhcHBlbmROb25CcmVha2FibGVTcGFjZShpbmxp
bmVJdGVtLCBjb250ZW50TG9naWNhbFJpZ2h0KCksIGxvZ2ljYWxXaWR0aCk7CisgICAgYXBwZW5k
Tm9uQnJlYWthYmxlU3BhY2UoaW5saW5lSXRlbSwgbG9naWNhbFJpZ2h0KCksIGxvZ2ljYWxXaWR0
aCk7CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZFRleHRDb250ZW50KGNvbnN0IElubGlu
ZVRleHRJdGVtJiBpbmxpbmVUZXh0SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgs
IGJvb2wgbmVlZHNIeXBoZW4pCkBAIC01NTMsMTY3ICs3MDksNiBAQCB2b2lkIExpbmVCdWlsZGVy
OjphcHBlbmRMaW5lQnJlYWsoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKICAgICBtX3J1
bnMuYXBwZW5kKHsgZG93bmNhc3Q8SW5saW5lU29mdExpbmVCcmVha0l0ZW0+KGlubGluZUl0ZW0p
LCBjb250ZW50TG9naWNhbFdpZHRoKCkgfSk7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmFkanVz
dEJhc2VsaW5lQW5kTGluZUhlaWdodCgpCi17Ci0gICAgdW5zaWduZWQgaW5saW5lQ29udGFpbmVy
TmVzdGluZ0xldmVsID0gMDsKLSAgICBhdXRvIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsg
PSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewotICAgICAgICBhdXRvJiBs
YXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0
Qm94LnN0eWxlKCk7Ci0KLSAgICAgICAgcnVuLnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhl
aWdodChydW4pKTsKLQotICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVh
aygpKSB7Ci0gICAgICAgICAgICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxp
bmUgZWl0aGVyIHRocm91Z2ggdGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGlu
ZyBjb250ZXh0IHJvb3QpIG9yCi0gICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29u
dGFpbmVyIChzdGFydCkuIE5vcm1hbGx5IHRoZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90
IHN0cmV0Y2ggdGhlIGxpbmUuCi0gICAgICAgICAgICBpZiAoIW1faW5pdGlhbFN0cnV0KSB7Ci0g
ICAgICAgICAgICAgICAgLy8gV2UgYXJlIGluIHN0YW5kYXJkcyBtb2RlIHdoZXJlIHRoZSBiYXNl
bGluZSBhbmQgbGluZSBoZWlnaHQgYXJlIGV4cGxpY2l0LgotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlubGluZUNvbnRhaW5lck5lc3Rp
bmdMZXZlbCkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYWRqdXN0ZWQgdGhl
IGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91Z2ggdGhlIHBhcmVudCBpbmxpbmUgY29udGFpbmVy
LiAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrKSB7Ci0gICAgICAgICAgICAgICAgLy8g
ZS5nIGRpdj5maXJzdCB0ZXh0PC9kaXY+IG9yIDxkaXY+PHNwYW4+bmVzdGVkPHNwYW4+Zmlyc3Qg
ZGlyZWN0IHRleHQ8L2Rpdj4uCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gdHJ1ZTsKLSAg
ICAgICAgICAgIC8vIFdlIGFyZSBpbiBxdWlya3MgbW9kZSB3aGVyZSB0aGUgZm9udC1tZXRyaWNz
IG1pZ2h0IGNoYW5nZSB0aGUgbGluZSBsaW5lIGhlaWdodC9iYXNlbGluZSBhbmQgdGhpcyBpcyB0
aGUgZmlyc3QgdGV4dCBjb250ZW50IG9uIHRoZSBsaW5lCi0gICAgICAgICAgICAvLyBvdXRzaWRl
IG9mIGFuIGlubGluZSBjb250YWluZXIuCi0gICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50
SWZHcmVhdGVyKG1faW5pdGlhbFN0cnV0LT5hc2NlbnQoKSk7Ci0gICAgICAgICAgICBtX2xpbmVC
b3guc2V0RGVzY2VudElmR3JlYXRlcihtX2luaXRpYWxTdHJ1dC0+ZGVzY2VudCgpKTsKLSAgICAg
ICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1faW5pdGlhbFN0cnV0
LT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGF1dG8gbWlkZGxlVmVydGljYWxBbGlnbiA9IFsmXShhdXRvIHJ1bkxvZ2ljYWxIZWlnaHQpIHsK
LSAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHZlcnRpY2FsIG1pZHBvaW50IG9mIHRoZSBib3gg
d2l0aCB0aGUgYmFzZWxpbmUgb2YgdGhlIHBhcmVudCBib3ggcGx1cyBoYWxmIHRoZSB4LWhlaWdo
dCBvZiB0aGUgcGFyZW50Ci0gICAgICAgICAgICAvLyBhbmQgY2hlY2sgb2Ygd2UgbmVlZCB0byBw
dXNoIHRoZSBiYXNlbGluZSBvciBzdHJldGNoIHRoZSBsaW5lLgotICAgICAgICAgICAgYXV0byBj
dXJyZW50QmFzZWxpbmVPZmZzZXQgPSBtX2xpbmVCb3guYmFzZWxpbmVPZmZzZXQoKTsKLSAgICAg
ICAgICAgIGF1dG8gcGFyZW50WEhlaWdodCA9IHJvb3QoKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCku
eEhlaWdodCgpOwotICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gY3VycmVudEJhc2VsaW5l
T2Zmc2V0IC0gcnVuTG9naWNhbEhlaWdodCAvIDIgLSBwYXJlbnRYSGVpZ2h0IC8gMjsKLSAgICAg
ICAgICAgIGlmIChsb2dpY2FsVG9wIDwgMCkgewotICAgICAgICAgICAgICAgIC8vIFB1c2ggdGhl
IGJhc2VsaW5lIGRvd24gb25seSBpZiB0aGUgcnVuIG92ZXJmbG93cyBhdCB0aGUgdG9wLgotICAg
ICAgICAgICAgICAgIGF1dG8gb2Zmc2V0ID0gLWxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICAgICAg
bV9saW5lQm94LnNldEJhc2VsaW5lT2Zmc2V0SWZHcmVhdGVyKGN1cnJlbnRCYXNlbGluZU9mZnNl
dCArIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgLy8gRW5vdWdoIHNwYWNlIGZvciB0aGlzIGlu
bGluZSBjb250YWluZXI/Ci0gICAgICAgICAgICAgICAgYXV0byBzcGFjZUZvclJ1biA9IG1fbGlu
ZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSBydW5Mb2dpY2FsSGVpZ2h0OwotICAgICAgICAgICAgICAg
IC8vIEVub3VnaCBzcGFjZSBmb3IgdGhlIGRlc2NlbnQ/Ci0gICAgICAgICAgICAgICAgYXV0byBz
cGFjZUZvckRlc2NlbnQgPSBtX2xpbmVCb3gubG9naWNhbEhlaWdodCgpIC0gKG1fbGluZUJveC5i
YXNlbGluZU9mZnNldCgpICsgbV9saW5lQm94LmJhc2VsaW5lKCkuZGVzY2VudCgpKTsKLSAgICAg
ICAgICAgICAgICBhdXRvIHNwYWNlRm9yQ29udGVudCA9IHN0ZDo6bWluKHNwYWNlRm9yUnVuLCBz
cGFjZUZvckRlc2NlbnQpOwotICAgICAgICAgICAgICAgIGlmIChzcGFjZUZvckNvbnRlbnQgPCAw
KQotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRl
cihtX2xpbmVCb3gubG9naWNhbEhlaWdodCgpIC0gc3BhY2VGb3JDb250ZW50KTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2xpbmVCb3guc2V0
TG9naWNhbEhlaWdodElmR3JlYXRlcihsb2dpY2FsVG9wICsgcnVuTG9naWNhbEhlaWdodCk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIGF1dG8gdmVydGljYWxBbGlnbiA9IHN0eWxlLnZlcnRpY2FsQWxp
Z24oKTsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKLSAgICAgICAgICAg
ICsraW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsOwotICAgICAgICAgICAgLy8gSW5saW5lIGNv
bnRhaW5lcnMgc3RyZXRjaCB0aGUgbGluZSBieSB0aGVpciBmb250IHNpemUuCi0gICAgICAgICAg
ICAvLyBWZXJ0aWNhbCBtYXJnaW5zLCBwYWRkaW5ncyBhbmQgYm9yZGVycyBkb24ndCBjb250cmli
dXRlIHRvIHRoZSBsaW5lIGhlaWdodC4KLSAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0g
c3R5bGUuZm9udE1ldHJpY3MoKTsKLSAgICAgICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikg
ewotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAg
ICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBoYWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3Ms
IHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhh
bGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2VudCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250
IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxl
YWRpbmcuZGVzY2VudCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldERl
c2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuZGVzY2VudCgpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaGFsZkxlYWRpbmcuYXNjZW50KCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBtX2xpbmVC
b3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmFzY2VudCgpKTsKLSAgICAgICAgICAg
ICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtX2xpbmVCb3guYmFzZWxp
bmUoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogewotICAgICAgICAgICAgICAg
IG1pZGRsZVZlcnRpY2FsQWxpZ24oZm9udE1ldHJpY3MuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihmb250TWV0cmljcy5o
ZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJF
bmQoKSkgewotICAgICAgICAgICAgLy8gVGhlIGxpbmUncyBiYXNlbGluZSBhbmQgaGVpZ2h0IGhh
dmUgYWxyZWFkeSBiZWVuIGFkanVzdGVkIGF0IENvbnRhaW5lclN0YXJ0LgotICAgICAgICAgICAg
QVNTRVJUKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCk7Ci0gICAgICAgICAgICAtLWlubGlu
ZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAg
ICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVp
Z2h0KCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgewotICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAgICAgICAgIGlmIChs
YXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW5saW5lLWJs
b2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZlIGJhc2VsaW5lcy4KLSAgICAgICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxl
YXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBsYXN0TGluZUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgp
LT5saW5lQm94ZXMubGFzdCgpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2Nr
QmFzZWxpbmUgPSBsYXN0TGluZUJveC5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgICAgICBh
dXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgYm94R2VvbWV0
cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKLQot
ICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGlubGluZUJs
b2NrQmFzZWxpbmUuYXNjZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0
RGVzY2VudElmR3JlYXRlcihpbmxpbmVCbG9ja0Jhc2VsaW5lLmRlc2NlbnQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXRCYXNlbGluZU9mZnNldElmR3JlYXRlcihiZWZvcmVI
ZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZU9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBOb24gaW5s
aW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUgKGluY2x1ZGluZyB0aGVpciBib3R0
b20gbWFyZ2luKS4KLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2VudElmR3Jl
YXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgbmVn
YXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50IGlzIGEgdGhpbmcpLgotICAgICAg
ICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5C
b3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PigwLCBtX2xpbmVCb3guYmFzZWxp
bmUoKS5kZXNjZW50KCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoK
LSAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVudCBuZXZlciBjaGFuZ2VzIHRoZSBi
YXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBvZiB0aGUgbGluZSBmdXJ0aGVyIGRv
d24uCi0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIo
bWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Ci0gICAgICAgICAgICAgICAgLy8gQm90dG9tIGFs
aWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMgdGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93biBmcm9t
IHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAgICAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0g
bV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpZiAobWFyZ2luQm94
SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9saW5lQm94LnNldEJhc2VsaW5lT2Zmc2V0SWZHcmVhdGVyKG1fbGluZUJv
eC5iYXNlbGluZU9mZnNldCgpICsgKG1hcmdpbkJveEhlaWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKLSAgICAgICAg
ICAgICAgICBtaWRkbGVWZXJ0aWNhbEFsaWduKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotSW5saW5lTGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6cnVuQ29udGVudEhlaWdo
dChjb25zdCBSdW4mIHJ1bikgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1faXNJbnRyaW5zaWNTaXpp
bmcpOwotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVuLnN0eWxlKCkuZm9udE1ldHJpY3MoKTsK
LSAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKQotICAgICAgICByZXR1
cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQo
KSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhl
aWdodCgpOwotCi0gICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlv
dXRCb3gpOwotICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpIHx8IGxheW91dEJveC5p
c0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkuY29udGVu
dEJveEhlaWdodCgpOwotCi0gICAgLy8gTm9uLXJlcGxhY2VkIGlubGluZSBib3ggKGUuZy4gaW5s
aW5lLWJsb2NrKS4gSXQgbG9va3MgYSBiaXQgbWlzbGVhZGluZyBidXQgdGhlaXIgbWFyZ2luIGJv
eCBpcyBjb25zaWRlcmVkIHRoZSBjb250ZW50IGhlaWdodCBoZXJlLgotICAgIHJldHVybiBib3hH
ZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLX0KLQogYm9vbCBMaW5lQnVpbGRlcjo6aXNWaXN1
YWxseU5vbkVtcHR5KGNvbnN0IFJ1biYgcnVuKSBjb25zdAogewogICAgIGlmIChydW4uaXNUZXh0
KCkpCkBAIC03NjAsMTEgKzc1NSw2IEBAIElubGluZUJveDo6QmFzZWxpbmUgTGluZUJ1aWxkZXI6
OmhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpCiAgICAgcmV0
dXJuIHsgYWRqdXN0ZWRBc2NlbnQsIGFkanVzdGVkRGVzY2VudCB9OwogfQogCi1MYXlvdXRTdGF0
ZSYgTGluZUJ1aWxkZXI6OmxheW91dFN0YXRlKCkgY29uc3QKLXsgCi0gICAgcmV0dXJuIGZvcm1h
dHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsKLX0KLQogY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmIExpbmVCdWlsZGVyOjpmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRl
eCA0OWZlYjkwZjZjYTlhOTM0ZjY2MzZjN2EzYjI0ODhkNDMyM2Y5N2EyLi5jNGIwOGI4Y2JmODdh
ZjMyYWY5Njg5Zjc2MzM0NTdmY2FlNGNlOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTM4
LDEwICszOCw5IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogc3RydWN0IEhhbmdpbmdDb250ZW50Owog
Y2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiBjbGFzcyBJbmxpbmVTb2Z0TGluZUJyZWFr
SXRlbTsKK2NsYXNzIExpbmVDb250ZW50QWxpZ25lcjsKIAogY2xhc3MgTGluZUJ1aWxkZXIgewot
ICAgIHN0cnVjdCBDb250aW51b3VzQ29udGVudDsKLQogcHVibGljOgogICAgIHN0cnVjdCBDb25z
dHJhaW50cyB7CiAgICAgICAgIElubGluZUxheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0OwpAQCAt
OTIsNiArOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJ1biYgb3BlcmF0b3I9KFJ1biYmIG90aGVy
KSA9IGRlZmF1bHQ7CiAKICAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgTGluZUNv
bnRlbnRBbGlnbmVyOwogICAgICAgICBmcmllbmQgY2xhc3MgTGluZUJ1aWxkZXI7CiAKICAgICAg
ICAgUnVuKGNvbnN0IElubGluZVRleHRJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBlbik7CkBAIC0x
NTEsMTggKzE1MSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIElubGluZUJveDo6QmFzZWxpbmUg
aGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiwgSW5saW5lTGF5b3V0VW5pdCBs
aW5lTG9naWNhbEhlaWdodCk7CiAKIHByaXZhdGU6Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxUb3AoKTsgfQotICAgIElu
bGluZUxheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5s
b2dpY2FsQm90dG9tKCk7IH0KLQotICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbExlZnQoKTsgfQotICAgIElubGluZUxheW91
dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxvZ2lj
YWxXaWR0aCgpOyB9Ci0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsTGVmdCgpICsgbG9naWNhbFdpZHRoKCk7IH0KICAg
ICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUxv
Z2ljYWxXaWR0aDsgfQotICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7IH0KIAogICAgIElubGluZUxheW91
dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dp
Y2FsV2lkdGgoKTsgfQogICAgIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxSaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsUmlnaHQoKTsgfQotICAgIElubGluZUxh
eW91dFVuaXQgYmFzZWxpbmVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3guYmFzZWxp
bmVPZmZzZXQoKTsgfQogCiAgICAgc3RydWN0IElubGluZVJ1bkRldGFpbHMgewogICAgICAgICBJ
bmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCB7IDAgfTsKQEAgLTE4MCwxNyArMTczLDkgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpOwogICAg
IHZvaWQgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKICAgICBIYW5n
aW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KTsKLSAgICB2b2lkIGFsaWduSG9yaXpvbnRhbGx5KGNvbnN0IEhhbmdpbmdDb250ZW50Jiwg
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICB2b2lkIGFsaWduQ29udGVudFZlcnRp
Y2FsbHkoKTsKLQotICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0gICAg
SW5saW5lTGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IFJ1biYpIGNvbnN0OwotCi0g
ICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKIAog
ICAgIGJvb2wgaXNWaXN1YWxseU5vbkVtcHR5KGNvbnN0IFJ1biYpIGNvbnN0OwogCi0gICAgTGF5
b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3Q7CiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3Q7CiAgICAgY29uc3QgQ29udGFpbmVy
Qm94JiByb290KCkgY29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405680</attachid>
            <date>2020-07-31 03:51:27 -0700</date>
            <delta_ts>2020-08-25 20:35:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214527-20200731035126.patch</filename>
            <type>text/plain</type>
            <size>37738</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg1Mzc4YjU5NmI3ODlh
NTFiYTMzZjgzMjU3YzI2NzRlNmM2ODUxYS4uM2VjMWRhYzZjNWUyZjNkN2VhMTM1ZGZhMDAyNmU1
Yjg0NmQ0Y2RjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIwLTA3LTMxICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBydW4gYWxpZ25tZW50IGxvZ2ljIHRvIGEgZGVkaWNhdGVkIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ1MjcKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY2MTE1Nzk2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9yIG1vdmluZyBsaW5lIGFs
aWdubWVudCBsb2dpYyB0byBMaW5lQm94IChMaW5lQnVpbGRlciB3aWxsIG5vdCBnb2luZyB0byBi
ZSByZXNwb25zaWJsZSBmb3IgYWxpZ25pbmcgcnVucyBvbiB0aGUgbGluZSkKKworICAgICAgICAq
IGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpsYXlvdXRTdGF0ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNv
bnRlbnRBbGlnbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGln
bmVyOjphbGlnbkhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVD
b250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpjb2xsZWN0SGFu
Z2luZ0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVu
dEFsaWduZXI6OnJ1bkNvbnRlbnRIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6fkxpbmVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
QnVpbGRlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YWxpZ25Db250
ZW50VmVydGljYWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpqdXN0aWZ5UnVucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCdWlsZGVyOjphbGlnbkhvcml6b250YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb2xsZWN0SGFuZ2luZ0NvbnRlbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YWRqdXN0QmFzZWxpbmVB
bmRMaW5lSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OnJ1bkNvbnRlbnRIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bGF5b3V0U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cm9vdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmF2YWlsYWJsZVdpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmNvbnRlbnRMb2dp
Y2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
bG9naWNhbFRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCdWlsZGVyOjpsb2dpY2FsQm90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxvZ2ljYWxMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxvZ2ljYWxSaWdodCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2Fs
V2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVp
bGRlcjo6bG9naWNhbEhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmVCdWlsZGVyOjpiYXNlbGluZSBjb25zdCk6IERlbGV0ZWQuCisKIDIwMjAtMDct
MjUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNd
IERvIG5vdCBtb3ZlIHRoZSBydW5zIG91dCBvZiB0aGUgTGluZUJ1aWxkZXIgd2hpbGUgY2xvc2lu
ZyB0aGUgbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdD
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaAppbmRl
eCA0ZjViYjI2YmFiNWFiM2QwZTc4ZjBlODlhOWZlYjJjZTdiNjUwNWUzLi43MGEzMTIwMTg0YjVk
NTk3MWMxOWE2OWFjNjdhOTI5MWM5NWViNzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9y
bWF0dGluZ0NvbnRleHQuaApAQCAtMTEwLDEwICsxMTAsMTAgQEAgcHVibGljOgogICAgIGNvbnN0
IERpc3BsYXk6OkJveCYgZ2VvbWV0cnlGb3JCb3goY29uc3QgQm94JiwgT3B0aW9uYWw8RXNjYXBl
UmVhc29uPiA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CiAgICAgY29uc3QgQ29udGFpbmVyQm94JiBy
b290KCkgY29uc3QgeyByZXR1cm4gKm1fcm9vdDsgfQogCisgICAgTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlKCkgY29uc3Q7CiBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgTGF5b3V0UXVldWUgPSBWZWN0
b3I8Y29uc3QgQm94Kj47CiAKLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsK
ICAgICBjb25zdCBGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9ybWF0dGluZ1N0YXRlOyB9CiAgICAgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5n
U3RhdGUoKSB7IHJldHVybiBtX2Zvcm1hdHRpbmdTdGF0ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaAppbmRleCA2Y2QyMDgxZGNjZDc3OGUzMTgyOTY1OTc2NmU0NGE1Yjk4YTcx
MjJhLi5kYjNiYTcxOGM0NjMzNTM4YjNhZTExYTNiODcxMTcwYWI2OTAyNTdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTkyLDggKzkyLDYgQEAgcHJpdmF0ZToKIAogICAg
IGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6
Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiAgICAgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0
aW5nU3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1h
dHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KLSAgICAvLyBGSVhNRTogQ29tZSB1
cCB3aXRoIGEgc3RydWN0dXJlIHRoYXQgcmVxdWlyZXMgbm8gZnJpZW5kaW5nLgotICAgIGZyaWVu
ZCBjbGFzcyBMaW5lQnVpbGRlcjsKIH07CiAKIGlubGluZSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6Okdlb21ldHJ5KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCA1MThmOTJm
NjNjMzljNmZmMTVkNDZjODM3ZmQ0OGIzYzQyYzkyNzhlLi4wM2IwOTk3MTA5ZDI0NmMwMzZiOWI3
MGM1ZmNmZTUyNTMxNmExNzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCkBAIC02NCw2OSAr
NjQsODYgQEAgdm9pZCBIYW5naW5nQ29udGVudDo6cmVzZXQoKQogICAgIG1fd2lkdGggPSAgMDsK
IH0KIAotTGluZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250
ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgT3B0aW9uYWw8VGV4dEFsaWduTW9kZT4gaG9y
aXpvbnRhbEFsaWdubWVudCwgSW50cmluc2ljU2l6aW5nIGludHJpbnNpY1NpemluZykKLSAgICA6
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAg
LCBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudChtX3J1bnMpCi0gICAgLCBtX2hvcml6b250YWxB
bGlnbm1lbnQoaG9yaXpvbnRhbEFsaWdubWVudCkKLSAgICAsIG1faXNJbnRyaW5zaWNTaXppbmco
aW50cmluc2ljU2l6aW5nID09IEludHJpbnNpY1NpemluZzo6WWVzKQotICAgICwgbV9zaG91bGRJ
Z25vcmVUcmFpbGluZ0xldHRlclNwYWNpbmcoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKQot
ewotfQorY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyIHsKK3B1YmxpYzoKKyAgICBMaW5lQ29udGVu
dEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBMaW5lQm94JiwgTGluZUJ1
aWxkZXI6OlJ1bkxpc3QmLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKIAotTGlu
ZUJ1aWxkZXI6On5MaW5lQnVpbGRlcigpCi17Ci19CisgICAgdm9pZCBhbGlnbkhvcml6b250YWxs
eShUZXh0QWxpZ25Nb2RlLCBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
KTsKKyAgICB2b2lkIGFsaWduVmVydGljYWxseSgpOworICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVB
bmRMaW5lSGVpZ2h0KCk7CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmluaXRpYWxpemUoY29uc3QgQ29u
c3RyYWludHMmIGNvbnN0cmFpbnRzKQotewotICAgIG1fbGluZUxvZ2ljYWxXaWR0aCA9IGNvbnN0
cmFpbnRzLmF2YWlsYWJsZUxvZ2ljYWxXaWR0aDsKLSAgICBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0g
Y29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0OwotICAgIGF1dG8gaW5pdGlhbExp
bmVIZWlnaHQgPSBjb25zdHJhaW50cy5saW5lSGVpZ2h0OwotICAgIGF1dG8gbGluZVJlY3QgPSBE
aXNwbGF5OjpJbmxpbmVSZWN0IHsgY29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIDBfbHUsIGlu
aXRpYWxMaW5lSGVpZ2h0IH07Ci0gICAgbV9saW5lQm94ID0gTGluZUJveCB7IGxpbmVSZWN0LCBM
aW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKHJvb3QoKS5zdHlsZSgpLmZvbnRNZXRyaWNz
KCksIGluaXRpYWxMaW5lSGVpZ2h0KSB9OwotICAgIGNsZWFyKCk7Ci0jaWYgQVNTRVJUX0VOQUJM
RUQKLSAgICBtX2lzQ2xvc2VkID0gZmFsc2U7Ci0jZW5kaWYKLX0KK3ByaXZhdGU6CisgICAgdm9p
ZCBqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKKyAgICBIYW5n
aW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoTGluZUJ1aWxkZXI6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCkgY29uc3Q7CisgICAgSW5saW5lTGF5b3V0VW5pdCBydW5Db250ZW50
SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mKSBjb25zdDsKIAotdm9pZCBMaW5lQnVpbGRl
cjo6Y2xlYXIoKQorICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5n
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAg
ICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29u
dGV4dCgpLmxheW91dFN0YXRlKCk7IH0KKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250
ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworICAgIExpbmVCb3gmIG1fbGluZUJveDsK
KyAgICBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOworICAgIElubGluZUxheW91dFVuaXQg
bV9hdmFpbGFibGVXaWR0aDsKK307CisKK0xpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRB
bGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElubGlu
ZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250
ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwgbV9saW5lQm94KGxpbmVCb3gpCisg
ICAgLCBtX3J1bnMocnVucykKKyAgICAsIG1fYXZhaWxhYmxlV2lkdGgoYXZhaWxhYmxlV2lkdGgp
CiB7Ci0gICAgbV9saW5lQm94LnNldExvZ2ljYWxXaWR0aCh7IH0pOwotICAgIG1fbGluZUJveC5z
ZXRJc0NvbnNpZGVyZWRFbXB0eSgpOwotICAgIG1fcnVucy5jbGVhcigpOwotICAgIG1fdHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50LnJlc2V0KCk7Ci0gICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVm
b3JlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50ID0geyB9OwogfQogCi12b2lkIExpbmVCdWlsZGVy
OjpjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KQordm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KFRleHRB
bGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQogewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9p
c0Nsb3NlZCA9IHRydWU7Ci0jZW5kaWYKLSAgICAvLyAxLiBSZW1vdmUgdHJpbW1hYmxlIHRyYWls
aW5nIGNvbnRlbnQuCi0gICAgLy8gMi4gQWxpZ24gbWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNhbGx5
IGFuZCBob3Jpem9udGFsbHkuCi0gICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7
Ci0gICAgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKLSAgICBpZiAo
bV9pc0ludHJpbnNpY1NpemluZykKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhh
bmdpbmdDb250ZW50KGlzTGFzdExpbmUpOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2F2
YWlsYWJsZVdpZHRoICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsKKyAgICBpZiAobV9ydW5zLmlz
RW1wdHkoKSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCk7Ci0gICAgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0gICAg
aWYgKGlzVmlzdWFsbHlFbXB0eSgpKSB7Ci0gICAgICAgIG1fbGluZUJveC5yZXNldEFsaWdubWVu
dEJhc2VsaW5lKCk7Ci0gICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHsgfSk7Cisg
ICAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewor
ICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7CisgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgYWxpZ25Db250ZW50VmVydGljYWxseSgpOwotICAgIGFsaWduSG9yaXpvbnRhbGx5
KGhhbmdpbmdDb250ZW50LCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOworCisgICAgYXV0
byBhZGp1c3RtZW50Rm9yQWxpZ25tZW50ID0gWyZdIChhdXRvIGF2YWlsYWJsZVdpZHRoKSAtPiBP
cHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7CisgICAgICAgIHN3aXRjaCAoaG9yaXpvbnRhbEFs
aWdubWVudCkgeworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpTdGFydDoKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Cisg
ICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoLCAwKTsKKyAgICAgICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0
Q2VudGVyOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2
YWlsYWJsZVdpZHRoIC8gMiwgMCk7CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlm
eToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfTsKKworICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGln
bm1lbnQoYXZhaWxhYmxlV2lkdGgpOworICAgIGlmICghYWRqdXN0bWVudCkKKyAgICAgICAgcmV0
dXJuOworICAgIC8vIEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9ubHkg
YWRqdXN0IHRoZSBydW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGxpbmUg
Ym94IGlzIGFsaWduZWQgYXMgd2VsbAorICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1hbGln
bjogY2VudGVyOyB3aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxpbmUg
Ym94IHdpbGwgYWxzbyBiZSBjZW50ZXJlZAorICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQgYXQg
MHB4IGFsbCB0aGUgd2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgorICAg
IG1fbGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKKyAgICBmb3IgKGF1dG8m
IHJ1biA6IG1fcnVucykKKyAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQp
OwogfQogCi12b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCkKK3ZvaWQg
TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnblZlcnRpY2FsbHkoKQogewotICAgIEFTU0VSVCghbV9p
c0ludHJpbnNpY1NpemluZyk7CiAgICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0ID0gbV9s
aW5lQm94LmxvZ2ljYWxSZWN0KCk7CiAgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAg
ICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsVG9wID0gMDsKKyAgICAgICAgYXV0byBsb2dp
Y2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9
IHJ1bi5sYXlvdXRCb3goKTsKICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduID0gbGF5b3V0Qm94
LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwogICAgICAgICBhdXRvIGFzY2VudCA9IGxheW91dEJv
eC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CkBAIC0xMzQsMTAgKzE1MSwxMCBAQCB2
b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCkKICAgICAgICAgc3dpdGNo
ICh2ZXJ0aWNhbEFsaWduKSB7CiAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6
CiAgICAgICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkgfHwgcnVuLmlzVGV4dCgpKQotICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZSgpIC0gYXNjZW50OworICAgICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIGFzY2Vu
dDsKICAgICAgICAgICAgIGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKICAgICAg
ICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0
cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxp
bmUoKSAtIGFzY2VudCAtIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpIC0gYm94R2VvbWV0cnkucGFk
ZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGlu
ZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50IC0gYm94R2VvbWV0cnkuYm9yZGVyVG9w
KCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAmJiBsYXlvdXRCb3guZXN0YWJs
aXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYg
Zm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRp
bmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOwogICAgICAgICAgICAg
ICAgIC8vIFNwZWMgbWFrZXMgdXMgZ2VuZXJhdGUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4gaWYg
aXQgaXMgZW1wdHkuCkBAIC0xNTYsMTcgKzE3MywxNyBAQCB2b2lkIExpbmVCdWlsZGVyOjphbGln
bkNvbnRlbnRWZXJ0aWNhbGx5KCkKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChs
YXlvdXRCb3gpOwogICAgICAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVGcm9tTWFyZ2luQm94ID0g
Ym94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJv
eEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgaW5saW5lQmxvY2tCYXNlbGluZTsK
LSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmUoKSAtIGJhc2VsaW5lRnJvbU1h
cmdpbkJveDsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVu
dEJhc2VsaW5lKCkgLSBiYXNlbGluZUZyb21NYXJnaW5Cb3g7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3Ag
PSBiYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hHZW9tZXRy
eS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVuLmxvZ2ljYWxSZWN0KCkuaGVp
Z2h0KCkgKyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpKTsKKyAgICAgICAgICAgICAgICBsb2dp
Y2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSAoYm94R2VvbWV0cnkudmVy
dGljYWxCb3JkZXIoKSArIGJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMF9s
dSkgKyBydW4ubG9naWNhbFJlY3QoKS5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVy
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6VG9wOgogICAgICAgICAgICAgbG9naWNhbFRvcCA9IDBfbHU7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAg
ICAgICBsb2dpY2FsVG9wID0gbG9naWNhbEJvdHRvbSgpIC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVp
Z2h0KCk7CisgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmxvZ2ljYWxCb3R0b20o
KSAtIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwpA
QCAtMTc2LDE4ICsxOTMsMTggQEAgdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGlj
YWxseSgpCiAgICAgICAgIC8vIEFkanVzdCBzY3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBydW4g
b3ZlcmZsb3dzIHRoZSBsaW5lLgogICAgICAgICBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LmV4cGFu
ZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuLmxvZ2ljYWxSZWN0KCkpOwogICAgICAgICAvLyBDb252
ZXJ0IHJ1bnMgZnJvbSByZWxhdGl2ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0
dGluZyByb290J3MgYm9yZGVyIGJveCB0b3AvbGVmdC4KLSAgICAgICAgcnVuLm1vdmVWZXJ0aWNh
bGx5KHRoaXMtPmxvZ2ljYWxUb3AoKSk7Ci0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KHRo
aXMtPmxvZ2ljYWxMZWZ0KCkpOworICAgICAgICBydW4ubW92ZVZlcnRpY2FsbHkobV9saW5lQm94
LmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KG1fbGluZUJveC5s
b2dpY2FsTGVmdCgpKTsKICAgICB9CiAgICAgbV9saW5lQm94LnNldFNjcm9sbGFibGVPdmVyZmxv
dyhzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0KTsKIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6anVzdGlm
eVJ1bnMoSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKK3ZvaWQgTGluZUNvbnRlbnRB
bGlnbmVyOjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQogewog
ICAgIEFTU0VSVChhdmFpbGFibGVXaWR0aCA+IDApOwogICAgIC8vIENvbGxlY3QgdGhlIGV4cGFu
c2lvbiBvcHBvcnR1bml0eSBudW1iZXJzIGFuZCBmaW5kIHRoZSBsYXN0IHJ1biB3aXRoIGNvbnRl
bnQuCiAgICAgYXV0byBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gMDsKLSAgICBSdW4qIGxh
c3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7CisgICAgTGluZUJ1aWxkZXI6OlJ1biogbGFzdFJ1
bldpdGhDb250ZW50ID0gbnVsbHB0cjsKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewog
ICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICs9IHJ1bi5leHBhbnNpb25PcHBvcnR1
bml0eUNvdW50KCk7CiAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzQm94KCkpCkBA
IC0yMTksMTQgKzIzNiwyMDIgQEAgdm9pZCBMaW5lQnVpbGRlcjo6anVzdGlmeVJ1bnMoSW5saW5l
TGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKICAgICB9CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6
OmFsaWduSG9yaXpvbnRhbGx5KGNvbnN0IEhhbmdpbmdDb250ZW50JiBoYW5naW5nQ29udGVudCwg
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmUpCit2b2lkIExpbmVDb250ZW50
QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKIHsKLSAgICBBU1NFUlQoIW1f
aXNJbnRyaW5zaWNTaXppbmcpOworICAgIHVuc2lnbmVkIGlubGluZUNvbnRhaW5lck5lc3RpbmdM
ZXZlbCA9IDA7CisgICAgYXV0byBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gZmFsc2U7
CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94
ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHls
ZSgpOwogCi0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IHRoaXMtPmF2YWlsYWJsZVdpZHRoKCkg
KyBoYW5naW5nQ29udGVudC53aWR0aCgpOwotICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8IGF2
YWlsYWJsZVdpZHRoIDw9IDApCisgICAgICAgIHJ1bi5zZXRMb2dpY2FsSGVpZ2h0KHJ1bkNvbnRl
bnRIZWlnaHQocnVuKSk7CisKKyAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5l
QnJlYWsoKSkgeworICAgICAgICAgICAgLy8gRm9yIHRleHQgY29udGVudCB3ZSBzZXQgdGhlIGJh
c2VsaW5lIGVpdGhlciB0aHJvdWdoIHRoZSBpbml0aWFsIHN0cnV0IChzZXQgYnkgdGhlIGZvcm1h
dHRpbmcgY29udGV4dCByb290KSBvcgorICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgaW5saW5l
IGNvbnRhaW5lciAoc3RhcnQpLiBOb3JtYWxseSB0aGUgdGV4dCBjb250ZW50IGl0c2VsZiBkb2Vz
IG5vdCBzdHJldGNoIHRoZSBsaW5lLgorICAgICAgICAgICAgaWYgKGlubGluZUNvbnRhaW5lck5l
c3RpbmdMZXZlbCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYWRqdXN0ZWQg
dGhlIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91Z2ggdGhlIHBhcmVudCBpbmxpbmUgY29udGFp
bmVyLiAKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrKSB7CisgICAgICAgICAgICAgICAg
Ly8gZS5nIGRpdj5maXJzdCB0ZXh0PC9kaXY+IG9yIDxkaXY+PHNwYW4+bmVzdGVkPHNwYW4+Zmly
c3QgZGlyZWN0IHRleHQ8L2Rpdj4uCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gdHJ1ZTsK
KyAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBxdWlya3MgbW9kZSB3aGVyZSB0aGUgZm9udC1tZXRy
aWNzIG1pZ2h0IGNoYW5nZSB0aGUgbGluZSBsaW5lIGhlaWdodC9iYXNlbGluZSBhbmQgdGhpcyBp
cyB0aGUgZmlyc3QgdGV4dCBjb250ZW50IG9uIHRoZSBsaW5lCisgICAgICAgICAgICAvLyBvdXRz
aWRlIG9mIGFuIGlubGluZSBjb250YWluZXIuCisgICAgICAgICAgICBhdXRvIGhhbGZMZWFkaW5n
ID0gTGluZUJ1aWxkZXI6OmhhbGZMZWFkaW5nTWV0cmljcyhzdHlsZS5mb250TWV0cmljcygpLCBz
dHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNj
ZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmFzY2VudCk7CisgICAgICAgICAgICBtX2xpbmVCb3gu
c2V0RGVzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5kZXNjZW50KTsKKyAgICAgICAgICAgIG1f
bGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmhlaWdodCgpKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ1bi5pc0Nv
bnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICsraW5saW5lQ29udGFpbmVyTmVzdGluZ0xl
dmVsOworICAgICAgICAgICAgLy8gSW5saW5lIGNvbnRhaW5lcnMgc3RyZXRjaCB0aGUgbGluZSBi
eSB0aGVpciBmb250IHNpemUuCisgICAgICAgICAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zLCBwYWRk
aW5ncyBhbmQgYm9yZGVycyBkb24ndCBjb250cmlidXRlIHRvIHRoZSBsaW5lIGhlaWdodC4KKyAg
ICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gc3R5bGUuZm9udE1ldHJpY3MoKTsKKyAgICAg
ICAgICAgIGlmIChzdHlsZS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxp
bmUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGhhbGZMZWFkaW5nID0gTGluZUJ1aWxkZXI6Omhh
bGZMZWFkaW5nTWV0cmljcyhmb250TWV0cmljcywgc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkp
OworICAgICAgICAgICAgICAgIC8vIEJvdGggaGFsZmxlYWRpbmcgYXNjZW50IGFuZCBkZXNjZW50
IGNvdWxkIGJlIG5lZ2F0aXZlICh0YWxsIGZvbnQgdnMuIHNtYWxsIGxpbmUtaGVpZ2h0IHZhbHVl
KQorICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5kZXNjZW50ID4gMCkKKyAgICAgICAg
ICAgICAgICAgICAgbV9saW5lQm94LnNldERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuZGVz
Y2VudCk7CisgICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmFzY2VudCA+IDApCisgICAg
ICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcu
YXNjZW50KTsKKyAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihtX2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmhlaWdodCgpKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVh
dGVyKGZvbnRNZXRyaWNzLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAv
LyBUaGUgbGluZSdzIGJhc2VsaW5lIGFuZCBoZWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRqdXN0
ZWQgYXQgQ29udGFpbmVyU3RhcnQuCisgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ29udGFpbmVy
TmVzdGluZ0xldmVsKTsKKyAgICAgICAgICAgIC0taW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVs
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVuLmlz
Qm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgYXV0byBtYXJnaW5C
b3hIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKKworICAgICAgICAgICAg
c3dpdGNoIChzdHlsZS52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGlj
YWxBbGlnbjo6QmFzZWxpbmU6IHsKKyAgICAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5s
aW5lQmxvY2tCb3goKSAmJiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElubGluZS1ibG9ja3Mgd2l0aCBpbmxp
bmUgY29udGVudCBhbHdheXMgaGF2ZSBiYXNlbGluZXMuCisgICAgICAgICAgICAgICAgICAgIGF1
dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3Jt
YXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlm
IGl0IGlzIGVtcHR5LgorICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZUJveCA9IGZv
cm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpOwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdp
bkJlZm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5n
VG9wKCkudmFsdWVPcigwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFsaWdu
bWVudEJhc2VsaW5lSWZHcmVhdGVyKGJlZm9yZUhlaWdodCArIGxhc3RMaW5lQm94LmJhc2VsaW5l
KCkpOworICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIE5vbiBpbmxpbmUtYmxvY2sgYm94ZXMgc2l0IG9uIHRoZSBiYXNlbGlu
ZSAoaW5jbHVkaW5nIHRoZWlyIGJvdHRvbSBtYXJnaW4pLgorICAgICAgICAgICAgICAgICAgICBt
X2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIElnbm9yZSBuZWdhdGl2ZSBkZXNjZW50ICh5ZXMsIG5lZ2F0aXZlIGRlc2Nl
bnQgaXMgYSB0aGluZykuCisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2Fs
SGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCArIHN0ZDo6bWF4PElubGluZUxheW91dFVu
aXQ+KDAsIG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAgICAgICAgICAgICAgIC8vIFRvcCBhbGln
biBjb250ZW50IG5ldmVyIGNoYW5nZXMgdGhlIGJhc2VsaW5lLCBpdCBvbmx5IHB1c2hlcyB0aGUg
Ym90dG9tIG9mIHRoZSBsaW5lIGZ1cnRoZXIgZG93bi4KKyAgICAgICAgICAgICAgICBtX2xpbmVC
b3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsK
KyAgICAgICAgICAgICAgICAvLyBCb3R0b20gYWxpZ25lZCwgdGFsbCBjb250ZW50IHB1c2hlcyB0
aGUgYmFzZWxpbmUgZnVydGhlciBkb3duIGZyb20gdGhlIGxpbmUgdG9wLgorICAgICAgICAgICAg
ICAgIGF1dG8gbGluZUxvZ2ljYWxIZWlnaHQgPSBtX2xpbmVCb3gubG9naWNhbEhlaWdodCgpOwor
ICAgICAgICAgICAgICAgIGlmIChtYXJnaW5Cb3hIZWlnaHQgPiBsaW5lTG9naWNhbEhlaWdodCkg
eworICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRl
cihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QWxp
Z25tZW50QmFzZWxpbmVJZkdyZWF0ZXIobV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgKyAo
bWFyZ2luQm94SGVpZ2h0IC0gbGluZUxvZ2ljYWxIZWlnaHQpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgIH0KK30KKworSGFuZ2luZ0NvbnRlbnQgTGluZUNvbnRlbnRBbGlnbmVy
Ojpjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgYXV0byBo
YW5naW5nQ29udGVudCA9IEhhbmdpbmdDb250ZW50IHsgfTsKKyAgICBpZiAoaXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50ID09IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQ6OlllcykKKyAgICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOworICAg
IGZvciAoYXV0byYgcnVuIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShtX3J1bnMpKSB7CisgICAg
ICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgewor
ICAgICAgICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0
ZXNwYWNlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2
ZSBhIHByZXNlcnZlZCBvciBodW5nIHdoaXRlc3BhY2UuCisgICAgICAgIGlmIChydW4uc3R5bGUo
KS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhh
bmdpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5k
KHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGhhbmdp
bmdDb250ZW50OworfQorCitJbmxpbmVMYXlvdXRVbml0IExpbmVDb250ZW50QWxpZ25lcjo6cnVu
Q29udGVudEhlaWdodChjb25zdCBMaW5lQnVpbGRlcjo6UnVuJiBydW4pIGNvbnN0Cit7CisgICAg
YXV0byYgZm9udE1ldHJpY3MgPSBydW4uc3R5bGUoKS5mb250TWV0cmljcygpOworICAgIGlmIChy
dW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpCisgICAgICAgIHJldHVybiBmb250TWV0
cmljcy5oZWlnaHQoKTsKKworICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5p
c0NvbnRhaW5lckVuZCgpKQorICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisK
KyAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgYXV0byYgYm94R2Vv
bWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Cisg
ICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQ
b3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0
KCk7CisKKyAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2sp
LiBJdCBsb29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNp
ZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUuCisgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1h
cmdpbkJveEhlaWdodCgpOworfQorCitMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBPcHRpb25hbDxU
ZXh0QWxpZ25Nb2RlPiBob3Jpem9udGFsQWxpZ25tZW50LCBJbnRyaW5zaWNTaXppbmcgaW50cmlu
c2ljU2l6aW5nKQorICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKKyAgICAsIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykKKyAg
ICAsIG1faG9yaXpvbnRhbEFsaWdubWVudChob3Jpem9udGFsQWxpZ25tZW50KQorICAgICwgbV9p
c0ludHJpbnNpY1NpemluZyhpbnRyaW5zaWNTaXppbmcgPT0gSW50cmluc2ljU2l6aW5nOjpZZXMp
CisgICAgLCBtX3Nob3VsZElnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyhSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdy
YXRpb25FbmFibGVkKCkpCit7Cit9CisKK0xpbmVCdWlsZGVyOjp+TGluZUJ1aWxkZXIoKQorewor
fQorCit2b2lkIExpbmVCdWlsZGVyOjppbml0aWFsaXplKGNvbnN0IENvbnN0cmFpbnRzJiBjb25z
dHJhaW50cykKK3sKKyAgICBtX2xpbmVMb2dpY2FsV2lkdGggPSBjb25zdHJhaW50cy5hdmFpbGFi
bGVMb2dpY2FsV2lkdGg7CisgICAgbV9oYXNJbnRydXNpdmVGbG9hdCA9IGNvbnN0cmFpbnRzLmxp
bmVJc0NvbnN0cmFpbmVkQnlGbG9hdDsKKyAgICBhdXRvIGluaXRpYWxMaW5lSGVpZ2h0ID0gY29u
c3RyYWludHMubGluZUhlaWdodDsKKyAgICBhdXRvIGxpbmVSZWN0ID0gRGlzcGxheTo6SW5saW5l
UmVjdCB7IGNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCAwX2x1LCBpbml0aWFsTGluZUhlaWdo
dCB9OworICAgIG1fbGluZUJveCA9IExpbmVCb3ggeyBsaW5lUmVjdCwgTGluZUJ1aWxkZXI6Omhh
bGZMZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCksIGluaXRpYWxMaW5lSGVpZ2h0KSB9OworICAgIGNsZWFyKCk7CisjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICBtX2lzQ2xvc2VkID0gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBMaW5l
QnVpbGRlcjo6Y2xlYXIoKQoreworICAgIG1fbGluZUJveC5zZXRMb2dpY2FsV2lkdGgoeyB9KTsK
KyAgICBtX2xpbmVCb3guc2V0SXNDb25zaWRlcmVkRW1wdHkoKTsKKyAgICBtX3J1bnMuY2xlYXIo
KTsKKyAgICBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5yZXNldCgpOworICAgIG1fbGluZUlz
VmlzdWFsbHlFbXB0eUJlZm9yZVRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCA9IHsgfTsKK30KKwor
dm9pZCBMaW5lQnVpbGRlcjo6Y2xvc2UoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFz
dExpbmUpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKKyNl
bmRpZgorICAgIC8vIDEuIFJlbW92ZSB0cmltbWFibGUgdHJhaWxpbmcgY29udGVudC4KKyAgICAv
LyAyLiBBbGlnbiBtZXJnZWQgcnVucyBib3RoIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS4K
KyAgICByZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKTsKKyAgICB2aXN1YWxseUNvbGxh
cHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpOworICAgIGlmIChtX2lzSW50cmluc2ljU2l6aW5n
KQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIGNvbnRlbnRBbGlnbmVyID0gTGluZUNvbnRl
bnRBbGlnbmVyIHsgZm9ybWF0dGluZ0NvbnRleHQoKSwgbV9saW5lQm94LCBtX3J1bnMsIGF2YWls
YWJsZVdpZHRoKCkgfTsKKyAgICBjb250ZW50QWxpZ25lci5hZGp1c3RCYXNlbGluZUFuZExpbmVI
ZWlnaHQoKTsKKyAgICBpZiAoaXNWaXN1YWxseUVtcHR5KCkpIHsKKyAgICAgICAgbV9saW5lQm94
LnJlc2V0QWxpZ25tZW50QmFzZWxpbmUoKTsKKyAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQoeyB9KTsKKyAgICB9CisgICAgY29udGVudEFsaWduZXIuYWxpZ25WZXJ0aWNhbGx5KCk7
CisKICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCA9IFsmXSB7CiAgICAgICAg
IEFTU0VSVChtX2hvcml6b250YWxBbGlnbm1lbnQpOwogICAgICAgICBpZiAobV9ob3Jpem9udGFs
QWxpZ25tZW50ICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCkBAIC0yMzQsNDcgKzQzOSwxMSBA
QCB2b2lkIExpbmVCdWlsZGVyOjphbGlnbkhvcml6b250YWxseShjb25zdCBIYW5naW5nQ29udGVu
dCYgaGFuZ2luZ0NvbnRlbnQsIElzTGFzdAogICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBh
Y2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9w
ZXJ0eSwKICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4g
VW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAogICAgICAgICAv
LyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBi
bG9jayBpcyBzdGFydC1hbGlnbmVkLgotICAgICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xpbmVC
cmVhaygpIHx8IGlzTGFzdExpbmUgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMp
CisgICAgICAgIGlmIChtX3J1bnMubGFzdCgpLmlzTGluZUJyZWFrKCkgfHwgaXNMYXN0TGluZSA9
PSBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCiAgICAgICAg
ICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7CiAgICAgICAgIHJldHVybiBUZXh0QWxp
Z25Nb2RlOjpKdXN0aWZ5OwotICAgIH0oKTsKLQotICAgIGlmIChjb21wdXRlZEhvcml6b250YWxB
bGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVu
cyhhdmFpbGFibGVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGFk
anVzdG1lbnRGb3JBbGlnbm1lbnQgPSBbXSAoYXV0byBob3Jpem9udGFsQWxpZ25tZW50LCBhdXRv
IGF2YWlsYWJsZVdpZHRoKSAtPiBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7Ci0gICAgICAg
IHN3aXRjaCAoaG9yaXpvbnRhbEFsaWdubWVudCkgewotICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OkxlZnQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKLSAgICAg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRo
LCAwKTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4
PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoIC8gMiwgMCk7Ci0gICAgICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKLQotICAgIGF1dG8gYWRqdXN0bWVu
dCA9IGFkanVzdG1lbnRGb3JBbGlnbm1lbnQoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50LCBh
dmFpbGFibGVXaWR0aCk7Ci0gICAgaWYgKCFhZGp1c3RtZW50KQotICAgICAgICByZXR1cm47Ci0g
ICAgLy8gSG9yaXpvbnRhbCBhbGlnbm1lbnQgbWVhbnMgdGhhdCB3ZSBub3Qgb25seSBhZGp1c3Qg
dGhlIHJ1bnMgYnV0IGFsc28gbWFrZSBzdXJlCi0gICAgLy8gdGhhdCB0aGUgbGluZSBib3ggaXMg
YWxpZ25lZCBhcyB3ZWxsCi0gICAgLy8gZS5nLiA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50
ZXI7IHdpZHRoOiAxMDBweDsiPmNlbnRlcmVkIHRleHQ8L2Rpdj4gOiB0aGUgbGluZSBib3ggd2ls
bCBhbHNvIGJlIGNlbnRlcmVkCi0gICAgLy8gYXMgb3Bwb3NlZCB0byBzdGFydCBhdCAwcHggYWxs
IHRoZSB3YXkgdG8gW2NlbnRlcmVkIHRleHRdIHJ1bidzIHJpZ2h0IGVkZ2UuCi0gICAgbV9saW5l
Qm94Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOwotICAgIGZvciAoYXV0byYgcnVuIDog
bV9ydW5zKQotICAgICAgICBydW4ubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CisgICAg
Y29udGVudEFsaWduZXIuYWxpZ25Ib3Jpem9udGFsbHkoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25t
ZW50KCksIGlzTGFzdExpbmUpOwogfQogCiB2b2lkIExpbmVCdWlsZGVyOjpyZW1vdmVUcmFpbGlu
Z1RyaW1tYWJsZUNvbnRlbnQoKQpAQCAtMzU1LDMxICs1MjQsNiBAQCB2b2lkIExpbmVCdWlsZGVy
Ojp2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpCiAgICAgbV9saW5lQm94
LnNocmlua0hvcml6b250YWxseSh0cmltbWVkQ29udGVudFdpZHRoKTsKIH0KIAotSGFuZ2luZ0Nv
bnRlbnQgTGluZUJ1aWxkZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotewotICAgIGF1dG8gaGFu
Z2luZ0NvbnRlbnQgPSBIYW5naW5nQ29udGVudCB7IH07Ci0gICAgLy8gQ2FuJ3Qgc2V0dXAgaGFu
Z2luZyBjb250ZW50IHdpdGggcmVtb3ZhYmxlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgQVNT
RVJUKG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmlzRW1wdHkoKSk7Ci0gICAgaWYgKGlzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCA9PSBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Olll
cykKLSAgICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgIGZvciAo
YXV0byYgcnVuIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShtX3J1bnMpKSB7Ci0gICAgICAgIGlm
IChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAg
ICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0ZXNwYWNl
KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHBy
ZXNlcnZlZCBvciBodW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGlmIChydW4uc3R5bGUoKS53aGl0
ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhhbmdpbmcg
dHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50
cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhbmdpbmdDb250
ZW50OwotfQotCiB2b2lkIExpbmVCdWlsZGVyOjptb3ZlTG9naWNhbExlZnQoSW5saW5lTGF5b3V0
VW5pdCBkZWx0YSkKIHsKICAgICBpZiAoIWRlbHRhKQpAQCAtNTM4LDEyNSArNjgyLDYgQEAgdm9p
ZCBMaW5lQnVpbGRlcjo6YXBwZW5kTGluZUJyZWFrKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0
ZW0pCiAgICAgbV9ydW5zLmFwcGVuZCh7IGRvd25jYXN0PElubGluZVNvZnRMaW5lQnJlYWtJdGVt
PihpbmxpbmVJdGVtKSwgY29udGVudExvZ2ljYWxXaWR0aCgpIH0pOwogfQogCi12b2lkIExpbmVC
dWlsZGVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQotewotICAgIHVuc2lnbmVkIGlu
bGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgYXV0byBoYXNTZWVuRGlyZWN0VGV4
dE9yTGluZUJyZWFrID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAg
ICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotCi0gICAgICAgIHJ1bi5zZXRMb2dpY2FsSGVpZ2h0
KHJ1bkNvbnRlbnRIZWlnaHQocnVuKSk7Ci0KLSAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBy
dW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gRm9yIHRleHQgY29udGVudCB3ZSBz
ZXQgdGhlIGJhc2VsaW5lIGVpdGhlciB0aHJvdWdoIHRoZSBpbml0aWFsIHN0cnV0IChzZXQgYnkg
dGhlIGZvcm1hdHRpbmcgY29udGV4dCByb290KSBvcgotICAgICAgICAgICAgLy8gdGhyb3VnaCB0
aGUgaW5saW5lIGNvbnRhaW5lciAoc3RhcnQpLiBOb3JtYWxseSB0aGUgdGV4dCBjb250ZW50IGl0
c2VsZiBkb2VzIG5vdCBzdHJldGNoIHRoZSBsaW5lLgotICAgICAgICAgICAgaWYgKGlubGluZUNv
bnRhaW5lck5lc3RpbmdMZXZlbCkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
YWRqdXN0ZWQgdGhlIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91Z2ggdGhlIHBhcmVudCBpbmxp
bmUgY29udGFpbmVyLiAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gZS5nIGRpdj5maXJzdCB0ZXh0PC9kaXY+IG9yIDxkaXY+PHNwYW4+bmVzdGVk
PHNwYW4+Zmlyc3QgZGlyZWN0IHRleHQ8L2Rpdj4uCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFr
ID0gdHJ1ZTsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBxdWlya3MgbW9kZSB3aGVyZSB0aGUg
Zm9udC1tZXRyaWNzIG1pZ2h0IGNoYW5nZSB0aGUgbGluZSBsaW5lIGhlaWdodC9iYXNlbGluZSBh
bmQgdGhpcyBpcyB0aGUgZmlyc3QgdGV4dCBjb250ZW50IG9uIHRoZSBsaW5lCi0gICAgICAgICAg
ICAvLyBvdXRzaWRlIG9mIGFuIGlubGluZSBjb250YWluZXIuCi0gICAgICAgICAgICBhdXRvIGhh
bGZMZWFkaW5nID0gaGFsZkxlYWRpbmdNZXRyaWNzKHN0eWxlLmZvbnRNZXRyaWNzKCksIHN0eWxl
LmNvbXB1dGVkTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJ
ZkdyZWF0ZXIoaGFsZkxlYWRpbmcuYXNjZW50KTsKLSAgICAgICAgICAgIG1fbGluZUJveC5zZXRE
ZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRlc2NlbnQpOwotICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuaGVpZ2h0KCkpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQ29udGFp
bmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7
Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBsaW5lIGJ5IHRo
ZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMsIHBhZGRpbmdz
IGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0LgotICAgICAg
ICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOwotICAgICAgICAg
ICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSkg
ewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBoYWxmTGVhZGluZ01ldHJpY3Mo
Zm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgICAg
ICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2VudCBjb3VsZCBiZSBuZWdhdGl2
ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1ZSkKLSAgICAgICAgICAgICAg
ICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCi0gICAgICAgICAgICAgICAgICAgIG1fbGlu
ZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRlc2NlbnQpOwotICAgICAgICAg
ICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQgPiAwKQotICAgICAgICAgICAgICAgICAgICBt
X2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmFzY2VudCk7Ci0gICAgICAg
ICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobV9saW5lQm94LmFz
Y2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihmb250TWV0cmljcy5o
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChydW4uaXNDb250YWluZXJFbmQoKSkgewotICAgICAgICAgICAgLy8gVGhlIGxpbmUncyBiYXNl
bGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVzdGVkIGF0IENvbnRhaW5lclN0
YXJ0LgotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCk7Ci0g
ICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7Ci0gICAgICAg
ICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gYm94R2Vv
bWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUudmVy
dGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5l
OiB7Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYg
bGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5saW5lIGNvbnRlbnQgYWx3YXlz
IGhhdmUgYmFzZWxpbmVzLgotICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3Rh
dGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25j
YXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRo
ZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KLSAg
ICAgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlz
cGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBiZWZvcmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdl
b21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGluZUlmR3Jl
YXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVp
Z2h0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBO
b24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUgKGluY2x1ZGluZyB0aGVp
ciBib3R0b20gbWFyZ2luKS4KLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2Vu
dElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAvLyBJZ25v
cmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50IGlzIGEgdGhpbmcpLgot
ICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlciht
YXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PigwLCBtX2xpbmVCb3gu
YXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2Fs
QWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVudCBuZXZlciBj
aGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBvZiB0aGUgbGlu
ZSBmdXJ0aGVyIGRvd24uCi0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWln
aHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Ci0gICAgICAgICAgICAgICAg
Ly8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMgdGhlIGJhc2VsaW5lIGZ1cnRo
ZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAgICAgICBhdXRvIGxpbmVMb2dp
Y2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBp
ZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFsaWdubWVudEJhc2VsaW5lSWZH
cmVhdGVyKG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpICsgKG1hcmdpbkJveEhlaWdodCAt
IGxpbmVMb2dpY2FsSGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLUlubGluZUxheW91dFVuaXQgTGluZUJ1aWxkZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29u
c3QgUnVuJiBydW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzSW50cmluc2ljU2l6aW5nKTsK
LSAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAg
aWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0dXJuIGZv
bnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwg
cnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQo
KTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94
KTsKLSAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9h
dGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hI
ZWlnaHQoKTsKLQotICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1i
bG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdpbiBib3ggaXMg
Y29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KLSAgICByZXR1cm4gYm94R2VvbWV0
cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci19Ci0KIGJvb2wgTGluZUJ1aWxkZXI6OmlzVmlzdWFsbHlO
b25FbXB0eShjb25zdCBSdW4mIHJ1bikgY29uc3QKIHsKICAgICBpZiAocnVuLmlzVGV4dCgpKQpA
QCAtNzAzLDIxICs3MjgsMTEgQEAgQXNjZW50QW5kRGVzY2VudCBMaW5lQnVpbGRlcjo6aGFsZkxl
YWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcywKICAgICByZXR1cm4g
eyBhZGp1c3RlZEFzY2VudCwgYWRqdXN0ZWREZXNjZW50IH07CiB9CiAKLUxheW91dFN0YXRlJiBM
aW5lQnVpbGRlcjo6bGF5b3V0U3RhdGUoKSBjb25zdAoteyAKLSAgICByZXR1cm4gZm9ybWF0dGlu
Z0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOwotfQotCiBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYgTGluZUJ1aWxkZXI6OmZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIH0KIAotY29uc3QgQ29udGFpbmVyQm94JiBM
aW5lQnVpbGRlcjo6cm9vdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkucm9vdCgpOwotfQotCiBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OjpU
cmltbWFibGVUcmFpbGluZ0NvbnRlbnQoUnVuTGlzdCYgcnVucykKICAgICA6IG1fcnVucyhydW5z
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKaW5kZXggOWI2OGE4NjVkZGNhMTIyOGI3MzE4ZTM1MjY5
NzcxYWE0ZjhiZjA1ZC4uNGI2Y2ViZjIxMjc1OGQxOWU3ZDQ2N2U2MjczMmZhNjliMTIxOWIwNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnVpbGRlci5oCkBAIC0zNSwxMyArMzUsMTEgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1zdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQ7CiBjbGFz
cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIGNsYXNzIElubGluZVNvZnRMaW5lQnJlYWtJdGVt
OworY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyOwogCiBjbGFzcyBMaW5lQnVpbGRlciB7Ci0gICAg
c3RydWN0IENvbnRpbnVvdXNDb250ZW50OwotCiBwdWJsaWM6CiAgICAgc3RydWN0IENvbnN0cmFp
bnRzIHsKICAgICAgICAgSW5saW5lTGF5b3V0UG9pbnQgbG9naWNhbFRvcExlZnQ7CkBAIC02NCw3
ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgYm9vbCBpc1Zpc3VhbGx5
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3guaXNDb25zaWRlcmVkRW1wdHkoKTsgfQog
ICAgIGJvb2wgaGFzSW50cnVzaXZlRmxvYXQoKSBjb25zdCB7IHJldHVybiBtX2hhc0ludHJ1c2l2
ZUZsb2F0OyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9CisgICAgSW5s
aW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUxvZ2lj
YWxXaWR0aCAtIGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsgfQogCiAgICAgSW5saW5lTGF5b3V0VW5p
dCB0cmltbWFibGVUcmFpbGluZ1dpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90cmltbWFibGVUcmFp
bGluZ0NvbnRlbnQud2lkdGgoKTsgfQogICAgIGJvb2wgaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1h
YmxlKCkgY29uc3QgeyByZXR1cm4gbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQuaXNUcmFpbGlu
Z1J1bkZ1bGx5VHJpbW1hYmxlKCk7IH0KQEAgLTkyLDYgKzkwLDcgQEAgcHVibGljOgogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVCdWlsZGVyOworICAgICAgICBmcmll
bmQgY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyOwogCiAgICAgICAgIFJ1bihjb25zdCBJbmxpbmVU
ZXh0SXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQg
bG9naWNhbFdpZHRoLCBib29sIG5lZWRzSHlwZW4pOwogICAgICAgICBSdW4oY29uc3QgSW5saW5l
U29mdExpbmVCcmVha0l0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KTsKQEAgLTE0
OSwxOCArMTQ4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBBc2NlbnRBbmREZXNjZW50IGhhbGZM
ZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmljcyYsIElubGluZUxheW91dFVuaXQgbGluZUxv
Z2ljYWxIZWlnaHQpOwogCiBwcml2YXRlOgotICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsVG9wKCk7IH0KLSAgICBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNh
bEJvdHRvbSgpOyB9Ci0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxMZWZ0KCk7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0KCkgKyBsb2dpY2FsV2lk
dGgoKTsgfQotCi0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVMb2dpY2FsV2lkdGg7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbEhlaWdodCgpOyB9Ci0KICAg
ICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X2xpbmVCb3gubG9naWNhbFdpZHRoKCk7IH0KICAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbFJpZ2h0KCk7IH0K
LSAgICBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94
LmFsaWdubWVudEJhc2VsaW5lKCk7IH0KIAogICAgIHN0cnVjdCBJbmxpbmVSdW5EZXRhaWxzIHsK
ICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggeyAwIH07CkBAIC0xNzcsMjAg
KzE2NiwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNv
bnRlbnQoKTsKICAgICB2b2lkIHZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50
KCk7Ci0gICAgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCk7Ci0gICAgdm9pZCBhbGlnbkhvcml6b250YWxseShjb25zdCBIYW5n
aW5nQ29udGVudCYsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0gICAgdm9pZCBhbGln
bkNvbnRlbnRWZXJ0aWNhbGx5KCk7Ci0KLSAgICB2b2lkIGFkanVzdEJhc2VsaW5lQW5kTGluZUhl
aWdodCgpOwotICAgIElubGluZUxheW91dFVuaXQgcnVuQ29udGVudEhlaWdodChjb25zdCBSdW4m
KSBjb25zdDsKLQotICAgIHZvaWQganVzdGlmeVJ1bnMoSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFi
bGVXaWR0aCk7CiAKICAgICBib29sIGlzVmlzdWFsbHlOb25FbXB0eShjb25zdCBSdW4mKSBjb25z
dDsKIAotICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0OwogICAgIGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0OwotICAgIGNv
bnN0IENvbnRhaW5lckJveCYgcm9vdCgpIGNvbnN0OwogCiAgICAgc3RydWN0IFRyaW1tYWJsZVRy
YWlsaW5nQ29udGVudCB7CiAgICAgICAgIFRyaW1tYWJsZVRyYWlsaW5nQ29udGVudChSdW5MaXN0
Jik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407269</attachid>
            <date>2020-08-25 20:35:04 -0700</date>
            <delta_ts>2020-08-26 06:25:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214527-20200825203504.patch</filename>
            <type>text/plain</type>
            <size>38099</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWU0MzQ2NjM4YjY3OTY1
MTdlMDcxYzIxNjc3MThiZWQ5NWEzYjU2YS4uY2EwZDJmMmM2NGY2OWViOTlhNWFhOTBhNWIwM2E1
ZGM1NjdkMzZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIwLTA4LTI1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBydW4gYWxpZ25tZW50IGxvZ2ljIHRvIGEgZGVkaWNhdGVkIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ1MjcKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY2MTE1Nzk2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9yIG1vdmluZyBsaW5lIGFs
aWdubWVudCBsb2dpYyB0byBMaW5lQm94IChMaW5lQnVpbGRlciB3aWxsIG5vdCBnb2luZyB0byBi
ZSByZXNwb25zaWJsZSBmb3IgYWxpZ25pbmcgcnVucyBvbiB0aGUgbGluZSkuCisKKyAgICAgICAg
KiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6bGF5b3V0U3RhdGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OkxpbmVD
b250ZW50QWxpZ25lcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxp
Z25lcjo6YWxpZ25Ib3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Q29udGVudEFsaWduZXI6OmFsaWduVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6anVzdGlmeVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhh
bmdpbmdDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRl
bnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6On5MaW5lQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCdWlsZGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFsaWduQ29u
dGVudFZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
QnVpbGRlcjo6anVzdGlmeVJ1bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFkanVzdEJhc2VsaW5l
QW5kTGluZUhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpydW5Db250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxheW91dFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJvb3QgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphdmFpbGFibGVXaWR0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb250ZW50TG9n
aWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OmxvZ2ljYWxUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6bG9naWNhbEJvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsTGVmdCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsUmlnaHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bG9naWNh
bFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6YmFzZWxpbmUgY29uc3QpOiBEZWxldGVkLgorCiAyMDIwLTA4
LTI1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZD
XSBEbyBub3QgbW92ZSB0aGUgcnVucyBvdXQgb2YgdGhlIExpbmVCdWlsZGVyIHdoaWxlIGNsb3Np
bmcgdGhlIGxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5n
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5k
ZXggZTk0ZDZmNGZhNDE3NjNlZmI3NzM4MmQ4Y2VhZWEzZGQ4ZjhlMmRiYS4uMDVhM2IzNjg2NTYz
Nzg3NGY4MzllZmNjZTI2ZDMxMjUzNWVmYWJkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zv
cm1hdHRpbmdDb250ZXh0LmgKQEAgLTEwOSwxMCArMTA5LDEwIEBAIHB1YmxpYzoKICAgICBjb25z
dCBEaXNwbGF5OjpCb3gmIGdlb21ldHJ5Rm9yQm94KGNvbnN0IEJveCYsIE9wdGlvbmFsPEVzY2Fw
ZVJlYXNvbj4gPSBXVEY6Om51bGxvcHQpIGNvbnN0OwogICAgIGNvbnN0IENvbnRhaW5lckJveCYg
cm9vdCgpIGNvbnN0IHsgcmV0dXJuICptX3Jvb3Q7IH0KIAorICAgIExheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSgpIGNvbnN0OwogcHJvdGVjdGVkOgogICAgIHVzaW5nIExheW91dFF1ZXVlID0gVmVj
dG9yPGNvbnN0IEJveCo+OwogCi0gICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3Q7
CiAgICAgY29uc3QgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1hdHRpbmdTdGF0ZTsgfQogICAgIEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGlu
Z1N0YXRlKCkgeyByZXR1cm4gbV9mb3JtYXR0aW5nU3RhdGU7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxk
ZXIuY3BwCmluZGV4IDk0NTRiOTNhZTg2Yzg0NTIyYWM3Mjk1ZWRmZDY2MzdmMDM1YzMwMDkuLjRl
Y2MzZjViN2VjMDQ2NmViMmEzOTZhNTljYzEzOGY5NWNiY2QyMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVp
bGRlci5jcHAKQEAgLTY0LDc5ICs2NCw4NiBAQCB2b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgp
CiAgICAgbV93aWR0aCA9ICAwOwogfQogCi1MaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBPcHRpb25h
bDxUZXh0QWxpZ25Nb2RlPiBob3Jpem9udGFsQWxpZ25tZW50LCBJbnRyaW5zaWNTaXppbmcgaW50
cmluc2ljU2l6aW5nKQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCkKLSAgICAsIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykK
LSAgICAsIG1faG9yaXpvbnRhbEFsaWdubWVudChob3Jpem9udGFsQWxpZ25tZW50KQotICAgICwg
bV9pc0ludHJpbnNpY1NpemluZyhpbnRyaW5zaWNTaXppbmcgPT0gSW50cmluc2ljU2l6aW5nOjpZ
ZXMpCi0gICAgLCBtX3Nob3VsZElnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyhSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50
ZWdyYXRpb25FbmFibGVkKCkpCi17Ci19CitjbGFzcyBMaW5lQ29udGVudEFsaWduZXIgeworcHVi
bGljOgorICAgIExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYsIExpbmVCb3gmLCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGgpOwogCi1MaW5lQnVpbGRlcjo6fkxpbmVCdWlsZGVyKCkKLXsKLX0KKyAgICB2
b2lkIGFsaWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUsIExpbmVCdWlsZGVyOjpJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpOworICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7CisgICAg
dm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKIAotdm9pZCBMaW5lQnVpbGRlcjo6
aW5pdGlhbGl6ZShjb25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludHMpCi17Ci0gICAgbV9saW5l
TG9naWNhbFdpZHRoID0gY29uc3RyYWludHMuYXZhaWxhYmxlTG9naWNhbFdpZHRoOwotICAgIG1f
aGFzSW50cnVzaXZlRmxvYXQgPSBjb25zdHJhaW50cy5saW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQ7
Ci0gICAgYXV0byBpbml0aWFsTGluZUhlaWdodCA9IGNvbnN0cmFpbnRzLmxpbmVIZWlnaHQ7Ci0g
ICAgYXV0byBsaW5lUmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyBjb25zdHJhaW50cy5sb2dp
Y2FsVG9wTGVmdCwgMF9sdSwgaW5pdGlhbExpbmVIZWlnaHQgfTsKLSAgICBhdXRvIGFzY2VudEFu
ZERlc2NlbnQgPSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKHJvb3QoKS5zdHlsZSgp
LmZvbnRNZXRyaWNzKCksIGluaXRpYWxMaW5lSGVpZ2h0KTsKLSAgICBtX2xpbmVCb3ggPSBMaW5l
Qm94IHsgbGluZVJlY3QsIGFzY2VudEFuZERlc2NlbnQgfTsKLSAgICBpZiAoIWxheW91dFN0YXRl
KCkuaW5Ob1F1aXJrc01vZGUoKSkKLSAgICAgICAgbV9pbml0aWFsU3RydXQgPSBBc2NlbnRBbmRE
ZXNjZW50IHsgYXNjZW50QW5kRGVzY2VudC5hc2NlbnQsIGluaXRpYWxMaW5lSGVpZ2h0IC0gYXNj
ZW50QW5kRGVzY2VudC5hc2NlbnQgfTsKLSAgICBlbHNlCi0gICAgICAgIG1faW5pdGlhbFN0cnV0
ID0geyB9OwotICAgIGNsZWFyKCk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lzQ2xvc2Vk
ID0gZmFsc2U7Ci0jZW5kaWYKLX0KK3ByaXZhdGU6CisgICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxp
bmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKKyAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0
SGFuZ2luZ0NvbnRlbnQoTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkg
Y29uc3Q7CisgICAgSW5saW5lTGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVC
dWlsZGVyOjpSdW4mKSBjb25zdDsKIAotdm9pZCBMaW5lQnVpbGRlcjo6Y2xlYXIoKQorICAgIGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAgICBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRl
KCk7IH0KKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1h
dHRpbmdDb250ZXh0OworICAgIExpbmVCb3gmIG1fbGluZUJveDsKKyAgICBMaW5lQnVpbGRlcjo6
UnVuTGlzdCYgbV9ydW5zOworICAgIElubGluZUxheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsK
K307CisKK0xpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKGNvbnN0IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgTGluZUJveCYgbGlu
ZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQorICAgICwgbV9saW5lQm94KGxpbmVCb3gpCisgICAgLCBtX3J1bnMocnVucykK
KyAgICAsIG1fYXZhaWxhYmxlV2lkdGgoYXZhaWxhYmxlV2lkdGgpCiB7Ci0gICAgbV9saW5lQm94
LnNldExvZ2ljYWxXaWR0aCh7IH0pOwotICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWRFbXB0
eSgpOwotICAgIG1fcnVucy5jbGVhcigpOwotICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50
LnJlc2V0KCk7Ci0gICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50ID0geyB9OwogfQogCi12b2lkIExpbmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQordm9pZCBMaW5l
Q29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRh
bEFsaWdubWVudCwgTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lKQogewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc0Nsb3NlZCA9IHRydWU7Ci0j
ZW5kaWYKLSAgICAvLyAxLiBSZW1vdmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQuCi0gICAg
Ly8gMi4gQWxpZ24gbWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHku
Ci0gICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7Ci0gICAgdmlzdWFsbHlDb2xs
YXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKLSAgICBpZiAobV9pc0ludHJpbnNpY1Npemlu
ZykKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFz
dExpbmUpOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2F2YWlsYWJsZVdpZHRoICsgaGFu
Z2luZ0NvbnRlbnQud2lkdGgoKTsKKyAgICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8fCBhdmFpbGFi
bGVXaWR0aCA8PSAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50
ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0g
ICAgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0gICAgaWYgKGlzVmlzdWFsbHlFbXB0
eSgpKSB7Ci0gICAgICAgIG1fbGluZUJveC5yZXNldEFsaWdubWVudEJhc2VsaW5lKCk7Ci0gICAg
ICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHsgfSk7Ci0gICAgfQotICAgIC8vIFJlbW92
ZSBkZXNjZW50IHdoZW4gYWxsIGNvbnRlbnQgaXMgYmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBv
ZiB0aGVtIGhhdmUgZGVzY2VudC4KLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3Mo
KS5saW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhtX3J1bnMpKSB7Ci0gICAgICAgIG1fbGluZUJv
eC5zaHJpbmtWZXJ0aWNhbGx5KG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCk7
Ci0gICAgICAgIG1fbGluZUJveC5yZXNldERlc2NlbnQoKTsKKyAgICBpZiAoaG9yaXpvbnRhbEFs
aWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7CisgICAgICAgIGp1c3RpZnlSdW5z
KGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBhbGlnbkNvbnRl
bnRWZXJ0aWNhbGx5KCk7Ci0gICAgYWxpZ25Ib3Jpem9udGFsbHkoaGFuZ2luZ0NvbnRlbnQsIGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisKKyAgICBhdXRvIGFkanVzdG1lbnRGb3JBbGln
bm1lbnQgPSBbJl0gKGF1dG8gYXZhaWxhYmxlV2lkdGgpIC0+IE9wdGlvbmFsPElubGluZUxheW91
dFVuaXQ+IHsKKyAgICAgICAgc3dpdGNoIChob3Jpem9udGFsQWxpZ25tZW50KSB7CisgICAgICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRMZWZ0OgorICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICAg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpFbmQ6CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5p
dD4oYXZhaWxhYmxlV2lkdGgsIDApOworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRl
cjoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGggLyAyLCAw
KTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9OworCisg
ICAgYXV0byBhZGp1c3RtZW50ID0gYWRqdXN0bWVudEZvckFsaWdubWVudChhdmFpbGFibGVXaWR0
aCk7CisgICAgaWYgKCFhZGp1c3RtZW50KQorICAgICAgICByZXR1cm47CisgICAgLy8gSG9yaXpv
bnRhbCBhbGlnbm1lbnQgbWVhbnMgdGhhdCB3ZSBub3Qgb25seSBhZGp1c3QgdGhlIHJ1bnMgYnV0
IGFsc28gbWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgbGluZSBib3ggaXMgYWxpZ25lZCBhcyB3
ZWxsCisgICAgLy8gZS5nLiA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHdpZHRoOiAx
MDBweDsiPmNlbnRlcmVkIHRleHQ8L2Rpdj4gOiB0aGUgbGluZSBib3ggd2lsbCBhbHNvIGJlIGNl
bnRlcmVkCisgICAgLy8gYXMgb3Bwb3NlZCB0byBzdGFydCBhdCAwcHggYWxsIHRoZSB3YXkgdG8g
W2NlbnRlcmVkIHRleHRdIHJ1bidzIHJpZ2h0IGVkZ2UuCisgICAgbV9saW5lQm94Lm1vdmVIb3Jp
em9udGFsbHkoKmFkanVzdG1lbnQpOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKQorICAg
ICAgICBydW4ubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CiB9CiAKLXZvaWQgTGluZUJ1
aWxkZXI6OmFsaWduQ29udGVudFZlcnRpY2FsbHkoKQordm9pZCBMaW5lQ29udGVudEFsaWduZXI6
OmFsaWduVmVydGljYWxseSgpCiB7Ci0gICAgQVNTRVJUKCFtX2lzSW50cmluc2ljU2l6aW5nKTsK
ICAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QgPSBtX2xpbmVCb3gubG9naWNhbFJlY3Qo
KTsKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewotICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxUb3AgPSAwOworICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlv
dXRVbml0IHsgfTsKICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwog
ICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFs
aWduKCk7CiAgICAgICAgIGF1dG8gYXNjZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKTsKQEAgLTE0NCwxMCArMTUxLDEwIEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFs
aWduQ29udGVudFZlcnRpY2FsbHkoKQogICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsK
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZToKICAgICAgICAgICAgIGlmIChy
dW4uaXNMaW5lQnJlYWsoKSB8fCBydW4uaXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgbG9naWNh
bFRvcCA9IGJhc2VsaW5lKCkgLSBhc2NlbnQ7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9
IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50OwogICAgICAgICAgICAgZWxz
ZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
OwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZSgpIC0gYXNjZW50IC0gYm94
R2VvbWV0cnkuYm9yZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigw
KTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2Vs
aW5lKCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSAtIGJveEdlb21ldHJ5LnBh
ZGRpbmdUb3AoKS52YWx1ZU9yKDApOwogICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3gu
aXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRp
bmdDb250ZXh0KCkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBs
YXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENv
bnRhaW5lckJveD4obGF5b3V0Qm94KSk7CiAgICAgICAgICAgICAgICAgLy8gU3BlYyBtYWtlcyB1
cyBnZW5lcmF0ZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KQEAgLTE2
NiwxNyArMTczLDE3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFsaWduQ29udGVudFZlcnRpY2FsbHko
KQogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAgICAgICAg
ICAgICAgICAgYXV0byBiYXNlbGluZUZyb21NYXJnaW5Cb3ggPSBib3hHZW9tZXRyeS5tYXJnaW5C
ZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOwotICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBiYXNlbGluZSgpIC0gYmFzZWxpbmVGcm9tTWFyZ2luQm94OworICAgICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIGJhc2Vs
aW5lRnJvbU1hcmdpbkJveDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
YXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGJhc2VsaW5lKCkgLSAoYm94
R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygp
LnZhbHVlT3IoMF9sdSkgKyBydW4ubG9naWNhbFJlY3QoKS5oZWlnaHQoKSArIGJveEdlb21ldHJ5
Lm1hcmdpbkFmdGVyKCkpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gu
YWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94
R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSArIHJ1bi5sb2dpY2FsUmVj
dCgpLmhlaWdodCgpICsgYm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CiAg
ICAgICAgICAgICBsb2dpY2FsVG9wID0gMF9sdTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBs
b2dpY2FsQm90dG9tKCkgLSBydW4ubG9naWNhbFJlY3QoKS5oZWlnaHQoKTsKKyAgICAgICAgICAg
IGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gubG9naWNhbEJvdHRvbSgpIC0gcnVuLmxvZ2ljYWxSZWN0
KCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CkBAIC0xODYsMTggKzE5MywxOCBA
QCB2b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCkKICAgICAgICAgLy8g
QWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhlIHJ1biBvdmVyZmxvd3MgdGhlIGxpbmUu
CiAgICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QuZXhwYW5kVmVydGljYWxseVRvQ29udGFp
bihydW4ubG9naWNhbFJlY3QoKSk7CiAgICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9tIHJlbGF0
aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBib3JkZXIg
Ym94IHRvcC9sZWZ0LgotICAgICAgICBydW4ubW92ZVZlcnRpY2FsbHkodGhpcy0+bG9naWNhbFRv
cCgpKTsKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkodGhpcy0+bG9naWNhbExlZnQoKSk7
CisgICAgICAgIHJ1bi5tb3ZlVmVydGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgpKTsKKyAg
ICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkobV9saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwogICAg
IH0KICAgICBtX2xpbmVCb3guc2V0U2Nyb2xsYWJsZU92ZXJmbG93KHNjcm9sbGFibGVPdmVyZmxv
d1JlY3QpOwogfQogCi12b2lkIExpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoKQordm9pZCBMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5z
KElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCiB7CiAgICAgQVNTRVJUKGF2YWlsYWJs
ZVdpZHRoID4gMCk7CiAgICAgLy8gQ29sbGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51
bWJlcnMgYW5kIGZpbmQgdGhlIGxhc3QgcnVuIHdpdGggY29udGVudC4KICAgICBhdXRvIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwotICAgIFJ1biogbGFzdFJ1bldpdGhDb250ZW50ID0g
bnVsbHB0cjsKKyAgICBMaW5lQnVpbGRlcjo6UnVuKiBsYXN0UnVuV2l0aENvbnRlbnQgPSBudWxs
cHRyOwogICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CiAgICAgICAgIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQgKz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKICAgICAg
ICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSkKQEAgLTIyOSwxNCArMjM2LDIxNSBA
QCB2b2lkIExpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJs
ZVdpZHRoKQogICAgIH0KIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHko
Y29uc3QgSGFuZ2luZ0NvbnRlbnQmIGhhbmdpbmdDb250ZW50LCBJc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQgaXNMYXN0TGluZSkKK3ZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNl
bGluZUFuZExpbmVIZWlnaHQoKQogewotICAgIEFTU0VSVCghbV9pc0ludHJpbnNpY1NpemluZyk7
CisgICAgdW5zaWduZWQgaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKKyAgICBhdXRv
IGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIHJ1
biA6IG1fcnVucykgeworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7
CisgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CiAKLSAgICBhdXRvIGF2
YWlsYWJsZVdpZHRoID0gdGhpcy0+YXZhaWxhYmxlV2lkdGgoKSArIGhhbmdpbmdDb250ZW50Lndp
ZHRoKCk7Ci0gICAgaWYgKG1fcnVucy5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkK
KyAgICAgICAgcnVuLnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKKwor
ICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7CisgICAgICAg
ICAgICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUgZWl0aGVyIHRocm91
Z2ggdGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBjb250ZXh0IHJvb3Qp
IG9yCisgICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFpbmVyIChzdGFydCku
IE5vcm1hbGx5IHRoZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0cmV0Y2ggdGhlIGxp
bmUuCisgICAgICAgICAgICAvLyBpZiAoIW1faW5pdGlhbFN0cnV0KSB7CisgICAgICAgICAgICAv
LyAgICAgLy8gV2UgYXJlIGluIHN0YW5kYXJkcyBtb2RlIHdoZXJlIHRoZSBiYXNlbGluZSBhbmQg
bGluZSBoZWlnaHQgYXJlIGV4cGxpY3QuCisgICAgICAgICAgICAvLyAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAvLyB9CisgICAgICAgICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xl
dmVsKSB7CisgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGlu
ZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIuIAor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKKyAgICAgICAgICAgICAgICAvLyBlLmcg
ZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJl
Y3QgdGV4dDwvZGl2Pi4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0cnVlOworICAgICAg
ICAgICAgLy8gV2UgYXJlIGluIHF1aXJrcyBtb2RlIHdoZXJlIHRoZSBmb250LW1ldHJpY3MgbWln
aHQgY2hhbmdlIHRoZSBsaW5lIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIGFuZCB0aGlzIGlzIHRoZSBm
aXJzdCB0ZXh0IGNvbnRlbnQgb24gdGhlIGxpbmUKKyAgICAgICAgICAgIC8vIG91dHNpZGUgb2Yg
YW4gaW5saW5lIGNvbnRhaW5lci4KKyAgICAgICAgICAgIC8vIG1fbGluZUJveC5zZXRBc2NlbnRJ
ZkdyZWF0ZXIobV9pbml0aWFsU3RydXQtPmFzY2VudCk7CisgICAgICAgICAgICAvLyBtX2xpbmVC
b3guc2V0RGVzY2VudElmR3JlYXRlcihtX2luaXRpYWxTdHJ1dC0+ZGVzY2VudCk7CisgICAgICAg
ICAgICAvLyBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtX2luaXRpYWxTdHJ1
dC0+aGVpZ2h0KCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAgICAgICAgICAgKytpbmxpbmVDb250
YWluZXJOZXN0aW5nTGV2ZWw7CisgICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJl
dGNoIHRoZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KKyAgICAgICAgICAgIC8vIFZlcnRpY2Fs
IG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxp
bmUgaGVpZ2h0LgorICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0
cmljcygpOworICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNh
bEFsaWduOjpCYXNlbGluZSkgeworICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBM
aW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBzdHlsZS5jb21wdXRl
ZExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgLy8gQm90aCBoYWxmbGVhZGluZyBhc2Nl
bnQgYW5kIGRlc2NlbnQgY291bGQgYmUgbmVnYXRpdmUgKHRhbGwgZm9udCB2cy4gc21hbGwgbGlu
ZS1oZWlnaHQgdmFsdWUpCisgICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlc2NlbnQg
PiAwKQorICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlciho
YWxmTGVhZGluZy5kZXNjZW50KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuYXNj
ZW50ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2VudElmR3JlYXRl
cihoYWxmTGVhZGluZy5hc2NlbnQpOworICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0SWZHcmVhdGVyKG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuaGVpZ2h0KCkp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2lj
YWxIZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZlIGFscmVh
ZHkgYmVlbiBhZGp1c3RlZCBhdCBDb250YWluZXJTdGFydC4KKyAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpOworICAgICAgICAgICAgLS1pbmxpbmVDb250YWlu
ZXJOZXN0aW5nTGV2ZWw7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChydW4uaXNCb3goKSkgeworICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAg
ICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwor
CisgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgICAgIGlmIChs
YXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSW5saW5lLWJs
b2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZlIGJhc2VsaW5lcy4KKyAgICAgICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25l
IGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGxh
c3RMaW5lQm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVC
b3hlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYmVmb3JlSGVpZ2h0ID0gYm94
R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdl
b21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOworICAgICAgICAgICAgICAgICAgICBtX2xp
bmVCb3guc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYmVmb3JlSGVpZ2h0ICsgbGFzdExp
bmVCb3guYmFzZWxpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm9uIGlubGluZS1ibG9jayBib3hlcyBzaXQg
b24gdGhlIGJhc2VsaW5lIChpbmNsdWRpbmcgdGhlaXIgYm90dG9tIG1hcmdpbikuCisgICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZlIGRlc2NlbnQgKHllcywg
bmVnYXRpdmUgZGVzY2VudCBpcyBhIHRoaW5nKS4KKyAgICAgICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0ICsgc3RkOjptYXg8
SW5saW5lTGF5b3V0VW5pdD4oMCwgbV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5kZXNjZW50
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CisgICAgICAgICAgICAg
ICAgLy8gVG9wIGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFzZWxpbmUsIGl0IG9u
bHkgcHVzaGVzIHRoZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBkb3duLgorICAgICAgICAg
ICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdo
dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OkJvdHRvbTogeworICAgICAgICAgICAgICAgIC8vIEJvdHRvbSBhbGlnbmVkLCB0YWxsIGNv
bnRlbnQgcHVzaGVzIHRoZSBiYXNlbGluZSBmdXJ0aGVyIGRvd24gZnJvbSB0aGUgbGluZSB0b3Au
CisgICAgICAgICAgICAgICAgYXV0byBsaW5lTG9naWNhbEhlaWdodCA9IG1fbGluZUJveC5sb2dp
Y2FsSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaWYgKG1hcmdpbkJveEhlaWdodCA+IGxpbmVM
b2dpY2FsSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2Fs
SGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIG1f
bGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihtX2xpbmVCb3guYWxpZ25tZW50
QmFzZWxpbmUoKSArIChtYXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRF
RF9ZRVQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorfQorCitIYW5naW5nQ29udGVudCBMaW5l
Q29udGVudEFsaWduZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudChMaW5lQnVpbGRlcjo6SXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3QK
K3sKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OworICAgIGlm
IChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPT0gTGluZUJ1aWxkZXI6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRp
dGlvbmFsKCk7CisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1f
cnVucykpIHsKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29u
dGFpbmVyRW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1bi5pc0xp
bmVCcmVhaygpKSB7CisgICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFs
KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJ1bi5o
YXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBD
aGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAgICAgICAg
aWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNv
bmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBoYW5naW5n
Q29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOworICAgIH0KKyAg
ICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Cit9CisKK0lubGluZUxheW91dFVuaXQgTGluZUNvbnRl
bnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mIHJ1bikg
Y29uc3QKK3sKKyAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNz
KCk7CisgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkKKyAgICAgICAg
cmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgIHJldHVybiBmb250TWV0cmlj
cy5oZWlnaHQoKTsKKworICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94KTsKKyAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBsYXlvdXRC
b3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5LmNv
bnRlbnRCb3hIZWlnaHQoKTsKKworICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcu
IGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdp
biBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KKyAgICByZXR1cm4g
Ym94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Cit9CisKK0xpbmVCdWlsZGVyOjpMaW5lQnVp
bGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQsIE9wdGlvbmFsPFRleHRBbGlnbk1vZGU+IGhvcml6b250YWxBbGlnbm1lbnQsIEludHJpbnNp
Y1NpemluZyBpbnRyaW5zaWNTaXppbmcpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0
KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwgbV90cmltbWFibGVUcmFpbGluZ0NvbnRl
bnQobV9ydW5zKQorICAgICwgbV9ob3Jpem9udGFsQWxpZ25tZW50KGhvcml6b250YWxBbGlnbm1l
bnQpCisgICAgLCBtX2lzSW50cmluc2ljU2l6aW5nKGludHJpbnNpY1NpemluZyA9PSBJbnRyaW5z
aWNTaXppbmc6OlllcykKKyAgICAsIG1fc2hvdWxkSWdub3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5n
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGlu
Z0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKK3sKK30KKworTGluZUJ1aWxkZXI6On5MaW5l
QnVpbGRlcigpCit7Cit9CisKK3ZvaWQgTGluZUJ1aWxkZXI6OmluaXRpYWxpemUoY29uc3QgQ29u
c3RyYWludHMmIGNvbnN0cmFpbnRzKQoreworICAgIG1fbGluZUxvZ2ljYWxXaWR0aCA9IGNvbnN0
cmFpbnRzLmF2YWlsYWJsZUxvZ2ljYWxXaWR0aDsKKyAgICBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0g
Y29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0OworICAgIGF1dG8gaW5pdGlhbExp
bmVIZWlnaHQgPSBjb25zdHJhaW50cy5saW5lSGVpZ2h0OworICAgIGF1dG8gbGluZVJlY3QgPSBE
aXNwbGF5OjpJbmxpbmVSZWN0IHsgY29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIDBfbHUsIGlu
aXRpYWxMaW5lSGVpZ2h0IH07CisgICAgYXV0byBhc2NlbnRBbmREZXNjZW50ID0gTGluZUJ1aWxk
ZXI6OmhhbGZMZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgp
LmZvbnRNZXRyaWNzKCksIGluaXRpYWxMaW5lSGVpZ2h0KTsKKyAgICBtX2xpbmVCb3ggPSBMaW5l
Qm94IHsgbGluZVJlY3QsIGFzY2VudEFuZERlc2NlbnQgfTsKKyAgICBpZiAoIWZvcm1hdHRpbmdD
b250ZXh0KCkubGF5b3V0U3RhdGUoKS5pbk5vUXVpcmtzTW9kZSgpKQorICAgICAgICBtX2luaXRp
YWxTdHJ1dCA9IEFzY2VudEFuZERlc2NlbnQgeyBhc2NlbnRBbmREZXNjZW50LmFzY2VudCwgaW5p
dGlhbExpbmVIZWlnaHQgLSBhc2NlbnRBbmREZXNjZW50LmFzY2VudCB9OworICAgIGVsc2UKKyAg
ICAgICAgbV9pbml0aWFsU3RydXQgPSB7IH07CisgICAgY2xlYXIoKTsKKyNpZiBBU1NFUlRfRU5B
QkxFRAorICAgIG1faXNDbG9zZWQgPSBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIExpbmVCdWls
ZGVyOjpjbGVhcigpCit7CisgICAgbV9saW5lQm94LnNldExvZ2ljYWxXaWR0aCh7IH0pOworICAg
IG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWRFbXB0eSgpOworICAgIG1fcnVucy5jbGVhcigpOwor
ICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LnJlc2V0KCk7CisgICAgbV9saW5lSXNWaXN1
YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50ID0geyB9OworfQorCit2b2lk
IExpbmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGlu
ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIG1faXNDbG9zZWQgPSB0cnVlOworI2VuZGlm
CisgICAgLy8gMS4gUmVtb3ZlIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50LgorICAgIC8vIDIu
IEFsaWduIG1lcmdlZCBydW5zIGJvdGggdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LgorICAg
IHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpOworICAgIHZpc3VhbGx5Q29sbGFwc2VQ
cmVXcmFwT3ZlcmZsb3dDb250ZW50KCk7CisgICAgaWYgKG1faXNJbnRyaW5zaWNTaXppbmcpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gY29udGVudEFsaWduZXIgPSBMaW5lQ29udGVudEFs
aWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpLCBtX2xpbmVCb3gsIG1fcnVucywgYXZhaWxhYmxl
V2lkdGgoKSB9OworICAgIGNvbnRlbnRBbGlnbmVyLmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdo
dCgpOworICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkoKSkgeworICAgICAgICBtX2xpbmVCb3gucmVz
ZXRBbGlnbm1lbnRCYXNlbGluZSgpOworICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdo
dCh7IH0pOworICAgIH0KKyAgICAvLyBSZW1vdmUgZGVzY2VudCB3aGVuIGFsbCBjb250ZW50IGlz
IGJhc2VsaW5lIGFsaWduZWQgYnV0IG5vbmUgb2YgdGhlbSBoYXZlIGRlc2NlbnQuCisgICAgaWYg
KGZvcm1hdHRpbmdDb250ZXh0KCkucXVpcmtzKCkubGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmco
bV9ydW5zKSkgeworICAgICAgICBtX2xpbmVCb3guc2hyaW5rVmVydGljYWxseShtX2xpbmVCb3gu
YXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpOworICAgICAgICBtX2xpbmVCb3gucmVzZXREZXNj
ZW50KCk7CisgICAgfQorICAgIGNvbnRlbnRBbGlnbmVyLmFsaWduVmVydGljYWxseSgpOworCiAg
ICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0gewogICAgICAgICBBU1NF
UlQobV9ob3Jpem9udGFsQWxpZ25tZW50KTsKICAgICAgICAgaWYgKG1faG9yaXpvbnRhbEFsaWdu
bWVudCAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQpAQCAtMjQ0LDQ3ICs0NTIsMTEgQEAgdm9p
ZCBMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHkoY29uc3QgSGFuZ2luZ0NvbnRlbnQmIGhh
bmdpbmdDb250ZW50LCBJc0xhc3QKICAgICAgICAgLy8gVGV4dCBpcyBqdXN0aWZpZWQgYWNjb3Jk
aW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0LWp1c3RpZnkgcHJvcGVydHks
CiAgICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0aGUgbGluZSBib3guIFVubGVz
cyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFzdCwKICAgICAgICAgLy8gdGhl
IGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxvY2sg
aXMgc3RhcnQtYWxpZ25lZC4KLSAgICAgICAgaWYgKG1fcnVucy5sYXN0KCkuaXNMaW5lQnJlYWso
KSB8fCBpc0xhc3RMaW5lID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQorICAg
ICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gTGlu
ZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQogICAgICAgICAgICAg
cmV0dXJuIFRleHRBbGlnbk1vZGU6OlN0YXJ0OwogICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9k
ZTo6SnVzdGlmeTsKLSAgICB9KCk7Ci0KLSAgICBpZiAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25t
ZW50ID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMoYXZh
aWxhYmxlV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBhZGp1c3Rt
ZW50Rm9yQWxpZ25tZW50ID0gW10gKGF1dG8gaG9yaXpvbnRhbEFsaWdubWVudCwgYXV0byBhdmFp
bGFibGVXaWR0aCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gewotICAgICAgICBzd2l0
Y2ggKGhvcml6b250YWxBbGlnbm1lbnQpIHsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpM
ZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OldlYktpdFJpZ2h0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCwgMCk7
Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxJbmxp
bmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCAvIDIsIDApOwotICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4geyB9OwogICAgIH07Ci0KLSAgICBhdXRvIGFkanVzdG1lbnQgPSBh
ZGp1c3RtZW50Rm9yQWxpZ25tZW50KGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCwgYXZhaWxh
YmxlV2lkdGgpOwotICAgIGlmICghYWRqdXN0bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIC8v
IEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9ubHkgYWRqdXN0IHRoZSBy
dW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQotICAgIC8vIHRoYXQgdGhlIGxpbmUgYm94IGlzIGFsaWdu
ZWQgYXMgd2VsbAotICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyB3
aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxpbmUgYm94IHdpbGwgYWxz
byBiZSBjZW50ZXJlZAotICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQgYXQgMHB4IGFsbCB0aGUg
d2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgotICAgIG1fbGluZUJveC5t
b3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVu
cykKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOworICAgIGNvbnRl
bnRBbGlnbmVyLmFsaWduSG9yaXpvbnRhbGx5KGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCgp
LCBpc0xhc3RMaW5lKTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxpbmdUcmlt
bWFibGVDb250ZW50KCkKQEAgLTM2NSwzMSArNTM3LDYgQEAgdm9pZCBMaW5lQnVpbGRlcjo6dmlz
dWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKQogICAgIG1fbGluZUJveC5zaHJp
bmtIb3Jpem9udGFsbHkodHJpbW1lZENvbnRlbnRXaWR0aCk7CiB9CiAKLUhhbmdpbmdDb250ZW50
IExpbmVCdWlsZGVyOjpjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKLXsKLSAgICBhdXRvIGhhbmdpbmdD
b250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OwotICAgIC8vIENhbid0IHNldHVwIGhhbmdpbmcg
Y29udGVudCB3aXRoIHJlbW92YWJsZSB0cmFpbGluZyB3aGl0ZXNwYWNlLgotICAgIEFTU0VSVCht
X3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5pc0VtcHR5KCkpOwotICAgIGlmIChpc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCi0g
ICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKLSAgICBmb3IgKGF1dG8m
IHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UobV9ydW5zKSkgewotICAgICAgICBpZiAocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAg
IGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2
ZWQgb3IgaHVuZyB3aGl0ZXNwYWNlLgotICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFj
ZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Ly8gVGhpcyBpcyBlaXRoZXIgYSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWls
aW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxp
bmdXaGl0ZXNwYWNlV2lkdGgoKSk7Ci0gICAgfQotICAgIHJldHVybiBoYW5naW5nQ29udGVudDsK
LX0KLQogdm9pZCBMaW5lQnVpbGRlcjo6bW92ZUxvZ2ljYWxMZWZ0KElubGluZUxheW91dFVuaXQg
ZGVsdGEpCiB7CiAgICAgaWYgKCFkZWx0YSkKQEAgLTU0OCwxMjggKzY5NSw2IEBAIHZvaWQgTGlu
ZUJ1aWxkZXI6OmFwcGVuZExpbmVCcmVhayhjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtKQog
ICAgIG1fcnVucy5hcHBlbmQoeyBkb3duY2FzdDxJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbT4oaW5s
aW5lSXRlbSksIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSB9KTsKIH0KIAotdm9pZCBMaW5lQnVpbGRl
cjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKLXsKLSAgICB1bnNpZ25lZCBpbmxpbmVD
b250YWluZXJOZXN0aW5nTGV2ZWwgPSAwOwotICAgIGF1dG8gaGFzU2VlbkRpcmVjdFRleHRPckxp
bmVCcmVhayA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAgICAg
IGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byYgc3R5bGUg
PSBsYXlvdXRCb3guc3R5bGUoKTsKLQotICAgICAgICBydW4uc2V0TG9naWNhbEhlaWdodChydW5D
b250ZW50SGVpZ2h0KHJ1bikpOwotCi0gICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlz
TGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIC8vIEZvciB0ZXh0IGNvbnRlbnQgd2Ugc2V0IHRo
ZSBiYXNlbGluZSBlaXRoZXIgdGhyb3VnaCB0aGUgaW5pdGlhbCBzdHJ1dCAoc2V0IGJ5IHRoZSBm
b3JtYXR0aW5nIGNvbnRleHQgcm9vdCkgb3IKLSAgICAgICAgICAgIC8vIHRocm91Z2ggdGhlIGlu
bGluZSBjb250YWluZXIgKHN0YXJ0KS4gTm9ybWFsbHkgdGhlIHRleHQgY29udGVudCBpdHNlbGYg
ZG9lcyBub3Qgc3RyZXRjaCB0aGUgbGluZS4KLSAgICAgICAgICAgIGlmICghbV9pbml0aWFsU3Ry
dXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gc3RhbmRhcmRzIG1vZGUgd2hlcmUg
dGhlIGJhc2VsaW5lIGFuZCBsaW5lIGhlaWdodCBhcmUgZXhwbGljdC4KLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmxpbmVDb250YWlu
ZXJOZXN0aW5nTGV2ZWwpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGFkanVz
dGVkIHRoZSBsaW5lIGhlaWdodC9iYXNlbGluZSB0aHJvdWdoIHRoZSBwYXJlbnQgaW5saW5lIGNv
bnRhaW5lci4gCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhaykgewotICAgICAgICAgICAg
ICAgIC8vIGUuZyBkaXY+Zmlyc3QgdGV4dDwvZGl2PiBvciA8ZGl2PjxzcGFuPm5lc3RlZDxzcGFu
PmZpcnN0IGRpcmVjdCB0ZXh0PC9kaXY+LgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhayA9IHRy
dWU7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgaW4gcXVpcmtzIG1vZGUgd2hlcmUgdGhlIGZvbnQt
bWV0cmljcyBtaWdodCBjaGFuZ2UgdGhlIGxpbmUgbGluZSBoZWlnaHQvYmFzZWxpbmUgYW5kIHRo
aXMgaXMgdGhlIGZpcnN0IHRleHQgY29udGVudCBvbiB0aGUgbGluZQotICAgICAgICAgICAgLy8g
b3V0c2lkZSBvZiBhbiBpbmxpbmUgY29udGFpbmVyLgotICAgICAgICAgICAgbV9saW5lQm94LnNl
dEFzY2VudElmR3JlYXRlcihtX2luaXRpYWxTdHJ1dC0+YXNjZW50KTsKLSAgICAgICAgICAgIG1f
bGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKG1faW5pdGlhbFN0cnV0LT5kZXNjZW50KTsKLSAg
ICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1faW5pdGlhbFN0
cnV0LT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7Ci0gICAgICAgICAgICArK2lubGluZUNv
bnRhaW5lck5lc3RpbmdMZXZlbDsKLSAgICAgICAgICAgIC8vIElubGluZSBjb250YWluZXJzIHN0
cmV0Y2ggdGhlIGxpbmUgYnkgdGhlaXIgZm9udCBzaXplLgotICAgICAgICAgICAgLy8gVmVydGlj
YWwgbWFyZ2lucywgcGFkZGluZyBhbmQgYm9yZGVycyBkb24ndCBjb250cmlidXRlIHRvIHRoZSBs
aW5lIGhlaWdodC4KLSAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gc3R5bGUuZm9udE1l
dHJpY3MoKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGlj
YWxBbGlnbjo6QmFzZWxpbmUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGhhbGZMZWFkaW5nID0g
aGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQo
KSk7Ci0gICAgICAgICAgICAgICAgLy8gQm90aCBoYWxmbGVhZGluZyBhc2NlbnQgYW5kIGRlc2Nl
bnQgY291bGQgYmUgbmVnYXRpdmUgKHRhbGwgZm9udCB2cy4gc21hbGwgbGluZS1oZWlnaHQgdmFs
dWUpCi0gICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlc2NlbnQgPiAwKQotICAgICAg
ICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5k
ZXNjZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuYXNjZW50ID4gMCkKLSAg
ICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlcihoYWxmTGVhZGlu
Zy5hc2NlbnQpOwotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZH
cmVhdGVyKG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKLSAgICAgICAgICAg
IC8vIFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZlIGFscmVhZHkgYmVlbiBhZGp1
c3RlZCBhdCBDb250YWluZXJTdGFydC4KLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDb250YWlu
ZXJOZXN0aW5nTGV2ZWwpOwotICAgICAgICAgICAgLS1pbmxpbmVDb250YWluZXJOZXN0aW5nTGV2
ZWw7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChydW4u
aXNCb3goKSkgewotICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBhdXRvIG1hcmdp
bkJveEhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwotCi0gICAgICAgICAg
ICBzd2l0Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSkgewotICAgICAgICAgICAgY2FzZSBWZXJ0
aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJ
bmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdD
b250ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW5saW5lLWJsb2NrcyB3aXRoIGlu
bGluZSBjb250ZW50IGFsd2F5cyBoYXZlIGJhc2VsaW5lcy4KLSAgICAgICAgICAgICAgICAgICAg
YXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZv
cm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOwotICAgICAg
ICAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4g
aWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5lQm94ID0g
Zm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5sYXN0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYmVmb3JlSGVpZ2h0ID0gYm94R2VvbWV0cnkubWFy
Z2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRp
bmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QWxp
Z25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYmVmb3JlSGVpZ2h0ICsgbGFzdExpbmVCb3guYmFzZWxp
bmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZH
cmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gTm9uIGlubGluZS1ibG9jayBib3hlcyBzaXQgb24gdGhlIGJhc2Vs
aW5lIChpbmNsdWRpbmcgdGhlaXIgYm90dG9tIG1hcmdpbikuCi0gICAgICAgICAgICAgICAgICAg
IG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZlIGRlc2NlbnQgKHllcywgbmVnYXRpdmUgZGVz
Y2VudCBpcyBhIHRoaW5nKS4KLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2lj
YWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0ICsgc3RkOjptYXg8SW5saW5lTGF5b3V0
VW5pdD4oMCwgbV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5kZXNjZW50KSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICAgICAgLy8gVG9wIGFs
aWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFzZWxpbmUsIGl0IG9ubHkgcHVzaGVzIHRo
ZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBkb3duLgotICAgICAgICAgICAgICAgIG1fbGlu
ZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbTog
ewotICAgICAgICAgICAgICAgIC8vIEJvdHRvbSBhbGlnbmVkLCB0YWxsIGNvbnRlbnQgcHVzaGVz
IHRoZSBiYXNlbGluZSBmdXJ0aGVyIGRvd24gZnJvbSB0aGUgbGluZSB0b3AuCi0gICAgICAgICAg
ICAgICAgYXV0byBsaW5lTG9naWNhbEhlaWdodCA9IG1fbGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmdpbkJveEhlaWdodCA+IGxpbmVMb2dpY2FsSGVpZ2h0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVh
dGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRB
bGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAr
IChtYXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1JbmxpbmVMYXlvdXRVbml0IExpbmVCdWlsZGVyOjpy
dW5Db250ZW50SGVpZ2h0KGNvbnN0IFJ1biYgcnVuKSBjb25zdAotewotICAgIEFTU0VSVCghbV9p
c0ludHJpbnNpY1NpemluZyk7Ci0gICAgYXV0byYgZm9udE1ldHJpY3MgPSBydW4uc3R5bGUoKS5m
b250TWV0cmljcygpOwotICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkp
Ci0gICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQotICAgIGlmIChydW4uaXND
b250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICByZXR1cm4g
Zm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0
Qm94KCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21l
dHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkg
fHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBib3hH
ZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7Ci0KLSAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5l
IGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0
aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUuCi0g
ICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwotfQotCiBib29sIExpbmVC
dWlsZGVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoY29uc3QgUnVuJiBydW4pIGNvbnN0CiB7CiAgICAg
aWYgKHJ1bi5pc1RleHQoKSkKQEAgLTcxNiwyMSArNzQxLDExIEBAIEFzY2VudEFuZERlc2NlbnQg
TGluZUJ1aWxkZXI6OmhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmljcyYgZm9udE1l
dHJpY3MsCiAgICAgcmV0dXJuIHsgYWRqdXN0ZWRBc2NlbnQsIGFkanVzdGVkRGVzY2VudCB9Owog
fQogCi1MYXlvdXRTdGF0ZSYgTGluZUJ1aWxkZXI6OmxheW91dFN0YXRlKCkgY29uc3QKLXsgCi0g
ICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsKLX0KLQogY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIExpbmVCdWlsZGVyOjpmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiB9CiAKLWNv
bnN0IENvbnRhaW5lckJveCYgTGluZUJ1aWxkZXI6OnJvb3QoKSBjb25zdAotewotICAgIHJldHVy
biBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKTsKLX0KLQogTGluZUJ1aWxkZXI6OlRyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudDo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KFJ1bkxpc3QmIHJ1bnMp
CiAgICAgOiBtX3J1bnMocnVucykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4IDFhNmFlMDA2
YThkOWI2ZTAzNGU2NTRhNDU2NDM3NDNlNWMzMjA3MjguLjgyMmQ3ZTUyZjY1NzFjMzdkZTAzY2E5
NWU5NmY2ZDFmYTk1MzY3ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtMzUsMTMgKzM1LDEx
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotc3RydWN0IEhh
bmdpbmdDb250ZW50OwogY2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiBjbGFzcyBJbmxp
bmVTb2Z0TGluZUJyZWFrSXRlbTsKK2NsYXNzIExpbmVDb250ZW50QWxpZ25lcjsKIAogY2xhc3Mg
TGluZUJ1aWxkZXIgewotICAgIHN0cnVjdCBDb250aW51b3VzQ29udGVudDsKLQogcHVibGljOgog
ICAgIHN0cnVjdCBDb25zdHJhaW50cyB7CiAgICAgICAgIElubGluZUxheW91dFBvaW50IGxvZ2lj
YWxUb3BMZWZ0OwpAQCAtNjQsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwog
ICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmlzQ29u
c2lkZXJlZEVtcHR5KCk7IH0KICAgICBib29sIGhhc0ludHJ1c2l2ZUZsb2F0KCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNJbnRydXNpdmVGbG9hdDsgfQotICAgIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBsb2dpY2FsV2lkdGgoKSAtIGNvbnRlbnRMb2dpY2Fs
V2lkdGgoKTsgfQorICAgIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGggLSBjb250ZW50TG9naWNhbFdpZHRoKCk7IH0KIAog
ICAgIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LndpZHRoKCk7IH0KICAgICBib29sIGlzVHJh
aWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50LmlzVHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpOyB9CkBAIC05Miw2ICs5MCw3
IEBAIHB1YmxpYzoKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMaW5lQnVp
bGRlcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVDb250ZW50QWxpZ25lcjsKIAogICAgICAg
ICBSdW4oY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBuZWVkc0h5cGVuKTsKICAgICAg
ICAgUnVuKGNvbnN0IElubGluZVNvZnRMaW5lQnJlYWtJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCk7CkBAIC0xNDksMTggKzE0OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQXNj
ZW50QW5kRGVzY2VudCBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmLCBJbmxp
bmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KTsKIAogcHJpdmF0ZToKLSAgICBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbFRv
cCgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKTsgfQotCi0gICAgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsTGVmdCgpOyB9Ci0g
ICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBsb2dpY2Fs
TGVmdCgpICsgbG9naWNhbFdpZHRoKCk7IH0KLQotICAgIElubGluZUxheW91dFVuaXQgbG9naWNh
bFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTG9naWNhbFdpZHRoOyB9Ci0gICAgSW5saW5l
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2lj
YWxIZWlnaHQoKTsgfQotCiAgICAgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxXaWR0aCgpOyB9CiAgICAgSW5saW5l
TGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94
LmxvZ2ljYWxSaWdodCgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpOyB9CiAKICAgICBzdHJ1Y3Qg
SW5saW5lUnVuRGV0YWlscyB7CiAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRo
IHsgMCB9OwpAQCAtMTc3LDIwICsxNjYsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVtb3Zl
VHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7CiAgICAgdm9pZCB2aXN1YWxseUNvbGxhcHNlUHJl
V3JhcE92ZXJmbG93Q29udGVudCgpOwotICAgIEhhbmdpbmdDb250ZW50IGNvbGxlY3RIYW5naW5n
Q29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIHZvaWQgYWxpZ25Ib3Jp
em9udGFsbHkoY29uc3QgSGFuZ2luZ0NvbnRlbnQmLCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQpOwotICAgIHZvaWQgYWxpZ25Db250ZW50VmVydGljYWxseSgpOwotCi0gICAgdm9pZCBhZGp1
c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IHJ1bkNvbnRl
bnRIZWlnaHQoY29uc3QgUnVuJikgY29uc3Q7Ci0KLSAgICB2b2lkIGp1c3RpZnlSdW5zKElubGlu
ZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwogCiAgICAgYm9vbCBpc1Zpc3VhbGx5Tm9uRW1w
dHkoY29uc3QgUnVuJikgY29uc3Q7CiAKLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBj
b25zdDsKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRl
eHQoKSBjb25zdDsKLSAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdDsKIAogICAg
IHN0cnVjdCBUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgewogICAgICAgICBUcmltbWFibGVUcmFp
bGluZ0NvbnRlbnQoUnVuTGlzdCYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407293</attachid>
            <date>2020-08-26 06:25:10 -0700</date>
            <delta_ts>2020-08-26 07:52:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214527-20200826062509.patch</filename>
            <type>text/plain</type>
            <size>38009</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWU0MzQ2NjM4YjY3OTY1
MTdlMDcxYzIxNjc3MThiZWQ5NWEzYjU2YS4uY2EwZDJmMmM2NGY2OWViOTlhNWFhOTBhNWIwM2E1
ZGM1NjdkMzZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIwLTA4LTI1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBydW4gYWxpZ25tZW50IGxvZ2ljIHRvIGEgZGVkaWNhdGVkIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ1MjcKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY2MTE1Nzk2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9yIG1vdmluZyBsaW5lIGFs
aWdubWVudCBsb2dpYyB0byBMaW5lQm94IChMaW5lQnVpbGRlciB3aWxsIG5vdCBnb2luZyB0byBi
ZSByZXNwb25zaWJsZSBmb3IgYWxpZ25pbmcgcnVucyBvbiB0aGUgbGluZSkuCisKKyAgICAgICAg
KiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6bGF5b3V0U3RhdGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OkxpbmVD
b250ZW50QWxpZ25lcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxp
Z25lcjo6YWxpZ25Ib3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Q29udGVudEFsaWduZXI6OmFsaWduVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6anVzdGlmeVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhh
bmdpbmdDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRl
bnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6On5MaW5lQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCdWlsZGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFsaWduQ29u
dGVudFZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
QnVpbGRlcjo6anVzdGlmeVJ1bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFkanVzdEJhc2VsaW5l
QW5kTGluZUhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpydW5Db250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxheW91dFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJvb3QgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphdmFpbGFibGVXaWR0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb250ZW50TG9n
aWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OmxvZ2ljYWxUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6bG9naWNhbEJvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsTGVmdCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsUmlnaHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bG9naWNh
bFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6YmFzZWxpbmUgY29uc3QpOiBEZWxldGVkLgorCiAyMDIwLTA4
LTI1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZD
XSBEbyBub3QgbW92ZSB0aGUgcnVucyBvdXQgb2YgdGhlIExpbmVCdWlsZGVyIHdoaWxlIGNsb3Np
bmcgdGhlIGxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5n
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5k
ZXggZTk0ZDZmNGZhNDE3NjNlZmI3NzM4MmQ4Y2VhZWEzZGQ4ZjhlMmRiYS4uMDVhM2IzNjg2NTYz
Nzg3NGY4MzllZmNjZTI2ZDMxMjUzNWVmYWJkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zv
cm1hdHRpbmdDb250ZXh0LmgKQEAgLTEwOSwxMCArMTA5LDEwIEBAIHB1YmxpYzoKICAgICBjb25z
dCBEaXNwbGF5OjpCb3gmIGdlb21ldHJ5Rm9yQm94KGNvbnN0IEJveCYsIE9wdGlvbmFsPEVzY2Fw
ZVJlYXNvbj4gPSBXVEY6Om51bGxvcHQpIGNvbnN0OwogICAgIGNvbnN0IENvbnRhaW5lckJveCYg
cm9vdCgpIGNvbnN0IHsgcmV0dXJuICptX3Jvb3Q7IH0KIAorICAgIExheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSgpIGNvbnN0OwogcHJvdGVjdGVkOgogICAgIHVzaW5nIExheW91dFF1ZXVlID0gVmVj
dG9yPGNvbnN0IEJveCo+OwogCi0gICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3Q7
CiAgICAgY29uc3QgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1hdHRpbmdTdGF0ZTsgfQogICAgIEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGlu
Z1N0YXRlKCkgeyByZXR1cm4gbV9mb3JtYXR0aW5nU3RhdGU7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxk
ZXIuY3BwCmluZGV4IDk0NTRiOTNhZTg2Yzg0NTIyYWM3Mjk1ZWRmZDY2MzdmMDM1YzMwMDkuLjEz
MGM2ZTlhMzNjNWJlOTRlOTVhMzE5YmE1YjVjZTRkZjljMWM5NTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVp
bGRlci5jcHAKQEAgLTY0LDc5ICs2NCw4NiBAQCB2b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgp
CiAgICAgbV93aWR0aCA9ICAwOwogfQogCi1MaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBPcHRpb25h
bDxUZXh0QWxpZ25Nb2RlPiBob3Jpem9udGFsQWxpZ25tZW50LCBJbnRyaW5zaWNTaXppbmcgaW50
cmluc2ljU2l6aW5nKQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCkKLSAgICAsIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykK
LSAgICAsIG1faG9yaXpvbnRhbEFsaWdubWVudChob3Jpem9udGFsQWxpZ25tZW50KQotICAgICwg
bV9pc0ludHJpbnNpY1NpemluZyhpbnRyaW5zaWNTaXppbmcgPT0gSW50cmluc2ljU2l6aW5nOjpZ
ZXMpCi0gICAgLCBtX3Nob3VsZElnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyhSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50
ZWdyYXRpb25FbmFibGVkKCkpCi17Ci19CitjbGFzcyBMaW5lQ29udGVudEFsaWduZXIgeworcHVi
bGljOgorICAgIExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYsIExpbmVCb3gmLCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGgpOwogCi1MaW5lQnVpbGRlcjo6fkxpbmVCdWlsZGVyKCkKLXsKLX0KKyAgICB2
b2lkIGFsaWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUsIExpbmVCdWlsZGVyOjpJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpOworICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7CisgICAg
dm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKIAotdm9pZCBMaW5lQnVpbGRlcjo6
aW5pdGlhbGl6ZShjb25zdCBDb25zdHJhaW50cyYgY29uc3RyYWludHMpCi17Ci0gICAgbV9saW5l
TG9naWNhbFdpZHRoID0gY29uc3RyYWludHMuYXZhaWxhYmxlTG9naWNhbFdpZHRoOwotICAgIG1f
aGFzSW50cnVzaXZlRmxvYXQgPSBjb25zdHJhaW50cy5saW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQ7
Ci0gICAgYXV0byBpbml0aWFsTGluZUhlaWdodCA9IGNvbnN0cmFpbnRzLmxpbmVIZWlnaHQ7Ci0g
ICAgYXV0byBsaW5lUmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyBjb25zdHJhaW50cy5sb2dp
Y2FsVG9wTGVmdCwgMF9sdSwgaW5pdGlhbExpbmVIZWlnaHQgfTsKLSAgICBhdXRvIGFzY2VudEFu
ZERlc2NlbnQgPSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKHJvb3QoKS5zdHlsZSgp
LmZvbnRNZXRyaWNzKCksIGluaXRpYWxMaW5lSGVpZ2h0KTsKLSAgICBtX2xpbmVCb3ggPSBMaW5l
Qm94IHsgbGluZVJlY3QsIGFzY2VudEFuZERlc2NlbnQgfTsKLSAgICBpZiAoIWxheW91dFN0YXRl
KCkuaW5Ob1F1aXJrc01vZGUoKSkKLSAgICAgICAgbV9pbml0aWFsU3RydXQgPSBBc2NlbnRBbmRE
ZXNjZW50IHsgYXNjZW50QW5kRGVzY2VudC5hc2NlbnQsIGluaXRpYWxMaW5lSGVpZ2h0IC0gYXNj
ZW50QW5kRGVzY2VudC5hc2NlbnQgfTsKLSAgICBlbHNlCi0gICAgICAgIG1faW5pdGlhbFN0cnV0
ID0geyB9OwotICAgIGNsZWFyKCk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lzQ2xvc2Vk
ID0gZmFsc2U7Ci0jZW5kaWYKLX0KK3ByaXZhdGU6CisgICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxp
bmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKKyAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0
SGFuZ2luZ0NvbnRlbnQoTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkg
Y29uc3Q7CisgICAgSW5saW5lTGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVC
dWlsZGVyOjpSdW4mKSBjb25zdDsKIAotdm9pZCBMaW5lQnVpbGRlcjo6Y2xlYXIoKQorICAgIGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAgICBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRl
KCk7IH0KKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1h
dHRpbmdDb250ZXh0OworICAgIExpbmVCb3gmIG1fbGluZUJveDsKKyAgICBMaW5lQnVpbGRlcjo6
UnVuTGlzdCYgbV9ydW5zOworICAgIElubGluZUxheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsK
K307CisKK0xpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKGNvbnN0IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgTGluZUJveCYgbGlu
ZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElubGluZUxheW91dFVuaXQgYXZhaWxh
YmxlV2lkdGgpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQorICAgICwgbV9saW5lQm94KGxpbmVCb3gpCisgICAgLCBtX3J1bnMocnVucykK
KyAgICAsIG1fYXZhaWxhYmxlV2lkdGgoYXZhaWxhYmxlV2lkdGgpCiB7Ci0gICAgbV9saW5lQm94
LnNldExvZ2ljYWxXaWR0aCh7IH0pOwotICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWRFbXB0
eSgpOwotICAgIG1fcnVucy5jbGVhcigpOwotICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50
LnJlc2V0KCk7Ci0gICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50ID0geyB9OwogfQogCi12b2lkIExpbmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQordm9pZCBMaW5l
Q29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRh
bEFsaWdubWVudCwgTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lKQogewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9pc0Nsb3NlZCA9IHRydWU7Ci0j
ZW5kaWYKLSAgICAvLyAxLiBSZW1vdmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQuCi0gICAg
Ly8gMi4gQWxpZ24gbWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHku
Ci0gICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7Ci0gICAgdmlzdWFsbHlDb2xs
YXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKLSAgICBpZiAobV9pc0ludHJpbnNpY1Npemlu
ZykKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFz
dExpbmUpOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBtX2F2YWlsYWJsZVdpZHRoICsgaGFu
Z2luZ0NvbnRlbnQud2lkdGgoKTsKKyAgICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8fCBhdmFpbGFi
bGVXaWR0aCA8PSAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50
ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0g
ICAgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0gICAgaWYgKGlzVmlzdWFsbHlFbXB0
eSgpKSB7Ci0gICAgICAgIG1fbGluZUJveC5yZXNldEFsaWdubWVudEJhc2VsaW5lKCk7Ci0gICAg
ICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHsgfSk7Ci0gICAgfQotICAgIC8vIFJlbW92
ZSBkZXNjZW50IHdoZW4gYWxsIGNvbnRlbnQgaXMgYmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBv
ZiB0aGVtIGhhdmUgZGVzY2VudC4KLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3Mo
KS5saW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhtX3J1bnMpKSB7Ci0gICAgICAgIG1fbGluZUJv
eC5zaHJpbmtWZXJ0aWNhbGx5KG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCk7
Ci0gICAgICAgIG1fbGluZUJveC5yZXNldERlc2NlbnQoKTsKKyAgICBpZiAoaG9yaXpvbnRhbEFs
aWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7CisgICAgICAgIGp1c3RpZnlSdW5z
KGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBhbGlnbkNvbnRl
bnRWZXJ0aWNhbGx5KCk7Ci0gICAgYWxpZ25Ib3Jpem9udGFsbHkoaGFuZ2luZ0NvbnRlbnQsIGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisKKyAgICBhdXRvIGFkanVzdG1lbnRGb3JBbGln
bm1lbnQgPSBbJl0gKGF1dG8gYXZhaWxhYmxlV2lkdGgpIC0+IE9wdGlvbmFsPElubGluZUxheW91
dFVuaXQ+IHsKKyAgICAgICAgc3dpdGNoIChob3Jpem9udGFsQWxpZ25tZW50KSB7CisgICAgICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRMZWZ0OgorICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICAg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpFbmQ6CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5p
dD4oYXZhaWxhYmxlV2lkdGgsIDApOworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRl
cjoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGggLyAyLCAw
KTsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9OworCisg
ICAgYXV0byBhZGp1c3RtZW50ID0gYWRqdXN0bWVudEZvckFsaWdubWVudChhdmFpbGFibGVXaWR0
aCk7CisgICAgaWYgKCFhZGp1c3RtZW50KQorICAgICAgICByZXR1cm47CisgICAgLy8gSG9yaXpv
bnRhbCBhbGlnbm1lbnQgbWVhbnMgdGhhdCB3ZSBub3Qgb25seSBhZGp1c3QgdGhlIHJ1bnMgYnV0
IGFsc28gbWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgbGluZSBib3ggaXMgYWxpZ25lZCBhcyB3
ZWxsCisgICAgLy8gZS5nLiA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHdpZHRoOiAx
MDBweDsiPmNlbnRlcmVkIHRleHQ8L2Rpdj4gOiB0aGUgbGluZSBib3ggd2lsbCBhbHNvIGJlIGNl
bnRlcmVkCisgICAgLy8gYXMgb3Bwb3NlZCB0byBzdGFydCBhdCAwcHggYWxsIHRoZSB3YXkgdG8g
W2NlbnRlcmVkIHRleHRdIHJ1bidzIHJpZ2h0IGVkZ2UuCisgICAgbV9saW5lQm94Lm1vdmVIb3Jp
em9udGFsbHkoKmFkanVzdG1lbnQpOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKQorICAg
ICAgICBydW4ubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CiB9CiAKLXZvaWQgTGluZUJ1
aWxkZXI6OmFsaWduQ29udGVudFZlcnRpY2FsbHkoKQordm9pZCBMaW5lQ29udGVudEFsaWduZXI6
OmFsaWduVmVydGljYWxseSgpCiB7Ci0gICAgQVNTRVJUKCFtX2lzSW50cmluc2ljU2l6aW5nKTsK
ICAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QgPSBtX2xpbmVCb3gubG9naWNhbFJlY3Qo
KTsKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewotICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxUb3AgPSAwOworICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlv
dXRVbml0IHsgfTsKICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwog
ICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFs
aWduKCk7CiAgICAgICAgIGF1dG8gYXNjZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKTsKQEAgLTE0NCwxMCArMTUxLDEwIEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFs
aWduQ29udGVudFZlcnRpY2FsbHkoKQogICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsK
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZToKICAgICAgICAgICAgIGlmIChy
dW4uaXNMaW5lQnJlYWsoKSB8fCBydW4uaXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgbG9naWNh
bFRvcCA9IGJhc2VsaW5lKCkgLSBhc2NlbnQ7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9
IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50OwogICAgICAgICAgICAgZWxz
ZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
OwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZSgpIC0gYXNjZW50IC0gYm94
R2VvbWV0cnkuYm9yZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigw
KTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2Vs
aW5lKCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSAtIGJveEdlb21ldHJ5LnBh
ZGRpbmdUb3AoKS52YWx1ZU9yKDApOwogICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3gu
aXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRp
bmdDb250ZXh0KCkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBs
YXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENv
bnRhaW5lckJveD4obGF5b3V0Qm94KSk7CiAgICAgICAgICAgICAgICAgLy8gU3BlYyBtYWtlcyB1
cyBnZW5lcmF0ZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KQEAgLTE2
NiwxNyArMTczLDE3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFsaWduQ29udGVudFZlcnRpY2FsbHko
KQogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAgICAgICAg
ICAgICAgICAgYXV0byBiYXNlbGluZUZyb21NYXJnaW5Cb3ggPSBib3hHZW9tZXRyeS5tYXJnaW5C
ZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOwotICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBiYXNlbGluZSgpIC0gYmFzZWxpbmVGcm9tTWFyZ2luQm94OworICAgICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIGJhc2Vs
aW5lRnJvbU1hcmdpbkJveDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
YXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGJhc2VsaW5lKCkgLSAoYm94
R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygp
LnZhbHVlT3IoMF9sdSkgKyBydW4ubG9naWNhbFJlY3QoKS5oZWlnaHQoKSArIGJveEdlb21ldHJ5
Lm1hcmdpbkFmdGVyKCkpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gu
YWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94
R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSArIHJ1bi5sb2dpY2FsUmVj
dCgpLmhlaWdodCgpICsgYm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CiAg
ICAgICAgICAgICBsb2dpY2FsVG9wID0gMF9sdTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBs
b2dpY2FsQm90dG9tKCkgLSBydW4ubG9naWNhbFJlY3QoKS5oZWlnaHQoKTsKKyAgICAgICAgICAg
IGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gubG9naWNhbEJvdHRvbSgpIC0gcnVuLmxvZ2ljYWxSZWN0
KCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CkBAIC0xODYsMTggKzE5MywxOCBA
QCB2b2lkIExpbmVCdWlsZGVyOjphbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCkKICAgICAgICAgLy8g
QWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhlIHJ1biBvdmVyZmxvd3MgdGhlIGxpbmUu
CiAgICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QuZXhwYW5kVmVydGljYWxseVRvQ29udGFp
bihydW4ubG9naWNhbFJlY3QoKSk7CiAgICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9tIHJlbGF0
aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBib3JkZXIg
Ym94IHRvcC9sZWZ0LgotICAgICAgICBydW4ubW92ZVZlcnRpY2FsbHkodGhpcy0+bG9naWNhbFRv
cCgpKTsKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkodGhpcy0+bG9naWNhbExlZnQoKSk7
CisgICAgICAgIHJ1bi5tb3ZlVmVydGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgpKTsKKyAg
ICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkobV9saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwogICAg
IH0KICAgICBtX2xpbmVCb3guc2V0U2Nyb2xsYWJsZU92ZXJmbG93KHNjcm9sbGFibGVPdmVyZmxv
d1JlY3QpOwogfQogCi12b2lkIExpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoKQordm9pZCBMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5z
KElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCiB7CiAgICAgQVNTRVJUKGF2YWlsYWJs
ZVdpZHRoID4gMCk7CiAgICAgLy8gQ29sbGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51
bWJlcnMgYW5kIGZpbmQgdGhlIGxhc3QgcnVuIHdpdGggY29udGVudC4KICAgICBhdXRvIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwotICAgIFJ1biogbGFzdFJ1bldpdGhDb250ZW50ID0g
bnVsbHB0cjsKKyAgICBMaW5lQnVpbGRlcjo6UnVuKiBsYXN0UnVuV2l0aENvbnRlbnQgPSBudWxs
cHRyOwogICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CiAgICAgICAgIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQgKz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKICAgICAg
ICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSkKQEAgLTIyOSwxNCArMjM2LDIxMiBA
QCB2b2lkIExpbmVCdWlsZGVyOjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJs
ZVdpZHRoKQogICAgIH0KIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHko
Y29uc3QgSGFuZ2luZ0NvbnRlbnQmIGhhbmdpbmdDb250ZW50LCBJc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQgaXNMYXN0TGluZSkKK3ZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNl
bGluZUFuZExpbmVIZWlnaHQoKQogewotICAgIEFTU0VSVCghbV9pc0ludHJpbnNpY1NpemluZyk7
CisgICAgdW5zaWduZWQgaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKKyAgICBhdXRv
IGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIHJ1
biA6IG1fcnVucykgeworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7
CisgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CiAKLSAgICBhdXRvIGF2
YWlsYWJsZVdpZHRoID0gdGhpcy0+YXZhaWxhYmxlV2lkdGgoKSArIGhhbmdpbmdDb250ZW50Lndp
ZHRoKCk7Ci0gICAgaWYgKG1fcnVucy5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkK
KyAgICAgICAgcnVuLnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKKwor
ICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7CisgICAgICAg
ICAgICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUgZWl0aGVyIHRocm91
Z2ggdGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBjb250ZXh0IHJvb3Qp
IG9yCisgICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFpbmVyIChzdGFydCku
IE5vcm1hbGx5IHRoZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0cmV0Y2ggdGhlIGxp
bmUuCisgICAgICAgICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7CisgICAg
ICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFz
ZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIuIAorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhhc1NlZW5EaXJl
Y3RUZXh0T3JMaW5lQnJlYWspIHsKKyAgICAgICAgICAgICAgICAvLyBlLmcgZGl2PmZpcnN0IHRl
eHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2
Pi4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0cnVlOworICAgICAgICAgICAgLy8gV2Ug
YXJlIGluIHF1aXJrcyBtb2RlIHdoZXJlIHRoZSBmb250LW1ldHJpY3MgbWlnaHQgY2hhbmdlIHRo
ZSBsaW5lIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0ZXh0IGNv
bnRlbnQgb24gdGhlIGxpbmUKKyAgICAgICAgICAgIC8vIG91dHNpZGUgb2YgYW4gaW5saW5lIGNv
bnRhaW5lci4KKyAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQnVpbGRlcjo6aGFs
ZkxlYWRpbmdNZXRyaWNzKHN0eWxlLmZvbnRNZXRyaWNzKCksIHN0eWxlLmNvbXB1dGVkTGluZUhl
aWdodCgpKTsKKyAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIoaGFsZkxl
YWRpbmcuYXNjZW50KTsKKyAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVy
KGhhbGZMZWFkaW5nLmRlc2NlbnQpOworICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxI
ZWlnaHRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuaGVpZ2h0KCkpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewor
ICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7CisgICAgICAgICAgICAv
LyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4K
KyAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRv
bid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0LgorICAgICAgICAgICAgYXV0byYgZm9u
dE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOworICAgICAgICAgICAgaWYgKHN0eWxlLnZl
cnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSkgeworICAgICAgICAgICAg
ICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZv
bnRNZXRyaWNzLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAg
Ly8gQm90aCBoYWxmbGVhZGluZyBhc2NlbnQgYW5kIGRlc2NlbnQgY291bGQgYmUgbmVnYXRpdmUg
KHRhbGwgZm9udCB2cy4gc21hbGwgbGluZS1oZWlnaHQgdmFsdWUpCisgICAgICAgICAgICAgICAg
aWYgKGhhbGZMZWFkaW5nLmRlc2NlbnQgPiAwKQorICAgICAgICAgICAgICAgICAgICBtX2xpbmVC
b3guc2V0RGVzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5kZXNjZW50KTsKKyAgICAgICAgICAg
ICAgICBpZiAoaGFsZkxlYWRpbmcuYXNjZW50ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbV9s
aW5lQm94LnNldEFzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5hc2NlbnQpOworICAgICAgICAg
ICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1fbGluZUJveC5hc2Nl
bnRBbmREZXNjZW50KCkuaGVpZ2h0KCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVp
Z2h0KCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
cnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxp
bmUgYW5kIGhlaWdodCBoYXZlIGFscmVhZHkgYmVlbiBhZGp1c3RlZCBhdCBDb250YWluZXJTdGFy
dC4KKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpOworICAg
ICAgICAgICAgLS1pbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydW4uaXNCb3goKSkgeworICAgICAgICAg
ICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94
KGxheW91dEJveCk7CisgICAgICAgICAgICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGJveEdlb21l
dHJ5Lm1hcmdpbkJveEhlaWdodCgpOworCisgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLnZlcnRp
Y2FsQWxpZ24oKSkgeworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTog
eworICAgICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxh
eW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gSW5saW5lLWJsb2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBo
YXZlIGJhc2VsaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRl
ID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2Fz
dDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGVy
ZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCisgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5lQm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3Bs
YXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gYmVmb3JlSGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9t
ZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwor
ICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0
ZXIoYmVmb3JlSGVpZ2h0ICsgbGFzdExpbmVCb3guYmFzZWxpbmUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdo
dCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm9u
IGlubGluZS1ibG9jayBib3hlcyBzaXQgb24gdGhlIGJhc2VsaW5lIChpbmNsdWRpbmcgdGhlaXIg
Ym90dG9tIG1hcmdpbikuCisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJ
ZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3Jl
IG5lZ2F0aXZlIGRlc2NlbnQgKHllcywgbmVnYXRpdmUgZGVzY2VudCBpcyBhIHRoaW5nKS4KKyAg
ICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFy
Z2luQm94SGVpZ2h0ICsgc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oMCwgbV9saW5lQm94LmFz
Y2VudEFuZERlc2NlbnQoKS5kZXNjZW50KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpUb3A6CisgICAgICAgICAgICAgICAgLy8gVG9wIGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hh
bmdlcyB0aGUgYmFzZWxpbmUsIGl0IG9ubHkgcHVzaGVzIHRoZSBib3R0b20gb2YgdGhlIGxpbmUg
ZnVydGhlciBkb3duLgorICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0
SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbTogeworICAgICAgICAgICAgICAgIC8v
IEJvdHRvbSBhbGlnbmVkLCB0YWxsIGNvbnRlbnQgcHVzaGVzIHRoZSBiYXNlbGluZSBmdXJ0aGVy
IGRvd24gZnJvbSB0aGUgbGluZSB0b3AuCisgICAgICAgICAgICAgICAgYXV0byBsaW5lTG9naWNh
bEhlaWdodCA9IG1fbGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgaWYg
KG1hcmdpbkJveEhlaWdodCA+IGxpbmVMb2dpY2FsSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7
CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGluZUlmR3Jl
YXRlcihtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSArIChtYXJnaW5Cb3hIZWlnaHQgLSBs
aW5lTG9naWNhbEhlaWdodCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQor
fQorCitIYW5naW5nQ29udGVudCBMaW5lQ29udGVudEFsaWduZXI6OmNvbGxlY3RIYW5naW5nQ29u
dGVudChMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCkgY29uc3QKK3sKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gSGFu
Z2luZ0NvbnRlbnQgeyB9OworICAgIGlmIChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPT0g
TGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICBo
YW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgZm9yIChhdXRvJiBydW4gOiBX
VEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRh
aW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBoYW5naW5n
Q29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1
bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBX
aGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFRoaXMg
aXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0
ZXNwYWNlLgorICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVz
cGFjZVdpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Cit9CisKK0lu
bGluZUxheW91dFVuaXQgTGluZUNvbnRlbnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0
IExpbmVCdWlsZGVyOjpSdW4mIHJ1bikgY29uc3QKK3sKKyAgICBhdXRvJiBmb250TWV0cmljcyA9
IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4u
aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisg
ICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisg
ICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKKworICAgIGF1dG8mIGxheW91dEJv
eCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdD
b250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICBpZiAobGF5b3V0Qm94Lmlz
UmVwbGFjZWRCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKKworICAgIC8vIE5vbi1y
ZXBsYWNlZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0IG1p
c2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdpbiBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVudCBo
ZWlnaHQgaGVyZS4KKyAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Cit9
CisKK0xpbmVCdWlsZGVyOjpMaW5lQnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIE9wdGlvbmFsPFRleHRBbGlnbk1vZGU+IGhvcml6
b250YWxBbGlnbm1lbnQsIEludHJpbnNpY1NpemluZyBpbnRyaW5zaWNTaXppbmcpCisgICAgOiBt
X2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwg
bV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQobV9ydW5zKQorICAgICwgbV9ob3Jpem9udGFsQWxp
Z25tZW50KGhvcml6b250YWxBbGlnbm1lbnQpCisgICAgLCBtX2lzSW50cmluc2ljU2l6aW5nKGlu
dHJpbnNpY1NpemluZyA9PSBJbnRyaW5zaWNTaXppbmc6OlllcykKKyAgICAsIG1fc2hvdWxkSWdu
b3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKK3sK
K30KKworTGluZUJ1aWxkZXI6On5MaW5lQnVpbGRlcigpCit7Cit9CisKK3ZvaWQgTGluZUJ1aWxk
ZXI6OmluaXRpYWxpemUoY29uc3QgQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzKQoreworICAgIG1f
bGluZUxvZ2ljYWxXaWR0aCA9IGNvbnN0cmFpbnRzLmF2YWlsYWJsZUxvZ2ljYWxXaWR0aDsKKyAg
ICBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gY29uc3RyYWludHMubGluZUlzQ29uc3RyYWluZWRCeUZs
b2F0OworICAgIGF1dG8gaW5pdGlhbExpbmVIZWlnaHQgPSBjb25zdHJhaW50cy5saW5lSGVpZ2h0
OworICAgIGF1dG8gbGluZVJlY3QgPSBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgY29uc3RyYWludHMu
bG9naWNhbFRvcExlZnQsIDBfbHUsIGluaXRpYWxMaW5lSGVpZ2h0IH07CisgICAgYXV0byBhc2Nl
bnRBbmREZXNjZW50ID0gTGluZUJ1aWxkZXI6OmhhbGZMZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5n
Q29udGV4dCgpLnJvb3QoKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCksIGluaXRpYWxMaW5lSGVpZ2h0
KTsKKyAgICBtX2xpbmVCb3ggPSBMaW5lQm94IHsgbGluZVJlY3QsIGFzY2VudEFuZERlc2NlbnQg
fTsKKyAgICBpZiAoIWZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKS5pbk5vUXVpcmtz
TW9kZSgpKQorICAgICAgICBtX2luaXRpYWxTdHJ1dCA9IEFzY2VudEFuZERlc2NlbnQgeyBhc2Nl
bnRBbmREZXNjZW50LmFzY2VudCwgaW5pdGlhbExpbmVIZWlnaHQgLSBhc2NlbnRBbmREZXNjZW50
LmFzY2VudCB9OworICAgIGVsc2UKKyAgICAgICAgbV9pbml0aWFsU3RydXQgPSB7IH07CisgICAg
Y2xlYXIoKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIG1faXNDbG9zZWQgPSBmYWxzZTsKKyNl
bmRpZgorfQorCit2b2lkIExpbmVCdWlsZGVyOjpjbGVhcigpCit7CisgICAgbV9saW5lQm94LnNl
dExvZ2ljYWxXaWR0aCh7IH0pOworICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWRFbXB0eSgp
OworICAgIG1fcnVucy5jbGVhcigpOworICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LnJl
c2V0KCk7CisgICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdD
b250ZW50ID0geyB9OworfQorCit2b2lkIExpbmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQgaXNMYXN0TGluZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIG1f
aXNDbG9zZWQgPSB0cnVlOworI2VuZGlmCisgICAgLy8gMS4gUmVtb3ZlIHRyaW1tYWJsZSB0cmFp
bGluZyBjb250ZW50LgorICAgIC8vIDIuIEFsaWduIG1lcmdlZCBydW5zIGJvdGggdmVydGljYWxs
eSBhbmQgaG9yaXpvbnRhbGx5LgorICAgIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgp
OworICAgIHZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KCk7CisgICAgaWYg
KG1faXNJbnRyaW5zaWNTaXppbmcpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gY29udGVu
dEFsaWduZXIgPSBMaW5lQ29udGVudEFsaWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpLCBtX2xp
bmVCb3gsIG1fcnVucywgYXZhaWxhYmxlV2lkdGgoKSB9OworICAgIGNvbnRlbnRBbGlnbmVyLmFk
anVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOworICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkoKSkg
eworICAgICAgICBtX2xpbmVCb3gucmVzZXRBbGlnbm1lbnRCYXNlbGluZSgpOworICAgICAgICBt
X2xpbmVCb3guc2V0TG9naWNhbEhlaWdodCh7IH0pOworICAgIH0KKyAgICAvLyBSZW1vdmUgZGVz
Y2VudCB3aGVuIGFsbCBjb250ZW50IGlzIGJhc2VsaW5lIGFsaWduZWQgYnV0IG5vbmUgb2YgdGhl
bSBoYXZlIGRlc2NlbnQuCisgICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0KCkucXVpcmtzKCkubGlu
ZURlc2NlbnROZWVkc0NvbGxhcHNpbmcobV9ydW5zKSkgeworICAgICAgICBtX2xpbmVCb3guc2hy
aW5rVmVydGljYWxseShtX2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpOworICAg
ICAgICBtX2xpbmVCb3gucmVzZXREZXNjZW50KCk7CisgICAgfQorICAgIGNvbnRlbnRBbGlnbmVy
LmFsaWduVmVydGljYWxseSgpOworCiAgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1l
bnQgPSBbJl0gewogICAgICAgICBBU1NFUlQobV9ob3Jpem9udGFsQWxpZ25tZW50KTsKICAgICAg
ICAgaWYgKG1faG9yaXpvbnRhbEFsaWdubWVudCAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQpA
QCAtMjQ0LDQ3ICs0NDksMTEgQEAgdm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHko
Y29uc3QgSGFuZ2luZ0NvbnRlbnQmIGhhbmdpbmdDb250ZW50LCBJc0xhc3QKICAgICAgICAgLy8g
VGV4dCBpcyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRo
ZSB0ZXh0LWp1c3RpZnkgcHJvcGVydHksCiAgICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkg
ZmlsbCB0aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxp
Z24tbGFzdCwKICAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsg
b3IgdGhlIGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KLSAgICAgICAgaWYgKG1f
cnVucy5sYXN0KCkuaXNMaW5lQnJlYWsoKSB8fCBpc0xhc3RMaW5lID09IElzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xpbmVCcmVh
aygpIHx8IGlzTGFzdExpbmUgPT0gTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudDo6WWVzKQogICAgICAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6OlN0YXJ0OwogICAg
ICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKLSAgICB9KCk7Ci0KLSAgICBpZiAo
Y29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsK
LSAgICAgICAganVzdGlmeVJ1bnMoYXZhaWxhYmxlV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byBhZGp1c3RtZW50Rm9yQWxpZ25tZW50ID0gW10gKGF1dG8gaG9yaXpv
bnRhbEFsaWdubWVudCwgYXV0byBhdmFpbGFibGVXaWR0aCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5
b3V0VW5pdD4gewotICAgICAgICBzd2l0Y2ggKGhvcml6b250YWxBbGlnbm1lbnQpIHsKLSAgICAg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OldlYktpdExlZnQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAg
ICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OkVuZDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlvdXRV
bml0PihhdmFpbGFibGVXaWR0aCwgMCk7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2Vu
dGVyOgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCAvIDIs
IDApOwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4geyB9OwogICAgIH07Ci0K
LSAgICBhdXRvIGFkanVzdG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGNvbXB1dGVkSG9y
aXpvbnRhbEFsaWdubWVudCwgYXZhaWxhYmxlV2lkdGgpOwotICAgIGlmICghYWRqdXN0bWVudCkK
LSAgICAgICAgcmV0dXJuOwotICAgIC8vIEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQg
d2Ugbm90IG9ubHkgYWRqdXN0IHRoZSBydW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQotICAgIC8vIHRo
YXQgdGhlIGxpbmUgYm94IGlzIGFsaWduZWQgYXMgd2VsbAotICAgIC8vIGUuZy4gPGRpdiBzdHls
ZT0idGV4dC1hbGlnbjogY2VudGVyOyB3aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+
IDogdGhlIGxpbmUgYm94IHdpbGwgYWxzbyBiZSBjZW50ZXJlZAotICAgIC8vIGFzIG9wcG9zZWQg
dG8gc3RhcnQgYXQgMHB4IGFsbCB0aGUgd2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdo
dCBlZGdlLgotICAgIG1fbGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAg
ICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykKLSAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHko
KmFkanVzdG1lbnQpOworICAgIGNvbnRlbnRBbGlnbmVyLmFsaWduSG9yaXpvbnRhbGx5KGNvbXB1
dGVkSG9yaXpvbnRhbEFsaWdubWVudCgpLCBpc0xhc3RMaW5lKTsKIH0KIAogdm9pZCBMaW5lQnVp
bGRlcjo6cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCkKQEAgLTM2NSwzMSArNTM0LDYg
QEAgdm9pZCBMaW5lQnVpbGRlcjo6dmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRl
bnQoKQogICAgIG1fbGluZUJveC5zaHJpbmtIb3Jpem9udGFsbHkodHJpbW1lZENvbnRlbnRXaWR0
aCk7CiB9CiAKLUhhbmdpbmdDb250ZW50IExpbmVCdWlsZGVyOjpjb2xsZWN0SGFuZ2luZ0NvbnRl
bnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCkKLXsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OwotICAg
IC8vIENhbid0IHNldHVwIGhhbmdpbmcgY29udGVudCB3aXRoIHJlbW92YWJsZSB0cmFpbGluZyB3
aGl0ZXNwYWNlLgotICAgIEFTU0VSVChtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5pc0VtcHR5
KCkpOwotICAgIGlmIChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPT0gSXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50OjpZZXMpCi0gICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0
aW9uYWwoKTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UobV9y
dW5zKSkgewotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250
YWluZXJFbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocnVuLmlzTGlu
ZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwo
KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcnVuLmhh
c1RyYWlsaW5nV2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIENo
ZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNwYWNlLgotICAgICAgICBp
ZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIgYSBub3JtYWwgb3IgY29u
ZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGhhbmdpbmdD
b250ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSk7Ci0gICAgfQotICAg
IHJldHVybiBoYW5naW5nQ29udGVudDsKLX0KLQogdm9pZCBMaW5lQnVpbGRlcjo6bW92ZUxvZ2lj
YWxMZWZ0KElubGluZUxheW91dFVuaXQgZGVsdGEpCiB7CiAgICAgaWYgKCFkZWx0YSkKQEAgLTU0
OCwxMjggKzY5Miw2IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZExpbmVCcmVhayhjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtKQogICAgIG1fcnVucy5hcHBlbmQoeyBkb3duY2FzdDxJbmxp
bmVTb2Z0TGluZUJyZWFrSXRlbT4oaW5saW5lSXRlbSksIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSB9
KTsKIH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkK
LXsKLSAgICB1bnNpZ25lZCBpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwgPSAwOwotICAgIGF1
dG8gaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhayA9IGZhbHNlOwotICAgIGZvciAoYXV0byYg
cnVuIDogbV9ydW5zKSB7Ci0gICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3go
KTsKLSAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLQotICAgICAgICBy
dW4uc2V0TG9naWNhbEhlaWdodChydW5Db250ZW50SGVpZ2h0KHJ1bikpOwotCi0gICAgICAgIGlm
IChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIC8vIEZv
ciB0ZXh0IGNvbnRlbnQgd2Ugc2V0IHRoZSBiYXNlbGluZSBlaXRoZXIgdGhyb3VnaCB0aGUgaW5p
dGlhbCBzdHJ1dCAoc2V0IGJ5IHRoZSBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdCkgb3IKLSAgICAg
ICAgICAgIC8vIHRocm91Z2ggdGhlIGlubGluZSBjb250YWluZXIgKHN0YXJ0KS4gTm9ybWFsbHkg
dGhlIHRleHQgY29udGVudCBpdHNlbGYgZG9lcyBub3Qgc3RyZXRjaCB0aGUgbGluZS4KLSAgICAg
ICAgICAgIGlmICghbV9pbml0aWFsU3RydXQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUg
aW4gc3RhbmRhcmRzIG1vZGUgd2hlcmUgdGhlIGJhc2VsaW5lIGFuZCBsaW5lIGhlaWdodCBhcmUg
ZXhwbGljdC4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpIHsKLSAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGFkanVzdGVkIHRoZSBsaW5lIGhlaWdodC9iYXNlbGluZSB0aHJv
dWdoIHRoZSBwYXJlbnQgaW5saW5lIGNvbnRhaW5lci4gCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzU2VlbkRpcmVjdFRleHRPckxp
bmVCcmVhaykgewotICAgICAgICAgICAgICAgIC8vIGUuZyBkaXY+Zmlyc3QgdGV4dDwvZGl2PiBv
ciA8ZGl2PjxzcGFuPm5lc3RlZDxzcGFuPmZpcnN0IGRpcmVjdCB0ZXh0PC9kaXY+LgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaGFzU2VlbkRp
cmVjdFRleHRPckxpbmVCcmVhayA9IHRydWU7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgaW4gcXVp
cmtzIG1vZGUgd2hlcmUgdGhlIGZvbnQtbWV0cmljcyBtaWdodCBjaGFuZ2UgdGhlIGxpbmUgbGlu
ZSBoZWlnaHQvYmFzZWxpbmUgYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRleHQgY29udGVudCBvbiB0
aGUgbGluZQotICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiBhbiBpbmxpbmUgY29udGFpbmVyLgot
ICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlcihtX2luaXRpYWxTdHJ1dC0+
YXNjZW50KTsKLSAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKG1faW5p
dGlhbFN0cnV0LT5kZXNjZW50KTsKLSAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVp
Z2h0SWZHcmVhdGVyKG1faW5pdGlhbFN0cnV0LT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7
Ci0gICAgICAgICAgICArK2lubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKLSAgICAgICAgICAg
IC8vIElubGluZSBjb250YWluZXJzIHN0cmV0Y2ggdGhlIGxpbmUgYnkgdGhlaXIgZm9udCBzaXpl
LgotICAgICAgICAgICAgLy8gVmVydGljYWwgbWFyZ2lucywgcGFkZGluZyBhbmQgYm9yZGVycyBk
b24ndCBjb250cmlidXRlIHRvIHRoZSBsaW5lIGhlaWdodC4KLSAgICAgICAgICAgIGF1dG8mIGZv
bnRNZXRyaWNzID0gc3R5bGUuZm9udE1ldHJpY3MoKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS52
ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIGhhbGZMZWFkaW5nID0gaGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBz
dHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gQm90aCBoYWxm
bGVhZGluZyBhc2NlbnQgYW5kIGRlc2NlbnQgY291bGQgYmUgbmVnYXRpdmUgKHRhbGwgZm9udCB2
cy4gc21hbGwgbGluZS1oZWlnaHQgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFk
aW5nLmRlc2NlbnQgPiAwKQotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2Vu
dElmR3JlYXRlcihoYWxmTGVhZGluZy5kZXNjZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoaGFs
ZkxlYWRpbmcuYXNjZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFz
Y2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5hc2NlbnQpOwotICAgICAgICAgICAgICAgIG1fbGlu
ZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50
KCkuaGVpZ2h0KCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQ29udGFp
bmVyRW5kKCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdo
dCBoYXZlIGFscmVhZHkgYmVlbiBhZGp1c3RlZCBhdCBDb250YWluZXJTdGFydC4KLSAgICAgICAg
ICAgIEFTU0VSVChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpOwotICAgICAgICAgICAgLS1p
bmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChydW4uaXNCb3goKSkgewotICAgICAgICAgICAgYXV0byYgYm94
R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7
Ci0gICAgICAgICAgICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJv
eEhlaWdodCgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSkg
ewotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAg
ICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3Rh
Ymxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gSW5saW5lLWJsb2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZlIGJhc2VsaW5l
cy4KLSAgICAgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3Rh
dGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJC
b3g+KGxheW91dEJveCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUg
YXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8mIGxhc3RMaW5lQm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250
ZW50KCktPmxpbmVCb3hlcy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYmVmb3Jl
SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJU
b3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAgICAgICAg
ICAgICAgICBtX2xpbmVCb3guc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYmVmb3JlSGVp
Z2h0ICsgbGFzdExpbmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGlu
ZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTm9uIGlubGluZS1ibG9j
ayBib3hlcyBzaXQgb24gdGhlIGJhc2VsaW5lIChpbmNsdWRpbmcgdGhlaXIgYm90dG9tIG1hcmdp
bikuCi0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIobWFy
Z2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZlIGRl
c2NlbnQgKHllcywgbmVnYXRpdmUgZGVzY2VudCBpcyBhIHRoaW5nKS4KLSAgICAgICAgICAgICAg
ICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0
ICsgc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oMCwgbV9saW5lQm94LmFzY2VudEFuZERlc2Nl
bnQoKS5kZXNjZW50KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0g
ICAgICAgICAgICAgICAgLy8gVG9wIGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFz
ZWxpbmUsIGl0IG9ubHkgcHVzaGVzIHRoZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBkb3du
LgotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1h
cmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OkJvdHRvbTogewotICAgICAgICAgICAgICAgIC8vIEJvdHRvbSBhbGln
bmVkLCB0YWxsIGNvbnRlbnQgcHVzaGVzIHRoZSBiYXNlbGluZSBmdXJ0aGVyIGRvd24gZnJvbSB0
aGUgbGluZSB0b3AuCi0gICAgICAgICAgICAgICAgYXV0byBsaW5lTG9naWNhbEhlaWdodCA9IG1f
bGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmdpbkJveEhl
aWdodCA+IGxpbmVMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJv
eC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fbGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihtX2xpbmVC
b3guYWxpZ25tZW50QmFzZWxpbmUoKSArIChtYXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhl
aWdodCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1JbmxpbmVM
YXlvdXRVbml0IExpbmVCdWlsZGVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IFJ1biYgcnVuKSBj
b25zdAotewotICAgIEFTU0VSVCghbV9pc0ludHJpbnNpY1NpemluZyk7Ci0gICAgYXV0byYgZm9u
dE1ldHJpY3MgPSBydW4uc3R5bGUoKS5mb250TWV0cmljcygpOwotICAgIGlmIChydW4uaXNUZXh0
KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWln
aHQoKTsKLQotICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5l
ckVuZCgpKQotICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBhdXRv
JiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgaWYgKGxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVk
KCkpCi0gICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7Ci0KLSAg
ICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29r
cyBhIGJpdCBtaXNsZWFkaW5nIGJ1dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhl
IGNvbnRlbnQgaGVpZ2h0IGhlcmUuCi0gICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhl
aWdodCgpOwotfQotCiBib29sIExpbmVCdWlsZGVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoY29uc3Qg
UnVuJiBydW4pIGNvbnN0CiB7CiAgICAgaWYgKHJ1bi5pc1RleHQoKSkKQEAgLTcxNiwyMSArNzM4
LDExIEBAIEFzY2VudEFuZERlc2NlbnQgTGluZUJ1aWxkZXI6OmhhbGZMZWFkaW5nTWV0cmljcyhj
b25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MsCiAgICAgcmV0dXJuIHsgYWRqdXN0ZWRBc2Nl
bnQsIGFkanVzdGVkRGVzY2VudCB9OwogfQogCi1MYXlvdXRTdGF0ZSYgTGluZUJ1aWxkZXI6Omxh
eW91dFN0YXRlKCkgY29uc3QKLXsgCi0gICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5
b3V0U3RhdGUoKTsKLX0KLQogY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIExpbmVCdWls
ZGVyOjpmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ7CiB9CiAKLWNvbnN0IENvbnRhaW5lckJveCYgTGluZUJ1aWxkZXI6OnJv
b3QoKSBjb25zdAotewotICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKTsKLX0K
LQogTGluZUJ1aWxkZXI6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6VHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50KFJ1bkxpc3QmIHJ1bnMpCiAgICAgOiBtX3J1bnMocnVucykKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
QnVpbGRlci5oCmluZGV4IDFhNmFlMDA2YThkOWI2ZTAzNGU2NTRhNDU2NDM3NDNlNWMzMjA3Mjgu
LjgyMmQ3ZTUyZjY1NzFjMzdkZTAzY2E5NWU5NmY2ZDFmYTk1MzY3ZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1
aWxkZXIuaApAQCAtMzUsMTMgKzM1LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgTGF5b3V0IHsKIAotc3RydWN0IEhhbmdpbmdDb250ZW50OwogY2xhc3MgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ7CiBjbGFzcyBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbTsKK2NsYXNzIExpbmVD
b250ZW50QWxpZ25lcjsKIAogY2xhc3MgTGluZUJ1aWxkZXIgewotICAgIHN0cnVjdCBDb250aW51
b3VzQ29udGVudDsKLQogcHVibGljOgogICAgIHN0cnVjdCBDb25zdHJhaW50cyB7CiAgICAgICAg
IElubGluZUxheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0OwpAQCAtNjQsNyArNjIsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjbGVhcigpOwogICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQm94LmlzQ29uc2lkZXJlZEVtcHR5KCk7IH0KICAgICBib29sIGhhc0lu
dHJ1c2l2ZUZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRydXNpdmVGbG9hdDsgfQotICAg
IElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBsb2dpY2Fs
V2lkdGgoKSAtIGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsgfQorICAgIElubGluZUxheW91dFVuaXQg
YXZhaWxhYmxlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGggLSBjb250
ZW50TG9naWNhbFdpZHRoKCk7IH0KIAogICAgIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlVHJh
aWxpbmdXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50Lndp
ZHRoKCk7IH0KICAgICBib29sIGlzVHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmlzVHJhaWxpbmdSdW5GdWxseVRyaW1t
YWJsZSgpOyB9CkBAIC05Miw2ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBMaW5lQnVpbGRlcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVD
b250ZW50QWxpZ25lcjsKIAogICAgICAgICBSdW4oY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwg
Ym9vbCBuZWVkc0h5cGVuKTsKICAgICAgICAgUnVuKGNvbnN0IElubGluZVNvZnRMaW5lQnJlYWtJ
dGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCk7CkBAIC0xNDksMTggKzE0OCw4IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgQXNjZW50QW5kRGVzY2VudCBoYWxmTGVhZGluZ01ldHJpY3Mo
Y29uc3QgRm9udE1ldHJpY3MmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KTsK
IAogcHJpdmF0ZToKLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVCb3gubG9naWNhbFRvcCgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dp
Y2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxCb3R0b20oKTsgfQot
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUJveC5sb2dpY2FsTGVmdCgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQo
KSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdCgpICsgbG9naWNhbFdpZHRoKCk7IH0KLQotICAg
IElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTG9n
aWNhbFdpZHRoOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsgfQotCiAgICAgSW5saW5lTGF5b3V0
VW5pdCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2lj
YWxXaWR0aCgpOyB9CiAgICAgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxSaWdodCgpOyB9Ci0gICAgSW5saW5lTGF5
b3V0VW5pdCBiYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5hbGlnbm1lbnRCYXNl
bGluZSgpOyB9CiAKICAgICBzdHJ1Y3QgSW5saW5lUnVuRGV0YWlscyB7CiAgICAgICAgIElubGlu
ZUxheW91dFVuaXQgbG9naWNhbFdpZHRoIHsgMCB9OwpAQCAtMTc3LDIwICsxNjYsMTAgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7CiAgICAg
dm9pZCB2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpOwotICAgIEhhbmdp
bmdDb250ZW50IGNvbGxlY3RIYW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQpOwotICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoY29uc3QgSGFuZ2luZ0NvbnRlbnQmLCBJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIHZvaWQgYWxpZ25Db250ZW50VmVydGlj
YWxseSgpOwotCi0gICAgdm9pZCBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKLSAgICBJ
bmxpbmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgUnVuJikgY29uc3Q7Ci0KLSAg
ICB2b2lkIGp1c3RpZnlSdW5zKElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwogCiAg
ICAgYm9vbCBpc1Zpc3VhbGx5Tm9uRW1wdHkoY29uc3QgUnVuJikgY29uc3Q7CiAKLSAgICBMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdDsKLSAgICBjb25zdCBDb250YWluZXJC
b3gmIHJvb3QoKSBjb25zdDsKIAogICAgIHN0cnVjdCBUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQg
ewogICAgICAgICBUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQoUnVuTGlzdCYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407297</attachid>
            <date>2020-08-26 07:52:16 -0700</date>
            <delta_ts>2020-08-26 09:46:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214527-20200826075215.patch</filename>
            <type>text/plain</type>
            <size>37432</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNhNGJhNTU0M2IwMDQy
ZjVkNDFhNmE3YmNjN2Y5Y2Q0Njk5YTE4NC4uNjgzYjkxYTI1MTFlNDJhYTRhMzgwNTNlYzU2ODI3
OTQ1Y2U2ZWE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIwLTA4LTI2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIGlu
bGluZSBydW4gYWxpZ25tZW50IGxvZ2ljIHRvIGEgZGVkaWNhdGVkIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ1MjcKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY2MTE1Nzk2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9yIG1vdmluZyBsaW5lIGFs
aWdubWVudCBsb2dpYyB0byBMaW5lQm94IChMaW5lQnVpbGRlciB3aWxsIG5vdCBnb2luZyB0byBi
ZSByZXNwb25zaWJsZSBmb3IgYWxpZ25pbmcgcnVucyBvbiB0aGUgbGluZSkuCisKKyAgICAgICAg
KiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oOgorICAgICAgICAqIGxheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6bGF5b3V0U3RhdGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OkxpbmVD
b250ZW50QWxpZ25lcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxp
Z25lcjo6YWxpZ25Ib3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Q29udGVudEFsaWduZXI6OmFsaWduVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6anVzdGlmeVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhh
bmdpbmdDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRl
bnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJ1aWxkZXI6OkxpbmVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJ1aWxkZXI6On5MaW5lQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCdWlsZGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJ1aWxkZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFsaWduQ29u
dGVudFZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
QnVpbGRlcjo6anVzdGlmeVJ1bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFkanVzdEJhc2VsaW5l
QW5kTGluZUhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpydW5Db250ZW50SGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxheW91dFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJvb3QgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphdmFpbGFibGVXaWR0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb250ZW50TG9n
aWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6
OmxvZ2ljYWxUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQnVpbGRlcjo6bG9naWNhbEJvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsTGVmdCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsb2dpY2FsUmlnaHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6bG9naWNh
bFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lQnVpbGRlcjo6YmFzZWxpbmUgY29uc3QpOiBEZWxldGVkLgorCiAyMDIwLTA4
LTI2ICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KIAogICAgICAgICBX
aGVuIGNhY2hpbmcgdGhlIEFjY2Vzc2liaWxpdHlUZXh0IHByb3BlcnR5IGluIEFYSXNvbGF0ZWRP
YmplY3QsIHRoZSBTdHJpbmdzIG5lZWQgdG8gYmUgaXNvbGF0ZWRDb3BpZWQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IGU5NGQ2ZjRmYTQxNzYzZWZiNzcz
ODJkOGNlYWVhM2RkOGY4ZTJkYmEuLjU2Y2VlNjMxZmE3YzkxNTgyNmMxNGQ4NTZhYjIzOTg5N2Qy
MDQ5ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0x
MDksMTAgKzEwOSwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgRGlzcGxheTo6Qm94JiBnZW9tZXRy
eUZvckJveChjb25zdCBCb3gmLCBPcHRpb25hbDxFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxsb3B0
KSBjb25zdDsKICAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJldHVybiAq
bV9yb290OyB9CiAKKyAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKKwogcHJv
dGVjdGVkOgogICAgIHVzaW5nIExheW91dFF1ZXVlID0gVmVjdG9yPGNvbnN0IEJveCo+OwogCi0g
ICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3Q7CiAgICAgY29uc3QgRm9ybWF0dGlu
Z1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdTdGF0
ZTsgfQogICAgIEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgeyByZXR1cm4gbV9m
b3JtYXR0aW5nU3RhdGU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IDk0NTRiOTNh
ZTg2Yzg0NTIyYWM3Mjk1ZWRmZDY2MzdmMDM1YzMwMDkuLmU1Yzc5OTZjNjFjNTBjYWM2ODI1ZDg5
OGRlMDFlOTNhYjQzNmVhZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTY0LDc5ICs2
NCw4NiBAQCB2b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgpCiAgICAgbV93aWR0aCA9ICAwOwog
fQogCi1MaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBPcHRpb25hbDxUZXh0QWxpZ25Nb2RlPiBob3Jp
em9udGFsQWxpZ25tZW50LCBJbnRyaW5zaWNTaXppbmcgaW50cmluc2ljU2l6aW5nKQotICAgIDog
bV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKLSAgICAs
IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykKLSAgICAsIG1faG9yaXpvbnRhbEFs
aWdubWVudChob3Jpem9udGFsQWxpZ25tZW50KQotICAgICwgbV9pc0ludHJpbnNpY1NpemluZyhp
bnRyaW5zaWNTaXppbmcgPT0gSW50cmluc2ljU2l6aW5nOjpZZXMpCi0gICAgLCBtX3Nob3VsZEln
bm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyhSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpCi17
Ci19CitjbGFzcyBMaW5lQ29udGVudEFsaWduZXIgeworcHVibGljOgorICAgIExpbmVDb250ZW50
QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExpbmVCb3gmLCBMaW5lQnVp
bGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwogCi1MaW5l
QnVpbGRlcjo6fkxpbmVCdWlsZGVyKCkKLXsKLX0KKyAgICB2b2lkIGFsaWduSG9yaXpvbnRhbGx5
KFRleHRBbGlnbk1vZGUsIExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQp
OworICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7CisgICAgdm9pZCBhZGp1c3RCYXNlbGluZUFu
ZExpbmVIZWlnaHQoKTsKIAotdm9pZCBMaW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShjb25zdCBDb25z
dHJhaW50cyYgY29uc3RyYWludHMpCi17Ci0gICAgbV9saW5lTG9naWNhbFdpZHRoID0gY29uc3Ry
YWludHMuYXZhaWxhYmxlTG9naWNhbFdpZHRoOwotICAgIG1faGFzSW50cnVzaXZlRmxvYXQgPSBj
b25zdHJhaW50cy5saW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQ7Ci0gICAgYXV0byBpbml0aWFsTGlu
ZUhlaWdodCA9IGNvbnN0cmFpbnRzLmxpbmVIZWlnaHQ7Ci0gICAgYXV0byBsaW5lUmVjdCA9IERp
c3BsYXk6OklubGluZVJlY3QgeyBjb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgMF9sdSwgaW5p
dGlhbExpbmVIZWlnaHQgfTsKLSAgICBhdXRvIGFzY2VudEFuZERlc2NlbnQgPSBMaW5lQnVpbGRl
cjo6aGFsZkxlYWRpbmdNZXRyaWNzKHJvb3QoKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCksIGluaXRp
YWxMaW5lSGVpZ2h0KTsKLSAgICBtX2xpbmVCb3ggPSBMaW5lQm94IHsgbGluZVJlY3QsIGFzY2Vu
dEFuZERlc2NlbnQgfTsKLSAgICBpZiAoIWxheW91dFN0YXRlKCkuaW5Ob1F1aXJrc01vZGUoKSkK
LSAgICAgICAgbV9pbml0aWFsU3RydXQgPSBBc2NlbnRBbmREZXNjZW50IHsgYXNjZW50QW5kRGVz
Y2VudC5hc2NlbnQsIGluaXRpYWxMaW5lSGVpZ2h0IC0gYXNjZW50QW5kRGVzY2VudC5hc2NlbnQg
fTsKLSAgICBlbHNlCi0gICAgICAgIG1faW5pdGlhbFN0cnV0ID0geyB9OwotICAgIGNsZWFyKCk7
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2lzQ2xvc2VkID0gZmFsc2U7Ci0jZW5kaWYKLX0K
K3ByaXZhdGU6CisgICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJs
ZVdpZHRoKTsKKyAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoTGluZUJ1
aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7CisgICAgSW5saW5lTGF5
b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mKSBjb25zdDsK
IAotdm9pZCBMaW5lQnVpbGRlcjo6Y2xlYXIoKQorICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ7IH0KKyAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJl
dHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KKworICAgIGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworICAgIExp
bmVCb3gmIG1fbGluZUJveDsKKyAgICBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOworICAg
IElubGluZUxheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKK307CisKK0xpbmVDb250ZW50QWxp
Z25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIHJ1bnMsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCisgICAgOiBtX2lu
bGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwgbV9s
aW5lQm94KGxpbmVCb3gpCisgICAgLCBtX3J1bnMocnVucykKKyAgICAsIG1fYXZhaWxhYmxlV2lk
dGgoYXZhaWxhYmxlV2lkdGgpCiB7Ci0gICAgbV9saW5lQm94LnNldExvZ2ljYWxXaWR0aCh7IH0p
OwotICAgIG1fbGluZUJveC5zZXRJc0NvbnNpZGVyZWRFbXB0eSgpOwotICAgIG1fcnVucy5jbGVh
cigpOwotICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LnJlc2V0KCk7Ci0gICAgbV9saW5l
SXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50ID0geyB9OwogfQog
Ci12b2lkIExpbmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQordm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWdu
SG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgTGluZUJ1aWxk
ZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQogewotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgbV9pc0Nsb3NlZCA9IHRydWU7Ci0jZW5kaWYKLSAgICAvLyAxLiBSZW1v
dmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQuCi0gICAgLy8gMi4gQWxpZ24gbWVyZ2VkIHJ1
bnMgYm90aCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkuCi0gICAgcmVtb3ZlVHJhaWxpbmdU
cmltbWFibGVDb250ZW50KCk7Ci0gICAgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0Nv
bnRlbnQoKTsKLSAgICBpZiAobV9pc0ludHJpbnNpY1NpemluZykKKyAgICBhdXRvIGhhbmdpbmdD
b250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmUpOworICAgIGF1dG8gYXZh
aWxhYmxlV2lkdGggPSBtX2F2YWlsYWJsZVdpZHRoICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsK
KyAgICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250
ZW50KGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0gICAgYWRqdXN0QmFzZWxpbmVBbmRM
aW5lSGVpZ2h0KCk7Ci0gICAgaWYgKGlzVmlzdWFsbHlFbXB0eSgpKSB7Ci0gICAgICAgIG1fbGlu
ZUJveC5yZXNldEFsaWdubWVudEJhc2VsaW5lKCk7Ci0gICAgICAgIG1fbGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0KHsgfSk7Ci0gICAgfQotICAgIC8vIFJlbW92ZSBkZXNjZW50IHdoZW4gYWxsIGNv
bnRlbnQgaXMgYmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBvZiB0aGVtIGhhdmUgZGVzY2VudC4K
LSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5saW5lRGVzY2VudE5lZWRzQ29s
bGFwc2luZyhtX3J1bnMpKSB7Ci0gICAgICAgIG1fbGluZUJveC5zaHJpbmtWZXJ0aWNhbGx5KG1f
bGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCk7Ci0gICAgICAgIG1fbGluZUJveC5y
ZXNldERlc2NlbnQoKTsKKyAgICBpZiAoaG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25N
b2RlOjpKdXN0aWZ5KSB7CisgICAgICAgIGp1c3RpZnlSdW5zKGF2YWlsYWJsZVdpZHRoKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBhbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCk7Ci0gICAg
YWxpZ25Ib3Jpem9udGFsbHkoaGFuZ2luZ0NvbnRlbnQsIGlzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCk7CisKKyAgICBhdXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQgPSBbJl0gKGF1dG8gYXZh
aWxhYmxlV2lkdGgpIC0+IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKKyAgICAgICAgc3dp
dGNoIChob3Jpem9udGFsQWxpZ25tZW50KSB7CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgICAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpXZWJLaXRSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDAp
OworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKKyAgICAgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5s
aW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGggLyAyLCAwKTsKKyAgICAgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9OworCisgICAgYXV0byBhZGp1c3RtZW50ID0g
YWRqdXN0bWVudEZvckFsaWdubWVudChhdmFpbGFibGVXaWR0aCk7CisgICAgaWYgKCFhZGp1c3Rt
ZW50KQorICAgICAgICByZXR1cm47CisgICAgLy8gSG9yaXpvbnRhbCBhbGlnbm1lbnQgbWVhbnMg
dGhhdCB3ZSBub3Qgb25seSBhZGp1c3QgdGhlIHJ1bnMgYnV0IGFsc28gbWFrZSBzdXJlCisgICAg
Ly8gdGhhdCB0aGUgbGluZSBib3ggaXMgYWxpZ25lZCBhcyB3ZWxsCisgICAgLy8gZS5nLiA8ZGl2
IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHdpZHRoOiAxMDBweDsiPmNlbnRlcmVkIHRleHQ8
L2Rpdj4gOiB0aGUgbGluZSBib3ggd2lsbCBhbHNvIGJlIGNlbnRlcmVkCisgICAgLy8gYXMgb3Bw
b3NlZCB0byBzdGFydCBhdCAwcHggYWxsIHRoZSB3YXkgdG8gW2NlbnRlcmVkIHRleHRdIHJ1bidz
IHJpZ2h0IGVkZ2UuCisgICAgbV9saW5lQm94Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQp
OworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKQorICAgICAgICBydW4ubW92ZUhvcml6b250
YWxseSgqYWRqdXN0bWVudCk7CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmFsaWduQ29udGVudFZl
cnRpY2FsbHkoKQordm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWduVmVydGljYWxseSgpCiB7
Ci0gICAgQVNTRVJUKCFtX2lzSW50cmluc2ljU2l6aW5nKTsKICAgICBhdXRvIHNjcm9sbGFibGVP
dmVyZmxvd1JlY3QgPSBtX2xpbmVCb3gubG9naWNhbFJlY3QoKTsKICAgICBmb3IgKGF1dG8mIHJ1
biA6IG1fcnVucykgewotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSAwOwor
ICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKICAgICAgICAg
YXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwogICAgICAgICBhdXRvIHZlcnRpY2Fs
QWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CiAgICAgICAgIGF1dG8g
YXNjZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKQEAgLTE0
NCwxMCArMTUxLDEwIEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFsaWduQ29udGVudFZlcnRpY2FsbHko
KQogICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKICAgICAgICAgY2FzZSBWZXJ0aWNh
bEFsaWduOjpCYXNlbGluZToKICAgICAgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSB8fCBy
dW4uaXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGJhc2VsaW5lKCkgLSBh
c2NlbnQ7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRC
YXNlbGluZSgpIC0gYXNjZW50OwogICAgICAgICAgICAgZWxzZSBpZiAocnVuLmlzQ29udGFpbmVy
U3RhcnQoKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBiYXNlbGluZSgpIC0gYXNjZW50IC0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkg
LSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKKyAgICAgICAgICAgICAgICBs
b2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSBhc2NlbnQgLSBib3hH
ZW9tZXRyeS5ib3JkZXJUb3AoKSAtIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYm
IGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKICAgICAg
ICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlz
aGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94
KSk7CiAgICAgICAgICAgICAgICAgLy8gU3BlYyBtYWtlcyB1cyBnZW5lcmF0ZSBhdCBsZWFzdCBv
bmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KQEAgLTE2NiwxNyArMTczLDE3IEBAIHZvaWQg
TGluZUJ1aWxkZXI6OmFsaWduQ29udGVudFZlcnRpY2FsbHkoKQogICAgICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAgICAgICAgICAgICAgICAgYXV0byBiYXNlbGlu
ZUZyb21NYXJnaW5Cb3ggPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5
LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxp
bmVCbG9ja0Jhc2VsaW5lOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZSgp
IC0gYmFzZWxpbmVGcm9tTWFyZ2luQm94OworICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBt
X2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIGJhc2VsaW5lRnJvbU1hcmdpbkJveDsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAg
ICAgICAgbG9naWNhbFRvcCA9IGJhc2VsaW5lKCkgLSAoYm94R2VvbWV0cnkudmVydGljYWxCb3Jk
ZXIoKSArIGJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMF9sdSkgKyBydW4u
bG9naWNhbFJlY3QoKS5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOworICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAt
IChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRk
aW5nKCkudmFsdWVPcigwX2x1KSArIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpICsgYm94R2Vv
bWV0cnkubWFyZ2luQWZ0ZXIoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CiAgICAgICAgICAgICBsb2dpY2FsVG9w
ID0gMF9sdTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OkJvdHRvbToKLSAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsb2dpY2FsQm90dG9tKCkgLSBydW4u
bG9naWNhbFJlY3QoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVC
b3gubG9naWNhbEJvdHRvbSgpIC0gcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1Q
TEVNRU5URURfWUVUKCk7CkBAIC0xODYsMTggKzE5MywxOCBAQCB2b2lkIExpbmVCdWlsZGVyOjph
bGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCkKICAgICAgICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3Zl
cmZsb3cgaWYgdGhlIHJ1biBvdmVyZmxvd3MgdGhlIGxpbmUuCiAgICAgICAgIHNjcm9sbGFibGVP
dmVyZmxvd1JlY3QuZXhwYW5kVmVydGljYWxseVRvQ29udGFpbihydW4ubG9naWNhbFJlY3QoKSk7
CiAgICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9tIHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9s
ZWZ0IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBib3JkZXIgYm94IHRvcC9sZWZ0LgotICAgICAg
ICBydW4ubW92ZVZlcnRpY2FsbHkodGhpcy0+bG9naWNhbFRvcCgpKTsKLSAgICAgICAgcnVuLm1v
dmVIb3Jpem9udGFsbHkodGhpcy0+bG9naWNhbExlZnQoKSk7CisgICAgICAgIHJ1bi5tb3ZlVmVy
dGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgpKTsKKyAgICAgICAgcnVuLm1vdmVIb3Jpem9u
dGFsbHkobV9saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwogICAgIH0KICAgICBtX2xpbmVCb3guc2V0
U2Nyb2xsYWJsZU92ZXJmbG93KHNjcm9sbGFibGVPdmVyZmxvd1JlY3QpOwogfQogCi12b2lkIExp
bmVCdWlsZGVyOjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQor
dm9pZCBMaW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKElubGluZUxheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGgpCiB7CiAgICAgQVNTRVJUKGF2YWlsYWJsZVdpZHRoID4gMCk7CiAgICAgLy8g
Q29sbGVjdCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51bWJlcnMgYW5kIGZpbmQgdGhlIGxh
c3QgcnVuIHdpdGggY29udGVudC4KICAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
PSAwOwotICAgIFJ1biogbGFzdFJ1bldpdGhDb250ZW50ID0gbnVsbHB0cjsKKyAgICBMaW5lQnVp
bGRlcjo6UnVuKiBsYXN0UnVuV2l0aENvbnRlbnQgPSBudWxscHRyOwogICAgIGZvciAoYXV0byYg
cnVuIDogbV9ydW5zKSB7CiAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gcnVu
LmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8
fCBydW4uaXNCb3goKSkKQEAgLTIyOSwxNCArMjM2LDIwMCBAQCB2b2lkIExpbmVCdWlsZGVyOjpq
dXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQogICAgIH0KIH0KIAot
dm9pZCBMaW5lQnVpbGRlcjo6YWxpZ25Ib3Jpem9udGFsbHkoY29uc3QgSGFuZ2luZ0NvbnRlbnQm
IGhhbmdpbmdDb250ZW50LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZSkK
K3ZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQog
ewotICAgIEFTU0VSVCghbV9pc0ludHJpbnNpY1NpemluZyk7CisgICAgdW5zaWduZWQgaW5saW5l
Q29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKKyAgICBhdXRvIGhhc1NlZW5EaXJlY3RUZXh0T3JM
aW5lQnJlYWsgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgIGF1dG8mIHN0eWxl
ID0gbGF5b3V0Qm94LnN0eWxlKCk7CiAKLSAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gdGhpcy0+
YXZhaWxhYmxlV2lkdGgoKSArIGhhbmdpbmdDb250ZW50LndpZHRoKCk7Ci0gICAgaWYgKG1fcnVu
cy5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkKKyAgICAgICAgcnVuLnNldExvZ2lj
YWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKKworICAgICAgICBpZiAocnVuLmlzVGV4
dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBpZiAoaW5saW5lQ29udGFp
bmVyTmVzdGluZ0xldmVsKSB7CisgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1
c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBj
b250YWluZXIuIAorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKKyAgICAgICAgICAg
ICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bh
bj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0
cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJOZXN0
aW5nTGV2ZWw7CisgICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRoZSBs
aW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KKyAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMs
IHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0
LgorICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygpOwor
ICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWduOjpC
YXNlbGluZSkgeworICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQnVpbGRl
cjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBzdHlsZS5jb21wdXRlZExpbmVIZWln
aHQoKSk7CisgICAgICAgICAgICAgICAgLy8gQm90aCBoYWxmbGVhZGluZyBhc2NlbnQgYW5kIGRl
c2NlbnQgY291bGQgYmUgbmVnYXRpdmUgKHRhbGwgZm9udCB2cy4gc21hbGwgbGluZS1oZWlnaHQg
dmFsdWUpCisgICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlc2NlbnQgPiAwKQorICAg
ICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlcihoYWxmTGVhZGlu
Zy5kZXNjZW50KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuYXNjZW50ID4gMCkK
KyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlcihoYWxmTGVh
ZGluZy5hc2NlbnQpOworICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0
SWZHcmVhdGVyKG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuaGVpZ2h0KCkpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJ
ZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZlIGFscmVhZHkgYmVlbiBh
ZGp1c3RlZCBhdCBDb250YWluZXJTdGFydC4KKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDb250
YWluZXJOZXN0aW5nTGV2ZWwpOworICAgICAgICAgICAgLS1pbmxpbmVDb250YWluZXJOZXN0aW5n
TGV2ZWw7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChy
dW4uaXNCb3goKSkgeworICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICBhdXRvIG1h
cmdpbkJveEhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOworCisgICAgICAg
ICAgICBzd2l0Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAgICAgICAgY2FzZSBW
ZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAgICAgICAgICAgIGlmIChsYXlvdXRCb3gu
aXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRp
bmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSW5saW5lLWJsb2NrcyB3aXRo
IGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZlIGJhc2VsaW5lcy4KKyAgICAgICAgICAgICAgICAg
ICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGlu
ZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOworICAg
ICAgICAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2
ZW4gaWYgaXQgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5lQm94
ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5sYXN0
KCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYmVmb3JlSGVpZ2h0ID0gYm94R2VvbWV0cnku
bWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBh
ZGRpbmdUb3AoKS52YWx1ZU9yKDApOworICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0
QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYmVmb3JlSGVpZ2h0ICsgbGFzdExpbmVCb3guYmFz
ZWxpbmUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0
SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTm9uIGlubGluZS1ibG9jayBib3hlcyBzaXQgb24gdGhlIGJh
c2VsaW5lIChpbmNsdWRpbmcgdGhlaXIgYm90dG9tIG1hcmdpbikuCisgICAgICAgICAgICAgICAg
ICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZlIGRlc2NlbnQgKHllcywgbmVnYXRpdmUg
ZGVzY2VudCBpcyBhIHRoaW5nKS4KKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExv
Z2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0ICsgc3RkOjptYXg8SW5saW5lTGF5
b3V0VW5pdD4oMCwgbV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5kZXNjZW50KSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CisgICAgICAgICAgICAgICAgLy8gVG9w
IGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFzZWxpbmUsIGl0IG9ubHkgcHVzaGVz
IHRoZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBkb3duLgorICAgICAgICAgICAgICAgIG1f
bGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRv
bTogeworICAgICAgICAgICAgICAgIC8vIEJvdHRvbSBhbGlnbmVkLCB0YWxsIGNvbnRlbnQgcHVz
aGVzIHRoZSBiYXNlbGluZSBmdXJ0aGVyIGRvd24gZnJvbSB0aGUgbGluZSB0b3AuCisgICAgICAg
ICAgICAgICAgYXV0byBsaW5lTG9naWNhbEhlaWdodCA9IG1fbGluZUJveC5sb2dpY2FsSGVpZ2h0
KCk7CisgICAgICAgICAgICAgICAgaWYgKG1hcmdpbkJveEhlaWdodCA+IGxpbmVMb2dpY2FsSGVp
Z2h0KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZH
cmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5z
ZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUo
KSArIChtYXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgfQorfQorCitIYW5naW5nQ29udGVudCBMaW5lQ29udGVudEFs
aWduZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudChMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJ
bmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3QKK3sKKyAgICBh
dXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OworICAgIGlmIChpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgPT0gTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudDo6WWVzKQorICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7
CisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsK
KyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5k
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygp
KSB7CisgICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGlu
Z1doaXRlc3BhY2UoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBDaGVjayBpZiB3
ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bi5z
dHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFs
bHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBoYW5naW5nQ29udGVudC5l
eHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4g
aGFuZ2luZ0NvbnRlbnQ7Cit9CisKK0lubGluZUxheW91dFVuaXQgTGluZUNvbnRlbnRBbGlnbmVy
OjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mIHJ1bikgY29uc3QKK3sK
KyAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAg
aWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIGZv
bnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwg
cnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQo
KTsKKworICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94
KTsKKyAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9h
dGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hI
ZWlnaHQoKTsKKworICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1i
bG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdpbiBib3ggaXMg
Y29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KKyAgICByZXR1cm4gYm94R2VvbWV0
cnkubWFyZ2luQm94SGVpZ2h0KCk7Cit9CisKK0xpbmVCdWlsZGVyOjpMaW5lQnVpbGRlcihjb25z
dCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIE9wdGlv
bmFsPFRleHRBbGlnbk1vZGU+IGhvcml6b250YWxBbGlnbm1lbnQsIEludHJpbnNpY1NpemluZyBp
bnRyaW5zaWNTaXppbmcpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZv
cm1hdHRpbmdDb250ZXh0KQorICAgICwgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQobV9ydW5z
KQorICAgICwgbV9ob3Jpem9udGFsQWxpZ25tZW50KGhvcml6b250YWxBbGlnbm1lbnQpCisgICAg
LCBtX2lzSW50cmluc2ljU2l6aW5nKGludHJpbnNpY1NpemluZyA9PSBJbnRyaW5zaWNTaXppbmc6
OlllcykKKyAgICAsIG1fc2hvdWxkSWdub3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkKK3sKK30KKworTGluZUJ1aWxkZXI6On5MaW5lQnVpbGRlcigp
Cit7Cit9CisKK3ZvaWQgTGluZUJ1aWxkZXI6OmluaXRpYWxpemUoY29uc3QgQ29uc3RyYWludHMm
IGNvbnN0cmFpbnRzKQoreworICAgIG1fbGluZUxvZ2ljYWxXaWR0aCA9IGNvbnN0cmFpbnRzLmF2
YWlsYWJsZUxvZ2ljYWxXaWR0aDsKKyAgICBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gY29uc3RyYWlu
dHMubGluZUlzQ29uc3RyYWluZWRCeUZsb2F0OworICAgIGF1dG8gaW5pdGlhbExpbmVIZWlnaHQg
PSBjb25zdHJhaW50cy5saW5lSGVpZ2h0OworICAgIGF1dG8gbGluZVJlY3QgPSBEaXNwbGF5OjpJ
bmxpbmVSZWN0IHsgY29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIDBfbHUsIGluaXRpYWxMaW5l
SGVpZ2h0IH07CisgICAgYXV0byBhc2NlbnRBbmREZXNjZW50ID0gTGluZUJ1aWxkZXI6OmhhbGZM
ZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgpLmZvbnRNZXRy
aWNzKCksIGluaXRpYWxMaW5lSGVpZ2h0KTsKKyAgICBtX2xpbmVCb3ggPSBMaW5lQm94IHsgbGlu
ZVJlY3QsIGFzY2VudEFuZERlc2NlbnQgfTsKKyAgICBjbGVhcigpOworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgbV9pc0Nsb3NlZCA9IGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgTGluZUJ1aWxk
ZXI6OmNsZWFyKCkKK3sKKyAgICBtX2xpbmVCb3guc2V0TG9naWNhbFdpZHRoKHsgfSk7CisgICAg
bV9saW5lQm94LnNldElzQ29uc2lkZXJlZEVtcHR5KCk7CisgICAgbV9ydW5zLmNsZWFyKCk7Cisg
ICAgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQucmVzZXQoKTsKKyAgICBtX2xpbmVJc1Zpc3Vh
bGx5RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgPSB7IH07Cit9CisKK3ZvaWQg
TGluZUJ1aWxkZXI6OmNsb3NlKElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5l
KQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9pc0Nsb3NlZCA9IHRydWU7CisjZW5kaWYK
KyAgICAvLyAxLiBSZW1vdmUgdHJpbW1hYmxlIHRyYWlsaW5nIGNvbnRlbnQuCisgICAgLy8gMi4g
QWxpZ24gbWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkuCisgICAg
cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7CisgICAgdmlzdWFsbHlDb2xsYXBzZVBy
ZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKKyAgICBpZiAobV9pc0ludHJpbnNpY1NpemluZykKICAg
ICAgICAgcmV0dXJuOwogCisgICAgYXV0byBjb250ZW50QWxpZ25lciA9IExpbmVDb250ZW50QWxp
Z25lciB7IGZvcm1hdHRpbmdDb250ZXh0KCksIG1fbGluZUJveCwgbV9ydW5zLCBhdmFpbGFibGVX
aWR0aCgpIH07CisgICAgY29udGVudEFsaWduZXIuYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0
KCk7CisgICAgaWYgKGlzVmlzdWFsbHlFbXB0eSgpKSB7CisgICAgICAgIG1fbGluZUJveC5yZXNl
dEFsaWdubWVudEJhc2VsaW5lKCk7CisgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0
KHsgfSk7CisgICAgfQorICAgIC8vIFJlbW92ZSBkZXNjZW50IHdoZW4gYWxsIGNvbnRlbnQgaXMg
YmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBvZiB0aGVtIGhhdmUgZGVzY2VudC4KKyAgICBpZiAo
Zm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5saW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyht
X3J1bnMpKSB7CisgICAgICAgIG1fbGluZUJveC5zaHJpbmtWZXJ0aWNhbGx5KG1fbGluZUJveC5h
c2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCk7CisgICAgICAgIG1fbGluZUJveC5yZXNldERlc2Nl
bnQoKTsKKyAgICB9CisgICAgY29udGVudEFsaWduZXIuYWxpZ25WZXJ0aWNhbGx5KCk7CisKICAg
ICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCA9IFsmXSB7CiAgICAgICAgIEFTU0VS
VChtX2hvcml6b250YWxBbGlnbm1lbnQpOwogICAgICAgICBpZiAobV9ob3Jpem9udGFsQWxpZ25t
ZW50ICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCkBAIC0yNDQsNDcgKzQzNywxMSBAQCB2b2lk
IExpbmVCdWlsZGVyOjphbGlnbkhvcml6b250YWxseShjb25zdCBIYW5naW5nQ29udGVudCYgaGFu
Z2luZ0NvbnRlbnQsIElzTGFzdAogICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRp
bmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwK
ICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNz
IG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAogICAgICAgICAvLyB0aGUg
bGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBp
cyBzdGFydC1hbGlnbmVkLgotICAgICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygp
IHx8IGlzTGFzdExpbmUgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCisgICAg
ICAgIGlmIChtX3J1bnMubGFzdCgpLmlzTGluZUJyZWFrKCkgfHwgaXNMYXN0TGluZSA9PSBMaW5l
QnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCiAgICAgICAgICAgICBy
ZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7CiAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2Rl
OjpKdXN0aWZ5OwotICAgIH0oKTsKLQotICAgIGlmIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1l
bnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICBqdXN0aWZ5UnVucyhhdmFp
bGFibGVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGFkanVzdG1l
bnRGb3JBbGlnbm1lbnQgPSBbXSAoYXV0byBob3Jpem9udGFsQWxpZ25tZW50LCBhdXRvIGF2YWls
YWJsZVdpZHRoKSAtPiBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7Ci0gICAgICAgIHN3aXRj
aCAoaG9yaXpvbnRhbEFsaWdubWVudCkgewotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okxl
ZnQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKLSAgICAgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
V2ViS2l0UmlnaHQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoLCAwKTsK
LSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGlu
ZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoIC8gMiwgMCk7Ci0gICAgICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6SnVzdGlmeToKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiB7IH07CiAgICAgfTsKLQotICAgIGF1dG8gYWRqdXN0bWVudCA9IGFk
anVzdG1lbnRGb3JBbGlnbm1lbnQoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50LCBhdmFpbGFi
bGVXaWR0aCk7Ci0gICAgaWYgKCFhZGp1c3RtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgLy8g
SG9yaXpvbnRhbCBhbGlnbm1lbnQgbWVhbnMgdGhhdCB3ZSBub3Qgb25seSBhZGp1c3QgdGhlIHJ1
bnMgYnV0IGFsc28gbWFrZSBzdXJlCi0gICAgLy8gdGhhdCB0aGUgbGluZSBib3ggaXMgYWxpZ25l
ZCBhcyB3ZWxsCi0gICAgLy8gZS5nLiA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHdp
ZHRoOiAxMDBweDsiPmNlbnRlcmVkIHRleHQ8L2Rpdj4gOiB0aGUgbGluZSBib3ggd2lsbCBhbHNv
IGJlIGNlbnRlcmVkCi0gICAgLy8gYXMgb3Bwb3NlZCB0byBzdGFydCBhdCAwcHggYWxsIHRoZSB3
YXkgdG8gW2NlbnRlcmVkIHRleHRdIHJ1bidzIHJpZ2h0IGVkZ2UuCi0gICAgbV9saW5lQm94Lm1v
dmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5z
KQotICAgICAgICBydW4ubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7CisgICAgY29udGVu
dEFsaWduZXIuYWxpZ25Ib3Jpem9udGFsbHkoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50KCks
IGlzTGFzdExpbmUpOwogfQogCiB2b2lkIExpbmVCdWlsZGVyOjpyZW1vdmVUcmFpbGluZ1RyaW1t
YWJsZUNvbnRlbnQoKQpAQCAtMzY1LDMxICs1MjIsNiBAQCB2b2lkIExpbmVCdWlsZGVyOjp2aXN1
YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpCiAgICAgbV9saW5lQm94LnNocmlu
a0hvcml6b250YWxseSh0cmltbWVkQ29udGVudFdpZHRoKTsKIH0KIAotSGFuZ2luZ0NvbnRlbnQg
TGluZUJ1aWxkZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotewotICAgIGF1dG8gaGFuZ2luZ0Nv
bnRlbnQgPSBIYW5naW5nQ29udGVudCB7IH07Ci0gICAgLy8gQ2FuJ3Qgc2V0dXAgaGFuZ2luZyBj
b250ZW50IHdpdGggcmVtb3ZhYmxlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgQVNTRVJUKG1f
dHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmlzRW1wdHkoKSk7Ci0gICAgaWYgKGlzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCA9PSBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcykKLSAg
ICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgIGZvciAoYXV0byYg
cnVuIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShtX3J1bnMpKSB7Ci0gICAgICAgIGlmIChydW4u
aXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAg
aGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHByZXNlcnZl
ZCBvciBodW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNl
KCkgIT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAv
LyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxp
bmcgd2hpdGVzcGFjZS4KLSAgICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhbmdpbmdDb250ZW50Owot
fQotCiB2b2lkIExpbmVCdWlsZGVyOjptb3ZlTG9naWNhbExlZnQoSW5saW5lTGF5b3V0VW5pdCBk
ZWx0YSkKIHsKICAgICBpZiAoIWRlbHRhKQpAQCAtNTQ4LDEyOCArNjgwLDYgQEAgdm9pZCBMaW5l
QnVpbGRlcjo6YXBwZW5kTGluZUJyZWFrKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCiAg
ICAgbV9ydW5zLmFwcGVuZCh7IGRvd25jYXN0PElubGluZVNvZnRMaW5lQnJlYWtJdGVtPihpbmxp
bmVJdGVtKSwgY29udGVudExvZ2ljYWxXaWR0aCgpIH0pOwogfQogCi12b2lkIExpbmVCdWlsZGVy
OjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQotewotICAgIHVuc2lnbmVkIGlubGluZUNv
bnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgYXV0byBoYXNTZWVuRGlyZWN0VGV4dE9yTGlu
ZUJyZWFrID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAg
YXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAgICBhdXRvJiBzdHlsZSA9
IGxheW91dEJveC5zdHlsZSgpOwotCi0gICAgICAgIHJ1bi5zZXRMb2dpY2FsSGVpZ2h0KHJ1bkNv
bnRlbnRIZWlnaHQocnVuKSk7Ci0KLSAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNM
aW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gRm9yIHRleHQgY29udGVudCB3ZSBzZXQgdGhl
IGJhc2VsaW5lIGVpdGhlciB0aHJvdWdoIHRoZSBpbml0aWFsIHN0cnV0IChzZXQgYnkgdGhlIGZv
cm1hdHRpbmcgY29udGV4dCByb290KSBvcgotICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgaW5s
aW5lIGNvbnRhaW5lciAoc3RhcnQpLiBOb3JtYWxseSB0aGUgdGV4dCBjb250ZW50IGl0c2VsZiBk
b2VzIG5vdCBzdHJldGNoIHRoZSBsaW5lLgotICAgICAgICAgICAgaWYgKCFtX2luaXRpYWxTdHJ1
dCkgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBzdGFuZGFyZHMgbW9kZSB3aGVyZSB0
aGUgYmFzZWxpbmUgYW5kIGxpbmUgaGVpZ2h0IGFyZSBleHBsaWN0LgotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlubGluZUNvbnRhaW5l
ck5lc3RpbmdMZXZlbCkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYWRqdXN0
ZWQgdGhlIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91Z2ggdGhlIHBhcmVudCBpbmxpbmUgY29u
dGFpbmVyLiAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gZS5nIGRpdj5maXJzdCB0ZXh0PC9kaXY+IG9yIDxkaXY+PHNwYW4+bmVzdGVkPHNwYW4+
Zmlyc3QgZGlyZWN0IHRleHQ8L2Rpdj4uCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gdHJ1
ZTsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBxdWlya3MgbW9kZSB3aGVyZSB0aGUgZm9udC1t
ZXRyaWNzIG1pZ2h0IGNoYW5nZSB0aGUgbGluZSBsaW5lIGhlaWdodC9iYXNlbGluZSBhbmQgdGhp
cyBpcyB0aGUgZmlyc3QgdGV4dCBjb250ZW50IG9uIHRoZSBsaW5lCi0gICAgICAgICAgICAvLyBv
dXRzaWRlIG9mIGFuIGlubGluZSBjb250YWluZXIuCi0gICAgICAgICAgICBtX2xpbmVCb3guc2V0
QXNjZW50SWZHcmVhdGVyKG1faW5pdGlhbFN0cnV0LT5hc2NlbnQpOwotICAgICAgICAgICAgbV9s
aW5lQm94LnNldERlc2NlbnRJZkdyZWF0ZXIobV9pbml0aWFsU3RydXQtPmRlc2NlbnQpOwotICAg
ICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobV9pbml0aWFsU3Ry
dXQtPmhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKLSAgICAgICAgICAgICsraW5saW5lQ29u
dGFpbmVyTmVzdGluZ0xldmVsOwotICAgICAgICAgICAgLy8gSW5saW5lIGNvbnRhaW5lcnMgc3Ry
ZXRjaCB0aGUgbGluZSBieSB0aGVpciBmb250IHNpemUuCi0gICAgICAgICAgICAvLyBWZXJ0aWNh
bCBtYXJnaW5zLCBwYWRkaW5nIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxp
bmUgaGVpZ2h0LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0
cmljcygpOwotICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNh
bEFsaWduOjpCYXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBo
YWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgp
KTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2Vu
dCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1
ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCi0gICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRl
c2NlbnQpOwotICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQgPiAwKQotICAg
ICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5n
LmFzY2VudCk7Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihmb250TWV0cmljcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJFbmQoKSkgewotICAgICAgICAgICAg
Ly8gVGhlIGxpbmUncyBiYXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVz
dGVkIGF0IENvbnRhaW5lclN0YXJ0LgotICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5l
ck5lc3RpbmdMZXZlbCk7Ci0gICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZl
bDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5p
c0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2lu
Qm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoc3R5bGUudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lu
bGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5s
aW5lIGNvbnRlbnQgYWx3YXlzIGhhdmUgYmFzZWxpbmVzLgotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9y
bWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBp
ZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBm
b3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJn
aW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGlu
Z1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGln
bm1lbnRCYXNlbGluZUlmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGlu
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxp
bmUgKGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFyZ2luKS4KLSAgICAgICAgICAgICAgICAgICAg
bV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNj
ZW50IGlzIGEgdGhpbmcpLgotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNh
bEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRV
bml0PigwLCBtX2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBUb3AgYWxp
Z24gY29udGVudCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhl
IGJvdHRvbSBvZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCi0gICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7
Ci0gICAgICAgICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMg
dGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAg
ICAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsK
LSAgICAgICAgICAgICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0
ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFs
aWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpICsg
KG1hcmdpbkJveEhlaWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUlubGluZUxheW91dFVuaXQgTGluZUJ1aWxkZXI6OnJ1
bkNvbnRlbnRIZWlnaHQoY29uc3QgUnVuJiBydW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lz
SW50cmluc2ljU2l6aW5nKTsKLSAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZv
bnRNZXRyaWNzKCk7Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkK
LSAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgaWYgKHJ1bi5pc0Nv
bnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgIHJldHVybiBm
b250TWV0cmljcy5oZWlnaHQoKTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRC
b3goKTsKLSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0
cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8
fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgcmV0dXJuIGJveEdl
b21ldHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKLQotICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUg
Ym94IChlLmcuIGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRo
ZWlyIG1hcmdpbiBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KLSAg
ICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci19Ci0KIGJvb2wgTGluZUJ1
aWxkZXI6OmlzVmlzdWFsbHlOb25FbXB0eShjb25zdCBSdW4mIHJ1bikgY29uc3QKIHsKICAgICBp
ZiAocnVuLmlzVGV4dCgpKQpAQCAtNzE2LDIxICs3MjYsMTEgQEAgQXNjZW50QW5kRGVzY2VudCBM
aW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0
cmljcywKICAgICByZXR1cm4geyBhZGp1c3RlZEFzY2VudCwgYWRqdXN0ZWREZXNjZW50IH07CiB9
CiAKLUxheW91dFN0YXRlJiBMaW5lQnVpbGRlcjo6bGF5b3V0U3RhdGUoKSBjb25zdAoteyAKLSAg
ICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOwotfQotCiBjb25zdCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgTGluZUJ1aWxkZXI6OmZvcm1hdHRpbmdDb250ZXh0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIH0KIAotY29u
c3QgQ29udGFpbmVyQm94JiBMaW5lQnVpbGRlcjo6cm9vdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpOwotfQotCiBMaW5lQnVpbGRlcjo6VHJpbW1hYmxl
VHJhaWxpbmdDb250ZW50OjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQoUnVuTGlzdCYgcnVucykK
ICAgICA6IG1fcnVucyhydW5zKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKaW5kZXggMWE2YWUwMDZh
OGQ5YjZlMDM0ZTY1NGE0NTY0Mzc0M2U1YzMyMDcyOC4uNGI2Y2ViZjIxMjc1OGQxOWU3ZDQ2N2U2
MjczMmZhNjliMTIxOWIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCkBAIC0zNSwxMyArMzUsMTEg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1zdHJ1Y3QgSGFu
Z2luZ0NvbnRlbnQ7CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKIGNsYXNzIElubGlu
ZVNvZnRMaW5lQnJlYWtJdGVtOworY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyOwogCiBjbGFzcyBM
aW5lQnVpbGRlciB7Ci0gICAgc3RydWN0IENvbnRpbnVvdXNDb250ZW50OwotCiBwdWJsaWM6CiAg
ICAgc3RydWN0IENvbnN0cmFpbnRzIHsKICAgICAgICAgSW5saW5lTGF5b3V0UG9pbnQgbG9naWNh
bFRvcExlZnQ7CkBAIC02NCw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAg
ICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3guaXNDb25z
aWRlcmVkRW1wdHkoKTsgfQogICAgIGJvb2wgaGFzSW50cnVzaXZlRmxvYXQoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0ludHJ1c2l2ZUZsb2F0OyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFi
bGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gY29udGVudExvZ2ljYWxX
aWR0aCgpOyB9CisgICAgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUxvZ2ljYWxXaWR0aCAtIGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsgfQogCiAg
ICAgSW5saW5lTGF5b3V0VW5pdCB0cmltbWFibGVUcmFpbGluZ1dpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQud2lkdGgoKTsgfQogICAgIGJvb2wgaXNUcmFp
bGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCkgY29uc3QgeyByZXR1cm4gbV90cmltbWFibGVUcmFpbGlu
Z0NvbnRlbnQuaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCk7IH0KQEAgLTkyLDYgKzkwLDcg
QEAgcHVibGljOgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExpbmVCdWls
ZGVyOworICAgICAgICBmcmllbmQgY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyOwogCiAgICAgICAg
IFJ1bihjb25zdCBJbmxpbmVUZXh0SXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQs
IElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIG5lZWRzSHlwZW4pOwogICAgICAg
ICBSdW4oY29uc3QgSW5saW5lU29mdExpbmVCcmVha0l0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0KTsKQEAgLTE0OSwxOCArMTQ4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBBc2Nl
bnRBbmREZXNjZW50IGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmljcyYsIElubGlu
ZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpOwogCiBwcml2YXRlOgotICAgIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveC5sb2dpY2FsVG9w
KCk7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVy
biBtX2xpbmVCb3gubG9naWNhbEJvdHRvbSgpOyB9Ci0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94LmxvZ2ljYWxMZWZ0KCk7IH0KLSAg
ICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxM
ZWZ0KCkgKyBsb2dpY2FsV2lkdGgoKTsgfQotCi0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGg7IH0KLSAgICBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNh
bEhlaWdodCgpOyB9Ci0KICAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gubG9naWNhbFdpZHRoKCk7IH0KICAgICBJbmxpbmVM
YXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3gu
bG9naWNhbFJpZ2h0KCk7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCk7IH0KIAogICAgIHN0cnVjdCBJ
bmxpbmVSdW5EZXRhaWxzIHsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgg
eyAwIH07CkBAIC0xNzcsMjAgKzE2NiwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZW1vdmVU
cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKTsKICAgICB2b2lkIHZpc3VhbGx5Q29sbGFwc2VQcmVX
cmFwT3ZlcmZsb3dDb250ZW50KCk7Ci0gICAgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhhbmdpbmdD
b250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0gICAgdm9pZCBhbGlnbkhvcml6
b250YWxseShjb25zdCBIYW5naW5nQ29udGVudCYsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCk7Ci0gICAgdm9pZCBhbGlnbkNvbnRlbnRWZXJ0aWNhbGx5KCk7Ci0KLSAgICB2b2lkIGFkanVz
dEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwotICAgIElubGluZUxheW91dFVuaXQgcnVuQ29udGVu
dEhlaWdodChjb25zdCBSdW4mKSBjb25zdDsKLQotICAgIHZvaWQganVzdGlmeVJ1bnMoSW5saW5l
TGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CiAKICAgICBib29sIGlzVmlzdWFsbHlOb25FbXB0
eShjb25zdCBSdW4mKSBjb25zdDsKIAotICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNv
bnN0OwogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0OwotICAgIGNvbnN0IENvbnRhaW5lckJveCYgcm9vdCgpIGNvbnN0OwogCiAgICAg
c3RydWN0IFRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCB7CiAgICAgICAgIFRyaW1tYWJsZVRyYWls
aW5nQ29udGVudChSdW5MaXN0Jik7CkBAIC0yMTgsNyArMTk3LDYgQEAgcHJpdmF0ZToKICAgICBj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsK
ICAgICBSdW5MaXN0IG1fcnVuczsKICAgICBUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgbV90cmlt
bWFibGVUcmFpbGluZ0NvbnRlbnQ7Ci0gICAgT3B0aW9uYWw8QXNjZW50QW5kRGVzY2VudD4gbV9p
bml0aWFsU3RydXQ7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xpbmVMb2dpY2FsV2lkdGggeyAw
IH07CiAgICAgT3B0aW9uYWw8VGV4dEFsaWduTW9kZT4gbV9ob3Jpem9udGFsQWxpZ25tZW50Owog
ICAgIGJvb2wgbV9pc0ludHJpbnNpY1NpemluZyB7IGZhbHNlIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>