<?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>216221</bug_id>
          
          <creation_ts>2020-09-05 21:12:46 -0700</creation_ts>
          <short_desc>[LFC][IFC] LineBox should contain all inline boxes</short_desc>
          <delta_ts>2020-09-06 14:33:17 -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>
          
          
          <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>1686161</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-05 21:12:46 -0700</bug_when>
    <thetext>see https://bugs.webkit.org/show_bug.cgi?id=215087#c9</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686162</commentid>
    <comment_count>1</comment_count>
      <attachid>408112</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-05 21:14:27 -0700</bug_when>
    <thetext>Created attachment 408112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686184</commentid>
    <comment_count>2</comment_count>
      <attachid>408122</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-06 06:31:23 -0700</bug_when>
    <thetext>Created attachment 408122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686193</commentid>
    <comment_count>3</comment_count>
      <attachid>408124</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-06 10:13:27 -0700</bug_when>
    <thetext>Created attachment 408124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686194</commentid>
    <comment_count>4</comment_count>
      <attachid>408124</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-06 10:25:23 -0700</bug_when>
    <thetext>Comment on attachment 408124
Patch

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

&gt; Source/WebCore/ChangeLog:18
&gt; +        In this patch we decouple the line box and the line.
&gt; +        LineBox:
&gt; +        - fully contains all the inline boxes, both horizontally and vertically.
&gt; +        - has only width and height geometry
&gt; +        - height is not constrained by the line-height property
&gt; +        - does not have the concept of overflow.
&gt; +
&gt; +        Line:
&gt; +        - contains the LineBox, but the LineBox can overflow the line, both horizontally and vertically.
&gt; +        - has position relative to the root block container.
&gt; +

Could you clarify in the ChangeLog how this decoupling maps to the code changes in the patch?

&gt; Source/WebCore/layout/inlineformatting/InlineLineBox.h:51
&gt; +// | ----------------------------------|--------------|---------- Root Inline Box
&gt; +// ||   _____    ___      ___          |              |
&gt; +// ||  |        /   \    /   \         |  Inline Box  |
&gt; +// ||  |_____  |     |  |     |        |              |    ascent
&gt; +// ||  |       |     |  |     |        |              |
&gt; +// ||__|________\___/____\___/_________|______________|_______ alignment_baseline

Could you make this FOO larger? I can barely see it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686200</commentid>
    <comment_count>5</comment_count>
      <attachid>408126</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-06 11:22:37 -0700</bug_when>
    <thetext>Created attachment 408126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686221</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-06 14:32:40 -0700</bug_when>
    <thetext>Committed r266682: &lt;https://trac.webkit.org/changeset/266682&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408126.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686222</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-06 14:33:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/68434349&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408112</attachid>
            <date>2020-09-05 21:14:27 -0700</date>
            <delta_ts>2020-09-06 06:31:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216221-20200905211426.patch</filename>
            <type>text/plain</type>
            <size>29831</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Njc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTY5ZWM1MTY3MGM3ZWY1
YmE5ZDU1NzQxYTdiNGRmYzdlOTZmNTYyNS4uOGQyY2RmNzAzNWE5MzE1MGM4OTBjMGNiZGU3N2Y2
OGFiMjEwYzA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTA5LTA1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQm94
IHNob3VsZCBjb250YWluIGFsbCBpbmxpbmUgYm94ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjIyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRlRGlzcGxheUJv
eGVzRm9yTGluZUNvbnRlbnQpOgorCiAyMDIwLTA5LTA1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExpbmUgaGFuZGluZyB0byBMaW5l
QnVpbGRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rp
c3BsYXlJbmxpbmVSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlz
cGxheUlubGluZVJlY3QuaAppbmRleCA1MjNlOGUwMTM1OGUyMjNiOTA0MzU2MzZlYTM0MjdlNzQ4
MWJkMWMzLi40OWQ2Mjc3NGEzN2JhZTU4YWViY2VmY2M1YTU5Yzk0ZGRmN2QxMTIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZVJlY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZVJl
Y3QuaApAQCAtMzcsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgSW5saW5lUmVjdCgpID0gZGVmYXVs
dDsKICAgICBJbmxpbmVSZWN0KElubGluZUxheW91dFVuaXQgdG9wLCBJbmxpbmVMYXlvdXRVbml0
IGxlZnQsIElubGluZUxheW91dFVuaXQgd2lkdGgsIElubGluZUxheW91dFVuaXQgaGVpZ2h0KTsK
ICAgICBJbmxpbmVSZWN0KGNvbnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxpbmVM
YXlvdXRVbml0IHdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGhlaWdodCk7CisgICAgSW5saW5lUmVj
dChjb25zdCBJbmxpbmVMYXlvdXRQb2ludCYgdG9wTGVmdCwgY29uc3QgSW5saW5lTGF5b3V0U2l6
ZSYpOwogICAgIAogICAgIElubGluZUxheW91dFVuaXQgdG9wKCkgY29uc3Q7CiAgICAgSW5saW5l
TGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7CkBAIC0xMDgsNiArMTA5LDExIEBAIGlubGluZSBJbmxp
bmVSZWN0OjpJbmxpbmVSZWN0KGNvbnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxp
bmVMYXlvdXRVbml0CiB7CiB9CiAKK2lubGluZSBJbmxpbmVSZWN0OjpJbmxpbmVSZWN0KGNvbnN0
IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBjb25zdCBJbmxpbmVMYXlvdXRTaXplJiBzaXpl
KQorICAgIDogSW5saW5lUmVjdCh0b3BMZWZ0LnkoKSwgdG9wTGVmdC54KCksIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSkKK3sKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiBpbmxpbmUgdm9p
ZCBJbmxpbmVSZWN0OjppbnZhbGlkYXRlUG9zaXRpb24oKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJlY3QuaAppbmRleCA5M2FhZjYyOGYyZTRiOGZk
ZjJiNzU1MmU4OTUyNzE2MGQyYWZlZWM0Li5kZTc4Nzk0ODg0NmYwN2FkODljNTgwZDZkMjQ0YzM4
MzBmMWIwMWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUv
RGlzcGxheVJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlz
cGxheVJlY3QuaApAQCAtMzgsNiArMzgsNyBAQCBwdWJsaWM6CiAgICAgUmVjdCgpID0gZGVmYXVs
dDsKICAgICBSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQg
d2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KTsKICAgICBSZWN0KExheW91dFBvaW50IHRvcExlZnQs
IExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KTsKKyAgICBSZWN0KGNvbnN0IExh
eW91dFBvaW50JiB0b3BMZWZ0LCBjb25zdCBMYXlvdXRTaXplJik7CiAgICAgCiAgICAgTGF5b3V0
VW5pdCB0b3AoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGxlZnQoKSBjb25zdDsKQEAgLTExMyw2
ICsxMTQsMTEgQEAgaW5saW5lIFJlY3Q6OlJlY3QoTGF5b3V0UG9pbnQgdG9wTGVmdCwgTGF5b3V0
VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCiB7CiB9CiAKK2lubGluZSBSZWN0OjpSZWN0
KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQorICAg
IDogUmVjdCh0b3BMZWZ0LnkoKSwgdG9wTGVmdC54KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSkKK3sKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiBpbmxpbmUgdm9pZCBSZWN0OjppbnZh
bGlkYXRlUG9zaXRpb24oKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmlu
ZGV4IDZlMDQyNDVjMTI5YTAyYjMyMmE4ZWJlNTI4OTBlOGYyODE5YmIyYjMuLjI4YjRmMDg5OGJi
ZWZhZmI2YjA4MTA1MGNhNjE3NzExNzk3ZTkwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAKQEAgLTE1MCwxMiArMTUwLDEzIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lQnVpbGRlcjo6
CiAgICAgICAgIGF1dG8gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoID0gcHJldmlvdXNMaW5l
ID8gcHJldmlvdXNMaW5lLT5vdmVyZmxvd0NvbnRlbnRMZW5ndGggOiBXVEY6Om51bGxvcHQ7CiAg
ICAgICAgIGF1dG8gaW5pdGlhbExpbmVDb25zdHJhaW50cyA9IENvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudCB7IGNvbnN0cmFpbnRzLmhvcml6b250YWwsIHsgbGluZUxvZ2ljYWxUb3AsIG1ha2VP
cHRpb25hbCh0b0xheW91dFVuaXQocXVpcmtzKCkuaW5pdGlhbExpbmVIZWlnaHQoKSkpIH0gfTsK
ICAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElubGluZUNvbnRl
bnQobmVlZHNMYXlvdXRSYW5nZSwgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoLCBpbml0aWFs
TGluZUNvbnN0cmFpbnRzLCBpc0ZpcnN0TGluZSk7Ci0gICAgICAgIHNldERpc3BsYXlCb3hlc0Zv
ckxpbmUobGluZUNvbnRlbnQsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOworICAgICAgICBhdXRv
IGxpbmVMb2dpY2FsUmVjdCA9IGNyZWF0ZURpc3BsYXlCb3hlc0ZvckxpbmVDb250ZW50KGxpbmVD
b250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKKwogICAgICAgICBhdXRvIGxpbmVDb250
ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtUmFuZ2U7CiAgICAgICAgIGlmICghbGlu
ZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChuZWVkc0xheW91
dFJhbmdlLnN0YXJ0IDwgbGluZUNvbnRlbnRSYW5nZS5lbmQpOwogICAgICAgICAgICAgaXNGaXJz
dExpbmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGxpbmVMb2dpY2FsVG9wID0gbGluZUNvbnRlbnQu
bGluZUJveC5sb2dpY2FsQm90dG9tKCk7CisgICAgICAgICAgICBsaW5lTG9naWNhbFRvcCA9IGxp
bmVMb2dpY2FsUmVjdC5ib3R0b20oKTsKICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHRyYWlsaW5n
IGNvbnRlbnQgaXMgcGFydGlhbCwgd2UgbmVlZCB0byByZXVzZSB0aGUgbGFzdCBJbmxpbmVUZXh0
SXRlbS4KICAgICAgICAgICAgIGF1dG8gbGFzdElubGluZUl0ZW1OZWVkc1BhcnRpYWxMYXlvdXQg
PSBsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudC5oYXNWYWx1ZSgpOwogICAgICAgICAgICAgaWYg
KGxhc3RJbmxpbmVJdGVtTmVlZHNQYXJ0aWFsTGF5b3V0KSB7CkBAIC0xNzgsNyArMTc5LDcgQEAg
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYgaW5s
aW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAgICAgICAgQVNTRVJUKGxpbmVDb250ZW50LnJ1bnMu
aXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGxpbmVDb250ZW50Lmhhc0ludHJ1c2l2ZUZsb2F0
KTsKICAgICAgICAgLy8gTW92ZSB0aGUgbmV4dCBsaW5lIGJlbG93IHRoZSBpbnRydXNpdmUgZmxv
YXQuCi0gICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0aW5nQ29udGV4dC5jb25z
dHJhaW50cyhsaW5lTG9naWNhbFRvcCwgdG9MYXlvdXRVbml0KGxpbmVDb250ZW50LmxpbmVCb3gu
bG9naWNhbEJvdHRvbSgpKSk7CisgICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0
aW5nQ29udGV4dC5jb25zdHJhaW50cyhsaW5lTG9naWNhbFRvcCwgdG9MYXlvdXRVbml0KGxpbmVM
b2dpY2FsUmVjdC5ib3R0b20oKSkpOwogICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5s
ZWZ0IHx8IGZsb2F0Q29uc3RyYWludHMucmlnaHQpOwogICAgICAgICBzdGF0aWMgYXV0byBpbmlm
aXRlUG9pbnQgPSBQb2ludEluQ29udGV4dFJvb3Q6Om1heCgpOwogICAgICAgICAvLyBJbiBjYXNl
IG9mIGxlZnQgYW5kIHJpZ2h0IGNvbnN0cmFpbnRzLCB3ZSBuZWVkIHRvIHBpY2sgdGhlIG9uZSB0
aGF0J3MgY2xvc2VyIHRvIHRoZSBjdXJyZW50IGxpbmUuCkBAIC0zOTAsMTAgKzM5MSw0NSBAQCB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudElmTmVlZGVk
KCkKICAgICB9CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlC
b3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCitpbmxp
bmUgc3RhdGljIElubGluZUxheW91dFVuaXQgaGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRN
ZXRyaWNzJiBmb250TWV0cmljcywgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCkK
K3sKKyAgICBJbmxpbmVMYXlvdXRVbml0IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwor
ICAgIElubGluZUxheW91dFVuaXQgZGVzY2VudCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQoKTsKKyAg
ICAvLyAxMC44LjEgTGVhZGluZyBhbmQgaGFsZi1sZWFkaW5nCisgICAgYXV0byBoYWxmTGVhZGlu
ZyA9IChsaW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KSkgLyAyOworICAgIC8v
IElubGluZSB0cmVlIGhlaWdodCBpcyBhbGwgaW50ZWdlciBiYXNlZC4KKyAgICByZXR1cm4gZmxv
b3JmKGFzY2VudCArIGhhbGZMZWFkaW5nKTsKK30KKworSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmVSZWN0QW5kTGluZUJveE9mZnNldCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZWRMaW5lTG9naWNhbFJlY3QoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29u
dGVudCkgY29uc3QKK3sKKyAgICBpZiAobGluZUNvbnRlbnQucnVucy5pc0VtcHR5KCkgfHwgbGlu
ZUNvbnRlbnQubGluZUJveC5pc0xpbmVWaXN1YWxseUVtcHR5KCkpCisgICAgICAgIHJldHVybiB7
IHsgfSwgeyBsaW5lQ29udGVudC5sb2dpY2FsVG9wTGVmdCwgbGluZUNvbnRlbnQubGluZUxvZ2lj
YWxXaWR0aCwgeyB9IH0gfTsKKyAgICBhdXRvJiByb290U3R5bGUgPSByb290KCkuc3R5bGUoKTsK
KyAgICBhdXRvJiBmb250TWV0cmljcyA9IHJvb3RTdHlsZS5mb250TWV0cmljcygpOworICAgIElu
bGluZUxheW91dFVuaXQgbGluZVNwYWNpbmcgPSBmb250TWV0cmljcy5saW5lU3BhY2luZygpOwor
ICAgIGF1dG8mIGxpbmVCb3ggPSBsaW5lQ29udGVudC5saW5lQm94OworICAgIC8vIENvbXB1dGUg
dGhlIGxpbmUgaGVpZ2h0LiBJdCdzIGVpdGhlciB0aGUgbGluZS1oZWlnaHQgdmFsdWUgKG5lZ2F0
aXZlIHZhbHVlIG1lYW5zIGxpbmUgaGVpZ2h0IGlzIG5vdCBzZXQpCisgICAgLy8gb3IgdGhlIGZv
bnQgbWV0cmljcydzIGxpbmUgc3BhY2luZy9saW5lIGJveCBoZWlnaHQuCisgICAgYXV0byBsaW5l
TG9naWNhbEhlaWdodCA9IHN0ZDo6bWF4KGxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBsaW5lU3Bh
Y2luZyk7CisgICAgaWYgKCFyb290U3R5bGUubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSkKKyAg
ICAgICAgbGluZUxvZ2ljYWxIZWlnaHQgPSByb290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7
CisgICAgYXV0byBsb2dpY2FsUmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyBsaW5lQ29udGVu
dC5sb2dpY2FsVG9wTGVmdCwgbGluZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCwgbGluZUxvZ2lj
YWxIZWlnaHR9OyAKKyAgICBpZiAobG9naWNhbFJlY3QuaGVpZ2h0KCkgPT0gbGluZUJveC5sb2dp
Y2FsSGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB7IHsgfSwgbG9naWNhbFJlY3QgfTsKKyAgICBh
dXRvIGhhbGZMZWFkaW5nT2Zmc2V0ID0gaGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBs
aW5lTG9naWNhbEhlaWdodCk7CisgICAgcmV0dXJuIHsgaGFsZkxlYWRpbmdPZmZzZXQgLSBsaW5l
Qm94LmFsaWdubWVudEJhc2VsaW5lKCksIGxvZ2ljYWxSZWN0IH07Cit9CisKK0Rpc3BsYXk6Oklu
bGluZVJlY3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNyZWF0ZURpc3BsYXlCb3hlc0Zvckxp
bmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAg
IGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwogICAgIGF1
dG8mIGxpbmVCb3ggPSBsaW5lQ29udGVudC5saW5lQm94OworICAgIGF1dG8gbGluZVJlY3RBbmRM
aW5lQm94T2Zmc2V0ID0gY29tcHV0ZWRMaW5lTG9naWNhbFJlY3QobGluZUNvbnRlbnQpOworICAg
IGF1dG8gbGluZUxvZ2ljYWxSZWN0ID0gbGluZVJlY3RBbmRMaW5lQm94T2Zmc2V0LmxvZ2ljYWxS
ZWN0OworICAgIGF1dG8gbGluZUJveFZlcnRpY2FsT2Zmc2V0ID0gbGluZVJlY3RBbmRMaW5lQm94
T2Zmc2V0LmxpbmVCb3hWZXJ0aWNhbE9mZnNldDsKKyAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxv
dyA9IERpc3BsYXk6OklubGluZVJlY3QgeyBsaW5lTG9naWNhbFJlY3QudG9wTGVmdCgpLCBzdGQ6
Om1heChsaW5lTG9naWNhbFJlY3Qud2lkdGgoKSwgbGluZUJveC5sb2dpY2FsV2lkdGgoKSksIHN0
ZDo6bWF4KGxpbmVMb2dpY2FsUmVjdC5oZWlnaHQoKSwgbGluZUJveFZlcnRpY2FsT2Zmc2V0ICsg
bGluZUJveC5sb2dpY2FsSGVpZ2h0KCkpIH07CisKICAgICBpZiAoIWxpbmVDb250ZW50LmZsb2F0
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0Nv
bnRleHQgeyByb290KCksICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUuZmxvYXRpbmdTdGF0ZSgpIH07
CiAgICAgICAgIC8vIE1vdmUgZmxvYXRzIHRvIHRoZWlyIGZpbmFsIHBvc2l0aW9uLgpAQCAtNDAx
LDggKzQzNyw4IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hl
c0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250CiAgICAgICAgICAgICBhdXRvJiBm
bG9hdEJveCA9IGZsb2F0Q2FuZGlkYXRlLml0ZW0tPmxheW91dEJveCgpOwogICAgICAgICAgICAg
YXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGZsb2F0Qm94KTsK
ICAgICAgICAgICAgIC8vIFNldCBzdGF0aWMgcG9zaXRpb24gZmlyc3QuCi0gICAgICAgICAgICBh
dXRvIHZlcnRpY2FsU3RhdGljUG9zaXRpb24gPSBmbG9hdENhbmRpZGF0ZS5pc0ludHJ1c2l2ZSA/
IGxpbmVCb3gubG9naWNhbFRvcCgpIDogbGluZUJveC5sb2dpY2FsQm90dG9tKCk7Ci0gICAgICAg
ICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lQm94LmxvZ2ljYWxMZWZ0KCksIHZlcnRp
Y2FsU3RhdGljUG9zaXRpb24gfSk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsU3RhdGljUG9z
aXRpb24gPSBmbG9hdENhbmRpZGF0ZS5pc0ludHJ1c2l2ZSA/IGxpbmVMb2dpY2FsUmVjdC50b3Ao
KSA6IGxpbmVMb2dpY2FsUmVjdC5ib3R0b20oKTsKKyAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0
VG9wTGVmdCh7IGxpbmVMb2dpY2FsUmVjdC5sZWZ0KCksIHZlcnRpY2FsU3RhdGljUG9zaXRpb24g
fSk7CiAgICAgICAgICAgICAvLyBGbG9hdCBpdC4KICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0
VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChmbG9hdEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzKSk7CiAgICAgICAgICAgICBmbG9hdGluZ0NvbnRleHQuYXBwZW5kKGZs
b2F0Qm94KTsKQEAgLTQxNyw3ICs0NTMsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udAogICAg
ICAgICBpbml0aWFsQ29udGFpbmdCbG9ja1NpemUgPSBnZW9tZXRyeUZvckJveChyb290KCkuaW5p
dGlhbENvbnRhaW5pbmdCbG9jaygpLCBFc2NhcGVSZWFzb246OlN0cm9rZU92ZXJmbG93TmVlZHNW
aWV3cG9ydEdlb21ldHJ5KS5jb250ZW50Qm94KCkuc2l6ZSgpOwogICAgIGF1dG8mIGlubGluZUNv
bnRlbnQgPSBmb3JtYXR0aW5nU3RhdGUuZW5zdXJlRGlzcGxheUlubGluZUNvbnRlbnQoKTsKICAg
ICBhdXRvIGxpbmVJbmRleCA9IGlubGluZUNvbnRlbnQubGluZUJveGVzLnNpemUoKTsKLSAgICBh
dXRvIGxpbmVJbmtPdmVyZmxvdyA9IGxpbmVCb3guc2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAg
YXV0byBsaW5lSW5rT3ZlcmZsb3cgPSBzY3JvbGxhYmxlT3ZlcmZsb3c7CiAgICAgLy8gQ29tcHV0
ZSBmaW5hbCBib3ggZ2VvbWV0cnkuCiAgICAgZm9yIChhdXRvJiBsaW5lUnVuIDogbGluZUNvbnRl
bnQucnVucykgewogICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgp
OwpAQCAtNDQzLDcgKzQ3OSw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERp
c3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250CiAgICAgICAgICAg
ICBhdXRvIGxvZ2ljYWxSZWN0ID0gbGluZVJ1bi5pc0JveCgpID8gbGluZUJveC5pbmxpbmVCb3hG
b3JMYXlvdXRCb3gobGF5b3V0Qm94KS5sb2dpY2FsUmVjdCgpIDogbGluZUJveC5pbmxpbmVSZWN0
Rm9yVGV4dFJ1bihsaW5lUnVuKTsKICAgICAgICAgICAgIC8vIElubGluZSBib3hlcyBhcmUgcmVs
YXRpdmUgdG8gdGhlIGxpbmUgYm94IHdoaWxlIGZpbmFsIERpc3BsYXk6OlJ1bnMgbmVlZCB0byBi
ZSByZWxhdGl2ZSB0byB0aGUgcGFyZW50IERpc3BsYXk6Qm94CiAgICAgICAgICAgICAvLyBGSVhN
RTogU2hvdWxkbid0IHdlIGp1c3QgbGVhdmUgdGhlbSBiZSByZWxhdGl2ZSB0byB0aGUgbGluZSBi
b3g/Ci0gICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlQnkoeyBsaW5lQm94LmxvZ2ljYWxMZWZ0
KCksIGxpbmVCb3gubG9naWNhbFRvcCgpIH0pOworICAgICAgICAgICAgbG9naWNhbFJlY3QubW92
ZUJ5KHsgbGluZUxvZ2ljYWxSZWN0LmxlZnQoKSwgbGluZUxvZ2ljYWxSZWN0LnRvcCgpICsgbGlu
ZUJveFZlcnRpY2FsT2Zmc2V0IH0pOwogICAgICAgICAgICAgYXV0byBpbmtPdmVyZmxvdyA9IGNv
bXB1dGVkSW5rT3ZlcmZsb3cobG9naWNhbFJlY3QpOwogICAgICAgICAgICAgbGluZUlua092ZXJm
bG93LmV4cGFuZFRvQ29udGFpbihpbmtPdmVyZmxvdyk7CiAgICAgICAgICAgICBpbmxpbmVDb250
ZW50LnJ1bnMuYXBwZW5kKHsgbGluZUluZGV4LCBsYXlvdXRCb3gsIGxvZ2ljYWxSZWN0LCBpbmtP
dmVyZmxvdywgbGluZVJ1bi5leHBhbnNpb24oKSwgbGluZVJ1bi50ZXh0Q29udGVudCgpIH0pOwpA
QCAtNDU2LDYgKzQ5Miw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3Bs
YXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250CiAgICAgICAgICAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsK
ICAgICAgICAgICAgIGF1dG8mIGlubGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0
Qm94KGxheW91dEJveCk7CiAgICAgICAgICAgICBhdXRvIHRvcExlZnQgPSBpbmxpbmVCb3gubG9n
aWNhbFJlY3QoKS50b3BMZWZ0KCk7CisgICAgICAgICAgICB0b3BMZWZ0Lm1vdmUoeyB9LCBsaW5l
Qm94VmVydGljYWxPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxvd1Bv
c2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICB0b3BMZWZ0ICs9IGdlb21ldHJ5KCkuaW5GbG93
UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
KTsKICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh0b0xheW91dFBvaW50KHRvcExl
ZnQpKTsKQEAgLTQ3MSwxNCArNTA4LDE0IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250CiAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgd2hlcmUgdGhlIGxvZ2ljYWwgdG8gcGh5c2ljYWwgdHJhbnNsYXRl
IHNob3VsZCBoYXBwZW4uCiAgICAgYXV0byBjb25zdHJ1Y3REaXNwbGF5TGluZSA9IFsmXSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBMYXlvdXQ6OkxpbmVCb3ggc2hvdWxkIGNvbnRhaW4gYWxsIGlubGlu
ZSBib3hlcyBhbmQgaXQgc2hvdWxkIG5vdCBoYXZlIG5laXRoZXIgdG9wL2xlZnQgZ2VvbWV0cnkg
bm9yIG92ZXJmbG93LiAKLSAgICAgICAgYXV0byBsaW5lUmVjdCA9IGxpbmVCb3gubG9naWNhbFJl
Y3QoKTsKICAgICAgICAgaWYgKGF1dG8gaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCA9IGxpbmVC
b3guaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCgpKSB7CiAgICAgICAgICAgICAvLyBQYWludGlu
ZyBjb2RlIChzcGVjaWZpY2FsbHkgVGV4dFJ1bidzIHhQb3MpIG5lZWRzIHRoZSBhbGlnbmVkIG9m
ZnNldCB0byBiZSBhYmxlIHRvIGNvbXB1dGUgdGFiIHBvc2l0aW9ucy4KLSAgICAgICAgICAgIGxp
bmVSZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQpOworICAg
ICAgICAgICAgbGluZUxvZ2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmhvcml6b250YWxBbGln
bm1lbnRPZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAgIGlubGluZUNvbnRlbnQubGluZUJveGVz
LmFwcGVuZCh7IGxpbmVSZWN0LCBsaW5lQm94LnNjcm9sbGFibGVPdmVyZmxvdygpLCBsaW5lSW5r
T3ZlcmZsb3csIGxpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSB9KTsKKyAgICAgICAgaW5saW5l
Q29udGVudC5saW5lQm94ZXMuYXBwZW5kKHsgbGluZUxvZ2ljYWxSZWN0LCBzY3JvbGxhYmxlT3Zl
cmZsb3csIGxpbmVJbmtPdmVyZmxvdywgbGluZUJveFZlcnRpY2FsT2Zmc2V0ICsgbGluZUJveC5h
bGlnbm1lbnRCYXNlbGluZSgpIH0pOwogICAgIH07CiAgICAgY29uc3RydWN0RGlzcGxheUxpbmUo
KTsKKyAgICByZXR1cm4gbGluZUxvZ2ljYWxSZWN0OwogfQogCiB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjppbnZhbGlkYXRlRm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0
YXRlJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDQwZTUzMDBkNGI5NzU4
YzA2MzRkOTQ1ZmE4NDNkNDc1Y2E1ZDJjMDEuLmMyM2NmZWVkODk5OWY5MDAxODNmMzMwN2E5NjJi
OWU4OTgwMDFhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtODcsNyAr
ODcsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKIAogICAgIHZvaWQgY29sbGVjdElu
bGluZUNvbnRlbnRJZk5lZWRlZCgpOwotICAgIHZvaWQgc2V0RGlzcGxheUJveGVzRm9yTGluZShj
b25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmKTsKKyAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IGNyZWF0ZURpc3BsYXlCb3hlc0ZvckxpbmVD
b250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIGNvbnN0IEhvcml6b250YWxD
b25zdHJhaW50cyYpOworICAgIHN0cnVjdCBMaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgeworICAg
ICAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hWZXJ0aWNhbE9mZnNldDsKKyAgICAgICAgRGlz
cGxheTo6SW5saW5lUmVjdCBsb2dpY2FsUmVjdDsKKyAgICB9OworICAgIExpbmVSZWN0QW5kTGlu
ZUJveE9mZnNldCBjb21wdXRlZExpbmVMb2dpY2FsUmVjdChjb25zdCBMaW5lQnVpbGRlcjo6TGlu
ZUNvbnRlbnQmKSBjb25zdDsKICAgICB2b2lkIGludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29u
c3QgSW52YWxpZGF0aW9uU3RhdGUmKTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdTdGF0
ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0
dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCb3guY3BwCmluZGV4IDAwN2NkZjk1YmE1OThjNDU0NjU1N2E1MDdmYzQ2MGNhNjRlNWE1ZmMu
LjFmMWEyMTliNTM5MmViMWU3ODlmOGI1OGY1NGMzMjM4YWI4ZDY4NWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3gu
Y3BwCkBAIC0zMSwxMyArMzEsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExh
eW91dCB7CiAKLXN0cnVjdCBBc2NlbnRBbmREZXNjZW50IHsKLSAgICBJbmxpbmVMYXlvdXRVbml0
IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGFzY2VudCArIGRlc2NlbnQ7IH0KLQotICAgIElubGlu
ZUxheW91dFVuaXQgYXNjZW50IHsgMCB9OwotICAgIElubGluZUxheW91dFVuaXQgZGVzY2VudCB7
IDAgfTsKLX07Ci0KIHN0cnVjdCBIYW5naW5nQ29udGVudCB7CiBwdWJsaWM6CiAgICAgdm9pZCBy
ZXNldCgpOwpAQCAtMTI0LDE2ICsxMTcsNiBAQCBzdGF0aWMgT3B0aW9uYWw8SW5saW5lTGF5b3V0
VW5pdD4gaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldChjb25zdCBMaW5lOjpSdW5MaXN0JgogICAg
IHJldHVybiB7IH07CiB9CiAKLWlubGluZSBzdGF0aWMgQXNjZW50QW5kRGVzY2VudCBoYWxmTGVh
ZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBJbmxpbmVMYXlvdXRV
bml0IGxpbmVMb2dpY2FsSGVpZ2h0KQotewotICAgIElubGluZUxheW91dFVuaXQgYXNjZW50ID0g
Zm9udE1ldHJpY3MuYXNjZW50KCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50ID0gZm9u
dE1ldHJpY3MuZGVzY2VudCgpOwotICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBoYWxmLWxlYWRp
bmcKLSAgICBhdXRvIGhhbGZMZWFkaW5nID0gKGxpbmVMb2dpY2FsSGVpZ2h0IC0gKGFzY2VudCAr
IGRlc2NlbnQpKSAvIDI7Ci0gICAgLy8gSW5saW5lIHRyZWUgaGVpZ2h0IGlzIGFsbCBpbnRlZ2Vy
IGJhc2VkLgotICAgIHJldHVybiB7IGZsb29yZihhc2NlbnQgKyBoYWxmTGVhZGluZyksIGNlaWxm
KGRlc2NlbnQgKyBoYWxmTGVhZGluZykgfTsKLX0KLQogTGluZUJveDo6SW5saW5lQm94OjpJbmxp
bmVCb3goY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHJl
Y3QsIElubGluZUxheW91dFVuaXQgYmFzZWxpbmUsIElubGluZUxheW91dFVuaXQgZGVzY2VudCwg
SXNDb25zaWRlcmVkRW1wdHkgaXNDb25zaWRlcmVkRW1wdHkpCiAgICAgOiBtX2xheW91dEJveCht
YWtlV2Vha1B0cihsYXlvdXRCb3gpKQogICAgICwgbV9sb2dpY2FsUmVjdChyZWN0KQpAQCAtMTQz
LDIxICsxMjYsMTUgQEAgTGluZUJveDo6SW5saW5lQm94OjpJbmxpbmVCb3goY29uc3QgQm94JiBs
YXlvdXRCb3gsIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHIKIHsKIH0KIAotTGluZUJveDo6
TGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQsIGNvbnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBjb25z
dCBMaW5lOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5
RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQpCi0gICAgOiBtX3JlY3QodG9wTGVmdCwgbG9naWNhbFdpZHRoLCB7IH0pCi0gICAgLCBt
X2NvbnRlbnRMb2dpY2FsV2lkdGgoY29udGVudExvZ2ljYWxXaWR0aCkKK0xpbmVCb3g6OkxpbmVC
b3goY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0
LCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29u
dGVudExvZ2ljYWxXaWR0aCwgY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgSXNMaW5lVmlzdWFs
bHlFbXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
aXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQorICAgIDogbV9sb2dpY2FsU2l6ZShjb250ZW50
TG9naWNhbFdpZHRoLCB7IH0pCisgICAgLCBtX2lzTGluZVZpc3VhbGx5RW1wdHkoaXNMaW5lVmlz
dWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMpCiAgICAgLCBtX2lubGluZUZv
cm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQogewotICAgIG1faG9yaXpv
bnRhbEFsaWdubWVudE9mZnNldCA9IExheW91dDo6aG9yaXpvbnRhbEFsaWdubWVudE9mZnNldChy
dW5zLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgbG9naWNhbFdpZHRoLCBjb250ZW50TG9n
aWNhbFdpZHRoLCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIGNvbnN0cnVjdElu
bGluZUJveGVzKHJ1bnMsIGlzTGluZVZpc3VhbGx5RW1wdHkpOworICAgIG1faG9yaXpvbnRhbEFs
aWdubWVudE9mZnNldCA9IExheW91dDo6aG9yaXpvbnRhbEFsaWdubWVudE9mZnNldChydW5zLCBy
b290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgbGluZUxvZ2ljYWxXaWR0aCwgY29udGVudExvZ2lj
YWxXaWR0aCwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICBjb25zdHJ1Y3RJbmxp
bmVCb3hlcyhydW5zKTsKICAgICBjb21wdXRlSW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KCk7Ci0g
ICAgYWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodChpc0xp
bmVWaXN1YWxseUVtcHR5KTsKLSAgICAvLyBDb21wdXRlIHNjcm9sbGFibGUgb3ZlcmZsb3cuCi0g
ICAgbV9zY3JvbGxhYmxlT3ZlcmZsb3cgPSBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgdG9wTGVmdCwg
c3RkOjptYXgobG9naWNhbFdpZHRoLCBtX3Jvb3RJbmxpbmVCb3gubG9naWNhbFdpZHRoKCkpLCB7
IH0gfTsKLSAgICBhdXRvIGxvZ2ljYWxCb3R0b20gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsgCi0g
ICAgZm9yIChhdXRvJiBpbmxpbmVCb3hFbnRyeSA6IG1faW5saW5lQm94UmVjdE1hcCkKLSAgICAg
ICAgbG9naWNhbEJvdHRvbSA9IHN0ZDo6bWF4KGxvZ2ljYWxCb3R0b20sIGlubGluZUJveEVudHJ5
LnZhbHVlLT5sb2dpY2FsUmVjdCgpLmJvdHRvbSgpKTsKLSAgICBtX3Njcm9sbGFibGVPdmVyZmxv
dy5leHBhbmRWZXJ0aWNhbGx5KGxvZ2ljYWxCb3R0b20pOworICAgIGFsaWduSW5saW5lQm94ZXNW
ZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoKTsKIH0KIAogRGlzcGxheTo6SW5saW5l
UmVjdCBMaW5lQm94OjppbmxpbmVSZWN0Rm9yVGV4dFJ1bihjb25zdCBMaW5lOjpSdW4mIHJ1bikg
Y29uc3QKQEAgLTE2OCwxOCArMTQ1LDE3IEBAIERpc3BsYXk6OklubGluZVJlY3QgTGluZUJveDo6
aW5saW5lUmVjdEZvclRleHRSdW4oY29uc3QgTGluZTo6UnVuJiBydW4pIGNvbnN0CiAgICAgcmV0
dXJuIHsgaW5saW5lQm94UmVjdC50b3AoKSwgbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZh
bHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pICsgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dp
Y2FsV2lkdGgoKSwgaW5saW5lQm94UmVjdC5oZWlnaHQoKSB9OwogfQogCi12b2lkIExpbmVCb3g6
OmNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZp
c3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0eSkKK3ZvaWQgTGluZUJveDo6Y29uc3RydWN0
SW5saW5lQm94ZXMoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucykKIHsKICAgICBhdXRvIGNvbnN0
cnVjdFJvb3RJbmxpbmVCb3ggPSBbJl0gewogICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJv
b3QoKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgcm9v
dElubGluZUJveEhlaWdodCA9IGZvbnRNZXRyaWNzLmhlaWdodCgpOwotICAgICAgICBhdXRvIHJv
b3RJbmxpbmVCb3hSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IHsgfSwgbV9ob3Jpem9udGFs
QWxpZ25tZW50T2Zmc2V0LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pLCBjb250ZW50TG9n
aWNhbFdpZHRoKCksIHJvb3RJbmxpbmVCb3hIZWlnaHQgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCByb290SW5saW5lQm94QmFzZWxpbmUgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKLSAgICAg
ICAgYXV0byByb290SW5saW5lQm94RGVzY2VudCA9IHJvb3RJbmxpbmVCb3hIZWlnaHQgLSByb290
SW5saW5lQm94QmFzZWxpbmU7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdo
dCA9IGZvbnRNZXRyaWNzLmhlaWdodCgpOworICAgICAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlz
cGxheTo6SW5saW5lUmVjdCB7IHsgfSwgbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZhbHVl
T3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pLCBsb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCB9
OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lID0gZm9udE1ldHJpY3MuYXNjZW50
KCk7CisgICAgICAgIGF1dG8gZGVzY2VudCA9IGxvZ2ljYWxIZWlnaHQgLSBiYXNlbGluZTsKICAg
ICAgICAgYXV0byBsaW5lSGFzSW1hZ2luYXJ5U3RydXQgPSAhbGF5b3V0U3RhdGUoKS5pblF1aXJr
c01vZGUoKTsKLSAgICAgICAgYXV0byByb290SW5saW5lQm94SXNDb25zaWRlcmVkRW1wdHkgPSBp
c0xpbmVWaXN1YWxseUVtcHR5ID09IElzTGluZVZpc3VhbGx5RW1wdHk6Ok5vICYmIGxpbmVIYXNJ
bWFnaW5hcnlTdHJ1dCA/IElubGluZUJveDo6SXNDb25zaWRlcmVkRW1wdHk6Ok5vIDogSW5saW5l
Qm94OjpJc0NvbnNpZGVyZWRFbXB0eTo6WWVzOwotCi0gICAgICAgIG1fcm9vdElubGluZUJveCA9
IElubGluZUJveCB7IHJvb3QoKSwgcm9vdElubGluZUJveFJlY3QsIHJvb3RJbmxpbmVCb3hCYXNl
bGluZSwgcm9vdElubGluZUJveERlc2NlbnQsIHJvb3RJbmxpbmVCb3hJc0NvbnNpZGVyZWRFbXB0
eSB9OworICAgICAgICBhdXRvIGlzSW5pdGlhbGx5Q29uc2lkZXJlZEVtcHR5ID0gICFtX2lzTGlu
ZVZpc3VhbGx5RW1wdHkgJiYgbGluZUhhc0ltYWdpbmFyeVN0cnV0ID8gSW5saW5lQm94OjpJc0Nv
bnNpZGVyZWRFbXB0eTo6Tm8gOiBJbmxpbmVCb3g6OklzQ29uc2lkZXJlZEVtcHR5OjpZZXM7Cisg
ICAgICAgIG1fcm9vdElubGluZUJveCA9IElubGluZUJveCB7IHJvb3QoKSwgbG9naWNhbFJlY3Qs
IGJhc2VsaW5lLCBkZXNjZW50LCBpc0luaXRpYWxseUNvbnNpZGVyZWRFbXB0eSB9OwogICAgICAg
ICBtX2lubGluZUJveFJlY3RNYXAuc2V0KCZyb290KCksICZtX3Jvb3RJbmxpbmVCb3gpOwogICAg
IH07CiAgICAgY29uc3RydWN0Um9vdElubGluZUJveCgpOwpAQCAtMjE5LDggKzE5NSw4IEBAIHZv
aWQgTGluZUJveDo6Y29uc3RydWN0SW5saW5lQm94ZXMoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVu
cywgSXNMaW5lVmlzdWFsbHlFbXB0CiAgICAgICAgICAgICAgICAgbV9pbmxpbmVCb3hMaXN0LmFw
cGVuZChXVEZNb3ZlKGlubGluZUJveCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
aWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKLSAgICAgICAgICAgIGF1dG8gaW5pdGlhbFdp
ZHRoID0gY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCk7CiAgICAgICAg
ICAgICBhdXRvIGlubGluZUJveExvZ2ljYWxMZWZ0ID0gbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zm
c2V0LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pICsgcnVuLmxvZ2ljYWxMZWZ0KCk7Cisg
ICAgICAgICAgICBhdXRvIGluaXRpYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2lj
YWxMZWZ0KCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5pdGlhbFdpZHRoID49IDApOwogICAgICAg
ICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygp
OwogICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gZm9udE1ldHJp
Y3MuaGVpZ2h0KCk7CkBAIC0zMDYsMjkgKzI4MiwyMiBAQCB2b2lkIExpbmVCb3g6OmNvbXB1dGVJ
bmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQoKQogICAgIH0KIH0KIAotdm9pZCBMaW5lQm94OjphbGln
bklubGluZUJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KElzTGluZVZpc3Vh
bGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0eSkKK3ZvaWQgTGluZUJveDo6YWxpZ25JbmxpbmVC
b3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodCgpCiB7CiAgICAgLy8gSW5saW5l
IGJveGVzIGFyZSBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGxpbmUgYm94IChhbmQg
bm90IGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGVpciBwYXJlbnRzKS4KICAgICAvLyBT
dGFydGluZyB3aXRoIHRoZSByb290IGlubGluZSBib3gsIHBvc2l0aW9uIHRoZSBhbmNlc3RvcnMg
Zmlyc3Qgc28gdGhhdCB0aGUgZGVzY2VuZGFudCBsaW5lIGJveGVzIHNlZSBhYnNvbHV0ZSB2ZXJ0
aWNhbCBwb3NpdGlvbnMuCi0gICAgYXV0byYgcm9vdFN0eWxlID0gcm9vdCgpLnN0eWxlKCk7Ci0g
ICAgYXV0byBjb250ZW50TG9naWNhbEJvdHRvbSA9IElubGluZUxheW91dFVuaXQgeyB9OworICAg
IGF1dG8gY29udGVudExvZ2ljYWxIZWlnaHQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKICAgICBh
dXRvIGFsaWduUm9vdElubGluZUJveCA9IFsmXSB7Ci0gICAgICAgIGF1dG8gdXNlZExpbmVIZWln
aHQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgaWYgKGlzTGluZVZpc3VhbGx5RW1w
dHkgPT0gSXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm8pCi0gICAgICAgICAgICB1c2VkTGluZUhlaWdo
dCA9IHJvb3RTdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKTsKLSAgICAgICAgYXV0byBhbGlnbm1l
bnRCYXNlbGluZSA9IGhhbGZMZWFkaW5nTWV0cmljcyhyb290U3R5bGUuZm9udE1ldHJpY3MoKSwg
dXNlZExpbmVIZWlnaHQpLmFzY2VudDsKLSAgICAgICAgYXV0byByb290SW5saW5lQm94VG9wUG9z
aXRpb24gPSBhbGlnbm1lbnRCYXNlbGluZSAtIG1fcm9vdElubGluZUJveC5iYXNlbGluZSgpOwot
ICAgICAgICBtX3Jvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChyb290SW5saW5lQm94VG9wUG9z
aXRpb24pOwotICAgICAgICBjb250ZW50TG9naWNhbEJvdHRvbSA9IG1fcm9vdElubGluZUJveC5s
b2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gbV9yb290SW5s
aW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVCb3ggOiBt
X2lubGluZUJveExpc3QpIHsKICAgICAgICAgICAgIGF1dG8gdmVydGljYWxBbGlnbiA9IGlubGlu
ZUJveC0+bGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CiAgICAgICAgICAgICBp
ZiAodmVydGljYWxBbGlnbiA9PSBWZXJ0aWNhbEFsaWduOjpCb3R0b20pIHsKICAgICAgICAgICAg
ICAgICAvLyBib3R0b20gYWxpZ24gYWx3YXlzIHB1c2hlcyB0aGUgcm9vdCBpbmxpbmUgYm94IGRv
d253YXJkcy4KICAgICAgICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0gc3RkOjptYXgoMC4wZiwg
aW5saW5lQm94LT5sb2dpY2FsQm90dG9tKCkgLSBtX3Jvb3RJbmxpbmVCb3gubG9naWNhbEJvdHRv
bSgpKTsKICAgICAgICAgICAgICAgICBtX3Jvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChtX3Jv
b3RJbmxpbmVCb3gubG9naWNhbFRvcCgpICsgb3ZlcmZsb3cpOwotICAgICAgICAgICAgICAgIGNv
bnRlbnRMb2dpY2FsQm90dG9tICs9IG92ZXJmbG93OworICAgICAgICAgICAgICAgIGNvbnRlbnRM
b2dpY2FsSGVpZ2h0ICs9IG92ZXJmbG93OwogICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJ0aWNh
bEFsaWduID09IFZlcnRpY2FsQWxpZ246OlRvcCkKLSAgICAgICAgICAgICAgICBjb250ZW50TG9n
aWNhbEJvdHRvbSA9IHN0ZDo6bWF4KGNvbnRlbnRMb2dpY2FsQm90dG9tLCBpbmxpbmVCb3gtPmxv
Z2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxIZWlnaHQgPSBz
dGQ6Om1heChjb250ZW50TG9naWNhbEhlaWdodCwgaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCkp
OwogICAgICAgICB9CiAgICAgfTsKICAgICBhbGlnblJvb3RJbmxpbmVCb3goKTsKQEAgLTM1OSw3
ICszMjgsNyBAQCB2b2lkIExpbmVCb3g6OmFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29t
cHV0ZUxpbmVCb3hIZWlnaHQoSXNMaW5lVmlzdWFsbHlFbQogICAgICAgICAgICAgaW5saW5lQm94
TG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgotICAgICAgICAgICAgaW5saW5lQm94
TG9naWNhbFRvcCA9IGNvbnRlbnRMb2dpY2FsQm90dG9tIC0gaW5saW5lQm94LT5sb2dpY2FsSGVp
Z2h0KCk7CisgICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gY29udGVudExvZ2ljYWxI
ZWlnaHQgLSBpbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogewogICAgICAgICAgICAgYXV0byYg
cGFyZW50TGF5b3V0Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOwpAQCAtMzc3LDcgKzM0Niw3IEBA
IHZvaWQgTGluZUJveDo6YWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJv
eEhlaWdodChJc0xpbmVWaXN1YWxseUVtCiAgICAgYXV0byBhZGp1c3RDb250ZW50Qm90dG9tSWZO
ZWVkZWQgPSBbJl0gewogICAgICAgICBpZiAoIW1fcm9vdElubGluZUJveC5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8gY29sbGFwc2VkQ29udGVudExvZ2ljYWxU
b3AgPSBjb250ZW50TG9naWNhbEJvdHRvbTsKKyAgICAgICAgYXV0byBjb2xsYXBzZWRDb250ZW50
TG9naWNhbFRvcCA9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0OwogICAgICAgICBhdXRvIGNvbGxhcHNl
ZENvbnRlbnRMb2dpY2FsQm90dG9tID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAgICAgICAgIGZv
ciAoYXV0byYgaW5saW5lQm94IDogbV9pbmxpbmVCb3hMaXN0KSB7CiAgICAgICAgICAgICBhdXRv
IHZlcnRpY2FsQWxpZ24gPSBpbmxpbmVCb3gtPmxheW91dEJveCgpLnN0eWxlKCkudmVydGljYWxB
bGlnbigpOwpAQCAtMzg5LDI0ICszNTgsMTkgQEAgdm9pZCBMaW5lQm94OjphbGlnbklubGluZUJv
eGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KElzTGluZVZpc3VhbGx5RW0KICAg
ICAgICAgICAgIGNvbGxhcHNlZENvbnRlbnRMb2dpY2FsVG9wID0gc3RkOjptaW4oY29sbGFwc2Vk
Q29udGVudExvZ2ljYWxUb3AsIGlubGluZUJveC0+bG9naWNhbFRvcCgpKTsKICAgICAgICAgICAg
IGNvbGxhcHNlZENvbnRlbnRMb2dpY2FsQm90dG9tID0gc3RkOjptYXgoY29sbGFwc2VkQ29udGVu
dExvZ2ljYWxCb3R0b20sIGlubGluZUJveC0+bG9naWNhbEJvdHRvbSgpKTsKICAgICAgICAgfQot
ICAgICAgICBpZiAoY29sbGFwc2VkQ29udGVudExvZ2ljYWxUb3AgPD0gMCkgewotICAgICAgICAg
ICAgY29udGVudExvZ2ljYWxCb3R0b20gPSBjb2xsYXBzZWRDb250ZW50TG9naWNhbEJvdHRvbTsK
KyAgICAgICAgaWYgKCFjb2xsYXBzZWRDb250ZW50TG9naWNhbFRvcCkgeworICAgICAgICAgICAg
Y29udGVudExvZ2ljYWxIZWlnaHQgPSBjb2xsYXBzZWRDb250ZW50TG9naWNhbEJvdHRvbTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBjb250ZW50TG9naWNhbEJvdHRv
bSA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBjb250ZW50TG9naWNhbEhlaWdodCA9
IElubGluZUxheW91dFVuaXQgeyB9OwogICAgICAgICBmb3IgKGF1dG8mIGlubGluZUJveCA6IG1f
aW5saW5lQm94TGlzdCkgewogICAgICAgICAgICAgaW5saW5lQm94LT5zZXRMb2dpY2FsVG9wKGlu
bGluZUJveC0+bG9naWNhbFRvcCgpIC0gY29sbGFwc2VkQ29udGVudExvZ2ljYWxUb3ApOwotICAg
ICAgICAgICAgY29udGVudExvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChjb250ZW50TG9naWNhbEJv
dHRvbSwgaW5saW5lQm94LT5sb2dpY2FsQm90dG9tKCkpOworICAgICAgICAgICAgY29udGVudExv
Z2ljYWxIZWlnaHQgPSBzdGQ6Om1heChjb250ZW50TG9naWNhbEhlaWdodCwgaW5saW5lQm94LT5s
b2dpY2FsQm90dG9tKCkpOwogICAgICAgICB9CiAgICAgfTsKICAgICBhZGp1c3RDb250ZW50Qm90
dG9tSWZOZWVkZWQoKTsKLSAgICAvLyBDb21wdXRlIHRoZSBsaW5lIGJveCBoZWlnaHQuIEl0J3Mg
ZWl0aGVyIHRoZSBsaW5lLWhlaWdodCB2YWx1ZSAobmVnYXRpdmUgdmFsdWUgbWVhbnMgbGluZSBo
ZWlnaHQgaXQgbm90IHNldCkgb3IKLSAgICAvLyBtYXhpbXVtIG9mIHRoZSByb290IGlubGluZSBi
b3gncyBib3R0b20gYW5kIHRoZSB0b3AgYWxpZ25lZCBjb250ZW50IGhlaWdodC4KLSAgICBpZiAo
aXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVtcHR5OjpObykgewotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGxpbmVTcGFjaW5nID0gcm9vdFN0eWxlLmZvbnRNZXRyaWNzKCku
bGluZVNwYWNpbmcoKTsKLSAgICAgICAgYXV0byBsaW5lQm94TG9naWNhbEhlaWdodCA9ICFyb290
U3R5bGUubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSA/IHJvb3RTdHlsZS5jb21wdXRlZExpbmVI
ZWlnaHQoKSA6IHN0ZDo6bWF4KGxpbmVTcGFjaW5nLCBjb250ZW50TG9naWNhbEJvdHRvbSk7Ci0g
ICAgICAgIG1fcmVjdC5zZXRIZWlnaHQobGluZUJveExvZ2ljYWxIZWlnaHQpOwotICAgIH0KKyAg
ICBpZiAoIW1faXNMaW5lVmlzdWFsbHlFbXB0eSkKKyAgICAgICAgbV9sb2dpY2FsU2l6ZS5zZXRI
ZWlnaHQoY29udGVudExvZ2ljYWxIZWlnaHQpOwogfQogCiBjb25zdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCYgTGluZUJveDo6Zm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCmlu
ZGV4IDVkN2QxY2M1MThiYjgxZjhkOGE3YzhlZGM0ODYxNWI5MjI0ZDI2MDEuLmE3MzJlYzNkYmE5
ZWFmZGYxNjY2ZjEzOWU4OGEzMTg5OWU5NWNhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKQEAgLTgwLDE5ICs4
MCwxNCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIElzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCB7IE5vLCBZZXMgfTsKICAgICBlbnVtIGNsYXNzIElzTGluZVZpc3VhbGx5RW1wdHkgeyBO
bywgWWVzIH07Ci0gICAgTGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNv
bnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBjb25zdCBMaW5lOjpS
dW5MaXN0JiwgSXNMaW5lVmlzdWFsbHlFbXB0eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
KTsKKyAgICBMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgSW5saW5lTGF5
b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
V2lkdGgsIGNvbnN0IExpbmU6OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpOwogCi0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5sZWZ0KCk7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9Ci0gICAgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnRvcCgpOyB9
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0LmJvdHRvbSgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Qud2lkdGgoKTsgfQotICAgIElubGluZUxheW91dFVuaXQgbG9naWNh
bEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5oZWlnaHQoKTsgfQotCi0gICAgY29uc3Qg
RGlzcGxheTo6SW5saW5lUmVjdCYgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7
IH0KLSAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBzY3JvbGxhYmxlT3ZlcmZsb3coKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVPdmVyZmxvdzsgfQorICAgIElubGluZUxheW91dFVu
aXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB9
CisgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9s
b2dpY2FsU2l6ZS5oZWlnaHQoKTsgfQorICAgIElubGluZUxheW91dFNpemUgbG9naWNhbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CiAKICAgICBPcHRpb25hbDxJbmxpbmVM
YXlvdXRVbml0PiBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9o
b3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0OyB9CisgICAgYm9vbCBpc0xpbmVWaXN1YWxseUVtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9pc0xpbmVWaXN1YWxseUVtcHR5OyB9CiAKICAgICBjb25zdCBJ
bmxpbmVCb3gmIGlubGluZUJveEZvckxheW91dEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29u
c3QgeyByZXR1cm4gKm1faW5saW5lQm94UmVjdE1hcC5nZXQoJmxheW91dEJveCk7IH0KICAgICBE
aXNwbGF5OjpJbmxpbmVSZWN0IGlubGluZVJlY3RGb3JUZXh0UnVuKGNvbnN0IExpbmU6OlJ1biYp
IGNvbnN0OwpAQCAtMTE1LDIyICsxMTAsMTkgQEAgcHVibGljOgogICAgIElubGluZUxheW91dFVu
aXQgYWxpZ25tZW50QmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gubG9n
aWNhbFRvcCgpICsgbV9yb290SW5saW5lQm94LmJhc2VsaW5lKCk7IH0KIAogcHJpdmF0ZToKLSAg
ICB2b2lkIGNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmU6OlJ1bkxpc3QmLCBJc0xpbmVW
aXN1YWxseUVtcHR5KTsKKyAgICB2b2lkIGNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmU6
OlJ1bkxpc3QmKTsKICAgICB2b2lkIGNvbXB1dGVJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQoKTsK
LSAgICB2b2lkIGFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWln
aHQoSXNMaW5lVmlzdWFsbHlFbXB0eSk7CisgICAgdm9pZCBhbGlnbklubGluZUJveGVzVmVydGlj
YWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KCk7CiAKICAgICBJbmxpbmVCb3gmIGlubGluZUJv
eEZvckxheW91dEJveChjb25zdCBCb3gmIGxheW91dEJveCkgeyByZXR1cm4gKm1faW5saW5lQm94
UmVjdE1hcC5nZXQoJmxheW91dEJveCk7IH0KIAotICAgIElubGluZUxheW91dFVuaXQgY29udGVu
dExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQot
CiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkg
Y29uc3Q7CiAgICAgY29uc3QgQm94JiByb290KCkgY29uc3Q7CiAgICAgTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRGlzcGxheTo6SW5saW5lUmVjdCBt
X3JlY3Q7Ci0gICAgRGlzcGxheTo6SW5saW5lUmVjdCBtX3Njcm9sbGFibGVPdmVyZmxvdzsKLSAg
ICBJbmxpbmVMYXlvdXRVbml0IG1fY29udGVudExvZ2ljYWxXaWR0aCB7IDAgfTsKKyAgICBJbmxp
bmVMYXlvdXRTaXplIG1fbG9naWNhbFNpemU7CisgICAgYm9vbCBtX2lzTGluZVZpc3VhbGx5RW1w
dHkgeyB0cnVlIH07CiAKICAgICBJbmxpbmVCb3ggbV9yb290SW5saW5lQm94OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnVpbGRlci5jcHAKaW5kZXggOWE3M2NlMTc5NjU5MTM2MmVhNjUzNzA2ZGU1OTFkZTViMDAy
ZjNhNy4uNjRiM2I4MmQzZDQxNGIwM2MxNjY1YjNlZTViM2ZjMGMzZjk0Zjg5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmNwcApAQCAtMzAyLDcgKzMwMiw5IEBAIExpbmVCdWlsZGVyOjpMaW5lQ29u
dGVudCBMaW5lQnVpbGRlcjo6bGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVtUmFu
Z2UmCiAgICAgYXV0byBpc0xhc3RMaW5lID0gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KGNv
bW1pdHRlZFJhbmdlLCBuZWVkc0xheW91dFJhbmdlLmVuZCwgY29tbWl0dGVkQ29udGVudC5wYXJ0
aWFsVHJhaWxpbmdDb250ZW50Lmhhc1ZhbHVlKCkpOwogICAgIGF1dG8gbGluZUlzVmlzdWFsbHlF
bXB0eSA9IG1fbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSA/IExpbmVCb3g6OklzTGluZVZpc3VhbGx5
RW1wdHk6OlllcyA6IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6Ok5vOwogICAgIHJldHVy
biBMaW5lQ29udGVudCB7IGNvbW1pdHRlZENvbnRlbnQucGFydGlhbFRyYWlsaW5nQ29udGVudCwg
Y29tbWl0dGVkUmFuZ2UsIG1fZmxvYXRzLCBtX2xpbmUuaGFzSW50cnVzaXZlRmxvYXQoKQotICAg
ICAgICAsIExpbmVCb3ggeyBmb3JtYXR0aW5nQ29udGV4dCgpLCBsaW5lTG9naWNhbFRvcExlZnQs
IG1fbGluZS5saW5lTG9naWNhbFdpZHRoKCksIG1fbGluZS5jb250ZW50TG9naWNhbFdpZHRoKCks
IG1fbGluZS5ydW5zKCksIGxpbmVJc1Zpc3VhbGx5RW1wdHkKKyAgICAgICAgLCBsaW5lTG9naWNh
bFRvcExlZnQKKyAgICAgICAgLCBtX2xpbmUubGluZUxvZ2ljYWxXaWR0aCgpCisgICAgICAgICwg
TGluZUJveCB7IGZvcm1hdHRpbmdDb250ZXh0KCksIG1fbGluZS5saW5lTG9naWNhbFdpZHRoKCks
IG1fbGluZS5jb250ZW50TG9naWNhbFdpZHRoKCksIG1fbGluZS5ydW5zKCksIGxpbmVJc1Zpc3Vh
bGx5RW1wdHkKICAgICAgICAgLCBpc0xhc3RMaW5lID8gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJ
bmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6
Ok5vIH0KICAgICAgICAgLCBtX2xpbmUucnVucygpIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaApp
bmRleCA0MmFmYTcyODk5ZjQ3MzBmY2M2NzI5MjUxNTRjOTZjMTJhMzBkZTNjLi5kMDg5ZmJmNDMw
ZmMxNGViZTE5ZDdlMThjZDVmZDc1NzNiOWRiOWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAg
LTYxLDYgKzYxLDggQEAgcHVibGljOgogICAgICAgICB1c2luZyBGbG9hdExpc3QgPSBWZWN0b3I8
RmxvYXQ+OwogICAgICAgICBjb25zdCBGbG9hdExpc3QmIGZsb2F0czsKICAgICAgICAgYm9vbCBo
YXNJbnRydXNpdmVGbG9hdCB7IGZhbHNlIH07CisgICAgICAgIElubGluZUxheW91dFBvaW50IGxv
Z2ljYWxUb3BMZWZ0OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGg7
CiAgICAgICAgIGNvbnN0IExpbmVCb3ggbGluZUJveDsKICAgICAgICAgY29uc3QgTGluZTo6UnVu
TGlzdCYgcnVuczsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408122</attachid>
            <date>2020-09-06 06:31:23 -0700</date>
            <delta_ts>2020-09-06 10:13:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216221-20200906063122.patch</filename>
            <type>text/plain</type>
            <size>67728</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Njc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc5MmE4ZTQwNjZmMjBl
MjAyOTYwOTY1NzAzYTU3MzNlOTNlNTAwMS4uOGQyY2RmNzAzNWE5MzE1MGM4OTBjMGNiZGU3N2Y2
OGFiMjEwYzA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIwLTA5LTA1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQm94
IHNob3VsZCBjb250YWluIGFsbCBpbmxpbmUgYm94ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjIyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRlRGlzcGxheUJv
eGVzRm9yTGluZUNvbnRlbnQpOgorCisyMDIwLTA5LTA1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExpbmUgaGFuZGluZyB0byBMaW5l
QnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE2MjAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
MS4gTGluZUJ1aWxkZXIgb3ducyBMaW5lIG5vdy4KKyAgICAgICAgMi4gTGluZUJ1aWxkZXIgY2Fu
IGJ1aWxkIGxpbmUgZm9yIGJvdGggbGF5b3V0IGFuZCBpbnRyaW5zaWMgd2lkdGggY29tcHV0YXRp
b24gKG5vdyB0aGVzZSBhcmUgdHdvIGRpc3RpbmN0IGNvZGUgcGF0aHMpLgorICAgICAgICAzLiBM
aW5lQnVpbGRlciBhbHNvIGNvbnN0cnVjdHMgdGhlIExpbmVCb3ggd2hlbiBuZWVkZWQgKFRoaXMg
d2FzIHByZXZpb3VzbHkgaW4gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQpLgor
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29uc3RyYWludCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNw
bGF5Qm94ZXNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yTGluZSk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDoKKyAgICAgICAg
KiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpjb21wdXRlZFRleHRJbmRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQm94Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQm94OjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQm94Ojpjb250ZW50TG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJveDo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpyb290IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6bGF5b3V0U3RhdGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OkxpbmVCdWls
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxheW91dElubGlu
ZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6aW5pdGlh
bGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb25zdHJhaW50c0ZvckxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y29tbWl0RmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmhhbmRsZUZsb2F0c0FuZElu
bGluZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y29t
bWl0UGFydGlhbENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRl
cjo6cmVidWlsZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
bGF5b3V0U3RhdGUgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUxpbmVCdWlsZGVyLmg6CisKIDIwMjAtMDktMDUgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgogCiAgICAgICAgIFtXZWJJRExdIEFkZCBzdXBwb3J0IGZvciBpbnRlcmZhY2UgbWl4
aW5zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxh
eUlubGluZVJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5
SW5saW5lUmVjdC5oCmluZGV4IDUyM2U4ZTAxMzU4ZTIyM2I5MDQzNTYzNmVhMzQyN2U3NDgxYmQx
YzMuLjQ5ZDYyNzc0YTM3YmFlNThhZWJjZWZjYzVhNTljOTRkZGY3ZDExMjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5SW5saW5lUmVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5SW5saW5lUmVjdC5o
CkBAIC0zNyw2ICszNyw3IEBAIHB1YmxpYzoKICAgICBJbmxpbmVSZWN0KCkgPSBkZWZhdWx0Owog
ICAgIElubGluZVJlY3QoSW5saW5lTGF5b3V0VW5pdCB0b3AsIElubGluZUxheW91dFVuaXQgbGVm
dCwgSW5saW5lTGF5b3V0VW5pdCB3aWR0aCwgSW5saW5lTGF5b3V0VW5pdCBoZWlnaHQpOwogICAg
IElubGluZVJlY3QoY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIHRvcExlZnQsIElubGluZUxheW91
dFVuaXQgd2lkdGgsIElubGluZUxheW91dFVuaXQgaGVpZ2h0KTsKKyAgICBJbmxpbmVSZWN0KGNv
bnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBjb25zdCBJbmxpbmVMYXlvdXRTaXplJik7
CiAgICAgCiAgICAgSW5saW5lTGF5b3V0VW5pdCB0b3AoKSBjb25zdDsKICAgICBJbmxpbmVMYXlv
dXRVbml0IGxlZnQoKSBjb25zdDsKQEAgLTEwOCw2ICsxMDksMTEgQEAgaW5saW5lIElubGluZVJl
Y3Q6OklubGluZVJlY3QoY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIHRvcExlZnQsIElubGluZUxh
eW91dFVuaXQKIHsKIH0KIAoraW5saW5lIElubGluZVJlY3Q6OklubGluZVJlY3QoY29uc3QgSW5s
aW5lTGF5b3V0UG9pbnQmIHRvcExlZnQsIGNvbnN0IElubGluZUxheW91dFNpemUmIHNpemUpCisg
ICAgOiBJbmxpbmVSZWN0KHRvcExlZnQueSgpLCB0b3BMZWZ0LngoKSwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKQoreworfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIGlubGluZSB2b2lkIElu
bGluZVJlY3Q6OmludmFsaWRhdGVQb3NpdGlvbigpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UmVjdC5oCmluZGV4IDkzYWFmNjI4ZjJlNGI4ZmRmMmI3
NTUyZTg5NTI3MTYwZDJhZmVlYzQuLmRlNzg3OTQ4ODQ2ZjA3YWQ4OWM1ODBkNmQyNDRjMzgzMGYx
YjAxYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNw
bGF5UmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5
UmVjdC5oCkBAIC0zOCw2ICszOCw3IEBAIHB1YmxpYzoKICAgICBSZWN0KCkgPSBkZWZhdWx0Owog
ICAgIFJlY3QoTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB3aWR0
aCwgTGF5b3V0VW5pdCBoZWlnaHQpOwogICAgIFJlY3QoTGF5b3V0UG9pbnQgdG9wTGVmdCwgTGF5
b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpOworICAgIFJlY3QoY29uc3QgTGF5b3V0
UG9pbnQmIHRvcExlZnQsIGNvbnN0IExheW91dFNpemUmKTsKICAgICAKICAgICBMYXlvdXRVbml0
IHRvcCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgbGVmdCgpIGNvbnN0OwpAQCAtMTEzLDYgKzEx
NCwxMSBAQCBpbmxpbmUgUmVjdDo6UmVjdChMYXlvdXRQb2ludCB0b3BMZWZ0LCBMYXlvdXRVbml0
IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKIHsKIH0KIAoraW5saW5lIFJlY3Q6OlJlY3QoY29u
c3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIGNvbnN0IExheW91dFNpemUmIHNpemUpCisgICAgOiBS
ZWN0KHRvcExlZnQueSgpLCB0b3BMZWZ0LngoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KQoreworfQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKIGlubGluZSB2b2lkIFJlY3Q6OmludmFsaWRh
dGVQb3NpdGlvbigpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXgg
ZmQyYzE4OGE1NjFjNTMwY2IxM2Y2OWQwODkwYzBmMjdhMGVkNmY5Ny4uMjhiNGYwODk4YmJlZmFm
YjZiMDgxMDUwY2E2MTc3MTE3OTdlOTA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmNwcApAQCAtMTQwLDQyICsxNDAsMjMgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAg
ICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG92ZXJmbG93Q29udGVudExlbmd0aDsKICAgICB9Owog
ICAgIE9wdGlvbmFsPFByZXZpb3VzTGluZT4gcHJldmlvdXNMaW5lOwotICAgIGF1dG8gbGluZSA9
IExpbmUgeyAqdGhpcyB9OwotICAgIGF1dG8gbGluZUJ1aWxkZXIgPSBMaW5lQnVpbGRlciB7ICp0
aGlzLCByb290KCksIGlubGluZUl0ZW1zIH07CisgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBG
bG9hdGluZ0NvbnRleHQgeyByb290KCksICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGlu
Z1N0YXRlKCkgfTsKKyAgICBhdXRvIGlzRmlyc3RMaW5lID0gIWZvcm1hdHRpbmdTdGF0ZSgpLmRp
c3BsYXlJbmxpbmVDb250ZW50KCkgfHwgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUlubGluZUNv
bnRlbnQoKS0+bGluZUJveGVzLmlzRW1wdHkoKTsKIAorICAgIGF1dG8gbGluZUJ1aWxkZXIgPSBM
aW5lQnVpbGRlciB7ICp0aGlzLCBmbG9hdGluZ0NvbnRleHQsIHJvb3QoKSwgaW5saW5lSXRlbXMg
fTsKICAgICB3aGlsZSAoIW5lZWRzTGF5b3V0UmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1
dG8gbGluZUNvbnN0cmFpbnRzID0gY29uc3RyYWludHNGb3JMaW5lKGNvbnN0cmFpbnRzLmhvcml6
b250YWwsIGxpbmVMb2dpY2FsVG9wKTsKLSAgICAgICAgbGluZS5vcGVuKGxpbmVDb25zdHJhaW50
cy5hdmFpbGFibGVMb2dpY2FsV2lkdGgpOwotICAgICAgICBsaW5lLnNldEhhc0ludHJ1c2l2ZUZs
b2F0KGxpbmVDb25zdHJhaW50cy5saW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQpOwogICAgICAgICAv
LyBUdXJuIHByZXZpb3VzIGxpbmUncyBvdmVyZmxvdyBjb250ZW50IGxlbmd0aCBpbnRvIHRoZSBu
ZXh0IGxpbmUncyBsZWFkaW5nIGNvbnRlbnQgcGFydGlhbCBsZW5ndGguCiAgICAgICAgIC8vICJz
cFs8LWxpbmUgYnJlYWstPl1saXRfY29udGVudCIgLT4gb3ZlcmZsb3cgbGVuZ3RoOiAxMSAtPiBs
ZWFkaW5nIHBhcnRpYWwgY29udGVudCBsZW5ndGg6IDExLgogICAgICAgICBhdXRvIHBhcnRpYWxM
ZWFkaW5nQ29udGVudExlbmd0aCA9IHByZXZpb3VzTGluZSA/IHByZXZpb3VzTGluZS0+b3ZlcmZs
b3dDb250ZW50TGVuZ3RoIDogV1RGOjpudWxsb3B0OwotICAgICAgICBhdXRvIGxpbmVDb250ZW50
ID0gbGluZUJ1aWxkZXIubGF5b3V0SW5saW5lQ29udGVudChsaW5lLCBuZWVkc0xheW91dFJhbmdl
LCBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOwotICAgICAgICBhdXRvIGxpbmVDb250ZW50
UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtUmFuZ2U7Ci0gICAgICAgIGF1dG8gaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50ID0gWyZdIHsKLSAgICAgICAgICAgIGlmIChsaW5lQ29udGVu
dC5wYXJ0aWFsQ29udGVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBpZiAobGluZUNvbnRlbnRSYW5nZS5lbmQgPT0gbmVlZHNMYXlvdXRSYW5nZS5lbmQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAvLyBPbWl0IGZsb2F0cyB0
byBzZWUgaWYgdGhpcyBpcyB0aGUgbGFzdCBsaW5lIHdpdGggaW5saW5lIGNvbnRlbnQuCi0gICAg
ICAgICAgICBmb3IgKGF1dG8gaSA9IG5lZWRzTGF5b3V0UmFuZ2UuZW5kOyBpLS07KSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFpbmxpbmVJdGVtc1tpXS5pc0Zsb2F0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpID09IGxpbmVDb250ZW50UmFuZ2UuZW5kIC0gMTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZsb2F0
IGl0ZW0uCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfSgpOwotICAgICAgICBsaW5lLmNsb3NlKGlzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCk7Ci0KLSAgICAgICAgYXV0byBsaW5lSXNWaXN1YWxseUVtcHR5ID0g
bGluZS5pc1Zpc3VhbGx5RW1wdHkoKSA/IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6Olll
cyA6IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6Ok5vOwotICAgICAgICBhdXRvIGxhc3RM
aW5lID0gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID8gTGluZUJveDo6SXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQ6Ok5vOwotICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94IHsgKnRoaXMsIGxpbmVDb25z
dHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgbGluZS5saW5lTG9naWNhbFdpZHRoKCksIGxpbmUuY29u
dGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29udGVudC5ydW5zLCBsaW5lSXNWaXN1YWxseUVtcHR5
LCBsYXN0TGluZX07Ci0gICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZUNvbnRlbnQs
IGxpbmVCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOworICAgICAgICBhdXRvIGluaXRpYWxM
aW5lQ29uc3RyYWludHMgPSBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQgeyBjb25zdHJhaW50
cy5ob3Jpem9udGFsLCB7IGxpbmVMb2dpY2FsVG9wLCBtYWtlT3B0aW9uYWwodG9MYXlvdXRVbml0
KHF1aXJrcygpLmluaXRpYWxMaW5lSGVpZ2h0KCkpKSB9IH07CisgICAgICAgIGF1dG8gbGluZUNv
bnRlbnQgPSBsaW5lQnVpbGRlci5sYXlvdXRJbmxpbmVDb250ZW50KG5lZWRzTGF5b3V0UmFuZ2Us
IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgaW5pdGlhbExpbmVDb25zdHJhaW50cywgaXNG
aXJzdExpbmUpOworICAgICAgICBhdXRvIGxpbmVMb2dpY2FsUmVjdCA9IGNyZWF0ZURpc3BsYXlC
b3hlc0ZvckxpbmVDb250ZW50KGxpbmVDb250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsK
IAorICAgICAgICBhdXRvIGxpbmVDb250ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVt
UmFuZ2U7CiAgICAgICAgIGlmICghbGluZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVChuZWVkc0xheW91dFJhbmdlLnN0YXJ0IDwgbGluZUNvbnRlbnRSYW5nZS5l
bmQpOwotICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3AgPSBsaW5lQm94LmxvZ2ljYWxCb3R0b20o
KTsKKyAgICAgICAgICAgIGlzRmlyc3RMaW5lID0gZmFsc2U7CisgICAgICAgICAgICBsaW5lTG9n
aWNhbFRvcCA9IGxpbmVMb2dpY2FsUmVjdC5ib3R0b20oKTsKICAgICAgICAgICAgIC8vIFdoZW4g
dGhlIHRyYWlsaW5nIGNvbnRlbnQgaXMgcGFydGlhbCwgd2UgbmVlZCB0byByZXVzZSB0aGUgbGFz
dCBJbmxpbmVUZXh0SXRlbS4KICAgICAgICAgICAgIGF1dG8gbGFzdElubGluZUl0ZW1OZWVkc1Bh
cnRpYWxMYXlvdXQgPSBsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudC5oYXNWYWx1ZSgpOwogICAg
ICAgICAgICAgaWYgKGxhc3RJbmxpbmVJdGVtTmVlZHNQYXJ0aWFsTGF5b3V0KSB7CkBAIC0xOTYs
MTAgKzE3Nyw5IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5s
aW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lQnVpbGRlcjo6CiAgICAgICAgIH0KICAgICAgICAg
Ly8gRmxvYXRzIHByZXZlbnRlZCB1cyBwbGFjaW5nIGFueSBjb250ZW50IG9uIHRoZSBsaW5lLgog
ICAgICAgICBBU1NFUlQobGluZUNvbnRlbnQucnVucy5pc0VtcHR5KCkpOwotICAgICAgICBBU1NF
UlQobGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKKyAgICAgICAgQVNTRVJUKGxpbmVDb250ZW50
Lmhhc0ludHJ1c2l2ZUZsb2F0KTsKICAgICAgICAgLy8gTW92ZSB0aGUgbmV4dCBsaW5lIGJlbG93
IHRoZSBpbnRydXNpdmUgZmxvYXQuCi0gICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxv
YXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdT
dGF0ZSgpIH07Ci0gICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0aW5nQ29udGV4
dC5jb25zdHJhaW50cyhsaW5lTG9naWNhbFRvcCwgdG9MYXlvdXRVbml0KGxpbmVCb3gubG9naWNh
bEJvdHRvbSgpKSk7CisgICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0aW5nQ29u
dGV4dC5jb25zdHJhaW50cyhsaW5lTG9naWNhbFRvcCwgdG9MYXlvdXRVbml0KGxpbmVMb2dpY2Fs
UmVjdC5ib3R0b20oKSkpOwogICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0IHx8
IGZsb2F0Q29uc3RyYWludHMucmlnaHQpOwogICAgICAgICBzdGF0aWMgYXV0byBpbmlmaXRlUG9p
bnQgPSBQb2ludEluQ29udGV4dFJvb3Q6Om1heCgpOwogICAgICAgICAvLyBJbiBjYXNlIG9mIGxl
ZnQgYW5kIHJpZ2h0IGNvbnN0cmFpbnRzLCB3ZSBuZWVkIHRvIHBpY2sgdGhlIG9uZSB0aGF0J3Mg
Y2xvc2VyIHRvIHRoZSBjdXJyZW50IGxpbmUuCkBAIC0yNzAsMTggKzI1MCwxNCBAQCBJbmxpbmVM
YXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRo
Rm9yQ29uc3RyYWludChJbgogewogICAgIGF1dG8mIGlubGluZUl0ZW1zID0gZm9ybWF0dGluZ1N0
YXRlKCkuaW5saW5lSXRlbXMoKTsKICAgICBhdXRvIG1heGltdW1MaW5lV2lkdGggPSBJbmxpbmVM
YXlvdXRVbml0IHsgfTsKLSAgICBhdXRvIGxpbmUgPSBMaW5lIHsgKnRoaXMgfTsKLSAgICBhdXRv
IGxpbmVCdWlsZGVyID0gTGluZUJ1aWxkZXIgeyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9
OworICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAq
dGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07CisgICAgYXV0byBsaW5l
QnVpbGRlciA9IExpbmVCdWlsZGVyIHsgKnRoaXMsIGZsb2F0aW5nQ29udGV4dCwgcm9vdCgpLCBp
bmxpbmVJdGVtcyB9OwogICAgIGF1dG8gbGF5b3V0UmFuZ2UgPSBMaW5lQnVpbGRlcjo6SW5saW5l
SXRlbVJhbmdlIHsgMCAsIGlubGluZUl0ZW1zLnNpemUoKSB9OwogICAgIHdoaWxlICghbGF5b3V0
UmFuZ2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE9ubHkgdGhlIGhvcml6dG9uYWwgYXZhaWxh
YmxlIHdpZHRoIGlzIGNvbnN0cmFpbmVkIHdoZW4gY29tcHV0aW5nIGludHJpbnNpYyB3aWR0aC4K
LSAgICAgICAgbGluZS5vcGVuKGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAgYXV0byBsaW5lQ29u
dGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElubGluZUNvbnRlbnQobGluZSwgbGF5b3V0UmFuZ2Us
IHsgfSk7Ci0gICAgICAgIC8vIEZJWE1FOiBGaW5kIG91dCBpZiBtaW4vbWF4IG5lZWRzIHRvIHNl
dCB0aGUgaXNMYXN0TGluZSBiaXQuCi0gICAgICAgIGxpbmUuY2xvc2UoZmFsc2UpOwotICAgICAg
ICBsYXlvdXRSYW5nZS5zdGFydCA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1SYW5nZS5lbmQ7Cisg
ICAgICAgIGF1dG8gaW50cmluc2ljQ29udGVudCA9IGxpbmVCdWlsZGVyLmNvbXB1dGVkSW50cmlu
c2ljV2lkdGgobGF5b3V0UmFuZ2UsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgbGF5b3V0UmFu
Z2Uuc3RhcnQgPSBpbnRyaW5zaWNDb250ZW50LmlubGluZUl0ZW1SYW5nZS5lbmQ7CiAgICAgICAg
IC8vIEZJWE1FOiBVc2UgbGluZSBsb2dpY2FsIGxlZnQgYW5kIHJpZ2h0IHRvIHRha2UgZmxvYXRz
IGludG8gYWNjb3VudC4KLSAgICAgICAgbWF4aW11bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGlt
dW1MaW5lV2lkdGgsIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgbWF4aW11
bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgsIGludHJpbnNpY0NvbnRlbnQu
bG9naWNhbFdpZHRoKTsKICAgICB9CiAgICAgcmV0dXJuIG1heGltdW1MaW5lV2lkdGg7CiB9CkBA
IC00MTUsNzggKzM5MSw0NSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0
SW5saW5lQ29udGVudElmTmVlZGVkKCkKICAgICB9CiB9CiAKLUlubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpMaW5lQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRz
Rm9yTGluZShjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50
cywgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCkKK2lubGluZSBzdGF0aWMgSW5saW5l
TGF5b3V0VW5pdCBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRy
aWNzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQogewotICAgIGF1dG8gbGlu
ZUxvZ2ljYWxMZWZ0ID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0OwotICAgIGF1
dG8gbGluZUxvZ2ljYWxSaWdodCA9IGxpbmVMb2dpY2FsTGVmdCArIGhvcml6b250YWxDb25zdHJh
aW50cy5sb2dpY2FsV2lkdGg7Ci0gICAgYXV0byBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgPSBm
YWxzZTsKLQotICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9v
dCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07Ci0gICAgLy8g
Q2hlY2sgZm9yIGludHJ1ZGluZyBmbG9hdHMgYW5kIGFkanVzdCBsb2dpY2FsIGxlZnQvYXZhaWxh
YmxlIHdpZHRoIGZvciB0aGlzIGxpbmUgYWNjb3JkaW5nbHkuCi0gICAgaWYgKCFmbG9hdGluZ0Nv
bnRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgdmFy
aWFibGUgbGluZSBoZWlnaHQsIHdoZXJlIHRoZSBpbnRydXNpdmUgZmxvYXRzIHNob3VsZCBiZSBw
cm9iZWQgYXMgdGhlIGxpbmUgaGVpZ2h0IGdyb3dzLgotICAgICAgICBhdXRvIGZsb2F0Q29uc3Ry
YWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHModG9MYXlvdXRVbml0KGxpbmVMb2dp
Y2FsVG9wKSwgdG9MYXlvdXRVbml0KGxpbmVMb2dpY2FsVG9wICsgcXVpcmtzKCkuaW5pdGlhbExp
bmVIZWlnaHQoKSkpOwotICAgICAgICAvLyBDaGVjayBpZiB0aGVzZSBjb25zdHJhaW50cyBhY3R1
YWxseSBwdXQgbGltaXRhdGlvbiBvbiB0aGUgbGluZS4KLSAgICAgICAgaWYgKGZsb2F0Q29uc3Ry
YWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLmxlZnQtPnggPD0gbGluZUxvZ2ljYWxMZWZ0
KQotICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5sZWZ0ID0geyB9OwotCi0gICAgICAgIGlm
IChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ICYmIGZsb2F0Q29uc3RyYWludHMucmlnaHQtPnggPj0g
bGluZUxvZ2ljYWxSaWdodCkKLSAgICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMucmlnaHQgPSB7
IH07Ci0KLSAgICAgICAgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0ID0gZmxvYXRDb25zdHJhaW50
cy5sZWZ0IHx8IGZsb2F0Q29uc3RyYWludHMucmlnaHQ7Ci0KLSAgICAgICAgaWYgKGZsb2F0Q29u
c3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KSB7Ci0gICAgICAgICAgICBB
U1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGZsb2F0Q29uc3RyYWludHMucmlnaHQt
PngpOwotICAgICAgICAgICAgbGluZUxvZ2ljYWxSaWdodCA9IGZsb2F0Q29uc3RyYWludHMucmln
aHQtPng7Ci0gICAgICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBmbG9hdENvbnN0cmFpbnRzLmxl
ZnQtPng7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmxvYXRDb25zdHJhaW50cy5sZWZ0KSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54ID49IGxpbmVMb2dpY2FsTGVm
dCk7Ci0gICAgICAgICAgICBsaW5lTG9naWNhbExlZnQgPSBmbG9hdENvbnN0cmFpbnRzLmxlZnQt
Png7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmxvYXRDb25zdHJhaW50cy5yaWdodCkgewotICAgICAg
ICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMucmlnaHQtPnggPj0gbGluZUxvZ2ljYWxMZWZ0
KTsKLSAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0
LT54OwotICAgICAgICB9Ci0gICAgfQorICAgIElubGluZUxheW91dFVuaXQgYXNjZW50ID0gZm9u
dE1ldHJpY3MuYXNjZW50KCk7CisgICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50ID0gZm9udE1l
dHJpY3MuZGVzY2VudCgpOworICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBoYWxmLWxlYWRpbmcK
KyAgICBhdXRvIGhhbGZMZWFkaW5nID0gKGxpbmVMb2dpY2FsSGVpZ2h0IC0gKGFzY2VudCArIGRl
c2NlbnQpKSAvIDI7CisgICAgLy8gSW5saW5lIHRyZWUgaGVpZ2h0IGlzIGFsbCBpbnRlZ2VyIGJh
c2VkLgorICAgIHJldHVybiBmbG9vcmYoYXNjZW50ICsgaGFsZkxlYWRpbmcpOworfQogCi0gICAg
YXV0byBjb21wdXRlZFRleHRJbmRlbnQgPSBbJl0gewotICAgICAgICAvLyB0ZXh0LWluZGVudCBw
cm9wZXJ0eSBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gbGluZXMgb2YgaW5s
aW5lIGNvbnRlbnQgaW4gYSBibG9jay4KLSAgICAgICAgLy8gVGhlIGluZGVudCBpcyB0cmVhdGVk
IGFzIGEgbWFyZ2luIGFwcGxpZWQgdG8gdGhlIHN0YXJ0IGVkZ2Ugb2YgdGhlIGxpbmUgYm94Lgot
ICAgICAgICAvLyBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgb25seSBsaW5lcyB0aGF0IGFy
ZSB0aGUgZmlyc3QgZm9ybWF0dGVkIGxpbmUgb2YgYW4gZWxlbWVudCBhcmUgYWZmZWN0ZWQuCi0g
ICAgICAgIC8vIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgbGluZSBvZiBhbiBhbm9ueW1vdXMgYmxv
Y2sgYm94IGlzIG9ubHkgYWZmZWN0ZWQgaWYgaXQgaXMgdGhlIGZpcnN0IGNoaWxkIG9mIGl0cyBw
YXJlbnQgZWxlbWVudC4KLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBlYWNoLWxp
bmUuCi0gICAgICAgIC8vIFtJbnRlZ3JhdGlvbl0gcm9vdCgpLT5wYXJlbnQoKSB3b3VsZCBub3Jt
YWxseSBwcm9kdWNlIGEgdmFsaWQgbGF5b3V0IGJveC4KLSAgICAgICAgYXV0byYgcm9vdCA9IHRo
aXMtPnJvb3QoKTsKLSAgICAgICAgYXV0byBpc0Zvcm1hdHRpbmdDb250ZXh0Um9vdENhbmRpZGF0
ZVRvVGV4dEluZGVudCA9ICFyb290LmlzQW5vbnltb3VzKCk7Ci0gICAgICAgIGlmIChyb290Lmlz
QW5vbnltb3VzKCkpIHsKLSAgICAgICAgICAgIC8vIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVk
IGJ5IHRoZSBlYWNoLWxpbmUgYW5kL29yIGhhbmdpbmcga2V5d29yZHMsIG9ubHkgbGluZXMgdGhh
dCBhcmUgdGhlIGZpcnN0IGZvcm1hdHRlZCBsaW5lCi0gICAgICAgICAgICAvLyBvZiBhbiBlbGVt
ZW50IGFyZSBhZmZlY3RlZC4KLSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCB0aGUgZmlyc3Qg
bGluZSBvZiBhbiBhbm9ueW1vdXMgYmxvY2sgYm94IGlzIG9ubHkgYWZmZWN0ZWQgaWYgaXQgaXMg
dGhlIGZpcnN0IGNoaWxkIG9mIGl0cyBwYXJlbnQgZWxlbWVudC4KLSAgICAgICAgICAgIGlzRm9y
bWF0dGluZ0NvbnRleHRSb290Q2FuZGlkYXRlVG9UZXh0SW5kZW50ID0gUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0
aW9uRW5hYmxlZCgpCi0gICAgICAgICAgICAgICAgPyBsYXlvdXRTdGF0ZSgpLmlzSW50ZWdyYXRl
ZFJvb3RCb3hGaXJzdENoaWxkKCkKLSAgICAgICAgICAgICAgICA6IHJvb3QucGFyZW50KCkuZmly
c3RJbkZsb3dDaGlsZCgpID09ICZyb290OwotICAgICAgICB9Ci0gICAgICAgIGlmICghaXNGb3Jt
YXR0aW5nQ29udGV4dFJvb3RDYW5kaWRhdGVUb1RleHRJbmRlbnQpCi0gICAgICAgICAgICByZXR1
cm4gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgIGF1dG8gaW52ZXJ0TGluZVJhbmdlID0g
ZmFsc2U7Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICAgICAgaW52ZXJ0TGluZVJhbmdlID0g
cm9vdC5zdHlsZSgpLnRleHRJbmRlbnRUeXBlKCkgPT0gVGV4dEluZGVudFR5cGU6Okhhbmdpbmc7
Ci0jZW5kaWYKLSAgICAgICAgYXV0byBpc0ZpcnN0TGluZSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmVu
c3VyZURpc3BsYXlJbmxpbmVDb250ZW50KCkubGluZUJveGVzLmlzRW1wdHkoKTsKLSAgICAgICAg
Ly8gdGV4dC1pbmRlbnQ6IGhhbmdpbmcgaW52ZXJ0cyB3aGljaCBsaW5lcyBhcmUgYWZmZWN0ZWQu
Ci0gICAgICAgIC8vIGludmVydGVkIGxpbmUgcmFuZ2UgLT4gYWxsIHRoZSBsaW5lcyBleGNlcHQg
dGhlIGZpcnN0IG9uZS4KLSAgICAgICAgLy8gIWludmVydGVkIGxpbmUgcmFuZ2UgLT4gZmlyc3Qg
bGluZSBnZXRzIHRoZSBpbmRlbnQuCi0gICAgICAgIGF1dG8gc2hvdWxkSW5kZW50ID0gaW52ZXJ0
TGluZVJhbmdlICE9IGlzRmlyc3RMaW5lOwotICAgICAgICBpZiAoIXNob3VsZEluZGVudCkKLSAg
ICAgICAgICAgIHJldHVybiBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgcmV0dXJuIGdl
b21ldHJ5KCkuY29tcHV0ZWRUZXh0SW5kZW50KHJvb3QsIGhvcml6b250YWxDb25zdHJhaW50cyku
dmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSk7Ci0gICAgfTsKLSAgICBsaW5lTG9naWNhbExl
ZnQgKz0gY29tcHV0ZWRUZXh0SW5kZW50KCk7Ci0gICAgcmV0dXJuIExpbmVDb25zdHJhaW50cyB7
IHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBsaW5lTG9naWNhbFJpZ2h0IC0g
bGluZUxvZ2ljYWxMZWZ0LCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgfTsKK0lubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpMaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVkTGluZUxvZ2ljYWxSZWN0KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29u
dGVudCYgbGluZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgaWYgKGxpbmVDb250ZW50LnJ1bnMuaXNF
bXB0eSgpIHx8IGxpbmVDb250ZW50LmxpbmVCb3guaXNMaW5lVmlzdWFsbHlFbXB0eSgpKQorICAg
ICAgICByZXR1cm4geyB7IH0sIHsgbGluZUNvbnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVDb250
ZW50LmxpbmVMb2dpY2FsV2lkdGgsIHsgfSB9IH07CisgICAgYXV0byYgcm9vdFN0eWxlID0gcm9v
dCgpLnN0eWxlKCk7CisgICAgYXV0byYgZm9udE1ldHJpY3MgPSByb290U3R5bGUuZm9udE1ldHJp
Y3MoKTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVTcGFjaW5nID0gZm9udE1ldHJpY3MubGlu
ZVNwYWNpbmcoKTsKKyAgICBhdXRvJiBsaW5lQm94ID0gbGluZUNvbnRlbnQubGluZUJveDsKKyAg
ICAvLyBDb21wdXRlIHRoZSBsaW5lIGhlaWdodC4gSXQncyBlaXRoZXIgdGhlIGxpbmUtaGVpZ2h0
IHZhbHVlIChuZWdhdGl2ZSB2YWx1ZSBtZWFucyBsaW5lIGhlaWdodCBpcyBub3Qgc2V0KQorICAg
IC8vIG9yIHRoZSBmb250IG1ldHJpY3MncyBsaW5lIHNwYWNpbmcvbGluZSBib3ggaGVpZ2h0Lgor
ICAgIGF1dG8gbGluZUxvZ2ljYWxIZWlnaHQgPSBzdGQ6Om1heChsaW5lQm94LmxvZ2ljYWxIZWln
aHQoKSwgbGluZVNwYWNpbmcpOworICAgIGlmICghcm9vdFN0eWxlLmxpbmVIZWlnaHQoKS5pc05l
Z2F0aXZlKCkpCisgICAgICAgIGxpbmVMb2dpY2FsSGVpZ2h0ID0gcm9vdFN0eWxlLmNvbXB1dGVk
TGluZUhlaWdodCgpOworICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpJbmxpbmVSZWN0
IHsgbGluZUNvbnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVDb250ZW50LmxpbmVMb2dpY2FsV2lk
dGgsIGxpbmVMb2dpY2FsSGVpZ2h0fTsgCisgICAgaWYgKGxvZ2ljYWxSZWN0LmhlaWdodCgpID09
IGxpbmVCb3gubG9naWNhbEhlaWdodCgpKQorICAgICAgICByZXR1cm4geyB7IH0sIGxvZ2ljYWxS
ZWN0IH07CisgICAgYXV0byBoYWxmTGVhZGluZ09mZnNldCA9IGhhbGZMZWFkaW5nTWV0cmljcyhm
b250TWV0cmljcywgbGluZUxvZ2ljYWxIZWlnaHQpOworICAgIHJldHVybiB7IGhhbGZMZWFkaW5n
T2Zmc2V0IC0gbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpLCBsb2dpY2FsUmVjdCB9OwogfQog
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNv
bnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gm
IGxpbmVCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFp
bnRzKQorRGlzcGxheTo6SW5saW5lUmVjdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRl
RGlzcGxheUJveGVzRm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50
JiBsaW5lQ29udGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29u
c3RyYWludHMpCiB7CiAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGlu
Z1N0YXRlKCk7CisgICAgYXV0byYgbGluZUJveCA9IGxpbmVDb250ZW50LmxpbmVCb3g7CisgICAg
YXV0byBsaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgPSBjb21wdXRlZExpbmVMb2dpY2FsUmVjdChs
aW5lQ29udGVudCk7CisgICAgYXV0byBsaW5lTG9naWNhbFJlY3QgPSBsaW5lUmVjdEFuZExpbmVC
b3hPZmZzZXQubG9naWNhbFJlY3Q7CisgICAgYXV0byBsaW5lQm94VmVydGljYWxPZmZzZXQgPSBs
aW5lUmVjdEFuZExpbmVCb3hPZmZzZXQubGluZUJveFZlcnRpY2FsT2Zmc2V0OworICAgIGF1dG8g
c2Nyb2xsYWJsZU92ZXJmbG93ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IGxpbmVMb2dpY2FsUmVj
dC50b3BMZWZ0KCksIHN0ZDo6bWF4KGxpbmVMb2dpY2FsUmVjdC53aWR0aCgpLCBsaW5lQm94Lmxv
Z2ljYWxXaWR0aCgpKSwgc3RkOjptYXgobGluZUxvZ2ljYWxSZWN0LmhlaWdodCgpLCBsaW5lQm94
VmVydGljYWxPZmZzZXQgKyBsaW5lQm94LmxvZ2ljYWxIZWlnaHQoKSkgfTsKKwogICAgIGlmICgh
bGluZUNvbnRlbnQuZmxvYXRzLmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvIGZsb2F0aW5nQ29u
dGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZS5m
bG9hdGluZ1N0YXRlKCkgfTsKICAgICAgICAgLy8gTW92ZSBmbG9hdHMgdG8gdGhlaXIgZmluYWwg
cG9zaXRpb24uCkBAIC00OTQsOCArNDM3LDggQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnQKICAg
ICAgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gZmxvYXRDYW5kaWRhdGUuaXRlbS0+bGF5b3V0Qm94
KCk7CiAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3Bs
YXlCb3goZmxvYXRCb3gpOwogICAgICAgICAgICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJz
dC4KLSAgICAgICAgICAgIGF1dG8gdmVydGljYWxTdGF0aWNQb3NpdGlvbiA9IGZsb2F0Q2FuZGlk
YXRlLmlzSW50cnVzaXZlID8gbGluZUJveC5sb2dpY2FsVG9wKCkgOiBsaW5lQm94LmxvZ2ljYWxC
b3R0b20oKTsKLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmVCb3gubG9n
aWNhbExlZnQoKSwgdmVydGljYWxTdGF0aWNQb3NpdGlvbiB9KTsKKyAgICAgICAgICAgIGF1dG8g
dmVydGljYWxTdGF0aWNQb3NpdGlvbiA9IGZsb2F0Q2FuZGlkYXRlLmlzSW50cnVzaXZlID8gbGlu
ZUxvZ2ljYWxSZWN0LnRvcCgpIDogbGluZUxvZ2ljYWxSZWN0LmJvdHRvbSgpOworICAgICAgICAg
ICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHsgbGluZUxvZ2ljYWxSZWN0LmxlZnQoKSwgdmVydGlj
YWxTdGF0aWNQb3NpdGlvbiB9KTsKICAgICAgICAgICAgIC8vIEZsb2F0IGl0LgogICAgICAgICAg
ICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0
KGZsb2F0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpKTsKICAgICAgICAgICAgIGZsb2F0aW5n
Q29udGV4dC5hcHBlbmQoZmxvYXRCb3gpOwpAQCAtNTEwLDcgKzQ1Myw3IEBAIHZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxk
ZXI6OkxpbmVDb250CiAgICAgICAgIGluaXRpYWxDb250YWluZ0Jsb2NrU2l6ZSA9IGdlb21ldHJ5
Rm9yQm94KHJvb3QoKS5pbml0aWFsQ29udGFpbmluZ0Jsb2NrKCksIEVzY2FwZVJlYXNvbjo6U3Ry
b2tlT3ZlcmZsb3dOZWVkc1ZpZXdwb3J0R2VvbWV0cnkpLmNvbnRlbnRCb3goKS5zaXplKCk7CiAg
ICAgYXV0byYgaW5saW5lQ29udGVudCA9IGZvcm1hdHRpbmdTdGF0ZS5lbnN1cmVEaXNwbGF5SW5s
aW5lQ29udGVudCgpOwogICAgIGF1dG8gbGluZUluZGV4ID0gaW5saW5lQ29udGVudC5saW5lQm94
ZXMuc2l6ZSgpOwotICAgIGF1dG8gbGluZUlua092ZXJmbG93ID0gbGluZUJveC5zY3JvbGxhYmxl
T3ZlcmZsb3coKTsKKyAgICBhdXRvIGxpbmVJbmtPdmVyZmxvdyA9IHNjcm9sbGFibGVPdmVyZmxv
dzsKICAgICAvLyBDb21wdXRlIGZpbmFsIGJveCBnZW9tZXRyeS4KICAgICBmb3IgKGF1dG8mIGxp
bmVSdW4gOiBsaW5lQ29udGVudC5ydW5zKSB7CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGxp
bmVSdW4ubGF5b3V0Qm94KCk7CkBAIC01MzYsNyArNDc5LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGlu
ZUNvbnQKICAgICAgICAgICAgIGF1dG8gbG9naWNhbFJlY3QgPSBsaW5lUnVuLmlzQm94KCkgPyBs
aW5lQm94LmlubGluZUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLmxvZ2ljYWxSZWN0KCkgOiBs
aW5lQm94LmlubGluZVJlY3RGb3JUZXh0UnVuKGxpbmVSdW4pOwogICAgICAgICAgICAgLy8gSW5s
aW5lIGJveGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgbGluZSBib3ggd2hpbGUgZmluYWwgRGlzcGxh
eTo6UnVucyBuZWVkIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgRGlzcGxheTpCb3gKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2UganVzdCBsZWF2ZSB0aGVtIGJlIHJlbGF0
aXZlIHRvIHRoZSBsaW5lIGJveD8KLSAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmVCeSh7IGxp
bmVCb3gubG9naWNhbExlZnQoKSwgbGluZUJveC5sb2dpY2FsVG9wKCkgfSk7CisgICAgICAgICAg
ICBsb2dpY2FsUmVjdC5tb3ZlQnkoeyBsaW5lTG9naWNhbFJlY3QubGVmdCgpLCBsaW5lTG9naWNh
bFJlY3QudG9wKCkgKyBsaW5lQm94VmVydGljYWxPZmZzZXQgfSk7CiAgICAgICAgICAgICBhdXRv
IGlua092ZXJmbG93ID0gY29tcHV0ZWRJbmtPdmVyZmxvdyhsb2dpY2FsUmVjdCk7CiAgICAgICAg
ICAgICBsaW5lSW5rT3ZlcmZsb3cuZXhwYW5kVG9Db250YWluKGlua092ZXJmbG93KTsKICAgICAg
ICAgICAgIGlubGluZUNvbnRlbnQucnVucy5hcHBlbmQoeyBsaW5lSW5kZXgsIGxheW91dEJveCwg
bG9naWNhbFJlY3QsIGlua092ZXJmbG93LCBsaW5lUnVuLmV4cGFuc2lvbigpLCBsaW5lUnVuLnRl
eHRDb250ZW50KCkgfSk7CkBAIC01NDksNiArNDkyLDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNv
bnQKICAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxh
eUJveChsYXlvdXRCb3gpOwogICAgICAgICAgICAgYXV0byYgaW5saW5lQm94ID0gbGluZUJveC5p
bmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICAgICAgICAgIGF1dG8gdG9wTGVm
dCA9IGlubGluZUJveC5sb2dpY2FsUmVjdCgpLnRvcExlZnQoKTsKKyAgICAgICAgICAgIHRvcExl
ZnQubW92ZSh7IH0sIGxpbmVCb3hWZXJ0aWNhbE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5
b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIHRvcExlZnQgKz0g
Z2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOwogICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHRv
TGF5b3V0UG9pbnQodG9wTGVmdCkpOwpAQCAtNTY0LDE0ICs1MDgsMTQgQEAgdm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRl
cjo6TGluZUNvbnQKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGUgbG9naWNhbCB0byBw
aHlzaWNhbCB0cmFuc2xhdGUgc2hvdWxkIGhhcHBlbi4KICAgICBhdXRvIGNvbnN0cnVjdERpc3Bs
YXlMaW5lID0gWyZdIHsKICAgICAgICAgLy8gRklYTUU6IExheW91dDo6TGluZUJveCBzaG91bGQg
Y29udGFpbiBhbGwgaW5saW5lIGJveGVzIGFuZCBpdCBzaG91bGQgbm90IGhhdmUgbmVpdGhlciB0
b3AvbGVmdCBnZW9tZXRyeSBub3Igb3ZlcmZsb3cuIAotICAgICAgICBhdXRvIGxpbmVSZWN0ID0g
bGluZUJveC5sb2dpY2FsUmVjdCgpOwogICAgICAgICBpZiAoYXV0byBob3Jpem9udGFsQWxpZ25t
ZW50T2Zmc2V0ID0gbGluZUJveC5ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KCkpIHsKICAgICAg
ICAgICAgIC8vIFBhaW50aW5nIGNvZGUgKHNwZWNpZmljYWxseSBUZXh0UnVuJ3MgeFBvcykgbmVl
ZHMgdGhlIGFsaWduZWQgb2Zmc2V0IHRvIGJlIGFibGUgdG8gY29tcHV0ZSB0YWIgcG9zaXRpb25z
LgotICAgICAgICAgICAgbGluZVJlY3QubW92ZUhvcml6b250YWxseSgqaG9yaXpvbnRhbEFsaWdu
bWVudE9mZnNldCk7CisgICAgICAgICAgICBsaW5lTG9naWNhbFJlY3QubW92ZUhvcml6b250YWxs
eSgqaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5l
Q29udGVudC5saW5lQm94ZXMuYXBwZW5kKHsgbGluZVJlY3QsIGxpbmVCb3guc2Nyb2xsYWJsZU92
ZXJmbG93KCksIGxpbmVJbmtPdmVyZmxvdywgbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIH0p
OworICAgICAgICBpbmxpbmVDb250ZW50LmxpbmVCb3hlcy5hcHBlbmQoeyBsaW5lTG9naWNhbFJl
Y3QsIHNjcm9sbGFibGVPdmVyZmxvdywgbGluZUlua092ZXJmbG93LCBsaW5lQm94VmVydGljYWxP
ZmZzZXQgKyBsaW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgfSk7CiAgICAgfTsKICAgICBjb25z
dHJ1Y3REaXNwbGF5TGluZSgpOworICAgIHJldHVybiBsaW5lTG9naWNhbFJlY3Q7CiB9CiAKIHZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUoY29u
c3QgSW52YWxpZGF0aW9uU3RhdGUmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5k
ZXggZGM0ZjNjNTE5MDJmNDgwZDYxMWFiODY3Nzc0NWRlYTA1NDEzOTU4NC4uYzIzY2ZlZWQ4OTk5
ZjkwMDE4M2YzMzA3YTk2MmI5ZTg5ODAwMWFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5oCkBAIC02Nyw3ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgcHVibGljOgogICAgICAgICBD
b250ZW50SGVpZ2h0QW5kTWFyZ2luIGlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJv
eCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRlVmVydGljYWxW
YWx1ZXMmKSBjb25zdDsKICAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGlubGluZUJsb2Nr
V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwg
Y29uc3QgT3ZlcnJpZGVIb3Jpem9udGFsVmFsdWVzJik7Ci0gICAgICAgIE9wdGlvbmFsPElubGlu
ZUxheW91dFVuaXQ+IGNvbXB1dGVkVGV4dEluZGVudChjb25zdCBDb250YWluZXJCb3gmIGZvcm1h
dHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ7CkBAIC04OCwxMyArODcsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVXaWR0aEFu
ZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKIAogICAg
IHZvaWQgY29sbGVjdElubGluZUNvbnRlbnRJZk5lZWRlZCgpOwotICAgIHN0cnVjdCBMaW5lQ29u
c3RyYWludHMgewotICAgICAgICBJbmxpbmVMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVmdDsKLSAg
ICAgICAgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggeyAwIH07Ci0gICAg
ICAgIGJvb2wgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsKKyAgICBEaXNwbGF5
OjpJbmxpbmVSZWN0IGNyZWF0ZURpc3BsYXlCb3hlc0ZvckxpbmVDb250ZW50KGNvbnN0IExpbmVC
dWlsZGVyOjpMaW5lQ29udGVudCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOworICAg
IHN0cnVjdCBMaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgeworICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IGxpbmVCb3hWZXJ0aWNhbE9mZnNldDsKKyAgICAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBs
b2dpY2FsUmVjdDsKICAgICB9OwotICAgIExpbmVDb25zdHJhaW50cyBjb25zdHJhaW50c0Zvckxp
bmUoY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9n
aWNhbFRvcCk7Ci0gICAgdm9pZCBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWls
ZGVyOjpMaW5lQ29udGVudCYsIGNvbnN0IExpbmVCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmKTsKKyAgICBMaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgY29tcHV0ZWRMaW5lTG9naWNh
bFJlY3QoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JikgY29uc3Q7CiAgICAgdm9pZCBp
bnZhbGlkYXRlRm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJik7CiAKICAg
ICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6
OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dEdlb21ldHJ5LmNwcAppbmRleCBkN2MyNmZkNzdmZjQ1ZTAzMDBmMWJiMjQ3ODkyNTZjODE2
NjZjNWZlLi43MDdiNmUwMjUzYzMzMjYyNjUzODljZDJjNDZlY2QyMjUwOTI5NzMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtNzUsMTQg
Kzc1LDYgQEAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmlubGluZUJsb2NrSGVpZ2h0QW5kTWEKICAgICByZXR1cm4gY29tcGxpY2F0ZWRD
YXNlcyhsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGVWZXJ0aWNhbFZh
bHVlcyk7CiB9CiAKLU9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRUZXh0SW5kZW50KGNvbnN0IENvbnRhaW5lckJveCYg
Zm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6
b250YWxDb25zdHJhaW50cykgY29uc3QKLXsKLSAgICBhdXRvIHRleHRJbmRlbnQgPSBmb3JtYXR0
aW5nQ29udGV4dFJvb3Quc3R5bGUoKS50ZXh0SW5kZW50KCk7Ci0gICAgaWYgKHRleHRJbmRlbnQg
PT0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50KCkpCi0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgcmV0dXJuIElubGluZUxheW91dFVuaXQgeyBtaW5pbXVtVmFsdWVGb3JMZW5ndGgodGV4
dEluZGVudCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCkgfTsKLX0KLQogfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVMaW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCb3guY3BwCmluZGV4IDQyYTM5MDE1MzU4MzVhMjk2N2NmMWM3YTRmYWJjZTgx
N2JiMDEzNTQuLjFmMWEyMTliNTM5MmViMWU3ODlmOGI1OGY1NGMzMjM4YWI4ZDY4NWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCb3guY3BwCkBAIC0zMSwxMyArMzEsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFt
ZXNwYWNlIExheW91dCB7CiAKLXN0cnVjdCBBc2NlbnRBbmREZXNjZW50IHsKLSAgICBJbmxpbmVM
YXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGFzY2VudCArIGRlc2NlbnQ7IH0KLQot
ICAgIElubGluZUxheW91dFVuaXQgYXNjZW50IHsgMCB9OwotICAgIElubGluZUxheW91dFVuaXQg
ZGVzY2VudCB7IDAgfTsKLX07Ci0KIHN0cnVjdCBIYW5naW5nQ29udGVudCB7CiBwdWJsaWM6CiAg
ICAgdm9pZCByZXNldCgpOwpAQCAtMTI0LDE2ICsxMTcsNiBAQCBzdGF0aWMgT3B0aW9uYWw8SW5s
aW5lTGF5b3V0VW5pdD4gaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldChjb25zdCBMaW5lOjpSdW5M
aXN0JgogICAgIHJldHVybiB7IH07CiB9CiAKLWlubGluZSBzdGF0aWMgQXNjZW50QW5kRGVzY2Vu
dCBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBJbmxp
bmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQotewotICAgIElubGluZUxheW91dFVuaXQg
YXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBkZXNj
ZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOwotICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBo
YWxmLWxlYWRpbmcKLSAgICBhdXRvIGhhbGZMZWFkaW5nID0gKGxpbmVMb2dpY2FsSGVpZ2h0IC0g
KGFzY2VudCArIGRlc2NlbnQpKSAvIDI7Ci0gICAgLy8gSW5saW5lIHRyZWUgaGVpZ2h0IGlzIGFs
bCBpbnRlZ2VyIGJhc2VkLgotICAgIHJldHVybiB7IGZsb29yZihhc2NlbnQgKyBoYWxmTGVhZGlu
ZyksIGNlaWxmKGRlc2NlbnQgKyBoYWxmTGVhZGluZykgfTsKLX0KLQogTGluZUJveDo6SW5saW5l
Qm94OjpJbmxpbmVCb3goY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IERpc3BsYXk6OklubGlu
ZVJlY3QmIHJlY3QsIElubGluZUxheW91dFVuaXQgYmFzZWxpbmUsIElubGluZUxheW91dFVuaXQg
ZGVzY2VudCwgSXNDb25zaWRlcmVkRW1wdHkgaXNDb25zaWRlcmVkRW1wdHkpCiAgICAgOiBtX2xh
eW91dEJveChtYWtlV2Vha1B0cihsYXlvdXRCb3gpKQogICAgICwgbV9sb2dpY2FsUmVjdChyZWN0
KQpAQCAtMTQzLDIxICsxMjYsMTUgQEAgTGluZUJveDo6SW5saW5lQm94OjpJbmxpbmVCb3goY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHIKIHsKIH0KIAot
TGluZUJveDo6TGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9y
bWF0dGluZ0NvbnRleHQsIGNvbnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdp
ZHRoLCBjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGlu
ZVZpc3VhbGx5RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQpCi0gICAgOiBtX3JlY3QodG9wTGVmdCwgbG9naWNhbFdpZHRoLCB7IH0p
Ci0gICAgLCBtX2NvbnRlbnRMb2dpY2FsV2lkdGgoY29udGVudExvZ2ljYWxXaWR0aCkKK0xpbmVC
b3g6OkxpbmVCb3goY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0LCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGgsIElubGluZUxheW91
dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCwgY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgSXNM
aW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQorICAgIDogbV9sb2dpY2FsU2l6
ZShjb250ZW50TG9naWNhbFdpZHRoLCB7IH0pCisgICAgLCBtX2lzTGluZVZpc3VhbGx5RW1wdHko
aXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMpCiAgICAgLCBt
X2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQogewotICAg
IG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCA9IExheW91dDo6aG9yaXpvbnRhbEFsaWdubWVu
dE9mZnNldChydW5zLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgbG9naWNhbFdpZHRoLCBj
b250ZW50TG9naWNhbFdpZHRoLCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotICAgIGNv
bnN0cnVjdElubGluZUJveGVzKHJ1bnMsIGlzTGluZVZpc3VhbGx5RW1wdHkpOworICAgIG1faG9y
aXpvbnRhbEFsaWdubWVudE9mZnNldCA9IExheW91dDo6aG9yaXpvbnRhbEFsaWdubWVudE9mZnNl
dChydW5zLCByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgbGluZUxvZ2ljYWxXaWR0aCwgY29u
dGVudExvZ2ljYWxXaWR0aCwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICBjb25z
dHJ1Y3RJbmxpbmVCb3hlcyhydW5zKTsKICAgICBjb21wdXRlSW5saW5lQm94ZXNMb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgYWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhl
aWdodChpc0xpbmVWaXN1YWxseUVtcHR5KTsKLSAgICAvLyBDb21wdXRlIHNjcm9sbGFibGUgb3Zl
cmZsb3cuCi0gICAgbV9zY3JvbGxhYmxlT3ZlcmZsb3cgPSBEaXNwbGF5OjpJbmxpbmVSZWN0IHsg
dG9wTGVmdCwgc3RkOjptYXgobG9naWNhbFdpZHRoLCBtX3Jvb3RJbmxpbmVCb3gubG9naWNhbFdp
ZHRoKCkpLCB7IH0gfTsKLSAgICBhdXRvIGxvZ2ljYWxCb3R0b20gPSBJbmxpbmVMYXlvdXRVbml0
IHsgfTsgCi0gICAgZm9yIChhdXRvJiBpbmxpbmVCb3hFbnRyeSA6IG1faW5saW5lQm94UmVjdE1h
cCkKLSAgICAgICAgbG9naWNhbEJvdHRvbSA9IHN0ZDo6bWF4KGxvZ2ljYWxCb3R0b20sIGlubGlu
ZUJveEVudHJ5LnZhbHVlLT5sb2dpY2FsUmVjdCgpLmJvdHRvbSgpKTsKLSAgICBtX3Njcm9sbGFi
bGVPdmVyZmxvdy5leHBhbmRWZXJ0aWNhbGx5KGxvZ2ljYWxCb3R0b20pOworICAgIGFsaWduSW5s
aW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoKTsKIH0KIAogRGlzcGxh
eTo6SW5saW5lUmVjdCBMaW5lQm94OjppbmxpbmVSZWN0Rm9yVGV4dFJ1bihjb25zdCBMaW5lOjpS
dW4mIHJ1bikgY29uc3QKQEAgLTE2OCwxOCArMTQ1LDE3IEBAIERpc3BsYXk6OklubGluZVJlY3Qg
TGluZUJveDo6aW5saW5lUmVjdEZvclRleHRSdW4oY29uc3QgTGluZTo6UnVuJiBydW4pIGNvbnN0
CiAgICAgcmV0dXJuIHsgaW5saW5lQm94UmVjdC50b3AoKSwgbV9ob3Jpem9udGFsQWxpZ25tZW50
T2Zmc2V0LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pICsgcnVuLmxvZ2ljYWxMZWZ0KCks
IHJ1bi5sb2dpY2FsV2lkdGgoKSwgaW5saW5lQm94UmVjdC5oZWlnaHQoKSB9OwogfQogCi12b2lk
IExpbmVCb3g6OmNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMs
IElzTGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0eSkKK3ZvaWQgTGluZUJveDo6
Y29uc3RydWN0SW5saW5lQm94ZXMoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucykKIHsKICAgICBh
dXRvIGNvbnN0cnVjdFJvb3RJbmxpbmVCb3ggPSBbJl0gewogICAgICAgICBhdXRvJiBmb250TWV0
cmljcyA9IHJvb3QoKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAgICAgIElubGluZUxheW91
dFVuaXQgcm9vdElubGluZUJveEhlaWdodCA9IGZvbnRNZXRyaWNzLmhlaWdodCgpOwotICAgICAg
ICBhdXRvIHJvb3RJbmxpbmVCb3hSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IHsgfSwgbV9o
b3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pLCBj
b250ZW50TG9naWNhbFdpZHRoKCksIHJvb3RJbmxpbmVCb3hIZWlnaHQgfTsKLSAgICAgICAgSW5s
aW5lTGF5b3V0VW5pdCByb290SW5saW5lQm94QmFzZWxpbmUgPSBmb250TWV0cmljcy5hc2NlbnQo
KTsKLSAgICAgICAgYXV0byByb290SW5saW5lQm94RGVzY2VudCA9IHJvb3RJbmxpbmVCb3hIZWln
aHQgLSByb290SW5saW5lQm94QmFzZWxpbmU7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbEhlaWdodCA9IGZvbnRNZXRyaWNzLmhlaWdodCgpOworICAgICAgICBhdXRvIGxvZ2ljYWxS
ZWN0ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IHsgfSwgbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zm
c2V0LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pLCBsb2dpY2FsV2lkdGgoKSwgbG9naWNh
bEhlaWdodCB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lID0gZm9udE1ldHJp
Y3MuYXNjZW50KCk7CisgICAgICAgIGF1dG8gZGVzY2VudCA9IGxvZ2ljYWxIZWlnaHQgLSBiYXNl
bGluZTsKICAgICAgICAgYXV0byBsaW5lSGFzSW1hZ2luYXJ5U3RydXQgPSAhbGF5b3V0U3RhdGUo
KS5pblF1aXJrc01vZGUoKTsKLSAgICAgICAgYXV0byByb290SW5saW5lQm94SXNDb25zaWRlcmVk
RW1wdHkgPSBpc0xpbmVWaXN1YWxseUVtcHR5ID09IElzTGluZVZpc3VhbGx5RW1wdHk6Ok5vICYm
IGxpbmVIYXNJbWFnaW5hcnlTdHJ1dCA/IElubGluZUJveDo6SXNDb25zaWRlcmVkRW1wdHk6Ok5v
IDogSW5saW5lQm94OjpJc0NvbnNpZGVyZWRFbXB0eTo6WWVzOwotCi0gICAgICAgIG1fcm9vdElu
bGluZUJveCA9IElubGluZUJveCB7IHJvb3QoKSwgcm9vdElubGluZUJveFJlY3QsIHJvb3RJbmxp
bmVCb3hCYXNlbGluZSwgcm9vdElubGluZUJveERlc2NlbnQsIHJvb3RJbmxpbmVCb3hJc0NvbnNp
ZGVyZWRFbXB0eSB9OworICAgICAgICBhdXRvIGlzSW5pdGlhbGx5Q29uc2lkZXJlZEVtcHR5ID0g
ICFtX2lzTGluZVZpc3VhbGx5RW1wdHkgJiYgbGluZUhhc0ltYWdpbmFyeVN0cnV0ID8gSW5saW5l
Qm94OjpJc0NvbnNpZGVyZWRFbXB0eTo6Tm8gOiBJbmxpbmVCb3g6OklzQ29uc2lkZXJlZEVtcHR5
OjpZZXM7CisgICAgICAgIG1fcm9vdElubGluZUJveCA9IElubGluZUJveCB7IHJvb3QoKSwgbG9n
aWNhbFJlY3QsIGJhc2VsaW5lLCBkZXNjZW50LCBpc0luaXRpYWxseUNvbnNpZGVyZWRFbXB0eSB9
OwogICAgICAgICBtX2lubGluZUJveFJlY3RNYXAuc2V0KCZyb290KCksICZtX3Jvb3RJbmxpbmVC
b3gpOwogICAgIH07CiAgICAgY29uc3RydWN0Um9vdElubGluZUJveCgpOwpAQCAtMjE5LDggKzE5
NSw4IEBAIHZvaWQgTGluZUJveDo6Y29uc3RydWN0SW5saW5lQm94ZXMoY29uc3QgTGluZTo6UnVu
TGlzdCYgcnVucywgSXNMaW5lVmlzdWFsbHlFbXB0CiAgICAgICAgICAgICAgICAgbV9pbmxpbmVC
b3hMaXN0LmFwcGVuZChXVEZNb3ZlKGlubGluZUJveCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKLSAgICAgICAgICAgIGF1dG8g
aW5pdGlhbFdpZHRoID0gY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCk7
CiAgICAgICAgICAgICBhdXRvIGlubGluZUJveExvZ2ljYWxMZWZ0ID0gbV9ob3Jpem9udGFsQWxp
Z25tZW50T2Zmc2V0LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pICsgcnVuLmxvZ2ljYWxM
ZWZ0KCk7CisgICAgICAgICAgICBhdXRvIGluaXRpYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aCgpIC0g
cnVuLmxvZ2ljYWxMZWZ0KCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5pdGlhbFdpZHRoID49IDAp
OwogICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250
TWV0cmljcygpOwogICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0g
Zm9udE1ldHJpY3MuaGVpZ2h0KCk7CkBAIC0zMDYsMjkgKzI4MiwyMiBAQCB2b2lkIExpbmVCb3g6
OmNvbXB1dGVJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQoKQogICAgIH0KIH0KIAotdm9pZCBMaW5l
Qm94OjphbGlnbklubGluZUJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KElz
TGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0eSkKK3ZvaWQgTGluZUJveDo6YWxp
Z25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodCgpCiB7CiAgICAg
Ly8gSW5saW5lIGJveGVzIGFyZSBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGxpbmUg
Ym94IChhbmQgbm90IGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGVpciBwYXJlbnRzKS4K
ICAgICAvLyBTdGFydGluZyB3aXRoIHRoZSByb290IGlubGluZSBib3gsIHBvc2l0aW9uIHRoZSBh
bmNlc3RvcnMgZmlyc3Qgc28gdGhhdCB0aGUgZGVzY2VuZGFudCBsaW5lIGJveGVzIHNlZSBhYnNv
bHV0ZSB2ZXJ0aWNhbCBwb3NpdGlvbnMuCi0gICAgYXV0byYgcm9vdFN0eWxlID0gcm9vdCgpLnN0
eWxlKCk7Ci0gICAgYXV0byBjb250ZW50TG9naWNhbEJvdHRvbSA9IElubGluZUxheW91dFVuaXQg
eyB9OworICAgIGF1dG8gY29udGVudExvZ2ljYWxIZWlnaHQgPSBJbmxpbmVMYXlvdXRVbml0IHsg
fTsKICAgICBhdXRvIGFsaWduUm9vdElubGluZUJveCA9IFsmXSB7Ci0gICAgICAgIGF1dG8gdXNl
ZExpbmVIZWlnaHQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgaWYgKGlzTGluZVZp
c3VhbGx5RW1wdHkgPT0gSXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm8pCi0gICAgICAgICAgICB1c2Vk
TGluZUhlaWdodCA9IHJvb3RTdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKTsKLSAgICAgICAgYXV0
byBhbGlnbm1lbnRCYXNlbGluZSA9IGhhbGZMZWFkaW5nTWV0cmljcyhyb290U3R5bGUuZm9udE1l
dHJpY3MoKSwgdXNlZExpbmVIZWlnaHQpLmFzY2VudDsKLSAgICAgICAgYXV0byByb290SW5saW5l
Qm94VG9wUG9zaXRpb24gPSBhbGlnbm1lbnRCYXNlbGluZSAtIG1fcm9vdElubGluZUJveC5iYXNl
bGluZSgpOwotICAgICAgICBtX3Jvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChyb290SW5saW5l
Qm94VG9wUG9zaXRpb24pOwotICAgICAgICBjb250ZW50TG9naWNhbEJvdHRvbSA9IG1fcm9vdElu
bGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0g
bV9yb290SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgZm9yIChhdXRvJiBpbmxp
bmVCb3ggOiBtX2lubGluZUJveExpc3QpIHsKICAgICAgICAgICAgIGF1dG8gdmVydGljYWxBbGln
biA9IGlubGluZUJveC0+bGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CiAgICAg
ICAgICAgICBpZiAodmVydGljYWxBbGlnbiA9PSBWZXJ0aWNhbEFsaWduOjpCb3R0b20pIHsKICAg
ICAgICAgICAgICAgICAvLyBib3R0b20gYWxpZ24gYWx3YXlzIHB1c2hlcyB0aGUgcm9vdCBpbmxp
bmUgYm94IGRvd253YXJkcy4KICAgICAgICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0gc3RkOjpt
YXgoMC4wZiwgaW5saW5lQm94LT5sb2dpY2FsQm90dG9tKCkgLSBtX3Jvb3RJbmxpbmVCb3gubG9n
aWNhbEJvdHRvbSgpKTsKICAgICAgICAgICAgICAgICBtX3Jvb3RJbmxpbmVCb3guc2V0TG9naWNh
bFRvcChtX3Jvb3RJbmxpbmVCb3gubG9naWNhbFRvcCgpICsgb3ZlcmZsb3cpOwotICAgICAgICAg
ICAgICAgIGNvbnRlbnRMb2dpY2FsQm90dG9tICs9IG92ZXJmbG93OworICAgICAgICAgICAgICAg
IGNvbnRlbnRMb2dpY2FsSGVpZ2h0ICs9IG92ZXJmbG93OwogICAgICAgICAgICAgfSBlbHNlIGlm
ICh2ZXJ0aWNhbEFsaWduID09IFZlcnRpY2FsQWxpZ246OlRvcCkKLSAgICAgICAgICAgICAgICBj
b250ZW50TG9naWNhbEJvdHRvbSA9IHN0ZDo6bWF4KGNvbnRlbnRMb2dpY2FsQm90dG9tLCBpbmxp
bmVCb3gtPmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxI
ZWlnaHQgPSBzdGQ6Om1heChjb250ZW50TG9naWNhbEhlaWdodCwgaW5saW5lQm94LT5sb2dpY2Fs
SGVpZ2h0KCkpOwogICAgICAgICB9CiAgICAgfTsKICAgICBhbGlnblJvb3RJbmxpbmVCb3goKTsK
QEAgLTM1OSw3ICszMjgsNyBAQCB2b2lkIExpbmVCb3g6OmFsaWduSW5saW5lQm94ZXNWZXJ0aWNh
bGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoSXNMaW5lVmlzdWFsbHlFbQogICAgICAgICAgICAg
aW5saW5lQm94TG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgotICAgICAgICAgICAg
aW5saW5lQm94TG9naWNhbFRvcCA9IGNvbnRlbnRMb2dpY2FsQm90dG9tIC0gaW5saW5lQm94LT5s
b2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gY29udGVu
dExvZ2ljYWxIZWlnaHQgLSBpbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZTogewogICAgICAgICAg
ICAgYXV0byYgcGFyZW50TGF5b3V0Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOwpAQCAtMzc3LDcg
KzM0Niw3IEBAIHZvaWQgTGluZUJveDo6YWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21w
dXRlTGluZUJveEhlaWdodChJc0xpbmVWaXN1YWxseUVtCiAgICAgYXV0byBhZGp1c3RDb250ZW50
Qm90dG9tSWZOZWVkZWQgPSBbJl0gewogICAgICAgICBpZiAoIW1fcm9vdElubGluZUJveC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8gY29sbGFwc2VkQ29udGVu
dExvZ2ljYWxUb3AgPSBjb250ZW50TG9naWNhbEJvdHRvbTsKKyAgICAgICAgYXV0byBjb2xsYXBz
ZWRDb250ZW50TG9naWNhbFRvcCA9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0OwogICAgICAgICBhdXRv
IGNvbGxhcHNlZENvbnRlbnRMb2dpY2FsQm90dG9tID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAg
ICAgICAgIGZvciAoYXV0byYgaW5saW5lQm94IDogbV9pbmxpbmVCb3hMaXN0KSB7CiAgICAgICAg
ICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBpbmxpbmVCb3gtPmxheW91dEJveCgpLnN0eWxlKCku
dmVydGljYWxBbGlnbigpOwpAQCAtMzg5LDI0ICszNTgsMzQgQEAgdm9pZCBMaW5lQm94OjphbGln
bklubGluZUJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KElzTGluZVZpc3Vh
bGx5RW0KICAgICAgICAgICAgIGNvbGxhcHNlZENvbnRlbnRMb2dpY2FsVG9wID0gc3RkOjptaW4o
Y29sbGFwc2VkQ29udGVudExvZ2ljYWxUb3AsIGlubGluZUJveC0+bG9naWNhbFRvcCgpKTsKICAg
ICAgICAgICAgIGNvbGxhcHNlZENvbnRlbnRMb2dpY2FsQm90dG9tID0gc3RkOjptYXgoY29sbGFw
c2VkQ29udGVudExvZ2ljYWxCb3R0b20sIGlubGluZUJveC0+bG9naWNhbEJvdHRvbSgpKTsKICAg
ICAgICAgfQotICAgICAgICBpZiAoY29sbGFwc2VkQ29udGVudExvZ2ljYWxUb3AgPD0gMCkgewot
ICAgICAgICAgICAgY29udGVudExvZ2ljYWxCb3R0b20gPSBjb2xsYXBzZWRDb250ZW50TG9naWNh
bEJvdHRvbTsKKyAgICAgICAgaWYgKCFjb2xsYXBzZWRDb250ZW50TG9naWNhbFRvcCkgeworICAg
ICAgICAgICAgY29udGVudExvZ2ljYWxIZWlnaHQgPSBjb2xsYXBzZWRDb250ZW50TG9naWNhbEJv
dHRvbTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBjb250ZW50TG9n
aWNhbEJvdHRvbSA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBjb250ZW50TG9naWNh
bEhlaWdodCA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAgICAgICBmb3IgKGF1dG8mIGlubGlu
ZUJveCA6IG1faW5saW5lQm94TGlzdCkgewogICAgICAgICAgICAgaW5saW5lQm94LT5zZXRMb2dp
Y2FsVG9wKGlubGluZUJveC0+bG9naWNhbFRvcCgpIC0gY29sbGFwc2VkQ29udGVudExvZ2ljYWxU
b3ApOwotICAgICAgICAgICAgY29udGVudExvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChjb250ZW50
TG9naWNhbEJvdHRvbSwgaW5saW5lQm94LT5sb2dpY2FsQm90dG9tKCkpOworICAgICAgICAgICAg
Y29udGVudExvZ2ljYWxIZWlnaHQgPSBzdGQ6Om1heChjb250ZW50TG9naWNhbEhlaWdodCwgaW5s
aW5lQm94LT5sb2dpY2FsQm90dG9tKCkpOwogICAgICAgICB9CiAgICAgfTsKICAgICBhZGp1c3RD
b250ZW50Qm90dG9tSWZOZWVkZWQoKTsKLSAgICAvLyBDb21wdXRlIHRoZSBsaW5lIGJveCBoZWln
aHQuIEl0J3MgZWl0aGVyIHRoZSBsaW5lLWhlaWdodCB2YWx1ZSAobmVnYXRpdmUgdmFsdWUgbWVh
bnMgbGluZSBoZWlnaHQgaXQgbm90IHNldCkgb3IKLSAgICAvLyBtYXhpbXVtIG9mIHRoZSByb290
IGlubGluZSBib3gncyBib3R0b20gYW5kIHRoZSB0b3AgYWxpZ25lZCBjb250ZW50IGhlaWdodC4K
LSAgICBpZiAoaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVtcHR5OjpObykg
ewotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVTcGFjaW5nID0gcm9vdFN0eWxlLmZvbnRN
ZXRyaWNzKCkubGluZVNwYWNpbmcoKTsKLSAgICAgICAgYXV0byBsaW5lQm94TG9naWNhbEhlaWdo
dCA9ICFyb290U3R5bGUubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSA/IHJvb3RTdHlsZS5jb21w
dXRlZExpbmVIZWlnaHQoKSA6IHN0ZDo6bWF4KGxpbmVTcGFjaW5nLCBjb250ZW50TG9naWNhbEJv
dHRvbSk7Ci0gICAgICAgIG1fcmVjdC5zZXRIZWlnaHQobGluZUJveExvZ2ljYWxIZWlnaHQpOwot
ICAgIH0KKyAgICBpZiAoIW1faXNMaW5lVmlzdWFsbHlFbXB0eSkKKyAgICAgICAgbV9sb2dpY2Fs
U2l6ZS5zZXRIZWlnaHQoY29udGVudExvZ2ljYWxIZWlnaHQpOworfQorCitjb25zdCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCYgTGluZUJveDo6Zm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworfQorCitjb25zdCBCb3gmIExp
bmVCb3g6OnJvb3QoKSBjb25zdAoreworICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLnJv
b3QoKTsKK30KKworTGF5b3V0U3RhdGUmIExpbmVCb3g6OmxheW91dFN0YXRlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94LmgKaW5kZXggY2RmYzA2YTA0NTQ1NWYyZTU1MWZkN2VmZDM5ODUzOTQ5MWVkOWEyMy4u
YTczMmVjM2RiYTllYWZkZjE2NjZmMTM5ZTg4YTMxODk5ZTk1Y2FjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaApA
QCAtODAsMTkgKzgwLDE0IEBAIHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50IHsgTm8sIFllcyB9OwogICAgIGVudW0gY2xhc3MgSXNMaW5lVmlzdWFs
bHlFbXB0eSB7IE5vLCBZZXMgfTsKLSAgICBMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiwgY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIHRvcExlZnQsIElubGluZUxheW91dFVu
aXQgbG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGNv
bnN0IExpbmU6OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQpOworICAgIExpbmVCb3goY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
LCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29u
dGVudExvZ2ljYWxXaWR0aCwgY29uc3QgTGluZTo6UnVuTGlzdCYsIElzTGluZVZpc3VhbGx5RW1w
dHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CiAKLSAgICBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmxlZnQoKTsgfQotICAgIElubGlu
ZUxheW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnJpZ2h0KCk7
IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3QudG9wKCk7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7
IHJldHVybiBtX3JlY3QuYm90dG9tKCk7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC53aWR0aCgpOyB9Ci0gICAgSW5saW5lTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmhlaWdodCgpOyB9Ci0K
LSAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQotICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHNjcm9sbGFibGVP
dmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZU92ZXJmbG93OyB9CisgICAgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXpl
LndpZHRoKCk7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX2xvZ2ljYWxTaXplLmhlaWdodCgpOyB9CisgICAgSW5saW5lTGF5b3V0U2l6ZSBs
b2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KIAogICAgIE9wdGlv
bmFsPElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZzZXQ7IH0KKyAgICBib29sIGlzTGluZVZp
c3VhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2lzTGluZVZpc3VhbGx5RW1wdHk7IH0KIAog
ICAgIGNvbnN0IElubGluZUJveCYgaW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYgbGF5
b3V0Qm94KSBjb25zdCB7IHJldHVybiAqbV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmbGF5b3V0Qm94
KTsgfQogICAgIERpc3BsYXk6OklubGluZVJlY3QgaW5saW5lUmVjdEZvclRleHRSdW4oY29uc3Qg
TGluZTo6UnVuJikgY29uc3Q7CkBAIC0xMTUsMjIgKzExMCwxOSBAQCBwdWJsaWM6CiAgICAgSW5s
aW5lTGF5b3V0VW5pdCBhbGlnbm1lbnRCYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElu
bGluZUJveC5sb2dpY2FsVG9wKCkgKyBtX3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsgfQogCiBw
cml2YXRlOgotICAgIHZvaWQgY29uc3RydWN0SW5saW5lQm94ZXMoY29uc3QgTGluZTo6UnVuTGlz
dCYsIElzTGluZVZpc3VhbGx5RW1wdHkpOworICAgIHZvaWQgY29uc3RydWN0SW5saW5lQm94ZXMo
Y29uc3QgTGluZTo6UnVuTGlzdCYpOwogICAgIHZvaWQgY29tcHV0ZUlubGluZUJveGVzTG9naWNh
bEhlaWdodCgpOwotICAgIHZvaWQgYWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRl
TGluZUJveEhlaWdodChJc0xpbmVWaXN1YWxseUVtcHR5KTsKKyAgICB2b2lkIGFsaWduSW5saW5l
Qm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoKTsKIAogICAgIElubGluZUJv
eCYgaW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KSB7IHJldHVybiAq
bV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmbGF5b3V0Qm94KTsgfQogCi0gICAgSW5saW5lTGF5b3V0
VW5pdCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TG9naWNh
bFdpZHRoOyB9Ci0KLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGlu
Z0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9Ci0g
ICAgY29uc3QgQm94JiByb290KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5y
b290KCk7IH0KLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBm
b3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KKyAgICBjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdDsKKyAgICBjb25zdCBCb3gm
IHJvb3QoKSBjb25zdDsKKyAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IG1fcmVjdDsKLSAgICBEaXNwbGF5OjpJ
bmxpbmVSZWN0IG1fc2Nyb2xsYWJsZU92ZXJmbG93OwotICAgIElubGluZUxheW91dFVuaXQgbV9j
b250ZW50TG9naWNhbFdpZHRoIHsgMCB9OworICAgIElubGluZUxheW91dFNpemUgbV9sb2dpY2Fs
U2l6ZTsKKyAgICBib29sIG1faXNMaW5lVmlzdWFsbHlFbXB0eSB7IHRydWUgfTsKIAogICAgIElu
bGluZUJveCBtX3Jvb3RJbmxpbmVCb3g7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCA5
YzcyY2RhOWNkODkxODExNmUwNzNjNTlkZTdjY2I3NzA3YzhkMTg5Li42NGIzYjgyZDNkNDE0YjAz
YzE2NjViM2VlNWIzZmMwYzNmOTRmODlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKICNp
bmNsdWRlICJEaXNwbGF5Qm94LmgiCisjaW5jbHVkZSAiRmxvYXRpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIK
ICNpbmNsdWRlICJUZXh0VXRpbC5oIgpAQCAtMjgwLDMwICsyODEsNjcgQEAgSW5saW5lTGF5b3V0
VW5pdCBMaW5lQnVpbGRlcjo6aW5saW5lSXRlbVdpZHRoKGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0sIElubGkKICAgICByZXR1cm4gYm94R2VvbWV0cnkud2lkdGgoKTsKIH0KIAotTGluZUJ1
aWxkZXI6OkxpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCwgY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJv
b3QsIGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcykKK0xpbmVCdWlsZGVyOjpMaW5lQnVp
bGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQsIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBDb250YWlu
ZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0
ZW1zKQogICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCkKKyAgICAsIG1fZmxvYXRpbmdDb250ZXh0KGZsb2F0aW5nQ29udGV4dCkKICAgICAsIG1f
Zm9ybWF0dGluZ0NvbnRleHRSb290KGZvcm1hdHRpbmdDb250ZXh0Um9vdCkKKyAgICAsIG1fbGlu
ZShpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKICAgICAsIG1faW5saW5lSXRlbXMoaW5saW5lSXRl
bXMpCiB7CiB9CiAKLUxpbmVCdWlsZGVyOjpMaW5lQ29udGVudCBMaW5lQnVpbGRlcjo6bGF5b3V0
SW5saW5lQ29udGVudChMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJh
bmdlLCBPcHRpb25hbDx1bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKQorTGlu
ZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KGNv
bnN0IElubGluZUl0ZW1SYW5nZSYgbmVlZHNMYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+
IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQ6OkNv
bnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgaW5pdGlhbENvbnN0cmFpbnRzLCBib29sIGlzRmly
c3RMaW5lKQogewotICAgIEFTU0VSVChtX2Zsb2F0cy5pc0VtcHR5KCkpOworICAgIGF1dG8gdXNl
ZENvbnN0cmFpbnRzID0gY29uc3RyYWludHNGb3JMaW5lKGluaXRpYWxDb25zdHJhaW50cywgaXNG
aXJzdExpbmUpOworICAgIGluaXRpYWxpemUodXNlZENvbnN0cmFpbnRzKTsKKworICAgIGF1dG8g
Y29tbWl0dGVkQ29udGVudCA9IHBsYWNlSW5saW5lQ29udGVudChuZWVkc0xheW91dFJhbmdlLCBw
YXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOworICAgIGF1dG8gY29tbWl0dGVkUmFuZ2UgPSBj
bG9zZShuZWVkc0xheW91dFJhbmdlLCBjb21taXR0ZWRDb250ZW50KTsKKworICAgIGF1dG8gbGlu
ZUxvZ2ljYWxUb3BMZWZ0ID0gSW5saW5lTGF5b3V0UG9pbnQgeyB1c2VkQ29uc3RyYWludHMubG9n
aWNhbExlZnQsIGluaXRpYWxDb25zdHJhaW50cy52ZXJ0aWNhbC5sb2dpY2FsVG9wIH07CisgICAg
YXV0byBpc0xhc3RMaW5lID0gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KGNvbW1pdHRlZFJh
bmdlLCBuZWVkc0xheW91dFJhbmdlLmVuZCwgY29tbWl0dGVkQ29udGVudC5wYXJ0aWFsVHJhaWxp
bmdDb250ZW50Lmhhc1ZhbHVlKCkpOworICAgIGF1dG8gbGluZUlzVmlzdWFsbHlFbXB0eSA9IG1f
bGluZS5pc1Zpc3VhbGx5RW1wdHkoKSA/IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6Olll
cyA6IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6Ok5vOworICAgIHJldHVybiBMaW5lQ29u
dGVudCB7IGNvbW1pdHRlZENvbnRlbnQucGFydGlhbFRyYWlsaW5nQ29udGVudCwgY29tbWl0dGVk
UmFuZ2UsIG1fZmxvYXRzLCBtX2xpbmUuaGFzSW50cnVzaXZlRmxvYXQoKQorICAgICAgICAsIGxp
bmVMb2dpY2FsVG9wTGVmdAorICAgICAgICAsIG1fbGluZS5saW5lTG9naWNhbFdpZHRoKCkKKyAg
ICAgICAgLCBMaW5lQm94IHsgZm9ybWF0dGluZ0NvbnRleHQoKSwgbV9saW5lLmxpbmVMb2dpY2Fs
V2lkdGgoKSwgbV9saW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbV9saW5lLnJ1bnMoKSwgbGlu
ZUlzVmlzdWFsbHlFbXB0eQorICAgICAgICAsIGlzTGFzdExpbmUgPyBMaW5lQm94OjpJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudDo6Tm8gfQorICAgICAgICAsIG1fbGluZS5ydW5zKCkgfTsKK30KKworTGluZUJ1aWxk
ZXI6OkludHJpbnNpY0NvbnRlbnQgTGluZUJ1aWxkZXI6OmNvbXB1dGVkSW50cmluc2ljV2lkdGgo
Y29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdlLCBJbmxpbmVMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoKQoreworICAgIGluaXRpYWxpemUoeyB7IH0sIGF2YWlsYWJsZVdpZHRo
LCBmYWxzZSB9KTsKKyAgICBhdXRvIGNvbW1pdHRlZENvbnRlbnQgPSBwbGFjZUlubGluZUNvbnRl
bnQobmVlZHNMYXlvdXRSYW5nZSwgeyB9KTsKKyAgICBhdXRvIGNvbW1pdHRlZFJhbmdlID0gY2xv
c2UobmVlZHNMYXlvdXRSYW5nZSwgY29tbWl0dGVkQ29udGVudCk7CisgICAgcmV0dXJuIHsgY29t
bWl0dGVkUmFuZ2UsIG1fbGluZS5jb250ZW50TG9naWNhbFdpZHRoKCkgfTsKK30KKwordm9pZCBM
aW5lQnVpbGRlcjo6aW5pdGlhbGl6ZShjb25zdCBVc2VkQ29uc3RyYWludHMmIGxpbmVDb25zdHJh
aW50cykKK3sKKyAgICBtX2Zsb2F0cy5jbGVhcigpOwogICAgIG1fcGFydGlhbExlYWRpbmdUZXh0
SXRlbSA9IHsgfTsKICAgICBtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtID0geyB9OwotICAgIGF1
dG8gbGluZUJyZWFrZXIgPSBMaW5lQnJlYWtlciB7IH07Ci0gICAgYXV0byBjdXJyZW50SXRlbUlu
ZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQ7Ci0gICAgdW5zaWduZWQgY29tbWl0dGVkSW5saW5lSXRl
bUNvdW50ID0gMDsKKworICAgIG1fbGluZS5vcGVuKGxpbmVDb25zdHJhaW50cy5hdmFpbGFibGVM
b2dpY2FsV2lkdGgpOworICAgIG1fbGluZS5zZXRIYXNJbnRydXNpdmVGbG9hdChsaW5lQ29uc3Ry
YWludHMuaXNDb25zdHJhaW5lZEJ5RmxvYXQpOworfQorCitMaW5lQnVpbGRlcjo6Q29tbWl0dGVk
Q29udGVudCBMaW5lQnVpbGRlcjo6cGxhY2VJbmxpbmVDb250ZW50KGNvbnN0IElubGluZUl0ZW1S
YW5nZSYgbmVlZHNMYXlvdXRSYW5nZSwgT3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFkaW5n
Q29udGVudExlbmd0aCkKK3sKICAgICBhdXRvIGxpbmVDYW5kaWRhdGUgPSBMaW5lQ2FuZGlkYXRl
IHsgfTsKLSAgICB3aGlsZSAoY3VycmVudEl0ZW1JbmRleCA8IGxheW91dFJhbmdlLmVuZCkgewor
ICAgIGF1dG8gbGluZUJyZWFrZXIgPSBMaW5lQnJlYWtlciB7IH07CisKKyAgICBhdXRvIGN1cnJl
bnRJdGVtSW5kZXggPSBuZWVkc0xheW91dFJhbmdlLnN0YXJ0OworICAgIHNpemVfdCBjb21taXR0
ZWRJbmxpbmVJdGVtQ291bnQgPSAwOworICAgIHdoaWxlIChjdXJyZW50SXRlbUluZGV4IDwgbmVl
ZHNMYXlvdXRSYW5nZS5lbmQpIHsKICAgICAgICAgLy8gMS4gQ29sbGVjdCB0aGUgc2V0IG9mIHJ1
bnMgdGhhdCB3ZSBjYW4gY29tbWl0IHRvIHRoZSBsaW5lIGFzIG9uZSBlbnRpdHkgZS5nLiA8c3Bh
bj50ZXh0X2FuZF9zcGFuX3N0YXJ0X3NwYW5fZW5kPC9zcGFuPi4KICAgICAgICAgLy8gMi4gQXBw
bHkgZmxvYXRzIGFuZCBzaHJpbmsgdGhlIGF2YWlsYWJsZSBob3Jpem9udGFsIHNwYWNlIGUuZy4g
PHNwYW4+aW50cnVfPGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQiPjwvZGl2PnNpdmVfZmxvYXQ8L3Nw
YW4+LgogICAgICAgICAvLyAzLiBDaGVjayBpZiB0aGUgY29udGVudCBmaXRzIHRoZSBsaW5lIGFu
ZCBjb21taXQgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkgKGZ1bGwsIHBhcnRpYWwgb3Igbm90IGNv
bW1pdCBhdCBhbGwpLgogICAgICAgICAvLyA0LiBSZXR1cm4gaWYgd2UgYXJlIGF0IHRoZSBlbmQg
b2YgdGhlIGxpbmUgZWl0aGVyIGJ5IG5vdCBiZWluZyBhYmxlIHRvIGZpdCBtb3JlIGNvbnRlbnQg
b3IgYmVjYXVzZSBvZiBhbiBleHBsaWNpdCBsaW5lIGJyZWFrLgotICAgICAgICBuZXh0Q29udGVu
dEZvckxpbmUobGluZUNhbmRpZGF0ZSwgY3VycmVudEl0ZW1JbmRleCwgbGF5b3V0UmFuZ2UsIHBh
cnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgbGluZS5hdmFpbGFibGVXaWR0aCgpICsgbGluZS50
cmltbWFibGVUcmFpbGluZ1dpZHRoKCksIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpKTsKKyAg
ICAgICAgbmV4dENvbnRlbnRGb3JMaW5lKGxpbmVDYW5kaWRhdGUsIGN1cnJlbnRJdGVtSW5kZXgs
IG5lZWRzTGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgbV9saW5lLmF2
YWlsYWJsZVdpZHRoKCkgKyBtX2xpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpLCBtX2xpbmUu
Y29udGVudExvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAgLy8gTm93IGNoZWNrIGlmIHdlIGNhbiBw
dXQgdGhpcyBjb250ZW50IG9uIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgIGF1dG8gcmVzdWx0
ID0gaGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChsaW5lQnJlYWtlciwgbGluZSwgbGF5b3V0
UmFuZ2UsIGxpbmVDYW5kaWRhdGUpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGhhbmRsZUZsb2F0
c0FuZElubGluZUNvbnRlbnQobGluZUJyZWFrZXIsIG5lZWRzTGF5b3V0UmFuZ2UsIGxpbmVDYW5k
aWRhdGUpOwogICAgICAgICBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgPSByZXN1bHQuY29tbWl0
dGVkQ291bnQuaXNSZXZlcnQgPyByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWUgOiBjb21taXR0
ZWRJbmxpbmVJdGVtQ291bnQgKyByZXN1bHQuY29tbWl0dGVkQ291bnQudmFsdWU7CiAgICAgICAg
IGF1dG8mIGlubGluZUNvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmlubGluZUNvbnRlbnQ7CiAgICAg
ICAgIGF1dG8gaW5saW5lQ29udGVudElzRnVsbHlDb21taXR0ZWQgPSBpbmxpbmVDb250ZW50LnJ1
bnMoKS5zaXplKCkgPT0gcmVzdWx0LmNvbW1pdHRlZENvdW50LnZhbHVlICYmICFyZXN1bHQucGFy
dGlhbENvbnRlbnQ7CkBAIC0zMTEsMzEgKzM0OSwxMDQgQEAgTGluZUJ1aWxkZXI6OkxpbmVDb250
ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJbmxpbmVDb250ZW50KExpbmUmIGxpbmUsIGNvbnN0IElu
bGkKIAogICAgICAgICBpZiAoaW5saW5lQ29udGVudElzRnVsbHlDb21taXR0ZWQgJiYgaW5saW5l
Q29udGVudC50cmFpbGluZ0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICAvLyBGdWxseSBjb21t
aXRlZCAob3IgZW1wdHkpIGNvbnRlbnQgZm9sbG93ZWQgYnkgYSBsaW5lIGJyZWFrIG1lYW5zICJl
bmQgb2YgbGluZSIuCi0gICAgICAgICAgICBsaW5lLmFwcGVuZCgqaW5saW5lQ29udGVudC50cmFp
bGluZ0xpbmVCcmVhaygpLCB7IH0pOworICAgICAgICAgICAgbV9saW5lLmFwcGVuZCgqaW5saW5l
Q29udGVudC50cmFpbGluZ0xpbmVCcmVhaygpLCB7IH0pOwogICAgICAgICAgICAgKytjb21taXR0
ZWRJbmxpbmVJdGVtQ291bnQ7CiAgICAgICAgICAgICBpc0VuZE9mTGluZSA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGlzRW5kT2ZMaW5lKSB7CiAgICAgICAgICAgICAvLyBXZSBjYW4n
dCBwbGFjZSBhbnkgbW9yZSBpdGVtcyBvbiB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICAgICAg
cmV0dXJuIGNsb3NlKGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQs
IHJlc3VsdC5wYXJ0aWFsQ29udGVudCk7CisgICAgICAgICAgICByZXR1cm4geyBjb21taXR0ZWRJ
bmxpbmVJdGVtQ291bnQsIHJlc3VsdC5wYXJ0aWFsQ29udGVudCB9OwogICAgICAgICB9Ci0gICAg
ICAgIGN1cnJlbnRJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydCArIGNvbW1pdHRlZElubGlu
ZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsKKyAgICAgICAgY3VycmVudEl0ZW1JbmRleCA9
IG5lZWRzTGF5b3V0UmFuZ2Uuc3RhcnQgKyBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgKyBtX2Zs
b2F0cy5zaXplKCk7CiAgICAgICAgIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCA9IHsgfTsK
ICAgICB9CiAgICAgLy8gTG9va3MgbGlrZSB3ZSd2ZSBydW4gb3V0IG9mIHJ1bnMuCi0gICAgcmV0
dXJuIGNsb3NlKGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIHsg
fSk7CisgICAgcmV0dXJuIHsgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCB7IH0gfTsKIH0KIAot
TGluZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpjbG9zZShjb25zdCBMaW5lJiBs
aW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCB1bnNpZ25lZCBjb21taXR0
ZWRJbmxpbmVJdGVtQ291bnQsIE9wdGlvbmFsPExpbmVDb250ZW50OjpQYXJ0aWFsQ29udGVudD4g
cGFydGlhbENvbnRlbnQpCitMaW5lQnVpbGRlcjo6SW5saW5lSXRlbVJhbmdlIExpbmVCdWlsZGVy
OjpjbG9zZShjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIG5lZWRzTGF5b3V0UmFuZ2UsIGNvbnN0IENv
bW1pdHRlZENvbnRlbnQmIGNvbW1pdHRlZENvbnRlbnQpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChs
aW5lLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgfHwgIW1fZmxvYXRzLmlzRW1wdHkoKSB8fCBs
aW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCkpOwotICAgIGF1dG8gbnVtYmVyT2ZDb21taXR0ZWRJdGVt
cyA9IGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsKLSAgICBhdXRv
IHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyBudW1iZXJPZkNv
bW1pdHRlZEl0ZW1zIC0gMTsKLSAgICBhdXRvIGxpbmVSYW5nZSA9IElubGluZUl0ZW1SYW5nZSB7
IGxheW91dFJhbmdlLnN0YXJ0LCB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCArIDEgfTsKLSAgICBB
U1NFUlQobGluZVJhbmdlLmVuZCA8PSBsYXlvdXRSYW5nZS5lbmQpOworICAgIEFTU0VSVChjb21t
aXR0ZWRDb250ZW50LmlubGluZUl0ZW1Db3VudCB8fCAhbV9mbG9hdHMuaXNFbXB0eSgpIHx8IG1f
bGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsKKyAgICBhdXRvIG51bWJlck9mQ29tbWl0dGVkSXRl
bXMgPSBjb21taXR0ZWRDb250ZW50LmlubGluZUl0ZW1Db3VudCArIG1fZmxvYXRzLnNpemUoKTsK
KyAgICBhdXRvIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID0gbmVlZHNMYXlvdXRSYW5nZS5zdGFy
dCArIG51bWJlck9mQ29tbWl0dGVkSXRlbXMgLSAxOworICAgIGF1dG8gbGluZVJhbmdlID0gSW5s
aW5lSXRlbVJhbmdlIHsgbmVlZHNMYXlvdXRSYW5nZS5zdGFydCwgdHJhaWxpbmdJbmxpbmVJdGVt
SW5kZXggKyAxIH07CisgICAgQVNTRVJUKGxpbmVSYW5nZS5lbmQgPD0gbmVlZHNMYXlvdXRSYW5n
ZS5lbmQpOwogICAgIC8vIEFkanVzdCBoeXBoZW5hdGVkIGxpbmUgY291bnQuCi0gICAgbV9zdWNj
ZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IHBhcnRpYWxDb250ZW50ICYmIHBhcnRpYWxDb250
ZW50LT50cmFpbGluZ0NvbnRlbnRIYXNIeXBoZW4gPyBtX3N1Y2Nlc3NpdmVIeXBoZW5hdGVkTGlu
ZUNvdW50ICsgMSA6IDA7Ci0gICAgcmV0dXJuIExpbmVDb250ZW50IHsgcGFydGlhbENvbnRlbnQs
IGxpbmVSYW5nZSwgV1RGTW92ZShtX2Zsb2F0cyksIGxpbmUucnVucygpIH07CisgICAgbV9zdWNj
ZXNzaXZlSHlwaGVuYXRlZExpbmVDb3VudCA9IGNvbW1pdHRlZENvbnRlbnQucGFydGlhbFRyYWls
aW5nQ29udGVudCAmJiBjb21taXR0ZWRDb250ZW50LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQtPnRy
YWlsaW5nQ29udGVudEhhc0h5cGhlbiA/IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQg
KyAxIDogMDsKKyAgICBtX2xpbmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KGxp
bmVSYW5nZSwgbmVlZHNMYXlvdXRSYW5nZS5lbmQsIGNvbW1pdHRlZENvbnRlbnQucGFydGlhbFRy
YWlsaW5nQ29udGVudC5oYXNWYWx1ZSgpKSk7CisgICAgcmV0dXJuIGxpbmVSYW5nZTsKK30KKwor
TGluZUJ1aWxkZXI6OlVzZWRDb25zdHJhaW50cyBMaW5lQnVpbGRlcjo6Y29uc3RyYWludHNGb3JM
aW5lKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQm
IGluaXRpYWxDb25zdHJhaW50cywgYm9vbCBpc0ZpcnN0TGluZSkKK3sKKyAgICBhdXRvIGxpbmVM
b2dpY2FsTGVmdCA9IGluaXRpYWxDb25zdHJhaW50cy5ob3Jpem9udGFsLmxvZ2ljYWxMZWZ0Owor
ICAgIGF1dG8gbGluZUxvZ2ljYWxUb3AgPSBpbml0aWFsQ29uc3RyYWludHMudmVydGljYWwubG9n
aWNhbFRvcDsKKyAgICBhdXRvIGxpbmVMb2dpY2FsUmlnaHQgPSBsaW5lTG9naWNhbExlZnQgKyBp
bml0aWFsQ29uc3RyYWludHMuaG9yaXpvbnRhbC5sb2dpY2FsV2lkdGg7CisgICAgYXV0byBsaW5l
SXNDb25zdHJhaW5lZEJ5RmxvYXQgPSBmYWxzZTsKKworICAgIC8vIENoZWNrIGZvciBpbnRydWRp
bmcgZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJsZSB3aWR0aCBmb3IgdGhp
cyBsaW5lIGFjY29yZGluZ2x5LgorICAgIGlmICghbV9mbG9hdGluZ0NvbnRleHQuaXNFbXB0eSgp
KSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgdmFyaWFibGUgbGluZSBoZWln
aHQsIHdoZXJlIHRoZSBpbnRydXNpdmUgZmxvYXRzIHNob3VsZCBiZSBwcm9iZWQgYXMgdGhlIGxp
bmUgaGVpZ2h0IGdyb3dzLgorICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBtX2Zsb2F0
aW5nQ29udGV4dC5jb25zdHJhaW50cyh0b0xheW91dFVuaXQobGluZUxvZ2ljYWxUb3ApLCB0b0xh
eW91dFVuaXQobGluZUxvZ2ljYWxUb3AgKyAqaW5pdGlhbENvbnN0cmFpbnRzLnZlcnRpY2FsLmxv
Z2ljYWxIZWlnaHQpKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlc2UgY29uc3RyYWludHMgYWN0
dWFsbHkgcHV0IGxpbWl0YXRpb24gb24gdGhlIGxpbmUuCisgICAgICAgIGlmIChmbG9hdENvbnN0
cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGxpbmVMb2dpY2FsTGVm
dCkKKyAgICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9IHsgfTsKKworICAgICAgICBp
ZiAoZmxvYXRDb25zdHJhaW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49
IGxpbmVMb2dpY2FsUmlnaHQpCisgICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0ID0g
eyB9OworCisgICAgICAgIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZsb2F0Q29uc3RyYWlu
dHMubGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0OworCisgICAgICAgIGlmIChmbG9hdENv
bnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodCkgeworICAgICAgICAgICAg
QVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0
LT54KTsKKyAgICAgICAgICAgIGxpbmVMb2dpY2FsUmlnaHQgPSBmbG9hdENvbnN0cmFpbnRzLnJp
Z2h0LT54OworICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJhaW50cy5s
ZWZ0LT54OworICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCkgeworICAg
ICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA+PSBsaW5lTG9naWNhbExl
ZnQpOworICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0ID0gZmxvYXRDb25zdHJhaW50cy5sZWZ0
LT54OworICAgICAgICB9IGVsc2UgaWYgKGZsb2F0Q29uc3RyYWludHMucmlnaHQpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGxpbmVMb2dpY2FsTGVm
dCk7CisgICAgICAgICAgICBsaW5lTG9naWNhbFJpZ2h0ID0gZmxvYXRDb25zdHJhaW50cy5yaWdo
dC0+eDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gY29tcHV0ZWRUZXh0SW5kZW50ID0g
WyZdKCkgLT4gSW5saW5lTGF5b3V0VW5pdCB7CisgICAgICAgIC8vIHRleHQtaW5kZW50IHByb3Bl
cnR5IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBsaW5lcyBvZiBpbmxpbmUg
Y29udGVudCBpbiBhIGJsb2NrLgorICAgICAgICAvLyBUaGUgaW5kZW50IGlzIHRyZWF0ZWQgYXMg
YSBtYXJnaW4gYXBwbGllZCB0byB0aGUgc3RhcnQgZWRnZSBvZiB0aGUgbGluZSBib3guCisgICAg
ICAgIC8vIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBvbmx5IGxpbmVzIHRoYXQgYXJlIHRo
ZSBmaXJzdCBmb3JtYXR0ZWQgbGluZSBvZiBhbiBlbGVtZW50IGFyZSBhZmZlY3RlZC4KKyAgICAg
ICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBsaW5lIG9mIGFuIGFub255bW91cyBibG9jayBi
b3ggaXMgb25seSBhZmZlY3RlZCBpZiBpdCBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVu
dCBlbGVtZW50LgorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGVhY2gtbGluZS4K
KyAgICAgICAgLy8gW0ludGVncmF0aW9uXSByb290KCktPnBhcmVudCgpIHdvdWxkIG5vcm1hbGx5
IHByb2R1Y2UgYSB2YWxpZCBsYXlvdXQgYm94LgorICAgICAgICBhdXRvJiByb290ID0gdGhpcy0+
cm9vdCgpOworICAgICAgICBhdXRvIGlzRm9ybWF0dGluZ0NvbnRleHRSb290Q2FuZGlkYXRlVG9U
ZXh0SW5kZW50ID0gIXJvb3QuaXNBbm9ueW1vdXMoKTsKKyAgICAgICAgaWYgKHJvb3QuaXNBbm9u
eW1vdXMoKSkgeworICAgICAgICAgICAgLy8gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkg
dGhlIGVhY2gtbGluZSBhbmQvb3IgaGFuZ2luZyBrZXl3b3Jkcywgb25seSBsaW5lcyB0aGF0IGFy
ZSB0aGUgZmlyc3QgZm9ybWF0dGVkIGxpbmUKKyAgICAgICAgICAgIC8vIG9mIGFuIGVsZW1lbnQg
YXJlIGFmZmVjdGVkLgorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBsaW5l
IG9mIGFuIGFub255bW91cyBibG9jayBib3ggaXMgb25seSBhZmZlY3RlZCBpZiBpdCBpcyB0aGUg
Zmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudCBlbGVtZW50LgorICAgICAgICAgICAgaXNGb3JtYXR0
aW5nQ29udGV4dFJvb3RDYW5kaWRhdGVUb1RleHRJbmRlbnQgPSBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25F
bmFibGVkKCkKKyAgICAgICAgICAgICAgICA/IGxheW91dFN0YXRlKCkuaXNJbnRlZ3JhdGVkUm9v
dEJveEZpcnN0Q2hpbGQoKQorICAgICAgICAgICAgICAgIDogcm9vdC5wYXJlbnQoKS5maXJzdElu
Rmxvd0NoaWxkKCkgPT0gJnJvb3Q7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0Zvcm1hdHRp
bmdDb250ZXh0Um9vdENhbmRpZGF0ZVRvVGV4dEluZGVudCkKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgIGF1dG8gaW52ZXJ0TGluZVJhbmdlID0gZmFsc2U7CisjaWYgRU5BQkxFKENT
UzNfVEVYVCkKKyAgICAgICAgaW52ZXJ0TGluZVJhbmdlID0gcm9vdC5zdHlsZSgpLnRleHRJbmRl
bnRUeXBlKCkgPT0gVGV4dEluZGVudFR5cGU6Okhhbmdpbmc7CisjZW5kaWYKKyAgICAgICAgLy8g
dGV4dC1pbmRlbnQ6IGhhbmdpbmcgaW52ZXJ0cyB3aGljaCBsaW5lcyBhcmUgYWZmZWN0ZWQuCisg
ICAgICAgIC8vIGludmVydGVkIGxpbmUgcmFuZ2UgLT4gYWxsIHRoZSBsaW5lcyBleGNlcHQgdGhl
IGZpcnN0IG9uZS4KKyAgICAgICAgLy8gIWludmVydGVkIGxpbmUgcmFuZ2UgLT4gZmlyc3QgbGlu
ZSBnZXRzIHRoZSBpbmRlbnQuCisgICAgICAgIGF1dG8gc2hvdWxkSW5kZW50ID0gaW52ZXJ0TGlu
ZVJhbmdlICE9IGlzRmlyc3RMaW5lOworICAgICAgICBpZiAoIXNob3VsZEluZGVudCkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgYXV0byB0ZXh0SW5kZW50ID0gcm9vdC5zdHls
ZSgpLnRleHRJbmRlbnQoKTsKKyAgICAgICAgaWYgKHRleHRJbmRlbnQgPT0gUmVuZGVyU3R5bGU6
OmluaXRpYWxUZXh0SW5kZW50KCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBy
ZXR1cm4geyBtaW5pbXVtVmFsdWVGb3JMZW5ndGgodGV4dEluZGVudCwgaW5pdGlhbENvbnN0cmFp
bnRzLmhvcml6b250YWwubG9naWNhbFdpZHRoKSB9OworICAgIH07CisgICAgbGluZUxvZ2ljYWxM
ZWZ0ICs9IGNvbXB1dGVkVGV4dEluZGVudCgpOworICAgIHJldHVybiBVc2VkQ29uc3RyYWludHMg
eyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsUmlnaHQgLSBsaW5lTG9naWNhbExlZnQsIGxp
bmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB9OwogfQogCiB2b2lkIExpbmVCdWlsZGVyOjpuZXh0Q29u
dGVudEZvckxpbmUoTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWduZWQgY3VycmVu
dElubGluZUl0ZW1JbmRleCwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgT3B0
aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgSW5saW5lTGF5b3V0
VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElubGluZUxheW91dFVuaXQgY3VycmVudExvZ2ljYWxS
aWdodCkKQEAgLTM4NCw3ICs0OTUsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpuZXh0Q29udGVudEZv
ckxpbmUoTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwgdW5zaWduZWQgY3VycgogICAgIH0K
IH0KIAotdm9pZCBMaW5lQnVpbGRlcjo6Y29tbWl0RmxvYXRzKExpbmUmIGxpbmUsIGNvbnN0IExp
bmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHkgY29t
bWl0SW50cnVzaXZlT25seSkKK3ZvaWQgTGluZUJ1aWxkZXI6OmNvbW1pdEZsb2F0cyhjb25zdCBM
aW5lQ2FuZGlkYXRlJiBsaW5lQ2FuZGlkYXRlLCBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5IGNv
bW1pdEludHJ1c2l2ZU9ubHkpCiB7CiAgICAgYXV0byYgZmxvYXRDb250ZW50ID0gbGluZUNhbmRp
ZGF0ZS5mbG9hdENvbnRlbnQ7CiAgICAgYXV0byBsZWZ0SW50cnVzaXZlRmxvYXRzV2lkdGggPSBJ
bmxpbmVMYXlvdXRVbml0IHsgfTsKQEAgLTQwNSwyMSArNTE2LDIxIEBAIHZvaWQgTGluZUJ1aWxk
ZXI6OmNvbW1pdEZsb2F0cyhMaW5lJiBsaW5lLCBjb25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2Fu
ZGlkYXRlLCBDCiAgICAgICAgICAgICAgICAgcmlnaHRJbnRydXNpdmVGbG9hdHNXaWR0aCArPSBm
bG9hdENhbmRpZGF0ZS5sb2dpY2FsV2lkdGg7CiAgICAgICAgIH0KICAgICB9Ci0gICAgbGluZS5z
ZXRIYXNJbnRydXNpdmVGbG9hdChoYXNJbnRydXNpdmVGbG9hdCk7CisgICAgbV9saW5lLnNldEhh
c0ludHJ1c2l2ZUZsb2F0KGhhc0ludHJ1c2l2ZUZsb2F0KTsKICAgICBpZiAobGVmdEludHJ1c2l2
ZUZsb2F0c1dpZHRoIHx8IHJpZ2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpIHsKICAgICAgICAgaWYg
KGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCkKLSAgICAgICAgICAgIGxpbmUubW92ZUxvZ2ljYWxM
ZWZ0KGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CisgICAgICAgICAgICBtX2xpbmUubW92ZUxv
Z2ljYWxMZWZ0KGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CiAgICAgICAgIGlmIChyaWdodElu
dHJ1c2l2ZUZsb2F0c1dpZHRoKQotICAgICAgICAgICAgbGluZS5tb3ZlTG9naWNhbFJpZ2h0KHJp
Z2h0SW50cnVzaXZlRmxvYXRzV2lkdGgpOworICAgICAgICAgICAgbV9saW5lLm1vdmVMb2dpY2Fs
UmlnaHQocmlnaHRJbnRydXNpdmVGbG9hdHNXaWR0aCk7CiAgICAgfQogfQogCi1MaW5lQnVpbGRl
cjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExpbmVC
cmVha2VyJiBsaW5lQnJlYWtlciwgTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBs
YXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSkKK0xpbmVCdWls
ZGVyOjpSZXN1bHQgTGluZUJ1aWxkZXI6OmhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGlu
ZUJyZWFrZXImIGxpbmVCcmVha2VyLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdl
LCBjb25zdCBMaW5lQ2FuZGlkYXRlJiBsaW5lQ2FuZGlkYXRlKQogewogICAgIGF1dG8mIGlubGlu
ZUNvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmlubGluZUNvbnRlbnQ7CiAgICAgYXV0byYgY2FuZGlk
YXRlUnVucyA9IGlubGluZUNvbnRlbnQucnVucygpOwogICAgIGlmIChjYW5kaWRhdGVSdW5zLmlz
RW1wdHkoKSkgewotICAgICAgICBjb21taXRGbG9hdHMobGluZSwgbGluZUNhbmRpZGF0ZSk7Cisg
ICAgICAgIGNvbW1pdEZsb2F0cyhsaW5lQ2FuZGlkYXRlKTsKICAgICAgICAgcmV0dXJuIHsgTGlu
ZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpObyB9OwogICAgIH0KIApAQCAtNDMzLDE3ICs1NDQsMTcg
QEAgTGluZUJ1aWxkZXI6OlJlc3VsdCBMaW5lQnVpbGRlcjo6aGFuZGxlRmxvYXRzQW5kSW5saW5l
Q29udGVudChMaW5lQnJlYWtlciYgbGluZUIKIAogICAgIGF1dG8mIGZsb2F0Q29udGVudCA9IGxp
bmVDYW5kaWRhdGUuZmxvYXRDb250ZW50OwogICAgIC8vIENoZWNrIGlmIHRoaXMgbmV3IGNvbnRl
bnQgZml0cy4KLSAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZS5hdmFpbGFibGVXaWR0aCgp
IC0gZmxvYXRDb250ZW50LmludHJ1c2l2ZVdpZHRoKCk7Ci0gICAgYXV0byBpc0xpbmVDb25zaWRl
cmVkRW1wdHkgPSBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpICYmICFsaW5lLmhhc0ludHJ1c2l2ZUZs
b2F0KCk7Ci0gICAgYXV0byBsaW5lU3RhdHVzID0gTGluZUJyZWFrZXI6OkxpbmVTdGF0dXMgeyBh
dmFpbGFibGVXaWR0aCwgbGluZS50cmltbWFibGVUcmFpbGluZ1dpZHRoKCksIGxpbmUuaXNUcmFp
bGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCksIGlzTGluZUNvbnNpZGVyZWRFbXB0eSB9OworICAgIGF1
dG8gYXZhaWxhYmxlV2lkdGggPSBtX2xpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGZsb2F0Q29udGVu
dC5pbnRydXNpdmVXaWR0aCgpOworICAgIGF1dG8gaXNMaW5lQ29uc2lkZXJlZEVtcHR5ID0gbV9s
aW5lLmlzVmlzdWFsbHlFbXB0eSgpICYmICFtX2xpbmUuaGFzSW50cnVzaXZlRmxvYXQoKTsKKyAg
ICBhdXRvIGxpbmVTdGF0dXMgPSBMaW5lQnJlYWtlcjo6TGluZVN0YXR1cyB7IGF2YWlsYWJsZVdp
ZHRoLCBtX2xpbmUudHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpLCBtX2xpbmUuaXNUcmFpbGluZ1J1
bkZ1bGx5VHJpbW1hYmxlKCksIGlzTGluZUNvbnNpZGVyZWRFbXB0eSB9OwogICAgIGF1dG8gcmVz
dWx0ID0gbGluZUJyZWFrZXIuc2hvdWxkV3JhcElubGluZUNvbnRlbnQoY2FuZGlkYXRlUnVucywg
aW5saW5lQ29udGVudC5sb2dpY2FsV2lkdGgoKSwgbGluZVN0YXR1cyk7CiAgICAgaWYgKHJlc3Vs
dC5sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbSkKICAgICAgICAgbV9sYXN0V3JhcE9wcG9ydHVuaXR5
SXRlbSA9IHJlc3VsdC5sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbTsKICAgICBpZiAocmVzdWx0LmFj
dGlvbiA9PSBMaW5lQnJlYWtlcjo6UmVzdWx0OjpBY3Rpb246OktlZXApIHsKICAgICAgICAgLy8g
VGhpcyBjb250aW51b3VzIGNvbnRlbnQgY2FuIGJlIGZ1bGx5IHBsYWNlZCBvbiB0aGUgY3VycmVu
dCBsaW5lIGluY2x1ZGluZyBub24taW50cnVzaXZlIGZsb2F0cy4KICAgICAgICAgZm9yIChhdXRv
JiBydW4gOiBjYW5kaWRhdGVSdW5zKQotICAgICAgICAgICAgbGluZS5hcHBlbmQocnVuLmlubGlu
ZUl0ZW0sIHJ1bi5sb2dpY2FsV2lkdGgpOwotICAgICAgICBjb21taXRGbG9hdHMobGluZSwgbGlu
ZUNhbmRpZGF0ZSk7CisgICAgICAgICAgICBtX2xpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBy
dW4ubG9naWNhbFdpZHRoKTsKKyAgICAgICAgY29tbWl0RmxvYXRzKGxpbmVDYW5kaWRhdGUpOwog
ICAgICAgICByZXR1cm4geyByZXN1bHQuaXNFbmRPZkxpbmUsIHsgY2FuZGlkYXRlUnVucy5zaXpl
KCksIGZhbHNlIH0gfTsKICAgICB9CiAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFr
ZXI6OlJlc3VsdDo6QWN0aW9uOjpQdXNoKSB7CkBAIC00NTUsMTQgKzU2NiwxNCBAQCBMaW5lQnVp
bGRlcjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExp
bmVCcmVha2VyJiBsaW5lQgogICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5lID09IExp
bmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzKTsKICAgICAgICAgLy8gTm90IG9ubHkgdGhpcyBj
b250ZW50IGNhbid0IGJlIHBsYWNlZCBvbiB0aGUgY3VycmVudCBsaW5lLCBidXQgd2UgZXZlbiBu
ZWVkIHRvIHJldmVydCB0aGUgbGluZSBiYWNrIHRvIGFuIGVhcmxpZXIgcG9zaXRpb24uCiAgICAg
ICAgIEFTU0VSVChtX2xhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtKTsKLSAgICAgICAgcmV0dXJuIHsg
TGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpZZXMsIHsgcmVidWlsZExpbmUobGluZSwgbGF5b3V0
UmFuZ2UpLCB0cnVlIH0gfTsKKyAgICAgICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZM
aW5lOjpZZXMsIHsgcmVidWlsZExpbmUobGF5b3V0UmFuZ2UpLCB0cnVlIH0gfTsKICAgICB9CiAg
ICAgaWYgKHJlc3VsdC5hY3Rpb24gPT0gTGluZUJyZWFrZXI6OlJlc3VsdDo6QWN0aW9uOjpTcGxp
dCkgewogICAgICAgICBBU1NFUlQocmVzdWx0LmlzRW5kT2ZMaW5lID09IExpbmVCcmVha2VyOjpJ
c0VuZE9mTGluZTo6WWVzKTsKICAgICAgICAgLy8gQ29tbWl0IHRoZSBjb21iaW5hdGlvbiBvZiBm
dWxsIGFuZCBwYXJ0aWFsIGNvbnRlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgY29t
bWl0RmxvYXRzKGxpbmUsIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHk6
Olllcyk7CisgICAgICAgIGNvbW1pdEZsb2F0cyhsaW5lQ2FuZGlkYXRlLCBDb21taXRJbnRydXNp
dmVGbG9hdHNPbmx5OjpZZXMpOwogICAgICAgICBBU1NFUlQocmVzdWx0LnBhcnRpYWxUcmFpbGlu
Z0NvbnRlbnQpOwotICAgICAgICBjb21taXRQYXJ0aWFsQ29udGVudChsaW5lLCBjYW5kaWRhdGVS
dW5zLCAqcmVzdWx0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpOworICAgICAgICBjb21taXRQYXJ0
aWFsQ29udGVudChjYW5kaWRhdGVSdW5zLCAqcmVzdWx0LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQp
OwogICAgICAgICAvLyBXaGVuIHNwbGl0dGluZyBtdWx0aXBsZSBydW5zIDxzcGFuIHN0eWxlPSJ3
b3JkLWJyZWFrOiBicmVhay1hbGwiPnRleHQ8L3NwYW4+PHNwYW4+Y29udGVudDwvc3Bhbj4sIHdl
IG1pZ2h0IGVuZCB1cCBzcGxpdHRpbmcgdGhlbSBhdCBydW4gYm91bmRhcnkuCiAgICAgICAgIC8v
IEl0IHNpbXBseSBtZWFucyB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhIHBhcnRpYWwgcnVuLiBQYXJ0
aWFsIGNvbnRlbnQgeWVzLCBidXQgbm90IHBhcnRpYWwgcnVuLgogICAgICAgICBhdXRvIHRyYWls
aW5nUnVuSW5kZXggPSByZXN1bHQucGFydGlhbFRyYWlsaW5nQ29udGVudC0+dHJhaWxpbmdSdW5J
bmRleDsKQEAgLTQ4MCw3ICs1OTEsNyBAQCBMaW5lQnVpbGRlcjo6UmVzdWx0IExpbmVCdWlsZGVy
OjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExpbmVCcmVha2VyJiBsaW5lQgogICAgIHJl
dHVybiB7IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6Tm8gfTsKIH0KIAotdm9pZCBMaW5lQnVp
bGRlcjo6Y29tbWl0UGFydGlhbENvbnRlbnQoTGluZSYgbGluZSwgY29uc3QgTGluZUJyZWFrZXI6
OlJ1bkxpc3QmIHJ1bnMsIGNvbnN0IExpbmVCcmVha2VyOjpSZXN1bHQ6OlBhcnRpYWxUcmFpbGlu
Z0NvbnRlbnQmIHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQpCit2b2lkIExpbmVCdWlsZGVyOjpjb21t
aXRQYXJ0aWFsQ29udGVudChjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcnVucywgY29uc3Qg
TGluZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYgcGFydGlhbFRyYWls
aW5nQ29udGVudCkKIHsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcnVucy5z
aXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgYXV0byYgcnVuID0gcnVuc1tpbmRleF07CkBAIC00
OTAsMjYgKzYwMSwyNiBAQCB2b2lkIExpbmVCdWlsZGVyOjpjb21taXRQYXJ0aWFsQ29udGVudChM
aW5lJiBsaW5lLCBjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlzdCYgcgogICAgICAgICAgICAgaWYg
KGF1dG8gcGFydGlhbFJ1biA9IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQucGFydGlhbFJ1bikgewog
ICAgICAgICAgICAgICAgIGF1dG8mIHRyYWlsaW5nSW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJ
bmxpbmVUZXh0SXRlbT4ocnVuc1twYXJ0aWFsVHJhaWxpbmdDb250ZW50LnRyYWlsaW5nUnVuSW5k
ZXhdLmlubGluZUl0ZW0pOwogICAgICAgICAgICAgICAgIGF1dG8gcGFydGlhbFRyYWlsaW5nVGV4
dEl0ZW0gPSB0cmFpbGluZ0lubGluZVRleHRJdGVtLmxlZnQocGFydGlhbFJ1bi0+bGVuZ3RoKTsK
LSAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJdGVtKHBhcnRp
YWxUcmFpbGluZ1RleHRJdGVtLCBwYXJ0aWFsUnVuLT5sb2dpY2FsV2lkdGgsIHBhcnRpYWxSdW4t
Pm5lZWRzSHlwaGVuKTsKKyAgICAgICAgICAgICAgICBtX2xpbmUuYXBwZW5kUGFydGlhbFRyYWls
aW5nVGV4dEl0ZW0ocGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0sIHBhcnRpYWxSdW4tPmxvZ2ljYWxX
aWR0aCwgcGFydGlhbFJ1bi0+bmVlZHNIeXBoZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFRoZSBwYXJ0aWFsIHJ1biBpcyB0aGUgbGFz
dCBjb250ZW50IHRvIGNvbW1pdC4KLSAgICAgICAgICAgIGxpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJ
dGVtLCBydW4ubG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAgIG1fbGluZS5hcHBlbmQocnVuLmlu
bGluZUl0ZW0sIHJ1bi5sb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGxpbmUuYXBwZW5kKHJ1bi5pbmxpbmVJdGVtLCBydW4ubG9naWNhbFdpZHRo
KTsKKyAgICAgICAgbV9saW5lLmFwcGVuZChydW4uaW5saW5lSXRlbSwgcnVuLmxvZ2ljYWxXaWR0
aCk7CiAgICAgfQogfQogCi1zaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5lKExpbmUmIGxp
bmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCitzaXplX3QgTGluZUJ1aWxk
ZXI6OnJlYnVpbGRMaW5lKGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCiB7CiAg
ICAgLy8gQ2xlYXIgdGhlIGxpbmUgYW5kIHN0YXJ0IGFwcGVuZGluZyB0aGUgaW5saW5lIGl0ZW1z
IGNsb3Npbmcgd2l0aCB0aGUgbGFzdCB3cmFwIG9wcG9ydHVuaXR5IHJ1bi4KLSAgICBsaW5lLmNs
ZWFyQ29udGVudCgpOworICAgIG1fbGluZS5jbGVhckNvbnRlbnQoKTsKICAgICBhdXRvIGN1cnJl
bnRJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydDsKICAgICBhdXRvIGxvZ2ljYWxSaWdodCA9
IElubGluZUxheW91dFVuaXQgeyB9OwogICAgIGlmIChtX3BhcnRpYWxMZWFkaW5nVGV4dEl0ZW0p
IHsKICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBpbmxpbmVJdGVtV2lkdGgoKm1fcGFydGlh
bExlYWRpbmdUZXh0SXRlbSwgbG9naWNhbFJpZ2h0KTsKLSAgICAgICAgbGluZS5hcHBlbmQoKm1f
cGFydGlhbExlYWRpbmdUZXh0SXRlbSwgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgbV9saW5lLmFw
cGVuZCgqbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtLCBsb2dpY2FsV2lkdGgpOwogICAgICAgICBs
b2dpY2FsUmlnaHQgKz0gbG9naWNhbFdpZHRoOwogICAgICAgICBpZiAoJm1fcGFydGlhbExlYWRp
bmdUZXh0SXRlbS52YWx1ZSgpID09IG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0pCiAgICAgICAg
ICAgICByZXR1cm4gMTsKQEAgLTUxOCw3ICs2MjksNyBAQCBzaXplX3QgTGluZUJ1aWxkZXI6OnJl
YnVpbGRMaW5lKExpbmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2Up
CiAgICAgZm9yICg7IGN1cnJlbnRJdGVtSW5kZXggPCBsYXlvdXRSYW5nZS5lbmQ7ICsrY3VycmVu
dEl0ZW1JbmRleCkgewogICAgICAgICBhdXRvJiBpbmxpbmVJdGVtID0gbV9pbmxpbmVJdGVtc1tj
dXJyZW50SXRlbUluZGV4XTsKICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBpbmxpbmVJdGVt
V2lkdGgoaW5saW5lSXRlbSwgbG9naWNhbFJpZ2h0KTsKLSAgICAgICAgbGluZS5hcHBlbmQoaW5s
aW5lSXRlbSwgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgbV9saW5lLmFwcGVuZChpbmxpbmVJdGVt
LCBsb2dpY2FsV2lkdGgpOwogICAgICAgICBsb2dpY2FsUmlnaHQgKz0gbG9naWNhbFdpZHRoOwog
ICAgICAgICBpZiAoJmlubGluZUl0ZW0gPT0gbV9sYXN0V3JhcE9wcG9ydHVuaXR5SXRlbSkKICAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50SXRlbUluZGV4IC0gbGF5b3V0UmFuZ2Uuc3RhcnQgKyAx
OwpAQCAtNTI2LDYgKzYzNywyNyBAQCBzaXplX3QgTGluZUJ1aWxkZXI6OnJlYnVpbGRMaW5lKExp
bmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UpCiAgICAgcmV0dXJu
IGxheW91dFJhbmdlLnNpemUoKTsKIH0KIAorYm9vbCBMaW5lQnVpbGRlcjo6aXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGluZVJhbmdlLCBzaXplX3Qg
bGFzdElubGluZUl0ZW1JbmRleCwgYm9vbCBoYXNQYXJ0aWFsVHJhaWxpbmdDb250ZW50KSBjb25z
dAoreworICAgIGlmIChoYXNQYXJ0aWFsVHJhaWxpbmdDb250ZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGxpbmVSYW5nZS5lbmQgPT0gbGFzdElubGluZUl0ZW1JbmRleCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gT21pdCBmbG9hdHMgdG8gc2VlIGlmIHRoaXMgaXMg
dGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBjb250ZW50LgorICAgIGZvciAoYXV0byBpID0gbGFz
dElubGluZUl0ZW1JbmRleDsgaS0tOykgeworICAgICAgICBpZiAoIW1faW5saW5lSXRlbXNbaV0u
aXNGbG9hdCgpKQorICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZVJhbmdlLmVuZCAtIDE7Cisg
ICAgfQorICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZsb2F0IGl0ZW0u
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitjb25z
dCBMYXlvdXRTdGF0ZSYgTGluZUJ1aWxkZXI6OmxheW91dFN0YXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOworfQorCiB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5oCmluZGV4IDg4ODA3OTIxY2IxYTVhMjc2ZmMzYzY4MTc1Y2EwZTIzZTM4
NmE4ZWIuLmQwODlmYmY0MzBmYzE0ZWJlMTlkN2UxOGNkNWZkNzU3M2I5ZGI5Y2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuaApAQCAtMjgsMTYgKzI4LDE4IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJJbmxpbmVMaW5lLmgiCisjaW5jbHVkZSAiSW5s
aW5lTGluZUJveC5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCcmVha2VyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitjbGFzcyBGbG9hdGluZ0NvbnRleHQ7
CiBzdHJ1Y3QgTGluZUNhbmRpZGF0ZTsKIAogY2xhc3MgTGluZUJ1aWxkZXIgewogcHVibGljOgot
ICAgIExpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3QgQ29u
dGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0IElubGluZUl0ZW1zJik7Cisg
ICAgTGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBGbG9h
dGluZ0NvbnRleHQmLCBjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwg
Y29uc3QgSW5saW5lSXRlbXMmKTsKIAogICAgIHN0cnVjdCBJbmxpbmVJdGVtUmFuZ2UgewogICAg
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzdGFydCA9PSBlbmQ7IH0KQEAgLTU3
LDEzICs1OSwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBpdGVt
IHsgbnVsbHB0ciB9OwogICAgICAgICB9OwogICAgICAgICB1c2luZyBGbG9hdExpc3QgPSBWZWN0
b3I8RmxvYXQ+OwotICAgICAgICBGbG9hdExpc3QgZmxvYXRzOworICAgICAgICBjb25zdCBGbG9h
dExpc3QmIGZsb2F0czsKKyAgICAgICAgYm9vbCBoYXNJbnRydXNpdmVGbG9hdCB7IGZhbHNlIH07
CisgICAgICAgIElubGluZUxheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0OworICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGg7CisgICAgICAgIGNvbnN0IExpbmVCb3ggbGlu
ZUJveDsKICAgICAgICAgY29uc3QgTGluZTo6UnVuTGlzdCYgcnVuczsKICAgICB9OwotICAgIExp
bmVDb250ZW50IGxheW91dElubGluZUNvbnRlbnQoTGluZSYsIGNvbnN0IElubGluZUl0ZW1SYW5n
ZSYsIE9wdGlvbmFsPHVuc2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpOworICAg
IExpbmVDb250ZW50IGxheW91dElubGluZUNvbnRlbnQoY29uc3QgSW5saW5lSXRlbVJhbmdlJiwg
T3B0aW9uYWw8dW5zaWduZWQ+IHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgY29uc3QgRm9y
bWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgaW5pdGlhbExpbmVD
b25zdHJhaW50cywgYm9vbCBpc0ZpcnN0TGluZSk7CisKKyAgICBzdHJ1Y3QgSW50cmluc2ljQ29u
dGVudCB7CisgICAgICAgIElubGluZUl0ZW1SYW5nZSBpbmxpbmVJdGVtUmFuZ2U7CisgICAgICAg
IElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoIHsgMCB9OworICAgIH07CisgICAgSW50cmlu
c2ljQ29udGVudCBjb21wdXRlZEludHJpbnNpY1dpZHRoKGNvbnN0IElubGluZUl0ZW1SYW5nZSYs
IElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwogCiBwcml2YXRlOgotICAgIHZvaWQg
bmV4dENvbnRlbnRGb3JMaW5lKExpbmVDYW5kaWRhdGUmLCB1bnNpZ25lZCBpbmxpbmVJdGVtSW5k
ZXgsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIE9wdGlvbmFsPHVuc2lnbmVk
PiBvdmVyZmxvd0xlbmd0aCwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVMaW5lV2lkdGgsIElu
bGluZUxheW91dFVuaXQgY3VycmVudExvZ2ljYWxSaWdodCk7CisgICAgdm9pZCBuZXh0Q29udGVu
dEZvckxpbmUoTGluZUNhbmRpZGF0ZSYsIHVuc2lnbmVkIGlubGluZUl0ZW1JbmRleCwgY29uc3Qg
SW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdlLCBPcHRpb25hbDx1bnNpZ25lZD4gb3Zl
cmZsb3dMZW5ndGgsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlTGluZVdpZHRoLCBJbmxpbmVM
YXlvdXRVbml0IGN1cnJlbnRMb2dpY2FsUmlnaHQpOwogICAgIHN0cnVjdCBSZXN1bHQgewogICAg
ICAgICBMaW5lQnJlYWtlcjo6SXNFbmRPZkxpbmUgaXNFbmRPZkxpbmUgeyBMaW5lQnJlYWtlcjo6
SXNFbmRPZkxpbmU6Ok5vIH07CiAgICAgICAgIHN0cnVjdCBDb21taXR0ZWRDb250ZW50Q291bnQg
ewpAQCAtNzQsMTkgKzg2LDM1IEBAIHByaXZhdGU6CiAgICAgICAgIE9wdGlvbmFsIDxMaW5lQ29u
dGVudDo6UGFydGlhbENvbnRlbnQ+IHBhcnRpYWxDb250ZW50IHsgfTsKICAgICB9OwogICAgIGVu
dW0gY2xhc3MgQ29tbWl0SW50cnVzaXZlRmxvYXRzT25seSB7IE5vLCBZZXMgfTsKLSAgICB2b2lk
IGNvbW1pdEZsb2F0cyhMaW5lJiwgY29uc3QgTGluZUNhbmRpZGF0ZSYsIENvbW1pdEludHJ1c2l2
ZUZsb2F0c09ubHkgPSBDb21taXRJbnRydXNpdmVGbG9hdHNPbmx5OjpObyk7Ci0gICAgUmVzdWx0
IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGluZUJyZWFrZXImLCBMaW5lJiwgY29uc3Qg
SW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYpOwotICAg
IHNpemVfdCByZWJ1aWxkTGluZShMaW5lJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRS
YW5nZSk7Ci0gICAgdm9pZCBjb21taXRQYXJ0aWFsQ29udGVudChMaW5lJiwgY29uc3QgTGluZUJy
ZWFrZXI6OlJ1bkxpc3QmLCBjb25zdCBMaW5lQnJlYWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxp
bmdDb250ZW50Jik7Ci0gICAgTGluZUNvbnRlbnQgY2xvc2UoY29uc3QgTGluZSYsIGNvbnN0IElu
bGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1D
b3VudCwgT3B0aW9uYWw8TGluZUNvbnRlbnQ6OlBhcnRpYWxDb250ZW50Pik7CisgICAgc3RydWN0
IFVzZWRDb25zdHJhaW50cyB7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQg
eyAwIH07CisgICAgICAgIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoIHsg
MCB9OworICAgICAgICBib29sIGlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsKKyAgICB9
OworICAgIFVzZWRDb25zdHJhaW50cyBjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgRm9ybWF0dGlu
Z0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgaW5pdGlhbExpbmVDb25zdHJh
aW50cywgYm9vbCBpc0ZpcnN0TGluZSk7CisgICAgdm9pZCBjb21taXRGbG9hdHMoY29uc3QgTGlu
ZUNhbmRpZGF0ZSYsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHkgPSBDb21taXRJbnRydXNpdmVG
bG9hdHNPbmx5OjpObyk7CisgICAgUmVzdWx0IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQo
TGluZUJyZWFrZXImLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIG5lZWRzTGF5b3V0UmFuZ2UsIGNv
bnN0IExpbmVDYW5kaWRhdGUmKTsKKyAgICBzaXplX3QgcmVidWlsZExpbmUoY29uc3QgSW5saW5l
SXRlbVJhbmdlJiBuZWVkc0xheW91dFJhbmdlKTsKKyAgICB2b2lkIGNvbW1pdFBhcnRpYWxDb250
ZW50KGNvbnN0IExpbmVCcmVha2VyOjpSdW5MaXN0JiwgY29uc3QgTGluZUJyZWFrZXI6OlJlc3Vs
dDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYpOworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBV
c2VkQ29uc3RyYWludHMmKTsKKyAgICBzdHJ1Y3QgQ29tbWl0dGVkQ29udGVudCB7CisgICAgICAg
IHNpemVfdCBpbmxpbmVJdGVtQ291bnQgeyAwIH07CisgICAgICAgIE9wdGlvbmFsIDxMaW5lQ29u
dGVudDo6UGFydGlhbENvbnRlbnQ+IHBhcnRpYWxUcmFpbGluZ0NvbnRlbnQ7CisgICAgfTsKKyAg
ICBDb21taXR0ZWRDb250ZW50IHBsYWNlSW5saW5lQ29udGVudChjb25zdCBJbmxpbmVJdGVtUmFu
Z2UmLCBPcHRpb25hbDx1bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAg
ICBJbmxpbmVJdGVtUmFuZ2UgY2xvc2UoY29uc3QgSW5saW5lSXRlbVJhbmdlJiBuZWVkc0xheW91
dFJhbmdlLCBjb25zdCBDb21taXR0ZWRDb250ZW50Jik7CiAKICAgICBJbmxpbmVMYXlvdXRVbml0
IGlubGluZUl0ZW1XaWR0aChjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbExlZnQpIGNvbnN0OworICAgIGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGluZVJhbmdlLCBzaXplX3QgbGFzdElubGluZUl0
ZW1JbmRleCwgYm9vbCBoYXNQYXJ0aWFsVHJhaWxpbmdDb250ZW50KSBjb25zdDsKIAogICAgIGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KICAgICBjb25zdCBDb250YWluZXJC
b3gmIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdDsgfQorICAg
IGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0OwogCiAgICAgY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgY29u
c3QgRmxvYXRpbmdDb250ZXh0JiBtX2Zsb2F0aW5nQ29udGV4dDsKICAgICBjb25zdCBDb250YWlu
ZXJCb3gmIG1fZm9ybWF0dGluZ0NvbnRleHRSb290OworICAgIExpbmUgbV9saW5lOwogICAgIGNv
bnN0IElubGluZUl0ZW1zJiBtX2lubGluZUl0ZW1zOwogICAgIExpbmVDb250ZW50OjpGbG9hdExp
c3QgbV9mbG9hdHM7CiAgICAgT3B0aW9uYWw8SW5saW5lVGV4dEl0ZW0+IG1fcGFydGlhbExlYWRp
bmdUZXh0SXRlbTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408124</attachid>
            <date>2020-09-06 10:13:27 -0700</date>
            <delta_ts>2020-09-06 11:22:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216221-20200906101327.patch</filename>
            <type>text/plain</type>
            <size>34647</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWQ5MjBhODAyOWI5Njlk
MDZiZWFkYTJmZjg3MmZlMjU2NjMwY2Y1YS4uMjk1ZjhhOTk3OGI2YzcyNGJkNmM3NzIwNDdlMmU4
YmUwNGE5YjdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIwLTA5LTA2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQm94
IHNob3VsZCBjb250YWluIGFsbCBpbmxpbmUgYm94ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjIyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2ggd2UgZGVjb3VwbGUgdGhlIGxp
bmUgYm94IGFuZCB0aGUgbGluZS4KKyAgICAgICAgTGluZUJveDoKKyAgICAgICAgLSBmdWxseSBj
b250YWlucyBhbGwgdGhlIGlubGluZSBib3hlcywgYm90aCBob3Jpem9udGFsbHkgYW5kIHZlcnRp
Y2FsbHkuCisgICAgICAgIC0gaGFzIG9ubHkgd2lkdGggYW5kIGhlaWdodCBnZW9tZXRyeQorICAg
ICAgICAtIGhlaWdodCBpcyBub3QgY29uc3RyYWluZWQgYnkgdGhlIGxpbmUtaGVpZ2h0IHByb3Bl
cnR5CisgICAgICAgIC0gZG9lcyBub3QgaGF2ZSB0aGUgY29uY2VwdCBvZiBvdmVyZmxvdy4KKwor
ICAgICAgICBMaW5lOgorICAgICAgICAtIGNvbnRhaW5zIHRoZSBMaW5lQm94LCBidXQgdGhlIExp
bmVCb3ggY2FuIG92ZXJmbG93IHRoZSBsaW5lLCBib3RoIGhvcml6b250YWxseSBhbmQgdmVydGlj
YWxseS4KKyAgICAgICAgLSBoYXMgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHJvb3QgYmxvY2sg
Y29udGFpbmVyLgorCisgICAgICAgIFNpbXBsZSBjYXNlLgorICAgICAgICA8ZGl2PmZvbnQgd2Vu
dCBjcmF6eSB3aXRoIGxpbmUgc3BhY2luZzwvZGl2PgorICAgICAgICAgIF9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18gIGxpbmUKKyAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICB8IGxpbmUgc3BhY2luZyAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLSAgTGluZUJveAorICAgICAg
ICB8fCAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
fAorICAgICAgICB8fCAgICB8IGxpbmUgYm94IGhlaWdodCAgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgfAorICAgICAgICB8fC0tLS12LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS18LS0tLS0tLS0gfCBhbGlnbm1lbnQgYmFzZWxpbmUKKyAgICAgICAgfCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLQorICAgICAgICB8
ICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICB8ICAgXgorICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICB8IGxpbmUgc3BhY2luZyAgICAgICAgICB8ICAgfAorICAg
ICAgICB8X19fX19fX19fX19fX19fX19fX192X19fX19fX19fX19fX19fX19fX19fX198ICBzY3Jv
bGxhYmxlIG92ZXJmbG93CisKKworICAgICAgICAgV2hlbiBnbHlwaHMgaW4gc3Vic2VxdWVudCBs
aW5lcyBvdmVyZmxvdzoKKyAgICAgICAgIDxkaXYgc3R5bGU9ImxpbmUtaGVpZ2h0OiA1cHg7IGZv
bnQtc2l6ZTogMjBweDsiPmxpbmUgYm94IG92ZXJmbG93cyB0aGUgbGluZTwvZGl2PgorICAgICAg
ICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgTGluZUJv
eAorICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAg
IHwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxpbmUgYm94IGhlaWdo
dCB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0t
LS0tLXwtICBMaW5lCisgICAgICAgIHwgfCAgICAgXiAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgfCB8CisgICAgICAgIHwgfCAgICAgfCBsaW5lIGhlaWdodCAgICAgICAgfCAg
ICAgICAgICAgICAgICAgfCB8CisgICAgICAgICAtfC0tLS0tdi0tLS0tLS0tLS0tLS0tLS0tLS0t
fC0tLS0tLS0tLS0tLS0tLS0tfC0KKyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tfC0tLS0tLS0tLS0tLS0tLS0tfCBhbGlnbm1lbnQgYmFzZWxpbmUKKyAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgfF9f
X19fX19fX19fX19fX19fX19fX19fX19fdl9fX19fX19fX19fX19fX19ffAorCisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRlRGlz
cGxheUJveGVzRm9yTGluZUNvbnRlbnQpOgorCiAyMDIwLTA5LTA2ICBaYWxhbiBCdWp0YXMgIDx6
YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIExpbmUgaGFuZGluZyB0
byBMaW5lQnVpbGRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0
cmVlL0Rpc3BsYXlJbmxpbmVSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRy
ZWUvRGlzcGxheUlubGluZVJlY3QuaAppbmRleCA1MjNlOGUwMTM1OGUyMjNiOTA0MzU2MzZlYTM0
MjdlNzQ4MWJkMWMzLi40OWQ2Mjc3NGEzN2JhZTU4YWViY2VmY2M1YTU5Yzk0ZGRmN2QxMTIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGlu
ZVJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlu
bGluZVJlY3QuaApAQCAtMzcsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgSW5saW5lUmVjdCgpID0g
ZGVmYXVsdDsKICAgICBJbmxpbmVSZWN0KElubGluZUxheW91dFVuaXQgdG9wLCBJbmxpbmVMYXlv
dXRVbml0IGxlZnQsIElubGluZUxheW91dFVuaXQgd2lkdGgsIElubGluZUxheW91dFVuaXQgaGVp
Z2h0KTsKICAgICBJbmxpbmVSZWN0KGNvbnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJ
bmxpbmVMYXlvdXRVbml0IHdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGhlaWdodCk7CisgICAgSW5s
aW5lUmVjdChjb25zdCBJbmxpbmVMYXlvdXRQb2ludCYgdG9wTGVmdCwgY29uc3QgSW5saW5lTGF5
b3V0U2l6ZSYpOwogICAgIAogICAgIElubGluZUxheW91dFVuaXQgdG9wKCkgY29uc3Q7CiAgICAg
SW5saW5lTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7CkBAIC0xMDgsNiArMTA5LDExIEBAIGlubGlu
ZSBJbmxpbmVSZWN0OjpJbmxpbmVSZWN0KGNvbnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0
LCBJbmxpbmVMYXlvdXRVbml0CiB7CiB9CiAKK2lubGluZSBJbmxpbmVSZWN0OjpJbmxpbmVSZWN0
KGNvbnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBjb25zdCBJbmxpbmVMYXlvdXRTaXpl
JiBzaXplKQorICAgIDogSW5saW5lUmVjdCh0b3BMZWZ0LnkoKSwgdG9wTGVmdC54KCksIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkKK3sKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiBpbmxp
bmUgdm9pZCBJbmxpbmVSZWN0OjppbnZhbGlkYXRlUG9zaXRpb24oKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVJlY3QuaAppbmRleCA5M2FhZjYyOGYy
ZTRiOGZkZjJiNzU1MmU4OTUyNzE2MGQyYWZlZWM0Li5kZTc4Nzk0ODg0NmYwN2FkODljNTgwZDZk
MjQ0YzM4MzBmMWIwMWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxh
eXRyZWUvRGlzcGxheVJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRy
ZWUvRGlzcGxheVJlY3QuaApAQCAtMzgsNiArMzgsNyBAQCBwdWJsaWM6CiAgICAgUmVjdCgpID0g
ZGVmYXVsdDsKICAgICBSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxlZnQsIExheW91
dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KTsKICAgICBSZWN0KExheW91dFBvaW50IHRv
cExlZnQsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KTsKKyAgICBSZWN0KGNv
bnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBjb25zdCBMYXlvdXRTaXplJik7CiAgICAgCiAgICAg
TGF5b3V0VW5pdCB0b3AoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGxlZnQoKSBjb25zdDsKQEAg
LTExMyw2ICsxMTQsMTEgQEAgaW5saW5lIFJlY3Q6OlJlY3QoTGF5b3V0UG9pbnQgdG9wTGVmdCwg
TGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCiB7CiB9CiAKK2lubGluZSBSZWN0
OjpSZWN0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBjb25zdCBMYXlvdXRTaXplJiBzaXpl
KQorICAgIDogUmVjdCh0b3BMZWZ0LnkoKSwgdG9wTGVmdC54KCksIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkKK3sKK30KKwogI2lmIEFTU0VSVF9FTkFCTEVECiBpbmxpbmUgdm9pZCBSZWN0
OjppbnZhbGlkYXRlUG9zaXRpb24oKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCmluZGV4IDZlMDQyNDVjMTI5YTAyYjMyMmE4ZWJlNTI4OTBlOGYyODE5YmIyYjMuLjUyODQ3
NzVmNGIwYmQyOTBhNTc1NzcxOGY3YzAxZWU5ODc1MTIyZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKQEAgLTE1MCwxMiArMTUwLDEzIEBAIHZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lQnVp
bGRlcjo6CiAgICAgICAgIGF1dG8gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoID0gcHJldmlv
dXNMaW5lID8gcHJldmlvdXNMaW5lLT5vdmVyZmxvd0NvbnRlbnRMZW5ndGggOiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIGF1dG8gaW5pdGlhbExpbmVDb25zdHJhaW50cyA9IENvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudCB7IGNvbnN0cmFpbnRzLmhvcml6b250YWwsIHsgbGluZUxvZ2ljYWxUb3As
IG1ha2VPcHRpb25hbCh0b0xheW91dFVuaXQocXVpcmtzKCkuaW5pdGlhbExpbmVIZWlnaHQoKSkp
IH0gfTsKICAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElubGlu
ZUNvbnRlbnQobmVlZHNMYXlvdXRSYW5nZSwgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoLCBp
bml0aWFsTGluZUNvbnN0cmFpbnRzLCBpc0ZpcnN0TGluZSk7Ci0gICAgICAgIHNldERpc3BsYXlC
b3hlc0ZvckxpbmUobGluZUNvbnRlbnQsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOworICAgICAg
ICBhdXRvIGxpbmVMb2dpY2FsUmVjdCA9IGNyZWF0ZURpc3BsYXlCb3hlc0ZvckxpbmVDb250ZW50
KGxpbmVDb250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKKwogICAgICAgICBhdXRvIGxp
bmVDb250ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtUmFuZ2U7CiAgICAgICAgIGlm
ICghbGluZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChuZWVk
c0xheW91dFJhbmdlLnN0YXJ0IDwgbGluZUNvbnRlbnRSYW5nZS5lbmQpOwogICAgICAgICAgICAg
aXNGaXJzdExpbmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGxpbmVMb2dpY2FsVG9wID0gbGluZUNv
bnRlbnQubGluZUJveC5sb2dpY2FsQm90dG9tKCk7CisgICAgICAgICAgICBsaW5lTG9naWNhbFRv
cCA9IGxpbmVMb2dpY2FsUmVjdC5ib3R0b20oKTsKICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHRy
YWlsaW5nIGNvbnRlbnQgaXMgcGFydGlhbCwgd2UgbmVlZCB0byByZXVzZSB0aGUgbGFzdCBJbmxp
bmVUZXh0SXRlbS4KICAgICAgICAgICAgIGF1dG8gbGFzdElubGluZUl0ZW1OZWVkc1BhcnRpYWxM
YXlvdXQgPSBsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudC5oYXNWYWx1ZSgpOwogICAgICAgICAg
ICAgaWYgKGxhc3RJbmxpbmVJdGVtTmVlZHNQYXJ0aWFsTGF5b3V0KSB7CkBAIC0xNzgsNyArMTc5
LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVt
cyYgaW5saW5lSXRlbXMsIExpbmVCdWlsZGVyOjoKICAgICAgICAgQVNTRVJUKGxpbmVDb250ZW50
LnJ1bnMuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKGxpbmVDb250ZW50Lmhhc0ludHJ1c2l2
ZUZsb2F0KTsKICAgICAgICAgLy8gTW92ZSB0aGUgbmV4dCBsaW5lIGJlbG93IHRoZSBpbnRydXNp
dmUgZmxvYXQuCi0gICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0aW5nQ29udGV4
dC5jb25zdHJhaW50cyhsaW5lTG9naWNhbFRvcCwgdG9MYXlvdXRVbml0KGxpbmVDb250ZW50Lmxp
bmVCb3gubG9naWNhbEJvdHRvbSgpKSk7CisgICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9
IGZsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyhsaW5lTG9naWNhbFRvcCwgdG9MYXlvdXRVbml0
KGxpbmVMb2dpY2FsUmVjdC5ib3R0b20oKSkpOwogICAgICAgICBBU1NFUlQoZmxvYXRDb25zdHJh
aW50cy5sZWZ0IHx8IGZsb2F0Q29uc3RyYWludHMucmlnaHQpOwogICAgICAgICBzdGF0aWMgYXV0
byBpbmlmaXRlUG9pbnQgPSBQb2ludEluQ29udGV4dFJvb3Q6Om1heCgpOwogICAgICAgICAvLyBJ
biBjYXNlIG9mIGxlZnQgYW5kIHJpZ2h0IGNvbnN0cmFpbnRzLCB3ZSBuZWVkIHRvIHBpY2sgdGhl
IG9uZSB0aGF0J3MgY2xvc2VyIHRvIHRoZSBjdXJyZW50IGxpbmUuCkBAIC0zOTAsMTAgKzM5MSw1
NCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29udGVudElm
TmVlZGVkKCkKICAgICB9CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERp
c3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29u
dGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMp
CitJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZVJlY3RBbmRMaW5lQm94T2Zmc2V0IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZExpbmVMb2dpY2FsUmVjdChjb25zdCBMaW5lQnVp
bGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KSBjb25zdAoreworICAgIC8vIENvbXB1dGUg
dGhlIGxpbmUgaGVpZ2h0IGFuZCB0aGUgbGluZSBib3ggdmVydGljYWwgb2Zmc2V0LgorICAgIC8v
IFRoZSBsaW5lIGhlaWdodCBpcyBlaXRoZXIgdGhlIGxpbmUtaGVpZ2h0IHZhbHVlIChuZWdhdGl2
ZSB2YWx1ZSBtZWFucyBsaW5lIGhlaWdodCBpcyBub3Qgc2V0KSBvciB0aGUgZm9udCBtZXRyaWNz
J3MgbGluZSBzcGFjaW5nL2xpbmUgYm94IGhlaWdodC4KKyAgICAvLyBUaGUgbGluZSBib3ggaXMg
dGhlbiBwb3NpdGlvbmVkIHVzaW5nIHRoZSBoYWxmIGxlYWRpbmcgY2VudGVyaW5nLgorICAgIC8v
ICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgbGluZQorICAg
IC8vIHwgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAv
LyB8ICAgICAgICAgICAgICAgICAgICB8IGxpbmUgc3BhY2luZyAgICAgICAgICB8CisgICAgLy8g
fCAgICAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vIHwg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0gIExp
bmVCb3gKKyAgICAvLyB8fCAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgfAorICAgIC8vIHx8ICAgIHwgbGluZSBib3ggaGVpZ2h0ICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgICAgICB8CisgICAgLy8gfHwtLS0tdi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tIHwgYWxpZ25tZW50IGJhc2VsaW5lCisgICAgLy8g
fCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLQor
ICAgIC8vIHwgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgIHwgICBe
CisgICAgLy8gfCAgICAgICAgICAgICAgICAgICAgfCBsaW5lIHNwYWNpbmcgICAgICAgICAgfCAg
IHwKKyAgICAvLyB8X19fX19fX19fX19fX19fX19fX192X19fX19fX19fX19fX19fX19fX19fX198
ICBzY3JvbGxhYmxlIG92ZXJmbG93CisgICAgLy8KKyAgICBpZiAobGluZUNvbnRlbnQucnVucy5p
c0VtcHR5KCkgfHwgbGluZUNvbnRlbnQubGluZUJveC5pc0xpbmVWaXN1YWxseUVtcHR5KCkpCisg
ICAgICAgIHJldHVybiB7IHsgfSwgeyBsaW5lQ29udGVudC5sb2dpY2FsVG9wTGVmdCwgbGluZUNv
bnRlbnQubGluZUxvZ2ljYWxXaWR0aCwgeyB9IH0gfTsKKyAgICBhdXRvJiByb290U3R5bGUgPSBy
b290KCkuc3R5bGUoKTsKKyAgICBhdXRvJiBmb250TWV0cmljcyA9IHJvb3RTdHlsZS5mb250TWV0
cmljcygpOworICAgIElubGluZUxheW91dFVuaXQgbGluZVNwYWNpbmcgPSBmb250TWV0cmljcy5s
aW5lU3BhY2luZygpOworICAgIGF1dG8mIGxpbmVCb3ggPSBsaW5lQ29udGVudC5saW5lQm94Owor
ICAgIGF1dG8gbGluZUxvZ2ljYWxIZWlnaHQgPSByb290U3R5bGUubGluZUhlaWdodCgpLmlzTmVn
YXRpdmUoKSA/IHN0ZDo6bWF4KGxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBsaW5lU3BhY2luZykg
OiByb290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisgICAgYXV0byBsb2dpY2FsUmVjdCA9
IERpc3BsYXk6OklubGluZVJlY3QgeyBsaW5lQ29udGVudC5sb2dpY2FsVG9wTGVmdCwgbGluZUNv
bnRlbnQubGluZUxvZ2ljYWxXaWR0aCwgbGluZUxvZ2ljYWxIZWlnaHR9OworCisgICAgYXV0byBo
YWxmTGVhZGluZ09mZnNldCA9IFsmXSB7CisgICAgICAgIElubGluZUxheW91dFVuaXQgYXNjZW50
ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7CisgICAgICAgIElubGluZUxheW91dFVuaXQgZGVzY2Vu
dCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQoKTsKKyAgICAgICAgLy8gMTAuOC4xIExlYWRpbmcgYW5k
IGhhbGYtbGVhZGluZworICAgICAgICBhdXRvIGhhbGZMZWFkaW5nID0gKGxpbmVMb2dpY2FsSGVp
Z2h0IC0gKGFzY2VudCArIGRlc2NlbnQpKSAvIDI7CisgICAgICAgIC8vIElubGluZSB0cmVlIGhl
aWdodCBpcyBhbGwgaW50ZWdlciBiYXNlZC4KKyAgICAgICAgcmV0dXJuIGZsb29yZihhc2NlbnQg
KyBoYWxmTGVhZGluZyk7CisgICAgfSgpOworICAgIGF1dG8gbGluZUJveE9mZnNldCA9IGxvZ2lj
YWxSZWN0LmhlaWdodCgpID09IGxpbmVCb3gubG9naWNhbEhlaWdodCgpID8gSW5saW5lTGF5b3V0
VW5pdCgpIDogaGFsZkxlYWRpbmdPZmZzZXQgLSBsaW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCk7
CisgICAgcmV0dXJuIHsgbGluZUJveE9mZnNldCwgbG9naWNhbFJlY3QgfTsKK30KKworRGlzcGxh
eTo6SW5saW5lUmVjdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRlRGlzcGxheUJveGVz
Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVu
dCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCiB7
CiAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7CiAg
ICAgYXV0byYgbGluZUJveCA9IGxpbmVDb250ZW50LmxpbmVCb3g7CisgICAgYXV0byBsaW5lUmVj
dEFuZExpbmVCb3hPZmZzZXQgPSBjb21wdXRlZExpbmVMb2dpY2FsUmVjdChsaW5lQ29udGVudCk7
CisgICAgYXV0byBsaW5lTG9naWNhbFJlY3QgPSBsaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQubG9n
aWNhbFJlY3Q7CisgICAgYXV0byBsaW5lQm94VmVydGljYWxPZmZzZXQgPSBsaW5lUmVjdEFuZExp
bmVCb3hPZmZzZXQubGluZUJveFZlcnRpY2FsT2Zmc2V0OworICAgIGF1dG8gc2Nyb2xsYWJsZU92
ZXJmbG93ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IGxpbmVMb2dpY2FsUmVjdC50b3BMZWZ0KCks
IHN0ZDo6bWF4KGxpbmVMb2dpY2FsUmVjdC53aWR0aCgpLCBsaW5lQm94LmxvZ2ljYWxXaWR0aCgp
KSwgc3RkOjptYXgobGluZUxvZ2ljYWxSZWN0LmhlaWdodCgpLCBsaW5lQm94VmVydGljYWxPZmZz
ZXQgKyBsaW5lQm94LmxvZ2ljYWxIZWlnaHQoKSkgfTsKKwogICAgIGlmICghbGluZUNvbnRlbnQu
ZmxvYXRzLmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0
aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZS5mbG9hdGluZ1N0YXRl
KCkgfTsKICAgICAgICAgLy8gTW92ZSBmbG9hdHMgdG8gdGhlaXIgZmluYWwgcG9zaXRpb24uCkBA
IC00MDEsOCArNDQ2LDggQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxh
eUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnQKICAgICAgICAgICAgIGF1
dG8mIGZsb2F0Qm94ID0gZmxvYXRDYW5kaWRhdGUuaXRlbS0+bGF5b3V0Qm94KCk7CiAgICAgICAg
ICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3goZmxvYXRC
b3gpOwogICAgICAgICAgICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJzdC4KLSAgICAgICAg
ICAgIGF1dG8gdmVydGljYWxTdGF0aWNQb3NpdGlvbiA9IGZsb2F0Q2FuZGlkYXRlLmlzSW50cnVz
aXZlID8gbGluZUJveC5sb2dpY2FsVG9wKCkgOiBsaW5lQm94LmxvZ2ljYWxCb3R0b20oKTsKLSAg
ICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmVCb3gubG9naWNhbExlZnQoKSwg
dmVydGljYWxTdGF0aWNQb3NpdGlvbiB9KTsKKyAgICAgICAgICAgIGF1dG8gdmVydGljYWxTdGF0
aWNQb3NpdGlvbiA9IGZsb2F0Q2FuZGlkYXRlLmlzSW50cnVzaXZlID8gbGluZUxvZ2ljYWxSZWN0
LnRvcCgpIDogbGluZUxvZ2ljYWxSZWN0LmJvdHRvbSgpOworICAgICAgICAgICAgZGlzcGxheUJv
eC5zZXRUb3BMZWZ0KHsgbGluZUxvZ2ljYWxSZWN0LmxlZnQoKSwgdmVydGljYWxTdGF0aWNQb3Np
dGlvbiB9KTsKICAgICAgICAgICAgIC8vIEZsb2F0IGl0LgogICAgICAgICAgICAgZGlzcGxheUJv
eC5zZXRUb3BMZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGZsb2F0Qm94LCBo
b3Jpem9udGFsQ29uc3RyYWludHMpKTsKICAgICAgICAgICAgIGZsb2F0aW5nQ29udGV4dC5hcHBl
bmQoZmxvYXRCb3gpOwpAQCAtNDE3LDcgKzQ2Miw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250
CiAgICAgICAgIGluaXRpYWxDb250YWluZ0Jsb2NrU2l6ZSA9IGdlb21ldHJ5Rm9yQm94KHJvb3Qo
KS5pbml0aWFsQ29udGFpbmluZ0Jsb2NrKCksIEVzY2FwZVJlYXNvbjo6U3Ryb2tlT3ZlcmZsb3dO
ZWVkc1ZpZXdwb3J0R2VvbWV0cnkpLmNvbnRlbnRCb3goKS5zaXplKCk7CiAgICAgYXV0byYgaW5s
aW5lQ29udGVudCA9IGZvcm1hdHRpbmdTdGF0ZS5lbnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCgp
OwogICAgIGF1dG8gbGluZUluZGV4ID0gaW5saW5lQ29udGVudC5saW5lQm94ZXMuc2l6ZSgpOwot
ICAgIGF1dG8gbGluZUlua092ZXJmbG93ID0gbGluZUJveC5zY3JvbGxhYmxlT3ZlcmZsb3coKTsK
KyAgICBhdXRvIGxpbmVJbmtPdmVyZmxvdyA9IHNjcm9sbGFibGVPdmVyZmxvdzsKICAgICAvLyBD
b21wdXRlIGZpbmFsIGJveCBnZW9tZXRyeS4KICAgICBmb3IgKGF1dG8mIGxpbmVSdW4gOiBsaW5l
Q29udGVudC5ydW5zKSB7CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4ubGF5b3V0
Qm94KCk7CkBAIC00NDMsNyArNDg4LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnQKICAgICAg
ICAgICAgIGF1dG8gbG9naWNhbFJlY3QgPSBsaW5lUnVuLmlzQm94KCkgPyBsaW5lQm94LmlubGlu
ZUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLmxvZ2ljYWxSZWN0KCkgOiBsaW5lQm94LmlubGlu
ZVJlY3RGb3JUZXh0UnVuKGxpbmVSdW4pOwogICAgICAgICAgICAgLy8gSW5saW5lIGJveGVzIGFy
ZSByZWxhdGl2ZSB0byB0aGUgbGluZSBib3ggd2hpbGUgZmluYWwgRGlzcGxheTo6UnVucyBuZWVk
IHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgRGlzcGxheTpCb3gKICAgICAgICAgICAgIC8v
IEZJWE1FOiBTaG91bGRuJ3Qgd2UganVzdCBsZWF2ZSB0aGVtIGJlIHJlbGF0aXZlIHRvIHRoZSBs
aW5lIGJveD8KLSAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmVCeSh7IGxpbmVCb3gubG9naWNh
bExlZnQoKSwgbGluZUJveC5sb2dpY2FsVG9wKCkgfSk7CisgICAgICAgICAgICBsb2dpY2FsUmVj
dC5tb3ZlQnkoeyBsaW5lTG9naWNhbFJlY3QubGVmdCgpLCBsaW5lTG9naWNhbFJlY3QudG9wKCkg
KyBsaW5lQm94VmVydGljYWxPZmZzZXQgfSk7CiAgICAgICAgICAgICBhdXRvIGlua092ZXJmbG93
ID0gY29tcHV0ZWRJbmtPdmVyZmxvdyhsb2dpY2FsUmVjdCk7CiAgICAgICAgICAgICBsaW5lSW5r
T3ZlcmZsb3cuZXhwYW5kVG9Db250YWluKGlua092ZXJmbG93KTsKICAgICAgICAgICAgIGlubGlu
ZUNvbnRlbnQucnVucy5hcHBlbmQoeyBsaW5lSW5kZXgsIGxheW91dEJveCwgbG9naWNhbFJlY3Qs
IGlua092ZXJmbG93LCBsaW5lUnVuLmV4cGFuc2lvbigpLCBsaW5lUnVuLnRleHRDb250ZW50KCkg
fSk7CkBAIC00NTYsNiArNTAxLDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0
RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnQKICAgICAgICAg
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUJveChsYXlvdXRC
b3gpOwogICAgICAgICAgICAgYXV0byYgaW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICAgICAgICAgIGF1dG8gdG9wTGVmdCA9IGlubGluZUJv
eC5sb2dpY2FsUmVjdCgpLnRvcExlZnQoKTsKKyAgICAgICAgICAgIHRvcExlZnQubW92ZSh7IH0s
IGxpbmVCb3hWZXJ0aWNhbE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5G
bG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIHRvcExlZnQgKz0gZ2VvbWV0cnkoKS5p
bkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3Ry
YWludHMpOwogICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHRvTGF5b3V0UG9pbnQo
dG9wTGVmdCkpOwpAQCAtNDY4LDE3ICs1MTQsMTcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnQK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyB3
aGVyZSB0aGUgbG9naWNhbCB0byBwaHlzaWNhbCB0cmFuc2xhdGUgc2hvdWxkIGhhcHBlbi4KICAg
ICBhdXRvIGNvbnN0cnVjdERpc3BsYXlMaW5lID0gWyZdIHsKLSAgICAgICAgLy8gRklYTUU6IExh
eW91dDo6TGluZUJveCBzaG91bGQgY29udGFpbiBhbGwgaW5saW5lIGJveGVzIGFuZCBpdCBzaG91
bGQgbm90IGhhdmUgbmVpdGhlciB0b3AvbGVmdCBnZW9tZXRyeSBub3Igb3ZlcmZsb3cuIAotICAg
ICAgICBhdXRvIGxpbmVSZWN0ID0gbGluZUJveC5sb2dpY2FsUmVjdCgpOworICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyB3aGVyZSB0aGUgbG9naWNhbCB0byBwaHlzaWNhbCB0cmFuc2xhdGUgc2hv
dWxkIGhhcHBlbi4KICAgICAgICAgaWYgKGF1dG8gaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCA9
IGxpbmVCb3guaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCgpKSB7CiAgICAgICAgICAgICAvLyBQ
YWludGluZyBjb2RlIChzcGVjaWZpY2FsbHkgVGV4dFJ1bidzIHhQb3MpIG5lZWRzIHRoZSBhbGln
bmVkIG9mZnNldCB0byBiZSBhYmxlIHRvIGNvbXB1dGUgdGFiIHBvc2l0aW9ucy4KLSAgICAgICAg
ICAgIGxpbmVSZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQp
OworICAgICAgICAgICAgbGluZUxvZ2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkoKmhvcml6b250
YWxBbGlnbm1lbnRPZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAgIGlubGluZUNvbnRlbnQubGlu
ZUJveGVzLmFwcGVuZCh7IGxpbmVSZWN0LCBsaW5lQm94LnNjcm9sbGFibGVPdmVyZmxvdygpLCBs
aW5lSW5rT3ZlcmZsb3csIGxpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSB9KTsKKyAgICAgICAg
Ly8gRklYTUU6IERpc3BsYXk6OkxpbmVCb3ggc2hvdWxkIHJlYWxseSBiZSBuYW1lZCBEaXNwbGF5
OjpMaW5lCisgICAgICAgIGlubGluZUNvbnRlbnQubGluZUJveGVzLmFwcGVuZCh7IGxpbmVMb2dp
Y2FsUmVjdCwgc2Nyb2xsYWJsZU92ZXJmbG93LCBsaW5lSW5rT3ZlcmZsb3csIGxpbmVCb3hWZXJ0
aWNhbE9mZnNldCArIGxpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSB9KTsKICAgICB9OwogICAg
IGNvbnN0cnVjdERpc3BsYXlMaW5lKCk7CisgICAgcmV0dXJuIGxpbmVMb2dpY2FsUmVjdDsKIH0K
IAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW52YWxpZGF0ZUZvcm1hdHRpbmdTdGF0
ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
aAppbmRleCA0MGU1MzAwZDRiOTc1OGMwNjM0ZDk0NWZhODQzZDQ3NWNhNWQyYzAxLi5jMjNjZmVl
ZDg5OTlmOTAwMTgzZjMzMDdhOTYyYjllODk4MDAxYWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmgKQEAgLTg3LDcgKzg3LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRl
V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7
CiAKICAgICB2b2lkIGNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVkZWQoKTsKLSAgICB2b2lkIHNl
dERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgY29u
c3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CisgICAgRGlzcGxheTo6SW5saW5lUmVjdCBjcmVh
dGVEaXNwbGF5Qm94ZXNGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRl
bnQmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKKyAgICBzdHJ1Y3QgTGluZVJlY3RB
bmRMaW5lQm94T2Zmc2V0IHsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsaW5lQm94VmVydGlj
YWxPZmZzZXQ7CisgICAgICAgIERpc3BsYXk6OklubGluZVJlY3QgbG9naWNhbFJlY3Q7CisgICAg
fTsKKyAgICBMaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgY29tcHV0ZWRMaW5lTG9naWNhbFJlY3Qo
Y29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JikgY29uc3Q7CiAgICAgdm9pZCBpbnZhbGlk
YXRlRm9ybWF0dGluZ1N0YXRlKGNvbnN0IEludmFsaWRhdGlvblN0YXRlJik7CiAKICAgICBjb25z
dCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1h
dHRpbmdTdGF0ZSgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAppbmRleCAwMDdjZGY5NWJhNTk4YzQ1NDY1
NTdhNTA3ZmM0NjBjYTY0ZTVhNWZjLi4xZjFhMjE5YjUzOTJlYjFlNzg5ZjhiNThmNTRjMzIzOGFi
OGQ2ODVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcApAQCAtMzEsMTMgKzMxLDYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1zdHJ1Y3QgQXNjZW50QW5kRGVzY2VudCB7
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBhc2NlbnQgKyBk
ZXNjZW50OyB9Ci0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGFzY2VudCB7IDAgfTsKLSAgICBJbmxp
bmVMYXlvdXRVbml0IGRlc2NlbnQgeyAwIH07Ci19OwotCiBzdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQg
ewogcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKQEAgLTEyNCwxNiArMTE3LDYgQEAgc3RhdGlj
IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoY29u
c3QgTGluZTo6UnVuTGlzdCYKICAgICByZXR1cm4geyB9OwogfQogCi1pbmxpbmUgc3RhdGljIEFz
Y2VudEFuZERlc2NlbnQgaGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiBmb250
TWV0cmljcywgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCkKLXsKLSAgICBJbmxp
bmVMYXlvdXRVbml0IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwotICAgIElubGluZUxh
eW91dFVuaXQgZGVzY2VudCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQoKTsKLSAgICAvLyAxMC44LjEg
TGVhZGluZyBhbmQgaGFsZi1sZWFkaW5nCi0gICAgYXV0byBoYWxmTGVhZGluZyA9IChsaW5lTG9n
aWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KSkgLyAyOwotICAgIC8vIElubGluZSB0cmVl
IGhlaWdodCBpcyBhbGwgaW50ZWdlciBiYXNlZC4KLSAgICByZXR1cm4geyBmbG9vcmYoYXNjZW50
ICsgaGFsZkxlYWRpbmcpLCBjZWlsZihkZXNjZW50ICsgaGFsZkxlYWRpbmcpIH07Ci19Ci0KIExp
bmVCb3g6OklubGluZUJveDo6SW5saW5lQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBE
aXNwbGF5OjpJbmxpbmVSZWN0JiByZWN0LCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lLCBJbmxp
bmVMYXlvdXRVbml0IGRlc2NlbnQsIElzQ29uc2lkZXJlZEVtcHR5IGlzQ29uc2lkZXJlZEVtcHR5
KQogICAgIDogbV9sYXlvdXRCb3gobWFrZVdlYWtQdHIobGF5b3V0Qm94KSkKICAgICAsIG1fbG9n
aWNhbFJlY3QocmVjdCkKQEAgLTE0MywyMSArMTI2LDE1IEBAIExpbmVCb3g6OklubGluZUJveDo6
SW5saW5lQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0
JiByCiB7CiB9CiAKLUxpbmVCb3g6OkxpbmVCb3goY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBJbmxpbmVMYXlvdXRQb2ludCYgdG9w
TGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29u
dGVudExvZ2ljYWxXaWR0aCwgY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgSXNMaW5lVmlzdWFs
bHlFbXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
aXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotICAgIDogbV9yZWN0KHRvcExlZnQsIGxvZ2lj
YWxXaWR0aCwgeyB9KQotICAgICwgbV9jb250ZW50TG9naWNhbFdpZHRoKGNvbnRlbnRMb2dpY2Fs
V2lkdGgpCitMaW5lQm94OjpMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRo
LCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGNvbnN0IExpbmU6OlJ1bkxp
c3QmIHJ1bnMsIElzTGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0eSwgSXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKKyAgICA6
IG1fbG9naWNhbFNpemUoY29udGVudExvZ2ljYWxXaWR0aCwgeyB9KQorICAgICwgbV9pc0xpbmVW
aXN1YWxseUVtcHR5KGlzTGluZVZpc3VhbGx5RW1wdHkgPT0gSXNMaW5lVmlzdWFsbHlFbXB0eTo6
WWVzKQogICAgICwgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCkKIHsKLSAgICBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBMYXlvdXQ6Omhvcml6
b250YWxBbGlnbm1lbnRPZmZzZXQocnVucywgcm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGxv
Z2ljYWxXaWR0aCwgY29udGVudExvZ2ljYWxXaWR0aCwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KTsKLSAgICBjb25zdHJ1Y3RJbmxpbmVCb3hlcyhydW5zLCBpc0xpbmVWaXN1YWxseUVtcHR5
KTsKKyAgICBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBMYXlvdXQ6Omhvcml6b250YWxB
bGlnbm1lbnRPZmZzZXQocnVucywgcm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCksIGxpbmVMb2dp
Y2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCk7CisgICAgY29uc3RydWN0SW5saW5lQm94ZXMocnVucyk7CiAgICAgY29tcHV0ZUlubGluZUJv
eGVzTG9naWNhbEhlaWdodCgpOwotICAgIGFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29t
cHV0ZUxpbmVCb3hIZWlnaHQoaXNMaW5lVmlzdWFsbHlFbXB0eSk7Ci0gICAgLy8gQ29tcHV0ZSBz
Y3JvbGxhYmxlIG92ZXJmbG93LgotICAgIG1fc2Nyb2xsYWJsZU92ZXJmbG93ID0gRGlzcGxheTo6
SW5saW5lUmVjdCB7IHRvcExlZnQsIHN0ZDo6bWF4KGxvZ2ljYWxXaWR0aCwgbV9yb290SW5saW5l
Qm94LmxvZ2ljYWxXaWR0aCgpKSwgeyB9IH07Ci0gICAgYXV0byBsb2dpY2FsQm90dG9tID0gSW5s
aW5lTGF5b3V0VW5pdCB7IH07IAotICAgIGZvciAoYXV0byYgaW5saW5lQm94RW50cnkgOiBtX2lu
bGluZUJveFJlY3RNYXApCi0gICAgICAgIGxvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChsb2dpY2Fs
Qm90dG9tLCBpbmxpbmVCb3hFbnRyeS52YWx1ZS0+bG9naWNhbFJlY3QoKS5ib3R0b20oKSk7Ci0g
ICAgbV9zY3JvbGxhYmxlT3ZlcmZsb3cuZXhwYW5kVmVydGljYWxseShsb2dpY2FsQm90dG9tKTsK
KyAgICBhbGlnbklubGluZUJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KCk7
CiB9CiAKIERpc3BsYXk6OklubGluZVJlY3QgTGluZUJveDo6aW5saW5lUmVjdEZvclRleHRSdW4o
Y29uc3QgTGluZTo6UnVuJiBydW4pIGNvbnN0CkBAIC0xNjgsMTggKzE0NSwxNyBAQCBEaXNwbGF5
OjpJbmxpbmVSZWN0IExpbmVCb3g6OmlubGluZVJlY3RGb3JUZXh0UnVuKGNvbnN0IExpbmU6OlJ1
biYgcnVuKSBjb25zdAogICAgIHJldHVybiB7IGlubGluZUJveFJlY3QudG9wKCksIG1faG9yaXpv
bnRhbEFsaWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVuaXQgeyB9KSArIHJ1bi5s
b2dpY2FsTGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCksIGlubGluZUJveFJlY3QuaGVpZ2h0KCkg
fTsKIH0KIAotdm9pZCBMaW5lQm94Ojpjb25zdHJ1Y3RJbmxpbmVCb3hlcyhjb25zdCBMaW5lOjpS
dW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5RW1wdHkpCit2
b2lkIExpbmVCb3g6OmNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1
bnMpCiB7CiAgICAgYXV0byBjb25zdHJ1Y3RSb290SW5saW5lQm94ID0gWyZdIHsKICAgICAgICAg
YXV0byYgZm9udE1ldHJpY3MgPSByb290KCkuc3R5bGUoKS5mb250TWV0cmljcygpOwotICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IHJvb3RJbmxpbmVCb3hIZWlnaHQgPSBmb250TWV0cmljcy5oZWln
aHQoKTsKLSAgICAgICAgYXV0byByb290SW5saW5lQm94UmVjdCA9IERpc3BsYXk6OklubGluZVJl
Y3QgeyB7IH0sIG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91
dFVuaXQgeyB9KSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCByb290SW5saW5lQm94SGVpZ2h0IH07
Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgcm9vdElubGluZUJveEJhc2VsaW5lID0gZm9udE1l
dHJpY3MuYXNjZW50KCk7Ci0gICAgICAgIGF1dG8gcm9vdElubGluZUJveERlc2NlbnQgPSByb290
SW5saW5lQm94SGVpZ2h0IC0gcm9vdElubGluZUJveEJhc2VsaW5lOworICAgICAgICBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQgPSBmb250TWV0cmljcy5oZWlnaHQoKTsKKyAgICAgICAg
YXV0byBsb2dpY2FsUmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyB7IH0sIG1faG9yaXpvbnRh
bEFsaWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVuaXQgeyB9KSwgbG9naWNhbFdp
ZHRoKCksIGxvZ2ljYWxIZWlnaHQgfTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGlu
ZSA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOworICAgICAgICBhdXRvIGRlc2NlbnQgPSBsb2dpY2Fs
SGVpZ2h0IC0gYmFzZWxpbmU7CiAgICAgICAgIGF1dG8gbGluZUhhc0ltYWdpbmFyeVN0cnV0ID0g
IWxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCk7Ci0gICAgICAgIGF1dG8gcm9vdElubGluZUJv
eElzQ29uc2lkZXJlZEVtcHR5ID0gaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxs
eUVtcHR5OjpObyAmJiBsaW5lSGFzSW1hZ2luYXJ5U3RydXQgPyBJbmxpbmVCb3g6OklzQ29uc2lk
ZXJlZEVtcHR5OjpObyA6IElubGluZUJveDo6SXNDb25zaWRlcmVkRW1wdHk6OlllczsKLQotICAg
ICAgICBtX3Jvb3RJbmxpbmVCb3ggPSBJbmxpbmVCb3ggeyByb290KCksIHJvb3RJbmxpbmVCb3hS
ZWN0LCByb290SW5saW5lQm94QmFzZWxpbmUsIHJvb3RJbmxpbmVCb3hEZXNjZW50LCByb290SW5s
aW5lQm94SXNDb25zaWRlcmVkRW1wdHkgfTsKKyAgICAgICAgYXV0byBpc0luaXRpYWxseUNvbnNp
ZGVyZWRFbXB0eSA9ICAhbV9pc0xpbmVWaXN1YWxseUVtcHR5ICYmIGxpbmVIYXNJbWFnaW5hcnlT
dHJ1dCA/IElubGluZUJveDo6SXNDb25zaWRlcmVkRW1wdHk6Ok5vIDogSW5saW5lQm94OjpJc0Nv
bnNpZGVyZWRFbXB0eTo6WWVzOworICAgICAgICBtX3Jvb3RJbmxpbmVCb3ggPSBJbmxpbmVCb3gg
eyByb290KCksIGxvZ2ljYWxSZWN0LCBiYXNlbGluZSwgZGVzY2VudCwgaXNJbml0aWFsbHlDb25z
aWRlcmVkRW1wdHkgfTsKICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmcm9vdCgpLCAm
bV9yb290SW5saW5lQm94KTsKICAgICB9OwogICAgIGNvbnN0cnVjdFJvb3RJbmxpbmVCb3goKTsK
QEAgLTIxOSw4ICsxOTUsOCBAQCB2b2lkIExpbmVCb3g6OmNvbnN0cnVjdElubGluZUJveGVzKGNv
bnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZpc3VhbGx5RW1wdAogICAgICAgICAgICAg
ICAgIG1faW5saW5lQm94TGlzdC5hcHBlbmQoV1RGTW92ZShpbmxpbmVCb3gpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvIGluaXRpYWxXaWR0aCA9IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHJ1bi5s
b2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsTGVmdCA9IG1f
aG9yaXpvbnRhbEFsaWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVuaXQgeyB9KSAr
IHJ1bi5sb2dpY2FsTGVmdCgpOworICAgICAgICAgICAgYXV0byBpbml0aWFsV2lkdGggPSBsb2dp
Y2FsV2lkdGgoKSAtIHJ1bi5sb2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgQVNTRVJUKGluaXRp
YWxXaWR0aCA+PSAwKTsKICAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gbGF5b3V0Qm94
LnN0eWxlKCkuZm9udE1ldHJpY3MoKTsKICAgICAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbEhlaWdodCA9IGZvbnRNZXRyaWNzLmhlaWdodCgpOwpAQCAtMzA2LDI5ICsyODIsMjIgQEAg
dm9pZCBMaW5lQm94Ojpjb21wdXRlSW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KCkKICAgICB9CiB9
CiAKLXZvaWQgTGluZUJveDo6YWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGlu
ZUJveEhlaWdodChJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5RW1wdHkpCit2b2lk
IExpbmVCb3g6OmFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWln
aHQoKQogewogICAgIC8vIElubGluZSBib3hlcyBhcmUgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVt
IG9mIHRoZSBsaW5lIGJveCAoYW5kIG5vdCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhl
aXIgcGFyZW50cykuCiAgICAgLy8gU3RhcnRpbmcgd2l0aCB0aGUgcm9vdCBpbmxpbmUgYm94LCBw
b3NpdGlvbiB0aGUgYW5jZXN0b3JzIGZpcnN0IHNvIHRoYXQgdGhlIGRlc2NlbmRhbnQgbGluZSBi
b3hlcyBzZWUgYWJzb2x1dGUgdmVydGljYWwgcG9zaXRpb25zLgotICAgIGF1dG8mIHJvb3RTdHls
ZSA9IHJvb3QoKS5zdHlsZSgpOwotICAgIGF1dG8gY29udGVudExvZ2ljYWxCb3R0b20gPSBJbmxp
bmVMYXlvdXRVbml0IHsgfTsKKyAgICBhdXRvIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gSW5saW5l
TGF5b3V0VW5pdCB7IH07CiAgICAgYXV0byBhbGlnblJvb3RJbmxpbmVCb3ggPSBbJl0gewotICAg
ICAgICBhdXRvIHVzZWRMaW5lSGVpZ2h0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAg
IGlmIChpc0xpbmVWaXN1YWxseUVtcHR5ID09IElzTGluZVZpc3VhbGx5RW1wdHk6Ok5vKQotICAg
ICAgICAgICAgdXNlZExpbmVIZWlnaHQgPSByb290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7
Ci0gICAgICAgIGF1dG8gYWxpZ25tZW50QmFzZWxpbmUgPSBoYWxmTGVhZGluZ01ldHJpY3Mocm9v
dFN0eWxlLmZvbnRNZXRyaWNzKCksIHVzZWRMaW5lSGVpZ2h0KS5hc2NlbnQ7Ci0gICAgICAgIGF1
dG8gcm9vdElubGluZUJveFRvcFBvc2l0aW9uID0gYWxpZ25tZW50QmFzZWxpbmUgLSBtX3Jvb3RJ
bmxpbmVCb3guYmFzZWxpbmUoKTsKLSAgICAgICAgbV9yb290SW5saW5lQm94LnNldExvZ2ljYWxU
b3Aocm9vdElubGluZUJveFRvcFBvc2l0aW9uKTsKLSAgICAgICAgY29udGVudExvZ2ljYWxCb3R0
b20gPSBtX3Jvb3RJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpOworICAgICAgICBjb250ZW50TG9n
aWNhbEhlaWdodCA9IG1fcm9vdElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGZv
ciAoYXV0byYgaW5saW5lQm94IDogbV9pbmxpbmVCb3hMaXN0KSB7CiAgICAgICAgICAgICBhdXRv
IHZlcnRpY2FsQWxpZ24gPSBpbmxpbmVCb3gtPmxheW91dEJveCgpLnN0eWxlKCkudmVydGljYWxB
bGlnbigpOwogICAgICAgICAgICAgaWYgKHZlcnRpY2FsQWxpZ24gPT0gVmVydGljYWxBbGlnbjo6
Qm90dG9tKSB7CiAgICAgICAgICAgICAgICAgLy8gYm90dG9tIGFsaWduIGFsd2F5cyBwdXNoZXMg
dGhlIHJvb3QgaW5saW5lIGJveCBkb3dud2FyZHMuCiAgICAgICAgICAgICAgICAgYXV0byBvdmVy
ZmxvdyA9IHN0ZDo6bWF4KDAuMGYsIGlubGluZUJveC0+bG9naWNhbEJvdHRvbSgpIC0gbV9yb290
SW5saW5lQm94LmxvZ2ljYWxCb3R0b20oKSk7CiAgICAgICAgICAgICAgICAgbV9yb290SW5saW5l
Qm94LnNldExvZ2ljYWxUb3AobV9yb290SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIG92ZXJmbG93
KTsKLSAgICAgICAgICAgICAgICBjb250ZW50TG9naWNhbEJvdHRvbSArPSBvdmVyZmxvdzsKKyAg
ICAgICAgICAgICAgICBjb250ZW50TG9naWNhbEhlaWdodCArPSBvdmVyZmxvdzsKICAgICAgICAg
ICAgIH0gZWxzZSBpZiAodmVydGljYWxBbGlnbiA9PSBWZXJ0aWNhbEFsaWduOjpUb3ApCi0gICAg
ICAgICAgICAgICAgY29udGVudExvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChjb250ZW50TG9naWNh
bEJvdHRvbSwgaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGNv
bnRlbnRMb2dpY2FsSGVpZ2h0ID0gc3RkOjptYXgoY29udGVudExvZ2ljYWxIZWlnaHQsIGlubGlu
ZUJveC0+bG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgfQogICAgIH07CiAgICAgYWxpZ25Sb290
SW5saW5lQm94KCk7CkBAIC0zNTksNyArMzI4LDcgQEAgdm9pZCBMaW5lQm94OjphbGlnbklubGlu
ZUJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KElzTGluZVZpc3VhbGx5RW0K
ICAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToK
LSAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBjb250ZW50TG9naWNhbEJvdHRvbSAt
IGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgaW5saW5lQm94TG9naWNh
bFRvcCA9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0IC0gaW5saW5lQm94LT5sb2dpY2FsSGVpZ2h0KCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6
IHsKICAgICAgICAgICAgIGF1dG8mIHBhcmVudExheW91dEJveCA9IGxheW91dEJveC5wYXJlbnQo
KTsKQEAgLTM3Nyw3ICszNDYsNyBAQCB2b2lkIExpbmVCb3g6OmFsaWduSW5saW5lQm94ZXNWZXJ0
aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoSXNMaW5lVmlzdWFsbHlFbQogICAgIGF1dG8g
YWRqdXN0Q29udGVudEJvdHRvbUlmTmVlZGVkID0gWyZdIHsKICAgICAgICAgaWYgKCFtX3Jvb3RJ
bmxpbmVCb3guaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvIGNv
bGxhcHNlZENvbnRlbnRMb2dpY2FsVG9wID0gY29udGVudExvZ2ljYWxCb3R0b207CisgICAgICAg
IGF1dG8gY29sbGFwc2VkQ29udGVudExvZ2ljYWxUb3AgPSBjb250ZW50TG9naWNhbEhlaWdodDsK
ICAgICAgICAgYXV0byBjb2xsYXBzZWRDb250ZW50TG9naWNhbEJvdHRvbSA9IElubGluZUxheW91
dFVuaXQgeyB9OwogICAgICAgICBmb3IgKGF1dG8mIGlubGluZUJveCA6IG1faW5saW5lQm94TGlz
dCkgewogICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduID0gaW5saW5lQm94LT5sYXlvdXRC
b3goKS5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKQEAgLTM4OSwyNCArMzU4LDE5IEBAIHZvaWQg
TGluZUJveDo6YWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdo
dChJc0xpbmVWaXN1YWxseUVtCiAgICAgICAgICAgICBjb2xsYXBzZWRDb250ZW50TG9naWNhbFRv
cCA9IHN0ZDo6bWluKGNvbGxhcHNlZENvbnRlbnRMb2dpY2FsVG9wLCBpbmxpbmVCb3gtPmxvZ2lj
YWxUb3AoKSk7CiAgICAgICAgICAgICBjb2xsYXBzZWRDb250ZW50TG9naWNhbEJvdHRvbSA9IHN0
ZDo6bWF4KGNvbGxhcHNlZENvbnRlbnRMb2dpY2FsQm90dG9tLCBpbmxpbmVCb3gtPmxvZ2ljYWxC
b3R0b20oKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNvbGxhcHNlZENvbnRlbnRMb2dpY2Fs
VG9wIDw9IDApIHsKLSAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsQm90dG9tID0gY29sbGFwc2Vk
Q29udGVudExvZ2ljYWxCb3R0b207CisgICAgICAgIGlmICghY29sbGFwc2VkQ29udGVudExvZ2lj
YWxUb3ApIHsKKyAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gY29sbGFwc2VkQ29u
dGVudExvZ2ljYWxCb3R0b207CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgY29udGVudExvZ2ljYWxCb3R0b20gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAg
Y29udGVudExvZ2ljYWxIZWlnaHQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKICAgICAgICAgZm9y
IChhdXRvJiBpbmxpbmVCb3ggOiBtX2lubGluZUJveExpc3QpIHsKICAgICAgICAgICAgIGlubGlu
ZUJveC0+c2V0TG9naWNhbFRvcChpbmxpbmVCb3gtPmxvZ2ljYWxUb3AoKSAtIGNvbGxhcHNlZENv
bnRlbnRMb2dpY2FsVG9wKTsKLSAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsQm90dG9tID0gc3Rk
OjptYXgoY29udGVudExvZ2ljYWxCb3R0b20sIGlubGluZUJveC0+bG9naWNhbEJvdHRvbSgpKTsK
KyAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gc3RkOjptYXgoY29udGVudExvZ2lj
YWxIZWlnaHQsIGlubGluZUJveC0+bG9naWNhbEJvdHRvbSgpKTsKICAgICAgICAgfQogICAgIH07
CiAgICAgYWRqdXN0Q29udGVudEJvdHRvbUlmTmVlZGVkKCk7Ci0gICAgLy8gQ29tcHV0ZSB0aGUg
bGluZSBib3ggaGVpZ2h0LiBJdCdzIGVpdGhlciB0aGUgbGluZS1oZWlnaHQgdmFsdWUgKG5lZ2F0
aXZlIHZhbHVlIG1lYW5zIGxpbmUgaGVpZ2h0IGl0IG5vdCBzZXQpIG9yCi0gICAgLy8gbWF4aW11
bSBvZiB0aGUgcm9vdCBpbmxpbmUgYm94J3MgYm90dG9tIGFuZCB0aGUgdG9wIGFsaWduZWQgY29u
dGVudCBoZWlnaHQuCi0gICAgaWYgKGlzTGluZVZpc3VhbGx5RW1wdHkgPT0gSXNMaW5lVmlzdWFs
bHlFbXB0eTo6Tm8pIHsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsaW5lU3BhY2luZyA9IHJv
b3RTdHlsZS5mb250TWV0cmljcygpLmxpbmVTcGFjaW5nKCk7Ci0gICAgICAgIGF1dG8gbGluZUJv
eExvZ2ljYWxIZWlnaHQgPSAhcm9vdFN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkgPyBy
b290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkgOiBzdGQ6Om1heChsaW5lU3BhY2luZywgY29u
dGVudExvZ2ljYWxCb3R0b20pOwotICAgICAgICBtX3JlY3Quc2V0SGVpZ2h0KGxpbmVCb3hMb2dp
Y2FsSGVpZ2h0KTsKLSAgICB9CisgICAgaWYgKCFtX2lzTGluZVZpc3VhbGx5RW1wdHkpCisgICAg
ICAgIG1fbG9naWNhbFNpemUuc2V0SGVpZ2h0KGNvbnRlbnRMb2dpY2FsSGVpZ2h0KTsKIH0KIAog
Y29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIExpbmVCb3g6OmZvcm1hdHRpbmdDb250ZXh0
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCb3guaAppbmRleCA1ZDdkMWNjNTE4YmI4MWY4ZDhhN2M4ZWRjNDg2MTVi
OTIyNGQyNjAxLi4xYTU2ZWI1Mzk0ZGRkZTNkYmY0OTcxYzQ5ODUwOTU5MmQyMzhmZmRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJveC5oCkBAIC0zOCw2ICszOCwyMSBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3Mg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiAKKy8vIExpbmVCb3ggY29udGFpbnMgYWxsIHRoZSBp
bmxpbmUgYm94ZXMgYm90aCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkuIEl0IG9ubHkgaGFz
IHdpZHRoIGFuZCBoZWlnaHQgZ2VvbWV0cnkuCisvLworLy8gICBfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gTGluZSBCb3gKKy8vIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLQorLy8gfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorLy8gfCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0t
LS0gUm9vdCBJbmxpbmUgQm94CisvLyB8fCAgIF9fX19fICAgIF9fXyAgICAgIF9fXyAgICAgICAg
ICB8ICAgICAgICAgICAgICB8CisvLyB8fCAgfCAgICAgICAgLyAgIFwgICAgLyAgIFwgICAgICAg
ICB8ICBJbmxpbmUgQm94ICB8CisvLyB8fCAgfF9fX19fICB8ICAgICB8ICB8ICAgICB8ICAgICAg
ICB8ICAgICAgICAgICAgICB8ICAgIGFzY2VudAorLy8gfHwgIHwgICAgICAgfCAgICAgfCAgfCAg
ICAgfCAgICAgICAgfCAgICAgICAgICAgICAgfAorLy8gfHxfX3xfX19fX19fX1xfX18vX19fX1xf
X18vX19fX19fX19ffF9fX19fX19fX19fX19ffF9fX19fX18gYWxpZ25tZW50X2Jhc2VsaW5lCisv
LyB8fAorLy8gfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXNjZW50CisvLyB8fF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXworLy8gfF9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIGNsYXNzIExpbmVCb3gg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtODAsNTcgKzk1LDM0
IEBAIHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
IHsgTm8sIFllcyB9OwogICAgIGVudW0gY2xhc3MgSXNMaW5lVmlzdWFsbHlFbXB0eSB7IE5vLCBZ
ZXMgfTsKLSAgICBMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3Qg
SW5saW5lTGF5b3V0UG9pbnQmIHRvcExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRo
LCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGNvbnN0IExpbmU6OlJ1bkxp
c3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwor
ICAgIExpbmVCb3goY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBJbmxpbmVMYXlvdXRV
bml0IGxpbmVMb2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0
aCwgY29uc3QgTGluZTo6UnVuTGlzdCYsIElzTGluZVZpc3VhbGx5RW1wdHksIElzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCk7CiAKLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0LmxlZnQoKTsgfQotICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnJpZ2h0KCk7IH0KLSAgICBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX3JlY3QudG9wKCk7IH0KLSAg
ICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX3JlY3Qu
Ym90dG9tKCk7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC53aWR0aCgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmhlaWdodCgpOyB9Ci0KLSAgICBjb25zdCBEaXNw
bGF5OjpJbmxpbmVSZWN0JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQot
ICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZU92ZXJmbG93OyB9CisgICAgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplLndpZHRoKCk7IH0KKyAg
ICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2lj
YWxTaXplLmhlaWdodCgpOyB9CisgICAgSW5saW5lTGF5b3V0U2l6ZSBsb2dpY2FsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KIAogICAgIE9wdGlvbmFsPElubGluZUxheW91
dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2hvcml6
b250YWxBbGlnbm1lbnRPZmZzZXQ7IH0KKyAgICBib29sIGlzTGluZVZpc3VhbGx5RW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2lzTGluZVZpc3VhbGx5RW1wdHk7IH0KIAogICAgIGNvbnN0IElubGlu
ZUJveCYgaW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdCB7
IHJldHVybiAqbV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmbGF5b3V0Qm94KTsgfQogICAgIERpc3Bs
YXk6OklubGluZVJlY3QgaW5saW5lUmVjdEZvclRleHRSdW4oY29uc3QgTGluZTo6UnVuJikgY29u
c3Q7CiAKLSAgICAvLyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXyBsaW5lIGJveCBsb2dpY2FsIHRvcAotICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgIF4KLSAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgLy8gICBfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18gcm9vdCBpbmxpbmUgYm94Ci0gICAgLy8gICBeICAg
ICAgICAgICAgICAgICAgfAotICAgIC8vICAgfCAgICAgICAgICAgICAgICAgIHwKLSAgICAvLyAg
IHwgcm9vdCBsaW5lIGFzY2VudCB8Ci0gICAgLy8gICB8ICAgICAgICAgICAgICAgICAgfAotICAg
IC8vICAgdiAgICAgICAgICAgICAgICAgIHYKLSAgICAvLyAgIF9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyBhbGlnbm1lbnQgYmFzZWxpbmUKLSAgICAv
LyAgIF4KLSAgICAvLyAgIHwgcm9vdCBsaW5lIGRlc2NlbnQKLSAgICAvLyAgIHYKLSAgICAvLyAg
IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi0gICAgLy8gX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gbGluZSBib3ggbG9naWNh
bCBib3R0b20KICAgICBJbmxpbmVMYXlvdXRVbml0IGFsaWdubWVudEJhc2VsaW5lKCkgY29uc3Qg
eyByZXR1cm4gbV9yb290SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIG1fcm9vdElubGluZUJveC5i
YXNlbGluZSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjb25zdHJ1Y3RJbmxpbmVCb3hlcyhj
b25zdCBMaW5lOjpSdW5MaXN0JiwgSXNMaW5lVmlzdWFsbHlFbXB0eSk7CisgICAgdm9pZCBjb25z
dHJ1Y3RJbmxpbmVCb3hlcyhjb25zdCBMaW5lOjpSdW5MaXN0Jik7CiAgICAgdm9pZCBjb21wdXRl
SW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgdm9pZCBhbGlnbklubGluZUJveGVzVmVy
dGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KElzTGluZVZpc3VhbGx5RW1wdHkpOworICAg
IHZvaWQgYWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodCgp
OwogCiAgICAgSW5saW5lQm94JiBpbmxpbmVCb3hGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlv
dXRCb3gpIHsgcmV0dXJuICptX2lubGluZUJveFJlY3RNYXAuZ2V0KCZsYXlvdXRCb3gpOyB9CiAK
LSAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7IH0KLQogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0OwogICAgIGNvbnN0IEJveCYgcm9vdCgp
IGNvbnN0OwogICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0OwogCiBwcml2YXRl
OgotICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9yZWN0OwotICAgIERpc3BsYXk6OklubGluZVJl
Y3QgbV9zY3JvbGxhYmxlT3ZlcmZsb3c7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBtX2NvbnRlbnRM
b2dpY2FsV2lkdGggeyAwIH07CisgICAgSW5saW5lTGF5b3V0U2l6ZSBtX2xvZ2ljYWxTaXplOwor
ICAgIGJvb2wgbV9pc0xpbmVWaXN1YWxseUVtcHR5IHsgdHJ1ZSB9OwogCiAgICAgSW5saW5lQm94
IG1fcm9vdElubGluZUJveDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IDlhNzNjZTE3
OTY1OTEzNjJlYTY1MzcwNmRlNTkxZGU1YjAwMmYzYTcuLjY0YjNiODJkM2Q0MTRiMDNjMTY2NWIz
ZWU1YjNmYzBjM2Y5NGY4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTMwMiw3ICsz
MDIsOSBAQCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQgTGluZUJ1aWxkZXI6OmxheW91dElubGlu
ZUNvbnRlbnQoY29uc3QgSW5saW5lSXRlbVJhbmdlJgogICAgIGF1dG8gaXNMYXN0TGluZSA9IGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudChjb21taXR0ZWRSYW5nZSwgbmVlZHNMYXlvdXRSYW5n
ZS5lbmQsIGNvbW1pdHRlZENvbnRlbnQucGFydGlhbFRyYWlsaW5nQ29udGVudC5oYXNWYWx1ZSgp
KTsKICAgICBhdXRvIGxpbmVJc1Zpc3VhbGx5RW1wdHkgPSBtX2xpbmUuaXNWaXN1YWxseUVtcHR5
KCkgPyBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMgOiBMaW5lQm94OjpJc0xpbmVW
aXN1YWxseUVtcHR5OjpObzsKICAgICByZXR1cm4gTGluZUNvbnRlbnQgeyBjb21taXR0ZWRDb250
ZW50LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQsIGNvbW1pdHRlZFJhbmdlLCBtX2Zsb2F0cywgbV9s
aW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCkKLSAgICAgICAgLCBMaW5lQm94IHsgZm9ybWF0dGluZ0Nv
bnRleHQoKSwgbGluZUxvZ2ljYWxUb3BMZWZ0LCBtX2xpbmUubGluZUxvZ2ljYWxXaWR0aCgpLCBt
X2xpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpLCBtX2xpbmUucnVucygpLCBsaW5lSXNWaXN1YWxs
eUVtcHR5CisgICAgICAgICwgbGluZUxvZ2ljYWxUb3BMZWZ0CisgICAgICAgICwgbV9saW5lLmxp
bmVMb2dpY2FsV2lkdGgoKQorICAgICAgICAsIExpbmVCb3ggeyBmb3JtYXR0aW5nQ29udGV4dCgp
LCBtX2xpbmUubGluZUxvZ2ljYWxXaWR0aCgpLCBtX2xpbmUuY29udGVudExvZ2ljYWxXaWR0aCgp
LCBtX2xpbmUucnVucygpLCBsaW5lSXNWaXN1YWxseUVtcHR5CiAgICAgICAgICwgaXNMYXN0TGlu
ZSA/IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzIDogTGluZUJveDo6
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObyB9CiAgICAgICAgICwgbV9saW5lLnJ1bnMo
KSB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKaW5kZXggNDJhZmE3Mjg5OWY0NzMwZmNjNjcyOTI1
MTU0Yzk2YzEyYTMwZGUzYy4uZDA4OWZiZjQzMGZjMTRlYmUxOWQ3ZTE4Y2Q1ZmQ3NTczYjlkYjlj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lTGluZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCkBAIC02MSw2ICs2MSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgdXNpbmcgRmxvYXRMaXN0ID0gVmVjdG9yPEZsb2F0PjsKICAgICAgICAgY29uc3QgRmxvYXRM
aXN0JiBmbG9hdHM7CiAgICAgICAgIGJvb2wgaGFzSW50cnVzaXZlRmxvYXQgeyBmYWxzZSB9Owor
ICAgICAgICBJbmxpbmVMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVmdDsKKyAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBsaW5lTG9naWNhbFdpZHRoOwogICAgICAgICBjb25zdCBMaW5lQm94IGxpbmVC
b3g7CiAgICAgICAgIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnM7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408126</attachid>
            <date>2020-09-06 11:22:37 -0700</date>
            <delta_ts>2020-09-06 14:32:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216221-20200906112236.patch</filename>
            <type>text/plain</type>
            <size>35899</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWQ5MjBhODAyOWI5Njlk
MDZiZWFkYTJmZjg3MmZlMjU2NjMwY2Y1YS4uMzc4NjcxNzRlZTNkNzM4ODdkMTdiMjQ0NmI0OGM4
ZjgwNjU5ODBlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDIwLTA5LTA2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQm94
IHNob3VsZCBjb250YWluIGFsbCBpbmxpbmUgYm94ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjIyMQorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dHRpIEtvaXZpc3RvLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2ggd2UgZGVjb3VwbGUgdGhlIGxp
bmUgYm94IGFuZCB0aGUgbGluZS4KKworICAgICAgICBQcmV2aW91c2x5IHRoZSBMaW5lQm94IHdh
cyBwcmV0dHkgbXVjaCByZXByZXNlbnRpbmcgdGhlIGxpbmUuCisgICAgICAgIEl0IHdhcyByZXNw
b25zaWJsZSBmb3IgYm90aCBwbGFjaW5nIHRoZSBpbmxpbmUgYm94ZXMgYW5kIHNpemluZyB0aGUg
bGluZSBhbmQgcG9zaXRpb24gaXRzZWxmIGJhc2VkIG9uIGxpbmUtaGVpZ2h0L2hhbGYgbGVhZGlu
Zy4KKyAgICAgICAgTm93IHRoZSBMaW5lQm94IGlzIG9ubHkgcmVzcG9uc2libGUgZm9yIHBsYWNp
bmcgdGhlIGlubGluZSBib3hlcyBhbmQgc2l6aW5nIGl0c2VsZiwgaXQgaGFzIG5vIHBvc2l0aW9u
IGdlb21ldHJ5IGFueW1vcmUgbmVpdGhlcgorICAgICAgICBkb2VzIGl0IGNvbXB1dGUgdGhlIGxp
bmUgaGVpZ2h0LgorICAgICAgICBUaGUgbGluZSBzaXplIGlzIGNvbXB1dGVkIGxhdGVyIHVzaW5n
IHRoZSBjb21iaW5hdGlvbiBvZiBsaW5lLWhlaWdodCBwcm9wZXJ0eS9MaW5lQm94IGhlaWdodC9G
b250TWV0cmljczo6bGluZVNwYWNpbmcvaGFsZiBsZWFkaW5nLgorICAgICAgICBUaGlzIGdlb21l
dHJ5IGlzIHByZXNlcnZlZCBpbiBEaXNwbGF5OjpMaW5lQm94ICh0aGlzIG5lZWRzIHRvIGJlIHJl
bmFtZWQgdG8gRGlzcGxheTo6TGluZSkuCisKKyAgICAgICAgMS4gTGluZUJ1aWxkZXIgcGxhY2Vz
IHRoZSBydW5zIG9uIHRoZSBsaW5lIGFmdGVyIGVhY2ggb3RoZXIgKGF0IHRoaXMgcG9pbnQgdGhl
eSBvbmx5IGhhdmUgaG9yaXpvbnRhbCBnZW9tZXRyeSkuCisgICAgICAgIDIuIExpbmVCcmVha2Vy
IHRlbGxzIHdoZW4gdG8gc3RvcC4KKyAgICAgICAgMy4gV2Ugc3RhcnQgY29uc3RydWN0aW5nIGlu
bGluZSBib3hlcyBmb3IgdGhlIHJ1bnMgKHJvb3QgaW5saW5lIGJveCBldGMpIGFuZCBwbGFjZSB0
aGVtIGluc2lkZSBhbiBMaW5lQm94LiBUaGlzIGlzIHdoZW4gaG9yaXpvbnRhbCBhbmQgdmVydGlj
YWwgYWxpZ25tZW50IGhhcHBlbi4KKyAgICAgICAgNC4gV2UgdXNlIHRoZSBmdWxseSBzaXplZCBM
aW5lQm94IHRvIGNvbXB1dGUgdGhlIGxpbmUgZ2VvbWV0cnkuIE5vdGUgdGhhdCB0aGUgbGluZSdz
IGdlb21ldHJ5IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1hdGNoIHRoZSBMaW5lQm94IHdpZHRoL2hl
aWdodCAoc2VlIGJlbG93KS4KKyAgICAgICAgNS4gV2UgY29uc3RydWN0IGEgRGlzcGxheTo6TGlu
ZUJveCBmb3IgdGhlIGxpbmUgYW5kIERpc3BsYXk6OlJ1bnMgZm9yIHRoZSBydW5zIGluc2lkZSB0
aGUgaW5saW5lIGJveGVzLgorCisgICAgICAgIExpbmVCb3g6CisgICAgICAgIC0gZnVsbHkgY29u
dGFpbnMgYWxsIHRoZSBpbmxpbmUgYm94ZXMsIGJvdGggaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNh
bGx5LgorICAgICAgICAtIGhhcyBvbmx5IHdpZHRoIGFuZCBoZWlnaHQgZ2VvbWV0cnkKKyAgICAg
ICAgLSBoZWlnaHQgaXMgbm90IGNvbnN0cmFpbmVkIGJ5IHRoZSBsaW5lLWhlaWdodCBwcm9wZXJ0
eQorICAgICAgICAtIGRvZXMgbm90IGhhdmUgdGhlIGNvbmNlcHQgb2Ygb3ZlcmZsb3cuCisKKyAg
ICAgICAgTGluZToKKyAgICAgICAgLSBjb250YWlucyB0aGUgTGluZUJveCwgYnV0IHRoZSBMaW5l
Qm94IGNhbiBvdmVyZmxvdyB0aGUgbGluZSwgYm90aCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2Fs
bHkuCisgICAgICAgIC0gaGFzIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSByb290IGJsb2NrIGNv
bnRhaW5lci4KKworICAgICAgICBTaW1wbGUgY2FzZS4KKyAgICAgICAgPGRpdj5mb250IHdlbnQg
Y3Jhenkgd2l0aCBsaW5lIHNwYWNpbmc8L2Rpdj4KKyAgICAgICAgICBfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fICBsaW5lCisgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgfCBsaW5lIHNwYWNpbmcgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0gIExpbmVCb3gKKyAgICAgICAg
fHwgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwK
KyAgICAgICAgfHwgICAgfCBsaW5lIGJveCBoZWlnaHQgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgIHwKKyAgICAgICAgfHwtLS0tdi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tfC0tLS0tLS0tIHwgYWxpZ25tZW50IGJhc2VsaW5lCisgICAgICAgIHwgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgfCAgIF4KKyAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgfCBsaW5lIHNwYWNpbmcgICAgICAgICAgfCAgIHwKKyAgICAg
ICAgfF9fX19fX19fX19fX19fX19fX19fdl9fX19fX19fX19fX19fX19fX19fX19ffCAgc2Nyb2xs
YWJsZSBvdmVyZmxvdworCisKKyAgICAgICAgIFdoZW4gZ2x5cGhzIGluIHN1YnNlcXVlbnQgbGlu
ZXMgb3ZlcmZsb3c6CisgICAgICAgICA8ZGl2IHN0eWxlPSJsaW5lLWhlaWdodDogNXB4OyBmb250
LXNpemU6IDIwcHg7Ij5saW5lIGJveCBvdmVyZmxvd3MgdGhlIGxpbmU8L2Rpdj4KKyAgICAgICAg
ICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gIExpbmVCb3gK
KyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICB8
CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBsaW5lIGJveCBoZWlnaHQg
fAorICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
IHwKKyAgICAgICAgIC18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0t
LS18LSAgTGluZQorICAgICAgICB8IHwgICAgIF4gICAgICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgICAgIHwgfAorICAgICAgICB8IHwgICAgIHwgbGluZSBoZWlnaHQgICAgICAgIHwgICAg
ICAgICAgICAgICAgIHwgfAorICAgICAgICAgLXwtLS0tLXYtLS0tLS0tLS0tLS0tLS0tLS0tLXwt
LS0tLS0tLS0tLS0tLS0tLXwtCisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgfAorICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LXwtLS0tLS0tLS0tLS0tLS0tLXwgYWxpZ25tZW50IGJhc2VsaW5lCisgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorICAgICAgICAgIHxfX19f
X19fX19fX19fX19fX19fX19fX19fX3ZfX19fX19fX19fX19fX19fX3wKKworICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNyZWF0ZURpc3Bs
YXlCb3hlc0ZvckxpbmVDb250ZW50KToKKwogMjAyMC0wOS0wNiAgWmFsYW4gQnVqdGFzICA8emFs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gTW92ZSBMaW5lIGhhbmRpbmcgdG8g
TGluZUJ1aWxkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJl
ZS9EaXNwbGF5SW5saW5lUmVjdC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVl
L0Rpc3BsYXlJbmxpbmVSZWN0LmgKaW5kZXggNTIzZThlMDEzNThlMjIzYjkwNDM1NjM2ZWEzNDI3
ZTc0ODFiZDFjMy4uNDlkNjI3NzRhMzdiYWU1OGFlYmNlZmNjNWE1OWM5NGRkZjdkMTEyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlJbmxpbmVS
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlJbmxp
bmVSZWN0LmgKQEAgLTM3LDYgKzM3LDcgQEAgcHVibGljOgogICAgIElubGluZVJlY3QoKSA9IGRl
ZmF1bHQ7CiAgICAgSW5saW5lUmVjdChJbmxpbmVMYXlvdXRVbml0IHRvcCwgSW5saW5lTGF5b3V0
VW5pdCBsZWZ0LCBJbmxpbmVMYXlvdXRVbml0IHdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGhlaWdo
dCk7CiAgICAgSW5saW5lUmVjdChjb25zdCBJbmxpbmVMYXlvdXRQb2ludCYgdG9wTGVmdCwgSW5s
aW5lTGF5b3V0VW5pdCB3aWR0aCwgSW5saW5lTGF5b3V0VW5pdCBoZWlnaHQpOworICAgIElubGlu
ZVJlY3QoY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIHRvcExlZnQsIGNvbnN0IElubGluZUxheW91
dFNpemUmKTsKICAgICAKICAgICBJbmxpbmVMYXlvdXRVbml0IHRvcCgpIGNvbnN0OwogICAgIElu
bGluZUxheW91dFVuaXQgbGVmdCgpIGNvbnN0OwpAQCAtMTA4LDYgKzEwOSwxMSBAQCBpbmxpbmUg
SW5saW5lUmVjdDo6SW5saW5lUmVjdChjb25zdCBJbmxpbmVMYXlvdXRQb2ludCYgdG9wTGVmdCwg
SW5saW5lTGF5b3V0VW5pdAogewogfQogCitpbmxpbmUgSW5saW5lUmVjdDo6SW5saW5lUmVjdChj
b25zdCBJbmxpbmVMYXlvdXRQb2ludCYgdG9wTGVmdCwgY29uc3QgSW5saW5lTGF5b3V0U2l6ZSYg
c2l6ZSkKKyAgICA6IElubGluZVJlY3QodG9wTGVmdC55KCksIHRvcExlZnQueCgpLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpCit7Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogaW5saW5l
IHZvaWQgSW5saW5lUmVjdDo6aW52YWxpZGF0ZVBvc2l0aW9uKCkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UmVjdC5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlSZWN0LmgKaW5kZXggOTNhYWY2MjhmMmU0
YjhmZGYyYjc1NTJlODk1MjcxNjBkMmFmZWVjNC4uZGU3ODc5NDg4NDZmMDdhZDg5YzU4MGQ2ZDI0
NGMzODMwZjFiMDFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0
cmVlL0Rpc3BsYXlSZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVl
L0Rpc3BsYXlSZWN0LmgKQEAgLTM4LDYgKzM4LDcgQEAgcHVibGljOgogICAgIFJlY3QoKSA9IGRl
ZmF1bHQ7CiAgICAgUmVjdChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRV
bml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCk7CiAgICAgUmVjdChMYXlvdXRQb2ludCB0b3BM
ZWZ0LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCk7CisgICAgUmVjdChjb25z
dCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgY29uc3QgTGF5b3V0U2l6ZSYpOwogICAgIAogICAgIExh
eW91dFVuaXQgdG9wKCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7CkBAIC0x
MTMsNiArMTE0LDExIEBAIGlubGluZSBSZWN0OjpSZWN0KExheW91dFBvaW50IHRvcExlZnQsIExh
eW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQogewogfQogCitpbmxpbmUgUmVjdDo6
UmVjdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkK
KyAgICA6IFJlY3QodG9wTGVmdC55KCksIHRvcExlZnQueCgpLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpCit7Cit9CisKICNpZiBBU1NFUlRfRU5BQkxFRAogaW5saW5lIHZvaWQgUmVjdDo6
aW52YWxpZGF0ZVBvc2l0aW9uKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cAppbmRleCA2ZTA0MjQ1YzEyOWEwMmIzMjJhOGViZTUyODkwZThmMjgxOWJiMmIzLi41Mjg0Nzc1
ZjRiMGJkMjkwYTU3NTc3MThmN2MwMWVlOTg3NTEyMmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuY3BwCkBAIC0xNTAsMTIgKzE1MCwxMyBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUJ1aWxk
ZXI6OgogICAgICAgICBhdXRvIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCA9IHByZXZpb3Vz
TGluZSA/IHByZXZpb3VzTGluZS0+b3ZlcmZsb3dDb250ZW50TGVuZ3RoIDogV1RGOjpudWxsb3B0
OwogICAgICAgICBhdXRvIGluaXRpYWxMaW5lQ29uc3RyYWludHMgPSBDb25zdHJhaW50c0Zvcklu
Rmxvd0NvbnRlbnQgeyBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IGxpbmVMb2dpY2FsVG9wLCBt
YWtlT3B0aW9uYWwodG9MYXlvdXRVbml0KHF1aXJrcygpLmluaXRpYWxMaW5lSGVpZ2h0KCkpKSB9
IH07CiAgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lQnVpbGRlci5sYXlvdXRJbmxpbmVD
b250ZW50KG5lZWRzTGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgaW5p
dGlhbExpbmVDb25zdHJhaW50cywgaXNGaXJzdExpbmUpOwotICAgICAgICBzZXREaXNwbGF5Qm94
ZXNGb3JMaW5lKGxpbmVDb250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKKyAgICAgICAg
YXV0byBsaW5lTG9naWNhbFJlY3QgPSBjcmVhdGVEaXNwbGF5Qm94ZXNGb3JMaW5lQ29udGVudChs
aW5lQ29udGVudCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7CisKICAgICAgICAgYXV0byBsaW5l
Q29udGVudFJhbmdlID0gbGluZUNvbnRlbnQuaW5saW5lSXRlbVJhbmdlOwogICAgICAgICBpZiAo
IWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmVlZHNM
YXlvdXRSYW5nZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2UuZW5kKTsKICAgICAgICAgICAgIGlz
Rmlyc3RMaW5lID0gZmFsc2U7Ci0gICAgICAgICAgICBsaW5lTG9naWNhbFRvcCA9IGxpbmVDb250
ZW50LmxpbmVCb3gubG9naWNhbEJvdHRvbSgpOworICAgICAgICAgICAgbGluZUxvZ2ljYWxUb3Ag
PSBsaW5lTG9naWNhbFJlY3QuYm90dG9tKCk7CiAgICAgICAgICAgICAvLyBXaGVuIHRoZSB0cmFp
bGluZyBjb250ZW50IGlzIHBhcnRpYWwsIHdlIG5lZWQgdG8gcmV1c2UgdGhlIGxhc3QgSW5saW5l
VGV4dEl0ZW0uCiAgICAgICAgICAgICBhdXRvIGxhc3RJbmxpbmVJdGVtTmVlZHNQYXJ0aWFsTGF5
b3V0ID0gbGluZUNvbnRlbnQucGFydGlhbENvbnRlbnQuaGFzVmFsdWUoKTsKICAgICAgICAgICAg
IGlmIChsYXN0SW5saW5lSXRlbU5lZWRzUGFydGlhbExheW91dCkgewpAQCAtMTc4LDcgKzE3OSw3
IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMm
IGlubGluZUl0ZW1zLCBMaW5lQnVpbGRlcjo6CiAgICAgICAgIEFTU0VSVChsaW5lQ29udGVudC5y
dW5zLmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChsaW5lQ29udGVudC5oYXNJbnRydXNpdmVG
bG9hdCk7CiAgICAgICAgIC8vIE1vdmUgdGhlIG5leHQgbGluZSBiZWxvdyB0aGUgaW50cnVzaXZl
IGZsb2F0LgotICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQu
Y29uc3RyYWludHMobGluZUxvZ2ljYWxUb3AsIHRvTGF5b3V0VW5pdChsaW5lQ29udGVudC5saW5l
Qm94LmxvZ2ljYWxCb3R0b20oKSkpOworICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBm
bG9hdGluZ0NvbnRleHQuY29uc3RyYWludHMobGluZUxvZ2ljYWxUb3AsIHRvTGF5b3V0VW5pdChs
aW5lTG9naWNhbFJlY3QuYm90dG9tKCkpKTsKICAgICAgICAgQVNTRVJUKGZsb2F0Q29uc3RyYWlu
dHMubGVmdCB8fCBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0KTsKICAgICAgICAgc3RhdGljIGF1dG8g
aW5pZml0ZVBvaW50ID0gUG9pbnRJbkNvbnRleHRSb290OjptYXgoKTsKICAgICAgICAgLy8gSW4g
Y2FzZSBvZiBsZWZ0IGFuZCByaWdodCBjb25zdHJhaW50cywgd2UgbmVlZCB0byBwaWNrIHRoZSBv
bmUgdGhhdCdzIGNsb3NlciB0byB0aGUgY3VycmVudCBsaW5lLgpAQCAtMzkwLDEwICszOTEsNTQg
QEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRlbnRJZk5l
ZWRlZCgpCiAgICAgfQogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNw
bGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRl
bnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQor
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVSZWN0QW5kTGluZUJveE9mZnNldCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRMaW5lTG9naWNhbFJlY3QoY29uc3QgTGluZUJ1aWxk
ZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkgY29uc3QKK3sKKyAgICAvLyBDb21wdXRlIHRo
ZSBsaW5lIGhlaWdodCBhbmQgdGhlIGxpbmUgYm94IHZlcnRpY2FsIG9mZnNldC4KKyAgICAvLyBU
aGUgbGluZSBoZWlnaHQgaXMgZWl0aGVyIHRoZSBsaW5lLWhlaWdodCB2YWx1ZSAobmVnYXRpdmUg
dmFsdWUgbWVhbnMgbGluZSBoZWlnaHQgaXMgbm90IHNldCkgb3IgdGhlIGZvbnQgbWV0cmljcydz
IGxpbmUgc3BhY2luZy9saW5lIGJveCBoZWlnaHQuCisgICAgLy8gVGhlIGxpbmUgYm94IGlzIHRo
ZW4gcG9zaXRpb25lZCB1c2luZyB0aGUgaGFsZiBsZWFkaW5nIGNlbnRlcmluZy4KKyAgICAvLyAg
IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gIGxpbmUKKyAgICAv
LyB8ICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8g
fCAgICAgICAgICAgICAgICAgICAgfCBsaW5lIHNwYWNpbmcgICAgICAgICAgfAorICAgIC8vIHwg
ICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyB8IC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tICBMaW5l
Qm94CisgICAgLy8gfHwgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgIHwKKyAgICAvLyB8fCAgICB8IGxpbmUgYm94IGhlaWdodCAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgfAorICAgIC8vIHx8LS0tLXYtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLSB8IGFsaWdubWVudCBiYXNlbGluZQorICAgIC8vIHwg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0KKyAg
ICAvLyB8ICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICB8ICAgXgor
ICAgIC8vIHwgICAgICAgICAgICAgICAgICAgIHwgbGluZSBzcGFjaW5nICAgICAgICAgIHwgICB8
CisgICAgLy8gfF9fX19fX19fX19fX19fX19fX19fdl9fX19fX19fX19fX19fX19fX19fX19ffCAg
c2Nyb2xsYWJsZSBvdmVyZmxvdworICAgIC8vCisgICAgaWYgKGxpbmVDb250ZW50LnJ1bnMuaXNF
bXB0eSgpIHx8IGxpbmVDb250ZW50LmxpbmVCb3guaXNMaW5lVmlzdWFsbHlFbXB0eSgpKQorICAg
ICAgICByZXR1cm4geyB7IH0sIHsgbGluZUNvbnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVDb250
ZW50LmxpbmVMb2dpY2FsV2lkdGgsIHsgfSB9IH07CisgICAgYXV0byYgcm9vdFN0eWxlID0gcm9v
dCgpLnN0eWxlKCk7CisgICAgYXV0byYgZm9udE1ldHJpY3MgPSByb290U3R5bGUuZm9udE1ldHJp
Y3MoKTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVTcGFjaW5nID0gZm9udE1ldHJpY3MubGlu
ZVNwYWNpbmcoKTsKKyAgICBhdXRvJiBsaW5lQm94ID0gbGluZUNvbnRlbnQubGluZUJveDsKKyAg
ICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gcm9vdFN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0
aXZlKCkgPyBzdGQ6Om1heChsaW5lQm94LmxvZ2ljYWxIZWlnaHQoKSwgbGluZVNwYWNpbmcpIDog
cm9vdFN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpOworICAgIGF1dG8gbG9naWNhbFJlY3QgPSBE
aXNwbGF5OjpJbmxpbmVSZWN0IHsgbGluZUNvbnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVDb250
ZW50LmxpbmVMb2dpY2FsV2lkdGgsIGxpbmVMb2dpY2FsSGVpZ2h0fTsKKworICAgIGF1dG8gaGFs
ZkxlYWRpbmdPZmZzZXQgPSBbJl0geworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGFzY2VudCA9
IGZvbnRNZXRyaWNzLmFzY2VudCgpOworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQg
PSBmb250TWV0cmljcy5kZXNjZW50KCk7CisgICAgICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBo
YWxmLWxlYWRpbmcKKyAgICAgICAgYXV0byBoYWxmTGVhZGluZyA9IChsaW5lTG9naWNhbEhlaWdo
dCAtIChhc2NlbnQgKyBkZXNjZW50KSkgLyAyOworICAgICAgICAvLyBJbmxpbmUgdHJlZSBoZWln
aHQgaXMgYWxsIGludGVnZXIgYmFzZWQuCisgICAgICAgIHJldHVybiBmbG9vcmYoYXNjZW50ICsg
aGFsZkxlYWRpbmcpOworICAgIH0oKTsKKyAgICBhdXRvIGxpbmVCb3hPZmZzZXQgPSBsb2dpY2Fs
UmVjdC5oZWlnaHQoKSA9PSBsaW5lQm94LmxvZ2ljYWxIZWlnaHQoKSA/IElubGluZUxheW91dFVu
aXQoKSA6IGhhbGZMZWFkaW5nT2Zmc2V0IC0gbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpOwor
ICAgIHJldHVybiB7IGxpbmVCb3hPZmZzZXQsIGxvZ2ljYWxSZWN0IH07Cit9CisKK0Rpc3BsYXk6
OklubGluZVJlY3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNyZWF0ZURpc3BsYXlCb3hlc0Zv
ckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewog
ICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwogICAg
IGF1dG8mIGxpbmVCb3ggPSBsaW5lQ29udGVudC5saW5lQm94OworICAgIGF1dG8gbGluZVJlY3RB
bmRMaW5lQm94T2Zmc2V0ID0gY29tcHV0ZWRMaW5lTG9naWNhbFJlY3QobGluZUNvbnRlbnQpOwor
ICAgIGF1dG8gbGluZUxvZ2ljYWxSZWN0ID0gbGluZVJlY3RBbmRMaW5lQm94T2Zmc2V0LmxvZ2lj
YWxSZWN0OworICAgIGF1dG8gbGluZUJveFZlcnRpY2FsT2Zmc2V0ID0gbGluZVJlY3RBbmRMaW5l
Qm94T2Zmc2V0LmxpbmVCb3hWZXJ0aWNhbE9mZnNldDsKKyAgICBhdXRvIHNjcm9sbGFibGVPdmVy
ZmxvdyA9IERpc3BsYXk6OklubGluZVJlY3QgeyBsaW5lTG9naWNhbFJlY3QudG9wTGVmdCgpLCBz
dGQ6Om1heChsaW5lTG9naWNhbFJlY3Qud2lkdGgoKSwgbGluZUJveC5sb2dpY2FsV2lkdGgoKSks
IHN0ZDo6bWF4KGxpbmVMb2dpY2FsUmVjdC5oZWlnaHQoKSwgbGluZUJveFZlcnRpY2FsT2Zmc2V0
ICsgbGluZUJveC5sb2dpY2FsSGVpZ2h0KCkpIH07CisKICAgICBpZiAoIWxpbmVDb250ZW50LmZs
b2F0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGlu
Z0NvbnRleHQgeyByb290KCksICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUuZmxvYXRpbmdTdGF0ZSgp
IH07CiAgICAgICAgIC8vIE1vdmUgZmxvYXRzIHRvIHRoZWlyIGZpbmFsIHBvc2l0aW9uLgpAQCAt
NDAxLDggKzQ0Niw4IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlC
b3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250CiAgICAgICAgICAgICBhdXRv
JiBmbG9hdEJveCA9IGZsb2F0Q2FuZGlkYXRlLml0ZW0tPmxheW91dEJveCgpOwogICAgICAgICAg
ICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGZsb2F0Qm94
KTsKICAgICAgICAgICAgIC8vIFNldCBzdGF0aWMgcG9zaXRpb24gZmlyc3QuCi0gICAgICAgICAg
ICBhdXRvIHZlcnRpY2FsU3RhdGljUG9zaXRpb24gPSBmbG9hdENhbmRpZGF0ZS5pc0ludHJ1c2l2
ZSA/IGxpbmVCb3gubG9naWNhbFRvcCgpIDogbGluZUJveC5sb2dpY2FsQm90dG9tKCk7Ci0gICAg
ICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lQm94LmxvZ2ljYWxMZWZ0KCksIHZl
cnRpY2FsU3RhdGljUG9zaXRpb24gfSk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsU3RhdGlj
UG9zaXRpb24gPSBmbG9hdENhbmRpZGF0ZS5pc0ludHJ1c2l2ZSA/IGxpbmVMb2dpY2FsUmVjdC50
b3AoKSA6IGxpbmVMb2dpY2FsUmVjdC5ib3R0b20oKTsKKyAgICAgICAgICAgIGRpc3BsYXlCb3gu
c2V0VG9wTGVmdCh7IGxpbmVMb2dpY2FsUmVjdC5sZWZ0KCksIHZlcnRpY2FsU3RhdGljUG9zaXRp
b24gfSk7CiAgICAgICAgICAgICAvLyBGbG9hdCBpdC4KICAgICAgICAgICAgIGRpc3BsYXlCb3gu
c2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChmbG9hdEJveCwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzKSk7CiAgICAgICAgICAgICBmbG9hdGluZ0NvbnRleHQuYXBwZW5k
KGZsb2F0Qm94KTsKQEAgLTQxNyw3ICs0NjIsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udAog
ICAgICAgICBpbml0aWFsQ29udGFpbmdCbG9ja1NpemUgPSBnZW9tZXRyeUZvckJveChyb290KCku
aW5pdGlhbENvbnRhaW5pbmdCbG9jaygpLCBFc2NhcGVSZWFzb246OlN0cm9rZU92ZXJmbG93TmVl
ZHNWaWV3cG9ydEdlb21ldHJ5KS5jb250ZW50Qm94KCkuc2l6ZSgpOwogICAgIGF1dG8mIGlubGlu
ZUNvbnRlbnQgPSBmb3JtYXR0aW5nU3RhdGUuZW5zdXJlRGlzcGxheUlubGluZUNvbnRlbnQoKTsK
ICAgICBhdXRvIGxpbmVJbmRleCA9IGlubGluZUNvbnRlbnQubGluZUJveGVzLnNpemUoKTsKLSAg
ICBhdXRvIGxpbmVJbmtPdmVyZmxvdyA9IGxpbmVCb3guc2Nyb2xsYWJsZU92ZXJmbG93KCk7Cisg
ICAgYXV0byBsaW5lSW5rT3ZlcmZsb3cgPSBzY3JvbGxhYmxlT3ZlcmZsb3c7CiAgICAgLy8gQ29t
cHV0ZSBmaW5hbCBib3ggZ2VvbWV0cnkuCiAgICAgZm9yIChhdXRvJiBsaW5lUnVuIDogbGluZUNv
bnRlbnQucnVucykgewogICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJv
eCgpOwpAQCAtNDQzLDcgKzQ4OCw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNl
dERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250CiAgICAgICAg
ICAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gbGluZVJ1bi5pc0JveCgpID8gbGluZUJveC5pbmxpbmVC
b3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5sb2dpY2FsUmVjdCgpIDogbGluZUJveC5pbmxpbmVS
ZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKTsKICAgICAgICAgICAgIC8vIElubGluZSBib3hlcyBhcmUg
cmVsYXRpdmUgdG8gdGhlIGxpbmUgYm94IHdoaWxlIGZpbmFsIERpc3BsYXk6OlJ1bnMgbmVlZCB0
byBiZSByZWxhdGl2ZSB0byB0aGUgcGFyZW50IERpc3BsYXk6Qm94CiAgICAgICAgICAgICAvLyBG
SVhNRTogU2hvdWxkbid0IHdlIGp1c3QgbGVhdmUgdGhlbSBiZSByZWxhdGl2ZSB0byB0aGUgbGlu
ZSBib3g/Ci0gICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlQnkoeyBsaW5lQm94LmxvZ2ljYWxM
ZWZ0KCksIGxpbmVCb3gubG9naWNhbFRvcCgpIH0pOworICAgICAgICAgICAgbG9naWNhbFJlY3Qu
bW92ZUJ5KHsgbGluZUxvZ2ljYWxSZWN0LmxlZnQoKSwgbGluZUxvZ2ljYWxSZWN0LnRvcCgpICsg
bGluZUJveFZlcnRpY2FsT2Zmc2V0IH0pOwogICAgICAgICAgICAgYXV0byBpbmtPdmVyZmxvdyA9
IGNvbXB1dGVkSW5rT3ZlcmZsb3cobG9naWNhbFJlY3QpOwogICAgICAgICAgICAgbGluZUlua092
ZXJmbG93LmV4cGFuZFRvQ29udGFpbihpbmtPdmVyZmxvdyk7CiAgICAgICAgICAgICBpbmxpbmVD
b250ZW50LnJ1bnMuYXBwZW5kKHsgbGluZUluZGV4LCBsYXlvdXRCb3gsIGxvZ2ljYWxSZWN0LCBp
bmtPdmVyZmxvdywgbGluZVJ1bi5leHBhbnNpb24oKSwgbGluZVJ1bi50ZXh0Q29udGVudCgpIH0p
OwpAQCAtNDU2LDYgKzUwMSw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERp
c3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250CiAgICAgICAgICAg
ICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94
KTsKICAgICAgICAgICAgIGF1dG8mIGlubGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5
b3V0Qm94KGxheW91dEJveCk7CiAgICAgICAgICAgICBhdXRvIHRvcExlZnQgPSBpbmxpbmVCb3gu
bG9naWNhbFJlY3QoKS50b3BMZWZ0KCk7CisgICAgICAgICAgICB0b3BMZWZ0Lm1vdmUoeyB9LCBs
aW5lQm94VmVydGljYWxPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxv
d1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICB0b3BMZWZ0ICs9IGdlb21ldHJ5KCkuaW5G
bG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzKTsKICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh0b0xheW91dFBvaW50KHRv
cExlZnQpKTsKQEAgLTQ2OCwxNyArNTE0LDE3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgd2hl
cmUgdGhlIGxvZ2ljYWwgdG8gcGh5c2ljYWwgdHJhbnNsYXRlIHNob3VsZCBoYXBwZW4uCiAgICAg
YXV0byBjb25zdHJ1Y3REaXNwbGF5TGluZSA9IFsmXSB7Ci0gICAgICAgIC8vIEZJWE1FOiBMYXlv
dXQ6OkxpbmVCb3ggc2hvdWxkIGNvbnRhaW4gYWxsIGlubGluZSBib3hlcyBhbmQgaXQgc2hvdWxk
IG5vdCBoYXZlIG5laXRoZXIgdG9wL2xlZnQgZ2VvbWV0cnkgbm9yIG92ZXJmbG93LiAKLSAgICAg
ICAgYXV0byBsaW5lUmVjdCA9IGxpbmVCb3gubG9naWNhbFJlY3QoKTsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgd2hlcmUgdGhlIGxvZ2ljYWwgdG8gcGh5c2ljYWwgdHJhbnNsYXRlIHNob3Vs
ZCBoYXBwZW4uCiAgICAgICAgIGlmIChhdXRvIGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBs
aW5lQm94Lmhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoKSkgewogICAgICAgICAgICAgLy8gUGFp
bnRpbmcgY29kZSAoc3BlY2lmaWNhbGx5IFRleHRSdW4ncyB4UG9zKSBuZWVkcyB0aGUgYWxpZ25l
ZCBvZmZzZXQgdG8gYmUgYWJsZSB0byBjb21wdXRlIHRhYiBwb3NpdGlvbnMuCi0gICAgICAgICAg
ICBsaW5lUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KCpob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KTsK
KyAgICAgICAgICAgIGxpbmVMb2dpY2FsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KCpob3Jpem9udGFs
QWxpZ25tZW50T2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICBpbmxpbmVDb250ZW50LmxpbmVC
b3hlcy5hcHBlbmQoeyBsaW5lUmVjdCwgbGluZUJveC5zY3JvbGxhYmxlT3ZlcmZsb3coKSwgbGlu
ZUlua092ZXJmbG93LCBsaW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgfSk7CisgICAgICAgIC8v
IEZJWE1FOiBEaXNwbGF5OjpMaW5lQm94IHNob3VsZCByZWFsbHkgYmUgbmFtZWQgRGlzcGxheTo6
TGluZQorICAgICAgICBpbmxpbmVDb250ZW50LmxpbmVCb3hlcy5hcHBlbmQoeyBsaW5lTG9naWNh
bFJlY3QsIHNjcm9sbGFibGVPdmVyZmxvdywgbGluZUlua092ZXJmbG93LCBsaW5lQm94VmVydGlj
YWxPZmZzZXQgKyBsaW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgfSk7CiAgICAgfTsKICAgICBj
b25zdHJ1Y3REaXNwbGF5TGluZSgpOworICAgIHJldHVybiBsaW5lTG9naWNhbFJlY3Q7CiB9CiAK
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmludmFsaWRhdGVGb3JtYXR0aW5nU3RhdGUo
Y29uc3QgSW52YWxpZGF0aW9uU3RhdGUmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgK
aW5kZXggNDBlNTMwMGQ0Yjk3NThjMDYzNGQ5NDVmYTg0M2Q0NzVjYTVkMmMwMS4uYzIzY2ZlZWQ4
OTk5ZjkwMDE4M2YzMzA3YTk2MmI5ZTg5ODAwMWFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oCkBAIC04Nyw3ICs4NywxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZVdp
ZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwog
CiAgICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudElmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZXRE
aXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIGNvbnN0
IEhvcml6b250YWxDb25zdHJhaW50cyYpOworICAgIERpc3BsYXk6OklubGluZVJlY3QgY3JlYXRl
RGlzcGxheUJveGVzRm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CisgICAgc3RydWN0IExpbmVSZWN0QW5k
TGluZUJveE9mZnNldCB7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbGluZUJveFZlcnRpY2Fs
T2Zmc2V0OworICAgICAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IGxvZ2ljYWxSZWN0OworICAgIH07
CisgICAgTGluZVJlY3RBbmRMaW5lQm94T2Zmc2V0IGNvbXB1dGVkTGluZUxvZ2ljYWxSZWN0KGNv
bnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0
ZUZvcm1hdHRpbmdTdGF0ZShjb25zdCBJbnZhbGlkYXRpb25TdGF0ZSYpOwogCiAgICAgY29uc3Qg
SW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0
aW5nU3RhdGUoKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKaW5kZXggMDA3Y2RmOTViYTU5OGM0NTQ2NTU3
YTUwN2ZjNDYwY2E2NGU1YTVmYy4uMWYxYTIxOWI1MzkyZWIxZTc4OWY4YjU4ZjU0YzMyMzhhYjhk
Njg1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJveC5jcHAKQEAgLTMxLDEzICszMSw2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotc3RydWN0IEFzY2VudEFuZERlc2NlbnQgewot
ICAgIElubGluZUxheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYXNjZW50ICsgZGVz
Y2VudDsgfQotCi0gICAgSW5saW5lTGF5b3V0VW5pdCBhc2NlbnQgeyAwIH07Ci0gICAgSW5saW5l
TGF5b3V0VW5pdCBkZXNjZW50IHsgMCB9OwotfTsKLQogc3RydWN0IEhhbmdpbmdDb250ZW50IHsK
IHB1YmxpYzoKICAgICB2b2lkIHJlc2V0KCk7CkBAIC0xMjQsMTYgKzExNyw2IEBAIHN0YXRpYyBP
cHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KGNvbnN0
IExpbmU6OlJ1bkxpc3QmCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotaW5saW5lIHN0YXRpYyBBc2Nl
bnRBbmREZXNjZW50IGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmljcyYgZm9udE1l
dHJpY3MsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpCi17Ci0gICAgSW5saW5l
TGF5b3V0VW5pdCBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKLSAgICBJbmxpbmVMYXlv
dXRVbml0IGRlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7Ci0gICAgLy8gMTAuOC4xIExl
YWRpbmcgYW5kIGhhbGYtbGVhZGluZwotICAgIGF1dG8gaGFsZkxlYWRpbmcgPSAobGluZUxvZ2lj
YWxIZWlnaHQgLSAoYXNjZW50ICsgZGVzY2VudCkpIC8gMjsKLSAgICAvLyBJbmxpbmUgdHJlZSBo
ZWlnaHQgaXMgYWxsIGludGVnZXIgYmFzZWQuCi0gICAgcmV0dXJuIHsgZmxvb3JmKGFzY2VudCAr
IGhhbGZMZWFkaW5nKSwgY2VpbGYoZGVzY2VudCArIGhhbGZMZWFkaW5nKSB9OwotfQotCiBMaW5l
Qm94OjpJbmxpbmVCb3g6OklubGluZUJveChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgRGlz
cGxheTo6SW5saW5lUmVjdCYgcmVjdCwgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSwgSW5saW5l
TGF5b3V0VW5pdCBkZXNjZW50LCBJc0NvbnNpZGVyZWRFbXB0eSBpc0NvbnNpZGVyZWRFbXB0eSkK
ICAgICA6IG1fbGF5b3V0Qm94KG1ha2VXZWFrUHRyKGxheW91dEJveCkpCiAgICAgLCBtX2xvZ2lj
YWxSZWN0KHJlY3QpCkBAIC0xNDMsMjEgKzEyNiwxNSBAQCBMaW5lQm94OjpJbmxpbmVCb3g6Oklu
bGluZUJveChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYg
cgogewogfQogCi1MaW5lQm94OjpMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0
JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIHRvcExl
ZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRl
bnRMb2dpY2FsV2lkdGgsIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZpc3VhbGx5
RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKLSAgICA6IG1fcmVjdCh0b3BMZWZ0LCBsb2dpY2Fs
V2lkdGgsIHsgfSkKLSAgICAsIG1fY29udGVudExvZ2ljYWxXaWR0aChjb250ZW50TG9naWNhbFdp
ZHRoKQorTGluZUJveDo6TGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxXaWR0aCwg
SW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBjb25zdCBMaW5lOjpSdW5MaXN0
JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5RW1wdHksIElzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCisgICAgOiBt
X2xvZ2ljYWxTaXplKGNvbnRlbnRMb2dpY2FsV2lkdGgsIHsgfSkKKyAgICAsIG1faXNMaW5lVmlz
dWFsbHlFbXB0eShpc0xpbmVWaXN1YWxseUVtcHR5ID09IElzTGluZVZpc3VhbGx5RW1wdHk6Olll
cykKICAgICAsIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQpCiB7Ci0gICAgbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0ID0gTGF5b3V0Ojpob3Jpem9u
dGFsQWxpZ25tZW50T2Zmc2V0KHJ1bnMsIHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsb2dp
Y2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCk7Ci0gICAgY29uc3RydWN0SW5saW5lQm94ZXMocnVucywgaXNMaW5lVmlzdWFsbHlFbXB0eSk7
CisgICAgbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0ID0gTGF5b3V0Ojpob3Jpem9udGFsQWxp
Z25tZW50T2Zmc2V0KHJ1bnMsIHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lTG9naWNh
bFdpZHRoLCBjb250ZW50TG9naWNhbFdpZHRoLCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQp
OworICAgIGNvbnN0cnVjdElubGluZUJveGVzKHJ1bnMpOwogICAgIGNvbXB1dGVJbmxpbmVCb3hl
c0xvZ2ljYWxIZWlnaHQoKTsKLSAgICBhbGlnbklubGluZUJveGVzVmVydGljYWxseUFuZENvbXB1
dGVMaW5lQm94SGVpZ2h0KGlzTGluZVZpc3VhbGx5RW1wdHkpOwotICAgIC8vIENvbXB1dGUgc2Ny
b2xsYWJsZSBvdmVyZmxvdy4KLSAgICBtX3Njcm9sbGFibGVPdmVyZmxvdyA9IERpc3BsYXk6Oklu
bGluZVJlY3QgeyB0b3BMZWZ0LCBzdGQ6Om1heChsb2dpY2FsV2lkdGgsIG1fcm9vdElubGluZUJv
eC5sb2dpY2FsV2lkdGgoKSksIHsgfSB9OwotICAgIGF1dG8gbG9naWNhbEJvdHRvbSA9IElubGlu
ZUxheW91dFVuaXQgeyB9OyAKLSAgICBmb3IgKGF1dG8mIGlubGluZUJveEVudHJ5IDogbV9pbmxp
bmVCb3hSZWN0TWFwKQotICAgICAgICBsb2dpY2FsQm90dG9tID0gc3RkOjptYXgobG9naWNhbEJv
dHRvbSwgaW5saW5lQm94RW50cnkudmFsdWUtPmxvZ2ljYWxSZWN0KCkuYm90dG9tKCkpOwotICAg
IG1fc2Nyb2xsYWJsZU92ZXJmbG93LmV4cGFuZFZlcnRpY2FsbHkobG9naWNhbEJvdHRvbSk7Cisg
ICAgYWxpZ25JbmxpbmVCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodCgpOwog
fQogCiBEaXNwbGF5OjpJbmxpbmVSZWN0IExpbmVCb3g6OmlubGluZVJlY3RGb3JUZXh0UnVuKGNv
bnN0IExpbmU6OlJ1biYgcnVuKSBjb25zdApAQCAtMTY4LDE4ICsxNDUsMTcgQEAgRGlzcGxheTo6
SW5saW5lUmVjdCBMaW5lQm94OjppbmxpbmVSZWN0Rm9yVGV4dFJ1bihjb25zdCBMaW5lOjpSdW4m
IHJ1bikgY29uc3QKICAgICByZXR1cm4geyBpbmxpbmVCb3hSZWN0LnRvcCgpLCBtX2hvcml6b250
YWxBbGlnbm1lbnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSkgKyBydW4ubG9n
aWNhbExlZnQoKSwgcnVuLmxvZ2ljYWxXaWR0aCgpLCBpbmxpbmVCb3hSZWN0LmhlaWdodCgpIH07
CiB9CiAKLXZvaWQgTGluZUJveDo6Y29uc3RydWN0SW5saW5lQm94ZXMoY29uc3QgTGluZTo6UnVu
TGlzdCYgcnVucywgSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5KQordm9p
ZCBMaW5lQm94Ojpjb25zdHJ1Y3RJbmxpbmVCb3hlcyhjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5z
KQogewogICAgIGF1dG8gY29uc3RydWN0Um9vdElubGluZUJveCA9IFsmXSB7CiAgICAgICAgIGF1
dG8mIGZvbnRNZXRyaWNzID0gcm9vdCgpLnN0eWxlKCkuZm9udE1ldHJpY3MoKTsKLSAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCByb290SW5saW5lQm94SGVpZ2h0ID0gZm9udE1ldHJpY3MuaGVpZ2h0
KCk7Ci0gICAgICAgIGF1dG8gcm9vdElubGluZUJveFJlY3QgPSBEaXNwbGF5OjpJbmxpbmVSZWN0
IHsgeyB9LCBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRV
bml0IHsgfSksIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgcm9vdElubGluZUJveEhlaWdodCB9Owot
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHJvb3RJbmxpbmVCb3hCYXNlbGluZSA9IGZvbnRNZXRy
aWNzLmFzY2VudCgpOwotICAgICAgICBhdXRvIHJvb3RJbmxpbmVCb3hEZXNjZW50ID0gcm9vdElu
bGluZUJveEhlaWdodCAtIHJvb3RJbmxpbmVCb3hCYXNlbGluZTsKKyAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisgICAgICAgIGF1
dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgeyB9LCBtX2hvcml6b250YWxB
bGlnbm1lbnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSksIGxvZ2ljYWxXaWR0
aCgpLCBsb2dpY2FsSGVpZ2h0IH07CisgICAgICAgIElubGluZUxheW91dFVuaXQgYmFzZWxpbmUg
PSBmb250TWV0cmljcy5hc2NlbnQoKTsKKyAgICAgICAgYXV0byBkZXNjZW50ID0gbG9naWNhbEhl
aWdodCAtIGJhc2VsaW5lOwogICAgICAgICBhdXRvIGxpbmVIYXNJbWFnaW5hcnlTdHJ1dCA9ICFs
YXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpOwotICAgICAgICBhdXRvIHJvb3RJbmxpbmVCb3hJ
c0NvbnNpZGVyZWRFbXB0eSA9IGlzTGluZVZpc3VhbGx5RW1wdHkgPT0gSXNMaW5lVmlzdWFsbHlF
bXB0eTo6Tm8gJiYgbGluZUhhc0ltYWdpbmFyeVN0cnV0ID8gSW5saW5lQm94OjpJc0NvbnNpZGVy
ZWRFbXB0eTo6Tm8gOiBJbmxpbmVCb3g6OklzQ29uc2lkZXJlZEVtcHR5OjpZZXM7Ci0KLSAgICAg
ICAgbV9yb290SW5saW5lQm94ID0gSW5saW5lQm94IHsgcm9vdCgpLCByb290SW5saW5lQm94UmVj
dCwgcm9vdElubGluZUJveEJhc2VsaW5lLCByb290SW5saW5lQm94RGVzY2VudCwgcm9vdElubGlu
ZUJveElzQ29uc2lkZXJlZEVtcHR5IH07CisgICAgICAgIGF1dG8gaXNJbml0aWFsbHlDb25zaWRl
cmVkRW1wdHkgPSAgIW1faXNMaW5lVmlzdWFsbHlFbXB0eSAmJiBsaW5lSGFzSW1hZ2luYXJ5U3Ry
dXQgPyBJbmxpbmVCb3g6OklzQ29uc2lkZXJlZEVtcHR5OjpObyA6IElubGluZUJveDo6SXNDb25z
aWRlcmVkRW1wdHk6OlllczsKKyAgICAgICAgbV9yb290SW5saW5lQm94ID0gSW5saW5lQm94IHsg
cm9vdCgpLCBsb2dpY2FsUmVjdCwgYmFzZWxpbmUsIGRlc2NlbnQsIGlzSW5pdGlhbGx5Q29uc2lk
ZXJlZEVtcHR5IH07CiAgICAgICAgIG1faW5saW5lQm94UmVjdE1hcC5zZXQoJnJvb3QoKSwgJm1f
cm9vdElubGluZUJveCk7CiAgICAgfTsKICAgICBjb25zdHJ1Y3RSb290SW5saW5lQm94KCk7CkBA
IC0yMTksOCArMTk1LDggQEAgdm9pZCBMaW5lQm94Ojpjb25zdHJ1Y3RJbmxpbmVCb3hlcyhjb25z
dCBMaW5lOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHQKICAgICAgICAgICAgICAg
ICBtX2lubGluZUJveExpc3QuYXBwZW5kKFdURk1vdmUoaW5saW5lQm94KSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAg
ICAgICAgYXV0byBpbml0aWFsV2lkdGggPSBjb250ZW50TG9naWNhbFdpZHRoKCkgLSBydW4ubG9n
aWNhbExlZnQoKTsKICAgICAgICAgICAgIGF1dG8gaW5saW5lQm94TG9naWNhbExlZnQgPSBtX2hv
cml6b250YWxBbGlnbm1lbnRPZmZzZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSkgKyBy
dW4ubG9naWNhbExlZnQoKTsKKyAgICAgICAgICAgIGF1dG8gaW5pdGlhbFdpZHRoID0gbG9naWNh
bFdpZHRoKCkgLSBydW4ubG9naWNhbExlZnQoKTsKICAgICAgICAgICAgIEFTU0VSVChpbml0aWFs
V2lkdGggPj0gMCk7CiAgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IGxheW91dEJveC5z
dHlsZSgpLmZvbnRNZXRyaWNzKCk7CiAgICAgICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQgPSBmb250TWV0cmljcy5oZWlnaHQoKTsKQEAgLTMwNiwyOSArMjgyLDIyIEBAIHZv
aWQgTGluZUJveDo6Y29tcHV0ZUlubGluZUJveGVzTG9naWNhbEhlaWdodCgpCiAgICAgfQogfQog
Ci12b2lkIExpbmVCb3g6OmFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVC
b3hIZWlnaHQoSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5KQordm9pZCBM
aW5lQm94OjphbGlnbklubGluZUJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0
KCkKIHsKICAgICAvLyBJbmxpbmUgYm94ZXMgYXJlIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBv
ZiB0aGUgbGluZSBib3ggKGFuZCBub3QgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZWly
IHBhcmVudHMpLgogICAgIC8vIFN0YXJ0aW5nIHdpdGggdGhlIHJvb3QgaW5saW5lIGJveCwgcG9z
aXRpb24gdGhlIGFuY2VzdG9ycyBmaXJzdCBzbyB0aGF0IHRoZSBkZXNjZW5kYW50IGxpbmUgYm94
ZXMgc2VlIGFic29sdXRlIHZlcnRpY2FsIHBvc2l0aW9ucy4KLSAgICBhdXRvJiByb290U3R5bGUg
PSByb290KCkuc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRlbnRMb2dpY2FsQm90dG9tID0gSW5saW5l
TGF5b3V0VW5pdCB7IH07CisgICAgYXV0byBjb250ZW50TG9naWNhbEhlaWdodCA9IElubGluZUxh
eW91dFVuaXQgeyB9OwogICAgIGF1dG8gYWxpZ25Sb290SW5saW5lQm94ID0gWyZdIHsKLSAgICAg
ICAgYXV0byB1c2VkTGluZUhlaWdodCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAgICBp
ZiAoaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVtcHR5OjpObykKLSAgICAg
ICAgICAgIHVzZWRMaW5lSGVpZ2h0ID0gcm9vdFN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpOwot
ICAgICAgICBhdXRvIGFsaWdubWVudEJhc2VsaW5lID0gaGFsZkxlYWRpbmdNZXRyaWNzKHJvb3RT
dHlsZS5mb250TWV0cmljcygpLCB1c2VkTGluZUhlaWdodCkuYXNjZW50OwotICAgICAgICBhdXRv
IHJvb3RJbmxpbmVCb3hUb3BQb3NpdGlvbiA9IGFsaWdubWVudEJhc2VsaW5lIC0gbV9yb290SW5s
aW5lQm94LmJhc2VsaW5lKCk7Ci0gICAgICAgIG1fcm9vdElubGluZUJveC5zZXRMb2dpY2FsVG9w
KHJvb3RJbmxpbmVCb3hUb3BQb3NpdGlvbik7Ci0gICAgICAgIGNvbnRlbnRMb2dpY2FsQm90dG9t
ID0gbV9yb290SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgY29udGVudExvZ2lj
YWxIZWlnaHQgPSBtX3Jvb3RJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpOwogICAgICAgICBmb3Ig
KGF1dG8mIGlubGluZUJveCA6IG1faW5saW5lQm94TGlzdCkgewogICAgICAgICAgICAgYXV0byB2
ZXJ0aWNhbEFsaWduID0gaW5saW5lQm94LT5sYXlvdXRCb3goKS5zdHlsZSgpLnZlcnRpY2FsQWxp
Z24oKTsKICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbEFsaWduID09IFZlcnRpY2FsQWxpZ246OkJv
dHRvbSkgewogICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBhbGlnbiBhbHdheXMgcHVzaGVzIHRo
ZSByb290IGlubGluZSBib3ggZG93bndhcmRzLgogICAgICAgICAgICAgICAgIGF1dG8gb3ZlcmZs
b3cgPSBzdGQ6Om1heCgwLjBmLCBpbmxpbmVCb3gtPmxvZ2ljYWxCb3R0b20oKSAtIG1fcm9vdElu
bGluZUJveC5sb2dpY2FsQm90dG9tKCkpOwogICAgICAgICAgICAgICAgIG1fcm9vdElubGluZUJv
eC5zZXRMb2dpY2FsVG9wKG1fcm9vdElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBvdmVyZmxvdyk7
Ci0gICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxCb3R0b20gKz0gb3ZlcmZsb3c7CisgICAg
ICAgICAgICAgICAgY29udGVudExvZ2ljYWxIZWlnaHQgKz0gb3ZlcmZsb3c7CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT0gVmVydGljYWxBbGlnbjo6VG9wKQotICAgICAg
ICAgICAgICAgIGNvbnRlbnRMb2dpY2FsQm90dG9tID0gc3RkOjptYXgoY29udGVudExvZ2ljYWxC
b3R0b20sIGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBjb250
ZW50TG9naWNhbEhlaWdodCA9IHN0ZDo6bWF4KGNvbnRlbnRMb2dpY2FsSGVpZ2h0LCBpbmxpbmVC
b3gtPmxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIH0KICAgICB9OwogICAgIGFsaWduUm9vdElu
bGluZUJveCgpOwpAQCAtMzU5LDcgKzMyOCw3IEBAIHZvaWQgTGluZUJveDo6YWxpZ25JbmxpbmVC
b3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodChJc0xpbmVWaXN1YWxseUVtCiAg
ICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0g
ICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gY29udGVudExvZ2ljYWxCb3R0b20gLSBp
bmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxU
b3AgPSBjb250ZW50TG9naWNhbEhlaWdodCAtIGlubGluZUJveC0+bG9naWNhbEhlaWdodCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7
CiAgICAgICAgICAgICBhdXRvJiBwYXJlbnRMYXlvdXRCb3ggPSBsYXlvdXRCb3gucGFyZW50KCk7
CkBAIC0zNzcsNyArMzQ2LDcgQEAgdm9pZCBMaW5lQm94OjphbGlnbklubGluZUJveGVzVmVydGlj
YWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KElzTGluZVZpc3VhbGx5RW0KICAgICBhdXRvIGFk
anVzdENvbnRlbnRCb3R0b21JZk5lZWRlZCA9IFsmXSB7CiAgICAgICAgIGlmICghbV9yb290SW5s
aW5lQm94LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byBjb2xs
YXBzZWRDb250ZW50TG9naWNhbFRvcCA9IGNvbnRlbnRMb2dpY2FsQm90dG9tOworICAgICAgICBh
dXRvIGNvbGxhcHNlZENvbnRlbnRMb2dpY2FsVG9wID0gY29udGVudExvZ2ljYWxIZWlnaHQ7CiAg
ICAgICAgIGF1dG8gY29sbGFwc2VkQ29udGVudExvZ2ljYWxCb3R0b20gPSBJbmxpbmVMYXlvdXRV
bml0IHsgfTsKICAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVCb3ggOiBtX2lubGluZUJveExpc3Qp
IHsKICAgICAgICAgICAgIGF1dG8gdmVydGljYWxBbGlnbiA9IGlubGluZUJveC0+bGF5b3V0Qm94
KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CkBAIC0zODksMjQgKzM1OCwxOSBAQCB2b2lkIExp
bmVCb3g6OmFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQo
SXNMaW5lVmlzdWFsbHlFbQogICAgICAgICAgICAgY29sbGFwc2VkQ29udGVudExvZ2ljYWxUb3Ag
PSBzdGQ6Om1pbihjb2xsYXBzZWRDb250ZW50TG9naWNhbFRvcCwgaW5saW5lQm94LT5sb2dpY2Fs
VG9wKCkpOwogICAgICAgICAgICAgY29sbGFwc2VkQ29udGVudExvZ2ljYWxCb3R0b20gPSBzdGQ6
Om1heChjb2xsYXBzZWRDb250ZW50TG9naWNhbEJvdHRvbSwgaW5saW5lQm94LT5sb2dpY2FsQm90
dG9tKCkpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjb2xsYXBzZWRDb250ZW50TG9naWNhbFRv
cCA8PSAwKSB7Ci0gICAgICAgICAgICBjb250ZW50TG9naWNhbEJvdHRvbSA9IGNvbGxhcHNlZENv
bnRlbnRMb2dpY2FsQm90dG9tOworICAgICAgICBpZiAoIWNvbGxhcHNlZENvbnRlbnRMb2dpY2Fs
VG9wKSB7CisgICAgICAgICAgICBjb250ZW50TG9naWNhbEhlaWdodCA9IGNvbGxhcHNlZENvbnRl
bnRMb2dpY2FsQm90dG9tOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGNvbnRlbnRMb2dpY2FsQm90dG9tID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgIGNv
bnRlbnRMb2dpY2FsSGVpZ2h0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAgICAgICAgIGZvciAo
YXV0byYgaW5saW5lQm94IDogbV9pbmxpbmVCb3hMaXN0KSB7CiAgICAgICAgICAgICBpbmxpbmVC
b3gtPnNldExvZ2ljYWxUb3AoaW5saW5lQm94LT5sb2dpY2FsVG9wKCkgLSBjb2xsYXBzZWRDb250
ZW50TG9naWNhbFRvcCk7Ci0gICAgICAgICAgICBjb250ZW50TG9naWNhbEJvdHRvbSA9IHN0ZDo6
bWF4KGNvbnRlbnRMb2dpY2FsQm90dG9tLCBpbmxpbmVCb3gtPmxvZ2ljYWxCb3R0b20oKSk7Cisg
ICAgICAgICAgICBjb250ZW50TG9naWNhbEhlaWdodCA9IHN0ZDo6bWF4KGNvbnRlbnRMb2dpY2Fs
SGVpZ2h0LCBpbmxpbmVCb3gtPmxvZ2ljYWxCb3R0b20oKSk7CiAgICAgICAgIH0KICAgICB9Owog
ICAgIGFkanVzdENvbnRlbnRCb3R0b21JZk5lZWRlZCgpOwotICAgIC8vIENvbXB1dGUgdGhlIGxp
bmUgYm94IGhlaWdodC4gSXQncyBlaXRoZXIgdGhlIGxpbmUtaGVpZ2h0IHZhbHVlIChuZWdhdGl2
ZSB2YWx1ZSBtZWFucyBsaW5lIGhlaWdodCBpdCBub3Qgc2V0KSBvcgotICAgIC8vIG1heGltdW0g
b2YgdGhlIHJvb3QgaW5saW5lIGJveCdzIGJvdHRvbSBhbmQgdGhlIHRvcCBhbGlnbmVkIGNvbnRl
bnQgaGVpZ2h0LgotICAgIGlmIChpc0xpbmVWaXN1YWxseUVtcHR5ID09IElzTGluZVZpc3VhbGx5
RW1wdHk6Ok5vKSB7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbGluZVNwYWNpbmcgPSByb290
U3R5bGUuZm9udE1ldHJpY3MoKS5saW5lU3BhY2luZygpOwotICAgICAgICBhdXRvIGxpbmVCb3hM
b2dpY2FsSGVpZ2h0ID0gIXJvb3RTdHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpID8gcm9v
dFN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpIDogc3RkOjptYXgobGluZVNwYWNpbmcsIGNvbnRl
bnRMb2dpY2FsQm90dG9tKTsKLSAgICAgICAgbV9yZWN0LnNldEhlaWdodChsaW5lQm94TG9naWNh
bEhlaWdodCk7Ci0gICAgfQorICAgIGlmICghbV9pc0xpbmVWaXN1YWxseUVtcHR5KQorICAgICAg
ICBtX2xvZ2ljYWxTaXplLnNldEhlaWdodChjb250ZW50TG9naWNhbEhlaWdodCk7CiB9CiAKIGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBMaW5lQm94Ojpmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQm94LmgKaW5kZXggNWQ3ZDFjYzUxOGJiODFmOGQ4YTdjOGVkYzQ4NjE1Yjky
MjRkMjYwMS4uMWE1NmViNTM5NGRkZGUzZGJmNDk3MWM0OTg1MDk1OTJkMjM4ZmZkYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCb3guaApAQCAtMzgsNiArMzgsMjEgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OwogCisvLyBMaW5lQm94IGNvbnRhaW5zIGFsbCB0aGUgaW5s
aW5lIGJveGVzIGJvdGggaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5LiBJdCBvbmx5IGhhcyB3
aWR0aCBhbmQgaGVpZ2h0IGdlb21ldHJ5LgorLy8KKy8vICAgX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIExpbmUgQm94CisvLyB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0KKy8vIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKy8vIHwgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0t
IFJvb3QgSW5saW5lIEJveAorLy8gfHwgICBfX19fXyAgICBfX18gICAgICBfX18gICAgICAgICAg
fCAgICAgICAgICAgICAgfAorLy8gfHwgIHwgICAgICAgIC8gICBcICAgIC8gICBcICAgICAgICAg
fCAgSW5saW5lIEJveCAgfAorLy8gfHwgIHxfX19fXyAgfCAgICAgfCAgfCAgICAgfCAgICAgICAg
fCAgICAgICAgICAgICAgfCAgICBhc2NlbnQKKy8vIHx8ICB8ICAgICAgIHwgICAgIHwgIHwgICAg
IHwgICAgICAgIHwgICAgICAgICAgICAgIHwKKy8vIHx8X198X19fX19fX19cX19fL19fX19cX19f
L19fX19fX19fX3xfX19fX19fX19fX19fX3xfX19fX19fIGFsaWdubWVudF9iYXNlbGluZQorLy8g
fHwKKy8vIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzY2VudAorLy8gfHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KKy8vIHxfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiBjbGFzcyBMaW5lQm94IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTgwLDU3ICs5NSwzNCBA
QCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCB7
IE5vLCBZZXMgfTsKICAgICBlbnVtIGNsYXNzIElzTGluZVZpc3VhbGx5RW1wdHkgeyBObywgWWVz
IH07Ci0gICAgTGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IElu
bGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwg
SW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBjb25zdCBMaW5lOjpSdW5MaXN0
JiwgSXNMaW5lVmlzdWFsbHlFbXB0eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAg
ICBMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgSW5saW5lTGF5b3V0VW5p
dCBsaW5lTG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgs
IGNvbnN0IExpbmU6OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQpOwogCi0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdC5sZWZ0KCk7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9Ci0gICAgSW5saW5lTGF5
b3V0VW5pdCBsb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnRvcCgpOyB9Ci0gICAg
SW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmJv
dHRvbSgpOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Qud2lkdGgoKTsgfQotICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5oZWlnaHQoKTsgfQotCi0gICAgY29uc3QgRGlzcGxh
eTo6SW5saW5lUmVjdCYgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAg
ICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBzY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGFibGVPdmVyZmxvdzsgfQorICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB9CisgICAg
SW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
U2l6ZS5oZWlnaHQoKTsgfQorICAgIElubGluZUxheW91dFNpemUgbG9naWNhbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CiAKICAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRV
bml0PiBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9u
dGFsQWxpZ25tZW50T2Zmc2V0OyB9CisgICAgYm9vbCBpc0xpbmVWaXN1YWxseUVtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9pc0xpbmVWaXN1YWxseUVtcHR5OyB9CiAKICAgICBjb25zdCBJbmxpbmVC
b3gmIGlubGluZUJveEZvckxheW91dEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QgeyBy
ZXR1cm4gKm1faW5saW5lQm94UmVjdE1hcC5nZXQoJmxheW91dEJveCk7IH0KICAgICBEaXNwbGF5
OjpJbmxpbmVSZWN0IGlubGluZVJlY3RGb3JUZXh0UnVuKGNvbnN0IExpbmU6OlJ1biYpIGNvbnN0
OwogCi0gICAgLy8gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18gbGluZSBib3ggbG9naWNhbCB0b3AKLSAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICBeCi0gICAgLy8gICAgICAgICAgICAgICAgICAgICAgfAotICAgIC8vICAgX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fIHJvb3QgaW5saW5lIGJveAotICAgIC8vICAgXiAgICAg
ICAgICAgICAgICAgIHwKLSAgICAvLyAgIHwgICAgICAgICAgICAgICAgICB8Ci0gICAgLy8gICB8
IHJvb3QgbGluZSBhc2NlbnQgfAotICAgIC8vICAgfCAgICAgICAgICAgICAgICAgIHwKLSAgICAv
LyAgIHYgICAgICAgICAgICAgICAgICB2Ci0gICAgLy8gICBfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18gYWxpZ25tZW50IGJhc2VsaW5lCi0gICAgLy8g
ICBeCi0gICAgLy8gICB8IHJvb3QgbGluZSBkZXNjZW50Ci0gICAgLy8gICB2Ci0gICAgLy8gICBf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotICAgIC8vIF9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGxpbmUgYm94IGxvZ2ljYWwg
Ym90dG9tCiAgICAgSW5saW5lTGF5b3V0VW5pdCBhbGlnbm1lbnRCYXNlbGluZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBtX3Jvb3RJbmxpbmVCb3guYmFz
ZWxpbmUoKTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgY29uc3RydWN0SW5saW5lQm94ZXMoY29u
c3QgTGluZTo6UnVuTGlzdCYsIElzTGluZVZpc3VhbGx5RW1wdHkpOworICAgIHZvaWQgY29uc3Ry
dWN0SW5saW5lQm94ZXMoY29uc3QgTGluZTo6UnVuTGlzdCYpOwogICAgIHZvaWQgY29tcHV0ZUlu
bGluZUJveGVzTG9naWNhbEhlaWdodCgpOwotICAgIHZvaWQgYWxpZ25JbmxpbmVCb3hlc1ZlcnRp
Y2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodChJc0xpbmVWaXN1YWxseUVtcHR5KTsKKyAgICB2
b2lkIGFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoKTsK
IAogICAgIElubGluZUJveCYgaW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYgbGF5b3V0
Qm94KSB7IHJldHVybiAqbV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmbGF5b3V0Qm94KTsgfQogCi0g
ICAgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50TG9naWNhbFdpZHRoOyB9Ci0KICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdDsKICAgICBjb25zdCBCb3gmIHJvb3QoKSBj
b25zdDsKICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBEaXNwbGF5OjpJbmxpbmVSZWN0IG1fcmVjdDsKLSAgICBEaXNwbGF5OjpJbmxpbmVSZWN0
IG1fc2Nyb2xsYWJsZU92ZXJmbG93OwotICAgIElubGluZUxheW91dFVuaXQgbV9jb250ZW50TG9n
aWNhbFdpZHRoIHsgMCB9OworICAgIElubGluZUxheW91dFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAg
ICBib29sIG1faXNMaW5lVmlzdWFsbHlFbXB0eSB7IHRydWUgfTsKIAogICAgIElubGluZUJveCBt
X3Jvb3RJbmxpbmVCb3g7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCA5YTczY2UxNzk2
NTkxMzYyZWE2NTM3MDZkZTU5MWRlNWIwMDJmM2E3Li42NGIzYjgyZDNkNDE0YjAzYzE2NjViM2Vl
NWIzZmMwYzNmOTRmODlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCkBAIC0zMDIsNyArMzAy
LDkgQEAgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50IExpbmVCdWlsZGVyOjpsYXlvdXRJbmxpbmVD
b250ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYKICAgICBhdXRvIGlzTGFzdExpbmUgPSBpc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQoY29tbWl0dGVkUmFuZ2UsIG5lZWRzTGF5b3V0UmFuZ2Uu
ZW5kLCBjb21taXR0ZWRDb250ZW50LnBhcnRpYWxUcmFpbGluZ0NvbnRlbnQuaGFzVmFsdWUoKSk7
CiAgICAgYXV0byBsaW5lSXNWaXN1YWxseUVtcHR5ID0gbV9saW5lLmlzVmlzdWFsbHlFbXB0eSgp
ID8gTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVzIDogTGluZUJveDo6SXNMaW5lVmlz
dWFsbHlFbXB0eTo6Tm87CiAgICAgcmV0dXJuIExpbmVDb250ZW50IHsgY29tbWl0dGVkQ29udGVu
dC5wYXJ0aWFsVHJhaWxpbmdDb250ZW50LCBjb21taXR0ZWRSYW5nZSwgbV9mbG9hdHMsIG1fbGlu
ZS5oYXNJbnRydXNpdmVGbG9hdCgpCi0gICAgICAgICwgTGluZUJveCB7IGZvcm1hdHRpbmdDb250
ZXh0KCksIGxpbmVMb2dpY2FsVG9wTGVmdCwgbV9saW5lLmxpbmVMb2dpY2FsV2lkdGgoKSwgbV9s
aW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbV9saW5lLnJ1bnMoKSwgbGluZUlzVmlzdWFsbHlF
bXB0eQorICAgICAgICAsIGxpbmVMb2dpY2FsVG9wTGVmdAorICAgICAgICAsIG1fbGluZS5saW5l
TG9naWNhbFdpZHRoKCkKKyAgICAgICAgLCBMaW5lQm94IHsgZm9ybWF0dGluZ0NvbnRleHQoKSwg
bV9saW5lLmxpbmVMb2dpY2FsV2lkdGgoKSwgbV9saW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwg
bV9saW5lLnJ1bnMoKSwgbGluZUlzVmlzdWFsbHlFbXB0eQogICAgICAgICAsIGlzTGFzdExpbmUg
PyBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmVCb3g6Oklz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm8gfQogICAgICAgICAsIG1fbGluZS5ydW5zKCkg
fTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4IDQyYWZhNzI4OTlmNDczMGZjYzY3MjkyNTE1
NGM5NmMxMmEzMGRlM2MuLmQwODlmYmY0MzBmYzE0ZWJlMTlkN2UxOGNkNWZkNzU3M2I5ZGI5Y2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtNjEsNiArNjEsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHVzaW5nIEZsb2F0TGlzdCA9IFZlY3RvcjxGbG9hdD47CiAgICAgICAgIGNvbnN0IEZsb2F0TGlz
dCYgZmxvYXRzOwogICAgICAgICBib29sIGhhc0ludHJ1c2l2ZUZsb2F0IHsgZmFsc2UgfTsKKyAg
ICAgICAgSW5saW5lTGF5b3V0UG9pbnQgbG9naWNhbFRvcExlZnQ7CisgICAgICAgIElubGluZUxh
eW91dFVuaXQgbGluZUxvZ2ljYWxXaWR0aDsKICAgICAgICAgY29uc3QgTGluZUJveCBsaW5lQm94
OwogICAgICAgICBjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zOwogICAgIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>