<?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>258493</bug_id>
          
          <creation_ts>2023-06-24 10:14:53 -0700</creation_ts>
          <short_desc>[LFC] Cleanup full LFC codepath</short_desc>
          <delta_ts>2023-07-19 10:34:57 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=259342</see_also>
          <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>ntim</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>1963483</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2023-06-24 10:14:53 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1963484</commentid>
    <comment_count>1</comment_count>
      <attachid>466819</attachid>
    <who name="alan">zalan</who>
    <bug_when>2023-06-24 10:20:52 -0700</bug_when>
    <thetext>Created attachment 466819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1963494</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Nguyen (:ntim)">ntim</who>
    <bug_when>2023-06-24 11:43:41 -0700</bug_when>
    <thetext>It would be nice to clean up everything in Source/WebCore/display as well as it is non-zero maintenance cost (potentially separately).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1963557</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-06-25 21:13:56 -0700</bug_when>
    <thetext>Committed 265506@main (7cc365707c03): &lt;https://commits.webkit.org/265506@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 466819.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1963558</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-06-25 21:14:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/111306194&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>466819</attachid>
            <date>2023-06-24 10:20:52 -0700</date>
            <delta_ts>2023-06-25 21:13:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-258493-20230624102051.patch</filename>
            <type>text/plain</type>
            <size>45681</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSBhMTgzMzBhMDQwYzk3ZDE1OGRmMGU0MTRmYjM1MzAxODQ1YjdlNjY1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJhcmFkbGF5IDx6YWxhbkBhcHBsZS5jb20+CkRhdGU6
IFNhdCwgMjQgSnVuIDIwMjMgMTA6MTU6MDMgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbTEZDXSBD
bGVhbnVwIGZ1bGwgTEZDIGNvZGVwYXRoCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjU4NDkzCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCjEuIEZ1bGwgTEZD
IGNvZGVwYXRoIGhhcyBub3QgYmVlbiBmdW5jdGlvbmFsIGZvciBhIHdoaWxlIG5vdy4KMi4gSW50
ZWdyYXRpb24gY29kZXBhdGggaGFzIGJlY29tZSB0aGUgcHJlZmVycmVkIGZsb3cgdG8gbGF5b3V0
IGNvbnRlbnQuCgoqIFNvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuaDoKKiBT
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0
Lmg6CihXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250
ZW50KToKKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OnVzZWRDb250ZW50SGVp
Z2h0IGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Zs
ZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKFdlYkNvcmU6OkxheW91dDo6RmxleEZvcm1h
dHRpbmdDb250ZXh0OjpsYXlvdXQpOgooV2ViQ29yZTo6TGF5b3V0OjpGbGV4Rm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk6CihXZWJDb3JlOjpMYXlv
dXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudCk6IERlbGV0ZWQu
CihXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6dXNlZENvbnRlbnRIZWln
aHQgY29uc3QpOiBEZWxldGVkLgooV2ViQ29yZTo6TGF5b3V0OjpGbGV4Rm9ybWF0dGluZ0NvbnRl
eHQ6OnNpemVBbmRQbGFjZUZsZXhJdGVtcyk6IERlbGV0ZWQuCihXZWJDb3JlOjpMYXlvdXQ6OkZs
ZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JG
bGV4SXRlbXMpOiBEZWxldGVkLgooV2ViQ29yZTo6TGF5b3V0OjpGbGV4Rm9ybWF0dGluZ0NvbnRl
eHQ6OmxheW91dEluRmxvd0NvbnRlbnRGb3JJbnRlZ3JhdGlvbik6IERlbGV0ZWQuCihXZWJDb3Jl
OjpMYXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzRm9ySW50ZWdyYXRpb24pOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaDoKKiBTb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5jcHA6CihXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRJbkZsb3dBbmRGbG9hdENvbnRlbnQpOgooV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0T2ZGbG93Q29udGVudCk6CihXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMpOgooV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0
SW5GbG93Q29udGVudCk6IERlbGV0ZWQuCihXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXRJbkZsb3dBbmRGbG9hdENvbnRlbnRGb3JJbnRlZ3JhdGlvbik6IERl
bGV0ZWQuCihXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRP
dXRPZkZsb3dDb250ZW50Rm9ySW50ZWdyYXRpb24pOiBEZWxldGVkLgooV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzRm9ySW50ZWdyYXRpb24pOiBEZWxldGVkLgooV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6dXNlZENvbnRlbnRIZWlnaHQgY29uc3QpOiBEZWxldGVkLgooV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRo
Rm9yRm9ybWF0dGluZ1Jvb3QpOiBEZWxldGVkLgooV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250YWxNYXJnaW4pOiBEZWxldGVkLgooV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2lu
KTogRGVsZXRlZC4KKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVIZWlnaHRBbmRNYXJnaW4pOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CiogU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0
dGluZ0dlb21ldHJ5LmNwcDoKKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0dlb21l
dHJ5OjphZGp1c3RNYXJnaW5TdGFydEZvckxpc3RNYXJrZXIgY29uc3QpOiBEZWxldGVkLgoqIFNv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVC
b3hCdWlsZGVyLmNwcDoKKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmFkanVzdE91
dHNpZGVMaXN0TWFya2Vyc1Bvc2l0aW9uKToKKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxk
ZXI6OmFkanVzdE1hcmdpblN0YXJ0Rm9yTGlzdE1hcmtlciBjb25zdCk6CiogU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveEJ1aWxkZXIu
aDoKKiBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNw
bGF5L0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oOgooV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpmb3JtYXR0aW5nR2VvbWV0
cnkgY29uc3QpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9m
bGV4L0xheW91dEludGVncmF0aW9uRmxleExheW91dC5jcHA6CihXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6RmxleExheW91dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgoo
V2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkZsZXhMYXlvdXQ6OmxheW91dCk6CiogU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVM
YXlvdXQuY3BwOgooV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNvbXB1
dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKToKKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9u
OjpMaW5lTGF5b3V0OjpsYXlvdXQpOgotLS0KIFNvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0
aW5nU3RhdGUuaCAgICAgICB8ICAgMiArLQogLi4uL2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0
aW5nQ29udGV4dC5oICAgIHwgICA0ICstCiAuLi4vZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQu
Y3BwICAgICAgICAgICAgfCAxMDQgKy0tLS0tLS0KIC4uLi9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29u
dGV4dC5oICAgICAgICAgICAgICB8ICAxMiArLQogLi4uL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAgICAgICAgIHwgMjQzICstLS0tLS0tLS0tLS0tLS0tLQogLi4uL2lubGluZS9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICAgICAgICAgIHwgIDE4ICstCiAuLi4vaW5saW5lL0lu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgICAgICAgfCAgMTAgLQogLi4uL2lubGluZS9Jbmxp
bmVMaW5lQm94QnVpbGRlci5jcHAgICAgICAgICAgIHwgIDEzICstCiAuLi4vaW5saW5lL0lubGlu
ZUxpbmVCb3hCdWlsZGVyLmggICAgICAgICAgICAgfCAgIDEgKwogLi4uL2Rpc3BsYXkvSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyLmggICAgIHwgICAxIC0KIC4uLi9mbGV4L0xheW91dEludGVn
cmF0aW9uRmxleExheW91dC5jcHAgICAgICB8ICAgNCArLQogLi4uL2lubGluZS9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuY3BwICAgIHwgICA2ICstCiAxMiBmaWxlcyBjaGFuZ2VkLCA0NSBp
bnNlcnRpb25zKCspLCAzNzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1h
dHRpbmdTdGF0ZS5oCmluZGV4IGJiZjU4ZTQ3MDRiMi4uMjA3MWMxZjM4OGIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoK
IAogICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0
U3RhdGU7IH0KIAotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gbGltaXQg
YWNjZXNzIHRvIG11dGF0YWJsZSBnZW9tZXRyeS4KKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBm
aW5kIGEgd2F5IHRvIGxpbWl0IGFjY2VzcyB0byBtdXRhYmxlIGdlb21ldHJ5LgogICAgIEJveEdl
b21ldHJ5JiBib3hHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCk7CiAgICAgLy8gU2luY2Ug
d2UgbGF5b3V0IHRoZSBvdXQtb2YtZmxvdyBib3hlcyBhdCB0aGUgZW5kIG9mIHRoZSBmb3JtYXR0
aW5nIGNvbnRleHQgbGF5b3V0LCBpdCdzIG9rYXkgdG8gc3RvcmUgdGhlbSBpbiB0aGUgZm9ybWF0
dGluZyBzdGF0ZSAtYXMgb3Bwb3NlZCB0byB0aGUgY29udGFpbmluZyBibG9jayBsZXZlbC4KICAg
ICB1c2luZyBPdXRPZkZsb3dCb3hMaXN0ID0gVmVjdG9yPENoZWNrZWRSZWY8Y29uc3QgQm94Pj47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zv
cm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggMmE5MjgyZDVhZjQ2Li5lM2FhNGE1NTgyNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9y
bWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTU0LDEwICs1NCwxMCBAQCBjbGFzcyBGb3Jt
YXR0aW5nQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rm9ybWF0dGluZ0NvbnRleHQo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRJbkZsb3dDb250ZW50KGNvbnN0IENvbnN0cmFp
bnRzRm9ySW5GbG93Q29udGVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0SW5GbG93
Q29udGVudChjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKSB7IH07CiAgICAgdm9p
ZCBsYXlvdXRPdXRPZkZsb3dDb250ZW50KGNvbnN0IENvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29u
dGVudCYpOwogICAgIHZpcnR1YWwgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZElu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHVz
ZWRDb250ZW50SGVpZ2h0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCB1c2Vk
Q29udGVudEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQogCiAgICAgY29uc3QgRWxlbWVu
dEJveCYgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdDsgfQogICAgIExheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250
ZXh0LmNwcAppbmRleCBlOTllYTBhYTJmOTYuLmFiZjUwNmEyMGIxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTUwLDgwICs1MCwyNyBAQCBGbGV4
Rm9ybWF0dGluZ0NvbnRleHQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dChjb25zdCBFbGVtZW50Qm94
JiBmb3JtYXR0aW5nQ29udGV4dAogewogfQogCi12b2lkIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6
bGF5b3V0SW5GbG93Q29udGVudChjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmIGNv
bnN0cmFpbnRzKQordm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dChjb25zdCBDb25z
dHJhaW50c0ZvckZsZXhDb250ZW50JiBjb25zdHJhaW50cykKIHsKLSAgICBjb21wdXRlSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVtcygpOwotICAgIHNpemVBbmRQbGFjZUZsZXhJ
dGVtcyhkb3duY2FzdDxDb25zdHJhaW50c0ZvckZsZXhDb250ZW50Pihjb25zdHJhaW50cykpOwot
fQotCi1MYXlvdXRVbml0IEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6dXNlZENvbnRlbnRIZWlnaHQo
KSBjb25zdAotewotICAgIGF1dG8gY29udGVudFRvcCA9IExheW91dFVuaXQ6Om1heCgpOwotICAg
IGF1dG8gY29udGVudEJvdHRvbSA9IExheW91dFVuaXQ6Om1pbigpOwotICAgIGZvciAoYXV0byYg
ZmxleEl0ZW0gOiBjaGlsZHJlbk9mVHlwZTxCb3g+KHJvb3QoKSkpIHsKLSAgICAgICAgYXV0byBt
YXJnaW5Cb3ggPSBMYXlvdXQ6OkJveEdlb21ldHJ5OjptYXJnaW5Cb3hSZWN0KGdlb21ldHJ5Rm9y
Qm94KGZsZXhJdGVtKSk7Ci0gICAgICAgIGNvbnRlbnRUb3AgPSBzdGQ6Om1pbihjb250ZW50VG9w
LCBtYXJnaW5Cb3gudG9wKCkpOwotICAgICAgICBjb250ZW50Qm90dG9tID0gc3RkOjptYXgoY29u
dGVudEJvdHRvbSwgbWFyZ2luQm94LmJvdHRvbSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6
bWF4KDBfbHUsIGNvbnRlbnRCb3R0b20gLSBjb250ZW50VG9wKTsKLX0KLQotSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cygpCi17Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotdm9pZCBGbGV4Rm9ybWF0
dGluZ0NvbnRleHQ6OnNpemVBbmRQbGFjZUZsZXhJdGVtcyhjb25zdCBDb25zdHJhaW50c0ZvckZs
ZXhDb250ZW50JiBjb25zdHJhaW50cykKLXsKLSAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0
aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvJiBmb3JtYXR0aW5nR2VvbWV0cnkgPSB0
aGlzLT5mb3JtYXR0aW5nR2VvbWV0cnkoKTsKLSAgICBhdXRvIGZsZXhJdGVtTWFpbkF4aXNTdGFy
dCA9IGNvbnN0cmFpbnRzLmhvcml6b250YWwoKS5sb2dpY2FsTGVmdDsKLSAgICBhdXRvIGZsZXhJ
dGVtTWFpbkF4aXNFbmQgPSBmbGV4SXRlbU1haW5BeGlzU3RhcnQ7Ci0gICAgYXV0byBmbGV4SXRl
bUNyb3NBeGlzU3RhcnQgPSBjb25zdHJhaW50cy5sb2dpY2FsVG9wKCk7Ci0gICAgYXV0byBmbGV4
SXRlbUNyb3NBeGlzRW5kID0gZmxleEl0ZW1Dcm9zQXhpc1N0YXJ0OwotICAgIGZvciAoYXV0byYg
ZmxleEl0ZW0gOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50Qm94Pihyb290KCkpKSB7Ci0gICAgICAg
IEFTU0VSVChmbGV4SXRlbS5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBqdXN0IGEgc2ltcGxlLCBsZXQncyBsYXlvdXQgdGhlIGZsZXgg
aXRlbXMgYW5kIHBsYWNlIHRoZW0gbmV4dCB0byBlYWNoIG90aGVyIHNldHVwLgotICAgICAgICBh
dXRvIGludHJpbnNpY1dpZHRocyA9IGZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzRm9yQm94KGZsZXhJdGVtKTsKLSAgICAgICAgYXV0byBmbGV4SXRlbUxvZ2ljYWxXaWR0
aCA9IHN0ZDo6bWluKHN0ZDo6bWF4KGludHJpbnNpY1dpZHRocy0+bWluaW11bSwgY29uc3RyYWlu
dHMuaG9yaXpvbnRhbCgpLmxvZ2ljYWxXaWR0aCksIGludHJpbnNpY1dpZHRocy0+bWF4aW11bSk7
Ci0gICAgICAgIGF1dG8gZmxleEl0ZW1Db25zdHJhaW50cyA9IENvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudCB7IHsgeyB9LCBmbGV4SXRlbUxvZ2ljYWxXaWR0aCB9LCB7IH0gfTsKLQotICAgICAg
ICBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChmbGV4SXRlbSwgbGF5b3V0
U3RhdGUoKSktPmxheW91dEluRmxvd0NvbnRlbnQoZmxleEl0ZW1Db25zdHJhaW50cyk7Ci0KLSAg
ICAgICAgYXV0byBjb21wdXRlRmxleEl0ZW1HZW9tZXRyeSA9IFsmXSB7Ci0gICAgICAgICAgICBh
dXRvJiBmbGV4SXRlbUdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlLmJveEdlb21ldHJ5KGZsZXhJ
dGVtKTsKLQotICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5zZXRMb2dpY2FsVG9wTGVmdChM
YXlvdXRQb2ludCB7IGZsZXhJdGVtTWFpbkF4aXNFbmQsIGZsZXhJdGVtQ3Jvc0F4aXNTdGFydCB9
KTsKLQotICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5zZXRCb3JkZXIoZm9ybWF0dGluZ0dl
b21ldHJ5LmNvbXB1dGVkQm9yZGVyKGZsZXhJdGVtKSk7Ci0gICAgICAgICAgICBmbGV4SXRlbUdl
b21ldHJ5LnNldFBhZGRpbmcoZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkUGFkZGluZyhmbGV4
SXRlbSwgY29uc3RyYWludHMuaG9yaXpvbnRhbCgpLmxvZ2ljYWxXaWR0aCkpOworICAgIGF1dG8g
bG9naWNhbEZsZXhJdGVtcyA9IGNvbnZlcnRGbGV4SXRlbXNUb0xvZ2ljYWxTcGFjZShjb25zdHJh
aW50cyk7CisgICAgYXV0byBmbGV4TGF5b3V0ID0gRmxleExheW91dCB7IHJvb3QoKSB9OwogCi0g
ICAgICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IGZvcm1hdHRpbmdHZW9t
ZXRyeS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4oZmxleEl0ZW0sIGNvbnN0cmFpbnRzLmhvcml6
b250YWwoKSk7Ci0gICAgICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNldEhvcml6b250YWxNYXJn
aW4oeyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVfb3IoMF9sdSksIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVfb3IoMF9sdSkgfSk7CisgICAgYXV0byBsb2dp
Y2FsRmxleENvbnN0cmFpbnRzID0gWyZdIHsKKyAgICAgICAgYXV0byBmbGV4RGlyZWN0aW9uID0g
cm9vdCgpLnN0eWxlKCkuZmxleERpcmVjdGlvbigpOworICAgICAgICBhdXRvIGZsZXhEaXJlY3Rp
b25Jc0lubGluZUF4aXMgPSBmbGV4RGlyZWN0aW9uID09IEZsZXhEaXJlY3Rpb246OlJvdyB8fCBm
bGV4RGlyZWN0aW9uID09IEZsZXhEaXJlY3Rpb246OlJvd1JldmVyc2U7CisgICAgICAgIGF1dG8g
bG9naWNhbFZlcnRpY2FsU3BhY2UgPSBmbGV4RGlyZWN0aW9uSXNJbmxpbmVBeGlzID8gY29uc3Ry
YWludHMuYXZhaWxhYmxlVmVydGljYWxTcGFjZSgpIDogc3RkOjptYWtlX29wdGlvbmFsKGNvbnN0
cmFpbnRzLmhvcml6b250YWwoKS5sb2dpY2FsV2lkdGgpOworICAgICAgICBhdXRvIGxvZ2ljYWxI
b3Jpem9udGFsU3BhY2UgPSBmbGV4RGlyZWN0aW9uSXNJbmxpbmVBeGlzID8gc3RkOjptYWtlX29w
dGlvbmFsKGNvbnN0cmFpbnRzLmhvcml6b250YWwoKS5sb2dpY2FsV2lkdGgpIDogY29uc3RyYWlu
dHMuYXZhaWxhYmxlVmVydGljYWxTcGFjZSgpOwogCi0gICAgICAgICAgICBhdXRvIGNvbXB1dGVk
VmVydGljYWxNYXJnaW4gPSBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bihmbGV4SXRlbSwgY29uc3RyYWludHMuaG9yaXpvbnRhbCgpKTsKLSAgICAgICAgICAgIGZsZXhJ
dGVtR2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZS52YWx1ZV9vcigwX2x1KSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZV9v
cigwX2x1KSB9KTsKKyAgICAgICAgcmV0dXJuIEZsZXhMYXlvdXQ6OkxvZ2ljYWxDb25zdHJhaW50
cyB7IHsgbG9naWNhbEhvcml6b250YWxTcGFjZSwgeyB9LCB7IH0sIHsgfSwgeyB9LCB7IH0gfSwg
eyBsb2dpY2FsVmVydGljYWxTcGFjZSwgeyB9LCB7IH0sIHsgfSwgeyB9LCB7IH0gfSB9OworICAg
IH07CiAKLSAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChm
b3JtYXR0aW5nR2VvbWV0cnkuY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChm
bGV4SXRlbSkpOwotICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5zZXRDb250ZW50Qm94V2lk
dGgoZmxleEl0ZW1Mb2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgZmxleEl0ZW1NYWluQXhpc0Vu
ZD0gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QoZmxleEl0ZW1HZW9tZXRyeSkucmlnaHQoKTsK
LSAgICAgICAgICAgIGZsZXhJdGVtQ3Jvc0F4aXNFbmQgPSBzdGQ6Om1heChmbGV4SXRlbUNyb3NB
eGlzRW5kLCBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChmbGV4SXRlbUdlb21ldHJ5KS5ib3R0
b20oKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIGNvbXB1dGVGbGV4SXRlbUdlb21ldHJ5KCk7Ci0g
ICAgfQotICAgIGF1dG8gZmxleExpbmUgPSBJbmxpbmVSZWN0IHsgZmxleEl0ZW1Dcm9zQXhpc1N0
YXJ0LCBmbGV4SXRlbU1haW5BeGlzU3RhcnQsIGZsZXhJdGVtTWFpbkF4aXNFbmQgLSBmbGV4SXRl
bU1haW5BeGlzU3RhcnQsIGZsZXhJdGVtQ3Jvc0F4aXNFbmQgLSBmbGV4SXRlbUNyb3NBeGlzU3Rh
cnQgfTsKLSAgICBmb3JtYXR0aW5nU3RhdGUuYWRkTGluZShmbGV4TGluZSk7CisgICAgYXV0byBm
bGV4SXRlbVJlY3RzID0gZmxleExheW91dC5sYXlvdXQobG9naWNhbEZsZXhDb25zdHJhaW50cygp
LCBsb2dpY2FsRmxleEl0ZW1zKTsKKyAgICBzZXRGbGV4SXRlbXNHZW9tZXRyeShsb2dpY2FsRmxl
eEl0ZW1zLCBmbGV4SXRlbVJlY3RzLCBjb25zdHJhaW50cyk7CiB9CiAKLXZvaWQgRmxleEZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckZsZXhJdGVt
cygpCitJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkKIHsKLSAgICBhdXRvJiBmb3JtYXR0aW5n
U3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKLSAgICBhdXRvJiBmb3JtYXR0aW5nR2Vv
bWV0cnkgPSB0aGlzLT5mb3JtYXR0aW5nR2VvbWV0cnkoKTsKLSAgICBmb3IgKGF1dG8mIGZsZXhJ
dGVtIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudEJveD4ocm9vdCgpKSkgewotICAgICAgICBpZiAo
Zm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goZmxleEl0ZW0p
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5zZXRJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGZsZXhJdGVtLCBmb3JtYXR0aW5nR2VvbWV0cnku
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhmbGV4SXRlbSkpOwotICAgIH0KKyAgICByZXR1cm4g
eyB9OwogfQogCiBGbGV4TGF5b3V0OjpMb2dpY2FsRmxleEl0ZW1zIEZsZXhGb3JtYXR0aW5nQ29u
dGV4dDo6Y29udmVydEZsZXhJdGVtc1RvTG9naWNhbFNwYWNlKGNvbnN0IENvbnN0cmFpbnRzRm9y
RmxleENvbnRlbnQmIGNvbnN0cmFpbnRzKQpAQCAtMzM2LDI4ICsyODMsNSBAQCB2b2lkIEZsZXhG
b3JtYXR0aW5nQ29udGV4dDo6c2V0RmxleEl0ZW1zR2VvbWV0cnkoY29uc3QgRmxleExheW91dDo6
TG9naWNhbEZsZXhJdAogICAgIH0KIH0KIAotdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dEluRmxvd0NvbnRlbnRGb3JJbnRlZ3JhdGlvbihjb25zdCBDb25zdHJhaW50c0ZvckZsZXhD
b250ZW50JiBjb25zdHJhaW50cykKLXsKLSAgICBhdXRvIGxvZ2ljYWxGbGV4SXRlbXMgPSBjb252
ZXJ0RmxleEl0ZW1zVG9Mb2dpY2FsU3BhY2UoY29uc3RyYWludHMpOwotICAgIGF1dG8gZmxleExh
eW91dCA9IEZsZXhMYXlvdXQgeyByb290KCkgfTsKLQotICAgIGF1dG8gbG9naWNhbEZsZXhDb25z
dHJhaW50cyA9IFsmXSB7Ci0gICAgICAgIGF1dG8gZmxleERpcmVjdGlvbiA9IHJvb3QoKS5zdHls
ZSgpLmZsZXhEaXJlY3Rpb24oKTsKLSAgICAgICAgYXV0byBmbGV4RGlyZWN0aW9uSXNJbmxpbmVB
eGlzID0gZmxleERpcmVjdGlvbiA9PSBGbGV4RGlyZWN0aW9uOjpSb3cgfHwgZmxleERpcmVjdGlv
biA9PSBGbGV4RGlyZWN0aW9uOjpSb3dSZXZlcnNlOwotICAgICAgICBhdXRvIGxvZ2ljYWxWZXJ0
aWNhbFNwYWNlID0gZmxleERpcmVjdGlvbklzSW5saW5lQXhpcyA/IGNvbnN0cmFpbnRzLmF2YWls
YWJsZVZlcnRpY2FsU3BhY2UoKSA6IHN0ZDo6bWFrZV9vcHRpb25hbChjb25zdHJhaW50cy5ob3Jp
em9udGFsKCkubG9naWNhbFdpZHRoKTsKLSAgICAgICAgYXV0byBsb2dpY2FsSG9yaXpvbnRhbFNw
YWNlID0gZmxleERpcmVjdGlvbklzSW5saW5lQXhpcyA/IHN0ZDo6bWFrZV9vcHRpb25hbChjb25z
dHJhaW50cy5ob3Jpem9udGFsKCkubG9naWNhbFdpZHRoKSA6IGNvbnN0cmFpbnRzLmF2YWlsYWJs
ZVZlcnRpY2FsU3BhY2UoKTsKLQotICAgICAgICByZXR1cm4gRmxleExheW91dDo6TG9naWNhbENv
bnN0cmFpbnRzIHsgeyBsb2dpY2FsSG9yaXpvbnRhbFNwYWNlLCB7IH0sIHsgfSwgeyB9LCB7IH0s
IHsgfSB9LCB7IGxvZ2ljYWxWZXJ0aWNhbFNwYWNlLCB7IH0sIHsgfSwgeyB9LCB7IH0sIHsgfSB9
IH07Ci0gICAgfTsKLQotICAgIGF1dG8gZmxleEl0ZW1SZWN0cyA9IGZsZXhMYXlvdXQubGF5b3V0
KGxvZ2ljYWxGbGV4Q29uc3RyYWludHMoKSwgbG9naWNhbEZsZXhJdGVtcyk7Ci0gICAgc2V0Rmxl
eEl0ZW1zR2VvbWV0cnkobG9naWNhbEZsZXhJdGVtcywgZmxleEl0ZW1SZWN0cywgY29uc3RyYWlu
dHMpOwotfQotCi1JbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZsZXhGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9ySW50ZWdyYXRpb24oKQotewot
ICAgIHJldHVybiB7IH07Ci19Ci0KIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGlu
Z0NvbnRleHQuaAppbmRleCAzYjRlZjRlZTk5YmYuLmVkMDFlMDU4MTM0MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0
aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDIsMjAgKzQyLDE0IEBAIGNsYXNz
IEZsZXhGb3JtYXR0aW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dCB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChGbGV4Rm9ybWF0dGluZ0NvbnRleHQpOwogcHVi
bGljOgogICAgIEZsZXhGb3JtYXR0aW5nQ29udGV4dChjb25zdCBFbGVtZW50Qm94JiBmb3JtYXR0
aW5nQ29udGV4dFJvb3QsIEZsZXhGb3JtYXR0aW5nU3RhdGUmKTsKLSAgICB2b2lkIGxheW91dElu
Rmxvd0NvbnRlbnQoY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50Jikgb3ZlcnJpZGU7
Ci0gICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMoKSBvdmVycmlkZTsKLSAgICBMYXlvdXRVbml0IHVzZWRDb250ZW50SGVpZ2h0KCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGxheW91dChjb25zdCBDb25zdHJhaW50c0ZvckZs
ZXhDb250ZW50Jik7CisgICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMoKTsKIAogICAgIGNvbnN0IEZsZXhGb3JtYXR0aW5nR2VvbWV0
cnkmIGZvcm1hdHRpbmdHZW9tZXRyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmxleEZvcm1h
dHRpbmdHZW9tZXRyeTsgfQogICAgIGNvbnN0IEZvcm1hdHRpbmdRdWlya3MmIGZvcm1hdHRpbmdR
dWlya3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZsZXhGb3JtYXR0aW5nUXVpcmtzOyB9CiAK
LSAgICB2b2lkIGxheW91dEluRmxvd0NvbnRlbnRGb3JJbnRlZ3JhdGlvbihjb25zdCBDb25zdHJh
aW50c0ZvckZsZXhDb250ZW50Jik7Ci0gICAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb21w
dXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JJbnRlZ3JhdGlvbigpOwotCiBwcml2YXRl
OgotICAgIHZvaWQgc2l6ZUFuZFBsYWNlRmxleEl0ZW1zKGNvbnN0IENvbnN0cmFpbnRzRm9yRmxl
eENvbnRlbnQmKTsKLSAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9y
RmxleEl0ZW1zKCk7Ci0KICAgICBGbGV4TGF5b3V0OjpMb2dpY2FsRmxleEl0ZW1zIGNvbnZlcnRG
bGV4SXRlbXNUb0xvZ2ljYWxTcGFjZShjb25zdCBDb25zdHJhaW50c0ZvckZsZXhDb250ZW50Jik7
CiAgICAgdm9pZCBzZXRGbGV4SXRlbXNHZW9tZXRyeShjb25zdCBGbGV4TGF5b3V0OjpMb2dpY2Fs
RmxleEl0ZW1zJiwgY29uc3QgRmxleExheW91dDo6TG9naWNhbEZsZXhJdGVtUmVjdHMmLCBjb25z
dCBDb25zdHJhaW50c0ZvckZsZXhDb250ZW50Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA2MjFjZjE3YjRlY2MuLjEwMDY4YTMz
MDk5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
LmNwcApAQCAtODQsOTAgKzg0LDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBCb3gqIG5leHRJbmxp
bmVMZXZlbEJveFRvTGF5b3V0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgIHJldHVy
biBudWxscHRyOwogfQogCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZs
b3dDb250ZW50KGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgY29uc3RyYWludHMp
Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0g
PDwgIltTdGFydF0gLT4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCAtPiBmb3JtYXR0aW5nIHJv
b3QoIiA8PCAmcm9vdCgpIDw8ICIpIik7Ci0gICAgQVNTRVJUKHJvb3QoKS5oYXNJbkZsb3dPckZs
b2F0aW5nQ2hpbGQoKSk7Ci0KLSAgICBhdXRvKiBsYXlvdXRCb3ggPSByb290KCkuZmlyc3RJbkZs
b3dPckZsb2F0aW5nQ2hpbGQoKTsKLSAgICAvLyAxLiBWaXNpdCBlYWNoIGlubGluZSBib3ggYW5k
IHBhcnRpYWxseSBjb21wdXRlIHRoZWlyIGdlb21ldHJ5IChtYXJnaW5zLCBwYWRkaW5nIGFuZCBi
b3JkZXJzKS4KLSAgICAvLyAyLiBDb2xsZWN0IHRoZSBpbmxpbmUgaXRlbXMgKGZsYXR0ZW4gdGhl
IHRoZSBsYXlvdXQgdHJlZSkgYW5kIHBsYWNlIHRoZW0gb24gbGluZXMgaW4gYmlkaXJlY3Rpb25h
bCBvcmRlci4gCi0gICAgd2hpbGUgKGxheW91dEJveCkgewotICAgICAgICBBU1NFUlQobGF5b3V0
Qm94LT5pc0lubGluZUxldmVsQm94KCkgfHwgbGF5b3V0Qm94LT5pc0Zsb2F0aW5nUG9zaXRpb25l
ZCgpKTsKLQotICAgICAgICBpZiAobGF5b3V0Qm94LT5pc0F0b21pY0lubGluZUxldmVsQm94KCkg
fHwgbGF5b3V0Qm94LT5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICAvLyBJ
bmxpbmUtYmxvY2tzLCBpbmxpbmUtdGFibGVzIGFuZCByZXBsYWNlZCBlbGVtZW50cyAoaW1nLCB2
aWRlbykgY2FuIGJlIHNpemVkIGJ1dCBub3QgeWV0IHBvc2l0aW9uZWQuCi0gICAgICAgICAgICBp
ZiAoaXM8RWxlbWVudEJveD4obGF5b3V0Qm94KSAmJiBsYXlvdXRCb3gtPmVzdGFibGlzaGVzRm9y
bWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChsYXlvdXRCb3gtPmlz
SW5saW5lQmxvY2tCb3goKSB8fCBsYXlvdXRCb3gtPmlzSW5saW5lVGFibGVCb3goKSB8fCBsYXlv
dXRCb3gtPmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwotICAgICAgICAgICAgICAgIGF1dG8mIGZv
cm1hdHRpbmdSb290ID0gZG93bmNhc3Q8RWxlbWVudEJveD4oKmxheW91dEJveCk7Ci0gICAgICAg
ICAgICAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcoZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFp
bnRzLmhvcml6b250YWwoKSk7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZVdpZHRoQW5kTWFyZ2lu
KGZvcm1hdHRpbmdSb290LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKCkpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKGZvcm1hdHRpbmdSb290Lmhhc0NoaWxkKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRp
bmdDb250ZXh0KGZvcm1hdHRpbmdSb290LCBsYXlvdXRTdGF0ZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGZvcm1hdHRpbmdSb290Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0NvbnRl
bnQoZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGZvcm1h
dHRpbmdSb290KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXB1dGVIZWlnaHRBbmRNYXJnaW4o
Zm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRzLmhvcml6b250YWwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRPdXRPZkZsb3dDb250ZW50KGZvcm1hdHRp
bmdHZW9tZXRyeSgpLmNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudChmb3JtYXR0aW5nUm9v
dCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBjb21wdXRl
SGVpZ2h0QW5kTWFyZ2luKGZvcm1hdHRpbmdSb290LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKCkp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBSZXBsYWNlZCBhbmQg
b3RoZXIgdHlwZSBvZiBsZWFmIGF0b21pYyBpbmxpbmUgYm94ZXMuCi0gICAgICAgICAgICAgICAg
Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmcoKmxheW91dEJveCwgY29uc3RyYWludHMuaG9yaXpvbnRh
bCgpKTsKLSAgICAgICAgICAgICAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4oKmxheW91dEJveCwg
Y29uc3RyYWludHMuaG9yaXpvbnRhbCgpKTsKLSAgICAgICAgICAgICAgICBjb21wdXRlSGVpZ2h0
QW5kTWFyZ2luKCpsYXlvdXRCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LT5pc0xpbmVCcmVha0JveCgpKSB7
Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdl
b21ldHJ5KCpsYXlvdXRCb3gpOwotICAgICAgICAgICAgYm94R2VvbWV0cnkuc2V0SG9yaXpvbnRh
bE1hcmdpbih7IH0pOwotICAgICAgICAgICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKHsgfSk7Ci0g
ICAgICAgICAgICBib3hHZW9tZXRyeS5zZXRQYWRkaW5nKHsgfSk7Ci0gICAgICAgICAgICBib3hH
ZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoeyB9KTsKLSAgICAgICAgICAgIGJveEdlb21ldHJ5
LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LT5p
c0lubGluZUJveCgpKSB7Ci0gICAgICAgICAgICAvLyBUZXh0IHdyYXBwZXIgYm94ZXMgKGFub255
bW91cyBpbmxpbmUgbGV2ZWwgYm94ZXMpIGRvbid0IGhhdmUgYm94IGdlb21ldHJpZXMgKHRoZXkg
b25seSBnZW5lcmF0ZSBib3hlcykuCi0gICAgICAgICAgICBpZiAoIWxheW91dEJveC0+aXNJbmxp
bmVUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJbmxpbmUgYm94ZXMgKDxzcGFuPikg
Y2FuJ3QgZ2V0IHNpemVkL3Bvc2l0aW9uZWQgeWV0LiBBdCB0aGlzIHBvaW50IHdlIGNhbiBvbmx5
IGNvbXB1dGUgdGhlaXIgbWFyZ2lucywgYm9yZGVycyBhbmQgcGFkZGluZy4KLSAgICAgICAgICAg
ICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZygqbGF5b3V0Qm94LCBjb25zdHJhaW50cy5ob3Jp
em9udGFsKCkpOwotICAgICAgICAgICAgICAgIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKCpsYXlv
dXRCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwoKSk7Ci0gICAgICAgICAgICAgICAgZm9ybWF0
dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoKmxheW91dEJveCkuc2V0VmVydGljYWxNYXJnaW4oeyB9
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLQotICAgICAgICBsYXlvdXRCb3ggPSBuZXh0SW5saW5lTGV2ZWxCb3hUb0xh
eW91dCgqbGF5b3V0Qm94LCByb290KCkpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUcmFuc2l0
aW9uIHRvIG5vbi1mb3JtYXR0aW5nIHN0YXRlIGJhc2VkIGlubGluZSBjb250ZW50LgotICAgIGF1
dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGZvcm1hdHRpbmdTdGF0ZSgpOwotICAgIGlubGlu
ZUZvcm1hdHRpbmdTdGF0ZS5jbGVhcklubGluZUl0ZW1zKCk7Ci0gICAgYXV0byBuZWVkc0xheW91
dFN0YXJ0UG9zaXRpb24gPSAhbV9saW5lRGFtYWdlIHx8ICFtX2xpbmVEYW1hZ2UtPnN0YXJ0KCkg
PyBJbmxpbmVJdGVtUG9zaXRpb24oKSA6IG1fbGluZURhbWFnZS0+c3RhcnQoKS0+aW5saW5lSXRl
bVBvc2l0aW9uOwotICAgIGF1dG8gbmVlZHNJbmxpbmVJdGVtc1VwZGF0ZSA9IGlubGluZUZvcm1h
dHRpbmdTdGF0ZS5pbmxpbmVJdGVtcygpLmlzRW1wdHkoKSB8fCBtX2xpbmVEYW1hZ2U7Ci0gICAg
aWYgKG5lZWRzSW5saW5lSXRlbXNVcGRhdGUpCi0gICAgICAgIElubGluZUl0ZW1zQnVpbGRlciB7
IHJvb3QoKSwgaW5saW5lRm9ybWF0dGluZ1N0YXRlIH0uYnVpbGQobmVlZHNMYXlvdXRTdGFydFBv
c2l0aW9uKTsKLSAgICAvLyBGSVhNRTogTGV0IHRoZSBjYWxsZXIgcGFzcyBpbiB0aGUgYmxvY2sg
bGF5b3V0IHN0YXRlLiAKLSAgICBhdXRvIGZsb2F0aW5nU3RhdGUgPSBGbG9hdGluZ1N0YXRlIHsg
Rm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxDb250YWluaW5nQmxvY2socm9vdCgpKSB9OwotICAg
IGF1dG8gcGFyZW50QmxvY2tMYXlvdXRTdGF0ZSA9IEJsb2NrTGF5b3V0U3RhdGUgeyBmbG9hdGlu
Z1N0YXRlLCB7IH0gfTsKLSAgICBhdXRvIGlubGluZUxheW91dFN0YXRlID0gSW5saW5lTGF5b3V0
U3RhdGUgeyBwYXJlbnRCbG9ja0xheW91dFN0YXRlLCB7IH0gfTsKLSAgICBhdXRvJiBpbmxpbmVJ
dGVtcyA9IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5pbmxpbmVJdGVtcygpOwotICAgIGF1dG8gbmVl
ZHNMYXlvdXRSYW5nZSA9IElubGluZUl0ZW1SYW5nZSB7IG5lZWRzTGF5b3V0U3RhcnRQb3NpdGlv
biwgeyBpbmxpbmVJdGVtcy5zaXplKCksIDAgfSB9OwotCi0gICAgYXV0byBwcmV2aW91c0xpbmUg
PSBbJl0oKSAtPiBzdGQ6Om9wdGlvbmFsPFByZXZpb3VzTGluZT4gewotICAgICAgICAvLyBGSVhN
RTogUG9wdWxhdGUgaW5saW5lIGRpc3BsYXkgY29udGVudC4KLSAgICAgICAgYXV0byBkaXNwbGF5
TGluZXMgPSBJbmxpbmVEaXNwbGF5OjpMaW5lcyB7IH07Ci0gICAgICAgIGF1dG8gZGlzcGxheUJv
eGVzID0gSW5saW5lRGlzcGxheTo6Qm94ZXMgeyB9OwotICAgICAgICBpZiAoZGlzcGxheUxpbmVz
LmlzRW1wdHkoKSB8fCBkaXNwbGF5Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgYXV0byYgbGFzdERpc3BsYXlCb3ggPSBkaXNwbGF5Qm94ZXMubGFzdCgp
OwotICAgICAgICBhdXRvIGxhc3RMaW5lSW5kZXggPSBkaXNwbGF5TGluZXMuc2l6ZSgpIC0gMTsg
Ci0gICAgICAgIHJldHVybiBQcmV2aW91c0xpbmUgeyBsYXN0TGluZUluZGV4LCB7IH0sIGxhc3RE
aXNwbGF5Qm94LmlzTGluZUJyZWFrKCksIGxhc3REaXNwbGF5Qm94LnN0eWxlKCkuZGlyZWN0aW9u
KCksIHsgfSB9OwotICAgIH07Ci0gICAgYXV0byBkaXNwbGF5Q29udGVudCA9IGxpbmVMYXlvdXQo
aW5saW5lSXRlbXMsIG5lZWRzTGF5b3V0UmFuZ2UsIHByZXZpb3VzTGluZSgpLCB7IGNvbnN0cmFp
bnRzLCB7IH0gfSwgaW5saW5lTGF5b3V0U3RhdGUpLmRpc3BsYXlDb250ZW50OwotICAgIGNvbXB1
dGVTdGF0aWNQb3NpdGlvbkZvck91dE9mRmxvd0NvbnRlbnQoaW5saW5lRm9ybWF0dGluZ1N0YXRl
Lm91dE9mRmxvd0JveGVzKCksIGNvbnN0cmFpbnRzLCBkaXNwbGF5Q29udGVudCwgaW5saW5lTGF5
b3V0U3RhdGUucGFyZW50QmxvY2tMYXlvdXRTdGF0ZSgpLmZsb2F0aW5nU3RhdGUoKSk7Ci0gICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltFbmRd
IC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4gZm9ybWF0dGluZyByb290KCIgPDwgJnJv
b3QoKSA8PCAiKSIpOwotfQotCi1JbmxpbmVMYXlvdXRSZXN1bHQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmxheW91dEluRmxvd0FuZEZsb2F0Q29udGVudEZvckludGVncmF0aW9uKGNvbnN0IENv
bnN0cmFpbnRzRm9ySW5saW5lQ29udGVudCYgY29uc3RyYWludHMsIElubGluZUxheW91dFN0YXRl
JiBpbmxpbmVMYXlvdXRTdGF0ZSkKK0lubGluZUxheW91dFJlc3VsdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6bGF5b3V0SW5GbG93QW5kRmxvYXRDb250ZW50KGNvbnN0IENvbnN0cmFpbnRzRm9y
SW5saW5lQ29udGVudCYgY29uc3RyYWludHMsIElubGluZUxheW91dFN0YXRlJiBpbmxpbmVMYXlv
dXRTdGF0ZSkKIHsKICAgICBpZiAoIXJvb3QoKS5oYXNJbkZsb3dDaGlsZCgpKSB7CiAgICAgICAg
IC8vIEZsb2F0IGFuZC9vciBvdXQtb2YtZmxvdyBvbmx5IGNvbnRlbnQgZG9lcyBub3Qgc3VwcG9y
dCBwYXJ0aWFsIGxheW91dC4KQEAgLTE5NiwxMyArMTEzLDEzIEBAIElubGluZUxheW91dFJlc3Vs
dCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93QW5kRmxvYXRDb250ZW50Rm9y
SW50ZWdyCiAgICAgcmV0dXJuIGxpbmVMYXlvdXQoaW5saW5lSXRlbXMsIG5lZWRzTGF5b3V0UmFu
Z2UsIHByZXZpb3VzTGluZSgpLCBjb25zdHJhaW50cywgaW5saW5lTGF5b3V0U3RhdGUpOwogfQog
Ci12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50Rm9y
SW50ZWdyYXRpb24oY29uc3QgQ29uc3RyYWludHNGb3JJbmxpbmVDb250ZW50JiBjb25zdHJhaW50
cywgSW5saW5lTGF5b3V0U3RhdGUmIGlubGluZUxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVEaXNw
bGF5OjpDb250ZW50JiBpbmxpbmVEaXNwbGF5Q29udGVudCkKK3ZvaWQgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmxheW91dE91dE9mRmxvd0NvbnRlbnQoY29uc3QgQ29uc3RyYWludHNGb3JJbmxp
bmVDb250ZW50JiBjb25zdHJhaW50cywgSW5saW5lTGF5b3V0U3RhdGUmIGlubGluZUxheW91dFN0
YXRlLCBjb25zdCBJbmxpbmVEaXNwbGF5OjpDb250ZW50JiBpbmxpbmVEaXNwbGF5Q29udGVudCkK
IHsKICAgICAvLyBDb2xsZWN0aW5nIG91dC1vZi1mbG93IGJveGVzIGhhcHBlbnMgZHVyaW5nIHRo
ZSBpbi1mbG93IHBoYXNlLgogICAgIGNvbXB1dGVTdGF0aWNQb3NpdGlvbkZvck91dE9mRmxvd0Nv
bnRlbnQoZm9ybWF0dGluZ1N0YXRlKCkub3V0T2ZGbG93Qm94ZXMoKSwgY29uc3RyYWludHMsIGlu
bGluZURpc3BsYXlDb250ZW50LCBpbmxpbmVMYXlvdXRTdGF0ZS5wYXJlbnRCbG9ja0xheW91dFN0
YXRlKCkuZmxvYXRpbmdTdGF0ZSgpKTsKIH0KIAotSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Rm9ySW50ZWdyYXRpb24oKQorSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkKIHsKICAgICBh
dXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBmb3JtYXR0aW5nU3RhdGUoKTsKICAgICBpZiAo
bV9saW5lRGFtYWdlKQpAQCAtMjI0LDEyICsxNDEsNiBAQCBJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3Ry
YQogICAgIHJldHVybiBjb25zdHJhaW50czsKIH0KIAotTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6dXNlZENvbnRlbnRIZWlnaHQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBQ
b3B1bGF0ZSBhbmQgdXNlIGlubGluZSBkaXNwbGF5IGNvbnRlbnQuCi0gICAgcmV0dXJuIHsgfTsK
LX0KLQogc3RhdGljIElubGluZUl0ZW1Qb3NpdGlvbiBsZWFkaW5nSW5saW5lSXRlbVBvc2l0aW9u
Rm9yTmV4dExpbmUoSW5saW5lSXRlbVBvc2l0aW9uIGxpbmVDb250ZW50RW5kLCBzdGQ6Om9wdGlv
bmFsPElubGluZUl0ZW1Qb3NpdGlvbj4gcHJldmlvdXNMaW5lVHJhaWxpbmdJbmxpbmVJdGVtUG9z
aXRpb24sIElubGluZUl0ZW1Qb3NpdGlvbiBsYXlvdXRSYW5nZUVuZCkKIHsKICAgICBpZiAoIXBy
ZXZpb3VzTGluZVRyYWlsaW5nSW5saW5lSXRlbVBvc2l0aW9uKQpAQCAtMzU2LDY4ICsyNjcsNiBA
QCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljUG9zaXRpb25Gb3JP
dXRPZkZsb3dDb250ZW50KGNvbnN0IEZvcgogICAgIH0KIH0KIAotSW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzKCkKLXsKLSAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0
aW5nU3RhdGUoKTsKLSAgICBpZiAoZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMoKSkKLSAgICAgICAgcmV0dXJuICpmb3JtYXR0aW5nU3RhdGUuaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cygpOwotCi0gICAgaWYgKCFyb290KCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxk
KCkpIHsKLSAgICAgICAgYXV0byBjb25zdHJhaW50cyA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNv
bnN0cmFpbkJ5TWluTWF4V2lkdGgocm9vdCgpLCB7IH0pOwotICAgICAgICBmb3JtYXR0aW5nU3Rh
dGUuc2V0SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyhjb25zdHJhaW50cyk7Ci0gICAgICAgIHJl
dHVybiBjb25zdHJhaW50czsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Y29uc3QgQm94Kj4gZm9ybWF0
dGluZ0NvbnRleHRSb290TGlzdDsKLSAgICBhdXRvIGhvcml6b250YWxDb25zdHJhaW50cyA9IEhv
cml6b250YWxDb25zdHJhaW50cyB7IDBfbHUsIDBfbHUgfTsKLSAgICBhdXRvKiBsYXlvdXRCb3gg
PSByb290KCkuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKLSAgICAvLyBJbiBvcmRlciB0
byBjb21wdXRlIHRoZSBtYXgvbWluIHdpZHRocywgd2UgbmVlZCB0byBjb21wdXRlIG1hcmdpbnMs
IGJvcmRlcnMgYW5kIHBhZGRpbmcgZm9yIGNlcnRhaW4gaW5saW5lIGJveGVzIGZpcnN0LgotICAg
IHdoaWxlIChsYXlvdXRCb3gpIHsKLSAgICAgICAgaWYgKGxheW91dEJveC0+aXNJbmxpbmVUZXh0
Qm94KCkpIHsKLSAgICAgICAgICAgIGxheW91dEJveCA9IG5leHRJbmxpbmVMZXZlbEJveFRvTGF5
b3V0KCpsYXlvdXRCb3gsIHJvb3QoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAobGF5b3V0Qm94LT5pc1JlcGxhY2VkQm94KCkpIHsKLSAgICAgICAgICAg
IGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKCpsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cyk7Ci0gICAgICAgICAgICBjb21wdXRlV2lkdGhBbmRNYXJnaW4oKmxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzKTsKLSAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3gtPmlzRmxvYXRp
bmdQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LT5pc0F0b21pY0lubGluZUxldmVsQm94KCkpIHsK
LSAgICAgICAgICAgIEFTU0VSVChsYXlvdXRCb3gtPmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRl
eHQoKSk7Ci0gICAgICAgICAgICBmb3JtYXR0aW5nQ29udGV4dFJvb3RMaXN0LmFwcGVuZChsYXlv
dXRCb3gpOwotCi0gICAgICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZygqbGF5b3V0Qm94
LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgICAgICAgICAgY29tcHV0ZUhvcml6b250YWxN
YXJnaW4oKmxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICAgICAgICAgIGNv
bXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KCpsYXlvdXRCb3gpOwotICAgICAg
ICB9IGVsc2UgaWYgKGxheW91dEJveC0+aXNJbmxpbmVCb3goKSkgewotICAgICAgICAgICAgY29t
cHV0ZUJvcmRlckFuZFBhZGRpbmcoKmxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsK
LSAgICAgICAgICAgIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKCpsYXlvdXRCb3gsIGhvcml6b250
YWxDb25zdHJhaW50cyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIGxheW91dEJveCA9IG5leHRJbmxpbmVMZXZlbEJveFRvTGF5b3V0
KCpsYXlvdXRCb3gsIHJvb3QoKSk7Ci0gICAgfQotCi0gICAgYXV0byBuZWVkc0xheW91dFN0YXJ0
UG9zaXRpb24gPSAhbV9saW5lRGFtYWdlIHx8ICFtX2xpbmVEYW1hZ2UtPnN0YXJ0KCkgPyBJbmxp
bmVJdGVtUG9zaXRpb24oKSA6IG1fbGluZURhbWFnZS0+c3RhcnQoKS0+aW5saW5lSXRlbVBvc2l0
aW9uOwotICAgIGF1dG8gbmVlZHNJbmxpbmVJdGVtc1VwZGF0ZSA9IGZvcm1hdHRpbmdTdGF0ZS5p
bmxpbmVJdGVtcygpLmlzRW1wdHkoKSB8fCBtX2xpbmVEYW1hZ2U7Ci0gICAgaWYgKG5lZWRzSW5s
aW5lSXRlbXNVcGRhdGUpCi0gICAgICAgIElubGluZUl0ZW1zQnVpbGRlciB7IHJvb3QoKSwgZm9y
bWF0dGluZ1N0YXRlIH0uYnVpbGQobmVlZHNMYXlvdXRTdGFydFBvc2l0aW9uKTsKLQotICAgIGF1
dG8gbWF4aW11bUxpbmVXaWR0aCA9IFsmXShhdXRvIGludHJpbnNpY1dpZHRoTW9kZSkgewotICAg
ICAgICAvLyBTd2l0Y2ggdG8gdGhlIG1pbi9tYXggZm9ybWF0dGluZyByb290IHdpZHRoIHZhbHVl
cyBiZWZvcmUgZm9ybWF0dGluZyB0aGUgbGluZXMuCi0gICAgICAgIGZvciAoYXV0byogZm9ybWF0
dGluZ1Jvb3QgOiBmb3JtYXR0aW5nQ29udGV4dFJvb3RMaXN0KSB7Ci0gICAgICAgICAgICBhdXRv
IGludHJpbnNpY1dpZHRocyA9IGZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzRm9yQm94KCpmb3JtYXR0aW5nUm9vdCk7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdTdGF0ZS5ib3hHZW9tZXRyeSgqZm9ybWF0dGluZ1Jvb3QpOwotICAgICAg
ICAgICAgYXV0byBjb250ZW50V2lkdGggPSAoaW50cmluc2ljV2lkdGhNb2RlID09IEludHJpbnNp
Y1dpZHRoTW9kZTo6TWF4aW11bSA/IGludHJpbnNpY1dpZHRocy0+bWF4aW11bSA6IGludHJpbnNp
Y1dpZHRocy0+bWluaW11bSkgLSBib3hHZW9tZXRyeS5ob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5k
UGFkZGluZygpOwotICAgICAgICAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGNv
bnRlbnRXaWR0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkSW50cmluc2lj
V2lkdGhGb3JDb25zdHJhaW50KGludHJpbnNpY1dpZHRoTW9kZSk7Ci0gICAgfTsKLQotICAgIGF1
dG8gbWluaW11bUNvbnRlbnRXaWR0aCA9IGNlaWxlZExheW91dFVuaXQobWF4aW11bUxpbmVXaWR0
aChJbnRyaW5zaWNXaWR0aE1vZGU6Ok1pbmltdW0pKTsKLSAgICBhdXRvIG1heGltdW1Db250ZW50
V2lkdGggPSBjZWlsZWRMYXlvdXRVbml0KG1heGltdW1MaW5lV2lkdGgoSW50cmluc2ljV2lkdGhN
b2RlOjpNYXhpbXVtKSk7Ci0gICAgYXV0byBjb25zdHJhaW50cyA9IGZvcm1hdHRpbmdHZW9tZXRy
eSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgocm9vdCgpLCB7IG1pbmltdW1Db250ZW50V2lkdGgs
IG1heGltdW1Db250ZW50V2lkdGggfSk7Ci0gICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMoY29uc3RyYWludHMpOwotICAgIHJldHVybiBjb25zdHJhaW50czsK
LX0KLQogSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJ
bnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoSW50cmluc2ljV2lkdGhNb2RlIGludHJpbnNpY1dp
ZHRoTW9kZSkgY29uc3QKIHsKICAgICBhdXRvIGZsb2F0aW5nU3RhdGUgPSBGbG9hdGluZ1N0YXRl
IHsgcm9vdCgpIH07CkBAIC00NTcsOTIgKzMwNiw2IEBAIElubGluZUxheW91dFVuaXQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KElu
CiAgICAgcmV0dXJuIG1heGltdW1Db250ZW50V2lkdGg7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0
IEJveCYgZm9ybWF0dGluZ1Jvb3QpCi17Ci0gICAgQVNTRVJUKGZvcm1hdHRpbmdSb290LmVzdGFi
bGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgYXV0byBjb25zdHJhaW50cyA9IEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwotICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBmb3Jt
YXR0aW5nR2VvbWV0cnkoKS5maXhlZFZhbHVlKGZvcm1hdHRpbmdSb290LnN0eWxlKCkubG9naWNh
bFdpZHRoKCkpKQotICAgICAgICBjb25zdHJhaW50cyA9IHsgKmZpeGVkV2lkdGgsICpmaXhlZFdp
ZHRoIH07Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gaGFzSW5mbG93T3JGbG9hdGluZ0NvbnRl
bnQgPSBpczxFbGVtZW50Qm94Pihmb3JtYXR0aW5nUm9vdCkgJiYgZG93bmNhc3Q8RWxlbWVudEJv
eD4oZm9ybWF0dGluZ1Jvb3QpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpOwotICAgICAgICAv
LyBUaGUgaW50cmluc2ljIHNpemVzIG9mIHRoZSBzaXplIGNvbnRhaW5tZW50IGJveCBhcmUgZGV0
ZXJtaW5lZCBhcyBpZiB0aGUgZWxlbWVudCBoYWQgbm8gY29udGVudC4KLSAgICAgICAgYXV0byBz
aG91bGRJZ25vcmVDaGlsZENvbnRlbnQgPSBmb3JtYXR0aW5nUm9vdC5pc1NpemVDb250YWlubWVu
dEJveCgpOwotICAgICAgICBpZiAoaGFzSW5mbG93T3JGbG9hdGluZ0NvbnRlbnQgJiYgIXNob3Vs
ZElnbm9yZUNoaWxkQ29udGVudCkKLSAgICAgICAgICAgIGNvbnN0cmFpbnRzID0gTGF5b3V0Q29u
dGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZG93bmNhc3Q8RWxlbWVudEJveD4oZm9ybWF0
dGluZ1Jvb3QpLCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCk7Ci0gICAgfQotICAgIGNvbnN0cmFpbnRzID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29u
c3RyYWluQnlNaW5NYXhXaWR0aChmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWludHMpOwotICAgIGNv
bnN0cmFpbnRzLmV4cGFuZChnZW9tZXRyeUZvckJveChmb3JtYXR0aW5nUm9vdCkuaG9yaXpvbnRh
bE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSk7Ci0gICAgZm9ybWF0dGluZ1N0YXRlKCkuc2V0SW50
cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJveChmb3JtYXR0aW5nUm9vdCwgY29uc3RyYWludHMp
OwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1h
cmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBo
b3Jpem9udGFsQ29uc3RyYWludHMpCi17Ci0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJn
aW4gPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdl
b21ldHJ5KGxheW91dEJveCkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IGNvbXB1dGVkSG9yaXpvbnRh
bE1hcmdpbi5zdGFydC52YWx1ZV9vcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52
YWx1ZV9vcigwKSB9KTsKLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKLXsKLSAgICBhdXRvIGNvbXB1dGUgPSBb
Jl0oc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGgpIHsKLSAgICAgICAgaWYgKGxh
eW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZvcm1h
dHRpbmdHZW9tZXRyeSgpLmZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRXaWR0aCwgeyB9IH0pOwotICAgICAgICBpZiAo
bGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKLSAgICAgICAgICAgIHJldHVybiBmb3JtYXR0
aW5nR2VvbWV0cnkoKS5pbmxpbmVCbG9ja0NvbnRlbnRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cywgeyB1c2VkV2lkdGgsIHsgfSB9KTsKLSAgICAgICAgaWYg
KGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGlu
Z0dlb21ldHJ5KCkuaW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oZG93bmNhc3Q8
RWxlbWVudEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIHsgdXNl
ZFdpZHRoLCB7IH0gfSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsgfTsKLSAgICB9OwotCi0gICAgYXV0byBjb250
ZW50V2lkdGhBbmRNYXJnaW4gPSBjb21wdXRlKHsgfSk7Ci0KLSAgICBhdXRvIGF2YWlsYWJsZVdp
ZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBpZiAoYXV0byBt
YXhXaWR0aCA9IGZvcm1hdHRpbmdHZW9tZXRyeSgpLmNvbXB1dGVkTWF4V2lkdGgobGF5b3V0Qm94
LCBhdmFpbGFibGVXaWR0aCkpIHsKLSAgICAgICAgYXV0byBtYXhXaWR0aEFuZE1hcmdpbiA9IGNv
bXB1dGUobWF4V2lkdGgpOwotICAgICAgICBpZiAoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRl
bnRXaWR0aCA+IG1heFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkKLSAgICAgICAgICAgIGNv
bnRlbnRXaWR0aEFuZE1hcmdpbiA9IG1heFdpZHRoQW5kTWFyZ2luOwotICAgIH0KLQotICAgIGF1
dG8gbWluV2lkdGggPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1pbldpZHRoKGxheW91
dEJveCwgYXZhaWxhYmxlV2lkdGgpLnZhbHVlX29yKDApOwotICAgIGF1dG8gbWluV2lkdGhBbmRN
YXJnaW4gPSBjb21wdXRlKG1pbldpZHRoKTsKLSAgICBpZiAoY29udGVudFdpZHRoQW5kTWFyZ2lu
LmNvbnRlbnRXaWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkKLSAgICAgICAg
Y29udGVudFdpZHRoQW5kTWFyZ2luID0gbWluV2lkdGhBbmRNYXJnaW47Ci0KLSAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7Ci0g
ICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5j
b250ZW50V2lkdGgpOwotICAgIGJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyBjb250
ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCwgY29udGVudFdpZHRoQW5kTWFyZ2lu
LnVzZWRNYXJnaW4uZW5kIH0pOwotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKLXsKLSAgICBhdXRvIGNvbXB1
dGUgPSBbJl0oc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkSGVpZ2h0KSB7Ci0gICAgICAg
IGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHJldHVy
biBmb3JtYXR0aW5nR2VvbWV0cnkoKS5mbG9hdGluZ0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4obGF5
b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgdXNlZEhlaWdodCB9KTsKLSAgICAgICAg
aWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkpCi0gICAgICAgICAgICByZXR1cm4gZm9y
bWF0dGluZ0dlb21ldHJ5KCkuaW5saW5lQmxvY2tDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGxheW91
dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IHVzZWRIZWlnaHQgfSk7Ci0gICAgICAgIGlm
IChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRp
bmdHZW9tZXRyeSgpLmlubGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihkb3duY2Fz
dDxFbGVtZW50Qm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgeyB1
c2VkSGVpZ2h0IH0pOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4geyB9OwotICAgIH07Ci0KLSAgICBhdXRvIGNvbnRl
bnRIZWlnaHRBbmRNYXJnaW4gPSBjb21wdXRlKHsgfSk7Ci0gICAgaWYgKGF1dG8gbWF4SGVpZ2h0
ID0gZm9ybWF0dGluZ0dlb21ldHJ5KCkuY29tcHV0ZWRNYXhIZWlnaHQobGF5b3V0Qm94KSkgewot
ICAgICAgICBhdXRvIG1heEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUobWF4SGVpZ2h0KTsKLSAg
ICAgICAgaWYgKGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA+IG1heEhlaWdo
dEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KQotICAgICAgICAgICAgY29udGVudEhlaWdodEFuZE1h
cmdpbiA9IG1heEhlaWdodEFuZE1hcmdpbjsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBtaW5IZWln
aHQgPSBmb3JtYXR0aW5nR2VvbWV0cnkoKS5jb21wdXRlZE1pbkhlaWdodChsYXlvdXRCb3gpKSB7
Ci0gICAgICAgIGF1dG8gbWluSGVpZ2h0QW5kTWFyZ2luID0gY29tcHV0ZShtaW5IZWlnaHQpOwot
ICAgICAgICBpZiAoY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0IDwgbWluSGVp
Z2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQpCi0gICAgICAgICAgICBjb250ZW50SGVpZ2h0QW5k
TWFyZ2luID0gbWluSGVpZ2h0QW5kTWFyZ2luOwotICAgIH0KLSAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7Ci0gICAgYm94R2Vv
bWV0cnkuc2V0Q29udGVudEJveEhlaWdodChjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRI
ZWlnaHQpOwotICAgIGJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgY29udGVudEhlaWdo
dEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4uYmVmb3JlLCBjb250ZW50SGVpZ2h0QW5kTWFy
Z2luLm5vbkNvbGxhcHNlZE1hcmdpbi5hZnRlciB9KTsKLX0KLQogc3RhdGljIExpbmVFbmRpbmdF
bGxpcHNpc1BvbGljeSBsaW5lRW5kaW5nRWxsaXBzaXNQb2xpY3koY29uc3QgUmVuZGVyU3R5bGUm
IHJvb3RTdHlsZSwgc2l6ZV90IG51bWJlck9mTGluZXMsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBu
dW1iZXJPZlZpc2libGVMaW5lc0FsbG93ZWQpCiB7CiAgICAgLy8gV2UgbWF5IGhhdmUgcGFzc2Vk
IHRoZSBsaW5lLWNsYW1wIGxpbmUgd2l0aCBvdmVyZmxvdyB2aXNpYmxlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggOTFmMDc2NDc2MzRiLi5l
Y2MyZmU4ZDcyODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaApAQCAtNTksMzUgKzU5LDI3IEBAIGNsYXNzIElubGluZUZvcm1hdHRpbmdDb250ZXh0
IGZpbmFsIDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0IHsKIHB1YmxpYzoKICAgICBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dChjb25zdCBFbGVtZW50Qm94JiBmb3JtYXR0aW5nQ29udGV4dFJvb3Qs
IElubGluZUZvcm1hdHRpbmdTdGF0ZSYsIGNvbnN0IElubGluZURhbWFnZSogPSBudWxscHRyKTsK
IAotICAgIHZvaWQgbGF5b3V0SW5GbG93Q29udGVudChjb25zdCBDb25zdHJhaW50c0ZvckluRmxv
d0NvbnRlbnQmKSBvdmVycmlkZTsKKyAgICBJbmxpbmVMYXlvdXRSZXN1bHQgbGF5b3V0SW5GbG93
QW5kRmxvYXRDb250ZW50KGNvbnN0IENvbnN0cmFpbnRzRm9ySW5saW5lQ29udGVudCYsIElubGlu
ZUxheW91dFN0YXRlJik7CisgICAgdm9pZCBsYXlvdXRPdXRPZkZsb3dDb250ZW50KGNvbnN0IENv
bnN0cmFpbnRzRm9ySW5saW5lQ29udGVudCYsIElubGluZUxheW91dFN0YXRlJiwgY29uc3QgSW5s
aW5lRGlzcGxheTo6Q29udGVudCYpOwogICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7Ci0gICAgTGF5b3V0VW5p
dCB1c2VkQ29udGVudEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgY29uc3QgSW5saW5l
Rm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3duY2Fz
dDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3Rh
dGUoKSk7IH0KLSAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIHsg
cmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6
OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdHZW9tZXRy
eSYgZm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnk7IH0KICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzJiBmb3Jt
YXR0aW5nUXVpcmtzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nUXVp
cmtzOyB9Ci0KLSAgICBJbmxpbmVMYXlvdXRSZXN1bHQgbGF5b3V0SW5GbG93QW5kRmxvYXRDb250
ZW50Rm9ySW50ZWdyYXRpb24oY29uc3QgQ29uc3RyYWludHNGb3JJbmxpbmVDb250ZW50JiwgSW5s
aW5lTGF5b3V0U3RhdGUmKTsKLSAgICB2b2lkIGxheW91dE91dE9mRmxvd0NvbnRlbnRGb3JJbnRl
Z3JhdGlvbihjb25zdCBDb25zdHJhaW50c0ZvcklubGluZUNvbnRlbnQmLCBJbmxpbmVMYXlvdXRT
dGF0ZSYsIGNvbnN0IElubGluZURpc3BsYXk6OkNvbnRlbnQmKTsKLSAgICBJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckludGVncmF0
aW9uKCk7CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUo
KSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRp
bmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KIAogcHJpdmF0ZToKICAgICBJbmxpbmVM
YXlvdXRSZXN1bHQgbGluZUxheW91dChjb25zdCBJbmxpbmVJdGVtcyYsIElubGluZUl0ZW1SYW5n
ZSwgc3RkOjpvcHRpb25hbDxQcmV2aW91c0xpbmU+LCBjb25zdCBDb25zdHJhaW50c0ZvcklubGlu
ZUNvbnRlbnQmLCBJbmxpbmVMYXlvdXRTdGF0ZSYpOwogICAgIHZvaWQgbGF5b3V0RmxvYXRDb250
ZW50T25seShjb25zdCBDb25zdHJhaW50c0ZvcklubGluZUNvbnRlbnQmLCBGbG9hdGluZ1N0YXRl
Jik7CiAgICAgdm9pZCBjb21wdXRlU3RhdGljUG9zaXRpb25Gb3JPdXRPZkZsb3dDb250ZW50KGNv
bnN0IEZvcm1hdHRpbmdTdGF0ZTo6T3V0T2ZGbG93Qm94TGlzdCYsIGNvbnN0IENvbnN0cmFpbnRz
Rm9ySW5GbG93Q29udGVudCYsIGNvbnN0IElubGluZURpc3BsYXk6OkNvbnRlbnQmLCBjb25zdCBG
bG9hdGluZ1N0YXRlJik7CiAKLSAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1h
dHRpbmdSb290KGNvbnN0IEJveCYpOwogICAgIElubGluZUxheW91dFVuaXQgY29tcHV0ZWRJbnRy
aW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoSW50cmluc2ljV2lkdGhNb2RlKSBjb25zdDsKIAotICAg
IHZvaWQgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJik7Ci0gICAgdm9pZCBjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJv
eCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwotICAgIHZvaWQgY29tcHV0ZVdpZHRo
QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwotCiAg
ICAgdm9pZCBjb2xsZWN0Q29udGVudElmTmVlZGVkKCk7CiAgICAgSW5saW5lUmVjdCBjcmVhdGVE
aXNwbGF5Q29udGVudEZvckxpbmUoc2l6ZV90IGxpbmVJbmRleCwgY29uc3QgTGluZUJ1aWxkZXI6
OkxheW91dFJlc3VsdCYsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5saW5lQ29udGVudCYsIGNvbnN0
IElubGluZUxheW91dFN0YXRlJiwgSW5saW5lRGlzcGxheTo6Q29udGVudCYpOwogICAgIHZvaWQg
cmVzZXRHZW9tZXRyeUZvckNsYW1wZWRDb250ZW50KGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbmVl
ZHNEaXNwbGF5Q29udGVudFJhbmdlLCBjb25zdCBMaW5lQnVpbGRlcjo6U3VzcGVuZGVkRmxvYXRM
aXN0JiBzdXNwZW5kZWRGbG9hdHMsIExheW91dFBvaW50IHRvcGxlZnQpOwogCisgICAgSW5saW5l
Rm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxJbmxp
bmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7
IH0KKwogICAgIGNvbnN0IElubGluZURhbWFnZSogbV9saW5lRGFtYWdlIHsgbnVsbHB0ciB9Owog
ICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeSBtX2lubGluZUZvcm1hdHRpbmdHZW9t
ZXRyeTsKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzIG1faW5saW5lRm9ybWF0dGlu
Z1F1aXJrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnkuY3BwCmluZGV4IDE5MDQ3NzczNzliZS4uNTU1MDZlMTdlZGFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTM4OSwxNiArMzg5
LDYgQEAgRmxvYXRpbmdDb250ZXh0OjpDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnk6OmZsb2F0Q29uc3RyYWludHNGb3JMaW5lKEkKICAgICByZXR1cm4gZmxvYXRpbmdDb250ZXh0
LmNvbnN0cmFpbnRzKGxvZ2ljYWxUb3BDYW5kaWRhdGUsIGxvZ2ljYWxCb3R0b21DYW5kaWRhdGUs
IEZsb2F0aW5nQ29udGV4dDo6TWF5QmVBYm92ZUxhc3RGbG9hdDo6WWVzKTsKIH0KIAotdm9pZCBJ
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OmFkanVzdE1hcmdpblN0YXJ0Rm9yTGlzdE1hcmtlcihj
b25zdCBFbGVtZW50Qm94JiBsaXN0TWFya2VyQm94LCBMYXlvdXRVbml0IG5lc3RlZExpc3RNYXJr
ZXJNYXJnaW5TdGFydCwgSW5saW5lTGF5b3V0VW5pdCByb290SW5saW5lQm94T2Zmc2V0KSBjb25z
dAotewotICAgIGlmICghbmVzdGVkTGlzdE1hcmtlck1hcmdpblN0YXJ0ICYmICFyb290SW5saW5l
Qm94T2Zmc2V0KQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgbGlzdE1hcmtlckdlb21ldHJ5
ID0gY29uc3RfY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGUmPihmb3JtYXR0aW5nQ29udGV4dCgp
LmZvcm1hdHRpbmdTdGF0ZSgpKS5ib3hHZW9tZXRyeShsaXN0TWFya2VyQm94KTsKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgbGluZSBjb250ZW50IGRvZXMgbm90IGdldCBwdWxsZWQgaW4gdG8g
bG9naWNhbCBsZWZ0IGRpcmVjdGlvbiBkdWUgdG8KLSAgICAvLyB0aGUgbGFyZ2UgbmVnYXRpdmUg
bWFyZ2luIChpLmUuIHRoaXMgZW5zdXJlcyB0aGF0IGxvZ2ljYWwgbGVmdCBvZiB0aGUgbGlzdCBj
b250ZW50IHN0YXlzIGF0IHRoZSBsaW5lIHN0YXJ0KQotICAgIGxpc3RNYXJrZXJHZW9tZXRyeS5z
ZXRIb3Jpem9udGFsTWFyZ2luKHsgbGlzdE1hcmtlckdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkgKyBu
ZXN0ZWRMaXN0TWFya2VyTWFyZ2luU3RhcnQgLSBMYXlvdXRVbml0IHsgcm9vdElubGluZUJveE9m
ZnNldCB9LCBsaXN0TWFya2VyR2VvbWV0cnkubWFyZ2luRW5kKCkgLSBuZXN0ZWRMaXN0TWFya2Vy
TWFyZ2luU3RhcnQgKyBMYXlvdXRVbml0IHsgcm9vdElubGluZUJveE9mZnNldCB9IH0pOwotfQot
CiBJbmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6aG9yaXpvbnRhbEFs
aWdubWVudE9mZnNldChJbmxpbmVMYXlvdXRVbml0IGhvcml6b250YWxBdmFpbGFibGVTcGFjZSwg
SXNMYXN0TGluZU9yQWZ0ZXJMaW5lQnJlYWsgaXNMYXN0TGluZU9yQWZ0ZXJMaW5lQnJlYWssIHN0
ZDo6b3B0aW9uYWw8VGV4dERpcmVjdGlvbj4gaW5saW5lQmFzZURpcmVjdGlvbk92ZXJyaWRlKSBj
b25zdAogewogICAgIGlmIChob3Jpem9udGFsQXZhaWxhYmxlU3BhY2UgPD0gMCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZUxpbmVCb3hCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3hCdWlsZGVyLmNwcAppbmRleCAwYTkxZTY0ZTAyYTMu
Ljc3MGU4ZmM4ZDUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveEJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3hCdWls
ZGVyLmNwcApAQCAtNjk2LDcgKzY5Niw2IEBAIHZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbXB1dGVM
aW5lQm94R2VvbWV0cnkoTGluZUJveCYgbGluZUJveCkgY29uc3QKIAogdm9pZCBMaW5lQm94QnVp
bGRlcjo6YWRqdXN0T3V0c2lkZUxpc3RNYXJrZXJzUG9zaXRpb24oTGluZUJveCYgbGluZUJveCkK
IHsKLSAgICBhdXRvJiBmb3JtYXR0aW5nR2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmZv
cm1hdHRpbmdHZW9tZXRyeSgpOwogICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdD
b250ZXh0IHsgZm9ybWF0dGluZ0NvbnRleHQoKSwgYmxvY2tMYXlvdXRTdGF0ZSgpLmZsb2F0aW5n
U3RhdGUoKSB9OwogICAgIGF1dG8gbGluZUJveFJlY3QgPSBsaW5lQm94LmxvZ2ljYWxSZWN0KCk7
CiAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0gZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFpbnRz
KExheW91dFVuaXQgeyBsaW5lQm94UmVjdC50b3AoKSB9LCBMYXlvdXRVbml0IHsgbGluZUJveFJl
Y3QuYm90dG9tKCkgfSwgRmxvYXRpbmdDb250ZXh0OjpNYXlCZUFib3ZlTGFzdEZsb2F0OjpObyk7
CkBAIC03MjgsMTIgKzcyNywyMiBAQCB2b2lkIExpbmVCb3hCdWlsZGVyOjphZGp1c3RPdXRzaWRl
TGlzdE1hcmtlcnNQb3NpdGlvbihMaW5lQm94JiBsaW5lQm94KQogICAgICAgICAgICAgLy8gRklY
TUU6IFdlIG1heSBuZWVkIHRvIGRvIHRoaXMgaW4gYSBwb3N0LXByb2Nlc3MgdGFzayBhZnRlciB0
aGUgbGluZSBib3ggZ2VvbWV0cnkgaXMgY29tcHV0ZWQuCiAgICAgICAgICAgICByZXR1cm4gZmxv
YXRDb25zdHJhaW50cy5sZWZ0ID8gc3RkOjptaW4oMF9sdSwgc3RkOjptYXgoZmxvYXRDb25zdHJh
aW50cy5sZWZ0LT54LCBuZXN0ZWRPZmZzZXQpKSA6IG5lc3RlZE9mZnNldDsKICAgICAgICAgfSgp
OwotICAgICAgICBmb3JtYXR0aW5nR2VvbWV0cnkuYWRqdXN0TWFyZ2luU3RhcnRGb3JMaXN0TWFy
a2VyKGxpc3RNYXJrZXJCb3gsIG5lc3RlZExpc3RNYXJrZXJNYXJnaW5TdGFydCwgcm9vdElubGlu
ZUJveE9mZnNldEZyb21Db250ZW50Qm94T3JJbnRydXNpdmVGbG9hdCk7CisgICAgICAgIGFkanVz
dE1hcmdpblN0YXJ0Rm9yTGlzdE1hcmtlcihsaXN0TWFya2VyQm94LCBuZXN0ZWRMaXN0TWFya2Vy
TWFyZ2luU3RhcnQsIHJvb3RJbmxpbmVCb3hPZmZzZXRGcm9tQ29udGVudEJveE9ySW50cnVzaXZl
RmxvYXQpOwogICAgICAgICBsb2dpY2FsTGVmdCArPSBuZXN0ZWRMaXN0TWFya2VyTWFyZ2luU3Rh
cnQ7CiAgICAgICAgIGxpc3RNYXJrZXJJbmxpbmVMZXZlbEJveC5zZXRMb2dpY2FsTGVmdChsb2dp
Y2FsTGVmdCk7CiAgICAgfQogfQogCit2b2lkIExpbmVCb3hCdWlsZGVyOjphZGp1c3RNYXJnaW5T
dGFydEZvckxpc3RNYXJrZXIoY29uc3QgRWxlbWVudEJveCYgbGlzdE1hcmtlckJveCwgTGF5b3V0
VW5pdCBuZXN0ZWRMaXN0TWFya2VyTWFyZ2luU3RhcnQsIElubGluZUxheW91dFVuaXQgcm9vdElu
bGluZUJveE9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAoIW5lc3RlZExpc3RNYXJrZXJNYXJnaW5T
dGFydCAmJiAhcm9vdElubGluZUJveE9mZnNldCkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8m
IGxpc3RNYXJrZXJHZW9tZXRyeSA9IGNvbnN0X2Nhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlJj4o
Zm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nU3RhdGUoKSkuYm94R2VvbWV0cnkobGlzdE1h
cmtlckJveCk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGxpbmUgY29udGVudCBkb2VzIG5v
dCBnZXQgcHVsbGVkIGluIHRvIGxvZ2ljYWwgbGVmdCBkaXJlY3Rpb24gZHVlIHRvCisgICAgLy8g
dGhlIGxhcmdlIG5lZ2F0aXZlIG1hcmdpbiAoaS5lLiB0aGlzIGVuc3VyZXMgdGhhdCBsb2dpY2Fs
IGxlZnQgb2YgdGhlIGxpc3QgY29udGVudCBzdGF5cyBhdCB0aGUgbGluZSBzdGFydCkKKyAgICBs
aXN0TWFya2VyR2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IGxpc3RNYXJrZXJHZW9tZXRy
eS5tYXJnaW5TdGFydCgpICsgbmVzdGVkTGlzdE1hcmtlck1hcmdpblN0YXJ0IC0gTGF5b3V0VW5p
dCB7IHJvb3RJbmxpbmVCb3hPZmZzZXQgfSwgbGlzdE1hcmtlckdlb21ldHJ5Lm1hcmdpbkVuZCgp
IC0gbmVzdGVkTGlzdE1hcmtlck1hcmdpblN0YXJ0ICsgTGF5b3V0VW5pdCB7IHJvb3RJbmxpbmVC
b3hPZmZzZXQgfSB9KTsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94QnVpbGRlci5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGlu
ZUJveEJ1aWxkZXIuaAppbmRleCA1NjZkMWQ3ODlmNjEuLmVjZGFlY2YxNDYxMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
TGluZUJveEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94QnVpbGRlci5oCkBAIC01MCw2ICs1MCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjb21wdXRlTGluZUJveEdlb21ldHJ5KExpbmVCb3gmKSBjb25zdDsK
ICAgICBJbmxpbmVMZXZlbEJveDo6QXNjZW50QW5kRGVzY2VudCBlbmNsb3NpbmdBc2NlbnREZXNj
ZW50V2l0aEZhbGxiYWNrRm9udHMoY29uc3QgSW5saW5lTGV2ZWxCb3gmLCBjb25zdCBUZXh0VXRp
bDo6RmFsbGJhY2tGb250TGlzdCYgZmFsbGJhY2tGb250c0ZvckNvbnRlbnQsIEZvbnRCYXNlbGlu
ZSkgY29uc3Q7CiAgICAgVGV4dFV0aWw6OkZhbGxiYWNrRm9udExpc3QgY29sbGVjdEZhbGxiYWNr
Rm9udHMoY29uc3QgSW5saW5lTGV2ZWxCb3gmIHBhcmVudElubGluZUJveCwgY29uc3QgTGluZTo6
UnVuJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICB2b2lkIGFkanVzdE1hcmdpblN0YXJ0Rm9y
TGlzdE1hcmtlcihjb25zdCBFbGVtZW50Qm94JiBsaXN0TWFya2VyQm94LCBMYXlvdXRVbml0IG5l
c3RlZExpc3RNYXJrZXJNYXJnaW5TdGFydCwgSW5saW5lTGF5b3V0VW5pdCByb290SW5saW5lQm94
T2Zmc2V0KSBjb25zdDsKIAogICAgIHZvaWQgY29uc3RydWN0SW5saW5lTGV2ZWxCb3hlcyhMaW5l
Qm94Jik7CiAgICAgdm9pZCBhZGp1c3RJZGVvZ3JhcGhpY0Jhc2VsaW5lSWZBcHBsaWNhYmxlKExp
bmVCb3gmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGlu
ZURpc3BsYXlDb250ZW50QnVpbGRlci5oCmluZGV4IGNlMGIzMGRhMzE0MC4uMjJkMTg0OTZkZjc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlz
cGxheUNvbnRlbnRCdWlsZGVyLmgKQEAgLTc5LDcgKzc5LDYgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBFbGVtZW50Qm94JiByb290KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5y
b290KCk7IH0KICAgICBjb25zdCBSZW5kZXJTdHlsZSYgcm9vdFN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lSW5kZXggPyByb290KCkuc3R5bGUoKSA6IHJvb3QoKS5maXJzdExpbmVTdHlsZSgp
OyB9CiAgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dDsgfQotICAgIGNvbnN0IElubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeSYgZm9ybWF0dGluZ0dlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4g
Zm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nR2VvbWV0cnkoKTsgfQogICAgIElubGluZUZv
cm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0
aW5nU3RhdGU7IH0gCiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9mb3Jt
YXR0aW5nQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9mbGV4L0xheW91dEludGVncmF0aW9uRmxleExheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vZmxleC9MYXlvdXRJbnRlZ3JhdGlvbkZsZXhMYXlvdXQuY3Bw
CmluZGV4IGVjNTc4ZDU1NGVjYy4uMmE5NWQxOWUwNzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vZmxleC9MYXlvdXRJbnRlZ3JhdGlvbkZsZXhMYXlvdXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9mbGV4L0xheW91dElu
dGVncmF0aW9uRmxleExheW91dC5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIEZsZXhMYXlv
dXQ6OnVwZGF0ZVN0eWxlKGNvbnN0IFJlbmRlckJsb2NrJiwgY29uc3QgUmVuZGVyU3R5bGUmKQog
c3RkOjpwYWlyPExheW91dFVuaXQsIExheW91dFVuaXQ+IEZsZXhMYXlvdXQ6OmNvbXB1dGVJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzKCkKIHsKICAgICBhdXRvIGZsZXhGb3JtYXR0aW5nQ29udGV4
dCA9IExheW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0IHsgZmxleEJveCgpLCBtX2ZsZXhGb3Jt
YXR0aW5nU3RhdGUgfTsKLSAgICBhdXRvIGNvbnN0cmFpbnRzID0gZmxleEZvcm1hdHRpbmdDb250
ZXh0LmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckludGVncmF0aW9uKCk7Cisg
ICAgYXV0byBjb25zdHJhaW50cyA9IGZsZXhGb3JtYXR0aW5nQ29udGV4dC5jb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMoKTsKIAogICAgIHJldHVybiB7IGNvbnN0cmFpbnRzLm1pbmlt
dW0sIGNvbnN0cmFpbnRzLm1heGltdW0gfTsKIH0KQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEZs
ZXhMYXlvdXQ6OmxheW91dCgpCiAgICAgYXV0byBbYXZhaWxhYmxlVmVydGljYWxTcGFjZSwgbWlu
aW11bVZlcnRpY2FsU3BhY2VdID0gdmVydGljYWxTcGFjZUZvckZsZXhJdGVtcygpOwogICAgIGF1
dG8gY29uc3RyYWludHMgPSBMYXlvdXQ6OkNvbnN0cmFpbnRzRm9yRmxleENvbnRlbnQgeyB7IGhv
cml6b250YWxDb25zdHJhaW50cywgcm9vdEdlb21ldHJ5LmNvbnRlbnRCb3hUb3AoKSB9LCBhdmFp
bGFibGVWZXJ0aWNhbFNwYWNlLCBtaW5pbXVtVmVydGljYWxTcGFjZSB9OwogICAgIGF1dG8gZmxl
eEZvcm1hdHRpbmdDb250ZXh0ID0gTGF5b3V0OjpGbGV4Rm9ybWF0dGluZ0NvbnRleHQgeyBmbGV4
Qm94KCksIG1fZmxleEZvcm1hdHRpbmdTdGF0ZSB9OwotICAgIGZsZXhGb3JtYXR0aW5nQ29udGV4
dC5sYXlvdXRJbkZsb3dDb250ZW50Rm9ySW50ZWdyYXRpb24oY29uc3RyYWludHMpOworICAgIGZs
ZXhGb3JtYXR0aW5nQ29udGV4dC5sYXlvdXQoY29uc3RyYWludHMpOwogCiAgICAgdXBkYXRlUmVu
ZGVyZXJzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNw
cAppbmRleCA0ZThhN2Y2NmE4N2EuLmFkMzM4YzY5ZDUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlv
dXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5
b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgTGlu
ZUxheW91dDo6dXBkYXRlT3ZlcmZsb3coKQogc3RkOjpwYWlyPExheW91dFVuaXQsIExheW91dFVu
aXQ+IExpbmVMYXlvdXQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkKIHsKICAg
ICBhdXRvIGlubGluZUZvcm1hdHRpbmdDb250ZXh0ID0gTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCB7IHJvb3RMYXlvdXRCb3goKSwgbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUsIG1fbGlu
ZURhbWFnZS5nZXQoKSB9OwotICAgIGF1dG8gY29uc3RyYWludHMgPSBpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JJbnRlZ3JhdGlvbigp
OworICAgIGF1dG8gY29uc3RyYWludHMgPSBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jb21wdXRl
ZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKIAogICAgIHJldHVybiB7IGNvbnN0cmFpbnRz
Lm1pbmltdW0sIGNvbnN0cmFpbnRzLm1heGltdW0gfTsKIH0KQEAgLTU4OCw4ICs1ODgsOCBAQCBz
dGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IExpbmVMYXlvdXQ6OmxheW91dCgpCiAgICAgYXV0byBw
YXJlbnRCbG9ja0xheW91dFN0YXRlID0gTGF5b3V0OjpCbG9ja0xheW91dFN0YXRlIHsgbV9ibG9j
a0Zvcm1hdHRpbmdTdGF0ZS5mbG9hdGluZ1N0YXRlKCksIGxpbmVDbGFtcChmbG93KCkpLCB0ZXh0
Qm94VHJpbShmbG93KCkpLCBpbnRydXNpdmVJbml0aWFsTGV0dGVyQm90dG9tKCkgfTsKICAgICBh
dXRvIGlubGluZUxheW91dFN0YXRlID0gTGF5b3V0OjpJbmxpbmVMYXlvdXRTdGF0ZSB7IHBhcmVu
dEJsb2NrTGF5b3V0U3RhdGUsIFdURk1vdmUobV9uZXN0ZWRMaXN0TWFya2VyT2Zmc2V0cykgfTsK
ICAgICBhdXRvIGlubGluZUZvcm1hdHRpbmdDb250ZXh0ID0gTGF5b3V0OjpJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCB7IHJvb3RMYXlvdXRCb3goKSwgbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUsIG1f
bGluZURhbWFnZS5nZXQoKSB9OwotICAgIGF1dG8gbGF5b3V0UmVzdWx0ID0gaW5saW5lRm9ybWF0
dGluZ0NvbnRleHQubGF5b3V0SW5GbG93QW5kRmxvYXRDb250ZW50Rm9ySW50ZWdyYXRpb24oaW5s
aW5lQ29udGVudENvbnN0cmFpbnRzLCBpbmxpbmVMYXlvdXRTdGF0ZSk7Ci0gICAgaW5saW5lRm9y
bWF0dGluZ0NvbnRleHQubGF5b3V0T3V0T2ZGbG93Q29udGVudEZvckludGVncmF0aW9uKGlubGlu
ZUNvbnRlbnRDb25zdHJhaW50cywgaW5saW5lTGF5b3V0U3RhdGUsIGxheW91dFJlc3VsdC5kaXNw
bGF5Q29udGVudCk7CisgICAgYXV0byBsYXlvdXRSZXN1bHQgPSBpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5sYXlvdXRJbkZsb3dBbmRGbG9hdENvbnRlbnQoaW5saW5lQ29udGVudENvbnN0cmFpbnRz
LCBpbmxpbmVMYXlvdXRTdGF0ZSk7CisgICAgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQubGF5b3V0
T3V0T2ZGbG93Q29udGVudChpbmxpbmVDb250ZW50Q29uc3RyYWludHMsIGlubGluZUxheW91dFN0
YXRlLCBsYXlvdXRSZXN1bHQuZGlzcGxheUNvbnRlbnQpOwogCiAgICAgYXV0byByZXBhaW50UmVj
dCA9IExheW91dFJlY3QgeyBjb25zdHJ1Y3RDb250ZW50KGlubGluZUxheW91dFN0YXRlLCBXVEZN
b3ZlKGxheW91dFJlc3VsdCkpIH07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>