<?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>239441</bug_id>
          
          <creation_ts>2022-04-17 14:43:00 -0700</creation_ts>
          <short_desc>[IFC][Integration] Move inline integration under layout/integration/inline</short_desc>
          <delta_ts>2022-04-18 07:36:14 -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>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</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>1862167</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2022-04-17 14:43:00 -0700</bug_when>
    <thetext>in preparation for adding extra integrated FCs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862169</commentid>
    <comment_count>1</comment_count>
      <attachid>457777</attachid>
    <who name="alan">zalan</who>
    <bug_when>2022-04-17 14:51:12 -0700</bug_when>
    <thetext>Created attachment 457777
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862231</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-18 07:35:04 -0700</bug_when>
    <thetext>Committed r292954 (249719@main): &lt;https://commits.webkit.org/249719@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 457777.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862232</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-18 07:36:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/91890942&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457777</attachid>
            <date>2022-04-17 14:51:12 -0700</date>
            <delta_ts>2022-04-18 07:35:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239441-20220417145111.patch</filename>
            <type>text/plain</type>
            <size>380833</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyOTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzMwMjY5Mzk1NWZmOTg0
ZjU2Mjg0MWFmOWQ1ODlkNGE2Y2QzYWEzMC4uMjk3NTgyNWZiZDczMjI3N2UxNzhhN2YwNTcwMDg1
YmEyZWE5NDYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyOSBAQAorMjAyMi0wNC0xNyAgQWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0lGQ11bSW50ZWdyYXRpb25d
IE1vdmUgaW5saW5lIGludGVncmF0aW9uIHVuZGVyIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTQ0MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMg
aW4gcHJlcGFyYXRpb24gZm9yIGltcGxlbWVudGluZyBhZGRpdGlvbmFsIGludGVncmF0ZWQgRkNz
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJ
dGVyYXRvckJveC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vSW5saW5lSXRlcmF0b3JCb3guY3BwLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRl
cmF0b3I6OkJveEl0ZXJhdG9yOjpCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVJdGVyYXRvcjo6Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpuZXh0T25MaW5lIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OnByZXZpb3VzT25MaW5lIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6Om5leHRPbkxpbmVJZ25vcmlu
Z0xpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94
OjpwcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OmxpbmVCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6c3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lSXRlcmF0b3I6OkJveDo6c2VsZWN0aW9uU3RhdGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvcjo6TGVhZkJveEl0ZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3I6OnRyYXZl
cnNlTmV4dE9uTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGVhZkJv
eEl0ZXJhdG9yOjp0cmF2ZXJzZVByZXZpb3VzT25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3I6OnRyYXZlcnNlTmV4dE9uTGluZUlnbm9yaW5n
TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRl
cmF0b3I6OnRyYXZlcnNlUHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhayk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Ym94Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUl0ZXJhdG9yOjpCb3g6Om1vZGVyblBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lSXRlcmF0b3I6OkJveDo6bGVnYWN5UGF0aCBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94LmguCisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94Ojpsb2dpY2FsVG9wIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OmxvZ2ljYWxCb3R0b20gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6bG9naWNhbExlZnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6bG9naWNhbFJpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OmxvZ2ljYWxX
aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94Ojpsb2dp
Y2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6
OmxlZnRtb3N0Q2FyZXRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRl
cmF0b3I6OkJveDo6cmlnaHRtb3N0Q2FyZXRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjpvcGVyYXRvciBi
b29sIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRv
cjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6
Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkJveEl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkJveEl0ZXJhdG9yOjpvcGVyYXRvci0+IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvcjo6Qm94SXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6Qm94KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OmlzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94Ojppc0lubGluZUJveCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94Ojppc1Jvb3RJbmxpbmVCb3ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6dmlzdWFsUmVjdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94Ojp2aXN1YWxSZWN0SWdub3JpbmdC
bG9ja0RpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6
Qm94Ojppc0hvcml6b250YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0
b3I6OkJveDo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRl
cmF0b3I6OkJveDo6bWluaW11bUNhcmV0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3g6Om1heGltdW1DYXJldE9mZnNldCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94OjpiaWRpTGV2ZWwgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6cmVuZGVyZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveDo6bGVnYWN5SW5saW5lQm94IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3g6OmlubGluZUJveCBjb25zdCk6
CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveExl
Z2FjeVBhdGguaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaC4KKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpCb3hMZWdhY3lQYXRoOjpCb3hMZWdhY3lQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpCb3hMZWdhY3lQYXRoOjppc1RleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6OmlzSW5saW5lQm94IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hMZWdhY3lQYXRoOjpp
c1Jvb3RJbmxpbmVCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6
OkJveExlZ2FjeVBhdGg6OnZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hMZWdhY3lQYXRoOjppc0hvcml6
b250YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2Fj
eVBhdGg6OmlzTGluZUJyZWFrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpCb3hMZWdhY3lQYXRoOjptaW5pbXVtQ2FyZXRPZmZzZXQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6Om1heGltdW1DYXJldE9mZnNl
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0
aDo6YmlkaUxldmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3hMZWdhY3lQYXRoOjpoYXNIeXBoZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6OnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hMZWdhY3lQYXRoOjplbmQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6Omxlbmd0aCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aDo6c2VsZWN0
YWJsZVJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hM
ZWdhY3lQYXRoOjpjcmVhdGVUZXh0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpCb3hMZWdhY3lQYXRoOjpyZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aDo6dHJhdmVyc2VOZXh0VGV4dEJveCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aDo6dHJhdmVy
c2VOZXh0T25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hMZWdh
Y3lQYXRoOjp0cmF2ZXJzZVByZXZpb3VzT25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpCb3hMZWdhY3lQYXRoOjp0cmF2ZXJzZU5leHRJbmxpbmVCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6OnRyYXZlcnNlUHJldmlv
dXNJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2Fj
eVBhdGg6OmZpcnN0TGVhZkJveEZvcklubGluZUJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6Qm94TGVnYWN5UGF0aDo6bGFzdExlYWZCb3hGb3JJbmxpbmVCb3gg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJv
eExlZ2FjeVBhdGg6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpCb3hMZWdhY3lQYXRoOjpsZWdhY3lJbmxpbmVCb3ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6OnJvb3RJbmxpbmVCb3ggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExlZ2FjeVBhdGg6OmlubGlu
ZVRleHRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveExl
Z2FjeVBhdGg6OmlubGluZUZsb3dCb3ggY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5Q
YXRoLmguCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6
Qm94TW9kZXJuUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9k
ZXJuUGF0aDo6aXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpCb3hNb2Rlcm5QYXRoOjppc0lubGluZUJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6aXNSb290SW5saW5lQm94IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjp2aXN1YWxSZWN0
SWdub3JpbmdCbG9ja0RpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6aXNIb3Jpem9udGFsIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjppc0xpbmVCcmVhayBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6bWluaW11
bUNhcmV0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3hNb2Rlcm5QYXRoOjptYXhpbXVtQ2FyZXRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkJveE1vZGVyblBhdGg6OmJpZGlMZXZlbCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6aGFzSHlwaGVuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjp0
ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5Q
YXRoOjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94
TW9kZXJuUGF0aDo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpCb3hNb2Rlcm5QYXRoOjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkJveE1vZGVyblBhdGg6OnNlbGVjdGFibGVSYW5nZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6Y3JlYXRlVGV4dFJ1biBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6
cmVuZGVyZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveE1v
ZGVyblBhdGg6OnRyYXZlcnNlTmV4dFRleHRCb3gpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkJveE1vZGVyblBhdGg6OnRyYXZlcnNlTmV4dE9uTGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6dHJhdmVyc2VQcmV2aW91c09u
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6
dHJhdmVyc2VOZXh0SW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpCb3hNb2Rlcm5QYXRoOjp0cmF2ZXJzZVByZXZpb3VzSW5saW5lQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpmaXJzdExlYWZCb3hGb3JJbmxp
bmVCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveE1vZGVy
blBhdGg6Omxhc3RMZWFmQm94Rm9ySW5saW5lQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjphdEVuZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6Ym94IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpp
bmxpbmVDb250ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3hNb2Rlcm5QYXRoOjppc1dpdGhpbklubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVJdGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6dHJhdmVyc2VOZXh0Qm94KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjp0cmF2ZXJzZVByZXZpb3VzQm94
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjp0cmF2
ZXJzZU5leHRMZWFmKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rl
cm5QYXRoOjp0cmF2ZXJzZVByZXZpb3VzTGVhZik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6Qm94TW9kZXJuUGF0aDo6dHJhdmVyc2VOZXh0V2l0aFNhbWVMYXlvdXRCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveE1vZGVyblBhdGg6OnRyYXZlcnNl
UHJldmlvdXNXaXRoU2FtZUxheW91dEJveCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6Qm94TW9kZXJuUGF0aDo6c2V0QXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkJveE1vZGVyblBhdGg6OmJveGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpsaW5lIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpyZW5kZXJUZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hNb2Rlcm5QYXRoOjpkaXJlY3Rp
b24gY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRl
cmF0b3JJbmxpbmVCb3guY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL0lubGluZUl0ZXJhdG9ySW5saW5lQm94LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpJbmxpbmVCb3g6OklubGluZUJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6SW5saW5lQm94OjpoYXNDbG9zZWRMZWZ0QW5kUmlnaHRFZGdlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpJbmxpbmVCb3g6Om5leHRJ
bmxpbmVCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OklubGlu
ZUJveDo6cHJldmlvdXNJbmxpbmVCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OklubGluZUJveDo6Zmlyc3RMZWFmQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpJbmxpbmVCb3g6Omxhc3RMZWFmQm94IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpJbmxpbmVCb3g6OmVuZExlYWZCb3ggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OklubGluZUJveEl0ZXJhdG9yOjpJ
bmxpbmVCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6SW5s
aW5lQm94SXRlcmF0b3I6OnRyYXZlcnNlTmV4dElubGluZUJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6SW5saW5lQm94SXRlcmF0b3I6OnRyYXZlcnNlUHJldmlvdXNJbmxp
bmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OmZpcnN0SW5saW5lQm94
Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpmaXJzdFJvb3RJbmxpbmVC
b3hGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OmlubGluZUJveEZvcik6
CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvcklubGlu
ZUJveC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lu
bGluZUl0ZXJhdG9ySW5saW5lQm94LmguCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6SW5saW5lQm94OjpyZW5kZXJlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6SW5saW5lQm94OjpsZWdhY3lJbmxpbmVCb3ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lSXRlcmF0b3I6OklubGluZUJveEl0ZXJhdG9yOjpJbmxpbmVCb3hJdGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6SW5saW5lQm94SXRlcmF0b3I6
Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6SW5s
aW5lQm94SXRlcmF0b3I6Om9wZXJhdG9yLT4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OklubGluZUJveEl0ZXJhdG9yOjpnZXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lSXRlcmF0b3I6OklubGluZUJveDo6aXRlcmF0b3IgY29uc3QpOgorICAgICAg
ICAoaXNUeXBlKToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0
ZXJhdG9yTGluZUJveC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lQm94LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yOjp0cmF2
ZXJzZU5leHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVy
YXRvcjo6dHJhdmVyc2VQcmV2aW91cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6TGluZUJveEl0ZXJhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpmaXJzdExpbmVCb3hGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6Omxhc3RMaW5lQm94Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpMaW5lQm94OjpuZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpMaW5lQm94OjpwcmV2aW91cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVJdGVyYXRvcjo6TGluZUJveDo6Zmlyc3RMZWFmQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94OjpsYXN0TGVhZkJveCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Y2xvc2VzdEJveEZvckhvcml6b250YWxQb3NpdGlv
bik6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckxp
bmVCb3guaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9J
bmxpbmVJdGVyYXRvckxpbmVCb3guaC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpMaW5lQm94OjpoZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0
b3I6OkxpbmVCb3hJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvcjo6b3BlcmF0b3IgYm9vbCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9y
OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpM
aW5lQm94SXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3I6Om9wZXJhdG9yLT4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OnByZXZpb3VzTGluZUJveENv
bnRlbnRCb3R0b21PckJvcmRlckFuZFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OmNvbnRlbnRTdGFydEluQmxvY2tEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3g6OkxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lSXRlcmF0b3I6OkxpbmVCb3g6OmNvbnRlbnRMb2dpY2FsVG9wIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94Ojpjb250ZW50TG9naWNhbEJvdHRv
bSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveDo6Y29u
dGVudExvZ2ljYWxUb3BBZGp1c3RlZEZvclByZWNlZGluZ0xpbmVCb3ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3g6OmNvbnRlbnRMb2dpY2FsQm90dG9t
QWRqdXN0ZWRGb3JGb2xsb3dpbmdMaW5lQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUl0ZXJhdG9yOjpMaW5lQm94Ojp0b3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lSXRlcmF0b3I6OkxpbmVCb3g6OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6TGluZUJveDo6aW5rT3ZlcmZsb3dUb3AgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3g6Omlua092ZXJmbG93Qm90dG9tIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94Ojpjb250ZW50TG9n
aWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVC
b3g6OmNvbnRlbnRMb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkxpbmVCb3g6OmNvbnRlbnRMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3g6OmlzSG9yaXpvbnRhbCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveDo6YmFzZWxpbmVUeXBlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94Ojpjb250YWlu
aW5nQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVC
b3g6OmNvbnRhaW5pbmdGcmFnbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6TGluZUJveDo6aXNGaXJzdEFmdGVyUGFnZUJyZWFrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94Ojppc0ZpcnN0IGNvbnN0KToKKyAgICAg
ICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yTGluZUJveExlZ2Fj
eVBhdGguaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9J
bmxpbmVJdGVyYXRvckxpbmVCb3hMZWdhY3lQYXRoLmguCisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6TGluZUJveEl0ZXJhdG9yTGVn
YWN5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJh
dG9yTGVnYWN5UGF0aDo6Y29udGVudExvZ2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvckxlZ2FjeVBhdGg6OmNvbnRlbnRMb2dp
Y2FsQm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5l
Qm94SXRlcmF0b3JMZWdhY3lQYXRoOjpjb250ZW50TG9naWNhbFRvcEFkanVzdGVkRm9yUHJlY2Vk
aW5nTGluZUJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGlu
ZUJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6Y29udGVudExvZ2ljYWxCb3R0b21BZGp1c3RlZEZvckZv
bGxvd2luZ0xpbmVCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6
OkxpbmVCb3hJdGVyYXRvckxlZ2FjeVBhdGg6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6Ym90dG9tIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JMZWdh
Y3lQYXRoOjppbmtPdmVyZmxvd1RvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJ
dGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6aW5rT3ZlcmZsb3dCb3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvckxl
Z2FjeVBhdGg6OmNvbnRlbnRMb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6Y29udGVudExvZ2ljYWxS
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0
ZXJhdG9yTGVnYWN5UGF0aDo6aXNIb3Jpem9udGFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JMZWdhY3lQYXRoOjpiYXNlbGluZVR5cGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRv
ckxlZ2FjeVBhdGg6OmNvbnRhaW5pbmdCbG9jayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6Y29udGFpbmluZ0ZyYWdt
ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRl
cmF0b3JMZWdhY3lQYXRoOjppc0ZpcnN0QWZ0ZXJQYWdlQnJlYWsgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvckxlZ2FjeVBhdGg6OnRyYXZl
cnNlTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJh
dG9yTGVnYWN5UGF0aDo6dHJhdmVyc2VQcmV2aW91cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTGVnYWN5
UGF0aDo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6Okxp
bmVCb3hJdGVyYXRvckxlZ2FjeVBhdGg6OmZpcnN0TGVhZkJveCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aDo6bGFzdExl
YWZCb3ggY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5l
SXRlcmF0b3JMaW5lQm94TW9kZXJuUGF0aC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZUJveE1vZGVyblBhdGguaC4KKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRo
OjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoOjpjb250ZW50TG9naWNhbFRvcCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTW9k
ZXJuUGF0aDo6Y29udGVudExvZ2ljYWxCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvck1vZGVyblBhdGg6OnRvcCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0
aDo6Ym90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5l
Qm94SXRlcmF0b3JNb2Rlcm5QYXRoOjppbmtPdmVyZmxvd1RvcCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aDo6aW5rT3Zl
cmZsb3dCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6Okxp
bmVCb3hJdGVyYXRvck1vZGVyblBhdGg6OmNvbnRlbnRMb2dpY2FsVG9wQWRqdXN0ZWRGb3JQcmVj
ZWRpbmdMaW5lQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpM
aW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoOjpjb250ZW50TG9naWNhbEJvdHRvbUFkanVzdGVkRm9y
Rm9sbG93aW5nTGluZUJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6TGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aDo6Y29udGVudExvZ2ljYWxMZWZ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5Q
YXRoOjpjb250ZW50TG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoOjppc0hvcml6b250YWwgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvck1vZGVy
blBhdGg6OmJhc2VsaW5lVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6TGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aDo6Y29udGFpbmluZ0Jsb2NrIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5Q
YXRoOjpjb250YWluaW5nRnJhZ21lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvck1vZGVyblBhdGg6OmlzRmlyc3RBZnRlclBhZ2VCcmVh
ayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJh
dG9yTW9kZXJuUGF0aDo6dHJhdmVyc2VOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0
ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoOjp0cmF2ZXJzZVByZXZpb3VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRo
OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpM
aW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoOjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aDo6Zmlyc3RMZWFmQm94
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0
b3JNb2Rlcm5QYXRoOjpsYXN0TGVhZkJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aDo6c2V0QXRFbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvck1vZGVyblBhdGg6Omxp
bmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRl
cmF0b3JNb2Rlcm5QYXRoOjpsaW5lIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRp
b24vaW5saW5lL0lubGluZUl0ZXJhdG9yTG9naWNhbE9yZGVyVHJhdmVyc2FsLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxv
Z2ljYWxPcmRlclRyYXZlcnNhbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6bWFrZVRleHRMb2dpY2FsT3JkZXJDYWNoZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUl0ZXJhdG9yOjp1cGRhdGVUZXh0TG9naWNhbE9yZGVyQ2FjaGVJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0Qm94SW5Mb2dpY2FsT3Jk
ZXJGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6Om5leHRUZXh0Qm94SW5M
b2dpY2FsT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6Om1ha2VMaW5l
TG9naWNhbE9yZGVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OnVw
ZGF0ZUxpbmVMb2dpY2FsT3JkZXJDYWNoZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUl0ZXJhdG9yOjpmaXJzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6bGFzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6bmV4dExlYWZPbkxpbmVJbkxvZ2ljYWxP
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6cHJldmlvdXNMZWFmT25M
aW5lSW5Mb2dpY2FsT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OmZp
cnN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lSXRlcmF0b3I6Omxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZSk6Cisg
ICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckxvZ2ljYWxP
cmRlclRyYXZlcnNhbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0lubGluZUl0ZXJhdG9yTG9naWNhbE9yZGVyVHJhdmVyc2FsLmguCisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6bGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpOgorICAgICAg
ICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JUZXh0Qm94LmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvclRleHRCb3guY3BwLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRC
b3g6Om5leHRUZXh0Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpUZXh0Qm94OjpzZWxlY3Rpb25SZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUl0ZXJhdG9yOjpUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OmlzQ29tYmluZWRU
ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94Ojpm
b250Q2FzY2FkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4
dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0VGV4dEJveCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Zmlyc3RUZXh0Qm94Rm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUl0ZXJhdG9yOjp0ZXh0Qm94Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUl0ZXJhdG9yOjp0ZXh0Qm94ZXNGb3IpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlv
bi9pbmxpbmUvSW5saW5lSXRlcmF0b3JUZXh0Qm94Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0Qm94LmguCisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveDo6cmVuZGVyZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3g6OmxlZ2FjeUlubGluZUJveCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9y
OjpUZXh0Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRl
eHRCb3hJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3ItPiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yOjpnZXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3hSYW5nZTo6VGV4
dEJveFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0Qm94UmFu
Z2U6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0
Qm94UmFuZ2U6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6
VGV4dEJveDo6aGFzSHlwaGVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJh
dG9yOjpUZXh0Qm94OjpUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpUZXh0Qm94Ojp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpUZXh0Qm94OjpzdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRv
cjo6VGV4dEJveDo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUl0ZXJhdG9y
OjpUZXh0Qm94OjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0
b3I6OlRleHRCb3g6OnNlbGVjdGFibGVSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVJdGVyYXRvcjo6VGV4dEJveDo6Y3JlYXRlVGV4dFJ1biBjb25zdCk6CisgICAgICAgIChp
c1R5cGUpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdy
YXRpb25JbmxpbmVDb250ZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQ6OklubGluZUNvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQ6
Omhhc0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246
OiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29u
dGVudDo6fklubGluZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246OklubGluZUNvbnRlbnQ6OnJlbmRlcmVyRm9yTGF5b3V0Qm94IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50Ojpjb250YWluaW5nQmxv
Y2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNv
bnRlbnQ6OmluZGV4Rm9yQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVn
cmF0aW9uOjpJbmxpbmVDb250ZW50OjpmaXJzdEJveEZvckxheW91dEJveCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudDo6Zmlyc3RCb3hJ
bmRleEZvckxheW91dEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3Jh
dGlvbjo6SW5saW5lQ29udGVudDo6bm9uUm9vdElubGluZUJveEluZGV4ZXNGb3JMYXlvdXRCb3gg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRl
bnQ6OmNsZWFyQW5kRGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9u
OjpJbmxpbmVDb250ZW50OjpyZWxlYXNlQ2FjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50OjpzaHJpbmtUb0ZpdCk6CisgICAgICAgICogbGF5
b3V0L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbklubGluZUNvbnRlbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpJbmxpbmVDb250ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50
ZWdyYXRpb246OklubGluZUNvbnRlbnQ6Omhhc1Zpc3VhbE92ZXJmbG93IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50OjpzZXRIYXNWaXN1
YWxPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5l
Q29udGVudDo6bGluZUZvckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRl
Z3JhdGlvbjo6SW5saW5lQ29udGVudDo6bGluZUxheW91dCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudDo6dHJhdmVyc2VOb25Sb290SW5s
aW5lQm94ZXMpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50
ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVp
bGRlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6b3BlcmF0b3Ir
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpsaW5lT3ZlcmZsb3dMb2dp
Y2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OklubGluZUNv
bnRlbnRCdWlsZGVyOjpJbmxpbmVDb250ZW50QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudEJ1aWxkZXI6OmJ1aWxkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50QnVpbGRlcjo6
Y3JlYXRlRGlzcGxheUxpbmVzIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24v
aW5saW5lL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklu
bGluZUNvbnRlbnRCdWlsZGVyLmguCisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL2lubGlu
ZS9MYXlvdXRJbnRlZ3JhdGlvbkxpbmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmUuaC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lOjpMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dEludGVncmF0aW9uOjpMaW5lOjpmaXJzdEJveEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lOjpib3hDb3VudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZTo6bGluZUJveFRvcCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZTo6bGluZUJveEJvdHRvbSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZTo6bGluZUJv
eExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmU6
OmxpbmVCb3hSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlv
bjo6TGluZTo6bGluZUJveEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJ
bnRlZ3JhdGlvbjo6TGluZTo6bGluZUJveFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dEludGVncmF0aW9uOjpMaW5lOjplbmNsb3NpbmdDb250ZW50VG9wIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lOjplbmNsb3NpbmdDb250ZW50
Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5l
OjpzY3JvbGxhYmxlT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50
ZWdyYXRpb246OkxpbmU6Omlua092ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dEludGVncmF0aW9uOjpMaW5lOjpiYXNlbGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZTo6YmFzZWxpbmVUeXBlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lOjppc0hvcml6b250YWwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmU6OmNvbnRlbnRMb2dpY2Fs
T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5l
Ojpjb250ZW50TG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRp
b24vaW5saW5lL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5
b3V0LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0
OjpMaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5l
TGF5b3V0Ojp+TGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlv
bjo6TGluZUxheW91dDo6YmxvY2tDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNvbnRhaW5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpjYW5Vc2VGb3JBZnRlclN0
eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5
b3V0OjpjYW5Vc2VGb3JBZnRlcklubGluZUJveFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpzaG91bGRTd2l0Y2hUb0xlZ2FjeU9u
SW52YWxpZGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9u
OjpMaW5lTGF5b3V0Ojp1cGRhdGVSZXBsYWNlZERpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OnVwZGF0ZUlubGluZUJsb2NrRGltZW5z
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6
dXBkYXRlSW5saW5lVGFibGVEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dElu
dGVncmF0aW9uOjpMaW5lTGF5b3V0Ojp1cGRhdGVMaXN0SXRlbURpbWVuc2lvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OnVwZGF0ZUxpc3RNYXJr
ZXJEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjb250
ZW50TG9naWNhbFdpZHRoRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50
ZWdyYXRpb246OmNvbnRlbnRMb2dpY2FsSGVpZ2h0Rm9yUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246Omhvcml6b250YWxMb2dpY2FsTWFyZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjp2ZXJ0aWNhbExvZ2ljYWxNYXJnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmxvZ2ljYWxCb3JkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmxvZ2ljYWxQYWRkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0Ojp1cGRhdGVMYXlvdXRC
b3hEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5l
TGF5b3V0Ojp1cGRhdGVMaW5lQnJlYWtCb3hEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0Ojp1cGRhdGVJbmxpbmVCb3hEaW1lbnNpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0Ojp1cGRh
dGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91
dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmxheW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y29uc3RydWN0Q29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6dXBkYXRlRm9ybWF0
dGluZ1Jvb3RHZW9tZXRyeUFuZEludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OnByZXBhcmVMYXlvdXRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6cHJlcGFyZUZsb2F0aW5nU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNv
bnRlbnRMb2dpY2FsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVn
cmF0aW9uOjpMaW5lTGF5b3V0OjpsaW5lQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6Omhhc1Zpc3VhbE92ZXJmbG93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpmaXJzdExp
bmVQaHlzaWNhbEJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVn
cmF0aW9uOjpMaW5lTGF5b3V0OjpsYXN0TGluZUxvZ2ljYWxCYXNlbGluZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6YWRqdXN0Rm9yUGFn
aW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91
dDo6Y29sbGVjdE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9u
OjpMaW5lTGF5b3V0OjplbnN1cmVJbmxpbmVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0Ojp0ZXh0Qm94ZXNGb3IgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmJveEZvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Zmlyc3RJ
bmxpbmVCb3hGb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246
OkxpbmVMYXlvdXQ6OmZpcnN0Um9vdElubGluZUJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Zmlyc3RMaW5lQm94IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpsYXN0TGluZUJv
eCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91
dDo6Zmlyc3RJbmxpbmVCb3hSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dElu
dGVncmF0aW9uOjpMaW5lTGF5b3V0OjplbmNsb3NpbmdCb3JkZXJCb3hSZWN0Rm9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0Ojp2aXN1YWxP
dmVyZmxvd0JvdW5kaW5nQm94UmVjdEZvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y29sbGVjdElubGluZUJveFJlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0OjpyZW5kZXJl
ckZvckxheW91dEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlv
bjo6TGluZUxheW91dDo6cm9vdExheW91dEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6cm9vdExheW91dEJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6ZmxpcHBlZENvbnRlbnRPZmZzZXRJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6cGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmZsaXBwZWRSZWN0Rm9yV3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlv
dXQ6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVM
YXlvdXQ6OnJlbGVhc2VDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246OkxpbmVMYXlvdXQ6OmNsZWFySW5saW5lQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6ZW5zdXJlTGluZURhbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6b3V0cHV0TGluZVRyZWUg
Y29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdy
YXRpb25MaW5lTGF5b3V0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmguCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6aXNQYWdpbmF0ZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmZsb3cgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmZsb3cp
OgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25Q
YWdpbmF0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0SW50ZWdyYXRpb246OmNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpjb21wdXRlTGluZUJyZWFrSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OmNvbXB1dGVPZmZzZXRB
ZnRlckxpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6c2V0
UGFnZUJyZWFrRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6
dXBkYXRlTWluaW11bVBhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246Om1ha2VBZGp1c3RlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50
ZWdyYXRpb246OmFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdpbmF0aW9uKToKKyAgICAgICAgKiBs
YXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVn
cmF0aW9uUGFnaW5hdGlvbi5oLgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUv
TGluZVNlbGVjdGlvbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xpbmVTZWxlY3Rpb24uaC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVTZWxlY3Rpb246
OmxvZ2ljYWxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGluZVNlbGVjdGlvbjo6bG9naWNhbEJv
dHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lU2VsZWN0aW9uOjpsb2dpY2FsUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMaW5lU2VsZWN0aW9uOjpwaHlzaWNhbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGluZVNlbGVjdGlvbjo6bG9naWNhbFRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6TGluZVNlbGVjdGlvbjo6c2VsZWN0aW9uU3RhdGUpOgor
CiAyMDIyLTA0LTE3ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmFwcGx5TGluZUNsYW1wIHNob3VsZCB1c2Ugc2l6
ZV90CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDA0MGRhY2E1ZmJlNWU5OTUwN2FiZjk1YzQ0YjA3
MjU4MjEzNzU1MmUuLjNiN2JiYzA5NThkMmMwZWUxZDY0NzE0NzYyZDIwNTYyODgyMTA1YTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMjEsNiArMTIxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL2ludmFsaWRhdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvdGV4dCIKICAgICAiJHtXRUJDT1JFX0RJUn0v
bGF5b3V0L2ludGVncmF0aW9uIgorICAgICIke1dFQkNPUkVfRElSfS9sYXlvdXQvaW50ZWdyYXRp
b24vaW5saW5lIgogICAgICIke1dFQkNPUkVfRElSfS9sYXlvdXQvbGF5b3V0dHJlZSIKICAgICAi
JHtXRUJDT1JFX0RJUn0vbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZSIKICAgICAiJHtX
RUJDT1JFX0RJUn0vbG9hZGVyIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggZTI0NDU3ODZiYmY2MTNl
N2Q1Nzc2MzI5ZWUxMjk3NjhjZThhNTNkYy4uODBiYmVhOGU3MjM0ZjA1NWVmZDZlMzQwMDc1MGIz
N2YzMzE3OGNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC05NzYsMTYgKzk3NiwxNiBAQCBzZXQo
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Qm94LmgKICAgICBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVSZWN0LmgKIAotICAgIGxheW91dC9pbnRlZ3Jh
dGlvbi9JbmxpbmVJdGVyYXRvckJveC5oCi0gICAgbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0
ZXJhdG9yQm94TGVnYWN5UGF0aC5oCi0gICAgbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJh
dG9yQm94TW9kZXJuUGF0aC5oCi0gICAgbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9y
TGluZUJveC5oCi0gICAgbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZUJveExl
Z2FjeVBhdGguaAotICAgIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmVCb3hN
b2Rlcm5QYXRoLmgKLSAgICBsYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMb2dpY2Fs
T3JkZXJUcmF2ZXJzYWwuaAotICAgIGxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRl
eHRCb3guaAotICAgIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNv
bnRlbnQuaAotICAgIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmUuaAor
ICAgIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3guaAorICAgIGxh
eW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmgKKyAg
ICBsYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5o
CisgICAgbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckxpbmVCb3guaAor
ICAgIGxheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JMaW5lQm94TGVnYWN5
UGF0aC5oCisgICAgbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckxpbmVC
b3hNb2Rlcm5QYXRoLmgKKyAgICBsYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJh
dG9yTG9naWNhbE9yZGVyVHJhdmVyc2FsLmgKKyAgICBsYXlvdXQvaW50ZWdyYXRpb24vaW5saW5l
L0lubGluZUl0ZXJhdG9yVGV4dEJveC5oCisgICAgbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9M
YXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuaAorICAgIGxheW91dC9pbnRlZ3JhdGlvbi9p
bmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lLmgKIAogICAgIGxheW91dC9sYXlvdXR0cmVlL0xh
eW91dENvbnRhaW5lckJveC5oCiAgICAgbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggODhhNTA1OGEwMTYxZDcyMGJiOWQ1NDVkMmEzMzNkMjMzNzkxMmFkNC4u
MGFmM2QwNmE1YjBiYmM2OGZjMDExMzNiY2NmZTFmMmNkOTcwZTg5ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
QEAgLTE1ODYsMTcgKzE1ODYsMTcgQEAgbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
ZGlzcGxheS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlMaW5lQnVpbGRlci5jcHAKIGxh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2ludmFsaWRhdGlvbi9JbmxpbmVJbnZhbGlk
YXRpb24uY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS90ZXh0L1RleHRVdGls
LmNwcAotbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94LmNwcAotbGF5b3V0L2lu
dGVncmF0aW9uL0lubGluZUl0ZXJhdG9ySW5saW5lQm94LmNwcAotbGF5b3V0L2ludGVncmF0aW9u
L0lubGluZUl0ZXJhdG9yTGluZUJveC5jcHAKLWxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckxvZ2ljYWxPcmRlclRyYXZlcnNhbC5jcHAKLWxheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJ
dGVyYXRvclRleHRCb3guY3BwCitsYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJh
dG9yQm94LmNwcAorbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvcklubGlu
ZUJveC5jcHAKK2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JMaW5lQm94
LmNwcAorbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckxvZ2ljYWxPcmRl
clRyYXZlcnNhbC5jcHAKK2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JU
ZXh0Qm94LmNwcAorbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbklu
bGluZUNvbnRlbnRCdWlsZGVyLmNwcAorbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJ
bnRlZ3JhdGlvbklubGluZUNvbnRlbnQuY3BwCitsYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xh
eW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKK2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUv
TGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uQm94VHJlZS5jcHAKIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbkNvdmVyYWdlLmNwcAotbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5s
aW5lQ29udGVudEJ1aWxkZXIuY3BwCi1sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25JbmxpbmVDb250ZW50LmNwcAotbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
TGluZUxheW91dC5jcHAKLWxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblBhZ2lu
YXRpb24uY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwCiBsYXlvdXQvbGF5b3V0
dHJlZS9MYXlvdXRDb250YWluZXJCb3guY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3hH
ZW9tZXRyeS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjZWE3MzkzMWNkZWIyY2IwYTk0YTcxYTc4OTYxYzA0MTRhZTkxMmI5
Li4wNjBjNzhkODc4OWI5NDAxMTM0ZTcwNzM1N2JjY2NlMTgzMDhlYjRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDU4NSw2
ICsyNDU4NSwzNyBAQAogCQkJcGF0aCA9IGFuZ2xlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKKwkJNkY4MjgwNzYyODBDOURBODAwMzA0QjgyIC8qIGlubGluZSAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRTRBNjY0QzcyNTIxQjc3OTAw
NzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94LmNwcCAqLywKKwkJCQlFNEE2NjRDNjI1MjFCNzc4
MDA3MDgxREMgLyogSW5saW5lSXRlcmF0b3JCb3guaCAqLywKKwkJCQlFNEE2NjRDNTI1MjFCNzc4
MDA3MDgxREMgLyogSW5saW5lSXRlcmF0b3JCb3hMZWdhY3lQYXRoLmggKi8sCisJCQkJRTRBNjY0
QzQyNTIxQjc3NzAwNzA4MURDIC8qIElubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oICovLAor
CQkJCUU0MTVFQjE0MjcwQzM1MzcwMEU4REExQiAvKiBJbmxpbmVJdGVyYXRvcklubGluZUJveC5j
cHAgKi8sCisJCQkJRTQxNUVCMTEyNzBDMzUxMjAwRThEQTFCIC8qIElubGluZUl0ZXJhdG9ySW5s
aW5lQm94LmggKi8sCisJCQkJRTREMzNGNDIyNTJDNTBBODAwODM3RDA1IC8qIElubGluZUl0ZXJh
dG9yTGluZUJveC5jcHAgKi8sCisJCQkJRTREMzNGM0YyNTJDNEI4MjAwODM3RDA1IC8qIElubGlu
ZUl0ZXJhdG9yTGluZUJveC5oICovLAorCQkJCUU0RDMzRjQzMjUyQzUwRTIwMDgzN0QwNSAvKiBJ
bmxpbmVJdGVyYXRvckxpbmVCb3hMZWdhY3lQYXRoLmggKi8sCisJCQkJRTREMzNGNDUyNTJDNTBG
QjAwODM3RDA1IC8qIElubGluZUl0ZXJhdG9yTGluZUJveE1vZGVyblBhdGguaCAqLywKKwkJCQlF
NDFBQ0MxMjI3MTczM0YzMDAzRTkxNTcgLyogSW5saW5lSXRlcmF0b3JMb2dpY2FsT3JkZXJUcmF2
ZXJzYWwuY3BwICovLAorCQkJCUU0MUFDQzE1MjcxNzM0MDIwMDNFOTE1NyAvKiBJbmxpbmVJdGVy
YXRvckxvZ2ljYWxPcmRlclRyYXZlcnNhbC5oICovLAorCQkJCUU0N0NFQkRFMjcwOTkxNjQwMEI4
RDhGNSAvKiBJbmxpbmVJdGVyYXRvclRleHRCb3guY3BwICovLAorCQkJCUU0N0NFQkUwMjcwOTkx
NkQwMEI4RDhGNSAvKiBJbmxpbmVJdGVyYXRvclRleHRCb3guaCAqLywKKwkJCQlFNEZCNEIzNTIz
OUJFQjEwMDAzQzMzNkEgLyogTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmNwcCAqLywK
KwkJCQlFNDUxQzYzMzIzOTQwNThFMDA5OTMxOTAgLyogTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVD
b250ZW50LmggKi8sCisJCQkJNkYzRkJBOTYyNTU2RTMwODAwMzUzMEZEIC8qIExheW91dEludGVn
cmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwICovLAorCQkJCTZGM0ZCQTk3MjU1NkUzMTIw
MDM1MzBGRCAvKiBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmggKi8sCisJ
CQkJNkZCNDdFNjEyMjc3NDI1QTAwQzdCQ0IwIC8qIExheW91dEludGVncmF0aW9uTGluZS5oICov
LAorCQkJCUU0QUJBQkRFMjM2MDg5M0QwMEZBNDM0NSAvKiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVM
YXlvdXQuY3BwICovLAorCQkJCUU0QUJBQkRCMjM2MDg4RkQwMEZBNDM0NSAvKiBMYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuaCAqLywKKwkJCQlFNDMxMkFCNTI0QjMyNjU2MDA2NzgzNDkgLyog
TGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcCAqLywKKwkJCQlFNDMxMkFCNzI0QjMyNjU2
MDA2NzgzNDkgLyogTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmggKi8sCisJCQkJNkYxQjEw
MTMyN0UyRDUyNDAwNzE3OEU2IC8qIExpbmVTZWxlY3Rpb24uaCAqLywKKwkJCSk7CisJCQlwYXRo
ID0gaW5saW5lOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNkY4NDRGN0Yy
NjNEOTE2MTAwRjkxMzcwIC8qIGZvcm1hdHRpbmdDb250ZXh0cyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0zMTYzNywzNCArMzE2NjgsMTEgQEAKIAkJRTRG
QjRCMUUyMzk1MzU2RjAwM0MzMzZBIC8qIGludGVncmF0aW9uICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlFNEE2NjRDNzI1MjFCNzc5MDA3MDgxREMgLyog
SW5saW5lSXRlcmF0b3JCb3guY3BwICovLAotCQkJCUU0QTY2NEM2MjUyMUI3NzgwMDcwODFEQyAv
KiBJbmxpbmVJdGVyYXRvckJveC5oICovLAotCQkJCUU0QTY2NEM1MjUyMUI3NzgwMDcwODFEQyAv
KiBJbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCAqLywKLQkJCQlFNEE2NjRDNDI1MjFCNzc3
MDA3MDgxREMgLyogSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmggKi8sCi0JCQkJRTQxNUVC
MTQyNzBDMzUzNzAwRThEQTFCIC8qIElubGluZUl0ZXJhdG9ySW5saW5lQm94LmNwcCAqLywKLQkJ
CQlFNDE1RUIxMTI3MEMzNTEyMDBFOERBMUIgLyogSW5saW5lSXRlcmF0b3JJbmxpbmVCb3guaCAq
LywKLQkJCQlFNEQzM0Y0MjI1MkM1MEE4MDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JMaW5lQm94
LmNwcCAqLywKLQkJCQlFNEQzM0YzRjI1MkM0QjgyMDA4MzdEMDUgLyogSW5saW5lSXRlcmF0b3JM
aW5lQm94LmggKi8sCi0JCQkJRTREMzNGNDMyNTJDNTBFMjAwODM3RDA1IC8qIElubGluZUl0ZXJh
dG9yTGluZUJveExlZ2FjeVBhdGguaCAqLywKLQkJCQlFNEQzM0Y0NTI1MkM1MEZCMDA4MzdEMDUg
LyogSW5saW5lSXRlcmF0b3JMaW5lQm94TW9kZXJuUGF0aC5oICovLAotCQkJCUU0MUFDQzEyMjcx
NzMzRjMwMDNFOTE1NyAvKiBJbmxpbmVJdGVyYXRvckxvZ2ljYWxPcmRlclRyYXZlcnNhbC5jcHAg
Ki8sCi0JCQkJRTQxQUNDMTUyNzE3MzQwMjAwM0U5MTU3IC8qIElubGluZUl0ZXJhdG9yTG9naWNh
bE9yZGVyVHJhdmVyc2FsLmggKi8sCi0JCQkJRTQ3Q0VCREUyNzA5OTE2NDAwQjhEOEY1IC8qIElu
bGluZUl0ZXJhdG9yVGV4dEJveC5jcHAgKi8sCi0JCQkJRTQ3Q0VCRTAyNzA5OTE2RDAwQjhEOEY1
IC8qIElubGluZUl0ZXJhdG9yVGV4dEJveC5oICovLAorCQkJCTZGODI4MDc2MjgwQzlEQTgwMDMw
NEI4MiAvKiBpbmxpbmUgKi8sCiAJCQkJRTQxODAyNTYyM0Q0NTRCNTAwRkZCMDcxIC8qIExheW91
dEludGVncmF0aW9uQm94VHJlZS5jcHAgKi8sCiAJCQkJRTQxODAyNTMyM0Q0NTQ5QTAwRkZCMDcx
IC8qIExheW91dEludGVncmF0aW9uQm94VHJlZS5oICovLAogCQkJCUU0MDNCNzlGMjUxQjExOEIw
MDE5RTgwMCAvKiBMYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmNwcCAqLywKIAkJCQlFNDAzQjdB
MTI1MUIxMTkzMDAxOUU4MDAgLyogTGF5b3V0SW50ZWdyYXRpb25Db3ZlcmFnZS5oICovLAotCQkJ
CUU0RkI0QjM1MjM5QkVCMTAwMDNDMzM2QSAvKiBMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRl
bnQuY3BwICovLAotCQkJCUU0NTFDNjMzMjM5NDA1OEUwMDk5MzE5MCAvKiBMYXlvdXRJbnRlZ3Jh
dGlvbklubGluZUNvbnRlbnQuaCAqLywKLQkJCQk2RjNGQkE5NjI1NTZFMzA4MDAzNTMwRkQgLyog
TGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHAgKi8sCi0JCQkJNkYzRkJB
OTcyNTU2RTMxMjAwMzUzMEZEIC8qIExheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxk
ZXIuaCAqLywKLQkJCQk2RkI0N0U2MTIyNzc0MjVBMDBDN0JDQjAgLyogTGF5b3V0SW50ZWdyYXRp
b25MaW5lLmggKi8sCi0JCQkJRTRBQkFCREUyMzYwODkzRDAwRkE0MzQ1IC8qIExheW91dEludGVn
cmF0aW9uTGluZUxheW91dC5jcHAgKi8sCi0JCQkJRTRBQkFCREIyMzYwODhGRDAwRkE0MzQ1IC8q
IExheW91dEludGVncmF0aW9uTGluZUxheW91dC5oICovLAotCQkJCUU0MzEyQUI1MjRCMzI2NTYw
MDY3ODM0OSAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwICovLAotCQkJCUU0MzEy
QUI3MjRCMzI2NTYwMDY3ODM0OSAvKiBMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCAqLywK
LQkJCQk2RjFCMTAxMzI3RTJENTI0MDA3MTc4RTYgLyogTGluZVNlbGVjdGlvbi5oICovLAogCQkJ
KTsKIAkJCXBhdGggPSBpbnRlZ3JhdGlvbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJh
dG9yQm94LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMyYWI5ODdiZGM0NmU3
OTE2ZjlmNzFhZGY3MWRkOTM0N2U1OGY3Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5l
SXRlcmF0b3JCb3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3guaCIK
LQotI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZUJveC5oIgotI2luY2x1ZGUgIklubGluZUl0
ZXJhdG9yVGV4dEJveC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5o
IgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVh
ay5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFt
ZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKLQotQm94SXRlcmF0b3I6OkJveEl0ZXJhdG9yKEJveDo6
UGF0aFZhcmlhbnQmJiBwYXRoVmFyaWFudCkKLSAgICA6IG1fYm94KFdURk1vdmUocGF0aFZhcmlh
bnQpKQotewotfQotCi1Cb3hJdGVyYXRvcjo6Qm94SXRlcmF0b3IoY29uc3QgQm94JiBydW4pCi0g
ICAgOiBtX2JveChydW4pCi17Ci19Ci0KLWJvb2wgQm94SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29u
c3QgQm94SXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAgIGlmIChhdEVuZCgpICYmIG90aGVy
LmF0RW5kKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIG1fYm94Lm1fcGF0
aFZhcmlhbnQgPT0gb3RoZXIubV9ib3gubV9wYXRoVmFyaWFudDsKLX0KLQotYm9vbCBCb3hJdGVy
YXRvcjo6YXRFbmQoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fYm94Lm1f
cGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguYXRFbmQo
KTsKLSAgICB9KTsKLX0KLQotTGVhZkJveEl0ZXJhdG9yIEJveDo6bmV4dE9uTGluZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIExlYWZCb3hJdGVyYXRvcigqdGhpcykudHJhdmVyc2VOZXh0T25MaW5l
KCk7Ci19Ci0KLUxlYWZCb3hJdGVyYXRvciBCb3g6OnByZXZpb3VzT25MaW5lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gTGVhZkJveEl0ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZVByZXZpb3VzT25MaW5l
KCk7Ci19Ci0KLUxlYWZCb3hJdGVyYXRvciBCb3g6Om5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVh
aygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExlYWZCb3hJdGVyYXRvcigqdGhpcykudHJhdmVyc2VO
ZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKLX0KLQotTGVhZkJveEl0ZXJhdG9yIEJveDo6
cHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExl
YWZCb3hJdGVyYXRvcigqdGhpcykudHJhdmVyc2VQcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJy
ZWFrKCk7Ci19Ci0KLUxpbmVCb3hJdGVyYXRvciBCb3g6OmxpbmVCb3goKSBjb25zdAotewotICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IEJveExlZ2FjeVBh
dGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIExpbmVCb3hJdGVyYXRvcihMaW5lQm94SXRlcmF0
b3JMZWdhY3lQYXRoKCZwYXRoLnJvb3RJbmxpbmVCb3goKSkpOwotICAgIH0KLSNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICAsIFtdKGNvbnN0IEJveE1vZGVyblBhdGgm
IHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIExpbmVCb3hJdGVyYXRvcihMaW5lQm94SXRlcmF0b3JN
b2Rlcm5QYXRoKHBhdGguaW5saW5lQ29udGVudCgpLCBwYXRoLmJveCgpLmxpbmVJbmRleCgpKSk7
Ci0gICAgfQotI2VuZGlmCi0gICAgKTsKLX0KLQotY29uc3QgUmVuZGVyU3R5bGUmIEJveDo6c3R5
bGUoKSBjb25zdAotewotICAgIHJldHVybiBsaW5lQm94KCktPmlzRmlyc3QoKSA/IHJlbmRlcmVy
KCkuZmlyc3RMaW5lU3R5bGUoKSA6IHJlbmRlcmVyKCkuc3R5bGUoKTsKLX0KLQotUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZSBCb3g6OnNlbGVjdGlvblN0YXRlKCkgY29uc3QKLXsKLSAgICBp
ZiAoaXNUZXh0KCkpIHsKLSAgICAgICAgYXV0byYgdGV4dCA9IGRvd25jYXN0PFRleHRCb3g+KCp0
aGlzKTsKLSAgICAgICAgYXV0byYgcmVuZGVyZXIgPSB0ZXh0LnJlbmRlcmVyKCk7Ci0gICAgICAg
IHJldHVybiByZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkuaGlnaGxpZ2h0U3RhdGVGb3JUZXh0
Qm94KHJlbmRlcmVyLCB0ZXh0LnNlbGVjdGFibGVSYW5nZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUoKTsKLX0KLQotTGVhZkJveEl0ZXJhdG9yOjpMZWFm
Qm94SXRlcmF0b3IoQm94OjpQYXRoVmFyaWFudCYmIHBhdGhWYXJpYW50KQotICAgIDogQm94SXRl
cmF0b3IoV1RGTW92ZShwYXRoVmFyaWFudCkpCi17Ci19Ci0KLUxlYWZCb3hJdGVyYXRvcjo6TGVh
ZkJveEl0ZXJhdG9yKGNvbnN0IEJveCYgcnVuKQotICAgIDogQm94SXRlcmF0b3IocnVuKQotewot
fQotCi1MZWFmQm94SXRlcmF0b3ImIExlYWZCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0T25MaW5l
KCkKLXsKLSAgICBXVEY6OnN3aXRjaE9uKG1fYm94Lm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBh
dGgpIHsKLSAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRPbkxpbmUoKTsKLSAgICB9KTsKLSAgICBy
ZXR1cm4gKnRoaXM7Ci19Ci0KLUxlYWZCb3hJdGVyYXRvciYgTGVhZkJveEl0ZXJhdG9yOjp0cmF2
ZXJzZVByZXZpb3VzT25MaW5lKCkKLXsKLSAgICBXVEY6OnN3aXRjaE9uKG1fYm94Lm1fcGF0aFZh
cmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcGF0aC50cmF2ZXJzZVByZXZpb3VzT25M
aW5lKCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1MZWFmQm94SXRlcmF0b3Im
IExlYWZCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKQot
ewotICAgIGRvIHsKLSAgICAgICAgdHJhdmVyc2VOZXh0T25MaW5lKCk7Ci0gICAgfSB3aGlsZSAo
IWF0RW5kKCkgJiYgbV9ib3guaXNMaW5lQnJlYWsoKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1MZWFmQm94SXRlcmF0b3ImIExlYWZCb3hJdGVyYXRvcjo6dHJhdmVyc2VQcmV2aW91c09uTGlu
ZUlnbm9yaW5nTGluZUJyZWFrKCkKLXsKLSAgICBkbyB7Ci0gICAgICAgIHRyYXZlcnNlUHJldmlv
dXNPbkxpbmUoKTsKLSAgICB9IHdoaWxlICghYXRFbmQoKSAmJiBtX2JveC5pc0xpbmVCcmVhaygp
KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUxlYWZCb3hJdGVyYXRvciBib3hGb3IoY29uc3Qg
UmVuZGVyTGluZUJyZWFrJiByZW5kZXJlcikKLXsKLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKLSAgICBpZiAoYXV0byogbGluZUxheW91dCA9IExheW91dEludGVncmF0aW9u
OjpMaW5lTGF5b3V0Ojpjb250YWluaW5nKHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIGxpbmVM
YXlvdXQtPmJveEZvcihyZW5kZXJlcik7Ci0jZW5kaWYKLSAgICByZXR1cm4geyBCb3hMZWdhY3lQ
YXRoKHJlbmRlcmVyLmlubGluZUJveFdyYXBwZXIoKSkgfTsKLX0KLQotTGVhZkJveEl0ZXJhdG9y
IGJveEZvcihjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKQotewotI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQotICAgIGlmIChhdXRvKiBsaW5lTGF5b3V0ID0gTGF5b3V0SW50
ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNvbnRhaW5pbmcocmVuZGVyZXIpKQotICAgICAgICByZXR1
cm4gbGluZUxheW91dC0+Ym94Rm9yKHJlbmRlcmVyKTsKLSNlbmRpZgotICAgIHJldHVybiB7IEJv
eExlZ2FjeVBhdGgocmVuZGVyZXIuaW5saW5lQm94V3JhcHBlcigpKSB9OwotfQotCi0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi1MZWFmQm94SXRlcmF0b3IgYm94Rm9yKGNv
bnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiBjb250ZW50LCBzaXplX3QgYm94
SW5kZXgpCi17Ci0gICAgcmV0dXJuIHsgQm94TW9kZXJuUGF0aCB7IGNvbnRlbnQsIGJveEluZGV4
IH0gfTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
Ci1jb25zdCBCb3hNb2Rlcm5QYXRoJiBCb3g6Om1vZGVyblBhdGgoKSBjb25zdAotewotICAgIHJl
dHVybiBzdGQ6OmdldDxCb3hNb2Rlcm5QYXRoPihtX3BhdGhWYXJpYW50KTsKLX0KLSNlbmRpZgot
Ci1jb25zdCBCb3hMZWdhY3lQYXRoJiBCb3g6OmxlZ2FjeVBhdGgoKSBjb25zdAotewotICAgIHJl
dHVybiBzdGQ6OmdldDxCb3hMZWdhY3lQYXRoPihtX3BhdGhWYXJpYW50KTsKLX0KLQotfQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJh
dG9yQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0
b3JCb3guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk0ZDUxODllNGFlMTQ3Nzlk
NzRhMTI3YjUxOTE3MzA0MzI2NjMyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRl
cmF0b3JCb3guaAorKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0
aC5oIgotI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oIgotI2luY2x1ZGUg
IkxlZ2FjeUlubGluZUVsZW1lbnRCb3guaCIKLSNpbmNsdWRlIDx2YXJpYW50PgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckxpbmVCcmVhazsKLWNsYXNzIFJlbmRlck9iamVj
dDsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi1uYW1lc3BhY2UgSW5saW5lSXRlcmF0b3IgewotCi1j
bGFzcyBMaW5lQm94SXRlcmF0b3I7Ci1jbGFzcyBCb3hJdGVyYXRvcjsKLWNsYXNzIExlYWZCb3hJ
dGVyYXRvcjsKLWNsYXNzIFRleHRCb3hJdGVyYXRvcjsKLQotc3RydWN0IEVuZEl0ZXJhdG9yIHsg
fTsKLQotY2xhc3MgQm94IHsKLXB1YmxpYzoKLSAgICB1c2luZyBQYXRoVmFyaWFudCA9IHN0ZDo6
dmFyaWFudDwKLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLSAgICAgICAg
Qm94TW9kZXJuUGF0aCwKLSNlbmRpZgotICAgICAgICBCb3hMZWdhY3lQYXRoCi0gICAgPjsKLQot
ICAgIEJveChQYXRoVmFyaWFudCYmKTsKLQotICAgIGJvb2wgaXNUZXh0KCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0lubGluZUJveCgpIGNvbnN0OwotICAgIGJvb2wgaXNSb290SW5saW5lQm94KCkgY29u
c3Q7Ci0KLSAgICBGbG9hdFJlY3QgdmlzdWFsUmVjdChmbG9hdCBmb3JtYXR0aW5nUm9vdFNpemVJ
bkJsb2NrRGlyZWN0aW9uKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgdmlzdWFsUmVjdElnbm9yaW5n
QmxvY2tEaXJlY3Rpb24oKSBjb25zdDsKLQotICAgIGZsb2F0IGxvZ2ljYWxUb3AoKSBjb25zdCB7
IHJldHVybiBpc0hvcml6b250YWwoKSA/IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9u
KCkueSgpIDogdmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKS54KCk7IH0KLSAgICBm
bG9hdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyB2aXN1
YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpLm1heFkoKSA6IHZpc3VhbFJlY3RJZ25vcmlu
Z0Jsb2NrRGlyZWN0aW9uKCkubWF4WCgpOyB9Ci0gICAgZmxvYXQgbG9naWNhbExlZnQoKSBjb25z
dCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0
aW9uKCkueCgpIDogdmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKS55KCk7IH0KLSAg
ICBmbG9hdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IHZp
c3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkubWF4WCgpIDogdmlzdWFsUmVjdElnbm9y
aW5nQmxvY2tEaXJlY3Rpb24oKS5tYXhZKCk7IH0KLSAgICBmbG9hdCBsb2dpY2FsV2lkdGgoKSBj
b25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGly
ZWN0aW9uKCkud2lkdGgoKSA6IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkuaGVp
Z2h0KCk7IH0KLSAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jp
em9udGFsKCkgPyB2aXN1YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpLmhlaWdodCgpIDog
dmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKS53aWR0aCgpOyB9Ci0KLSAgICBib29s
IGlzSG9yaXpvbnRhbCgpIGNvbnN0OwotICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdDsKLQot
ICAgIHVuc2lnbmVkIG1pbmltdW1DYXJldE9mZnNldCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIG1h
eGltdW1DYXJldE9mZnNldCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxlZnRtb3N0Q2FyZXRPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtaW5pbXVtQ2Fy
ZXRPZmZzZXQoKSA6IG1heGltdW1DYXJldE9mZnNldCgpOyB9Ci0gICAgdW5zaWduZWQgcmlnaHRt
b3N0Q2FyZXRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBtYXhpbXVtQ2FyZXRPZmZzZXQoKSA6IG1pbmltdW1DYXJldE9mZnNldCgpOyB9Ci0KLSAgICB1
bnNpZ25lZCBjaGFyIGJpZGlMZXZlbCgpIGNvbnN0OwotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkgJSAyID8gVGV4dERpcmVjdGlvbjo6UlRM
IDogVGV4dERpcmVjdGlvbjo6TFRSOyB9Ci0gICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSOyB9Ci0K
LSAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3Q7
Ci0KLSAgICBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKCkgY29uc3Q7Ci0gICAgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogUmVtb3ZlLiBGb3Ig
aW50ZXJtZWRpYXRlIHBvcnRpbmcgc3RlcHMgb25seS4KLSAgICBjb25zdCBMZWdhY3lJbmxpbmVC
b3gqIGxlZ2FjeUlubGluZUJveCgpIGNvbnN0OwotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQotICAgIGNvbnN0IElubGluZURpc3BsYXk6OkJveCogaW5saW5lQm94KCkgY29u
c3Q7Ci0jZW5kaWYKLQotICAgIExlYWZCb3hJdGVyYXRvciBuZXh0T25MaW5lKCkgY29uc3Q7Ci0g
ICAgTGVhZkJveEl0ZXJhdG9yIHByZXZpb3VzT25MaW5lKCkgY29uc3Q7Ci0gICAgTGVhZkJveEl0
ZXJhdG9yIG5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0OwotICAgIExlYWZCb3hJ
dGVyYXRvciBwcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkgY29uc3Q7Ci0KLSAgICBM
aW5lQm94SXRlcmF0b3IgbGluZUJveCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZnJpZW5k
IGNsYXNzIEJveEl0ZXJhdG9yOwotICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVCb3hJdGVyYXRvcjsK
LSAgICBmcmllbmQgY2xhc3MgTGVhZkJveEl0ZXJhdG9yOwotICAgIGZyaWVuZCBjbGFzcyBUZXh0
Qm94SXRlcmF0b3I7Ci0KLSAgICAvLyBUbyBoZWxwIHdpdGggZGVidWdnaW5nLgotI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotICAgIGNvbnN0IEJveE1vZGVyblBhdGgmIG1v
ZGVyblBhdGgoKSBjb25zdDsKLSNlbmRpZgotICAgIGNvbnN0IEJveExlZ2FjeVBhdGgmIGxlZ2Fj
eVBhdGgoKSBjb25zdDsKLQotICAgIFBhdGhWYXJpYW50IG1fcGF0aFZhcmlhbnQ7Ci19OwotCi1j
bGFzcyBCb3hJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Qm94SXRlcmF0b3ImKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQm94SXRlcmF0
b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQotCi0gICAgYm9v
bCBvcGVyYXRvcj09KEVuZEl0ZXJhdG9yKSBjb25zdCB7IHJldHVybiBhdEVuZCgpOyB9Ci0gICAg
Ym9vbCBvcGVyYXRvciE9KEVuZEl0ZXJhdG9yKSBjb25zdCB7IHJldHVybiAhYXRFbmQoKTsgfQot
Ci0gICAgY29uc3QgQm94JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX2JveDsgfQotICAg
IGNvbnN0IEJveCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX2JveDsgfQotCi0gICAg
Ym9vbCBhdEVuZCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQm94SXRlcmF0b3IoKSA6IG1f
Ym94KEJveExlZ2FjeVBhdGggeyBudWxscHRyIH0pIHsgfTsKLSAgICBCb3hJdGVyYXRvcihCb3g6
OlBhdGhWYXJpYW50JiYpOwotICAgIEJveEl0ZXJhdG9yKGNvbnN0IEJveCYpOwotCi0gICAgQm94
IG1fYm94OwotfTsKLQotY2xhc3MgTGVhZkJveEl0ZXJhdG9yIDogcHVibGljIEJveEl0ZXJhdG9y
IHsKLXB1YmxpYzoKLSAgICBMZWFmQm94SXRlcmF0b3IoKSA9IGRlZmF1bHQ7Ci0gICAgTGVhZkJv
eEl0ZXJhdG9yKEJveDo6UGF0aFZhcmlhbnQmJik7Ci0gICAgTGVhZkJveEl0ZXJhdG9yKGNvbnN0
IEJveCYpOwotCi0gICAgTGVhZkJveEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmUoKTsKLSAg
ICBMZWFmQm94SXRlcmF0b3ImIHRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsKLSAgICBMZWFmQm94
SXRlcmF0b3ImIHRyYXZlcnNlTmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7Ci0gICAgTGVh
ZkJveEl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsK
LX07Ci0KLUxlYWZCb3hJdGVyYXRvciBib3hGb3IoY29uc3QgUmVuZGVyTGluZUJyZWFrJik7Ci1M
ZWFmQm94SXRlcmF0b3IgYm94Rm9yKGNvbnN0IFJlbmRlckJveCYpOwotI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQotTGVhZkJveEl0ZXJhdG9yIGJveEZvcihjb25zdCBMYXlv
dXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYsIHNpemVfdCBib3hJbmRleCk7Ci0jZW5kaWYK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
aW5saW5lIEJveDo6Qm94KFBhdGhWYXJpYW50JiYgcGF0aCkKLSAgICA6IG1fcGF0aFZhcmlhbnQo
V1RGTW92ZShwYXRoKSkKLXsKLX0KLQotaW5saW5lIGJvb2wgQm94Ojppc1RleHQoKSBjb25zdAot
ewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKLSAgICAgICAgcmV0dXJuIHBhdGguaXNUZXh0KCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBi
b29sIEJveDo6aXNJbmxpbmVCb3goKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaXNJ
bmxpbmVCb3goKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGJvb2wgQm94Ojppc1Jvb3RJbmxpbmVC
b3goKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtd
KGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaXNSb290SW5saW5lQm94KCk7Ci0g
ICAgfSk7Ci19Ci0KLWlubGluZSBGbG9hdFJlY3QgQm94Ojp2aXN1YWxSZWN0KGZsb2F0IGZvcm1h
dHRpbmdSb290U2l6ZUluQmxvY2tEaXJlY3Rpb24pIGNvbnN0Ci17Ci0gICAgYXV0byB2aXN1YWxS
ZWN0ID0gdmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKTsKLSAgICBpZiAoIXN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHZpc3VhbFJl
Y3Q7Ci0KLSAgICBpZiAoc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAg
ICB2aXN1YWxSZWN0LnNldFkoZm9ybWF0dGluZ1Jvb3RTaXplSW5CbG9ja0RpcmVjdGlvbiAtIHZp
c3VhbFJlY3QubWF4WSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHZpc3VhbFJlY3Quc2V0WChmb3Jt
YXR0aW5nUm9vdFNpemVJbkJsb2NrRGlyZWN0aW9uIC0gdmlzdWFsUmVjdC5tYXhYKCkpOwotICAg
IHJldHVybiB2aXN1YWxSZWN0OwotfQotCi1pbmxpbmUgRmxvYXRSZWN0IEJveDo6dmlzdWFsUmVj
dElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgu
dmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKTsKLSAgICB9KTsKLX0KLQotaW5saW5l
IGJvb2wgQm94Ojppc0hvcml6b250YWwoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgu
aXNIb3Jpem9udGFsKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGluZSBib29sIEJveDo6aXNMaW5lQnJl
YWsoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtd
KGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaXNMaW5lQnJlYWsoKTsKLSAgICB9
KTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIEJveDo6bWluaW11bUNhcmV0T2Zmc2V0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRo
KSB7Ci0gICAgICAgIHJldHVybiBwYXRoLm1pbmltdW1DYXJldE9mZnNldCgpOwotICAgIH0pOwot
fQotCi1pbmxpbmUgdW5zaWduZWQgQm94OjptYXhpbXVtQ2FyZXRPZmZzZXQoKSBjb25zdAotewot
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsK
LSAgICAgICAgcmV0dXJuIHBhdGgubWF4aW11bUNhcmV0T2Zmc2V0KCk7Ci0gICAgfSk7Ci19Ci0K
LWlubGluZSB1bnNpZ25lZCBjaGFyIEJveDo6YmlkaUxldmVsKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAg
IHJldHVybiBwYXRoLmJpZGlMZXZlbCgpOwotICAgIH0pOwotfQotCi1pbmxpbmUgY29uc3QgUmVu
ZGVyT2JqZWN0JiBCb3g6OnJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSAtPiBjb25zdCBSZW5kZXJPYmplY3Qm
IHsKLSAgICAgICAgcmV0dXJuIHBhdGgucmVuZGVyZXIoKTsKLSAgICB9KTsKLX0KLQotaW5saW5l
IGNvbnN0IExlZ2FjeUlubGluZUJveCogQm94OjpsZWdhY3lJbmxpbmVCb3goKSBjb25zdAotewot
ICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxCb3hMZWdhY3lQYXRoPihtX3BhdGhWYXJp
YW50KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHN0ZDo6Z2V0PEJveExl
Z2FjeVBhdGg+KG1fcGF0aFZhcmlhbnQpLmxlZ2FjeUlubGluZUJveCgpOwotfQotCi0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi1pbmxpbmUgY29uc3QgSW5saW5lRGlzcGxh
eTo6Qm94KiBCb3g6OmlubGluZUJveCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPEJveE1vZGVyblBhdGg+KG1fcGF0aFZhcmlhbnQpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gJnN0ZDo6Z2V0PEJveE1vZGVyblBhdGg+KG1fcGF0aFZhcmlh
bnQpLmJveCgpOwotfQotI2VuZGlmCi0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGgu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVkOTNjYjhkNDY4ZTFlMzMxNDhjMTdh
MmU5OWIyYWQ2MTBmYzRmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JC
b3hMZWdhY3lQYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGVnYWN5SW5saW5lVGV4dEJveC5oIgotI2lu
Y2x1ZGUgIkxlZ2FjeVJvb3RJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0j
aW5jbHVkZSAiVGV4dEJveFNlbGVjdGFibGVSYW5nZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKLQot
ZW51bSBjbGFzcyBDcmVhdGVUZXh0UnVuTW9kZSB7IFBhaW50aW5nLCBFZGl0aW5nIH07Ci0KLWNs
YXNzIEJveExlZ2FjeVBhdGggewotcHVibGljOgotICAgIEJveExlZ2FjeVBhdGgoY29uc3QgTGVn
YWN5SW5saW5lQm94KiBpbmxpbmVCb3gpCi0gICAgICAgIDogbV9pbmxpbmVCb3goaW5saW5lQm94
KQotICAgIHsgfQotCi0gICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJv
eC0+aXNJbmxpbmVUZXh0Qm94KCk7IH0KLSAgICBib29sIGlzSW5saW5lQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmxpbmVCb3gtPmlzSW5saW5lRmxvd0JveCgpOyB9Ci0gICAgYm9vbCBpc1Jvb3RJ
bmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+aXNSb290SW5saW5lQm94KCk7
IH0KLQotICAgIEZsb2F0UmVjdCB2aXN1YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5mcmFtZVJlY3QoKTsgfQotCi0gICAgYm9vbCBpc0hv
cml6b250YWwoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+aXNIb3Jpem9udGFsKCk7IH0K
LSAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmlzTGlu
ZUJyZWFrKCk7IH0KLQotICAgIHVuc2lnbmVkIG1pbmltdW1DYXJldE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lQm94LT5jYXJldE1pbk9mZnNldCgpOyB9Ci0gICAgdW5zaWduZWQgbWF4
aW11bUNhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmNhcmV0TWF4T2Zm
c2V0KCk7IH0KLQotICAgIHVuc2lnbmVkIGNoYXIgYmlkaUxldmVsKCkgY29uc3QgeyByZXR1cm4g
bV9pbmxpbmVCb3gtPmJpZGlMZXZlbCgpOyB9Ci0KLSAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0
IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+aGFzSHlwaGVuKCk7IH0KLSAgICBTdHJpbmdWaWV3
IHRleHQoKSBjb25zdCB7IHJldHVybiBTdHJpbmdWaWV3KGlubGluZVRleHRCb3goKS0+cmVuZGVy
ZXIoKS50ZXh0KCkpLnN1YnN0cmluZyhpbmxpbmVUZXh0Qm94KCktPnN0YXJ0KCksIGlubGluZVRl
eHRCb3goKS0+bGVuKCkpOyB9Ci0gICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBp
bmxpbmVUZXh0Qm94KCktPnN0YXJ0KCk7IH0KLSAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJl
dHVybiBpbmxpbmVUZXh0Qm94KCktPmVuZCgpOyB9Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5sZW4oKTsgfQotCi0gICAgVGV4dEJveFNlbGVj
dGFibGVSYW5nZSBzZWxlY3RhYmxlUmFuZ2UoKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94
KCktPnNlbGVjdGFibGVSYW5nZSgpOyB9Ci0KLSAgICBUZXh0UnVuIGNyZWF0ZVRleHRSdW4oQ3Jl
YXRlVGV4dFJ1bk1vZGUgbW9kZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGJvb2wgaWdub3JlQ29t
YmluZWRUZXh0ID0gbW9kZSA9PSBDcmVhdGVUZXh0UnVuTW9kZTo6RWRpdGluZzsKLSAgICAgICAg
Ym9vbCBpZ25vcmVIeXBoZW4gPSBtb2RlID09IENyZWF0ZVRleHRSdW5Nb2RlOjpFZGl0aW5nOwot
ICAgICAgICByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5jcmVhdGVUZXh0UnVuKGlnbm9yZUNvbWJp
bmVkVGV4dCwgaWdub3JlSHlwaGVuKTsKLSAgICB9Ci0KLSAgICBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlcmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lubGluZUJveC0+cmVu
ZGVyZXIoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3goKSB7IG1faW5s
aW5lQm94ID0gaW5saW5lVGV4dEJveCgpLT5uZXh0VGV4dEJveCgpOyB9Ci0KLSAgICB2b2lkIHRy
YXZlcnNlTmV4dE9uTGluZSgpCi0gICAgewotICAgICAgICBtX2lubGluZUJveCA9IG1faW5saW5l
Qm94LT5uZXh0TGVhZk9uTGluZSgpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VQcmV2aW91
c09uTGluZSgpCi0gICAgewotICAgICAgICBtX2lubGluZUJveCA9IG1faW5saW5lQm94LT5wcmV2
aW91c0xlYWZPbkxpbmUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dElubGluZUJv
eCgpCi0gICAgewotICAgICAgICBtX2lubGluZUJveCA9IGlubGluZUZsb3dCb3goKS0+bmV4dExp
bmVCb3goKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNJbmxpbmVCb3goKQot
ICAgIHsKLSAgICAgICAgbV9pbmxpbmVCb3ggPSBpbmxpbmVGbG93Qm94KCktPnByZXZMaW5lQm94
KCk7Ci0gICAgfQotCi0gICAgQm94TGVnYWN5UGF0aCBmaXJzdExlYWZCb3hGb3JJbmxpbmVCb3go
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgaW5saW5lRmxvd0JveCgpLT5maXJzdExl
YWZEZXNjZW5kYW50KCkgfTsKLSAgICB9Ci0KLSAgICBCb3hMZWdhY3lQYXRoIGxhc3RMZWFmQm94
Rm9ySW5saW5lQm94KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7IGlubGluZUZsb3dC
b3goKS0+bGFzdExlYWZEZXNjZW5kYW50KCkgfTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQm94TGVnYWN5UGF0aCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94
ID09IG90aGVyLm1faW5saW5lQm94OyB9Ci0KLSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1
cm4gIW1faW5saW5lQm94OyB9Ci0KLSAgICBMZWdhY3lJbmxpbmVCb3gqIGxlZ2FjeUlubGluZUJv
eCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8TGVnYWN5SW5saW5lQm94Kj4obV9pbmxpbmVC
b3gpOyB9Ci0gICAgY29uc3QgTGVnYWN5Um9vdElubGluZUJveCYgcm9vdElubGluZUJveCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5yb290KCk7IH0KLQotcHJpdmF0ZToKLSAgICBjb25z
dCBMZWdhY3lJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KCkgY29uc3QgeyByZXR1cm4gZG93
bmNhc3Q8TGVnYWN5SW5saW5lVGV4dEJveD4obV9pbmxpbmVCb3gpOyB9Ci0gICAgY29uc3QgTGVn
YWN5SW5saW5lRmxvd0JveCogaW5saW5lRmxvd0JveCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0
PExlZ2FjeUlubGluZUZsb3dCb3g+KG1faW5saW5lQm94KTsgfQotCi0gICAgY29uc3QgTGVnYWN5
SW5saW5lQm94KiBtX2lubGluZUJveCB7IG51bGxwdHIgfTsKLX07Ci0KLX0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckJveE1v
ZGVyblBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvckJveE1vZGVyblBhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZiMGFm
ZWIyYTY3NmY5ZTRmMzhmOTFmNjZjZTZmYTYyY2RmNDhhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUg
IkxheW91dENvbnRhaW5lckJveC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uSW5saW5l
Q29udGVudC5oIgotI2luY2x1ZGUgIlRleHRCb3hTZWxlY3RhYmxlUmFuZ2UuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKLQotY2xhc3MgQm94TW9k
ZXJuUGF0aCB7Ci1wdWJsaWM6Ci0gICAgQm94TW9kZXJuUGF0aChjb25zdCBMYXlvdXRJbnRlZ3Jh
dGlvbjo6SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCkKLSAgICAgICAgOiBtX2lubGluZUNv
bnRlbnQoJmlubGluZUNvbnRlbnQpCi0gICAgewotICAgICAgICBzZXRBdEVuZCgpOwotICAgIH0K
LSAgICBCb3hNb2Rlcm5QYXRoKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50
JiBpbmxpbmVDb250ZW50LCBzaXplX3Qgc3RhcnRJbmRleCkKLSAgICAgICAgOiBtX2lubGluZUNv
bnRlbnQoJmlubGluZUNvbnRlbnQpCi0gICAgICAgICwgbV9ib3hJbmRleChzdGFydEluZGV4KQot
ICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGJveCgpLmlz
VGV4dE9yU29mdExpbmVCcmVhaygpOyB9Ci0gICAgYm9vbCBpc0lubGluZUJveCgpIGNvbnN0IHsg
cmV0dXJuIGJveCgpLmlzSW5saW5lQm94KCk7IH0KLSAgICBib29sIGlzUm9vdElubGluZUJveCgp
IGNvbnN0IHsgcmV0dXJuIGJveCgpLmlzUm9vdElubGluZUJveCgpOyB9Ci0KLSAgICBGbG9hdFJl
Y3QgdmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBib3go
KS52aXN1YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpOyB9Ci0KLSAgICBib29sIGlzSG9y
aXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIGJveCgpLmlzSG9yaXpvbnRhbCgpOyB9Ci0gICAgYm9v
bCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIGJveCgpLmlzTGluZUJyZWFrKCk7IH0KLQot
ICAgIHVuc2lnbmVkIG1pbmltdW1DYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dCgp
ID8gc3RhcnQoKSA6IDA7IH0KLSAgICB1bnNpZ25lZCBtYXhpbXVtQ2FyZXRPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBpc1RleHQoKSA/IGVuZCgpIDogMTsgfQotCi0gICAgdW5zaWduZWQgY2hhciBi
aWRpTGV2ZWwoKSBjb25zdCB7IHJldHVybiBib3goKS5iaWRpTGV2ZWwoKTsgfQotCi0gICAgYm9v
bCBoYXNIeXBoZW4oKSBjb25zdCB7IHJldHVybiBib3goKS50ZXh0KCktPmhhc0h5cGhlbigpOyB9
Ci0gICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gYm94KCkudGV4dCgpLT5vcmln
aW5hbENvbnRlbnQoKTsgfQotICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gYm94
KCkudGV4dCgpLT5zdGFydCgpOyB9Ci0gICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4g
Ym94KCkudGV4dCgpLT5lbmQoKTsgfQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIGJveCgpLnRleHQoKS0+bGVuZ3RoKCk7IH0KLQotICAgIFRleHRCb3hTZWxlY3RhYmxlUmFu
Z2Ugc2VsZWN0YWJsZVJhbmdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7Ci0gICAg
ICAgICAgICBzdGFydCgpLAotICAgICAgICAgICAgbGVuZ3RoKCksCi0gICAgICAgICAgICBib3go
KS50ZXh0KCktPmhhc0h5cGhlbigpID8gYm94KCkuc3R5bGUoKS5oeXBoZW5TdHJpbmcoKS5sZW5n
dGgoKSA6IDAsCi0gICAgICAgICAgICBib3goKS5pc0xpbmVCcmVhaygpCi0gICAgICAgIH07Ci0g
ICAgfQotCi0gICAgVGV4dFJ1biBjcmVhdGVUZXh0UnVuKENyZWF0ZVRleHRSdW5Nb2RlIG1vZGUp
IGNvbnN0Ci0gICAgewotICAgICAgICBhdXRvJiBzdHlsZSA9IGJveCgpLnN0eWxlKCk7Ci0gICAg
ICAgIGF1dG8gZXhwYW5zaW9uID0gYm94KCkuZXhwYW5zaW9uKCk7Ci0gICAgICAgIGF1dG8gcmVj
dCA9IHRoaXMtPnZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCk7Ci0gICAgICAgIGF1
dG8geFBvcyA9IHJlY3QueCgpIC0gKGxpbmUoKS5saW5lQm94TGVmdCgpICsgbGluZSgpLmNvbnRl
bnRMb2dpY2FsT2Zmc2V0KCkpOwotCi0gICAgICAgIGF1dG8gdGV4dEZvclJ1biA9IFsmXSB7Ci0g
ICAgICAgICAgICBpZiAobW9kZSA9PSBDcmVhdGVUZXh0UnVuTW9kZTo6RWRpdGluZyB8fCAhaGFz
SHlwaGVuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRleHQoKS50b1N0cmluZ1dpdGhvdXRD
b3B5aW5nKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKHRleHQoKSwgc3R5bGUu
aHlwaGVuU3RyaW5nKCkpOwotICAgICAgICB9KCk7Ci0KLSAgICAgICAgYm9vbCBjaGFyYWN0ZXJT
Y2FuRm9yQ29kZVBhdGggPSAhcmVuZGVyVGV4dCgpLmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgp
OwotICAgICAgICBUZXh0UnVuIHRleHRSdW4geyB0ZXh0Rm9yUnVuLCB4UG9zLCBleHBhbnNpb24u
aG9yaXpvbnRhbEV4cGFuc2lvbiwgZXhwYW5zaW9uLmJlaGF2aW9yLCBkaXJlY3Rpb24oKSwgc3R5
bGUucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsLCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBh
dGggfTsKLSAgICAgICAgdGV4dFJ1bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdoaXRlU3Bh
Y2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIHRleHRSdW47Ci0gICAgfTsK
LQotICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1faW5saW5lQ29udGVudC0+cmVuZGVyZXJGb3JMYXlvdXRCb3goYm94KCkubGF5
b3V0Qm94KCkpOwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4dEJveCgpCi0gICAg
ewotICAgICAgICBBU1NFUlQoIWF0RW5kKCkpOwotICAgICAgICBBU1NFUlQoYm94KCkuaXNUZXh0
T3JTb2Z0TGluZUJyZWFrKCkpOwotCi0gICAgICAgIGlmIChib3goKS5pc0xhc3RGb3JMYXlvdXRC
b3goKSkgewotICAgICAgICAgICAgc2V0QXRFbmQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIHRyYXZlcnNlTmV4dFdpdGhTYW1lTGF5b3V0Qm94KCk7Ci0KLSAg
ICAgICAgQVNTRVJUKGJveCgpLmlzVGV4dE9yU29mdExpbmVCcmVhaygpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHRyYXZlcnNlTmV4dE9uTGluZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIWF0RW5k
KCkpOwotCi0gICAgICAgIGF1dG8gb2xkTGluZUluZGV4ID0gYm94KCkubGluZUluZGV4KCk7Ci0K
LSAgICAgICAgdHJhdmVyc2VOZXh0TGVhZigpOwotCi0gICAgICAgIGlmICghYXRFbmQoKSAmJiBv
bGRMaW5lSW5kZXggIT0gYm94KCkubGluZUluZGV4KCkpCi0gICAgICAgICAgICBzZXRBdEVuZCgp
OwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VQcmV2aW91c09uTGluZSgpCi0gICAgewotICAg
ICAgICBBU1NFUlQoIWF0RW5kKCkpOwotCi0gICAgICAgIGF1dG8gb2xkTGluZUluZGV4ID0gYm94
KCkubGluZUluZGV4KCk7Ci0KLSAgICAgICAgdHJhdmVyc2VQcmV2aW91c0xlYWYoKTsKLQotICAg
ICAgICBpZiAoIWF0RW5kKCkgJiYgb2xkTGluZUluZGV4ICE9IGJveCgpLmxpbmVJbmRleCgpKQot
ICAgICAgICAgICAgc2V0QXRFbmQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dElu
bGluZUJveCgpCi0gICAgewotICAgICAgICBBU1NFUlQoIWF0RW5kKCkpOwotICAgICAgICBBU1NF
UlQoYm94KCkuaXNJbmxpbmVCb3goKSk7Ci0KLSAgICAgICAgaWYgKGJveCgpLmlzTGFzdEZvckxh
eW91dEJveCgpKSB7Ci0gICAgICAgICAgICBzZXRBdEVuZCgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgdHJhdmVyc2VOZXh0V2l0aFNhbWVMYXlvdXRCb3goKTsK
LQotICAgICAgICBBU1NFUlQoYm94KCkuaXNJbmxpbmVCb3goKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCB0cmF2ZXJzZVByZXZpb3VzSW5saW5lQm94KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghYXRF
bmQoKSk7Ci0gICAgICAgIEFTU0VSVChib3goKS5pc0lubGluZUJveCgpKTsKLQotICAgICAgICBp
ZiAoYm94KCkuaXNGaXJzdEZvckxheW91dEJveCgpKSB7Ci0gICAgICAgICAgICBzZXRBdEVuZCgp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJhdmVyc2VQcmV2
aW91c1dpdGhTYW1lTGF5b3V0Qm94KCk7Ci0KLSAgICAgICAgQVNTRVJUKGJveCgpLmlzSW5saW5l
Qm94KCkpOwotICAgIH0KLQotICAgIEJveE1vZGVyblBhdGggZmlyc3RMZWFmQm94Rm9ySW5saW5l
Qm94KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChib3goKS5pc0lubGluZUJveCgpKTsK
LQotICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBib3goKS5sYXlvdXRCb3goKTsKLQotICAgICAg
ICAvLyBUaGUgbmV4dCBib3ggaXMgdGhlIGZpcnN0IGRlc2NlbmRhbnQgb2YgdGhpcyBib3g7Ci0g
ICAgICAgIGF1dG8gZmlyc3QgPSAqdGhpczsKLSAgICAgICAgZmlyc3QudHJhdmVyc2VOZXh0T25M
aW5lKCk7Ci0KLSAgICAgICAgaWYgKCFmaXJzdC5hdEVuZCgpICYmICFmaXJzdC5pc1dpdGhpbklu
bGluZUJveChpbmxpbmVCb3gpKQotICAgICAgICAgICAgZmlyc3Quc2V0QXRFbmQoKTsKLQotICAg
ICAgICByZXR1cm4gZmlyc3Q7Ci0gICAgfQotCi0gICAgQm94TW9kZXJuUGF0aCBsYXN0TGVhZkJv
eEZvcklubGluZUJveCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoYm94KCkuaXNJbmxp
bmVCb3goKSk7Ci0KLSAgICAgICAgYXV0byYgaW5saW5lQm94ID0gYm94KCkubGF5b3V0Qm94KCk7
Ci0KLSAgICAgICAgLy8gRklYTUU6IEdldCB0aGUgbGFzdCBib3ggaW5kZXggZGlyZWN0bHkgZnJv
bSB0aGUgZGlzcGxheSBib3guCi0gICAgICAgIGF1dG8gbGFzdCA9IGZpcnN0TGVhZkJveEZvcklu
bGluZUJveCgpOwotICAgICAgICBmb3IgKGF1dG8gYm94ID0gbGFzdDsgIWJveC5hdEVuZCgpICYm
IGJveC5pc1dpdGhpbklubGluZUJveChpbmxpbmVCb3gpOyBib3gudHJhdmVyc2VOZXh0T25MaW5l
KCkpCi0gICAgICAgICAgICBsYXN0ID0gYm94OwotCi0gICAgICAgIHJldHVybiBsYXN0OwotICAg
IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3hNb2Rlcm5QYXRoJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50ID09IG90aGVyLm1faW5saW5lQ29udGVudCAmJiBt
X2JveEluZGV4ID09IG90aGVyLm1fYm94SW5kZXg7IH0KLQotICAgIGJvb2wgYXRFbmQoKSBjb25z
dCB7IHJldHVybiBtX2JveEluZGV4ID09IGJveGVzKCkuc2l6ZSgpOyB9Ci0gICAgY29uc3QgSW5s
aW5lRGlzcGxheTo6Qm94JiBib3goKSBjb25zdCB7IHJldHVybiBib3hlcygpW21fYm94SW5kZXhd
OyB9Ci0gICAgYXV0byYgaW5saW5lQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuICptX2lubGluZUNv
bnRlbnQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzV2l0aGluSW5saW5lQm94KGNvbnN0IExh
eW91dDo6Qm94JiBpbmxpbmVCb3gpCi0gICAgewotICAgICAgICBhdXRvKiBsYXlvdXRCb3ggPSAm
Ym94KCkubGF5b3V0Qm94KCkucGFyZW50KCk7Ci0gICAgICAgIGZvciAoOyBsYXlvdXRCb3gtPmlz
SW5saW5lQm94KCk7IGxheW91dEJveCA9ICZsYXlvdXRCb3gtPnBhcmVudCgpKSB7Ci0gICAgICAg
ICAgICBpZiAobGF5b3V0Qm94ID09ICZpbmxpbmVCb3gpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZv
aWQgdHJhdmVyc2VOZXh0Qm94KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghYXRFbmQoKSk7Ci0g
ICAgICAgICsrbV9ib3hJbmRleDsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNC
b3goKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKLSAgICAgICAgbV9ib3hJbmRl
eCA9IG1fYm94SW5kZXggPyBtX2JveEluZGV4IC0gMSA6IGJveGVzKCkuc2l6ZSgpOwotICAgIH0K
LQotICAgIHZvaWQgdHJhdmVyc2VOZXh0TGVhZigpCi0gICAgewotICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICB0cmF2ZXJzZU5leHRCb3goKTsKLSAgICAgICAgfSB3aGlsZSAoIWF0RW5kKCkgJiYg
Ym94KCkuaXNJbmxpbmVCb3goKSk7Ci0gICAgfQotCi0gICAgdm9pZCB0cmF2ZXJzZVByZXZpb3Vz
TGVhZigpCi0gICAgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICB0cmF2ZXJzZVByZXZpb3Vz
Qm94KCk7Ci0gICAgICAgIH0gd2hpbGUgKCFhdEVuZCgpICYmIGJveCgpLmlzSW5saW5lQm94KCkp
OwotICAgIH0KLQotICAgIHZvaWQgdHJhdmVyc2VOZXh0V2l0aFNhbWVMYXlvdXRCb3goKQotICAg
IHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gYm94KCkubGF5b3V0Qm94KCk7Ci0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIHRyYXZlcnNlTmV4dEJveCgpOwotICAgICAgICB9IHdoaWxlICgh
YXRFbmQoKSAmJiAmYm94KCkubGF5b3V0Qm94KCkgIT0gJmxheW91dEJveCk7Ci0gICAgfQotCi0g
ICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzV2l0aFNhbWVMYXlvdXRCb3goKQotICAgIHsKLSAgICAg
ICAgYXV0byYgbGF5b3V0Qm94ID0gYm94KCkubGF5b3V0Qm94KCk7Ci0gICAgICAgIGRvIHsKLSAg
ICAgICAgICAgIHRyYXZlcnNlUHJldmlvdXNCb3goKTsKLSAgICAgICAgfSB3aGlsZSAoIWF0RW5k
KCkgJiYgJmJveCgpLmxheW91dEJveCgpICE9ICZsYXlvdXRCb3gpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0QXRFbmQoKSB7IG1fYm94SW5kZXggPSBib3hlcygpLnNpemUoKTsgfQotCi0gICAgY29u
c3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQ6OkJveGVzJiBib3hlcygpIGNvbnN0
IHsgcmV0dXJuIG1faW5saW5lQ29udGVudC0+Ym94ZXM7IH0KLSAgICBjb25zdCBMYXlvdXRJbnRl
Z3JhdGlvbjo6TGluZSYgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVudC0+bGlu
ZUZvckJveChib3goKSk7IH0KLQotICAgIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlclRleHQoKSBj
b25zdCB7IHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcigpKTsgfQotICAgIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYmlkaUxldmVsKCkgJSAyID8g
VGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOyB9Ci0KLSAgICBSZWZQdHI8
Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQ+IG1faW5saW5lQ29udGVudDsK
LSAgICBzaXplX3QgbV9ib3hJbmRleCB7IDAgfTsKLX07Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JJ
bmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0
ZXJhdG9ySW5saW5lQm94LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFlYzVh
NmFhMDM0YWE1MmVjMDIzMGI5OThkZjAwYTgxNDI0YzA3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vSW5saW5lSXRlcmF0b3JJbmxpbmVCb3guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5saW5l
SXRlcmF0b3JJbmxpbmVCb3guaCIKLQotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxh
eW91dC5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlJlbmRlcklu
bGluZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSW5saW5lSXRlcmF0b3Ig
ewotCi1JbmxpbmVCb3g6OklubGluZUJveChQYXRoVmFyaWFudCYmIHBhdGgpCi0gICAgOiBCb3go
V1RGTW92ZShwYXRoKSkKLXsKLX0KLQotc3RkOjpwYWlyPGJvb2wsIGJvb2w+IElubGluZUJveDo6
aGFzQ2xvc2VkTGVmdEFuZFJpZ2h0RWRnZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IExheW91
dCBrbm93cyB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gc28gd2Ugc2hvdWxkIGNvbnN1bHQg
aXQuCi0jaWYgRU5BQkxFKENTU19CT1hfREVDT1JBVElPTl9CUkVBSykKLSAgICBpZiAoc3R5bGUo
KS5ib3hEZWNvcmF0aW9uQnJlYWsoKSA9PSBCb3hEZWNvcmF0aW9uQnJlYWs6OkNsb25lKQotICAg
ICAgICByZXR1cm4geyB0cnVlLCB0cnVlIH07Ci0jZW5kaWYKLSAgICBib29sIGlzTFRSID0gc3R5
bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgYm9vbCBpc0ZpcnN0ID0gIXByZXZp
b3VzSW5saW5lQm94KCkgJiYgIXJlbmRlcmVyKCkuaXNDb250aW51YXRpb24oKTsKLSAgICBib29s
IGlzTGFzdCA9ICFuZXh0SW5saW5lQm94KCkgJiYgIXJlbmRlcmVyKCkuY29udGludWF0aW9uKCk7
Ci0gICAgcmV0dXJuIHsgaXNMVFIgPyBpc0ZpcnN0IDogaXNMYXN0LCBpc0xUUiA/IGlzTGFzdCA6
IGlzRmlyc3QgfTsKLX07Ci0KLUlubGluZUJveEl0ZXJhdG9yIElubGluZUJveDo6bmV4dElubGlu
ZUJveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElubGluZUJveEl0ZXJhdG9yKCp0aGlzKS50cmF2
ZXJzZU5leHRJbmxpbmVCb3goKTsKLX0KLQotSW5saW5lQm94SXRlcmF0b3IgSW5saW5lQm94Ojpw
cmV2aW91c0lubGluZUJveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElubGluZUJveEl0ZXJhdG9y
KCp0aGlzKS50cmF2ZXJzZVByZXZpb3VzSW5saW5lQm94KCk7Ci19Ci0KLUxlYWZCb3hJdGVyYXRv
ciBJbmxpbmVCb3g6OmZpcnN0TGVhZkJveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4gTGVhZkJveEl0ZXJhdG9yIHsK
LSAgICAgICAgcmV0dXJuIHsgcGF0aC5maXJzdExlYWZCb3hGb3JJbmxpbmVCb3goKSB9OwotICAg
IH0pOwotfQotCi1MZWFmQm94SXRlcmF0b3IgSW5saW5lQm94OjpsYXN0TGVhZkJveCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0
aCkgLT4gTGVhZkJveEl0ZXJhdG9yIHsKLSAgICAgICAgcmV0dXJuIHsgcGF0aC5sYXN0TGVhZkJv
eEZvcklubGluZUJveCgpIH07Ci0gICAgfSk7Ci19Ci0KLUxlYWZCb3hJdGVyYXRvciBJbmxpbmVC
b3g6OmVuZExlYWZCb3goKSBjb25zdAotewotICAgIGlmIChhdXRvIGxhc3QgPSBsYXN0TGVhZkJv
eCgpKQotICAgICAgICByZXR1cm4gbGFzdC0+bmV4dE9uTGluZSgpOwotICAgIHJldHVybiB7IH07
Ci19Ci0KLUlubGluZUJveEl0ZXJhdG9yOjpJbmxpbmVCb3hJdGVyYXRvcihCb3g6OlBhdGhWYXJp
YW50JiYgcGF0aFZhcmlhbnQpCi0gICAgOiBCb3hJdGVyYXRvcihXVEZNb3ZlKHBhdGhWYXJpYW50
KSkKLXsKLX0KLQotSW5saW5lQm94SXRlcmF0b3I6OklubGluZUJveEl0ZXJhdG9yKGNvbnN0IEJv
eCYgYm94KQotICAgIDogQm94SXRlcmF0b3IoYm94KQotewotfQotCi1JbmxpbmVCb3hJdGVyYXRv
ciYgSW5saW5lQm94SXRlcmF0b3I6OnRyYXZlcnNlTmV4dElubGluZUJveCgpCi17Ci0gICAgV1RG
Ojpzd2l0Y2hPbihtX2JveC5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7Ci0gICAgICAg
IHBhdGgudHJhdmVyc2VOZXh0SW5saW5lQm94KCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0aGlz
OwotfQotCi1JbmxpbmVCb3hJdGVyYXRvciYgSW5saW5lQm94SXRlcmF0b3I6OnRyYXZlcnNlUHJl
dmlvdXNJbmxpbmVCb3goKQotewotICAgIFdURjo6c3dpdGNoT24obV9ib3gubV9wYXRoVmFyaWFu
dCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICBwYXRoLnRyYXZlcnNlUHJldmlvdXNJbmxpbmVC
b3goKTsKLSAgICB9KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUlubGluZUJveEl0ZXJhdG9y
IGZpcnN0SW5saW5lQm94Rm9yKGNvbnN0IFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lKQotewot
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotICAgIGlmIChhdXRvKiBsaW5l
TGF5b3V0ID0gTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNvbnRhaW5pbmcocmVuZGVy
SW5saW5lKSkKLSAgICAgICAgcmV0dXJuIGxpbmVMYXlvdXQtPmZpcnN0SW5saW5lQm94Rm9yKHJl
bmRlcklubGluZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4geyBCb3hMZWdhY3lQYXRoIHsgcmVuZGVy
SW5saW5lLmZpcnN0TGluZUJveCgpIH0gfTsKLX0KLQotSW5saW5lQm94SXRlcmF0b3IgZmlyc3RS
b290SW5saW5lQm94Rm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2spCi17Ci0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0gICAgaWYgKGF1dG8qIGxpbmVMYXlvdXQg
PSBibG9jay5tb2Rlcm5MaW5lTGF5b3V0KCkpCi0gICAgICAgIHJldHVybiBsaW5lTGF5b3V0LT5m
aXJzdFJvb3RJbmxpbmVCb3goKTsKLSNlbmRpZgotICAgIHJldHVybiB7IEJveExlZ2FjeVBhdGgg
eyBibG9jay5maXJzdFJvb3RCb3goKSB9IH07Ci19Ci0KLUlubGluZUJveEl0ZXJhdG9yIGlubGlu
ZUJveEZvcihjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94JiBsZWdhY3lJbmxpbmVGbG93Qm94KQot
ewotICAgIHJldHVybiB7IEJveExlZ2FjeVBhdGggeyAmbGVnYWN5SW5saW5lRmxvd0JveCB9IH07
Ci19Ci0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLUlubGluZUJveEl0
ZXJhdG9yIGlubGluZUJveEZvcihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVu
dCYgY29udGVudCwgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94JiBib3gpCi17Ci0gICAgcmV0dXJu
IGlubGluZUJveEZvcihjb250ZW50LCBjb250ZW50LmluZGV4Rm9yQm94KGJveCkpOwotfQotCi1J
bmxpbmVCb3hJdGVyYXRvciBpbmxpbmVCb3hGb3IoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246Oklu
bGluZUNvbnRlbnQmIGNvbnRlbnQsIHNpemVfdCBib3hJbmRleCkKLXsKLSAgICBBU1NFUlQoY29u
dGVudC5ib3hlc1tib3hJbmRleF0uaXNJbmxpbmVCb3goKSk7Ci0gICAgcmV0dXJuIHsgQm94TW9k
ZXJuUGF0aCB7IGNvbnRlbnQsIGJveEluZGV4IH0gfTsKLX0KLSNlbmRpZgotCi19Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JJ
bmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVy
YXRvcklubGluZUJveC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGE3MDk5Mzg5
ZWVlN2NhNThiNzYyYjFhYzVjZDQ2ZTdkNjZhMjFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9J
bmxpbmVJdGVyYXRvcklubGluZUJveC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3gu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgSW5saW5lSXRlcmF0b3Igewot
Ci1jbGFzcyBJbmxpbmVCb3hJdGVyYXRvcjsKLQotY2xhc3MgSW5saW5lQm94IDogcHVibGljIEJv
eCB7Ci1wdWJsaWM6Ci0gICAgSW5saW5lQm94KFBhdGhWYXJpYW50JiYpOwotCi0gICAgY29uc3Qg
UmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8
UmVuZGVyQm94TW9kZWxPYmplY3Q+KEJveDo6cmVuZGVyZXIoKSk7IH0KLQotICAgIHN0ZDo6cGFp
cjxib29sLCBib29sPiBoYXNDbG9zZWRMZWZ0QW5kUmlnaHRFZGdlKCkgY29uc3Q7Ci0KLSAgICAv
LyBGSVhNRTogUmVtb3ZlLiBGb3IgaW50ZXJtZWRpYXRlIHBvcnRpbmcgc3RlcHMgb25seS4KLSAg
ICBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiBsZWdhY3lJbmxpbmVCb3goKSBjb25zdCB7IHJl
dHVybiBkb3duY2FzdDxMZWdhY3lJbmxpbmVGbG93Qm94PihCb3g6OmxlZ2FjeUlubGluZUJveCgp
KTsgfQotCi0gICAgSW5saW5lQm94SXRlcmF0b3IgbmV4dElubGluZUJveCgpIGNvbnN0OwotICAg
IElubGluZUJveEl0ZXJhdG9yIHByZXZpb3VzSW5saW5lQm94KCkgY29uc3Q7Ci0gICAgSW5saW5l
Qm94SXRlcmF0b3IgaXRlcmF0b3IoKSBjb25zdDsKLQotICAgIExlYWZCb3hJdGVyYXRvciBmaXJz
dExlYWZCb3goKSBjb25zdDsKLSAgICBMZWFmQm94SXRlcmF0b3IgbGFzdExlYWZCb3goKSBjb25z
dDsKLSAgICBMZWFmQm94SXRlcmF0b3IgZW5kTGVhZkJveCgpIGNvbnN0OwotfTsKLQotY2xhc3Mg
SW5saW5lQm94SXRlcmF0b3IgOiBwdWJsaWMgQm94SXRlcmF0b3IgewotcHVibGljOgotICAgIElu
bGluZUJveEl0ZXJhdG9yKCkgeyB9Ci0gICAgSW5saW5lQm94SXRlcmF0b3IoQm94OjpQYXRoVmFy
aWFudCYmKTsKLSAgICBJbmxpbmVCb3hJdGVyYXRvcihjb25zdCBCb3gmKTsKLQotICAgIGNvbnN0
IElubGluZUJveCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KLSAgICBjb25z
dCBJbmxpbmVCb3gqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmZ2V0KCk7IH0KLQotICAg
IElubGluZUJveEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRJbmxpbmVCb3goKTsKLSAgICBJbmxpbmVC
b3hJdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91c0lubGluZUJveCgpOwotCi1wcml2YXRlOgotICAg
IGNvbnN0IElubGluZUJveCYgZ2V0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lQm94
PihtX2JveCk7IH0KLX07Ci0KLUlubGluZUJveEl0ZXJhdG9yIGZpcnN0SW5saW5lQm94Rm9yKGNv
bnN0IFJlbmRlcklubGluZSYpOwotSW5saW5lQm94SXRlcmF0b3IgZmlyc3RSb290SW5saW5lQm94
Rm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOwotCi1JbmxpbmVCb3hJdGVyYXRvciBpbmxpbmVC
b3hGb3IoY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCYpOwotI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQotSW5saW5lQm94SXRlcmF0b3IgaW5saW5lQm94Rm9yKGNvbnN0IExh
eW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiwgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94
Jik7Ci1JbmxpbmVCb3hJdGVyYXRvciBpbmxpbmVCb3hGb3IoY29uc3QgTGF5b3V0SW50ZWdyYXRp
b246OklubGluZUNvbnRlbnQmLCBzaXplX3QgYm94SW5kZXgpOwotI2VuZGlmCi0KLWlubGluZSBJ
bmxpbmVCb3hJdGVyYXRvciBJbmxpbmVCb3g6Oml0ZXJhdG9yKCkgY29uc3QKLXsKLSAgICByZXR1
cm4geyAqdGhpcyB9OwotfQotCi19Ci19Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OklubGluZUJveCkKLXN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94JiBib3gpIHsgcmV0dXJuIGJveC5pc0lu
bGluZUJveCgpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OklubGluZUJveEl0ZXJh
dG9yKQotc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpC
b3hJdGVyYXRvciYgYm94KSB7IHJldHVybiAhYm94IHx8IGJveC0+aXNJbmxpbmVCb3goKTsgfQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZUJveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lQm94LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5NWMxYTk4ODVmNTlhYzI2OWE0YTNkYzFjMTkwYjVk
ZjkxZGYwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lQm94LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZUJveC5oIgotCi0jaW5jbHVk
ZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVM
YXlvdXQuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotbmFtZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKLQotTGluZUJveEl0ZXJhdG9yOjpMaW5l
Qm94SXRlcmF0b3IoTGluZUJveDo6UGF0aFZhcmlhbnQmJiBwYXRoVmFyaWFudCkKLSAgICA6IG1f
bGluZUJveChXVEZNb3ZlKHBhdGhWYXJpYW50KSkKLXsKLX0KLQotTGluZUJveEl0ZXJhdG9yOjpM
aW5lQm94SXRlcmF0b3IoY29uc3QgTGluZUJveCYgbGluZUJveCkKLSAgICA6IG1fbGluZUJveChs
aW5lQm94KQotewotfQotCi1ib29sIExpbmVCb3hJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAotewot
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbGluZUJveC5tX3BhdGhWYXJpYW50LCBbXShhdXRv
JiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmF0RW5kKCk7Ci0gICAgfSk7Ci19Ci0KLUxp
bmVCb3hJdGVyYXRvciYgTGluZUJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHQoKQotewotICAgIFdU
Rjo6c3dpdGNoT24obV9saW5lQm94Lm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAg
ICAgICAgcmV0dXJuIHBhdGgudHJhdmVyc2VOZXh0KCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuICp0
aGlzOwotfQotCi1MaW5lQm94SXRlcmF0b3ImIExpbmVCb3hJdGVyYXRvcjo6dHJhdmVyc2VQcmV2
aW91cygpCi17Ci0gICAgV1RGOjpzd2l0Y2hPbihtX2xpbmVCb3gubV9wYXRoVmFyaWFudCwgW10o
YXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC50cmF2ZXJzZVByZXZpb3VzKCk7Ci0g
ICAgfSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1ib29sIExpbmVCb3hJdGVyYXRvcjo6b3Bl
cmF0b3I9PShjb25zdCBMaW5lQm94SXRlcmF0b3ImIG90aGVyKSBjb25zdAotewotICAgIHJldHVy
biBtX2xpbmVCb3gubV9wYXRoVmFyaWFudCA9PSBvdGhlci5tX2xpbmVCb3gubV9wYXRoVmFyaWFu
dDsKLX0KLQotTGluZUJveEl0ZXJhdG9yIGZpcnN0TGluZUJveEZvcihjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGZsb3cpCi17Ci0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0g
ICAgaWYgKGF1dG8qIGxpbmVMYXlvdXQgPSBmbG93Lm1vZGVybkxpbmVMYXlvdXQoKSkKLSAgICAg
ICAgcmV0dXJuIGxpbmVMYXlvdXQtPmZpcnN0TGluZUJveCgpOwotI2VuZGlmCi0KLSAgICByZXR1
cm4geyBMaW5lQm94SXRlcmF0b3JMZWdhY3lQYXRoIHsgZmxvdy5maXJzdFJvb3RCb3goKSB9IH07
Ci19Ci0KLUxpbmVCb3hJdGVyYXRvciBsYXN0TGluZUJveEZvcihjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGZsb3cpCi17Ci0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0gICAg
aWYgKGF1dG8qIGxpbmVMYXlvdXQgPSBmbG93Lm1vZGVybkxpbmVMYXlvdXQoKSkKLSAgICAgICAg
cmV0dXJuIGxpbmVMYXlvdXQtPmxhc3RMaW5lQm94KCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB7
IExpbmVCb3hJdGVyYXRvckxlZ2FjeVBhdGggeyBmbG93Lmxhc3RSb290Qm94KCkgfSB9OwotfQot
Ci1MaW5lQm94SXRlcmF0b3IgTGluZUJveDo6bmV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExp
bmVCb3hJdGVyYXRvcigqdGhpcykudHJhdmVyc2VOZXh0KCk7Ci19Ci0KLUxpbmVCb3hJdGVyYXRv
ciBMaW5lQm94OjpwcmV2aW91cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExpbmVCb3hJdGVyYXRv
cigqdGhpcykudHJhdmVyc2VQcmV2aW91cygpOwotfQotCi1MZWFmQm94SXRlcmF0b3IgTGluZUJv
eDo6Zmlyc3RMZWFmQm94KCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3Bh
dGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSAtPiBMZWFmQm94SXRlcmF0b3IgewotICAgICAgICBy
ZXR1cm4geyBwYXRoLmZpcnN0TGVhZkJveCgpIH07Ci0gICAgfSk7Ci19Ci0KLUxlYWZCb3hJdGVy
YXRvciBMaW5lQm94OjpsYXN0TGVhZkJveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4gTGVhZkJveEl0ZXJhdG9yIHsK
LSAgICAgICAgcmV0dXJuIHsgcGF0aC5sYXN0TGVhZkJveCgpIH07Ci0gICAgfSk7Ci19Ci0KLUxl
YWZCb3hJdGVyYXRvciBjbG9zZXN0Qm94Rm9ySG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IExpbmVC
b3gmIGxpbmVCb3gsIGZsb2F0IGhvcml6b250YWxQb3NpdGlvbiwgYm9vbCBlZGl0YWJsZU9ubHkp
Ci17Ci0gICAgYXV0byBpc0VkaXRhYmxlID0gWyZdKGF1dG8gYm94KSB7Ci0gICAgICAgIHJldHVy
biBib3ggJiYgYm94LT5yZW5kZXJlcigpLm5vZGUoKSAmJiBib3gtPnJlbmRlcmVyKCkubm9kZSgp
LT5oYXNFZGl0YWJsZVN0eWxlKCk7Ci0gICAgfTsKLQotICAgIGF1dG8gZmlyc3RCb3ggPSBsaW5l
Qm94LmZpcnN0TGVhZkJveCgpOwotICAgIGF1dG8gbGFzdEJveCA9IGxpbmVCb3gubGFzdExlYWZC
b3goKTsKLQotICAgIGlmIChmaXJzdEJveCAhPSBsYXN0Qm94KSB7Ci0gICAgICAgIGlmIChmaXJz
dEJveC0+aXNMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgIGZpcnN0Qm94ID0gZmlyc3RCb3gtPm5l
eHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwotICAgICAgICBlbHNlIGlmIChsYXN0Qm94LT5p
c0xpbmVCcmVhaygpKQotICAgICAgICAgICAgbGFzdEJveCA9IGxhc3RCb3gtPnByZXZpb3VzT25M
aW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKLSAgICB9Ci0KLSAgICBpZiAoZmlyc3RCb3ggPT0gbGFz
dEJveCAmJiAoIWVkaXRhYmxlT25seSB8fCBpc0VkaXRhYmxlKGZpcnN0Qm94KSkpCi0gICAgICAg
IHJldHVybiBmaXJzdEJveDsKLQotICAgIGlmIChmaXJzdEJveCAmJiBob3Jpem9udGFsUG9zaXRp
b24gPD0gZmlyc3RCb3gtPmxvZ2ljYWxMZWZ0KCkgJiYgIWZpcnN0Qm94LT5yZW5kZXJlcigpLmlz
TGlzdE1hcmtlcigpICYmICghZWRpdGFibGVPbmx5IHx8IGlzRWRpdGFibGUoZmlyc3RCb3gpKSkK
LSAgICAgICAgcmV0dXJuIGZpcnN0Qm94OwotCi0gICAgaWYgKGxhc3RCb3ggJiYgaG9yaXpvbnRh
bFBvc2l0aW9uID49IGxhc3RCb3gtPmxvZ2ljYWxSaWdodCgpICYmICFsYXN0Qm94LT5yZW5kZXJl
cigpLmlzTGlzdE1hcmtlcigpICYmICghZWRpdGFibGVPbmx5IHx8IGlzRWRpdGFibGUobGFzdEJv
eCkpKQotICAgICAgICByZXR1cm4gbGFzdEJveDsKLQotICAgIGF1dG8gY2xvc2VzdEJveCA9IGxh
c3RCb3g7Ci0gICAgZm9yIChhdXRvIGJveCA9IGZpcnN0Qm94OyBib3g7IGJveCA9IGJveC50cmF2
ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpKSB7Ci0gICAgICAgIGlmICghYm94LT5y
ZW5kZXJlcigpLmlzTGlzdE1hcmtlcigpICYmICghZWRpdGFibGVPbmx5IHx8IGlzRWRpdGFibGUo
Ym94KSkpIHsKLSAgICAgICAgICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPCBib3gtPmxvZ2lj
YWxSaWdodCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBib3g7Ci0gICAgICAgICAgICBjbG9z
ZXN0Qm94ID0gYm94OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNsb3Nlc3RCb3g7
Ci19Ci0KLX0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0lubGluZUl0ZXJhdG9yTGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZUJveC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxMGY5ODMxMzg5ZGYzNTk0YjJmY2Q1NjcxMjZmYTdhYWY1YzA1NjIyLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmVCb3guaAorKysgL2Rldi9udWxsCkBAIC0x
LDI2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJGb250
QmFzZWxpbmUuaCIKLSNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckxpbmVCb3hMZWdhY3lQYXRoLmgi
Ci0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMaW5lQm94TW9kZXJuUGF0aC5oIgotI2luY2x1ZGUg
IlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgPHZhcmlhbnQ+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgTGluZVNlbGVjdGlvbjsKLQotbmFtZXNwYWNlIElubGluZUl0ZXJhdG9y
IHsKLQotY2xhc3MgTGluZUJveEl0ZXJhdG9yOwotY2xhc3MgUGF0aEl0ZXJhdG9yOwotY2xhc3Mg
TGVhZkJveEl0ZXJhdG9yOwotCi1zdHJ1Y3QgRW5kTGluZUJveEl0ZXJhdG9yIHsgfTsKLQotY2xh
c3MgTGluZUJveCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgUGF0aFZhcmlhbnQgPSBzdGQ6OnZhcmlh
bnQ8Ci0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0gICAgICAgIExpbmVC
b3hJdGVyYXRvck1vZGVyblBhdGgsCi0jZW5kaWYKLSAgICAgICAgTGluZUJveEl0ZXJhdG9yTGVn
YWN5UGF0aAotICAgID47Ci0KLSAgICBMaW5lQm94KFBhdGhWYXJpYW50JiYpOwotCi0gICAgZmxv
YXQgdG9wKCkgY29uc3Q7Ci0gICAgZmxvYXQgYm90dG9tKCkgY29uc3Q7Ci0gICAgZmxvYXQgaGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gYm90dG9tKCkgLSB0b3AoKTsgfQotCi0gICAgZmxvYXQgY29u
dGVudExvZ2ljYWxUb3AoKSBjb25zdDsKLSAgICBmbG9hdCBjb250ZW50TG9naWNhbEJvdHRvbSgp
IGNvbnN0OwotICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsTGVmdCgpIGNvbnN0OwotICAgIGZsb2F0
IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdDsKLSAgICBmbG9hdCBjb250ZW50TG9naWNhbFdp
ZHRoKCkgY29uc3Q7Ci0KLSAgICBmbG9hdCBjb250ZW50TG9naWNhbFRvcEFkanVzdGVkRm9yUHJl
Y2VkaW5nTGluZUJveCgpIGNvbnN0OwotICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsQm90dG9tQWRq
dXN0ZWRGb3JGb2xsb3dpbmdMaW5lQm94KCkgY29uc3Q7Ci0KLSAgICBmbG9hdCBpbmtPdmVyZmxv
d1RvcCgpIGNvbnN0OwotICAgIGZsb2F0IGlua092ZXJmbG93Qm90dG9tKCkgY29uc3Q7Ci0KLSAg
ICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0OwotICAgIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250YWluaW5nRnJhZ21lbnQoKSBjb25zdDsKLQotICAg
IGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7Ci0gICAgRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlw
ZSgpIGNvbnN0OwotCi0gICAgYm9vbCBpc0ZpcnN0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0ZpcnN0
QWZ0ZXJQYWdlQnJlYWsoKSBjb25zdDsKLQotICAgIExlYWZCb3hJdGVyYXRvciBmaXJzdExlYWZC
b3goKSBjb25zdDsKLSAgICBMZWFmQm94SXRlcmF0b3IgbGFzdExlYWZCb3goKSBjb25zdDsKLQot
ICAgIExpbmVCb3hJdGVyYXRvciBuZXh0KCkgY29uc3Q7Ci0gICAgTGluZUJveEl0ZXJhdG9yIHBy
ZXZpb3VzKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIExpbmVCb3hJdGVy
YXRvcjsKLQotICAgIFBhdGhWYXJpYW50IG1fcGF0aFZhcmlhbnQ7Ci19OwotCi1jbGFzcyBMaW5l
Qm94SXRlcmF0b3IgewotcHVibGljOgotICAgIExpbmVCb3hJdGVyYXRvcigpIDogbV9saW5lQm94
KExpbmVCb3hJdGVyYXRvckxlZ2FjeVBhdGggeyBudWxscHRyIH0pIHsgfTsKLSAgICBMaW5lQm94
SXRlcmF0b3IoY29uc3QgTGVnYWN5Um9vdElubGluZUJveCogcm9vdElubGluZUJveCkgOiBtX2xp
bmVCb3goTGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aCB7IHJvb3RJbmxpbmVCb3ggfSkgeyB9Owot
ICAgIExpbmVCb3hJdGVyYXRvcihMaW5lQm94OjpQYXRoVmFyaWFudCYmKTsKLSAgICBMaW5lQm94
SXRlcmF0b3IoY29uc3QgTGluZUJveCYpOwotCi0gICAgTGluZUJveEl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0KCk7IH0KLSAgICBMaW5lQm94SXRlcmF0b3ImIHRy
YXZlcnNlTmV4dCgpOwotICAgIExpbmVCb3hJdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91cygpOwot
Ci0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9
Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZUJveEl0ZXJhdG9yJikgY29uc3Q7Ci0g
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExpbmVCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oRW5kTGlu
ZUJveEl0ZXJhdG9yKSBjb25zdCB7IHJldHVybiBhdEVuZCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRv
ciE9KEVuZExpbmVCb3hJdGVyYXRvcikgY29uc3QgeyByZXR1cm4gIWF0RW5kKCk7IH0KLQotICAg
IGNvbnN0IExpbmVCb3gmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveDsgfQot
ICAgIGNvbnN0IExpbmVCb3gqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV9saW5lQm94
OyB9Ci0KLSAgICBib29sIGF0RW5kKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUJveCBt
X2xpbmVCb3g7Ci19OwotCi1MaW5lQm94SXRlcmF0b3IgZmlyc3RMaW5lQm94Rm9yKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYpOwotTGluZUJveEl0ZXJhdG9yIGxhc3RMaW5lQm94Rm9yKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYpOwotTGVhZkJveEl0ZXJhdG9yIGNsb3Nlc3RCb3hGb3JIb3Jpem9udGFs
UG9zaXRpb24oY29uc3QgTGluZUJveCYsIGZsb2F0IGhvcml6b250YWxQb3NpdGlvbiwgYm9vbCBl
ZGl0YWJsZU9ubHkgPSBmYWxzZSk7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi1pbmxpbmUgZmxvYXQgcHJldmlvdXNMaW5lQm94Q29udGVudEJv
dHRvbU9yQm9yZGVyQW5kUGFkZGluZyhjb25zdCBMaW5lQm94JiBsaW5lQm94KQotewotICAgIHJl
dHVybiBsaW5lQm94LmlzRmlyc3QoKSA/IGxpbmVCb3guY29udGFpbmluZ0Jsb2NrKCkuYm9yZGVy
QW5kUGFkZGluZ0JlZm9yZSgpLnRvRmxvYXQoKSA6IGxpbmVCb3guY29udGVudExvZ2ljYWxUb3BB
ZGp1c3RlZEZvclByZWNlZGluZ0xpbmVCb3goKTsgCi19Ci0KLWlubGluZSBmbG9hdCBjb250ZW50
U3RhcnRJbkJsb2NrRGlyZWN0aW9uKGNvbnN0IExpbmVCb3gmIGxpbmVCb3gpCi17Ci0gICAgaWYg
KCFsaW5lQm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGxpbmVCb3guY29udGVudExvZ2ljYWxU
b3AoKSwgcHJldmlvdXNMaW5lQm94Q29udGVudEJvdHRvbU9yQm9yZGVyQW5kUGFkZGluZyhsaW5l
Qm94KSk7Ci0gICAgcmV0dXJuIHN0ZDo6bWluKGxpbmVCb3guY29udGVudExvZ2ljYWxCb3R0b20o
KSwgbGluZUJveC5jb250ZW50TG9naWNhbEJvdHRvbUFkanVzdGVkRm9yRm9sbG93aW5nTGluZUJv
eCgpKTsKLX0KLQotaW5saW5lIExpbmVCb3g6OkxpbmVCb3goUGF0aFZhcmlhbnQmJiBwYXRoKQot
ICAgIDogbV9wYXRoVmFyaWFudChXVEZNb3ZlKHBhdGgpKQotewotfQotCi1pbmxpbmUgZmxvYXQg
TGluZUJveDo6Y29udGVudExvZ2ljYWxUb3AoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0
dXJuIHBhdGguY29udGVudExvZ2ljYWxUb3AoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGZsb2F0
IExpbmVCb3g6OmNvbnRlbnRMb2dpY2FsQm90dG9tKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7Ci0gICAgICAg
IHJldHVybiBwYXRoLmNvbnRlbnRMb2dpY2FsQm90dG9tKCk7Ci0gICAgfSk7Ci19Ci0KLWlubGlu
ZSBmbG9hdCBMaW5lQm94Ojpjb250ZW50TG9naWNhbFRvcEFkanVzdGVkRm9yUHJlY2VkaW5nTGlu
ZUJveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwg
W10oY29uc3QgYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5jb250ZW50TG9naWNh
bFRvcEFkanVzdGVkRm9yUHJlY2VkaW5nTGluZUJveCgpOwotICAgIH0pOwotfQotCi1pbmxpbmUg
ZmxvYXQgTGluZUJveDo6Y29udGVudExvZ2ljYWxCb3R0b21BZGp1c3RlZEZvckZvbGxvd2luZ0xp
bmVCb3goKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQs
IFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguY29udGVudExvZ2lj
YWxCb3R0b21BZGp1c3RlZEZvckZvbGxvd2luZ0xpbmVCb3goKTsKLSAgICB9KTsKLX0KLQotaW5s
aW5lIGZsb2F0IExpbmVCb3g6OnRvcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4g
cGF0aC50b3AoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIGZsb2F0IExpbmVCb3g6OmJvdHRvbSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29u
c3QgYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5ib3R0b20oKTsKLSAgICB9KTsK
LX0KLQotaW5saW5lIGZsb2F0IExpbmVCb3g6Omlua092ZXJmbG93VG9wKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRo
KSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlua092ZXJmbG93VG9wKCk7Ci0gICAgfSk7Ci19Ci0K
LWlubGluZSBmbG9hdCBMaW5lQm94OjppbmtPdmVyZmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkg
ewotICAgICAgICByZXR1cm4gcGF0aC5pbmtPdmVyZmxvd0JvdHRvbSgpOwotICAgIH0pOwotfQot
Ci1pbmxpbmUgZmxvYXQgTGluZUJveDo6Y29udGVudExvZ2ljYWxMZWZ0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRo
KSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmNvbnRlbnRMb2dpY2FsTGVmdCgpOwotICAgIH0pOwot
fQotCi1pbmxpbmUgZmxvYXQgTGluZUJveDo6Y29udGVudExvZ2ljYWxSaWdodCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYg
cGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5jb250ZW50TG9naWNhbFJpZ2h0KCk7Ci0gICAg
fSk7Ci19Ci0KLWlubGluZSBmbG9hdCBMaW5lQm94Ojpjb250ZW50TG9naWNhbFdpZHRoKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY29udGVudExvZ2ljYWxSaWdodCgpIC0gY29udGVudExvZ2ljYWxM
ZWZ0KCk7Ci19Ci0KLWlubGluZSBib29sIExpbmVCb3g6OmlzSG9yaXpvbnRhbCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYg
cGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pc0hvcml6b250YWwoKTsKLSAgICB9KTsKLX0K
LQotaW5saW5lIEZvbnRCYXNlbGluZSBMaW5lQm94OjpiYXNlbGluZVR5cGUoKSBjb25zdAotewot
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBh
dGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguYmFzZWxpbmVUeXBlKCk7Ci0gICAgfSk7Ci19Ci0K
LWlubGluZSBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIExpbmVCb3g6OmNvbnRhaW5pbmdCbG9jaygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29u
c3QgYXV0byYgcGF0aCkgLT4gY29uc3QgUmVuZGVyQmxvY2tGbG93JiB7Ci0gICAgICAgIHJldHVy
biBwYXRoLmNvbnRhaW5pbmdCbG9jaygpOwotICAgIH0pOwotfQotCi1pbmxpbmUgUmVuZGVyRnJh
Z21lbnRDb250YWluZXIqIExpbmVCb3g6OmNvbnRhaW5pbmdGcmFnbWVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0
aCkgewotICAgICAgICByZXR1cm4gcGF0aC5jb250YWluaW5nRnJhZ21lbnQoKTsKLSAgICB9KTsK
LX0KLQotaW5saW5lIGJvb2wgTGluZUJveDo6aXNGaXJzdEFmdGVyUGFnZUJyZWFrKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRv
JiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlzRmlyc3RBZnRlclBhZ2VCcmVhaygpOwot
ICAgIH0pOwotfQotCi1pbmxpbmUgYm9vbCBMaW5lQm94Ojppc0ZpcnN0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gIXByZXZpb3VzKCk7Ci19Ci0KLX0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZUJveExlZ2FjeVBhdGgu
aCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxpbmVC
b3hMZWdhY3lQYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OGUzMWJmNGFl
MDFlN2VmMjMwOWZiZDc0N2FiZTg5OGE5NDdlYzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lu
bGluZUl0ZXJhdG9yTGluZUJveExlZ2FjeVBhdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIklubGluZUl0ZXJh
dG9yQm94TGVnYWN5UGF0aC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uSW5saW5lQ29u
dGVudC5oIgotI2luY2x1ZGUgIkxlZ2FjeVJvb3RJbmxpbmVCb3guaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotbmFtZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKLQotY2xhc3MgTGluZUJveEl0ZXJh
dG9yTGVnYWN5UGF0aCB7Ci1wdWJsaWM6Ci0gICAgTGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aChj
b25zdCBMZWdhY3lSb290SW5saW5lQm94KiByb290SW5saW5lQm94KQotICAgICAgICA6IG1fcm9v
dElubGluZUJveChyb290SW5saW5lQm94KQotICAgIHsKLSAgICB9Ci0gICAgTGluZUJveEl0ZXJh
dG9yTGVnYWN5UGF0aChMaW5lQm94SXRlcmF0b3JMZWdhY3lQYXRoJiYpID0gZGVmYXVsdDsKLSAg
ICBMaW5lQm94SXRlcmF0b3JMZWdhY3lQYXRoKGNvbnN0IExpbmVCb3hJdGVyYXRvckxlZ2FjeVBh
dGgmKSA9IGRlZmF1bHQ7Ci0gICAgTGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aCYgb3BlcmF0b3I9
KGNvbnN0IExpbmVCb3hJdGVyYXRvckxlZ2FjeVBhdGgmKSA9IGRlZmF1bHQ7Ci0gICAgTGluZUJv
eEl0ZXJhdG9yTGVnYWN5UGF0aCYgb3BlcmF0b3I9KExpbmVCb3hJdGVyYXRvckxlZ2FjeVBhdGgm
JikgPSBkZWZhdWx0OwotCi0gICAgZmxvYXQgY29udGVudExvZ2ljYWxUb3AoKSBjb25zdCB7IHJl
dHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxpbmVUb3AoKS50b0Zsb2F0KCk7IH0KLSAgICBmbG9hdCBj
b250ZW50TG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bGlu
ZUJvdHRvbSgpLnRvRmxvYXQoKTsgfQotICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsVG9wQWRqdXN0
ZWRGb3JQcmVjZWRpbmdMaW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5z
ZWxlY3Rpb25Ub3AoKS50b0Zsb2F0KCk7IH0KLSAgICBmbG9hdCBjb250ZW50TG9naWNhbEJvdHRv
bUFkanVzdGVkRm9yRm9sbG93aW5nTGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGlu
ZUJveC0+c2VsZWN0aW9uQm90dG9tKCkudG9GbG9hdCgpOyB9Ci0gICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5saW5lQm94VG9wKCkudG9GbG9hdCgpOyB9Ci0g
ICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5saW5lQm94
Qm90dG9tKCkudG9GbG9hdCgpOyB9Ci0gICAgZmxvYXQgaW5rT3ZlcmZsb3dUb3AoKSBjb25zdCB7
IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpOyB9Ci0g
ICAgZmxvYXQgaW5rT3ZlcmZsb3dCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVC
b3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpOyB9Ci0KLSAgICBmbG9hdCBjb250ZW50
TG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxvZ2ljYWxMZWZ0
KCk7IH0KLSAgICBmbG9hdCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9y
b290SW5saW5lQm94LT5sb2dpY2FsUmlnaHQoKTsgfQotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkg
Y29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5pc0hvcml6b250YWwoKTsgfQotICAgIEZv
bnRCYXNlbGluZSBiYXNlbGluZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gt
PmJhc2VsaW5lVHlwZSgpOyB9Ci0KLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5p
bmdCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+YmxvY2tGbG93KCk7IH0K
LQotICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250YWluaW5nRnJhZ21lbnQoKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmNvbnRhaW5pbmdGcmFnbWVudCgpOyB9Ci0gICAg
Ym9vbCBpc0ZpcnN0QWZ0ZXJQYWdlQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVC
b3gtPmlzRmlyc3RBZnRlclBhZ2VCcmVhaygpOyB9Ci0KLSAgICB2b2lkIHRyYXZlcnNlTmV4dCgp
Ci0gICAgewotICAgICAgICBtX3Jvb3RJbmxpbmVCb3ggPSBtX3Jvb3RJbmxpbmVCb3gtPm5leHRS
b290Qm94KCk7Ci0gICAgfQotCi0gICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzKCkKLSAgICB7Ci0g
ICAgICAgIG1fcm9vdElubGluZUJveCA9IG1fcm9vdElubGluZUJveC0+cHJldlJvb3RCb3goKTsK
LSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZUJveEl0ZXJhdG9yTGVnYWN5
UGF0aCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveCA9PSBvdGhlci5tX3Jv
b3RJbmxpbmVCb3g7IH0KLQotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9yb290
SW5saW5lQm94OyB9Ci0KLSAgICBCb3hMZWdhY3lQYXRoIGZpcnN0TGVhZkJveCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4geyBtX3Jvb3RJbmxpbmVCb3gtPmZpcnN0TGVhZkRlc2NlbmRh
bnQoKSB9OwotICAgIH0KLQotICAgIEJveExlZ2FjeVBhdGggbGFzdExlYWZCb3goKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHsgbV9yb290SW5saW5lQm94LT5sYXN0TGVhZkRlc2NlbmRh
bnQoKSB9OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBMZWdhY3lSb290SW5saW5lQm94
KiBtX3Jvb3RJbmxpbmVCb3g7Ci19OwotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMaW5lQm94TW9kZXJuUGF0aC5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yTGluZUJveE1v
ZGVyblBhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZiMmMwZDA3NmY5MGYy
OTIyZjgwNGZjNzJhZDI2NzQwMjNkYWZhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5l
SXRlcmF0b3JMaW5lQm94TW9kZXJuUGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCi0jaW5jbHVkZSAi
UmVuZGVyQmxvY2tGbG93LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJbmxp
bmVJdGVyYXRvciB7Ci0KLWNsYXNzIEJveE1vZGVyblBhdGg7Ci0KLWNsYXNzIExpbmVCb3hJdGVy
YXRvck1vZGVyblBhdGggewotcHVibGljOgotICAgIExpbmVCb3hJdGVyYXRvck1vZGVyblBhdGgo
Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIHNp
emVfdCBsaW5lSW5kZXgpCi0gICAgICAgIDogbV9pbmxpbmVDb250ZW50KCZpbmxpbmVDb250ZW50
KQotICAgICAgICAsIG1fbGluZUluZGV4KGxpbmVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChsaW5lSW5kZXggPD0gbGluZXMoKS5zaXplKCkpOwotICAgIH0KLSAgICBMaW5lQm94SXRlcmF0
b3JNb2Rlcm5QYXRoKExpbmVCb3hJdGVyYXRvck1vZGVyblBhdGgmJikgPSBkZWZhdWx0OwotICAg
IExpbmVCb3hJdGVyYXRvck1vZGVyblBhdGgoY29uc3QgTGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0
aCYpID0gZGVmYXVsdDsKLSAgICBMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoJiBvcGVyYXRvcj0o
Y29uc3QgTGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aCYpID0gZGVmYXVsdDsKLSAgICBMaW5lQm94
SXRlcmF0b3JNb2Rlcm5QYXRoJiBvcGVyYXRvcj0oTGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aCYm
KSA9IGRlZmF1bHQ7Ci0KLSAgICBmbG9hdCBjb250ZW50TG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0
dXJuIGxpbmUoKS5lbmNsb3NpbmdDb250ZW50VG9wKCk7IH0KLSAgICBmbG9hdCBjb250ZW50TG9n
aWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5lbmNsb3NpbmdDb250ZW50Qm90dG9t
KCk7IH0KLSAgICBmbG9hdCB0b3AoKSBjb25zdCB7IHJldHVybiBsaW5lKCkubGluZUJveFRvcCgp
OyB9Ci0gICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gbGluZSgpLmxpbmVCb3hCb3R0
b20oKTsgfQotICAgIGZsb2F0IGlua092ZXJmbG93VG9wKCkgY29uc3QgeyByZXR1cm4gbGluZSgp
Lmlua092ZXJmbG93KCkueSgpOyB9Ci0gICAgZmxvYXQgaW5rT3ZlcmZsb3dCb3R0b20oKSBjb25z
dCB7IHJldHVybiBsaW5lKCkuaW5rT3ZlcmZsb3coKS5tYXhZKCk7IH0KLQotICAgIGZsb2F0IGNv
bnRlbnRMb2dpY2FsVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdMaW5lQm94KCkgY29uc3QgeyByZXR1
cm4gIW1fbGluZUluZGV4ID8gY29udGVudExvZ2ljYWxUb3AoKSA6IExpbmVCb3hJdGVyYXRvck1v
ZGVyblBhdGgoKm1faW5saW5lQ29udGVudCwgbV9saW5lSW5kZXggLSAxKS5jb250ZW50TG9naWNh
bEJvdHRvbUFkanVzdGVkRm9yRm9sbG93aW5nTGluZUJveCgpOyB9Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudC4KLSAgICBmbG9hdCBjb250ZW50TG9naWNhbEJvdHRvbUFkanVzdGVkRm9yRm9sbG93
aW5nTGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRMb2dpY2FsQm90dG9tKCk7IH0KLQot
ICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5saW5l
Qm94TGVmdCgpICsgbGluZSgpLmNvbnRlbnRMb2dpY2FsT2Zmc2V0KCk7IH0KLSAgICBmbG9hdCBj
b250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29udGVudExvZ2ljYWxMZWZ0KCkg
KyBsaW5lKCkuY29udGVudExvZ2ljYWxXaWR0aCgpOyB9Ci0gICAgYm9vbCBpc0hvcml6b250YWwo
KSBjb25zdCB7IHJldHVybiBsaW5lKCkuaXNIb3Jpem9udGFsKCk7IH0KLSAgICBGb250QmFzZWxp
bmUgYmFzZWxpbmVUeXBlKCkgY29uc3QgeyByZXR1cm4gbGluZSgpLmJhc2VsaW5lVHlwZSgpOyB9
Ci0KLSAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lQ29udGVudC0+Y29udGFpbmluZ0Jsb2NrKCk7IH0KLQotICAgIFJlbmRl
ckZyYWdtZW50Q29udGFpbmVyKiBjb250YWluaW5nRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgYm9vbCBpc0ZpcnN0QWZ0ZXJQYWdlQnJlYWsoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotCi0gICAgdm9pZCB0cmF2ZXJzZU5leHQoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCFhdEVuZCgpKTsKLQotICAgICAgICArK21fbGluZUluZGV4OwotICAgIH0KLQotICAgIHZv
aWQgdHJhdmVyc2VQcmV2aW91cygpCi0gICAgewotICAgICAgICBBU1NFUlQoIWF0RW5kKCkpOwot
Ci0gICAgICAgIGlmICghbV9saW5lSW5kZXgpIHsKLSAgICAgICAgICAgIHNldEF0RW5kKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAtLW1fbGluZUluZGV4Owot
ICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMaW5lQm94SXRlcmF0b3JNb2Rlcm5Q
YXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50ID09IG90aGVyLm1faW5s
aW5lQ29udGVudCAmJiBtX2xpbmVJbmRleCA9PSBvdGhlci5tX2xpbmVJbmRleDsgfQotCi0gICAg
Ym9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUluZGV4ID09IGxpbmVzKCkuc2l6ZSgp
OyB9Ci0KLSAgICBCb3hNb2Rlcm5QYXRoIGZpcnN0TGVhZkJveCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoIWxpbmUoKS5ib3hDb3VudCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgKm1faW5s
aW5lQ29udGVudCB9OwotICAgICAgICBhdXRvIHJ1bkl0ZXJhdG9yID0gQm94TW9kZXJuUGF0aCB7
ICptX2lubGluZUNvbnRlbnQsIGxpbmUoKS5maXJzdEJveEluZGV4KCkgfTsKLSAgICAgICAgaWYg
KHJ1bkl0ZXJhdG9yLmJveCgpLmlzSW5saW5lQm94KCkpCi0gICAgICAgICAgICBydW5JdGVyYXRv
ci50cmF2ZXJzZU5leHRPbkxpbmUoKTsKLSAgICAgICAgcmV0dXJuIHJ1bkl0ZXJhdG9yOwotICAg
IH0KLQotICAgIEJveE1vZGVyblBhdGggbGFzdExlYWZCb3goKSBjb25zdAotICAgIHsKLSAgICAg
ICAgYXV0byBib3hDb3VudCA9IGxpbmUoKS5ib3hDb3VudCgpOwotICAgICAgICBpZiAoIWJveENv
dW50KQotICAgICAgICAgICAgcmV0dXJuIHsgKm1faW5saW5lQ29udGVudCB9OwotICAgICAgICBh
dXRvIHJ1bkl0ZXJhdG9yID0gQm94TW9kZXJuUGF0aCB7ICptX2lubGluZUNvbnRlbnQsIGxpbmUo
KS5maXJzdEJveEluZGV4KCkgKyBib3hDb3VudCAtIDEgfTsKLSAgICAgICAgaWYgKHJ1bkl0ZXJh
dG9yLmJveCgpLmlzSW5saW5lQm94KCkpCi0gICAgICAgICAgICBydW5JdGVyYXRvci50cmF2ZXJz
ZVByZXZpb3VzT25MaW5lKCk7Ci0gICAgICAgIHJldHVybiBydW5JdGVyYXRvcjsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBzZXRBdEVuZCgpIHsgbV9saW5lSW5kZXggPSBsaW5lcygpLnNp
emUoKTsgfQotCi0gICAgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQ6Okxp
bmVzJiBsaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGVudC0+bGluZXM7IH0KLSAg
ICBjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZSYgbGluZSgpIGNvbnN0IHsgcmV0dXJuIGxp
bmVzKClbbV9saW5lSW5kZXhdOyB9Ci0KLSAgICBSZWZQdHI8Y29uc3QgTGF5b3V0SW50ZWdyYXRp
b246OklubGluZUNvbnRlbnQ+IG1faW5saW5lQ29udGVudDsKLSAgICBzaXplX3QgbV9saW5lSW5k
ZXggeyAwIH07Ci19OwotCi19Ci19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMb2dpY2FsT3JkZXJUcmF2ZXJz
YWwuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9y
TG9naWNhbE9yZGVyVHJhdmVyc2FsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OGY0YmMyMDJkZGRlMWE1YTUzZjNkYTBjMGM3ZjE2NzAwMjM0YjY3OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JMb2dpY2FsT3JkZXJUcmF2ZXJzYWwuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMb2dpY2FsT3JkZXJUcmF2ZXJzYWwuaCIKLQotI2lu
Y2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZUJveC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1u
YW1lc3BhY2UgSW5saW5lSXRlcmF0b3IgewotCi1zdGF0aWMgVGV4dExvZ2ljYWxPcmRlckNhY2hl
IG1ha2VUZXh0TG9naWNhbE9yZGVyQ2FjaGVJZk5lZWRlZChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0
KQotewotICAgIGlmICghdGV4dC5uZWVkc1Zpc3VhbFJlb3JkZXJpbmcoKSkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLQotICAgIGF1dG8gY2FjaGUgPSBtYWtlVW5pcXVlPFRleHRMb2dpY2FsT3JkZXJD
YWNoZURhdGE+KCk7Ci0gICAgZm9yIChhdXRvIHRleHRCb3ggOiB0ZXh0Qm94ZXNGb3IodGV4dCkp
Ci0gICAgICAgIGNhY2hlLT5ib3hlcy5hcHBlbmQodGV4dEJveCk7Ci0KLSAgICBpZiAoY2FjaGUt
PmJveGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBzdGQ6OnNv
cnQoY2FjaGUtPmJveGVzLmJlZ2luKCksIGNhY2hlLT5ib3hlcy5lbmQoKSwgWyZdKGF1dG8mIGEs
IGF1dG8mIGIpIHsKLSAgICAgICAgcmV0dXJuIGEtPnN0YXJ0KCkgPCBiLT5zdGFydCgpOwotICAg
IH0pOwotCi0gICAgcmV0dXJuIGNhY2hlOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVUZXh0TG9n
aWNhbE9yZGVyQ2FjaGVJZk5lZWRlZChjb25zdCBUZXh0Qm94SXRlcmF0b3ImIHRleHRCb3gsIFRl
eHRMb2dpY2FsT3JkZXJDYWNoZSYgY2FjaGUpCi17Ci0gICAgaWYgKCFjYWNoZSAmJiAhKGNhY2hl
ID0gbWFrZVRleHRMb2dpY2FsT3JkZXJDYWNoZUlmTmVlZGVkKHRleHRCb3gtPnJlbmRlcmVyKCkp
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNhY2hlLT5pbmRleCA8IGNhY2hlLT5ib3hl
cy5zaXplKCkgJiYgY2FjaGUtPmJveGVzW2NhY2hlLT5pbmRleF0gPT0gdGV4dEJveCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FjaGUtPmluZGV4ID0gY2FjaGUtPmJveGVzLmZpbmQodGV4dEJv
eCk7Ci0KLSAgICBpZiAoY2FjaGUtPmluZGV4ID09IG5vdEZvdW5kKSB7Ci0gICAgICAgIGNhY2hl
ID0geyB9OwotICAgICAgICB1cGRhdGVUZXh0TG9naWNhbE9yZGVyQ2FjaGVJZk5lZWRlZCh0ZXh0
Qm94LCBjYWNoZSk7Ci0gICAgfQotfQotCi1zdGQ6OnBhaXI8VGV4dEJveEl0ZXJhdG9yLCBUZXh0
TG9naWNhbE9yZGVyQ2FjaGU+IGZpcnN0VGV4dEJveEluTG9naWNhbE9yZGVyRm9yKGNvbnN0IFJl
bmRlclRleHQmIHRleHQpCi17Ci0gICAgaWYgKGF1dG8gY2FjaGUgPSBtYWtlVGV4dExvZ2ljYWxP
cmRlckNhY2hlSWZOZWVkZWQodGV4dCkpCi0gICAgICAgIHJldHVybiB7IGNhY2hlLT5ib3hlcy5m
aXJzdCgpLCBXVEZNb3ZlKGNhY2hlKSB9OwotCi0gICAgcmV0dXJuIHsgZmlyc3RUZXh0Qm94Rm9y
KHRleHQpLCBudWxscHRyIH07Ci19Ci0KLVRleHRCb3hJdGVyYXRvciBuZXh0VGV4dEJveEluTG9n
aWNhbE9yZGVyKGNvbnN0IFRleHRCb3hJdGVyYXRvciYgdGV4dEJveCwgVGV4dExvZ2ljYWxPcmRl
ckNhY2hlJiBjYWNoZSkKLXsKLSAgICB1cGRhdGVUZXh0TG9naWNhbE9yZGVyQ2FjaGVJZk5lZWRl
ZCh0ZXh0Qm94LCBjYWNoZSk7Ci0KLSAgICBpZiAoIWNhY2hlKQotICAgICAgICByZXR1cm4gdGV4
dEJveC0+bmV4dFRleHRCb3goKTsKLQotICAgIGNhY2hlLT5pbmRleCsrOwotCi0gICAgaWYgKGNh
Y2hlLT5pbmRleCA8IGNhY2hlLT5ib3hlcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBjYWNoZS0+
Ym94ZXNbY2FjaGUtPmluZGV4XTsKLQotICAgIHJldHVybiB7IH07Ci19Ci0KLXN0YXRpYyBMaW5l
TG9naWNhbE9yZGVyQ2FjaGUgbWFrZUxpbmVMb2dpY2FsT3JkZXJDYWNoZShjb25zdCBMaW5lQm94
SXRlcmF0b3ImIGxpbmVCb3gpCi17Ci0gICAgYXV0byBjYWNoZSA9IG1ha2VVbmlxdWU8TGluZUxv
Z2ljYWxPcmRlckNhY2hlRGF0YT4oKTsKLQotICAgIGNhY2hlLT5saW5lQm94ID0gbGluZUJveDsK
LSAgICBjYWNoZS0+Ym94ZXMgPSBsZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcihsaW5lQm94LCBbXShh
dXRvIGZpcnN0LCBhdXRvIGxhc3QpIHsKLSAgICAgICAgc3RkOjpyZXZlcnNlKGZpcnN0LCBsYXN0
KTsKLSAgICB9KTsKLQotICAgIHJldHVybiBjYWNoZTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRl
TGluZUxvZ2ljYWxPcmRlckNhY2hlSWZOZWVkZWQoY29uc3QgTGVhZkJveEl0ZXJhdG9yJiBib3gs
IExpbmVMb2dpY2FsT3JkZXJDYWNoZSYgY2FjaGUpCi17Ci0gICAgYXV0byBsaW5lQm94ID0gYm94
LT5saW5lQm94KCk7Ci0gICAgaWYgKCFjYWNoZSB8fCBjYWNoZS0+bGluZUJveCAhPSBsaW5lQm94
KQotICAgICAgICBjYWNoZSA9IG1ha2VMaW5lTG9naWNhbE9yZGVyQ2FjaGUobGluZUJveCk7Ci0K
LSAgICBpZiAoY2FjaGUtPmluZGV4IDwgY2FjaGUtPmJveGVzLnNpemUoKSAmJiBjYWNoZS0+Ym94
ZXNbY2FjaGUtPmluZGV4XSA9PSBib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhY2hlLT5p
bmRleCA9IGNhY2hlLT5ib3hlcy5maW5kKGJveCk7Ci0KLSAgICBBU1NFUlQoY2FjaGUtPmluZGV4
ICE9IG5vdEZvdW5kKTsKLX0KLQotTGVhZkJveEl0ZXJhdG9yIGZpcnN0TGVhZk9uTGluZUluTG9n
aWNhbE9yZGVyKGNvbnN0IExpbmVCb3hJdGVyYXRvciYgbGluZUJveCwgTGluZUxvZ2ljYWxPcmRl
ckNhY2hlJiBjYWNoZSkKLXsKLSAgICBjYWNoZSA9IG1ha2VMaW5lTG9naWNhbE9yZGVyQ2FjaGUo
bGluZUJveCk7Ci0KLSAgICBpZiAoY2FjaGUtPmJveGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLQotICAgIGNhY2hlLT5pbmRleCA9IDA7Ci0gICAgcmV0dXJuIGNhY2hlLT5ib3hl
cy5maXJzdCgpOwotfQotCi1MZWFmQm94SXRlcmF0b3IgbGFzdExlYWZPbkxpbmVJbkxvZ2ljYWxP
cmRlcihjb25zdCBMaW5lQm94SXRlcmF0b3ImIGxpbmVCb3gsIExpbmVMb2dpY2FsT3JkZXJDYWNo
ZSYgY2FjaGUpCi17Ci0gICAgY2FjaGUgPSBtYWtlTGluZUxvZ2ljYWxPcmRlckNhY2hlKGxpbmVC
b3gpOwotCi0gICAgaWYgKGNhY2hlLT5ib3hlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICBjYWNoZS0+aW5kZXggPSBjYWNoZS0+Ym94ZXMuc2l6ZSgpIC0gMTsKLSAgICBy
ZXR1cm4gY2FjaGUtPmJveGVzLmxhc3QoKTsKLX0KLQotTGVhZkJveEl0ZXJhdG9yIG5leHRMZWFm
T25MaW5lSW5Mb2dpY2FsT3JkZXIoY29uc3QgTGVhZkJveEl0ZXJhdG9yJiBib3gsIExpbmVMb2dp
Y2FsT3JkZXJDYWNoZSYgY2FjaGUpCi17Ci0gICAgdXBkYXRlTGluZUxvZ2ljYWxPcmRlckNhY2hl
SWZOZWVkZWQoYm94LCBjYWNoZSk7Ci0KLSAgICBjYWNoZS0+aW5kZXgrKzsKLQotICAgIGlmIChj
YWNoZS0+aW5kZXggPCBjYWNoZS0+Ym94ZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGUt
PmJveGVzW2NhY2hlLT5pbmRleF07Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1MZWFmQm94SXRl
cmF0b3IgcHJldmlvdXNMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIoY29uc3QgTGVhZkJveEl0ZXJh
dG9yJiBib3gsIExpbmVMb2dpY2FsT3JkZXJDYWNoZSYgY2FjaGUpCi17Ci0gICAgdXBkYXRlTGlu
ZUxvZ2ljYWxPcmRlckNhY2hlSWZOZWVkZWQoYm94LCBjYWNoZSk7Ci0KLSAgICBpZiAoIWNhY2hl
LT5pbmRleCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGNhY2hlLT5pbmRleC0tOwotCi0g
ICAgcmV0dXJuIGNhY2hlLT5ib3hlc1tjYWNoZS0+aW5kZXhdOwotfQotCi1MZWFmQm94SXRlcmF0
b3IgZmlyc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShjb25zdCBMaW5lQm94SXRl
cmF0b3ImIGxpbmVCb3gsIExpbmVMb2dpY2FsT3JkZXJDYWNoZSYgY2FjaGUpCi17Ci0gICAgYXV0
byBib3ggPSBmaXJzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcihsaW5lQm94LCBjYWNoZSk7Ci0g
ICAgd2hpbGUgKGJveCAmJiAhYm94LT5yZW5kZXJlcigpLm5vZGUoKSkKLSAgICAgICAgYm94ID0g
bmV4dExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcihib3gsIGNhY2hlKTsKLSAgICByZXR1cm4gYm94
OwotfQotCi1MZWFmQm94SXRlcmF0b3IgbGFzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcldpdGhO
b2RlKGNvbnN0IExpbmVCb3hJdGVyYXRvciYgbGluZUJveCwgTGluZUxvZ2ljYWxPcmRlckNhY2hl
JiBjYWNoZSkKLXsKLSAgICBhdXRvIGJveCA9IGxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIo
bGluZUJveCwgY2FjaGUpOwotICAgIHdoaWxlIChib3ggJiYgIWJveC0+cmVuZGVyZXIoKS5ub2Rl
KCkpCi0gICAgICAgIGJveCA9IHByZXZpb3VzTGVhZk9uTGluZUluTG9naWNhbE9yZGVyKGJveCwg
Y2FjaGUpOwotICAgIHJldHVybiBib3g7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvckxvZ2ljYWxPcmRlclRyYXZl
cnNhbC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9y
TG9naWNhbE9yZGVyVHJhdmVyc2FsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1
YWYwNDBiZDNmZjAzMmQzODE4MTNkNzY5NmU0NWE1ZWM0MTg3ZmEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0lubGluZUl0ZXJhdG9yTG9naWNhbE9yZGVyVHJhdmVyc2FsLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiSW5saW5lSXRlcmF0b3JMaW5lQm94LmgiCi0jaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JUZXh0
Qm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLW5hbWVzcGFjZSBJbmxpbmVJdGVyYXRvciB7Ci0KLXN0cnVjdCBUZXh0TG9naWNhbE9yZGVy
Q2FjaGVEYXRhIHsKLSAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Ci0KLSAgICBW
ZWN0b3I8VGV4dEJveEl0ZXJhdG9yPiBib3hlczsKLSAgICBzaXplX3QgaW5kZXggeyAwIH07Ci19
OwotdXNpbmcgVGV4dExvZ2ljYWxPcmRlckNhY2hlID0gc3RkOjp1bmlxdWVfcHRyPFRleHRMb2dp
Y2FsT3JkZXJDYWNoZURhdGE+OwotCi1zdGQ6OnBhaXI8VGV4dEJveEl0ZXJhdG9yLCBUZXh0TG9n
aWNhbE9yZGVyQ2FjaGU+IGZpcnN0VGV4dEJveEluTG9naWNhbE9yZGVyRm9yKGNvbnN0IFJlbmRl
clRleHQmKTsKLVRleHRCb3hJdGVyYXRvciBuZXh0VGV4dEJveEluTG9naWNhbE9yZGVyKGNvbnN0
IFRleHRCb3hJdGVyYXRvciYsIFRleHRMb2dpY2FsT3JkZXJDYWNoZSYpOwotCi1zdHJ1Y3QgTGlu
ZUxvZ2ljYWxPcmRlckNhY2hlRGF0YSB7Ci0gICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEOwotCi0gICAgTGluZUJveEl0ZXJhdG9yIGxpbmVCb3g7Ci0gICAgVmVjdG9yPExlYWZCb3hJ
dGVyYXRvcj4gYm94ZXM7Ci0gICAgc2l6ZV90IGluZGV4IHsgMCB9OwotfTsKLXVzaW5nIExpbmVM
b2dpY2FsT3JkZXJDYWNoZSA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5lTG9naWNhbE9yZGVyQ2FjaGVE
YXRhPjsKLQotTGVhZkJveEl0ZXJhdG9yIGZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyKGNv
bnN0IExpbmVCb3hJdGVyYXRvciYsIExpbmVMb2dpY2FsT3JkZXJDYWNoZSYpOwotTGVhZkJveEl0
ZXJhdG9yIGxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIoY29uc3QgTGluZUJveEl0ZXJhdG9y
JiwgTGluZUxvZ2ljYWxPcmRlckNhY2hlJik7Ci1MZWFmQm94SXRlcmF0b3IgbmV4dExlYWZPbkxp
bmVJbkxvZ2ljYWxPcmRlcihjb25zdCBMZWFmQm94SXRlcmF0b3ImLCBMaW5lTG9naWNhbE9yZGVy
Q2FjaGUmKTsKLUxlYWZCb3hJdGVyYXRvciBwcmV2aW91c0xlYWZPbkxpbmVJbkxvZ2ljYWxPcmRl
cihjb25zdCBMZWFmQm94SXRlcmF0b3ImLCBMaW5lTG9naWNhbE9yZGVyQ2FjaGUmKTsKLQotTGVh
ZkJveEl0ZXJhdG9yIGZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUoY29uc3Qg
TGluZUJveEl0ZXJhdG9yJiwgTGluZUxvZ2ljYWxPcmRlckNhY2hlJik7Ci1MZWFmQm94SXRlcmF0
b3IgbGFzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcldpdGhOb2RlKGNvbnN0IExpbmVCb3hJdGVy
YXRvciYsIExpbmVMb2dpY2FsT3JkZXJDYWNoZSYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXZl
cnNlRnVuY3Rpb24+Ci1WZWN0b3I8TGVhZkJveEl0ZXJhdG9yPiBsZWFmQm94ZXNJbkxvZ2ljYWxP
cmRlcihjb25zdCBMaW5lQm94SXRlcmF0b3ImIGxpbmVCb3gsIFJldmVyc2VGdW5jdGlvbiYmIHJl
dmVyc2VGdW5jdGlvbikKLXsKLSAgICBWZWN0b3I8TGVhZkJveEl0ZXJhdG9yPiBib3hlczsKLQot
ICAgIHVuc2lnbmVkIGNoYXIgbWluTGV2ZWwgPSAxMjg7Ci0gICAgdW5zaWduZWQgY2hhciBtYXhM
ZXZlbCA9IDA7Ci0KLSAgICBmb3IgKGF1dG8gYm94ID0gbGluZUJveC0+Zmlyc3RMZWFmQm94KCk7
IGJveDsgYm94ID0gYm94LnRyYXZlcnNlTmV4dE9uTGluZSgpKSB7Ci0gICAgICAgIG1pbkxldmVs
ID0gc3RkOjptaW4obWluTGV2ZWwsIGJveC0+YmlkaUxldmVsKCkpOwotICAgICAgICBtYXhMZXZl
bCA9IHN0ZDo6bWF4KG1heExldmVsLCBib3gtPmJpZGlMZXZlbCgpKTsKLSAgICAgICAgYm94ZXMu
YXBwZW5kKGJveCk7Ci0gICAgfQotCi0gICAgaWYgKGxpbmVCb3gtPmNvbnRhaW5pbmdCbG9jaygp
LnN0eWxlKCkucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsKQotICAgICAgICByZXR1cm4g
Ym94ZXM7Ci0KLSAgICAvLyBSZXZlcnNlIG9mIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFj
Y29yZGluZyB0byBCaWRpIHNwZWMpOgotICAgIC8vIEwyLiBGcm9tIHRoZSBoaWdoZXN0IGxldmVs
IGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsIG9uIGVhY2ggbGluZSwK
LSAgICAvLyByZXZlcnNlIGFueSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhh
dCBhcmUgYXQgdGhhdCBsZXZlbCBvciBoaWdoZXIuCi0KLSAgICAvLyBSZXZlcnNpbmcgdGhlIHJl
b3JkZXJpbmcgb2YgdGhlIGxpbmUgaXMgb25seSBkb25lIHVwIHRvIHRoZSBsb3dlc3Qgb2RkIGxl
dmVsLgotICAgIGlmICghKG1pbkxldmVsICUgMikpCi0gICAgICAgICsrbWluTGV2ZWw7Ci0KLSAg
ICBhdXRvIGVuZCA9IGJveGVzLmVuZCgpOwotICAgIGZvciAoOyBtaW5MZXZlbCA8PSBtYXhMZXZl
bDsgKyttaW5MZXZlbCkgewotICAgICAgICBhdXRvIGJveCA9IGJveGVzLmJlZ2luKCk7Ci0gICAg
ICAgIHdoaWxlIChib3ggPCBlbmQpIHsKLSAgICAgICAgICAgIHdoaWxlIChib3ggPCBlbmQgJiYg
KCpib3gpLT5iaWRpTGV2ZWwoKSA8IG1pbkxldmVsKQotICAgICAgICAgICAgICAgICsrYm94Owot
Ci0gICAgICAgICAgICBhdXRvIGZpcnN0ID0gYm94OwotICAgICAgICAgICAgd2hpbGUgKGJveCA8
IGVuZCAmJiAoKmJveCktPmJpZGlMZXZlbCgpID49IG1pbkxldmVsKQotICAgICAgICAgICAgICAg
ICsrYm94OwotCi0gICAgICAgICAgICBhdXRvIGxhc3QgPSBib3g7Ci0gICAgICAgICAgICByZXZl
cnNlRnVuY3Rpb24oZmlyc3QsIGxhc3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGJveGVzOwotfQotCi19Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vSW5saW5lSXRlcmF0b3JUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0ZGEyZGY4NmQyMGQyZjE4OTk5ZjFlMzRjNGNlODA3M2I4N2EwOTk5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9JbmxpbmVJdGVyYXRvclRleHRCb3guY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJbmxpbmVJdGVyYXRvclRleHRCb3guaCIKLQotI2luY2x1ZGUgIklu
bGluZUl0ZXJhdG9yTGluZUJveC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxh
eW91dC5oIgotI2luY2x1ZGUgIkxpbmVTZWxlY3Rpb24uaCIKLSNpbmNsdWRlICJSZW5kZXJDb21i
aW5lVGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSW5saW5lSXRlcmF0
b3IgewotCi1UZXh0Qm94SXRlcmF0b3IgVGV4dEJveDo6bmV4dFRleHRCb3goKSBjb25zdAotewot
ICAgIHJldHVybiBUZXh0Qm94SXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlTmV4dFRleHRCb3goKTsK
LX0KLQotTGF5b3V0UmVjdCBUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHJhbmdlU3Rh
cnQsIHVuc2lnbmVkIHJhbmdlRW5kKSBjb25zdAotewotICAgIGF1dG8gW2NsYW1wZWRTdGFydCwg
Y2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcChyYW5nZVN0YXJ0LCByYW5nZUVu
ZCk7Ci0KLSAgICBpZiAoY2xhbXBlZFN0YXJ0ID49IGNsYW1wZWRFbmQgJiYgIShyYW5nZVN0YXJ0
ID09IHJhbmdlRW5kICYmIHJhbmdlU3RhcnQgPj0gc3RhcnQoKSAmJiByYW5nZVN0YXJ0IDw9IGVu
ZCgpKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8gbGluZVNlbGVjdGlvblJlY3Qg
PSBMaW5lU2VsZWN0aW9uOjpsb2dpY2FsUmVjdCgqbGluZUJveCgpKTsKLSAgICBhdXRvIHNlbGVj
dGlvblJlY3QgPSBMYXlvdXRSZWN0IHsgbG9naWNhbExlZnQoKSwgbGluZVNlbGVjdGlvblJlY3Qu
eSgpLCBsb2dpY2FsV2lkdGgoKSwgbGluZVNlbGVjdGlvblJlY3QuaGVpZ2h0KCkgfTsKLQotICAg
IFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oKTsKLSAgICBpZiAoY2xhbXBlZFN0YXJ0
IHx8IGNsYW1wZWRFbmQgIT0gdGV4dFJ1bi5sZW5ndGgoKSkKLSAgICAgICAgZm9udENhc2NhZGUo
KS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBjbGFt
cGVkU3RhcnQsIGNsYW1wZWRFbmQpOwotCi0gICAgcmV0dXJuIHNuYXBwZWRTZWxlY3Rpb25SZWN0
KHNlbGVjdGlvblJlY3QsIGxvZ2ljYWxSaWdodCgpLCBsaW5lU2VsZWN0aW9uUmVjdC55KCksIGxp
bmVTZWxlY3Rpb25SZWN0LmhlaWdodCgpLCBpc0hvcml6b250YWwoKSk7Ci19Ci0KLXVuc2lnbmVk
IFRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIGlmICh4IC0gbG9naWNhbExlZnQoKSA+IGxvZ2ljYWxXaWR0aCgpKQotICAgICAgICBy
ZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbGVuZ3RoKCkgOiAwOwotICAgIGlmICh4
IC0gbG9naWNhbExlZnQoKSA8IDApCi0gICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyAwIDogbGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGZvbnRDYXNjYWRlKCkub2Zmc2V0Rm9y
UG9zaXRpb24oY3JlYXRlVGV4dFJ1bihDcmVhdGVUZXh0UnVuTW9kZTo6RWRpdGluZyksIHggLSBs
b2dpY2FsTGVmdCgpLCBpbmNsdWRlUGFydGlhbEdseXBocyk7Ci19Ci0KLWZsb2F0IFRleHRCb3g6
OnBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
b2Zmc2V0ID49IHN0YXJ0KCkpOwotICAgIEFTU0VSVChvZmZzZXQgPD0gZW5kKCkpOwotCi0gICAg
aWYgKGlzTGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwotCi0gICAg
YXV0byBbc3RhcnRPZmZzZXQsIGVuZE9mZnNldF0gPSBbJl0gewotICAgICAgICBpZiAoZGlyZWN0
aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6cGFp
ciB7IHNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKG9mZnNldCksIGxlbmd0aCgpIH07Ci0gICAgICAg
IHJldHVybiBzdGQ6OnBhaXIgeyAwdSwgc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zmc2V0KSB9
OwotICAgIH0oKTsKLQotICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QobG9naWNh
bExlZnQoKSwgMCwgMCwgMCk7Ci0gICAgCi0gICAgYXV0byB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1
bihDcmVhdGVUZXh0UnVuTW9kZTo6RWRpdGluZyk7Ci0gICAgZm9udENhc2NhZGUoKS5hZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KTsKLSAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5n
RGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpLCB0ZXh0UnVuLmx0cigpKS5tYXhYKCk7Ci19Ci0KLWJvb2wgVGV4dEJveDo6aXND
b21iaW5lZFRleHQoKSBjb25zdAotewotICAgIGF1dG8mIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVy
ZXIoKTsKLSAgICByZXR1cm4gaXM8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKSAmJiBkb3du
Y2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ocmVuZGVyZXIpLmlzQ29tYmluZWQoKTsKLX0KLQotY29u
c3QgRm9udENhc2NhZGUmIFRleHRCb3g6OmZvbnRDYXNjYWRlKCkgY29uc3QKLXsKLSAgICBpZiAo
aXNDb21iaW5lZFRleHQoKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckNvbWJpbmVU
ZXh0PihyZW5kZXJlcigpKS50ZXh0Q29tYmluZUZvbnQoKTsKLQotICAgIHJldHVybiBzdHlsZSgp
LmZvbnRDYXNjYWRlKCk7Ci19Ci0KLVRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKEJv
eDo6UGF0aFZhcmlhbnQmJiBwYXRoVmFyaWFudCkKLSAgICA6IExlYWZCb3hJdGVyYXRvcihXVEZN
b3ZlKHBhdGhWYXJpYW50KSkKLXsKLX0KLQotVGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0
b3IoY29uc3QgQm94JiBib3gpCi0gICAgOiBMZWFmQm94SXRlcmF0b3IoYm94KQotewotfQotCi1U
ZXh0Qm94SXRlcmF0b3ImIFRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0VGV4dEJveCgpCi17
Ci0gICAgV1RGOjpzd2l0Y2hPbihtX2JveC5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7
Ci0gICAgICAgIHBhdGgudHJhdmVyc2VOZXh0VGV4dEJveCgpOwotICAgIH0pOwotICAgIHJldHVy
biAqdGhpczsKLX0KLQotVGV4dEJveEl0ZXJhdG9yIGZpcnN0VGV4dEJveEZvcihjb25zdCBSZW5k
ZXJUZXh0JiB0ZXh0KQotewotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQot
ICAgIGlmIChhdXRvKiBsaW5lTGF5b3V0ID0gTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6
OmNvbnRhaW5pbmcodGV4dCkpCi0gICAgICAgIHJldHVybiBsaW5lTGF5b3V0LT50ZXh0Qm94ZXNG
b3IodGV4dCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB7IEJveExlZ2FjeVBhdGggeyB0ZXh0LmZp
cnN0VGV4dEJveCgpIH0gfTsKLX0KLQotVGV4dEJveEl0ZXJhdG9yIHRleHRCb3hGb3IoY29uc3Qg
TGVnYWN5SW5saW5lVGV4dEJveCogbGVnYWN5SW5saW5lVGV4dEJveCkKLXsKLSAgICByZXR1cm4g
eyBCb3hMZWdhY3lQYXRoIHsgbGVnYWN5SW5saW5lVGV4dEJveCB9IH07Ci19Ci0KLSNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLVRleHRCb3hJdGVyYXRvciB0ZXh0Qm94Rm9y
KGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiBjb250ZW50LCBjb25zdCBJ
bmxpbmVEaXNwbGF5OjpCb3gmIGJveCkKLXsKLSAgICByZXR1cm4gdGV4dEJveEZvcihjb250ZW50
LCBjb250ZW50LmluZGV4Rm9yQm94KGJveCkpOwotfQotCi1UZXh0Qm94SXRlcmF0b3IgdGV4dEJv
eEZvcihjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYgY29udGVudCwgc2l6
ZV90IGJveEluZGV4KQotewotICAgIEFTU0VSVChjb250ZW50LmJveGVzW2JveEluZGV4XS50ZXh0
KCkpOwotICAgIHJldHVybiB7IEJveE1vZGVyblBhdGggeyBjb250ZW50LCBib3hJbmRleCB9IH07
Ci19Ci0jZW5kaWYKLQotVGV4dEJveFJhbmdlIHRleHRCb3hlc0Zvcihjb25zdCBSZW5kZXJUZXh0
JiB0ZXh0KQotewotICAgIHJldHVybiB7IGZpcnN0VGV4dEJveEZvcih0ZXh0KSB9OwotfQotCi19
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5saW5l
SXRlcmF0b3JUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vSW5s
aW5lSXRlcmF0b3JUZXh0Qm94LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjc2
ZmI2MDExNDNlMjM3YmRhYjFiMGZjZjEwOTk2YTczMTljMGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0lubGluZUl0ZXJhdG9yVGV4dEJveC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3JCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotbmFtZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKLQotY2xhc3MgVGV4dEJveCA6IHB1Ymxp
YyBCb3ggewotcHVibGljOgotICAgIFRleHRCb3goUGF0aFZhcmlhbnQmJik7Ci0KLSAgICBib29s
IGhhc0h5cGhlbigpIGNvbnN0OwotICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0OwotCi0gICAg
dW5zaWduZWQgc3RhcnQoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBlbmQoKSBjb25zdDsKLSAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIG9mZnNldEZvclBvc2l0aW9u
KGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBjb25zdDsKLSAgICBm
bG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCkgY29uc3Q7Ci0KLSAgICBUZXh0Qm94U2Vs
ZWN0YWJsZVJhbmdlIHNlbGVjdGFibGVSYW5nZSgpIGNvbnN0OwotICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdDsKLQotICAgIGJv
b2wgaXNDb21iaW5lZFRleHQoKSBjb25zdDsKLSAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udENh
c2NhZGUoKSBjb25zdDsKLQotICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bihDcmVhdGVUZXh0UnVu
TW9kZSA9IENyZWF0ZVRleHRSdW5Nb2RlOjpQYWludGluZykgY29uc3Q7Ci0KLSAgICBjb25zdCBS
ZW5kZXJUZXh0JiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+
KEJveDo6cmVuZGVyZXIoKSk7IH0KLQotICAgIC8vIEZJWE1FOiBSZW1vdmUuIEZvciBpbnRlcm1l
ZGlhdGUgcG9ydGluZyBzdGVwcyBvbmx5LgotICAgIGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gq
IGxlZ2FjeUlubGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PExlZ2FjeUlubGluZVRl
eHRCb3g+KEJveDo6bGVnYWN5SW5saW5lQm94KCkpOyB9Ci0KLSAgICAvLyBUaGlzIHJldHVybnMg
dGhlIG5leHQgdGV4dCBib3ggZ2VuZXJhdGVkIGZvciB0aGUgc2FtZSBSZW5kZXJUZXh0L0xheW91
dDo6SW5saW5lVGV4dEJveC4KLSAgICBUZXh0Qm94SXRlcmF0b3IgbmV4dFRleHRCb3goKSBjb25z
dDsKLX07Ci0KLWNsYXNzIFRleHRCb3hJdGVyYXRvciA6IHB1YmxpYyBMZWFmQm94SXRlcmF0b3Ig
ewotcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpIHsgfQotICAgIFRleHRCb3hJdGVyYXRv
cihCb3g6OlBhdGhWYXJpYW50JiYpOwotICAgIFRleHRCb3hJdGVyYXRvcihjb25zdCBCb3gmKTsK
LQotICAgIFRleHRCb3hJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIHRyYXZlcnNlTmV4
dFRleHRCb3goKTsgfQotCi0gICAgY29uc3QgVGV4dEJveCYgb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KLSAgICBjb25zdCBUZXh0Qm94KiBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gJmdldCgpOyB9Ci0KLSAgICAvLyBUaGlzIHRyYXZlcnNlcyB0byB0aGUgbmV4dCB0ZXh0
IGJveCBnZW5lcmF0ZWQgZm9yIHRoZSBzYW1lIFJlbmRlclRleHQvTGF5b3V0OjpJbmxpbmVUZXh0
Qm94LgotICAgIFRleHRCb3hJdGVyYXRvciYgdHJhdmVyc2VOZXh0VGV4dEJveCgpOwotCi1wcml2
YXRlOgotICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmUoKSA9IGRlbGV0ZTsKLSAg
ICBCb3hJdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91c09uTGluZSgpID0gZGVsZXRlOwotICAgIEJv
eEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpID0gZGVsZXRl
OwotICAgIEJveEl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJl
YWsoKSA9IGRlbGV0ZTsKLQotICAgIGNvbnN0IFRleHRCb3gmIGdldCgpIGNvbnN0IHsgcmV0dXJu
IGRvd25jYXN0PFRleHRCb3g+KG1fYm94KTsgfQotfTsKLQotY2xhc3MgVGV4dEJveFJhbmdlIHsK
LXB1YmxpYzoKLSAgICBUZXh0Qm94UmFuZ2UoVGV4dEJveEl0ZXJhdG9yIGJlZ2luKQotICAgICAg
ICA6IG1fYmVnaW4oYmVnaW4pCi0gICAgewotICAgIH0KLQotICAgIFRleHRCb3hJdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KLSAgICBFbmRJdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiB7IH07IH0KLQotcHJpdmF0ZToKLSAgICBUZXh0Qm94SXRlcmF0b3IgbV9i
ZWdpbjsKLX07Ci0KLVRleHRCb3hJdGVyYXRvciBmaXJzdFRleHRCb3hGb3IoY29uc3QgUmVuZGVy
VGV4dCYpOwotVGV4dEJveEl0ZXJhdG9yIHRleHRCb3hGb3IoY29uc3QgTGVnYWN5SW5saW5lVGV4
dEJveCopOwotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotVGV4dEJveEl0
ZXJhdG9yIHRleHRCb3hGb3IoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQm
LCBjb25zdCBJbmxpbmVEaXNwbGF5OjpCb3gmKTsKLVRleHRCb3hJdGVyYXRvciB0ZXh0Qm94Rm9y
KGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50Jiwgc2l6ZV90IGJveEluZGV4
KTsKLSNlbmRpZgotVGV4dEJveFJhbmdlIHRleHRCb3hlc0Zvcihjb25zdCBSZW5kZXJUZXh0Jik7
Ci0KLWlubGluZSBib29sIFRleHRCb3g6Omhhc0h5cGhlbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICBy
ZXR1cm4gcGF0aC5oYXNIeXBoZW4oKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIFRleHRCb3g6OlRl
eHRCb3goUGF0aFZhcmlhbnQmJiBwYXRoKQotICAgIDogQm94KFdURk1vdmUocGF0aCkpCi17Ci19
Ci0KLWlubGluZSBTdHJpbmdWaWV3IFRleHRCb3g6OnRleHQoKSBjb25zdAotewotICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAg
cmV0dXJuIHBhdGgudGV4dCgpOwotICAgIH0pOwotfQotCi1pbmxpbmUgdW5zaWduZWQgVGV4dEJv
eDo6c3RhcnQoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlh
bnQsIFtdKGF1dG8mIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguc3RhcnQoKTsKLSAgICB9
KTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIFRleHRCb3g6OmVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAg
ICByZXR1cm4gcGF0aC5lbmQoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIFRleHRC
b3g6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFy
aWFudCwgW10oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5sZW5ndGgoKTsKLSAg
ICB9KTsKLX0KLQotaW5saW5lIFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UgVGV4dEJveDo6c2VsZWN0
YWJsZVJhbmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJp
YW50LCBbJl0oYXV0byYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5zZWxlY3RhYmxlUmFu
Z2UoKTsKLSAgICB9KTsKLX0KLQotaW5saW5lIFRleHRSdW4gVGV4dEJveDo6Y3JlYXRlVGV4dFJ1
bihDcmVhdGVUZXh0UnVuTW9kZSBtb2RlKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fcGF0aFZhcmlhbnQsIFsmXShhdXRvJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRo
LmNyZWF0ZVRleHRSdW4obW9kZSk7Ci0gICAgfSk7Ci19Ci0KLX0KLX0KLQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveCkKLXN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94JiBib3gpIHsg
cmV0dXJuIGJveC5pc1RleHQoKTsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpUZXh0
Qm94SXRlcmF0b3IpCi1zdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6SW5saW5lSXRl
cmF0b3I6OkJveEl0ZXJhdG9yJiBib3gpIHsgcmV0dXJuICFib3ggfHwgYm94LT5pc1RleHQoKTsg
fQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklu
bGluZUNvbnRlbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDQzMjU2OWVi
NDQ4NmFmNjExN2Y2YjQxOTIzN2ZiN2E4ZTU5OGI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjAy
ICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0qIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0qIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0qIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0q
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uSW5saW5lQ29u
dGVudC5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNs
dWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5oIgotI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRl
ICJUZXh0UGFpbnRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0
SW50ZWdyYXRpb24gewotCi1JbmxpbmVDb250ZW50OjpJbmxpbmVDb250ZW50KGNvbnN0IExpbmVM
YXlvdXQmIGxpbmVMYXlvdXQpCi0gICAgOiBtX2xpbmVMYXlvdXQobGluZUxheW91dCkKLXsKLX0K
LQotYm9vbCBJbmxpbmVDb250ZW50OjpoYXNDb250ZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
Ym94ZXMuaXNFbXB0eSgpIHx8IGJveGVzWzBdLmlzUm9vdElubGluZUJveCgpKTsKLSAgICByZXR1
cm4gYm94ZXMuc2l6ZSgpID4gMTsKLX0KLQotSXRlcmF0b3JSYW5nZTxjb25zdCBJbmxpbmVEaXNw
bGF5OjpCb3gqPiBJbmxpbmVDb250ZW50Ojpib3hlc0ZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYg
cmVjdCkgY29uc3QKLXsKLSAgICBpZiAoYm94ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
eyBudWxscHRyLCBudWxscHRyIH07Ci0KLSAgICBpZiAobGluZXMuZmlyc3QoKS5pbmtPdmVyZmxv
dygpLm1heFkoKSA+IHJlY3QueSgpICYmIGxpbmVzLmxhc3QoKS5pbmtPdmVyZmxvdygpLnkoKSA8
IHJlY3QubWF4WSgpKQotICAgICAgICByZXR1cm4geyAmYm94ZXMuZmlyc3QoKSwgJmJveGVzLmxh
c3QoKSArIDEgfTsKLQotICAgIC8vIFRoZSBvcHRpbWl6YXRpb24gYmVsb3cgcmVsaWVzIG9uIGxp
bmUgcGFpbnQgYm91bmRzIG5vdCBleGVlZGluZyB0aG9zZSBvZiB0aGUgbmVpZ2hib3JpbmcgbGlu
ZXMKLSAgICBpZiAoaGFzTXVsdGlsaW5lUGFpbnRPdmVybGFwKQotICAgICAgICByZXR1cm4geyAm
Ym94ZXMuZmlyc3QoKSwgJmJveGVzLmxhc3QoKSArIDEgfTsKLQotICAgIGF1dG8gaGVpZ2h0ID0g
bGluZXMubGFzdCgpLmxpbmVCb3hCb3R0b20oKSAtIGxpbmVzLmZpcnN0KCkubGluZUJveFRvcCgp
OwotICAgIGF1dG8gYXZlcmFnZUxpbmVIZWlnaHQgPSBoZWlnaHQgLyBsaW5lcy5zaXplKCk7Ci0K
LSAgICBhdXRvIGFwcHJveGltYXRlTGluZSA9IFsmXShMYXlvdXRVbml0IHkpIHsKLSAgICAgICAg
eSA9IHN0ZDo6bWF4KHksIDBfbHUpOwotICAgICAgICByZXR1cm4gc3RkOjptaW4oc3RhdGljX2Nh
c3Q8c2l6ZV90Pih5IC8gYXZlcmFnZUxpbmVIZWlnaHQpLCBsaW5lcy5zaXplKCkgLSAxKTsKLSAg
ICB9OwotCi0gICAgYXV0byBzdGFydExpbmUgPSBhcHByb3hpbWF0ZUxpbmUocmVjdC55KCkpOwot
ICAgIGZvciAoOyBzdGFydExpbmU7IC0tc3RhcnRMaW5lKSB7Ci0gICAgICAgIGlmIChsaW5lc1tz
dGFydExpbmUgLSAxXS5pbmtPdmVyZmxvdygpLm1heFkoKSA8IHJlY3QueSgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgYXV0byBlbmRMaW5lID0gYXBwcm94aW1hdGVMaW5lKHJl
Y3QubWF4WSgpKTsKLSAgICBmb3IgKDsgZW5kTGluZSA8IGxpbmVzLnNpemUoKSAtIDE7ICsrZW5k
TGluZSkgewotICAgICAgICBpZiAobGluZXNbZW5kTGluZSArIDFdLmlua092ZXJmbG93KCkueSgp
ID4gcmVjdC5tYXhZKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBhdXRvIGZp
cnN0Qm94ID0gbGluZXNbc3RhcnRMaW5lXS5maXJzdEJveEluZGV4KCk7Ci0gICAgYXV0byBsYXN0
Qm94ID0gbGluZXNbZW5kTGluZV0uZmlyc3RCb3hJbmRleCgpICsgbGluZXNbZW5kTGluZV0uYm94
Q291bnQoKSAtIDE7Ci0KLSAgICByZXR1cm4geyAmYm94ZXNbZmlyc3RCb3hdLCAmYm94ZXNbbGFz
dEJveF0gKyAxIH07Ci19Ci0KLUlubGluZUNvbnRlbnQ6On5JbmxpbmVDb250ZW50KCkKLXsKLSAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3Jt
YXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
Ym94IDogYm94ZXMpCi0gICAgICAgICAgICBUZXh0UGFpbnRlcjo6cmVtb3ZlR2x5cGhEaXNwbGF5
TGlzdChib3gpOwotICAgIH0KLX0KLQotY29uc3QgUmVuZGVyT2JqZWN0JiBJbmxpbmVDb250ZW50
OjpyZW5kZXJlckZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkJveCYgbGF5b3V0Qm94KSBjb25z
dAotewotICAgIHJldHVybiBsaW5lTGF5b3V0KCkucmVuZGVyZXJGb3JMYXlvdXRCb3gobGF5b3V0
Qm94KTsKLX0KLQotY29uc3QgUmVuZGVyQmxvY2tGbG93JiBJbmxpbmVDb250ZW50Ojpjb250YWlu
aW5nQmxvY2soKSBjb25zdAotewotICAgIHJldHVybiBsaW5lTGF5b3V0KCkuZmxvdygpOwotfQot
Ci1zaXplX3QgSW5saW5lQ29udGVudDo6aW5kZXhGb3JCb3goY29uc3QgSW5saW5lRGlzcGxheTo6
Qm94JiBib3gpIGNvbnN0Ci17Ci0gICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4o
JmJveCAtIGJveGVzLmJlZ2luKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgYm94ZXMu
c2l6ZSgpKTsKLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLWNvbnN0IElubGluZURpc3BsYXk6OkJv
eCogSW5saW5lQ29udGVudDo6Zmlyc3RCb3hGb3JMYXlvdXRCb3goY29uc3QgTGF5b3V0OjpCb3gm
IGxheW91dEJveCkgY29uc3QKLXsKLSAgICBhdXRvIGluZGV4ID0gZmlyc3RCb3hJbmRleEZvckxh
eW91dEJveChsYXlvdXRCb3gpOwotICAgIHJldHVybiBpbmRleCA/ICZib3hlc1sqaW5kZXhdIDog
bnVsbHB0cjsKLX0KLQotc3RkOjpvcHRpb25hbDxzaXplX3Q+IElubGluZUNvbnRlbnQ6OmZpcnN0
Qm94SW5kZXhGb3JMYXlvdXRCb3goY29uc3QgTGF5b3V0OjpCb3gmIGxheW91dEJveCkgY29uc3QK
LXsKLSAgICBjb25zdGV4cHIgYXV0byBjYWNoZVRocmVzaG9sZCA9IDE2OwotCi0gICAgaWYgKGJv
eGVzLnNpemUoKSA8IGNhY2hlVGhyZXNob2xkKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYm94ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8mIGJveCA9IGJveGVz
W2ldOwotICAgICAgICAgICAgaWYgKCZib3gubGF5b3V0Qm94KCkgPT0gJmxheW91dEJveCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4geyB9Owot
ICAgIH0KLSAgICAKLSAgICBpZiAoIW1fZmlyc3RCb3hJbmRleENhY2hlKSB7Ci0gICAgICAgIG1f
Zmlyc3RCb3hJbmRleENhY2hlID0gbWFrZVVuaXF1ZTxGaXJzdEJveEluZGV4Q2FjaGU+KCk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYm94ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGJveCA9IGJveGVzW2ldOwotICAgICAgICAgICAgaWYgKGJveC5pc1Jvb3RJ
bmxpbmVCb3goKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1fZmly
c3RCb3hJbmRleENhY2hlLT5hZGQoYm94LmxheW91dEJveCgpLCBpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGF1dG8gaXQgPSBtX2ZpcnN0Qm94SW5kZXhDYWNoZS0+ZmluZChsYXlvdXRCb3gp
OwotICAgIGlmIChpdCA9PSBtX2ZpcnN0Qm94SW5kZXhDYWNoZS0+ZW5kKCkpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0KLSAgICByZXR1cm4gaXQtPnZhbHVlOwotfQotCi1jb25zdCBWZWN0b3I8c2l6
ZV90PiYgSW5saW5lQ29udGVudDo6bm9uUm9vdElubGluZUJveEluZGV4ZXNGb3JMYXlvdXRCb3go
Y29uc3QgTGF5b3V0OjpCb3gmIGxheW91dEJveCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGF5b3V0
Qm94LmlzQ29udGFpbmVyQm94KCkpOwotCi0gICAgaWYgKCFtX2lubGluZUJveEluZGV4Q2FjaGUp
IHsKLSAgICAgICAgbV9pbmxpbmVCb3hJbmRleENhY2hlID0gbWFrZVVuaXF1ZTxJbmxpbmVCb3hJ
bmRleENhY2hlPigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJveGVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBib3ggPSBib3hlc1tpXTsKLSAgICAgICAgICAg
IGlmICghYm94LmlzTm9uUm9vdElubGluZUJveCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgbV9pbmxpbmVCb3hJbmRleENhY2hlLT5lbnN1cmUoYm94LmxheW91dEJv
eCgpLCBbJl0gewotICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8c2l6ZV90PiB7IH07Ci0g
ICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGkpOwotICAgICAgICB9Ci0gICAg
ICAgIGZvciAoYXV0byBlbnRyeSA6ICptX2lubGluZUJveEluZGV4Q2FjaGUpCi0gICAgICAgICAg
ICBlbnRyeS52YWx1ZS5zaHJpbmtUb0ZpdCgpOwotICAgIH0KLQotICAgIGF1dG8gaXQgPSBtX2lu
bGluZUJveEluZGV4Q2FjaGUtPmZpbmQobGF5b3V0Qm94KTsKLSAgICBpZiAoaXQgPT0gbV9pbmxp
bmVCb3hJbmRleENhY2hlLT5lbmQoKSkgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
VmVjdG9yPHNpemVfdD4+IGVtcHR5VmVjdG9yOwotICAgICAgICByZXR1cm4gZW1wdHlWZWN0b3Iu
Z2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGl0LT52YWx1ZTsKLX0KLQotdm9pZCBJbmxpbmVD
b250ZW50OjpjbGVhckFuZERldGFjaCgpCi17Ci0gICAgZm9yIChhdXRvJiBib3ggOiBib3hlcykK
LSAgICAgICAgVGV4dFBhaW50ZXI6OnJlbW92ZUdseXBoRGlzcGxheUxpc3QoYm94KTsKLQotICAg
IHJlbGVhc2VDYWNoZXMoKTsKLSAgICBib3hlcy5jbGVhcigpOwotICAgIGxpbmVzLmNsZWFyKCk7
Ci0gICAgbV9saW5lTGF5b3V0ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBJbmxpbmVDb250ZW50Ojpy
ZWxlYXNlQ2FjaGVzKCkKLXsKLSAgICBtX2ZpcnN0Qm94SW5kZXhDYWNoZSA9IHsgfTsKLSAgICBt
X2lubGluZUJveEluZGV4Q2FjaGUgPSB7IH07Ci19Ci0KLXZvaWQgSW5saW5lQ29udGVudDo6c2hy
aW5rVG9GaXQoKQotewotICAgIGJveGVzLnNocmlua1RvRml0KCk7Ci0gICAgbGluZXMuc2hyaW5r
VG9GaXQoKTsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNv
bnRlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlkZGI5N2U2OWYxOWI4ZGE2
YjZiMjhkNTdhMGYxNDRhNzVmNWY0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25JbmxpbmVDb250ZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCi0KLSNpbmNsdWRlICJJbmxpbmVEaXNwbGF5Qm94LmgiCi0jaW5jbHVkZSAiTGF5
b3V0SW50ZWdyYXRpb25MaW5lLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvSXRlcmF0b3JSYW5nZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJCbG9ja0Zsb3c7Ci1jbGFzcyBSZW5kZXJPYmpl
Y3Q7Ci0KLW5hbWVzcGFjZSBMYXlvdXQgewotY2xhc3MgQm94OwotfQotCi1uYW1lc3BhY2UgSW5s
aW5lRGlzcGxheSB7Ci1zdHJ1Y3QgQm94OwotfSAKLQotbmFtZXNwYWNlIExheW91dEludGVncmF0
aW9uIHsKLQotY2xhc3MgTGluZUxheW91dDsKLQotc3RydWN0IElubGluZUNvbnRlbnQgOiBwdWJs
aWMgUmVmQ291bnRlZDxJbmxpbmVDb250ZW50PiB7Ci0gICAgc3RhdGljIFJlZjxJbmxpbmVDb250
ZW50PiBjcmVhdGUoY29uc3QgTGluZUxheW91dCYgbGluZUxheW91dCkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJbmxpbmVDb250ZW50KGxpbmVMYXlvdXQpKTsgfQotICAgIH5JbmxpbmVDb250ZW50
KCk7Ci0KLSAgICB1c2luZyBCb3hlcyA9IFZlY3RvcjxJbmxpbmVEaXNwbGF5OjpCb3g+OwotICAg
IHVzaW5nIExpbmVzID0gVmVjdG9yPExpbmU+OwotCi0gICAgQm94ZXMgYm94ZXM7Ci0gICAgTGlu
ZXMgbGluZXM7Ci0KLSAgICBmbG9hdCBjbGVhckdhcEFmdGVyTGFzdExpbmUgeyAwIH07Ci0gICAg
Ym9vbCBoYXNNdWx0aWxpbmVQYWludE92ZXJsYXAgeyBmYWxzZSB9OwotCi0gICAgYm9vbCBoYXND
b250ZW50KCkgY29uc3Q7Ci0KLSAgICBib29sIGhhc1Zpc3VhbE92ZXJmbG93KCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNWaXN1YWxPdmVyZmxvdzsgfQotICAgIHZvaWQgc2V0SGFzVmlzdWFsT3ZlcmZs
b3coKSB7IG1faGFzVmlzdWFsT3ZlcmZsb3cgPSB0cnVlOyB9Ci0gICAgCi0gICAgY29uc3QgTGlu
ZSYgbGluZUZvckJveChjb25zdCBJbmxpbmVEaXNwbGF5OjpCb3gmIGJveCkgY29uc3QgeyByZXR1
cm4gbGluZXNbYm94LmxpbmVJbmRleCgpXTsgfQotCi0gICAgSXRlcmF0b3JSYW5nZTxjb25zdCBJ
bmxpbmVEaXNwbGF5OjpCb3gqPiBib3hlc0ZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0
OwotCi0gICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotCi0gICAgY29uc3QgTGluZUxheW91dCYgbGlu
ZUxheW91dCgpIGNvbnN0IHsgcmV0dXJuICptX2xpbmVMYXlvdXQ7IH0KLSAgICBjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyRm9yTGF5b3V0Qm94KGNvbnN0IExheW91dDo6Qm94JikgY29uc3Q7
Ci0gICAgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBjb250YWluaW5nQmxvY2soKSBjb25zdDsKLQot
ICAgIHNpemVfdCBpbmRleEZvckJveChjb25zdCBJbmxpbmVEaXNwbGF5OjpCb3gmKSBjb25zdDsK
LQotICAgIGNvbnN0IElubGluZURpc3BsYXk6OkJveCogZmlyc3RCb3hGb3JMYXlvdXRCb3goY29u
c3QgTGF5b3V0OjpCb3gmKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4g
dm9pZCB0cmF2ZXJzZU5vblJvb3RJbmxpbmVCb3hlcyhjb25zdCBMYXlvdXQ6OkJveCYsIEZ1bmN0
aW9uJiYpOwotCi0gICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGZpcnN0Qm94SW5kZXhGb3JMYXlv
dXRCb3goY29uc3QgTGF5b3V0OjpCb3gmKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8c2l6ZV90
PiYgbm9uUm9vdElubGluZUJveEluZGV4ZXNGb3JMYXlvdXRCb3goY29uc3QgTGF5b3V0OjpCb3gm
KSBjb25zdDsKLQotICAgIHZvaWQgY2xlYXJBbmREZXRhY2goKTsKLSAgICB2b2lkIHJlbGVhc2VD
YWNoZXMoKTsKLQotcHJpdmF0ZToKLSAgICBJbmxpbmVDb250ZW50KGNvbnN0IExpbmVMYXlvdXQm
KTsKLQotICAgIENoZWNrZWRQdHI8Y29uc3QgTGluZUxheW91dD4gbV9saW5lTGF5b3V0OwotCi0g
ICAgdXNpbmcgRmlyc3RCb3hJbmRleENhY2hlID0gSGFzaE1hcDxDaGVja2VkUmVmPGNvbnN0IExh
eW91dDo6Qm94Piwgc2l6ZV90PjsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxGaXJzdEJv
eEluZGV4Q2FjaGU+IG1fZmlyc3RCb3hJbmRleENhY2hlOwotCi0gICAgdXNpbmcgSW5saW5lQm94
SW5kZXhDYWNoZSA9IEhhc2hNYXA8Q2hlY2tlZFJlZjxjb25zdCBMYXlvdXQ6OkJveD4sIFZlY3Rv
cjxzaXplX3Q+PjsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVCb3hJbmRleENh
Y2hlPiBtX2lubGluZUJveEluZGV4Q2FjaGU7Ci0gICAgYm9vbCBtX2hhc1Zpc3VhbE92ZXJmbG93
IHsgZmFsc2UgfTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lkIElubGlu
ZUNvbnRlbnQ6OnRyYXZlcnNlTm9uUm9vdElubGluZUJveGVzKGNvbnN0IExheW91dDo6Qm94JiBs
YXlvdXRCb3gsIEZ1bmN0aW9uJiYgZnVuY3Rpb24pCi17Ci0gICAgZm9yIChhdXRvIGluZGV4IDog
bm9uUm9vdElubGluZUJveEluZGV4ZXNGb3JMYXlvdXRCb3gobGF5b3V0Qm94KSkKLSAgICAgICAg
ZnVuY3Rpb24oYm94ZXNbaW5kZXhdKTsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGlu
ZUNvbnRlbnRCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzM4YjRhOGY0NDQwY2M3NWYyYjNlN2NiYWEwZDZjZjlmYWYzYTI2YS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVp
bGRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5oIgotCi0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJJbmxpbmVEaXNwbGF5
Qm94LmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiTGF5
b3V0Qm94R2VvbWV0cnkuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkJveFRyZWUuaCIK
LSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuaCIKLSNpbmNsdWRlICJM
YXlvdXRSZXBsYWNlZEJveC5oIgotI2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCi0jaW5jbHVkZSAi
UmVuZGVyQmxvY2tGbG93LmgiCi0jaW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7Ci0KLWlubGluZSBJ
bmxpbmVEaXNwbGF5OjpMaW5lOjpFbmNsb3NpbmdUb3BBbmRCb3R0b20gb3BlcmF0b3IrKGNvbnN0
IElubGluZURpc3BsYXk6OkxpbmU6OkVuY2xvc2luZ1RvcEFuZEJvdHRvbSBlbmNsb3NpbmdUb3BB
bmRCb3R0b20sIGZsb2F0IG9mZnNldCkKLXsKLSAgICByZXR1cm4geyBlbmNsb3NpbmdUb3BBbmRC
b3R0b20udG9wICsgb2Zmc2V0LCBlbmNsb3NpbmdUb3BBbmRCb3R0b20uYm90dG9tICsgb2Zmc2V0
IH07Ci19Ci0KLWlubGluZSBzdGF0aWMgZmxvYXQgbGluZU92ZXJmbG93TG9naWNhbFdpZHRoKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgTGF5b3V0OjpJbmxpbmVMYXlvdXRVbml0IGxpbmVD
b250ZW50TG9naWNhbFdpZHRoKQotewotICAgIC8vIEZJWE1FOiBJdCdzIHRoZSBjb3B5IG9mIHRo
ZSBsZXRzLWFkanVzdC1vdmVyZmxvdy1mb3ItdGhlLWNhcmV0IGJlaGF2aW9yIGZyb20gTGVnYWN5
TGluZUxheW91dDo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4uCi0gICAgYXV0byBlbmRQ
YWRkaW5nID0gZmxvdy5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSA/IGZsb3cucGFkZGluZ0VuZCgp
IDogMF9sdTsKLSAgICBpZiAoIWVuZFBhZGRpbmcpCi0gICAgICAgIGVuZFBhZGRpbmcgPSBmbG93
LmVuZFBhZGRpbmdXaWR0aEZvckNhcmV0KCk7Ci0gICAgaWYgKGZsb3cuaGFzTm9uVmlzaWJsZU92
ZXJmbG93KCkgJiYgIWVuZFBhZGRpbmcgJiYgZmxvdy5lbGVtZW50KCkgJiYgZmxvdy5lbGVtZW50
KCktPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICBlbmRQYWRkaW5nID0gMTsKLSAg
ICByZXR1cm4gbGluZUNvbnRlbnRMb2dpY2FsV2lkdGggKyBlbmRQYWRkaW5nOwotfQotCi1Jbmxp
bmVDb250ZW50QnVpbGRlcjo6SW5saW5lQ29udGVudEJ1aWxkZXIoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBibG9ja0Zsb3csIEJveFRyZWUmIGJveFRyZWUpCi0gICAgOiBtX2Jsb2NrRmxvdyhibG9j
a0Zsb3cpCi0gICAgLCBtX2JveFRyZWUoYm94VHJlZSkKLXsKLX0KLQotdm9pZCBJbmxpbmVDb250
ZW50QnVpbGRlcjo6YnVpbGQoTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGlubGluZUZv
cm1hdHRpbmdTdGF0ZSwgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCkgY29uc3QKLXsKLSAg
ICAvLyBGSVhNRTogVGhpcyBtaWdodCBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoIHdpdGggcGFy
dGlhbCBsYXlvdXQgd2hlcmUgdGhlIGxheW91dCBjb2RlIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhl
IGJveGVzLgotICAgIGlubGluZUNvbnRlbnQuYm94ZXMgPSBXVEZNb3ZlKGlubGluZUZvcm1hdHRp
bmdTdGF0ZS5ib3hlcygpKTsKLQotICAgIGF1dG8gdXBkYXRlSWZUZXh0UmVuZGVyZXJzTmVlZFZp
c3VhbFJlb3JkZXJpbmcgPSBbJl0gewotICAgICAgICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgdG8g
aGF2ZSBhIGdsb2JhbCwgImlzIHRoaXMgYSBiaWRpIHBhcmFncmFwaCIgZmxhZyB0byBhdm9pZCB0
aGlzIGxvb3AgZm9yIG5vbi1ydGwsIG5vbi1iaWRpIGNvbnRlbnQuIAotICAgICAgICBmb3IgKGF1
dG8mIGRpc3BsYXlCb3ggOiBpbmxpbmVDb250ZW50LmJveGVzKSB7Ci0gICAgICAgICAgICBhdXRv
JiBsYXlvdXRCb3ggPSBkaXNwbGF5Qm94LmxheW91dEJveCgpOwotICAgICAgICAgICAgaWYgKCFp
czxMYXlvdXQ6OklubGluZVRleHRCb3g+KGxheW91dEJveCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheUJveC5iaWRpTGV2ZWwoKSAhPSBVQklESV9E
RUZBVUxUX0xUUikgCi0gICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4obV9ib3hU
cmVlLnJlbmRlcmVyRm9yTGF5b3V0Qm94KGxheW91dEJveCkpLnNldE5lZWRzVmlzdWFsUmVvcmRl
cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICB1cGRhdGVJZlRleHRSZW5kZXJlcnNOZWVk
VmlzdWFsUmVvcmRlcmluZygpOwotICAgIGNyZWF0ZURpc3BsYXlMaW5lcyhpbmxpbmVGb3JtYXR0
aW5nU3RhdGUsIGlubGluZUNvbnRlbnQpOwotfQotCi12b2lkIElubGluZUNvbnRlbnRCdWlsZGVy
OjpjcmVhdGVEaXNwbGF5TGluZXMoTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGlubGlu
ZUZvcm1hdHRpbmdTdGF0ZSwgSW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCkgY29uc3QKLXsK
LSAgICBhdXRvJiBsaW5lcyA9IGlubGluZUZvcm1hdHRpbmdTdGF0ZS5saW5lcygpOwotICAgIGF1
dG8mIGJveGVzID0gaW5saW5lQ29udGVudC5ib3hlczsKLSAgICBzaXplX3QgYm94SW5kZXggPSAw
OwotICAgIGlubGluZUNvbnRlbnQubGluZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsaW5lcy5z
aXplKCkpOwotICAgIGZvciAoc2l6ZV90IGxpbmVJbmRleCA9IDA7IGxpbmVJbmRleCA8IGxpbmVz
LnNpemUoKTsgKytsaW5lSW5kZXgpIHsKLSAgICAgICAgYXV0byYgbGluZSA9IGxpbmVzW2xpbmVJ
bmRleF07Ci0gICAgICAgIGF1dG8gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCA9IGxpbmUuc2Nyb2xs
YWJsZU92ZXJmbG93KCk7Ci0KLSAgICAgICAgYXV0byBhZGp1c3RPdmVyZmxvd0xvZ2ljYWxXaWR0
aFdpdGhCbG9ja0Zsb3dRdWlyayA9IFsmXSB7Ci0gICAgICAgICAgICBhdXRvJiByb290U3R5bGUg
PSBtX2Jsb2NrRmxvdy5zdHlsZSgpOwotICAgICAgICAgICAgYXV0byBpc0hvcml6b250YWxXcml0
aW5nTW9kZSA9IHJvb3RTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAgICAgICAg
ICAgYXV0byBhZGp1c3RlZE92ZXJmbG93TG9naWNhbFdpZHRoID0gbGluZU92ZXJmbG93TG9naWNh
bFdpZHRoKG1fYmxvY2tGbG93LCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7Ci0gICAgICAg
ICAgICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd0xvZ2ljYWxXaWR0aCA9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlID8gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdC53aWR0aCgpIDogc2Nyb2xsYWJsZU92
ZXJmbG93UmVjdC5oZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChhZGp1c3RlZE92ZXJmbG93TG9n
aWNhbFdpZHRoID4gc2Nyb2xsYWJsZU92ZXJmbG93TG9naWNhbFdpZHRoKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBvdmVyZmxvd1ZhbHVlID0gYWRqdXN0ZWRPdmVyZmxvd0xvZ2ljYWxXaWR0aCAt
IHNjcm9sbGFibGVPdmVyZmxvd0xvZ2ljYWxXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJvb3RTdHlsZS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LnNoaWZ0TWF4WEVk
Z2VCeShvdmVyZmxvd1ZhbHVlKSA6IHNjcm9sbGFibGVPdmVyZmxvd1JlY3Quc2hpZnRYRWRnZUJ5
KC1vdmVyZmxvd1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHJvb3RTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBzY3JvbGxhYmxlT3ZlcmZs
b3dSZWN0LnNoaWZ0TWF4WUVkZ2VCeShvdmVyZmxvd1ZhbHVlKSA6IHNjcm9sbGFibGVPdmVyZmxv
d1JlY3Quc2hpZnRZRWRnZUJ5KC1vdmVyZmxvd1ZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLSAgICAgICAgYWRqdXN0T3ZlcmZsb3dMb2dpY2FsV2lkdGhXaXRoQmxvY2tGbG93UXVp
cmsoKTsKLQotICAgICAgICBhdXRvIGZpcnN0Qm94SW5kZXggPSBib3hJbmRleDsKLSAgICAgICAg
YXV0byBsaW5lSW5rT3ZlcmZsb3dSZWN0ID0gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdDsKLSAgICAg
ICAgLy8gQ29sbGVjdCBvdmVyZmxvdyBmcm9tIGJveGVzLgotICAgICAgICBmb3IgKDsgYm94SW5k
ZXggPCBib3hlcy5zaXplKCkgJiYgYm94ZXNbYm94SW5kZXhdLmxpbmVJbmRleCgpID09IGxpbmVJ
bmRleDsgKytib3hJbmRleCkgewotICAgICAgICAgICAgYXV0byYgYm94ID0gYm94ZXNbYm94SW5k
ZXhdOwotCi0gICAgICAgICAgICBsaW5lSW5rT3ZlcmZsb3dSZWN0LnVuaXRlKGJveC5pbmtPdmVy
ZmxvdygpKTsKLQotICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gYm94LmxheW91dEJveCgp
OwotICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBTaW1pbGFyIHRvIExlZ2FjeUlubGluZUZsb3dCb3g6OmFkZFJlcGxhY2VkQ2hp
bGRPdmVyZmxvdy4KLSAgICAgICAgICAgICAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJl
bmRlckJveD4obV9ib3hUcmVlLnJlbmRlcmVyRm9yTGF5b3V0Qm94KGxheW91dEJveCkpOwotICAg
ICAgICAgICAgICAgIGlmICghcmVuZGVyZXIuaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNoaWxkSW5rT3ZlcmZsb3cgPSByZW5kZXJlci5sb2dpY2Fs
VmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oJnJlbmRlcmVyLnBhcmVudCgpLT5zdHls
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRJbmtPdmVyZmxvdy5tb3ZlKGJveC5sZWZ0
KCksIGJveC50b3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVJbmtPdmVyZmxvd1JlY3Qu
dW5pdGUoY2hpbGRJbmtPdmVyZmxvdyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGF1dG8gY2hpbGRTY3JvbGxhYmxlT3ZlcmZsb3cgPSByZW5kZXJlci5sb2dpY2FsTGF5b3V0
T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oJnJlbmRlcmVyLnBhcmVudCgpLT5zdHlsZSgpKTsK
LSAgICAgICAgICAgICAgICBjaGlsZFNjcm9sbGFibGVPdmVyZmxvdy5tb3ZlKGJveC5sZWZ0KCks
IGJveC50b3AoKSk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZU92ZXJmbG93UmVjdC51bml0
ZShjaGlsZFNjcm9sbGFibGVPdmVyZmxvdyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIWlubGluZUNvbnRlbnQubGluZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBhdXRvJiBsYXN0SW5rT3ZlcmZsb3cgPSBpbmxpbmVDb250ZW50LmxpbmVzLmxhc3QoKS5pbmtP
dmVyZmxvdygpOwotICAgICAgICAgICAgaWYgKGxpbmVJbmtPdmVyZmxvd1JlY3QueSgpIDw9IGxh
c3RJbmtPdmVyZmxvdy55KCkgfHwgbGFzdElua092ZXJmbG93Lm1heFkoKSA+PSBsaW5lSW5rT3Zl
cmZsb3dSZWN0Lm1heFkoKSkKLSAgICAgICAgICAgICAgICBpbmxpbmVDb250ZW50Lmhhc011bHRp
bGluZVBhaW50T3ZlcmxhcCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGJveENv
dW50ID0gYm94SW5kZXggLSBmaXJzdEJveEluZGV4OwotICAgICAgICBpZiAoIWlubGluZUNvbnRl
bnQuaGFzVmlzdWFsT3ZlcmZsb3coKSAmJiBsaW5lSW5rT3ZlcmZsb3dSZWN0ICE9IGxpbmUuc2Ny
b2xsYWJsZU92ZXJmbG93KCkpCi0gICAgICAgICAgICBpbmxpbmVDb250ZW50LnNldEhhc1Zpc3Vh
bE92ZXJmbG93KCk7Ci0gICAgICAgIGlubGluZUNvbnRlbnQubGluZXMuYXBwZW5kKHsgZmlyc3RC
b3hJbmRleCwgYm94Q291bnQsIEZsb2F0UmVjdCB7IGxpbmUubGluZUJveFJlY3QoKSB9LCBsaW5l
LmVuY2xvc2luZ1RvcEFuZEJvdHRvbSgpLnRvcCwgbGluZS5lbmNsb3NpbmdUb3BBbmRCb3R0b20o
KS5ib3R0b20sIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QsIGxpbmVJbmtPdmVyZmxvd1JlY3QsIGxp
bmUuYmFzZWxpbmUoKSwgbGluZS5iYXNlbGluZVR5cGUoKSwgbGluZS5jb250ZW50TG9naWNhbE9m
ZnNldCgpLCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbGluZS5pc0hvcml6b250YWwoKSB9
KTsKLSAgICB9Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRl
ci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9u
SW5saW5lQ29udGVudEJ1aWxkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYw
OTgwMWFlMzhlM2NmOWE3NTZjMTliZTNjNjcyZmY3Zjk0ZjdhZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJJbmxpbmVGb3JtYXR0
aW5nU3RhdGUuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgUmVuZGVyQmxvY2tGbG93OwotCi1uYW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRp
b24gewotCi1jbGFzcyBCb3hUcmVlOwotc3RydWN0IElubGluZUNvbnRlbnQ7Ci0KLWNsYXNzIElu
bGluZUNvbnRlbnRCdWlsZGVyIHsKLXB1YmxpYzoKLSAgICBJbmxpbmVDb250ZW50QnVpbGRlcihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBCb3hUcmVlJik7Ci0KLSAgICB2b2lkIGJ1aWxkKExheW91
dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlJiwgSW5saW5lQ29udGVudCYpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIHZvaWQgY3JlYXRlRGlzcGxheUxpbmVzKExheW91dDo6SW5saW5lRm9ybWF0dGlu
Z1N0YXRlJiwgSW5saW5lQ29udGVudCYpIGNvbnN0OwotCi0gICAgY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBtX2Jsb2NrRmxvdzsKLSAgICBCb3hUcmVlJiBtX2JveFRyZWU7Ci19OwotCi19Ci19Ci0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlv
dXRJbnRlZ3JhdGlvbkxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvbkxpbmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM4
MWM0YWQ0MmMyNzA1Yzc4NzU2YTI0MzkzMzAyMmUyYWY0ZTFmZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJMYXlv
dXRCb3guaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dEludGVncmF0
aW9uIHsKLQotY2xhc3MgTGluZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgTGluZShzaXplX3QgZmlyc3RCb3hJbmRleCwgc2l6ZV90IGJveENvdW50LCBjb25z
dCBGbG9hdFJlY3QmIGxpbmVCb3hSZWN0LCBmbG9hdCBlbmNsb3NpbmdDb250ZW50VG9wLCBmbG9h
dCBlbmNsb3NpbmdDb250ZW50Qm90dG9tLCBjb25zdCBGbG9hdFJlY3QmIHNjcm9sbGFibGVPdmVy
ZmxvdywgY29uc3QgRmxvYXRSZWN0JiBpbmtPdmVyZmxvdywgZmxvYXQgYmFzZWxpbmUsIEZvbnRC
YXNlbGluZSBiYXNlbGluZVR5cGUsIGZsb2F0IGNvbnRlbnRMb2dpY2FsT2Zmc2V0LCBmbG9hdCBj
b250ZW50TG9naWNhbFdpZHRoLCBib29sIGlzSG9yaXpvbnRhbCkKLSAgICAgICAgOiBtX2ZpcnN0
Qm94SW5kZXgoZmlyc3RCb3hJbmRleCkKLSAgICAgICAgLCBtX2JveENvdW50KGJveENvdW50KQot
ICAgICAgICAsIG1fbGluZUJveFJlY3QobGluZUJveFJlY3QpCi0gICAgICAgICwgbV9lbmNsb3Np
bmdDb250ZW50VG9wKGVuY2xvc2luZ0NvbnRlbnRUb3ApCi0gICAgICAgICwgbV9lbmNsb3NpbmdD
b250ZW50Qm90dG9tKGVuY2xvc2luZ0NvbnRlbnRCb3R0b20pCi0gICAgICAgICwgbV9zY3JvbGxh
YmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92ZXJmbG93KQotICAgICAgICAsIG1faW5rT3ZlcmZsb3co
aW5rT3ZlcmZsb3cpCi0gICAgICAgICwgbV9iYXNlbGluZShiYXNlbGluZSkKLSAgICAgICAgLCBt
X2NvbnRlbnRMb2dpY2FsT2Zmc2V0KGNvbnRlbnRMb2dpY2FsT2Zmc2V0KQotICAgICAgICAsIG1f
Y29udGVudExvZ2ljYWxXaWR0aChjb250ZW50TG9naWNhbFdpZHRoKQotICAgICAgICAsIG1fYmFz
ZWxpbmVUeXBlKGJhc2VsaW5lVHlwZSkKLSAgICAgICAgLCBtX2lzSG9yaXpvbnRhbChpc0hvcml6
b250YWwpCi0gICAgewotICAgIH0KLQotICAgIHNpemVfdCBmaXJzdEJveEluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdEJveEluZGV4OyB9Ci0gICAgc2l6ZV90IGJveENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9ib3hDb3VudDsgfQotCi0gICAgZmxvYXQgbGluZUJveFRvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUJveFJlY3QueSgpOyB9Ci0gICAgZmxvYXQgbGluZUJveEJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUJveFJlY3QubWF4WSgpOyB9Ci0gICAgZmxvYXQgbGluZUJveExl
ZnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hSZWN0LngoKTsgfQotICAgIGZsb2F0IGxpbmVC
b3hSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveFJlY3QubWF4WCgpOyB9Ci0gICAgZmxv
YXQgbGluZUJveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveFJlY3QuaGVpZ2h0KCk7
IH0KLSAgICBmbG9hdCBsaW5lQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hSZWN0
LndpZHRoKCk7IH0KLQotICAgIGZsb2F0IGVuY2xvc2luZ0NvbnRlbnRUb3AoKSBjb25zdCB7IHJl
dHVybiBtX2VuY2xvc2luZ0NvbnRlbnRUb3A7IH0KLSAgICBmbG9hdCBlbmNsb3NpbmdDb250ZW50
Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9lbmNsb3NpbmdDb250ZW50Qm90dG9tOyB9Ci0KLSAg
ICBjb25zdCBGbG9hdFJlY3QmIHNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1f
c2Nyb2xsYWJsZU92ZXJmbG93OyB9Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBpbmtPdmVyZmxvdygp
IGNvbnN0IHsgcmV0dXJuIG1faW5rT3ZlcmZsb3c7IH0KLQotICAgIGZsb2F0IGJhc2VsaW5lKCkg
Y29uc3QgeyByZXR1cm4gbV9iYXNlbGluZTsgfQotICAgIEZvbnRCYXNlbGluZSBiYXNlbGluZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VsaW5lVHlwZTsgfQotCi0gICAgYm9vbCBpc0hvcml6
b250YWwoKSBjb25zdCB7IHJldHVybiBtX2lzSG9yaXpvbnRhbDsgfQotCi0gICAgZmxvYXQgY29u
dGVudExvZ2ljYWxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMb2dpY2FsT2Zmc2V0
OyB9Ci0gICAgZmxvYXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudExvZ2ljYWxXaWR0aDsgfQotCi1wcml2YXRlOgotICAgIHNpemVfdCBtX2ZpcnN0Qm94SW5k
ZXggeyAwIH07Ci0gICAgc2l6ZV90IG1fYm94Q291bnQgeyAwIH07Ci0gICAgLy8gVGhpcyBpcyBs
aW5lIGJveCBnZW9tZXRyeSAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMv
I2xpbmUtYm94KS4KLSAgICBGbG9hdFJlY3QgbV9saW5lQm94UmVjdDsKLSAgICAvLyBFbmNsb3Np
bmcgdG9wIGFuZCBib3R0b20gaW5jbHVkZXMgYWxsIGlubGluZSBsZXZlbCBib3hlcyAoYm9yZGVy
IGJveCkgdmVydGljYWxseS4KLSAgICAvLyBXaGlsZSB0aGUgbGluZSBib3ggdXN1YWxseSBlbmNs
b3NlIHRoZW0gYXMgd2VsbCwgaXRzIHZlcnRpY2FsIGdlb21ldHJ5IGlzIGJhc2VkIG9uCi0gICAg
Ly8gdGhlIGxheW91dCBib3VuZHMgb2YgdGhlIGlubGluZSBsZXZlbCBib3hlcyB3aGljaCBtYXkg
YmUgZGlmZmVyZW50IHdoZW4gbGluZS1oZWlnaHQgaXMgcHJlc2VudC4KLSAgICBmbG9hdCBtX2Vu
Y2xvc2luZ0NvbnRlbnRUb3AgeyAwIH07Ci0gICAgZmxvYXQgbV9lbmNsb3NpbmdDb250ZW50Qm90
dG9tIHsgMCB9OwotICAgIEZsb2F0UmVjdCBtX3Njcm9sbGFibGVPdmVyZmxvdzsKLSAgICBGbG9h
dFJlY3QgbV9pbmtPdmVyZmxvdzsKLSAgICBmbG9hdCBtX2Jhc2VsaW5lIHsgMCB9OwotICAgIGZs
b2F0IG1fY29udGVudExvZ2ljYWxPZmZzZXQgeyAwIH07Ci0gICAgZmxvYXQgbV9jb250ZW50TG9n
aWNhbFdpZHRoIHsgMCB9OwotICAgIEZvbnRCYXNlbGluZSBtX2Jhc2VsaW5lVHlwZSB7IEFscGhh
YmV0aWNCYXNlbGluZSB9OwotICAgIGJvb2wgbV9pc0hvcml6b250YWwgeyB0cnVlIH07Ci19Owot
Ci19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRkNTgwOGQzZjBhNDM2MWVjYTk2NzU3YmZhMjM2N2Ni
MTE2MGViMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5
b3V0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5o
IgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJF
dmVudFJlZ2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJIaXRU
ZXN0TG9jYXRpb24uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUgIkhp
dFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJbmxpbmVCb3hQYWludGVyLmgiCi0jaW5jbHVkZSAi
SW5saW5lRGFtYWdlLmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKLSNp
bmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJJbmxpbmVJbnZhbGlk
YXRpb24uaCIKLSNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgotI2luY2x1ZGUgIkxheW91
dEludGVncmF0aW9uQ292ZXJhZ2UuaCIKLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGlu
ZUNvbnRlbnRCdWlsZGVyLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9u
LmgiCi0jaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRUcmVl
QnVpbGRlci5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlJlbmRlckF0dGFj
aG1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJC
dXR0b24uaCIKLSNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyRGVzY2VuZGFudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNs
dWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKLSNpbmNs
dWRlICJSZW5kZXJMaXN0Qm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKLSNpbmNs
dWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCi0jaW5j
bHVkZSAiUmVuZGVyVGFibGUuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgot
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5o
IgotI2luY2x1ZGUgIlRleHRCb3hQYWludGVyLmgiCi0jaW5jbHVkZSAiVGV4dERlY29yYXRpb25Q
YWludGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXRJbnRlZ3Jh
dGlvbiB7Ci0KLUxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoUmVuZGVyQmxvY2tGbG93JiBmbG93KQot
ICAgIDogbV9ib3hUcmVlKGZsb3cpCi0gICAgLCBtX2xheW91dFN0YXRlKGZsb3cuZG9jdW1lbnQo
KSwgcm9vdExheW91dEJveCgpKQotICAgICwgbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUobV9sYXlv
dXRTdGF0ZS5lbnN1cmVJbmxpbmVGb3JtYXR0aW5nU3RhdGUocm9vdExheW91dEJveCgpKSkKLXsK
LSAgICBtX2xheW91dFN0YXRlLnNldElzSW50ZWdyYXRlZFJvb3RCb3hGaXJzdENoaWxkKGZsb3cu
cGFyZW50KCktPmZpcnN0Q2hpbGQoKSA9PSAmZmxvdyk7Ci19Ci0KLUxpbmVMYXlvdXQ6On5MaW5l
TGF5b3V0KCkKLXsKLSAgICBjbGVhcklubGluZUNvbnRlbnQoKTsKLX0KLQotUmVuZGVyQmxvY2tG
bG93KiBMaW5lTGF5b3V0OjpibG9ja0NvbnRhaW5lcihSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQot
ewotICAgIC8vIEZJWE1FOiBUaGVzZSBmYWtlIHJlbmRlcmVycyBoYXZlIHRoZWlyIHBhcmVudCBz
ZXQgYnV0IGFyZSBub3QgYWN0dWFsbHkgaW4gdGhlIHRyZWUuCi0gICAgaWYgKHJlbmRlcmVyLmlz
UmVwbGljYSgpIHx8IHJlbmRlcmVyLmlzUmVuZGVyU2Nyb2xsYmFyUGFydCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBmb3IgKGF1dG8qIHBhcmVudCA9IHJlbmRlcmVyLnBh
cmVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYg
KCFwYXJlbnQtPmNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihwYXJlbnQpOwotICAgIH0KLQotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1MaW5lTGF5b3V0KiBMaW5lTGF5b3V0Ojpjb250YWluaW5nKFJl
bmRlck9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJlci5pc0lubGluZSgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChhdXRvKiBjb250YWluZXIgPSBibG9j
a0NvbnRhaW5lcihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBjb250YWluZXItPm1vZGVybkxp
bmVMYXlvdXQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1jb25zdCBMaW5lTGF5b3V0
KiBMaW5lTGF5b3V0Ojpjb250YWluaW5nKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCi17
Ci0gICAgcmV0dXJuIGNvbnRhaW5pbmcoY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihyZW5kZXJl
cikpOwotfQotCi1ib29sIExpbmVMYXlvdXQ6OmlzRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLX0KLQotYm9vbCBMaW5lTGF5b3V0OjpjYW5Vc2VG
b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQotewotICAgIGlmICghaXNFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjYW5Vc2VGb3JMaW5lTGF5b3V0
KGZsb3cpOwotfQotCi1ib29sIExpbmVMYXlvdXQ6OmNhblVzZUZvckFmdGVyU3R5bGVDaGFuZ2Uo
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBTdHlsZURpZmZlcmVuY2UgZGlmZikKLXsKLSAg
ICBBU1NFUlQoaXNFbmFibGVkKCkpOwotICAgIHJldHVybiBjYW5Vc2VGb3JMaW5lTGF5b3V0QWZ0
ZXJTdHlsZUNoYW5nZShmbG93LCBkaWZmKTsKLX0KLQotYm9vbCBMaW5lTGF5b3V0OjpjYW5Vc2VG
b3JBZnRlcklubGluZUJveFN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlcklubGluZSYgaW5saW5lQm94
LCBTdHlsZURpZmZlcmVuY2UgZGlmZikKLXsKLSAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwotICAg
IHJldHVybiBjYW5Vc2VGb3JMaW5lTGF5b3V0QWZ0ZXJJbmxpbmVCb3hTdHlsZUNoYW5nZShpbmxp
bmVCb3gsIGRpZmYpOwotfQotCi1ib29sIExpbmVMYXlvdXQ6OnNob3VsZFN3aXRjaFRvTGVnYWN5
T25JbnZhbGlkYXRpb24oKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBTdXBwb3J0IHBhcnRpYWwg
aW52YWxpZGF0aW9uIGluIExGQy4KLSAgICAvLyBUaGlzIGF2b2lkcyBPKG5eMikgd2hlbiBsb3Rz
IG9mIGJveGVzIGFyZSBiZWluZyBhZGRlZCBkeW5hbWljYWxseSB3aGlsZSBmb3JjaW5nIGxheW91
dHMgYmV0d2Vlbi4KLSAgICBjb25zdGV4cHIgc2l6ZV90IG1heGltaW11bUJveFRyZWVTaXplRm9y
SW52YWxpZGF0aW9uID0gMTI4OwotICAgIHJldHVybiBtX2JveFRyZWUuYm94Q291bnQoKSA+IG1h
eGltaW11bUJveFRyZWVTaXplRm9ySW52YWxpZGF0aW9uOwotfQotCi12b2lkIExpbmVMYXlvdXQ6
OnVwZGF0ZVJlcGxhY2VkRGltZW5zaW9ucyhjb25zdCBSZW5kZXJCb3gmIHJlcGxhY2VkKQotewot
ICAgIHVwZGF0ZUxheW91dEJveERpbWVuc2lvbnMocmVwbGFjZWQpOwotfQotCi12b2lkIExpbmVM
YXlvdXQ6OnVwZGF0ZUlubGluZUJsb2NrRGltZW5zaW9ucyhjb25zdCBSZW5kZXJCbG9jayYgaW5s
aW5lQmxvY2spCi17Ci0gICAgdXBkYXRlTGF5b3V0Qm94RGltZW5zaW9ucyhpbmxpbmVCbG9jayk7
Ci19Ci0KLXZvaWQgTGluZUxheW91dDo6dXBkYXRlSW5saW5lVGFibGVEaW1lbnNpb25zKGNvbnN0
IFJlbmRlclRhYmxlJiBpbmxpbmVUYWJsZSkKLXsKLSAgICB1cGRhdGVMYXlvdXRCb3hEaW1lbnNp
b25zKGlubGluZVRhYmxlKTsKLX0KLQotdm9pZCBMaW5lTGF5b3V0Ojp1cGRhdGVMaXN0SXRlbURp
bWVuc2lvbnMoY29uc3QgUmVuZGVyTGlzdEl0ZW0mIGxpc3RJdGVtKQotewotICAgIHVwZGF0ZUxh
eW91dEJveERpbWVuc2lvbnMobGlzdEl0ZW0pOwotfQotCi12b2lkIExpbmVMYXlvdXQ6OnVwZGF0
ZUxpc3RNYXJrZXJEaW1lbnNpb25zKGNvbnN0IFJlbmRlckxpc3RNYXJrZXImIGxpc3RNYXJrZXIp
Ci17Ci0gICAgdXBkYXRlTGF5b3V0Qm94RGltZW5zaW9ucyhsaXN0TWFya2VyKTsKLQotICAgIGF1
dG8mIGxheW91dEJveCA9IG1fYm94VHJlZS5sYXlvdXRCb3hGb3JSZW5kZXJlcihsaXN0TWFya2Vy
KTsKLSAgICBpZiAobGF5b3V0Qm94LmlzT3V0c2lkZUxpc3RNYXJrZXIoKSkgewotICAgICAgICBh
dXRvJiByb290R2VvbWV0cnkgPSBtX2xheW91dFN0YXRlLmdlb21ldHJ5Rm9yUm9vdEJveCgpOwot
ICAgICAgICBhdXRvJiBsaXN0TWFya2VyR2VvbWV0cnkgPSBtX2lubGluZUZvcm1hdHRpbmdTdGF0
ZS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpOwotICAgICAgICBhdXRvIGhvcml6b250YWxNYXJnaW4g
PSBsaXN0TWFya2VyR2VvbWV0cnkuaG9yaXpvbnRhbE1hcmdpbigpOwotICAgICAgICBhdXRvIG91
dHNpZGVPZmZzZXQgPSByb290R2VvbWV0cnkucGFkZGluZ1N0YXJ0KCkudmFsdWVfb3IoMF9sdSkg
KyByb290R2VvbWV0cnkuYm9yZGVyU3RhcnQoKTsKLSAgICAgICAgbGlzdE1hcmtlckdlb21ldHJ5
LnNldEhvcml6b250YWxNYXJnaW4oeyBob3Jpem9udGFsTWFyZ2luLnN0YXJ0IC0gb3V0c2lkZU9m
ZnNldCwgaG9yaXpvbnRhbE1hcmdpbi5lbmQgKyBvdXRzaWRlT2Zmc2V0IH0pOyAgCi0gICAgfQot
fQotCi1zdGF0aWMgaW5saW5lIExheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aEZvclJlbmRl
cmVyKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpCi17Ci0gICAgcmV0dXJuIHJlbmRlcmVyLnBh
cmVudCgpLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZW5kZXJlci5jb250
ZW50V2lkdGgoKSA6IHJlbmRlcmVyLmNvbnRlbnRIZWlnaHQoKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsSGVpZ2h0Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVy
Qm94JiByZW5kZXJlcikKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIucGFyZW50KCktPnN0eWxlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlbmRlcmVyLmNvbnRlbnRIZWlnaHQoKSA6IHJl
bmRlcmVyLmNvbnRlbnRXaWR0aCgpOwotfQotCi1zdGF0aWMgaW5saW5lIExheW91dDo6Qm94R2Vv
bWV0cnk6Okhvcml6b250YWxNYXJnaW4gaG9yaXpvbnRhbExvZ2ljYWxNYXJnaW4oY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyLCBib29sIGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJl
Y3Rpb24sIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUsIGJvb2wgcmV0YWluTWFyZ2luU3Rh
cnQgPSB0cnVlLCBib29sIHJldGFpbk1hcmdpbkVuZCA9IHRydWUpCi17Ci0gICAgYXV0byBtYXJn
aW5MZWZ0ID0gcmVuZGVyZXIubWFyZ2luTGVmdCgpOwotICAgIGF1dG8gbWFyZ2luUmlnaHQgPSBy
ZW5kZXJlci5tYXJnaW5SaWdodCgpOwotICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkg
ewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodElubGluZURpcmVjdGlvbikKLSAgICAgICAgICAg
IHJldHVybiB7IHJldGFpbk1hcmdpblN0YXJ0ID8gbWFyZ2luTGVmdCA6IDBfbHUsIHJldGFpbk1h
cmdpbkVuZCA/IG1hcmdpblJpZ2h0IDogMF9sdSB9OwotICAgICAgICByZXR1cm4geyByZXRhaW5N
YXJnaW5TdGFydCA/IG1hcmdpblJpZ2h0IDogMF9sdSwgcmV0YWluTWFyZ2luRW5kID8gbWFyZ2lu
TGVmdCA6IDBfbHUgfTsKLSAgICB9Ci0KLSAgICBhdXRvIG1hcmdpblRvcCA9IHJlbmRlcmVyLm1h
cmdpblRvcCgpOwotICAgIGF1dG8gbWFyZ2luQm90dG9tID0gcmVuZGVyZXIubWFyZ2luQm90dG9t
KCk7Ci0gICAgaWYgKGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24pCi0gICAgICAgIHJldHVy
biB7IHJldGFpbk1hcmdpblN0YXJ0ID8gbWFyZ2luVG9wIDogMF9sdSwgcmV0YWluTWFyZ2luRW5k
ID8gbWFyZ2luQm90dG9tIDogMF9sdSB9OwotICAgIHJldHVybiB7IHJldGFpbk1hcmdpblN0YXJ0
ID8gbWFyZ2luQm90dG9tIDogMF9sdSwgcmV0YWluTWFyZ2luRW5kID8gbWFyZ2luVG9wIDogMF9s
dSB9OwotfQotCi1zdGF0aWMgaW5saW5lIExheW91dDo6Qm94R2VvbWV0cnk6OlZlcnRpY2FsTWFy
Z2luIHZlcnRpY2FsTG9naWNhbE1hcmdpbihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcmVu
ZGVyZXIsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIHN3aXRjaCAod3JpdGluZ01v
ZGUpIHsKLSAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbToKLSAgICAgICAgcmV0dXJu
IHsgcmVuZGVyZXIubWFyZ2luVG9wKCksIHJlbmRlcmVyLm1hcmdpbkJvdHRvbSgpIH07Ci0gICAg
Y2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6Umln
aHRUb0xlZnQ6Ci0gICAgICAgIHJldHVybiB7IHJlbmRlcmVyLm1hcmdpblJpZ2h0KCksIHJlbmRl
cmVyLm1hcmdpbkxlZnQoKSB9OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4geyByZW5kZXJlci5tYXJnaW5Ub3AoKSwgcmVuZGVyZXIu
bWFyZ2luQm90dG9tKCkgfTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTGF5b3V0OjpFZGdl
cyBsb2dpY2FsQm9yZGVyKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciwgYm9v
bCBpc0xlZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwg
Ym9vbCByZXRhaW5Cb3JkZXJTdGFydCA9IHRydWUsIGJvb2wgcmV0YWluQm9yZGVyRW5kID0gdHJ1
ZSkKLXsKLSAgICBhdXRvIGJvcmRlckxlZnQgPSByZW5kZXJlci5ib3JkZXJMZWZ0KCk7Ci0gICAg
YXV0byBib3JkZXJSaWdodCA9IHJlbmRlcmVyLmJvcmRlclJpZ2h0KCk7Ci0gICAgYXV0byBib3Jk
ZXJUb3AgPSByZW5kZXJlci5ib3JkZXJUb3AoKTsKLSAgICBhdXRvIGJvcmRlckJvdHRvbSA9IHJl
bmRlcmVyLmJvcmRlckJvdHRvbSgpOwotCi0gICAgaWYgKHdyaXRpbmdNb2RlID09IFdyaXRpbmdN
b2RlOjpUb3BUb0JvdHRvbSkgewotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodElubGluZURpcmVj
dGlvbikKLSAgICAgICAgICAgIHJldHVybiB7IHsgcmV0YWluQm9yZGVyU3RhcnQgPyBib3JkZXJM
ZWZ0IDogMF9sdSwgcmV0YWluQm9yZGVyRW5kID8gYm9yZGVyUmlnaHQgOiAwX2x1IH0sIHsgYm9y
ZGVyVG9wLCBib3JkZXJCb3R0b20gfSB9OwotICAgICAgICByZXR1cm4geyB7IHJldGFpbkJvcmRl
clN0YXJ0ID8gYm9yZGVyUmlnaHQgOiAwX2x1LCByZXRhaW5Cb3JkZXJFbmQgPyBib3JkZXJMZWZ0
IDogMF9sdSB9LCB7IGJvcmRlclRvcCwgYm9yZGVyQm90dG9tIH0gfTsKLSAgICB9Ci0KLSAgICBh
dXRvIGJvcmRlckxvZ2ljYWxMZWZ0ID0gcmV0YWluQm9yZGVyU3RhcnQgPyBpc0xlZnRUb1JpZ2h0
SW5saW5lRGlyZWN0aW9uID8gYm9yZGVyVG9wIDogYm9yZGVyQm90dG9tIDogMF9sdTsKLSAgICBh
dXRvIGJvcmRlckxvZ2ljYWxSaWdodCA9IHJldGFpbkJvcmRlckVuZCA/IGlzTGVmdFRvUmlnaHRJ
bmxpbmVEaXJlY3Rpb24gPyBib3JkZXJCb3R0b20gOiBib3JkZXJUb3AgOiAwX2x1OwotICAgIGF1
dG8gYm9yZGVyTG9naWNhbFRvcCA9IHdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2RlOjpMZWZ0VG9S
aWdodCA/IGJvcmRlckxlZnQgOiBib3JkZXJSaWdodDsKLSAgICBhdXRvIGJvcmRlckxvZ2ljYWxC
b3R0b20gPSB3cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQgPyBib3JkZXJS
aWdodCA6IGJvcmRlckxlZnQ7Ci0gICAgcmV0dXJuIHsgeyBib3JkZXJMb2dpY2FsTGVmdCwgYm9y
ZGVyTG9naWNhbFJpZ2h0IH0sIHsgYm9yZGVyTG9naWNhbFRvcCwgYm9yZGVyTG9naWNhbEJvdHRv
bSB9IH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTGF5b3V0OjpFZGdlcyBsb2dpY2FsUGFkZGluZyhj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcmVuZGVyZXIsIGJvb2wgaXNMZWZ0VG9SaWdodElu
bGluZURpcmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGJvb2wgcmV0YWluUGFkZGlu
Z1N0YXJ0ID0gdHJ1ZSwgYm9vbCByZXRhaW5QYWRkaW5nRW5kID0gdHJ1ZSkKLXsKLSAgICBhdXRv
IHBhZGRpbmdMZWZ0ID0gcmVuZGVyZXIucGFkZGluZ0xlZnQoKTsKLSAgICBhdXRvIHBhZGRpbmdS
aWdodCA9IHJlbmRlcmVyLnBhZGRpbmdSaWdodCgpOwotICAgIGF1dG8gcGFkZGluZ1RvcCA9IHJl
bmRlcmVyLnBhZGRpbmdUb3AoKTsKLSAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSByZW5kZXJlci5w
YWRkaW5nQm90dG9tKCk7Ci0KLSAgICBpZiAod3JpdGluZ01vZGUgPT0gV3JpdGluZ01vZGU6OlRv
cFRvQm90dG9tKSB7Ci0gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uKQot
ICAgICAgICAgICAgcmV0dXJuIHsgeyByZXRhaW5QYWRkaW5nU3RhcnQgPyBwYWRkaW5nTGVmdCA6
IDBfbHUsIHJldGFpblBhZGRpbmdFbmQgPyBwYWRkaW5nUmlnaHQgOiAwX2x1IH0sIHsgcGFkZGlu
Z1RvcCwgcGFkZGluZ0JvdHRvbSB9IH07Ci0gICAgICAgIHJldHVybiB7IHsgcmV0YWluUGFkZGlu
Z1N0YXJ0ID8gcGFkZGluZ1JpZ2h0IDogMF9sdSwgcmV0YWluUGFkZGluZ0VuZCA/IHBhZGRpbmdM
ZWZ0IDogMF9sdSB9LCB7IHBhZGRpbmdUb3AsIHBhZGRpbmdCb3R0b20gfSB9OwotICAgIH0KLQot
ICAgIGF1dG8gcGFkZGluZ0xvZ2ljYWxMZWZ0ID0gcmV0YWluUGFkZGluZ1N0YXJ0ID8gaXNMZWZ0
VG9SaWdodElubGluZURpcmVjdGlvbiA/IHBhZGRpbmdUb3AgOiBwYWRkaW5nQm90dG9tIDogMF9s
dTsKLSAgICBhdXRvIHBhZGRpbmdMb2dpY2FsUmlnaHQgPSByZXRhaW5QYWRkaW5nRW5kID8gaXNM
ZWZ0VG9SaWdodElubGluZURpcmVjdGlvbiA/IHBhZGRpbmdCb3R0b20gOiBwYWRkaW5nVG9wIDog
MF9sdTsKLSAgICBhdXRvIHBhZGRpbmdMb2dpY2FsVG9wID0gd3JpdGluZ01vZGUgPT0gV3JpdGlu
Z01vZGU6OkxlZnRUb1JpZ2h0ID8gcGFkZGluZ0xlZnQgOiBwYWRkaW5nUmlnaHQ7Ci0gICAgYXV0
byBwYWRkaW5nTG9naWNhbEJvdHRvbSA9IHdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2RlOjpMZWZ0
VG9SaWdodCA/IHBhZGRpbmdSaWdodCA6IHBhZGRpbmdMZWZ0OwotICAgIHJldHVybiB7IHsgcGFk
ZGluZ0xvZ2ljYWxMZWZ0LCBwYWRkaW5nTG9naWNhbFJpZ2h0IH0sIHsgcGFkZGluZ0xvZ2ljYWxU
b3AsIHBhZGRpbmdMb2dpY2FsQm90dG9tIH0gfTsKLX0KLQotdm9pZCBMaW5lTGF5b3V0Ojp1cGRh
dGVMYXlvdXRCb3hEaW1lbnNpb25zKGNvbnN0IFJlbmRlckJveCYgcmVwbGFjZWRPcklubGluZUJs
b2NrKQotewotICAgIGF1dG8mIGxheW91dEJveCA9IG1fYm94VHJlZS5sYXlvdXRCb3hGb3JSZW5k
ZXJlcihyZXBsYWNlZE9ySW5saW5lQmxvY2spOwotICAgIC8vIEludGVybmFsbHkgYm90aCByZXBs
YWNlZCBhbmQgaW5saW5lLWJveCBjb250ZW50IHVzZSByZXBsYWNlZCBib3hlcy4KLSAgICBhdXRv
JiByZXBsYWNlZEJveCA9IGRvd25jYXN0PExheW91dDo6UmVwbGFjZWRCb3g+KGxheW91dEJveCk7
Ci0KLSAgICBhdXRvJiByZXBsYWNlZEJveEdlb21ldHJ5ID0gbV9sYXlvdXRTdGF0ZS5lbnN1cmVH
ZW9tZXRyeUZvckJveChyZXBsYWNlZEJveCk7Ci0gICAgLy8gU2Nyb2xsYmFycyBlYXQgaW50byB0
aGUgcGFkZGluZyBib3ggYXJlYS4gVGhleSBuZXZlciBzdHJldGNoIHRoZSBib3JkZXIgYm94IGJ1
dCB0aGV5IG1heSBzaHJpbmsgdGhlIHBhZGRpbmcgYm94LgotICAgIC8vIEluIGxlZ2FjeSByZW5k
ZXIgdHJlZSwgUmVuZGVyQm94Ojpjb250ZW50V2lkdGgvY29udGVudEhlaWdodCB2YWx1ZXMgYXJl
IGFkanVzdGVkIHRvIGFjY29tb2RhdGUgdGhlIHNjcm9sbGJhciB3aWR0aC9oZWlnaHQuCi0gICAg
Ly8gZS5nLiA8ZGl2IHN0eWxlPSJ3aWR0aDogMTBweDsgb3ZlcmZsb3c6IHNjcm9sbDsiPmNvbnRl
bnQ8L2Rpdj4sIFJlbmRlckJveDo6Y29udGVudFdpZHRoKCkgd29uJ3QgYmUgcmV0dXJuaW5nIHRo
ZSB2YWx1ZSBvZiAxMHB4IGJ1dCBpbnN0ZWFkIDBweCAoMTBweCAtIDE1cHgpLgotICAgIGF1dG8g
aG9yaXpvbnRhbFNwYWNlUmVzZXJ2ZWRGb3JTY3JvbGxiYXIgPSByZXBsYWNlZE9ySW5saW5lQmxv
Y2sucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKS53aWR0aCgpIC0gcmVwbGFjZWRP
cklubGluZUJsb2NrLnBhZGRpbmdCb3hXaWR0aCgpOwotICAgIHJlcGxhY2VkQm94R2VvbWV0cnku
c2V0SG9yaXpvbnRhbFNwYWNlRm9yU2Nyb2xsYmFyKGhvcml6b250YWxTcGFjZVJlc2VydmVkRm9y
U2Nyb2xsYmFyKTsKLQotICAgIGF1dG8gdmVydGljYWxTcGFjZVJlc2VydmVkRm9yU2Nyb2xsYmFy
ID0gcmVwbGFjZWRPcklubGluZUJsb2NrLnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFy
KCkuaGVpZ2h0KCkgLSByZXBsYWNlZE9ySW5saW5lQmxvY2sucGFkZGluZ0JveEhlaWdodCgpOwot
ICAgIHJlcGxhY2VkQm94R2VvbWV0cnkuc2V0VmVydGljYWxTcGFjZUZvclNjcm9sbGJhcih2ZXJ0
aWNhbFNwYWNlUmVzZXJ2ZWRGb3JTY3JvbGxiYXIpOwotCi0gICAgcmVwbGFjZWRCb3hHZW9tZXRy
eS5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudExvZ2ljYWxXaWR0aEZvclJlbmRlcmVyKHJlcGxh
Y2VkT3JJbmxpbmVCbG9jaykpOwotICAgIHJlcGxhY2VkQm94R2VvbWV0cnkuc2V0Q29udGVudEJv
eEhlaWdodChjb250ZW50TG9naWNhbEhlaWdodEZvclJlbmRlcmVyKHJlcGxhY2VkT3JJbmxpbmVC
bG9jaykpOwotCi0gICAgYXV0byBpc0xlZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uID0gcmVwbGFj
ZWRPcklubGluZUJsb2NrLnBhcmVudCgpLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsKLSAgICBhdXRvIHdyaXRpbmdNb2RlID0gcmVwbGFjZWRPcklubGluZUJsb2NrLnBhcmVudCgp
LT5zdHlsZSgpLndyaXRpbmdNb2RlKCk7Ci0KLSAgICByZXBsYWNlZEJveEdlb21ldHJ5LnNldFZl
cnRpY2FsTWFyZ2luKHZlcnRpY2FsTG9naWNhbE1hcmdpbihyZXBsYWNlZE9ySW5saW5lQmxvY2ss
IHdyaXRpbmdNb2RlKSk7Ci0gICAgcmVwbGFjZWRCb3hHZW9tZXRyeS5zZXRIb3Jpem9udGFsTWFy
Z2luKGhvcml6b250YWxMb2dpY2FsTWFyZ2luKHJlcGxhY2VkT3JJbmxpbmVCbG9jaywgaXNMZWZ0
VG9SaWdodElubGluZURpcmVjdGlvbiwgd3JpdGluZ01vZGUgPT0gV3JpdGluZ01vZGU6OlRvcFRv
Qm90dG9tKSk7Ci0gICAgcmVwbGFjZWRCb3hHZW9tZXRyeS5zZXRCb3JkZXIobG9naWNhbEJvcmRl
cihyZXBsYWNlZE9ySW5saW5lQmxvY2ssIGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24sIHdy
aXRpbmdNb2RlKSk7Ci0gICAgcmVwbGFjZWRCb3hHZW9tZXRyeS5zZXRQYWRkaW5nKGxvZ2ljYWxQ
YWRkaW5nKHJlcGxhY2VkT3JJbmxpbmVCbG9jaywgaXNMZWZ0VG9SaWdodElubGluZURpcmVjdGlv
biwgd3JpdGluZ01vZGUpKTsKLQotICAgIGF1dG8gaGFzTm9uU3ludGhldGljQmFzZWxpbmUgPSBb
Jl0gewotICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdE1hcmtlcj4ocmVwbGFjZWRPcklubGluZUJs
b2NrKSkKLSAgICAgICAgICAgIHJldHVybiAhZG93bmNhc3Q8UmVuZGVyTGlzdE1hcmtlcj4ocmVw
bGFjZWRPcklubGluZUJsb2NrKS5pc0ltYWdlKCk7Ci0gICAgICAgIGlmIChpczxSZW5kZXJSZXBs
YWNlZD4ocmVwbGFjZWRPcklubGluZUJsb2NrKQotICAgICAgICAgICAgfHwgaXM8UmVuZGVyTGlz
dEJveD4ocmVwbGFjZWRPcklubGluZUJsb2NrKQotICAgICAgICAgICAgfHwgaXM8UmVuZGVyU2xp
ZGVyPihyZXBsYWNlZE9ySW5saW5lQmxvY2spCi0gICAgICAgICAgICB8fCBpczxSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZT4ocmVwbGFjZWRPcklubGluZUJsb2NrKQotICAgICAgICAgICAgfHwg
aXM8UmVuZGVyVGFibGU+KHJlcGxhY2VkT3JJbmxpbmVCbG9jaykKLSNpZiBFTkFCTEUoQVRUQUNI
TUVOVF9FTEVNRU5UKQotICAgICAgICAgICAgfHwgaXM8UmVuZGVyQXR0YWNobWVudD4ocmVwbGFj
ZWRPcklubGluZUJsb2NrKQotI2VuZGlmCi0gICAgICAgICAgICB8fCBpczxSZW5kZXJCdXR0b24+
KHJlcGxhY2VkT3JJbmxpbmVCbG9jaykpIHsKLSAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBzcGVj
aWFsIFJlbmRlckJsb2NrIHJlbmRlcmVycyB0aGF0IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJhc2Vs
aW5lIHBvc2l0aW9uIGJlaGF2aW9yIG9mIHRoZSBpbmxpbmUgYmxvY2sgYm94LgotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byYgYmxvY2tGbG93ID0gZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZXBsYWNlZE9ySW5saW5lQmxvY2spOwotICAgICAgICBh
dXRvIGhhc0FwcGFyZWFuY2UgPSBibG9ja0Zsb3cuc3R5bGUoKS5oYXNFZmZlY3RpdmVBcHBlYXJh
bmNlKCkgJiYgIWJsb2NrRmxvdy50aGVtZSgpLmlzQ29udHJvbENvbnRhaW5lcihibG9ja0Zsb3cu
c3R5bGUoKS5lZmZlY3RpdmVBcHBlYXJhbmNlKCkpOwotICAgICAgICByZXR1cm4gaGFzQXBwYXJl
YW5jZSB8fCAhYmxvY2tGbG93LmNoaWxkcmVuSW5saW5lKCkgfHwgYmxvY2tGbG93Lmhhc0xpbmVz
KCkgfHwgYmxvY2tGbG93Lmhhc0xpbmVJZkVtcHR5KCk7Ci0gICAgfSgpOwotICAgIGlmIChoYXNO
b25TeW50aGV0aWNCYXNlbGluZSkgewotICAgICAgICBhdXRvIGJhc2VsaW5lID0gcmVwbGFjZWRP
cklubGluZUJsb2NrLmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCBmYWxzZSAv
KiBmaXJzdExpbmUgKi8sIHdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSA/
IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUp
OwotICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdE1hcmtlcj4ocmVwbGFjZWRPcklubGluZUJsb2Nr
KSkgewotICAgICAgICAgICAgQVNTRVJUKCFkb3duY2FzdDxSZW5kZXJMaXN0TWFya2VyPihyZXBs
YWNlZE9ySW5saW5lQmxvY2spLmlzSW1hZ2UoKSk7Ci0gICAgICAgICAgICBiYXNlbGluZSA9IHJl
cGxhY2VkT3JJbmxpbmVCbG9jay5zdHlsZSgpLm1ldHJpY3NPZlByaW1hcnlGb250KCkuYXNjZW50
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVwbGFjZWRCb3guc2V0QmFzZWxpbmUocm91bmRUb0lu
dChiYXNlbGluZSkpOwotICAgIH0KLX0KLQotdm9pZCBMaW5lTGF5b3V0Ojp1cGRhdGVMaW5lQnJl
YWtCb3hEaW1lbnNpb25zKGNvbnN0IFJlbmRlckxpbmVCcmVhayYgbGluZUJyZWFrQm94KQotewot
ICAgIC8vIFRoaXMgaXMganVzdCBhIGJveCBnZW9tZXRyeSByZXNldCAoc2VlIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50KS4KLSAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IG1fbGF5b3V0U3RhdGUuZW5zdXJlR2VvbWV0cnlGb3JCb3gobV9ib3hUcmVlLmxheW91dEJv
eEZvclJlbmRlcmVyKGxpbmVCcmVha0JveCkpOwotCi0gICAgYm94R2VvbWV0cnkuc2V0SG9yaXpv
bnRhbE1hcmdpbih7IH0pOwotICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcih7IH0pOwotICAgIGJv
eEdlb21ldHJ5LnNldFBhZGRpbmcoeyB9KTsKLSAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94
V2lkdGgoeyB9KTsKLSAgICBib3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih7IH0pOwotfQot
Ci12b2lkIExpbmVMYXlvdXQ6OnVwZGF0ZUlubGluZUJveERpbWVuc2lvbnMoY29uc3QgUmVuZGVy
SW5saW5lJiByZW5kZXJJbmxpbmUpCi17Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBtX2xheW91
dFN0YXRlLmVuc3VyZUdlb21ldHJ5Rm9yQm94KG1fYm94VHJlZS5sYXlvdXRCb3hGb3JSZW5kZXJl
cihyZW5kZXJJbmxpbmUpKTsKLQotICAgIC8vIENoZWNrIGlmIHRoaXMgcmVuZGVyZXIgaXMgcGFy
dCBvZiBhIGNvbnRpbnVhdGlvbiBhbmQgYWRqdXN0IGhvcml6b250YWwgbWFyZ2luL2JvcmRlci9w
YWRkaW5nIGFjY29yZGluZ2x5LgotICAgIGF1dG8gc2hvdWxkTm90UmV0YWluQm9yZGVyUGFkZGlu
Z0FuZE1hcmdpblN0YXJ0ID0gcmVuZGVySW5saW5lLmlzQ29udGludWF0aW9uKCk7Ci0gICAgYXV0
byBzaG91bGROb3RSZXRhaW5Cb3JkZXJQYWRkaW5nQW5kTWFyZ2luRW5kID0gIXJlbmRlcklubGlu
ZS5pc0NvbnRpbnVhdGlvbigpICYmIHJlbmRlcklubGluZS5pbmxpbmVDb250aW51YXRpb24oKTsK
LQotICAgIGJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7Ci0gICAgYXV0byBpc0xl
ZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uID0gcmVuZGVySW5saW5lLnN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpOwotICAgIGF1dG8gd3JpdGluZ01vZGUgPSByZW5kZXJJbmxpbmUuc3R5
bGUoKS53cml0aW5nTW9kZSgpOwotCi0gICAgYm94R2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1hcmdp
bihob3Jpem9udGFsTG9naWNhbE1hcmdpbihyZW5kZXJJbmxpbmUsIGlzTGVmdFRvUmlnaHRJbmxp
bmVEaXJlY3Rpb24sIHdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSwgIXNo
b3VsZE5vdFJldGFpbkJvcmRlclBhZGRpbmdBbmRNYXJnaW5TdGFydCwgIXNob3VsZE5vdFJldGFp
bkJvcmRlclBhZGRpbmdBbmRNYXJnaW5FbmQpKTsKLSAgICBib3hHZW9tZXRyeS5zZXRCb3JkZXIo
bG9naWNhbEJvcmRlcihyZW5kZXJJbmxpbmUsIGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24s
IHdyaXRpbmdNb2RlLCAhc2hvdWxkTm90UmV0YWluQm9yZGVyUGFkZGluZ0FuZE1hcmdpblN0YXJ0
LCAhc2hvdWxkTm90UmV0YWluQm9yZGVyUGFkZGluZ0FuZE1hcmdpbkVuZCkpOwotICAgIGJveEdl
b21ldHJ5LnNldFBhZGRpbmcobG9naWNhbFBhZGRpbmcocmVuZGVySW5saW5lLCBpc0xlZnRUb1Jp
Z2h0SW5saW5lRGlyZWN0aW9uLCB3cml0aW5nTW9kZSwgIXNob3VsZE5vdFJldGFpbkJvcmRlclBh
ZGRpbmdBbmRNYXJnaW5TdGFydCwgIXNob3VsZE5vdFJldGFpbkJvcmRlclBhZGRpbmdBbmRNYXJn
aW5FbmQpKTsKLX0KLQotdm9pZCBMaW5lTGF5b3V0Ojp1cGRhdGVTdHlsZShjb25zdCBSZW5kZXJC
b3hNb2RlbE9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBvbGRTdHlsZSkKLXsK
LSAgICBhdXRvIGludmFsaWRhdGlvbiA9IExheW91dDo6SW5saW5lSW52YWxpZGF0aW9uIHsgZW5z
dXJlTGluZURhbWFnZSgpIH07Ci0gICAgaW52YWxpZGF0aW9uLnN0eWxlQ2hhbmdlZChtX2JveFRy
ZWUubGF5b3V0Qm94Rm9yUmVuZGVyZXIocmVuZGVyZXIpLCBvbGRTdHlsZSk7Ci0KLSAgICBtX2Jv
eFRyZWUudXBkYXRlU3R5bGUocmVuZGVyZXIpOwotfQotCi1zdGQ6OnBhaXI8TGF5b3V0VW5pdCwg
TGF5b3V0VW5pdD4gTGluZUxheW91dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
KQotewotICAgIGF1dG8gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQgPSBMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0IHsgcm9vdExheW91dEJveCgpLCBtX2lubGluZUZvcm1hdHRpbmdTdGF0
ZSwgbnVsbHB0ciB9OwotICAgIGF1dG8gY29uc3RyYWludHMgPSBpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JJbnRlZ3JhdGlvbigpOwot
Ci0gICAgcmV0dXJuIHsgY29uc3RyYWludHMubWluaW11bSwgY29uc3RyYWludHMubWF4aW11bSB9
OwotfQotCi12b2lkIExpbmVMYXlvdXQ6OmxheW91dCgpCi17Ci0gICAgYXV0byYgcm9vdExheW91
dEJveCA9IHRoaXMtPnJvb3RMYXlvdXRCb3goKTsKLSAgICBpZiAoIXJvb3RMYXlvdXRCb3guaGFz
SW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByZXBhcmVM
YXlvdXRTdGF0ZSgpOwotICAgIHByZXBhcmVGbG9hdGluZ1N0YXRlKCk7Ci0KLSAgICAvLyBGSVhN
RTogRG8gbm90IGNsZWFyIHRoZSBsaW5lcyBhbmQgYm94ZXMgaGVyZSB1bmNvbmRpdGlvbmFsbHks
IGJ1dCBjb25zdWx0IHdpdGggdGhlIGRhbWFnZSBvYmplY3QgaW5zdGVhZC4KLSAgICBjbGVhcklu
bGluZUNvbnRlbnQoKTsKLQotICAgIGF1dG8mIHJvb3RHZW9tZXRyeSA9IG1fbGF5b3V0U3RhdGUu
Z2VvbWV0cnlGb3JCb3gocm9vdExheW91dEJveCk7Ci0gICAgYXV0byBpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCA9IExheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQgeyByb290TGF5b3V0Qm94
LCBtX2lubGluZUZvcm1hdHRpbmdTdGF0ZSwgbV9saW5lRGFtYWdlLmdldCgpIH07Ci0KLSAgICBh
dXRvIGhvcml6b250YWxDb25zdHJhaW50cyA9IExheW91dDo6SG9yaXpvbnRhbENvbnN0cmFpbnRz
IHsgcm9vdEdlb21ldHJ5LmNvbnRlbnRCb3hMZWZ0KCksIHJvb3RHZW9tZXRyeS5jb250ZW50Qm94
V2lkdGgoKSB9OwotCi0gICAgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQubGluZUxheW91dEZvcklu
dGVyZ3JhdGlvbih7IGhvcml6b250YWxDb25zdHJhaW50cywgcm9vdEdlb21ldHJ5LmNvbnRlbnRC
b3hUb3AoKSB9KTsKLQotICAgIGNvbnN0cnVjdENvbnRlbnQoKTsKLQotICAgIG1fbGluZURhbWFn
ZSA9IHsgfTsKLX0KLQotdm9pZCBMaW5lTGF5b3V0Ojpjb25zdHJ1Y3RDb250ZW50KCkKLXsKLSAg
ICBhdXRvIGlubGluZUNvbnRlbnRCdWlsZGVyID0gSW5saW5lQ29udGVudEJ1aWxkZXIgeyBmbG93
KCksIG1fYm94VHJlZSB9OwotICAgIGlubGluZUNvbnRlbnRCdWlsZGVyLmJ1aWxkKG1faW5saW5l
Rm9ybWF0dGluZ1N0YXRlLCBlbnN1cmVJbmxpbmVDb250ZW50KCkpOwotICAgIEFTU0VSVChtX2lu
bGluZUNvbnRlbnQpOwotCi0gICAgYXV0byYgYm94QW5kUmVuZGVyZXJMaXN0ID0gbV9ib3hUcmVl
LmJveEFuZFJlbmRlcmVyTGlzdCgpOwotICAgIGZvciAoYXV0byYgYm94QW5kUmVuZGVyZXIgOiBi
b3hBbmRSZW5kZXJlckxpc3QpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gYm94QW5kUmVu
ZGVyZXIuYm94LmdldCgpOwotICAgICAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvJiByZW5kZXJlciA9IGRvd25j
YXN0PFJlbmRlckJveD4oKmJveEFuZFJlbmRlcmVyLnJlbmRlcmVyKTsKLSAgICAgICAgcmVuZGVy
ZXIuc2V0TG9jYXRpb24oTGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9yZGVyQm94VG9wTGVmdChtX2lu
bGluZUZvcm1hdHRpbmdTdGF0ZS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpKSk7Ci0gICAgfQotCi0g
ICAgbV9pbmxpbmVDb250ZW50LT5jbGVhckdhcEFmdGVyTGFzdExpbmUgPSBtX2lubGluZUZvcm1h
dHRpbmdTdGF0ZS5jbGVhckdhcEFmdGVyTGFzdExpbmUoKTsKLSAgICBtX2lubGluZUNvbnRlbnQt
PnNocmlua1RvRml0KCk7Ci0gICAgbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUuc2hyaW5rVG9GaXQo
KTsKLX0KLQotdm9pZCBMaW5lTGF5b3V0Ojp1cGRhdGVGb3JtYXR0aW5nUm9vdEdlb21ldHJ5QW5k
SW52YWxpZGF0ZSgpCi17Ci0gICAgYXV0byYgZmxvdyA9IHRoaXMtPmZsb3coKTsKLQotICAgIGF1
dG8gdXBkYXRlR2VvbWV0cnkgPSBbJl0oYXV0byYgcm9vdCkgewotICAgICAgICBhdXRvIGlzTGVm
dFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24gPSBmbG93LnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpOwotICAgICAgICBhdXRvIHdyaXRpbmdNb2RlID0gZmxvdy5zdHlsZSgpLndyaXRpbmdN
b2RlKCk7Ci0KLSAgICAgICAgcm9vdC5zZXRDb250ZW50Qm94V2lkdGgod3JpdGluZ01vZGUgPT0g
V3JpdGluZ01vZGU6OlRvcFRvQm90dG9tID8gZmxvdy5jb250ZW50V2lkdGgoKSA6IGZsb3cuY29u
dGVudEhlaWdodCgpKTsKLSAgICAgICAgcm9vdC5zZXRQYWRkaW5nKGxvZ2ljYWxQYWRkaW5nKGZs
b3csIGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24sIHdyaXRpbmdNb2RlKSk7Ci0gICAgICAg
IHJvb3Quc2V0Qm9yZGVyKGxvZ2ljYWxCb3JkZXIoZmxvdywgaXNMZWZ0VG9SaWdodElubGluZURp
cmVjdGlvbiwgd3JpdGluZ01vZGUpKTsKLSAgICAgICAgcm9vdC5zZXRIb3Jpem9udGFsTWFyZ2lu
KHsgfSk7Ci0gICAgICAgIHJvb3Quc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKLSAgICB9OwotICAg
IGF1dG8mIHJvb3RMYXlvdXRCb3ggPSB0aGlzLT5yb290TGF5b3V0Qm94KCk7Ci0gICAgaWYgKCFt
X2xheW91dFN0YXRlLmhhc0JveEdlb21ldHJ5KHJvb3RMYXlvdXRCb3gpKQotICAgICAgICByZXR1
cm4gdXBkYXRlR2VvbWV0cnkobV9sYXlvdXRTdGF0ZS5lbnN1cmVHZW9tZXRyeUZvckJveChyb290
TGF5b3V0Qm94KSk7Ci0KLSAgICBhdXRvJiByb290R2VvbWV0cnkgPSBtX2xheW91dFN0YXRlLmdl
b21ldHJ5Rm9yUm9vdEJveCgpOwotICAgIGF1dG8gbmV3TG9naWNhbFdpZHRoID0gZmxvdy5jb250
ZW50TG9naWNhbFdpZHRoKCk7Ci0gICAgaWYgKG5ld0xvZ2ljYWxXaWR0aCAhPSByb290R2VvbWV0
cnkuY29udGVudEJveFdpZHRoKCkpCi0gICAgICAgIExheW91dDo6SW5saW5lSW52YWxpZGF0aW9u
KGVuc3VyZUxpbmVEYW1hZ2UoKSkuaG9yaXpvbnRhbENvbnN0cmFpbnRDaGFuZ2VkKCk7Ci0gICAg
dXBkYXRlR2VvbWV0cnkocm9vdEdlb21ldHJ5KTsKLX0KLQotdm9pZCBMaW5lTGF5b3V0OjpwcmVw
YXJlTGF5b3V0U3RhdGUoKQotewotICAgIG1fbGF5b3V0U3RhdGUuc2V0Vmlld3BvcnRTaXplKGZs
b3coKS5mcmFtZSgpLnZpZXcoKS0+c2l6ZSgpKTsKLX0KLQotdm9pZCBMaW5lTGF5b3V0OjpwcmVw
YXJlRmxvYXRpbmdTdGF0ZSgpCi17Ci0gICAgYXV0byYgZmxvYXRpbmdTdGF0ZSA9IG1faW5saW5l
Rm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKTsKLSAgICBmbG9hdGluZ1N0YXRlLmNsZWFy
KCk7Ci0KLSAgICBpZiAoIWZsb3coKS5jb250YWluc0Zsb2F0cygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKGF1dG8mIGZsb2F0aW5nT2JqZWN0IDogKmZsb3coKS5mbG9hdGluZ09iamVj
dFNldCgpKSB7Ci0gICAgICAgIGF1dG8mIHZpc3VhbFJlY3QgPSBmbG9hdGluZ09iamVjdC0+ZnJh
bWVSZWN0KCk7Ci0gICAgICAgIGF1dG8gcG9zaXRpb24gPSBmbG9hdGluZ09iamVjdC0+dHlwZSgp
ID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0Ci0gICAgICAgICAgICA/IExheW91dDo6Rmxv
YXRpbmdTdGF0ZTo6RmxvYXRJdGVtOjpQb3NpdGlvbjo6UmlnaHQKLSAgICAgICAgICAgIDogTGF5
b3V0OjpGbG9hdGluZ1N0YXRlOjpGbG9hdEl0ZW06OlBvc2l0aW9uOjpMZWZ0OwotICAgICAgICBh
dXRvIGJveEdlb21ldHJ5ID0gTGF5b3V0OjpCb3hHZW9tZXRyeSB7IH07Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBhcmUgZmxvb3JpbmcgaGVyZSBmb3IgbGVnYWN5IGNvbXBhdGliaWxpdHkuCi0gICAg
ICAgIC8vICAgICAgICBTZWUgRmxvYXRpbmdPYmplY3RzOjppbnRlcnZhbEZvckZsb2F0aW5nT2Jq
ZWN0IGFuZCBSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRzLgotICAgICAgICBhdXRvIGxvZ2lj
YWxUb3AgPSB2aXN1YWxSZWN0LnkoKS5mbG9vcigpOwotICAgICAgICBhdXRvIGxvZ2ljYWxIZWln
aHQgPSB2aXN1YWxSZWN0Lm1heFkoKS5mbG9vcigpIC0gbG9naWNhbFRvcDsKLSAgICAgICAgYXV0
byBsb2dpY2FsUmVjdCA9IGZsb3coKS5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBMYXlvdXRSZWN0KHZpc3VhbFJlY3QueCgpLCBsb2dpY2FsVG9wLCB2aXN1YWxSZWN0LndpZHRo
KCksIGxvZ2ljYWxIZWlnaHQpCi0gICAgICAgICAgICA6IExheW91dFJlY3QobG9naWNhbFRvcCwg
dmlzdWFsUmVjdC54KCksIGxvZ2ljYWxIZWlnaHQsIHZpc3VhbFJlY3Qud2lkdGgoKSk7Ci0KLSAg
ICAgICAgYm94R2VvbWV0cnkuc2V0TG9naWNhbFRvcExlZnQobG9naWNhbFJlY3QubG9jYXRpb24o
KSk7Ci0gICAgICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChsb2dpY2FsUmVjdC53
aWR0aCgpKTsKLSAgICAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChsb2dpY2Fs
UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcih7IH0pOwotICAg
ICAgICBib3hHZW9tZXRyeS5zZXRQYWRkaW5nKHsgfSk7Ci0gICAgICAgIGJveEdlb21ldHJ5LnNl
dEhvcml6b250YWxNYXJnaW4oeyB9KTsKLSAgICAgICAgYm94R2VvbWV0cnkuc2V0VmVydGljYWxN
YXJnaW4oeyB9KTsKLSAgICAgICAgZmxvYXRpbmdTdGF0ZS5hcHBlbmQoeyBwb3NpdGlvbiwgYm94
R2VvbWV0cnkgfSk7Ci0gICAgfQotfQotCi1MYXlvdXRVbml0IExpbmVMYXlvdXQ6OmNvbnRlbnRM
b2dpY2FsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5saW5lQ29udGVudCkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8mIGxpbmVzID0gbV9pbmxpbmVDb250ZW50LT5saW5l
czsKLSAgICBhdXRvIGZsaXBwZWRDb250ZW50SGVpZ2h0Rm9yV3JpdGluZ01vZGUgPSByb290TGF5
b3V0Qm94KCkuc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpCi0gICAgICAgID8gbGlu
ZXMubGFzdCgpLmxpbmVCb3hCb3R0b20oKSAtIGxpbmVzLmZpcnN0KCkubGluZUJveFRvcCgpCi0g
ICAgICAgIDogbGluZXMubGFzdCgpLmxpbmVCb3hSaWdodCgpIC0gbGluZXMuZmlyc3QoKS5saW5l
Qm94TGVmdCgpOwotICAgIHJldHVybiBMYXlvdXRVbml0IHsgZmxpcHBlZENvbnRlbnRIZWlnaHRG
b3JXcml0aW5nTW9kZSArIG1faW5saW5lQ29udGVudC0+Y2xlYXJHYXBBZnRlckxhc3RMaW5lIH07
Ci19Ci0KLXNpemVfdCBMaW5lTGF5b3V0OjpsaW5lQ291bnQoKSBjb25zdAotewotICAgIGlmICgh
bV9pbmxpbmVDb250ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1faW5saW5lQ29u
dGVudC0+aGFzQ29udGVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2lu
bGluZUNvbnRlbnQtPmxpbmVzLnNpemUoKTsKLX0KLQotYm9vbCBMaW5lTGF5b3V0OjpoYXNWaXN1
YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5saW5lQ29udGVudCAmJiBtX2lu
bGluZUNvbnRlbnQtPmhhc1Zpc3VhbE92ZXJmbG93KCk7Ci19Ci0KLUxheW91dFVuaXQgTGluZUxh
eW91dDo6Zmlyc3RMaW5lUGh5c2ljYWxCYXNlbGluZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2lu
bGluZUNvbnRlbnQgfHwgbV9pbmxpbmVDb250ZW50LT5saW5lcy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgYXV0byYgZmlyc3RMaW5lID0gbV9pbmxpbmVDb250ZW50LT5saW5lcy5maXJzdCgpOwotICAg
IHN3aXRjaCAocm9vdExheW91dEJveCgpLnN0eWxlKCkud3JpdGluZ01vZGUoKSkgewotICAgIGNh
c2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7
IGZpcnN0TGluZS5saW5lQm94VG9wKCkgKyBmaXJzdExpbmUuYmFzZWxpbmUoKSB9OwotICAgIGNh
c2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7
IGZpcnN0TGluZS5saW5lQm94TGVmdCgpICsgKGZpcnN0TGluZS5saW5lQm94V2lkdGgoKSAtIGZp
cnN0TGluZS5iYXNlbGluZSgpKSB9OwotICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0
OgotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGZpcnN0TGluZS5saW5lQm94TGVmdCgpICsg
Zmlyc3RMaW5lLmJhc2VsaW5lKCkgfTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci19Ci0KLUxheW91dFVuaXQg
TGluZUxheW91dDo6bGFzdExpbmVMb2dpY2FsQmFzZWxpbmUoKSBjb25zdAotewotICAgIGlmICgh
bV9pbmxpbmVDb250ZW50IHx8IG1faW5saW5lQ29udGVudC0+bGluZXMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0K
LQotICAgIGF1dG8mIGxhc3RMaW5lID0gbV9pbmxpbmVDb250ZW50LT5saW5lcy5sYXN0KCk7Ci0g
ICAgc3dpdGNoIChyb290TGF5b3V0Qm94KCkuc3R5bGUoKS53cml0aW5nTW9kZSgpKSB7Ci0gICAg
Y2FzZSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b206Ci0gICAgICAgIHJldHVybiBMYXlvdXRVbml0
IHsgbGFzdExpbmUubGluZUJveFRvcCgpICsgbGFzdExpbmUuYmFzZWxpbmUoKSB9OwotICAgIGNh
c2UgV3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OiB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgc2V0IHRoZSBjb21wdXRlZCBoZWlnaHQgb24gdGhlIHJvb3QncyBib3ggZ2VvbWV0cnkgKGlu
IFJlbmRlckJsb2NrRmxvdykgc28gdGhhdAotICAgICAgICAvLyB3ZSBjb3VsZCBjYWxsIG1fbGF5
b3V0U3RhdGUuZ2VvbWV0cnlGb3JSb290Qm94KCkuYm9yZGVyQm94SGVpZ2h0KCkgaW5zdGVhZC4K
LQotICAgICAgICAvLyBMaW5lIGlzIGFsd2F5cyB2aXN1YWwgY29vcmRpbmF0ZXMgd2hpbGUgbG9n
aWNhbEhlaWdodCBpcyBub3QgKGkuZS4gdGhpcyB0cmFuc2xhdGUgdG8gImJveCB2aXN1YWwgd2lk
dGgiIC0gImxpbmUgdmlzdWFsIHJpZ2h0IikKLSAgICAgICAgYXV0byBsaW5lTG9naWNhbFRvcCA9
IGZsb3coKS5sb2dpY2FsSGVpZ2h0KCkgLSBsYXN0TGluZS5saW5lQm94UmlnaHQoKTsKLSAgICAg
ICAgcmV0dXJuIExheW91dFVuaXQgeyBsaW5lTG9naWNhbFRvcCArIGxhc3RMaW5lLmJhc2VsaW5l
KCkgfTsKLSAgICB9Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xlZnQ6Ci0gICAgICAg
IHJldHVybiBMYXlvdXRVbml0IHsgbGFzdExpbmUubGluZUJveExlZnQoKSArIGxhc3RMaW5lLmJh
c2VsaW5lKCkgfTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci19Ci0KLXZvaWQgTGluZUxheW91dDo6YWRqdXN0
Rm9yUGFnaW5hdGlvbigpCi17Ci0gICAgaWYgKCFtX2lubGluZUNvbnRlbnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gcGFnaW5lZElubGluZUNvbnRlbnQgPSBhZGp1c3RMaW5lUG9zaXRp
b25zRm9yUGFnaW5hdGlvbigqbV9pbmxpbmVDb250ZW50LCBmbG93KCkpOwotICAgIGlmIChwYWdp
bmVkSW5saW5lQ29udGVudC5wdHIoKSA9PSBtX2lubGluZUNvbnRlbnQpIHsKLSAgICAgICAgbV9p
c1BhZ2luYXRlZENvbnRlbnQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBt
X2lzUGFnaW5hdGVkQ29udGVudCA9IHRydWU7Ci0gICAgbV9pbmxpbmVDb250ZW50ID0gV1RGTW92
ZShwYWdpbmVkSW5saW5lQ29udGVudCk7Ci19Ci0KLXZvaWQgTGluZUxheW91dDo6Y29sbGVjdE92
ZXJmbG93KCkKLXsKLSAgICBpZiAoIW1faW5saW5lQ29udGVudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZm9yIChhdXRvJiBsaW5lIDogbV9pbmxpbmVDb250ZW50LT5saW5lcykgewotICAgICAg
ICBmbG93KCkuYWRkTGF5b3V0T3ZlcmZsb3coTGF5b3V0Ojp0b0xheW91dFJlY3QobGluZS5zY3Jv
bGxhYmxlT3ZlcmZsb3coKSkpOwotICAgICAgICBpZiAoIWZsb3coKS5oYXNOb25WaXNpYmxlT3Zl
cmZsb3coKSkKLSAgICAgICAgICAgIGZsb3coKS5hZGRWaXN1YWxPdmVyZmxvdyhMYXlvdXQ6OnRv
TGF5b3V0UmVjdChsaW5lLmlua092ZXJmbG93KCkpKTsKLSAgICB9Ci19Ci0KLUlubGluZUNvbnRl
bnQmIExpbmVMYXlvdXQ6OmVuc3VyZUlubGluZUNvbnRlbnQoKQotewotICAgIGlmICghbV9pbmxp
bmVDb250ZW50KQotICAgICAgICBtX2lubGluZUNvbnRlbnQgPSBJbmxpbmVDb250ZW50OjpjcmVh
dGUoKnRoaXMpOwotICAgIHJldHVybiAqbV9pbmxpbmVDb250ZW50OwotfQotCi1JbmxpbmVJdGVy
YXRvcjo6VGV4dEJveEl0ZXJhdG9yIExpbmVMYXlvdXQ6OnRleHRCb3hlc0Zvcihjb25zdCBSZW5k
ZXJUZXh0JiByZW5kZXJUZXh0KSBjb25zdAotewotICAgIGlmICghbV9pbmxpbmVDb250ZW50KQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byYgbGF5b3V0Qm94ID0gbV9ib3hUcmVlLmxh
eW91dEJveEZvclJlbmRlcmVyKHJlbmRlclRleHQpOwotICAgIGF1dG8gZmlyc3RJbmRleCA9IG1f
aW5saW5lQ29udGVudC0+Zmlyc3RCb3hJbmRleEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAg
IGlmICghZmlyc3RJbmRleCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBJbmxp
bmVJdGVyYXRvcjo6dGV4dEJveEZvcigqbV9pbmxpbmVDb250ZW50LCAqZmlyc3RJbmRleCk7Ci19
Ci0KLUlubGluZUl0ZXJhdG9yOjpMZWFmQm94SXRlcmF0b3IgTGluZUxheW91dDo6Ym94Rm9yKGNv
bnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlckVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2lu
bGluZUNvbnRlbnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBhdXRvJiBsYXlvdXRCb3gg
PSBtX2JveFRyZWUubGF5b3V0Qm94Rm9yUmVuZGVyZXIocmVuZGVyRWxlbWVudCk7Ci0gICAgYXV0
byBmaXJzdEluZGV4ID0gbV9pbmxpbmVDb250ZW50LT5maXJzdEJveEluZGV4Rm9yTGF5b3V0Qm94
KGxheW91dEJveCk7Ci0gICAgaWYgKCFmaXJzdEluZGV4KQotICAgICAgICByZXR1cm4geyB9Owot
Ci0gICAgcmV0dXJuIElubGluZUl0ZXJhdG9yOjpib3hGb3IoKm1faW5saW5lQ29udGVudCwgKmZp
cnN0SW5kZXgpOwotfQotCi1JbmxpbmVJdGVyYXRvcjo6SW5saW5lQm94SXRlcmF0b3IgTGluZUxh
eW91dDo6Zmlyc3RJbmxpbmVCb3hGb3IoY29uc3QgUmVuZGVySW5saW5lJiByZW5kZXJJbmxpbmUp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2lubGluZUNvbnRlbnQpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICBhdXRvJiBsYXlvdXRCb3ggPSBtX2JveFRyZWUubGF5b3V0Qm94Rm9yUmVuZGVyZXIo
cmVuZGVySW5saW5lKTsKLSAgICBhdXRvKiBib3ggPSBtX2lubGluZUNvbnRlbnQtPmZpcnN0Qm94
Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICByZXR1cm4gSW5saW5lSXRlcmF0b3I6OmlubGluZUJveEZvcigqbV9pbmxpbmVD
b250ZW50LCAqYm94KTsKLX0KLQotSW5saW5lSXRlcmF0b3I6OklubGluZUJveEl0ZXJhdG9yIExp
bmVMYXlvdXQ6OmZpcnN0Um9vdElubGluZUJveCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2lubGlu
ZUNvbnRlbnQgfHwgIW1faW5saW5lQ29udGVudC0+aGFzQ29udGVudCgpKQotICAgICAgICByZXR1
cm4geyB9OwotCi0gICAgcmV0dXJuIElubGluZUl0ZXJhdG9yOjppbmxpbmVCb3hGb3IoKm1faW5s
aW5lQ29udGVudCwgbV9pbmxpbmVDb250ZW50LT5ib3hlc1swXSk7Ci19Ci0KLUlubGluZUl0ZXJh
dG9yOjpMaW5lQm94SXRlcmF0b3IgTGluZUxheW91dDo6Zmlyc3RMaW5lQm94KCkgY29uc3QKLXsK
LSAgICBpZiAoIW1faW5saW5lQ29udGVudCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJl
dHVybiB7IElubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoKCptX2lubGlu
ZUNvbnRlbnQsIDApIH07Ci19Ci0KLUlubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3IgTGlu
ZUxheW91dDo6bGFzdExpbmVCb3goKSBjb25zdAotewotICAgIGlmICghbV9pbmxpbmVDb250ZW50
KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIHsgSW5saW5lSXRlcmF0b3I6Okxp
bmVCb3hJdGVyYXRvck1vZGVyblBhdGgoKm1faW5saW5lQ29udGVudCwgbV9pbmxpbmVDb250ZW50
LT5saW5lcy5pc0VtcHR5KCkgPyAwIDogbV9pbmxpbmVDb250ZW50LT5saW5lcy5zaXplKCkgLSAx
KSB9OwotfQotCi1MYXlvdXRSZWN0IExpbmVMYXlvdXQ6OmZpcnN0SW5saW5lQm94UmVjdChjb25z
dCBSZW5kZXJJbmxpbmUmIHJlbmRlcklubGluZSkgY29uc3QKLXsKLSAgICBhdXRvJiBsYXlvdXRC
b3ggPSBtX2JveFRyZWUubGF5b3V0Qm94Rm9yUmVuZGVyZXIocmVuZGVySW5saW5lKTsKLSAgICBh
dXRvKiBmaXJzdEJveCA9IG1faW5saW5lQ29udGVudC0+Zmlyc3RCb3hGb3JMYXlvdXRCb3gobGF5
b3V0Qm94KTsKLSAgICBpZiAoIWZpcnN0Qm94KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZsaXAgdGhlIGRpc3BsYXkgYm94ZXMgc29v
biBhZnRlciB0aGUgcm9vdCBibG9jawotICAgIC8vIGlzIGZpbmlzaGVkIHNpemluZyBpbiBvbmUg
Z28uCi0gICAgYXV0byBmaXJzdEJveFJlY3QgPSBMYXlvdXQ6OnRvTGF5b3V0UmVjdChmaXJzdEJv
eC0+dmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKSk7Ci0gICAgc3dpdGNoIChyb290
TGF5b3V0Qm94KCkuc3R5bGUoKS53cml0aW5nTW9kZSgpKSB7Ci0gICAgY2FzZSBXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b206Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQ6Ci0gICAg
ICAgIHJldHVybiBmaXJzdEJveFJlY3Q7Ci0gICAgY2FzZSBXcml0aW5nTW9kZTo6UmlnaHRUb0xl
ZnQ6Ci0gICAgICAgIGZpcnN0Qm94UmVjdC5zZXRYKGZsb3coKS53aWR0aCgpIC0gZmlyc3RCb3hS
ZWN0Lm1heFgoKSk7Ci0gICAgICAgIHJldHVybiBmaXJzdEJveFJlY3Q7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmaXJzdEJveFJl
Y3Q7Ci0gICAgfQotfQotCi1MYXlvdXRSZWN0IExpbmVMYXlvdXQ6OmVuY2xvc2luZ0JvcmRlckJv
eFJlY3RGb3IoY29uc3QgUmVuZGVySW5saW5lJiByZW5kZXJJbmxpbmUpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX2lubGluZUNvbnRlbnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyBrZWVwcyB0aGUgZXhpc3Rpbmcgb3V0cHV0LgotICAgIGlmICghbV9pbmxpbmVDb250
ZW50LT5oYXNDb250ZW50KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gTGF5
b3V0OjpCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChtX2lubGluZUZvcm1hdHRpbmdTdGF0ZS5i
b3hHZW9tZXRyeShtX2JveFRyZWUubGF5b3V0Qm94Rm9yUmVuZGVyZXIocmVuZGVySW5saW5lKSkp
OwotfQotCi1MYXlvdXRSZWN0IExpbmVMYXlvdXQ6OnZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3hS
ZWN0Rm9yKGNvbnN0IFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lKSBjb25zdAotewotICAgIGlm
ICghbV9pbmxpbmVDb250ZW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byYgbGF5
b3V0Qm94ID0gbV9ib3hUcmVlLmxheW91dEJveEZvclJlbmRlcmVyKHJlbmRlcklubGluZSk7Ci0K
LSAgICBMYXlvdXRSZWN0IHJlc3VsdDsKLSAgICBtX2lubGluZUNvbnRlbnQtPnRyYXZlcnNlTm9u
Um9vdElubGluZUJveGVzKGxheW91dEJveCwgWyZdKGF1dG8mIGlubGluZUJveCkgewotICAgICAg
ICByZXN1bHQudW5pdGUoTGF5b3V0Ojp0b0xheW91dFJlY3QoaW5saW5lQm94Lmlua092ZXJmbG93
KCkpKTsKLSAgICB9KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVZlY3RvcjxGbG9hdFJl
Y3Q+IExpbmVMYXlvdXQ6OmNvbGxlY3RJbmxpbmVCb3hSZWN0cyhjb25zdCBSZW5kZXJJbmxpbmUm
IHJlbmRlcklubGluZSkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5saW5lQ29udGVudCkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IG1fYm94VHJlZS5sYXlvdXRC
b3hGb3JSZW5kZXJlcihyZW5kZXJJbmxpbmUpOwotCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVz
dWx0OwotICAgIG1faW5saW5lQ29udGVudC0+dHJhdmVyc2VOb25Sb290SW5saW5lQm94ZXMobGF5
b3V0Qm94LCBbJl0oYXV0byYgaW5saW5lQm94KSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoaW5s
aW5lQm94LnZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkpOwotICAgIH0pOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotY29uc3QgUmVuZGVyT2JqZWN0JiBMaW5lTGF5b3V0Ojpy
ZW5kZXJlckZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkJveCYgbGF5b3V0Qm94KSBjb25zdAot
ewotICAgIHJldHVybiBtX2JveFRyZWUucmVuZGVyZXJGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsK
LX0KLQotY29uc3QgTGF5b3V0OjpDb250YWluZXJCb3gmIExpbmVMYXlvdXQ6OnJvb3RMYXlvdXRC
b3goKSBjb25zdAotewotICAgIHJldHVybiBtX2JveFRyZWUucm9vdExheW91dEJveCgpOwotfQot
Ci1MYXlvdXQ6OkNvbnRhaW5lckJveCYgTGluZUxheW91dDo6cm9vdExheW91dEJveCgpCi17Ci0g
ICAgcmV0dXJuIG1fYm94VHJlZS5yb290TGF5b3V0Qm94KCk7Ci19Ci0KLXN0YXRpYyBMYXlvdXRQ
b2ludCBmbGlwcGVkQ29udGVudE9mZnNldElmTmVlZGVkKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
cm9vdCwgY29uc3QgUmVuZGVyQm94JiBjaGlsZFJlbmRlcmVyLCBMYXlvdXRQb2ludCBjb250ZW50
T2Zmc2V0KQotewotICAgIGlmIChyb290LnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIHJvb3QuZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQoY2hp
bGRSZW5kZXJlciwgY29udGVudE9mZnNldCk7Ci0gICAgcmV0dXJuIGNvbnRlbnRPZmZzZXQ7Ci19
Ci0KLXZvaWQgTGluZUxheW91dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKLXsKLSAgICBpZiAoIW1faW5saW5lQ29udGVudCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwot
Ci0gICAgYXV0byBzaG91bGRQYWludEZvclBoYXNlID0gWyZdIHsKLSAgICAgICAgc3dpdGNoIChw
YWludFBoYXNlKSB7Ci0gICAgICAgIGNhc2UgUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZDoKLSAgICAg
ICAgY2FzZSBQYWludFBoYXNlOjpFdmVudFJlZ2lvbjoKLSAgICAgICAgY2FzZSBQYWludFBoYXNl
OjpUZXh0Q2xpcDoKLSAgICAgICAgY2FzZSBQYWludFBoYXNlOjpTZWxlY3Rpb246Ci0gICAgICAg
IGNhc2UgUGFpbnRQaGFzZTo6T3V0bGluZToKLSAgICAgICAgY2FzZSBQYWludFBoYXNlOjpDaGls
ZE91dGxpbmVzOgotICAgICAgICBjYXNlIFBhaW50UGhhc2U6OlNlbGZPdXRsaW5lOgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKCFzaG91bGRQYWludEZvclBoYXNl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gZGFtYWdlUmVjdCA9IHBhaW50SW5mby5y
ZWN0OwotICAgIGRhbWFnZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0KLSAgICBhdXRvIGhh
c0RhbWFnZSA9IFsmXShhdXRvJiBib3gpIHsKLSAgICAgICAgaWYgKGJveC5zdHlsZSgpLnZpc2li
aWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBhdXRvIHJlY3QgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KGJveC5pbmtPdmVyZmxv
dygpKTsKLSAgICAgICAgZmxvdygpLmZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHRlc3QgZm9yIGludGVyc2VjdGlvbiBidXQgaG9yaXpvbnRh
bCBpbmsgb3ZlcmZsb3cgaXMgbWlzY29tcHV0ZWQgaW4gYSBmZXcgY2FzZXMgKGxpa2Ugd2l0aCBu
ZWdhdGl2ZSBsZXR0ZXItc3BhY2luZykuCi0gICAgICAgIHJldHVybiBkYW1hZ2VSZWN0Lm1heFko
KSA+IHJlY3QueSgpICYmIGRhbWFnZVJlY3QueSgpIDwgcmVjdC5tYXhZKCk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gc2hvdWxkUGFpbnRCb3hGb3JQaGFzZSA9IFsmXShhdXRvJiBib3gpIHsKLSAgICAg
ICAgc3dpdGNoIChwYWludFBoYXNlKSB7Ci0gICAgICAgIGNhc2UgUGFpbnRQaGFzZTo6Q2hpbGRP
dXRsaW5lczogcmV0dXJuIGJveC5pc05vblJvb3RJbmxpbmVCb3goKTsKLSAgICAgICAgY2FzZSBQ
YWludFBoYXNlOjpTZWxmT3V0bGluZTogcmV0dXJuIGJveC5pc1Jvb3RJbmxpbmVCb3goKTsKLSAg
ICAgICAgY2FzZSBQYWludFBoYXNlOjpPdXRsaW5lOiByZXR1cm4gYm94LmlzSW5saW5lQm94KCk7
Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IExpc3RIYXNoU2V0PFJlbmRlcklubGluZSo+IG91dGxpbmVPYmplY3RzOwotCi0gICAgZm9yIChh
dXRvJiBib3ggOiBtX2lubGluZUNvbnRlbnQtPmJveGVzRm9yUmVjdChkYW1hZ2VSZWN0KSkgewot
ICAgICAgICBpZiAoIXNob3VsZFBhaW50Qm94Rm9yUGhhc2UoYm94KSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGlmIChib3guaXNMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGlmIChib3guaXNJbmxpbmVCb3goKSkgewotICAgICAgICAgICAg
aWYgKCFoYXNEYW1hZ2UoYm94KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgUGFpbnRJbmZvIGlubGluZUJveFBhaW50SW5mbyhwYWludEluZm8pOwotICAgICAgICAg
ICAgaW5saW5lQm94UGFpbnRJbmZvLnBoYXNlID0gcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlOjpD
aGlsZE91dGxpbmVzID8gUGFpbnRQaGFzZTo6T3V0bGluZSA6IHBhaW50UGhhc2U7Ci0gICAgICAg
ICAgICBpbmxpbmVCb3hQYWludEluZm8ub3V0bGluZU9iamVjdHMgPSAmb3V0bGluZU9iamVjdHM7
Ci0KLSAgICAgICAgICAgIElubGluZUJveFBhaW50ZXIgcGFpbnRlcigqbV9pbmxpbmVDb250ZW50
LCBib3gsIGlubGluZUJveFBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgcGFp
bnRlci5wYWludCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoYm94LnRleHQoKSkgewotICAgICAgICAgICAgaWYgKCFib3gudGV4dCgpLT5sZW5ndGgo
KSB8fCAhaGFzRGFtYWdlKGJveCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIFRleHRCb3hQYWludGVyIHBhaW50ZXIoKm1faW5saW5lQ29udGVudCwgYm94LCBwYWlu
dEluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICAgICAgICAgIHBhaW50ZXIucGFpbnQoKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8mIHJlbmRlcmVy
ID0gbV9ib3hUcmVlLnJlbmRlcmVyRm9yTGF5b3V0Qm94KGJveC5sYXlvdXRCb3goKSk7IGlzPFJl
bmRlckJveD4ocmVuZGVyZXIpICYmIHJlbmRlcmVyLmlzUmVwbGFjZWRPcklubGluZUJsb2NrKCkp
IHsKLSAgICAgICAgICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIpOwotICAgICAgICAgICAgaWYgKCFyZW5kZXJCb3guaGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlckJveCkpCi0gICAgICAg
ICAgICAgICAgcmVuZGVyQm94LnBhaW50QXNJbmxpbmVCbG9jayhwYWludEluZm8sIGZsaXBwZWRD
b250ZW50T2Zmc2V0SWZOZWVkZWQoZmxvdygpLCByZW5kZXJCb3gsIHBhaW50T2Zmc2V0KSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIHJlbmRlcklubGluZSA6IG91dGxpbmVP
YmplY3RzKQotICAgICAgICByZW5kZXJJbmxpbmUtPnBhaW50T3V0bGluZShwYWludEluZm8sIHBh
aW50T2Zmc2V0KTsKLX0KLQotc3RhdGljIExheW91dFJlY3QgZmxpcHBlZFJlY3RGb3JXcml0aW5n
TW9kZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIHJvb3QsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBhdXRvIGZsaXBwZWRSZWN0ID0gTGF5b3V0UmVjdCB7IHJlY3QgfTsKLSAgICByb290
LmZsaXBGb3JXcml0aW5nTW9kZShmbGlwcGVkUmVjdCk7Ci0gICAgcmV0dXJuIGZsaXBwZWRSZWN0
OwotfQotCi1ib29sIExpbmVMYXlvdXQ6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2Nh
dGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAgICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBI
aXRUZXN0Rm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2lu
bGluZUNvbnRlbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gaGl0VGVzdEJv
dW5kaW5nQm94ID0gbG9jYXRpb25JbkNvbnRhaW5lci5ib3VuZGluZ0JveCgpOwotICAgIGhpdFRl
c3RCb3VuZGluZ0JveC5tb3ZlQnkoLWFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICBhdXRvIGJveFJh
bmdlID0gbV9pbmxpbmVDb250ZW50LT5ib3hlc0ZvclJlY3QoaGl0VGVzdEJvdW5kaW5nQm94KTsK
LQotICAgIGZvciAoYXV0byYgYm94IDogbWFrZVJldmVyc2VkUmFuZ2UoYm94UmFuZ2UpKSB7Ci0g
ICAgICAgIGF1dG8mIHJlbmRlcmVyID0gbV9ib3hUcmVlLnJlbmRlcmVyRm9yTGF5b3V0Qm94KGJv
eC5sYXlvdXRCb3goKSk7Ci0KLSAgICAgICAgaWYgKCFib3guaXNSb290SW5saW5lQm94KCkgJiYg
aXM8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckxh
eWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGJveC5pc0F0b21pY0lubGluZUxldmVsQm94
KCkpIHsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlci5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwg
bG9jYXRpb25JbkNvbnRhaW5lciwgZmxpcHBlZENvbnRlbnRPZmZzZXRJZk5lZWRlZChmbG93KCks
IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLCBhY2N1bXVsYXRlZE9mZnNldCkpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvIGJveFJlY3QgPSBmbGlwcGVkUmVjdEZvcldyaXRpbmdNb2RlKGZs
b3coKSwgYm94LnZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkpOwotICAgICAgICBi
b3hSZWN0Lm1vdmVCeShhY2N1bXVsYXRlZE9mZnNldCk7Ci0KLSAgICAgICAgaWYgKCFsb2NhdGlv
bkluQ29udGFpbmVyLmludGVyc2VjdHMoYm94UmVjdCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBhdXRvJiBlbGVtZW50UmVuZGVyZXIgPSBpczxSZW5kZXJFbGVtZW50PihyZW5k
ZXJlcikgPyBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikgOiAqcmVuZGVyZXIucGFy
ZW50KCk7Ci0gICAgICAgIGlmICghZWxlbWVudFJlbmRlcmVyLnZpc2libGVUb0hpdFRlc3Rpbmco
cmVxdWVzdCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIHJlbmRl
cmVyLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbG93KCkuZmxpcEZvcldyaXRpbmdNb2Rl
KGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9m
ZnNldCkpKTsKLSAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0
KHJlbmRlcmVyLm5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIs
IGJveFJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBMaW5lTGF5b3V0Ojpy
ZWxlYXNlQ2FjaGVzKFJlbmRlclZpZXcmIHZpZXcpCi17Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdy
YXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgcmVuZGVy
ZXIgOiBkZXNjZW5kYW50c09mVHlwZTxSZW5kZXJCbG9ja0Zsb3c+KHZpZXcpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiBsaW5lTGF5b3V0ID0gcmVuZGVyZXIubW9kZXJuTGluZUxheW91dCgpKQotICAg
ICAgICAgICAgbGluZUxheW91dC0+cmVsZWFzZUNhY2hlcygpOwotICAgIH0KLX0KLQotdm9pZCBM
aW5lTGF5b3V0OjpyZWxlYXNlQ2FjaGVzKCkKLXsKLSAgICBtX2lubGluZUZvcm1hdHRpbmdTdGF0
ZS5pbmxpbmVJdGVtcygpLmNsZWFyKCk7Ci0gICAgaWYgKG1faW5saW5lQ29udGVudCkKLSAgICAg
ICAgbV9pbmxpbmVDb250ZW50LT5yZWxlYXNlQ2FjaGVzKCk7Ci19Ci0KLXZvaWQgTGluZUxheW91
dDo6Y2xlYXJJbmxpbmVDb250ZW50KCkKLXsKLSAgICBpZiAoIW1faW5saW5lQ29udGVudCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1faW5saW5lQ29udGVudC0+Y2xlYXJBbmREZXRhY2goKTsKLSAg
ICBtX2lubGluZUNvbnRlbnQgPSBudWxscHRyOwotfQotCi1MYXlvdXQ6OklubGluZURhbWFnZSYg
TGluZUxheW91dDo6ZW5zdXJlTGluZURhbWFnZSgpCi17Ci0gICAgaWYgKCFtX2xpbmVEYW1hZ2Up
Ci0gICAgICAgIG1fbGluZURhbWFnZSA9IG1ha2VVbmlxdWU8TGF5b3V0OjpJbmxpbmVEYW1hZ2U+
KCk7Ci0gICAgcmV0dXJuICptX2xpbmVEYW1hZ2U7Ci19Ci0KLSNpZiBFTkFCTEUoVFJFRV9ERUJV
R0dJTkcpCi12b2lkIExpbmVMYXlvdXQ6Om91dHB1dExpbmVUcmVlKFdURjo6VGV4dFN0cmVhbSYg
c3RyZWFtLCBzaXplX3QgZGVwdGgpIGNvbnN0Ci17Ci0gICAgc2hvd0lubGluZUNvbnRlbnQoc3Ry
ZWFtLCAqbV9pbmxpbmVDb250ZW50LCBkZXB0aCk7Ci19Ci0jZW5kaWYKLQotfQotfQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzExNDE5Y2YyNmU1YjgxZGI3NzI2ZjQyYzJjMGNhMDYyYWFmZDI4OS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJJbmxpbmVJdGVyYXRvcklubGluZUJveC5oIgotI2luY2x1ZGUgIklubGluZUl0
ZXJhdG9yTGluZUJveC5oIgotI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yVGV4dEJveC5oIgotI2lu
Y2x1ZGUgIkxheW91dEludGVncmF0aW9uQm94VHJlZS5oIgotI2luY2x1ZGUgIkxheW91dFBvaW50
LmgiCi0jaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3RFbnVt
cy5oIgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSGl0VGVzdExvY2F0aW9uOwotY2xhc3Mg
SGl0VGVzdFJlcXVlc3Q7Ci1jbGFzcyBIaXRUZXN0UmVzdWx0OwotY2xhc3MgUmVuZGVyQmxvY2tG
bG93OwotY2xhc3MgUmVuZGVyQm94OwotY2xhc3MgUmVuZGVyQm94TW9kZWxPYmplY3Q7Ci1jbGFz
cyBSZW5kZXJJbmxpbmU7Ci1jbGFzcyBSZW5kZXJMaW5lQnJlYWs7Ci1jbGFzcyBSZW5kZXJMaXN0
SXRlbTsKLWNsYXNzIFJlbmRlckxpc3RNYXJrZXI7Ci1jbGFzcyBSZW5kZXJUYWJsZTsKLXN0cnVj
dCBQYWludEluZm87Ci0KLW5hbWVzcGFjZSBMYXlvdXQgewotY2xhc3MgSW5saW5lRGFtYWdlOwot
fQotCi1uYW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRpb24gewotCi1zdHJ1Y3QgSW5saW5lQ29udGVu
dDsKLQotY2xhc3MgTGluZUxheW91dCA6IHB1YmxpYyBDYW5NYWtlQ2hlY2tlZFB0ciB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgTGluZUxheW91dChSZW5kZXJC
bG9ja0Zsb3cmKTsKLSAgICB+TGluZUxheW91dCgpOwotCi0gICAgc3RhdGljIFJlbmRlckJsb2Nr
RmxvdyogYmxvY2tDb250YWluZXIoUmVuZGVyT2JqZWN0Jik7Ci0gICAgc3RhdGljIExpbmVMYXlv
dXQqIGNvbnRhaW5pbmcoUmVuZGVyT2JqZWN0Jik7Ci0gICAgc3RhdGljIGNvbnN0IExpbmVMYXlv
dXQqIGNvbnRhaW5pbmcoY29uc3QgUmVuZGVyT2JqZWN0Jik7Ci0KLSAgICBzdGF0aWMgYm9vbCBp
c0VuYWJsZWQoKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tG
bG93Jik7Ci0gICAgc3RhdGljIGJvb2wgY2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmLCBTdHlsZURpZmZlcmVuY2UpOwotICAgIHN0YXRpYyBib29sIGNhblVz
ZUZvckFmdGVySW5saW5lQm94U3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVySW5saW5lJiwgU3R5bGVE
aWZmZXJlbmNlKTsKLQotICAgIGJvb2wgc2hvdWxkU3dpdGNoVG9MZWdhY3lPbkludmFsaWRhdGlv
bigpIGNvbnN0OwotCi0gICAgdm9pZCB1cGRhdGVGb3JtYXR0aW5nUm9vdEdlb21ldHJ5QW5kSW52
YWxpZGF0ZSgpOwotICAgIHZvaWQgdXBkYXRlUmVwbGFjZWREaW1lbnNpb25zKGNvbnN0IFJlbmRl
ckJveCYpOwotICAgIHZvaWQgdXBkYXRlSW5saW5lQmxvY2tEaW1lbnNpb25zKGNvbnN0IFJlbmRl
ckJsb2NrJik7Ci0gICAgdm9pZCB1cGRhdGVMaW5lQnJlYWtCb3hEaW1lbnNpb25zKGNvbnN0IFJl
bmRlckxpbmVCcmVhayYpOwotICAgIHZvaWQgdXBkYXRlSW5saW5lQm94RGltZW5zaW9ucyhjb25z
dCBSZW5kZXJJbmxpbmUmKTsKLSAgICB2b2lkIHVwZGF0ZUlubGluZVRhYmxlRGltZW5zaW9ucyhj
b25zdCBSZW5kZXJUYWJsZSYpOwotICAgIHZvaWQgdXBkYXRlTGlzdEl0ZW1EaW1lbnNpb25zKGNv
bnN0IFJlbmRlckxpc3RJdGVtJik7Ci0gICAgdm9pZCB1cGRhdGVMaXN0TWFya2VyRGltZW5zaW9u
cyhjb25zdCBSZW5kZXJMaXN0TWFya2VyJik7Ci0gICAgdm9pZCB1cGRhdGVTdHlsZShjb25zdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJiBvbGRTdHlsZSk7Ci0KLSAg
ICBzdGQ6OnBhaXI8TGF5b3V0VW5pdCwgTGF5b3V0VW5pdD4gY29tcHV0ZUludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMoKTsKLQotICAgIHZvaWQgbGF5b3V0KCk7Ci0gICAgdm9pZCBwYWludChQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwotICAgIGJvb2wgaGl0VGVz
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rp
b24pOwotICAgIHZvaWQgYWRqdXN0Rm9yUGFnaW5hdGlvbigpOwotCi0gICAgdm9pZCBjb2xsZWN0
T3ZlcmZsb3coKTsKLSAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3hSZWN0
Rm9yKGNvbnN0IFJlbmRlcklubGluZSYpIGNvbnN0OwotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGNv
bGxlY3RJbmxpbmVCb3hSZWN0cyhjb25zdCBSZW5kZXJJbmxpbmUmKSBjb25zdDsKLQotICAgIGJv
b2wgaXNQYWdpbmF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFnaW5hdGVkQ29udGVudDsgfQot
ICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKLSAgICBzaXplX3Qg
bGluZUNvdW50KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNWaXN1YWxPdmVyZmxvdygpIGNvbnN0Owot
ICAgIExheW91dFVuaXQgZmlyc3RMaW5lUGh5c2ljYWxCYXNlbGluZSgpIGNvbnN0OwotICAgIExh
eW91dFVuaXQgbGFzdExpbmVMb2dpY2FsQmFzZWxpbmUoKSBjb25zdDsKLSAgICBMYXlvdXRSZWN0
IGZpcnN0SW5saW5lQm94UmVjdChjb25zdCBSZW5kZXJJbmxpbmUmKSBjb25zdDsKLSAgICBMYXlv
dXRSZWN0IGVuY2xvc2luZ0JvcmRlckJveFJlY3RGb3IoY29uc3QgUmVuZGVySW5saW5lJikgY29u
c3Q7Ci0KLSAgICBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yIHRleHRCb3hlc0Zvcihj
b25zdCBSZW5kZXJUZXh0JikgY29uc3Q7Ci0gICAgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVy
YXRvciBib3hGb3IoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0OwotICAgIElubGluZUl0ZXJh
dG9yOjpJbmxpbmVCb3hJdGVyYXRvciBmaXJzdElubGluZUJveEZvcihjb25zdCBSZW5kZXJJbmxp
bmUmKSBjb25zdDsKLSAgICBJbmxpbmVJdGVyYXRvcjo6SW5saW5lQm94SXRlcmF0b3IgZmlyc3RS
b290SW5saW5lQm94KCkgY29uc3Q7Ci0gICAgSW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRv
ciBmaXJzdExpbmVCb3goKSBjb25zdDsKLSAgICBJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJh
dG9yIGxhc3RMaW5lQm94KCkgY29uc3Q7Ci0KLSAgICBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyRm9yTGF5b3V0Qm94KGNvbnN0IExheW91dDo6Qm94JikgY29uc3Q7Ci0gICAgY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBmbG93KCkgY29uc3QgeyByZXR1cm4gbV9ib3hUcmVlLmZsb3coKTsgfQot
ICAgIFJlbmRlckJsb2NrRmxvdyYgZmxvdygpIHsgcmV0dXJuIG1fYm94VHJlZS5mbG93KCk7IH0K
LQotICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDYWNoZXMoUmVuZGVyVmlldyYpOwotCi0jaWYgRU5B
QkxFKFRSRUVfREVCVUdHSU5HKQotICAgIHZvaWQgb3V0cHV0TGluZVRyZWUoV1RGOjpUZXh0U3Ry
ZWFtJiwgc2l6ZV90IGRlcHRoKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHZvaWQg
cHJlcGFyZUxheW91dFN0YXRlKCk7Ci0gICAgdm9pZCBwcmVwYXJlRmxvYXRpbmdTdGF0ZSgpOwot
ICAgIHZvaWQgY29uc3RydWN0Q29udGVudCgpOwotICAgIElubGluZUNvbnRlbnQmIGVuc3VyZUlu
bGluZUNvbnRlbnQoKTsKLSAgICB2b2lkIHVwZGF0ZUxheW91dEJveERpbWVuc2lvbnMoY29uc3Qg
UmVuZGVyQm94Jik7Ci0KLSAgICBMYXlvdXQ6OklubGluZURhbWFnZSYgZW5zdXJlTGluZURhbWFn
ZSgpOwotCi0gICAgY29uc3QgTGF5b3V0OjpDb250YWluZXJCb3gmIHJvb3RMYXlvdXRCb3goKSBj
b25zdDsKLSAgICBMYXlvdXQ6OkNvbnRhaW5lckJveCYgcm9vdExheW91dEJveCgpOwotICAgIHZv
aWQgY2xlYXJJbmxpbmVDb250ZW50KCk7Ci0gICAgdm9pZCByZWxlYXNlQ2FjaGVzKCk7Ci0KLSAg
ICBCb3hUcmVlIG1fYm94VHJlZTsKLSAgICBMYXlvdXQ6OkxheW91dFN0YXRlIG1fbGF5b3V0U3Rh
dGU7Ci0gICAgTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIG1faW5saW5lRm9ybWF0dGlu
Z1N0YXRlOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIExheW91dFN0YXRl
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXlvdXQ6OklubGluZURhbWFnZT4gbV9saW5lRGFtYWdl
OwotICAgIFJlZlB0cjxJbmxpbmVDb250ZW50PiBtX2lubGluZUNvbnRlbnQ7Ci0gICAgYm9vbCBt
X2lzUGFnaW5hdGVkQ29udGVudCB7IGZhbHNlIH07Ci19OwotCi19Ci19Ci0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0
aW9uUGFnaW5hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNjQwNWYwNzE1MDhkMTI3ZmRlZTA5MTE3NDIwNzJlY2QwZjFkMGNiOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDIwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgiCi0KLSNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0j
aW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVz
cGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7Ci0KLXN0cnVjdCBTdHJ1dCB7Ci0gICAgdW5zaWduZWQg
bGluZUJyZWFrOwotICAgIGZsb2F0IG9mZnNldDsKLX07Ci0KLXN0cnVjdCBQYWdpbmF0ZWRMaW5l
IHsKLSAgICBMYXlvdXRVbml0IHRvcDsKLSAgICBMYXlvdXRVbml0IGhlaWdodDsKLX07Ci11c2lu
ZyBQYWdpbmF0ZWRMaW5lcyA9IFZlY3RvcjxQYWdpbmF0ZWRMaW5lLCAyMD47Ci0KLXN0YXRpYyBQ
YWdpbmF0ZWRMaW5lIGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYsIElubGluZUNvbnRlbnQ6OkxpbmVzJiBsaW5lcywgdW5zaWduZWQgbGlu
ZUluZGV4LCBWZWN0b3I8U3RydXQ+JiBzdHJ1dHMpCi17Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXQg
PSAwOwotICAgIGZvciAoYXV0byYgc3RydXQgOiBzdHJ1dHMpIHsKLSAgICAgICAgaWYgKHN0cnV0
LmxpbmVCcmVhayA+IGxpbmVJbmRleCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBvZmZz
ZXQgKz0gc3RydXQub2Zmc2V0OwotICAgIH0KLSAgICBhdXRvIG92ZXJmbG93UmVjdCA9IExheW91
dFJlY3QobGluZXNbbGluZUluZGV4XS5pbmtPdmVyZmxvdygpKTsKLSAgICByZXR1cm4geyBvdmVy
Zmxvd1JlY3QueSgpICsgb2Zmc2V0LCBvdmVyZmxvd1JlY3QuaGVpZ2h0KCkgfTsKLX0KLQotc3Rh
dGljIHVuc2lnbmVkIGNvbXB1dGVMaW5lQnJlYWtJbmRleCh1bnNpZ25lZCBicmVha0NhbmRpZGF0
ZSwgdW5zaWduZWQgbGluZUNvdW50LCBpbnQgb3JwaGFuc05lZWRlZCwgaW50IHdpZG93c05lZWRl
ZCwKLSAgICBjb25zdCBWZWN0b3I8U3RydXQ+JiBzdHJ1dHMpCi17Ci0gICAgLy8gRmlyc3QgbGlu
ZSBkb2VzIG5vdCBmaXQgdGhlIGN1cnJlbnQgcGFnZS4KLSAgICBpZiAoIWJyZWFrQ2FuZGlkYXRl
KQotICAgICAgICByZXR1cm4gYnJlYWtDYW5kaWRhdGU7Ci0gICAgCi0gICAgaW50IHdpZG93c09u
VGhlTmV4dFBhZ2UgPSBsaW5lQ291bnQgLSBicmVha0NhbmRpZGF0ZTsKLSAgICBpZiAod2lkb3dz
TmVlZGVkIDw9IHdpZG93c09uVGhlTmV4dFBhZ2UpCi0gICAgICAgIHJldHVybiBicmVha0NhbmRp
ZGF0ZTsKLSAgICAvLyBPbmx5IGJyZWFrIGFmdGVyIHRoZSBmaXJzdCBsaW5lIHdpdGggd2lkb3dz
LgotICAgIGF1dG8gbGluZUJyZWFrID0gc3RkOjptYXg8aW50PihsaW5lQ291bnQgLSB3aWRvd3NO
ZWVkZWQsIDEpOwotICAgIGlmIChvcnBoYW5zTmVlZGVkID4gbGluZUJyZWFrKQotICAgICAgICBy
ZXR1cm4gYnJlYWtDYW5kaWRhdGU7Ci0gICAgLy8gQnJlYWsgb24gY3VycmVudCBwYWdlIG9ubHku
Ci0gICAgaWYgKHN0cnV0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBsaW5lQnJlYWs7Ci0g
ICAgQVNTRVJUKHN0cnV0cy5sYXN0KCkubGluZUJyZWFrICsgMSA8IGxpbmVDb3VudCk7Ci0gICAg
cmV0dXJuIHN0ZDo6bWF4PHVuc2lnbmVkPihzdHJ1dHMubGFzdCgpLmxpbmVCcmVhayArIDEsIGxp
bmVCcmVhayk7Ci19Ci0KLXN0YXRpYyBMYXlvdXRVbml0IGNvbXB1dGVPZmZzZXRBZnRlckxpbmVC
cmVhayhMYXlvdXRVbml0IGxpbmVCcmVha1Bvc2l0aW9uLCBib29sIGlzRmlyc3RMaW5lLCBib29s
IGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKLXsK
LSAgICAvLyBObyBvZmZzZXQgZm9yIHRvcCBvZiB0aGUgcGFnZSBsaW5lcyB1bmxlc3Mgd2lkb3dz
IHB1c2hlZCB0aGUgbGluZSBicmVhay4KLSAgICBMYXlvdXRVbml0IG9mZnNldCA9IGlzRmlyc3RM
aW5lID8gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgOiAwX2x1OwotICAgIGlmIChhdFRo
ZVRvcE9mQ29sdW1uT3JQYWdlKQotICAgICAgICByZXR1cm4gb2Zmc2V0OwotICAgIHJldHVybiBv
ZmZzZXQgKyBmbG93LnBhZ2VSZW1haW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmVCcmVh
a1Bvc2l0aW9uLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1ZGVQYWdlQm91bmRhcnkpOwotfQotCi1z
dGF0aWMgdm9pZCBzZXRQYWdlQnJlYWtGb3JMaW5lKHVuc2lnbmVkIGxpbmVCcmVha0luZGV4LCBQ
YWdpbmF0ZWRMaW5lcyYgbGluZXMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgVmVjdG9yPFN0cnV0
PiYgc3RydXRzLAotICAgIGJvb2wgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSwgYm9vbCBsaW5lRG9l
c05vdEZpdCkKLXsKLSAgICBhdXRvIGxpbmUgPSBsaW5lcy5hdChsaW5lQnJlYWtJbmRleCk7Ci0g
ICAgYXV0byByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gZmxvdy5wYWdlUmVtYWluaW5nTG9naWNh
bEhlaWdodEZvck9mZnNldChsaW5lLnRvcCwgUmVuZGVyQmxvY2tGbG93OjpFeGNsdWRlUGFnZUJv
dW5kYXJ5KTsKLSAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKLSAgICBhdXRvIGZpcnN0
TGluZURvZXNOb3RGaXQgPSAhbGluZUJyZWFrSW5kZXggJiYgbGluZS5oZWlnaHQgPCBmbG93LnBh
Z2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wKTsKLSAgICBhdXRvIG1vdmVPcnBoYW5U
b05leHRDb2x1bW4gPSBsaW5lRG9lc05vdEZpdCAmJiAhc3R5bGUuaGFzQXV0b09ycGhhbnMoKSAm
JiBzdHlsZS5vcnBoYW5zKCkgPiAoc2hvcnQpbGluZUJyZWFrSW5kZXg7Ci0gICAgaWYgKGZpcnN0
TGluZURvZXNOb3RGaXQgfHwgbW92ZU9ycGhhblRvTmV4dENvbHVtbikgewotICAgICAgICBhdXRv
IGZpcnN0TGluZSA9IGxpbmVzLmZpcnN0KCk7Ci0gICAgICAgIGF1dG8gZmlyc3RMaW5lVXBwZXJP
dmVyaGFuZyA9IHN0ZDo6bWF4KExheW91dFVuaXQoLWZpcnN0TGluZS50b3ApLCAwX2x1KTsKLSAg
ICAgICAgZmxvdy5zZXRQYWdpbmF0aW9uU3RydXQobGluZS50b3AgKyByZW1haW5pbmdMb2dpY2Fs
SGVpZ2h0ICsgZmlyc3RMaW5lVXBwZXJPdmVyaGFuZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UpCi0gICAgICAgIGZsb3cuc2V0UGFnZUJy
ZWFrKGxpbmUudG9wLCBsaW5lLmhlaWdodCk7Ci0gICAgZWxzZQotICAgICAgICBmbG93LnNldFBh
Z2VCcmVhayhsaW5lLnRvcCwgbGluZS5oZWlnaHQgLSByZW1haW5pbmdMb2dpY2FsSGVpZ2h0KTsK
LSAgICBzdHJ1dHMuYXBwZW5kKHsgbGluZUJyZWFrSW5kZXgsIGNvbXB1dGVPZmZzZXRBZnRlckxp
bmVCcmVhayhsaW5lc1tsaW5lQnJlYWtJbmRleF0udG9wLCAhbGluZUJyZWFrSW5kZXgsIGF0VGhl
VG9wT2ZDb2x1bW5PclBhZ2UsIGZsb3cpIH0pOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVNaW5p
bXVtUGFnZUhlaWdodChSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IElubGluZUNvbnRlbnQm
IGlubGluZUNvbnRlbnQsIHVuc2lnbmVkIGxpbmVDb3VudCkKLXsKLSAgICBhdXRvJiBzdHlsZSA9
IGZsb3cuc3R5bGUoKTsKLSAgICBhdXRvIHdpZG93cyA9IHN0eWxlLmhhc0F1dG9XaWRvd3MoKSA/
IDEgOiBzdGQ6Om1heDxpbnQ+KHN0eWxlLndpZG93cygpLCAxKTsKLSAgICBhdXRvIG9ycGhhbnMg
PSBzdHlsZS5oYXNBdXRvT3JwaGFucygpID8gMSA6IHN0ZDo6bWF4PGludD4oc3R5bGUub3JwaGFu
cygpLCAxKTsKLSAgICBhdXRvIG1pbmltdW1MaW5lQ291bnQgPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
c3RkOjptYXgod2lkb3dzLCBvcnBoYW5zKSwgbGluZUNvdW50KTsKLSAgICBmbG93LnVwZGF0ZU1p
bmltdW1QYWdlSGVpZ2h0KDAsIExheW91dFVuaXQoaW5saW5lQ29udGVudC5saW5lc1ttaW5pbXVt
TGluZUNvdW50IC0gMV0ubGluZUJveEJvdHRvbSgpKSk7Ci19Ci0KLXN0YXRpYyBSZWY8SW5saW5l
Q29udGVudD4gbWFrZUFkanVzdGVkQ29udGVudChjb25zdCBJbmxpbmVDb250ZW50JiBpbmxpbmVD
b250ZW50LCBWZWN0b3I8ZmxvYXQ+IGFkanVzdG1lbnRzKQotewotICAgIGF1dG8gbW92ZVZlcnRp
Y2FsbHkgPSBbXShGbG9hdFJlY3QgcmVjdCwgZmxvYXQgb2Zmc2V0KSB7Ci0gICAgICAgIHJlY3Qu
bW92ZShGbG9hdFNpemUoMCwgb2Zmc2V0KSk7Ci0gICAgICAgIHJldHVybiByZWN0OwotICAgIH07
Ci0KLSAgICBhdXRvIGFkanVzdGVkTGluZSA9IFsmXShjb25zdCBMaW5lJiBsaW5lLCBmbG9hdCBv
ZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gTGluZSB7Ci0gICAgICAgICAgICBsaW5lLmZp
cnN0Qm94SW5kZXgoKSwKLSAgICAgICAgICAgIGxpbmUuYm94Q291bnQoKSwKLSAgICAgICAgICAg
IG1vdmVWZXJ0aWNhbGx5KHsgRmxvYXRQb2ludCB7IGxpbmUubGluZUJveExlZnQoKSwgbGluZS5s
aW5lQm94VG9wKCkgfSwgRmxvYXRQb2ludCB7IGxpbmUubGluZUJveFJpZ2h0KCksIGxpbmUubGlu
ZUJveEJvdHRvbSgpIH0gfSwgb2Zmc2V0KSwKLSAgICAgICAgICAgIGxpbmUuZW5jbG9zaW5nQ29u
dGVudFRvcCgpICsgb2Zmc2V0LAotICAgICAgICAgICAgbGluZS5lbmNsb3NpbmdDb250ZW50Qm90
dG9tKCkgKyBvZmZzZXQsCi0gICAgICAgICAgICBtb3ZlVmVydGljYWxseShsaW5lLnNjcm9sbGFi
bGVPdmVyZmxvdygpLCBvZmZzZXQpLAotICAgICAgICAgICAgbW92ZVZlcnRpY2FsbHkobGluZS5p
bmtPdmVyZmxvdygpLCBvZmZzZXQpLAotICAgICAgICAgICAgbGluZS5iYXNlbGluZSgpLAotICAg
ICAgICAgICAgbGluZS5iYXNlbGluZVR5cGUoKSwKLSAgICAgICAgICAgIGxpbmUuY29udGVudExv
Z2ljYWxPZmZzZXQoKSwKLSAgICAgICAgICAgIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpLAot
ICAgICAgICAgICAgbGluZS5pc0hvcml6b250YWwoKQotICAgICAgICB9OwotICAgIH07Ci0KLSAg
ICBhdXRvIGFkanVzdGVkQm94ID0gWyZdKGNvbnN0IElubGluZURpc3BsYXk6OkJveCYgYm94LCBm
bG9hdCBvZmZzZXQpCi0gICAgewotICAgICAgICBhdXRvIGFkanVzdGVkQm94ID0gYm94OwotICAg
ICAgICBhZGp1c3RlZEJveC5tb3ZlVmVydGljYWxseShvZmZzZXQpOwotICAgICAgICByZXR1cm4g
YWRqdXN0ZWRCb3g7Ci0gICAgfTsKLQotICAgIGF1dG8gYWRqdXN0ZWRDb250ZW50ID0gSW5saW5l
Q29udGVudDo6Y3JlYXRlKGlubGluZUNvbnRlbnQubGluZUxheW91dCgpKTsKLQotICAgIGZvciAo
c2l6ZV90IGxpbmVJbmRleCA9IDA7IGxpbmVJbmRleCA8IGlubGluZUNvbnRlbnQubGluZXMuc2l6
ZSgpOyArK2xpbmVJbmRleCkKLSAgICAgICAgYWRqdXN0ZWRDb250ZW50LT5saW5lcy5hcHBlbmQo
YWRqdXN0ZWRMaW5lKGlubGluZUNvbnRlbnQubGluZXNbbGluZUluZGV4XSwgYWRqdXN0bWVudHNb
bGluZUluZGV4XSkpOwotCi0gICAgZm9yIChhdXRvJiBib3ggOiBpbmxpbmVDb250ZW50LmJveGVz
KQotICAgICAgICBhZGp1c3RlZENvbnRlbnQtPmJveGVzLmFwcGVuZChhZGp1c3RlZEJveChib3gs
IGFkanVzdG1lbnRzW2JveC5saW5lSW5kZXgoKV0pKTsKLQotICAgIHJldHVybiBhZGp1c3RlZENv
bnRlbnQ7Ci19Ci0KLVJlZjxJbmxpbmVDb250ZW50PiBhZGp1c3RMaW5lUG9zaXRpb25zRm9yUGFn
aW5hdGlvbihJbmxpbmVDb250ZW50JiBpbmxpbmVDb250ZW50LCBSZW5kZXJCbG9ja0Zsb3cmIGZs
b3cpCi17Ci0gICAgVmVjdG9yPFN0cnV0PiBzdHJ1dHM7Ci0gICAgYXV0byBsaW5lQ291bnQgPSBp
bmxpbmVDb250ZW50LmxpbmVzLnNpemUoKTsKLSAgICB1cGRhdGVNaW5pbXVtUGFnZUhlaWdodChm
bG93LCBpbmxpbmVDb250ZW50LCBsaW5lQ291bnQpOwotICAgIC8vIEZpcnN0IHBhc3Mgd2l0aCBu
byBwYWdpbmF0aW9uIG9mZnNldD8KLSAgICBpZiAoIWZsb3cucGFnZUxvZ2ljYWxIZWlnaHRGb3JP
ZmZzZXQoMCkpCi0gICAgICAgIHJldHVybiBpbmxpbmVDb250ZW50OwotCi0gICAgYXV0byB3aWRv
d3MgPSBmbG93LnN0eWxlKCkuaGFzQXV0b1dpZG93cygpID8gMSA6IHN0ZDo6bWF4PGludD4oZmxv
dy5zdHlsZSgpLndpZG93cygpLCAxKTsKLSAgICBhdXRvIG9ycGhhbnMgPSBmbG93LnN0eWxlKCku
aGFzQXV0b09ycGhhbnMoKSA/IDEgOiBzdGQ6Om1heDxpbnQ+KGZsb3cuc3R5bGUoKS5vcnBoYW5z
KCksIDEpOwotICAgIFBhZ2luYXRlZExpbmVzIGxpbmVzOwotICAgIGZvciAodW5zaWduZWQgbGlu
ZUluZGV4ID0gMDsgbGluZUluZGV4IDwgbGluZUNvdW50OyArK2xpbmVJbmRleCkgewotICAgICAg
ICBhdXRvIGxpbmUgPSBjb21wdXRlTGluZVRvcEFuZEJvdHRvbVdpdGhPdmVyZmxvdyhmbG93LCBp
bmxpbmVDb250ZW50LmxpbmVzLCBsaW5lSW5kZXgsIHN0cnV0cyk7Ci0gICAgICAgIGxpbmVzLmFw
cGVuZChsaW5lKTsKLSAgICAgICAgYXV0byByZW1haW5pbmdIZWlnaHQgPSBmbG93LnBhZ2VSZW1h
aW5pbmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wLCBSZW5kZXJCbG9ja0Zsb3c6OkV4
Y2x1ZGVQYWdlQm91bmRhcnkpOwotICAgICAgICBhdXRvIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2Ug
PSBmbG93LnBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wKSA9PSByZW1haW5pbmdI
ZWlnaHQ7Ci0gICAgICAgIGF1dG8gbGluZURvZXNOb3RGaXQgPSBsaW5lLmhlaWdodCA+IHJlbWFp
bmluZ0hlaWdodDsKLSAgICAgICAgaWYgKGxpbmVEb2VzTm90Rml0IHx8IChhdFRoZVRvcE9mQ29s
dW1uT3JQYWdlICYmIGxpbmVJbmRleCkpIHsKLSAgICAgICAgICAgIGF1dG8gbGluZUJyZWFrSW5k
ZXggPSBjb21wdXRlTGluZUJyZWFrSW5kZXgobGluZUluZGV4LCBsaW5lQ291bnQsIG9ycGhhbnMs
IHdpZG93cywgc3RydXRzKTsKLSAgICAgICAgICAgIC8vIEFyZSB3ZSBzdGlsbCBhdCB0aGUgdG9w
IG9mIHRoZSBjb2x1bW4vcGFnZT8KLSAgICAgICAgICAgIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2Ug
PSBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlID8gbGluZUluZGV4ID09IGxpbmVCcmVha0luZGV4IDog
ZmFsc2U7Ci0gICAgICAgICAgICBzZXRQYWdlQnJlYWtGb3JMaW5lKGxpbmVCcmVha0luZGV4LCBs
aW5lcywgZmxvdywgc3RydXRzLCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBsaW5lRG9lc05vdEZp
dCk7Ci0gICAgICAgICAgICAvLyBSZWNvbXB1dGUgbGluZSBwb3NpdGlvbnMgdGhhdCB3ZSBhbHJl
YWR5IHZpc2l0ZWQgYnV0IHdpZG93IGJyZWFrIHB1c2hlZCB0aGVtIHRvIGEgbmV3IHBhZ2UuCi0g
ICAgICAgICAgICBmb3IgKGF1dG8gaSA9IGxpbmVCcmVha0luZGV4OyBpIDwgbGluZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICAgICAgbGluZXMuYXQoaSkgPSBjb21wdXRlTGluZVRvcEFuZEJv
dHRvbVdpdGhPdmVyZmxvdyhmbG93LCBpbmxpbmVDb250ZW50LmxpbmVzLCBpLCBzdHJ1dHMpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHN0cnV0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBpbmxpbmVDb250ZW50OwotCi0gICAgYXV0byBhZGp1c3RtZW50cyA9IFZlY3RvcjxmbG9h
dD4obGluZUNvdW50LCAwKTsKLSAgICBmb3IgKGF1dG8mIHN0cnV0IDogc3RydXRzKSB7Ci0gICAg
ICAgIGZvciAoYXV0byBsaW5lSW5kZXggPSBzdHJ1dC5saW5lQnJlYWs7IGxpbmVJbmRleCA8IGxp
bmVDb3VudDsgKytsaW5lSW5kZXgpCi0gICAgICAgICAgICBhZGp1c3RtZW50c1tsaW5lSW5kZXhd
ICs9IHN0cnV0Lm9mZnNldDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWFrZUFkanVzdGVkQ29udGVu
dChpbmxpbmVDb250ZW50LCBhZGp1c3RtZW50cyk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25QYWdpbmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25QYWdpbmF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgz
YzJjZjNhZDQ5MjhiNWI2YTJlMGZjMzQwY2FmZjA5YTNhOTU3MWIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbklubGlu
ZUNvbnRlbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJCbG9ja0Zs
b3c7Ci0KLW5hbWVzcGFjZSBMYXlvdXRJbnRlZ3JhdGlvbiB7Ci0gICAgCi1SZWY8SW5saW5lQ29u
dGVudD4gYWRqdXN0TGluZVBvc2l0aW9uc0ZvclBhZ2luYXRpb24oSW5saW5lQ29udGVudCYsIFJl
bmRlckJsb2NrRmxvdyYpOwotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xpbmVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9MaW5lU2VsZWN0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRmZjY5OWUxZjY3YzllNzg3ZWEzYzBiOWEyY2Q3Mjk5MDViNGFhOGQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xpbmVTZWxlY3Rpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDkx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIklubGluZUl0
ZXJhdG9yTGluZUJveC5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExpbmVTZWxlY3Rpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBmbG9hdCBsb2dpY2FsVG9wKGNvbnN0IElubGluZUl0ZXJhdG9yOjpMaW5lQm94JiBsaW5lQm94
KSB7IHJldHVybiBsaW5lQm94LmNvbnRlbnRMb2dpY2FsVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdM
aW5lQm94KCk7IH0KLSAgICBzdGF0aWMgZmxvYXQgbG9naWNhbEJvdHRvbShjb25zdCBJbmxpbmVJ
dGVyYXRvcjo6TGluZUJveCYgbGluZUJveCkgeyByZXR1cm4gbGluZUJveC5jb250ZW50TG9naWNh
bEJvdHRvbUFkanVzdGVkRm9yRm9sbG93aW5nTGluZUJveCgpOyB9Ci0KLSAgICBzdGF0aWMgRmxv
YXRSZWN0IGxvZ2ljYWxSZWN0KGNvbnN0IElubGluZUl0ZXJhdG9yOjpMaW5lQm94JiBsaW5lQm94
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgRmxvYXRQb2ludCB7IGxpbmVCb3guY29udGVudExv
Z2ljYWxMZWZ0KCksIGxpbmVCb3guY29udGVudExvZ2ljYWxUb3BBZGp1c3RlZEZvclByZWNlZGlu
Z0xpbmVCb3goKSB9LCBGbG9hdFBvaW50IHsgbGluZUJveC5jb250ZW50TG9naWNhbFJpZ2h0KCks
IGxpbmVCb3guY29udGVudExvZ2ljYWxCb3R0b21BZGp1c3RlZEZvckZvbGxvd2luZ0xpbmVCb3go
KSB9IH07Ci0gICAgfQotCi0gICAgc3RhdGljIEZsb2F0UmVjdCBwaHlzaWNhbFJlY3QoY29uc3Qg
SW5saW5lSXRlcmF0b3I6OkxpbmVCb3gmIGxpbmVCb3gpCi0gICAgewotICAgICAgICBhdXRvIHBo
eXNpY2FsUmVjdCA9IGxvZ2ljYWxSZWN0KGxpbmVCb3gpOwotICAgICAgICBpZiAoIWxpbmVCb3gu
aXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICBwaHlzaWNhbFJlY3QgPSBwaHlzaWNhbFJlY3Qu
dHJhbnNwb3NlZFJlY3QoKTsKLSAgICAgICAgbGluZUJveC5jb250YWluaW5nQmxvY2soKS5mbGlw
Rm9yV3JpdGluZ01vZGUocGh5c2ljYWxSZWN0KTsKLSAgICAgICAgcmV0dXJuIHBoeXNpY2FsUmVj
dDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgbG9naWNhbFRvcEFkanVzdGVkRm9yUHJlY2Vk
aW5nQmxvY2soY29uc3QgSW5saW5lSXRlcmF0b3I6OkxpbmVCb3gmIGxpbmVCb3gpCi0gICAgewot
ICAgICAgICAvLyBGSVhNRTogTW92ZSBhZGp1c3RFbmNsb3NpbmdUb3BGb3JQcmVjZWRpbmdCbG9j
ayBmcm9tIFJlbmRlckJsb2NrRmxvdyB0byBoZXJlLgotICAgICAgICByZXR1cm4gbGluZUJveC5j
b250YWluaW5nQmxvY2soKS5hZGp1c3RFbmNsb3NpbmdUb3BGb3JQcmVjZWRpbmdCbG9jayhMYXlv
dXRVbml0IHsgbGluZUJveC5jb250ZW50TG9naWNhbFRvcEFkanVzdGVkRm9yUHJlY2VkaW5nTGlu
ZUJveCgpIH0pOwotICAgIH0KLQotICAgIHN0YXRpYyBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlIHNlbGVjdGlvblN0YXRlKGNvbnN0IElubGluZUl0ZXJhdG9yOjpMaW5lQm94JiBsaW5lQm94
KQotICAgIHsKLSAgICAgICAgYXV0byYgYmxvY2sgPSBsaW5lQm94LmNvbnRhaW5pbmdCbG9jaygp
OwotICAgICAgICBpZiAoYmxvY2suc2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlOjpOb25lKQotICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGln
aGxpZ2h0U3RhdGU6Ok5vbmU7Ci0KLSAgICAgICAgYXV0byBsaW5lU3RhdGUgPSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwotICAgICAgICBmb3IgKGF1dG8gYm94ID0gbGluZUJv
eC5maXJzdExlYWZCb3goKTsgYm94OyBib3gudHJhdmVyc2VOZXh0T25MaW5lKCkpIHsKLSAgICAg
ICAgICAgIGF1dG8gYm94U3RhdGUgPSBib3gtPnNlbGVjdGlvblN0YXRlKCk7Ci0gICAgICAgICAg
ICBpZiAobGluZVN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCi0g
ICAgICAgICAgICAgICAgbGluZVN0YXRlID0gYm94U3RhdGU7Ci0gICAgICAgICAgICBlbHNlIGlm
IChsaW5lU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZTo6RW5kIHx8IGJveFN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUp
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVTdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGU6OkJvdGg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVTdGF0ZSA9PSBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNpZGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoYm94
U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQgfHwgYm94U3RhdGUg
PT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKQotICAgICAgICAgICAgICAgICAg
ICBsaW5lU3RhdGUgPSBib3hTdGF0ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChib3hTdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQotICAgICAgICAgICAgICAg
ICAgICBsaW5lU3RhdGUgPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQ7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGxpbmVTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlOjpFbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVTdGF0ZSA9
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGg7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChsaW5lU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Qm90aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
bGluZVN0YXRlOwotICAgIH0KLQotfTsKLQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3guY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjljMmFiOTg3YmRjNDZlNzkxNmY5ZjcxYWRmNzFkZDkzNDdlNThmN2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5l
L0lubGluZUl0ZXJhdG9yQm94LmNwcApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgorCisjaW5j
bHVkZSAiSW5saW5lSXRlcmF0b3JMaW5lQm94LmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JU
ZXh0Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgiCisjaW5j
bHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCisj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
SW5saW5lSXRlcmF0b3IgeworCitCb3hJdGVyYXRvcjo6Qm94SXRlcmF0b3IoQm94OjpQYXRoVmFy
aWFudCYmIHBhdGhWYXJpYW50KQorICAgIDogbV9ib3goV1RGTW92ZShwYXRoVmFyaWFudCkpCit7
Cit9CisKK0JveEl0ZXJhdG9yOjpCb3hJdGVyYXRvcihjb25zdCBCb3gmIHJ1bikKKyAgICA6IG1f
Ym94KHJ1bikKK3sKK30KKworYm9vbCBCb3hJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBCb3hJ
dGVyYXRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGF0RW5kKCkgJiYgb3RoZXIuYXRFbmQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9ib3gubV9wYXRoVmFyaWFu
dCA9PSBvdGhlci5tX2JveC5tX3BhdGhWYXJpYW50OworfQorCitib29sIEJveEl0ZXJhdG9yOjph
dEVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9ib3gubV9wYXRoVmFy
aWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5hdEVuZCgpOworICAg
IH0pOworfQorCitMZWFmQm94SXRlcmF0b3IgQm94OjpuZXh0T25MaW5lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gTGVhZkJveEl0ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZU5leHRPbkxpbmUoKTsKK30K
KworTGVhZkJveEl0ZXJhdG9yIEJveDo6cHJldmlvdXNPbkxpbmUoKSBjb25zdAoreworICAgIHJl
dHVybiBMZWFmQm94SXRlcmF0b3IoKnRoaXMpLnRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsKK30K
KworTGVhZkJveEl0ZXJhdG9yIEJveDo6bmV4dE9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gTGVhZkJveEl0ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZU5leHRPbkxp
bmVJZ25vcmluZ0xpbmVCcmVhaygpOworfQorCitMZWFmQm94SXRlcmF0b3IgQm94OjpwcmV2aW91
c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTGVhZkJveEl0
ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsK
K30KKworTGluZUJveEl0ZXJhdG9yIEJveDo6bGluZUJveCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgQm94TGVnYWN5UGF0aCYgcGF0
aCkgeworICAgICAgICByZXR1cm4gTGluZUJveEl0ZXJhdG9yKExpbmVCb3hJdGVyYXRvckxlZ2Fj
eVBhdGgoJnBhdGgucm9vdElubGluZUJveCgpKSk7CisgICAgfQorI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQorICAgICwgW10oY29uc3QgQm94TW9kZXJuUGF0aCYgcGF0aCkg
eworICAgICAgICByZXR1cm4gTGluZUJveEl0ZXJhdG9yKExpbmVCb3hJdGVyYXRvck1vZGVyblBh
dGgocGF0aC5pbmxpbmVDb250ZW50KCksIHBhdGguYm94KCkubGluZUluZGV4KCkpKTsKKyAgICB9
CisjZW5kaWYKKyAgICApOworfQorCitjb25zdCBSZW5kZXJTdHlsZSYgQm94OjpzdHlsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGxpbmVCb3goKS0+aXNGaXJzdCgpID8gcmVuZGVyZXIoKS5maXJz
dExpbmVTdHlsZSgpIDogcmVuZGVyZXIoKS5zdHlsZSgpOworfQorCitSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlIEJveDo6c2VsZWN0aW9uU3RhdGUoKSBjb25zdAoreworICAgIGlmIChpc1Rl
eHQoKSkgeworICAgICAgICBhdXRvJiB0ZXh0ID0gZG93bmNhc3Q8VGV4dEJveD4oKnRoaXMpOwor
ICAgICAgICBhdXRvJiByZW5kZXJlciA9IHRleHQucmVuZGVyZXIoKTsKKyAgICAgICAgcmV0dXJu
IHJlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5oaWdobGlnaHRTdGF0ZUZvclRleHRCb3gocmVu
ZGVyZXIsIHRleHQuc2VsZWN0YWJsZVJhbmdlKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVuZGVy
ZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOworfQorCitMZWFmQm94SXRlcmF0b3I6OkxlYWZCb3hJdGVy
YXRvcihCb3g6OlBhdGhWYXJpYW50JiYgcGF0aFZhcmlhbnQpCisgICAgOiBCb3hJdGVyYXRvcihX
VEZNb3ZlKHBhdGhWYXJpYW50KSkKK3sKK30KKworTGVhZkJveEl0ZXJhdG9yOjpMZWFmQm94SXRl
cmF0b3IoY29uc3QgQm94JiBydW4pCisgICAgOiBCb3hJdGVyYXRvcihydW4pCit7Cit9CisKK0xl
YWZCb3hJdGVyYXRvciYgTGVhZkJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRPbkxpbmUoKQorewor
ICAgIFdURjo6c3dpdGNoT24obV9ib3gubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewor
ICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dE9uTGluZSgpOworICAgIH0pOworICAgIHJldHVybiAq
dGhpczsKK30KKworTGVhZkJveEl0ZXJhdG9yJiBMZWFmQm94SXRlcmF0b3I6OnRyYXZlcnNlUHJl
dmlvdXNPbkxpbmUoKQoreworICAgIFdURjo6c3dpdGNoT24obV9ib3gubV9wYXRoVmFyaWFudCwg
W10oYXV0byYgcGF0aCkgeworICAgICAgICBwYXRoLnRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0xlYWZCb3hJdGVyYXRvciYgTGVhZkJv
eEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpCit7CisgICAg
ZG8geworICAgICAgICB0cmF2ZXJzZU5leHRPbkxpbmUoKTsKKyAgICB9IHdoaWxlICghYXRFbmQo
KSAmJiBtX2JveC5pc0xpbmVCcmVhaygpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0xlYWZC
b3hJdGVyYXRvciYgTGVhZkJveEl0ZXJhdG9yOjp0cmF2ZXJzZVByZXZpb3VzT25MaW5lSWdub3Jp
bmdMaW5lQnJlYWsoKQoreworICAgIGRvIHsKKyAgICAgICAgdHJhdmVyc2VQcmV2aW91c09uTGlu
ZSgpOworICAgIH0gd2hpbGUgKCFhdEVuZCgpICYmIG1fYm94LmlzTGluZUJyZWFrKCkpOworICAg
IHJldHVybiAqdGhpczsKK30KKworTGVhZkJveEl0ZXJhdG9yIGJveEZvcihjb25zdCBSZW5kZXJM
aW5lQnJlYWsmIHJlbmRlcmVyKQoreworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05U
RVhUKQorICAgIGlmIChhdXRvKiBsaW5lTGF5b3V0ID0gTGF5b3V0SW50ZWdyYXRpb246OkxpbmVM
YXlvdXQ6OmNvbnRhaW5pbmcocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gbGluZUxheW91dC0+
Ym94Rm9yKHJlbmRlcmVyKTsKKyNlbmRpZgorICAgIHJldHVybiB7IEJveExlZ2FjeVBhdGgocmVu
ZGVyZXIuaW5saW5lQm94V3JhcHBlcigpKSB9OworfQorCitMZWFmQm94SXRlcmF0b3IgYm94Rm9y
KGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpCit7CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCisgICAgaWYgKGF1dG8qIGxpbmVMYXlvdXQgPSBMYXlvdXRJbnRlZ3JhdGlv
bjo6TGluZUxheW91dDo6Y29udGFpbmluZyhyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBsaW5l
TGF5b3V0LT5ib3hGb3IocmVuZGVyZXIpOworI2VuZGlmCisgICAgcmV0dXJuIHsgQm94TGVnYWN5
UGF0aChyZW5kZXJlci5pbmxpbmVCb3hXcmFwcGVyKCkpIH07Cit9CisKKyNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKK0xlYWZCb3hJdGVyYXRvciBib3hGb3IoY29uc3QgTGF5
b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmIGNvbnRlbnQsIHNpemVfdCBib3hJbmRleCkK
K3sKKyAgICByZXR1cm4geyBCb3hNb2Rlcm5QYXRoIHsgY29udGVudCwgYm94SW5kZXggfSB9Owor
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKK2NvbnN0
IEJveE1vZGVyblBhdGgmIEJveDo6bW9kZXJuUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0
ZDo6Z2V0PEJveE1vZGVyblBhdGg+KG1fcGF0aFZhcmlhbnQpOworfQorI2VuZGlmCisKK2NvbnN0
IEJveExlZ2FjeVBhdGgmIEJveDo6bGVnYWN5UGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0
ZDo6Z2V0PEJveExlZ2FjeVBhdGg+KG1fcGF0aFZhcmlhbnQpOworfQorCit9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJh
dG9yQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGlu
ZUl0ZXJhdG9yQm94LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk0ZDUxODllNGFlMTQ3NzlkNzRhMTI3YjUxOTE3
MzA0MzI2NjMyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3guaApAQCAtMCwwICsxLDI2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJv
eExlZ2FjeVBhdGguaCIKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaCIK
KyNpbmNsdWRlICJMZWdhY3lJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSA8dmFyaWFudD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJMaW5lQnJlYWs7CitjbGFzcyBS
ZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJTdHlsZTsKKworbmFtZXNwYWNlIElubGluZUl0ZXJh
dG9yIHsKKworY2xhc3MgTGluZUJveEl0ZXJhdG9yOworY2xhc3MgQm94SXRlcmF0b3I7CitjbGFz
cyBMZWFmQm94SXRlcmF0b3I7CitjbGFzcyBUZXh0Qm94SXRlcmF0b3I7CisKK3N0cnVjdCBFbmRJ
dGVyYXRvciB7IH07CisKK2NsYXNzIEJveCB7CitwdWJsaWM6CisgICAgdXNpbmcgUGF0aFZhcmlh
bnQgPSBzdGQ6OnZhcmlhbnQ8CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQp
CisgICAgICAgIEJveE1vZGVyblBhdGgsCisjZW5kaWYKKyAgICAgICAgQm94TGVnYWN5UGF0aAor
ICAgID47CisKKyAgICBCb3goUGF0aFZhcmlhbnQmJik7CisKKyAgICBib29sIGlzVGV4dCgpIGNv
bnN0OworICAgIGJvb2wgaXNJbmxpbmVCb3goKSBjb25zdDsKKyAgICBib29sIGlzUm9vdElubGlu
ZUJveCgpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IHZpc3VhbFJlY3QoZmxvYXQgZm9ybWF0dGlu
Z1Jvb3RTaXplSW5CbG9ja0RpcmVjdGlvbikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHZpc3VhbFJl
Y3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkgY29uc3Q7CisKKyAgICBmbG9hdCBsb2dpY2FsVG9w
KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyB2aXN1YWxSZWN0SWdub3JpbmdCbG9j
a0RpcmVjdGlvbigpLnkoKSA6IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkueCgp
OyB9CisgICAgZmxvYXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRh
bCgpID8gdmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKS5tYXhZKCkgOiB2aXN1YWxS
ZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpLm1heFgoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxM
ZWZ0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyB2aXN1YWxSZWN0SWdub3JpbmdC
bG9ja0RpcmVjdGlvbigpLngoKSA6IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCku
eSgpOyB9CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9u
dGFsKCkgPyB2aXN1YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpLm1heFgoKSA6IHZpc3Vh
bFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkubWF4WSgpOyB9CisgICAgZmxvYXQgbG9naWNh
bFdpZHRoKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyB2aXN1YWxSZWN0SWdub3Jp
bmdCbG9ja0RpcmVjdGlvbigpLndpZHRoKCkgOiB2aXN1YWxSZWN0SWdub3JpbmdCbG9ja0RpcmVj
dGlvbigpLmhlaWdodCgpOyB9CisgICAgZmxvYXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIGlzSG9yaXpvbnRhbCgpID8gdmlzdWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKS5o
ZWlnaHQoKSA6IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkud2lkdGgoKTsgfQor
CisgICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25zdDsKKyAgICBib29sIGlzTGluZUJyZWFrKCkg
Y29uc3Q7CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtQ2FyZXRPZmZzZXQoKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBtYXhpbXVtQ2FyZXRPZmZzZXQoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsZWZ0bW9z
dENhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
bWluaW11bUNhcmV0T2Zmc2V0KCkgOiBtYXhpbXVtQ2FyZXRPZmZzZXQoKTsgfQorICAgIHVuc2ln
bmVkIHJpZ2h0bW9zdENhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbWF4aW11bUNhcmV0T2Zmc2V0KCkgOiBtaW5pbXVtQ2FyZXRPZmZzZXQoKTsg
fQorCisgICAgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWwoKSBjb25zdDsKKyAgICBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJpZGlMZXZlbCgpICUgMiA/IFRleHREaXJl
Y3Rpb246OlJUTCA6IFRleHREaXJlY3Rpb246OkxUUjsgfQorICAgIGJvb2wgaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246
OkxUUjsgfQorCisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0
ZSgpIGNvbnN0OworCisgICAgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0Owor
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OworCisgICAgLy8gRklYTUU6IFJl
bW92ZS4gRm9yIGludGVybWVkaWF0ZSBwb3J0aW5nIHN0ZXBzIG9ubHkuCisgICAgY29uc3QgTGVn
YWN5SW5saW5lQm94KiBsZWdhY3lJbmxpbmVCb3goKSBjb25zdDsKKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICBjb25zdCBJbmxpbmVEaXNwbGF5OjpCb3gqIGlubGlu
ZUJveCgpIGNvbnN0OworI2VuZGlmCisKKyAgICBMZWFmQm94SXRlcmF0b3IgbmV4dE9uTGluZSgp
IGNvbnN0OworICAgIExlYWZCb3hJdGVyYXRvciBwcmV2aW91c09uTGluZSgpIGNvbnN0OworICAg
IExlYWZCb3hJdGVyYXRvciBuZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSBjb25zdDsKKyAg
ICBMZWFmQm94SXRlcmF0b3IgcHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0
OworCisgICAgTGluZUJveEl0ZXJhdG9yIGxpbmVCb3goKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIGZyaWVuZCBjbGFzcyBCb3hJdGVyYXRvcjsKKyAgICBmcmllbmQgY2xhc3MgSW5saW5lQm94
SXRlcmF0b3I7CisgICAgZnJpZW5kIGNsYXNzIExlYWZCb3hJdGVyYXRvcjsKKyAgICBmcmllbmQg
Y2xhc3MgVGV4dEJveEl0ZXJhdG9yOworCisgICAgLy8gVG8gaGVscCB3aXRoIGRlYnVnZ2luZy4K
KyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICBjb25zdCBCb3hNb2Rl
cm5QYXRoJiBtb2Rlcm5QYXRoKCkgY29uc3Q7CisjZW5kaWYKKyAgICBjb25zdCBCb3hMZWdhY3lQ
YXRoJiBsZWdhY3lQYXRoKCkgY29uc3Q7CisKKyAgICBQYXRoVmFyaWFudCBtX3BhdGhWYXJpYW50
OworfTsKKworY2xhc3MgQm94SXRlcmF0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhYXRFbmQoKTsgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEJveEl0ZXJhdG9yJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShFbmRJdGVyYXRvcikgY29uc3QgeyByZXR1cm4gYXRFbmQo
KTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShFbmRJdGVyYXRvcikgY29uc3QgeyByZXR1cm4gIWF0
RW5kKCk7IH0KKworICAgIGNvbnN0IEJveCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9i
b3g7IH0KKyAgICBjb25zdCBCb3gqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV9ib3g7
IH0KKworICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEJveEl0ZXJh
dG9yKCkgOiBtX2JveChCb3hMZWdhY3lQYXRoIHsgbnVsbHB0ciB9KSB7IH07CisgICAgQm94SXRl
cmF0b3IoQm94OjpQYXRoVmFyaWFudCYmKTsKKyAgICBCb3hJdGVyYXRvcihjb25zdCBCb3gmKTsK
KworICAgIEJveCBtX2JveDsKK307CisKK2NsYXNzIExlYWZCb3hJdGVyYXRvciA6IHB1YmxpYyBC
b3hJdGVyYXRvciB7CitwdWJsaWM6CisgICAgTGVhZkJveEl0ZXJhdG9yKCkgPSBkZWZhdWx0Owor
ICAgIExlYWZCb3hJdGVyYXRvcihCb3g6OlBhdGhWYXJpYW50JiYpOworICAgIExlYWZCb3hJdGVy
YXRvcihjb25zdCBCb3gmKTsKKworICAgIExlYWZCb3hJdGVyYXRvciYgdHJhdmVyc2VOZXh0T25M
aW5lKCk7CisgICAgTGVhZkJveEl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCk7Cisg
ICAgTGVhZkJveEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygp
OworICAgIExlYWZCb3hJdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91c09uTGluZUlnbm9yaW5nTGlu
ZUJyZWFrKCk7Cit9OworCitMZWFmQm94SXRlcmF0b3IgYm94Rm9yKGNvbnN0IFJlbmRlckxpbmVC
cmVhayYpOworTGVhZkJveEl0ZXJhdG9yIGJveEZvcihjb25zdCBSZW5kZXJCb3gmKTsKKyNpZiBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKK0xlYWZCb3hJdGVyYXRvciBib3hGb3Io
Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmLCBzaXplX3QgYm94SW5kZXgp
OworI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK2lubGluZSBCb3g6OkJveChQYXRoVmFyaWFudCYmIHBhdGgpCisgICAgOiBtX3Bh
dGhWYXJpYW50KFdURk1vdmUocGF0aCkpCit7Cit9CisKK2lubGluZSBib29sIEJveDo6aXNUZXh0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShh
dXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmlzVGV4dCgpOworICAgIH0pOworfQor
CitpbmxpbmUgYm9vbCBCb3g6OmlzSW5saW5lQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVy
biBwYXRoLmlzSW5saW5lQm94KCk7CisgICAgfSk7Cit9CisKK2lubGluZSBib29sIEJveDo6aXNS
b290SW5saW5lQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhW
YXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmlzUm9vdElubGlu
ZUJveCgpOworICAgIH0pOworfQorCitpbmxpbmUgRmxvYXRSZWN0IEJveDo6dmlzdWFsUmVjdChm
bG9hdCBmb3JtYXR0aW5nUm9vdFNpemVJbkJsb2NrRGlyZWN0aW9uKSBjb25zdAoreworICAgIGF1
dG8gdmlzdWFsUmVjdCA9IHZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCk7CisgICAg
aWYgKCFzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCisgICAgICAgIHJldHVy
biB2aXN1YWxSZWN0OworCisgICAgaWYgKHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKKyAgICAgICAgdmlzdWFsUmVjdC5zZXRZKGZvcm1hdHRpbmdSb290U2l6ZUluQmxvY2tEaXJl
Y3Rpb24gLSB2aXN1YWxSZWN0Lm1heFkoKSk7CisgICAgZWxzZQorICAgICAgICB2aXN1YWxSZWN0
LnNldFgoZm9ybWF0dGluZ1Jvb3RTaXplSW5CbG9ja0RpcmVjdGlvbiAtIHZpc3VhbFJlY3QubWF4
WCgpKTsKKyAgICByZXR1cm4gdmlzdWFsUmVjdDsKK30KKworaW5saW5lIEZsb2F0UmVjdCBCb3g6
OnZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJl
dHVybiBwYXRoLnZpc3VhbFJlY3RJZ25vcmluZ0Jsb2NrRGlyZWN0aW9uKCk7CisgICAgfSk7Cit9
CisKK2lubGluZSBib29sIEJveDo6aXNIb3Jpem9udGFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJl
dHVybiBwYXRoLmlzSG9yaXpvbnRhbCgpOworICAgIH0pOworfQorCitpbmxpbmUgYm9vbCBCb3g6
OmlzTGluZUJyZWFrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhW
YXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmlzTGluZUJyZWFr
KCk7CisgICAgfSk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBCb3g6Om1pbmltdW1DYXJldE9mZnNl
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10o
YXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5taW5pbXVtQ2FyZXRPZmZzZXQoKTsK
KyAgICB9KTsKK30KKworaW5saW5lIHVuc2lnbmVkIEJveDo6bWF4aW11bUNhcmV0T2Zmc2V0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRv
JiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLm1heGltdW1DYXJldE9mZnNldCgpOworICAg
IH0pOworfQorCitpbmxpbmUgdW5zaWduZWQgY2hhciBCb3g6OmJpZGlMZXZlbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkg
eworICAgICAgICByZXR1cm4gcGF0aC5iaWRpTGV2ZWwoKTsKKyAgICB9KTsKK30KKworaW5saW5l
IGNvbnN0IFJlbmRlck9iamVjdCYgQm94OjpyZW5kZXJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgLT4gY29uc3QgUmVu
ZGVyT2JqZWN0JiB7CisgICAgICAgIHJldHVybiBwYXRoLnJlbmRlcmVyKCk7CisgICAgfSk7Cit9
CisKK2lubGluZSBjb25zdCBMZWdhY3lJbmxpbmVCb3gqIEJveDo6bGVnYWN5SW5saW5lQm94KCkg
Y29uc3QKK3sKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Qm94TGVnYWN5UGF0aD4o
bV9wYXRoVmFyaWFudCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6
OmdldDxCb3hMZWdhY3lQYXRoPihtX3BhdGhWYXJpYW50KS5sZWdhY3lJbmxpbmVCb3goKTsKK30K
KworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQoraW5saW5lIGNvbnN0IElu
bGluZURpc3BsYXk6OkJveCogQm94OjppbmxpbmVCb3goKSBjb25zdAoreworICAgIGlmICghc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxCb3hNb2Rlcm5QYXRoPihtX3BhdGhWYXJpYW50KSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICZzdGQ6OmdldDxCb3hNb2Rlcm5QYXRoPiht
X3BhdGhWYXJpYW50KS5ib3goKTsKK30KKyNlbmRpZgorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TGVn
YWN5UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9Jbmxp
bmVJdGVyYXRvckJveExlZ2FjeVBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWQ5M2NiOGQ0NjhlMWUzMzE0
OGMxN2EyZTk5YjJhZDYxMGZjNGY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckJveExlZ2FjeVBhdGguaApA
QCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
TGVnYWN5SW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIkxlZ2FjeVJvb3RJbmxpbmVCb3guaCIK
KyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEJveFNlbGVjdGFibGVSYW5n
ZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKKworZW51bSBjbGFzcyBDcmVhdGVUZXh0UnVuTW9kZSB7
IFBhaW50aW5nLCBFZGl0aW5nIH07CisKK2NsYXNzIEJveExlZ2FjeVBhdGggeworcHVibGljOgor
ICAgIEJveExlZ2FjeVBhdGgoY29uc3QgTGVnYWN5SW5saW5lQm94KiBpbmxpbmVCb3gpCisgICAg
ICAgIDogbV9pbmxpbmVCb3goaW5saW5lQm94KQorICAgIHsgfQorCisgICAgYm9vbCBpc1RleHQo
KSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+aXNJbmxpbmVUZXh0Qm94KCk7IH0KKyAgICBi
b29sIGlzSW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmlzSW5saW5lRmxv
d0JveCgpOyB9CisgICAgYm9vbCBpc1Jvb3RJbmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2lu
bGluZUJveC0+aXNSb290SW5saW5lQm94KCk7IH0KKworICAgIEZsb2F0UmVjdCB2aXN1YWxSZWN0
SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5mcmFt
ZVJlY3QoKTsgfQorCisgICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25zdCB7IHJldHVybiBtX2lu
bGluZUJveC0+aXNIb3Jpem9udGFsKCk7IH0KKyAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVCb3gtPmlzTGluZUJyZWFrKCk7IH0KKworICAgIHVuc2lnbmVkIG1p
bmltdW1DYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5jYXJldE1pbk9m
ZnNldCgpOyB9CisgICAgdW5zaWduZWQgbWF4aW11bUNhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVCb3gtPmNhcmV0TWF4T2Zmc2V0KCk7IH0KKworICAgIHVuc2lnbmVkIGNoYXIg
YmlkaUxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmJpZGlMZXZlbCgpOyB9CisK
KyAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+aGFz
SHlwaGVuKCk7IH0KKyAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdCB7IHJldHVybiBTdHJpbmdW
aWV3KGlubGluZVRleHRCb3goKS0+cmVuZGVyZXIoKS50ZXh0KCkpLnN1YnN0cmluZyhpbmxpbmVU
ZXh0Qm94KCktPnN0YXJ0KCksIGlubGluZVRleHRCb3goKS0+bGVuKCkpOyB9CisgICAgdW5zaWdu
ZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPnN0YXJ0KCk7IH0KKyAg
ICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmVuZCgpOyB9
CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5s
ZW4oKTsgfQorCisgICAgVGV4dEJveFNlbGVjdGFibGVSYW5nZSBzZWxlY3RhYmxlUmFuZ2UoKSBj
b25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPnNlbGVjdGFibGVSYW5nZSgpOyB9CisKKyAg
ICBUZXh0UnVuIGNyZWF0ZVRleHRSdW4oQ3JlYXRlVGV4dFJ1bk1vZGUgbW9kZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIGJvb2wgaWdub3JlQ29tYmluZWRUZXh0ID0gbW9kZSA9PSBDcmVhdGVUZXh0
UnVuTW9kZTo6RWRpdGluZzsKKyAgICAgICAgYm9vbCBpZ25vcmVIeXBoZW4gPSBtb2RlID09IENy
ZWF0ZVRleHRSdW5Nb2RlOjpFZGl0aW5nOworICAgICAgICByZXR1cm4gaW5saW5lVGV4dEJveCgp
LT5jcmVhdGVUZXh0UnVuKGlnbm9yZUNvbWJpbmVkVGV4dCwgaWdub3JlSHlwaGVuKTsKKyAgICB9
CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2lubGluZUJveC0+cmVuZGVyZXIoKTsKKyAgICB9CisKKyAgICB2b2lkIHRy
YXZlcnNlTmV4dFRleHRCb3goKSB7IG1faW5saW5lQm94ID0gaW5saW5lVGV4dEJveCgpLT5uZXh0
VGV4dEJveCgpOyB9CisKKyAgICB2b2lkIHRyYXZlcnNlTmV4dE9uTGluZSgpCisgICAgeworICAg
ICAgICBtX2lubGluZUJveCA9IG1faW5saW5lQm94LT5uZXh0TGVhZk9uTGluZSgpOworICAgIH0K
KworICAgIHZvaWQgdHJhdmVyc2VQcmV2aW91c09uTGluZSgpCisgICAgeworICAgICAgICBtX2lu
bGluZUJveCA9IG1faW5saW5lQm94LT5wcmV2aW91c0xlYWZPbkxpbmUoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHRyYXZlcnNlTmV4dElubGluZUJveCgpCisgICAgeworICAgICAgICBtX2lubGluZUJv
eCA9IGlubGluZUZsb3dCb3goKS0+bmV4dExpbmVCb3goKTsKKyAgICB9CisKKyAgICB2b2lkIHRy
YXZlcnNlUHJldmlvdXNJbmxpbmVCb3goKQorICAgIHsKKyAgICAgICAgbV9pbmxpbmVCb3ggPSBp
bmxpbmVGbG93Qm94KCktPnByZXZMaW5lQm94KCk7CisgICAgfQorCisgICAgQm94TGVnYWN5UGF0
aCBmaXJzdExlYWZCb3hGb3JJbmxpbmVCb3goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHsgaW5saW5lRmxvd0JveCgpLT5maXJzdExlYWZEZXNjZW5kYW50KCkgfTsKKyAgICB9CisKKyAg
ICBCb3hMZWdhY3lQYXRoIGxhc3RMZWFmQm94Rm9ySW5saW5lQm94KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiB7IGlubGluZUZsb3dCb3goKS0+bGFzdExlYWZEZXNjZW5kYW50KCkgfTsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQm94TGVnYWN5UGF0aCYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94ID09IG90aGVyLm1faW5saW5lQm94OyB9CisKKyAg
ICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1faW5saW5lQm94OyB9CisKKyAgICBMZWdh
Y3lJbmxpbmVCb3gqIGxlZ2FjeUlubGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
TGVnYWN5SW5saW5lQm94Kj4obV9pbmxpbmVCb3gpOyB9CisgICAgY29uc3QgTGVnYWN5Um9vdElu
bGluZUJveCYgcm9vdElubGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5yb290
KCk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94KiBpbmxpbmVU
ZXh0Qm94KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8TGVnYWN5SW5saW5lVGV4dEJveD4obV9p
bmxpbmVCb3gpOyB9CisgICAgY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCogaW5saW5lRmxvd0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PExlZ2FjeUlubGluZUZsb3dCb3g+KG1faW5saW5l
Qm94KTsgfQorCisgICAgY29uc3QgTGVnYWN5SW5saW5lQm94KiBtX2lubGluZUJveCB7IG51bGxw
dHIgfTsKK307CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JCb3hNb2Rlcm5QYXRoLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRmYjBhZmViMmE2NzZmOWU0ZjM4ZjkxZjY2Y2U2ZmE2MmNkZjQ4YTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5s
aW5lL0lubGluZUl0ZXJhdG9yQm94TW9kZXJuUGF0aC5oCkBAIC0wLDAgKzEsMjc5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKKworI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGFp
bmVyQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCisj
aW5jbHVkZSAiVGV4dEJveFNlbGVjdGFibGVSYW5nZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgSW5saW5lSXRlcmF0b3IgeworCitjbGFzcyBCb3hNb2Rlcm5QYXRoIHsKK3B1
YmxpYzoKKyAgICBCb3hNb2Rlcm5QYXRoKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVD
b250ZW50JiBpbmxpbmVDb250ZW50KQorICAgICAgICA6IG1faW5saW5lQ29udGVudCgmaW5saW5l
Q29udGVudCkKKyAgICB7CisgICAgICAgIHNldEF0RW5kKCk7CisgICAgfQorICAgIEJveE1vZGVy
blBhdGgoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmIGlubGluZUNvbnRl
bnQsIHNpemVfdCBzdGFydEluZGV4KQorICAgICAgICA6IG1faW5saW5lQ29udGVudCgmaW5saW5l
Q29udGVudCkKKyAgICAgICAgLCBtX2JveEluZGV4KHN0YXJ0SW5kZXgpCisgICAgeworICAgIH0K
KworICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gYm94KCkuaXNUZXh0T3JTb2Z0TGlu
ZUJyZWFrKCk7IH0KKyAgICBib29sIGlzSW5saW5lQm94KCkgY29uc3QgeyByZXR1cm4gYm94KCku
aXNJbmxpbmVCb3goKTsgfQorICAgIGJvb2wgaXNSb290SW5saW5lQm94KCkgY29uc3QgeyByZXR1
cm4gYm94KCkuaXNSb290SW5saW5lQm94KCk7IH0KKworICAgIEZsb2F0UmVjdCB2aXN1YWxSZWN0
SWdub3JpbmdCbG9ja0RpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJveCgpLnZpc3VhbFJlY3RJ
Z25vcmluZ0Jsb2NrRGlyZWN0aW9uKCk7IH0KKworICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29u
c3QgeyByZXR1cm4gYm94KCkuaXNIb3Jpem9udGFsKCk7IH0KKyAgICBib29sIGlzTGluZUJyZWFr
KCkgY29uc3QgeyByZXR1cm4gYm94KCkuaXNMaW5lQnJlYWsoKTsgfQorCisgICAgdW5zaWduZWQg
bWluaW11bUNhcmV0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNUZXh0KCkgPyBzdGFydCgpIDog
MDsgfQorICAgIHVuc2lnbmVkIG1heGltdW1DYXJldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlz
VGV4dCgpID8gZW5kKCkgOiAxOyB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbCgpIGNv
bnN0IHsgcmV0dXJuIGJveCgpLmJpZGlMZXZlbCgpOyB9CisKKyAgICBib29sIGhhc0h5cGhlbigp
IGNvbnN0IHsgcmV0dXJuIGJveCgpLnRleHQoKS0+aGFzSHlwaGVuKCk7IH0KKyAgICBTdHJpbmdW
aWV3IHRleHQoKSBjb25zdCB7IHJldHVybiBib3goKS50ZXh0KCktPm9yaWdpbmFsQ29udGVudCgp
OyB9CisgICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBib3goKS50ZXh0KCktPnN0
YXJ0KCk7IH0KKyAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBib3goKS50ZXh0KCkt
PmVuZCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gYm94KCkudGV4
dCgpLT5sZW5ndGgoKTsgfQorCisgICAgVGV4dEJveFNlbGVjdGFibGVSYW5nZSBzZWxlY3RhYmxl
UmFuZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHN0YXJ0
KCksCisgICAgICAgICAgICBsZW5ndGgoKSwKKyAgICAgICAgICAgIGJveCgpLnRleHQoKS0+aGFz
SHlwaGVuKCkgPyBib3goKS5zdHlsZSgpLmh5cGhlblN0cmluZygpLmxlbmd0aCgpIDogMCwKKyAg
ICAgICAgICAgIGJveCgpLmlzTGluZUJyZWFrKCkKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBU
ZXh0UnVuIGNyZWF0ZVRleHRSdW4oQ3JlYXRlVGV4dFJ1bk1vZGUgbW9kZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGF1dG8mIHN0eWxlID0gYm94KCkuc3R5bGUoKTsKKyAgICAgICAgYXV0byBleHBh
bnNpb24gPSBib3goKS5leHBhbnNpb24oKTsKKyAgICAgICAgYXV0byByZWN0ID0gdGhpcy0+dmlz
dWFsUmVjdElnbm9yaW5nQmxvY2tEaXJlY3Rpb24oKTsKKyAgICAgICAgYXV0byB4UG9zID0gcmVj
dC54KCkgLSAobGluZSgpLmxpbmVCb3hMZWZ0KCkgKyBsaW5lKCkuY29udGVudExvZ2ljYWxPZmZz
ZXQoKSk7CisKKyAgICAgICAgYXV0byB0ZXh0Rm9yUnVuID0gWyZdIHsKKyAgICAgICAgICAgIGlm
IChtb2RlID09IENyZWF0ZVRleHRSdW5Nb2RlOjpFZGl0aW5nIHx8ICFoYXNIeXBoZW4oKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGV4dCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcodGV4dCgpLCBzdHlsZS5oeXBoZW5TdHJpbmco
KSk7CisgICAgICAgIH0oKTsKKworICAgICAgICBib29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0
aCA9ICFyZW5kZXJUZXh0KCkuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCk7CisgICAgICAgIFRl
eHRSdW4gdGV4dFJ1biB7IHRleHRGb3JSdW4sIHhQb3MsIGV4cGFuc2lvbi5ob3Jpem9udGFsRXhw
YW5zaW9uLCBleHBhbnNpb24uYmVoYXZpb3IsIGRpcmVjdGlvbigpLCBzdHlsZS5ydGxPcmRlcmlu
ZygpID09IE9yZGVyOjpWaXN1YWwsIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCB9OworICAgICAg
ICB0ZXh0UnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50
YWJTaXplKCkpOworICAgICAgICByZXR1cm4gdGV4dFJ1bjsKKyAgICB9OworCisgICAgY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9p
bmxpbmVDb250ZW50LT5yZW5kZXJlckZvckxheW91dEJveChib3goKS5sYXlvdXRCb3goKSk7Cisg
ICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZU5leHRUZXh0Qm94KCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghYXRFbmQoKSk7CisgICAgICAgIEFTU0VSVChib3goKS5pc1RleHRPclNvZnRMaW5lQnJl
YWsoKSk7CisKKyAgICAgICAgaWYgKGJveCgpLmlzTGFzdEZvckxheW91dEJveCgpKSB7CisgICAg
ICAgICAgICBzZXRBdEVuZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgdHJhdmVyc2VOZXh0V2l0aFNhbWVMYXlvdXRCb3goKTsKKworICAgICAgICBBU1NFUlQo
Ym94KCkuaXNUZXh0T3JTb2Z0TGluZUJyZWFrKCkpOworICAgIH0KKworICAgIHZvaWQgdHJhdmVy
c2VOZXh0T25MaW5lKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghYXRFbmQoKSk7CisKKyAgICAg
ICAgYXV0byBvbGRMaW5lSW5kZXggPSBib3goKS5saW5lSW5kZXgoKTsKKworICAgICAgICB0cmF2
ZXJzZU5leHRMZWFmKCk7CisKKyAgICAgICAgaWYgKCFhdEVuZCgpICYmIG9sZExpbmVJbmRleCAh
PSBib3goKS5saW5lSW5kZXgoKSkKKyAgICAgICAgICAgIHNldEF0RW5kKCk7CisgICAgfQorCisg
ICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzT25MaW5lKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
YXRFbmQoKSk7CisKKyAgICAgICAgYXV0byBvbGRMaW5lSW5kZXggPSBib3goKS5saW5lSW5kZXgo
KTsKKworICAgICAgICB0cmF2ZXJzZVByZXZpb3VzTGVhZigpOworCisgICAgICAgIGlmICghYXRF
bmQoKSAmJiBvbGRMaW5lSW5kZXggIT0gYm94KCkubGluZUluZGV4KCkpCisgICAgICAgICAgICBz
ZXRBdEVuZCgpOworICAgIH0KKworICAgIHZvaWQgdHJhdmVyc2VOZXh0SW5saW5lQm94KCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghYXRFbmQoKSk7CisgICAgICAgIEFTU0VSVChib3goKS5pc0lu
bGluZUJveCgpKTsKKworICAgICAgICBpZiAoYm94KCkuaXNMYXN0Rm9yTGF5b3V0Qm94KCkpIHsK
KyAgICAgICAgICAgIHNldEF0RW5kKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICB0cmF2ZXJzZU5leHRXaXRoU2FtZUxheW91dEJveCgpOworCisgICAgICAgIEFT
U0VSVChib3goKS5pc0lubGluZUJveCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZlcnNlUHJl
dmlvdXNJbmxpbmVCb3goKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKKyAgICAg
ICAgQVNTRVJUKGJveCgpLmlzSW5saW5lQm94KCkpOworCisgICAgICAgIGlmIChib3goKS5pc0Zp
cnN0Rm9yTGF5b3V0Qm94KCkpIHsKKyAgICAgICAgICAgIHNldEF0RW5kKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0cmF2ZXJzZVByZXZpb3VzV2l0aFNhbWVM
YXlvdXRCb3goKTsKKworICAgICAgICBBU1NFUlQoYm94KCkuaXNJbmxpbmVCb3goKSk7CisgICAg
fQorCisgICAgQm94TW9kZXJuUGF0aCBmaXJzdExlYWZCb3hGb3JJbmxpbmVCb3goKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGJveCgpLmlzSW5saW5lQm94KCkpOworCisgICAgICAgIGF1
dG8mIGlubGluZUJveCA9IGJveCgpLmxheW91dEJveCgpOworCisgICAgICAgIC8vIFRoZSBuZXh0
IGJveCBpcyB0aGUgZmlyc3QgZGVzY2VuZGFudCBvZiB0aGlzIGJveDsKKyAgICAgICAgYXV0byBm
aXJzdCA9ICp0aGlzOworICAgICAgICBmaXJzdC50cmF2ZXJzZU5leHRPbkxpbmUoKTsKKworICAg
ICAgICBpZiAoIWZpcnN0LmF0RW5kKCkgJiYgIWZpcnN0LmlzV2l0aGluSW5saW5lQm94KGlubGlu
ZUJveCkpCisgICAgICAgICAgICBmaXJzdC5zZXRBdEVuZCgpOworCisgICAgICAgIHJldHVybiBm
aXJzdDsKKyAgICB9CisKKyAgICBCb3hNb2Rlcm5QYXRoIGxhc3RMZWFmQm94Rm9ySW5saW5lQm94
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChib3goKS5pc0lubGluZUJveCgpKTsKKwor
ICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBib3goKS5sYXlvdXRCb3goKTsKKworICAgICAgICAv
LyBGSVhNRTogR2V0IHRoZSBsYXN0IGJveCBpbmRleCBkaXJlY3RseSBmcm9tIHRoZSBkaXNwbGF5
IGJveC4KKyAgICAgICAgYXV0byBsYXN0ID0gZmlyc3RMZWFmQm94Rm9ySW5saW5lQm94KCk7Cisg
ICAgICAgIGZvciAoYXV0byBib3ggPSBsYXN0OyAhYm94LmF0RW5kKCkgJiYgYm94LmlzV2l0aGlu
SW5saW5lQm94KGlubGluZUJveCk7IGJveC50cmF2ZXJzZU5leHRPbkxpbmUoKSkKKyAgICAgICAg
ICAgIGxhc3QgPSBib3g7CisKKyAgICAgICAgcmV0dXJuIGxhc3Q7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEJveE1vZGVyblBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBt
X2lubGluZUNvbnRlbnQgPT0gb3RoZXIubV9pbmxpbmVDb250ZW50ICYmIG1fYm94SW5kZXggPT0g
b3RoZXIubV9ib3hJbmRleDsgfQorCisgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ym94SW5kZXggPT0gYm94ZXMoKS5zaXplKCk7IH0KKyAgICBjb25zdCBJbmxpbmVEaXNwbGF5OjpC
b3gmIGJveCgpIGNvbnN0IHsgcmV0dXJuIGJveGVzKClbbV9ib3hJbmRleF07IH0KKyAgICBhdXRv
JiBpbmxpbmVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gKm1faW5saW5lQ29udGVudDsgfQorCitw
cml2YXRlOgorICAgIGJvb2wgaXNXaXRoaW5JbmxpbmVCb3goY29uc3QgTGF5b3V0OjpCb3gmIGlu
bGluZUJveCkKKyAgICB7CisgICAgICAgIGF1dG8qIGxheW91dEJveCA9ICZib3goKS5sYXlvdXRC
b3goKS5wYXJlbnQoKTsKKyAgICAgICAgZm9yICg7IGxheW91dEJveC0+aXNJbmxpbmVCb3goKTsg
bGF5b3V0Qm94ID0gJmxheW91dEJveC0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChsYXlv
dXRCb3ggPT0gJmlubGluZUJveCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZU5l
eHRCb3goKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFhdEVuZCgpKTsKKyAgICAgICAgKyttX2Jv
eEluZGV4OworICAgIH0KKworICAgIHZvaWQgdHJhdmVyc2VQcmV2aW91c0JveCgpCisgICAgewor
ICAgICAgICBBU1NFUlQoIWF0RW5kKCkpOworICAgICAgICBtX2JveEluZGV4ID0gbV9ib3hJbmRl
eCA/IG1fYm94SW5kZXggLSAxIDogYm94ZXMoKS5zaXplKCk7CisgICAgfQorCisgICAgdm9pZCB0
cmF2ZXJzZU5leHRMZWFmKCkKKyAgICB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHRyYXZl
cnNlTmV4dEJveCgpOworICAgICAgICB9IHdoaWxlICghYXRFbmQoKSAmJiBib3goKS5pc0lubGlu
ZUJveCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZlcnNlUHJldmlvdXNMZWFmKCkKKyAgICB7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHRyYXZlcnNlUHJldmlvdXNCb3goKTsKKyAgICAg
ICAgfSB3aGlsZSAoIWF0RW5kKCkgJiYgYm94KCkuaXNJbmxpbmVCb3goKSk7CisgICAgfQorCisg
ICAgdm9pZCB0cmF2ZXJzZU5leHRXaXRoU2FtZUxheW91dEJveCgpCisgICAgeworICAgICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBib3goKS5sYXlvdXRCb3goKTsKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgdHJhdmVyc2VOZXh0Qm94KCk7CisgICAgICAgIH0gd2hpbGUgKCFhdEVuZCgpICYmICZi
b3goKS5sYXlvdXRCb3goKSAhPSAmbGF5b3V0Qm94KTsKKyAgICB9CisKKyAgICB2b2lkIHRyYXZl
cnNlUHJldmlvdXNXaXRoU2FtZUxheW91dEJveCgpCisgICAgeworICAgICAgICBhdXRvJiBsYXlv
dXRCb3ggPSBib3goKS5sYXlvdXRCb3goKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgdHJh
dmVyc2VQcmV2aW91c0JveCgpOworICAgICAgICB9IHdoaWxlICghYXRFbmQoKSAmJiAmYm94KCku
bGF5b3V0Qm94KCkgIT0gJmxheW91dEJveCk7CisgICAgfQorCisgICAgdm9pZCBzZXRBdEVuZCgp
IHsgbV9ib3hJbmRleCA9IGJveGVzKCkuc2l6ZSgpOyB9CisKKyAgICBjb25zdCBMYXlvdXRJbnRl
Z3JhdGlvbjo6SW5saW5lQ29udGVudDo6Qm94ZXMmIGJveGVzKCkgY29uc3QgeyByZXR1cm4gbV9p
bmxpbmVDb250ZW50LT5ib3hlczsgfQorICAgIGNvbnN0IExheW91dEludGVncmF0aW9uOjpMaW5l
JiBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5saW5lRm9yQm94KGJveCgp
KTsgfQorCisgICAgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyVGV4dCgpIGNvbnN0IHsgcmV0dXJu
IGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKCkpOyB9CisgICAgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBiaWRpTGV2ZWwoKSAlIDIgPyBUZXh0RGlyZWN0aW9u
OjpSVEwgOiBUZXh0RGlyZWN0aW9uOjpMVFI7IH0KKworICAgIFJlZlB0cjxjb25zdCBMYXlvdXRJ
bnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudD4gbV9pbmxpbmVDb250ZW50OworICAgIHNpemVfdCBt
X2JveEluZGV4IHsgMCB9OworfTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JJbmxpbmVC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJ
dGVyYXRvcklubGluZUJveC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFlYzVhNmFhMDM0YWE1MmVjMDIzMGI5
OThkZjAwYTgxNDI0YzA3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JJbmxpbmVCb3guY3BwCkBAIC0wLDAg
KzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
bGluZUl0ZXJhdG9ySW5saW5lQm94LmgiCisKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxp
bmVMYXlvdXQuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKyNpbmNsdWRlICJSZW5k
ZXJJbmxpbmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIElubGluZUl0ZXJh
dG9yIHsKKworSW5saW5lQm94OjpJbmxpbmVCb3goUGF0aFZhcmlhbnQmJiBwYXRoKQorICAgIDog
Qm94KFdURk1vdmUocGF0aCkpCit7Cit9CisKK3N0ZDo6cGFpcjxib29sLCBib29sPiBJbmxpbmVC
b3g6Omhhc0Nsb3NlZExlZnRBbmRSaWdodEVkZ2UoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBM
YXlvdXQga25vd3MgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHNvIHdlIHNob3VsZCBjb25z
dWx0IGl0LgorI2lmIEVOQUJMRShDU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspCisgICAgaWYgKHN0
eWxlKCkuYm94RGVjb3JhdGlvbkJyZWFrKCkgPT0gQm94RGVjb3JhdGlvbkJyZWFrOjpDbG9uZSkK
KyAgICAgICAgcmV0dXJuIHsgdHJ1ZSwgdHJ1ZSB9OworI2VuZGlmCisgICAgYm9vbCBpc0xUUiA9
IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgIGJvb2wgaXNGaXJzdCA9ICFw
cmV2aW91c0lubGluZUJveCgpICYmICFyZW5kZXJlcigpLmlzQ29udGludWF0aW9uKCk7CisgICAg
Ym9vbCBpc0xhc3QgPSAhbmV4dElubGluZUJveCgpICYmICFyZW5kZXJlcigpLmNvbnRpbnVhdGlv
bigpOworICAgIHJldHVybiB7IGlzTFRSID8gaXNGaXJzdCA6IGlzTGFzdCwgaXNMVFIgPyBpc0xh
c3QgOiBpc0ZpcnN0IH07Cit9OworCitJbmxpbmVCb3hJdGVyYXRvciBJbmxpbmVCb3g6Om5leHRJ
bmxpbmVCb3goKSBjb25zdAoreworICAgIHJldHVybiBJbmxpbmVCb3hJdGVyYXRvcigqdGhpcyku
dHJhdmVyc2VOZXh0SW5saW5lQm94KCk7Cit9CisKK0lubGluZUJveEl0ZXJhdG9yIElubGluZUJv
eDo6cHJldmlvdXNJbmxpbmVCb3goKSBjb25zdAoreworICAgIHJldHVybiBJbmxpbmVCb3hJdGVy
YXRvcigqdGhpcykudHJhdmVyc2VQcmV2aW91c0lubGluZUJveCgpOworfQorCitMZWFmQm94SXRl
cmF0b3IgSW5saW5lQm94OjpmaXJzdExlYWZCb3goKSBjb25zdAoreworICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIC0+IExlYWZCb3hJdGVyYXRv
ciB7CisgICAgICAgIHJldHVybiB7IHBhdGguZmlyc3RMZWFmQm94Rm9ySW5saW5lQm94KCkgfTsK
KyAgICB9KTsKK30KKworTGVhZkJveEl0ZXJhdG9yIElubGluZUJveDo6bGFzdExlYWZCb3goKSBj
b25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8m
IHBhdGgpIC0+IExlYWZCb3hJdGVyYXRvciB7CisgICAgICAgIHJldHVybiB7IHBhdGgubGFzdExl
YWZCb3hGb3JJbmxpbmVCb3goKSB9OworICAgIH0pOworfQorCitMZWFmQm94SXRlcmF0b3IgSW5s
aW5lQm94OjplbmRMZWFmQm94KCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBsYXN0ID0gbGFzdExl
YWZCb3goKSkKKyAgICAgICAgcmV0dXJuIGxhc3QtPm5leHRPbkxpbmUoKTsKKyAgICByZXR1cm4g
eyB9OworfQorCitJbmxpbmVCb3hJdGVyYXRvcjo6SW5saW5lQm94SXRlcmF0b3IoQm94OjpQYXRo
VmFyaWFudCYmIHBhdGhWYXJpYW50KQorICAgIDogQm94SXRlcmF0b3IoV1RGTW92ZShwYXRoVmFy
aWFudCkpCit7Cit9CisKK0lubGluZUJveEl0ZXJhdG9yOjpJbmxpbmVCb3hJdGVyYXRvcihjb25z
dCBCb3gmIGJveCkKKyAgICA6IEJveEl0ZXJhdG9yKGJveCkKK3sKK30KKworSW5saW5lQm94SXRl
cmF0b3ImIElubGluZUJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRJbmxpbmVCb3goKQoreworICAg
IFdURjo6c3dpdGNoT24obV9ib3gubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAg
ICAgICBwYXRoLnRyYXZlcnNlTmV4dElubGluZUJveCgpOworICAgIH0pOworICAgIHJldHVybiAq
dGhpczsKK30KKworSW5saW5lQm94SXRlcmF0b3ImIElubGluZUJveEl0ZXJhdG9yOjp0cmF2ZXJz
ZVByZXZpb3VzSW5saW5lQm94KCkKK3sKKyAgICBXVEY6OnN3aXRjaE9uKG1fYm94Lm1fcGF0aFZh
cmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcGF0aC50cmF2ZXJzZVByZXZpb3VzSW5s
aW5lQm94KCk7CisgICAgfSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitJbmxpbmVCb3hJdGVy
YXRvciBmaXJzdElubGluZUJveEZvcihjb25zdCBSZW5kZXJJbmxpbmUmIHJlbmRlcklubGluZSkK
K3sKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICBpZiAoYXV0byog
bGluZUxheW91dCA9IExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0Ojpjb250YWluaW5nKHJl
bmRlcklubGluZSkpCisgICAgICAgIHJldHVybiBsaW5lTGF5b3V0LT5maXJzdElubGluZUJveEZv
cihyZW5kZXJJbmxpbmUpOworI2VuZGlmCisgICAgcmV0dXJuIHsgQm94TGVnYWN5UGF0aCB7IHJl
bmRlcklubGluZS5maXJzdExpbmVCb3goKSB9IH07Cit9CisKK0lubGluZUJveEl0ZXJhdG9yIGZp
cnN0Um9vdElubGluZUJveEZvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrKQoreworI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorICAgIGlmIChhdXRvKiBsaW5lTGF5
b3V0ID0gYmxvY2subW9kZXJuTGluZUxheW91dCgpKQorICAgICAgICByZXR1cm4gbGluZUxheW91
dC0+Zmlyc3RSb290SW5saW5lQm94KCk7CisjZW5kaWYKKyAgICByZXR1cm4geyBCb3hMZWdhY3lQ
YXRoIHsgYmxvY2suZmlyc3RSb290Qm94KCkgfSB9OworfQorCitJbmxpbmVCb3hJdGVyYXRvciBp
bmxpbmVCb3hGb3IoY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCYgbGVnYWN5SW5saW5lRmxvd0Jv
eCkKK3sKKyAgICByZXR1cm4geyBCb3hMZWdhY3lQYXRoIHsgJmxlZ2FjeUlubGluZUZsb3dCb3gg
fSB9OworfQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCitJbmxpbmVC
b3hJdGVyYXRvciBpbmxpbmVCb3hGb3IoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNv
bnRlbnQmIGNvbnRlbnQsIGNvbnN0IElubGluZURpc3BsYXk6OkJveCYgYm94KQoreworICAgIHJl
dHVybiBpbmxpbmVCb3hGb3IoY29udGVudCwgY29udGVudC5pbmRleEZvckJveChib3gpKTsKK30K
KworSW5saW5lQm94SXRlcmF0b3IgaW5saW5lQm94Rm9yKGNvbnN0IExheW91dEludGVncmF0aW9u
OjpJbmxpbmVDb250ZW50JiBjb250ZW50LCBzaXplX3QgYm94SW5kZXgpCit7CisgICAgQVNTRVJU
KGNvbnRlbnQuYm94ZXNbYm94SW5kZXhdLmlzSW5saW5lQm94KCkpOworICAgIHJldHVybiB7IEJv
eE1vZGVyblBhdGggeyBjb250ZW50LCBib3hJbmRleCB9IH07Cit9CisjZW5kaWYKKworfQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9Jbmxp
bmVJdGVyYXRvcklubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L2lubGluZS9JbmxpbmVJdGVyYXRvcklubGluZUJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkYTcwOTkzODll
ZWU3Y2E1OGI3NjJiMWFjNWNkNDZlN2Q2NmEyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9ySW5saW5lQm94
LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSW5saW5lSXRlcmF0b3JCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgSW5saW5lSXRlcmF0b3IgeworCitjbGFzcyBJbmxpbmVCb3hJdGVyYXRvcjsKKworY2xhc3Mg
SW5saW5lQm94IDogcHVibGljIEJveCB7CitwdWJsaWM6CisgICAgSW5saW5lQm94KFBhdGhWYXJp
YW50JiYpOworCisgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KEJveDo6cmVuZGVyZXIo
KSk7IH0KKworICAgIHN0ZDo6cGFpcjxib29sLCBib29sPiBoYXNDbG9zZWRMZWZ0QW5kUmlnaHRF
ZGdlKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlLiBGb3IgaW50ZXJtZWRpYXRlIHBv
cnRpbmcgc3RlcHMgb25seS4KKyAgICBjb25zdCBMZWdhY3lJbmxpbmVGbG93Qm94KiBsZWdhY3lJ
bmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxMZWdhY3lJbmxpbmVGbG93Qm94PihC
b3g6OmxlZ2FjeUlubGluZUJveCgpKTsgfQorCisgICAgSW5saW5lQm94SXRlcmF0b3IgbmV4dElu
bGluZUJveCgpIGNvbnN0OworICAgIElubGluZUJveEl0ZXJhdG9yIHByZXZpb3VzSW5saW5lQm94
KCkgY29uc3Q7CisgICAgSW5saW5lQm94SXRlcmF0b3IgaXRlcmF0b3IoKSBjb25zdDsKKworICAg
IExlYWZCb3hJdGVyYXRvciBmaXJzdExlYWZCb3goKSBjb25zdDsKKyAgICBMZWFmQm94SXRlcmF0
b3IgbGFzdExlYWZCb3goKSBjb25zdDsKKyAgICBMZWFmQm94SXRlcmF0b3IgZW5kTGVhZkJveCgp
IGNvbnN0OworfTsKKworY2xhc3MgSW5saW5lQm94SXRlcmF0b3IgOiBwdWJsaWMgQm94SXRlcmF0
b3IgeworcHVibGljOgorICAgIElubGluZUJveEl0ZXJhdG9yKCkgeyB9CisgICAgSW5saW5lQm94
SXRlcmF0b3IoQm94OjpQYXRoVmFyaWFudCYmKTsKKyAgICBJbmxpbmVCb3hJdGVyYXRvcihjb25z
dCBCb3gmKTsKKworICAgIGNvbnN0IElubGluZUJveCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gZ2V0KCk7IH0KKyAgICBjb25zdCBJbmxpbmVCb3gqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiAmZ2V0KCk7IH0KKworICAgIElubGluZUJveEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRJbmxp
bmVCb3goKTsKKyAgICBJbmxpbmVCb3hJdGVyYXRvciYgdHJhdmVyc2VQcmV2aW91c0lubGluZUJv
eCgpOworCitwcml2YXRlOgorICAgIGNvbnN0IElubGluZUJveCYgZ2V0KCkgY29uc3QgeyByZXR1
cm4gZG93bmNhc3Q8SW5saW5lQm94PihtX2JveCk7IH0KK307CisKK0lubGluZUJveEl0ZXJhdG9y
IGZpcnN0SW5saW5lQm94Rm9yKGNvbnN0IFJlbmRlcklubGluZSYpOworSW5saW5lQm94SXRlcmF0
b3IgZmlyc3RSb290SW5saW5lQm94Rm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYpOworCitJbmxp
bmVCb3hJdGVyYXRvciBpbmxpbmVCb3hGb3IoY29uc3QgTGVnYWN5SW5saW5lRmxvd0JveCYpOwor
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorSW5saW5lQm94SXRlcmF0b3Ig
aW5saW5lQm94Rm9yKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiwgY29u
c3QgSW5saW5lRGlzcGxheTo6Qm94Jik7CitJbmxpbmVCb3hJdGVyYXRvciBpbmxpbmVCb3hGb3Io
Y29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGluZUNvbnRlbnQmLCBzaXplX3QgYm94SW5kZXgp
OworI2VuZGlmCisKK2lubGluZSBJbmxpbmVCb3hJdGVyYXRvciBJbmxpbmVCb3g6Oml0ZXJhdG9y
KCkgY29uc3QKK3sKKyAgICByZXR1cm4geyAqdGhpcyB9OworfQorCit9Cit9CisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OklubGluZUJveCkK
K3N0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6Qm94JiBi
b3gpIHsgcmV0dXJuIGJveC5pc0lubGluZUJveCgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6SW5saW5lSXRl
cmF0b3I6OklubGluZUJveEl0ZXJhdG9yKQorc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVyYXRvciYgYm94KSB7IHJldHVybiAhYm94IHx8IGJv
eC0+aXNJbmxpbmVCb3goKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVy
YXRvckxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGlu
ZS9JbmxpbmVJdGVyYXRvckxpbmVCb3guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5OTVjMWE5ODg1ZjU5YWMy
NjlhNGEzZGMxYzE5MGI1ZGY5MWRmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yTGluZUJveC5jcHAKQEAg
LTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5saW5lSXRlcmF0b3JMaW5lQm94LmgiCisKKyNpbmNsdWRlICJJbmxpbmVJdGVyYXRvckJv
eC5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIgorI2luY2x1ZGUg
IlJlbmRlckJsb2NrRmxvdy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgSW5s
aW5lSXRlcmF0b3IgeworCitMaW5lQm94SXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvcihMaW5lQm94
OjpQYXRoVmFyaWFudCYmIHBhdGhWYXJpYW50KQorICAgIDogbV9saW5lQm94KFdURk1vdmUocGF0
aFZhcmlhbnQpKQoreworfQorCitMaW5lQm94SXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvcihjb25z
dCBMaW5lQm94JiBsaW5lQm94KQorICAgIDogbV9saW5lQm94KGxpbmVCb3gpCit7Cit9CisKK2Jv
b2wgTGluZUJveEl0ZXJhdG9yOjphdEVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9saW5lQm94Lm1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAg
cmV0dXJuIHBhdGguYXRFbmQoKTsKKyAgICB9KTsKK30KKworTGluZUJveEl0ZXJhdG9yJiBMaW5l
Qm94SXRlcmF0b3I6OnRyYXZlcnNlTmV4dCgpCit7CisgICAgV1RGOjpzd2l0Y2hPbihtX2xpbmVC
b3gubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC50
cmF2ZXJzZU5leHQoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0xpbmVCb3hJ
dGVyYXRvciYgTGluZUJveEl0ZXJhdG9yOjp0cmF2ZXJzZVByZXZpb3VzKCkKK3sKKyAgICBXVEY6
OnN3aXRjaE9uKG1fbGluZUJveC5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAg
ICAgIHJldHVybiBwYXRoLnRyYXZlcnNlUHJldmlvdXMoKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK2Jvb2wgTGluZUJveEl0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IExpbmVC
b3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGluZUJveC5tX3BhdGhW
YXJpYW50ID09IG90aGVyLm1fbGluZUJveC5tX3BhdGhWYXJpYW50OworfQorCitMaW5lQm94SXRl
cmF0b3IgZmlyc3RMaW5lQm94Rm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3sKKyNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICBpZiAoYXV0byogbGluZUxh
eW91dCA9IGZsb3cubW9kZXJuTGluZUxheW91dCgpKQorICAgICAgICByZXR1cm4gbGluZUxheW91
dC0+Zmlyc3RMaW5lQm94KCk7CisjZW5kaWYKKworICAgIHJldHVybiB7IExpbmVCb3hJdGVyYXRv
ckxlZ2FjeVBhdGggeyBmbG93LmZpcnN0Um9vdEJveCgpIH0gfTsKK30KKworTGluZUJveEl0ZXJh
dG9yIGxhc3RMaW5lQm94Rm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3sKKyNpZiBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKyAgICBpZiAoYXV0byogbGluZUxheW91
dCA9IGZsb3cubW9kZXJuTGluZUxheW91dCgpKQorICAgICAgICByZXR1cm4gbGluZUxheW91dC0+
bGFzdExpbmVCb3goKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHsgTGluZUJveEl0ZXJhdG9yTGVn
YWN5UGF0aCB7IGZsb3cubGFzdFJvb3RCb3goKSB9IH07Cit9CisKK0xpbmVCb3hJdGVyYXRvciBM
aW5lQm94OjpuZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTGluZUJveEl0ZXJhdG9yKCp0aGlz
KS50cmF2ZXJzZU5leHQoKTsKK30KKworTGluZUJveEl0ZXJhdG9yIExpbmVCb3g6OnByZXZpb3Vz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTGluZUJveEl0ZXJhdG9yKCp0aGlzKS50cmF2ZXJzZVBy
ZXZpb3VzKCk7Cit9CisKK0xlYWZCb3hJdGVyYXRvciBMaW5lQm94OjpmaXJzdExlYWZCb3goKSBj
b25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8m
IHBhdGgpIC0+IExlYWZCb3hJdGVyYXRvciB7CisgICAgICAgIHJldHVybiB7IHBhdGguZmlyc3RM
ZWFmQm94KCkgfTsKKyAgICB9KTsKK30KKworTGVhZkJveEl0ZXJhdG9yIExpbmVCb3g6Omxhc3RM
ZWFmQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBbXShhdXRvJiBwYXRoKSAtPiBMZWFmQm94SXRlcmF0b3IgeworICAgICAgICByZXR1cm4geyBw
YXRoLmxhc3RMZWFmQm94KCkgfTsKKyAgICB9KTsKK30KKworTGVhZkJveEl0ZXJhdG9yIGNsb3Nl
c3RCb3hGb3JIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgTGluZUJveCYgbGluZUJveCwgZmxvYXQg
aG9yaXpvbnRhbFBvc2l0aW9uLCBib29sIGVkaXRhYmxlT25seSkKK3sKKyAgICBhdXRvIGlzRWRp
dGFibGUgPSBbJl0oYXV0byBib3gpIHsKKyAgICAgICAgcmV0dXJuIGJveCAmJiBib3gtPnJlbmRl
cmVyKCkubm9kZSgpICYmIGJveC0+cmVuZGVyZXIoKS5ub2RlKCktPmhhc0VkaXRhYmxlU3R5bGUo
KTsKKyAgICB9OworCisgICAgYXV0byBmaXJzdEJveCA9IGxpbmVCb3guZmlyc3RMZWFmQm94KCk7
CisgICAgYXV0byBsYXN0Qm94ID0gbGluZUJveC5sYXN0TGVhZkJveCgpOworCisgICAgaWYgKGZp
cnN0Qm94ICE9IGxhc3RCb3gpIHsKKyAgICAgICAgaWYgKGZpcnN0Qm94LT5pc0xpbmVCcmVhaygp
KQorICAgICAgICAgICAgZmlyc3RCb3ggPSBmaXJzdEJveC0+bmV4dE9uTGluZUlnbm9yaW5nTGlu
ZUJyZWFrKCk7CisgICAgICAgIGVsc2UgaWYgKGxhc3RCb3gtPmlzTGluZUJyZWFrKCkpCisgICAg
ICAgICAgICBsYXN0Qm94ID0gbGFzdEJveC0+cHJldmlvdXNPbkxpbmVJZ25vcmluZ0xpbmVCcmVh
aygpOworICAgIH0KKworICAgIGlmIChmaXJzdEJveCA9PSBsYXN0Qm94ICYmICghZWRpdGFibGVP
bmx5IHx8IGlzRWRpdGFibGUoZmlyc3RCb3gpKSkKKyAgICAgICAgcmV0dXJuIGZpcnN0Qm94Owor
CisgICAgaWYgKGZpcnN0Qm94ICYmIGhvcml6b250YWxQb3NpdGlvbiA8PSBmaXJzdEJveC0+bG9n
aWNhbExlZnQoKSAmJiAhZmlyc3RCb3gtPnJlbmRlcmVyKCkuaXNMaXN0TWFya2VyKCkgJiYgKCFl
ZGl0YWJsZU9ubHkgfHwgaXNFZGl0YWJsZShmaXJzdEJveCkpKQorICAgICAgICByZXR1cm4gZmly
c3RCb3g7CisKKyAgICBpZiAobGFzdEJveCAmJiBob3Jpem9udGFsUG9zaXRpb24gPj0gbGFzdEJv
eC0+bG9naWNhbFJpZ2h0KCkgJiYgIWxhc3RCb3gtPnJlbmRlcmVyKCkuaXNMaXN0TWFya2VyKCkg
JiYgKCFlZGl0YWJsZU9ubHkgfHwgaXNFZGl0YWJsZShsYXN0Qm94KSkpCisgICAgICAgIHJldHVy
biBsYXN0Qm94OworCisgICAgYXV0byBjbG9zZXN0Qm94ID0gbGFzdEJveDsKKyAgICBmb3IgKGF1
dG8gYm94ID0gZmlyc3RCb3g7IGJveDsgYm94ID0gYm94LnRyYXZlcnNlTmV4dE9uTGluZUlnbm9y
aW5nTGluZUJyZWFrKCkpIHsKKyAgICAgICAgaWYgKCFib3gtPnJlbmRlcmVyKCkuaXNMaXN0TWFy
a2VyKCkgJiYgKCFlZGl0YWJsZU9ubHkgfHwgaXNFZGl0YWJsZShib3gpKSkgeworICAgICAgICAg
ICAgaWYgKGhvcml6b250YWxQb3NpdGlvbiA8IGJveC0+bG9naWNhbFJpZ2h0KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJveDsKKyAgICAgICAgICAgIGNsb3Nlc3RCb3ggPSBib3g7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY2xvc2VzdEJveDsKK30KKworfQorfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0
ZXJhdG9yTGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGlu
ZS9JbmxpbmVJdGVyYXRvckxpbmVCb3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGY5ODMxMzg5ZGYzNTk0YjJm
Y2Q1NjcxMjZmYTdhYWY1YzA1NjIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckxpbmVCb3guaApAQCAtMCww
ICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRm9udEJh
c2VsaW5lLmgiCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMaW5lQm94TGVnYWN5UGF0aC5oIgor
I2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZUJveE1vZGVyblBhdGguaCIKKyNpbmNsdWRlICJS
ZW5kZXJCbG9ja0Zsb3cuaCIKKyNpbmNsdWRlIDx2YXJpYW50PgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIExpbmVTZWxlY3Rpb247CisKK25hbWVzcGFjZSBJbmxpbmVJdGVyYXRvciB7
CisKK2NsYXNzIExpbmVCb3hJdGVyYXRvcjsKK2NsYXNzIFBhdGhJdGVyYXRvcjsKK2NsYXNzIExl
YWZCb3hJdGVyYXRvcjsKKworc3RydWN0IEVuZExpbmVCb3hJdGVyYXRvciB7IH07CisKK2NsYXNz
IExpbmVCb3ggeworcHVibGljOgorICAgIHVzaW5nIFBhdGhWYXJpYW50ID0gc3RkOjp2YXJpYW50
PAorI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorICAgICAgICBMaW5lQm94
SXRlcmF0b3JNb2Rlcm5QYXRoLAorI2VuZGlmCisgICAgICAgIExpbmVCb3hJdGVyYXRvckxlZ2Fj
eVBhdGgKKyAgICA+OworCisgICAgTGluZUJveChQYXRoVmFyaWFudCYmKTsKKworICAgIGZsb2F0
IHRvcCgpIGNvbnN0OworICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0OworICAgIGZsb2F0IGhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIGJvdHRvbSgpIC0gdG9wKCk7IH0KKworICAgIGZsb2F0IGNvbnRl
bnRMb2dpY2FsVG9wKCkgY29uc3Q7CisgICAgZmxvYXQgY29udGVudExvZ2ljYWxCb3R0b20oKSBj
b25zdDsKKyAgICBmbG9hdCBjb250ZW50TG9naWNhbExlZnQoKSBjb25zdDsKKyAgICBmbG9hdCBj
b250ZW50TG9naWNhbFJpZ2h0KCkgY29uc3Q7CisgICAgZmxvYXQgY29udGVudExvZ2ljYWxXaWR0
aCgpIGNvbnN0OworCisgICAgZmxvYXQgY29udGVudExvZ2ljYWxUb3BBZGp1c3RlZEZvclByZWNl
ZGluZ0xpbmVCb3goKSBjb25zdDsKKyAgICBmbG9hdCBjb250ZW50TG9naWNhbEJvdHRvbUFkanVz
dGVkRm9yRm9sbG93aW5nTGluZUJveCgpIGNvbnN0OworCisgICAgZmxvYXQgaW5rT3ZlcmZsb3dU
b3AoKSBjb25zdDsKKyAgICBmbG9hdCBpbmtPdmVyZmxvd0JvdHRvbSgpIGNvbnN0OworCisgICAg
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiBjb250YWluaW5nQmxvY2soKSBjb25zdDsKKyAgICBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciogY29udGFpbmluZ0ZyYWdtZW50KCkgY29uc3Q7CisKKyAgICBi
b29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OworICAgIEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUo
KSBjb25zdDsKKworICAgIGJvb2wgaXNGaXJzdCgpIGNvbnN0OworICAgIGJvb2wgaXNGaXJzdEFm
dGVyUGFnZUJyZWFrKCkgY29uc3Q7CisKKyAgICBMZWFmQm94SXRlcmF0b3IgZmlyc3RMZWFmQm94
KCkgY29uc3Q7CisgICAgTGVhZkJveEl0ZXJhdG9yIGxhc3RMZWFmQm94KCkgY29uc3Q7CisKKyAg
ICBMaW5lQm94SXRlcmF0b3IgbmV4dCgpIGNvbnN0OworICAgIExpbmVCb3hJdGVyYXRvciBwcmV2
aW91cygpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMaW5lQm94SXRlcmF0
b3I7CisKKyAgICBQYXRoVmFyaWFudCBtX3BhdGhWYXJpYW50OworfTsKKworY2xhc3MgTGluZUJv
eEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBMaW5lQm94SXRlcmF0b3IoKSA6IG1fbGluZUJveChM
aW5lQm94SXRlcmF0b3JMZWdhY3lQYXRoIHsgbnVsbHB0ciB9KSB7IH07CisgICAgTGluZUJveEl0
ZXJhdG9yKGNvbnN0IExlZ2FjeVJvb3RJbmxpbmVCb3gqIHJvb3RJbmxpbmVCb3gpIDogbV9saW5l
Qm94KExpbmVCb3hJdGVyYXRvckxlZ2FjeVBhdGggeyByb290SW5saW5lQm94IH0pIHsgfTsKKyAg
ICBMaW5lQm94SXRlcmF0b3IoTGluZUJveDo6UGF0aFZhcmlhbnQmJik7CisgICAgTGluZUJveEl0
ZXJhdG9yKGNvbnN0IExpbmVCb3gmKTsKKworICAgIExpbmVCb3hJdGVyYXRvciYgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuIHRyYXZlcnNlTmV4dCgpOyB9CisgICAgTGluZUJveEl0ZXJhdG9yJiB0cmF2
ZXJzZU5leHQoKTsKKyAgICBMaW5lQm94SXRlcmF0b3ImIHRyYXZlcnNlUHJldmlvdXMoKTsKKwor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhYXRFbmQoKTsgfQor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmVCb3hJdGVyYXRvciYpIGNvbnN0OworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBMaW5lQm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KEVuZExpbmVC
b3hJdGVyYXRvcikgY29uc3QgeyByZXR1cm4gYXRFbmQoKTsgfQorICAgIGJvb2wgb3BlcmF0b3Ih
PShFbmRMaW5lQm94SXRlcmF0b3IpIGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9CisKKyAgICBj
b25zdCBMaW5lQm94JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3g7IH0KKyAg
ICBjb25zdCBMaW5lQm94KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fbGluZUJveDsg
fQorCisgICAgYm9vbCBhdEVuZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIExpbmVCb3ggbV9s
aW5lQm94OworfTsKKworTGluZUJveEl0ZXJhdG9yIGZpcnN0TGluZUJveEZvcihjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmKTsKK0xpbmVCb3hJdGVyYXRvciBsYXN0TGluZUJveEZvcihjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmKTsKK0xlYWZCb3hJdGVyYXRvciBjbG9zZXN0Qm94Rm9ySG9yaXpvbnRhbFBv
c2l0aW9uKGNvbnN0IExpbmVCb3gmLCBmbG9hdCBob3Jpem9udGFsUG9zaXRpb24sIGJvb2wgZWRp
dGFibGVPbmx5ID0gZmFsc2UpOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQoraW5saW5lIGZsb2F0IHByZXZpb3VzTGluZUJveENvbnRlbnRCb3R0
b21PckJvcmRlckFuZFBhZGRpbmcoY29uc3QgTGluZUJveCYgbGluZUJveCkKK3sKKyAgICByZXR1
cm4gbGluZUJveC5pc0ZpcnN0KCkgPyBsaW5lQm94LmNvbnRhaW5pbmdCbG9jaygpLmJvcmRlckFu
ZFBhZGRpbmdCZWZvcmUoKS50b0Zsb2F0KCkgOiBsaW5lQm94LmNvbnRlbnRMb2dpY2FsVG9wQWRq
dXN0ZWRGb3JQcmVjZWRpbmdMaW5lQm94KCk7IAorfQorCitpbmxpbmUgZmxvYXQgY29udGVudFN0
YXJ0SW5CbG9ja0RpcmVjdGlvbihjb25zdCBMaW5lQm94JiBsaW5lQm94KQoreworICAgIGlmICgh
bGluZUJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om1heChsaW5lQm94LmNvbnRlbnRMb2dpY2FsVG9w
KCksIHByZXZpb3VzTGluZUJveENvbnRlbnRCb3R0b21PckJvcmRlckFuZFBhZGRpbmcobGluZUJv
eCkpOworICAgIHJldHVybiBzdGQ6Om1pbihsaW5lQm94LmNvbnRlbnRMb2dpY2FsQm90dG9tKCks
IGxpbmVCb3guY29udGVudExvZ2ljYWxCb3R0b21BZGp1c3RlZEZvckZvbGxvd2luZ0xpbmVCb3go
KSk7Cit9CisKK2lubGluZSBMaW5lQm94OjpMaW5lQm94KFBhdGhWYXJpYW50JiYgcGF0aCkKKyAg
ICA6IG1fcGF0aFZhcmlhbnQoV1RGTW92ZShwYXRoKSkKK3sKK30KKworaW5saW5lIGZsb2F0IExp
bmVCb3g6OmNvbnRlbnRMb2dpY2FsVG9wKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVy
biBwYXRoLmNvbnRlbnRMb2dpY2FsVG9wKCk7CisgICAgfSk7Cit9CisKK2lubGluZSBmbG9hdCBM
aW5lQm94Ojpjb250ZW50TG9naWNhbEJvdHRvbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAgICAgICBy
ZXR1cm4gcGF0aC5jb250ZW50TG9naWNhbEJvdHRvbSgpOworICAgIH0pOworfQorCitpbmxpbmUg
ZmxvYXQgTGluZUJveDo6Y29udGVudExvZ2ljYWxUb3BBZGp1c3RlZEZvclByZWNlZGluZ0xpbmVC
b3goKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtd
KGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguY29udGVudExvZ2ljYWxU
b3BBZGp1c3RlZEZvclByZWNlZGluZ0xpbmVCb3goKTsKKyAgICB9KTsKK30KKworaW5saW5lIGZs
b2F0IExpbmVCb3g6OmNvbnRlbnRMb2dpY2FsQm90dG9tQWRqdXN0ZWRGb3JGb2xsb3dpbmdMaW5l
Qm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBb
XShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmNvbnRlbnRMb2dpY2Fs
Qm90dG9tQWRqdXN0ZWRGb3JGb2xsb3dpbmdMaW5lQm94KCk7CisgICAgfSk7Cit9CisKK2lubGlu
ZSBmbG9hdCBMaW5lQm94Ojp0b3AoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBh
dGgudG9wKCk7CisgICAgfSk7Cit9CisKK2lubGluZSBmbG9hdCBMaW5lQm94Ojpib3R0b20oKSBj
b25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0
IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguYm90dG9tKCk7CisgICAgfSk7Cit9
CisKK2lubGluZSBmbG9hdCBMaW5lQm94OjppbmtPdmVyZmxvd1RvcCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkg
eworICAgICAgICByZXR1cm4gcGF0aC5pbmtPdmVyZmxvd1RvcCgpOworICAgIH0pOworfQorCitp
bmxpbmUgZmxvYXQgTGluZUJveDo6aW5rT3ZlcmZsb3dCb3R0b20oKSBjb25zdAoreworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsK
KyAgICAgICAgcmV0dXJuIHBhdGguaW5rT3ZlcmZsb3dCb3R0b20oKTsKKyAgICB9KTsKK30KKwor
aW5saW5lIGZsb2F0IExpbmVCb3g6OmNvbnRlbnRMb2dpY2FsTGVmdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkg
eworICAgICAgICByZXR1cm4gcGF0aC5jb250ZW50TG9naWNhbExlZnQoKTsKKyAgICB9KTsKK30K
KworaW5saW5lIGZsb2F0IExpbmVCb3g6OmNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdAorewor
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBh
dGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguY29udGVudExvZ2ljYWxSaWdodCgpOworICAgIH0p
OworfQorCitpbmxpbmUgZmxvYXQgTGluZUJveDo6Y29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSAtIGNvbnRlbnRMb2dpY2FsTGVm
dCgpOworfQorCitpbmxpbmUgYm9vbCBMaW5lQm94Ojppc0hvcml6b250YWwoKSBjb25zdAorewor
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBh
dGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNIb3Jpem9udGFsKCk7CisgICAgfSk7Cit9CisK
K2lubGluZSBGb250QmFzZWxpbmUgTGluZUJveDo6YmFzZWxpbmVUeXBlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRo
KSB7CisgICAgICAgIHJldHVybiBwYXRoLmJhc2VsaW5lVHlwZSgpOworICAgIH0pOworfQorCitp
bmxpbmUgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBMaW5lQm94Ojpjb250YWluaW5nQmxvY2soKSBj
b25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0
IGF1dG8mIHBhdGgpIC0+IGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgeworICAgICAgICByZXR1cm4g
cGF0aC5jb250YWluaW5nQmxvY2soKTsKKyAgICB9KTsKK30KKworaW5saW5lIFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKiBMaW5lQm94Ojpjb250YWluaW5nRnJhZ21lbnQoKSBjb25zdAoreworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGNvbnN0IGF1dG8mIHBhdGgp
IHsKKyAgICAgICAgcmV0dXJuIHBhdGguY29udGFpbmluZ0ZyYWdtZW50KCk7CisgICAgfSk7Cit9
CisKK2lubGluZSBib29sIExpbmVCb3g6OmlzRmlyc3RBZnRlclBhZ2VCcmVhaygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYg
cGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5pc0ZpcnN0QWZ0ZXJQYWdlQnJlYWsoKTsKKyAg
ICB9KTsKK30KKworaW5saW5lIGJvb2wgTGluZUJveDo6aXNGaXJzdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFwcmV2aW91cygpOworfQorCit9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JMaW5lQm94TGVnYWN5
UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJ
dGVyYXRvckxpbmVCb3hMZWdhY3lQYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ4ZTMxYmY0YWUwMWU3ZWYy
MzA5ZmJkNzQ3YWJlODk4YTk0N2VjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JMaW5lQm94TGVnYWN5UGF0
aC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIklubGluZUl0ZXJhdG9yQm94TGVnYWN5UGF0aC5oIgorI2luY2x1ZGUgIkxheW91dEludGVn
cmF0aW9uSW5saW5lQ29udGVudC5oIgorI2luY2x1ZGUgIkxlZ2FjeVJvb3RJbmxpbmVCb3guaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKKworY2xh
c3MgTGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aCB7CitwdWJsaWM6CisgICAgTGluZUJveEl0ZXJh
dG9yTGVnYWN5UGF0aChjb25zdCBMZWdhY3lSb290SW5saW5lQm94KiByb290SW5saW5lQm94KQor
ICAgICAgICA6IG1fcm9vdElubGluZUJveChyb290SW5saW5lQm94KQorICAgIHsKKyAgICB9Cisg
ICAgTGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aChMaW5lQm94SXRlcmF0b3JMZWdhY3lQYXRoJiYp
ID0gZGVmYXVsdDsKKyAgICBMaW5lQm94SXRlcmF0b3JMZWdhY3lQYXRoKGNvbnN0IExpbmVCb3hJ
dGVyYXRvckxlZ2FjeVBhdGgmKSA9IGRlZmF1bHQ7CisgICAgTGluZUJveEl0ZXJhdG9yTGVnYWN5
UGF0aCYgb3BlcmF0b3I9KGNvbnN0IExpbmVCb3hJdGVyYXRvckxlZ2FjeVBhdGgmKSA9IGRlZmF1
bHQ7CisgICAgTGluZUJveEl0ZXJhdG9yTGVnYWN5UGF0aCYgb3BlcmF0b3I9KExpbmVCb3hJdGVy
YXRvckxlZ2FjeVBhdGgmJikgPSBkZWZhdWx0OworCisgICAgZmxvYXQgY29udGVudExvZ2ljYWxU
b3AoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxpbmVUb3AoKS50b0Zsb2F0KCk7
IH0KKyAgICBmbG9hdCBjb250ZW50TG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC0+bGluZUJvdHRvbSgpLnRvRmxvYXQoKTsgfQorICAgIGZsb2F0IGNvbnRlbnRM
b2dpY2FsVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdMaW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9y
b290SW5saW5lQm94LT5zZWxlY3Rpb25Ub3AoKS50b0Zsb2F0KCk7IH0KKyAgICBmbG9hdCBjb250
ZW50TG9naWNhbEJvdHRvbUFkanVzdGVkRm9yRm9sbG93aW5nTGluZUJveCgpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdElubGluZUJveC0+c2VsZWN0aW9uQm90dG9tKCkudG9GbG9hdCgpOyB9CisgICAg
ZmxvYXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5saW5lQm94VG9wKCku
dG9GbG9hdCgpOyB9CisgICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5s
aW5lQm94LT5saW5lQm94Qm90dG9tKCkudG9GbG9hdCgpOyB9CisgICAgZmxvYXQgaW5rT3ZlcmZs
b3dUb3AoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxvZ2ljYWxUb3BWaXN1YWxP
dmVyZmxvdygpOyB9CisgICAgZmxvYXQgaW5rT3ZlcmZsb3dCb3R0b20oKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RJbmxpbmVCb3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpOyB9CisKKyAg
ICBmbG9hdCBjb250ZW50TG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVC
b3gtPmxvZ2ljYWxMZWZ0KCk7IH0KKyAgICBmbG9hdCBjb250ZW50TG9naWNhbFJpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5sb2dpY2FsUmlnaHQoKTsgfQorICAgIGJvb2wg
aXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5pc0hvcml6b250
YWwoKTsgfQorICAgIEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3Jvb3RJbmxpbmVCb3gtPmJhc2VsaW5lVHlwZSgpOyB9CisKKyAgICBjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+
YmxvY2tGbG93KCk7IH0KKworICAgIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBjb250YWluaW5n
RnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmNvbnRhaW5pbmdGcmFn
bWVudCgpOyB9CisgICAgYm9vbCBpc0ZpcnN0QWZ0ZXJQYWdlQnJlYWsoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RJbmxpbmVCb3gtPmlzRmlyc3RBZnRlclBhZ2VCcmVhaygpOyB9CisKKyAgICB2b2lk
IHRyYXZlcnNlTmV4dCgpCisgICAgeworICAgICAgICBtX3Jvb3RJbmxpbmVCb3ggPSBtX3Jvb3RJ
bmxpbmVCb3gtPm5leHRSb290Qm94KCk7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZVByZXZp
b3VzKCkKKyAgICB7CisgICAgICAgIG1fcm9vdElubGluZUJveCA9IG1fcm9vdElubGluZUJveC0+
cHJldlJvb3RCb3goKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZUJv
eEl0ZXJhdG9yTGVnYWN5UGF0aCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJv
eCA9PSBvdGhlci5tX3Jvb3RJbmxpbmVCb3g7IH0KKworICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7
IHJldHVybiAhbV9yb290SW5saW5lQm94OyB9CisKKyAgICBCb3hMZWdhY3lQYXRoIGZpcnN0TGVh
ZkJveCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geyBtX3Jvb3RJbmxpbmVCb3gtPmZp
cnN0TGVhZkRlc2NlbmRhbnQoKSB9OworICAgIH0KKworICAgIEJveExlZ2FjeVBhdGggbGFzdExl
YWZCb3goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsgbV9yb290SW5saW5lQm94LT5s
YXN0TGVhZkRlc2NlbmRhbnQoKSB9OworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBMZWdh
Y3lSb290SW5saW5lQm94KiBtX3Jvb3RJbmxpbmVCb3g7Cit9OworCit9Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9y
TGluZUJveE1vZGVyblBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9p
bmxpbmUvSW5saW5lSXRlcmF0b3JMaW5lQm94TW9kZXJuUGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmYjJj
MGQwNzZmOTBmMjkyMmY4MDRmYzcyYWQyNjc0MDIzZGFmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yTGlu
ZUJveE1vZGVyblBhdGguaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRl
ICJJbmxpbmVJdGVyYXRvckJveE1vZGVyblBhdGguaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3Jh
dGlvbklubGluZUNvbnRlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIElubGluZUl0ZXJhdG9yIHsKKworY2xhc3MgQm94
TW9kZXJuUGF0aDsKKworY2xhc3MgTGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aCB7CitwdWJsaWM6
CisgICAgTGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aChjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6
SW5saW5lQ29udGVudCYgaW5saW5lQ29udGVudCwgc2l6ZV90IGxpbmVJbmRleCkKKyAgICAgICAg
OiBtX2lubGluZUNvbnRlbnQoJmlubGluZUNvbnRlbnQpCisgICAgICAgICwgbV9saW5lSW5kZXgo
bGluZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxpbmVJbmRleCA8PSBsaW5lcygpLnNp
emUoKSk7CisgICAgfQorICAgIExpbmVCb3hJdGVyYXRvck1vZGVyblBhdGgoTGluZUJveEl0ZXJh
dG9yTW9kZXJuUGF0aCYmKSA9IGRlZmF1bHQ7CisgICAgTGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0
aChjb25zdCBMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoJikgPSBkZWZhdWx0OworICAgIExpbmVC
b3hJdGVyYXRvck1vZGVyblBhdGgmIG9wZXJhdG9yPShjb25zdCBMaW5lQm94SXRlcmF0b3JNb2Rl
cm5QYXRoJikgPSBkZWZhdWx0OworICAgIExpbmVCb3hJdGVyYXRvck1vZGVyblBhdGgmIG9wZXJh
dG9yPShMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoJiYpID0gZGVmYXVsdDsKKworICAgIGZsb2F0
IGNvbnRlbnRMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbGluZSgpLmVuY2xvc2luZ0NvbnRl
bnRUb3AoKTsgfQorICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1
cm4gbGluZSgpLmVuY2xvc2luZ0NvbnRlbnRCb3R0b20oKTsgfQorICAgIGZsb2F0IHRvcCgpIGNv
bnN0IHsgcmV0dXJuIGxpbmUoKS5saW5lQm94VG9wKCk7IH0KKyAgICBmbG9hdCBib3R0b20oKSBj
b25zdCB7IHJldHVybiBsaW5lKCkubGluZUJveEJvdHRvbSgpOyB9CisgICAgZmxvYXQgaW5rT3Zl
cmZsb3dUb3AoKSBjb25zdCB7IHJldHVybiBsaW5lKCkuaW5rT3ZlcmZsb3coKS55KCk7IH0KKyAg
ICBmbG9hdCBpbmtPdmVyZmxvd0JvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5pbmtPdmVy
ZmxvdygpLm1heFkoKTsgfQorCisgICAgZmxvYXQgY29udGVudExvZ2ljYWxUb3BBZGp1c3RlZEZv
clByZWNlZGluZ0xpbmVCb3goKSBjb25zdCB7IHJldHVybiAhbV9saW5lSW5kZXggPyBjb250ZW50
TG9naWNhbFRvcCgpIDogTGluZUJveEl0ZXJhdG9yTW9kZXJuUGF0aCgqbV9pbmxpbmVDb250ZW50
LCBtX2xpbmVJbmRleCAtIDEpLmNvbnRlbnRMb2dpY2FsQm90dG9tQWRqdXN0ZWRGb3JGb2xsb3dp
bmdMaW5lQm94KCk7IH0KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIGZsb2F0IGNvbnRl
bnRMb2dpY2FsQm90dG9tQWRqdXN0ZWRGb3JGb2xsb3dpbmdMaW5lQm94KCkgY29uc3QgeyByZXR1
cm4gY29udGVudExvZ2ljYWxCb3R0b20oKTsgfQorCisgICAgZmxvYXQgY29udGVudExvZ2ljYWxM
ZWZ0KCkgY29uc3QgeyByZXR1cm4gbGluZSgpLmxpbmVCb3hMZWZ0KCkgKyBsaW5lKCkuY29udGVu
dExvZ2ljYWxPZmZzZXQoKTsgfQorICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25z
dCB7IHJldHVybiBjb250ZW50TG9naWNhbExlZnQoKSArIGxpbmUoKS5jb250ZW50TG9naWNhbFdp
ZHRoKCk7IH0KKyAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5p
c0hvcml6b250YWwoKTsgfQorICAgIEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUoKSBjb25zdCB7
IHJldHVybiBsaW5lKCkuYmFzZWxpbmVUeXBlKCk7IH0KKworICAgIGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgY29udGFpbmluZ0Jsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5j
b250YWluaW5nQmxvY2soKTsgfQorCisgICAgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqIGNvbnRh
aW5pbmdGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBib29sIGlzRmly
c3RBZnRlclBhZ2VCcmVhaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIHRy
YXZlcnNlTmV4dCgpCisgICAgeworICAgICAgICBBU1NFUlQoIWF0RW5kKCkpOworCisgICAgICAg
ICsrbV9saW5lSW5kZXg7CisgICAgfQorCisgICAgdm9pZCB0cmF2ZXJzZVByZXZpb3VzKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghYXRFbmQoKSk7CisKKyAgICAgICAgaWYgKCFtX2xpbmVJbmRl
eCkgeworICAgICAgICAgICAgc2V0QXRFbmQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIC0tbV9saW5lSW5kZXg7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IExpbmVCb3hJdGVyYXRvck1vZGVyblBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX2lubGluZUNvbnRlbnQgPT0gb3RoZXIubV9pbmxpbmVDb250ZW50ICYmIG1fbGluZUluZGV4
ID09IG90aGVyLm1fbGluZUluZGV4OyB9CisKKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lSW5kZXggPT0gbGluZXMoKS5zaXplKCk7IH0KKworICAgIEJveE1vZGVyblBhdGgg
Zmlyc3RMZWFmQm94KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbGluZSgpLmJveENvdW50
KCkpCisgICAgICAgICAgICByZXR1cm4geyAqbV9pbmxpbmVDb250ZW50IH07CisgICAgICAgIGF1
dG8gcnVuSXRlcmF0b3IgPSBCb3hNb2Rlcm5QYXRoIHsgKm1faW5saW5lQ29udGVudCwgbGluZSgp
LmZpcnN0Qm94SW5kZXgoKSB9OworICAgICAgICBpZiAocnVuSXRlcmF0b3IuYm94KCkuaXNJbmxp
bmVCb3goKSkKKyAgICAgICAgICAgIHJ1bkl0ZXJhdG9yLnRyYXZlcnNlTmV4dE9uTGluZSgpOwor
ICAgICAgICByZXR1cm4gcnVuSXRlcmF0b3I7CisgICAgfQorCisgICAgQm94TW9kZXJuUGF0aCBs
YXN0TGVhZkJveCgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGJveENvdW50ID0gbGluZSgp
LmJveENvdW50KCk7CisgICAgICAgIGlmICghYm94Q291bnQpCisgICAgICAgICAgICByZXR1cm4g
eyAqbV9pbmxpbmVDb250ZW50IH07CisgICAgICAgIGF1dG8gcnVuSXRlcmF0b3IgPSBCb3hNb2Rl
cm5QYXRoIHsgKm1faW5saW5lQ29udGVudCwgbGluZSgpLmZpcnN0Qm94SW5kZXgoKSArIGJveENv
dW50IC0gMSB9OworICAgICAgICBpZiAocnVuSXRlcmF0b3IuYm94KCkuaXNJbmxpbmVCb3goKSkK
KyAgICAgICAgICAgIHJ1bkl0ZXJhdG9yLnRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKTsKKyAgICAg
ICAgcmV0dXJuIHJ1bkl0ZXJhdG9yOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHNldEF0
RW5kKCkgeyBtX2xpbmVJbmRleCA9IGxpbmVzKCkuc2l6ZSgpOyB9CisKKyAgICBjb25zdCBMYXlv
dXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudDo6TGluZXMmIGxpbmVzKCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVDb250ZW50LT5saW5lczsgfQorICAgIGNvbnN0IExheW91dEludGVncmF0aW9u
OjpMaW5lJiBsaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZXMoKVttX2xpbmVJbmRleF07IH0KKwor
ICAgIFJlZlB0cjxjb25zdCBMYXlvdXRJbnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudD4gbV9pbmxp
bmVDb250ZW50OworICAgIHNpemVfdCBtX2xpbmVJbmRleCB7IDAgfTsKK307CisKK30KK30KKwor
I2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9p
bmxpbmUvSW5saW5lSXRlcmF0b3JMb2dpY2FsT3JkZXJUcmF2ZXJzYWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9JbmxpbmVJdGVyYXRvckxvZ2ljYWxPcmRl
clRyYXZlcnNhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY0YmMyMDJkZGRlMWE1YTUzZjNkYTBjMGM3ZjE2
NzAwMjM0YjY3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JMb2dpY2FsT3JkZXJUcmF2ZXJzYWwuY3BwCkBA
IC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIklubGluZUl0ZXJhdG9yTG9naWNhbE9yZGVyVHJhdmVyc2FsLmgiCisKKyNpbmNsdWRlICJJ
bmxpbmVJdGVyYXRvckxpbmVCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNl
IElubGluZUl0ZXJhdG9yIHsKKworc3RhdGljIFRleHRMb2dpY2FsT3JkZXJDYWNoZSBtYWtlVGV4
dExvZ2ljYWxPcmRlckNhY2hlSWZOZWVkZWQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKK3sKKyAg
ICBpZiAoIXRleHQubmVlZHNWaXN1YWxSZW9yZGVyaW5nKCkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBhdXRvIGNhY2hlID0gbWFrZVVuaXF1ZTxUZXh0TG9naWNhbE9yZGVyQ2FjaGVEYXRh
PigpOworICAgIGZvciAoYXV0byB0ZXh0Qm94IDogdGV4dEJveGVzRm9yKHRleHQpKQorICAgICAg
ICBjYWNoZS0+Ym94ZXMuYXBwZW5kKHRleHRCb3gpOworCisgICAgaWYgKGNhY2hlLT5ib3hlcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RkOjpzb3J0KGNhY2hl
LT5ib3hlcy5iZWdpbigpLCBjYWNoZS0+Ym94ZXMuZW5kKCksIFsmXShhdXRvJiBhLCBhdXRvJiBi
KSB7CisgICAgICAgIHJldHVybiBhLT5zdGFydCgpIDwgYi0+c3RhcnQoKTsKKyAgICB9KTsKKwor
ICAgIHJldHVybiBjYWNoZTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlVGV4dExvZ2ljYWxPcmRl
ckNhY2hlSWZOZWVkZWQoY29uc3QgVGV4dEJveEl0ZXJhdG9yJiB0ZXh0Qm94LCBUZXh0TG9naWNh
bE9yZGVyQ2FjaGUmIGNhY2hlKQoreworICAgIGlmICghY2FjaGUgJiYgIShjYWNoZSA9IG1ha2VU
ZXh0TG9naWNhbE9yZGVyQ2FjaGVJZk5lZWRlZCh0ZXh0Qm94LT5yZW5kZXJlcigpKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChjYWNoZS0+aW5kZXggPCBjYWNoZS0+Ym94ZXMuc2l6ZSgp
ICYmIGNhY2hlLT5ib3hlc1tjYWNoZS0+aW5kZXhdID09IHRleHRCb3gpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNhY2hlLT5pbmRleCA9IGNhY2hlLT5ib3hlcy5maW5kKHRleHRCb3gpOworCisg
ICAgaWYgKGNhY2hlLT5pbmRleCA9PSBub3RGb3VuZCkgeworICAgICAgICBjYWNoZSA9IHsgfTsK
KyAgICAgICAgdXBkYXRlVGV4dExvZ2ljYWxPcmRlckNhY2hlSWZOZWVkZWQodGV4dEJveCwgY2Fj
aGUpOworICAgIH0KK30KKworc3RkOjpwYWlyPFRleHRCb3hJdGVyYXRvciwgVGV4dExvZ2ljYWxP
cmRlckNhY2hlPiBmaXJzdFRleHRCb3hJbkxvZ2ljYWxPcmRlckZvcihjb25zdCBSZW5kZXJUZXh0
JiB0ZXh0KQoreworICAgIGlmIChhdXRvIGNhY2hlID0gbWFrZVRleHRMb2dpY2FsT3JkZXJDYWNo
ZUlmTmVlZGVkKHRleHQpKQorICAgICAgICByZXR1cm4geyBjYWNoZS0+Ym94ZXMuZmlyc3QoKSwg
V1RGTW92ZShjYWNoZSkgfTsKKworICAgIHJldHVybiB7IGZpcnN0VGV4dEJveEZvcih0ZXh0KSwg
bnVsbHB0ciB9OworfQorCitUZXh0Qm94SXRlcmF0b3IgbmV4dFRleHRCb3hJbkxvZ2ljYWxPcmRl
cihjb25zdCBUZXh0Qm94SXRlcmF0b3ImIHRleHRCb3gsIFRleHRMb2dpY2FsT3JkZXJDYWNoZSYg
Y2FjaGUpCit7CisgICAgdXBkYXRlVGV4dExvZ2ljYWxPcmRlckNhY2hlSWZOZWVkZWQodGV4dEJv
eCwgY2FjaGUpOworCisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIHRleHRCb3gtPm5l
eHRUZXh0Qm94KCk7CisKKyAgICBjYWNoZS0+aW5kZXgrKzsKKworICAgIGlmIChjYWNoZS0+aW5k
ZXggPCBjYWNoZS0+Ym94ZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gY2FjaGUtPmJveGVzW2Nh
Y2hlLT5pbmRleF07CisKKyAgICByZXR1cm4geyB9OworfQorCitzdGF0aWMgTGluZUxvZ2ljYWxP
cmRlckNhY2hlIG1ha2VMaW5lTG9naWNhbE9yZGVyQ2FjaGUoY29uc3QgTGluZUJveEl0ZXJhdG9y
JiBsaW5lQm94KQoreworICAgIGF1dG8gY2FjaGUgPSBtYWtlVW5pcXVlPExpbmVMb2dpY2FsT3Jk
ZXJDYWNoZURhdGE+KCk7CisKKyAgICBjYWNoZS0+bGluZUJveCA9IGxpbmVCb3g7CisgICAgY2Fj
aGUtPmJveGVzID0gbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIobGluZUJveCwgW10oYXV0byBmaXJz
dCwgYXV0byBsYXN0KSB7CisgICAgICAgIHN0ZDo6cmV2ZXJzZShmaXJzdCwgbGFzdCk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gY2FjaGU7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZUxpbmVMb2dp
Y2FsT3JkZXJDYWNoZUlmTmVlZGVkKGNvbnN0IExlYWZCb3hJdGVyYXRvciYgYm94LCBMaW5lTG9n
aWNhbE9yZGVyQ2FjaGUmIGNhY2hlKQoreworICAgIGF1dG8gbGluZUJveCA9IGJveC0+bGluZUJv
eCgpOworICAgIGlmICghY2FjaGUgfHwgY2FjaGUtPmxpbmVCb3ggIT0gbGluZUJveCkKKyAgICAg
ICAgY2FjaGUgPSBtYWtlTGluZUxvZ2ljYWxPcmRlckNhY2hlKGxpbmVCb3gpOworCisgICAgaWYg
KGNhY2hlLT5pbmRleCA8IGNhY2hlLT5ib3hlcy5zaXplKCkgJiYgY2FjaGUtPmJveGVzW2NhY2hl
LT5pbmRleF0gPT0gYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBjYWNoZS0+aW5kZXggPSBj
YWNoZS0+Ym94ZXMuZmluZChib3gpOworCisgICAgQVNTRVJUKGNhY2hlLT5pbmRleCAhPSBub3RG
b3VuZCk7Cit9CisKK0xlYWZCb3hJdGVyYXRvciBmaXJzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRl
cihjb25zdCBMaW5lQm94SXRlcmF0b3ImIGxpbmVCb3gsIExpbmVMb2dpY2FsT3JkZXJDYWNoZSYg
Y2FjaGUpCit7CisgICAgY2FjaGUgPSBtYWtlTGluZUxvZ2ljYWxPcmRlckNhY2hlKGxpbmVCb3gp
OworCisgICAgaWYgKGNhY2hlLT5ib3hlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBjYWNoZS0+aW5kZXggPSAwOworICAgIHJldHVybiBjYWNoZS0+Ym94ZXMuZmlyc3Qo
KTsKK30KKworTGVhZkJveEl0ZXJhdG9yIGxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIoY29u
c3QgTGluZUJveEl0ZXJhdG9yJiBsaW5lQm94LCBMaW5lTG9naWNhbE9yZGVyQ2FjaGUmIGNhY2hl
KQoreworICAgIGNhY2hlID0gbWFrZUxpbmVMb2dpY2FsT3JkZXJDYWNoZShsaW5lQm94KTsKKwor
ICAgIGlmIChjYWNoZS0+Ym94ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgY2FjaGUtPmluZGV4ID0gY2FjaGUtPmJveGVzLnNpemUoKSAtIDE7CisgICAgcmV0dXJuIGNh
Y2hlLT5ib3hlcy5sYXN0KCk7Cit9CisKK0xlYWZCb3hJdGVyYXRvciBuZXh0TGVhZk9uTGluZUlu
TG9naWNhbE9yZGVyKGNvbnN0IExlYWZCb3hJdGVyYXRvciYgYm94LCBMaW5lTG9naWNhbE9yZGVy
Q2FjaGUmIGNhY2hlKQoreworICAgIHVwZGF0ZUxpbmVMb2dpY2FsT3JkZXJDYWNoZUlmTmVlZGVk
KGJveCwgY2FjaGUpOworCisgICAgY2FjaGUtPmluZGV4Kys7CisKKyAgICBpZiAoY2FjaGUtPmlu
ZGV4IDwgY2FjaGUtPmJveGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlLT5ib3hlc1tj
YWNoZS0+aW5kZXhdOworCisgICAgcmV0dXJuIHsgfTsKK30KKworTGVhZkJveEl0ZXJhdG9yIHBy
ZXZpb3VzTGVhZk9uTGluZUluTG9naWNhbE9yZGVyKGNvbnN0IExlYWZCb3hJdGVyYXRvciYgYm94
LCBMaW5lTG9naWNhbE9yZGVyQ2FjaGUmIGNhY2hlKQoreworICAgIHVwZGF0ZUxpbmVMb2dpY2Fs
T3JkZXJDYWNoZUlmTmVlZGVkKGJveCwgY2FjaGUpOworCisgICAgaWYgKCFjYWNoZS0+aW5kZXgp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjYWNoZS0+aW5kZXgtLTsKKworICAgIHJldHVy
biBjYWNoZS0+Ym94ZXNbY2FjaGUtPmluZGV4XTsKK30KKworTGVhZkJveEl0ZXJhdG9yIGZpcnN0
TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5vZGUoY29uc3QgTGluZUJveEl0ZXJhdG9yJiBs
aW5lQm94LCBMaW5lTG9naWNhbE9yZGVyQ2FjaGUmIGNhY2hlKQoreworICAgIGF1dG8gYm94ID0g
Zmlyc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIobGluZUJveCwgY2FjaGUpOworICAgIHdoaWxl
IChib3ggJiYgIWJveC0+cmVuZGVyZXIoKS5ub2RlKCkpCisgICAgICAgIGJveCA9IG5leHRMZWFm
T25MaW5lSW5Mb2dpY2FsT3JkZXIoYm94LCBjYWNoZSk7CisgICAgcmV0dXJuIGJveDsKK30KKwor
TGVhZkJveEl0ZXJhdG9yIGxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXJXaXRoTm9kZShjb25z
dCBMaW5lQm94SXRlcmF0b3ImIGxpbmVCb3gsIExpbmVMb2dpY2FsT3JkZXJDYWNoZSYgY2FjaGUp
Cit7CisgICAgYXV0byBib3ggPSBsYXN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyKGxpbmVCb3gs
IGNhY2hlKTsKKyAgICB3aGlsZSAoYm94ICYmICFib3gtPnJlbmRlcmVyKCkubm9kZSgpKQorICAg
ICAgICBib3ggPSBwcmV2aW91c0xlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcihib3gsIGNhY2hlKTsK
KyAgICByZXR1cm4gYm94OworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yTG9naWNhbE9yZGVyVHJhdmVy
c2FsLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0
ZXJhdG9yTG9naWNhbE9yZGVyVHJhdmVyc2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjVhZjA0MGJkM2ZmMDMy
ZDM4MTgxM2Q3Njk2ZTQ1YTVlYzQxODdmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JMb2dpY2FsT3JkZXJU
cmF2ZXJzYWwuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMaW5lQm94LmgiCisjaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3JUZXh0Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBJbmxpbmVJdGVyYXRvciB7CisKK3N0cnVjdCBUZXh0TG9n
aWNhbE9yZGVyQ2FjaGVEYXRhIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7
CisKKyAgICBWZWN0b3I8VGV4dEJveEl0ZXJhdG9yPiBib3hlczsKKyAgICBzaXplX3QgaW5kZXgg
eyAwIH07Cit9OwordXNpbmcgVGV4dExvZ2ljYWxPcmRlckNhY2hlID0gc3RkOjp1bmlxdWVfcHRy
PFRleHRMb2dpY2FsT3JkZXJDYWNoZURhdGE+OworCitzdGQ6OnBhaXI8VGV4dEJveEl0ZXJhdG9y
LCBUZXh0TG9naWNhbE9yZGVyQ2FjaGU+IGZpcnN0VGV4dEJveEluTG9naWNhbE9yZGVyRm9yKGNv
bnN0IFJlbmRlclRleHQmKTsKK1RleHRCb3hJdGVyYXRvciBuZXh0VGV4dEJveEluTG9naWNhbE9y
ZGVyKGNvbnN0IFRleHRCb3hJdGVyYXRvciYsIFRleHRMb2dpY2FsT3JkZXJDYWNoZSYpOworCitz
dHJ1Y3QgTGluZUxvZ2ljYWxPcmRlckNhY2hlRGF0YSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZB
U1RfQUxMT0NBVEVEOworCisgICAgTGluZUJveEl0ZXJhdG9yIGxpbmVCb3g7CisgICAgVmVjdG9y
PExlYWZCb3hJdGVyYXRvcj4gYm94ZXM7CisgICAgc2l6ZV90IGluZGV4IHsgMCB9OworfTsKK3Vz
aW5nIExpbmVMb2dpY2FsT3JkZXJDYWNoZSA9IHN0ZDo6dW5pcXVlX3B0cjxMaW5lTG9naWNhbE9y
ZGVyQ2FjaGVEYXRhPjsKKworTGVhZkJveEl0ZXJhdG9yIGZpcnN0TGVhZk9uTGluZUluTG9naWNh
bE9yZGVyKGNvbnN0IExpbmVCb3hJdGVyYXRvciYsIExpbmVMb2dpY2FsT3JkZXJDYWNoZSYpOwor
TGVhZkJveEl0ZXJhdG9yIGxhc3RMZWFmT25MaW5lSW5Mb2dpY2FsT3JkZXIoY29uc3QgTGluZUJv
eEl0ZXJhdG9yJiwgTGluZUxvZ2ljYWxPcmRlckNhY2hlJik7CitMZWFmQm94SXRlcmF0b3IgbmV4
dExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcihjb25zdCBMZWFmQm94SXRlcmF0b3ImLCBMaW5lTG9n
aWNhbE9yZGVyQ2FjaGUmKTsKK0xlYWZCb3hJdGVyYXRvciBwcmV2aW91c0xlYWZPbkxpbmVJbkxv
Z2ljYWxPcmRlcihjb25zdCBMZWFmQm94SXRlcmF0b3ImLCBMaW5lTG9naWNhbE9yZGVyQ2FjaGUm
KTsKKworTGVhZkJveEl0ZXJhdG9yIGZpcnN0TGVhZk9uTGluZUluTG9naWNhbE9yZGVyV2l0aE5v
ZGUoY29uc3QgTGluZUJveEl0ZXJhdG9yJiwgTGluZUxvZ2ljYWxPcmRlckNhY2hlJik7CitMZWFm
Qm94SXRlcmF0b3IgbGFzdExlYWZPbkxpbmVJbkxvZ2ljYWxPcmRlcldpdGhOb2RlKGNvbnN0IExp
bmVCb3hJdGVyYXRvciYsIExpbmVMb2dpY2FsT3JkZXJDYWNoZSYpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXZlcnNlRnVuY3Rpb24+CitWZWN0b3I8TGVhZkJveEl0ZXJhdG9yPiBsZWFmQm94ZXNJ
bkxvZ2ljYWxPcmRlcihjb25zdCBMaW5lQm94SXRlcmF0b3ImIGxpbmVCb3gsIFJldmVyc2VGdW5j
dGlvbiYmIHJldmVyc2VGdW5jdGlvbikKK3sKKyAgICBWZWN0b3I8TGVhZkJveEl0ZXJhdG9yPiBi
b3hlczsKKworICAgIHVuc2lnbmVkIGNoYXIgbWluTGV2ZWwgPSAxMjg7CisgICAgdW5zaWduZWQg
Y2hhciBtYXhMZXZlbCA9IDA7CisKKyAgICBmb3IgKGF1dG8gYm94ID0gbGluZUJveC0+Zmlyc3RM
ZWFmQm94KCk7IGJveDsgYm94ID0gYm94LnRyYXZlcnNlTmV4dE9uTGluZSgpKSB7CisgICAgICAg
IG1pbkxldmVsID0gc3RkOjptaW4obWluTGV2ZWwsIGJveC0+YmlkaUxldmVsKCkpOworICAgICAg
ICBtYXhMZXZlbCA9IHN0ZDo6bWF4KG1heExldmVsLCBib3gtPmJpZGlMZXZlbCgpKTsKKyAgICAg
ICAgYm94ZXMuYXBwZW5kKGJveCk7CisgICAgfQorCisgICAgaWYgKGxpbmVCb3gtPmNvbnRhaW5p
bmdCbG9jaygpLnN0eWxlKCkucnRsT3JkZXJpbmcoKSA9PSBPcmRlcjo6VmlzdWFsKQorICAgICAg
ICByZXR1cm4gYm94ZXM7CisKKyAgICAvLyBSZXZlcnNlIG9mIHJlb3JkZXJpbmcgb2YgdGhlIGxp
bmUgKEwyIGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgorICAgIC8vIEwyLiBGcm9tIHRoZSBoaWdo
ZXN0IGxldmVsIGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsIG9uIGVh
Y2ggbGluZSwKKyAgICAvLyByZXZlcnNlIGFueSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGNoYXJh
Y3RlcnMgdGhhdCBhcmUgYXQgdGhhdCBsZXZlbCBvciBoaWdoZXIuCisKKyAgICAvLyBSZXZlcnNp
bmcgdGhlIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgaXMgb25seSBkb25lIHVwIHRvIHRoZSBsb3dl
c3Qgb2RkIGxldmVsLgorICAgIGlmICghKG1pbkxldmVsICUgMikpCisgICAgICAgICsrbWluTGV2
ZWw7CisKKyAgICBhdXRvIGVuZCA9IGJveGVzLmVuZCgpOworICAgIGZvciAoOyBtaW5MZXZlbCA8
PSBtYXhMZXZlbDsgKyttaW5MZXZlbCkgeworICAgICAgICBhdXRvIGJveCA9IGJveGVzLmJlZ2lu
KCk7CisgICAgICAgIHdoaWxlIChib3ggPCBlbmQpIHsKKyAgICAgICAgICAgIHdoaWxlIChib3gg
PCBlbmQgJiYgKCpib3gpLT5iaWRpTGV2ZWwoKSA8IG1pbkxldmVsKQorICAgICAgICAgICAgICAg
ICsrYm94OworCisgICAgICAgICAgICBhdXRvIGZpcnN0ID0gYm94OworICAgICAgICAgICAgd2hp
bGUgKGJveCA8IGVuZCAmJiAoKmJveCktPmJpZGlMZXZlbCgpID49IG1pbkxldmVsKQorICAgICAg
ICAgICAgICAgICsrYm94OworCisgICAgICAgICAgICBhdXRvIGxhc3QgPSBib3g7CisgICAgICAg
ICAgICByZXZlcnNlRnVuY3Rpb24oZmlyc3QsIGxhc3QpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGJveGVzOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yVGV4dEJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yVGV4dEJv
eC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGRhMmRmODZkMjBkMmYxODk5OWYxZTM0YzRjZTgwNzNiODdhMDk5
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9p
bmxpbmUvSW5saW5lSXRlcmF0b3JUZXh0Qm94LmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9y
VGV4dEJveC5oIgorCisjaW5jbHVkZSAiSW5saW5lSXRlcmF0b3JMaW5lQm94LmgiCisjaW5jbHVk
ZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgiCisjaW5jbHVkZSAiTGluZVNlbGVjdGlv
bi5oIgorI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK25hbWVzcGFjZSBJbmxpbmVJdGVyYXRvciB7CisKK1RleHRCb3hJdGVyYXRvciBUZXh0Qm94
OjpuZXh0VGV4dEJveCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRleHRCb3hJdGVyYXRvcigqdGhp
cykudHJhdmVyc2VOZXh0VGV4dEJveCgpOworfQorCitMYXlvdXRSZWN0IFRleHRCb3g6OnNlbGVj
dGlvblJlY3QodW5zaWduZWQgcmFuZ2VTdGFydCwgdW5zaWduZWQgcmFuZ2VFbmQpIGNvbnN0Cit7
CisgICAgYXV0byBbY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kXSA9IHNlbGVjdGFibGVSYW5nZSgp
LmNsYW1wKHJhbmdlU3RhcnQsIHJhbmdlRW5kKTsKKworICAgIGlmIChjbGFtcGVkU3RhcnQgPj0g
Y2xhbXBlZEVuZCAmJiAhKHJhbmdlU3RhcnQgPT0gcmFuZ2VFbmQgJiYgcmFuZ2VTdGFydCA+PSBz
dGFydCgpICYmIHJhbmdlU3RhcnQgPD0gZW5kKCkpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgYXV0byBsaW5lU2VsZWN0aW9uUmVjdCA9IExpbmVTZWxlY3Rpb246OmxvZ2ljYWxSZWN0KCps
aW5lQm94KCkpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QgeyBsb2dpY2Fs
TGVmdCgpLCBsaW5lU2VsZWN0aW9uUmVjdC55KCksIGxvZ2ljYWxXaWR0aCgpLCBsaW5lU2VsZWN0
aW9uUmVjdC5oZWlnaHQoKSB9OworCisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1
bigpOworICAgIGlmIChjbGFtcGVkU3RhcnQgfHwgY2xhbXBlZEVuZCAhPSB0ZXh0UnVuLmxlbmd0
aCgpKQorICAgICAgICBmb250Q2FzY2FkZSgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRl
eHRSdW4sIHNlbGVjdGlvblJlY3QsIGNsYW1wZWRTdGFydCwgY2xhbXBlZEVuZCk7CisKKyAgICBy
ZXR1cm4gc25hcHBlZFNlbGVjdGlvblJlY3Qoc2VsZWN0aW9uUmVjdCwgbG9naWNhbFJpZ2h0KCks
IGxpbmVTZWxlY3Rpb25SZWN0LnkoKSwgbGluZVNlbGVjdGlvblJlY3QuaGVpZ2h0KCksIGlzSG9y
aXpvbnRhbCgpKTsKK30KKwordW5zaWduZWQgVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxv
YXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK3sKKyAgICBpZiAoaXNMaW5l
QnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHggLSBsb2dpY2FsTGVmdCgpID4g
bG9naWNhbFdpZHRoKCkpCisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBsZW5ndGgoKSA6IDA7CisgICAgaWYgKHggLSBsb2dpY2FsTGVmdCgpIDwgMCkKKyAgICAgICAg
cmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IDAgOiBsZW5ndGgoKTsKKyAgICByZXR1
cm4gZm9udENhc2NhZGUoKS5vZmZzZXRGb3JQb3NpdGlvbihjcmVhdGVUZXh0UnVuKENyZWF0ZVRl
eHRSdW5Nb2RlOjpFZGl0aW5nKSwgeCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzKTsKK30KKworZmxvYXQgVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zm
c2V0KSBjb25zdAoreworICAgIEFTU0VSVChvZmZzZXQgPj0gc3RhcnQoKSk7CisgICAgQVNTRVJU
KG9mZnNldCA8PSBlbmQoKSk7CisKKyAgICBpZiAoaXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0
dXJuIGxvZ2ljYWxMZWZ0KCk7CisKKyAgICBhdXRvIFtzdGFydE9mZnNldCwgZW5kT2Zmc2V0XSA9
IFsmXSB7CisgICAgICAgIGlmIChkaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAob2Zm
c2V0KSwgbGVuZ3RoKCkgfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IDB1LCBzZWxlY3Rh
YmxlUmFuZ2UoKS5jbGFtcChvZmZzZXQpIH07CisgICAgfSgpOworCisgICAgYXV0byBzZWxlY3Rp
b25SZWN0ID0gTGF5b3V0UmVjdChsb2dpY2FsTGVmdCgpLCAwLCAwLCAwKTsKKyAgICAKKyAgICBh
dXRvIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKENyZWF0ZVRleHRSdW5Nb2RlOjpFZGl0aW5nKTsK
KyAgICBmb250Q2FzY2FkZSgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNl
bGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgIHJldHVybiBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVy
ZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpLm1heFgo
KTsKK30KKworYm9vbCBUZXh0Qm94Ojppc0NvbWJpbmVkVGV4dCgpIGNvbnN0Cit7CisgICAgYXV0
byYgcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOworICAgIHJldHVybiBpczxSZW5kZXJDb21i
aW5lVGV4dD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihyZW5kZXJl
cikuaXNDb21iaW5lZCgpOworfQorCitjb25zdCBGb250Q2FzY2FkZSYgVGV4dEJveDo6Zm9udENh
c2NhZGUoKSBjb25zdAoreworICAgIGlmIChpc0NvbWJpbmVkVGV4dCgpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyQ29tYmluZVRleHQ+KHJlbmRlcmVyKCkpLnRleHRDb21iaW5lRm9u
dCgpOworCisgICAgcmV0dXJuIHN0eWxlKCkuZm9udENhc2NhZGUoKTsKK30KKworVGV4dEJveEl0
ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IoQm94OjpQYXRoVmFyaWFudCYmIHBhdGhWYXJpYW50KQor
ICAgIDogTGVhZkJveEl0ZXJhdG9yKFdURk1vdmUocGF0aFZhcmlhbnQpKQoreworfQorCitUZXh0
Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcihjb25zdCBCb3gmIGJveCkKKyAgICA6IExlYWZC
b3hJdGVyYXRvcihib3gpCit7Cit9CisKK1RleHRCb3hJdGVyYXRvciYgVGV4dEJveEl0ZXJhdG9y
Ojp0cmF2ZXJzZU5leHRUZXh0Qm94KCkKK3sKKyAgICBXVEY6OnN3aXRjaE9uKG1fYm94Lm1fcGF0
aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRUZXh0
Qm94KCk7CisgICAgfSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitUZXh0Qm94SXRlcmF0b3Ig
Zmlyc3RUZXh0Qm94Rm9yKGNvbnN0IFJlbmRlclRleHQmIHRleHQpCit7CisjaWYgRU5BQkxFKExB
WU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisgICAgaWYgKGF1dG8qIGxpbmVMYXlvdXQgPSBMYXlv
dXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y29udGFpbmluZyh0ZXh0KSkKKyAgICAgICAgcmV0
dXJuIGxpbmVMYXlvdXQtPnRleHRCb3hlc0Zvcih0ZXh0KTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IHsgQm94TGVnYWN5UGF0aCB7IHRleHQuZmlyc3RUZXh0Qm94KCkgfSB9OworfQorCitUZXh0Qm94
SXRlcmF0b3IgdGV4dEJveEZvcihjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94KiBsZWdhY3lJbmxp
bmVUZXh0Qm94KQoreworICAgIHJldHVybiB7IEJveExlZ2FjeVBhdGggeyBsZWdhY3lJbmxpbmVU
ZXh0Qm94IH0gfTsKK30KKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQor
VGV4dEJveEl0ZXJhdG9yIHRleHRCb3hGb3IoY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OklubGlu
ZUNvbnRlbnQmIGNvbnRlbnQsIGNvbnN0IElubGluZURpc3BsYXk6OkJveCYgYm94KQoreworICAg
IHJldHVybiB0ZXh0Qm94Rm9yKGNvbnRlbnQsIGNvbnRlbnQuaW5kZXhGb3JCb3goYm94KSk7Cit9
CisKK1RleHRCb3hJdGVyYXRvciB0ZXh0Qm94Rm9yKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJ
bmxpbmVDb250ZW50JiBjb250ZW50LCBzaXplX3QgYm94SW5kZXgpCit7CisgICAgQVNTRVJUKGNv
bnRlbnQuYm94ZXNbYm94SW5kZXhdLnRleHQoKSk7CisgICAgcmV0dXJuIHsgQm94TW9kZXJuUGF0
aCB7IGNvbnRlbnQsIGJveEluZGV4IH0gfTsKK30KKyNlbmRpZgorCitUZXh0Qm94UmFuZ2UgdGV4
dEJveGVzRm9yKGNvbnN0IFJlbmRlclRleHQmIHRleHQpCit7CisgICAgcmV0dXJuIHsgZmlyc3RU
ZXh0Qm94Rm9yKHRleHQpIH07Cit9CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvSW5saW5lSXRlcmF0b3JUZXh0Qm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0lubGluZUl0ZXJhdG9yVGV4dEJv
eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjllZjc2ZmI2MDExNDNlMjM3YmRhYjFiMGZjZjEwOTk2YTczMTljMGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5s
aW5lL0lubGluZUl0ZXJhdG9yVGV4dEJveC5oCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yQm94LmgiCisj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBJbmxpbmVJdGVyYXRvciB7CisKK2NsYXNzIFRleHRCb3ggOiBwdWJsaWMgQm94IHsKK3B1Ymxp
YzoKKyAgICBUZXh0Qm94KFBhdGhWYXJpYW50JiYpOworCisgICAgYm9vbCBoYXNIeXBoZW4oKSBj
b25zdDsKKyAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHN0YXJ0
KCkgY29uc3Q7CisgICAgdW5zaWduZWQgZW5kKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzID0gdHJ1ZSkgY29uc3Q7CisgICAgZmxvYXQgcG9zaXRpb25G
b3JPZmZzZXQodW5zaWduZWQpIGNvbnN0OworCisgICAgVGV4dEJveFNlbGVjdGFibGVSYW5nZSBz
ZWxlY3RhYmxlUmFuZ2UoKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QodW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3Q7CisKKyAgICBib29sIGlzQ29tYmluZWRU
ZXh0KCkgY29uc3Q7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlKCkgY29uc3Q7
CisKKyAgICBUZXh0UnVuIGNyZWF0ZVRleHRSdW4oQ3JlYXRlVGV4dFJ1bk1vZGUgPSBDcmVhdGVU
ZXh0UnVuTW9kZTo6UGFpbnRpbmcpIGNvbnN0OworCisgICAgY29uc3QgUmVuZGVyVGV4dCYgcmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0PihCb3g6OnJlbmRlcmVy
KCkpOyB9CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlLiBGb3IgaW50ZXJtZWRpYXRlIHBvcnRpbmcg
c3RlcHMgb25seS4KKyAgICBjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94KiBsZWdhY3lJbmxpbmVC
b3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxMZWdhY3lJbmxpbmVUZXh0Qm94PihCb3g6Omxl
Z2FjeUlubGluZUJveCgpKTsgfQorCisgICAgLy8gVGhpcyByZXR1cm5zIHRoZSBuZXh0IHRleHQg
Ym94IGdlbmVyYXRlZCBmb3IgdGhlIHNhbWUgUmVuZGVyVGV4dC9MYXlvdXQ6OklubGluZVRleHRC
b3guCisgICAgVGV4dEJveEl0ZXJhdG9yIG5leHRUZXh0Qm94KCkgY29uc3Q7Cit9OworCitjbGFz
cyBUZXh0Qm94SXRlcmF0b3IgOiBwdWJsaWMgTGVhZkJveEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAg
ICBUZXh0Qm94SXRlcmF0b3IoKSB7IH0KKyAgICBUZXh0Qm94SXRlcmF0b3IoQm94OjpQYXRoVmFy
aWFudCYmKTsKKyAgICBUZXh0Qm94SXRlcmF0b3IoY29uc3QgQm94Jik7CisKKyAgICBUZXh0Qm94
SXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IHJldHVybiB0cmF2ZXJzZU5leHRUZXh0Qm94KCk7IH0K
KworICAgIGNvbnN0IFRleHRCb3gmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9
CisgICAgY29uc3QgVGV4dEJveCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZnZXQoKTsg
fQorCisgICAgLy8gVGhpcyB0cmF2ZXJzZXMgdG8gdGhlIG5leHQgdGV4dCBib3ggZ2VuZXJhdGVk
IGZvciB0aGUgc2FtZSBSZW5kZXJUZXh0L0xheW91dDo6SW5saW5lVGV4dEJveC4KKyAgICBUZXh0
Qm94SXRlcmF0b3ImIHRyYXZlcnNlTmV4dFRleHRCb3goKTsKKworcHJpdmF0ZToKKyAgICBCb3hJ
dGVyYXRvciYgdHJhdmVyc2VOZXh0T25MaW5lKCkgPSBkZWxldGU7CisgICAgQm94SXRlcmF0b3Im
IHRyYXZlcnNlUHJldmlvdXNPbkxpbmUoKSA9IGRlbGV0ZTsKKyAgICBCb3hJdGVyYXRvciYgdHJh
dmVyc2VOZXh0T25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSA9IGRlbGV0ZTsKKyAgICBCb3hJdGVy
YXRvciYgdHJhdmVyc2VQcmV2aW91c09uTGluZUlnbm9yaW5nTGluZUJyZWFrKCkgPSBkZWxldGU7
CisKKyAgICBjb25zdCBUZXh0Qm94JiBnZXQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxUZXh0
Qm94PihtX2JveCk7IH0KK307CisKK2NsYXNzIFRleHRCb3hSYW5nZSB7CitwdWJsaWM6CisgICAg
VGV4dEJveFJhbmdlKFRleHRCb3hJdGVyYXRvciBiZWdpbikKKyAgICAgICAgOiBtX2JlZ2luKGJl
Z2luKQorICAgIHsKKyAgICB9CisKKyAgICBUZXh0Qm94SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX2JlZ2luOyB9CisgICAgRW5kSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
eyB9OyB9CisKK3ByaXZhdGU6CisgICAgVGV4dEJveEl0ZXJhdG9yIG1fYmVnaW47Cit9OworCitU
ZXh0Qm94SXRlcmF0b3IgZmlyc3RUZXh0Qm94Rm9yKGNvbnN0IFJlbmRlclRleHQmKTsKK1RleHRC
b3hJdGVyYXRvciB0ZXh0Qm94Rm9yKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gqKTsKKyNpZiBF
TkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKK1RleHRCb3hJdGVyYXRvciB0ZXh0Qm94
Rm9yKGNvbnN0IExheW91dEludGVncmF0aW9uOjpJbmxpbmVDb250ZW50JiwgY29uc3QgSW5saW5l
RGlzcGxheTo6Qm94Jik7CitUZXh0Qm94SXRlcmF0b3IgdGV4dEJveEZvcihjb25zdCBMYXlvdXRJ
bnRlZ3JhdGlvbjo6SW5saW5lQ29udGVudCYsIHNpemVfdCBib3hJbmRleCk7CisjZW5kaWYKK1Rl
eHRCb3hSYW5nZSB0ZXh0Qm94ZXNGb3IoY29uc3QgUmVuZGVyVGV4dCYpOworCitpbmxpbmUgYm9v
bCBUZXh0Qm94OjpoYXNIeXBoZW4oKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguaGFz
SHlwaGVuKCk7CisgICAgfSk7Cit9CisKK2lubGluZSBUZXh0Qm94OjpUZXh0Qm94KFBhdGhWYXJp
YW50JiYgcGF0aCkKKyAgICA6IEJveChXVEZNb3ZlKHBhdGgpKQoreworfQorCitpbmxpbmUgU3Ry
aW5nVmlldyBUZXh0Qm94Ojp0ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnRl
eHQoKTsKKyAgICB9KTsKK30KKworaW5saW5lIHVuc2lnbmVkIFRleHRCb3g6OnN0YXJ0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBw
YXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnN0YXJ0KCk7CisgICAgfSk7Cit9CisKK2lubGlu
ZSB1bnNpZ25lZCBUZXh0Qm94OjplbmQoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgu
ZW5kKCk7CisgICAgfSk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBUZXh0Qm94OjpsZW5ndGgoKSBj
b25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8m
IHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgubGVuZ3RoKCk7CisgICAgfSk7Cit9CisKK2lu
bGluZSBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlIFRleHRCb3g6OnNlbGVjdGFibGVSYW5nZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgWyZdKGF1dG8m
IHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2VsZWN0YWJsZVJhbmdlKCk7CisgICAgfSk7
Cit9CisKK2lubGluZSBUZXh0UnVuIFRleHRCb3g6OmNyZWF0ZVRleHRSdW4oQ3JlYXRlVGV4dFJ1
bk1vZGUgbW9kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJp
YW50LCBbJl0oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5jcmVhdGVUZXh0UnVu
KG1vZGUpOworICAgIH0pOworfQorCit9Cit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVH
SU4oV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OlRleHRCb3gpCitzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OkJveCYgYm94KSB7IHJldHVybiBib3guaXNU
ZXh0KCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKQor
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OklubGluZUl0ZXJhdG9yOjpCb3hJdGVy
YXRvciYgYm94KSB7IHJldHVybiAhYm94IHx8IGJveC0+aXNUZXh0KCk7IH0KK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbklu
bGluZUNvbnRlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkNDMyNTY5ZWI0NDg2YWY2MTE3ZjZiNDE5MjM3
ZmI3YThlNTk4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5jcHAKQEAgLTAs
MCArMSwyMDIgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uSW5saW5l
Q29udGVudC5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNp
bmNsdWRlICJJbmxpbmVJdGVyYXRvckJveC5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0aW9u
TGluZUxheW91dC5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNs
dWRlICJUZXh0UGFpbnRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5
b3V0SW50ZWdyYXRpb24geworCitJbmxpbmVDb250ZW50OjpJbmxpbmVDb250ZW50KGNvbnN0IExp
bmVMYXlvdXQmIGxpbmVMYXlvdXQpCisgICAgOiBtX2xpbmVMYXlvdXQobGluZUxheW91dCkKK3sK
K30KKworYm9vbCBJbmxpbmVDb250ZW50OjpoYXNDb250ZW50KCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoYm94ZXMuaXNFbXB0eSgpIHx8IGJveGVzWzBdLmlzUm9vdElubGluZUJveCgpKTsKKyAgICBy
ZXR1cm4gYm94ZXMuc2l6ZSgpID4gMTsKK30KKworSXRlcmF0b3JSYW5nZTxjb25zdCBJbmxpbmVE
aXNwbGF5OjpCb3gqPiBJbmxpbmVDb250ZW50Ojpib3hlc0ZvclJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgcmVjdCkgY29uc3QKK3sKKyAgICBpZiAoYm94ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4geyBudWxscHRyLCBudWxscHRyIH07CisKKyAgICBpZiAobGluZXMuZmlyc3QoKS5pbmtPdmVy
ZmxvdygpLm1heFkoKSA+IHJlY3QueSgpICYmIGxpbmVzLmxhc3QoKS5pbmtPdmVyZmxvdygpLnko
KSA8IHJlY3QubWF4WSgpKQorICAgICAgICByZXR1cm4geyAmYm94ZXMuZmlyc3QoKSwgJmJveGVz
Lmxhc3QoKSArIDEgfTsKKworICAgIC8vIFRoZSBvcHRpbWl6YXRpb24gYmVsb3cgcmVsaWVzIG9u
IGxpbmUgcGFpbnQgYm91bmRzIG5vdCBleGVlZGluZyB0aG9zZSBvZiB0aGUgbmVpZ2hib3Jpbmcg
bGluZXMKKyAgICBpZiAoaGFzTXVsdGlsaW5lUGFpbnRPdmVybGFwKQorICAgICAgICByZXR1cm4g
eyAmYm94ZXMuZmlyc3QoKSwgJmJveGVzLmxhc3QoKSArIDEgfTsKKworICAgIGF1dG8gaGVpZ2h0
ID0gbGluZXMubGFzdCgpLmxpbmVCb3hCb3R0b20oKSAtIGxpbmVzLmZpcnN0KCkubGluZUJveFRv
cCgpOworICAgIGF1dG8gYXZlcmFnZUxpbmVIZWlnaHQgPSBoZWlnaHQgLyBsaW5lcy5zaXplKCk7
CisKKyAgICBhdXRvIGFwcHJveGltYXRlTGluZSA9IFsmXShMYXlvdXRVbml0IHkpIHsKKyAgICAg
ICAgeSA9IHN0ZDo6bWF4KHksIDBfbHUpOworICAgICAgICByZXR1cm4gc3RkOjptaW4oc3RhdGlj
X2Nhc3Q8c2l6ZV90Pih5IC8gYXZlcmFnZUxpbmVIZWlnaHQpLCBsaW5lcy5zaXplKCkgLSAxKTsK
KyAgICB9OworCisgICAgYXV0byBzdGFydExpbmUgPSBhcHByb3hpbWF0ZUxpbmUocmVjdC55KCkp
OworICAgIGZvciAoOyBzdGFydExpbmU7IC0tc3RhcnRMaW5lKSB7CisgICAgICAgIGlmIChsaW5l
c1tzdGFydExpbmUgLSAxXS5pbmtPdmVyZmxvdygpLm1heFkoKSA8IHJlY3QueSgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXV0byBlbmRMaW5lID0gYXBwcm94aW1hdGVMaW5l
KHJlY3QubWF4WSgpKTsKKyAgICBmb3IgKDsgZW5kTGluZSA8IGxpbmVzLnNpemUoKSAtIDE7ICsr
ZW5kTGluZSkgeworICAgICAgICBpZiAobGluZXNbZW5kTGluZSArIDFdLmlua092ZXJmbG93KCku
eSgpID4gcmVjdC5tYXhZKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhdXRv
IGZpcnN0Qm94ID0gbGluZXNbc3RhcnRMaW5lXS5maXJzdEJveEluZGV4KCk7CisgICAgYXV0byBs
YXN0Qm94ID0gbGluZXNbZW5kTGluZV0uZmlyc3RCb3hJbmRleCgpICsgbGluZXNbZW5kTGluZV0u
Ym94Q291bnQoKSAtIDE7CisKKyAgICByZXR1cm4geyAmYm94ZXNbZmlyc3RCb3hdLCAmYm94ZXNb
bGFzdEJveF0gKyAxIH07Cit9CisKK0lubGluZUNvbnRlbnQ6On5JbmxpbmVDb250ZW50KCkKK3sK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRG
b3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGZvciAoYXV0
byYgYm94IDogYm94ZXMpCisgICAgICAgICAgICBUZXh0UGFpbnRlcjo6cmVtb3ZlR2x5cGhEaXNw
bGF5TGlzdChib3gpOworICAgIH0KK30KKworY29uc3QgUmVuZGVyT2JqZWN0JiBJbmxpbmVDb250
ZW50OjpyZW5kZXJlckZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkJveCYgbGF5b3V0Qm94KSBj
b25zdAoreworICAgIHJldHVybiBsaW5lTGF5b3V0KCkucmVuZGVyZXJGb3JMYXlvdXRCb3gobGF5
b3V0Qm94KTsKK30KKworY29uc3QgUmVuZGVyQmxvY2tGbG93JiBJbmxpbmVDb250ZW50Ojpjb250
YWluaW5nQmxvY2soKSBjb25zdAoreworICAgIHJldHVybiBsaW5lTGF5b3V0KCkuZmxvdygpOwor
fQorCitzaXplX3QgSW5saW5lQ29udGVudDo6aW5kZXhGb3JCb3goY29uc3QgSW5saW5lRGlzcGxh
eTo6Qm94JiBib3gpIGNvbnN0Cit7CisgICAgYXV0byBpbmRleCA9IHN0YXRpY19jYXN0PHNpemVf
dD4oJmJveCAtIGJveGVzLmJlZ2luKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgYm94
ZXMuc2l6ZSgpKTsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK2NvbnN0IElubGluZURpc3BsYXk6
OkJveCogSW5saW5lQ29udGVudDo6Zmlyc3RCb3hGb3JMYXlvdXRCb3goY29uc3QgTGF5b3V0OjpC
b3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICBhdXRvIGluZGV4ID0gZmlyc3RCb3hJbmRleEZv
ckxheW91dEJveChsYXlvdXRCb3gpOworICAgIHJldHVybiBpbmRleCA/ICZib3hlc1sqaW5kZXhd
IDogbnVsbHB0cjsKK30KKworc3RkOjpvcHRpb25hbDxzaXplX3Q+IElubGluZUNvbnRlbnQ6OmZp
cnN0Qm94SW5kZXhGb3JMYXlvdXRCb3goY29uc3QgTGF5b3V0OjpCb3gmIGxheW91dEJveCkgY29u
c3QKK3sKKyAgICBjb25zdGV4cHIgYXV0byBjYWNoZVRocmVzaG9sZCA9IDE2OworCisgICAgaWYg
KGJveGVzLnNpemUoKSA8IGNhY2hlVGhyZXNob2xkKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYm94ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIGJveCA9IGJv
eGVzW2ldOworICAgICAgICAgICAgaWYgKCZib3gubGF5b3V0Qm94KCkgPT0gJmxheW91dEJveCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fZmlyc3RCb3hJbmRleENhY2hlKSB7CisgICAgICAg
IG1fZmlyc3RCb3hJbmRleENhY2hlID0gbWFrZVVuaXF1ZTxGaXJzdEJveEluZGV4Q2FjaGU+KCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYm94ZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGF1dG8mIGJveCA9IGJveGVzW2ldOworICAgICAgICAgICAgaWYgKGJveC5pc1Jv
b3RJbmxpbmVCb3goKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1f
Zmlyc3RCb3hJbmRleENhY2hlLT5hZGQoYm94LmxheW91dEJveCgpLCBpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGF1dG8gaXQgPSBtX2ZpcnN0Qm94SW5kZXhDYWNoZS0+ZmluZChsYXlvdXRC
b3gpOworICAgIGlmIChpdCA9PSBtX2ZpcnN0Qm94SW5kZXhDYWNoZS0+ZW5kKCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4gaXQtPnZhbHVlOworfQorCitjb25zdCBWZWN0b3I8
c2l6ZV90PiYgSW5saW5lQ29udGVudDo6bm9uUm9vdElubGluZUJveEluZGV4ZXNGb3JMYXlvdXRC
b3goY29uc3QgTGF5b3V0OjpCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5
b3V0Qm94LmlzQ29udGFpbmVyQm94KCkpOworCisgICAgaWYgKCFtX2lubGluZUJveEluZGV4Q2Fj
aGUpIHsKKyAgICAgICAgbV9pbmxpbmVCb3hJbmRleENhY2hlID0gbWFrZVVuaXF1ZTxJbmxpbmVC
b3hJbmRleENhY2hlPigpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJveGVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBib3ggPSBib3hlc1tpXTsKKyAgICAgICAg
ICAgIGlmICghYm94LmlzTm9uUm9vdElubGluZUJveCgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgbV9pbmxpbmVCb3hJbmRleENhY2hlLT5lbnN1cmUoYm94LmxheW91
dEJveCgpLCBbJl0geworICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8c2l6ZV90PiB7IH07
CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGkpOworICAgICAgICB9Cisg
ICAgICAgIGZvciAoYXV0byBlbnRyeSA6ICptX2lubGluZUJveEluZGV4Q2FjaGUpCisgICAgICAg
ICAgICBlbnRyeS52YWx1ZS5zaHJpbmtUb0ZpdCgpOworICAgIH0KKworICAgIGF1dG8gaXQgPSBt
X2lubGluZUJveEluZGV4Q2FjaGUtPmZpbmQobGF5b3V0Qm94KTsKKyAgICBpZiAoaXQgPT0gbV9p
bmxpbmVCb3hJbmRleENhY2hlLT5lbmQoKSkgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8VmVjdG9yPHNpemVfdD4+IGVtcHR5VmVjdG9yOworICAgICAgICByZXR1cm4gZW1wdHlWZWN0
b3IuZ2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KKwordm9pZCBJbmxp
bmVDb250ZW50OjpjbGVhckFuZERldGFjaCgpCit7CisgICAgZm9yIChhdXRvJiBib3ggOiBib3hl
cykKKyAgICAgICAgVGV4dFBhaW50ZXI6OnJlbW92ZUdseXBoRGlzcGxheUxpc3QoYm94KTsKKwor
ICAgIHJlbGVhc2VDYWNoZXMoKTsKKyAgICBib3hlcy5jbGVhcigpOworICAgIGxpbmVzLmNsZWFy
KCk7CisgICAgbV9saW5lTGF5b3V0ID0gbnVsbHB0cjsKK30KKwordm9pZCBJbmxpbmVDb250ZW50
OjpyZWxlYXNlQ2FjaGVzKCkKK3sKKyAgICBtX2ZpcnN0Qm94SW5kZXhDYWNoZSA9IHsgfTsKKyAg
ICBtX2lubGluZUJveEluZGV4Q2FjaGUgPSB7IH07Cit9CisKK3ZvaWQgSW5saW5lQ29udGVudDo6
c2hyaW5rVG9GaXQoKQoreworICAgIGJveGVzLnNocmlua1RvRml0KCk7CisgICAgbGluZXMuc2hy
aW5rVG9GaXQoKTsKK30KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dElu
dGVncmF0aW9uSW5saW5lQ29udGVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5ZGRiOTdlNjlmMTliOGRhNmI2
YjI4ZDU3YTBmMTQ0YTc1ZjVmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudC5o
CkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIklubGluZURpc3BsYXlC
b3guaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9JdGVyYXRvclJhbmdlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlckJsb2NrRmxv
dzsKK2NsYXNzIFJlbmRlck9iamVjdDsKKworbmFtZXNwYWNlIExheW91dCB7CitjbGFzcyBCb3g7
Cit9CisKK25hbWVzcGFjZSBJbmxpbmVEaXNwbGF5IHsKK3N0cnVjdCBCb3g7Cit9IAorCituYW1l
c3BhY2UgTGF5b3V0SW50ZWdyYXRpb24geworCitjbGFzcyBMaW5lTGF5b3V0OworCitzdHJ1Y3Qg
SW5saW5lQ29udGVudCA6IHB1YmxpYyBSZWZDb3VudGVkPElubGluZUNvbnRlbnQ+IHsKKyAgICBz
dGF0aWMgUmVmPElubGluZUNvbnRlbnQ+IGNyZWF0ZShjb25zdCBMaW5lTGF5b3V0JiBsaW5lTGF5
b3V0KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IElubGluZUNvbnRlbnQobGluZUxheW91dCkpOyB9
CisgICAgfklubGluZUNvbnRlbnQoKTsKKworICAgIHVzaW5nIEJveGVzID0gVmVjdG9yPElubGlu
ZURpc3BsYXk6OkJveD47CisgICAgdXNpbmcgTGluZXMgPSBWZWN0b3I8TGluZT47CisKKyAgICBC
b3hlcyBib3hlczsKKyAgICBMaW5lcyBsaW5lczsKKworICAgIGZsb2F0IGNsZWFyR2FwQWZ0ZXJM
YXN0TGluZSB7IDAgfTsKKyAgICBib29sIGhhc011bHRpbGluZVBhaW50T3ZlcmxhcCB7IGZhbHNl
IH07CisKKyAgICBib29sIGhhc0NvbnRlbnQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzVmlzdWFs
T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc3VhbE92ZXJmbG93OyB9CisgICAgdm9p
ZCBzZXRIYXNWaXN1YWxPdmVyZmxvdygpIHsgbV9oYXNWaXN1YWxPdmVyZmxvdyA9IHRydWU7IH0K
KyAgICAKKyAgICBjb25zdCBMaW5lJiBsaW5lRm9yQm94KGNvbnN0IElubGluZURpc3BsYXk6OkJv
eCYgYm94KSBjb25zdCB7IHJldHVybiBsaW5lc1tib3gubGluZUluZGV4KCldOyB9CisKKyAgICBJ
dGVyYXRvclJhbmdlPGNvbnN0IElubGluZURpc3BsYXk6OkJveCo+IGJveGVzRm9yUmVjdChjb25z
dCBMYXlvdXRSZWN0JikgY29uc3Q7CisKKyAgICB2b2lkIHNocmlua1RvRml0KCk7CisKKyAgICBj
b25zdCBMaW5lTGF5b3V0JiBsaW5lTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gKm1fbGluZUxheW91
dDsgfQorICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXJGb3JMYXlvdXRCb3goY29uc3Qg
TGF5b3V0OjpCb3gmKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGNvbnRhaW5p
bmdCbG9jaygpIGNvbnN0OworCisgICAgc2l6ZV90IGluZGV4Rm9yQm94KGNvbnN0IElubGluZURp
c3BsYXk6OkJveCYpIGNvbnN0OworCisgICAgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94KiBmaXJz
dEJveEZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkJveCYpIGNvbnN0OworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lkIHRyYXZlcnNlTm9uUm9vdElubGluZUJveGVzKGNvbnN0
IExheW91dDo6Qm94JiwgRnVuY3Rpb24mJik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4g
Zmlyc3RCb3hJbmRleEZvckxheW91dEJveChjb25zdCBMYXlvdXQ6OkJveCYpIGNvbnN0OworICAg
IGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBub25Sb290SW5saW5lQm94SW5kZXhlc0ZvckxheW91dEJv
eChjb25zdCBMYXlvdXQ6OkJveCYpIGNvbnN0OworCisgICAgdm9pZCBjbGVhckFuZERldGFjaCgp
OworICAgIHZvaWQgcmVsZWFzZUNhY2hlcygpOworCitwcml2YXRlOgorICAgIElubGluZUNvbnRl
bnQoY29uc3QgTGluZUxheW91dCYpOworCisgICAgQ2hlY2tlZFB0cjxjb25zdCBMaW5lTGF5b3V0
PiBtX2xpbmVMYXlvdXQ7CisKKyAgICB1c2luZyBGaXJzdEJveEluZGV4Q2FjaGUgPSBIYXNoTWFw
PENoZWNrZWRSZWY8Y29uc3QgTGF5b3V0OjpCb3g+LCBzaXplX3Q+OworICAgIG11dGFibGUgc3Rk
Ojp1bmlxdWVfcHRyPEZpcnN0Qm94SW5kZXhDYWNoZT4gbV9maXJzdEJveEluZGV4Q2FjaGU7CisK
KyAgICB1c2luZyBJbmxpbmVCb3hJbmRleENhY2hlID0gSGFzaE1hcDxDaGVja2VkUmVmPGNvbnN0
IExheW91dDo6Qm94PiwgVmVjdG9yPHNpemVfdD4+OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPElubGluZUJveEluZGV4Q2FjaGU+IG1faW5saW5lQm94SW5kZXhDYWNoZTsKKyAgICBib29s
IG1faGFzVmlzdWFsT3ZlcmZsb3cgeyBmYWxzZSB9OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rpb24+IHZvaWQgSW5saW5lQ29udGVudDo6dHJhdmVyc2VOb25Sb290SW5saW5lQm94ZXMo
Y29uc3QgTGF5b3V0OjpCb3gmIGxheW91dEJveCwgRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sKKyAg
ICBmb3IgKGF1dG8gaW5kZXggOiBub25Sb290SW5saW5lQm94SW5kZXhlc0ZvckxheW91dEJveChs
YXlvdXRCb3gpKQorICAgICAgICBmdW5jdGlvbihib3hlc1tpbmRleF0pOworfQorCit9Cit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lu
bGluZS9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVD
b250ZW50QnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM4YjRhOGY0NDQwY2M3NWYyYjNlN2NiYWEw
ZDZjZjlmYWYzYTI2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5j
cHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJl
IG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dEludGVncmF0
aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lRGlzcGxheUJveC5oIgorI2luY2x1ZGUgIklu
bGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25Cb3hUcmVlLmgiCisjaW5jbHVkZSAiTGF5b3V0SW50
ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIK
KyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgor
I2luY2x1ZGUgIlN0cmluZ1RydW5jYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1l
c3BhY2UgTGF5b3V0SW50ZWdyYXRpb24geworCitpbmxpbmUgSW5saW5lRGlzcGxheTo6TGluZTo6
RW5jbG9zaW5nVG9wQW5kQm90dG9tIG9wZXJhdG9yKyhjb25zdCBJbmxpbmVEaXNwbGF5OjpMaW5l
OjpFbmNsb3NpbmdUb3BBbmRCb3R0b20gZW5jbG9zaW5nVG9wQW5kQm90dG9tLCBmbG9hdCBvZmZz
ZXQpCit7CisgICAgcmV0dXJuIHsgZW5jbG9zaW5nVG9wQW5kQm90dG9tLnRvcCArIG9mZnNldCwg
ZW5jbG9zaW5nVG9wQW5kQm90dG9tLmJvdHRvbSArIG9mZnNldCB9OworfQorCitpbmxpbmUgc3Rh
dGljIGZsb2F0IGxpbmVPdmVyZmxvd0xvZ2ljYWxXaWR0aChjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
IGZsb3csIExheW91dDo6SW5saW5lTGF5b3V0VW5pdCBsaW5lQ29udGVudExvZ2ljYWxXaWR0aCkK
K3sKKyAgICAvLyBGSVhNRTogSXQncyB0aGUgY29weSBvZiB0aGUgbGV0cy1hZGp1c3Qtb3ZlcmZs
b3ctZm9yLXRoZS1jYXJldCBiZWhhdmlvciBmcm9tIExlZ2FjeUxpbmVMYXlvdXQ6OmFkZE92ZXJm
bG93RnJvbUlubGluZUNoaWxkcmVuLgorICAgIGF1dG8gZW5kUGFkZGluZyA9IGZsb3cuaGFzTm9u
VmlzaWJsZU92ZXJmbG93KCkgPyBmbG93LnBhZGRpbmdFbmQoKSA6IDBfbHU7CisgICAgaWYgKCFl
bmRQYWRkaW5nKQorICAgICAgICBlbmRQYWRkaW5nID0gZmxvdy5lbmRQYWRkaW5nV2lkdGhGb3JD
YXJldCgpOworICAgIGlmIChmbG93Lmhhc05vblZpc2libGVPdmVyZmxvdygpICYmICFlbmRQYWRk
aW5nICYmIGZsb3cuZWxlbWVudCgpICYmIGZsb3cuZWxlbWVudCgpLT5pc1Jvb3RFZGl0YWJsZUVs
ZW1lbnQoKSkKKyAgICAgICAgZW5kUGFkZGluZyA9IDE7CisgICAgcmV0dXJuIGxpbmVDb250ZW50
TG9naWNhbFdpZHRoICsgZW5kUGFkZGluZzsKK30KKworSW5saW5lQ29udGVudEJ1aWxkZXI6Oklu
bGluZUNvbnRlbnRCdWlsZGVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93LCBCb3hU
cmVlJiBib3hUcmVlKQorICAgIDogbV9ibG9ja0Zsb3coYmxvY2tGbG93KQorICAgICwgbV9ib3hU
cmVlKGJveFRyZWUpCit7Cit9CisKK3ZvaWQgSW5saW5lQ29udGVudEJ1aWxkZXI6OmJ1aWxkKExh
eW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUsIElubGlu
ZUNvbnRlbnQmIGlubGluZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgbWln
aHQgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCB3aXRoIHBhcnRpYWwgbGF5b3V0IHdoZXJlIHRo
ZSBsYXlvdXQgY29kZSBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBib3hlcy4KKyAgICBpbmxpbmVD
b250ZW50LmJveGVzID0gV1RGTW92ZShpbmxpbmVGb3JtYXR0aW5nU3RhdGUuYm94ZXMoKSk7CisK
KyAgICBhdXRvIHVwZGF0ZUlmVGV4dFJlbmRlcmVyc05lZWRWaXN1YWxSZW9yZGVyaW5nID0gWyZd
IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG1heSB3YW50IHRvIGhhdmUgYSBnbG9iYWwsICJpcyB0
aGlzIGEgYmlkaSBwYXJhZ3JhcGgiIGZsYWcgdG8gYXZvaWQgdGhpcyBsb29wIGZvciBub24tcnRs
LCBub24tYmlkaSBjb250ZW50LiAKKyAgICAgICAgZm9yIChhdXRvJiBkaXNwbGF5Qm94IDogaW5s
aW5lQ29udGVudC5ib3hlcykgeworICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gZGlzcGxh
eUJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGlmICghaXM8TGF5b3V0OjpJbmxpbmVUZXh0
Qm94PihsYXlvdXRCb3gpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKGRpc3BsYXlCb3guYmlkaUxldmVsKCkgIT0gVUJJRElfREVGQVVMVF9MVFIpIAorICAgICAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+KG1fYm94VHJlZS5yZW5kZXJlckZvckxheW91
dEJveChsYXlvdXRCb3gpKS5zZXROZWVkc1Zpc3VhbFJlb3JkZXJpbmcoKTsKKyAgICAgICAgfQor
ICAgIH07CisgICAgdXBkYXRlSWZUZXh0UmVuZGVyZXJzTmVlZFZpc3VhbFJlb3JkZXJpbmcoKTsK
KyAgICBjcmVhdGVEaXNwbGF5TGluZXMoaW5saW5lRm9ybWF0dGluZ1N0YXRlLCBpbmxpbmVDb250
ZW50KTsKK30KKwordm9pZCBJbmxpbmVDb250ZW50QnVpbGRlcjo6Y3JlYXRlRGlzcGxheUxpbmVz
KExheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0YXRlJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUsIElu
bGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgYXV0byYgbGluZXMgPSBp
bmxpbmVGb3JtYXR0aW5nU3RhdGUubGluZXMoKTsKKyAgICBhdXRvJiBib3hlcyA9IGlubGluZUNv
bnRlbnQuYm94ZXM7CisgICAgc2l6ZV90IGJveEluZGV4ID0gMDsKKyAgICBpbmxpbmVDb250ZW50
LmxpbmVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGluZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNp
emVfdCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBsaW5lcy5zaXplKCk7ICsrbGluZUluZGV4
KSB7CisgICAgICAgIGF1dG8mIGxpbmUgPSBsaW5lc1tsaW5lSW5kZXhdOworICAgICAgICBhdXRv
IHNjcm9sbGFibGVPdmVyZmxvd1JlY3QgPSBsaW5lLnNjcm9sbGFibGVPdmVyZmxvdygpOworCisg
ICAgICAgIGF1dG8gYWRqdXN0T3ZlcmZsb3dMb2dpY2FsV2lkdGhXaXRoQmxvY2tGbG93UXVpcmsg
PSBbJl0geworICAgICAgICAgICAgYXV0byYgcm9vdFN0eWxlID0gbV9ibG9ja0Zsb3cuc3R5bGUo
KTsKKyAgICAgICAgICAgIGF1dG8gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPSByb290U3R5bGUu
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKKyAgICAgICAgICAgIGF1dG8gYWRqdXN0ZWRPdmVy
Zmxvd0xvZ2ljYWxXaWR0aCA9IGxpbmVPdmVyZmxvd0xvZ2ljYWxXaWR0aChtX2Jsb2NrRmxvdywg
bGluZS5jb250ZW50TG9naWNhbFdpZHRoKCkpOworICAgICAgICAgICAgYXV0byBzY3JvbGxhYmxl
T3ZlcmZsb3dMb2dpY2FsV2lkdGggPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IHNjcm9sbGFi
bGVPdmVyZmxvd1JlY3Qud2lkdGgoKSA6IHNjcm9sbGFibGVPdmVyZmxvd1JlY3QuaGVpZ2h0KCk7
CisgICAgICAgICAgICBpZiAoYWRqdXN0ZWRPdmVyZmxvd0xvZ2ljYWxXaWR0aCA+IHNjcm9sbGFi
bGVPdmVyZmxvd0xvZ2ljYWxXaWR0aCkgeworICAgICAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3dW
YWx1ZSA9IGFkanVzdGVkT3ZlcmZsb3dMb2dpY2FsV2lkdGggLSBzY3JvbGxhYmxlT3ZlcmZsb3dM
b2dpY2FsV2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KQorICAgICAgICAgICAgICAgICAgICByb290U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdC5zaGlmdE1heFhFZGdlQnkob3ZlcmZsb3dWYWx1ZSkg
OiBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LnNoaWZ0WEVkZ2VCeSgtb3ZlcmZsb3dWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByb290U3R5bGUuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdC5zaGlmdE1heFlFZGdl
Qnkob3ZlcmZsb3dWYWx1ZSkgOiBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LnNoaWZ0WUVkZ2VCeSgt
b3ZlcmZsb3dWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIGFkanVz
dE92ZXJmbG93TG9naWNhbFdpZHRoV2l0aEJsb2NrRmxvd1F1aXJrKCk7CisKKyAgICAgICAgYXV0
byBmaXJzdEJveEluZGV4ID0gYm94SW5kZXg7CisgICAgICAgIGF1dG8gbGluZUlua092ZXJmbG93
UmVjdCA9IHNjcm9sbGFibGVPdmVyZmxvd1JlY3Q7CisgICAgICAgIC8vIENvbGxlY3Qgb3ZlcmZs
b3cgZnJvbSBib3hlcy4KKyAgICAgICAgZm9yICg7IGJveEluZGV4IDwgYm94ZXMuc2l6ZSgpICYm
IGJveGVzW2JveEluZGV4XS5saW5lSW5kZXgoKSA9PSBsaW5lSW5kZXg7ICsrYm94SW5kZXgpIHsK
KyAgICAgICAgICAgIGF1dG8mIGJveCA9IGJveGVzW2JveEluZGV4XTsKKworICAgICAgICAgICAg
bGluZUlua092ZXJmbG93UmVjdC51bml0ZShib3guaW5rT3ZlcmZsb3coKSk7CisKKyAgICAgICAg
ICAgIGF1dG8mIGxheW91dEJveCA9IGJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGlmIChs
YXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKSB7CisgICAgICAgICAgICAgICAgLy8gU2ltaWxhciB0
byBMZWdhY3lJbmxpbmVGbG93Qm94OjphZGRSZXBsYWNlZENoaWxkT3ZlcmZsb3cuCisgICAgICAg
ICAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KG1fYm94VHJlZS5y
ZW5kZXJlckZvckxheW91dEJveChsYXlvdXRCb3gpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJl
bmRlcmVyLmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBjaGlsZElua092ZXJmbG93ID0gcmVuZGVyZXIubG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZv
clByb3BhZ2F0aW9uKCZyZW5kZXJlci5wYXJlbnQoKS0+c3R5bGUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGNoaWxkSW5rT3ZlcmZsb3cubW92ZShib3gubGVmdCgpLCBib3gudG9wKCkpOworICAg
ICAgICAgICAgICAgICAgICBsaW5lSW5rT3ZlcmZsb3dSZWN0LnVuaXRlKGNoaWxkSW5rT3ZlcmZs
b3cpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdXRvIGNoaWxkU2Nyb2xs
YWJsZU92ZXJmbG93ID0gcmVuZGVyZXIubG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3Bh
Z2F0aW9uKCZyZW5kZXJlci5wYXJlbnQoKS0+c3R5bGUoKSk7CisgICAgICAgICAgICAgICAgY2hp
bGRTY3JvbGxhYmxlT3ZlcmZsb3cubW92ZShib3gubGVmdCgpLCBib3gudG9wKCkpOworICAgICAg
ICAgICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QudW5pdGUoY2hpbGRTY3JvbGxhYmxlT3Zl
cmZsb3cpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpbmxpbmVD
b250ZW50LmxpbmVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byYgbGFzdElua092ZXJm
bG93ID0gaW5saW5lQ29udGVudC5saW5lcy5sYXN0KCkuaW5rT3ZlcmZsb3coKTsKKyAgICAgICAg
ICAgIGlmIChsaW5lSW5rT3ZlcmZsb3dSZWN0LnkoKSA8PSBsYXN0SW5rT3ZlcmZsb3cueSgpIHx8
IGxhc3RJbmtPdmVyZmxvdy5tYXhZKCkgPj0gbGluZUlua092ZXJmbG93UmVjdC5tYXhZKCkpCisg
ICAgICAgICAgICAgICAgaW5saW5lQ29udGVudC5oYXNNdWx0aWxpbmVQYWludE92ZXJsYXAgPSB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBib3hDb3VudCA9IGJveEluZGV4IC0gZmly
c3RCb3hJbmRleDsKKyAgICAgICAgaWYgKCFpbmxpbmVDb250ZW50Lmhhc1Zpc3VhbE92ZXJmbG93
KCkgJiYgbGluZUlua092ZXJmbG93UmVjdCAhPSBsaW5lLnNjcm9sbGFibGVPdmVyZmxvdygpKQor
ICAgICAgICAgICAgaW5saW5lQ29udGVudC5zZXRIYXNWaXN1YWxPdmVyZmxvdygpOworICAgICAg
ICBpbmxpbmVDb250ZW50LmxpbmVzLmFwcGVuZCh7IGZpcnN0Qm94SW5kZXgsIGJveENvdW50LCBG
bG9hdFJlY3QgeyBsaW5lLmxpbmVCb3hSZWN0KCkgfSwgbGluZS5lbmNsb3NpbmdUb3BBbmRCb3R0
b20oKS50b3AsIGxpbmUuZW5jbG9zaW5nVG9wQW5kQm90dG9tKCkuYm90dG9tLCBzY3JvbGxhYmxl
T3ZlcmZsb3dSZWN0LCBsaW5lSW5rT3ZlcmZsb3dSZWN0LCBsaW5lLmJhc2VsaW5lKCksIGxpbmUu
YmFzZWxpbmVUeXBlKCksIGxpbmUuY29udGVudExvZ2ljYWxPZmZzZXQoKSwgbGluZS5jb250ZW50
TG9naWNhbFdpZHRoKCksIGxpbmUuaXNIb3Jpem9udGFsKCkgfSk7CisgICAgfQorfQorCit9Cit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uSW5saW5l
Q29udGVudEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjA5ODAxYWUzOGUzY2Y5YTc1NmMxOWJlM2M2
NzJmZjdmOTRmN2FkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
dGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmgK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5n
U3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVuZGVyQmxvY2tGbG93OworCituYW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRpb24g
eworCitjbGFzcyBCb3hUcmVlOworc3RydWN0IElubGluZUNvbnRlbnQ7CisKK2NsYXNzIElubGlu
ZUNvbnRlbnRCdWlsZGVyIHsKK3B1YmxpYzoKKyAgICBJbmxpbmVDb250ZW50QnVpbGRlcihjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmLCBCb3hUcmVlJik7CisKKyAgICB2b2lkIGJ1aWxkKExheW91dDo6
SW5saW5lRm9ybWF0dGluZ1N0YXRlJiwgSW5saW5lQ29udGVudCYpIGNvbnN0OworCitwcml2YXRl
OgorICAgIHZvaWQgY3JlYXRlRGlzcGxheUxpbmVzKExheW91dDo6SW5saW5lRm9ybWF0dGluZ1N0
YXRlJiwgSW5saW5lQ29udGVudCYpIGNvbnN0OworCisgICAgY29uc3QgUmVuZGVyQmxvY2tGbG93
JiBtX2Jsb2NrRmxvdzsKKyAgICBCb3hUcmVlJiBtX2JveFRyZWU7Cit9OworCit9Cit9CisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUv
TGF5b3V0SW50ZWdyYXRpb25MaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vaW5saW5lL0xheW91dEludGVncmF0aW9uTGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjODFjNGFkNDJj
MjcwNWM3ODc1NmEyNDM5MzMwMjJlMmFmNGUxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uTGluZS5o
CkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkxheW91dEJveC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
TGF5b3V0SW50ZWdyYXRpb24geworCitjbGFzcyBMaW5lIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBMaW5lKHNpemVfdCBmaXJzdEJveEluZGV4LCBzaXplX3Qg
Ym94Q291bnQsIGNvbnN0IEZsb2F0UmVjdCYgbGluZUJveFJlY3QsIGZsb2F0IGVuY2xvc2luZ0Nv
bnRlbnRUb3AsIGZsb2F0IGVuY2xvc2luZ0NvbnRlbnRCb3R0b20sIGNvbnN0IEZsb2F0UmVjdCYg
c2Nyb2xsYWJsZU92ZXJmbG93LCBjb25zdCBGbG9hdFJlY3QmIGlua092ZXJmbG93LCBmbG9hdCBi
YXNlbGluZSwgRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgZmxvYXQgY29udGVudExvZ2ljYWxP
ZmZzZXQsIGZsb2F0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGJvb2wgaXNIb3Jpem9udGFsKQorICAg
ICAgICA6IG1fZmlyc3RCb3hJbmRleChmaXJzdEJveEluZGV4KQorICAgICAgICAsIG1fYm94Q291
bnQoYm94Q291bnQpCisgICAgICAgICwgbV9saW5lQm94UmVjdChsaW5lQm94UmVjdCkKKyAgICAg
ICAgLCBtX2VuY2xvc2luZ0NvbnRlbnRUb3AoZW5jbG9zaW5nQ29udGVudFRvcCkKKyAgICAgICAg
LCBtX2VuY2xvc2luZ0NvbnRlbnRCb3R0b20oZW5jbG9zaW5nQ29udGVudEJvdHRvbSkKKyAgICAg
ICAgLCBtX3Njcm9sbGFibGVPdmVyZmxvdyhzY3JvbGxhYmxlT3ZlcmZsb3cpCisgICAgICAgICwg
bV9pbmtPdmVyZmxvdyhpbmtPdmVyZmxvdykKKyAgICAgICAgLCBtX2Jhc2VsaW5lKGJhc2VsaW5l
KQorICAgICAgICAsIG1fY29udGVudExvZ2ljYWxPZmZzZXQoY29udGVudExvZ2ljYWxPZmZzZXQp
CisgICAgICAgICwgbV9jb250ZW50TG9naWNhbFdpZHRoKGNvbnRlbnRMb2dpY2FsV2lkdGgpCisg
ICAgICAgICwgbV9iYXNlbGluZVR5cGUoYmFzZWxpbmVUeXBlKQorICAgICAgICAsIG1faXNIb3Jp
em9udGFsKGlzSG9yaXpvbnRhbCkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IGZpcnN0Qm94
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Qm94SW5kZXg7IH0KKyAgICBzaXplX3QgYm94
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2JveENvdW50OyB9CisKKyAgICBmbG9hdCBsaW5lQm94
VG9wKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94UmVjdC55KCk7IH0KKyAgICBmbG9hdCBsaW5l
Qm94Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94UmVjdC5tYXhZKCk7IH0KKyAgICBm
bG9hdCBsaW5lQm94TGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveFJlY3QueCgpOyB9Cisg
ICAgZmxvYXQgbGluZUJveFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94UmVjdC5tYXhY
KCk7IH0KKyAgICBmbG9hdCBsaW5lQm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94
UmVjdC5oZWlnaHQoKTsgfQorICAgIGZsb2F0IGxpbmVCb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGluZUJveFJlY3Qud2lkdGgoKTsgfQorCisgICAgZmxvYXQgZW5jbG9zaW5nQ29udGVudFRv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jbG9zaW5nQ29udGVudFRvcDsgfQorICAgIGZsb2F0IGVu
Y2xvc2luZ0NvbnRlbnRCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2VuY2xvc2luZ0NvbnRlbnRC
b3R0b207IH0KKworICAgIGNvbnN0IEZsb2F0UmVjdCYgc2Nyb2xsYWJsZU92ZXJmbG93KCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlT3ZlcmZsb3c7IH0KKyAgICBjb25zdCBGbG9hdFJlY3Qm
IGlua092ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9pbmtPdmVyZmxvdzsgfQorCisgICAgZmxv
YXQgYmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VsaW5lOyB9CisgICAgRm9udEJhc2Vs
aW5lIGJhc2VsaW5lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZWxpbmVUeXBlOyB9CisKKyAg
ICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNIb3Jpem9udGFsOyB9CisK
KyAgICBmbG9hdCBjb250ZW50TG9naWNhbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dExvZ2ljYWxPZmZzZXQ7IH0KKyAgICBmbG9hdCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZW50TG9naWNhbFdpZHRoOyB9CisKK3ByaXZhdGU6CisgICAgc2l6ZV90
IG1fZmlyc3RCb3hJbmRleCB7IDAgfTsKKyAgICBzaXplX3QgbV9ib3hDb3VudCB7IDAgfTsKKyAg
ICAvLyBUaGlzIGlzIGxpbmUgYm94IGdlb21ldHJ5IChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RS
L2Nzcy1pbmxpbmUtMy8jbGluZS1ib3gpLgorICAgIEZsb2F0UmVjdCBtX2xpbmVCb3hSZWN0Owor
ICAgIC8vIEVuY2xvc2luZyB0b3AgYW5kIGJvdHRvbSBpbmNsdWRlcyBhbGwgaW5saW5lIGxldmVs
IGJveGVzIChib3JkZXIgYm94KSB2ZXJ0aWNhbGx5LgorICAgIC8vIFdoaWxlIHRoZSBsaW5lIGJv
eCB1c3VhbGx5IGVuY2xvc2UgdGhlbSBhcyB3ZWxsLCBpdHMgdmVydGljYWwgZ2VvbWV0cnkgaXMg
YmFzZWQgb24KKyAgICAvLyB0aGUgbGF5b3V0IGJvdW5kcyBvZiB0aGUgaW5saW5lIGxldmVsIGJv
eGVzIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgd2hlbiBsaW5lLWhlaWdodCBpcyBwcmVzZW50Lgor
ICAgIGZsb2F0IG1fZW5jbG9zaW5nQ29udGVudFRvcCB7IDAgfTsKKyAgICBmbG9hdCBtX2VuY2xv
c2luZ0NvbnRlbnRCb3R0b20geyAwIH07CisgICAgRmxvYXRSZWN0IG1fc2Nyb2xsYWJsZU92ZXJm
bG93OworICAgIEZsb2F0UmVjdCBtX2lua092ZXJmbG93OworICAgIGZsb2F0IG1fYmFzZWxpbmUg
eyAwIH07CisgICAgZmxvYXQgbV9jb250ZW50TG9naWNhbE9mZnNldCB7IDAgfTsKKyAgICBmbG9h
dCBtX2NvbnRlbnRMb2dpY2FsV2lkdGggeyAwIH07CisgICAgRm9udEJhc2VsaW5lIG1fYmFzZWxp
bmVUeXBlIHsgQWxwaGFiZXRpY0Jhc2VsaW5lIH07CisgICAgYm9vbCBtX2lzSG9yaXpvbnRhbCB7
IHRydWUgfTsKK307CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVn
cmF0aW9uTGluZUxheW91dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRkNTgwOGQzZjBhNDM2MWVjYTk2NzU3
YmZhMjM2N2NiMTE2MGViMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9pbmxpbmUvTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcApAQCAt
MCwwICsxLDkxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCIKKworI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRXZlbnRSZWdpb24uaCIKKyNpbmNsdWRlICJG
bG9hdGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiSGl0VGVzdExvY2F0aW9uLmgiCisjaW5jbHVkZSAi
SGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAi
SW5saW5lQm94UGFpbnRlci5oIgorI2luY2x1ZGUgIklubGluZURhbWFnZS5oIgorI2luY2x1ZGUg
IklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0
YXRlLmgiCisjaW5jbHVkZSAiSW5saW5lSW52YWxpZGF0aW9uLmgiCisjaW5jbHVkZSAiTGF5b3V0
Qm94R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkNvdmVyYWdlLmgiCisj
aW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5oIgorI2luY2x1
ZGUgIkxheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oIgorI2luY2x1ZGUgIkxheW91dFJlcGxh
Y2VkQm94LmgiCisjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJQYWlu
dEluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJBdHRhY2htZW50LmgiCisjaW5jbHVkZSAiUmVuZGVy
QmxvY2tGbG93LmgiCisjaW5jbHVkZSAiUmVuZGVyQnV0dG9uLmgiCisjaW5jbHVkZSAiUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJdGVyYXRvci5oIgor
I2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCisjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCisjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgor
I2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUZXh0Qm94UGFpbnRl
ci5oIgorI2luY2x1ZGUgIlRleHREZWNvcmF0aW9uUGFpbnRlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRpb24geworCitMaW5lTGF5b3V0OjpMaW5l
TGF5b3V0KFJlbmRlckJsb2NrRmxvdyYgZmxvdykKKyAgICA6IG1fYm94VHJlZShmbG93KQorICAg
ICwgbV9sYXlvdXRTdGF0ZShmbG93LmRvY3VtZW50KCksIHJvb3RMYXlvdXRCb3goKSkKKyAgICAs
IG1faW5saW5lRm9ybWF0dGluZ1N0YXRlKG1fbGF5b3V0U3RhdGUuZW5zdXJlSW5saW5lRm9ybWF0
dGluZ1N0YXRlKHJvb3RMYXlvdXRCb3goKSkpCit7CisgICAgbV9sYXlvdXRTdGF0ZS5zZXRJc0lu
dGVncmF0ZWRSb290Qm94Rmlyc3RDaGlsZChmbG93LnBhcmVudCgpLT5maXJzdENoaWxkKCkgPT0g
JmZsb3cpOworfQorCitMaW5lTGF5b3V0Ojp+TGluZUxheW91dCgpCit7CisgICAgY2xlYXJJbmxp
bmVDb250ZW50KCk7Cit9CisKK1JlbmRlckJsb2NrRmxvdyogTGluZUxheW91dDo6YmxvY2tDb250
YWluZXIoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKK3sKKyAgICAvLyBGSVhNRTogVGhlc2UgZmFr
ZSByZW5kZXJlcnMgaGF2ZSB0aGVpciBwYXJlbnQgc2V0IGJ1dCBhcmUgbm90IGFjdHVhbGx5IGlu
IHRoZSB0cmVlLgorICAgIGlmIChyZW5kZXJlci5pc1JlcGxpY2EoKSB8fCByZW5kZXJlci5pc1Jl
bmRlclNjcm9sbGJhclBhcnQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAg
Zm9yIChhdXRvKiBwYXJlbnQgPSByZW5kZXJlci5wYXJlbnQoKTsgcGFyZW50OyBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudCgpKSB7CisgICAgICAgIGlmICghcGFyZW50LT5jaGlsZHJlbklubGluZSgp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9j
a0Zsb3c+KCpwYXJlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2Nr
Rmxvdz4ocGFyZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTGluZUxh
eW91dCogTGluZUxheW91dDo6Y29udGFpbmluZyhSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQorewor
ICAgIGlmICghcmVuZGVyZXIuaXNJbmxpbmUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBpZiAoYXV0byogY29udGFpbmVyID0gYmxvY2tDb250YWluZXIocmVuZGVyZXIpKQorICAg
ICAgICByZXR1cm4gY29udGFpbmVyLT5tb2Rlcm5MaW5lTGF5b3V0KCk7CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworY29uc3QgTGluZUxheW91dCogTGluZUxheW91dDo6Y29udGFpbmluZyhj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQoreworICAgIHJldHVybiBjb250YWluaW5nKGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ocmVuZGVyZXIpKTsKK30KKworYm9vbCBMaW5lTGF5b3V0
Ojppc0VuYWJsZWQoKQoreworICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCk7
Cit9CisKK2Jvb2wgTGluZUxheW91dDo6Y2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
ZmxvdykKK3sKKyAgICBpZiAoIWlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gY2FuVXNlRm9yTGluZUxheW91dChmbG93KTsKK30KKworYm9vbCBMaW5lTGF5
b3V0OjpjYW5Vc2VGb3JBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxv
dywgU3R5bGVEaWZmZXJlbmNlIGRpZmYpCit7CisgICAgQVNTRVJUKGlzRW5hYmxlZCgpKTsKKyAg
ICByZXR1cm4gY2FuVXNlRm9yTGluZUxheW91dEFmdGVyU3R5bGVDaGFuZ2UoZmxvdywgZGlmZik7
Cit9CisKK2Jvb2wgTGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0ZXJJbmxpbmVCb3hTdHlsZUNoYW5n
ZShjb25zdCBSZW5kZXJJbmxpbmUmIGlubGluZUJveCwgU3R5bGVEaWZmZXJlbmNlIGRpZmYpCit7
CisgICAgQVNTRVJUKGlzRW5hYmxlZCgpKTsKKyAgICByZXR1cm4gY2FuVXNlRm9yTGluZUxheW91
dEFmdGVySW5saW5lQm94U3R5bGVDaGFuZ2UoaW5saW5lQm94LCBkaWZmKTsKK30KKworYm9vbCBM
aW5lTGF5b3V0OjpzaG91bGRTd2l0Y2hUb0xlZ2FjeU9uSW52YWxpZGF0aW9uKCkgY29uc3QKK3sK
KyAgICAvLyBGSVhNRTogU3VwcG9ydCBwYXJ0aWFsIGludmFsaWRhdGlvbiBpbiBMRkMuCisgICAg
Ly8gVGhpcyBhdm9pZHMgTyhuXjIpIHdoZW4gbG90cyBvZiBib3hlcyBhcmUgYmVpbmcgYWRkZWQg
ZHluYW1pY2FsbHkgd2hpbGUgZm9yY2luZyBsYXlvdXRzIGJldHdlZW4uCisgICAgY29uc3RleHBy
IHNpemVfdCBtYXhpbWltdW1Cb3hUcmVlU2l6ZUZvckludmFsaWRhdGlvbiA9IDEyODsKKyAgICBy
ZXR1cm4gbV9ib3hUcmVlLmJveENvdW50KCkgPiBtYXhpbWltdW1Cb3hUcmVlU2l6ZUZvckludmFs
aWRhdGlvbjsKK30KKwordm9pZCBMaW5lTGF5b3V0Ojp1cGRhdGVSZXBsYWNlZERpbWVuc2lvbnMo
Y29uc3QgUmVuZGVyQm94JiByZXBsYWNlZCkKK3sKKyAgICB1cGRhdGVMYXlvdXRCb3hEaW1lbnNp
b25zKHJlcGxhY2VkKTsKK30KKwordm9pZCBMaW5lTGF5b3V0Ojp1cGRhdGVJbmxpbmVCbG9ja0Rp
bWVuc2lvbnMoY29uc3QgUmVuZGVyQmxvY2smIGlubGluZUJsb2NrKQoreworICAgIHVwZGF0ZUxh
eW91dEJveERpbWVuc2lvbnMoaW5saW5lQmxvY2spOworfQorCit2b2lkIExpbmVMYXlvdXQ6OnVw
ZGF0ZUlubGluZVRhYmxlRGltZW5zaW9ucyhjb25zdCBSZW5kZXJUYWJsZSYgaW5saW5lVGFibGUp
Cit7CisgICAgdXBkYXRlTGF5b3V0Qm94RGltZW5zaW9ucyhpbmxpbmVUYWJsZSk7Cit9CisKK3Zv
aWQgTGluZUxheW91dDo6dXBkYXRlTGlzdEl0ZW1EaW1lbnNpb25zKGNvbnN0IFJlbmRlckxpc3RJ
dGVtJiBsaXN0SXRlbSkKK3sKKyAgICB1cGRhdGVMYXlvdXRCb3hEaW1lbnNpb25zKGxpc3RJdGVt
KTsKK30KKwordm9pZCBMaW5lTGF5b3V0Ojp1cGRhdGVMaXN0TWFya2VyRGltZW5zaW9ucyhjb25z
dCBSZW5kZXJMaXN0TWFya2VyJiBsaXN0TWFya2VyKQoreworICAgIHVwZGF0ZUxheW91dEJveERp
bWVuc2lvbnMobGlzdE1hcmtlcik7CisKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBtX2JveFRyZWUu
bGF5b3V0Qm94Rm9yUmVuZGVyZXIobGlzdE1hcmtlcik7CisgICAgaWYgKGxheW91dEJveC5pc091
dHNpZGVMaXN0TWFya2VyKCkpIHsKKyAgICAgICAgYXV0byYgcm9vdEdlb21ldHJ5ID0gbV9sYXlv
dXRTdGF0ZS5nZW9tZXRyeUZvclJvb3RCb3goKTsKKyAgICAgICAgYXV0byYgbGlzdE1hcmtlckdl
b21ldHJ5ID0gbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUuYm94R2VvbWV0cnkobGF5b3V0Qm94KTsK
KyAgICAgICAgYXV0byBob3Jpem9udGFsTWFyZ2luID0gbGlzdE1hcmtlckdlb21ldHJ5Lmhvcml6
b250YWxNYXJnaW4oKTsKKyAgICAgICAgYXV0byBvdXRzaWRlT2Zmc2V0ID0gcm9vdEdlb21ldHJ5
LnBhZGRpbmdTdGFydCgpLnZhbHVlX29yKDBfbHUpICsgcm9vdEdlb21ldHJ5LmJvcmRlclN0YXJ0
KCk7CisgICAgICAgIGxpc3RNYXJrZXJHZW9tZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgaG9y
aXpvbnRhbE1hcmdpbi5zdGFydCAtIG91dHNpZGVPZmZzZXQsIGhvcml6b250YWxNYXJnaW4uZW5k
ICsgb3V0c2lkZU9mZnNldCB9KTsgIAorICAgIH0KK30KKworc3RhdGljIGlubGluZSBMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsV2lkdGhGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJCb3gmIHJlbmRl
cmVyKQoreworICAgIHJldHVybiByZW5kZXJlci5wYXJlbnQoKS0+c3R5bGUoKS5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gcmVuZGVyZXIuY29udGVudFdpZHRoKCkgOiByZW5kZXJlci5jb250
ZW50SGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bEhlaWdodEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpCit7CisgICAgcmV0
dXJuIHJlbmRlcmVyLnBhcmVudCgpLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyByZW5kZXJlci5jb250ZW50SGVpZ2h0KCkgOiByZW5kZXJlci5jb250ZW50V2lkdGgoKTsKK30K
Kworc3RhdGljIGlubGluZSBMYXlvdXQ6OkJveEdlb21ldHJ5OjpIb3Jpem9udGFsTWFyZ2luIGhv
cml6b250YWxMb2dpY2FsTWFyZ2luKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJl
ciwgYm9vbCBpc0xlZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uLCBib29sIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlLCBib29sIHJldGFpbk1hcmdpblN0YXJ0ID0gdHJ1ZSwgYm9vbCByZXRhaW5NYXJn
aW5FbmQgPSB0cnVlKQoreworICAgIGF1dG8gbWFyZ2luTGVmdCA9IHJlbmRlcmVyLm1hcmdpbkxl
ZnQoKTsKKyAgICBhdXRvIG1hcmdpblJpZ2h0ID0gcmVuZGVyZXIubWFyZ2luUmlnaHQoKTsKKyAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIHsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmln
aHRJbmxpbmVEaXJlY3Rpb24pCisgICAgICAgICAgICByZXR1cm4geyByZXRhaW5NYXJnaW5TdGFy
dCA/IG1hcmdpbkxlZnQgOiAwX2x1LCByZXRhaW5NYXJnaW5FbmQgPyBtYXJnaW5SaWdodCA6IDBf
bHUgfTsKKyAgICAgICAgcmV0dXJuIHsgcmV0YWluTWFyZ2luU3RhcnQgPyBtYXJnaW5SaWdodCA6
IDBfbHUsIHJldGFpbk1hcmdpbkVuZCA/IG1hcmdpbkxlZnQgOiAwX2x1IH07CisgICAgfQorCisg
ICAgYXV0byBtYXJnaW5Ub3AgPSByZW5kZXJlci5tYXJnaW5Ub3AoKTsKKyAgICBhdXRvIG1hcmdp
bkJvdHRvbSA9IHJlbmRlcmVyLm1hcmdpbkJvdHRvbSgpOworICAgIGlmIChpc0xlZnRUb1JpZ2h0
SW5saW5lRGlyZWN0aW9uKQorICAgICAgICByZXR1cm4geyByZXRhaW5NYXJnaW5TdGFydCA/IG1h
cmdpblRvcCA6IDBfbHUsIHJldGFpbk1hcmdpbkVuZCA/IG1hcmdpbkJvdHRvbSA6IDBfbHUgfTsK
KyAgICByZXR1cm4geyByZXRhaW5NYXJnaW5TdGFydCA/IG1hcmdpbkJvdHRvbSA6IDBfbHUsIHJl
dGFpbk1hcmdpbkVuZCA/IG1hcmdpblRvcCA6IDBfbHUgfTsKK30KKworc3RhdGljIGlubGluZSBM
YXlvdXQ6OkJveEdlb21ldHJ5OjpWZXJ0aWNhbE1hcmdpbiB2ZXJ0aWNhbExvZ2ljYWxNYXJnaW4o
Y29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyLCBXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkKK3sKKyAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7CisgICAgY2FzZSBXcml0aW5nTW9k
ZTo6VG9wVG9Cb3R0b206CisgICAgICAgIHJldHVybiB7IHJlbmRlcmVyLm1hcmdpblRvcCgpLCBy
ZW5kZXJlci5tYXJnaW5Cb3R0b20oKSB9OworICAgIGNhc2UgV3JpdGluZ01vZGU6OkxlZnRUb1Jp
Z2h0OgorICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAgICAgICByZXR1cm4g
eyByZW5kZXJlci5tYXJnaW5SaWdodCgpLCByZW5kZXJlci5tYXJnaW5MZWZ0KCkgfTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsg
cmVuZGVyZXIubWFyZ2luVG9wKCksIHJlbmRlcmVyLm1hcmdpbkJvdHRvbSgpIH07CisgICAgfQor
fQorCitzdGF0aWMgaW5saW5lIExheW91dDo6RWRnZXMgbG9naWNhbEJvcmRlcihjb25zdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCYgcmVuZGVyZXIsIGJvb2wgaXNMZWZ0VG9SaWdodElubGluZURpcmVj
dGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGJvb2wgcmV0YWluQm9yZGVyU3RhcnQgPSB0
cnVlLCBib29sIHJldGFpbkJvcmRlckVuZCA9IHRydWUpCit7CisgICAgYXV0byBib3JkZXJMZWZ0
ID0gcmVuZGVyZXIuYm9yZGVyTGVmdCgpOworICAgIGF1dG8gYm9yZGVyUmlnaHQgPSByZW5kZXJl
ci5ib3JkZXJSaWdodCgpOworICAgIGF1dG8gYm9yZGVyVG9wID0gcmVuZGVyZXIuYm9yZGVyVG9w
KCk7CisgICAgYXV0byBib3JkZXJCb3R0b20gPSByZW5kZXJlci5ib3JkZXJCb3R0b20oKTsKKwor
ICAgIGlmICh3cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20pIHsKKyAgICAg
ICAgaWYgKGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24pCisgICAgICAgICAgICByZXR1cm4g
eyB7IHJldGFpbkJvcmRlclN0YXJ0ID8gYm9yZGVyTGVmdCA6IDBfbHUsIHJldGFpbkJvcmRlckVu
ZCA/IGJvcmRlclJpZ2h0IDogMF9sdSB9LCB7IGJvcmRlclRvcCwgYm9yZGVyQm90dG9tIH0gfTsK
KyAgICAgICAgcmV0dXJuIHsgeyByZXRhaW5Cb3JkZXJTdGFydCA/IGJvcmRlclJpZ2h0IDogMF9s
dSwgcmV0YWluQm9yZGVyRW5kID8gYm9yZGVyTGVmdCA6IDBfbHUgfSwgeyBib3JkZXJUb3AsIGJv
cmRlckJvdHRvbSB9IH07CisgICAgfQorCisgICAgYXV0byBib3JkZXJMb2dpY2FsTGVmdCA9IHJl
dGFpbkJvcmRlclN0YXJ0ID8gaXNMZWZ0VG9SaWdodElubGluZURpcmVjdGlvbiA/IGJvcmRlclRv
cCA6IGJvcmRlckJvdHRvbSA6IDBfbHU7CisgICAgYXV0byBib3JkZXJMb2dpY2FsUmlnaHQgPSBy
ZXRhaW5Cb3JkZXJFbmQgPyBpc0xlZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uID8gYm9yZGVyQm90
dG9tIDogYm9yZGVyVG9wIDogMF9sdTsKKyAgICBhdXRvIGJvcmRlckxvZ2ljYWxUb3AgPSB3cml0
aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQgPyBib3JkZXJMZWZ0IDogYm9yZGVy
UmlnaHQ7CisgICAgYXV0byBib3JkZXJMb2dpY2FsQm90dG9tID0gd3JpdGluZ01vZGUgPT0gV3Jp
dGluZ01vZGU6OkxlZnRUb1JpZ2h0ID8gYm9yZGVyUmlnaHQgOiBib3JkZXJMZWZ0OworICAgIHJl
dHVybiB7IHsgYm9yZGVyTG9naWNhbExlZnQsIGJvcmRlckxvZ2ljYWxSaWdodCB9LCB7IGJvcmRl
ckxvZ2ljYWxUb3AsIGJvcmRlckxvZ2ljYWxCb3R0b20gfSB9OworfQorCitzdGF0aWMgaW5saW5l
IExheW91dDo6RWRnZXMgbG9naWNhbFBhZGRpbmcoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3Qm
IHJlbmRlcmVyLCBib29sIGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24sIFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlLCBib29sIHJldGFpblBhZGRpbmdTdGFydCA9IHRydWUsIGJvb2wgcmV0YWlu
UGFkZGluZ0VuZCA9IHRydWUpCit7CisgICAgYXV0byBwYWRkaW5nTGVmdCA9IHJlbmRlcmVyLnBh
ZGRpbmdMZWZ0KCk7CisgICAgYXV0byBwYWRkaW5nUmlnaHQgPSByZW5kZXJlci5wYWRkaW5nUmln
aHQoKTsKKyAgICBhdXRvIHBhZGRpbmdUb3AgPSByZW5kZXJlci5wYWRkaW5nVG9wKCk7CisgICAg
YXV0byBwYWRkaW5nQm90dG9tID0gcmVuZGVyZXIucGFkZGluZ0JvdHRvbSgpOworCisgICAgaWYg
KHdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSkgeworICAgICAgICBpZiAo
aXNMZWZ0VG9SaWdodElubGluZURpcmVjdGlvbikKKyAgICAgICAgICAgIHJldHVybiB7IHsgcmV0
YWluUGFkZGluZ1N0YXJ0ID8gcGFkZGluZ0xlZnQgOiAwX2x1LCByZXRhaW5QYWRkaW5nRW5kID8g
cGFkZGluZ1JpZ2h0IDogMF9sdSB9LCB7IHBhZGRpbmdUb3AsIHBhZGRpbmdCb3R0b20gfSB9Owor
ICAgICAgICByZXR1cm4geyB7IHJldGFpblBhZGRpbmdTdGFydCA/IHBhZGRpbmdSaWdodCA6IDBf
bHUsIHJldGFpblBhZGRpbmdFbmQgPyBwYWRkaW5nTGVmdCA6IDBfbHUgfSwgeyBwYWRkaW5nVG9w
LCBwYWRkaW5nQm90dG9tIH0gfTsKKyAgICB9CisKKyAgICBhdXRvIHBhZGRpbmdMb2dpY2FsTGVm
dCA9IHJldGFpblBhZGRpbmdTdGFydCA/IGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24gPyBw
YWRkaW5nVG9wIDogcGFkZGluZ0JvdHRvbSA6IDBfbHU7CisgICAgYXV0byBwYWRkaW5nTG9naWNh
bFJpZ2h0ID0gcmV0YWluUGFkZGluZ0VuZCA/IGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24g
PyBwYWRkaW5nQm90dG9tIDogcGFkZGluZ1RvcCA6IDBfbHU7CisgICAgYXV0byBwYWRkaW5nTG9n
aWNhbFRvcCA9IHdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdodCA/IHBhZGRp
bmdMZWZ0IDogcGFkZGluZ1JpZ2h0OworICAgIGF1dG8gcGFkZGluZ0xvZ2ljYWxCb3R0b20gPSB3
cml0aW5nTW9kZSA9PSBXcml0aW5nTW9kZTo6TGVmdFRvUmlnaHQgPyBwYWRkaW5nUmlnaHQgOiBw
YWRkaW5nTGVmdDsKKyAgICByZXR1cm4geyB7IHBhZGRpbmdMb2dpY2FsTGVmdCwgcGFkZGluZ0xv
Z2ljYWxSaWdodCB9LCB7IHBhZGRpbmdMb2dpY2FsVG9wLCBwYWRkaW5nTG9naWNhbEJvdHRvbSB9
IH07Cit9CisKK3ZvaWQgTGluZUxheW91dDo6dXBkYXRlTGF5b3V0Qm94RGltZW5zaW9ucyhjb25z
dCBSZW5kZXJCb3gmIHJlcGxhY2VkT3JJbmxpbmVCbG9jaykKK3sKKyAgICBhdXRvJiBsYXlvdXRC
b3ggPSBtX2JveFRyZWUubGF5b3V0Qm94Rm9yUmVuZGVyZXIocmVwbGFjZWRPcklubGluZUJsb2Nr
KTsKKyAgICAvLyBJbnRlcm5hbGx5IGJvdGggcmVwbGFjZWQgYW5kIGlubGluZS1ib3ggY29udGVu
dCB1c2UgcmVwbGFjZWQgYm94ZXMuCisgICAgYXV0byYgcmVwbGFjZWRCb3ggPSBkb3duY2FzdDxM
YXlvdXQ6OlJlcGxhY2VkQm94PihsYXlvdXRCb3gpOworCisgICAgYXV0byYgcmVwbGFjZWRCb3hH
ZW9tZXRyeSA9IG1fbGF5b3V0U3RhdGUuZW5zdXJlR2VvbWV0cnlGb3JCb3gocmVwbGFjZWRCb3gp
OworICAgIC8vIFNjcm9sbGJhcnMgZWF0IGludG8gdGhlIHBhZGRpbmcgYm94IGFyZWEuIFRoZXkg
bmV2ZXIgc3RyZXRjaCB0aGUgYm9yZGVyIGJveCBidXQgdGhleSBtYXkgc2hyaW5rIHRoZSBwYWRk
aW5nIGJveC4KKyAgICAvLyBJbiBsZWdhY3kgcmVuZGVyIHRyZWUsIFJlbmRlckJveDo6Y29udGVu
dFdpZHRoL2NvbnRlbnRIZWlnaHQgdmFsdWVzIGFyZSBhZGp1c3RlZCB0byBhY2NvbW9kYXRlIHRo
ZSBzY3JvbGxiYXIgd2lkdGgvaGVpZ2h0LgorICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0id2lkdGg6
IDEwcHg7IG92ZXJmbG93OiBzY3JvbGw7Ij5jb250ZW50PC9kaXY+LCBSZW5kZXJCb3g6OmNvbnRl
bnRXaWR0aCgpIHdvbid0IGJlIHJldHVybmluZyB0aGUgdmFsdWUgb2YgMTBweCBidXQgaW5zdGVh
ZCAwcHggKDEwcHggLSAxNXB4KS4KKyAgICBhdXRvIGhvcml6b250YWxTcGFjZVJlc2VydmVkRm9y
U2Nyb2xsYmFyID0gcmVwbGFjZWRPcklubGluZUJsb2NrLnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5n
U2Nyb2xsYmFyKCkud2lkdGgoKSAtIHJlcGxhY2VkT3JJbmxpbmVCbG9jay5wYWRkaW5nQm94V2lk
dGgoKTsKKyAgICByZXBsYWNlZEJveEdlb21ldHJ5LnNldEhvcml6b250YWxTcGFjZUZvclNjcm9s
bGJhcihob3Jpem9udGFsU3BhY2VSZXNlcnZlZEZvclNjcm9sbGJhcik7CisKKyAgICBhdXRvIHZl
cnRpY2FsU3BhY2VSZXNlcnZlZEZvclNjcm9sbGJhciA9IHJlcGxhY2VkT3JJbmxpbmVCbG9jay5w
YWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpLmhlaWdodCgpIC0gcmVwbGFjZWRPcklu
bGluZUJsb2NrLnBhZGRpbmdCb3hIZWlnaHQoKTsKKyAgICByZXBsYWNlZEJveEdlb21ldHJ5LnNl
dFZlcnRpY2FsU3BhY2VGb3JTY3JvbGxiYXIodmVydGljYWxTcGFjZVJlc2VydmVkRm9yU2Nyb2xs
YmFyKTsKKworICAgIHJlcGxhY2VkQm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGNvbnRl
bnRMb2dpY2FsV2lkdGhGb3JSZW5kZXJlcihyZXBsYWNlZE9ySW5saW5lQmxvY2spKTsKKyAgICBy
ZXBsYWNlZEJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hIZWlnaHQoY29udGVudExvZ2ljYWxIZWln
aHRGb3JSZW5kZXJlcihyZXBsYWNlZE9ySW5saW5lQmxvY2spKTsKKworICAgIGF1dG8gaXNMZWZ0
VG9SaWdodElubGluZURpcmVjdGlvbiA9IHJlcGxhY2VkT3JJbmxpbmVCbG9jay5wYXJlbnQoKS0+
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgYXV0byB3cml0aW5nTW9kZSA9
IHJlcGxhY2VkT3JJbmxpbmVCbG9jay5wYXJlbnQoKS0+c3R5bGUoKS53cml0aW5nTW9kZSgpOwor
CisgICAgcmVwbGFjZWRCb3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih2ZXJ0aWNhbExvZ2lj
YWxNYXJnaW4ocmVwbGFjZWRPcklubGluZUJsb2NrLCB3cml0aW5nTW9kZSkpOworICAgIHJlcGxh
Y2VkQm94R2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1hcmdpbihob3Jpem9udGFsTG9naWNhbE1hcmdp
bihyZXBsYWNlZE9ySW5saW5lQmxvY2ssIGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24sIHdy
aXRpbmdNb2RlID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSkpOworICAgIHJlcGxhY2VkQm94
R2VvbWV0cnkuc2V0Qm9yZGVyKGxvZ2ljYWxCb3JkZXIocmVwbGFjZWRPcklubGluZUJsb2NrLCBp
c0xlZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uLCB3cml0aW5nTW9kZSkpOworICAgIHJlcGxhY2Vk
Qm94R2VvbWV0cnkuc2V0UGFkZGluZyhsb2dpY2FsUGFkZGluZyhyZXBsYWNlZE9ySW5saW5lQmxv
Y2ssIGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24sIHdyaXRpbmdNb2RlKSk7CisKKyAgICBh
dXRvIGhhc05vblN5bnRoZXRpY0Jhc2VsaW5lID0gWyZdIHsKKyAgICAgICAgaWYgKGlzPFJlbmRl
ckxpc3RNYXJrZXI+KHJlcGxhY2VkT3JJbmxpbmVCbG9jaykpCisgICAgICAgICAgICByZXR1cm4g
IWRvd25jYXN0PFJlbmRlckxpc3RNYXJrZXI+KHJlcGxhY2VkT3JJbmxpbmVCbG9jaykuaXNJbWFn
ZSgpOworICAgICAgICBpZiAoaXM8UmVuZGVyUmVwbGFjZWQ+KHJlcGxhY2VkT3JJbmxpbmVCbG9j
aykKKyAgICAgICAgICAgIHx8IGlzPFJlbmRlckxpc3RCb3g+KHJlcGxhY2VkT3JJbmxpbmVCbG9j
aykKKyAgICAgICAgICAgIHx8IGlzPFJlbmRlclNsaWRlcj4ocmVwbGFjZWRPcklubGluZUJsb2Nr
KQorICAgICAgICAgICAgfHwgaXM8UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU+KHJlcGxhY2Vk
T3JJbmxpbmVCbG9jaykKKyAgICAgICAgICAgIHx8IGlzPFJlbmRlclRhYmxlPihyZXBsYWNlZE9y
SW5saW5lQmxvY2spCisjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICAgICAgICAg
IHx8IGlzPFJlbmRlckF0dGFjaG1lbnQ+KHJlcGxhY2VkT3JJbmxpbmVCbG9jaykKKyNlbmRpZgor
ICAgICAgICAgICAgfHwgaXM8UmVuZGVyQnV0dG9uPihyZXBsYWNlZE9ySW5saW5lQmxvY2spKSB7
CisgICAgICAgICAgICAvLyBUaGVzZSBhcmUgc3BlY2lhbCBSZW5kZXJCbG9jayByZW5kZXJlcnMg
dGhhdCBvdmVycmlkZSB0aGUgZGVmYXVsdCBiYXNlbGluZSBwb3NpdGlvbiBiZWhhdmlvciBvZiB0
aGUgaW5saW5lIGJsb2NrIGJveC4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGF1dG8mIGJsb2NrRmxvdyA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4ocmVw
bGFjZWRPcklubGluZUJsb2NrKTsKKyAgICAgICAgYXV0byBoYXNBcHBhcmVhbmNlID0gYmxvY2tG
bG93LnN0eWxlKCkuaGFzRWZmZWN0aXZlQXBwZWFyYW5jZSgpICYmICFibG9ja0Zsb3cudGhlbWUo
KS5pc0NvbnRyb2xDb250YWluZXIoYmxvY2tGbG93LnN0eWxlKCkuZWZmZWN0aXZlQXBwZWFyYW5j
ZSgpKTsKKyAgICAgICAgcmV0dXJuIGhhc0FwcGFyZWFuY2UgfHwgIWJsb2NrRmxvdy5jaGlsZHJl
bklubGluZSgpIHx8IGJsb2NrRmxvdy5oYXNMaW5lcygpIHx8IGJsb2NrRmxvdy5oYXNMaW5lSWZF
bXB0eSgpOworICAgIH0oKTsKKyAgICBpZiAoaGFzTm9uU3ludGhldGljQmFzZWxpbmUpIHsKKyAg
ICAgICAgYXV0byBiYXNlbGluZSA9IHJlcGxhY2VkT3JJbmxpbmVCbG9jay5iYXNlbGluZVBvc2l0
aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgZmFsc2UgLyogZmlyc3RMaW5lICovLCB3cml0aW5nTW9k
ZSA9PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20gPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2Fs
TGluZSwgUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckxp
c3RNYXJrZXI+KHJlcGxhY2VkT3JJbmxpbmVCbG9jaykpIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
ZG93bmNhc3Q8UmVuZGVyTGlzdE1hcmtlcj4ocmVwbGFjZWRPcklubGluZUJsb2NrKS5pc0ltYWdl
KCkpOworICAgICAgICAgICAgYmFzZWxpbmUgPSByZXBsYWNlZE9ySW5saW5lQmxvY2suc3R5bGUo
KS5tZXRyaWNzT2ZQcmltYXJ5Rm9udCgpLmFzY2VudCgpOworICAgICAgICB9CisgICAgICAgIHJl
cGxhY2VkQm94LnNldEJhc2VsaW5lKHJvdW5kVG9JbnQoYmFzZWxpbmUpKTsKKyAgICB9Cit9CisK
K3ZvaWQgTGluZUxheW91dDo6dXBkYXRlTGluZUJyZWFrQm94RGltZW5zaW9ucyhjb25zdCBSZW5k
ZXJMaW5lQnJlYWsmIGxpbmVCcmVha0JveCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgYSBib3gg
Z2VvbWV0cnkgcmVzZXQgKHNlZSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93
Q29udGVudCkuCisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBtX2xheW91dFN0YXRlLmVuc3VyZUdl
b21ldHJ5Rm9yQm94KG1fYm94VHJlZS5sYXlvdXRCb3hGb3JSZW5kZXJlcihsaW5lQnJlYWtCb3gp
KTsKKworICAgIGJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKKyAgICBib3hH
ZW9tZXRyeS5zZXRCb3JkZXIoeyB9KTsKKyAgICBib3hHZW9tZXRyeS5zZXRQYWRkaW5nKHsgfSk7
CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKHsgfSk7CisgICAgYm94R2VvbWV0
cnkuc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKK30KKwordm9pZCBMaW5lTGF5b3V0Ojp1cGRhdGVJ
bmxpbmVCb3hEaW1lbnNpb25zKGNvbnN0IFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lKQorewor
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gbV9sYXlvdXRTdGF0ZS5lbnN1cmVHZW9tZXRyeUZvckJv
eChtX2JveFRyZWUubGF5b3V0Qm94Rm9yUmVuZGVyZXIocmVuZGVySW5saW5lKSk7CisKKyAgICAv
LyBDaGVjayBpZiB0aGlzIHJlbmRlcmVyIGlzIHBhcnQgb2YgYSBjb250aW51YXRpb24gYW5kIGFk
anVzdCBob3Jpem9udGFsIG1hcmdpbi9ib3JkZXIvcGFkZGluZyBhY2NvcmRpbmdseS4KKyAgICBh
dXRvIHNob3VsZE5vdFJldGFpbkJvcmRlclBhZGRpbmdBbmRNYXJnaW5TdGFydCA9IHJlbmRlcklu
bGluZS5pc0NvbnRpbnVhdGlvbigpOworICAgIGF1dG8gc2hvdWxkTm90UmV0YWluQm9yZGVyUGFk
ZGluZ0FuZE1hcmdpbkVuZCA9ICFyZW5kZXJJbmxpbmUuaXNDb250aW51YXRpb24oKSAmJiByZW5k
ZXJJbmxpbmUuaW5saW5lQ29udGludWF0aW9uKCk7CisKKyAgICBib3hHZW9tZXRyeS5zZXRWZXJ0
aWNhbE1hcmdpbih7IH0pOworICAgIGF1dG8gaXNMZWZ0VG9SaWdodElubGluZURpcmVjdGlvbiA9
IHJlbmRlcklubGluZS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICBhdXRv
IHdyaXRpbmdNb2RlID0gcmVuZGVySW5saW5lLnN0eWxlKCkud3JpdGluZ01vZGUoKTsKKworICAg
IGJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oaG9yaXpvbnRhbExvZ2ljYWxNYXJnaW4o
cmVuZGVySW5saW5lLCBpc0xlZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uLCB3cml0aW5nTW9kZSA9
PSBXcml0aW5nTW9kZTo6VG9wVG9Cb3R0b20sICFzaG91bGROb3RSZXRhaW5Cb3JkZXJQYWRkaW5n
QW5kTWFyZ2luU3RhcnQsICFzaG91bGROb3RSZXRhaW5Cb3JkZXJQYWRkaW5nQW5kTWFyZ2luRW5k
KSk7CisgICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKGxvZ2ljYWxCb3JkZXIocmVuZGVySW5saW5l
LCBpc0xlZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uLCB3cml0aW5nTW9kZSwgIXNob3VsZE5vdFJl
dGFpbkJvcmRlclBhZGRpbmdBbmRNYXJnaW5TdGFydCwgIXNob3VsZE5vdFJldGFpbkJvcmRlclBh
ZGRpbmdBbmRNYXJnaW5FbmQpKTsKKyAgICBib3hHZW9tZXRyeS5zZXRQYWRkaW5nKGxvZ2ljYWxQ
YWRkaW5nKHJlbmRlcklubGluZSwgaXNMZWZ0VG9SaWdodElubGluZURpcmVjdGlvbiwgd3JpdGlu
Z01vZGUsICFzaG91bGROb3RSZXRhaW5Cb3JkZXJQYWRkaW5nQW5kTWFyZ2luU3RhcnQsICFzaG91
bGROb3RSZXRhaW5Cb3JkZXJQYWRkaW5nQW5kTWFyZ2luRW5kKSk7Cit9CisKK3ZvaWQgTGluZUxh
eW91dDo6dXBkYXRlU3R5bGUoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJTdHlsZSYgb2xkU3R5bGUpCit7CisgICAgYXV0byBpbnZhbGlkYXRpb24gPSBM
YXlvdXQ6OklubGluZUludmFsaWRhdGlvbiB7IGVuc3VyZUxpbmVEYW1hZ2UoKSB9OworICAgIGlu
dmFsaWRhdGlvbi5zdHlsZUNoYW5nZWQobV9ib3hUcmVlLmxheW91dEJveEZvclJlbmRlcmVyKHJl
bmRlcmVyKSwgb2xkU3R5bGUpOworCisgICAgbV9ib3hUcmVlLnVwZGF0ZVN0eWxlKHJlbmRlcmVy
KTsKK30KKworc3RkOjpwYWlyPExheW91dFVuaXQsIExheW91dFVuaXQ+IExpbmVMYXlvdXQ6OmNv
bXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkKK3sKKyAgICBhdXRvIGlubGluZUZvcm1h
dHRpbmdDb250ZXh0ID0gTGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCB7IHJvb3RMYXlv
dXRCb3goKSwgbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUsIG51bGxwdHIgfTsKKyAgICBhdXRvIGNv
bnN0cmFpbnRzID0gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY29tcHV0ZWRJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzRm9ySW50ZWdyYXRpb24oKTsKKworICAgIHJldHVybiB7IGNvbnN0cmFpbnRz
Lm1pbmltdW0sIGNvbnN0cmFpbnRzLm1heGltdW0gfTsKK30KKwordm9pZCBMaW5lTGF5b3V0Ojps
YXlvdXQoKQoreworICAgIGF1dG8mIHJvb3RMYXlvdXRCb3ggPSB0aGlzLT5yb290TGF5b3V0Qm94
KCk7CisgICAgaWYgKCFyb290TGF5b3V0Qm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwcmVwYXJlTGF5b3V0U3RhdGUoKTsKKyAgICBwcmVwYXJl
RmxvYXRpbmdTdGF0ZSgpOworCisgICAgLy8gRklYTUU6IERvIG5vdCBjbGVhciB0aGUgbGluZXMg
YW5kIGJveGVzIGhlcmUgdW5jb25kaXRpb25hbGx5LCBidXQgY29uc3VsdCB3aXRoIHRoZSBkYW1h
Z2Ugb2JqZWN0IGluc3RlYWQuCisgICAgY2xlYXJJbmxpbmVDb250ZW50KCk7CisKKyAgICBhdXRv
JiByb290R2VvbWV0cnkgPSBtX2xheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94KHJvb3RMYXlvdXRC
b3gpOworICAgIGF1dG8gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQgPSBMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0IHsgcm9vdExheW91dEJveCwgbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUs
IG1fbGluZURhbWFnZS5nZXQoKSB9OworCisgICAgYXV0byBob3Jpem9udGFsQ29uc3RyYWludHMg
PSBMYXlvdXQ6Okhvcml6b250YWxDb25zdHJhaW50cyB7IHJvb3RHZW9tZXRyeS5jb250ZW50Qm94
TGVmdCgpLCByb290R2VvbWV0cnkuY29udGVudEJveFdpZHRoKCkgfTsKKworICAgIGlubGluZUZv
cm1hdHRpbmdDb250ZXh0LmxpbmVMYXlvdXRGb3JJbnRlcmdyYXRpb24oeyBob3Jpem9udGFsQ29u
c3RyYWludHMsIHJvb3RHZW9tZXRyeS5jb250ZW50Qm94VG9wKCkgfSk7CisKKyAgICBjb25zdHJ1
Y3RDb250ZW50KCk7CisKKyAgICBtX2xpbmVEYW1hZ2UgPSB7IH07Cit9CisKK3ZvaWQgTGluZUxh
eW91dDo6Y29uc3RydWN0Q29udGVudCgpCit7CisgICAgYXV0byBpbmxpbmVDb250ZW50QnVpbGRl
ciA9IElubGluZUNvbnRlbnRCdWlsZGVyIHsgZmxvdygpLCBtX2JveFRyZWUgfTsKKyAgICBpbmxp
bmVDb250ZW50QnVpbGRlci5idWlsZChtX2lubGluZUZvcm1hdHRpbmdTdGF0ZSwgZW5zdXJlSW5s
aW5lQ29udGVudCgpKTsKKyAgICBBU1NFUlQobV9pbmxpbmVDb250ZW50KTsKKworICAgIGF1dG8m
IGJveEFuZFJlbmRlcmVyTGlzdCA9IG1fYm94VHJlZS5ib3hBbmRSZW5kZXJlckxpc3QoKTsKKyAg
ICBmb3IgKGF1dG8mIGJveEFuZFJlbmRlcmVyIDogYm94QW5kUmVuZGVyZXJMaXN0KSB7CisgICAg
ICAgIGF1dG8mIGxheW91dEJveCA9IGJveEFuZFJlbmRlcmVyLmJveC5nZXQoKTsKKyAgICAgICAg
aWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpib3hBbmRSZW5k
ZXJlci5yZW5kZXJlcik7CisgICAgICAgIHJlbmRlcmVyLnNldExvY2F0aW9uKExheW91dDo6Qm94
R2VvbWV0cnk6OmJvcmRlckJveFRvcExlZnQobV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUuYm94R2Vv
bWV0cnkobGF5b3V0Qm94KSkpOworICAgIH0KKworICAgIG1faW5saW5lQ29udGVudC0+Y2xlYXJH
YXBBZnRlckxhc3RMaW5lID0gbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUuY2xlYXJHYXBBZnRlckxh
c3RMaW5lKCk7CisgICAgbV9pbmxpbmVDb250ZW50LT5zaHJpbmtUb0ZpdCgpOworICAgIG1faW5s
aW5lRm9ybWF0dGluZ1N0YXRlLnNocmlua1RvRml0KCk7Cit9CisKK3ZvaWQgTGluZUxheW91dDo6
dXBkYXRlRm9ybWF0dGluZ1Jvb3RHZW9tZXRyeUFuZEludmFsaWRhdGUoKQoreworICAgIGF1dG8m
IGZsb3cgPSB0aGlzLT5mbG93KCk7CisKKyAgICBhdXRvIHVwZGF0ZUdlb21ldHJ5ID0gWyZdKGF1
dG8mIHJvb3QpIHsKKyAgICAgICAgYXV0byBpc0xlZnRUb1JpZ2h0SW5saW5lRGlyZWN0aW9uID0g
Zmxvdy5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAgICAgYXV0byB3cml0
aW5nTW9kZSA9IGZsb3cuc3R5bGUoKS53cml0aW5nTW9kZSgpOworCisgICAgICAgIHJvb3Quc2V0
Q29udGVudEJveFdpZHRoKHdyaXRpbmdNb2RlID09IFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRvbSA/
IGZsb3cuY29udGVudFdpZHRoKCkgOiBmbG93LmNvbnRlbnRIZWlnaHQoKSk7CisgICAgICAgIHJv
b3Quc2V0UGFkZGluZyhsb2dpY2FsUGFkZGluZyhmbG93LCBpc0xlZnRUb1JpZ2h0SW5saW5lRGly
ZWN0aW9uLCB3cml0aW5nTW9kZSkpOworICAgICAgICByb290LnNldEJvcmRlcihsb2dpY2FsQm9y
ZGVyKGZsb3csIGlzTGVmdFRvUmlnaHRJbmxpbmVEaXJlY3Rpb24sIHdyaXRpbmdNb2RlKSk7Cisg
ICAgICAgIHJvb3Quc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOworICAgICAgICByb290LnNldFZl
cnRpY2FsTWFyZ2luKHsgfSk7CisgICAgfTsKKyAgICBhdXRvJiByb290TGF5b3V0Qm94ID0gdGhp
cy0+cm9vdExheW91dEJveCgpOworICAgIGlmICghbV9sYXlvdXRTdGF0ZS5oYXNCb3hHZW9tZXRy
eShyb290TGF5b3V0Qm94KSkKKyAgICAgICAgcmV0dXJuIHVwZGF0ZUdlb21ldHJ5KG1fbGF5b3V0
U3RhdGUuZW5zdXJlR2VvbWV0cnlGb3JCb3gocm9vdExheW91dEJveCkpOworCisgICAgYXV0byYg
cm9vdEdlb21ldHJ5ID0gbV9sYXlvdXRTdGF0ZS5nZW9tZXRyeUZvclJvb3RCb3goKTsKKyAgICBh
dXRvIG5ld0xvZ2ljYWxXaWR0aCA9IGZsb3cuY29udGVudExvZ2ljYWxXaWR0aCgpOworICAgIGlm
IChuZXdMb2dpY2FsV2lkdGggIT0gcm9vdEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpKQorICAg
ICAgICBMYXlvdXQ6OklubGluZUludmFsaWRhdGlvbihlbnN1cmVMaW5lRGFtYWdlKCkpLmhvcml6
b250YWxDb25zdHJhaW50Q2hhbmdlZCgpOworICAgIHVwZGF0ZUdlb21ldHJ5KHJvb3RHZW9tZXRy
eSk7Cit9CisKK3ZvaWQgTGluZUxheW91dDo6cHJlcGFyZUxheW91dFN0YXRlKCkKK3sKKyAgICBt
X2xheW91dFN0YXRlLnNldFZpZXdwb3J0U2l6ZShmbG93KCkuZnJhbWUoKS52aWV3KCktPnNpemUo
KSk7Cit9CisKK3ZvaWQgTGluZUxheW91dDo6cHJlcGFyZUZsb2F0aW5nU3RhdGUoKQoreworICAg
IGF1dG8mIGZsb2F0aW5nU3RhdGUgPSBtX2lubGluZUZvcm1hdHRpbmdTdGF0ZS5mbG9hdGluZ1N0
YXRlKCk7CisgICAgZmxvYXRpbmdTdGF0ZS5jbGVhcigpOworCisgICAgaWYgKCFmbG93KCkuY29u
dGFpbnNGbG9hdHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBmbG9hdGlu
Z09iamVjdCA6ICpmbG93KCkuZmxvYXRpbmdPYmplY3RTZXQoKSkgeworICAgICAgICBhdXRvJiB2
aXN1YWxSZWN0ID0gZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpOworICAgICAgICBhdXRvIHBv
c2l0aW9uID0gZmxvYXRpbmdPYmplY3QtPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRS
aWdodAorICAgICAgICAgICAgPyBMYXlvdXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6UG9z
aXRpb246OlJpZ2h0CisgICAgICAgICAgICA6IExheW91dDo6RmxvYXRpbmdTdGF0ZTo6RmxvYXRJ
dGVtOjpQb3NpdGlvbjo6TGVmdDsKKyAgICAgICAgYXV0byBib3hHZW9tZXRyeSA9IExheW91dDo6
Qm94R2VvbWV0cnkgeyB9OworICAgICAgICAvLyBGSVhNRTogV2UgYXJlIGZsb29yaW5nIGhlcmUg
Zm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5LgorICAgICAgICAvLyAgICAgICAgU2VlIEZsb2F0aW5n
T2JqZWN0czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdCBhbmQgUmVuZGVyQmxvY2tGbG93Ojpj
bGVhckZsb2F0cy4KKyAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gdmlzdWFsUmVjdC55KCkuZmxv
b3IoKTsKKyAgICAgICAgYXV0byBsb2dpY2FsSGVpZ2h0ID0gdmlzdWFsUmVjdC5tYXhZKCkuZmxv
b3IoKSAtIGxvZ2ljYWxUb3A7CisgICAgICAgIGF1dG8gbG9naWNhbFJlY3QgPSBmbG93KCkuc3R5
bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gTGF5b3V0UmVjdCh2aXN1YWxSZWN0Lngo
KSwgbG9naWNhbFRvcCwgdmlzdWFsUmVjdC53aWR0aCgpLCBsb2dpY2FsSGVpZ2h0KQorICAgICAg
ICAgICAgOiBMYXlvdXRSZWN0KGxvZ2ljYWxUb3AsIHZpc3VhbFJlY3QueCgpLCBsb2dpY2FsSGVp
Z2h0LCB2aXN1YWxSZWN0LndpZHRoKCkpOworCisgICAgICAgIGJveEdlb21ldHJ5LnNldExvZ2lj
YWxUb3BMZWZ0KGxvZ2ljYWxSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBib3hHZW9tZXRyeS5z
ZXRDb250ZW50Qm94V2lkdGgobG9naWNhbFJlY3Qud2lkdGgoKSk7CisgICAgICAgIGJveEdlb21l
dHJ5LnNldENvbnRlbnRCb3hIZWlnaHQobG9naWNhbFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBi
b3hHZW9tZXRyeS5zZXRCb3JkZXIoeyB9KTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0UGFkZGlu
Zyh7IH0pOworICAgICAgICBib3hHZW9tZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgfSk7Cisg
ICAgICAgIGJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7CisgICAgICAgIGZsb2F0
aW5nU3RhdGUuYXBwZW5kKHsgcG9zaXRpb24sIGJveEdlb21ldHJ5IH0pOworICAgIH0KK30KKwor
TGF5b3V0VW5pdCBMaW5lTGF5b3V0Ojpjb250ZW50TG9naWNhbEhlaWdodCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2lubGluZUNvbnRlbnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRv
JiBsaW5lcyA9IG1faW5saW5lQ29udGVudC0+bGluZXM7CisgICAgYXV0byBmbGlwcGVkQ29udGVu
dEhlaWdodEZvcldyaXRpbmdNb2RlID0gcm9vdExheW91dEJveCgpLnN0eWxlKCkuaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKQorICAgICAgICA/IGxpbmVzLmxhc3QoKS5saW5lQm94Qm90dG9tKCkg
LSBsaW5lcy5maXJzdCgpLmxpbmVCb3hUb3AoKQorICAgICAgICA6IGxpbmVzLmxhc3QoKS5saW5l
Qm94UmlnaHQoKSAtIGxpbmVzLmZpcnN0KCkubGluZUJveExlZnQoKTsKKyAgICByZXR1cm4gTGF5
b3V0VW5pdCB7IGZsaXBwZWRDb250ZW50SGVpZ2h0Rm9yV3JpdGluZ01vZGUgKyBtX2lubGluZUNv
bnRlbnQtPmNsZWFyR2FwQWZ0ZXJMYXN0TGluZSB9OworfQorCitzaXplX3QgTGluZUxheW91dDo6
bGluZUNvdW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5saW5lQ29udGVudCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKCFtX2lubGluZUNvbnRlbnQtPmhhc0NvbnRlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9pbmxpbmVDb250ZW50LT5saW5lcy5zaXplKCk7
Cit9CisKK2Jvb2wgTGluZUxheW91dDo6aGFzVmlzdWFsT3ZlcmZsb3coKSBjb25zdAoreworICAg
IHJldHVybiBtX2lubGluZUNvbnRlbnQgJiYgbV9pbmxpbmVDb250ZW50LT5oYXNWaXN1YWxPdmVy
ZmxvdygpOworfQorCitMYXlvdXRVbml0IExpbmVMYXlvdXQ6OmZpcnN0TGluZVBoeXNpY2FsQmFz
ZWxpbmUoKSBjb25zdAoreworICAgIGlmICghbV9pbmxpbmVDb250ZW50IHx8IG1faW5saW5lQ29u
dGVudC0+bGluZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8mIGZpcnN0TGluZSA9IG1faW5s
aW5lQ29udGVudC0+bGluZXMuZmlyc3QoKTsKKyAgICBzd2l0Y2ggKHJvb3RMYXlvdXRCb3goKS5z
dHlsZSgpLndyaXRpbmdNb2RlKCkpIHsKKyAgICBjYXNlIFdyaXRpbmdNb2RlOjpUb3BUb0JvdHRv
bToKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyBmaXJzdExpbmUubGluZUJveFRvcCgpICsg
Zmlyc3RMaW5lLmJhc2VsaW5lKCkgfTsKKyAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdo
dDoKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyBmaXJzdExpbmUubGluZUJveExlZnQoKSAr
IChmaXJzdExpbmUubGluZUJveFdpZHRoKCkgLSBmaXJzdExpbmUuYmFzZWxpbmUoKSkgfTsKKyAg
ICBjYXNlIFdyaXRpbmdNb2RlOjpSaWdodFRvTGVmdDoKKyAgICAgICAgcmV0dXJuIExheW91dFVu
aXQgeyBmaXJzdExpbmUubGluZUJveExlZnQoKSArIGZpcnN0TGluZS5iYXNlbGluZSgpIH07Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorfQorCitMYXlvdXRVbml0IExpbmVMYXlvdXQ6Omxhc3RMaW5lTG9naWNh
bEJhc2VsaW5lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5saW5lQ29udGVudCB8fCBtX2lubGlu
ZUNvbnRlbnQtPmxpbmVzLmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvJiBsYXN0TGluZSA9IG1f
aW5saW5lQ29udGVudC0+bGluZXMubGFzdCgpOworICAgIHN3aXRjaCAocm9vdExheW91dEJveCgp
LnN0eWxlKCkud3JpdGluZ01vZGUoKSkgeworICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90
dG9tOgorICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGxhc3RMaW5lLmxpbmVCb3hUb3AoKSAr
IGxhc3RMaW5lLmJhc2VsaW5lKCkgfTsKKyAgICBjYXNlIFdyaXRpbmdNb2RlOjpMZWZ0VG9SaWdo
dDogeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNldCB0aGUgY29tcHV0ZWQgaGVpZ2h0
IG9uIHRoZSByb290J3MgYm94IGdlb21ldHJ5IChpbiBSZW5kZXJCbG9ja0Zsb3cpIHNvIHRoYXQK
KyAgICAgICAgLy8gd2UgY291bGQgY2FsbCBtX2xheW91dFN0YXRlLmdlb21ldHJ5Rm9yUm9vdEJv
eCgpLmJvcmRlckJveEhlaWdodCgpIGluc3RlYWQuCisKKyAgICAgICAgLy8gTGluZSBpcyBhbHdh
eXMgdmlzdWFsIGNvb3JkaW5hdGVzIHdoaWxlIGxvZ2ljYWxIZWlnaHQgaXMgbm90IChpLmUuIHRo
aXMgdHJhbnNsYXRlIHRvICJib3ggdmlzdWFsIHdpZHRoIiAtICJsaW5lIHZpc3VhbCByaWdodCIp
CisgICAgICAgIGF1dG8gbGluZUxvZ2ljYWxUb3AgPSBmbG93KCkubG9naWNhbEhlaWdodCgpIC0g
bGFzdExpbmUubGluZUJveFJpZ2h0KCk7CisgICAgICAgIHJldHVybiBMYXlvdXRVbml0IHsgbGlu
ZUxvZ2ljYWxUb3AgKyBsYXN0TGluZS5iYXNlbGluZSgpIH07CisgICAgfQorICAgIGNhc2UgV3Jp
dGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGxhc3RM
aW5lLmxpbmVCb3hMZWZ0KCkgKyBsYXN0TGluZS5iYXNlbGluZSgpIH07CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorfQorCit2b2lkIExpbmVMYXlvdXQ6OmFkanVzdEZvclBhZ2luYXRpb24oKQoreworICAgIGlm
ICghbV9pbmxpbmVDb250ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBhZ2luZWRJ
bmxpbmVDb250ZW50ID0gYWRqdXN0TGluZVBvc2l0aW9uc0ZvclBhZ2luYXRpb24oKm1faW5saW5l
Q29udGVudCwgZmxvdygpKTsKKyAgICBpZiAocGFnaW5lZElubGluZUNvbnRlbnQucHRyKCkgPT0g
bV9pbmxpbmVDb250ZW50KSB7CisgICAgICAgIG1faXNQYWdpbmF0ZWRDb250ZW50ID0gZmFsc2U7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pc1BhZ2luYXRlZENvbnRlbnQgPSB0cnVl
OworICAgIG1faW5saW5lQ29udGVudCA9IFdURk1vdmUocGFnaW5lZElubGluZUNvbnRlbnQpOwor
fQorCit2b2lkIExpbmVMYXlvdXQ6OmNvbGxlY3RPdmVyZmxvdygpCit7CisgICAgaWYgKCFtX2lu
bGluZUNvbnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgbGluZSA6IG1f
aW5saW5lQ29udGVudC0+bGluZXMpIHsKKyAgICAgICAgZmxvdygpLmFkZExheW91dE92ZXJmbG93
KExheW91dDo6dG9MYXlvdXRSZWN0KGxpbmUuc2Nyb2xsYWJsZU92ZXJmbG93KCkpKTsKKyAgICAg
ICAgaWYgKCFmbG93KCkuaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpCisgICAgICAgICAgICBmbG93
KCkuYWRkVmlzdWFsT3ZlcmZsb3coTGF5b3V0Ojp0b0xheW91dFJlY3QobGluZS5pbmtPdmVyZmxv
dygpKSk7CisgICAgfQorfQorCitJbmxpbmVDb250ZW50JiBMaW5lTGF5b3V0OjplbnN1cmVJbmxp
bmVDb250ZW50KCkKK3sKKyAgICBpZiAoIW1faW5saW5lQ29udGVudCkKKyAgICAgICAgbV9pbmxp
bmVDb250ZW50ID0gSW5saW5lQ29udGVudDo6Y3JlYXRlKCp0aGlzKTsKKyAgICByZXR1cm4gKm1f
aW5saW5lQ29udGVudDsKK30KKworSW5saW5lSXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvciBMaW5l
TGF5b3V0Ojp0ZXh0Qm94ZXNGb3IoY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyVGV4dCkgY29uc3QK
K3sKKyAgICBpZiAoIW1faW5saW5lQ29udGVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IGF1dG8mIGxheW91dEJveCA9IG1fYm94VHJlZS5sYXlvdXRCb3hGb3JSZW5kZXJlcihyZW5kZXJU
ZXh0KTsKKyAgICBhdXRvIGZpcnN0SW5kZXggPSBtX2lubGluZUNvbnRlbnQtPmZpcnN0Qm94SW5k
ZXhGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBpZiAoIWZpcnN0SW5kZXgpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4gSW5saW5lSXRlcmF0b3I6OnRleHRCb3hGb3IoKm1f
aW5saW5lQ29udGVudCwgKmZpcnN0SW5kZXgpOworfQorCitJbmxpbmVJdGVyYXRvcjo6TGVhZkJv
eEl0ZXJhdG9yIExpbmVMYXlvdXQ6OmJveEZvcihjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJF
bGVtZW50KSBjb25zdAoreworICAgIGlmICghbV9pbmxpbmVDb250ZW50KQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgYXV0byYgbGF5b3V0Qm94ID0gbV9ib3hUcmVlLmxheW91dEJveEZvclJl
bmRlcmVyKHJlbmRlckVsZW1lbnQpOworICAgIGF1dG8gZmlyc3RJbmRleCA9IG1faW5saW5lQ29u
dGVudC0+Zmlyc3RCb3hJbmRleEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGlmICghZmly
c3RJbmRleCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBJbmxpbmVJdGVyYXRv
cjo6Ym94Rm9yKCptX2lubGluZUNvbnRlbnQsICpmaXJzdEluZGV4KTsKK30KKworSW5saW5lSXRl
cmF0b3I6OklubGluZUJveEl0ZXJhdG9yIExpbmVMYXlvdXQ6OmZpcnN0SW5saW5lQm94Rm9yKGNv
bnN0IFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lKSBjb25zdAoreworICAgIGlmICghbV9pbmxp
bmVDb250ZW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byYgbGF5b3V0Qm94ID0g
bV9ib3hUcmVlLmxheW91dEJveEZvclJlbmRlcmVyKHJlbmRlcklubGluZSk7CisgICAgYXV0byog
Ym94ID0gbV9pbmxpbmVDb250ZW50LT5maXJzdEJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwor
ICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIElubGluZUl0
ZXJhdG9yOjppbmxpbmVCb3hGb3IoKm1faW5saW5lQ29udGVudCwgKmJveCk7Cit9CisKK0lubGlu
ZUl0ZXJhdG9yOjpJbmxpbmVCb3hJdGVyYXRvciBMaW5lTGF5b3V0OjpmaXJzdFJvb3RJbmxpbmVC
b3goKSBjb25zdAoreworICAgIGlmICghbV9pbmxpbmVDb250ZW50IHx8ICFtX2lubGluZUNvbnRl
bnQtPmhhc0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBJbmxp
bmVJdGVyYXRvcjo6aW5saW5lQm94Rm9yKCptX2lubGluZUNvbnRlbnQsIG1faW5saW5lQ29udGVu
dC0+Ym94ZXNbMF0pOworfQorCitJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yIExpbmVM
YXlvdXQ6OmZpcnN0TGluZUJveCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2lubGluZUNvbnRlbnQp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyBJbmxpbmVJdGVyYXRvcjo6TGlu
ZUJveEl0ZXJhdG9yTW9kZXJuUGF0aCgqbV9pbmxpbmVDb250ZW50LCAwKSB9OworfQorCitJbmxp
bmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yIExpbmVMYXlvdXQ6Omxhc3RMaW5lQm94KCkgY29u
c3QKK3sKKyAgICBpZiAoIW1faW5saW5lQ29udGVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHJldHVybiB7IElubGluZUl0ZXJhdG9yOjpMaW5lQm94SXRlcmF0b3JNb2Rlcm5QYXRoKCpt
X2lubGluZUNvbnRlbnQsIG1faW5saW5lQ29udGVudC0+bGluZXMuaXNFbXB0eSgpID8gMCA6IG1f
aW5saW5lQ29udGVudC0+bGluZXMuc2l6ZSgpIC0gMSkgfTsKK30KKworTGF5b3V0UmVjdCBMaW5l
TGF5b3V0OjpmaXJzdElubGluZUJveFJlY3QoY29uc3QgUmVuZGVySW5saW5lJiByZW5kZXJJbmxp
bmUpIGNvbnN0Cit7CisgICAgYXV0byYgbGF5b3V0Qm94ID0gbV9ib3hUcmVlLmxheW91dEJveEZv
clJlbmRlcmVyKHJlbmRlcklubGluZSk7CisgICAgYXV0byogZmlyc3RCb3ggPSBtX2lubGluZUNv
bnRlbnQtPmZpcnN0Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgaWYgKCFmaXJzdEJv
eCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBmbGlwIHRoZSBkaXNwbGF5IGJveGVzIHNvb24gYWZ0ZXIgdGhlIHJvb3QgYmxvY2sKKyAg
ICAvLyBpcyBmaW5pc2hlZCBzaXppbmcgaW4gb25lIGdvLgorICAgIGF1dG8gZmlyc3RCb3hSZWN0
ID0gTGF5b3V0Ojp0b0xheW91dFJlY3QoZmlyc3RCb3gtPnZpc3VhbFJlY3RJZ25vcmluZ0Jsb2Nr
RGlyZWN0aW9uKCkpOworICAgIHN3aXRjaCAocm9vdExheW91dEJveCgpLnN0eWxlKCkud3JpdGlu
Z01vZGUoKSkgeworICAgIGNhc2UgV3JpdGluZ01vZGU6OlRvcFRvQm90dG9tOgorICAgIGNhc2Ug
V3JpdGluZ01vZGU6OkxlZnRUb1JpZ2h0OgorICAgICAgICByZXR1cm4gZmlyc3RCb3hSZWN0Owor
ICAgIGNhc2UgV3JpdGluZ01vZGU6OlJpZ2h0VG9MZWZ0OgorICAgICAgICBmaXJzdEJveFJlY3Qu
c2V0WChmbG93KCkud2lkdGgoKSAtIGZpcnN0Qm94UmVjdC5tYXhYKCkpOworICAgICAgICByZXR1
cm4gZmlyc3RCb3hSZWN0OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gZmlyc3RCb3hSZWN0OworICAgIH0KK30KKworTGF5b3V0UmVj
dCBMaW5lTGF5b3V0OjplbmNsb3NpbmdCb3JkZXJCb3hSZWN0Rm9yKGNvbnN0IFJlbmRlcklubGlu
ZSYgcmVuZGVySW5saW5lKSBjb25zdAoreworICAgIGlmICghbV9pbmxpbmVDb250ZW50KQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgLy8gRklYTUU6IFRoaXMga2VlcHMgdGhlIGV4aXN0aW5n
IG91dHB1dC4KKyAgICBpZiAoIW1faW5saW5lQ29udGVudC0+aGFzQ29udGVudCgpKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIExheW91dDo6Qm94R2VvbWV0cnk6OmJvcmRlckJv
eFJlY3QobV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUuYm94R2VvbWV0cnkobV9ib3hUcmVlLmxheW91
dEJveEZvclJlbmRlcmVyKHJlbmRlcklubGluZSkpKTsKK30KKworTGF5b3V0UmVjdCBMaW5lTGF5
b3V0Ojp2aXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94UmVjdEZvcihjb25zdCBSZW5kZXJJbmxpbmUm
IHJlbmRlcklubGluZSkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5saW5lQ29udGVudCkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8mIGxheW91dEJveCA9IG1fYm94VHJlZS5sYXlvdXRC
b3hGb3JSZW5kZXJlcihyZW5kZXJJbmxpbmUpOworCisgICAgTGF5b3V0UmVjdCByZXN1bHQ7Cisg
ICAgbV9pbmxpbmVDb250ZW50LT50cmF2ZXJzZU5vblJvb3RJbmxpbmVCb3hlcyhsYXlvdXRCb3gs
IFsmXShhdXRvJiBpbmxpbmVCb3gpIHsKKyAgICAgICAgcmVzdWx0LnVuaXRlKExheW91dDo6dG9M
YXlvdXRSZWN0KGlubGluZUJveC5pbmtPdmVyZmxvdygpKSk7CisgICAgfSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitWZWN0b3I8RmxvYXRSZWN0PiBMaW5lTGF5b3V0Ojpjb2xsZWN0SW5s
aW5lQm94UmVjdHMoY29uc3QgUmVuZGVySW5saW5lJiByZW5kZXJJbmxpbmUpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2lubGluZUNvbnRlbnQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRv
JiBsYXlvdXRCb3ggPSBtX2JveFRyZWUubGF5b3V0Qm94Rm9yUmVuZGVyZXIocmVuZGVySW5saW5l
KTsKKworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJlc3VsdDsKKyAgICBtX2lubGluZUNvbnRlbnQt
PnRyYXZlcnNlTm9uUm9vdElubGluZUJveGVzKGxheW91dEJveCwgWyZdKGF1dG8mIGlubGluZUJv
eCkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGlubGluZUJveC52aXN1YWxSZWN0SWdub3JpbmdC
bG9ja0RpcmVjdGlvbigpKTsKKyAgICB9KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Nv
bnN0IFJlbmRlck9iamVjdCYgTGluZUxheW91dDo6cmVuZGVyZXJGb3JMYXlvdXRCb3goY29uc3Qg
TGF5b3V0OjpCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ib3hUcmVlLnJl
bmRlcmVyRm9yTGF5b3V0Qm94KGxheW91dEJveCk7Cit9CisKK2NvbnN0IExheW91dDo6Q29udGFp
bmVyQm94JiBMaW5lTGF5b3V0Ojpyb290TGF5b3V0Qm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9ib3hUcmVlLnJvb3RMYXlvdXRCb3goKTsKK30KKworTGF5b3V0OjpDb250YWluZXJCb3gmIExp
bmVMYXlvdXQ6OnJvb3RMYXlvdXRCb3goKQoreworICAgIHJldHVybiBtX2JveFRyZWUucm9vdExh
eW91dEJveCgpOworfQorCitzdGF0aWMgTGF5b3V0UG9pbnQgZmxpcHBlZENvbnRlbnRPZmZzZXRJ
Zk5lZWRlZChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIHJvb3QsIGNvbnN0IFJlbmRlckJveCYgY2hp
bGRSZW5kZXJlciwgTGF5b3V0UG9pbnQgY29udGVudE9mZnNldCkKK3sKKyAgICBpZiAocm9vdC5z
dHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCisgICAgICAgIHJldHVybiByb290
LmZsaXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKGNoaWxkUmVuZGVyZXIsIGNvbnRlbnRPZmZzZXQp
OworICAgIHJldHVybiBjb250ZW50T2Zmc2V0OworfQorCit2b2lkIExpbmVMYXlvdXQ6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7
CisgICAgaWYgKCFtX2lubGluZUNvbnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
cGFpbnRQaGFzZSA9IHBhaW50SW5mby5waGFzZTsKKworICAgIGF1dG8gc2hvdWxkUGFpbnRGb3JQ
aGFzZSA9IFsmXSB7CisgICAgICAgIHN3aXRjaCAocGFpbnRQaGFzZSkgeworICAgICAgICBjYXNl
IFBhaW50UGhhc2U6OkZvcmVncm91bmQ6CisgICAgICAgIGNhc2UgUGFpbnRQaGFzZTo6RXZlbnRS
ZWdpb246CisgICAgICAgIGNhc2UgUGFpbnRQaGFzZTo6VGV4dENsaXA6CisgICAgICAgIGNhc2Ug
UGFpbnRQaGFzZTo6U2VsZWN0aW9uOgorICAgICAgICBjYXNlIFBhaW50UGhhc2U6Ok91dGxpbmU6
CisgICAgICAgIGNhc2UgUGFpbnRQaGFzZTo6Q2hpbGRPdXRsaW5lczoKKyAgICAgICAgY2FzZSBQ
YWludFBoYXNlOjpTZWxmT3V0bGluZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfTsK
KworICAgIGlmICghc2hvdWxkUGFpbnRGb3JQaGFzZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGRhbWFnZVJlY3QgPSBwYWludEluZm8ucmVjdDsKKyAgICBkYW1hZ2VSZWN0Lm1vdmVC
eSgtcGFpbnRPZmZzZXQpOworCisgICAgYXV0byBoYXNEYW1hZ2UgPSBbJl0oYXV0byYgYm94KSB7
CisgICAgICAgIGlmIChib3guc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6Vmlz
aWJsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byByZWN0ID0gZW5j
bG9zaW5nTGF5b3V0UmVjdChib3guaW5rT3ZlcmZsb3coKSk7CisgICAgICAgIGZsb3coKS5mbGlw
Rm9yV3JpdGluZ01vZGUocmVjdCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB0ZXN0
IGZvciBpbnRlcnNlY3Rpb24gYnV0IGhvcml6b250YWwgaW5rIG92ZXJmbG93IGlzIG1pc2NvbXB1
dGVkIGluIGEgZmV3IGNhc2VzIChsaWtlIHdpdGggbmVnYXRpdmUgbGV0dGVyLXNwYWNpbmcpLgor
ICAgICAgICByZXR1cm4gZGFtYWdlUmVjdC5tYXhZKCkgPiByZWN0LnkoKSAmJiBkYW1hZ2VSZWN0
LnkoKSA8IHJlY3QubWF4WSgpOworICAgIH07CisKKyAgICBhdXRvIHNob3VsZFBhaW50Qm94Rm9y
UGhhc2UgPSBbJl0oYXV0byYgYm94KSB7CisgICAgICAgIHN3aXRjaCAocGFpbnRQaGFzZSkgewor
ICAgICAgICBjYXNlIFBhaW50UGhhc2U6OkNoaWxkT3V0bGluZXM6IHJldHVybiBib3guaXNOb25S
b290SW5saW5lQm94KCk7CisgICAgICAgIGNhc2UgUGFpbnRQaGFzZTo6U2VsZk91dGxpbmU6IHJl
dHVybiBib3guaXNSb290SW5saW5lQm94KCk7CisgICAgICAgIGNhc2UgUGFpbnRQaGFzZTo6T3V0
bGluZTogcmV0dXJuIGJveC5pc0lubGluZUJveCgpOworICAgICAgICBkZWZhdWx0OiByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBMaXN0SGFzaFNldDxSZW5kZXJJbmxpbmUq
PiBvdXRsaW5lT2JqZWN0czsKKworICAgIGZvciAoYXV0byYgYm94IDogbV9pbmxpbmVDb250ZW50
LT5ib3hlc0ZvclJlY3QoZGFtYWdlUmVjdCkpIHsKKyAgICAgICAgaWYgKCFzaG91bGRQYWludEJv
eEZvclBoYXNlKGJveCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYm94
LmlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYm94
LmlzSW5saW5lQm94KCkpIHsKKyAgICAgICAgICAgIGlmICghaGFzRGFtYWdlKGJveCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFBhaW50SW5mbyBpbmxpbmVCb3hQ
YWludEluZm8ocGFpbnRJbmZvKTsKKyAgICAgICAgICAgIGlubGluZUJveFBhaW50SW5mby5waGFz
ZSA9IHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRPdXRsaW5lcyA/IFBhaW50UGhhc2U6
Ok91dGxpbmUgOiBwYWludFBoYXNlOworICAgICAgICAgICAgaW5saW5lQm94UGFpbnRJbmZvLm91
dGxpbmVPYmplY3RzID0gJm91dGxpbmVPYmplY3RzOworCisgICAgICAgICAgICBJbmxpbmVCb3hQ
YWludGVyIHBhaW50ZXIoKm1faW5saW5lQ29udGVudCwgYm94LCBpbmxpbmVCb3hQYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKKyAgICAgICAgICAgIHBhaW50ZXIucGFpbnQoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJveC50ZXh0KCkpIHsKKyAgICAg
ICAgICAgIGlmICghYm94LnRleHQoKS0+bGVuZ3RoKCkgfHwgIWhhc0RhbWFnZShib3gpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBUZXh0Qm94UGFpbnRlciBwYWlu
dGVyKCptX2lubGluZUNvbnRlbnQsIGJveCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAg
ICAgICAgICBwYWludGVyLnBhaW50KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChhdXRvJiByZW5kZXJlciA9IG1fYm94VHJlZS5yZW5kZXJlckZvckxh
eW91dEJveChib3gubGF5b3V0Qm94KCkpOyBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSAmJiByZW5k
ZXJlci5pc1JlcGxhY2VkT3JJbmxpbmVCbG9jaygpKSB7CisgICAgICAgICAgICBhdXRvJiByZW5k
ZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGlmICgh
cmVuZGVyQm94Lmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50
V2l0aGluUm9vdChyZW5kZXJCb3gpKQorICAgICAgICAgICAgICAgIHJlbmRlckJveC5wYWludEFz
SW5saW5lQmxvY2socGFpbnRJbmZvLCBmbGlwcGVkQ29udGVudE9mZnNldElmTmVlZGVkKGZsb3co
KSwgcmVuZGVyQm94LCBwYWludE9mZnNldCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
IChhdXRvKiByZW5kZXJJbmxpbmUgOiBvdXRsaW5lT2JqZWN0cykKKyAgICAgICAgcmVuZGVySW5s
aW5lLT5wYWludE91dGxpbmUocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Cit9CisKK3N0YXRpYyBM
YXlvdXRSZWN0IGZsaXBwZWRSZWN0Rm9yV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyQmxvY2tGbG93
JiByb290LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXV0byBmbGlwcGVkUmVjdCA9
IExheW91dFJlY3QgeyByZWN0IH07CisgICAgcm9vdC5mbGlwRm9yV3JpdGluZ01vZGUoZmxpcHBl
ZFJlY3QpOworICAgIHJldHVybiBmbGlwcGVkUmVjdDsKK30KKworYm9vbCBMaW5lTGF5b3V0Ojpo
aXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
Cit7CisgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9pbmxpbmVDb250ZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIGhpdFRlc3RCb3VuZGluZ0JveCA9IGxvY2F0aW9uSW5Db250
YWluZXIuYm91bmRpbmdCb3goKTsKKyAgICBoaXRUZXN0Qm91bmRpbmdCb3gubW92ZUJ5KC1hY2N1
bXVsYXRlZE9mZnNldCk7CisgICAgYXV0byBib3hSYW5nZSA9IG1faW5saW5lQ29udGVudC0+Ym94
ZXNGb3JSZWN0KGhpdFRlc3RCb3VuZGluZ0JveCk7CisKKyAgICBmb3IgKGF1dG8mIGJveCA6IG1h
a2VSZXZlcnNlZFJhbmdlKGJveFJhbmdlKSkgeworICAgICAgICBhdXRvJiByZW5kZXJlciA9IG1f
Ym94VHJlZS5yZW5kZXJlckZvckxheW91dEJveChib3gubGF5b3V0Qm94KCkpOworCisgICAgICAg
IGlmICghYm94LmlzUm9vdElubGluZUJveCgpICYmIGlzPFJlbmRlckxheWVyTW9kZWxPYmplY3Q+
KHJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlciku
aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmIChib3guaXNBdG9taWNJbmxpbmVMZXZlbEJveCgpKSB7CisgICAgICAgICAgICBpZiAocmVu
ZGVyZXIuaGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGZsaXBw
ZWRDb250ZW50T2Zmc2V0SWZOZWVkZWQoZmxvdygpLCBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRl
cmVyKSwgYWNjdW11bGF0ZWRPZmZzZXQpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBib3hSZWN0
ID0gZmxpcHBlZFJlY3RGb3JXcml0aW5nTW9kZShmbG93KCksIGJveC52aXN1YWxSZWN0SWdub3Jp
bmdCbG9ja0RpcmVjdGlvbigpKTsKKyAgICAgICAgYm94UmVjdC5tb3ZlQnkoYWNjdW11bGF0ZWRP
ZmZzZXQpOworCisgICAgICAgIGlmICghbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJv
eFJlY3QpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byYgZWxlbWVudFJl
bmRlcmVyID0gaXM8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpID8gZG93bmNhc3Q8UmVuZGVyRWxl
bWVudD4ocmVuZGVyZXIpIDogKnJlbmRlcmVyLnBhcmVudCgpOworICAgICAgICBpZiAoIWVsZW1l
bnRSZW5kZXJlci52aXNpYmxlVG9IaXRUZXN0aW5nKHJlcXVlc3QpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIAorICAgICAgICByZW5kZXJlci51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgZmxvdygpLmZsaXBGb3JXcml0aW5nTW9kZShsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50
KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CisgICAgICAgIGlmIChyZXN1
bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlci5ub2RlRm9ySGl0VGVzdCgp
LCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3hSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jl
c3M6OlN0b3ApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgTGluZUxheW91dDo6cmVsZWFzZUNhY2hlcyhSZW5kZXJWaWV3JiB2
aWV3KQoreworICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogZGVzY2VuZGFudHNPZlR5cGU8UmVu
ZGVyQmxvY2tGbG93Pih2aWV3KSkgeworICAgICAgICBpZiAoYXV0byogbGluZUxheW91dCA9IHJl
bmRlcmVyLm1vZGVybkxpbmVMYXlvdXQoKSkKKyAgICAgICAgICAgIGxpbmVMYXlvdXQtPnJlbGVh
c2VDYWNoZXMoKTsKKyAgICB9Cit9CisKK3ZvaWQgTGluZUxheW91dDo6cmVsZWFzZUNhY2hlcygp
Cit7CisgICAgbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGUuaW5saW5lSXRlbXMoKS5jbGVhcigpOwor
ICAgIGlmIChtX2lubGluZUNvbnRlbnQpCisgICAgICAgIG1faW5saW5lQ29udGVudC0+cmVsZWFz
ZUNhY2hlcygpOworfQorCit2b2lkIExpbmVMYXlvdXQ6OmNsZWFySW5saW5lQ29udGVudCgpCit7
CisgICAgaWYgKCFtX2lubGluZUNvbnRlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lubGlu
ZUNvbnRlbnQtPmNsZWFyQW5kRGV0YWNoKCk7CisgICAgbV9pbmxpbmVDb250ZW50ID0gbnVsbHB0
cjsKK30KKworTGF5b3V0OjpJbmxpbmVEYW1hZ2UmIExpbmVMYXlvdXQ6OmVuc3VyZUxpbmVEYW1h
Z2UoKQoreworICAgIGlmICghbV9saW5lRGFtYWdlKQorICAgICAgICBtX2xpbmVEYW1hZ2UgPSBt
YWtlVW5pcXVlPExheW91dDo6SW5saW5lRGFtYWdlPigpOworICAgIHJldHVybiAqbV9saW5lRGFt
YWdlOworfQorCisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQordm9pZCBMaW5lTGF5b3V0Ojpv
dXRwdXRMaW5lVHJlZShXVEY6OlRleHRTdHJlYW0mIHN0cmVhbSwgc2l6ZV90IGRlcHRoKSBjb25z
dAoreworICAgIHNob3dJbmxpbmVDb250ZW50KHN0cmVhbSwgKm1faW5saW5lQ29udGVudCwgZGVw
dGgpOworfQorI2VuZGlmCisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uTGluZUxheW91
dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTE0MTljZjI2ZTViODFkYjc3MjZmNDJj
MmMwY2EwNjJhYWZkMjg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaApAQCAtMCww
ICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJJbmxpbmVJdGVyYXRvcklubGluZUJveC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGlu
ZUJveC5oIgorI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yVGV4dEJveC5oIgorI2luY2x1ZGUgIkxh
eW91dEludGVncmF0aW9uQm94VHJlZS5oIgorI2luY2x1ZGUgIkxheW91dFBvaW50LmgiCisjaW5j
bHVkZSAiTGF5b3V0U3RhdGUuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3RFbnVtcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OworY2xhc3MgSGl0VGVzdExvY2F0aW9uOworY2xhc3MgSGl0VGVzdFJl
cXVlc3Q7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3MgUmVuZGVyQmxvY2tGbG93OworY2xh
c3MgUmVuZGVyQm94OworY2xhc3MgUmVuZGVyQm94TW9kZWxPYmplY3Q7CitjbGFzcyBSZW5kZXJJ
bmxpbmU7CitjbGFzcyBSZW5kZXJMaW5lQnJlYWs7CitjbGFzcyBSZW5kZXJMaXN0SXRlbTsKK2Ns
YXNzIFJlbmRlckxpc3RNYXJrZXI7CitjbGFzcyBSZW5kZXJUYWJsZTsKK3N0cnVjdCBQYWludElu
Zm87CisKK25hbWVzcGFjZSBMYXlvdXQgeworY2xhc3MgSW5saW5lRGFtYWdlOworfQorCituYW1l
c3BhY2UgTGF5b3V0SW50ZWdyYXRpb24geworCitzdHJ1Y3QgSW5saW5lQ29udGVudDsKKworY2xh
c3MgTGluZUxheW91dCA6IHB1YmxpYyBDYW5NYWtlQ2hlY2tlZFB0ciB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGluZUxheW91dChSZW5kZXJCbG9ja0Zsb3cm
KTsKKyAgICB+TGluZUxheW91dCgpOworCisgICAgc3RhdGljIFJlbmRlckJsb2NrRmxvdyogYmxv
Y2tDb250YWluZXIoUmVuZGVyT2JqZWN0Jik7CisgICAgc3RhdGljIExpbmVMYXlvdXQqIGNvbnRh
aW5pbmcoUmVuZGVyT2JqZWN0Jik7CisgICAgc3RhdGljIGNvbnN0IExpbmVMYXlvdXQqIGNvbnRh
aW5pbmcoY29uc3QgUmVuZGVyT2JqZWN0Jik7CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWQo
KTsKKyAgICBzdGF0aWMgYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7Cisg
ICAgc3RhdGljIGJvb2wgY2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmLCBTdHlsZURpZmZlcmVuY2UpOworICAgIHN0YXRpYyBib29sIGNhblVzZUZvckFmdGVy
SW5saW5lQm94U3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVySW5saW5lJiwgU3R5bGVEaWZmZXJlbmNl
KTsKKworICAgIGJvb2wgc2hvdWxkU3dpdGNoVG9MZWdhY3lPbkludmFsaWRhdGlvbigpIGNvbnN0
OworCisgICAgdm9pZCB1cGRhdGVGb3JtYXR0aW5nUm9vdEdlb21ldHJ5QW5kSW52YWxpZGF0ZSgp
OworICAgIHZvaWQgdXBkYXRlUmVwbGFjZWREaW1lbnNpb25zKGNvbnN0IFJlbmRlckJveCYpOwor
ICAgIHZvaWQgdXBkYXRlSW5saW5lQmxvY2tEaW1lbnNpb25zKGNvbnN0IFJlbmRlckJsb2NrJik7
CisgICAgdm9pZCB1cGRhdGVMaW5lQnJlYWtCb3hEaW1lbnNpb25zKGNvbnN0IFJlbmRlckxpbmVC
cmVhayYpOworICAgIHZvaWQgdXBkYXRlSW5saW5lQm94RGltZW5zaW9ucyhjb25zdCBSZW5kZXJJ
bmxpbmUmKTsKKyAgICB2b2lkIHVwZGF0ZUlubGluZVRhYmxlRGltZW5zaW9ucyhjb25zdCBSZW5k
ZXJUYWJsZSYpOworICAgIHZvaWQgdXBkYXRlTGlzdEl0ZW1EaW1lbnNpb25zKGNvbnN0IFJlbmRl
ckxpc3RJdGVtJik7CisgICAgdm9pZCB1cGRhdGVMaXN0TWFya2VyRGltZW5zaW9ucyhjb25zdCBS
ZW5kZXJMaXN0TWFya2VyJik7CisgICAgdm9pZCB1cGRhdGVTdHlsZShjb25zdCBSZW5kZXJCb3hN
b2RlbE9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJiBvbGRTdHlsZSk7CisKKyAgICBzdGQ6OnBh
aXI8TGF5b3V0VW5pdCwgTGF5b3V0VW5pdD4gY29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMoKTsKKworICAgIHZvaWQgbGF5b3V0KCk7CisgICAgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOworICAgIGJvb2wgaGl0VGVzdChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOworICAg
IHZvaWQgYWRqdXN0Rm9yUGFnaW5hdGlvbigpOworCisgICAgdm9pZCBjb2xsZWN0T3ZlcmZsb3co
KTsKKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3hSZWN0Rm9yKGNvbnN0
IFJlbmRlcklubGluZSYpIGNvbnN0OworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGNvbGxlY3RJbmxp
bmVCb3hSZWN0cyhjb25zdCBSZW5kZXJJbmxpbmUmKSBjb25zdDsKKworICAgIGJvb2wgaXNQYWdp
bmF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGFnaW5hdGVkQ29udGVudDsgfQorICAgIExheW91
dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKKyAgICBzaXplX3QgbGluZUNvdW50
KCkgY29uc3Q7CisgICAgYm9vbCBoYXNWaXN1YWxPdmVyZmxvdygpIGNvbnN0OworICAgIExheW91
dFVuaXQgZmlyc3RMaW5lUGh5c2ljYWxCYXNlbGluZSgpIGNvbnN0OworICAgIExheW91dFVuaXQg
bGFzdExpbmVMb2dpY2FsQmFzZWxpbmUoKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGZpcnN0SW5s
aW5lQm94UmVjdChjb25zdCBSZW5kZXJJbmxpbmUmKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGVu
Y2xvc2luZ0JvcmRlckJveFJlY3RGb3IoY29uc3QgUmVuZGVySW5saW5lJikgY29uc3Q7CisKKyAg
ICBJbmxpbmVJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yIHRleHRCb3hlc0Zvcihjb25zdCBSZW5k
ZXJUZXh0JikgY29uc3Q7CisgICAgSW5saW5lSXRlcmF0b3I6OkxlYWZCb3hJdGVyYXRvciBib3hG
b3IoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0OworICAgIElubGluZUl0ZXJhdG9yOjpJbmxp
bmVCb3hJdGVyYXRvciBmaXJzdElubGluZUJveEZvcihjb25zdCBSZW5kZXJJbmxpbmUmKSBjb25z
dDsKKyAgICBJbmxpbmVJdGVyYXRvcjo6SW5saW5lQm94SXRlcmF0b3IgZmlyc3RSb290SW5saW5l
Qm94KCkgY29uc3Q7CisgICAgSW5saW5lSXRlcmF0b3I6OkxpbmVCb3hJdGVyYXRvciBmaXJzdExp
bmVCb3goKSBjb25zdDsKKyAgICBJbmxpbmVJdGVyYXRvcjo6TGluZUJveEl0ZXJhdG9yIGxhc3RM
aW5lQm94KCkgY29uc3Q7CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyRm9yTGF5
b3V0Qm94KGNvbnN0IExheW91dDo6Qm94JikgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbG93KCkgY29uc3QgeyByZXR1cm4gbV9ib3hUcmVlLmZsb3coKTsgfQorICAgIFJlbmRl
ckJsb2NrRmxvdyYgZmxvdygpIHsgcmV0dXJuIG1fYm94VHJlZS5mbG93KCk7IH0KKworICAgIHN0
YXRpYyB2b2lkIHJlbGVhc2VDYWNoZXMoUmVuZGVyVmlldyYpOworCisjaWYgRU5BQkxFKFRSRUVf
REVCVUdHSU5HKQorICAgIHZvaWQgb3V0cHV0TGluZVRyZWUoV1RGOjpUZXh0U3RyZWFtJiwgc2l6
ZV90IGRlcHRoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgcHJlcGFyZUxh
eW91dFN0YXRlKCk7CisgICAgdm9pZCBwcmVwYXJlRmxvYXRpbmdTdGF0ZSgpOworICAgIHZvaWQg
Y29uc3RydWN0Q29udGVudCgpOworICAgIElubGluZUNvbnRlbnQmIGVuc3VyZUlubGluZUNvbnRl
bnQoKTsKKyAgICB2b2lkIHVwZGF0ZUxheW91dEJveERpbWVuc2lvbnMoY29uc3QgUmVuZGVyQm94
Jik7CisKKyAgICBMYXlvdXQ6OklubGluZURhbWFnZSYgZW5zdXJlTGluZURhbWFnZSgpOworCisg
ICAgY29uc3QgTGF5b3V0OjpDb250YWluZXJCb3gmIHJvb3RMYXlvdXRCb3goKSBjb25zdDsKKyAg
ICBMYXlvdXQ6OkNvbnRhaW5lckJveCYgcm9vdExheW91dEJveCgpOworICAgIHZvaWQgY2xlYXJJ
bmxpbmVDb250ZW50KCk7CisgICAgdm9pZCByZWxlYXNlQ2FjaGVzKCk7CisKKyAgICBCb3hUcmVl
IG1fYm94VHJlZTsKKyAgICBMYXlvdXQ6OkxheW91dFN0YXRlIG1fbGF5b3V0U3RhdGU7CisgICAg
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIG1faW5saW5lRm9ybWF0dGluZ1N0YXRlOwor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIExheW91dFN0YXRlLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxMYXlvdXQ6OklubGluZURhbWFnZT4gbV9saW5lRGFtYWdlOworICAgIFJl
ZlB0cjxJbmxpbmVDb250ZW50PiBtX2lubGluZUNvbnRlbnQ7CisgICAgYm9vbCBtX2lzUGFnaW5h
dGVkQ29udGVudCB7IGZhbHNlIH07Cit9OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGluZS9MYXlvdXRJbnRlZ3JhdGlv
blBhZ2luYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGlu
ZS9MYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0MDVmMDcxNTA4
ZDEyN2ZkZWUwOTExNzQyMDcyZWNkMGYxZDBjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uUGFnaW5h
dGlvbi5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblBhZ2luYXRpb24uaCIKKworI2lm
IEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIExheW91dEludGVncmF0aW9uIHsKKworc3RydWN0IFN0cnV0IHsKKyAgICB1
bnNpZ25lZCBsaW5lQnJlYWs7CisgICAgZmxvYXQgb2Zmc2V0OworfTsKKworc3RydWN0IFBhZ2lu
YXRlZExpbmUgeworICAgIExheW91dFVuaXQgdG9wOworICAgIExheW91dFVuaXQgaGVpZ2h0Owor
fTsKK3VzaW5nIFBhZ2luYXRlZExpbmVzID0gVmVjdG9yPFBhZ2luYXRlZExpbmUsIDIwPjsKKwor
c3RhdGljIFBhZ2luYXRlZExpbmUgY29tcHV0ZUxpbmVUb3BBbmRCb3R0b21XaXRoT3ZlcmZsb3co
Y29uc3QgUmVuZGVyQmxvY2tGbG93JiwgSW5saW5lQ29udGVudDo6TGluZXMmIGxpbmVzLCB1bnNp
Z25lZCBsaW5lSW5kZXgsIFZlY3RvcjxTdHJ1dD4mIHN0cnV0cykKK3sKKyAgICBMYXlvdXRVbml0
IG9mZnNldCA9IDA7CisgICAgZm9yIChhdXRvJiBzdHJ1dCA6IHN0cnV0cykgeworICAgICAgICBp
ZiAoc3RydXQubGluZUJyZWFrID4gbGluZUluZGV4KQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIG9mZnNldCArPSBzdHJ1dC5vZmZzZXQ7CisgICAgfQorICAgIGF1dG8gb3ZlcmZsb3dSZWN0
ID0gTGF5b3V0UmVjdChsaW5lc1tsaW5lSW5kZXhdLmlua092ZXJmbG93KCkpOworICAgIHJldHVy
biB7IG92ZXJmbG93UmVjdC55KCkgKyBvZmZzZXQsIG92ZXJmbG93UmVjdC5oZWlnaHQoKSB9Owor
fQorCitzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxpbmVCcmVha0luZGV4KHVuc2lnbmVkIGJyZWFr
Q2FuZGlkYXRlLCB1bnNpZ25lZCBsaW5lQ291bnQsIGludCBvcnBoYW5zTmVlZGVkLCBpbnQgd2lk
b3dzTmVlZGVkLAorICAgIGNvbnN0IFZlY3RvcjxTdHJ1dD4mIHN0cnV0cykKK3sKKyAgICAvLyBG
aXJzdCBsaW5lIGRvZXMgbm90IGZpdCB0aGUgY3VycmVudCBwYWdlLgorICAgIGlmICghYnJlYWtD
YW5kaWRhdGUpCisgICAgICAgIHJldHVybiBicmVha0NhbmRpZGF0ZTsKKyAgICAKKyAgICBpbnQg
d2lkb3dzT25UaGVOZXh0UGFnZSA9IGxpbmVDb3VudCAtIGJyZWFrQ2FuZGlkYXRlOworICAgIGlm
ICh3aWRvd3NOZWVkZWQgPD0gd2lkb3dzT25UaGVOZXh0UGFnZSkKKyAgICAgICAgcmV0dXJuIGJy
ZWFrQ2FuZGlkYXRlOworICAgIC8vIE9ubHkgYnJlYWsgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgd2l0
aCB3aWRvd3MuCisgICAgYXV0byBsaW5lQnJlYWsgPSBzdGQ6Om1heDxpbnQ+KGxpbmVDb3VudCAt
IHdpZG93c05lZWRlZCwgMSk7CisgICAgaWYgKG9ycGhhbnNOZWVkZWQgPiBsaW5lQnJlYWspCisg
ICAgICAgIHJldHVybiBicmVha0NhbmRpZGF0ZTsKKyAgICAvLyBCcmVhayBvbiBjdXJyZW50IHBh
Z2Ugb25seS4KKyAgICBpZiAoc3RydXRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGxpbmVC
cmVhazsKKyAgICBBU1NFUlQoc3RydXRzLmxhc3QoKS5saW5lQnJlYWsgKyAxIDwgbGluZUNvdW50
KTsKKyAgICByZXR1cm4gc3RkOjptYXg8dW5zaWduZWQ+KHN0cnV0cy5sYXN0KCkubGluZUJyZWFr
ICsgMSwgbGluZUJyZWFrKTsKK30KKworc3RhdGljIExheW91dFVuaXQgY29tcHV0ZU9mZnNldEFm
dGVyTGluZUJyZWFrKExheW91dFVuaXQgbGluZUJyZWFrUG9zaXRpb24sIGJvb2wgaXNGaXJzdExp
bmUsIGJvb2wgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBm
bG93KQoreworICAgIC8vIE5vIG9mZnNldCBmb3IgdG9wIG9mIHRoZSBwYWdlIGxpbmVzIHVubGVz
cyB3aWRvd3MgcHVzaGVkIHRoZSBsaW5lIGJyZWFrLgorICAgIExheW91dFVuaXQgb2Zmc2V0ID0g
aXNGaXJzdExpbmUgPyBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSA6IDBfbHU7CisgICAg
aWYgKGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UpCisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAg
cmV0dXJuIG9mZnNldCArIGZsb3cucGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQo
bGluZUJyZWFrUG9zaXRpb24sIFJlbmRlckJsb2NrRmxvdzo6RXhjbHVkZVBhZ2VCb3VuZGFyeSk7
Cit9CisKK3N0YXRpYyB2b2lkIHNldFBhZ2VCcmVha0ZvckxpbmUodW5zaWduZWQgbGluZUJyZWFr
SW5kZXgsIFBhZ2luYXRlZExpbmVzJiBsaW5lcywgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBWZWN0
b3I8U3RydXQ+JiBzdHJ1dHMsCisgICAgYm9vbCBhdFRoZVRvcE9mQ29sdW1uT3JQYWdlLCBib29s
IGxpbmVEb2VzTm90Rml0KQoreworICAgIGF1dG8gbGluZSA9IGxpbmVzLmF0KGxpbmVCcmVha0lu
ZGV4KTsKKyAgICBhdXRvIHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPSBmbG93LnBhZ2VSZW1haW5p
bmdMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KGxpbmUudG9wLCBSZW5kZXJCbG9ja0Zsb3c6OkV4Y2x1
ZGVQYWdlQm91bmRhcnkpOworICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1
dG8gZmlyc3RMaW5lRG9lc05vdEZpdCA9ICFsaW5lQnJlYWtJbmRleCAmJiBsaW5lLmhlaWdodCA8
IGZsb3cucGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3ApOworICAgIGF1dG8gbW92
ZU9ycGhhblRvTmV4dENvbHVtbiA9IGxpbmVEb2VzTm90Rml0ICYmICFzdHlsZS5oYXNBdXRvT3Jw
aGFucygpICYmIHN0eWxlLm9ycGhhbnMoKSA+IChzaG9ydClsaW5lQnJlYWtJbmRleDsKKyAgICBp
ZiAoZmlyc3RMaW5lRG9lc05vdEZpdCB8fCBtb3ZlT3JwaGFuVG9OZXh0Q29sdW1uKSB7CisgICAg
ICAgIGF1dG8gZmlyc3RMaW5lID0gbGluZXMuZmlyc3QoKTsKKyAgICAgICAgYXV0byBmaXJzdExp
bmVVcHBlck92ZXJoYW5nID0gc3RkOjptYXgoTGF5b3V0VW5pdCgtZmlyc3RMaW5lLnRvcCksIDBf
bHUpOworICAgICAgICBmbG93LnNldFBhZ2luYXRpb25TdHJ1dChsaW5lLnRvcCArIHJlbWFpbmlu
Z0xvZ2ljYWxIZWlnaHQgKyBmaXJzdExpbmVVcHBlck92ZXJoYW5nKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSkKKyAgICAgICAgZmxvdy5z
ZXRQYWdlQnJlYWsobGluZS50b3AsIGxpbmUuaGVpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIGZs
b3cuc2V0UGFnZUJyZWFrKGxpbmUudG9wLCBsaW5lLmhlaWdodCAtIHJlbWFpbmluZ0xvZ2ljYWxI
ZWlnaHQpOworICAgIHN0cnV0cy5hcHBlbmQoeyBsaW5lQnJlYWtJbmRleCwgY29tcHV0ZU9mZnNl
dEFmdGVyTGluZUJyZWFrKGxpbmVzW2xpbmVCcmVha0luZGV4XS50b3AsICFsaW5lQnJlYWtJbmRl
eCwgYXRUaGVUb3BPZkNvbHVtbk9yUGFnZSwgZmxvdykgfSk7Cit9CisKK3N0YXRpYyB2b2lkIHVw
ZGF0ZU1pbmltdW1QYWdlSGVpZ2h0KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgSW5saW5l
Q29udGVudCYgaW5saW5lQ29udGVudCwgdW5zaWduZWQgbGluZUNvdW50KQoreworICAgIGF1dG8m
IHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8gd2lkb3dzID0gc3R5bGUuaGFzQXV0b1dp
ZG93cygpID8gMSA6IHN0ZDo6bWF4PGludD4oc3R5bGUud2lkb3dzKCksIDEpOworICAgIGF1dG8g
b3JwaGFucyA9IHN0eWxlLmhhc0F1dG9PcnBoYW5zKCkgPyAxIDogc3RkOjptYXg8aW50PihzdHls
ZS5vcnBoYW5zKCksIDEpOworICAgIGF1dG8gbWluaW11bUxpbmVDb3VudCA9IHN0ZDo6bWluPHVu
c2lnbmVkPihzdGQ6Om1heCh3aWRvd3MsIG9ycGhhbnMpLCBsaW5lQ291bnQpOworICAgIGZsb3cu
dXBkYXRlTWluaW11bVBhZ2VIZWlnaHQoMCwgTGF5b3V0VW5pdChpbmxpbmVDb250ZW50LmxpbmVz
W21pbmltdW1MaW5lQ291bnQgLSAxXS5saW5lQm94Qm90dG9tKCkpKTsKK30KKworc3RhdGljIFJl
ZjxJbmxpbmVDb250ZW50PiBtYWtlQWRqdXN0ZWRDb250ZW50KGNvbnN0IElubGluZUNvbnRlbnQm
IGlubGluZUNvbnRlbnQsIFZlY3RvcjxmbG9hdD4gYWRqdXN0bWVudHMpCit7CisgICAgYXV0byBt
b3ZlVmVydGljYWxseSA9IFtdKEZsb2F0UmVjdCByZWN0LCBmbG9hdCBvZmZzZXQpIHsKKyAgICAg
ICAgcmVjdC5tb3ZlKEZsb2F0U2l6ZSgwLCBvZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIHJlY3Q7
CisgICAgfTsKKworICAgIGF1dG8gYWRqdXN0ZWRMaW5lID0gWyZdKGNvbnN0IExpbmUmIGxpbmUs
IGZsb2F0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBMaW5lIHsKKyAgICAgICAgICAg
IGxpbmUuZmlyc3RCb3hJbmRleCgpLAorICAgICAgICAgICAgbGluZS5ib3hDb3VudCgpLAorICAg
ICAgICAgICAgbW92ZVZlcnRpY2FsbHkoeyBGbG9hdFBvaW50IHsgbGluZS5saW5lQm94TGVmdCgp
LCBsaW5lLmxpbmVCb3hUb3AoKSB9LCBGbG9hdFBvaW50IHsgbGluZS5saW5lQm94UmlnaHQoKSwg
bGluZS5saW5lQm94Qm90dG9tKCkgfSB9LCBvZmZzZXQpLAorICAgICAgICAgICAgbGluZS5lbmNs
b3NpbmdDb250ZW50VG9wKCkgKyBvZmZzZXQsCisgICAgICAgICAgICBsaW5lLmVuY2xvc2luZ0Nv
bnRlbnRCb3R0b20oKSArIG9mZnNldCwKKyAgICAgICAgICAgIG1vdmVWZXJ0aWNhbGx5KGxpbmUu
c2Nyb2xsYWJsZU92ZXJmbG93KCksIG9mZnNldCksCisgICAgICAgICAgICBtb3ZlVmVydGljYWxs
eShsaW5lLmlua092ZXJmbG93KCksIG9mZnNldCksCisgICAgICAgICAgICBsaW5lLmJhc2VsaW5l
KCksCisgICAgICAgICAgICBsaW5lLmJhc2VsaW5lVHlwZSgpLAorICAgICAgICAgICAgbGluZS5j
b250ZW50TG9naWNhbE9mZnNldCgpLAorICAgICAgICAgICAgbGluZS5jb250ZW50TG9naWNhbFdp
ZHRoKCksCisgICAgICAgICAgICBsaW5lLmlzSG9yaXpvbnRhbCgpCisgICAgICAgIH07CisgICAg
fTsKKworICAgIGF1dG8gYWRqdXN0ZWRCb3ggPSBbJl0oY29uc3QgSW5saW5lRGlzcGxheTo6Qm94
JiBib3gsIGZsb2F0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGF1dG8gYWRqdXN0ZWRCb3ggPSBi
b3g7CisgICAgICAgIGFkanVzdGVkQm94Lm1vdmVWZXJ0aWNhbGx5KG9mZnNldCk7CisgICAgICAg
IHJldHVybiBhZGp1c3RlZEJveDsKKyAgICB9OworCisgICAgYXV0byBhZGp1c3RlZENvbnRlbnQg
PSBJbmxpbmVDb250ZW50OjpjcmVhdGUoaW5saW5lQ29udGVudC5saW5lTGF5b3V0KCkpOworCisg
ICAgZm9yIChzaXplX3QgbGluZUluZGV4ID0gMDsgbGluZUluZGV4IDwgaW5saW5lQ29udGVudC5s
aW5lcy5zaXplKCk7ICsrbGluZUluZGV4KQorICAgICAgICBhZGp1c3RlZENvbnRlbnQtPmxpbmVz
LmFwcGVuZChhZGp1c3RlZExpbmUoaW5saW5lQ29udGVudC5saW5lc1tsaW5lSW5kZXhdLCBhZGp1
c3RtZW50c1tsaW5lSW5kZXhdKSk7CisKKyAgICBmb3IgKGF1dG8mIGJveCA6IGlubGluZUNvbnRl
bnQuYm94ZXMpCisgICAgICAgIGFkanVzdGVkQ29udGVudC0+Ym94ZXMuYXBwZW5kKGFkanVzdGVk
Qm94KGJveCwgYWRqdXN0bWVudHNbYm94LmxpbmVJbmRleCgpXSkpOworCisgICAgcmV0dXJuIGFk
anVzdGVkQ29udGVudDsKK30KKworUmVmPElubGluZUNvbnRlbnQ+IGFkanVzdExpbmVQb3NpdGlv
bnNGb3JQYWdpbmF0aW9uKElubGluZUNvbnRlbnQmIGlubGluZUNvbnRlbnQsIFJlbmRlckJsb2Nr
RmxvdyYgZmxvdykKK3sKKyAgICBWZWN0b3I8U3RydXQ+IHN0cnV0czsKKyAgICBhdXRvIGxpbmVD
b3VudCA9IGlubGluZUNvbnRlbnQubGluZXMuc2l6ZSgpOworICAgIHVwZGF0ZU1pbmltdW1QYWdl
SGVpZ2h0KGZsb3csIGlubGluZUNvbnRlbnQsIGxpbmVDb3VudCk7CisgICAgLy8gRmlyc3QgcGFz
cyB3aXRoIG5vIHBhZ2luYXRpb24gb2Zmc2V0PworICAgIGlmICghZmxvdy5wYWdlTG9naWNhbEhl
aWdodEZvck9mZnNldCgwKSkKKyAgICAgICAgcmV0dXJuIGlubGluZUNvbnRlbnQ7CisKKyAgICBh
dXRvIHdpZG93cyA9IGZsb3cuc3R5bGUoKS5oYXNBdXRvV2lkb3dzKCkgPyAxIDogc3RkOjptYXg8
aW50PihmbG93LnN0eWxlKCkud2lkb3dzKCksIDEpOworICAgIGF1dG8gb3JwaGFucyA9IGZsb3cu
c3R5bGUoKS5oYXNBdXRvT3JwaGFucygpID8gMSA6IHN0ZDo6bWF4PGludD4oZmxvdy5zdHlsZSgp
Lm9ycGhhbnMoKSwgMSk7CisgICAgUGFnaW5hdGVkTGluZXMgbGluZXM7CisgICAgZm9yICh1bnNp
Z25lZCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBsaW5lQ291bnQ7ICsrbGluZUluZGV4KSB7
CisgICAgICAgIGF1dG8gbGluZSA9IGNvbXB1dGVMaW5lVG9wQW5kQm90dG9tV2l0aE92ZXJmbG93
KGZsb3csIGlubGluZUNvbnRlbnQubGluZXMsIGxpbmVJbmRleCwgc3RydXRzKTsKKyAgICAgICAg
bGluZXMuYXBwZW5kKGxpbmUpOworICAgICAgICBhdXRvIHJlbWFpbmluZ0hlaWdodCA9IGZsb3cu
cGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3AsIFJlbmRlckJsb2Nr
Rmxvdzo6RXhjbHVkZVBhZ2VCb3VuZGFyeSk7CisgICAgICAgIGF1dG8gYXRUaGVUb3BPZkNvbHVt
bk9yUGFnZSA9IGZsb3cucGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobGluZS50b3ApID09IHJl
bWFpbmluZ0hlaWdodDsKKyAgICAgICAgYXV0byBsaW5lRG9lc05vdEZpdCA9IGxpbmUuaGVpZ2h0
ID4gcmVtYWluaW5nSGVpZ2h0OworICAgICAgICBpZiAobGluZURvZXNOb3RGaXQgfHwgKGF0VGhl
VG9wT2ZDb2x1bW5PclBhZ2UgJiYgbGluZUluZGV4KSkgeworICAgICAgICAgICAgYXV0byBsaW5l
QnJlYWtJbmRleCA9IGNvbXB1dGVMaW5lQnJlYWtJbmRleChsaW5lSW5kZXgsIGxpbmVDb3VudCwg
b3JwaGFucywgd2lkb3dzLCBzdHJ1dHMpOworICAgICAgICAgICAgLy8gQXJlIHdlIHN0aWxsIGF0
IHRoZSB0b3Agb2YgdGhlIGNvbHVtbi9wYWdlPworICAgICAgICAgICAgYXRUaGVUb3BPZkNvbHVt
bk9yUGFnZSA9IGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UgPyBsaW5lSW5kZXggPT0gbGluZUJyZWFr
SW5kZXggOiBmYWxzZTsKKyAgICAgICAgICAgIHNldFBhZ2VCcmVha0ZvckxpbmUobGluZUJyZWFr
SW5kZXgsIGxpbmVzLCBmbG93LCBzdHJ1dHMsIGF0VGhlVG9wT2ZDb2x1bW5PclBhZ2UsIGxpbmVE
b2VzTm90Rml0KTsKKyAgICAgICAgICAgIC8vIFJlY29tcHV0ZSBsaW5lIHBvc2l0aW9ucyB0aGF0
IHdlIGFscmVhZHkgdmlzaXRlZCBidXQgd2lkb3cgYnJlYWsgcHVzaGVkIHRoZW0gdG8gYSBuZXcg
cGFnZS4KKyAgICAgICAgICAgIGZvciAoYXV0byBpID0gbGluZUJyZWFrSW5kZXg7IGkgPCBsaW5l
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hdChpKSA9IGNvbXB1dGVMaW5l
VG9wQW5kQm90dG9tV2l0aE92ZXJmbG93KGZsb3csIGlubGluZUNvbnRlbnQubGluZXMsIGksIHN0
cnV0cyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RydXRzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGlubGluZUNvbnRlbnQ7CisKKyAgICBhdXRvIGFkanVzdG1lbnRzID0gVmVj
dG9yPGZsb2F0PihsaW5lQ291bnQsIDApOworICAgIGZvciAoYXV0byYgc3RydXQgOiBzdHJ1dHMp
IHsKKyAgICAgICAgZm9yIChhdXRvIGxpbmVJbmRleCA9IHN0cnV0LmxpbmVCcmVhazsgbGluZUlu
ZGV4IDwgbGluZUNvdW50OyArK2xpbmVJbmRleCkKKyAgICAgICAgICAgIGFkanVzdG1lbnRzW2xp
bmVJbmRleF0gKz0gc3RydXQub2Zmc2V0OworICAgIH0KKworICAgIHJldHVybiBtYWtlQWRqdXN0
ZWRDb250ZW50KGlubGluZUNvbnRlbnQsIGFkanVzdG1lbnRzKTsKK30KKworfQorfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUv
TGF5b3V0SW50ZWdyYXRpb25QYWdpbmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50
ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVncmF0aW9uUGFnaW5hdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgzYzJjZjNhZDQ5MjhiNWI2YTJlMGZjMzQwY2FmZjA5YTNhOTU3MWIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vaW5saW5lL0xheW91dEludGVn
cmF0aW9uUGFnaW5hdGlvbi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVk
ZSAiTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVuZGVyQmxvY2tGbG93OworCituYW1lc3BhY2UgTGF5b3V0SW50ZWdyYXRp
b24geworICAgIAorUmVmPElubGluZUNvbnRlbnQ+IGFkanVzdExpbmVQb3NpdGlvbnNGb3JQYWdp
bmF0aW9uKElubGluZUNvbnRlbnQmLCBSZW5kZXJCbG9ja0Zsb3cmKTsKKworfQorfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9pbmxpbmUv
TGluZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL2lubGlu
ZS9MaW5lU2VsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZmNjk5ZTFmNjdjOWU3ODdlYTNjMGI5YTJj
ZDcyOTkwNWI0YWE4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9pbmxpbmUvTGluZVNlbGVjdGlvbi5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIklubGluZUl0ZXJhdG9yTGluZUJveC5o
IgorI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIExpbmVTZWxlY3Rpb24geworcHVibGljOgorICAgIHN0YXRpYyBmbG9hdCBsb2dpY2Fs
VG9wKGNvbnN0IElubGluZUl0ZXJhdG9yOjpMaW5lQm94JiBsaW5lQm94KSB7IHJldHVybiBsaW5l
Qm94LmNvbnRlbnRMb2dpY2FsVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdMaW5lQm94KCk7IH0KKyAg
ICBzdGF0aWMgZmxvYXQgbG9naWNhbEJvdHRvbShjb25zdCBJbmxpbmVJdGVyYXRvcjo6TGluZUJv
eCYgbGluZUJveCkgeyByZXR1cm4gbGluZUJveC5jb250ZW50TG9naWNhbEJvdHRvbUFkanVzdGVk
Rm9yRm9sbG93aW5nTGluZUJveCgpOyB9CisKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGxvZ2ljYWxS
ZWN0KGNvbnN0IElubGluZUl0ZXJhdG9yOjpMaW5lQm94JiBsaW5lQm94KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHsgRmxvYXRQb2ludCB7IGxpbmVCb3guY29udGVudExvZ2ljYWxMZWZ0KCksIGxp
bmVCb3guY29udGVudExvZ2ljYWxUb3BBZGp1c3RlZEZvclByZWNlZGluZ0xpbmVCb3goKSB9LCBG
bG9hdFBvaW50IHsgbGluZUJveC5jb250ZW50TG9naWNhbFJpZ2h0KCksIGxpbmVCb3guY29udGVu
dExvZ2ljYWxCb3R0b21BZGp1c3RlZEZvckZvbGxvd2luZ0xpbmVCb3goKSB9IH07CisgICAgfQor
CisgICAgc3RhdGljIEZsb2F0UmVjdCBwaHlzaWNhbFJlY3QoY29uc3QgSW5saW5lSXRlcmF0b3I6
OkxpbmVCb3gmIGxpbmVCb3gpCisgICAgeworICAgICAgICBhdXRvIHBoeXNpY2FsUmVjdCA9IGxv
Z2ljYWxSZWN0KGxpbmVCb3gpOworICAgICAgICBpZiAoIWxpbmVCb3guaXNIb3Jpem9udGFsKCkp
CisgICAgICAgICAgICBwaHlzaWNhbFJlY3QgPSBwaHlzaWNhbFJlY3QudHJhbnNwb3NlZFJlY3Qo
KTsKKyAgICAgICAgbGluZUJveC5jb250YWluaW5nQmxvY2soKS5mbGlwRm9yV3JpdGluZ01vZGUo
cGh5c2ljYWxSZWN0KTsKKyAgICAgICAgcmV0dXJuIHBoeXNpY2FsUmVjdDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZmxvYXQgbG9naWNhbFRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soY29uc3Qg
SW5saW5lSXRlcmF0b3I6OkxpbmVCb3gmIGxpbmVCb3gpCisgICAgeworICAgICAgICAvLyBGSVhN
RTogTW92ZSBhZGp1c3RFbmNsb3NpbmdUb3BGb3JQcmVjZWRpbmdCbG9jayBmcm9tIFJlbmRlckJs
b2NrRmxvdyB0byBoZXJlLgorICAgICAgICByZXR1cm4gbGluZUJveC5jb250YWluaW5nQmxvY2so
KS5hZGp1c3RFbmNsb3NpbmdUb3BGb3JQcmVjZWRpbmdCbG9jayhMYXlvdXRVbml0IHsgbGluZUJv
eC5jb250ZW50TG9naWNhbFRvcEFkanVzdGVkRm9yUHJlY2VkaW5nTGluZUJveCgpIH0pOworICAg
IH0KKworICAgIHN0YXRpYyBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0
YXRlKGNvbnN0IElubGluZUl0ZXJhdG9yOjpMaW5lQm94JiBsaW5lQm94KQorICAgIHsKKyAgICAg
ICAgYXV0byYgYmxvY2sgPSBsaW5lQm94LmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICBpZiAo
YmxvY2suc2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpO
b25lKQorICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5v
bmU7CisKKyAgICAgICAgYXV0byBsaW5lU3RhdGUgPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlOjpOb25lOworICAgICAgICBmb3IgKGF1dG8gYm94ID0gbGluZUJveC5maXJzdExlYWZCb3go
KTsgYm94OyBib3gudHJhdmVyc2VOZXh0T25MaW5lKCkpIHsKKyAgICAgICAgICAgIGF1dG8gYm94
U3RhdGUgPSBib3gtPnNlbGVjdGlvblN0YXRlKCk7CisgICAgICAgICAgICBpZiAobGluZVN0YXRl
ID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCisgICAgICAgICAgICAgICAg
bGluZVN0YXRlID0gYm94U3RhdGU7CisgICAgICAgICAgICBlbHNlIGlmIChsaW5lU3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kIHx8IGJveFN0
YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCisgICAgICAgICAgICAg
ICAgICAgIGxpbmVTdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGg7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dFN0YXRlOjpJbnNpZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoYm94U3RhdGUgPT0gUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQgfHwgYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZTo6RW5kKQorICAgICAgICAgICAgICAgICAgICBsaW5lU3RhdGUgPSBi
b3hTdGF0ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChib3hTdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQorICAgICAgICAgICAgICAgICAgICBsaW5lU3RhdGUg
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQ7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGxpbmVTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZTo6U3RhcnQpCisgICAgICAgICAgICAgICAgICAgIGxpbmVTdGF0ZSA9IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGU6OkJvdGg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChs
aW5lU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGluZVN0YXRlOworICAg
IH0KKworfTsKKworfQorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>