<?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>216523</bug_id>
          
          <creation_ts>2020-09-14 20:14:19 -0700</creation_ts>
          <short_desc>[LFC] Layout::BoxGeometry rename, part II.</short_desc>
          <delta_ts>2020-09-14 22:53:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>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>1688560</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-14 20:14:19 -0700</bug_when>
    <thetext>finalize the rename from Display::Box to Layout::BoxGeometry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688561</commentid>
    <comment_count>1</comment_count>
      <attachid>408784</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-14 20:21:50 -0700</bug_when>
    <thetext>Created attachment 408784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688583</commentid>
    <comment_count>2</comment_count>
      <attachid>408790</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-14 22:10:49 -0700</bug_when>
    <thetext>Created attachment 408790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688591</commentid>
    <comment_count>3</comment_count>
      <attachid>408792</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-14 22:19:03 -0700</bug_when>
    <thetext>Created attachment 408792
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688598</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-14 22:52:18 -0700</bug_when>
    <thetext>Committed r267076: &lt;https://trac.webkit.org/changeset/267076&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408792.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688599</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-14 22:53:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/68902195&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408784</attachid>
            <date>2020-09-14 20:21:50 -0700</date>
            <delta_ts>2020-09-14 22:10:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216523-20200914202149.patch</filename>
            <type>text/plain</type>
            <size>162238</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwZTE5ZTRkNzcxM2Vi
MGY4YjM2MDJkNTY3ZDMxYTJjYTdkYzI3Yy4uY2E4ZjkwMzk4NmE1NmE5MzQ2ZWMyMTc3NjFmZGYx
MGFjNjcyODcwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NCBAQAorMjAyMC0wOS0xNCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdIExheW91dDo6Qm94
R2VvbWV0cnkgcmVuYW1lLCBwYXJ0IElJLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIExheW91dDo6R2VvbWV0cnkgdG8gTGF5b3V0OjpCb3hH
ZW9tZXRyeSAoc28gdGhhdCBsYXRlciB3ZSBjYW4gaW50cm9kdWNlIExheW91dDo6TGluZUdlb21l
dHJ5IGFuZCBMYXlvdXQ6OlJ1bkdlb21ldHJ5KSBhbmQKKyAgICAgICAgbWFrZSBzdXJlIHdlIGRv
bid0IHVzZSBkaXNwbGF5Qm94IGFzIGEgdmFyaWFibGUgbmFtZSBpbiBMYXlvdXQgbmFtZXNwYWNl
LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0
T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQ
YWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Omdl
b21ldHJ5Rm9yQm94IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQu
aDoKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGlj
VmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6
b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQgY29uc3QpOgorICAgICAgICAqIGxh
eW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHA6CisgICAgICAgICogbGF5b3V0L0Zvcm1h
dHRpbmdTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdTdGF0
ZTo6Ym94R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nU3Rh
dGU6OmRpc3BsYXlCb3gpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9Gb3JtYXR0aW5nU3Rh
dGUuaDoKKyAgICAgICAgKiBsYXlvdXQvTGF5b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxheW91dENvbnRleHQ6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxheW91dENvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0U3VidHJlZSk6Cisg
ICAgICAgICogbGF5b3V0L0xheW91dFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGF5b3V0U3RhdGU6Omdlb21ldHJ5Rm9yUm9vdEJveCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxheW91dFN0YXRlOjplbnN1cmVHZW9tZXRyeUZvckJveFNsb3cpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6Z2VvbWV0cnlGb3JSb290TGF5b3V0Qm94KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6OmVuc3VyZURp
c3BsYXlCb3hGb3JMYXlvdXRCb3hTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvTGF5
b3V0U3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6Omhhc0Jv
eEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6
OmVuc3VyZUdlb21ldHJ5Rm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0
U3RhdGU6Omdlb21ldHJ5Rm9yQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Qm94OjpjYWNoZWRHZW9tZXRyeUZvckxheW91dFN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGF5b3V0U3RhdGU6Omhhc0Rpc3BsYXlCb3ggY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0ZTo6ZW5zdXJlR2VvbWV0cnlGb3JM
YXlvdXRCb3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMYXlvdXRTdGF0
ZTo6Z2VvbWV0cnlGb3JMYXlvdXRCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpCb3g6OmNhY2hlZERpc3BsYXlCb3hGb3JMYXlvdXRTdGF0ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6Om91dHB1dE1pc21hdGNoaW5nQmxvY2tCb3hJbmZvcm1hdGlvbklmTmVlZGVk
KToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNWZXJ0aWNhbFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZVN0YXRpY0hvcml6b250YWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94
QW5kQW5jZXN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9u
Rm9yRmxvYXRDbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4pOgorICAg
ICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAg
KiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3Bw
OgorICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1h
cmdpbkNvbGxhcHNlOjpoYXNDbGVhcmFuY2UgY29uc3QpOgorICAgICAgICAqIGxheW91dC9ibG9j
a2Zvcm1hdHRpbmcvdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZVdyYXBwZXJCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZ0ZvclRhYmxlQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZVdpZHRoQW5kTWFyZ2luRm9yVGFibGVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5k
TWFyZ2luRm9yVGFibGVCb3gpOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5L0Rpc3BsYXlMYXll
ckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6TGF5ZXJDb250cm9s
bGVyOjpwcmVwYXJlRm9yRGlzcGxheSk6CisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rp
c3BsYXlQYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OnBhaW50Qm94RGVj
b3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpQYWludGVyOjphYnNvbHV0ZUJv
eEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OnBhaW50U3VidHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Ojpjb2xsZWN0UGFpbnRSb290c0FuZENvbnRlbnRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OlBhaW50ZXI6OmFic29sdXRlRGlzcGxheUJv
eCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlQYWludGVy
Lmg6CisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaDoKKyAgICAgICAgKiBs
YXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkZsb2F0aW5nQ29udGV4dDo6cG9zaXRpb25Gb3JGbG9hdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nQ29udGV4dDo6cG9zaXRpb25Gb3JOb25GbG9hdGluZ0Zs
b2F0QXZvaWRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nQ29u
dGV4dDo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0
OjphYnNvbHV0ZUJveEdlb21ldHJ5Q29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRleHQ6OmFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4
dC5oOgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6RmxvYXRJdGVtKToK
KyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6RmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtOjpyZWN0V2l0aE1hcmdpbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6
aG9yaXpvbnRhbE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0
aW5nU3RhdGU6OkZsb2F0SXRlbTo6Ym90dG9tIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbkZsb3dDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omxp
bmVMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jpem9udGFsTWFy
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVXaWR0aEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVHZW9tZXRyeUZv
ckxpbmVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmNyZWF0ZURpc3BsYXlCb3hlc0ZvckxpbmVDb250ZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5o
OgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaDoKKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHA6Cisg
ICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6cHJl
cGFyZUZsb2F0aW5nU3RhdGUpOgorICAgICAgICAqIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveDo6c2V0Y2FjaGVkR2VvbWV0cnlG
b3JMYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveDo6c2V0
Q2FjaGVkRGlzcGxheUJveEZvckxheW91dFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guaDoKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0
dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9s
YXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJveEdlb21ldHJ5OjpCb3hHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJveEdlb21ldHJ5Ojp+Qm94R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCb3hHZW9tZXRyeTo6bWFyZ2luQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Qm94R2VvbWV0cnk6OmJvcmRlckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Qm94R2VvbWV0cnk6OmNvbnRlbnRCb3ggY29uc3QpOgorICAgICAgICAqIGxheW91dC9s
YXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5oLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpSZWN0OjpleHBhbmRIb3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpSZWN0OjpleHBhbmRWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
UmVjdDo6aW50ZXJzZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6
OmludmFsaWRhdGVUb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjppbnZhbGlk
YXRlTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OmludmFsaWRhdGVXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OmludmFsaWRhdGVIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpoYXNWYWxpZFBvc2l0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6aGFzVmFsaWRTaXplIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6aGFzVmFsaWRHZW9tZXRyeSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpSZWN0OjppbnZhbGlkYXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpSZWN0OjpzZXRIYXNWYWxpZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6UmVjdDo6c2V0SGFzVmFsaWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVj
dDo6dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6bGVmdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OmJvdHRvbSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OnJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6UmVjdDo6dG9wTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OlJlY3Q6OmJvdHRvbVJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
UmVjdDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OndpZHRo
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6aGVpZ2h0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6c2V0VG9wTGVmdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OnNldFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlJlY3Q6OnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpzZXRXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OnNldEhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpSZWN0OjpzaGlmdExlZnRUbyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6
OnNoaWZ0UmlnaHRUbyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OnNoaWZ0VG9w
VG8pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpzaGlmdEJvdHRvbVRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6bW92ZUhvcml6b250YWxseSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6Om1vdmVWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6UmVjdDo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVj
dDo6Y2xvbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpvcGVyYXRv
ciBMYXlvdXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0
cnk6OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
OjpyaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpi
b3R0b21SaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Ondp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmhlaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojppc0VtcHR5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6cmVjdFdpdGhNYXJn
aW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6aGFzQ2xl
YXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnZl
cnRpY2FsQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0
cnk6Omhvcml6b250YWxCb3JkZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
b3hHZW9tZXRyeTo6Y29udGVudEJveFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJveEdlb21ldHJ5Ojpjb250ZW50Qm94TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpjb250ZW50Qm94Qm90dG9tIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmNvbnRlbnRCb3hSaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nQm94VG9wIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnBhZGRpbmdCb3hMZWZ0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnBhZGRpbmdC
b3hCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6
cGFkZGluZ0JveFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2Vv
bWV0cnk6OnBhZGRpbmdCb3hIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCb3hHZW9tZXRyeTo6cGFkZGluZ0JveFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Qm94R2VvbWV0cnk6OmJvcmRlckJveEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpib3JkZXJCb3hXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjptYXJnaW5Cb3hIZWlnaHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6bWFyZ2luQm94V2lkdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6dmVydGljYWxN
YXJnaW5Cb3JkZXJBbmRQYWRkaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Qm94R2VvbWV0cnk6Omhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldEhhc1ByZWNvbXB1dGVkTWFy
Z2luQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Om1vdmVI
b3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6bW92
ZVZlcnRpY2FsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6bW92
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojptb3ZlQnkpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0SGFzQ2xlYXJhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmludmFsaWRhdGVCb3JkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6aW52YWxpZGF0ZVBhZGRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6aW52YWxpZGF0ZVByZWNv
bXB1dGVkTWFyZ2luQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0
cnk6OnNldEhhc1ZhbGlkVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0
cnk6OnNldEhhc1ZhbGlkTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21l
dHJ5OjpzZXRIYXNWYWxpZFZlcnRpY2FsTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Qm94R2VvbWV0cnk6OnNldEhhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRIYXNWYWxpZEJvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRIYXNWYWxpZFBhZGRpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0SGFzVmFsaWRDb250ZW50SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldEhhc1ZhbGlk
Q29udGVudFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Omlu
dmFsaWRhdGVNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6
dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmxlZnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6dG9wTGVmdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRUb3BMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldFRvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRMZWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldENvbnRlbnRCb3hIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0Q29udGVudEJveFdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmNvbnRlbnRCb3hIZWlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Y29udGVudEJveFdp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldEhv
cml6b250YWxNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6
c2V0VmVydGljYWxNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRy
eTo6c2V0Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNl
dFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0VmVy
dGljYWxQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnZl
cnRpY2FsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0
cnk6Omhvcml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
b3hHZW9tZXRyeTo6bWFyZ2luQmVmb3JlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Qm94R2VvbWV0cnk6Om1hcmdpblN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Qm94R2VvbWV0cnk6Om1hcmdpbkFmdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Qm94R2VvbWV0cnk6Om1hcmdpbkVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnBhZGRpbmdMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnBhZGRpbmdCb3R0b20gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6cGFkZGluZ1JpZ2h0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnZlcnRpY2FsUGFkZGluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpob3Jpem9udGFsUGFk
ZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpib3Jk
ZXJUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9y
ZGVyTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpi
b3JkZXJCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRy
eTo6Ym9yZGVyUmlnaHQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9sYXlvdXR0cmVlL0xheW91
dFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TGF5b3V0VHJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OnNob3dMYXlvdXRUcmVlKToKKyAgICAgICAgKiBsYXlvdXQv
dGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRVc2VkR2VvbWV0cnlGb3JD
ZWxscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6
OnNldFVzZWRHZW9tZXRyeUZvclJvd3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRVc2VkR2VvbWV0cnlGb3JTZWN0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dENlbGwpOgor
ICAgICAgICAqIGxheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcDoKKyAgICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlTGF5b3V0
LmNwcDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6bGF5b3V0VXNpbmdGb3JtYXR0aW5n
Q29udGV4dCk6CisKIDIwMjAtMDktMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBEcm9wIHNtb290aGluZyBsb2dpYyBmcm9tIERlbGF5RFNQS2VybmVsOjpwcm9j
ZXNzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggZjcyOGU2YjY0YTE3NDk3MjNmZTE3MTljNWEyNjU1NmNl
ZTFmOTg4NC4uY2IwODMxODVjOWE1MzY0ZWM4ZDQ1MjY1ZjE5ODUzZThkYzEwNDgwOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTE0NTksNyArMTQ1OSw3IEBAIGxheW91dC9pbnZhbGlkYXRpb24vSW52YWxp
ZGF0aW9uQ29udGV4dC5jcHAKIGxheW91dC9pbnZhbGlkYXRpb24vSW52YWxpZGF0aW9uU3RhdGUu
Y3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9M
YXlvdXRDb250YWluZXJCb3guY3BwCi1sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5j
cHAKK2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5LmNwcAogbGF5b3V0L2xheW91
dHRyZWUvTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5jcHAKIGxheW91dC9sYXlvdXR0cmVl
L0xheW91dElubGluZVRleHRCb3guY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRMaW5lQnJl
YWtCb3guY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggOTIzYTNhMjM3OWRiYmI0YWIxZjgyYThmNGZjMjllOWE2ZGIxZGE2Yi4u
NjgyNGVkMGI0MTdhMzY0OTBhOTAyYjAxMjYyMjQzMDUwMzBkNjZjNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjA2MSw4ICs2
MDYxLDggQEAKIAkJMEZFQzEyMEIyMkJGMkNDNzAwNEU5RDM1IC8qIExheWVyQW5jZXN0b3JDbGlw
cGluZ1N0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheWVyQW5jZXN0b3JDbGlwcGluZ1N0
YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRjIwQ0QxQkQ0QTI0MTAw
MTI4RTVEIC8qIExlbmd0aFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTGVuZ3RoU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUYy
MENGMUJENEE2NEYwMDEyOEU1RCAvKiBSZW5kZXJTdHlsZUNvbnN0YW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTdHlsZUNvbnN0YW50cy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRjI5QTUzMjUxMDFBNjEwMDNDMzRFMiAvKiBM
YXlvdXRHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlvdXRHZW9tZXRyeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRkYyOUE1NTI1MTAxQTYxMDAzQzM0RTIgLyogTGF5b3V0
R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0R2VvbWV0cnkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkYyOUE1MzI1MTAxQTYxMDAzQzM0RTIgLyogTGF5
b3V0Qm94R2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Qm94R2VvbWV0cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMjlBNTUyNTEwMUE2MTAwM0MzNEUyIC8qIExh
eW91dEJveEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEJveEdlb21ldHJ5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGMkU4MEMxRUUwRDQzMDAwOUVB
QkQ0IC8qIFBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkYzQjkyNDFFRTNCNkRFMDBCODQxNDQgLyogSlNET01RdWFk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NUXVhZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjNCOTI1MUVFM0I2REUwMEI4NDE0NCAv
KiBKU0RPTVF1YWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01RdWFk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzQ3OSwxMiArMTc0NzksMTIgQEAK
IAkJCWNoaWxkcmVuID0gKAogCQkJCTExNUNGQTk2MjA4Qjk1MkIwMDFFNjk5MSAvKiBMYXlvdXRC
b3guY3BwICovLAogCQkJCTExNUNGQTk1MjA4Qjk1MkIwMDFFNjk5MSAvKiBMYXlvdXRCb3guaCAq
LywKKwkJCQkwRkYyOUE1NTI1MTAxQTYxMDAzQzM0RTIgLyogTGF5b3V0Qm94R2VvbWV0cnkuY3Bw
ICovLAorCQkJCTBGRjI5QTUzMjUxMDFBNjEwMDNDMzRFMiAvKiBMYXlvdXRCb3hHZW9tZXRyeS5o
ICovLAogCQkJCTExMTAwRkM5MjA5MjdDQkMwMDgxQUE2QyAvKiBMYXlvdXRDaGlsZEl0ZXJhdG9y
LmggKi8sCiAJCQkJMTE5OUZBNDUyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRhaW5lckJv
eC5jcHAgKi8sCiAJCQkJMTE5OUZBNDQyMDhFMzVBMzAwMjM1OENDIC8qIExheW91dENvbnRhaW5l
ckJveC5oICovLAogCQkJCTExQjA0MkZCMjBCMEUyMTQwMDgyOEE2QiAvKiBMYXlvdXREZXNjZW5k
YW50SXRlcmF0b3IuaCAqLywKLQkJCQkwRkYyOUE1NTI1MTAxQTYxMDAzQzM0RTIgLyogTGF5b3V0
R2VvbWV0cnkuY3BwICovLAotCQkJCTBGRjI5QTUzMjUxMDFBNjEwMDNDMzRFMiAvKiBMYXlvdXRH
ZW9tZXRyeS5oICovLAogCQkJCTZGQjBFRDExMjQyN0I2QzYwMDI3MzdFNiAvKiBMYXlvdXRJbml0
aWFsQ29udGFpbmluZ0Jsb2NrLmNwcCAqLywKIAkJCQk2RjYzODNGNDI0MjdBRjQ5MDBEQUJBNTMg
LyogTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oICovLAogCQkJCTZGMEI5OEI2MjNGMjY5
MDYwMEVFQzJGMiAvKiBMYXlvdXRJbmxpbmVUZXh0Qm94LmNwcCAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDY1ZTg2M2E0YjI4MWUxMzM1ZWM2
N2UyYTkyNjVjNTM2YTkxOTZhOGEuLmMxMzE1MzYzNjIzMDA0NDM5MzNkNDY4MzAwNjAzMjJiYmU4
NTBmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcApA
QCAtMzEsMTAgKzMxLDEwIEBACiAjaW5jbHVkZSAiRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVk
ZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3guaCIKKyNpbmNsdWRl
ICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgog
I2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKICNpbmNsdWRlICJMYXlvdXREZXNjZW5kYW50SXRl
cmF0b3IuaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dElu
aXRpYWxDb250YWluaW5nQmxvY2suaCIKICNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgog
I2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCkBAIC05MCwxMSArOTAsMTEgQEAgdm9pZCBGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gm
IGxheW91dEJveCwKICAgICAgICAgICAgIGhvcml6b250YWxHZW9tZXRyeSA9IG1pbkhvcml6b250
YWxHZW9tZXRyeTsKICAgICB9CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0
YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpOwotICAgIGRpc3BsYXlCb3guc2V0TGVmdChob3Jp
em9udGFsR2VvbWV0cnkubGVmdCArIGhvcml6b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRN
YXJnaW4udXNlZE1hcmdpbi5zdGFydCk7Ci0gICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lk
dGgoaG9yaXpvbnRhbEdlb21ldHJ5LmNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgp
OworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnko
bGF5b3V0Qm94KTsKKyAgICBib3hHZW9tZXRyeS5zZXRMZWZ0KGhvcml6b250YWxHZW9tZXRyeS5s
ZWZ0ICsgaG9yaXpvbnRhbEdlb21ldHJ5LmNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2lu
LnN0YXJ0KTsKKyAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoaG9yaXpvbnRhbEdl
b21ldHJ5LmNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpOwogICAgIGF1dG8mIHVz
ZWRIb3Jpem9udGFsTWFyZ2luID0gaG9yaXpvbnRhbEdlb21ldHJ5LmNvbnRlbnRXaWR0aEFuZE1h
cmdpbi51c2VkTWFyZ2luOwotICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LCB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgfSk7Cisg
ICAgYm94R2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IHVzZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0LCB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgfSk7CiB9CiAKIHZvaWQgRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBjb25zdCBDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQmIGNvbnN0cmFpbnRz
KQpAQCAtMTE4LDE5ICsxMTgsMTkgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91
dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gsIGMKICAgICAgICAg
ICAgIHZlcnRpY2FsR2VvbWV0cnkgPSBtaW5WZXJ0aWNhbEdlb21ldHJ5OwogICAgIH0KIAotICAg
IGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJv
eCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRy
eShsYXlvdXRCb3gpOwogICAgIGF1dG8gbm9uQ29sbGFwc2VkVmVydGljYWxNYXJnaW4gPSB2ZXJ0
aWNhbEdlb21ldHJ5LmNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luOwot
ICAgIGRpc3BsYXlCb3guc2V0VG9wKHZlcnRpY2FsR2VvbWV0cnkudG9wICsgbm9uQ29sbGFwc2Vk
VmVydGljYWxNYXJnaW4uYmVmb3JlKTsKLSAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWln
aHQodmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQp
OworICAgIGJveEdlb21ldHJ5LnNldFRvcCh2ZXJ0aWNhbEdlb21ldHJ5LnRvcCArIG5vbkNvbGxh
cHNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJv
eEhlaWdodCh2ZXJ0aWNhbEdlb21ldHJ5LmNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhl
aWdodCk7CiAgICAgLy8gTWFyZ2lucyBvZiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMgZG8g
bm90IGNvbGxhcHNlLgotICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyBub25Db2xs
YXBzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUsIG5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyIH0pOworICAgIGJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgbm9uQ29sbGFwc2Vk
VmVydGljYWxNYXJnaW4uYmVmb3JlLCBub25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciB9
KTsKIH0KIAogdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmco
Y29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpv
bnRhbENvbnN0cmFpbnQpCiB7Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0
ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKLSAgICBkaXNwbGF5Qm94LnNldEJvcmRlcihnZW9t
ZXRyeSgpLmNvbXB1dGVkQm9yZGVyKGxheW91dEJveCkpOwotICAgIGRpc3BsYXlCb3guc2V0UGFk
ZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhsYXlvdXRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50LmxvZ2ljYWxXaWR0aCkpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KTsKKyAgICBib3hHZW9tZXRyeS5zZXRCb3Jk
ZXIoZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKKyAgICBib3hHZW9tZXRy
eS5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5nKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnQubG9naWNhbFdpZHRoKSk7CiB9CiAKIHZvaWQgRm9ybWF0dGluZ0NvbnRl
eHQ6OmxheW91dE91dE9mRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlv
blN0YXRlLCBjb25zdCBDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQmIGNvbnN0cmFpbnRz
KQpAQCAtMTY4LDExICsxNjgsMTEgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0T3V0
T2ZGbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW9uU3QKICAgICBMT0df
V0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiRW5kOiBsYXlv
dXQgb3V0LW9mLWZsb3cgY29udGVudCAtPiBjb250ZXh0OiAiIDw8ICZsYXlvdXRTdGF0ZSgpIDw8
ICIgcm9vdDogIiA8PCAmcm9vdCgpKTsKIH0KIAotY29uc3QgTGF5b3V0OjpHZW9tZXRyeSYgRm9y
bWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5Rm9yQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRp
b25hbDxFc2NhcGVSZWFzb24+IGVzY2FwZVJlYXNvbikgY29uc3QKK2NvbnN0IEJveEdlb21ldHJ5
JiBGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnlGb3JCb3goY29uc3QgQm94JiBsYXlvdXRCb3gs
IE9wdGlvbmFsPEVzY2FwZVJlYXNvbj4gZXNjYXBlUmVhc29uKSBjb25zdAogewogICAgIFVOVVNF
RF9QQVJBTShlc2NhcGVSZWFzb24pOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYXV0byBpc09r
VG9BY2Nlc3NEaXNwbGF5Qm94ID0gWyZdIHsKKyAgICBhdXRvIGlzT2tUb0FjY2Vzc0JveEdlb21l
dHJ5ID0gWyZdIHsKICAgICAgICAgaWYgKCFpczxJbml0aWFsQ29udGFpbmluZ0Jsb2NrPihsYXlv
dXRCb3gpICYmICZsYXlvdXRCb3guZm9ybWF0dGluZ0NvbnRleHRSb290KCkgPT0gJnJvb3QoKSkg
ewogICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbm9uLWVzY2FwZSBjYXNlIG9mIGFjY2Vzc2lu
ZyBhIGJveCdzIGdlb21ldHJ5IGluZm9ybWF0aW9uIHdpdGhpbiB0aGUgc2FtZSBmb3JtYXR0aW5n
IGNvbnRleHQuCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0OSw5ICsyNDksOSBAQCBj
b25zdCBMYXlvdXQ6Okdlb21ldHJ5JiBGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnlGb3JCb3go
Y29uc3QgQm94JiBsYXlvdXRCb3gsCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9OwogI2Vu
ZGlmCi0gICAgQVNTRVJUKGlzT2tUb0FjY2Vzc0Rpc3BsYXlCb3goKSk7Ci0gICAgQVNTRVJUKGxh
eW91dFN0YXRlKCkuaGFzRGlzcGxheUJveChsYXlvdXRCb3gpKTsKLSAgICByZXR1cm4gbGF5b3V0
U3RhdGUoKS5nZW9tZXRyeUZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIEFTU0VSVChpc09r
VG9BY2Nlc3NCb3hHZW9tZXRyeSgpKTsKKyAgICBBU1NFUlQobGF5b3V0U3RhdGUoKS5oYXNCb3hH
ZW9tZXRyeShsYXlvdXRCb3gpKTsKKyAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5nZW9tZXRyeUZv
ckJveChsYXlvdXRCb3gpOwogfQogCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0T3V0
T2ZGbG93RGVzY2VuZGFudHNJZk5lZWRlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0
aW5nQ29udGV4dC5oCmluZGV4IDBiNWQ3ZDBhZTZiZGExZGE3NTE1ZmE0MTVjZTY4N2M1YWExMWUz
MDcuLjgxOWU3ZmNiOTdiYmI3NWVlNGQ1ZWU4Nzk0ZDY0MWE3MDk0MzllMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCkBAIC00MSw2ICs0MSw3IEBAIHN0cnVj
dCBMZW5ndGg7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQm94OworY2xhc3MgQm94R2Vv
bWV0cnk7CiBjbGFzcyBSZXBsYWNlZEJveDsKIHN0cnVjdCBDb21wdXRlZEhvcml6b250YWxNYXJn
aW47CiBzdHJ1Y3QgQ29tcHV0ZWRWZXJ0aWNhbE1hcmdpbjsKQEAgLTQ5LDcgKzUwLDYgQEAgc3Ry
dWN0IENvbnRlbnRIZWlnaHRBbmRNYXJnaW47CiBzdHJ1Y3QgQ29udGVudFdpZHRoQW5kTWFyZ2lu
Owogc3RydWN0IEVkZ2VzOwogY2xhc3MgRm9ybWF0dGluZ1N0YXRlOwotY2xhc3MgR2VvbWV0cnk7
CiBzdHJ1Y3QgSG9yaXpvbnRhbEdlb21ldHJ5OwogY2xhc3MgSW52YWxpZGF0aW9uU3RhdGU7CiBj
bGFzcyBMYXlvdXRTdGF0ZTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0
cm9rZU92ZXJmbG93TmVlZHNWaWV3cG9ydEdlb21ldHJ5LAogICAgICAgICBUYWJsZU5lZWRzQWNj
ZXNzVG9UYWJsZVdyYXBwZXIKICAgICB9OwotICAgIGNvbnN0IExheW91dDo6R2VvbWV0cnkmIGdl
b21ldHJ5Rm9yQm94KGNvbnN0IEJveCYsIE9wdGlvbmFsPEVzY2FwZVJlYXNvbj4gPSBXVEY6Om51
bGxvcHQpIGNvbnN0OworICAgIGNvbnN0IEJveEdlb21ldHJ5JiBnZW9tZXRyeUZvckJveChjb25z
dCBCb3gmLCBPcHRpb25hbDxFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxsb3B0KSBjb25zdDsKICAg
ICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJldHVybiAqbV9yb290OyB9CiAK
ICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCA4MDFhMWJj
MWFhNWRjNjczNjliMzIyNzA1ZDA4ZTY4MmNhOTllOTA3Li43MGUwNzc1NjExYThlNWNhYjA1NjNj
ZWQ1ZWY1ZTljNDA1NzUxMmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC0yOTcsNyArMjk3LDcgQEAgTGF5b3V0VW5p
dCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JP
dXRPZkZsb3dQb3NpdGkKICAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJlbnQgc2luY2Ugd2UgcHJl
dGVuZCB0aGF0IHRoaXMgYm94IGlzIG5vcm1hbCBmbG93LgogICAgIGZvciAoYXV0byogYW5jZXN0
b3IgPSAmbGF5b3V0Qm94LnBhcmVudCgpOyBhbmNlc3RvciAhPSAmY29udGFpbmluZ0Jsb2NrOyBh
bmNlc3RvciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKICAgICAgICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqYW5jZXN0b3Is
IEVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSk7Ci0gICAgICAg
IC8vIExheW91dDo6R2VvbWV0cnk6OnRvcCBpcyB0aGUgYm9yZGVyIGJveCB0b3AgcG9zaXRpb24g
aW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAgICAgLy8g
Qm94R2VvbWV0cnk6OnRvcCBpcyB0aGUgYm9yZGVyIGJveCB0b3AgcG9zaXRpb24gaW4gaXRzIGNv
bnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KICAgICAgICAgdG9wICs9IGJveEdl
b21ldHJ5LnRvcCgpOwogICAgICAgICBBU1NFUlQoIWFuY2VzdG9yLT5pc1Bvc2l0aW9uZWQoKSB8
fCBsYXlvdXRCb3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7CiAgICAgfQpAQCAtMzE5LDcgKzMxOSw3
IEBAIExheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpCiAgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50
IHNpbmNlIHdlIHByZXRlbmQgdGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KICAgICBmb3Ig
KGF1dG8qIGFuY2VzdG9yID0gJmxheW91dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRh
aW5pbmdCbG9jazsgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7CiAg
ICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JC
b3goKmFuY2VzdG9yLCBFc2NhcGVSZWFzb246Ok91dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0
cnkpOwotICAgICAgICAvLyBMYXlvdXQ6Okdlb21ldHJ5OjpsZWZ0IGlzIHRoZSBib3JkZXIgYm94
IGxlZnQgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3Rl
bS4KKyAgICAgICAgLy8gQm94R2VvbWV0cnk6OmxlZnQgaXMgdGhlIGJvcmRlciBib3ggbGVmdCBw
b3NpdGlvbiBpbiBpdHMgY29udGFpbmluZyBibG9jaydzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAg
ICAgICBsZWZ0ICs9IGJveEdlb21ldHJ5LmxlZnQoKTsKICAgICAgICAgQVNTRVJUKCFhbmNlc3Rv
ci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzRml4ZWRQb3NpdGlvbmVkKCkpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1
aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3Mu
Y3BwCmluZGV4IDg4NWVkZmJhYWNiNWIwODY3ZDA1ZGFjOWRiM2YxN2M3Mzc4ODg2MmEuLjgyMTFi
MGRjNjMwY2EyMzk3YmFiMzg0Zjk4MDgzMDMxOTFmMmJkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApAQCAtMjksNyArMjksNyBA
QAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiTGF5
b3V0Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRC
b3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ1N0
YXRlLmNwcAppbmRleCA4YTIxOWNjZjExMTYyYTZjYTRiYTc0MzhiODZmYWVlOTVmYTBlMWYxLi5h
MmM0ODUzMWU3NmQ2NDhhN2VmOTRhOWVhODhjNGMwZDQ0NTNkNzExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5o
IgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0
cnkuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00OCwxMyArNDgsMTMgQEAgRm9ybWF0dGluZ1N0YXRlOjp+Rm9ybWF0dGluZ1N0
YXRlKCkKIHsKIH0KIAotTGF5b3V0OjpHZW9tZXRyeSYgRm9ybWF0dGluZ1N0YXRlOjpkaXNwbGF5
Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KQorQm94R2VvbWV0cnkmIEZvcm1hdHRpbmdTdGF0ZTo6
Ym94R2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgLy8gU2hvdWxkIG5ldmVy
IG5lZWQgdG8gbXV0YXRlIGEgZGlzcGxheSBib3ggb3V0c2lkZSBvZiB0aGUgZm9ybWF0dGluZyBj
b250ZXh0LgogICAgIEFTU0VSVCgmbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdT
dGF0ZShsYXlvdXRCb3guZm9ybWF0dGluZ0NvbnRleHRSb290KCkpID09IHRoaXMpOwogICAgIC8v
IEFub255bW91cyB0ZXh0IHdyYXBwZXJzL2xpbmUgYnJlYWsgYm94ZXMgc2hvdWxkIG5vdCBuZWVk
IGRpc3BsYXkgYm94ZXMuCiAgICAgQVNTRVJUKCFsYXlvdXRCb3guaXNJbmxpbmVUZXh0Qm94KCkg
JiYgKCFsYXlvdXRCb3guaXNMaW5lQnJlYWtCb3goKSB8fCBsYXlvdXRCb3guaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpKTsKLSAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5lbnN1cmVHZW9tZXRyeUZv
ckxheW91dEJveChsYXlvdXRCb3gpOworICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmVuc3VyZUdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3Jt
YXR0aW5nU3RhdGUuaAppbmRleCBjZWY4ZGQ5YmZhMGFmY2EyYjFlOGIzNjhlZTdmZjY0OTM1MjQ4
MDU5Li5lMzQxOGQ3ZDQyNTgyYzNiMzgwYzA2NmU0YmJiMjk5Y2MxYjFiZmE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oCkBAIC02MSw3ICs2MSw4IEBAIHB1YmxpYzoK
IAogICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0
U3RhdGU7IH0KIAotICAgIExheW91dDo6R2VvbWV0cnkmIGRpc3BsYXlCb3goY29uc3QgQm94JiBs
YXlvdXRCb3gpOworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gbGltaXQg
YWNjZXNzIHRvIG11dGF0YWJsZSBnZW9tZXRyeS4KKyAgICBCb3hHZW9tZXRyeSYgYm94R2VvbWV0
cnkoY29uc3QgQm94JiBsYXlvdXRCb3gpOwogICAgIC8vIFNpbmNlIHdlIGxheW91dCB0aGUgb3V0
LW9mLWZsb3cgYm94ZXMgYXQgdGhlIGVuZCBvZiB0aGUgZm9ybWF0dGluZyBjb250ZXh0IGxheW91
dCwgaXQncyBva2F5IHRvIHN0b3JlIHRoZW0gaW4gdGhlIGZvcm1hdHRpbmcgc3RhdGUgLWFzIG9w
cG9zZWQgdG8gdGhlIGNvbnRhaW5pbmcgYmxvY2sgbGV2ZWwuCiAgICAgdXNpbmcgT3V0T2ZGbG93
Qm94TGlzdCA9IFZlY3RvcjxXZWFrUHRyPGNvbnN0IEJveD4+OwogICAgIHZvaWQgYWRkT3V0T2ZG
bG93Qm94KGNvbnN0IEJveCYgb3V0T2ZGbG93Qm94KSB7IG1fb3V0T2ZGbG93Qm94ZXMuYXBwZW5k
KG1ha2VXZWFrUHRyKG91dE9mRmxvd0JveCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0
Q29udGV4dC5jcHAKaW5kZXggZmYzYzE0ZWZhMWEyYmFjZDMwNTZlYzJjNDhiYzk2MDhmNmE4Mjc1
ZS4uOTEwZTliM2Q1OTY5OWM5NGZhNjIxZGQzYTQzZjY0YjM5MjZkMDg3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmNwcApAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUg
IkludmFsaWRhdGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb25TdGF0ZS5oIgog
I2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAj
aW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnku
aCIKICNpbmNsdWRlICJMYXlvdXRQaGFzZS5oIgogI2luY2x1ZGUgIkxheW91dFRyZWVCdWlsZGVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKQEAgLTY0LDE0ICs2NCwxNCBA
QCB2b2lkIExheW91dENvbnRleHQ6OmxheW91dChjb25zdCBMYXlvdXRTaXplJiByb290Q29udGVu
dEJveFNpemUsIEludmFsaWRhdGlvblN0YQogICAgIC8vIE5vdGUgdGhhdCB3ZSBuZXZlciBsYXlv
dXQgdGhlIHJvb3QgYm94LiBJdCBoYXMgdG8gaGF2ZSBhbiBhbHJlYWR5IGNvbXB1dGVkIGdlb21l
dHJ5IChpbiBjYXNlIG9mIElDQiwgaXQncyB0aGUgdmlldyBnZW9tZXRyeSkuCiAgICAgLy8gSUNC
IGVzdGFibGlzaGVzIHRoZSBpbml0aWFsIEJGQywgYnV0IGl0IGRvZXMgbm90IGxpdmUgaW4gYSBm
b3JtYXR0aW5nIGNvbnRleHQgYW5kIHdoaWxlIGEgbm9uLUlDQiByb290KHN1YnRyZWUgbGF5b3V0
KSBoYXMgdG8gaGF2ZSBhIGZvcm1hdHRpbmcgY29udGV4dCwKICAgICAvLyB3ZSBjb3VsZCBub3Qg
bGF5IGl0IG91dCBldmVuIGlmIHdlIHdhbnRlZCB0byBzaW5jZSBpdCdzIG91dHNpZGUgb2YgdGhp
cyBMYXlvdXRDb250ZXh0LgotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmdl
b21ldHJ5Rm9yUm9vdExheW91dEJveCgpOwotICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1h
cmdpbih7IH0pOwotICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKLSAgICBk
aXNwbGF5Qm94LnNldEJvcmRlcih7IH0pOwotICAgIGRpc3BsYXlCb3guc2V0UGFkZGluZyh7IH0p
OwotICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IH0pOwotICAgIGRpc3BsYXlCb3guc2V0Q29u
dGVudEJveEhlaWdodChyb290Q29udGVudEJveFNpemUuaGVpZ2h0KCkpOwotICAgIGRpc3BsYXlC
b3guc2V0Q29udGVudEJveFdpZHRoKHJvb3RDb250ZW50Qm94U2l6ZS53aWR0aCgpKTsKKyAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGxheW91dFN0YXRlKCkuZ2VvbWV0cnlGb3JSb290Qm94KCk7Cisg
ICAgYm94R2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOworICAgIGJveEdlb21ldHJ5
LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7CisgICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKHsgfSk7
CisgICAgYm94R2VvbWV0cnkuc2V0UGFkZGluZyh7IH0pOworICAgIGJveEdlb21ldHJ5LnNldFRv
cExlZnQoeyB9KTsKKyAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KHJvb3RDb250
ZW50Qm94U2l6ZS5oZWlnaHQoKSk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRo
KHJvb3RDb250ZW50Qm94U2l6ZS53aWR0aCgpKTsKIAogICAgIGxheW91dFdpdGhQcmVwYXJlZFJv
b3RHZW9tZXRyeShpbnZhbGlkYXRpb25TdGF0ZSk7CiB9CkBAIC05NiwxMCArOTYsMTAgQEAgdm9p
ZCBMYXlvdXRDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFN1YnRyZWUoY29uc3QgQ29u
dGFpbmVyQm94JiBmb3JtYXR0aW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBmb3JtYXR0
aW5nQ29udGV4dCA9IGNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0Um9v
dCwgbGF5b3V0U3RhdGUoKSk7Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlKCku
Z2VvbWV0cnlGb3JMYXlvdXRCb3goZm9ybWF0dGluZ0NvbnRleHRSb290KTsKKyAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGxheW91dFN0YXRlKCkuZ2VvbWV0cnlGb3JCb3goZm9ybWF0dGluZ0NvbnRl
eHRSb290KTsKIAogICAgIGlmIChmb3JtYXR0aW5nQ29udGV4dFJvb3QuaGFzSW5GbG93T3JGbG9h
dGluZ0NoaWxkKCkpIHsKLSAgICAgICAgYXV0byBjb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQg
PSBGb3JtYXR0aW5nQ29udGV4dDo6Q29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50IHsgeyBkaXNw
bGF5Qm94LmNvbnRlbnRCb3hMZWZ0KCksIGRpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCkgfSwg
eyBkaXNwbGF5Qm94LmNvbnRlbnRCb3hUb3AoKSwgeyB9IH0gfTsKKyAgICAgICAgYXV0byBjb25z
dHJhaW50c0ZvckluRmxvd0NvbnRlbnQgPSBGb3JtYXR0aW5nQ29udGV4dDo6Q29uc3RyYWludHNG
b3JJbkZsb3dDb250ZW50IHsgeyBib3hHZW9tZXRyeS5jb250ZW50Qm94TGVmdCgpLCBib3hHZW9t
ZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9LCB7IGJveEdlb21ldHJ5LmNvbnRlbnRCb3hUb3AoKSwg
eyB9IH0gfTsKICAgICAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dEluRmxvd0NvbnRlbnQo
aW52YWxpZGF0aW9uU3RhdGUsIGNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCk7CiAgICAgfQog
CkBAIC0xMDcsOCArMTA3LDggQEAgdm9pZCBMYXlvdXRDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5n
Q29udGV4dFN1YnRyZWUoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW4KICAgICAvLyBJdCBj
b25zdHJ1Y3RzIGFuIEZDIGZvciBkZXNjZW5kYW50IGJveGVzIGFuZCBydW5zIGxheW91dCBvbiB0
aGVtLiBUaGUgZm9ybWF0dGluZ0NvbnRleHRSb290IGlzIGxhaWQgb3V0IGluIHRoZSBGQyBpbiB3
aGljaCBpdCBsaXZlcyAocGFyZW50IGZvcm1hdHRpbmcgY29udGV4dCkuCiAgICAgLy8gSXQgYWxz
byBtZWFucyB0aGF0IHRoZSBmb3JtYXR0aW5nQ29udGV4dFJvb3QgaGFzIHRvIGhhdmUgYSB2YWxp
ZC9jbGVhbiBnZW9tZXRyeSBhdCB0aGlzIHBvaW50LgogICAgIHsKLSAgICAgICAgYXV0byBjb25z
dHJhaW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRl
bnQgeyB7IGRpc3BsYXlCb3gucGFkZGluZ0JveExlZnQoKSwgZGlzcGxheUJveC5wYWRkaW5nQm94
V2lkdGgoKSB9LAotICAgICAgICAgICAgeyBkaXNwbGF5Qm94LnBhZGRpbmdCb3hUb3AoKSwgZGlz
cGxheUJveC5wYWRkaW5nQm94SGVpZ2h0KCkgfSwgZGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgo
KSB9OworICAgICAgICBhdXRvIGNvbnN0cmFpbnRzID0gRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0
cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudCB7IHsgYm94R2VvbWV0cnkucGFkZGluZ0JveExlZnQo
KSwgYm94R2VvbWV0cnkucGFkZGluZ0JveFdpZHRoKCkgfSwKKyAgICAgICAgICAgIHsgYm94R2Vv
bWV0cnkucGFkZGluZ0JveFRvcCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94SGVpZ2h0KCkgfSwg
Ym94R2VvbWV0cnkuY29udGVudEJveFdpZHRoKCkgfTsKICAgICAgICAgZm9ybWF0dGluZ0NvbnRl
eHQtPmxheW91dE91dE9mRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGNvbnN0cmFpbnRz
KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0U3Rh
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFN0YXRlLmNwcAppbmRleCBjNzM2
YmU1ZDMzMjRiYjc3ZTM2NDc5MGY0ZWY4Y2JkZTRkYTZhMDMwLi5jMjNjZjJkMWQ1OWFjZjdmZjNk
NmY2MWEzNGJlYTI2ZjBkOTg4NWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
TGF5b3V0U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRTdGF0ZS5j
cHAKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCiAjaW5jbHVk
ZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCisjaW5j
bHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXJCb3gu
aCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgog
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJUYWJsZUZvcm1h
dHRpbmdTdGF0ZS5oIgpAQCAtNjMsMjMgKzYzLDIzIEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0
ZShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IENvbnRhaW5lckJveCYgcm9vdENvbnRh
CiAKIExheW91dFN0YXRlOjp+TGF5b3V0U3RhdGUoKSA9IGRlZmF1bHQ7CiAKLUxheW91dDo6R2Vv
bWV0cnkmIExheW91dFN0YXRlOjpnZW9tZXRyeUZvclJvb3RMYXlvdXRCb3goKQorQm94R2VvbWV0
cnkmIExheW91dFN0YXRlOjpnZW9tZXRyeUZvclJvb3RCb3goKQogewotICAgIHJldHVybiBlbnN1
cmVHZW9tZXRyeUZvckxheW91dEJveChyb290KCkpOworICAgIHJldHVybiBlbnN1cmVHZW9tZXRy
eUZvckJveChyb290KCkpOwogfQogCi1MYXlvdXQ6Okdlb21ldHJ5JiBMYXlvdXRTdGF0ZTo6ZW5z
dXJlRGlzcGxheUJveEZvckxheW91dEJveFNsb3coY29uc3QgQm94JiBsYXlvdXRCb3gpCitCb3hH
ZW9tZXRyeSYgTGF5b3V0U3RhdGU6OmVuc3VyZUdlb21ldHJ5Rm9yQm94U2xvdyhjb25zdCBCb3gm
IGxheW91dEJveCkKIHsKICAgICBpZiAobGF5b3V0Qm94LmNhbkNhY2hlRm9yTGF5b3V0U3RhdGUo
KnRoaXMpKSB7Ci0gICAgICAgIEFTU0VSVCghbGF5b3V0Qm94LmNhY2hlZERpc3BsYXlCb3hGb3JM
YXlvdXRTdGF0ZSgqdGhpcykpOwotICAgICAgICBhdXRvIG5ld0JveCA9IG1ha2VVbmlxdWU8TGF5
b3V0OjpHZW9tZXRyeT4oKTsKKyAgICAgICAgQVNTRVJUKCFsYXlvdXRCb3guY2FjaGVkR2VvbWV0
cnlGb3JMYXlvdXRTdGF0ZSgqdGhpcykpOworICAgICAgICBhdXRvIG5ld0JveCA9IG1ha2VVbmlx
dWU8Qm94R2VvbWV0cnk+KCk7CiAgICAgICAgIGF1dG8mIG5ld0JveFB0ciA9ICpuZXdCb3g7Ci0g
ICAgICAgIGxheW91dEJveC5zZXRDYWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0U3RhdGUoKnRoaXMs
IFdURk1vdmUobmV3Qm94KSk7CisgICAgICAgIGxheW91dEJveC5zZXRjYWNoZWRHZW9tZXRyeUZv
ckxheW91dFN0YXRlKCp0aGlzLCBXVEZNb3ZlKG5ld0JveCkpOwogICAgICAgICByZXR1cm4gbmV3
Qm94UHRyOwogICAgIH0KIAotICAgIHJldHVybiAqbV9sYXlvdXRUb0Rpc3BsYXlCb3guZW5zdXJl
KCZsYXlvdXRCb3gsIFtdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8TGF5b3V0OjpHZW9t
ZXRyeT4oKTsKKyAgICByZXR1cm4gKm1fbGF5b3V0Qm94VG9Cb3hHZW9tZXRyeS5lbnN1cmUoJmxh
eW91dEJveCwgW10geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxCb3hHZW9tZXRyeT4oKTsK
ICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9MYXlvdXRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFN0YXRl
LmgKaW5kZXggZDc0OWFlZGUzNzk0NWNiN2E5OTIyZjY0OTg1NmRkODIzMzMzNzVkMi4uYzQxOGVk
YTE0NGU4YzNjMTIzOGE0YWZjNzJlNTVkMWI2ZWM1ZTc5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L0xheW91dFN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xh
eW91dFN0YXRlLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgQmxvY2tGb3JtYXR0aW5nU3RhdGU7
CiBjbGFzcyBGbGV4Rm9ybWF0dGluZ1N0YXRlOwogY2xhc3MgRm9ybWF0dGluZ0NvbnRleHQ7CiBj
bGFzcyBGb3JtYXR0aW5nU3RhdGU7Ci1jbGFzcyBHZW9tZXRyeTsKK2NsYXNzIEJveEdlb21ldHJ5
OwogY2xhc3MgSW5saW5lRm9ybWF0dGluZ1N0YXRlOwogY2xhc3MgVGFibGVGb3JtYXR0aW5nU3Rh
dGU7CiAKQEAgLTcxLDExICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXJlZ2lzdGVyRm9y
bWF0dGluZ0NvbnRleHQoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0
KSB7IG1fZm9ybWF0dGluZ0NvbnRleHRMaXN0LnJlbW92ZSgmZm9ybWF0dGluZ0NvbnRleHQpOyB9
CiAjZW5kaWYKIAotICAgIExheW91dDo6R2VvbWV0cnkmIGdlb21ldHJ5Rm9yUm9vdExheW91dEJv
eCgpOwotICAgIExheW91dDo6R2VvbWV0cnkmIGVuc3VyZUdlb21ldHJ5Rm9yTGF5b3V0Qm94KGNv
bnN0IEJveCYpOwotICAgIGNvbnN0IExheW91dDo6R2VvbWV0cnkmIGdlb21ldHJ5Rm9yTGF5b3V0
Qm94KGNvbnN0IEJveCYpIGNvbnN0OworICAgIEJveEdlb21ldHJ5JiBnZW9tZXRyeUZvclJvb3RC
b3goKTsKKyAgICBCb3hHZW9tZXRyeSYgZW5zdXJlR2VvbWV0cnlGb3JCb3goY29uc3QgQm94Jik7
CisgICAgY29uc3QgQm94R2VvbWV0cnkmIGdlb21ldHJ5Rm9yQm94KGNvbnN0IEJveCYpIGNvbnN0
OwogCi0gICAgYm9vbCBoYXNEaXNwbGF5Qm94KGNvbnN0IEJveCYpIGNvbnN0OworICAgIGJvb2wg
aGFzQm94R2VvbWV0cnkoY29uc3QgQm94JikgY29uc3Q7CiAKICAgICBlbnVtIGNsYXNzIFF1aXJr
c01vZGUgeyBObywgTGltaXRlZCwgWWVzIH07CiAgICAgYm9vbCBpblF1aXJrc01vZGUoKSBjb25z
dCB7IHJldHVybiBtX3F1aXJrc01vZGUgPT0gUXVpcmtzTW9kZTo6WWVzOyB9CkBAIC05Myw3ICs5
Myw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHNldFF1aXJrc01vZGUoUXVpcmtz
TW9kZSBxdWlya3NNb2RlKSB7IG1fcXVpcmtzTW9kZSA9IHF1aXJrc01vZGU7IH0KLSAgICBMYXlv
dXQ6Okdlb21ldHJ5JiBlbnN1cmVEaXNwbGF5Qm94Rm9yTGF5b3V0Qm94U2xvdyhjb25zdCBCb3gm
KTsKKyAgICBCb3hHZW9tZXRyeSYgZW5zdXJlR2VvbWV0cnlGb3JCb3hTbG93KGNvbnN0IEJveCYp
OwogCiAgICAgSGFzaE1hcDxjb25zdCBDb250YWluZXJCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8SW5s
aW5lRm9ybWF0dGluZ1N0YXRlPj4gbV9pbmxpbmVGb3JtYXR0aW5nU3RhdGVzOwogICAgIEhhc2hN
YXA8Y29uc3QgQ29udGFpbmVyQm94Kiwgc3RkOjp1bmlxdWVfcHRyPEJsb2NrRm9ybWF0dGluZ1N0
YXRlPj4gbV9ibG9ja0Zvcm1hdHRpbmdTdGF0ZXM7CkBAIC0xMDUsNyArMTA1LDcgQEAgcHJpdmF0
ZToKICNpZm5kZWYgTkRFQlVHCiAgICAgSGFzaFNldDxjb25zdCBGb3JtYXR0aW5nQ29udGV4dCo+
IG1fZm9ybWF0dGluZ0NvbnRleHRMaXN0OwogI2VuZGlmCi0gICAgSGFzaE1hcDxjb25zdCBCb3gq
LCBzdGQ6OnVuaXF1ZV9wdHI8TGF5b3V0OjpHZW9tZXRyeT4+IG1fbGF5b3V0VG9EaXNwbGF5Qm94
OworICAgIEhhc2hNYXA8Y29uc3QgQm94Kiwgc3RkOjp1bmlxdWVfcHRyPEJveEdlb21ldHJ5Pj4g
bV9sYXlvdXRCb3hUb0JveEdlb21ldHJ5OwogICAgIFF1aXJrc01vZGUgbV9xdWlya3NNb2RlIHsg
UXVpcmtzTW9kZTo6Tm8gfTsKIAogICAgIFdlYWtQdHI8Y29uc3QgQ29udGFpbmVyQm94PiBtX3Jv
b3RDb250YWluZXI7CkBAIC0xMTUsMjYgKzExNSwyNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9p
c0ludGVncmF0ZWRSb290Qm94Rmlyc3RDaGlsZCB7IGZhbHNlIH07CiB9OwogCi1pbmxpbmUgYm9v
bCBMYXlvdXRTdGF0ZTo6aGFzRGlzcGxheUJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QK
K2lubGluZSBib29sIExheW91dFN0YXRlOjpoYXNCb3hHZW9tZXRyeShjb25zdCBCb3gmIGxheW91
dEJveCkgY29uc3QKIHsKLSAgICBpZiAobGF5b3V0Qm94LmNhY2hlZERpc3BsYXlCb3hGb3JMYXlv
dXRTdGF0ZSgqdGhpcykpCisgICAgaWYgKGxheW91dEJveC5jYWNoZWRHZW9tZXRyeUZvckxheW91
dFN0YXRlKCp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fbGF5b3V0
VG9EaXNwbGF5Qm94LmNvbnRhaW5zKCZsYXlvdXRCb3gpOworICAgIHJldHVybiBtX2xheW91dEJv
eFRvQm94R2VvbWV0cnkuY29udGFpbnMoJmxheW91dEJveCk7CiB9CiAKLWlubGluZSBMYXlvdXQ6
Okdlb21ldHJ5JiBMYXlvdXRTdGF0ZTo6ZW5zdXJlR2VvbWV0cnlGb3JMYXlvdXRCb3goY29uc3Qg
Qm94JiBsYXlvdXRCb3gpCitpbmxpbmUgQm94R2VvbWV0cnkmIExheW91dFN0YXRlOjplbnN1cmVH
ZW9tZXRyeUZvckJveChjb25zdCBCb3gmIGxheW91dEJveCkKIHsKLSAgICBpZiAoYXV0byogZGlz
cGxheUJveCA9IGxheW91dEJveC5jYWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0U3RhdGUoKnRoaXMp
KQotICAgICAgICByZXR1cm4gKmRpc3BsYXlCb3g7Ci0gICAgcmV0dXJuIGVuc3VyZURpc3BsYXlC
b3hGb3JMYXlvdXRCb3hTbG93KGxheW91dEJveCk7CisgICAgaWYgKGF1dG8qIGJveEdlb21ldHJ5
ID0gbGF5b3V0Qm94LmNhY2hlZEdlb21ldHJ5Rm9yTGF5b3V0U3RhdGUoKnRoaXMpKQorICAgICAg
ICByZXR1cm4gKmJveEdlb21ldHJ5OworICAgIHJldHVybiBlbnN1cmVHZW9tZXRyeUZvckJveFNs
b3cobGF5b3V0Qm94KTsKIH0KIAotaW5saW5lIGNvbnN0IExheW91dDo6R2VvbWV0cnkmIExheW91
dFN0YXRlOjpnZW9tZXRyeUZvckxheW91dEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QK
K2lubGluZSBjb25zdCBCb3hHZW9tZXRyeSYgTGF5b3V0U3RhdGU6Omdlb21ldHJ5Rm9yQm94KGNv
bnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAogewotICAgIGlmIChhdXRvKiBkaXNwbGF5Qm94ID0g
bGF5b3V0Qm94LmNhY2hlZERpc3BsYXlCb3hGb3JMYXlvdXRTdGF0ZSgqdGhpcykpCi0gICAgICAg
IHJldHVybiAqZGlzcGxheUJveDsKLSAgICBBU1NFUlQobV9sYXlvdXRUb0Rpc3BsYXlCb3guY29u
dGFpbnMoJmxheW91dEJveCkpOwotICAgIHJldHVybiAqbV9sYXlvdXRUb0Rpc3BsYXlCb3guZ2V0
KCZsYXlvdXRCb3gpOworICAgIGlmIChhdXRvKiBib3hHZW9tZXRyeSA9IGxheW91dEJveC5jYWNo
ZWRHZW9tZXRyeUZvckxheW91dFN0YXRlKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuICpib3hHZW9t
ZXRyeTsKKyAgICBBU1NFUlQobV9sYXlvdXRCb3hUb0JveEdlb21ldHJ5LmNvbnRhaW5zKCZsYXlv
dXRCb3gpKTsKKyAgICByZXR1cm4gKm1fbGF5b3V0Qm94VG9Cb3hHZW9tZXRyeS5nZXQoJmxheW91
dEJveCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0xNTIsMTEgKzE1MiwxMSBAQCBpbmxpbmUg
Ym9vbCBCb3g6OmNhbkNhY2hlRm9yTGF5b3V0U3RhdGUoY29uc3QgTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlKSBjb25zdAogICAgIHJldHVybiAhbV9jYWNoZWRMYXlvdXRTdGF0ZSB8fCBtX2NhY2hl
ZExheW91dFN0YXRlLmdldCgpID09ICZsYXlvdXRTdGF0ZTsKIH0KIAotaW5saW5lIExheW91dDo6
R2VvbWV0cnkqIEJveDo6Y2FjaGVkRGlzcGxheUJveEZvckxheW91dFN0YXRlKGNvbnN0IExheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSkgY29uc3QKK2lubGluZSBCb3hHZW9tZXRyeSogQm94OjpjYWNo
ZWRHZW9tZXRyeUZvckxheW91dFN0YXRlKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkg
Y29uc3QKIHsKICAgICBpZiAobV9jYWNoZWRMYXlvdXRTdGF0ZS5nZXQoKSAhPSAmbGF5b3V0U3Rh
dGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBtX2NhY2hlZERpc3BsYXlC
b3hGb3JMYXlvdXRTdGF0ZS5nZXQoKTsKKyAgICByZXR1cm4gbV9jYWNoZWRHZW9tZXRyeUZvckxh
eW91dFN0YXRlLmdldCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvVmVyaWZpY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmljYXRpb24u
Y3BwCmluZGV4IDNmYmQ2OGY2M2M2YmMzYTZlOGY4NjgyMGE3OGRjYzVlYjllYzZjYmYuLjM2MjU3
MGRmZjU3N2FkOGUyOGFiNTlhYjA5NWZhMDEyY2QxODZhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9WZXJpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9WZXJpZmljYXRpb24uY3BwCkBAIC0zMyw5ICszMyw5IEBACiAjaW5jbHVkZSAiSW5saW5lRm9y
bWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkxh
eW91dEJveC5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5
b3V0Q29udGFpbmVyQm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUg
IkxheW91dEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1aWxkZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKQEAgLTIzMywxMiAr
MjMzLDEyIEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQmxvY2tCb3hJbmZvcm1hdGlv
bklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uCiAgICAgICAgIHN0cmVhbS5uZXh0TGlu
ZSgpOwogICAgIH07CiAKLSAgICBhdXRvIHJlbmRlckJveExpa2VNYXJnaW5Cb3ggPSBbJl0gKGNv
bnN0IGF1dG8mIGRpc3BsYXlCb3gpIHsKKyAgICBhdXRvIHJlbmRlckJveExpa2VNYXJnaW5Cb3gg
PSBbJl0gKGNvbnN0IGF1dG8mIGJveEdlb21ldHJ5KSB7CiAgICAgICAgIGlmIChsYXlvdXRCb3gu
aXNJbml0aWFsQ29udGFpbmluZ0Jsb2NrKCkpCi0gICAgICAgICAgICByZXR1cm4gZGlzcGxheUJv
eC5yZWN0KCk7CisgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkucmVjdCgpOwogCiAgICAg
ICAgIC8vIFByb2R1Y2UgYSBSZW5kZXJCb3ggbWF0Y2hpbmcgbWFyZ2luIGJveC4KLSAgICAgICAg
YXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yTGF5b3V0
Qm94KGxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCk7CisgICAg
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckJv
eChsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOwogICAgICAg
ICBhdXRvIG1hcmdpblN0YXJ0ID0gTGF5b3V0VW5pdCB7IH07CiAgICAgICAgIGF1dG8mIG1hcmdp
blN0YXJ0U3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKS5tYXJnaW5TdGFydCgpOwogICAgICAgICBp
ZiAobWFyZ2luU3RhcnRTdHlsZS5pc0ZpeGVkKCkgfHwgbWFyZ2luU3RhcnRTdHlsZS5pc1BlcmNl
bnQoKSB8fCBtYXJnaW5TdGFydFN0eWxlLmlzQ2FsY3VsYXRlZCgpKQpAQCAtMjQ5LDE1ICsyNDks
MTUgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZO
ZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb24KICAgICAgICAgaWYgKG1hcmdpbkVuZFN0eWxl
LmlzRml4ZWQoKSB8fCBtYXJnaW5FbmRTdHlsZS5pc1BlcmNlbnQoKSB8fCBtYXJnaW5FbmRTdHls
ZS5pc0NhbGN1bGF0ZWQoKSkKICAgICAgICAgICAgIG1hcmdpbkVuZCA9IHZhbHVlRm9yTGVuZ3Ro
KG1hcmdpbkVuZFN0eWxlLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAKLSAgICAgICAgYXV0byBt
YXJnaW5CZWZvcmUgPSBkaXNwbGF5Qm94Lm1hcmdpbkJlZm9yZSgpOwotICAgICAgICBhdXRvIG1h
cmdpbkFmdGVyID0gZGlzcGxheUJveC5tYXJnaW5BZnRlcigpOworICAgICAgICBhdXRvIG1hcmdp
bkJlZm9yZSA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpOworICAgICAgICBhdXRvIG1hcmdp
bkFmdGVyID0gYm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKTsKICAgICAgICAgaWYgKGxheW91dEJv
eC5pc0Jsb2NrTGV2ZWxCb3goKSkgewogICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRl
ID0gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmZvcm1hdHRpbmdT
dGF0ZUZvckJveChsYXlvdXRCb3gpKTsKICAgICAgICAgICAgIGF1dG8gdmVydGljYWxNYXJnaW4g
PSBmb3JtYXR0aW5nU3RhdGUudXNlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCk7CiAgICAgICAg
ICAgICBtYXJnaW5CZWZvcmUgPSB2ZXJ0aWNhbE1hcmdpbi5ub25Db2xsYXBzZWRWYWx1ZXMuYmVm
b3JlOwogICAgICAgICAgICAgbWFyZ2luQWZ0ZXIgPSB2ZXJ0aWNhbE1hcmdpbi5ub25Db2xsYXBz
ZWRWYWx1ZXMuYWZ0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgYXV0byBib3JkZXJCb3ggPSBkaXNw
bGF5Qm94LmJvcmRlckJveCgpOworICAgICAgICBhdXRvIGJvcmRlckJveCA9IGJveEdlb21ldHJ5
LmJvcmRlckJveCgpOwogICAgICAgICByZXR1cm4gUmVjdCB7CiAgICAgICAgICAgICBib3JkZXJC
b3gudG9wKCkgLSBtYXJnaW5CZWZvcmUsCiAgICAgICAgICAgICBib3JkZXJCb3gubGVmdCgpIC0g
bWFyZ2luU3RhcnQsCkBAIC0yNzEsMTUgKzI3MSwxNSBAQCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNt
YXRjaGluZ0Jsb2NrQm94SW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNv
bgogICAgIGlmIChyZW5kZXJlci5pc0luRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgZnJhbWVS
ZWN0Lm1vdmUocmVuZGVyZXIub2Zmc2V0Rm9ySW5GbG93UG9zaXRpb24oKSk7CiAKLSAgICBhdXRv
IGRpc3BsYXlCb3ggPSBHZW9tZXRyeSB7IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yTGF5b3V0Qm94
KGxheW91dEJveCkgfTsKKyAgICBhdXRvIGJveEdlb21ldHJ5ID0gQm94R2VvbWV0cnkgeyBsYXlv
dXRTdGF0ZS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpIH07CiAgICAgaWYgKGxheW91dEJveC5p
c1RhYmxlQm94KCkpIHsKICAgICAgICAgLy8gV2hlbiB0aGUgPHRhYmxlPiBpcyBvdXQtb2YtZmxv
dyBwb3NpdGlvbmVkLCB0aGUgd3JhcHBlciB0YWJsZSBib3ggaGFzIHRoZSBvZmZzZXQKICAgICAg
ICAgLy8gd2hpbGUgdGhlIGFjdHVhbCB0YWJsZSBib3ggaXMgc3RhdGljLCBpbmZsb3cuCi0gICAg
ICAgIGF1dG8mIHRhYmxlV3JhcHBlckRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZv
ckxheW91dEJveChsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwotICAgICAgICBkaXNwbGF5
Qm94Lm1vdmVCeSh0YWJsZVdyYXBwZXJEaXNwbGF5Qm94LnRvcExlZnQoKSk7CisgICAgICAgIGF1
dG8mIHRhYmxlV3JhcHBlckJveEdlb21ldHJ5ID0gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKKyAgICAgICAgYm94R2VvbWV0cnkubW92ZUJ5
KHRhYmxlV3JhcHBlckJveEdlb21ldHJ5LnRvcExlZnQoKSk7CiAgICAgICAgIC8vIFRhYmxlIHdy
YXBwZXIgYm94IGhhcyB0aGUgbWFyZ2luIHZhbHVlcyBmb3IgdGhlIHRhYmxlLgotICAgICAgICBk
aXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4odGFibGVXcmFwcGVyRGlzcGxheUJveC5ob3Jp
em9udGFsTWFyZ2luKCkpOwotICAgICAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHRh
YmxlV3JhcHBlckRpc3BsYXlCb3gudmVydGljYWxNYXJnaW4oKSk7CisgICAgICAgIGJveEdlb21l
dHJ5LnNldEhvcml6b250YWxNYXJnaW4odGFibGVXcmFwcGVyQm94R2VvbWV0cnkuaG9yaXpvbnRh
bE1hcmdpbigpKTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4odGFibGVX
cmFwcGVyQm94R2VvbWV0cnkudmVydGljYWxNYXJnaW4oKSk7CiAgICAgfQogCiAgICAgaWYgKGlz
PFJlbmRlclRhYmxlUm93PihyZW5kZXJlcikgfHwgaXM8UmVuZGVyVGFibGVTZWN0aW9uPihyZW5k
ZXJlcikpIHsKQEAgLTI5MCwyMCArMjkwLDIwIEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNo
aW5nQmxvY2tCb3hJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uCiAg
ICAgICAgIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rpb24+KHJlbmRlcmVyKSAmJiAoZG93bmNhc3Q8
UmVuZGVyVGFibGVTZWN0aW9uPihyZW5kZXJlcikudGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkg
fHwgcmVuZGVyZXIuc3R5bGUoKS5oYXNCb3JkZXIoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIGlmICghYXJlRXNzZW50aWFsbHlFcXVhbChmcmFtZVJlY3QsIGRpc3Bs
YXlCb3gucmVjdCgpKSkgewotICAgICAgICBvdXRwdXRSZWN0KCJmcmFtZUJveCIsIHJlbmRlcmVy
LmZyYW1lUmVjdCgpLCBkaXNwbGF5Qm94LnJlY3QoKSk7CisgICAgaWYgKCFhcmVFc3NlbnRpYWxs
eUVxdWFsKGZyYW1lUmVjdCwgYm94R2VvbWV0cnkucmVjdCgpKSkgeworICAgICAgICBvdXRwdXRS
ZWN0KCJmcmFtZUJveCIsIHJlbmRlcmVyLmZyYW1lUmVjdCgpLCBib3hHZW9tZXRyeS5yZWN0KCkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIWFyZUVzc2VudGlhbGx5
RXF1YWwocmVuZGVyZXIuYm9yZGVyQm94UmVjdCgpLCBkaXNwbGF5Qm94LmJvcmRlckJveCgpKSkg
ewotICAgICAgICBvdXRwdXRSZWN0KCJib3JkZXJCb3giLCByZW5kZXJlci5ib3JkZXJCb3hSZWN0
KCksIGRpc3BsYXlCb3guYm9yZGVyQm94KCkpOworICAgIGlmICghYXJlRXNzZW50aWFsbHlFcXVh
bChyZW5kZXJlci5ib3JkZXJCb3hSZWN0KCksIGJveEdlb21ldHJ5LmJvcmRlckJveCgpKSkgewor
ICAgICAgICBvdXRwdXRSZWN0KCJib3JkZXJCb3giLCByZW5kZXJlci5ib3JkZXJCb3hSZWN0KCks
IGJveEdlb21ldHJ5LmJvcmRlckJveCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgLy8gV2hlbiB0aGUgdGFibGUgcm93IGJvcmRlciBvdmVyZmxvd3MgdGhlIHJvdywgcGFk
ZGluZyBib3ggYmVjb21lcyBuZWdhdGl2ZSBhbmQgY29udGVudCBib3ggaXMgaW5jb3JyZWN0Lgog
ICAgIGF1dG8gc2hvdWxkQ2hlY2tQYWRkaW5nQW5kQ29udGVudEJveCA9ICFpczxSZW5kZXJUYWJs
ZVJvdz4ocmVuZGVyZXIpIHx8IHJlbmRlcmVyLnBhZGRpbmdCb3hSZWN0KCkud2lkdGgoKSA+PSAw
OwotICAgIGlmIChzaG91bGRDaGVja1BhZGRpbmdBbmRDb250ZW50Qm94ICYmICFhcmVFc3NlbnRp
YWxseUVxdWFsKHJlbmRlcmVyLnBhZGRpbmdCb3hSZWN0KCksIGRpc3BsYXlCb3gucGFkZGluZ0Jv
eCgpKSkgewotICAgICAgICBvdXRwdXRSZWN0KCJwYWRkaW5nQm94IiwgcmVuZGVyZXIucGFkZGlu
Z0JveFJlY3QoKSwgZGlzcGxheUJveC5wYWRkaW5nQm94KCkpOworICAgIGlmIChzaG91bGRDaGVj
a1BhZGRpbmdBbmRDb250ZW50Qm94ICYmICFhcmVFc3NlbnRpYWxseUVxdWFsKHJlbmRlcmVyLnBh
ZGRpbmdCb3hSZWN0KCksIGJveEdlb21ldHJ5LnBhZGRpbmdCb3goKSkpIHsKKyAgICAgICAgb3V0
cHV0UmVjdCgicGFkZGluZ0JveCIsIHJlbmRlcmVyLnBhZGRpbmdCb3hSZWN0KCksIGJveEdlb21l
dHJ5LnBhZGRpbmdCb3goKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzE2
LDIxICszMTYsMjEgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0Y2hpbmdCbG9ja0JveEluZm9y
bWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb24KICAgICAgICAgLy8gVGFibGVz
IGhhdmUgMCBjb250ZW50IGJveCBzaXplIGZvciBzb21lIHJlYXNvbiB3aGVuIGJvcmRlciBjb2xs
YXBzaW5nIGlzIG9uLgogICAgICAgICByZXR1cm4gIWlzPFJlbmRlclRhYmxlPihyZW5kZXJlcikg
fHwgIWRvd25jYXN0PFJlbmRlclRhYmxlPihyZW5kZXJlcikuY29sbGFwc2VCb3JkZXJzKCk7CiAg
ICAgfSgpOwotICAgIGlmIChzaG91bGRDaGVja0NvbnRlbnRCb3ggJiYgIWFyZUVzc2VudGlhbGx5
RXF1YWwocmVuZGVyZXIuY29udGVudEJveFJlY3QoKSwgZGlzcGxheUJveC5jb250ZW50Qm94KCkp
KSB7Ci0gICAgICAgIG91dHB1dFJlY3QoImNvbnRlbnRCb3giLCByZW5kZXJlci5jb250ZW50Qm94
UmVjdCgpLCBkaXNwbGF5Qm94LmNvbnRlbnRCb3goKSk7CisgICAgaWYgKHNob3VsZENoZWNrQ29u
dGVudEJveCAmJiAhYXJlRXNzZW50aWFsbHlFcXVhbChyZW5kZXJlci5jb250ZW50Qm94UmVjdCgp
LCBib3hHZW9tZXRyeS5jb250ZW50Qm94KCkpKSB7CisgICAgICAgIG91dHB1dFJlY3QoImNvbnRl
bnRCb3giLCByZW5kZXJlci5jb250ZW50Qm94UmVjdCgpLCBib3hHZW9tZXRyeS5jb250ZW50Qm94
KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIWFyZUVzc2VudGlh
bGx5RXF1YWwocmVuZGVyZXIubWFyZ2luQm94UmVjdCgpLCByZW5kZXJCb3hMaWtlTWFyZ2luQm94
KGRpc3BsYXlCb3gpKSkgeworICAgIGlmICghYXJlRXNzZW50aWFsbHlFcXVhbChyZW5kZXJlci5t
YXJnaW5Cb3hSZWN0KCksIHJlbmRlckJveExpa2VNYXJnaW5Cb3goYm94R2VvbWV0cnkpKSkgewog
ICAgICAgICAvLyBJbiBjZXJ0YWluIGNhc2VzLCBsaWtlIG91dC1vZi1mbG93IGJveGVzIHdpdGgg
bWFyZ2luIGF1dG8sIG1hcmdpbkJveFJlY3QoKSByZXR1cm5zIDAuIEl0J3MgY2xlYXJseSBpbmNv
cnJlY3QsCiAgICAgICAgIC8vIHNvIGxldCdzIGNoZWNrIHRoZSBpbmRpdmlkdWFsIG1hcmdpbiB2
YWx1ZXMgaW5zdGVhZCAoYW5kIGF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IGFsbCBvdGhlciBi
b3hlcyBtYXRjaCkuCi0gICAgICAgIGF1dG8gbWFyZ2luc01hdGNoID0gZGlzcGxheUJveC5tYXJn
aW5CZWZvcmUoKSA9PSByZW5kZXJlci5tYXJnaW5CZWZvcmUoKQotICAgICAgICAgICAgJiYgZGlz
cGxheUJveC5tYXJnaW5BZnRlcigpID09IHJlbmRlcmVyLm1hcmdpbkFmdGVyKCkKLSAgICAgICAg
ICAgICYmIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSA9PSByZW5kZXJlci5tYXJnaW5TdGFydCgp
Ci0gICAgICAgICAgICAmJiBkaXNwbGF5Qm94Lm1hcmdpbkVuZCgpID09IHJlbmRlcmVyLm1hcmdp
bkVuZCgpOworICAgICAgICBhdXRvIG1hcmdpbnNNYXRjaCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJl
Zm9yZSgpID09IHJlbmRlcmVyLm1hcmdpbkJlZm9yZSgpCisgICAgICAgICAgICAmJiBib3hHZW9t
ZXRyeS5tYXJnaW5BZnRlcigpID09IHJlbmRlcmVyLm1hcmdpbkFmdGVyKCkKKyAgICAgICAgICAg
ICYmIGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkgPT0gcmVuZGVyZXIubWFyZ2luU3RhcnQoKQor
ICAgICAgICAgICAgJiYgYm94R2VvbWV0cnkubWFyZ2luRW5kKCkgPT0gcmVuZGVyZXIubWFyZ2lu
RW5kKCk7CiAKICAgICAgICAgaWYgKCFtYXJnaW5zTWF0Y2gpIHsKLSAgICAgICAgICAgIG91dHB1
dFJlY3QoIm1hcmdpbkJveCIsIHJlbmRlcmVyLm1hcmdpbkJveFJlY3QoKSwgcmVuZGVyQm94TGlr
ZU1hcmdpbkJveChkaXNwbGF5Qm94KSk7CisgICAgICAgICAgICBvdXRwdXRSZWN0KCJtYXJnaW5C
b3giLCByZW5kZXJlci5tYXJnaW5Cb3hSZWN0KCksIHJlbmRlckJveExpa2VNYXJnaW5Cb3goYm94
R2VvbWV0cnkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zv
cm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRp
bmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggYzVkOTMzNjkxZWRmNjQ5NGEzOTc4
NzVlYWY1NWI5MDQxYTBjZjk3YS4uMzM0ZGY5OWY2ZjRiNjVkY2I0ZjlmZjM2ZGIwMWIzMTljZjU3
YTVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9C
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxv
Y2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0yMjIsMTkgKzIyMiwx
OSBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENo
aWxkcmVuKGNvbnN0IENvbnRhaW5lckJveCYgYwogICAgICAgICBpZiAoIWNoaWxkQm94LmlzSW5G
bG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGF1dG8gcG9z
aXRpb25PZmZzZXQgPSBnZW9tZXRyeSgpLmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChj
aGlsZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICAgICAgZm9ybWF0dGluZ1N0YXRl
KCkuZGlzcGxheUJveChjaGlsZEJveCkubW92ZShwb3NpdGlvbk9mZnNldCk7CisgICAgICAgIGZv
cm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGNoaWxkQm94KS5tb3ZlKHBvc2l0aW9uT2Zmc2V0
KTsKICAgICB9CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBz
dHJlYW0gPDwgIkVuZDogbW92ZSBpbi1mbG93IHBvc2l0aW9uZWQgY2hpbGRyZW4gLT4gcGFyZW50
OiAiIDw8ICZjb250YWluZXJCb3gpOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVTdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKQogewotICAgIGZvcm1h
dHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KS5zZXRUb3AoZ2VvbWV0cnkoKS5zdGF0
aWNWZXJ0aWNhbFBvc2l0aW9uKGxheW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cykpOworICAg
IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCkuc2V0VG9wKGdlb21ldHJ5
KCkuc3RhdGljVmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMp
KTsKIH0KIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljSG9yaXpv
bnRhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKIHsKLSAgICBmb3JtYXR0aW5nU3RhdGUoKS5k
aXNwbGF5Qm94KGxheW91dEJveCkuc2V0TGVmdChnZW9tZXRyeSgpLnN0YXRpY0hvcml6b250YWxQ
b3NpdGlvbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cykpOworICAgIGZvcm1hdHRp
bmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCkuc2V0TGVmdChnZW9tZXRyeSgpLnN0YXRp
Y0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cykpOwog
fQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0
aW9uRm9yQm94QW5kQW5jZXN0b3JzKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBDb25zdHJh
aW50c1BhaXImIGNvbnN0cmFpbnRzUGFpcikKQEAgLTI1OSwxNyArMjU5LDE3IEBAIHZvaWQgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6cHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRB
bmNlc3RvcnMoY29uc3QKICAgICAgICAgYXV0byB1c2VkTm9uQ29sbGFwc2VkTWFyZ2luID0gVXNl
ZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVl
T3IoMCkgfTsKICAgICAgICAgYXV0byBwcmVjb21wdXRlZE1hcmdpbkJlZm9yZSA9IG1hcmdpbkNv
bGxhcHNlKCkucHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoKmFuY2VzdG9yLCB1c2VkTm9uQ29sbGFw
c2VkTWFyZ2luKTsKIAotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRl
KCkuZGlzcGxheUJveCgqYW5jZXN0b3IpOworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KCphbmNlc3Rvcik7CiAgICAgICAgIGF1dG8gbm9u
Q29sbGFwc2VkVmFsdWVzID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMg
eyBwcmVjb21wdXRlZE1hcmdpbkJlZm9yZS5ub25Db2xsYXBzZWRWYWx1ZSwgeyB9IH07CiAgICAg
ICAgIGF1dG8gY29sbGFwc2VkVmFsdWVzID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpDb2xsYXBzZWRW
YWx1ZXMgeyBwcmVjb21wdXRlZE1hcmdpbkJlZm9yZS5jb2xsYXBzZWRWYWx1ZSwgeyB9LCBmYWxz
ZSB9OwogICAgICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luIHsg
bm9uQ29sbGFwc2VkVmFsdWVzLCBjb2xsYXBzZWRWYWx1ZXMsIHsgcHJlY29tcHV0ZWRNYXJnaW5C
ZWZvcmUucG9zaXRpdmVBbmROZWdhdGl2ZU1hcmdpbkJlZm9yZSwgeyB9IH0gfTsKIAogICAgICAg
ICBmb3JtYXR0aW5nU3RhdGUoKS5zZXRVc2VkVmVydGljYWxNYXJnaW4oKmFuY2VzdG9yLCB2ZXJ0
aWNhbE1hcmdpbik7Ci0gICAgICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyBtYXJn
aW5CZWZvcmUodmVydGljYWxNYXJnaW4pLCBtYXJnaW5BZnRlcih2ZXJ0aWNhbE1hcmdpbikgfSk7
Ci0gICAgICAgIGRpc3BsYXlCb3guc2V0VG9wKHZlcnRpY2FsUG9zaXRpb25XaXRoTWFyZ2luKCph
bmNlc3RvciwgdmVydGljYWxNYXJnaW4sIGNvbnN0cmFpbnRzRm9yQW5jZXN0b3IudmVydGljYWwp
KTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyBtYXJnaW5CZWZvcmUo
dmVydGljYWxNYXJnaW4pLCBtYXJnaW5BZnRlcih2ZXJ0aWNhbE1hcmdpbikgfSk7CisgICAgICAg
IGJveEdlb21ldHJ5LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbigqYW5jZXN0b3Is
IHZlcnRpY2FsTWFyZ2luLCBjb25zdHJhaW50c0ZvckFuY2VzdG9yLnZlcnRpY2FsKSk7CiAjaWYg
QVNTRVJUX0VOQUJMRUQKICAgICAgICAgc2V0UHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoKmFuY2Vz
dG9yLCBwcmVjb21wdXRlZE1hcmdpbkJlZm9yZSk7Ci0gICAgICAgIGRpc3BsYXlCb3guc2V0SGFz
UHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoKTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0SGFzUHJl
Y29tcHV0ZWRNYXJnaW5CZWZvcmUoKTsKICNlbmRpZgogICAgIH0KIH0KQEAgLTI4NCw3ICsyODQs
NyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVQb3NpdGlvblRvQXZvaWRG
bG9hdHMoY29uc3QgRmxvYXRpbmdDb250ZXh0JgogICAgIC8vIEhvd2V2ZXIgYWNjb3JkaW5nIHRv
IHRoZSBCRkMgcnVsZXMsIGF0IHRoaXMgcG9pbnQgb2YgdGhlIGxheW91dCBmbG93IHdlIGRvbid0
IHlldCBoYXZlIGNvbXB1dGVkIHZlcnRpY2FsIHBvc2l0aW9ucyBmb3IgdGhlIGFuY2VzdG9ycy4K
ICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgcHJl
Y29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JCb3hBbmRBbmNlc3RvcnMobGF5b3V0Qm94LCBjb25z
dHJhaW50c1BhaXIpOwotICAgICAgICBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91
dEJveCkuc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChsYXlvdXRC
b3gsIGNvbnN0cmFpbnRzUGFpci5jb250YWluaW5nQmxvY2suaG9yaXpvbnRhbCkpOworICAgICAg
ICBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldFRvcExlZnQoZmxv
YXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQobGF5b3V0Qm94LCBjb25zdHJhaW50c1BhaXIu
Y29udGFpbmluZ0Jsb2NrLmhvcml6b250YWwpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAvLyBOb24tZmxvYXQgcG9zaXRpb25lZCBmbG9hdCBhdm9pZGVycyAoZm9ybWF0dGluZyBjb250
ZXh0IHJvb3RzIGFuZCBjbGVhciBib3hlcykgc2hvdWxkIGJlIGZpbmUgdW5sZXNzIHRoZXJlIGFy
ZSBmbG9hdHMgaW4gdGhpcyBjb250ZXh0LgpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEZsb2F0cyhjb25zdCBGbG9h
dGluZ0NvbnRleHQmCiAgICAgICAgIHJldHVybiBjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckZs
b2F0Q2xlYXIoZmxvYXRpbmdDb250ZXh0LCBsYXlvdXRCb3gpOwogCiAgICAgQVNTRVJUKGxheW91
dEJveC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwotICAgIGZvcm1hdHRpbmdTdGF0
ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3Np
dGlvbkZvck5vbkZsb2F0aW5nRmxvYXRBdm9pZGVyKGxheW91dEJveCwgY29uc3RyYWludHNQYWly
LmNvbnRhaW5pbmdCbG9jay5ob3Jpem9udGFsKSk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCkuYm94
R2VvbWV0cnkobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3NpdGlvbkZv
ck5vbkZsb2F0aW5nRmxvYXRBdm9pZGVyKGxheW91dEJveCwgY29uc3RyYWludHNQYWlyLmNvbnRh
aW5pbmdCbG9jay5ob3Jpem9udGFsKSk7CiB9CiAKIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JGbG9hdENsZWFyKGNvbnN0IEZsb2F0aW5nQ29u
dGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKQEAgLTMwOSwxMSAr
MzA5LDExIEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVZlcnRpY2FsUG9z
aXRpb25Gb3JGbG9hdENsZWFyKGNvbnN0IEZsb2F0aW5nCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChs
YXlvdXRCb3gpOwotICAgIEFTU0VSVCgqdmVydGljYWxQb3NpdGlvbkFuZENsZWFyYW5jZS5wb3Np
dGlvbiA+PSBkaXNwbGF5Qm94LnRvcCgpKTsKLSAgICBkaXNwbGF5Qm94LnNldFRvcCgqdmVydGlj
YWxQb3NpdGlvbkFuZENsZWFyYW5jZS5wb3NpdGlvbik7CisgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpOworICAgIEFTU0VSVCgq
dmVydGljYWxQb3NpdGlvbkFuZENsZWFyYW5jZS5wb3NpdGlvbiA+PSBib3hHZW9tZXRyeS50b3Ao
KSk7CisgICAgYm94R2VvbWV0cnkuc2V0VG9wKCp2ZXJ0aWNhbFBvc2l0aW9uQW5kQ2xlYXJhbmNl
LnBvc2l0aW9uKTsKICAgICBpZiAodmVydGljYWxQb3NpdGlvbkFuZENsZWFyYW5jZS5jbGVhcmFu
Y2UpCi0gICAgICAgIGRpc3BsYXlCb3guc2V0SGFzQ2xlYXJhbmNlKCk7CisgICAgICAgIGJveEdl
b21ldHJ5LnNldEhhc0NsZWFyYW5jZSgpOwogICAgIC8vIEZJWE1FOiBSZXNldCB0aGUgbWFyZ2lu
IHZhbHVlcyBvbiB0aGUgYW5jZXN0b3JzL3ByZXZpb3VzIHNpYmxpbmdzIG5vdyB0aGF0IHRoZSBm
bG9hdCBhdm9pZGVyIHdpdGggY2xlYXJhbmNlIGRvZXMgbm90IG1hcmdpbiBjb2xsYXBzZSBhbnlt
b3JlLgogfQogCkBAIC0zMjUsOSArMzI1LDkgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGkKICAg
ICAgICAgYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIgPSB1c2VkQXZhaWxhYmxlV2lkdGhGb3JG
bG9hdEF2b2lkZXIoZmxvYXRpbmdDb250ZXh0LCBsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpcik7
CiAgICAgfQogICAgIGF1dG8gY29udGVudFdpZHRoQW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5jb21w
dXRlZFdpZHRoQW5kTWFyZ2luKGxheW91dEJveCwgY29uc3RyYWludHNQYWlyLmNvbnRhaW5pbmdC
bG9jay5ob3Jpem9udGFsLCBhdmFpbGFibGVXaWR0aEZsb2F0QXZvaWRlcik7Ci0gICAgYXV0byYg
ZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKLSAg
ICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50V2lkdGhBbmRNYXJnaW4uY29u
dGVudFdpZHRoKTsKLSAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyBjb250ZW50
V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCwgY29udGVudFdpZHRoQW5kTWFyZ2luLnVz
ZWRNYXJnaW4uZW5kIH0pOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRl
KCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KTsKKyAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94
V2lkdGgoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCk7CisgICAgYm94R2VvbWV0
cnkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2lu
LnN0YXJ0LCBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5lbmQgfSk7CiB9CiAKIHZv
aWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBC
b3gmIGxheW91dEJveCwgY29uc3QgQ29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50JiBjb25zdHJh
aW50cykKQEAgLTM4MywxMyArMzgzLDEzIEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QKICAgICAg
ICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKICAgICB9CiAjZW5kaWYKLSAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpOwor
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5
b3V0Qm94KTsKICAgICBpZiAoIWxheW91dEJveC5pc0Zsb2F0QXZvaWRlcigpKSB7CiAgICAgICAg
IC8vIEZsb2F0IGF2b2lkZXJzIGhhdmUgcHJlLWNvbXB1dGVkIHZlcnRpY2FsIG1hcmdpbnMuCi0g
ICAgICAgIGRpc3BsYXlCb3guc2V0VG9wKHZlcnRpY2FsUG9zaXRpb25XaXRoTWFyZ2luKGxheW91
dEJveCwgdmVydGljYWxNYXJnaW4sIGNvbnN0cmFpbnRzLnZlcnRpY2FsKSk7CisgICAgICAgIGJv
eEdlb21ldHJ5LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbihsYXlvdXRCb3gsIHZl
cnRpY2FsTWFyZ2luLCBjb25zdHJhaW50cy52ZXJ0aWNhbCkpOwogICAgIH0KLSAgICBkaXNwbGF5
Qm94LnNldENvbnRlbnRCb3hIZWlnaHQoY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVp
Z2h0KTsKLSAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgbWFyZ2luQmVmb3JlKHZl
cnRpY2FsTWFyZ2luKSwgbWFyZ2luQWZ0ZXIodmVydGljYWxNYXJnaW4pIH0pOworICAgIGJveEdl
b21ldHJ5LnNldENvbnRlbnRCb3hIZWlnaHQoY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50
SGVpZ2h0KTsKKyAgICBib3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih7IG1hcmdpbkJlZm9y
ZSh2ZXJ0aWNhbE1hcmdpbiksIG1hcmdpbkFmdGVyKHZlcnRpY2FsTWFyZ2luKSB9KTsKICAgICAv
LyBBZGp1c3QgdGhlIHByZXZpb3VzIHNpYmxpbmcncyBtYXJnaW4gYm90dG9tIG5vdyB0aGF0IHRo
aXMgYm94J3MgdmVydGljYWwgbWFyZ2luIGlzIGNvbXB1dGVkLgogICAgIE1hcmdpbkNvbGxhcHNl
Ojp1cGRhdGVNYXJnaW5BZnRlckZvclByZXZpb3VzU2libGluZygqdGhpcywgbWFyZ2luQ29sbGFw
c2UsIGxheW91dEJveCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxv
Y2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKaW5kZXggNDE4YjJjYmFhNDQ3NjViYWEyZjY1Mzk4MThkMzg3NjI0NzVlMzBmZi4u
YzM4N2U2MzMzZjUyOWY3YWJmOGUwZDcxNTFhYjA2YWFlMzBiZDhmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtMzEsOSArMzEsOSBAQAogI2lu
Y2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJMYXlv
dXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dENoaWxkSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJMYXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNs
dWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVw
bGFjZWRCb3guaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC05Niw4ICs5Niw4IEBAIENvbnRl
bnRIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxv
d05vblJlcGxhY2VkSGVpZ2h0CiAgICAgICAgIHdoaWxlIChpbkZsb3dDaGlsZCAmJiBmb3JtYXR0
aW5nQ29udGV4dCgpLm1hcmdpbkNvbGxhcHNlKCkubWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBh
cmVudE1hcmdpbkFmdGVyKCppbkZsb3dDaGlsZCkpCiAgICAgICAgICAgICBpbkZsb3dDaGlsZCA9
IGluRmxvd0NoaWxkLT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKICAgICAgICAgaWYgKGluRmxv
d0NoaWxkKSB7Ci0gICAgICAgICAgICBhdXRvJiBpbkZsb3dEaXNwbGF5Qm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCppbkZsb3dDaGlsZCk7Ci0gICAgICAg
ICAgICByZXR1cm4geyBpbkZsb3dEaXNwbGF5Qm94R2VvbWV0cnkudG9wKCkgKyBpbkZsb3dEaXNw
bGF5Qm94R2VvbWV0cnkuYm9yZGVyQm94KCkuaGVpZ2h0KCkgLSBib3JkZXJBbmRQYWRkaW5nVG9w
LCBub25Db2xsYXBzZWRNYXJnaW4gfTsKKyAgICAgICAgICAgIGF1dG8mIGluRmxvd0JveEdlb21l
dHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqaW5GbG93Q2hpbGQpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgaW5GbG93Qm94R2VvbWV0cnkudG9wKCkgKyBpbkZsb3dCb3hH
ZW9tZXRyeS5ib3JkZXJCb3goKS5oZWlnaHQoKSAtIGJvcmRlckFuZFBhZGRpbmdUb3AsIG5vbkNv
bGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKICAgICAgICAgLy8gNC4gemVybywgb3RoZXJ3
aXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Js
b2NrRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Js
b2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAppbmRleCA1ZTc5
MWY5ZmQxNjI4OGY4YzJkMThkN2Y0MzIxZmFmNzkzYzNkMjU3Li5hZDlkNmNiNDFjYmFmMDgyYzBi
YzYwOWIzNGQyNzI2MTQwODhiZTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
YmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4
dFF1aXJrcy5jcHAKQEAgLTMwLDggKzMwLDggQEAKIAogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGlu
Z1N0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2Vv
bWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXJCb3guaCIKLSNpbmNsdWRlICJMYXlv
dXRHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIK
ICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcAppbmRl
eCA1ZmZlNGEyNWMwYTBiYzk3MWZmYzkzNDJjMTM4NDc0Njc2YjcwOGRhLi44OTljYTk3YzU1NTYw
ZGExYWM3YTk1YTMzYWE1NjBiYjU3ZTFmOWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAK
QEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xs
YXBzZTo6aGFzQ2xlYXJhbmNlKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgLy8gRklYTUU6IHByZWNvbXB1dGVkVmVydGljYWxQb3NpdGlvbkZvckZvcm1h
dHRpbmdSb290IGxvZ2ljIGVuZHMgdXAgY2FsbGluZyBpbnRvIHRoaXMgZnVuY3Rpb24gd2hlbiB0
aGUgbGF5b3V0Qm94IChmaXJzdCBpbmZsb3cgY2hpbGQpIGhhcwogICAgIC8vIG5vdCBiZWVuIGxh
aWQgb3V0LgotICAgIGlmICghbGF5b3V0U3RhdGUoKS5oYXNEaXNwbGF5Qm94KGxheW91dEJveCkp
CisgICAgaWYgKCFsYXlvdXRTdGF0ZSgpLmhhc0JveEdlb21ldHJ5KGxheW91dEJveCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveChsYXlvdXRCb3gpLmhhc0NsZWFyYW5jZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVy
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tm
b3JtYXR0aW5nL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcAppbmRleCA2NjM4YWU1MzMwNjVjZGE0NzA0Njc4OWZlYjMxNTE0MGY2OTQzZjE1Li5lYjYw
ZDExMzJjMzE5OWFjMjE2ZTMwODNkMjIwNTM5OTRhZTUxZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxv
Y2tmb3JtYXR0aW5nL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0LmNwcApAQCAtMzAsOSArMzAsOSBAQAogCiAjaW5jbHVkZSAiQmxvY2tGb3JtYXR0aW5nU3Rh
dGUuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb25TdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEJv
eEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgogI2luY2x1ZGUg
IkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKICNpbmNsdWRlICJUYWJsZUZvcm1hdHRp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiVGFibGVGb3JtYXR0aW5nU3RhdGUuaCIKQEAgLTEzNiw5
ICsxMzYsOSBAQCB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVCb3JkZXJBbmRQYWRkaW5nRm9yVGFibGVCb3goY29ucwogICAgIGF1dG8gY29sbGFwc2VkQm9y
ZGVyID0gRWRnZXMgeyB7IGxlZnRCb3JkZXIsIHJpZ2h0Qm9yZGVyIH0sIHsgdG9wQm9yZGVyLCBi
b3R0b21Cb3JkZXIgfSB9OwogICAgIGdyaWQuc2V0Q29sbGFwc2VkQm9yZGVyKGNvbGxhcHNlZEJv
cmRlcik7CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxh
eUJveCh0YWJsZUJveCk7Ci0gICAgZGlzcGxheUJveC5zZXRCb3JkZXIoY29sbGFwc2VkQm9yZGVy
IC8gMik7Ci0gICAgZGlzcGxheUJveC5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQYWRk
aW5nKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKSk7CisgICAg
YXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeSh0YWJsZUJv
eCk7CisgICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKGNvbGxhcHNlZEJvcmRlciAvIDIpOworICAg
IGJveEdlb21ldHJ5LnNldFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcodGFibGVC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpKTsKIH0KIAogdm9pZCBUYWJs
ZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW5Gb3JU
YWJsZUJveChjb25zdCBDb250YWluZXJCb3gmIHRhYmxlQm94LCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKQEAgLTIwNyw5ICsyMDcsOSBAQCB2b2lk
IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdp
bkZvclRhYmxlQm94KGNvbnN0CiAKICAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGdl
b21ldHJ5LmluRmxvd1dpZHRoQW5kTWFyZ2luKHRhYmxlQm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMsIE92ZXJyaWRlSG9yaXpvbnRhbFZhbHVlcyB7IHVzZWRXaWR0aCwgeyB9IH0pOwogCi0gICAg
YXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3godGFibGVCb3gp
OwotICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRXaWR0aEFuZE1hcmdp
bi5jb250ZW50V2lkdGgpOwotICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IGNv
bnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLnN0YXJ0LCBjb250ZW50V2lkdGhBbmRNYXJn
aW4udXNlZE1hcmdpbi5lbmQgfSk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
U3RhdGUoKS5ib3hHZW9tZXRyeSh0YWJsZUJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVu
dEJveFdpZHRoKGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpOworICAgIGJveEdl
b21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1h
cmdpbi5zdGFydCwgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uZW5kIH0pOwogfQog
CiB2b2lkIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRB
bmRNYXJnaW5Gb3JUYWJsZUJveChjb25zdCBDb250YWluZXJCb3gmIHRhYmxlQm94LCBjb25zdCBD
b25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmIGNvbnN0cmFpbnRzKQpAQCAtMjI0LDEwICsyMjQs
MTAgQEAgdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVp
Z2h0QW5kTWFyZ2luRm9yVGFibGVCb3goY29uc3QKICAgICAvLyBDYWNoZSB0aGUgY29tcHV0ZWQg
cG9zaXRpdmUgYW5kIG5lZ2F0aXZlIG1hcmdpbiB2YWx1ZSBwYWlyLgogICAgIGZvcm1hdHRpbmdT
dGF0ZSgpLnNldFVzZWRWZXJ0aWNhbE1hcmdpbih0YWJsZUJveCwgdmVydGljYWxNYXJnaW4pOwog
Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3godGFi
bGVCb3gpOwotICAgIGRpc3BsYXlCb3guc2V0VG9wKHZlcnRpY2FsUG9zaXRpb25XaXRoTWFyZ2lu
KHRhYmxlQm94LCB2ZXJ0aWNhbE1hcmdpbiwgY29uc3RyYWludHMudmVydGljYWwpKTsKLSAgICBk
aXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWln
aHQpOwotICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyBtYXJnaW5CZWZvcmUodmVy
dGljYWxNYXJnaW4pLCBtYXJnaW5BZnRlcih2ZXJ0aWNhbE1hcmdpbikgfSk7CisgICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeSh0YWJsZUJveCk7Cisg
ICAgYm94R2VvbWV0cnkuc2V0VG9wKHZlcnRpY2FsUG9zaXRpb25XaXRoTWFyZ2luKHRhYmxlQm94
LCB2ZXJ0aWNhbE1hcmdpbiwgY29uc3RyYWludHMudmVydGljYWwpKTsKKyAgICBib3hHZW9tZXRy
eS5zZXRDb250ZW50Qm94SGVpZ2h0KGhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KTsKKyAg
ICBib3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih7IG1hcmdpbkJlZm9yZSh2ZXJ0aWNhbE1h
cmdpbiksIG1hcmdpbkFmdGVyKHZlcnRpY2FsTWFyZ2luKSB9KTsKICAgICAvLyBBZGp1c3QgdGhl
IHByZXZpb3VzIHNpYmxpbmcncyBtYXJnaW4gYm90dG9tIG5vdyB0aGF0IHRoaXMgYm94J3MgdmVy
dGljYWwgbWFyZ2luIGlzIGNvbXB1dGVkLgogICAgIE1hcmdpbkNvbGxhcHNlOjp1cGRhdGVNYXJn
aW5BZnRlckZvclByZXZpb3VzU2libGluZygqdGhpcywgbWFyZ2luQ29sbGFwc2UsIHRhYmxlQm94
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5L0Rpc3BsYXlM
YXllckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXkvRGlzcGxh
eUxheWVyQ29udHJvbGxlci5jcHAKaW5kZXggNGJiM2EwN2FjY2VmMjQyZTY5MzU2M2YzMjc1NmU5
MjI5YzgzY2Y0NC4uNjRjYTQ4MGM4NDAzMDc3N2IxZWU5ZmVmYTlmNzQ3ZjEzMTdjNTcxMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXkvRGlzcGxheUxheWVyQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXkvRGlzcGxheUxheWVy
Q29udHJvbGxlci5jcHAKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlICJEaXNwbGF5Vmlldy5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
TGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC04MywxMCArODMsMTAgQEAgdm9pZCBMYXll
ckNvbnRyb2xsZXI6OnByZXBhcmVGb3JEaXNwbGF5KGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlKQogICAgIGlmICghcm9vdExheW91dEJveC5maXJzdENoaWxkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEFTU0VSVChsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KHJvb3RM
YXlvdXRCb3gpKTsKKyAgICBBU1NFUlQobGF5b3V0U3RhdGUuaGFzQm94R2VvbWV0cnkocm9vdExh
eW91dEJveCkpOwogCi0gICAgYXV0byB2aWV3U2l6ZSA9IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9y
TGF5b3V0Qm94KHJvb3RMYXlvdXRCb3gpLnNpemUoKTsKLSAgICBhdXRvIGNvbnRlbnRTaXplID0g
bGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JMYXlvdXRCb3goKnJvb3RMYXlvdXRCb3guZmlyc3RDaGls
ZCgpKS5zaXplKCk7CisgICAgYXV0byB2aWV3U2l6ZSA9IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9y
Qm94KHJvb3RMYXlvdXRCb3gpLnNpemUoKTsKKyAgICBhdXRvIGNvbnRlbnRTaXplID0gbGF5b3V0
U3RhdGUuZ2VvbWV0cnlGb3JCb3goKnJvb3RMYXlvdXRCb3guZmlyc3RDaGlsZCgpKS5zaXplKCk7
CiAgICAgCiAgICAgLy8gRklYTUU6IFVzaW5nIHRoZSBmaXJzdENoaWxkKCkgc2l6ZSB3b24ndCBi
ZSBjb3JyZWN0IHVudGlsIHdlIGNvbXB1dGUgb3ZlcmZsb3cgY29ycmVjdGx5LAogICAgIGNvbnRl
bnRTaXplLmNsYW1wVG9NaW5pbXVtU2l6ZSh2aWV3U2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheVBhaW50ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlQYWludGVyLmNwcAppbmRleCAyYTI5YzQ0
MDQ0MTRjYzFmYzkwNTExZmI2Yzg0NWQ5OWFiNjdlZTcxLi5hZWFhZDhmNTRhZTFiY2EyN2YxY2Fh
OGUxOGNjZGYyZWI5ZTlhNTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlz
cGxheXRyZWUvRGlzcGxheVBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9k
aXNwbGF5dHJlZS9EaXNwbGF5UGFpbnRlci5jcHAKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRl
ICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0SXRlbS5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2lu
Y2x1ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgogI2luY2x1ZGUgIkxh
eW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTQ1LDEwICs0NSwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheSB7CiAKIC8vIEZJWE1FOiBN
b3ZlIHRvIGRpc3BsYXkgYm94Lgotc3RhdGljIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9uKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0OjpHZW9tZXRyeSYgYWJzb2x1dGVEaXNw
bGF5Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGJvb2wgbmVlZHNNYXJnaW5QYWludGlu
ZykKK3N0YXRpYyB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IExheW91dDo6Qm94R2VvbWV0cnkmIGFic29sdXRlQm94R2VvbWV0cnksIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgYm9vbCBuZWVkc01hcmdpblBhaW50aW5nKQogewotICAgIGF1
dG8gZGVjb3JhdGlvbkJveFRvcExlZnQgPSBuZWVkc01hcmdpblBhaW50aW5nID8gYWJzb2x1dGVE
aXNwbGF5Qm94LnJlY3RXaXRoTWFyZ2luKCkudG9wTGVmdCgpIDogYWJzb2x1dGVEaXNwbGF5Qm94
LnRvcExlZnQoKTsKLSAgICBhdXRvIGRlY29yYXRpb25Cb3hTaXplID0gbmVlZHNNYXJnaW5QYWlu
dGluZyA/IGFic29sdXRlRGlzcGxheUJveC5yZWN0V2l0aE1hcmdpbigpLnNpemUoKSA6IExheW91
dFNpemUoYWJzb2x1dGVEaXNwbGF5Qm94LmJvcmRlckJveFdpZHRoKCksIGFic29sdXRlRGlzcGxh
eUJveC5ib3JkZXJCb3hIZWlnaHQoKSk7CisgICAgYXV0byBkZWNvcmF0aW9uQm94VG9wTGVmdCA9
IG5lZWRzTWFyZ2luUGFpbnRpbmcgPyBhYnNvbHV0ZUJveEdlb21ldHJ5LnJlY3RXaXRoTWFyZ2lu
KCkudG9wTGVmdCgpIDogYWJzb2x1dGVCb3hHZW9tZXRyeS50b3BMZWZ0KCk7CisgICAgYXV0byBk
ZWNvcmF0aW9uQm94U2l6ZSA9IG5lZWRzTWFyZ2luUGFpbnRpbmcgPyBhYnNvbHV0ZUJveEdlb21l
dHJ5LnJlY3RXaXRoTWFyZ2luKCkuc2l6ZSgpIDogTGF5b3V0U2l6ZShhYnNvbHV0ZUJveEdlb21l
dHJ5LmJvcmRlckJveFdpZHRoKCksIGFic29sdXRlQm94R2VvbWV0cnkuYm9yZGVyQm94SGVpZ2h0
KCkpOwogICAgIC8vIEJhY2tncm91bmQgY29sb3IKICAgICBpZiAoc3R5bGUuaGFzQmFja2dyb3Vu
ZCgpKSB7CiAgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoeyBkZWNvcmF0aW9uQm94VG9wTGVmdCwg
ZGVjb3JhdGlvbkJveFNpemUgfSwgc3R5bGUuYmFja2dyb3VuZENvbG9yKCkpOwpAQCAtMTQyLDEz
ICsxNDIsMTMgQEAgc3RhdGljIHZvaWQgcGFpbnRJbmxpbmVDb250ZW50KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgTGF5b3V0UG9pbnQgYWJzb2x1dGVPZmYKICAgICB9CiB9CiAKLUxheW91dDo6
R2VvbWV0cnkgUGFpbnRlcjo6YWJzb2x1dGVEaXNwbGF5Qm94KGNvbnN0IExheW91dDo6TGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBMYXlvdXQ6OkJveCYgbGF5b3V0Qm94VG9QYWludCkK
K0xheW91dDo6Qm94R2VvbWV0cnkgUGFpbnRlcjo6YWJzb2x1dGVCb3hHZW9tZXRyeShjb25zdCBM
YXlvdXQ6OkxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgTGF5b3V0OjpCb3gmIGxheW91
dEJveFRvUGFpbnQpCiB7CiAgICAgLy8gU2hvdWxkIG5ldmVyIHJlYWxseSBoYXBwZW4gYnV0IHRh
YmxlIGNvZGUgaXMgd2F5IHRvbyBpbmNvbXBsZXRlLgotICAgIGlmICghbGF5b3V0U3RhdGUuaGFz
RGlzcGxheUJveChsYXlvdXRCb3hUb1BhaW50KSkKKyAgICBpZiAoIWxheW91dFN0YXRlLmhhc0Jv
eEdlb21ldHJ5KGxheW91dEJveFRvUGFpbnQpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIGlm
IChpczxMYXlvdXQ6OkluaXRpYWxDb250YWluaW5nQmxvY2s+KGxheW91dEJveFRvUGFpbnQpKQot
ICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JMYXlvdXRCb3gobGF5b3V0Qm94
VG9QYWludCk7CisgICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckJveChsYXlv
dXRCb3hUb1BhaW50KTsKIAogICAgIGF1dG8gcGFpbnRDb250YWluZXIgPSBbJl0gKGNvbnN0IGF1
dG8mIGxheW91dEJveCkgewogICAgICAgICBpZiAobGF5b3V0Qm94LmlzVGFibGVDZWxsKCkpIHsK
QEAgLTE1OCw5ICsxNTgsOSBAQCBMYXlvdXQ6Okdlb21ldHJ5IFBhaW50ZXI6OmFic29sdXRlRGlz
cGxheUJveChjb25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJiBsYXlvdXRTdAogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiAmbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwogICAgIH07Ci0gICAg
YXV0byBhYnNvbHV0ZUJveCA9IExheW91dDo6R2VvbWV0cnkgeyBsYXlvdXRTdGF0ZS5nZW9tZXRy
eUZvckxheW91dEJveChsYXlvdXRCb3hUb1BhaW50KSB9OworICAgIGF1dG8gYWJzb2x1dGVCb3gg
PSBMYXlvdXQ6OkJveEdlb21ldHJ5IHsgbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94VG9QYWludCkgfTsKICAgICBmb3IgKGF1dG8qIGNvbnRhaW5lciA9IHBhaW50Q29udGFpbmVy
KGxheW91dEJveFRvUGFpbnQpOyAhaXM8TGF5b3V0OjpJbml0aWFsQ29udGFpbmluZ0Jsb2NrPihj
b250YWluZXIpOyBjb250YWluZXIgPSBwYWludENvbnRhaW5lcigqY29udGFpbmVyKSkKLSAgICAg
ICAgYWJzb2x1dGVCb3gubW92ZUJ5KGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yTGF5b3V0Qm94KCpj
b250YWluZXIpLnRvcExlZnQoKSk7CisgICAgICAgIGFic29sdXRlQm94Lm1vdmVCeShsYXlvdXRT
dGF0ZS5nZW9tZXRyeUZvckJveCgqY29udGFpbmVyKS50b3BMZWZ0KCkpOwogICAgIHJldHVybiBh
YnNvbHV0ZUJveDsKIH0KIApAQCAtMTc3LDIyICsxNzcsMjIgQEAgc3RhdGljIHZvaWQgcGFpbnRT
dWJ0cmVlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0
ZSYgbGEKICAgICBhdXRvIHBhaW50ID0gWyZdIChhdXRvJiBsYXlvdXRCb3gpIHsKICAgICAgICAg
aWYgKGxheW91dEJveC5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWaXNpYmlsaXR5OjpWaXNpYmxl
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIWxheW91dFN0YXRlLmhhc0Rpc3Bs
YXlCb3gobGF5b3V0Qm94KSkKKyAgICAgICAgaWYgKCFsYXlvdXRTdGF0ZS5oYXNCb3hHZW9tZXRy
eShsYXlvdXRCb3gpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvIGFic29sdXRl
RGlzcGxheUJveCA9IFBhaW50ZXI6OmFic29sdXRlRGlzcGxheUJveChsYXlvdXRTdGF0ZSwgbGF5
b3V0Qm94KTsKLSAgICAgICAgaWYgKCFkaXJ0eVJlY3QuaW50ZXJzZWN0cyhzbmFwcGVkSW50UmVj
dChhYnNvbHV0ZURpc3BsYXlCb3gucmVjdCgpKSkpCisgICAgICAgIGF1dG8gYWJzb2x1dGVCb3hH
ZW9tZXRyeSA9IFBhaW50ZXI6OmFic29sdXRlQm94R2VvbWV0cnkobGF5b3V0U3RhdGUsIGxheW91
dEJveCk7CisgICAgICAgIGlmICghZGlydHlSZWN0LmludGVyc2VjdHMoc25hcHBlZEludFJlY3Qo
YWJzb2x1dGVCb3hHZW9tZXRyeS5yZWN0KCkpKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBpZiAocGFpbnRQaGFzZSA9PSBQYWludFBoYXNlOjpEZWNvcmF0aW9uKSB7CiAgICAgICAg
ICAgICBpZiAobGF5b3V0Qm94LmlzQW5vbnltb3VzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9uKGNvbnRleHQsIGFic29sdXRlRGlzcGxh
eUJveCwgbGF5b3V0Qm94LnN0eWxlKCksIGxheW91dEJveC5pc0JvZHlCb3goKSk7CisgICAgICAg
ICAgICBwYWludEJveERlY29yYXRpb24oY29udGV4dCwgYWJzb2x1dGVCb3hHZW9tZXRyeSwgbGF5
b3V0Qm94LnN0eWxlKCksIGxheW91dEJveC5pc0JvZHlCb3goKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gT25seSBpbmxpbmUgY29udGVudCBmb3Igbm93Lgog
ICAgICAgICBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQo
KSkgewogICAgICAgICAgICAgYXV0byYgY29udGFpbmVyQm94ID0gZG93bmNhc3Q8TGF5b3V0OjpD
b250YWluZXJCb3g+KGxheW91dEJveCk7Ci0gICAgICAgICAgICBwYWludElubGluZUNvbnRlbnQo
Y29udGV4dCwgYWJzb2x1dGVEaXNwbGF5Qm94LnRvcExlZnQoKSwgbGF5b3V0U3RhdGUuZXN0YWJs
aXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoY29udGFpbmVyQm94KSk7CisgICAgICAgICAgICBw
YWludElubGluZUNvbnRlbnQoY29udGV4dCwgYWJzb2x1dGVCb3hHZW9tZXRyeS50b3BMZWZ0KCks
IGxheW91dFN0YXRlLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5lckJv
eCkpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMjM1LDcgKzIzNSw3IEBAIHN0YXRpYyBMYXlv
dXRSZWN0IGNvbGxlY3RQYWludFJvb3RzQW5kQ29udGVudFJlY3QoY29uc3QgTGF5b3V0OjpMYXlv
dXRTdGF0ZSYgbGF5CiAgICAgICAgIHBvc2l0aXZlWk9yZGVyTGlzdC5hcHBlbmQoJmxheW91dEJv
eCk7CiAgICAgfTsKIAotICAgIGF1dG8gY29udGVudFJlY3QgPSBMYXlvdXRSZWN0IHsgbGF5b3V0
U3RhdGUuZ2VvbWV0cnlGb3JMYXlvdXRCb3gocm9vdExheW91dEJveCkucmVjdCgpIH07CisgICAg
YXV0byBjb250ZW50UmVjdCA9IExheW91dFJlY3QgeyBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckJv
eChyb290TGF5b3V0Qm94KS5yZWN0KCkgfTsKIAogICAgIC8vIEluaXRpYWwgQkZDIGlzIGFsd2F5
cyBhIHBhaW50IHJvb3QuCiAgICAgYXBwZW5kUGFpbnRSb290KHJvb3RMYXlvdXRCb3gpOwpAQCAt
MjQ4LDggKzI0OCw4IEBAIHN0YXRpYyBMYXlvdXRSZWN0IGNvbGxlY3RQYWludFJvb3RzQW5kQ29u
dGVudFJlY3QoY29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0ZSYgbGF5CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBpZiAoaXNQYWludFJvb3RDYW5kaWRhdGUobGF5b3V0Qm94KSkK
ICAgICAgICAgICAgICAgICBhcHBlbmRQYWludFJvb3QobGF5b3V0Qm94KTsKLSAgICAgICAgICAg
IGlmIChsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGxheW91dEJveCkpCi0gICAgICAgICAgICAg
ICAgY29udGVudFJlY3QudW5pdGVJZk5vblplcm8oUGFpbnRlcjo6YWJzb2x1dGVEaXNwbGF5Qm94
KGxheW91dFN0YXRlLCBsYXlvdXRCb3gpLnJlY3QoKSk7CisgICAgICAgICAgICBpZiAobGF5b3V0
U3RhdGUuaGFzQm94R2VvbWV0cnkobGF5b3V0Qm94KSkKKyAgICAgICAgICAgICAgICBjb250ZW50
UmVjdC51bml0ZUlmTm9uWmVybyhQYWludGVyOjphYnNvbHV0ZUJveEdlb21ldHJ5KGxheW91dFN0
YXRlLCBsYXlvdXRCb3gpLnJlY3QoKSk7CiAgICAgICAgICAgICBpZiAoIWlzPExheW91dDo6Q29u
dGFpbmVyQm94PihsYXlvdXRCb3gpIHx8ICFkb3duY2FzdDxMYXlvdXQ6OkNvbnRhaW5lckJveD4o
bGF5b3V0Qm94KS5oYXNDaGlsZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgbGF5b3V0Qm94TGlzdC5hcHBlbmQoZG93bmNhc3Q8TGF5b3V0OjpDb250YWluZXJCb3g+KGxh
eW91dEJveCkuZmlyc3RDaGlsZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rp
c3BsYXl0cmVlL0Rpc3BsYXlQYWludGVyLmgKaW5kZXggMWJlNWVmYzllYmJmMWM2ZDBkNTJlYzJm
ZDJhYWM3YWZjMTJhYmQyMS4uMDZlNmZmMmU1YWVjN2IwMzFmZjIzNWNiY2Q2ZGYzZjRiMzJmMzVj
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlQ
YWludGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlQ
YWludGVyLmgKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3Mg
SW50UmVjdDsKIAogbmFtZXNwYWNlIExheW91dCB7Ci1jbGFzcyBHZW9tZXRyeTsKK2NsYXNzIEJv
eEdlb21ldHJ5OwogY2xhc3MgTGF5b3V0U3RhdGU7CiB9CiAKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHBhaW50SW5saW5lRmxvdyhjb25zdCBMYXlvdXQ6OkxheW91
dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBGSVhNRTogTW92ZSB0byBkaXNw
bGF5IGJveC4KLSAgICBzdGF0aWMgTGF5b3V0OjpHZW9tZXRyeSBhYnNvbHV0ZURpc3BsYXlCb3go
Y29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0ZSYsIGNvbnN0IExheW91dDo6Qm94Jik7CisgICAgc3Rh
dGljIExheW91dDo6Qm94R2VvbWV0cnkgYWJzb2x1dGVCb3hHZW9tZXRyeShjb25zdCBMYXlvdXQ6
OkxheW91dFN0YXRlJiwgY29uc3QgTGF5b3V0OjpCb3gmKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oCmluZGV4IDhlMjUzYjE5MGYyOWUxZDJh
NDMyOGE3NGU4YTEwOWFjYjNjM2Q3MjEuLmE4OGJlYzBhMDY4MGE5MTM5YzczOGRjNWNmMDMzMjUy
NTEyMzFiNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRB
dm9pZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIu
aApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQogCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIK
KyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dFBvaW50Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0VW5pdHMuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAKaW5k
ZXggODU1ZmY1ZmU1NzkwNDk2MmMwMzliMjA3ZmQ4ODg2ZTRmOWJjNDE4MS4uY2U2MjM1Y2NmZGFk
MTc3OGIxZTgyMDg2YmU0MjBhNTM4NjFjYzM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcApAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1
ZGUgIkZsb2F0QXZvaWRlci5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiTGF5b3V0Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNs
dWRlICJMYXlvdXRDb250YWluZXJCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgog
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTI0MywxOSArMjQzLDE5IEBAIExheW91dFBvaW50IEZsb2F0aW5nQ29udGV4dDo6cG9zaXRp
b25Gb3JGbG9hdChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvCiAgICAgLy8gRmlu
ZCB0aGUgdG9wIG1vc3QgcG9zaXRpb24gd2hlcmUgdGhlIGZsb2F0IGJveCBmaXRzLgogICAgIEFT
U0VSVCghaXNFbXB0eSgpKTsKICAgICBhdXRvIHByZXZpb3VzRmxvYXRBYnNvbHV0ZVRvcCA9IGZs
b2F0aW5nU3RhdGUoKS5mbG9hdHMoKS5sYXN0KCkucmVjdFdpdGhNYXJnaW4oKS50b3AoKTsKLSAg
ICBhdXRvIGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzID0gdGhpcy0+YWJzb2x1dGVEaXNw
bGF5Qm94Q29vcmRpbmF0ZXMobGF5b3V0Qm94KTsKLSAgICBhdXRvIGFic29sdXRlVG9wTGVmdCA9
IGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzLnRvcExlZnQ7CisgICAgYXV0byBhYnNvbHV0
ZUJveEdlb21ldHJ5Q29vcmRpbmF0ZXMgPSB0aGlzLT5hYnNvbHV0ZUJveEdlb21ldHJ5Q29vcmRp
bmF0ZXMobGF5b3V0Qm94KTsKKyAgICBhdXRvIGFic29sdXRlVG9wTGVmdCA9IGFic29sdXRlQm94
R2VvbWV0cnlDb29yZGluYXRlcy50b3BMZWZ0OwogICAgIC8vIEluY29taW5nIGZsb2F0IGNhbm5v
dCBiZSBwbGFjZWQgaGlnaGVyIHRoYW4gZXhpc3RpbmcgZmxvYXRzIChtYXJnaW4gYm94IG9mIHRo
ZSBsYXN0IGZsb2F0KS4KICAgICAvLyBUYWtlIHRoZSBzdGF0aWMgcG9zaXRpb24gKHdoZXJlIHRo
ZSBib3ggd291bGQgZ28gaWYgaXQgd2Fzbid0IGZsb2F0aW5nKSBhbmQgYWRqdXN0IGl0IHdpdGgg
dGhlIGxhc3QgZmxvYXQuCi0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICBpZiAoYWJzb2x1dGVUb3BMZWZ0Lnko
KSAtIGRpc3BsYXlCb3gubWFyZ2luQmVmb3JlKCkgPCBwcmV2aW91c0Zsb2F0QWJzb2x1dGVUb3Ap
Ci0gICAgICAgIGFic29sdXRlVG9wTGVmdC5zZXRZKHByZXZpb3VzRmxvYXRBYnNvbHV0ZVRvcCAr
IGRpc3BsYXlCb3gubWFyZ2luQmVmb3JlKCkpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGlmIChhYnNv
bHV0ZVRvcExlZnQueSgpIC0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgPCBwcmV2aW91c0Zs
b2F0QWJzb2x1dGVUb3ApCisgICAgICAgIGFic29sdXRlVG9wTGVmdC5zZXRZKHByZXZpb3VzRmxv
YXRBYnNvbHV0ZVRvcCArIGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpKTsKICAgICBhdXRvIGhv
cml6b250YWxNYXJnaW4gPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKLSAgICBhdXRvIG1hcmdpbnMgPSBFZGdl
cyB7IHsgKmhvcml6b250YWxNYXJnaW4uc3RhcnQsICpob3Jpem9udGFsTWFyZ2luLmVuZCB9LCB7
IGRpc3BsYXlCb3gubWFyZ2luQmVmb3JlKCksIGRpc3BsYXlCb3gubWFyZ2luQWZ0ZXIoKSB9IH07
Ci0gICAgYXV0byBmbG9hdEJveCA9IEZsb2F0QXZvaWRlciB7IGxheW91dEJveCwgYWJzb2x1dGVU
b3BMZWZ0LCBkaXNwbGF5Qm94LndpZHRoKCksIG1hcmdpbnMsIGFic29sdXRlRGlzcGxheUJveENv
b3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3ggfTsKKyAgICBhdXRvIG1hcmdpbnMg
PSBFZGdlcyB7IHsgKmhvcml6b250YWxNYXJnaW4uc3RhcnQsICpob3Jpem9udGFsTWFyZ2luLmVu
ZCB9LCB7IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpLCBib3hHZW9tZXRyeS5tYXJnaW5BZnRl
cigpIH0gfTsKKyAgICBhdXRvIGZsb2F0Qm94ID0gRmxvYXRBdm9pZGVyIHsgbGF5b3V0Qm94LCBh
YnNvbHV0ZVRvcExlZnQsIGJveEdlb21ldHJ5LndpZHRoKCksIG1hcmdpbnMsIGFic29sdXRlQm94
R2VvbWV0cnlDb29yZGluYXRlcy5jb250YWluaW5nQmxvY2tDb250ZW50Qm94IH07CiAgICAgZmlu
ZEF2YWlsYWJsZVBvc2l0aW9uKGZsb2F0Qm94LCBtX2Zsb2F0aW5nU3RhdGUuZmxvYXRzKCkpOwog
ICAgIC8vIEZyb20gZm9ybWF0dGluZyByb290IGNvb3JkaW5hdGUgc3lzdGVtIGJhY2sgdG8gY29u
dGFpbmluZyBibG9jaydzLgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrVG9wTGVmdCA9IGFic29s
dXRlRGlzcGxheUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja1RvcExlZnQ7CisgICAgYXV0
byBjb250YWluaW5nQmxvY2tUb3BMZWZ0ID0gYWJzb2x1dGVCb3hHZW9tZXRyeUNvb3JkaW5hdGVz
LmNvbnRhaW5pbmdCbG9ja1RvcExlZnQ7CiAgICAgcmV0dXJuIHsgZmxvYXRCb3gubGVmdCgpICsg
bWFyZ2lucy5ob3Jpem9udGFsLmxlZnQgLSBjb250YWluaW5nQmxvY2tUb3BMZWZ0LngoKSwgZmxv
YXRCb3gudG9wKCkgKyBtYXJnaW5zLnZlcnRpY2FsLnRvcCAtIGNvbnRhaW5pbmdCbG9ja1RvcExl
ZnQueSgpIH07CiB9CiAKQEAgLTI2OSwxMyArMjY5LDEzIEBAIExheW91dFBvaW50IEZsb2F0aW5n
Q29udGV4dDo6cG9zaXRpb25Gb3JOb25GbG9hdGluZ0Zsb2F0QXZvaWRlcihjb25zdCBCb3gmIGxh
eW91CiAgICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS50b3BMZWZ0KCk7CiAKLSAgICBhdXRvIGFic29s
dXRlRGlzcGxheUJveENvb3JkaW5hdGVzID0gdGhpcy0+YWJzb2x1dGVEaXNwbGF5Qm94Q29vcmRp
bmF0ZXMobGF5b3V0Qm94KTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGF1dG8gYWJzb2x1dGVCb3hHZW9t
ZXRyeUNvb3JkaW5hdGVzID0gdGhpcy0+YWJzb2x1dGVCb3hHZW9tZXRyeUNvb3JkaW5hdGVzKGxh
eW91dEJveCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAgICAgYXV0byBob3Jpem9udGFsTWFyZ2luID0gY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxv
Z2ljYWxXaWR0aCk7Ci0gICAgYXV0byBtYXJnaW5zID0gRWRnZXMgeyB7ICpob3Jpem9udGFsTWFy
Z2luLnN0YXJ0LCAqaG9yaXpvbnRhbE1hcmdpbi5lbmQgfSwgeyBkaXNwbGF5Qm94Lm1hcmdpbkJl
Zm9yZSgpLCBkaXNwbGF5Qm94Lm1hcmdpbkFmdGVyKCkgfSB9OwotICAgIGF1dG8gZmxvYXRBdm9p
ZGVyID0gRmxvYXRBdm9pZGVyIHsgbGF5b3V0Qm94LCBhYnNvbHV0ZURpc3BsYXlCb3hDb29yZGlu
YXRlcy50b3BMZWZ0LCBkaXNwbGF5Qm94LndpZHRoKCksIG1hcmdpbnMsIGFic29sdXRlRGlzcGxh
eUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3ggfTsKKyAgICBhdXRvIG1h
cmdpbnMgPSBFZGdlcyB7IHsgKmhvcml6b250YWxNYXJnaW4uc3RhcnQsICpob3Jpem9udGFsTWFy
Z2luLmVuZCB9LCB7IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpLCBib3hHZW9tZXRyeS5tYXJn
aW5BZnRlcigpIH0gfTsKKyAgICBhdXRvIGZsb2F0QXZvaWRlciA9IEZsb2F0QXZvaWRlciB7IGxh
eW91dEJveCwgYWJzb2x1dGVCb3hHZW9tZXRyeUNvb3JkaW5hdGVzLnRvcExlZnQsIGJveEdlb21l
dHJ5LndpZHRoKCksIG1hcmdpbnMsIGFic29sdXRlQm94R2VvbWV0cnlDb29yZGluYXRlcy5jb250
YWluaW5nQmxvY2tDb250ZW50Qm94IH07CiAgICAgZmluZFBvc2l0aW9uRm9yRm9ybWF0dGluZ0Nv
bnRleHRSb290KGZsb2F0QXZvaWRlcik7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tUb3BMZWZ0
ID0gYWJzb2x1dGVEaXNwbGF5Qm94Q29vcmRpbmF0ZXMuY29udGFpbmluZ0Jsb2NrVG9wTGVmdDsK
KyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1RvcExlZnQgPSBhYnNvbHV0ZUJveEdlb21ldHJ5Q29v
cmRpbmF0ZXMuY29udGFpbmluZ0Jsb2NrVG9wTGVmdDsKICAgICByZXR1cm4geyBmbG9hdEF2b2lk
ZXIubGVmdCgpIC0gY29udGFpbmluZ0Jsb2NrVG9wTGVmdC54KCksIGZsb2F0QXZvaWRlci50b3Ao
KSAtIGNvbnRhaW5pbmdCbG9ja1RvcExlZnQueSgpIH07CiB9CiAKQEAgLTQwNCw5ICs0MDQsOSBA
QCBGbG9hdGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzIEZsb2F0aW5nQ29udGV4dDo6Y29uc3RyYWlu
dHMoTGF5b3V0VW5pdCBjYW5kaWRhdGVUbwogCiB2b2lkIEZsb2F0aW5nQ29udGV4dDo6YXBwZW5k
KGNvbnN0IEJveCYgZmxvYXRCb3gpCiB7Ci0gICAgYXV0byBhYnNvbHV0ZURpc3BsYXlCb3ggPSBH
ZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGZsb2F0Qm94KSk7Ci0g
ICAgYWJzb2x1dGVEaXNwbGF5Qm94LnNldFRvcExlZnQobWFwVG9wTGVmdFRvRmxvYXRpbmdTdGF0
ZVJvb3QoZmxvYXRCb3gpKTsKLSAgICBmbG9hdGluZ1N0YXRlKCkuYXBwZW5kKEZsb2F0aW5nU3Rh
dGU6OkZsb2F0SXRlbSB7IGZsb2F0Qm94LCBhYnNvbHV0ZURpc3BsYXlCb3ggfSk7CisgICAgYXV0
byBhYnNvbHV0ZUJveEdlb21ldHJ5ID0gQm94R2VvbWV0cnkoZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChmbG9hdEJveCkpOworICAgIGFic29sdXRlQm94R2VvbWV0cnkuc2V0VG9w
TGVmdChtYXBUb3BMZWZ0VG9GbG9hdGluZ1N0YXRlUm9vdChmbG9hdEJveCkpOworICAgIGZsb2F0
aW5nU3RhdGUoKS5hcHBlbmQoRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtIHsgZmxvYXRCb3gsIGFi
c29sdXRlQm94R2VvbWV0cnkgfSk7CiB9CiAKIHZvaWQgRmxvYXRpbmdDb250ZXh0OjpmaW5kUG9z
aXRpb25Gb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoRmxvYXRBdm9pZGVyJiBmbG9hdEF2b2lkZXIp
IGNvbnN0CkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBGbG9hdGluZ0NvbnRleHQ6OmZpbmRQb3Np
dGlvbkZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChGbG9hdEF2b2lkZXImIGZsb2F0QXYKICAgICB9
CiB9CiAKLUZsb2F0aW5nQ29udGV4dDo6QWJzb2x1dGVDb29yZGluYXRlVmFsdWVzRm9yRmxvYXRB
dm9pZGVyIEZsb2F0aW5nQ29udGV4dDo6YWJzb2x1dGVEaXNwbGF5Qm94Q29vcmRpbmF0ZXMoY29u
c3QgQm94JiBmbG9hdEF2b2lkZXIpIGNvbnN0CitGbG9hdGluZ0NvbnRleHQ6OkFic29sdXRlQ29v
cmRpbmF0ZVZhbHVlc0ZvckZsb2F0QXZvaWRlciBGbG9hdGluZ0NvbnRleHQ6OmFic29sdXRlQm94
R2VvbWV0cnlDb29yZGluYXRlcyhjb25zdCBCb3gmIGZsb2F0QXZvaWRlcikgY29uc3QKIHsKICAg
ICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBmbG9hdEF2b2lkZXIuY29udGFpbmluZ0Jsb2NrKCk7
CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5pbmdCbG9jaywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2Fw
ZVJlYXNvbjo6RmxvYXRCb3hOZWVkc1RvQmVJbkFic29sdXRlQ29vcmRpbmF0ZXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmgKaW5kZXggNmJkOWQ1
NWM5NmVjMTU5Mzg2OGNhODgyYWVlZGFlNGEwYzUzNGY0NS4uMWM4OTZhNzNmOTc2NzhmZmQwZDNj
MmFkYTVlZTQ3MTU4YWJmZTUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zs
b2F0cy9GbG9hdGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRz
L0Zsb2F0aW5nQ29udGV4dC5oCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBm
aW5kUG9zaXRpb25Gb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoRmxvYXRBdm9pZGVyJikgY29uc3Q7
CiAKICAgICBzdHJ1Y3QgQWJzb2x1dGVDb29yZGluYXRlVmFsdWVzRm9yRmxvYXRBdm9pZGVyOwot
ICAgIEFic29sdXRlQ29vcmRpbmF0ZVZhbHVlc0ZvckZsb2F0QXZvaWRlciBhYnNvbHV0ZURpc3Bs
YXlCb3hDb29yZGluYXRlcyhjb25zdCBCb3gmKSBjb25zdDsKKyAgICBBYnNvbHV0ZUNvb3JkaW5h
dGVWYWx1ZXNGb3JGbG9hdEF2b2lkZXIgYWJzb2x1dGVCb3hHZW9tZXRyeUNvb3JkaW5hdGVzKGNv
bnN0IEJveCYpIGNvbnN0OwogICAgIExheW91dFBvaW50IG1hcFRvcExlZnRUb0Zsb2F0aW5nU3Rh
dGVSb290KGNvbnN0IEJveCYpIGNvbnN0OwogICAgIFBvaW50IG1hcFBvaW50RnJvbUZvcm1hdHRp
bmdDb250ZXh0Um9vdFRvRmxvYXRpbmdTdGF0ZVJvb3QoUG9pbnQpIGNvbnN0OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcAppbmRleCAzZTYzYzJm
NzY1OWIyNGFiZmY0N2RiYzgyZGMyNjBkMzhmYTgxZTdkLi44NTZjZTU1NDY5NjcxYmRhM2VmYzI5
ZWY5MGNhNjIyMzkyZmEwY2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxv
YXRzL0Zsb2F0aW5nU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMv
RmxvYXRpbmdTdGF0ZS5jcHAKQEAgLTQwLDE2ICs0MCwxNiBAQCBuYW1lc3BhY2UgTGF5b3V0IHsK
IAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEZsb2F0aW5nU3RhdGUpOwogCi1GbG9hdGlu
Z1N0YXRlOjpGbG9hdEl0ZW06OkZsb2F0SXRlbShjb25zdCBCb3gmIGxheW91dEJveCwgR2VvbWV0
cnkgYWJzb2x1dGVEaXNwbGF5Qm94KQorRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtOjpGbG9hdEl0
ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gsIEJveEdlb21ldHJ5IGFic29sdXRlQm94R2VvbWV0cnkp
CiAgICAgOiBtX2xheW91dEJveChtYWtlV2Vha1B0cihsYXlvdXRCb3gpKQogICAgICwgbV9wb3Np
dGlvbihsYXlvdXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBQb3NpdGlvbjo6TGVm
dCA6IFBvc2l0aW9uOjpSaWdodCkKLSAgICAsIG1fYWJzb2x1dGVEaXNwbGF5Qm94KGFic29sdXRl
RGlzcGxheUJveCkKKyAgICAsIG1fYWJzb2x1dGVCb3hHZW9tZXRyeShhYnNvbHV0ZUJveEdlb21l
dHJ5KQogewogfQogCi1GbG9hdGluZ1N0YXRlOjpGbG9hdEl0ZW06OkZsb2F0SXRlbShQb3NpdGlv
biBwb3NpdGlvbiwgR2VvbWV0cnkgYWJzb2x1dGVEaXNwbGF5Qm94KQorRmxvYXRpbmdTdGF0ZTo6
RmxvYXRJdGVtOjpGbG9hdEl0ZW0oUG9zaXRpb24gcG9zaXRpb24sIEJveEdlb21ldHJ5IGFic29s
dXRlQm94R2VvbWV0cnkpCiAgICAgOiBtX3Bvc2l0aW9uKHBvc2l0aW9uKQotICAgICwgbV9hYnNv
bHV0ZURpc3BsYXlCb3goYWJzb2x1dGVEaXNwbGF5Qm94KQorICAgICwgbV9hYnNvbHV0ZUJveEdl
b21ldHJ5KGFic29sdXRlQm94R2VvbWV0cnkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmgKaW5kZXggMWQ4MTM1MzAyNjJhZGZmNzk4N2JhZjE4
ZjU0MWQ3NjdhYzBhMWFjNC4uMWE1ZGZhNGJhZDU3ZWJjY2I2YTQyMzgzN2NlNzkzMDQxMDM1YmI2
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmgKQEAg
LTI3LDggKzI3LDggQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQog
CisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWlu
ZXJCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
QEAgLTM4LDggKzM4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7
CiAKIGNsYXNzIEJveDsKK2NsYXNzIEJveEdlb21ldHJ5OwogY2xhc3MgRmxvYXRpbmdDb250ZXh0
OwotY2xhc3MgR2VvbWV0cnk7CiBjbGFzcyBMYXlvdXRTdGF0ZTsKIGNsYXNzIFJlY3Q7CiAKQEAg
LTU4LDE4ICs1OCwxOCBAQCBwdWJsaWM6CiAKICAgICBjbGFzcyBGbG9hdEl0ZW0gewogICAgIHB1
YmxpYzoKLSAgICAgICAgRmxvYXRJdGVtKGNvbnN0IEJveCYsIEdlb21ldHJ5IGFic29sdXRlRGlz
cGxheUJveCk7CisgICAgICAgIEZsb2F0SXRlbShjb25zdCBCb3gmLCBCb3hHZW9tZXRyeSBhYnNv
bHV0ZUJveEdlb21ldHJ5KTsKIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBjJ3RvciBpcyBvbmx5
IHVzZWQgYnkgdGhlIHJlbmRlciB0cmVlIGludGVnYXRpb24gY29kZXBhdGguCiAgICAgICAgIGVu
dW0gY2xhc3MgUG9zaXRpb24geyBMZWZ0LCBSaWdodCB9OwotICAgICAgICBGbG9hdEl0ZW0oUG9z
aXRpb24sIEdlb21ldHJ5IGFic29sdXRlRGlzcGxheUJveCk7CisgICAgICAgIEZsb2F0SXRlbShQ
b3NpdGlvbiwgQm94R2VvbWV0cnkgYWJzb2x1dGVCb3hHZW9tZXRyeSk7CiAKICAgICAgICAgYm9v
bCBpc0xlZnRQb3NpdGlvbmVkKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA9PSBQb3NpdGlv
bjo6TGVmdDsgfQogICAgICAgICBib29sIGlzSW5Gb3JtYXR0aW5nQ29udGV4dE9mKGNvbnN0IENv
bnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290KSBjb25zdCB7IHJldHVybiBtX2xheW91
dEJveC0+aXNJbkZvcm1hdHRpbmdDb250ZXh0T2YoZm9ybWF0dGluZ0NvbnRleHRSb290KTsgfQog
Ci0gICAgICAgIFJlY3QgcmVjdFdpdGhNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRl
RGlzcGxheUJveC5yZWN0V2l0aE1hcmdpbigpOyB9Ci0gICAgICAgIEdlb21ldHJ5OjpIb3Jpem9u
dGFsTWFyZ2luIGhvcml6b250YWxNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlRGlz
cGxheUJveC5ob3Jpem9udGFsTWFyZ2luKCk7IH0KLSAgICAgICAgUG9zaXRpb25JbkNvbnRleHRS
b290IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHsgbV9hYnNvbHV0ZURpc3BsYXlCb3guYm90dG9t
KCkgfTsgfQorICAgICAgICBSZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9h
YnNvbHV0ZUJveEdlb21ldHJ5LnJlY3RXaXRoTWFyZ2luKCk7IH0KKyAgICAgICAgQm94R2VvbWV0
cnk6Okhvcml6b250YWxNYXJnaW4gaG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
YWJzb2x1dGVCb3hHZW9tZXRyeS5ob3Jpem9udGFsTWFyZ2luKCk7IH0KKyAgICAgICAgUG9zaXRp
b25JbkNvbnRleHRSb290IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHsgbV9hYnNvbHV0ZUJveEdl
b21ldHJ5LmJvdHRvbSgpIH07IH0KIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIGNvbnN0
IEJveCogZmxvYXRCb3goKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveC5nZXQoKTsgfQpAQCAt
NzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgV2Vha1B0cjxjb25z
dCBCb3g+IG1fbGF5b3V0Qm94OwogICAgICAgICBQb3NpdGlvbiBtX3Bvc2l0aW9uOwotICAgICAg
ICBHZW9tZXRyeSBtX2Fic29sdXRlRGlzcGxheUJveDsKKyAgICAgICAgQm94R2VvbWV0cnkgbV9h
YnNvbHV0ZUJveEdlb21ldHJ5OwogICAgIH07CiAgICAgdXNpbmcgRmxvYXRMaXN0ID0gVmVjdG9y
PEZsb2F0SXRlbT47CiAgICAgY29uc3QgRmxvYXRMaXN0JiBmbG9hdHMoKSBjb25zdCB7IHJldHVy
biBtX2Zsb2F0czsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGUy
NzE0Zjc2YWUwYmYxZDIwYzA3OTEwZWQ5ZTk3ZmQ5NjIwOTMzMzQuLmMyMzZlNjEzYzVlMTJmYTZk
NzRhNjAyOWI2ZDA5Y2FhMWFhNmZmMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojps
YXlvdXRJbkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpbwogICAgICAg
ICAgICAgICAgIC8vIElubGluZSBib3hlcyAoPHNwYW4+KSBjYW4ndCBnZXQgc2l6ZWQvcG9zaXRp
b25lZCB5ZXQuIEF0IHRoaXMgcG9pbnQgd2UgY2FuIG9ubHkgY29tcHV0ZSB0aGVpciBtYXJnaW5z
LCBib3JkZXJzIGFuZCBwYWRkaW5nLgogICAgICAgICAgICAgICAgIGNvbXB1dGVCb3JkZXJBbmRQ
YWRkaW5nKCpsYXlvdXRCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwogICAgICAgICAgICAg
ICAgIGNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKCpsYXlvdXRCb3gsIGNvbnN0cmFpbnRzLmhvcml6
b250YWwpOwotICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goKmxh
eW91dEJveCkuc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKKyAgICAgICAgICAgICAgICBmb3JtYXR0
aW5nU3RhdGUoKS5ib3hHZW9tZXRyeSgqbGF5b3V0Qm94KS5zZXRWZXJ0aWNhbE1hcmdpbih7IH0p
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMaW5lQnVpbGRlcjo6CiAg
ICAgICAgIGF1dG8gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoID0gcHJldmlvdXNMaW5lID8g
cHJldmlvdXNMaW5lLT5vdmVyZmxvd0NvbnRlbnRMZW5ndGggOiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIGF1dG8gaW5pdGlhbExpbmVDb25zdHJhaW50cyA9IENvbnN0cmFpbnRzRm9ySW5GbG93Q29u
dGVudCB7IGNvbnN0cmFpbnRzLmhvcml6b250YWwsIHsgbGluZUxvZ2ljYWxUb3AsIG1ha2VPcHRp
b25hbCh0b0xheW91dFVuaXQocXVpcmtzKCkuaW5pdGlhbExpbmVIZWlnaHQoKSkpIH0gfTsKICAg
ICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVCdWlsZGVyLmxheW91dElubGluZUNvbnRlbnQo
bmVlZHNMYXlvdXRSYW5nZSwgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoLCBpbml0aWFsTGlu
ZUNvbnN0cmFpbnRzLCBpc0ZpcnN0TGluZSk7Ci0gICAgICAgIGF1dG8gbGluZUxvZ2ljYWxSZWN0
ID0gY3JlYXRlRGlzcGxheUJveGVzRm9yTGluZUNvbnRlbnQobGluZUNvbnRlbnQsIGNvbnN0cmFp
bnRzLmhvcml6b250YWwpOworICAgICAgICBhdXRvIGxpbmVMb2dpY2FsUmVjdCA9IGNvbXB1dGVH
ZW9tZXRyeUZvckxpbmVDb250ZW50KGxpbmVDb250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFs
KTsKIAogICAgICAgICBhdXRvIGxpbmVDb250ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJ
dGVtUmFuZ2U7CiAgICAgICAgIGlmICghbGluZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsKQEAg
LTIzMiw5ICsyMzIsOSBAQCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbgogICAgICAgICAvLyBTd2l0
Y2ggdG8gdGhlIG1pbi9tYXggZm9ybWF0dGluZyByb290IHdpZHRoIHZhbHVlcyBiZWZvcmUgZm9y
bWF0dGluZyB0aGUgbGluZXMuCiAgICAgICAgIGZvciAoYXV0byogZm9ybWF0dGluZ1Jvb3QgOiBm
b3JtYXR0aW5nQ29udGV4dFJvb3RMaXN0KSB7CiAgICAgICAgICAgICBhdXRvIGludHJpbnNpY1dp
ZHRocyA9IGxheW91dFN0YXRlLmZvcm1hdHRpbmdTdGF0ZUZvckJveCgqZm9ybWF0dGluZ1Jvb3Qp
LmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goKmZvcm1hdHRpbmdSb290KTsKLSAgICAg
ICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KCpm
b3JtYXR0aW5nUm9vdCk7Ci0gICAgICAgICAgICBhdXRvIGNvbnRlbnRXaWR0aCA9IChhdmFpbGFi
bGVXaWR0aCA/IGludHJpbnNpY1dpZHRocy0+bWF4aW11bSA6IGludHJpbnNpY1dpZHRocy0+bWlu
aW11bSkgLSBkaXNwbGF5Qm94Lmhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCk7Ci0g
ICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50V2lkdGgpOwor
ICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9t
ZXRyeSgqZm9ybWF0dGluZ1Jvb3QpOworICAgICAgICAgICAgYXV0byBjb250ZW50V2lkdGggPSAo
YXZhaWxhYmxlV2lkdGggPyBpbnRyaW5zaWNXaWR0aHMtPm1heGltdW0gOiBpbnRyaW5zaWNXaWR0
aHMtPm1pbmltdW0pIC0gYm94R2VvbWV0cnkuaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRp
bmcoKTsKKyAgICAgICAgICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50
V2lkdGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb21wdXRlZEludHJpbnNpY1dpZHRo
Rm9yQ29uc3RyYWludChhdmFpbGFibGVXaWR0aCk7CiAgICAgfTsKQEAgLTI3OCw3ICsyNzgsNyBA
QCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhGb3JG
b3JtYXR0aW5nUm9vdChjb25zdCBCb3gmCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCiB7CiAgICAgYXV0byBjb21w
dXRlZEhvcml6b250YWxNYXJnaW4gPSBnZW9tZXRyeSgpLmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgZm9ybWF0dGluZ1N0YXRl
KCkuZGlzcGxheUJveChsYXlvdXRCb3gpLnNldEhvcml6b250YWxNYXJnaW4oeyBjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZC52YWx1ZU9yKDApIH0pOworICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxh
eW91dEJveCkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkg
fSk7CiB9CiAKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1h
cmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBo
b3Jpem9udGFsQ29uc3RyYWludHMpCkBAIC0zMDgsOSArMzA4LDkgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdAogICAgIGlmIChjb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoIDwgbWlu
V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKQogICAgICAgICBjb250ZW50V2lkdGhBbmRNYXJn
aW4gPSBtaW5XaWR0aEFuZE1hcmdpbjsKIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0
aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7Ci0gICAgZGlzcGxheUJveC5zZXRDb250
ZW50Qm94V2lkdGgoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCk7Ci0gICAgZGlz
cGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRN
YXJnaW4uc3RhcnQsIGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLmVuZCB9KTsKKyAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91
dEJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRXaWR0aEFu
ZE1hcmdpbi5jb250ZW50V2lkdGgpOworICAgIGJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJn
aW4oeyBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCwgY29udGVudFdpZHRo
QW5kTWFyZ2luLnVzZWRNYXJnaW4uZW5kIH0pOwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKQEAgLTMzOCw5
ICszMzgsOSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5k
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgICAgICBpZiAoY29udGVudEhl
aWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0IDwgbWluSGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRI
ZWlnaHQpCiAgICAgICAgICAgICBjb250ZW50SGVpZ2h0QW5kTWFyZ2luID0gbWluSGVpZ2h0QW5k
TWFyZ2luOwogICAgIH0KLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCku
ZGlzcGxheUJveChsYXlvdXRCb3gpOwotICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdo
dChjb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQpOwotICAgIGRpc3BsYXlCb3gu
c2V0VmVydGljYWxNYXJnaW4oeyBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1h
cmdpbi5iZWZvcmUsIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luLmFm
dGVyIH0pOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2Vv
bWV0cnkobGF5b3V0Qm94KTsKKyAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KGNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCk7CisgICAgYm94R2VvbWV0cnkuc2V0
VmVydGljYWxNYXJnaW4oeyBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdp
bi5iZWZvcmUsIGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luLmFmdGVy
IH0pOwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb2xsZWN0SW5saW5lQ29u
dGVudElmTmVlZGVkKCkKQEAgLTQ0MCw3ICs0NDAsNyBAQCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZVJlY3RBbmRMaW5lQm94T2Zmc2V0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21w
dQogICAgIHJldHVybiB7IGxpbmVCb3hPZmZzZXQsIGxvZ2ljYWxSZWN0IH07CiB9CiAKLURpc3Bs
YXk6OklubGluZVJlY3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNyZWF0ZURpc3BsYXlCb3hl
c0ZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRl
bnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQor
RGlzcGxheTo6SW5saW5lUmVjdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUdlb21l
dHJ5Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29u
dGVudCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMp
CiB7CiAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7
CiAgICAgYXV0byYgbGluZUJveCA9IGxpbmVDb250ZW50LmxpbmVCb3g7CkBAIC00NTQsMTIgKzQ1
NCwxMiBAQCBEaXNwbGF5OjpJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpjcmVh
dGVEaXNwbGF5Qm94ZXNGb3JMaW5lQ29udGVudChjbwogICAgICAgICAvLyBNb3ZlIGZsb2F0cyB0
byB0aGVpciBmaW5hbCBwb3NpdGlvbi4KICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmbG9hdENh
bmRpZGF0ZSA6IGxpbmVDb250ZW50LmZsb2F0cykgewogICAgICAgICAgICAgYXV0byYgZmxvYXRC
b3ggPSBmbG9hdENhbmRpZGF0ZS5pdGVtLT5sYXlvdXRCb3goKTsKLSAgICAgICAgICAgIGF1dG8m
IGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUJveChmbG9hdEJveCk7CisgICAg
ICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZS5ib3hHZW9tZXRyeShm
bG9hdEJveCk7CiAgICAgICAgICAgICAvLyBTZXQgc3RhdGljIHBvc2l0aW9uIGZpcnN0LgogICAg
ICAgICAgICAgYXV0byB2ZXJ0aWNhbFN0YXRpY1Bvc2l0aW9uID0gZmxvYXRDYW5kaWRhdGUuaXNJ
bnRydXNpdmUgPyBsaW5lTG9naWNhbFJlY3QudG9wKCkgOiBsaW5lTG9naWNhbFJlY3QuYm90dG9t
KCk7Ci0gICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBsaW5lTG9naWNhbFJlY3Qu
bGVmdCgpLCB2ZXJ0aWNhbFN0YXRpY1Bvc2l0aW9uIH0pOworICAgICAgICAgICAgYm94R2VvbWV0
cnkuc2V0VG9wTGVmdCh7IGxpbmVMb2dpY2FsUmVjdC5sZWZ0KCksIHZlcnRpY2FsU3RhdGljUG9z
aXRpb24gfSk7CiAgICAgICAgICAgICAvLyBGbG9hdCBpdC4KLSAgICAgICAgICAgIGRpc3BsYXlC
b3guc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChmbG9hdEJveCwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzKSk7CisgICAgICAgICAgICBib3hHZW9tZXRyeS5zZXRUb3BM
ZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGZsb2F0Qm94LCBob3Jpem9udGFs
Q29uc3RyYWludHMpKTsKICAgICAgICAgICAgIGZsb2F0aW5nQ29udGV4dC5hcHBlbmQoZmxvYXRC
b3gpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTA2LDIxICs1MDYsMjEgQEAgRGlzcGxheTo6SW5s
aW5lUmVjdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRlRGlzcGxheUJveGVzRm9yTGlu
ZUNvbnRlbnQoY28KIAogICAgICAgICAvLyBDcmVhdGUgZGlzcGxheSBib3hlcy4KICAgICAgICAg
Ly8gRklYTUU6IFNpbmNlIDxicj4gYW5kIDx3YnI+IHJ1bnMgaGF2ZSBhc3NvY2lhdGVkIERPTSBl
bGVtZW50cywgd2UgbWlnaHQgbmVlZCB0byBjb25zdHJ1Y3QgYSBkaXNwbGF5IGJveCBoZXJlLiAK
LSAgICAgICAgYXV0byBpbml0aWF0ZXNEaXNwbGF5Qm94ID0gbGluZVJ1bi5pc0JveCgpIHx8IGxp
bmVSdW4uaXNDb250YWluZXJTdGFydCgpOwotICAgICAgICBpZiAoaW5pdGlhdGVzRGlzcGxheUJv
eCkgewotICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNw
bGF5Qm94KGxheW91dEJveCk7CisgICAgICAgIGF1dG8gbmVlZHNCb3hHZW9tZXRyeSA9IGxpbmVS
dW4uaXNCb3goKSB8fCBsaW5lUnVuLmlzQ29udGFpbmVyU3RhcnQoKTsKKyAgICAgICAgaWYgKG5l
ZWRzQm94R2VvbWV0cnkpIHsKKyAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0
dGluZ1N0YXRlLmJveEdlb21ldHJ5KGxheW91dEJveCk7CiAgICAgICAgICAgICBhdXRvJiBpbmxp
bmVCb3ggPSBsaW5lQm94LmlubGluZUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgICAg
ICAgICAgYXV0byB0b3BMZWZ0ID0gaW5saW5lQm94LmxvZ2ljYWxSZWN0KCkudG9wTGVmdCgpOwog
ICAgICAgICAgICAgdG9wTGVmdC5tb3ZlKHsgfSwgbGluZUJveFZlcnRpY2FsT2Zmc2V0KTsKICAg
ICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAg
ICAgICAgdG9wTGVmdCArPSBnZW9tZXRyeSgpLmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNl
dChsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAgICAgICBkaXNwbGF5
Qm94LnNldFRvcExlZnQodG9MYXlvdXRQb2ludCh0b3BMZWZ0KSk7CisgICAgICAgICAgICBib3hH
ZW9tZXRyeS5zZXRUb3BMZWZ0KHRvTGF5b3V0UG9pbnQodG9wTGVmdCkpOwogICAgICAgICAgICAg
aWYgKGxpbmVSdW4uaXNDb250YWluZXJTdGFydCgpKSB7CiAgICAgICAgICAgICAgICAgYXV0byBt
YXJnaW5Cb3hXaWR0aCA9IGlubGluZUJveC5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgICAg
ICBhdXRvIGNvbnRlbnRCb3hXaWR0aCA9IG1hcmdpbkJveFdpZHRoIC0gKGRpc3BsYXlCb3gubWFy
Z2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5n
TGVmdCgpLnZhbHVlT3IoMCkpOworICAgICAgICAgICAgICAgIGF1dG8gY29udGVudEJveFdpZHRo
ID0gbWFyZ2luQm94V2lkdGggLSAoYm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSArIGJveEdlb21l
dHJ5LmJvcmRlckxlZnQoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKSk7
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZpeCBpdCBmb3IgbXVsdGlsaW5lLgotICAgICAg
ICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHRvTGF5b3V0VW5pdChjb250
ZW50Qm94V2lkdGgpKTsKLSAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hI
ZWlnaHQodG9MYXlvdXRVbml0KGlubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkpKTsKKyAgICAgICAg
ICAgICAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgodG9MYXlvdXRVbml0KGNvbnRl
bnRCb3hXaWR0aCkpOworICAgICAgICAgICAgICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hI
ZWlnaHQodG9MYXlvdXRVbml0KGlubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmlu
ZGV4IGRjOTk2OWJlMmNmNGE5ODI5NTE2YTJmMGU1ZGM2ZDU2MjE3ZWIzODAuLjE5M2M4NmZmYzgw
YzZhZTNlNzExN2YxYWM2NGYzYzIxMzgwMjFmYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0ZVdpZHRo
QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwogCiAg
ICAgdm9pZCBjb2xsZWN0SW5saW5lQ29udGVudElmTmVlZGVkKCk7Ci0gICAgRGlzcGxheTo6SW5s
aW5lUmVjdCBjcmVhdGVEaXNwbGF5Qm94ZXNGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRl
cjo6TGluZUNvbnRlbnQmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKKyAgICBEaXNw
bGF5OjpJbmxpbmVSZWN0IGNvbXB1dGVHZW9tZXRyeUZvckxpbmVDb250ZW50KGNvbnN0IExpbmVC
dWlsZGVyOjpMaW5lQ29udGVudCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpOwogICAg
IHN0cnVjdCBMaW5lUmVjdEFuZExpbmVCb3hPZmZzZXQgewogICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IGxpbmVCb3hWZXJ0aWNhbE9mZnNldDsKICAgICAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBs
b2dpY2FsUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCb3guaAppbmRleCBmYzc1ZmUxZjQyYmNlODU5MGY4NmJkODk5NTFk
ZTUxZjVmM2VjZDMwLi5jYzMxZDFmYWFmNGM4NmY5YmRmZDkwNWI2MzFmYTRhMjgwMTAwMmUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lTGluZUJveC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJEaXNwbGF5SW5saW5l
UmVjdC5oIgogI2luY2x1ZGUgIklubGluZUxpbmUuaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRy
eS5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVp
bGRlci5jcHAKaW5kZXggYTE1MDg1MDU4YjdkMDQxNGRhZmRlOTI0YjZhNWRlYWY3ODkwYTA3Ny4u
ZjFjMjJmMjQ2ZjQxOGIxNjA4ZTM5YjA3MzAyMGUwMmRkYzI0MmMzZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVC
dWlsZGVyLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5o
IgogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0
Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hH
ZW9tZXRyeS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRl
ICJUZXh0VXRpbC5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCmluZGV4IDc3
YTFkYzJmMDFiNmU5NmUyN2UwOWE0YzEwNzVmZTc4NDRhOGQ2Y2IuLjkwZDhjZDFhOWRmZmZhNDNj
YjliZWE3YWUxNTAwZjUxOWUyYzRhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
Y3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbnZhbGlk
YXRpb25TdGF0ZS5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5
b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRUcmVlQnVpbGRlci5oIgogI2luY2x1
ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgpAQCAtMTM4LDE5
ICsxMzgsMTkgQEAgdm9pZCBMaW5lTGF5b3V0OjpwcmVwYXJlRmxvYXRpbmdTdGF0ZSgpCiAgICAg
ICAgIGF1dG8gcG9zaXRpb24gPSBmbG9hdGluZ09iamVjdC0+dHlwZSgpID09IEZsb2F0aW5nT2Jq
ZWN0OjpGbG9hdFJpZ2h0CiAgICAgICAgICAgICA/IExheW91dDo6RmxvYXRpbmdTdGF0ZTo6Rmxv
YXRJdGVtOjpQb3NpdGlvbjo6UmlnaHQKICAgICAgICAgICAgIDogTGF5b3V0OjpGbG9hdGluZ1N0
YXRlOjpGbG9hdEl0ZW06OlBvc2l0aW9uOjpMZWZ0OwotICAgICAgICBhdXRvIGJveCA9IExheW91
dDo6R2VvbWV0cnkgeyB9OworICAgICAgICBhdXRvIGJveEdlb21ldHJ5ID0gTGF5b3V0OjpCb3hH
ZW9tZXRyeSB7IH07CiAgICAgICAgIC8vIEZJWE1FOiBXZSBhcmUgZmxvb3JpbmcgaGVyZSBmb3Ig
bGVnYWN5IGNvbXBhdGliaWxpdHkuCiAgICAgICAgIC8vICAgICAgICBTZWUgRmxvYXRpbmdPYmpl
Y3RzOjppbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0LgogICAgICAgICBhdXRvIHkgPSByZWN0Lnko
KS5mbG9vcigpOwogICAgICAgICBhdXRvIG1heFkgPSByZWN0Lm1heFkoKS5mbG9vcigpOwotICAg
ICAgICBib3guc2V0VG9wTGVmdCh7IHJlY3QueCgpLCB5IH0pOwotICAgICAgICBib3guc2V0Q29u
dGVudEJveFdpZHRoKHJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIGJveC5zZXRDb250ZW50Qm94SGVp
Z2h0KG1heFkgLSB5KTsKLSAgICAgICAgYm94LnNldEJvcmRlcih7IH0pOwotICAgICAgICBib3gu
c2V0UGFkZGluZyh7IH0pOwotICAgICAgICBib3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOwot
ICAgICAgICBib3guc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKLSAgICAgICAgZmxvYXRpbmdTdGF0
ZS5hcHBlbmQoeyBwb3NpdGlvbiwgYm94IH0pOworICAgICAgICBib3hHZW9tZXRyeS5zZXRUb3BM
ZWZ0KHsgcmVjdC54KCksIHkgfSk7CisgICAgICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hX
aWR0aChyZWN0LndpZHRoKCkpOworICAgICAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94SGVp
Z2h0KG1heFkgLSB5KTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVyKHsgfSk7CisgICAg
ICAgIGJveEdlb21ldHJ5LnNldFBhZGRpbmcoeyB9KTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0
SG9yaXpvbnRhbE1hcmdpbih7IH0pOworICAgICAgICBib3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1h
cmdpbih7IH0pOworICAgICAgICBmbG9hdGluZ1N0YXRlLmFwcGVuZCh7IHBvc2l0aW9uLCBib3hH
ZW9tZXRyeSB9KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0
dHJlZS9MYXlvdXRCb3guY3BwCmluZGV4IDhlMTU4MTNiYmQxMGYzZmExMTJmNGRlMTMzOTRiMmRj
N2NiYTk3MWUuLmVhYzVlZWIxNmEzYzMzOGE0ZmVkOGZhNWFmNmEzNjhkNDFiZWEwMjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmNwcApAQCAtMjgs
OCArMjgsOCBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNp
bmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJv
eC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW5pdGlh
bENvbnRhaW5pbmdCbG9jay5oIgogI2luY2x1ZGUgIkxheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAi
TGF5b3V0U3RhdGUuaCIKQEAgLTQ1NCwxMSArNDU0LDExIEBAIE9wdGlvbmFsPExheW91dFVuaXQ+
IEJveDo6Y29sdW1uV2lkdGgoKSBjb25zdAogICAgIHJldHVybiByYXJlRGF0YSgpLmNvbHVtbldp
ZHRoOwogfQogCi12b2lkIEJveDo6c2V0Q2FjaGVkRGlzcGxheUJveEZvckxheW91dFN0YXRlKExh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgc3RkOjp1bmlxdWVfcHRyPEdlb21ldHJ5PiBib3gpIGNv
bnN0Cit2b2lkIEJveDo6c2V0Y2FjaGVkR2VvbWV0cnlGb3JMYXlvdXRTdGF0ZShMYXlvdXRTdGF0
ZSYgbGF5b3V0U3RhdGUsIHN0ZDo6dW5pcXVlX3B0cjxCb3hHZW9tZXRyeT4gZ2VvbWV0cnkpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKCFtX2NhY2hlZExheW91dFN0YXRlKTsKICAgICBtX2NhY2hlZExh
eW91dFN0YXRlID0gbWFrZVdlYWtQdHIobGF5b3V0U3RhdGUpOwotICAgIG1fY2FjaGVkRGlzcGxh
eUJveEZvckxheW91dFN0YXRlID0gV1RGTW92ZShib3gpOworICAgIG1fY2FjaGVkR2VvbWV0cnlG
b3JMYXlvdXRTdGF0ZSA9IFdURk1vdmUoZ2VvbWV0cnkpOwogfQogCiBCb3g6OlJhcmVEYXRhTWFw
JiBCb3g6OnJhcmVEYXRhTWFwKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9s
YXlvdXR0cmVlL0xheW91dEJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUv
TGF5b3V0Qm94LmgKaW5kZXggYTUxZmFhZjUyODg2YzI3MjgwYzY1NTFkMGFmY2I2MDMwYzc3MDg3
YS4uNTZkYjIwOWUzMzY4MWE4ZGQ1OTI1YWNjNmFmYjVlZjcxM2EwZjNjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmgKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIENvbnRhaW5l
ckJveDsKLWNsYXNzIEdlb21ldHJ5OworY2xhc3MgQm94R2VvbWV0cnk7CiBjbGFzcyBJbml0aWFs
Q29udGFpbmluZ0Jsb2NrOwogY2xhc3MgTGF5b3V0U3RhdGU7CiBjbGFzcyBUcmVlQnVpbGRlcjsK
QEAgLTE3MCw4ICsxNzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc0Fub255bW91cygpIHsg
bV9pc0Fub255bW91cyA9IHRydWU7IH0KIAogICAgIGJvb2wgY2FuQ2FjaGVGb3JMYXlvdXRTdGF0
ZShjb25zdCBMYXlvdXRTdGF0ZSYpIGNvbnN0OwotICAgIEdlb21ldHJ5KiBjYWNoZWREaXNwbGF5
Qm94Rm9yTGF5b3V0U3RhdGUoY29uc3QgTGF5b3V0U3RhdGUmKSBjb25zdDsKLSAgICB2b2lkIHNl
dENhY2hlZERpc3BsYXlCb3hGb3JMYXlvdXRTdGF0ZShMYXlvdXRTdGF0ZSYsIHN0ZDo6dW5pcXVl
X3B0cjxHZW9tZXRyeT4pIGNvbnN0OworICAgIEJveEdlb21ldHJ5KiBjYWNoZWRHZW9tZXRyeUZv
ckxheW91dFN0YXRlKGNvbnN0IExheW91dFN0YXRlJikgY29uc3Q7CisgICAgdm9pZCBzZXRjYWNo
ZWRHZW9tZXRyeUZvckxheW91dFN0YXRlKExheW91dFN0YXRlJiwgc3RkOjp1bmlxdWVfcHRyPEJv
eEdlb21ldHJ5PikgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBCb3goT3B0aW9uYWw8RWxlbWVu
dEF0dHJpYnV0ZXM+LCBSZW5kZXJTdHlsZSYmLCBPcHRpb25TZXQ8QmFzZVR5cGVGbGFnPik7CkBA
IC0yMDcsNyArMjA3LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBGaXJzdCBMYXlvdXRTdGF0
ZSBnZXRzIGEgZGlyZWN0IGNhY2hlLgogICAgIG11dGFibGUgV2Vha1B0cjxMYXlvdXRTdGF0ZT4g
bV9jYWNoZWRMYXlvdXRTdGF0ZTsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxHZW9tZXRy
eT4gbV9jYWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0U3RhdGU7CisgICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8Qm94R2VvbWV0cnk+IG1fY2FjaGVkR2VvbWV0cnlGb3JMYXlvdXRTdGF0ZTsKIAog
ICAgIHVuc2lnbmVkIG1fYmFzZVR5cGVGbGFncyA6IDY7IC8vIE9wdGlvblNldDxCYXNlVHlwZUZs
YWc+CiAgICAgYm9vbCBtX2hhc1JhcmVEYXRhIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
ZjQ3MjY4NWJmYTk4MDliZGZhODJlMzUzMWFmNTYxMzkyYWU4Y2ZhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94R2VvbWV0cnkuY3Bw
CkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKKworI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoQm94R2VvbWV0cnkpOworCitCb3hHZW9tZXRyeTo6Qm94R2VvbWV0cnkoY29uc3Qg
Qm94R2VvbWV0cnkmIG90aGVyKQorICAgIDogbV90b3BMZWZ0KG90aGVyLm1fdG9wTGVmdCkKKyAg
ICAsIG1fY29udGVudFdpZHRoKG90aGVyLm1fY29udGVudFdpZHRoKQorICAgICwgbV9jb250ZW50
SGVpZ2h0KG90aGVyLm1fY29udGVudEhlaWdodCkKKyAgICAsIG1faG9yaXpvbnRhbE1hcmdpbihv
dGhlci5tX2hvcml6b250YWxNYXJnaW4pCisgICAgLCBtX3ZlcnRpY2FsTWFyZ2luKG90aGVyLm1f
dmVydGljYWxNYXJnaW4pCisgICAgLCBtX2hhc0NsZWFyYW5jZShvdGhlci5tX2hhc0NsZWFyYW5j
ZSkKKyAgICAsIG1fYm9yZGVyKG90aGVyLm1fYm9yZGVyKQorICAgICwgbV9wYWRkaW5nKG90aGVy
Lm1fcGFkZGluZykKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICwgbV9oYXNWYWxpZFRvcChvdGhl
ci5tX2hhc1ZhbGlkVG9wKQorICAgICwgbV9oYXNWYWxpZExlZnQob3RoZXIubV9oYXNWYWxpZExl
ZnQpCisgICAgLCBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbihvdGhlci5tX2hhc1ZhbGlkSG9y
aXpvbnRhbE1hcmdpbikKKyAgICAsIG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbihvdGhlci5tX2hh
c1ZhbGlkVmVydGljYWxNYXJnaW4pCisgICAgLCBtX2hhc1ZhbGlkQm9yZGVyKG90aGVyLm1faGFz
VmFsaWRCb3JkZXIpCisgICAgLCBtX2hhc1ZhbGlkUGFkZGluZyhvdGhlci5tX2hhc1ZhbGlkUGFk
ZGluZykKKyAgICAsIG1faGFzVmFsaWRDb250ZW50SGVpZ2h0KG90aGVyLm1faGFzVmFsaWRDb250
ZW50SGVpZ2h0KQorICAgICwgbV9oYXNWYWxpZENvbnRlbnRXaWR0aChvdGhlci5tX2hhc1ZhbGlk
Q29udGVudFdpZHRoKQorICAgICwgbV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZShvdGhlci5t
X2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKQorI2VuZGlmCit7Cit9CisKK0JveEdlb21ldHJ5
Ojp+Qm94R2VvbWV0cnkoKQoreworfQorCitSZWN0IEJveEdlb21ldHJ5OjptYXJnaW5Cb3goKSBj
b25zdAoreworICAgIGF1dG8gYm9yZGVyQm94ID0gdGhpcy0+Ym9yZGVyQm94KCk7CisKKyAgICBS
ZWN0IG1hcmdpbkJveDsKKyAgICBtYXJnaW5Cb3guc2V0VG9wKGJvcmRlckJveC50b3AoKSAtIG1h
cmdpbkJlZm9yZSgpKTsKKyAgICBtYXJnaW5Cb3guc2V0TGVmdChib3JkZXJCb3gubGVmdCgpIC0g
bWFyZ2luU3RhcnQoKSk7CisgICAgbWFyZ2luQm94LnNldEhlaWdodChib3JkZXJCb3guaGVpZ2h0
KCkgKyBtYXJnaW5CZWZvcmUoKSArIG1hcmdpbkFmdGVyKCkpOworICAgIG1hcmdpbkJveC5zZXRX
aWR0aChib3JkZXJCb3gud2lkdGgoKSArIG1hcmdpblN0YXJ0KCkgKyBtYXJnaW5FbmQoKSk7Cisg
ICAgcmV0dXJuIG1hcmdpbkJveDsKK30KKworUmVjdCBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94KCkg
Y29uc3QKK3sKKyAgICBSZWN0IGJvcmRlckJveDsKKyAgICBib3JkZXJCb3guc2V0VG9wTGVmdCh7
IH0pOworICAgIGJvcmRlckJveC5zZXRTaXplKHsgd2lkdGgoKSwgaGVpZ2h0KCkgfSk7CisgICAg
cmV0dXJuIGJvcmRlckJveDsKK30KKworUmVjdCBCb3hHZW9tZXRyeTo6cGFkZGluZ0JveCgpIGNv
bnN0Cit7CisgICAgYXV0byBib3JkZXJCb3ggPSB0aGlzLT5ib3JkZXJCb3goKTsKKworICAgIFJl
Y3QgcGFkZGluZ0JveDsKKyAgICBwYWRkaW5nQm94LnNldFRvcChib3JkZXJCb3gudG9wKCkgKyBi
b3JkZXJUb3AoKSk7CisgICAgcGFkZGluZ0JveC5zZXRMZWZ0KGJvcmRlckJveC5sZWZ0KCkgKyBi
b3JkZXJMZWZ0KCkpOworICAgIHBhZGRpbmdCb3guc2V0SGVpZ2h0KGJvcmRlckJveC5ib3R0b20o
KSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkpOworICAgIHBhZGRpbmdCb3guc2V0V2lk
dGgoYm9yZGVyQm94LndpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpKTsKKyAg
ICByZXR1cm4gcGFkZGluZ0JveDsKK30KKworUmVjdCBCb3hHZW9tZXRyeTo6Y29udGVudEJveCgp
IGNvbnN0Cit7CisgICAgUmVjdCBjb250ZW50Qm94OworICAgIGNvbnRlbnRCb3guc2V0VG9wKGNv
bnRlbnRCb3hUb3AoKSk7CisgICAgY29udGVudEJveC5zZXRMZWZ0KGNvbnRlbnRCb3hMZWZ0KCkp
OworICAgIGNvbnRlbnRCb3guc2V0V2lkdGgoY29udGVudEJveFdpZHRoKCkpOworICAgIGNvbnRl
bnRCb3guc2V0SGVpZ2h0KGNvbnRlbnRCb3hIZWlnaHQoKSk7CisgICAgcmV0dXJuIGNvbnRlbnRC
b3g7Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvbGF5b3V0dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2xheW91dHRyZWUvTGF5b3V0Qm94R2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjEwZDU1MDgwMTFi
Y2FlNjcxNmRiYWNhNGNhMzM2NGE4OTgxOGVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94R2VvbWV0cnkuaApAQCAtMCwwICsxLDY4
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNwbGF5UmVjdC5oIgorI2luY2x1ZGUgIkxh
eW91dFVuaXRzLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgUmVjdCB7CitwdWJsaWM6CisgICAg
UmVjdCgpID0gZGVmYXVsdDsKKyAgICBSZWN0KExheW91dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxl
ZnQsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KTsKKyAgICBSZWN0KExheW91
dFBvaW50IHRvcExlZnQsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KTsKKyAg
ICBSZWN0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBjb25zdCBMYXlvdXRTaXplJik7Cisg
ICAgCisgICAgTGF5b3V0VW5pdCB0b3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxlZnQoKSBj
b25zdDsKKyAgICBMYXlvdXRQb2ludCB0b3BMZWZ0KCkgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0
IGJvdHRvbSgpIGNvbnN0OworICAgIExheW91dFVuaXQgcmlnaHQoKSBjb25zdDsKKyAgICBMYXlv
dXRQb2ludCBib3R0b21SaWdodCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNv
bnN0OworICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0U2l6ZSBzaXpl
KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRvcChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldExl
ZnQoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50Jik7
CisgICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNldEhlaWdodChMYXlv
dXRVbml0KTsKKyAgICB2b2lkIHNldFNpemUoY29uc3QgTGF5b3V0U2l6ZSYpOworCisgICAgdm9p
ZCBzaGlmdExlZnRUbyhMYXlvdXRVbml0KTsKKyAgICB2b2lkIHNoaWZ0UmlnaHRUbyhMYXlvdXRV
bml0KTsKKyAgICB2b2lkIHNoaWZ0VG9wVG8oTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzaGlmdEJv
dHRvbVRvKExheW91dFVuaXQpOworCisgICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KExheW91dFVu
aXQpOworICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCk7CisKKyAgICB2b2lkIGV4
cGFuZChPcHRpb25hbDxMYXlvdXRVbml0PiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4pOworICAgIHZv
aWQgZXhwYW5kSG9yaXpvbnRhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgZXhwYW5kKGRlbHRhLCB7
IH0pOyB9CisgICAgdm9pZCBleHBhbmRWZXJ0aWNhbGx5KExheW91dFVuaXQgZGVsdGEpIHsgZXhw
YW5kKHsgfSwgZGVsdGEpOyB9CisgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFJlY3QmIHJlY3Qp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5pbnRlcnNlY3RzKHJlY3QpOyB9CisKKyAgICBSZWN0IGNs
b25lKCkgY29uc3Q7CisgICAgb3BlcmF0b3IgTGF5b3V0UmVjdCgpIGNvbnN0OworCitwcml2YXRl
OgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgdm9pZCBpbnZhbGlkYXRlVG9wKCkgeyBtX2hhc1Zh
bGlkVG9wID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFsaWRhdGVMZWZ0KCkgeyBtX2hhc1ZhbGlk
TGVmdCA9IGZhbHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlV2lkdGgoKSB7IG1faGFzVmFsaWRX
aWR0aCA9IGZhbHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlSGVpZ2h0KCkgeyBtX2hhc1ZhbGlk
SGVpZ2h0ID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFsaWRhdGVQb3NpdGlvbigpOworCisgICAg
Ym9vbCBoYXNWYWxpZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZFRvcCAmJiBt
X2hhc1ZhbGlkTGVmdDsgfQorICAgIGJvb2wgaGFzVmFsaWRTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNWYWxpZFdpZHRoICYmIG1faGFzVmFsaWRIZWlnaHQ7IH0KKyAgICBib29sIGhhc1ZhbGlk
R2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBoYXNWYWxpZFBvc2l0aW9uKCkgJiYgaGFzVmFsaWRT
aXplKCk7IH0KKworICAgIHZvaWQgc2V0SGFzVmFsaWRQb3NpdGlvbigpOworICAgIHZvaWQgc2V0
SGFzVmFsaWRTaXplKCk7CisKKyAgICBib29sIG1faGFzVmFsaWRUb3AgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9oYXNWYWxpZExlZnQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNWYWxpZFdpZHRo
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzVmFsaWRIZWlnaHQgeyBmYWxzZSB9OworI2VuZGlm
IC8vIEFTU0VSVF9FTkFCTEVECisgICAgTGF5b3V0UmVjdCBtX3JlY3Q7Cit9OworCitpbmxpbmUg
UmVjdDo6UmVjdChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHdp
ZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKKyAgICA6IG1fcmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBo
ZWlnaHQpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBtX2hhc1ZhbGlkVG9wID0gdHJ1ZTsK
KyAgICBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7CisgICAgbV9oYXNWYWxpZFdpZHRoID0gdHJ1ZTsK
KyAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsKKyNlbmRpZgorfQorCitpbmxpbmUgUmVjdDo6
UmVjdChMYXlvdXRQb2ludCB0b3BMZWZ0LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhl
aWdodCkKKyAgICA6IFJlY3QodG9wTGVmdC55KCksIHRvcExlZnQueCgpLCB3aWR0aCwgaGVpZ2h0
KQoreworfQorCitpbmxpbmUgUmVjdDo6UmVjdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwg
Y29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKKyAgICA6IFJlY3QodG9wTGVmdC55KCksIHRvcExlZnQu
eCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpCit7Cit9CisKKyNpZiBBU1NFUlRfRU5B
QkxFRAoraW5saW5lIHZvaWQgUmVjdDo6aW52YWxpZGF0ZVBvc2l0aW9uKCkKK3sKKyAgICBpbnZh
bGlkYXRlVG9wKCk7CisgICAgaW52YWxpZGF0ZUxlZnQoKTsKK30KKworaW5saW5lIHZvaWQgUmVj
dDo6c2V0SGFzVmFsaWRQb3NpdGlvbigpCit7CisgICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7Cisg
ICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzZXRIYXNW
YWxpZFNpemUoKQoreworICAgIG1faGFzVmFsaWRXaWR0aCA9IHRydWU7CisgICAgbV9oYXNWYWxp
ZEhlaWdodCA9IHRydWU7Cit9CisjZW5kaWYKKworaW5saW5lIExheW91dFVuaXQgUmVjdDo6dG9w
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7CisgICAgcmV0dXJuIG1fcmVj
dC55KCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IFJlY3Q6OmxlZnQoKSBjb25zdAoreworICAg
IEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7CisgICAgcmV0dXJuIG1fcmVjdC54KCk7Cit9CisKK2lu
bGluZSBMYXlvdXRVbml0IFJlY3Q6OmJvdHRvbSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFz
VmFsaWRUb3AgJiYgbV9oYXNWYWxpZEhlaWdodCk7CisgICAgcmV0dXJuIG1fcmVjdC5tYXhZKCk7
Cit9CisKK2lubGluZSBMYXlvdXRVbml0IFJlY3Q6OnJpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZFdpZHRoKTsKKyAgICByZXR1cm4gbV9yZWN0
Lm1heFgoKTsKK30KKworaW5saW5lIExheW91dFBvaW50IFJlY3Q6OnRvcExlZnQoKSBjb25zdAor
eworICAgIEFTU0VSVChoYXNWYWxpZFBvc2l0aW9uKCkpOworICAgIHJldHVybiBtX3JlY3QubWlu
WE1pbllDb3JuZXIoKTsKK30KKworaW5saW5lIExheW91dFBvaW50IFJlY3Q6OmJvdHRvbVJpZ2h0
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRHZW9tZXRyeSgpKTsKKyAgICByZXR1cm4g
bV9yZWN0Lm1heFhNYXhZQ29ybmVyKCk7Cit9CisKK2lubGluZSBMYXlvdXRTaXplIFJlY3Q6OnNp
emUoKSBjb25zdAoreworICAgIEFTU0VSVChoYXNWYWxpZFNpemUoKSk7CisgICAgcmV0dXJuIG1f
cmVjdC5zaXplKCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IFJlY3Q6OndpZHRoKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFdpZHRoKTsKKyAgICByZXR1cm4gbV9yZWN0LndpZHRo
KCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IFJlY3Q6OmhlaWdodCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1faGFzVmFsaWRIZWlnaHQpOworICAgIHJldHVybiBtX3JlY3QuaGVpZ2h0KCk7Cit9
CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExl
ZnQpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBzZXRIYXNWYWxpZFBvc2l0aW9uKCk7Cisj
ZW5kaWYKKyAgICBtX3JlY3Quc2V0TG9jYXRpb24odG9wTGVmdCk7Cit9CisKK2lubGluZSB2b2lk
IFJlY3Q6OnNldFRvcChMYXlvdXRVbml0IHRvcCkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
IG1faGFzVmFsaWRUb3AgPSB0cnVlOworI2VuZGlmCisgICAgbV9yZWN0LnNldFkodG9wKTsKK30K
KworaW5saW5lIHZvaWQgUmVjdDo6c2V0TGVmdChMYXlvdXRVbml0IGxlZnQpCit7CisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3Jl
Y3Quc2V0WChsZWZ0KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2V0V2lkdGgoTGF5b3V0VW5p
dCB3aWR0aCkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIG1faGFzVmFsaWRXaWR0aCA9IHRy
dWU7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0V2lkdGgod2lkdGgpOworfQorCitpbmxpbmUgdm9p
ZCBSZWN0OjpzZXRIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpCit7CisjaWYgQVNTRVJUX0VOQUJM
RUQKKyAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsKKyNlbmRpZgorICAgIG1fcmVjdC5zZXRI
ZWlnaHQoaGVpZ2h0KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2V0U2l6ZShjb25zdCBMYXlv
dXRTaXplJiBzaXplKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgc2V0SGFzVmFsaWRTaXpl
KCk7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0U2l6ZShzaXplKTsKK30KKworaW5saW5lIHZvaWQg
UmVjdDo6c2hpZnRMZWZ0VG8oTGF5b3V0VW5pdCBsZWZ0KQoreworICAgIEFTU0VSVChtX2hhc1Zh
bGlkTGVmdCk7CisgICAgbV9yZWN0LnNoaWZ0WEVkZ2VUbyhsZWZ0KTsKK30KKworaW5saW5lIHZv
aWQgUmVjdDo6c2hpZnRSaWdodFRvKExheW91dFVuaXQgcmlnaHQpCit7CisgICAgQVNTRVJUKG1f
aGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRXaWR0aCk7CisgICAgbV9yZWN0LnNoaWZ0TWF4WEVk
Z2VUbyhyaWdodCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0VG9wVG8oTGF5b3V0VW5p
dCB0b3ApCit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAgIG1fcmVjdC5zaGlmdFlF
ZGdlVG8odG9wKTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2hpZnRCb3R0b21UbyhMYXlvdXRV
bml0IGJvdHRvbSkKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCAmJiBtX2hhc1ZhbGlkSGVp
Z2h0KTsKKyAgICBtX3JlY3Quc2hpZnRNYXhZRWRnZVRvKGJvdHRvbSk7Cit9CisKK2lubGluZSB2
b2lkIFJlY3Q6Om1vdmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCBvZmZzZXQpCit7CisgICAgQVNT
RVJUKG1faGFzVmFsaWRMZWZ0KTsKKyAgICBtX3JlY3QubW92ZShMYXlvdXRTaXplIHsgb2Zmc2V0
LCAwIH0pOworfQorCitpbmxpbmUgdm9pZCBSZWN0Ojptb3ZlVmVydGljYWxseShMYXlvdXRVbml0
IG9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7CisgICAgbV9yZWN0Lm1vdmUo
TGF5b3V0U2l6ZSB7IDAsIG9mZnNldCB9KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6ZXhwYW5k
KE9wdGlvbmFsPExheW91dFVuaXQ+IHdpZHRoLCBPcHRpb25hbDxMYXlvdXRVbml0PiBoZWlnaHQp
Cit7CisgICAgQVNTRVJUKCF3aWR0aCB8fCBtX2hhc1ZhbGlkV2lkdGgpOworICAgIEFTU0VSVCgh
aGVpZ2h0IHx8IG1faGFzVmFsaWRIZWlnaHQpOworICAgIG1fcmVjdC5leHBhbmQod2lkdGgudmFs
dWVPcigwKSwgaGVpZ2h0LnZhbHVlT3IoMCkpOworfQorCitpbmxpbmUgUmVjdCBSZWN0OjpjbG9u
ZSgpIGNvbnN0Cit7CisgICAgUmVjdCByZWN0OworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgcmVj
dC5tX2hhc1ZhbGlkVG9wID0gbV9oYXNWYWxpZFRvcDsKKyAgICByZWN0Lm1faGFzVmFsaWRMZWZ0
ID0gbV9oYXNWYWxpZExlZnQ7CisgICAgcmVjdC5tX2hhc1ZhbGlkV2lkdGggPSBtX2hhc1ZhbGlk
V2lkdGg7CisgICAgcmVjdC5tX2hhc1ZhbGlkSGVpZ2h0ICA9IG1faGFzVmFsaWRIZWlnaHQ7Cisj
ZW5kaWYKKyAgICByZWN0Lm1fcmVjdCA9IG1fcmVjdDsKKyAgICByZXR1cm4gcmVjdDsKK30KKwor
aW5saW5lIFJlY3Q6Om9wZXJhdG9yIExheW91dFJlY3QoKSBjb25zdAoreworICAgIEFTU0VSVCho
YXNWYWxpZEdlb21ldHJ5KCkpOworICAgIHJldHVybiBtX3JlY3Q7Cit9CisKKworY2xhc3MgQm94
R2VvbWV0cnkgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQm94R2VvbWV0cnkpOworcHVi
bGljOgorICAgIEJveEdlb21ldHJ5KGNvbnN0IEJveEdlb21ldHJ5Jik7CisgICAgQm94R2VvbWV0
cnkoKSA9IGRlZmF1bHQ7CisgICAgfkJveEdlb21ldHJ5KCk7CisKKyAgICBMYXlvdXRVbml0IHRv
cCgpIGNvbnN0OworICAgIExheW91dFVuaXQgbGVmdCgpIGNvbnN0OworICAgIExheW91dFVuaXQg
Ym90dG9tKCkgY29uc3QgeyByZXR1cm4gdG9wKCkgKyBoZWlnaHQoKTsgfQorICAgIExheW91dFVu
aXQgcmlnaHQoKSBjb25zdCB7IHJldHVybiBsZWZ0KCkgKyB3aWR0aCgpOyB9CisKKyAgICBMYXlv
dXRQb2ludCB0b3BMZWZ0KCkgY29uc3Q7CisgICAgTGF5b3V0UG9pbnQgYm90dG9tUmlnaHQoKSBj
b25zdCB7IHJldHVybiB7IHJpZ2h0KCksIGJvdHRvbSgpIH07IH0KKworICAgIExheW91dFNpemUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHsgd2lkdGgoKSwgaGVpZ2h0KCkgfTsgfQorICAgIExheW91
dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nQm94V2lk
dGgoKSArIGJvcmRlclJpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIGJvcmRlclRvcCgpICsgcGFkZGluZ0JveEhlaWdodCgpICsgYm9yZGVyQm90dG9tKCk7
IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXplKCkuaXNFbXB0eSgpOyB9
CisgICAgUmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4geyB0b3AoKSwgbGVmdCgpLCB3aWR0aCgp
LCBoZWlnaHQoKSB9OyB9CisgICAgUmVjdCByZWN0V2l0aE1hcmdpbigpIGNvbnN0IHsgcmV0dXJu
IHsgdG9wKCkgLSBtYXJnaW5CZWZvcmUoKSwgbGVmdCgpIC0gbWFyZ2luU3RhcnQoKSwgbWFyZ2lu
U3RhcnQoKSArIHdpZHRoKCkgKyBtYXJnaW5FbmQoKSwgbWFyZ2luQmVmb3JlKCkgKyBoZWlnaHQo
KSArIG1hcmdpbkFmdGVyKCkgfTsgfQorCisgICAgc3RydWN0IFZlcnRpY2FsTWFyZ2luIHsKKyAg
ICAgICAgTGF5b3V0VW5pdCBiZWZvcmU7CisgICAgICAgIExheW91dFVuaXQgYWZ0ZXI7CisgICAg
fTsKKyAgICBWZXJ0aWNhbE1hcmdpbiB2ZXJ0aWNhbE1hcmdpbigpIGNvbnN0OworCisgICAgc3Ry
dWN0IEhvcml6b250YWxNYXJnaW4geworICAgICAgICBMYXlvdXRVbml0IHN0YXJ0OworICAgICAg
ICBMYXlvdXRVbml0IGVuZDsKKyAgICB9OworICAgIEhvcml6b250YWxNYXJnaW4gaG9yaXpvbnRh
bE1hcmdpbigpIGNvbnN0OworICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKCkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0OworICAgIExheW91dFVuaXQgbWFyZ2lu
QWZ0ZXIoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCgpIGNvbnN0OworICAgIGJv
b2wgaGFzQ2xlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDbGVhcmFuY2U7IH0KKworICAg
IExheW91dFVuaXQgYm9yZGVyVG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJMZWZ0
KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBib3JkZXJCb3R0b20oKSBjb25zdDsKKyAgICBMYXlv
dXRVbml0IGJvcmRlclJpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbEJvcmRl
cigpIGNvbnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCk7IH0KKyAgICBM
YXlvdXRVbml0IGhvcml6b250YWxCb3JkZXIoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCkg
KyBib3JkZXJSaWdodCgpOyB9CisKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nVG9w
KCkgY29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ0xlZnQoKSBjb25zdDsK
KyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nQm90dG9tKCkgY29uc3Q7CisgICAgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ1JpZ2h0KCkgY29uc3Q7CisgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gdmVydGljYWxQYWRkaW5nKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5p
dD4gaG9yaXpvbnRhbFBhZGRpbmcoKSBjb25zdDsKKworICAgIExheW91dFVuaXQgY29udGVudEJv
eFRvcCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdCb3hUb3AoKSArIHBhZGRpbmdUb3AoKS52YWx1
ZU9yKDApOyB9CisgICAgTGF5b3V0VW5pdCBjb250ZW50Qm94TGVmdCgpIGNvbnN0IHsgcmV0dXJu
IHBhZGRpbmdCb3hMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7IH0KKyAgICBMYXlv
dXRVbml0IGNvbnRlbnRCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBjb250ZW50Qm94VG9wKCkg
KyBjb250ZW50Qm94SGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IGNvbnRlbnRCb3hSaWdodCgp
IGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRCb3hMZWZ0KCkgKyBjb250ZW50Qm94V2lkdGgoKTsgfQor
ICAgIExheW91dFVuaXQgY29udGVudEJveEhlaWdodCgpIGNvbnN0OworICAgIExheW91dFVuaXQg
Y29udGVudEJveFdpZHRoKCkgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hUb3Ao
KSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKTsgfQorICAgIExheW91dFVuaXQgcGFkZGluZ0Jv
eExlZnQoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCk7IH0KKyAgICBMYXlvdXRVbml0IHBh
ZGRpbmdCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBwYWRkaW5nQm94VG9wKCkgKyBwYWRkaW5n
Qm94SGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hSaWdodCgpIGNvbnN0IHsg
cmV0dXJuIHBhZGRpbmdCb3hMZWZ0KCkgKyBwYWRkaW5nQm94V2lkdGgoKTsgfQorICAgIExheW91
dFVuaXQgcGFkZGluZ0JveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdUb3AoKS52YWx1
ZU9yKDApICsgY29udGVudEJveEhlaWdodCgpICsgcGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7
IH0KKyAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRp
bmdMZWZ0KCkudmFsdWVPcigwKSArIGNvbnRlbnRCb3hXaWR0aCgpICsgcGFkZGluZ1JpZ2h0KCku
dmFsdWVPcigwKTsgfQorCisgICAgTGF5b3V0VW5pdCBib3JkZXJCb3hIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBib3JkZXJUb3AoKSArIHBhZGRpbmdCb3hIZWlnaHQoKSArIGJvcmRlckJvdHRvbSgp
OyB9CisgICAgTGF5b3V0VW5pdCBib3JkZXJCb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRl
ckxlZnQoKSArIHBhZGRpbmdCb3hXaWR0aCgpICsgYm9yZGVyUmlnaHQoKTsgfQorICAgIExheW91
dFVuaXQgbWFyZ2luQm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQmVmb3JlKCkgKyBi
b3JkZXJCb3hIZWlnaHQoKSArIG1hcmdpbkFmdGVyKCk7IH0KKyAgICBMYXlvdXRVbml0IG1hcmdp
bkJveFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luU3RhcnQoKSArIGJvcmRlckJveFdpZHRo
KCkgKyBtYXJnaW5FbmQoKTsgfQorCisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE1hcmdpbkJvcmRl
ckFuZFBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtYXJnaW5CZWZvcmUoKSArIHZlcnRpY2FsQm9y
ZGVyKCkgKyB2ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDApICsgbWFyZ2luQWZ0ZXIoKTsgfQor
ICAgIExheW91dFVuaXQgaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSBjb25zdCB7
IHJldHVybiBtYXJnaW5TdGFydCgpICsgaG9yaXpvbnRhbEJvcmRlcigpICsgaG9yaXpvbnRhbFBh
ZGRpbmcoKS52YWx1ZU9yKDApICsgbWFyZ2luRW5kKCk7IH0KKworICAgIFJlY3QgbWFyZ2luQm94
KCkgY29uc3Q7CisgICAgUmVjdCBib3JkZXJCb3goKSBjb25zdDsKKyAgICBSZWN0IHBhZGRpbmdC
b3goKSBjb25zdDsKKyAgICBSZWN0IGNvbnRlbnRCb3goKSBjb25zdDsKKworI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgdm9pZCBzZXRIYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgpIHsgbV9oYXNQ
cmVjb21wdXRlZE1hcmdpbkJlZm9yZSA9IHRydWU7IH0KKyNlbmRpZgorCisgICAgdm9pZCBzZXRU
b3BMZWZ0KGNvbnN0IExheW91dFBvaW50Jik7CisgICAgdm9pZCBzZXRUb3AoTGF5b3V0VW5pdCk7
CisgICAgdm9pZCBzZXRMZWZ0KExheW91dFVuaXQpOworICAgIHZvaWQgbW92ZUhvcml6b250YWxs
eShMYXlvdXRVbml0IG9mZnNldCkgeyBtX3RvcExlZnQubW92ZShvZmZzZXQsIDBfbHUpOyB9Cisg
ICAgdm9pZCBtb3ZlVmVydGljYWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX3RvcExlZnQubW92
ZSgwX2x1LCBvZmZzZXQpOyB9CisgICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNpemUmIHNpemUp
IHsgbV90b3BMZWZ0Lm1vdmUoc2l6ZSk7IH0KKyAgICB2b2lkIG1vdmVCeShMYXlvdXRQb2ludCBv
ZmZzZXQpIHsgbV90b3BMZWZ0Lm1vdmVCeShvZmZzZXQpOyB9CisKKyAgICB2b2lkIHNldENvbnRl
bnRCb3hIZWlnaHQoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRDb250ZW50Qm94V2lkdGgoTGF5
b3V0VW5pdCk7CisKKyAgICB2b2lkIHNldEhvcml6b250YWxNYXJnaW4oSG9yaXpvbnRhbE1hcmdp
bik7CisgICAgdm9pZCBzZXRWZXJ0aWNhbE1hcmdpbihWZXJ0aWNhbE1hcmdpbik7CisgICAgdm9p
ZCBzZXRIYXNDbGVhcmFuY2UoKSB7IG1faGFzQ2xlYXJhbmNlID0gdHJ1ZTsgfQorCisgICAgdm9p
ZCBzZXRCb3JkZXIoTGF5b3V0OjpFZGdlcyk7CisKKyAgICB2b2lkIHNldFZlcnRpY2FsUGFkZGlu
ZyhMYXlvdXQ6OlZlcnRpY2FsRWRnZXMpOworICAgIHZvaWQgc2V0UGFkZGluZyhPcHRpb25hbDxM
YXlvdXQ6OkVkZ2VzPik7CisKK3ByaXZhdGU6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICB2b2lk
IGludmFsaWRhdGVNYXJnaW4oKTsKKyAgICB2b2lkIGludmFsaWRhdGVCb3JkZXIoKSB7IG1faGFz
VmFsaWRCb3JkZXIgPSBmYWxzZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVBhZGRpbmcoKSB7IG1f
aGFzVmFsaWRQYWRkaW5nID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFsaWRhdGVQcmVjb21wdXRl
ZE1hcmdpbkJlZm9yZSgpIHsgbV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSA9IGZhbHNlOyB9
CisKKyAgICB2b2lkIHNldEhhc1ZhbGlkVG9wKCkgeyBtX2hhc1ZhbGlkVG9wID0gdHJ1ZTsgfQor
ICAgIHZvaWQgc2V0SGFzVmFsaWRMZWZ0KCkgeyBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7IH0KKyAg
ICB2b2lkIHNldEhhc1ZhbGlkVmVydGljYWxNYXJnaW4oKSB7IG1faGFzVmFsaWRWZXJ0aWNhbE1h
cmdpbiA9IHRydWU7IH0KKyAgICB2b2lkIHNldEhhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbigpIHsg
bV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4gPSB0cnVlOyB9CisKKyAgICB2b2lkIHNldEhhc1Zh
bGlkQm9yZGVyKCkgeyBtX2hhc1ZhbGlkQm9yZGVyID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SGFz
VmFsaWRQYWRkaW5nKCkgeyBtX2hhc1ZhbGlkUGFkZGluZyA9IHRydWU7IH0KKworICAgIHZvaWQg
c2V0SGFzVmFsaWRDb250ZW50SGVpZ2h0KCkgeyBtX2hhc1ZhbGlkQ29udGVudEhlaWdodCA9IHRy
dWU7IH0KKyAgICB2b2lkIHNldEhhc1ZhbGlkQ29udGVudFdpZHRoKCkgeyBtX2hhc1ZhbGlkQ29u
dGVudFdpZHRoID0gdHJ1ZTsgfQorI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisKKyAgICBMYXlv
dXRQb2ludCBtX3RvcExlZnQ7CisgICAgTGF5b3V0VW5pdCBtX2NvbnRlbnRXaWR0aDsKKyAgICBM
YXlvdXRVbml0IG1fY29udGVudEhlaWdodDsKKworICAgIEhvcml6b250YWxNYXJnaW4gbV9ob3Jp
em9udGFsTWFyZ2luOworICAgIFZlcnRpY2FsTWFyZ2luIG1fdmVydGljYWxNYXJnaW47CisgICAg
Ym9vbCBtX2hhc0NsZWFyYW5jZSB7IGZhbHNlIH07CisKKyAgICBMYXlvdXQ6OkVkZ2VzIG1fYm9y
ZGVyOworICAgIE9wdGlvbmFsPExheW91dDo6RWRnZXM+IG1fcGFkZGluZzsKKworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgYm9vbCBtX2hhc1ZhbGlkVG9wIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aGFzVmFsaWRMZWZ0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzVmFsaWRIb3Jpem9udGFsTWFy
Z2luIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbiB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2hhc1ZhbGlkQm9yZGVyIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFz
VmFsaWRQYWRkaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzVmFsaWRDb250ZW50SGVpZ2h0
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzVmFsaWRDb250ZW50V2lkdGggeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSB7IGZhbHNlIH07CisjZW5kaWYg
Ly8gQVNTRVJUX0VOQUJMRUQKK307CisKKyNpZiBBU1NFUlRfRU5BQkxFRAoraW5saW5lIHZvaWQg
Qm94R2VvbWV0cnk6OmludmFsaWRhdGVNYXJnaW4oKQoreworICAgIG1faGFzVmFsaWRIb3Jpem9u
dGFsTWFyZ2luID0gZmFsc2U7CisgICAgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luID0gZmFsc2U7
Cit9CisjZW5kaWYKKworaW5saW5lIExheW91dFVuaXQgQm94R2VvbWV0cnk6OnRvcCgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgKG1faGFzUHJlY29tcHV0ZWRNYXJnaW5C
ZWZvcmUgfHwgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKSk7CisgICAgcmV0dXJuIG1fdG9wTGVm
dC55KCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5OjpsZWZ0KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZEhvcml6b250YWxNYXJn
aW4pOworICAgIHJldHVybiBtX3RvcExlZnQueCgpOworfQorCitpbmxpbmUgTGF5b3V0UG9pbnQg
Qm94R2VvbWV0cnk6OnRvcExlZnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9w
ICYmIChtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHx8IG1faGFzVmFsaWRWZXJ0aWNhbE1h
cmdpbikpOworICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkSG9yaXpvbnRh
bE1hcmdpbik7CisgICAgcmV0dXJuIG1fdG9wTGVmdDsKK30KKworaW5saW5lIHZvaWQgQm94R2Vv
bWV0cnk6OnNldFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQpCit7CisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICBzZXRIYXNWYWxpZFRvcCgpOworICAgIHNldEhhc1ZhbGlkTGVmdCgp
OworI2VuZGlmCisgICAgbV90b3BMZWZ0ID0gdG9wTGVmdDsKK30KKworaW5saW5lIHZvaWQgQm94
R2VvbWV0cnk6OnNldFRvcChMYXlvdXRVbml0IHRvcCkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgIHNldEhhc1ZhbGlkVG9wKCk7CisjZW5kaWYKKyAgICBtX3RvcExlZnQuc2V0WSh0b3ApOwor
fQorCitpbmxpbmUgdm9pZCBCb3hHZW9tZXRyeTo6c2V0TGVmdChMYXlvdXRVbml0IGxlZnQpCit7
CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBzZXRIYXNWYWxpZExlZnQoKTsKKyNlbmRpZgorICAg
IG1fdG9wTGVmdC5zZXRYKGxlZnQpOworfQorCitpbmxpbmUgdm9pZCBCb3hHZW9tZXRyeTo6c2V0
Q29udGVudEJveEhlaWdodChMYXlvdXRVbml0IGhlaWdodCkKK3sgCisjaWYgQVNTRVJUX0VOQUJM
RUQKKyAgICBzZXRIYXNWYWxpZENvbnRlbnRIZWlnaHQoKTsKKyNlbmRpZgorICAgIG1fY29udGVu
dEhlaWdodCA9IGhlaWdodDsKK30KKworaW5saW5lIHZvaWQgQm94R2VvbWV0cnk6OnNldENvbnRl
bnRCb3hXaWR0aChMYXlvdXRVbml0IHdpZHRoKQoreyAKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
IHNldEhhc1ZhbGlkQ29udGVudFdpZHRoKCk7CisjZW5kaWYKKyAgICBtX2NvbnRlbnRXaWR0aCA9
IHdpZHRoOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBCb3hHZW9tZXRyeTo6Y29udGVudEJveEhl
aWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRDb250ZW50SGVpZ2h0KTsKKyAg
ICByZXR1cm4gbV9jb250ZW50SGVpZ2h0OworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBCb3hHZW9t
ZXRyeTo6Y29udGVudEJveFdpZHRoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZENv
bnRlbnRXaWR0aCk7CisgICAgcmV0dXJuIG1fY29udGVudFdpZHRoOworfQorCitpbmxpbmUgdm9p
ZCBCb3hHZW9tZXRyeTo6c2V0SG9yaXpvbnRhbE1hcmdpbihIb3Jpem9udGFsTWFyZ2luIG1hcmdp
bikKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHNldEhhc1ZhbGlkSG9yaXpvbnRhbE1hcmdp
bigpOworI2VuZGlmCisgICAgbV9ob3Jpem9udGFsTWFyZ2luID0gbWFyZ2luOworfQorCitpbmxp
bmUgdm9pZCBCb3hHZW9tZXRyeTo6c2V0VmVydGljYWxNYXJnaW4oVmVydGljYWxNYXJnaW4gbWFy
Z2luKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgc2V0SGFzVmFsaWRWZXJ0aWNhbE1hcmdp
bigpOworICAgIGludmFsaWRhdGVQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgpOworI2VuZGlmCisg
ICAgbV92ZXJ0aWNhbE1hcmdpbiA9IG1hcmdpbjsKK30KKworaW5saW5lIHZvaWQgQm94R2VvbWV0
cnk6OnNldEJvcmRlcihMYXlvdXQ6OkVkZ2VzIGJvcmRlcikKK3sKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgIHNldEhhc1ZhbGlkQm9yZGVyKCk7CisjZW5kaWYKKyAgICBtX2JvcmRlciA9IGJvcmRl
cjsKK30KKworaW5saW5lIHZvaWQgQm94R2VvbWV0cnk6OnNldFBhZGRpbmcoT3B0aW9uYWw8TGF5
b3V0OjpFZGdlcz4gcGFkZGluZykKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHNldEhhc1Zh
bGlkUGFkZGluZygpOworI2VuZGlmCisgICAgbV9wYWRkaW5nID0gcGFkZGluZzsKK30KKworaW5s
aW5lIHZvaWQgQm94R2VvbWV0cnk6OnNldFZlcnRpY2FsUGFkZGluZyhMYXlvdXQ6OlZlcnRpY2Fs
RWRnZXMgdmVydGljYWxQYWRkaW5nKQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgc2V0SGFz
VmFsaWRQYWRkaW5nKCk7CisjZW5kaWYKKyAgICBtX3BhZGRpbmcgPSBMYXlvdXQ6OkVkZ2VzIHsg
bV9wYWRkaW5nID8gbV9wYWRkaW5nLT5ob3Jpem9udGFsIDogTGF5b3V0OjpIb3Jpem9udGFsRWRn
ZXMoKSwgdmVydGljYWxQYWRkaW5nIH07Cit9CisKK2lubGluZSBCb3hHZW9tZXRyeTo6VmVydGlj
YWxNYXJnaW4gQm94R2VvbWV0cnk6OnZlcnRpY2FsTWFyZ2luKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKTsKKyAgICByZXR1cm4gbV92ZXJ0aWNhbE1hcmdp
bjsKK30KKworaW5saW5lIEJveEdlb21ldHJ5OjpIb3Jpem9udGFsTWFyZ2luIEJveEdlb21ldHJ5
Ojpob3Jpem9udGFsTWFyZ2luKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZEhvcml6
b250YWxNYXJnaW4pOworICAgIHJldHVybiBtX2hvcml6b250YWxNYXJnaW47Cit9CisKK2lubGlu
ZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5OjptYXJnaW5CZWZvcmUoKSBjb25zdAoreworICAgIEFT
U0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOworICAgIHJldHVybiBtX3ZlcnRpY2FsTWFy
Z2luLmJlZm9yZTsKK30KKworaW5saW5lIExheW91dFVuaXQgQm94R2VvbWV0cnk6Om1hcmdpblN0
YXJ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4pOwor
ICAgIHJldHVybiBtX2hvcml6b250YWxNYXJnaW4uc3RhcnQ7Cit9CisKK2lubGluZSBMYXlvdXRV
bml0IEJveEdlb21ldHJ5OjptYXJnaW5BZnRlcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFz
VmFsaWRWZXJ0aWNhbE1hcmdpbik7CisgICAgcmV0dXJuIG1fdmVydGljYWxNYXJnaW4uYWZ0ZXI7
Cit9CisKK2lubGluZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5OjptYXJnaW5FbmQoKSBjb25zdAor
eworICAgIEFTU0VSVChtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7CisgICAgcmV0dXJuIG1f
aG9yaXpvbnRhbE1hcmdpbi5lbmQ7Cit9CisKK2lubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBC
b3hHZW9tZXRyeTo6cGFkZGluZ1RvcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRQ
YWRkaW5nKTsKKyAgICBpZiAoIW1fcGFkZGluZykKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBy
ZXR1cm4gbV9wYWRkaW5nLT52ZXJ0aWNhbC50b3A7Cit9CisKK2lubGluZSBPcHRpb25hbDxMYXlv
dXRVbml0PiBCb3hHZW9tZXRyeTo6cGFkZGluZ0xlZnQoKSBjb25zdAoreworICAgIEFTU0VSVCht
X2hhc1ZhbGlkUGFkZGluZyk7CisgICAgaWYgKCFtX3BhZGRpbmcpCisgICAgICAgIHJldHVybiB7
IH07CisgICAgcmV0dXJuIG1fcGFkZGluZy0+aG9yaXpvbnRhbC5sZWZ0OworfQorCitpbmxpbmUg
T3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94R2VvbWV0cnk6OnBhZGRpbmdCb3R0b20oKSBjb25zdAor
eworICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFkZGluZyk7CisgICAgaWYgKCFtX3BhZGRpbmcpCisg
ICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fcGFkZGluZy0+dmVydGljYWwuYm90dG9t
OworfQorCitpbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94R2VvbWV0cnk6OnBhZGRpbmdS
aWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKKyAgICBpZiAo
IW1fcGFkZGluZykKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gbV9wYWRkaW5nLT5o
b3Jpem9udGFsLnJpZ2h0OworfQorCitpbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94R2Vv
bWV0cnk6OnZlcnRpY2FsUGFkZGluZygpIGNvbnN0Cit7CisgICAgYXV0byBwYWRkaW5nVG9wID0g
dGhpcy0+cGFkZGluZ1RvcCgpOworICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IHRoaXMtPnBhZGRp
bmdCb3R0b20oKTsKKyAgICBpZiAoIXBhZGRpbmdUb3AgJiYgIXBhZGRpbmdCb3R0b20pCisgICAg
ICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHBhZGRpbmdUb3AudmFsdWVPcigwKSArIHBhZGRp
bmdCb3R0b20udmFsdWVPcigwKTsKK30KKworaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJv
eEdlb21ldHJ5Ojpob3Jpem9udGFsUGFkZGluZygpIGNvbnN0Cit7CisgICAgYXV0byBwYWRkaW5n
TGVmdCA9IHRoaXMtPnBhZGRpbmdMZWZ0KCk7CisgICAgYXV0byBwYWRkaW5nUmlnaHQgPSB0aGlz
LT5wYWRkaW5nUmlnaHQoKTsKKyAgICBpZiAoIXBhZGRpbmdMZWZ0ICYmICFwYWRkaW5nUmlnaHQp
CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHBhZGRpbmdMZWZ0LnZhbHVlT3IoMCkg
KyBwYWRkaW5nUmlnaHQudmFsdWVPcigwKTsKK30KKworaW5saW5lIExheW91dFVuaXQgQm94R2Vv
bWV0cnk6OmJvcmRlclRvcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIp
OworICAgIHJldHVybiBtX2JvcmRlci52ZXJ0aWNhbC50b3A7Cit9CisKK2lubGluZSBMYXlvdXRV
bml0IEJveEdlb21ldHJ5Ojpib3JkZXJMZWZ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNW
YWxpZEJvcmRlcik7CisgICAgcmV0dXJuIG1fYm9yZGVyLmhvcml6b250YWwubGVmdDsKK30KKwor
aW5saW5lIExheW91dFVuaXQgQm94R2VvbWV0cnk6OmJvcmRlckJvdHRvbSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOworICAgIHJldHVybiBtX2JvcmRlci52ZXJ0aWNh
bC5ib3R0b207Cit9CisKK2lubGluZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5Ojpib3JkZXJSaWdo
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOworICAgIHJldHVybiBt
X2JvcmRlci5ob3Jpem9udGFsLnJpZ2h0OworfQorCit9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEdlb21ldHJ5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEdlb21ldHJ5LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE1OTNjYTUwM2EyM2U5ZGYzODMwZDJhZmQ0OTQ5Y2Fm
Yzg3M2ZjZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEdlb21ldHJ5KTsKLQotR2VvbWV0cnk6Okdlb21ldHJ5KGNvbnN0IEdlb21l
dHJ5JiBvdGhlcikKLSAgICA6IG1fdG9wTGVmdChvdGhlci5tX3RvcExlZnQpCi0gICAgLCBtX2Nv
bnRlbnRXaWR0aChvdGhlci5tX2NvbnRlbnRXaWR0aCkKLSAgICAsIG1fY29udGVudEhlaWdodChv
dGhlci5tX2NvbnRlbnRIZWlnaHQpCi0gICAgLCBtX2hvcml6b250YWxNYXJnaW4ob3RoZXIubV9o
b3Jpem9udGFsTWFyZ2luKQotICAgICwgbV92ZXJ0aWNhbE1hcmdpbihvdGhlci5tX3ZlcnRpY2Fs
TWFyZ2luKQotICAgICwgbV9oYXNDbGVhcmFuY2Uob3RoZXIubV9oYXNDbGVhcmFuY2UpCi0gICAg
LCBtX2JvcmRlcihvdGhlci5tX2JvcmRlcikKLSAgICAsIG1fcGFkZGluZyhvdGhlci5tX3BhZGRp
bmcpCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAsIG1faGFzVmFsaWRUb3Aob3RoZXIubV9oYXNW
YWxpZFRvcCkKLSAgICAsIG1faGFzVmFsaWRMZWZ0KG90aGVyLm1faGFzVmFsaWRMZWZ0KQotICAg
ICwgbV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4ob3RoZXIubV9oYXNWYWxpZEhvcml6b250YWxN
YXJnaW4pCi0gICAgLCBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4ob3RoZXIubV9oYXNWYWxpZFZl
cnRpY2FsTWFyZ2luKQotICAgICwgbV9oYXNWYWxpZEJvcmRlcihvdGhlci5tX2hhc1ZhbGlkQm9y
ZGVyKQotICAgICwgbV9oYXNWYWxpZFBhZGRpbmcob3RoZXIubV9oYXNWYWxpZFBhZGRpbmcpCi0g
ICAgLCBtX2hhc1ZhbGlkQ29udGVudEhlaWdodChvdGhlci5tX2hhc1ZhbGlkQ29udGVudEhlaWdo
dCkKLSAgICAsIG1faGFzVmFsaWRDb250ZW50V2lkdGgob3RoZXIubV9oYXNWYWxpZENvbnRlbnRX
aWR0aCkKLSAgICAsIG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUob3RoZXIubV9oYXNQcmVj
b21wdXRlZE1hcmdpbkJlZm9yZSkKLSNlbmRpZgotewotfQotCi1HZW9tZXRyeTo6fkdlb21ldHJ5
KCkKLXsKLX0KLQotUmVjdCBHZW9tZXRyeTo6bWFyZ2luQm94KCkgY29uc3QKLXsKLSAgICBhdXRv
IGJvcmRlckJveCA9IHRoaXMtPmJvcmRlckJveCgpOwotCi0gICAgUmVjdCBtYXJnaW5Cb3g7Ci0g
ICAgbWFyZ2luQm94LnNldFRvcChib3JkZXJCb3gudG9wKCkgLSBtYXJnaW5CZWZvcmUoKSk7Ci0g
ICAgbWFyZ2luQm94LnNldExlZnQoYm9yZGVyQm94LmxlZnQoKSAtIG1hcmdpblN0YXJ0KCkpOwot
ICAgIG1hcmdpbkJveC5zZXRIZWlnaHQoYm9yZGVyQm94LmhlaWdodCgpICsgbWFyZ2luQmVmb3Jl
KCkgKyBtYXJnaW5BZnRlcigpKTsKLSAgICBtYXJnaW5Cb3guc2V0V2lkdGgoYm9yZGVyQm94Lndp
ZHRoKCkgKyBtYXJnaW5TdGFydCgpICsgbWFyZ2luRW5kKCkpOwotICAgIHJldHVybiBtYXJnaW5C
b3g7Ci19Ci0KLVJlY3QgR2VvbWV0cnk6OmJvcmRlckJveCgpIGNvbnN0Ci17Ci0gICAgUmVjdCBi
b3JkZXJCb3g7Ci0gICAgYm9yZGVyQm94LnNldFRvcExlZnQoeyB9KTsKLSAgICBib3JkZXJCb3gu
c2V0U2l6ZSh7IHdpZHRoKCksIGhlaWdodCgpIH0pOwotICAgIHJldHVybiBib3JkZXJCb3g7Ci19
Ci0KLVJlY3QgR2VvbWV0cnk6OnBhZGRpbmdCb3goKSBjb25zdAotewotICAgIGF1dG8gYm9yZGVy
Qm94ID0gdGhpcy0+Ym9yZGVyQm94KCk7Ci0KLSAgICBSZWN0IHBhZGRpbmdCb3g7Ci0gICAgcGFk
ZGluZ0JveC5zZXRUb3AoYm9yZGVyQm94LnRvcCgpICsgYm9yZGVyVG9wKCkpOwotICAgIHBhZGRp
bmdCb3guc2V0TGVmdChib3JkZXJCb3gubGVmdCgpICsgYm9yZGVyTGVmdCgpKTsKLSAgICBwYWRk
aW5nQm94LnNldEhlaWdodChib3JkZXJCb3guYm90dG9tKCkgLSBib3JkZXJUb3AoKSAtIGJvcmRl
ckJvdHRvbSgpKTsKLSAgICBwYWRkaW5nQm94LnNldFdpZHRoKGJvcmRlckJveC53aWR0aCgpIC0g
Ym9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSk7Ci0gICAgcmV0dXJuIHBhZGRpbmdCb3g7Ci19
Ci0KLVJlY3QgR2VvbWV0cnk6OmNvbnRlbnRCb3goKSBjb25zdAotewotICAgIFJlY3QgY29udGVu
dEJveDsKLSAgICBjb250ZW50Qm94LnNldFRvcChjb250ZW50Qm94VG9wKCkpOwotICAgIGNvbnRl
bnRCb3guc2V0TGVmdChjb250ZW50Qm94TGVmdCgpKTsKLSAgICBjb250ZW50Qm94LnNldFdpZHRo
KGNvbnRlbnRCb3hXaWR0aCgpKTsKLSAgICBjb250ZW50Qm94LnNldEhlaWdodChjb250ZW50Qm94
SGVpZ2h0KCkpOwotICAgIHJldHVybiBjb250ZW50Qm94OwotfQotCi19Ci19Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0
cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEdlb21ldHJ5LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZDY0ZGEyMzU5YmRhM2E4MDc4MDRhMTk5
NGViNzljMzY4MjEwN2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0cnkuaAor
KysgL2Rldi9udWxsCkBAIC0xLDY4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkRp
c3BsYXlSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VW5pdHMuaCIKLSNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1j
bGFzcyBSZWN0IHsKLXB1YmxpYzoKLSAgICBSZWN0KCkgPSBkZWZhdWx0OwotICAgIFJlY3QoTGF5
b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5p
dCBoZWlnaHQpOwotICAgIFJlY3QoTGF5b3V0UG9pbnQgdG9wTGVmdCwgTGF5b3V0VW5pdCB3aWR0
aCwgTGF5b3V0VW5pdCBoZWlnaHQpOwotICAgIFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExl
ZnQsIGNvbnN0IExheW91dFNpemUmKTsKLSAgICAKLSAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0
OwotICAgIExheW91dFVuaXQgbGVmdCgpIGNvbnN0OwotICAgIExheW91dFBvaW50IHRvcExlZnQo
KSBjb25zdDsKLQotICAgIExheW91dFVuaXQgYm90dG9tKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5p
dCByaWdodCgpIGNvbnN0OwotICAgIExheW91dFBvaW50IGJvdHRvbVJpZ2h0KCkgY29uc3Q7Ci0K
LSAgICBMYXlvdXRVbml0IHdpZHRoKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBj
b25zdDsKLSAgICBMYXlvdXRTaXplIHNpemUoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0VG9wKExh
eW91dFVuaXQpOwotICAgIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldFRv
cExlZnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHNldFdpZHRoKExheW91dFVuaXQp
OwotICAgIHZvaWQgc2V0SGVpZ2h0KExheW91dFVuaXQpOwotICAgIHZvaWQgc2V0U2l6ZShjb25z
dCBMYXlvdXRTaXplJik7Ci0KLSAgICB2b2lkIHNoaWZ0TGVmdFRvKExheW91dFVuaXQpOwotICAg
IHZvaWQgc2hpZnRSaWdodFRvKExheW91dFVuaXQpOwotICAgIHZvaWQgc2hpZnRUb3BUbyhMYXlv
dXRVbml0KTsKLSAgICB2b2lkIHNoaWZ0Qm90dG9tVG8oTGF5b3V0VW5pdCk7Ci0KLSAgICB2b2lk
IG1vdmVIb3Jpem9udGFsbHkoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBtb3ZlVmVydGljYWxseShM
YXlvdXRVbml0KTsKLQotICAgIHZvaWQgZXhwYW5kKE9wdGlvbmFsPExheW91dFVuaXQ+LCBPcHRp
b25hbDxMYXlvdXRVbml0Pik7Ci0gICAgdm9pZCBleHBhbmRIb3Jpem9udGFsbHkoTGF5b3V0VW5p
dCBkZWx0YSkgeyBleHBhbmQoZGVsdGEsIHsgfSk7IH0KLSAgICB2b2lkIGV4cGFuZFZlcnRpY2Fs
bHkoTGF5b3V0VW5pdCBkZWx0YSkgeyBleHBhbmQoeyB9LCBkZWx0YSk7IH0KLSAgICBib29sIGlu
dGVyc2VjdHMoY29uc3QgUmVjdCYgcmVjdCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmludGVyc2Vj
dHMocmVjdCk7IH0KLQotICAgIFJlY3QgY2xvbmUoKSBjb25zdDsKLSAgICBvcGVyYXRvciBMYXlv
dXRSZWN0KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICB2b2lk
IGludmFsaWRhdGVUb3AoKSB7IG1faGFzVmFsaWRUb3AgPSBmYWxzZTsgfQotICAgIHZvaWQgaW52
YWxpZGF0ZUxlZnQoKSB7IG1faGFzVmFsaWRMZWZ0ID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFs
aWRhdGVXaWR0aCgpIHsgbV9oYXNWYWxpZFdpZHRoID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFs
aWRhdGVIZWlnaHQoKSB7IG1faGFzVmFsaWRIZWlnaHQgPSBmYWxzZTsgfQotICAgIHZvaWQgaW52
YWxpZGF0ZVBvc2l0aW9uKCk7Ci0KLSAgICBib29sIGhhc1ZhbGlkUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2hhc1ZhbGlkVG9wICYmIG1faGFzVmFsaWRMZWZ0OyB9Ci0gICAgYm9vbCBoYXNW
YWxpZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2hhc1ZhbGlkV2lkdGggJiYgbV9oYXNWYWxpZEhl
aWdodDsgfQotICAgIGJvb2wgaGFzVmFsaWRHZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Zh
bGlkUG9zaXRpb24oKSAmJiBoYXNWYWxpZFNpemUoKTsgfQotCi0gICAgdm9pZCBzZXRIYXNWYWxp
ZFBvc2l0aW9uKCk7Ci0gICAgdm9pZCBzZXRIYXNWYWxpZFNpemUoKTsKLQotICAgIGJvb2wgbV9o
YXNWYWxpZFRvcCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ZhbGlkTGVmdCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc1ZhbGlkV2lkdGggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxp
ZEhlaWdodCB7IGZhbHNlIH07Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBMYXlvdXRS
ZWN0IG1fcmVjdDsKLX07Ci0KLWlubGluZSBSZWN0OjpSZWN0KExheW91dFVuaXQgdG9wLCBMYXlv
dXRVbml0IGxlZnQsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQotICAgIDog
bV9yZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAot
ICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOwotICAgIG1faGFzVmFsaWRMZWZ0ID0gdHJ1ZTsKLSAg
ICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOwotICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVlOwot
I2VuZGlmCi19Ci0KLWlubGluZSBSZWN0OjpSZWN0KExheW91dFBvaW50IHRvcExlZnQsIExheW91
dFVuaXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQotICAgIDogUmVjdCh0b3BMZWZ0LnkoKSwg
dG9wTGVmdC54KCksIHdpZHRoLCBoZWlnaHQpCi17Ci19Ci0KLWlubGluZSBSZWN0OjpSZWN0KGNv
bnN0IExheW91dFBvaW50JiB0b3BMZWZ0LCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQotICAgIDog
UmVjdCh0b3BMZWZ0LnkoKSwgdG9wTGVmdC54KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSkKLXsKLX0KLQotI2lmIEFTU0VSVF9FTkFCTEVECi1pbmxpbmUgdm9pZCBSZWN0OjppbnZhbGlk
YXRlUG9zaXRpb24oKQotewotICAgIGludmFsaWRhdGVUb3AoKTsKLSAgICBpbnZhbGlkYXRlTGVm
dCgpOwotfQotCi1pbmxpbmUgdm9pZCBSZWN0OjpzZXRIYXNWYWxpZFBvc2l0aW9uKCkKLXsKLSAg
ICBtX2hhc1ZhbGlkVG9wID0gdHJ1ZTsKLSAgICBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7Ci19Ci0K
LWlubGluZSB2b2lkIFJlY3Q6OnNldEhhc1ZhbGlkU2l6ZSgpCi17Ci0gICAgbV9oYXNWYWxpZFdp
ZHRoID0gdHJ1ZTsKLSAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsKLX0KLSNlbmRpZgotCi1p
bmxpbmUgTGF5b3V0VW5pdCBSZWN0Ojp0b3AoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1Zh
bGlkVG9wKTsKLSAgICByZXR1cm4gbV9yZWN0LnkoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQg
UmVjdDo6bGVmdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0KTsKLSAgICBy
ZXR1cm4gbV9yZWN0LngoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgUmVjdDo6Ym90dG9tKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCAmJiBtX2hhc1ZhbGlkSGVpZ2h0KTsK
LSAgICByZXR1cm4gbV9yZWN0Lm1heFkoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgUmVjdDo6
cmlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlk
V2lkdGgpOwotICAgIHJldHVybiBtX3JlY3QubWF4WCgpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9p
bnQgUmVjdDo6dG9wTGVmdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1ZhbGlkUG9zaXRpb24o
KSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5taW5YTWluWUNvcm5lcigpOwotfQotCi1pbmxpbmUgTGF5
b3V0UG9pbnQgUmVjdDo6Ym90dG9tUmlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChoYXNWYWxp
ZEdlb21ldHJ5KCkpOwotICAgIHJldHVybiBtX3JlY3QubWF4WE1heFlDb3JuZXIoKTsKLX0KLQot
aW5saW5lIExheW91dFNpemUgUmVjdDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1Zh
bGlkU2l6ZSgpKTsKLSAgICByZXR1cm4gbV9yZWN0LnNpemUoKTsKLX0KLQotaW5saW5lIExheW91
dFVuaXQgUmVjdDo6d2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkV2lkdGgp
OwotICAgIHJldHVybiBtX3JlY3Qud2lkdGgoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgUmVj
dDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEhlaWdodCk7Ci0gICAg
cmV0dXJuIG1fcmVjdC5oZWlnaHQoKTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2V0VG9wTGVm
dChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IHNldEhhc1ZhbGlkUG9zaXRpb24oKTsKLSNlbmRpZgotICAgIG1fcmVjdC5zZXRMb2NhdGlvbih0
b3BMZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2V0VG9wKExheW91dFVuaXQgdG9wKQot
ewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7Ci0jZW5kaWYK
LSAgICBtX3JlY3Quc2V0WSh0b3ApOwotfQotCi1pbmxpbmUgdm9pZCBSZWN0OjpzZXRMZWZ0KExh
eW91dFVuaXQgbGVmdCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faGFzVmFsaWRMZWZ0
ID0gdHJ1ZTsKLSNlbmRpZgotICAgIG1fcmVjdC5zZXRYKGxlZnQpOwotfQotCi1pbmxpbmUgdm9p
ZCBSZWN0OjpzZXRXaWR0aChMYXlvdXRVbml0IHdpZHRoKQotewotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgbV9oYXNWYWxpZFdpZHRoID0gdHJ1ZTsKLSNlbmRpZgotICAgIG1fcmVjdC5zZXRXaWR0
aCh3aWR0aCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlY3Q6OnNldEhlaWdodChMYXlvdXRVbml0IGhl
aWdodCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faGFzVmFsaWRIZWlnaHQgPSB0cnVl
OwotI2VuZGlmCi0gICAgbV9yZWN0LnNldEhlaWdodChoZWlnaHQpOwotfQotCi1pbmxpbmUgdm9p
ZCBSZWN0OjpzZXRTaXplKGNvbnN0IExheW91dFNpemUmIHNpemUpCi17Ci0jaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBzZXRIYXNWYWxpZFNpemUoKTsKLSNlbmRpZgotICAgIG1fcmVjdC5zZXRTaXpl
KHNpemUpOwotfQotCi1pbmxpbmUgdm9pZCBSZWN0OjpzaGlmdExlZnRUbyhMYXlvdXRVbml0IGxl
ZnQpCi17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0KTsKLSAgICBtX3JlY3Quc2hpZnRYRWRn
ZVRvKGxlZnQpOwotfQotCi1pbmxpbmUgdm9pZCBSZWN0OjpzaGlmdFJpZ2h0VG8oTGF5b3V0VW5p
dCByaWdodCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZFdpZHRo
KTsKLSAgICBtX3JlY3Quc2hpZnRNYXhYRWRnZVRvKHJpZ2h0KTsKLX0KLQotaW5saW5lIHZvaWQg
UmVjdDo6c2hpZnRUb3BUbyhMYXlvdXRVbml0IHRvcCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxp
ZFRvcCk7Ci0gICAgbV9yZWN0LnNoaWZ0WUVkZ2VUbyh0b3ApOwotfQotCi1pbmxpbmUgdm9pZCBS
ZWN0OjpzaGlmdEJvdHRvbVRvKExheW91dFVuaXQgYm90dG9tKQotewotICAgIEFTU0VSVChtX2hh
c1ZhbGlkVG9wICYmIG1faGFzVmFsaWRIZWlnaHQpOwotICAgIG1fcmVjdC5zaGlmdE1heFlFZGdl
VG8oYm90dG9tKTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6bW92ZUhvcml6b250YWxseShMYXlv
dXRVbml0IG9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQpOwotICAgIG1fcmVj
dC5tb3ZlKExheW91dFNpemUgeyBvZmZzZXQsIDAgfSk7Ci19Ci0KLWlubGluZSB2b2lkIFJlY3Q6
Om1vdmVWZXJ0aWNhbGx5KExheW91dFVuaXQgb2Zmc2V0KQotewotICAgIEFTU0VSVChtX2hhc1Zh
bGlkVG9wKTsKLSAgICBtX3JlY3QubW92ZShMYXlvdXRTaXplIHsgMCwgb2Zmc2V0IH0pOwotfQot
Ci1pbmxpbmUgdm9pZCBSZWN0OjpleHBhbmQoT3B0aW9uYWw8TGF5b3V0VW5pdD4gd2lkdGgsIE9w
dGlvbmFsPExheW91dFVuaXQ+IGhlaWdodCkKLXsKLSAgICBBU1NFUlQoIXdpZHRoIHx8IG1faGFz
VmFsaWRXaWR0aCk7Ci0gICAgQVNTRVJUKCFoZWlnaHQgfHwgbV9oYXNWYWxpZEhlaWdodCk7Ci0g
ICAgbV9yZWN0LmV4cGFuZCh3aWR0aC52YWx1ZU9yKDApLCBoZWlnaHQudmFsdWVPcigwKSk7Ci19
Ci0KLWlubGluZSBSZWN0IFJlY3Q6OmNsb25lKCkgY29uc3QKLXsKLSAgICBSZWN0IHJlY3Q7Ci0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICByZWN0Lm1faGFzVmFsaWRUb3AgPSBtX2hhc1ZhbGlkVG9w
OwotICAgIHJlY3QubV9oYXNWYWxpZExlZnQgPSBtX2hhc1ZhbGlkTGVmdDsKLSAgICByZWN0Lm1f
aGFzVmFsaWRXaWR0aCA9IG1faGFzVmFsaWRXaWR0aDsKLSAgICByZWN0Lm1faGFzVmFsaWRIZWln
aHQgID0gbV9oYXNWYWxpZEhlaWdodDsKLSNlbmRpZgotICAgIHJlY3QubV9yZWN0ID0gbV9yZWN0
OwotICAgIHJldHVybiByZWN0OwotfQotCi1pbmxpbmUgUmVjdDo6b3BlcmF0b3IgTGF5b3V0UmVj
dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7Ci0gICAgcmV0dXJu
IG1fcmVjdDsKLX0KLQotCi1jbGFzcyBHZW9tZXRyeSB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChHZW9tZXRyeSk7Ci1wdWJsaWM6Ci0gICAgR2VvbWV0cnkoY29uc3QgR2VvbWV0cnkmKTsK
LSAgICBHZW9tZXRyeSgpID0gZGVmYXVsdDsKLSAgICB+R2VvbWV0cnkoKTsKLQotICAgIExheW91
dFVuaXQgdG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB0b3AoKSArIGhlaWdodCgpOyB9Ci0gICAg
TGF5b3V0VW5pdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxlZnQoKSArIHdpZHRoKCk7IH0KLQot
ICAgIExheW91dFBvaW50IHRvcExlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRQb2ludCBib3R0b21S
aWdodCgpIGNvbnN0IHsgcmV0dXJuIHsgcmlnaHQoKSwgYm90dG9tKCkgfTsgfQotCi0gICAgTGF5
b3V0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4geyB3aWR0aCgpLCBoZWlnaHQoKSB9OyB9Ci0g
ICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKSArIHBhZGRp
bmdCb3hXaWR0aCgpICsgYm9yZGVyUmlnaHQoKTsgfQotICAgIExheW91dFVuaXQgaGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCkgKyBwYWRkaW5nQm94SGVpZ2h0KCkgKyBib3JkZXJC
b3R0b20oKTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKS5pc0Vt
cHR5KCk7IH0KLSAgICBSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiB7IHRvcCgpLCBsZWZ0KCks
IHdpZHRoKCksIGhlaWdodCgpIH07IH0KLSAgICBSZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3Qg
eyByZXR1cm4geyB0b3AoKSAtIG1hcmdpbkJlZm9yZSgpLCBsZWZ0KCkgLSBtYXJnaW5TdGFydCgp
LCBtYXJnaW5TdGFydCgpICsgd2lkdGgoKSArIG1hcmdpbkVuZCgpLCBtYXJnaW5CZWZvcmUoKSAr
IGhlaWdodCgpICsgbWFyZ2luQWZ0ZXIoKSB9OyB9Ci0KLSAgICBzdHJ1Y3QgVmVydGljYWxNYXJn
aW4gewotICAgICAgICBMYXlvdXRVbml0IGJlZm9yZTsKLSAgICAgICAgTGF5b3V0VW5pdCBhZnRl
cjsKLSAgICB9OwotICAgIFZlcnRpY2FsTWFyZ2luIHZlcnRpY2FsTWFyZ2luKCkgY29uc3Q7Ci0K
LSAgICBzdHJ1Y3QgSG9yaXpvbnRhbE1hcmdpbiB7Ci0gICAgICAgIExheW91dFVuaXQgc3RhcnQ7
Ci0gICAgICAgIExheW91dFVuaXQgZW5kOwotICAgIH07Ci0gICAgSG9yaXpvbnRhbE1hcmdpbiBo
b3Jpem9udGFsTWFyZ2luKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5CZWZvcmUoKSBj
b25zdDsKLSAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5p
dCBtYXJnaW5BZnRlcigpIGNvbnN0OwotICAgIExheW91dFVuaXQgbWFyZ2luRW5kKCkgY29uc3Q7
Ci0gICAgYm9vbCBoYXNDbGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2hhc0NsZWFyYW5jZTsg
fQotCi0gICAgTGF5b3V0VW5pdCBib3JkZXJUb3AoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJv
cmRlckxlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGJvcmRlckJvdHRvbSgpIGNvbnN0Owot
ICAgIExheW91dFVuaXQgYm9yZGVyUmlnaHQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IHZlcnRp
Y2FsQm9yZGVyKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKTsg
fQotICAgIExheW91dFVuaXQgaG9yaXpvbnRhbEJvcmRlcigpIGNvbnN0IHsgcmV0dXJuIGJvcmRl
ckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7IH0KLQotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHBh
ZGRpbmdUb3AoKSBjb25zdDsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nTGVmdCgp
IGNvbnN0OwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHBhZGRpbmdCb3R0b20oKSBjb25zdDsK
LSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nUmlnaHQoKSBjb25zdDsKLSAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiB2ZXJ0aWNhbFBhZGRpbmcoKSBjb25zdDsKLSAgICBPcHRpb25hbDxM
YXlvdXRVbml0PiBob3Jpem9udGFsUGFkZGluZygpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5pdCBj
b250ZW50Qm94VG9wKCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ0JveFRvcCgpICsgcGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCk7IH0KLSAgICBMYXlvdXRVbml0IGNvbnRlbnRCb3hMZWZ0KCkgY29uc3Qg
eyByZXR1cm4gcGFkZGluZ0JveExlZnQoKSArIHBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsgfQot
ICAgIExheW91dFVuaXQgY29udGVudEJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRC
b3hUb3AoKSArIGNvbnRlbnRCb3hIZWlnaHQoKTsgfQotICAgIExheW91dFVuaXQgY29udGVudEJv
eFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29udGVudEJveExlZnQoKSArIGNvbnRlbnRCb3hXaWR0
aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBjb250ZW50Qm94SGVpZ2h0KCkgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBjb250ZW50Qm94V2lkdGgoKSBjb25zdDsKLQotICAgIExheW91dFVuaXQgcGFkZGlu
Z0JveFRvcCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBw
YWRkaW5nQm94TGVmdCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKTsgfQotICAgIExheW91
dFVuaXQgcGFkZGluZ0JveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdCb3hUb3AoKSAr
IHBhZGRpbmdCb3hIZWlnaHQoKTsgfQotICAgIExheW91dFVuaXQgcGFkZGluZ0JveFJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gcGFkZGluZ0JveExlZnQoKSArIHBhZGRpbmdCb3hXaWR0aCgpOyB9Ci0g
ICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCkgKyBjb250ZW50Qm94SGVpZ2h0KCkgKyBwYWRkaW5nQm90dG9tKCkudmFs
dWVPcigwKTsgfQotICAgIExheW91dFVuaXQgcGFkZGluZ0JveFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gcGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApICsgY29udGVudEJveFdpZHRoKCkgKyBwYWRkaW5n
UmlnaHQoKS52YWx1ZU9yKDApOyB9Ci0KLSAgICBMYXlvdXRVbml0IGJvcmRlckJveEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpICsgcGFkZGluZ0JveEhlaWdodCgpICsgYm9yZGVy
Qm90dG9tKCk7IH0KLSAgICBMYXlvdXRVbml0IGJvcmRlckJveFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0JveFdpZHRoKCkgKyBib3JkZXJSaWdodCgpOyB9Ci0g
ICAgTGF5b3V0VW5pdCBtYXJnaW5Cb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtYXJnaW5CZWZv
cmUoKSArIGJvcmRlckJveEhlaWdodCgpICsgbWFyZ2luQWZ0ZXIoKTsgfQotICAgIExheW91dFVu
aXQgbWFyZ2luQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBtYXJnaW5TdGFydCgpICsgYm9yZGVy
Qm94V2lkdGgoKSArIG1hcmdpbkVuZCgpOyB9Ci0KLSAgICBMYXlvdXRVbml0IHZlcnRpY2FsTWFy
Z2luQm9yZGVyQW5kUGFkZGluZygpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkJlZm9yZSgpICsgdmVy
dGljYWxCb3JkZXIoKSArIHZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCkgKyBtYXJnaW5BZnRl
cigpOyB9Ci0gICAgTGF5b3V0VW5pdCBob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygp
IGNvbnN0IHsgcmV0dXJuIG1hcmdpblN0YXJ0KCkgKyBob3Jpem9udGFsQm9yZGVyKCkgKyBob3Jp
em9udGFsUGFkZGluZygpLnZhbHVlT3IoMCkgKyBtYXJnaW5FbmQoKTsgfQotCi0gICAgUmVjdCBt
YXJnaW5Cb3goKSBjb25zdDsKLSAgICBSZWN0IGJvcmRlckJveCgpIGNvbnN0OwotICAgIFJlY3Qg
cGFkZGluZ0JveCgpIGNvbnN0OwotICAgIFJlY3QgY29udGVudEJveCgpIGNvbnN0OwotCi0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICB2b2lkIHNldEhhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCkg
eyBtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlID0gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICB2
b2lkIHNldFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHNldFRvcChMYXlv
dXRVbml0KTsKLSAgICB2b2lkIHNldExlZnQoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBtb3ZlSG9y
aXpvbnRhbGx5KExheW91dFVuaXQgb2Zmc2V0KSB7IG1fdG9wTGVmdC5tb3ZlKG9mZnNldCwgMF9s
dSk7IH0KLSAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KExheW91dFVuaXQgb2Zmc2V0KSB7IG1fdG9w
TGVmdC5tb3ZlKDBfbHUsIG9mZnNldCk7IH0KLSAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0U2l6
ZSYgc2l6ZSkgeyBtX3RvcExlZnQubW92ZShzaXplKTsgfQotICAgIHZvaWQgbW92ZUJ5KExheW91
dFBvaW50IG9mZnNldCkgeyBtX3RvcExlZnQubW92ZUJ5KG9mZnNldCk7IH0KLQotICAgIHZvaWQg
c2V0Q29udGVudEJveEhlaWdodChMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldENvbnRlbnRCb3hX
aWR0aChMYXlvdXRVbml0KTsKLQotICAgIHZvaWQgc2V0SG9yaXpvbnRhbE1hcmdpbihIb3Jpem9u
dGFsTWFyZ2luKTsKLSAgICB2b2lkIHNldFZlcnRpY2FsTWFyZ2luKFZlcnRpY2FsTWFyZ2luKTsK
LSAgICB2b2lkIHNldEhhc0NsZWFyYW5jZSgpIHsgbV9oYXNDbGVhcmFuY2UgPSB0cnVlOyB9Ci0K
LSAgICB2b2lkIHNldEJvcmRlcihMYXlvdXQ6OkVkZ2VzKTsKLQotICAgIHZvaWQgc2V0VmVydGlj
YWxQYWRkaW5nKExheW91dDo6VmVydGljYWxFZGdlcyk7Ci0gICAgdm9pZCBzZXRQYWRkaW5nKE9w
dGlvbmFsPExheW91dDo6RWRnZXM+KTsKLQotcHJpdmF0ZToKLSNpZiBBU1NFUlRfRU5BQkxFRAot
ICAgIHZvaWQgaW52YWxpZGF0ZU1hcmdpbigpOwotICAgIHZvaWQgaW52YWxpZGF0ZUJvcmRlcigp
IHsgbV9oYXNWYWxpZEJvcmRlciA9IGZhbHNlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlUGFkZGlu
ZygpIHsgbV9oYXNWYWxpZFBhZGRpbmcgPSBmYWxzZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVBy
ZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCkgeyBtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlID0g
ZmFsc2U7IH0KLQotICAgIHZvaWQgc2V0SGFzVmFsaWRUb3AoKSB7IG1faGFzVmFsaWRUb3AgPSB0
cnVlOyB9Ci0gICAgdm9pZCBzZXRIYXNWYWxpZExlZnQoKSB7IG1faGFzVmFsaWRMZWZ0ID0gdHJ1
ZTsgfQotICAgIHZvaWQgc2V0SGFzVmFsaWRWZXJ0aWNhbE1hcmdpbigpIHsgbV9oYXNWYWxpZFZl
cnRpY2FsTWFyZ2luID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SGFzVmFsaWRIb3Jpem9udGFsTWFy
Z2luKCkgeyBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbiA9IHRydWU7IH0KLQotICAgIHZvaWQg
c2V0SGFzVmFsaWRCb3JkZXIoKSB7IG1faGFzVmFsaWRCb3JkZXIgPSB0cnVlOyB9Ci0gICAgdm9p
ZCBzZXRIYXNWYWxpZFBhZGRpbmcoKSB7IG1faGFzVmFsaWRQYWRkaW5nID0gdHJ1ZTsgfQotCi0g
ICAgdm9pZCBzZXRIYXNWYWxpZENvbnRlbnRIZWlnaHQoKSB7IG1faGFzVmFsaWRDb250ZW50SGVp
Z2h0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SGFzVmFsaWRDb250ZW50V2lkdGgoKSB7IG1faGFz
VmFsaWRDb250ZW50V2lkdGggPSB0cnVlOyB9Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLQot
ICAgIExheW91dFBvaW50IG1fdG9wTGVmdDsKLSAgICBMYXlvdXRVbml0IG1fY29udGVudFdpZHRo
OwotICAgIExheW91dFVuaXQgbV9jb250ZW50SGVpZ2h0OwotCi0gICAgSG9yaXpvbnRhbE1hcmdp
biBtX2hvcml6b250YWxNYXJnaW47Ci0gICAgVmVydGljYWxNYXJnaW4gbV92ZXJ0aWNhbE1hcmdp
bjsKLSAgICBib29sIG1faGFzQ2xlYXJhbmNlIHsgZmFsc2UgfTsKLQotICAgIExheW91dDo6RWRn
ZXMgbV9ib3JkZXI7Ci0gICAgT3B0aW9uYWw8TGF5b3V0OjpFZGdlcz4gbV9wYWRkaW5nOwotCi0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faGFzVmFsaWRUb3AgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9oYXNWYWxpZExlZnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZEhvcml6
b250YWxNYXJnaW4geyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2lu
IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRCb3JkZXIgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9oYXNWYWxpZFBhZGRpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZENvbnRl
bnRIZWlnaHQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZENvbnRlbnRXaWR0aCB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHsgZmFsc2UgfTsK
LSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAotfTsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi1pbmxp
bmUgdm9pZCBHZW9tZXRyeTo6aW52YWxpZGF0ZU1hcmdpbigpCi17Ci0gICAgbV9oYXNWYWxpZEhv
cml6b250YWxNYXJnaW4gPSBmYWxzZTsKLSAgICBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4gPSBm
YWxzZTsKLX0KLSNlbmRpZgotCi1pbmxpbmUgTGF5b3V0VW5pdCBHZW9tZXRyeTo6dG9wKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCAmJiAobV9oYXNQcmVjb21wdXRlZE1hcmdp
bkJlZm9yZSB8fCBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pKTsKLSAgICByZXR1cm4gbV90b3BM
ZWZ0LnkoKTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6OmxlZnQoKSBjb25zdAot
ewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdp
bik7Ci0gICAgcmV0dXJuIG1fdG9wTGVmdC54KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRQb2ludCBH
ZW9tZXRyeTo6dG9wTGVmdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYg
KG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgfHwgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2lu
KSk7Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRIb3Jpem9udGFsTWFy
Z2luKTsKLSAgICByZXR1cm4gbV90b3BMZWZ0OwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6
c2V0VG9wTGVmdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCkKLXsKLSNpZiBBU1NFUlRfRU5B
QkxFRAotICAgIHNldEhhc1ZhbGlkVG9wKCk7Ci0gICAgc2V0SGFzVmFsaWRMZWZ0KCk7Ci0jZW5k
aWYKLSAgICBtX3RvcExlZnQgPSB0b3BMZWZ0OwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6
c2V0VG9wKExheW91dFVuaXQgdG9wKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFz
VmFsaWRUb3AoKTsKLSNlbmRpZgotICAgIG1fdG9wTGVmdC5zZXRZKHRvcCk7Ci19Ci0KLWlubGlu
ZSB2b2lkIEdlb21ldHJ5OjpzZXRMZWZ0KExheW91dFVuaXQgbGVmdCkKLXsKLSNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIHNldEhhc1ZhbGlkTGVmdCgpOwotI2VuZGlmCi0gICAgbV90b3BMZWZ0LnNl
dFgobGVmdCk7Ci19Ci0KLWlubGluZSB2b2lkIEdlb21ldHJ5OjpzZXRDb250ZW50Qm94SGVpZ2h0
KExheW91dFVuaXQgaGVpZ2h0KQoteyAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1Zh
bGlkQ29udGVudEhlaWdodCgpOwotI2VuZGlmCi0gICAgbV9jb250ZW50SGVpZ2h0ID0gaGVpZ2h0
OwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0Q29udGVudEJveFdpZHRoKExheW91dFVu
aXQgd2lkdGgpCi17IAotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRDb250ZW50
V2lkdGgoKTsKLSNlbmRpZgotICAgIG1fY29udGVudFdpZHRoID0gd2lkdGg7Ci19Ci0KLWlubGlu
ZSBMYXlvdXRVbml0IEdlb21ldHJ5Ojpjb250ZW50Qm94SGVpZ2h0KCkgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9oYXNWYWxpZENvbnRlbnRIZWlnaHQpOwotICAgIHJldHVybiBtX2NvbnRlbnRIZWln
aHQ7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEdlb21ldHJ5Ojpjb250ZW50Qm94V2lkdGgoKSBj
b25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkQ29udGVudFdpZHRoKTsKLSAgICByZXR1cm4g
bV9jb250ZW50V2lkdGg7Ci19Ci0KLWlubGluZSB2b2lkIEdlb21ldHJ5OjpzZXRIb3Jpem9udGFs
TWFyZ2luKEhvcml6b250YWxNYXJnaW4gbWFyZ2luKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgc2V0SGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKCk7Ci0jZW5kaWYKLSAgICBtX2hvcml6b250
YWxNYXJnaW4gPSBtYXJnaW47Ci19Ci0KLWlubGluZSB2b2lkIEdlb21ldHJ5OjpzZXRWZXJ0aWNh
bE1hcmdpbihWZXJ0aWNhbE1hcmdpbiBtYXJnaW4pCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBzZXRIYXNWYWxpZFZlcnRpY2FsTWFyZ2luKCk7Ci0gICAgaW52YWxpZGF0ZVByZWNvbXB1dGVk
TWFyZ2luQmVmb3JlKCk7Ci0jZW5kaWYKLSAgICBtX3ZlcnRpY2FsTWFyZ2luID0gbWFyZ2luOwot
fQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0Qm9yZGVyKExheW91dDo6RWRnZXMgYm9yZGVy
KQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgc2V0SGFzVmFsaWRCb3JkZXIoKTsKLSNlbmRp
ZgotICAgIG1fYm9yZGVyID0gYm9yZGVyOwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0
UGFkZGluZyhPcHRpb25hbDxMYXlvdXQ6OkVkZ2VzPiBwYWRkaW5nKQotewotI2lmIEFTU0VSVF9F
TkFCTEVECi0gICAgc2V0SGFzVmFsaWRQYWRkaW5nKCk7Ci0jZW5kaWYKLSAgICBtX3BhZGRpbmcg
PSBwYWRkaW5nOwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0VmVydGljYWxQYWRkaW5n
KExheW91dDo6VmVydGljYWxFZGdlcyB2ZXJ0aWNhbFBhZGRpbmcpCi17Ci0jaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBzZXRIYXNWYWxpZFBhZGRpbmcoKTsKLSNlbmRpZgotICAgIG1fcGFkZGluZyA9
IExheW91dDo6RWRnZXMgeyBtX3BhZGRpbmcgPyBtX3BhZGRpbmctPmhvcml6b250YWwgOiBMYXlv
dXQ6Okhvcml6b250YWxFZGdlcygpLCB2ZXJ0aWNhbFBhZGRpbmcgfTsKLX0KLQotaW5saW5lIEdl
b21ldHJ5OjpWZXJ0aWNhbE1hcmdpbiBHZW9tZXRyeTo6dmVydGljYWxNYXJnaW4oKSBjb25zdAot
ewotICAgIEFTU0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwotICAgIHJldHVybiBtX3Zl
cnRpY2FsTWFyZ2luOwotfQotCi1pbmxpbmUgR2VvbWV0cnk6Okhvcml6b250YWxNYXJnaW4gR2Vv
bWV0cnk6Omhvcml6b250YWxNYXJnaW4oKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlk
SG9yaXpvbnRhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbjsKLX0KLQot
aW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6Om1hcmdpbkJlZm9yZSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1fdmVydGljYWxN
YXJnaW4uYmVmb3JlOwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBHZW9tZXRyeTo6bWFyZ2luU3Rh
cnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7Ci0g
ICAgcmV0dXJuIG1faG9yaXpvbnRhbE1hcmdpbi5zdGFydDsKLX0KLQotaW5saW5lIExheW91dFVu
aXQgR2VvbWV0cnk6Om1hcmdpbkFmdGVyKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxp
ZFZlcnRpY2FsTWFyZ2luKTsKLSAgICByZXR1cm4gbV92ZXJ0aWNhbE1hcmdpbi5hZnRlcjsKLX0K
LQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6Om1hcmdpbkVuZCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKTsKLSAgICByZXR1cm4gbV9ob3Jpem9u
dGFsTWFyZ2luLmVuZDsKLX0KLQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEdlb21ldHJ5
OjpwYWRkaW5nVG9wKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFBhZGRpbmcpOwot
ICAgIGlmICghbV9wYWRkaW5nKQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBtX3Bh
ZGRpbmctPnZlcnRpY2FsLnRvcDsKLX0KLQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEdl
b21ldHJ5OjpwYWRkaW5nTGVmdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRQYWRk
aW5nKTsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1
cm4gbV9wYWRkaW5nLT5ob3Jpem9udGFsLmxlZnQ7Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlv
dXRVbml0PiBHZW9tZXRyeTo6cGFkZGluZ0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1f
aGFzVmFsaWRQYWRkaW5nKTsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICByZXR1cm4gbV9wYWRkaW5nLT52ZXJ0aWNhbC5ib3R0b207Ci19Ci0KLWlubGluZSBP
cHRpb25hbDxMYXlvdXRVbml0PiBHZW9tZXRyeTo6cGFkZGluZ1JpZ2h0KCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQobV9oYXNWYWxpZFBhZGRpbmcpOwotICAgIGlmICghbV9wYWRkaW5nKQotICAgICAg
ICByZXR1cm4geyB9OwotICAgIHJldHVybiBtX3BhZGRpbmctPmhvcml6b250YWwucmlnaHQ7Ci19
Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBHZW9tZXRyeTo6dmVydGljYWxQYWRkaW5n
KCkgY29uc3QKLXsKLSAgICBhdXRvIHBhZGRpbmdUb3AgPSB0aGlzLT5wYWRkaW5nVG9wKCk7Ci0g
ICAgYXV0byBwYWRkaW5nQm90dG9tID0gdGhpcy0+cGFkZGluZ0JvdHRvbSgpOwotICAgIGlmICgh
cGFkZGluZ1RvcCAmJiAhcGFkZGluZ0JvdHRvbSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBy
ZXR1cm4gcGFkZGluZ1RvcC52YWx1ZU9yKDApICsgcGFkZGluZ0JvdHRvbS52YWx1ZU9yKDApOwot
fQotCi1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gR2VvbWV0cnk6Omhvcml6b250YWxQYWRk
aW5nKCkgY29uc3QKLXsKLSAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gdGhpcy0+cGFkZGluZ0xlZnQo
KTsKLSAgICBhdXRvIHBhZGRpbmdSaWdodCA9IHRoaXMtPnBhZGRpbmdSaWdodCgpOwotICAgIGlm
ICghcGFkZGluZ0xlZnQgJiYgIXBhZGRpbmdSaWdodCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICByZXR1cm4gcGFkZGluZ0xlZnQudmFsdWVPcigwKSArIHBhZGRpbmdSaWdodC52YWx1ZU9yKDAp
OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBHZW9tZXRyeTo6Ym9yZGVyVG9wKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9oYXNWYWxpZEJvcmRlcik7Ci0gICAgcmV0dXJuIG1fYm9yZGVyLnZlcnRp
Y2FsLnRvcDsKLX0KLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6OmJvcmRlckxlZnQoKSBj
b25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsKLSAgICByZXR1cm4gbV9ib3Jk
ZXIuaG9yaXpvbnRhbC5sZWZ0OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBHZW9tZXRyeTo6Ym9y
ZGVyQm90dG9tKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEJvcmRlcik7Ci0gICAg
cmV0dXJuIG1fYm9yZGVyLnZlcnRpY2FsLmJvdHRvbTsKLX0KLQotaW5saW5lIExheW91dFVuaXQg
R2VvbWV0cnk6OmJvcmRlclJpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEJv
cmRlcik7Ci0gICAgcmV0dXJuIG1fYm9yZGVyLmhvcml6b250YWwucmlnaHQ7Ci19Ci0KLX0KLX0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5
b3V0VHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5
b3V0VHJlZUJ1aWxkZXIuY3BwCmluZGV4IGQ0YmZiYTA2MjY2NmY4NmY3ZGQ3OWM5ZjEyYzI2MjU3
NmEzMmUyMWMuLmU0Mjk0NTBlMDU5ODA0NDFkMDVhYWZkZTY3NmUwOTI5ZTVjYTE5YjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVp
bGRlci5jcHAKQEAgLTM4LDEwICszOCwxMCBAQAogI2luY2x1ZGUgIkludmFsaWRhdGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb25TdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJv
eC5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q2hp
bGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgogI2luY2x1ZGUg
IkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgogI2luY2x1ZGUg
IkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKICNpbmNsdWRlICJMYXlvdXRJbmxpbmVU
ZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0TGluZUJyZWFrQm94LmgiCkBAIC00MjYsNyArNDI2
LDcgQEAgc3RhdGljIHZvaWQgb3V0cHV0SW5saW5lUnVucyhUZXh0U3RyZWFtJiBzdHJlYW0sIGNv
bnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIG91
dHB1dExheW91dEJveChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBHZW9tZXRyeSogZGlzcGxheUJveCwgdW5zaWduZWQgZGVwdGgpCitzdGF0aWMgdm9pZCBv
dXRwdXRMYXlvdXRCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGxheW91dEJveCwg
Y29uc3QgQm94R2VvbWV0cnkqIGJveEdlb21ldHJ5LCB1bnNpZ25lZCBkZXB0aCkKIHsKICAgICB1
bnNpZ25lZCBwcmludGVkQ2hhcmFjdGVycyA9IDA7CiAgICAgd2hpbGUgKCsrcHJpbnRlZENoYXJh
Y3RlcnMgPD0gZGVwdGggKiAyKQpAQCAtNDgxLDggKzQ4MSw4IEBAIHN0YXRpYyB2b2lkIG91dHB1
dExheW91dEJveChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25z
dCBHZW9tCiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgInVua25vd24gYm94IjsKIAotICAg
IGlmIChkaXNwbGF5Qm94KQotICAgICAgICBzdHJlYW0gPDwgIiBhdCAoIiA8PCBkaXNwbGF5Qm94
LT5sZWZ0KCkgPDwgIiwiIDw8IGRpc3BsYXlCb3gtPnRvcCgpIDw8ICIpIHNpemUgIiA8PCBkaXNw
bGF5Qm94LT53aWR0aCgpIDw8ICJ4IiA8PCBkaXNwbGF5Qm94LT5oZWlnaHQoKTsKKyAgICBpZiAo
Ym94R2VvbWV0cnkpCisgICAgICAgIHN0cmVhbSA8PCAiIGF0ICgiIDw8IGJveEdlb21ldHJ5LT5s
ZWZ0KCkgPDwgIiwiIDw8IGJveEdlb21ldHJ5LT50b3AoKSA8PCAiKSBzaXplICIgPDwgYm94R2Vv
bWV0cnktPndpZHRoKCkgPDwgIngiIDw8IGJveEdlb21ldHJ5LT5oZWlnaHQoKTsKICAgICBzdHJl
YW0gPDwgIiAoIiA8PCAmbGF5b3V0Qm94IDw8ICIpIjsKICAgICBpZiAoaXM8SW5saW5lVGV4dEJv
eD4obGF5b3V0Qm94KSkgewogICAgICAgICBhdXRvIHRleHRDb250ZW50ID0gZG93bmNhc3Q8SW5s
aW5lVGV4dEJveD4obGF5b3V0Qm94KS5jb250ZW50KCk7CkBAIC01MDYsOCArNTA2LDggQEAgc3Rh
dGljIHZvaWQgb3V0cHV0TGF5b3V0VHJlZShjb25zdCBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUs
IFRleHRTdHJlYW0mIHN0cmVhbSwKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5
cGU8Qm94Pihyb290Q29udGFpbmVyKSkgewogICAgICAgICBpZiAobGF5b3V0U3RhdGUpIHsKICAg
ICAgICAgICAgIC8vIE5vdCBhbGwgYm94ZXMgZ2VuZXJhdGUgZGlzcGxheSBib3hlcy4KLSAgICAg
ICAgICAgIGlmIChsYXlvdXRTdGF0ZS0+aGFzRGlzcGxheUJveChjaGlsZCkpCi0gICAgICAgICAg
ICAgICAgb3V0cHV0TGF5b3V0Qm94KHN0cmVhbSwgY2hpbGQsICZsYXlvdXRTdGF0ZS0+Z2VvbWV0
cnlGb3JMYXlvdXRCb3goY2hpbGQpLCBkZXB0aCk7CisgICAgICAgICAgICBpZiAobGF5b3V0U3Rh
dGUtPmhhc0JveEdlb21ldHJ5KGNoaWxkKSkKKyAgICAgICAgICAgICAgICBvdXRwdXRMYXlvdXRC
b3goc3RyZWFtLCBjaGlsZCwgJmxheW91dFN0YXRlLT5nZW9tZXRyeUZvckJveChjaGlsZCksIGRl
cHRoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBvdXRwdXRMYXlvdXRCb3go
c3RyZWFtLCBjaGlsZCwgbnVsbHB0ciwgZGVwdGgpOwogICAgICAgICAgICAgaWYgKGNoaWxkLmVz
dGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkKQEAgLTUyNSw3ICs1MjUsNyBAQCB2
b2lkIHNob3dMYXlvdXRUcmVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBMYXlvdXRTdGF0
ZSogbGF5b3V0U3RhdGUpCiAgICAgVGV4dFN0cmVhbSBzdHJlYW0oVGV4dFN0cmVhbTo6TGluZU1v
ZGU6Ok11bHRpcGxlTGluZSwgVGV4dFN0cmVhbTo6Rm9ybWF0dGluZzo6U1ZHU3R5bGVSZWN0KTsK
IAogICAgIGF1dG8mIGluaXRpYWxDb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guaW5pdGlhbENv
bnRhaW5pbmdCbG9jaygpOwotICAgIG91dHB1dExheW91dEJveChzdHJlYW0sIGluaXRpYWxDb250
YWluaW5nQmxvY2ssIGxheW91dFN0YXRlID8gJmxheW91dFN0YXRlLT5nZW9tZXRyeUZvckxheW91
dEJveChpbml0aWFsQ29udGFpbmluZ0Jsb2NrKSA6IG51bGxwdHIsIDApOworICAgIG91dHB1dExh
eW91dEJveChzdHJlYW0sIGluaXRpYWxDb250YWluaW5nQmxvY2ssIGxheW91dFN0YXRlID8gJmxh
eW91dFN0YXRlLT5nZW9tZXRyeUZvckJveChpbml0aWFsQ29udGFpbmluZ0Jsb2NrKSA6IG51bGxw
dHIsIDApOwogICAgIG91dHB1dExheW91dFRyZWUobGF5b3V0U3RhdGUsIHN0cmVhbSwgaW5pdGlh
bENvbnRhaW5pbmdCbG9jaywgMSk7CiAgICAgV1RGTG9nQWx3YXlzKCIlcyIsIHN0cmVhbS5yZWxl
YXNlKCkudXRmOCgpLmRhdGEoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcApp
bmRleCA1YjljMDlkMmNmN2ZmYjU5ZjFjZjIyYmY1Y2U2ZWE5ZTBjNmE2OWVkLi5iNWUwOGYyZDg3
MGY1OTZkODAzMDY0NzBmMmE1YzU3NDNkODYwZDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKQEAgLTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3Rh
dGUuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb25TdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJv
eC5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q2hp
bGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJMYXlv
dXRHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIK
ICNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CkBAIC03NSwxNSArNzUsMTUgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpzZXRVc2VkR2VvbWV0cnlGb3JDZWxscyhMYXlvdXRVbml0IGF2YWlsYWJsZUhvcml6b24K
ICAgICBhdXRvKiBjdXJyZW50U2VjdGlvbiA9ICZyb3dMaXN0LmZpcnN0KCkuYm94KCkucGFyZW50
KCk7CiAgICAgZm9yIChhdXRvJiBjZWxsIDogZ3JpZC5jZWxscygpKSB7CiAgICAgICAgIGF1dG8m
IGNlbGxCb3ggPSBjZWxsLT5ib3goKTsKLSAgICAgICAgYXV0byYgY2VsbERpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGNlbGxCb3gpOworICAgICAgICBhdXRvJiBjZWxs
Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShjZWxsQm94KTsKICAg
ICAgICAgYXV0byYgc2VjdGlvbiA9IHJvd0xpc3RbY2VsbC0+c3RhcnRSb3coKV0uYm94KCkucGFy
ZW50KCk7CiAgICAgICAgIGlmICgmc2VjdGlvbiAhPSBjdXJyZW50U2VjdGlvbikgewogICAgICAg
ICAgICAgY3VycmVudFNlY3Rpb24gPSAmc2VjdGlvbjsKICAgICAgICAgICAgIC8vIFdoaWxlIHRo
ZSBncmlkIGlzIGEgY29udGludW91cyBmbG93IG9mIHJvd3MsIGluIHRoZSBkaXNwbGF5IHRyZWUg
dGhleSBhcmUgcmVsYXRpdmUgdG8gdGhlaXIgc2VjdGlvbnMuCiAgICAgICAgICAgICBzZWN0aW9u
T2Zmc2V0ID0gcm93TGlzdFtjZWxsLT5zdGFydFJvdygpXS5sb2dpY2FsVG9wKCk7CiAgICAgICAg
IH0KLSAgICAgICAgY2VsbERpc3BsYXlCb3guc2V0VG9wKHJvd0xpc3RbY2VsbC0+c3RhcnRSb3co
KV0ubG9naWNhbFRvcCgpIC0gc2VjdGlvbk9mZnNldCk7Ci0gICAgICAgIGNlbGxEaXNwbGF5Qm94
LnNldExlZnQoY29sdW1uTGlzdFtjZWxsLT5zdGFydENvbHVtbigpXS5sb2dpY2FsTGVmdCgpKTsK
KyAgICAgICAgY2VsbEJveEdlb21ldHJ5LnNldFRvcChyb3dMaXN0W2NlbGwtPnN0YXJ0Um93KCld
LmxvZ2ljYWxUb3AoKSAtIHNlY3Rpb25PZmZzZXQpOworICAgICAgICBjZWxsQm94R2VvbWV0cnku
c2V0TGVmdChjb2x1bW5MaXN0W2NlbGwtPnN0YXJ0Q29sdW1uKCldLmxvZ2ljYWxMZWZ0KCkpOwog
ICAgICAgICBhdXRvIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UgPSByb3dMaXN0W2NlbGwtPnN0YXJ0
Um93KCldLmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgZm9yIChzaXplX3Qgcm93SW5kZXggPSBj
ZWxsLT5zdGFydFJvdygpICsgMTsgcm93SW5kZXggPCBjZWxsLT5lbmRSb3coKTsgKytyb3dJbmRl
eCkKICAgICAgICAgICAgIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UgKz0gcm93TGlzdFtyb3dJbmRl
eF0ubG9naWNhbEhlaWdodCgpOwpAQCAtOTEsMTQgKzkxLDE0IEBAIHZvaWQgVGFibGVGb3JtYXR0
aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yQ2VsbHMoTGF5b3V0VW5pdCBhdmFpbGFibGVI
b3Jpem9uCiAgICAgICAgIGxheW91dENlbGwoKmNlbGwsIGF2YWlsYWJsZUhvcml6b250YWxTcGFj
ZSwgYXZhaWxhYmxlVmVydGljYWxTcGFjZSk7CiAgICAgICAgIC8vIEZJWE1FOiBGaW5kIG91dCBp
ZiBpdCBpcyBvayB0byB1c2UgdGhlIHJlZ3VsYXIgcGFkZGluZyBoZXJlIHRvIGFsaWduIHRoZSBj
b250ZW50IGJveCBpbnNpZGUgYSB0YWxsIGNlbGwgb3Igd2UgbmVlZCB0byAKICAgICAgICAgLy8g
dXNlIHNvbWUga2luZCBvZiBpbnRyaW5zaWMgcGFkZGluZyBzaW1pbGFyIHRvIFJlbmRlclRhYmxl
Q2VsbC4KLSAgICAgICAgYXV0byBwYWRkaW5nVG9wID0gY2VsbERpc3BsYXlCb3gucGFkZGluZ1Rv
cCgpLnZhbHVlT3IoTGF5b3V0VW5pdCB7IH0pOwotICAgICAgICBhdXRvIHBhZGRpbmdCb3R0b20g
PSBjZWxsRGlzcGxheUJveC5wYWRkaW5nQm90dG9tKCkudmFsdWVPcihMYXlvdXRVbml0IHsgfSk7
CisgICAgICAgIGF1dG8gcGFkZGluZ1RvcCA9IGNlbGxCb3hHZW9tZXRyeS5wYWRkaW5nVG9wKCku
dmFsdWVPcihMYXlvdXRVbml0IHsgfSk7CisgICAgICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGNl
bGxCb3hHZW9tZXRyeS5wYWRkaW5nQm90dG9tKCkudmFsdWVPcihMYXlvdXRVbml0IHsgfSk7CiAg
ICAgICAgIGF1dG8gaW50cmluc2ljUGFkZGluZ1RvcCA9IExheW91dFVuaXQgeyB9OwogICAgICAg
ICBhdXRvIGludHJpbnNpY1BhZGRpbmdCb3R0b20gPSBMYXlvdXRVbml0IHsgfTsKIAogICAgICAg
ICBzd2l0Y2ggKGNlbGxCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkpIHsKICAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKLSAgICAgICAgICAgIGF1dG8gaW50cmluc2ljVmVy
dGljYWxQYWRkaW5nID0gc3RkOjptYXgoMF9sdSwgYXZhaWxhYmxlVmVydGljYWxTcGFjZSAtIGNl
bGxEaXNwbGF5Qm94LnZlcnRpY2FsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpIC0gY2VsbERpc3Bs
YXlCb3guY29udGVudEJveEhlaWdodCgpKTsKKyAgICAgICAgICAgIGF1dG8gaW50cmluc2ljVmVy
dGljYWxQYWRkaW5nID0gc3RkOjptYXgoMF9sdSwgYXZhaWxhYmxlVmVydGljYWxTcGFjZSAtIGNl
bGxCb3hHZW9tZXRyeS52ZXJ0aWNhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSAtIGNlbGxCb3hH
ZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCkpOwogICAgICAgICAgICAgaW50cmluc2ljUGFkZGlu
Z1RvcCA9IGludHJpbnNpY1ZlcnRpY2FsUGFkZGluZyAvIDI7CiAgICAgICAgICAgICBpbnRyaW5z
aWNQYWRkaW5nQm90dG9tID0gaW50cmluc2ljVmVydGljYWxQYWRkaW5nIC8gMjsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTA2LDggKzEwNiw4IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6c2V0VXNlZEdlb21ldHJ5Rm9yQ2VsbHMoTGF5b3V0VW5pdCBhdmFpbGFibGVIb3Jpem9uCiAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6IHsKICAgICAgICAgICAgIGF1dG8g
cm93QmFzZWxpbmUgPSBMYXlvdXRVbml0IHsgcm93TGlzdFtjZWxsLT5zdGFydFJvdygpXS5iYXNl
bGluZSgpIH07CiAgICAgICAgICAgICBhdXRvIGNlbGxCYXNlbGluZSA9IExheW91dFVuaXQgeyBj
ZWxsLT5iYXNlbGluZSgpIH07Ci0gICAgICAgICAgICBpbnRyaW5zaWNQYWRkaW5nVG9wID0gc3Rk
OjptYXgoMF9sdSwgcm93QmFzZWxpbmUgLSBjZWxsQmFzZWxpbmUgLSBjZWxsRGlzcGxheUJveC5i
b3JkZXJUb3AoKSk7Ci0gICAgICAgICAgICBpbnRyaW5zaWNQYWRkaW5nQm90dG9tID0gc3RkOjpt
YXgoMF9sdSwgYXZhaWxhYmxlVmVydGljYWxTcGFjZSAtIGNlbGxEaXNwbGF5Qm94LnZlcnRpY2Fs
TWFyZ2luQm9yZGVyQW5kUGFkZGluZygpIC0gaW50cmluc2ljUGFkZGluZ1RvcCAtIGNlbGxEaXNw
bGF5Qm94LmNvbnRlbnRCb3hIZWlnaHQoKSk7CisgICAgICAgICAgICBpbnRyaW5zaWNQYWRkaW5n
VG9wID0gc3RkOjptYXgoMF9sdSwgcm93QmFzZWxpbmUgLSBjZWxsQmFzZWxpbmUgLSBjZWxsQm94
R2VvbWV0cnkuYm9yZGVyVG9wKCkpOworICAgICAgICAgICAgaW50cmluc2ljUGFkZGluZ0JvdHRv
bSA9IHN0ZDo6bWF4KDBfbHUsIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UgLSBjZWxsQm94R2VvbWV0
cnkudmVydGljYWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkgLSBpbnRyaW5zaWNQYWRkaW5nVG9w
IC0gY2VsbEJveEdlb21ldHJ5LmNvbnRlbnRCb3hIZWlnaHQoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQg
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yQ2VsbHMoTGF5b3V0VW5p
dCBhdmFpbGFibGVIb3Jpem9uCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGNl
bGxCb3guZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRJbkZsb3dPckZsb2F0aW5nU2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChjaGlsZC0+aXNBbm9ueW1vdXMoKSB8fCBjaGlsZC0+aXNMaW5lQnJlYWtCb3goKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBmb3JtYXR0
aW5nU3RhdGUuZGlzcGxheUJveCgqY2hpbGQpLm1vdmVWZXJ0aWNhbGx5KGludHJpbnNpY1BhZGRp
bmdUb3ApOworICAgICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYm94R2VvbWV0cnko
KmNoaWxkKS5tb3ZlVmVydGljYWxseShpbnRyaW5zaWNQYWRkaW5nVG9wKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGNlbGxCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlDb250
ZW50ID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShjZWxs
Qm94KS5lbnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCgpOwpAQCAtMTM4LDcgKzEzOCw3IEBAIHZv
aWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yQ2VsbHMoTGF5b3V0
VW5pdCBhdmFpbGFibGVIb3Jpem9uCiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgYWRqdXN0
Q2VsbENvbnRlbnRXaXRoSW5zdHJpbnNpY1BhZGRpbmdCZWZvcmUoKTsKICAgICAgICAgfQotICAg
ICAgICBjZWxsRGlzcGxheUJveC5zZXRWZXJ0aWNhbFBhZGRpbmcoeyBwYWRkaW5nVG9wICsgaW50
cmluc2ljUGFkZGluZ1RvcCwgcGFkZGluZ0JvdHRvbSArIGludHJpbnNpY1BhZGRpbmdCb3R0b20g
fSk7CisgICAgICAgIGNlbGxCb3hHZW9tZXRyeS5zZXRWZXJ0aWNhbFBhZGRpbmcoeyBwYWRkaW5n
VG9wICsgaW50cmluc2ljUGFkZGluZ1RvcCwgcGFkZGluZ0JvdHRvbSArIGludHJpbnNpY1BhZGRp
bmdCb3R0b20gfSk7CiAgICAgfQogfQogCkBAIC0xNTIsMTIgKzE1MiwxMiBAQCB2b2lkIFRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvclJvd3MoTGF5b3V0VW5pdCBhdmFp
bGFibGVIb3Jpem9udAogICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBy
b3dzLnNpemUoKTsgKytyb3dJbmRleCkgewogICAgICAgICBhdXRvJiByb3cgPSByb3dzW3Jvd0lu
ZGV4XTsKICAgICAgICAgYXV0byYgcm93Qm94ID0gcm93LmJveCgpOwotICAgICAgICBhdXRvJiBy
b3dEaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChyb3dCb3gpOworICAg
ICAgICBhdXRvJiByb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5
KHJvd0JveCk7CiAKLSAgICAgICAgcm93RGlzcGxheUJveC5zZXRQYWRkaW5nKGdlb21ldHJ5KCku
Y29tcHV0ZWRQYWRkaW5nKHJvd0JveCwgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlKSk7CisgICAg
ICAgIHJvd0JveEdlb21ldHJ5LnNldFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmco
cm93Qm94LCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpKTsKICAgICAgICAgLy8gSW50ZXJuYWwg
dGFibGUgZWxlbWVudHMgZG8gbm90IGhhdmUgbWFyZ2lucy4KLSAgICAgICAgcm93RGlzcGxheUJv
eC5zZXRIb3Jpem9udGFsTWFyZ2luKHsgfSk7Ci0gICAgICAgIHJvd0Rpc3BsYXlCb3guc2V0VmVy
dGljYWxNYXJnaW4oeyB9KTsKKyAgICAgICAgcm93Qm94R2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1h
cmdpbih7IH0pOworICAgICAgICByb3dCb3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih7IH0p
OwogCiAgICAgICAgIGF1dG8gY29tcHV0ZWRSb3dCb3JkZXIgPSBbJl0gewogICAgICAgICAgICAg
YXV0byBib3JkZXIgPSBnZW9tZXRyeSgpLmNvbXB1dGVkQm9yZGVyKHJvd0JveCk7CkBAIC0xODEs
NyArMTgxLDcgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRVc2VkR2VvbWV0cnlG
b3JSb3dzKExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbnQKICAgICAgICAgICAgIGNvbXB1dGVk
Um93Qm9yZGVyLnZlcnRpY2FsLnRvcCA9IHsgfTsKICAgICAgICAgICAgIGNvbXB1dGVkUm93Qm9y
ZGVyLnZlcnRpY2FsLmJvdHRvbSA9IHsgfTsKICAgICAgICAgfQotICAgICAgICByb3dEaXNwbGF5
Qm94LnNldENvbnRlbnRCb3hIZWlnaHQocm93LmxvZ2ljYWxIZWlnaHQoKSAtIGNvbXB1dGVkUm93
Qm9yZGVyLmhlaWdodCgpKTsKKyAgICAgICAgcm93Qm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhl
aWdodChyb3cubG9naWNhbEhlaWdodCgpIC0gY29tcHV0ZWRSb3dCb3JkZXIuaGVpZ2h0KCkpOwog
CiAgICAgICAgIGF1dG8gcm93TG9naWNhbFdpZHRoID0gZ3JpZC5jb2x1bW5zKCkubG9naWNhbFdp
ZHRoKCkgKyAyICogZ3JpZC5ob3Jpem9udGFsU3BhY2luZygpOwogICAgICAgICBpZiAoY29tcHV0
ZWRSb3dCb3JkZXIud2lkdGgoKSA+IHJvd0xvZ2ljYWxXaWR0aCkgewpAQCAtMTg5LDE1ICsxODks
MTUgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRVc2VkR2VvbWV0cnlGb3JSb3dz
KExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbnQKICAgICAgICAgICAgIGNvbXB1dGVkUm93Qm9y
ZGVyLmhvcml6b250YWwubGVmdCA9IHsgfTsKICAgICAgICAgICAgIGNvbXB1dGVkUm93Qm9yZGVy
Lmhvcml6b250YWwucmlnaHQgPSB7IH07CiAgICAgICAgIH0KLSAgICAgICAgcm93RGlzcGxheUJv
eC5zZXRDb250ZW50Qm94V2lkdGgocm93TG9naWNhbFdpZHRoIC0gY29tcHV0ZWRSb3dCb3JkZXIu
d2lkdGgoKSk7Ci0gICAgICAgIHJvd0Rpc3BsYXlCb3guc2V0Qm9yZGVyKGNvbXB1dGVkUm93Qm9y
ZGVyKTsKKyAgICAgICAgcm93Qm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKHJvd0xvZ2lj
YWxXaWR0aCAtIGNvbXB1dGVkUm93Qm9yZGVyLndpZHRoKCkpOworICAgICAgICByb3dCb3hHZW9t
ZXRyeS5zZXRCb3JkZXIoY29tcHV0ZWRSb3dCb3JkZXIpOwogCiAgICAgICAgIGlmIChwcmV2aW91
c1JvdyAmJiAmcHJldmlvdXNSb3ctPnBhcmVudCgpICE9ICZyb3dCb3gucGFyZW50KCkpIHsKICAg
ICAgICAgICAgIC8vIFRoaXMgcm93IGlzIGluIGEgZGlmZmVyZW50IHNlY3Rpb24uCiAgICAgICAg
ICAgICByb3dMb2dpY2FsVG9wID0geyB9OwogICAgICAgICB9Ci0gICAgICAgIHJvd0Rpc3BsYXlC
b3guc2V0VG9wKHJvd0xvZ2ljYWxUb3ApOwotICAgICAgICByb3dEaXNwbGF5Qm94LnNldExlZnQo
eyB9KTsKKyAgICAgICAgcm93Qm94R2VvbWV0cnkuc2V0VG9wKHJvd0xvZ2ljYWxUb3ApOworICAg
ICAgICByb3dCb3hHZW9tZXRyeS5zZXRMZWZ0KHsgfSk7CiAKICAgICAgICAgcm93TG9naWNhbFRv
cCArPSByb3cubG9naWNhbEhlaWdodCgpICsgZ3JpZC52ZXJ0aWNhbFNwYWNpbmcoKTsKICAgICAg
ICAgcHJldmlvdXNSb3cgPSAmcm93Qm94OwpAQCAtMjMxLDE3ICsyMzEsMTcgQEAgdm9pZCBUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRVc2VkR2VvbWV0cnlGb3JTZWN0aW9ucyhjb25zdCBDb25z
dHJhaW50c0ZvckluRmwKICAgICBhdXRvIHBhZGRpbmdCZWZvcmUgPSBPcHRpb25hbDxMYXlvdXRV
bml0PiB7IHZlcnRpY2FsU3BhY2luZyB9OwogICAgIGF1dG8gcGFkZGluZ0FmdGVyID0gdmVydGlj
YWxTcGFjaW5nOwogICAgIGZvciAoYXV0byYgc2VjdGlvbkJveCA6IGNoaWxkcmVuT2ZUeXBlPENv
bnRhaW5lckJveD4odGFibGVCb3gpKSB7Ci0gICAgICAgIGF1dG8mIHNlY3Rpb25EaXNwbGF5Qm94
ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChzZWN0aW9uQm94KTsKKyAgICAgICAgYXV0
byYgc2VjdGlvbkJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoc2Vj
dGlvbkJveCk7CiAgICAgICAgIC8vIFNlY3Rpb24gYm9yZGVycyBhcmUgZWl0aGVyIGNvbGxhcHNl
ZCBvciBpZ25vcmVkLgotICAgICAgICBzZWN0aW9uRGlzcGxheUJveC5zZXRCb3JkZXIoeyB9KTsK
KyAgICAgICAgc2VjdGlvbkJveEdlb21ldHJ5LnNldEJvcmRlcih7IH0pOwogICAgICAgICAvLyBV
c2UgZmFrZSB2ZXJ0aWNhbCBwYWRkaW5nIHRvIHNwYWNlIG91dCB0aGUgc2VjdGlvbnMuCi0gICAg
ICAgIHNlY3Rpb25EaXNwbGF5Qm94LnNldFBhZGRpbmcoRWRnZXMgeyB7IH0sIHsgcGFkZGluZ0Jl
Zm9yZS52YWx1ZU9yKDBfbHUpLCBwYWRkaW5nQWZ0ZXIgfSB9KTsKKyAgICAgICAgc2VjdGlvbkJv
eEdlb21ldHJ5LnNldFBhZGRpbmcoRWRnZXMgeyB7IH0sIHsgcGFkZGluZ0JlZm9yZS52YWx1ZU9y
KDBfbHUpLCBwYWRkaW5nQWZ0ZXIgfSB9KTsKICAgICAgICAgcGFkZGluZ0JlZm9yZSA9IFdURjo6
bnVsbG9wdDsKICAgICAgICAgLy8gSW50ZXJuYWwgdGFibGUgZWxlbWVudHMgZG8gbm90IGhhdmUg
bWFyZ2lucy4KLSAgICAgICAgc2VjdGlvbkRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7
IH0pOwotICAgICAgICBzZWN0aW9uRGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IH0pOwor
ICAgICAgICBzZWN0aW9uQm94R2VvbWV0cnkuc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOworICAg
ICAgICBzZWN0aW9uQm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKIAotICAgICAg
ICBzZWN0aW9uRGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoc2VjdGlvbldpZHRoKTsKKyAg
ICAgICAgc2VjdGlvbkJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChzZWN0aW9uV2lkdGgp
OwogICAgICAgICBhdXRvIHNlY3Rpb25Db250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCB7IH07CiAg
ICAgICAgIHNpemVfdCByb3dDb3VudCA9IDA7CiAgICAgICAgIGZvciAoYXV0byYgcm93Qm94IDog
Y2hpbGRyZW5PZlR5cGU8Q29udGFpbmVyQm94PihzZWN0aW9uQm94KSkgewpAQCAtMjQ5LDExICsy
NDksMTEgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRVc2VkR2VvbWV0cnlGb3JT
ZWN0aW9ucyhjb25zdCBDb25zdHJhaW50c0ZvckluRmwKICAgICAgICAgICAgICsrcm93Q291bnQ7
CiAgICAgICAgIH0KICAgICAgICAgc2VjdGlvbkNvbnRlbnRIZWlnaHQgKz0gdmVydGljYWxTcGFj
aW5nICogKHJvd0NvdW50IC0gMSk7Ci0gICAgICAgIHNlY3Rpb25EaXNwbGF5Qm94LnNldENvbnRl
bnRCb3hIZWlnaHQoc2VjdGlvbkNvbnRlbnRIZWlnaHQpOwotICAgICAgICBzZWN0aW9uRGlzcGxh
eUJveC5zZXRMZWZ0KGNvbnN0cmFpbnRzLmhvcml6b250YWwubG9naWNhbExlZnQpOwotICAgICAg
ICBzZWN0aW9uRGlzcGxheUJveC5zZXRUb3AobG9naWNhbFRvcCk7CisgICAgICAgIHNlY3Rpb25C
b3hHZW9tZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KHNlY3Rpb25Db250ZW50SGVpZ2h0KTsKKyAg
ICAgICAgc2VjdGlvbkJveEdlb21ldHJ5LnNldExlZnQoY29uc3RyYWludHMuaG9yaXpvbnRhbC5s
b2dpY2FsTGVmdCk7CisgICAgICAgIHNlY3Rpb25Cb3hHZW9tZXRyeS5zZXRUb3AobG9naWNhbFRv
cCk7CiAKLSAgICAgICAgbG9naWNhbFRvcCArPSBzZWN0aW9uRGlzcGxheUJveC5oZWlnaHQoKTsK
KyAgICAgICAgbG9naWNhbFRvcCArPSBzZWN0aW9uQm94R2VvbWV0cnkuaGVpZ2h0KCk7CiAgICAg
fQogfQogCkBAIC0yNjMsMTMgKzI2MywxMyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6
OmxheW91dENlbGwoY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsLCBMYXlvdXRVbml0CiAKICAg
ICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCk7CiAgICAgYXV0byYg
Y2VsbEJveCA9IGNlbGwuYm94KCk7Ci0gICAgYXV0byYgY2VsbERpc3BsYXlCb3ggPSBmb3JtYXR0
aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGNlbGxCb3gpOworICAgIGF1dG8mIGNlbGxCb3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGNlbGxCb3gpOwogCi0gICAgY2VsbERp
c3BsYXlCb3guc2V0Qm9yZGVyKGdlb21ldHJ5KCkuY29tcHV0ZWRDZWxsQm9yZGVyKGNlbGwpKTsK
LSAgICBjZWxsRGlzcGxheUJveC5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5n
KGNlbGxCb3gsIGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOworICAgIGNlbGxCb3hHZW9tZXRy
eS5zZXRCb3JkZXIoZ2VvbWV0cnkoKS5jb21wdXRlZENlbGxCb3JkZXIoY2VsbCkpOworICAgIGNl
bGxCb3hHZW9tZXRyeS5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5nKGNlbGxC
b3gsIGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOwogICAgIC8vIEludGVybmFsIHRhYmxlIGVs
ZW1lbnRzIGRvIG5vdCBoYXZlIG1hcmdpbnMuCi0gICAgY2VsbERpc3BsYXlCb3guc2V0SG9yaXpv
bnRhbE1hcmdpbih7IH0pOwotICAgIGNlbGxEaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsg
fSk7CisgICAgY2VsbEJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKKyAgICBj
ZWxsQm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKIAogICAgIGF1dG8gYXZhaWxh
YmxlU3BhY2VGb3JDb250ZW50ID0gWyZdIHsKICAgICAgICAgYXV0byYgY29sdW1uTGlzdCA9IGdy
aWQuY29sdW1ucygpLmxpc3QoKTsKQEAgLTI3OCw5ICsyNzgsOSBAQCB2b2lkIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQ6OmxheW91dENlbGwoY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsLCBMYXlv
dXRVbml0CiAgICAgICAgICAgICBsb2dpY2FsV2lkdGggKz0gY29sdW1uTGlzdC5hdChjb2x1bW5J
bmRleCkubG9naWNhbFdpZHRoKCk7CiAgICAgICAgIC8vIE5vIGNvbHVtbiBzcGFjaW5nIHdoZW4g
c3Bhbm5pbmcuCiAgICAgICAgIGxvZ2ljYWxXaWR0aCArPSAoY2VsbC5jb2x1bW5TcGFuKCkgLSAx
KSAqIGdyaWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0
aCAtIGNlbGxEaXNwbGF5Qm94Lmhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCk7Cisg
ICAgICAgIHJldHVybiBsb2dpY2FsV2lkdGggLSBjZWxsQm94R2VvbWV0cnkuaG9yaXpvbnRhbE1h
cmdpbkJvcmRlckFuZFBhZGRpbmcoKTsKICAgICB9KCk7Ci0gICAgY2VsbERpc3BsYXlCb3guc2V0
Q29udGVudEJveFdpZHRoKGF2YWlsYWJsZVNwYWNlRm9yQ29udGVudCk7CisgICAgY2VsbEJveEdl
b21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChhdmFpbGFibGVTcGFjZUZvckNvbnRlbnQpOwogCiAg
ICAgaWYgKGNlbGxCb3guaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpIHsKICAgICAgICAgYXV0
byBjb25zdHJhaW50c0ZvckNlbGxDb250ZW50ID0gZ2VvbWV0cnkoKS5jb25zdHJhaW50c0Zvcklu
Rmxvd0NvbnRlbnQoY2VsbEJveCk7CkBAIC0yOTIsNyArMjkyLDcgQEAgdm9pZCBUYWJsZUZvcm1h
dHRpbmdDb250ZXh0OjpsYXlvdXRDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCwgTGF5
b3V0VW5pdAogICAgICAgICBmbG9hdGluZ1N0YXRlRm9yQ2VsbENvbnRlbnQuY2xlYXIoKTsKICAg
ICAgICAgTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoY2VsbEJveCwgbGF5
b3V0U3RhdGUoKSktPmxheW91dEluRmxvd0NvbnRlbnQoaW52YWxpZGF0aW9uU3RhdGUsIGNvbnN0
cmFpbnRzRm9yQ2VsbENvbnRlbnQpOwogICAgIH0KLSAgICBjZWxsRGlzcGxheUJveC5zZXRDb250
ZW50Qm94SGVpZ2h0KGdlb21ldHJ5KCkuY2VsbEhlaWdoKGNlbGxCb3gpKTsKKyAgICBjZWxsQm94
R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChnZW9tZXRyeSgpLmNlbGxIZWlnaChjZWxsQm94
KSk7CiB9CiAKIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFi
bGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggMTIx
NGYxNjIzY2I2NGMzMDk0YzhiNGQ3MzYyMTI5NWE2MjRkZmU0My4uOWQ0NWI0OWMyYWMyNWZmOWUx
OTFiZmZkYmZjNDYyMTNmZWI3ZGZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29u
dGV4dEdlb21ldHJ5LmNwcApAQCAtMjksOSArMjksOSBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisj
aW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0RGVzY2VuZGFudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0
R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAj
aW5jbHVkZSAiVGFibGVGb3JtYXR0aW5nU3RhdGUuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlTGF5b3V0LmNwcAppbmRleCA4MTRmYjEz
MGM2YTA4NTBiMjc1ZmQ5Njk2NTU5NzU5NjU4NmQ0ZDc3Li4xYjcwMDA0MTNmMDJmY2VjYzZlYTUy
Y2FlZTBlNzNhNGUyOTQ0ZmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFi
bGVmb3JtYXR0aW5nL1RhYmxlTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
dGFibGVmb3JtYXR0aW5nL1RhYmxlTGF5b3V0LmNwcApAQCAtMjksNyArMjksNyBAQAogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5jbHVkZSAiTGF5b3V0Qm94Lmgi
Ci0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRy
eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwCmluZGV4IGRhYTJjNWIx
NjNlMzczZjA4YWMxYmE1MGRjNTMzMjI2MjU3YWRkNWIuLjBjOGJlNzk0OTUxYjc4ZTE5Yjc1OTI4
ODViYmY4MzVlYjFjOTUzYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3TGF5b3V0Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdM
YXlvdXRDb250ZXh0LmNwcApAQCAtNDIsOCArNDIsOCBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9S
TUFUVElOR19DT05URVhUKQogI2luY2x1ZGUgIkludmFsaWRhdGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJJbnZhbGlkYXRpb25TdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRUcmVlQnVpbGRlci5o
IgogI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJdGVyYXRvci5oIgpAQCAtODEsNyArODEsNyBA
QCB2b2lkIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmxheW91dFVzaW5nRm9ybWF0dGluZ0NvbnRl
eHQoKQogCiAgICAgLy8gQ2xlYW4gdXAgdGhlIHJlbmRlciB0cmVlIHN0YXRlIHdoZW4gd2UgZG9u
J3QgcnVuIFJlbmRlclZpZXc6OmxheW91dC4KICAgICBpZiAocmVuZGVyVmlldy5uZWVkc0xheW91
dCgpKSB7Ci0gICAgICAgIGF1dG8gY29udGVudFNpemUgPSBtX2xheW91dFN0YXRlLT5nZW9tZXRy
eUZvckxheW91dEJveCgqbV9sYXlvdXRTdGF0ZS0+cm9vdCgpLmZpcnN0Q2hpbGQoKSkuc2l6ZSgp
OworICAgICAgICBhdXRvIGNvbnRlbnRTaXplID0gbV9sYXlvdXRTdGF0ZS0+Z2VvbWV0cnlGb3JC
b3goKm1fbGF5b3V0U3RhdGUtPnJvb3QoKS5maXJzdENoaWxkKCkpLnNpemUoKTsKICAgICAgICAg
cmVuZGVyVmlldy5zZXRTaXplKGNvbnRlbnRTaXplKTsKICAgICAgICAgcmVuZGVyVmlldy5yZXBh
aW50Vmlld1JlY3RhbmdsZSh7IDAsIDAsIGNvbnRlbnRTaXplLndpZHRoKCksIGNvbnRlbnRTaXpl
LmhlaWdodCgpIH0pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408790</attachid>
            <date>2020-09-14 22:10:49 -0700</date>
            <delta_ts>2020-09-14 22:19:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216523-20200914221048.patch</filename>
            <type>text/plain</type>
            <size>162236</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwZTE5ZTRkNzcxM2Vi
MGY4YjM2MDJkNTY3ZDMxYTJjYTdkYzI3Yy4uNzI0MDY3OTdiZTUyZGYzNDYzOGM0MzQ0NjEzZmY5
OTA0YjRmMTAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NCBAQAorMjAyMC0wOS0xNCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdIExheW91dDo6Qm94
R2VvbWV0cnkgcmVuYW1lLCBwYXJ0IElJLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJh
c2VyLgorCisgICAgICAgIFJlbmFtZSBMYXlvdXQ6Okdlb21ldHJ5IHRvIExheW91dDo6Qm94R2Vv
bWV0cnkgKHNvIHRoYXQgbGF0ZXIgd2UgY2FuIGludHJvZHVjZSBMYXlvdXQ6OkxpbmVHZW9tZXRy
eSBhbmQgTGF5b3V0OjpSdW5HZW9tZXRyeSkgYW5kCisgICAgICAgIG1ha2Ugc3VyZSB3ZSBkb24n
dCB1c2UgZGlzcGxheUJveCBhcyBhIHZhcmlhYmxlIG5hbWUgaW4gTGF5b3V0IG5hbWVzcGFjZS4K
KworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9m
Rmxvd0hvcml6b250YWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFk
ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpnZW9t
ZXRyeUZvckJveCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0Lmg6
CisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1Zl
cnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAgICAqIGxheW91dC9Gb3JtYXR0
aW5nU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nU3RhdGU6
OmJveEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ1N0YXRl
OjpkaXNwbGF5Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ1N0YXRl
Lmg6CisgICAgICAgICogbGF5b3V0L0xheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMYXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMYXlvdXRDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFN1YnRyZWUpOgorICAg
ICAgICAqIGxheW91dC9MYXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxheW91dFN0YXRlOjpnZW9tZXRyeUZvclJvb3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMYXlvdXRTdGF0ZTo6ZW5zdXJlR2VvbWV0cnlGb3JCb3hTbG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6Omdlb21ldHJ5Rm9yUm9vdExheW91dEJveCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjplbnN1cmVEaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94U2xvdyk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L0xheW91
dFN0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjpoYXNCb3hH
ZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjpl
bnN1cmVHZW9tZXRyeUZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0
YXRlOjpnZW9tZXRyeUZvckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJv
eDo6Y2FjaGVkR2VvbWV0cnlGb3JMYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxheW91dFN0YXRlOjpoYXNEaXNwbGF5Qm94IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6OmVuc3VyZUdlb21ldHJ5Rm9yTGF5
b3V0Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6
Omdlb21ldHJ5Rm9yTGF5b3V0Qm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Qm94OjpjYWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0U3RhdGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGxheW91dC9WZXJpZmljYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpvdXRwdXRNaXNtYXRjaGluZ0Jsb2NrQm94SW5mb3JtYXRpb25JZk5lZWRlZCk6
CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwcmVjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckJveEFu
ZEFuY2VzdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVQb3NpdGlvblRvQXZvaWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlVmVydGljYWxQb3NpdGlvbkZv
ckZsb2F0Q2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAg
ICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdpbik6CisgICAgICAgICog
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcDoK
KyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJn
aW5Db2xsYXBzZTo6aGFzQ2xlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tm
b3JtYXR0aW5nL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmdGb3JUYWJsZUJveCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVXaWR0aEFuZE1hcmdpbkZvclRhYmxlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1h
cmdpbkZvclRhYmxlQm94KToKKyAgICAgICAgKiBsYXlvdXQvZGlzcGxheS9EaXNwbGF5TGF5ZXJD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkxheWVyQ29udHJvbGxl
cjo6cHJlcGFyZUZvckRpc3BsYXkpOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNw
bGF5UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpwYWludEJveERlY29y
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UGFpbnRlcjo6YWJzb2x1dGVCb3hH
ZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpwYWludFN1YnRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Y29sbGVjdFBhaW50Um9vdHNBbmRDb250ZW50UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpQYWludGVyOjphYnNvbHV0ZURpc3BsYXlCb3gp
OiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFpbnRlci5o
OgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmg6CisgICAgICAgICogbGF5
b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGbG9hdGluZ0NvbnRleHQ6OnBvc2l0aW9uRm9yRmxvYXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRleHQ6OnBvc2l0aW9uRm9yTm9uRmxvYXRpbmdGbG9h
dEF2b2lkZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRl
eHQ6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nQ29udGV4dDo6
YWJzb2x1dGVCb3hHZW9tZXRyeUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6RmxvYXRpbmdDb250ZXh0OjphYnNvbHV0ZURpc3BsYXlCb3hDb29yZGluYXRlcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQu
aDoKKyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ1N0YXRlOjpGbG9hdEl0ZW06OkZsb2F0SXRlbSk6Cisg
ICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6cmVjdFdpdGhNYXJnaW4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ1N0YXRlOjpGbG9hdEl0ZW06Omhv
cml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGlu
Z1N0YXRlOjpGbG9hdEl0ZW06OmJvdHRvbSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5l
TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdp
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlV2lkdGhBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JM
aW5lQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpjcmVhdGVEaXNwbGF5Qm94ZXNGb3JMaW5lQ29udGVudCk6IERlbGV0ZWQuCisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDoK
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94Lmg6CisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OnByZXBh
cmVGbG9hdGluZ1N0YXRlKToKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3g6OnNldGNhY2hlZEdlb21ldHJ5Rm9y
TGF5b3V0U3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3g6OnNldENh
Y2hlZERpc3BsYXlCb3hGb3JMYXlvdXRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
bGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94Lmg6CisgICAgICAgICogbGF5b3V0L2xheW91dHRy
ZWUvTGF5b3V0Qm94R2VvbWV0cnkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5
b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0cnkuY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpCb3hHZW9tZXRyeTo6Qm94R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCb3hHZW9tZXRyeTo6fkJveEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Qm94R2VvbWV0cnk6Om1hcmdpbkJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJveEdlb21ldHJ5Ojpib3JkZXJCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCb3hHZW9tZXRyeTo6cGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJveEdlb21ldHJ5Ojpjb250ZW50Qm94IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvbGF5
b3V0dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
bGF5b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0cnkuaC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6UmVjdDo6ZXhwYW5kSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6UmVjdDo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJl
Y3Q6OmludGVyc2VjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojpp
bnZhbGlkYXRlVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6aW52YWxpZGF0
ZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjppbnZhbGlkYXRlV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjppbnZhbGlkYXRlSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6aGFzVmFsaWRQb3NpdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6Omhhc1ZhbGlkU2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6Omhhc1ZhbGlkR2VvbWV0cnkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6UmVjdDo6aW52YWxpZGF0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6UmVjdDo6c2V0SGFzVmFsaWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlJlY3Q6OnNldEhhc1ZhbGlkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6
OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OmxlZnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojpib3R0b20gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpyaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlJlY3Q6OnRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpSZWN0Ojpib3R0b21SaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJl
Y3Q6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojp3aWR0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OmhlaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OnNldFRvcExlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpSZWN0OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpS
ZWN0OjpzZXRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6c2V0V2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6UmVjdDo6c2hpZnRMZWZ0VG8pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojpz
aGlmdFJpZ2h0VG8pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpzaGlmdFRvcFRv
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6c2hpZnRCb3R0b21Ubyk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6Om1vdmVIb3Jpem9udGFsbHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojptb3ZlVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlJlY3Q6OmV4cGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6
OmNsb25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6b3BlcmF0b3Ig
TGF5b3V0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
Ojpib3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6
cmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym90
dG9tUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6
c2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojp3aWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpoZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6aXNFbXB0eSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpyZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnJlY3RXaXRoTWFyZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Omhhc0NsZWFy
YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojp2ZXJ0
aWNhbEJvcmRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
Ojpob3Jpem9udGFsQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94
R2VvbWV0cnk6OmNvbnRlbnRCb3hUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCb3hHZW9tZXRyeTo6Y29udGVudEJveExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCb3hHZW9tZXRyeTo6Y29udGVudEJveEJvdHRvbSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpjb250ZW50Qm94UmlnaHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6cGFkZGluZ0JveFRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nQm94TGVmdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nQm94
Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnBh
ZGRpbmdCb3hSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21l
dHJ5OjpwYWRkaW5nQm94SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Qm94R2VvbWV0cnk6OnBhZGRpbmdCb3hXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJveEdlb21ldHJ5Ojpib3JkZXJCb3hIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9yZGVyQm94V2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6bWFyZ2luQm94SGVpZ2h0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Om1hcmdpbkJveFdpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnZlcnRpY2FsTWFy
Z2luQm9yZGVyQW5kUGFkZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJv
eEdlb21ldHJ5Ojpob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRIYXNQcmVjb21wdXRlZE1hcmdp
bkJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojptb3ZlSG9y
aXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Om1vdmVW
ZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Om1vdmUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6bW92ZUJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldEhhc0NsZWFyYW5jZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjppbnZhbGlkYXRlQm9yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmludmFsaWRhdGVQYWRkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmludmFsaWRhdGVQcmVjb21w
dXRlZE1hcmdpbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
OjpzZXRIYXNWYWxpZFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
OjpzZXRIYXNWYWxpZExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRy
eTo6c2V0SGFzVmFsaWRWZXJ0aWNhbE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJveEdlb21ldHJ5OjpzZXRIYXNWYWxpZEhvcml6b250YWxNYXJnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0SGFzVmFsaWRCb3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0SGFzVmFsaWRQYWRkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldEhhc1ZhbGlkQ29udGVudEhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRIYXNWYWxpZENv
bnRlbnRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjppbnZh
bGlkYXRlTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnRv
cCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpsZWZ0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnRvcExlZnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0VG9wTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0TGVmdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRDb250ZW50Qm94SGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldENvbnRlbnRCb3hXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpjb250ZW50Qm94SGVpZ2h0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmNvbnRlbnRCb3hXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRIb3Jp
em9udGFsTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNl
dFZlcnRpY2FsTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6
OnNldEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRQ
YWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldFZlcnRp
Y2FsUGFkZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojp2ZXJ0
aWNhbE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
Ojpob3Jpem9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94
R2VvbWV0cnk6Om1hcmdpbkJlZm9yZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJveEdlb21ldHJ5OjptYXJnaW5TdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJveEdlb21ldHJ5OjptYXJnaW5BZnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJveEdlb21ldHJ5OjptYXJnaW5FbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCb3hHZW9tZXRyeTo6cGFkZGluZ1RvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nQm90dG9tIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnBhZGRpbmdSaWdodCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojp2ZXJ0aWNhbFBhZGRpbmcgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6aG9yaXpvbnRhbFBhZGRp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9yZGVy
VG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmJvcmRl
ckxlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9y
ZGVyQm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6
OmJvcmRlclJpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRU
cmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dExheW91dEJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dExheW91dFRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpzaG93TGF5b3V0VHJlZSk6CisgICAgICAgICogbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yQ2Vs
bHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpz
ZXRVc2VkR2VvbWV0cnlGb3JSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVG
b3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yU2VjdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRDZWxsKToKKyAg
ICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHA6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUxheW91dC5j
cHA6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlld0xheW91dENvbnRleHQ6OmxheW91dFVzaW5nRm9ybWF0dGluZ0Nv
bnRleHQpOgorCiAyMDIwLTA5LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgRHJvcCBzbW9vdGhpbmcgbG9naWMgZnJvbSBEZWxheURTUEtlcm5lbDo6cHJvY2Vz
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CmluZGV4IGY3MjhlNmI2NGExNzQ5NzIzZmUxNzE5YzVhMjY1NTZjZWUx
Zjk4ODQuLmNiMDgzMTg1YzlhNTM2NGVjOGQ0NTI2NWYxOTg1M2U4ZGMxMDQ4MDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CkBAIC0xNDU5LDcgKzE0NTksNyBAQCBsYXlvdXQvaW52YWxpZGF0aW9uL0ludmFsaWRh
dGlvbkNvbnRleHQuY3BwCiBsYXlvdXQvaW52YWxpZGF0aW9uL0ludmFsaWRhdGlvblN0YXRlLmNw
cAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5
b3V0Q29udGFpbmVyQm94LmNwcAotbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0cnkuY3Bw
CitsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5jcHAKIGxheW91dC9sYXlvdXR0
cmVlL0xheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9M
YXlvdXRJbmxpbmVUZXh0Qm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0TGluZUJyZWFr
Qm94LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDkyM2EzYTIzNzlkYmJiNGFiMWY4MmE4ZjRmYzI5ZTlhNmRiMWRhNmIuLjY4
MjRlZDBiNDE3YTM2NDkwYTkwMmIwMTI2MjI0MzA1MDMwZDY2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYwNjEsOCArNjA2
MSw4IEBACiAJCTBGRUMxMjBCMjJCRjJDQzcwMDRFOUQzNSAvKiBMYXllckFuY2VzdG9yQ2xpcHBp
bmdTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFj
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUYyMENEMUJENEEyNDEwMDEy
OEU1RCAvKiBMZW5ndGhTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExlbmd0aFNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVGMjBD
RjFCRDRBNjRGMDAxMjhFNUQgLyogUmVuZGVyU3R5bGVDb25zdGFudHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU3R5bGVDb25zdGFudHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkYyOUE1MzI1MTAxQTYxMDAzQzM0RTIgLyogTGF5
b3V0R2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0R2VvbWV0cnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZGMjlBNTUyNTEwMUE2MTAwM0MzNEUyIC8qIExheW91dEdl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEdlb21ldHJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMjlBNTMyNTEwMUE2MTAwM0MzNEUyIC8qIExheW91
dEJveEdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEJveEdlb21ldHJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjI5QTU1MjUxMDFBNjEwMDNDMzRFMiAvKiBMYXlv
dXRCb3hHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRCb3hHZW9tZXRyeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjJFODBDMUVFMEQ0MzAwMDlFQUJE
NCAvKiBQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZGM0I5MjQxRUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVhZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkYzQjkyNTFFRTNCNkRFMDBCODQxNDQgLyog
SlNET01RdWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUXVhZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc0NzksMTIgKzE3NDc5LDEyIEBACiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQkxMTVDRkE5NjIwOEI5NTJCMDAxRTY5OTEgLyogTGF5b3V0Qm94
LmNwcCAqLywKIAkJCQkxMTVDRkE5NTIwOEI5NTJCMDAxRTY5OTEgLyogTGF5b3V0Qm94LmggKi8s
CisJCQkJMEZGMjlBNTUyNTEwMUE2MTAwM0MzNEUyIC8qIExheW91dEJveEdlb21ldHJ5LmNwcCAq
LywKKwkJCQkwRkYyOUE1MzI1MTAxQTYxMDAzQzM0RTIgLyogTGF5b3V0Qm94R2VvbWV0cnkuaCAq
LywKIAkJCQkxMTEwMEZDOTIwOTI3Q0JDMDA4MUFBNkMgLyogTGF5b3V0Q2hpbGRJdGVyYXRvci5o
ICovLAogCQkJCTExOTlGQTQ1MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJCb3gu
Y3BwICovLAogCQkJCTExOTlGQTQ0MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJC
b3guaCAqLywKIAkJCQkxMUIwNDJGQjIwQjBFMjE0MDA4MjhBNkIgLyogTGF5b3V0RGVzY2VuZGFu
dEl0ZXJhdG9yLmggKi8sCi0JCQkJMEZGMjlBNTUyNTEwMUE2MTAwM0MzNEUyIC8qIExheW91dEdl
b21ldHJ5LmNwcCAqLywKLQkJCQkwRkYyOUE1MzI1MTAxQTYxMDAzQzM0RTIgLyogTGF5b3V0R2Vv
bWV0cnkuaCAqLywKIAkJCQk2RkIwRUQxMTI0MjdCNkM2MDAyNzM3RTYgLyogTGF5b3V0SW5pdGlh
bENvbnRhaW5pbmdCbG9jay5jcHAgKi8sCiAJCQkJNkY2MzgzRjQyNDI3QUY0OTAwREFCQTUzIC8q
IExheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCAqLywKIAkJCQk2RjBCOThCNjIzRjI2OTA2
MDBFRUMyRjIgLyogTGF5b3V0SW5saW5lVGV4dEJveC5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA2NWU4NjNhNGIyODFlMTMzNWVjNjdl
MmE5MjY1YzUzNmE5MTk2YThhLi5jMTMxNTM2MzYyMzAwNDQzOTMzZDQ2ODMwMDYwMzIyYmJlODUw
ZmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAg
LTMxLDEwICszMSwxMCBAQAogI2luY2x1ZGUgIkZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUg
IkludmFsaWRhdGlvblN0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCisjaW5jbHVkZSAi
TGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXJCb3guaCIKICNp
bmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0RGVzY2VuZGFudEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0
aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKICNp
bmNsdWRlICJMYXlvdXRTdGF0ZS5oIgpAQCAtOTAsMTEgKzkwLDExIEBAIHZvaWQgRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBs
YXlvdXRCb3gsCiAgICAgICAgICAgICBob3Jpem9udGFsR2VvbWV0cnkgPSBtaW5Ib3Jpem9udGFs
R2VvbWV0cnk7CiAgICAgfQogCi0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0
ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKLSAgICBkaXNwbGF5Qm94LnNldExlZnQoaG9yaXpv
bnRhbEdlb21ldHJ5LmxlZnQgKyBob3Jpem9udGFsR2VvbWV0cnkuY29udGVudFdpZHRoQW5kTWFy
Z2luLnVzZWRNYXJnaW4uc3RhcnQpOwotICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRo
KGhvcml6b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKTsK
KyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxh
eW91dEJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0TGVmdChob3Jpem9udGFsR2VvbWV0cnkubGVm
dCArIGhvcml6b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5z
dGFydCk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGhvcml6b250YWxHZW9t
ZXRyeS5jb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKTsKICAgICBhdXRvJiB1c2Vk
SG9yaXpvbnRhbE1hcmdpbiA9IGhvcml6b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRNYXJn
aW4udXNlZE1hcmdpbjsKLSAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kIH0pOworICAg
IGJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydCwgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kIH0pOwogfQogCiB2b2lkIEZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91
dEJveCwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50JiBjb25zdHJhaW50cykK
QEAgLTExOCwxOSArMTE4LDE5IEBAIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRP
ZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjCiAgICAgICAgICAg
ICB2ZXJ0aWNhbEdlb21ldHJ5ID0gbWluVmVydGljYWxHZW9tZXRyeTsKICAgICB9CiAKLSAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gp
OworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnko
bGF5b3V0Qm94KTsKICAgICBhdXRvIG5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luID0gdmVydGlj
YWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbjsKLSAg
ICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0aWNhbEdlb21ldHJ5LnRvcCArIG5vbkNvbGxhcHNlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZSk7Ci0gICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0
KHZlcnRpY2FsR2VvbWV0cnkuY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KTsK
KyAgICBib3hHZW9tZXRyeS5zZXRUb3AodmVydGljYWxHZW9tZXRyeS50b3AgKyBub25Db2xsYXBz
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUpOworICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hI
ZWlnaHQodmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWln
aHQpOwogICAgIC8vIE1hcmdpbnMgb2YgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJveGVzIGRvIG5v
dCBjb2xsYXBzZS4KLSAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgbm9uQ29sbGFw
c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlLCBub25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbi5hZnRl
ciB9KTsKKyAgICBib3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih7IG5vbkNvbGxhcHNlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZSwgbm9uQ29sbGFwc2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgfSk7
CiB9CiAKIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250
YWxDb25zdHJhaW50KQogewotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUo
KS5kaXNwbGF5Qm94KGxheW91dEJveCk7Ci0gICAgZGlzcGxheUJveC5zZXRCb3JkZXIoZ2VvbWV0
cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKLSAgICBkaXNwbGF5Qm94LnNldFBhZGRp
bmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3Ry
YWludC5sb2dpY2FsV2lkdGgpKTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdT
dGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVy
KGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIobGF5b3V0Qm94KSk7CisgICAgYm94R2VvbWV0cnku
c2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhsYXlvdXRCb3gsIGhvcml6b250
YWxDb25zdHJhaW50LmxvZ2ljYWxXaWR0aCkpOwogfQogCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25T
dGF0ZSwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50JiBjb25zdHJhaW50cykK
QEAgLTE2OCwxMSArMTY4LDExIEBAIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dE91dE9m
Rmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvblN0CiAgICAgTE9HX1dJ
VEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIkVuZDogbGF5b3V0
IG91dC1vZi1mbG93IGNvbnRlbnQgLT4gY29udGV4dDogIiA8PCAmbGF5b3V0U3RhdGUoKSA8PCAi
IHJvb3Q6ICIgPDwgJnJvb3QoKSk7CiB9CiAKLWNvbnN0IExheW91dDo6R2VvbWV0cnkmIEZvcm1h
dHRpbmdDb250ZXh0OjpnZW9tZXRyeUZvckJveChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9u
YWw8RXNjYXBlUmVhc29uPiBlc2NhcGVSZWFzb24pIGNvbnN0Citjb25zdCBCb3hHZW9tZXRyeSYg
Rm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5Rm9yQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBP
cHRpb25hbDxFc2NhcGVSZWFzb24+IGVzY2FwZVJlYXNvbikgY29uc3QKIHsKICAgICBVTlVTRURf
UEFSQU0oZXNjYXBlUmVhc29uKTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGF1dG8gaXNPa1Rv
QWNjZXNzRGlzcGxheUJveCA9IFsmXSB7CisgICAgYXV0byBpc09rVG9BY2Nlc3NCb3hHZW9tZXRy
eSA9IFsmXSB7CiAgICAgICAgIGlmICghaXM8SW5pdGlhbENvbnRhaW5pbmdCbG9jaz4obGF5b3V0
Qm94KSAmJiAmbGF5b3V0Qm94LmZvcm1hdHRpbmdDb250ZXh0Um9vdCgpID09ICZyb290KCkpIHsK
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG5vbi1lc2NhcGUgY2FzZSBvZiBhY2Nlc3Npbmcg
YSBib3gncyBnZW9tZXRyeSBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIHNhbWUgZm9ybWF0dGluZyBj
b250ZXh0LgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDksOSArMjQ5LDkgQEAgY29u
c3QgTGF5b3V0OjpHZW9tZXRyeSYgRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5Rm9yQm94KGNv
bnN0IEJveCYgbGF5b3V0Qm94LAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfTsKICNlbmRp
ZgotICAgIEFTU0VSVChpc09rVG9BY2Nlc3NEaXNwbGF5Qm94KCkpOwotICAgIEFTU0VSVChsYXlv
dXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KSk7Ci0gICAgcmV0dXJuIGxheW91dFN0
YXRlKCkuZ2VvbWV0cnlGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBBU1NFUlQoaXNPa1Rv
QWNjZXNzQm94R2VvbWV0cnkoKSk7CisgICAgQVNTRVJUKGxheW91dFN0YXRlKCkuaGFzQm94R2Vv
bWV0cnkobGF5b3V0Qm94KSk7CisgICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKIH0KIAogdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdE91dE9m
Rmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGlu
Z0NvbnRleHQuaAppbmRleCAwYjVkN2QwYWU2YmRhMWRhNzUxNWZhNDE1Y2U2ODdjNWFhMTFlMzA3
Li44MTllN2ZjYjk3YmJiNzVlZTRkNWVlODc5NGQ2NDFhNzA5NDM5ZTM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDEsNiArNDEsNyBAQCBzdHJ1Y3Qg
TGVuZ3RoOwogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEJveDsKK2NsYXNzIEJveEdlb21l
dHJ5OwogY2xhc3MgUmVwbGFjZWRCb3g7CiBzdHJ1Y3QgQ29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
Owogc3RydWN0IENvbXB1dGVkVmVydGljYWxNYXJnaW47CkBAIC00OSw3ICs1MCw2IEBAIHN0cnVj
dCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luOwogc3RydWN0IENvbnRlbnRXaWR0aEFuZE1hcmdpbjsK
IHN0cnVjdCBFZGdlczsKIGNsYXNzIEZvcm1hdHRpbmdTdGF0ZTsKLWNsYXNzIEdlb21ldHJ5Owog
c3RydWN0IEhvcml6b250YWxHZW9tZXRyeTsKIGNsYXNzIEludmFsaWRhdGlvblN0YXRlOwogY2xh
c3MgTGF5b3V0U3RhdGU7CkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgICAgICBTdHJv
a2VPdmVyZmxvd05lZWRzVmlld3BvcnRHZW9tZXRyeSwKICAgICAgICAgVGFibGVOZWVkc0FjY2Vz
c1RvVGFibGVXcmFwcGVyCiAgICAgfTsKLSAgICBjb25zdCBMYXlvdXQ6Okdlb21ldHJ5JiBnZW9t
ZXRyeUZvckJveChjb25zdCBCb3gmLCBPcHRpb25hbDxFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxs
b3B0KSBjb25zdDsKKyAgICBjb25zdCBCb3hHZW9tZXRyeSYgZ2VvbWV0cnlGb3JCb3goY29uc3Qg
Qm94JiwgT3B0aW9uYWw8RXNjYXBlUmVhc29uPiA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CiAgICAg
Y29uc3QgQ29udGFpbmVyQm94JiByb290KCkgY29uc3QgeyByZXR1cm4gKm1fcm9vdDsgfQogCiAg
ICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggODAxYTFiYzFh
YTVkYzY3MzY5YjMyMjcwNWQwOGU2ODJjYTk5ZTkwNy4uNzBlMDc3NTYxMWE4ZTVjYWIwNTYzY2Vk
NWVmNWU5YzQwNTc1MTJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtMjk3LDcgKzI5Nyw3IEBAIExheW91dFVuaXQg
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0
T2ZGbG93UG9zaXRpCiAgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRl
bmQgdGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KICAgICBmb3IgKGF1dG8qIGFuY2VzdG9y
ID0gJmxheW91dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRhaW5pbmdCbG9jazsgYW5j
ZXN0b3IgPSAmYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmFuY2VzdG9yLCBF
c2NhcGVSZWFzb246Ok91dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkpOwotICAgICAgICAv
LyBMYXlvdXQ6Okdlb21ldHJ5Ojp0b3AgaXMgdGhlIGJvcmRlciBib3ggdG9wIHBvc2l0aW9uIGlu
IGl0cyBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgICAgIC8vIEJv
eEdlb21ldHJ5Ojp0b3AgaXMgdGhlIGJvcmRlciBib3ggdG9wIHBvc2l0aW9uIGluIGl0cyBjb250
YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgICAgIHRvcCArPSBib3hHZW9t
ZXRyeS50b3AoKTsKICAgICAgICAgQVNTRVJUKCFhbmNlc3Rvci0+aXNQb3NpdGlvbmVkKCkgfHwg
bGF5b3V0Qm94LmlzRml4ZWRQb3NpdGlvbmVkKCkpOwogICAgIH0KQEAgLTMxOSw3ICszMTksNyBA
QCBMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaQogICAgIC8vIFN0YXJ0IHdpdGggdGhlIHBhcmVudCBz
aW5jZSB3ZSBwcmV0ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFsIGZsb3cuCiAgICAgZm9yIChh
dXRvKiBhbmNlc3RvciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFuY2VzdG9yICE9ICZjb250YWlu
aW5nQmxvY2s7IGFuY2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgewogICAg
ICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94
KCphbmNlc3RvciwgRXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5
KTsKLSAgICAgICAgLy8gTGF5b3V0OjpHZW9tZXRyeTo6bGVmdCBpcyB0aGUgYm9yZGVyIGJveCBs
ZWZ0IHBvc2l0aW9uIGluIGl0cyBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0u
CisgICAgICAgIC8vIEJveEdlb21ldHJ5OjpsZWZ0IGlzIHRoZSBib3JkZXIgYm94IGxlZnQgcG9z
aXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KICAgICAg
ICAgbGVmdCArPSBib3hHZW9tZXRyeS5sZWZ0KCk7CiAgICAgICAgIEFTU0VSVCghYW5jZXN0b3It
PmlzUG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWly
a3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNw
cAppbmRleCA4ODVlZGZiYWFjYjViMDg2N2QwNWRhYzlkYjNmMTdjNzM3ODg4NjJhLi44MjExYjBk
YzYzMGNhMjM5N2JhYjM4NGY5ODA4MzAzMTkxZjJiZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkxheW91
dEJveC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94
R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9G
b3JtYXR0aW5nU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0
ZS5jcHAKaW5kZXggOGEyMTljY2YxMTE2MmE2Y2E0YmE3NDM4Yjg2ZmFlZTk1ZmEwZTFmMS4uYTJj
NDg1MzFlNzZkNjQ4YTdlZjk0YTllYTg4YzRjMGQ0NDUzZDcxMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIK
LSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDgsMTMgKzQ4LDEzIEBAIEZvcm1hdHRpbmdTdGF0ZTo6fkZvcm1hdHRpbmdTdGF0
ZSgpCiB7CiB9CiAKLUxheW91dDo6R2VvbWV0cnkmIEZvcm1hdHRpbmdTdGF0ZTo6ZGlzcGxheUJv
eChjb25zdCBCb3gmIGxheW91dEJveCkKK0JveEdlb21ldHJ5JiBGb3JtYXR0aW5nU3RhdGU6OmJv
eEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIC8vIFNob3VsZCBuZXZlciBu
ZWVkIHRvIG11dGF0ZSBhIGRpc3BsYXkgYm94IG91dHNpZGUgb2YgdGhlIGZvcm1hdHRpbmcgY29u
dGV4dC4KICAgICBBU1NFUlQoJmxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3Rh
dGUobGF5b3V0Qm94LmZvcm1hdHRpbmdDb250ZXh0Um9vdCgpKSA9PSB0aGlzKTsKICAgICAvLyBB
bm9ueW1vdXMgdGV4dCB3cmFwcGVycy9saW5lIGJyZWFrIGJveGVzIHNob3VsZCBub3QgbmVlZCBk
aXNwbGF5IGJveGVzLgogICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lVGV4dEJveCgpICYm
ICghbGF5b3V0Qm94LmlzTGluZUJyZWFrQm94KCkgfHwgbGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpKSk7Ci0gICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZW5zdXJlR2VvbWV0cnlGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5lbnN1cmVHZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0
dGluZ1N0YXRlLmgKaW5kZXggY2VmOGRkOWJmYTBhZmNhMmIxZThiMzY4ZWU3ZmY2NDkzNTI0ODA1
OS4uZTM0MThkN2Q0MjU4MmMzYjM4MGMwNjZlNGJiYjI5OWNjMWIxYmZhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuaApAQCAtNjEsNyArNjEsOCBAQCBwdWJsaWM6CiAK
ICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFN0
YXRlOyB9CiAKLSAgICBMYXlvdXQ6Okdlb21ldHJ5JiBkaXNwbGF5Qm94KGNvbnN0IEJveCYgbGF5
b3V0Qm94KTsKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGxpbWl0IGFj
Y2VzcyB0byBtdXRhdGFibGUgZ2VvbWV0cnkuCisgICAgQm94R2VvbWV0cnkmIGJveEdlb21ldHJ5
KGNvbnN0IEJveCYgbGF5b3V0Qm94KTsKICAgICAvLyBTaW5jZSB3ZSBsYXlvdXQgdGhlIG91dC1v
Zi1mbG93IGJveGVzIGF0IHRoZSBlbmQgb2YgdGhlIGZvcm1hdHRpbmcgY29udGV4dCBsYXlvdXQs
IGl0J3Mgb2theSB0byBzdG9yZSB0aGVtIGluIHRoZSBmb3JtYXR0aW5nIHN0YXRlIC1hcyBvcHBv
c2VkIHRvIHRoZSBjb250YWluaW5nIGJsb2NrIGxldmVsLgogICAgIHVzaW5nIE91dE9mRmxvd0Jv
eExpc3QgPSBWZWN0b3I8V2Vha1B0cjxjb25zdCBCb3g+PjsKICAgICB2b2lkIGFkZE91dE9mRmxv
d0JveChjb25zdCBCb3gmIG91dE9mRmxvd0JveCkgeyBtX291dE9mRmxvd0JveGVzLmFwcGVuZCht
YWtlV2Vha1B0cihvdXRPZkZsb3dCb3gpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0xheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dENv
bnRleHQuY3BwCmluZGV4IGZmM2MxNGVmYTFhMmJhY2QzMDU2ZWMyYzQ4YmM5NjA4ZjZhODI3NWUu
LjkxMGU5YjNkNTk2OTljOTRmYTYyMWRkM2E0M2Y2NGIzOTI2ZDA4NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlICJJ
bnZhbGlkYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNp
bmNsdWRlICJMYXlvdXRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2lu
Y2x1ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRlICJMYXlvdXRUcmVlQnVpbGRlci5o
IgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCkBAIC02NCwxNCArNjQsMTQgQEAg
dm9pZCBMYXlvdXRDb250ZXh0OjpsYXlvdXQoY29uc3QgTGF5b3V0U2l6ZSYgcm9vdENvbnRlbnRC
b3hTaXplLCBJbnZhbGlkYXRpb25TdGEKICAgICAvLyBOb3RlIHRoYXQgd2UgbmV2ZXIgbGF5b3V0
IHRoZSByb290IGJveC4gSXQgaGFzIHRvIGhhdmUgYW4gYWxyZWFkeSBjb21wdXRlZCBnZW9tZXRy
eSAoaW4gY2FzZSBvZiBJQ0IsIGl0J3MgdGhlIHZpZXcgZ2VvbWV0cnkpLgogICAgIC8vIElDQiBl
c3RhYmxpc2hlcyB0aGUgaW5pdGlhbCBCRkMsIGJ1dCBpdCBkb2VzIG5vdCBsaXZlIGluIGEgZm9y
bWF0dGluZyBjb250ZXh0IGFuZCB3aGlsZSBhIG5vbi1JQ0Igcm9vdChzdWJ0cmVlIGxheW91dCkg
aGFzIHRvIGhhdmUgYSBmb3JtYXR0aW5nIGNvbnRleHQsCiAgICAgLy8gd2UgY291bGQgbm90IGxh
eSBpdCBvdXQgZXZlbiBpZiB3ZSB3YW50ZWQgdG8gc2luY2UgaXQncyBvdXRzaWRlIG9mIHRoaXMg
TGF5b3V0Q29udGV4dC4KLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5nZW9t
ZXRyeUZvclJvb3RMYXlvdXRCb3goKTsKLSAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJn
aW4oeyB9KTsKLSAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7Ci0gICAgZGlz
cGxheUJveC5zZXRCb3JkZXIoeyB9KTsKLSAgICBkaXNwbGF5Qm94LnNldFBhZGRpbmcoeyB9KTsK
LSAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyB9KTsKLSAgICBkaXNwbGF5Qm94LnNldENvbnRl
bnRCb3hIZWlnaHQocm9vdENvbnRlbnRCb3hTaXplLmhlaWdodCgpKTsKLSAgICBkaXNwbGF5Qm94
LnNldENvbnRlbnRCb3hXaWR0aChyb290Q29udGVudEJveFNpemUud2lkdGgoKSk7CisgICAgYXV0
byYgYm94R2VvbWV0cnkgPSBsYXlvdXRTdGF0ZSgpLmdlb21ldHJ5Rm9yUm9vdEJveCgpOworICAg
IGJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKKyAgICBib3hHZW9tZXRyeS5z
ZXRWZXJ0aWNhbE1hcmdpbih7IH0pOworICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcih7IH0pOwor
ICAgIGJveEdlb21ldHJ5LnNldFBhZGRpbmcoeyB9KTsKKyAgICBib3hHZW9tZXRyeS5zZXRUb3BM
ZWZ0KHsgfSk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChyb290Q29udGVu
dEJveFNpemUuaGVpZ2h0KCkpOworICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChy
b290Q29udGVudEJveFNpemUud2lkdGgoKSk7CiAKICAgICBsYXlvdXRXaXRoUHJlcGFyZWRSb290
R2VvbWV0cnkoaW52YWxpZGF0aW9uU3RhdGUpOwogfQpAQCAtOTYsMTAgKzk2LDEwIEBAIHZvaWQg
TGF5b3V0Q29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRTdWJ0cmVlKGNvbnN0IENvbnRh
aW5lckJveCYgZm9ybWF0dGluCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gZm9ybWF0dGlu
Z0NvbnRleHQgPSBjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4dFJvb3Qs
IGxheW91dFN0YXRlKCkpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmdl
b21ldHJ5Rm9yTGF5b3V0Qm94KGZvcm1hdHRpbmdDb250ZXh0Um9vdCk7CisgICAgYXV0byYgYm94
R2VvbWV0cnkgPSBsYXlvdXRTdGF0ZSgpLmdlb21ldHJ5Rm9yQm94KGZvcm1hdHRpbmdDb250ZXh0
Um9vdCk7CiAKICAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRSb290Lmhhc0luRmxvd09yRmxvYXRp
bmdDaGlsZCgpKSB7Ci0gICAgICAgIGF1dG8gY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50ID0g
Rm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCB7IHsgZGlzcGxh
eUJveC5jb250ZW50Qm94TGVmdCgpLCBkaXNwbGF5Qm94LmNvbnRlbnRCb3hXaWR0aCgpIH0sIHsg
ZGlzcGxheUJveC5jb250ZW50Qm94VG9wKCksIHsgfSB9IH07CisgICAgICAgIGF1dG8gY29uc3Ry
YWludHNGb3JJbkZsb3dDb250ZW50ID0gRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudCB7IHsgYm94R2VvbWV0cnkuY29udGVudEJveExlZnQoKSwgYm94R2VvbWV0
cnkuY29udGVudEJveFdpZHRoKCkgfSwgeyBib3hHZW9tZXRyeS5jb250ZW50Qm94VG9wKCksIHsg
fSB9IH07CiAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJbkZsb3dDb250ZW50KGlu
dmFsaWRhdGlvblN0YXRlLCBjb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQpOwogICAgIH0KIApA
QCAtMTA3LDggKzEwNyw4IEBAIHZvaWQgTGF5b3V0Q29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRTdWJ0cmVlKGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluCiAgICAgLy8gSXQgY29u
c3RydWN0cyBhbiBGQyBmb3IgZGVzY2VuZGFudCBib3hlcyBhbmQgcnVucyBsYXlvdXQgb24gdGhl
bS4gVGhlIGZvcm1hdHRpbmdDb250ZXh0Um9vdCBpcyBsYWlkIG91dCBpbiB0aGUgRkMgaW4gd2hp
Y2ggaXQgbGl2ZXMgKHBhcmVudCBmb3JtYXR0aW5nIGNvbnRleHQpLgogICAgIC8vIEl0IGFsc28g
bWVhbnMgdGhhdCB0aGUgZm9ybWF0dGluZ0NvbnRleHRSb290IGhhcyB0byBoYXZlIGEgdmFsaWQv
Y2xlYW4gZ2VvbWV0cnkgYXQgdGhpcyBwb2ludC4KICAgICB7Ci0gICAgICAgIGF1dG8gY29uc3Ry
YWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6Q29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50
IHsgeyBkaXNwbGF5Qm94LnBhZGRpbmdCb3hMZWZ0KCksIGRpc3BsYXlCb3gucGFkZGluZ0JveFdp
ZHRoKCkgfSwKLSAgICAgICAgICAgIHsgZGlzcGxheUJveC5wYWRkaW5nQm94VG9wKCksIGRpc3Bs
YXlCb3gucGFkZGluZ0JveEhlaWdodCgpIH0sIGRpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCkg
fTsKKyAgICAgICAgYXV0byBjb25zdHJhaW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJh
aW50c0Zvck91dE9mRmxvd0NvbnRlbnQgeyB7IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hMZWZ0KCks
IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hXaWR0aCgpIH0sCisgICAgICAgICAgICB7IGJveEdlb21l
dHJ5LnBhZGRpbmdCb3hUb3AoKSwgYm94R2VvbWV0cnkucGFkZGluZ0JveEhlaWdodCgpIH0sIGJv
eEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH07CiAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0
LT5sYXlvdXRPdXRPZkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBjb25zdHJhaW50cyk7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFN0YXRl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRTdGF0ZS5jcHAKaW5kZXggYzczNmJl
NWQzMzI0YmI3N2UzNjQ3OTBmNGVmOGNiZGU0ZGE2YTAzMC4uYzIzY2YyZDFkNTlhY2Y3ZmYzZDZm
NjFhMzRiZWEyNmYwZDk4ODVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xh
eW91dFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0U3RhdGUuY3Bw
CkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5oIgogI2luY2x1ZGUg
IklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1
ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94Lmgi
Ci0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVGFibGVGb3JtYXR0
aW5nU3RhdGUuaCIKQEAgLTYzLDIzICs2MywyMyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUo
Y29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBDb250YWluZXJCb3gmIHJvb3RDb250YQog
CiBMYXlvdXRTdGF0ZTo6fkxheW91dFN0YXRlKCkgPSBkZWZhdWx0OwogCi1MYXlvdXQ6Okdlb21l
dHJ5JiBMYXlvdXRTdGF0ZTo6Z2VvbWV0cnlGb3JSb290TGF5b3V0Qm94KCkKK0JveEdlb21ldHJ5
JiBMYXlvdXRTdGF0ZTo6Z2VvbWV0cnlGb3JSb290Qm94KCkKIHsKLSAgICByZXR1cm4gZW5zdXJl
R2VvbWV0cnlGb3JMYXlvdXRCb3gocm9vdCgpKTsKKyAgICByZXR1cm4gZW5zdXJlR2VvbWV0cnlG
b3JCb3gocm9vdCgpKTsKIH0KIAotTGF5b3V0OjpHZW9tZXRyeSYgTGF5b3V0U3RhdGU6OmVuc3Vy
ZURpc3BsYXlCb3hGb3JMYXlvdXRCb3hTbG93KGNvbnN0IEJveCYgbGF5b3V0Qm94KQorQm94R2Vv
bWV0cnkmIExheW91dFN0YXRlOjplbnN1cmVHZW9tZXRyeUZvckJveFNsb3coY29uc3QgQm94JiBs
YXlvdXRCb3gpCiB7CiAgICAgaWYgKGxheW91dEJveC5jYW5DYWNoZUZvckxheW91dFN0YXRlKCp0
aGlzKSkgewotICAgICAgICBBU1NFUlQoIWxheW91dEJveC5jYWNoZWREaXNwbGF5Qm94Rm9yTGF5
b3V0U3RhdGUoKnRoaXMpKTsKLSAgICAgICAgYXV0byBuZXdCb3ggPSBtYWtlVW5pcXVlPExheW91
dDo6R2VvbWV0cnk+KCk7CisgICAgICAgIEFTU0VSVCghbGF5b3V0Qm94LmNhY2hlZEdlb21ldHJ5
Rm9yTGF5b3V0U3RhdGUoKnRoaXMpKTsKKyAgICAgICAgYXV0byBuZXdCb3ggPSBtYWtlVW5pcXVl
PEJveEdlb21ldHJ5PigpOwogICAgICAgICBhdXRvJiBuZXdCb3hQdHIgPSAqbmV3Qm94OwotICAg
ICAgICBsYXlvdXRCb3guc2V0Q2FjaGVkRGlzcGxheUJveEZvckxheW91dFN0YXRlKCp0aGlzLCBX
VEZNb3ZlKG5ld0JveCkpOworICAgICAgICBsYXlvdXRCb3guc2V0Y2FjaGVkR2VvbWV0cnlGb3JM
YXlvdXRTdGF0ZSgqdGhpcywgV1RGTW92ZShuZXdCb3gpKTsKICAgICAgICAgcmV0dXJuIG5ld0Jv
eFB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gKm1fbGF5b3V0VG9EaXNwbGF5Qm94LmVuc3VyZSgm
bGF5b3V0Qm94LCBbXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPExheW91dDo6R2VvbWV0
cnk+KCk7CisgICAgcmV0dXJuICptX2xheW91dEJveFRvQm94R2VvbWV0cnkuZW5zdXJlKCZsYXlv
dXRCb3gsIFtdIHsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Qm94R2VvbWV0cnk+KCk7CiAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvTGF5b3V0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRTdGF0ZS5o
CmluZGV4IGQ3NDlhZWRlMzc5NDVjYjdhOTkyMmY2NDk4NTZkZDgyMzMzMzc1ZDIuLmM0MThlZGEx
NDRlOGMzYzEyMzhhNGFmYzcyZTU1ZDFiNmVjNWU3OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9MYXlvdXRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlv
dXRTdGF0ZS5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEJsb2NrRm9ybWF0dGluZ1N0YXRlOwog
Y2xhc3MgRmxleEZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNzIEZvcm1hdHRpbmdDb250ZXh0OwogY2xh
c3MgRm9ybWF0dGluZ1N0YXRlOwotY2xhc3MgR2VvbWV0cnk7CitjbGFzcyBCb3hHZW9tZXRyeTsK
IGNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNzIFRhYmxlRm9ybWF0dGluZ1N0YXRl
OwogCkBAIC03MSwxMSArNzEsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWdpc3RlckZvcm1h
dHRpbmdDb250ZXh0KGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCkg
eyBtX2Zvcm1hdHRpbmdDb250ZXh0TGlzdC5yZW1vdmUoJmZvcm1hdHRpbmdDb250ZXh0KTsgfQog
I2VuZGlmCiAKLSAgICBMYXlvdXQ6Okdlb21ldHJ5JiBnZW9tZXRyeUZvclJvb3RMYXlvdXRCb3go
KTsKLSAgICBMYXlvdXQ6Okdlb21ldHJ5JiBlbnN1cmVHZW9tZXRyeUZvckxheW91dEJveChjb25z
dCBCb3gmKTsKLSAgICBjb25zdCBMYXlvdXQ6Okdlb21ldHJ5JiBnZW9tZXRyeUZvckxheW91dEJv
eChjb25zdCBCb3gmKSBjb25zdDsKKyAgICBCb3hHZW9tZXRyeSYgZ2VvbWV0cnlGb3JSb290Qm94
KCk7CisgICAgQm94R2VvbWV0cnkmIGVuc3VyZUdlb21ldHJ5Rm9yQm94KGNvbnN0IEJveCYpOwor
ICAgIGNvbnN0IEJveEdlb21ldHJ5JiBnZW9tZXRyeUZvckJveChjb25zdCBCb3gmKSBjb25zdDsK
IAotICAgIGJvb2wgaGFzRGlzcGxheUJveChjb25zdCBCb3gmKSBjb25zdDsKKyAgICBib29sIGhh
c0JveEdlb21ldHJ5KGNvbnN0IEJveCYpIGNvbnN0OwogCiAgICAgZW51bSBjbGFzcyBRdWlya3NN
b2RlIHsgTm8sIExpbWl0ZWQsIFllcyB9OwogICAgIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9xdWlya3NNb2RlID09IFF1aXJrc01vZGU6OlllczsgfQpAQCAtOTMsNyArOTMs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRRdWlya3NNb2RlKFF1aXJrc01v
ZGUgcXVpcmtzTW9kZSkgeyBtX3F1aXJrc01vZGUgPSBxdWlya3NNb2RlOyB9Ci0gICAgTGF5b3V0
OjpHZW9tZXRyeSYgZW5zdXJlRGlzcGxheUJveEZvckxheW91dEJveFNsb3coY29uc3QgQm94Jik7
CisgICAgQm94R2VvbWV0cnkmIGVuc3VyZUdlb21ldHJ5Rm9yQm94U2xvdyhjb25zdCBCb3gmKTsK
IAogICAgIEhhc2hNYXA8Y29uc3QgQ29udGFpbmVyQm94Kiwgc3RkOjp1bmlxdWVfcHRyPElubGlu
ZUZvcm1hdHRpbmdTdGF0ZT4+IG1faW5saW5lRm9ybWF0dGluZ1N0YXRlczsKICAgICBIYXNoTWFw
PGNvbnN0IENvbnRhaW5lckJveCosIHN0ZDo6dW5pcXVlX3B0cjxCbG9ja0Zvcm1hdHRpbmdTdGF0
ZT4+IG1fYmxvY2tGb3JtYXR0aW5nU3RhdGVzOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHByaXZhdGU6
CiAjaWZuZGVmIE5ERUJVRwogICAgIEhhc2hTZXQ8Y29uc3QgRm9ybWF0dGluZ0NvbnRleHQqPiBt
X2Zvcm1hdHRpbmdDb250ZXh0TGlzdDsKICNlbmRpZgotICAgIEhhc2hNYXA8Y29uc3QgQm94Kiwg
c3RkOjp1bmlxdWVfcHRyPExheW91dDo6R2VvbWV0cnk+PiBtX2xheW91dFRvRGlzcGxheUJveDsK
KyAgICBIYXNoTWFwPGNvbnN0IEJveCosIHN0ZDo6dW5pcXVlX3B0cjxCb3hHZW9tZXRyeT4+IG1f
bGF5b3V0Qm94VG9Cb3hHZW9tZXRyeTsKICAgICBRdWlya3NNb2RlIG1fcXVpcmtzTW9kZSB7IFF1
aXJrc01vZGU6Ok5vIH07CiAKICAgICBXZWFrUHRyPGNvbnN0IENvbnRhaW5lckJveD4gbV9yb290
Q29udGFpbmVyOwpAQCAtMTE1LDI2ICsxMTUsMjYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNJ
bnRlZ3JhdGVkUm9vdEJveEZpcnN0Q2hpbGQgeyBmYWxzZSB9OwogfTsKIAotaW5saW5lIGJvb2wg
TGF5b3V0U3RhdGU6Omhhc0Rpc3BsYXlCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Citp
bmxpbmUgYm9vbCBMYXlvdXRTdGF0ZTo6aGFzQm94R2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRC
b3gpIGNvbnN0CiB7Ci0gICAgaWYgKGxheW91dEJveC5jYWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0
U3RhdGUoKnRoaXMpKQorICAgIGlmIChsYXlvdXRCb3guY2FjaGVkR2VvbWV0cnlGb3JMYXlvdXRT
dGF0ZSgqdGhpcykpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX2xheW91dFRv
RGlzcGxheUJveC5jb250YWlucygmbGF5b3V0Qm94KTsKKyAgICByZXR1cm4gbV9sYXlvdXRCb3hU
b0JveEdlb21ldHJ5LmNvbnRhaW5zKCZsYXlvdXRCb3gpOwogfQogCi1pbmxpbmUgTGF5b3V0OjpH
ZW9tZXRyeSYgTGF5b3V0U3RhdGU6OmVuc3VyZUdlb21ldHJ5Rm9yTGF5b3V0Qm94KGNvbnN0IEJv
eCYgbGF5b3V0Qm94KQoraW5saW5lIEJveEdlb21ldHJ5JiBMYXlvdXRTdGF0ZTo6ZW5zdXJlR2Vv
bWV0cnlGb3JCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7Ci0gICAgaWYgKGF1dG8qIGRpc3Bs
YXlCb3ggPSBsYXlvdXRCb3guY2FjaGVkRGlzcGxheUJveEZvckxheW91dFN0YXRlKCp0aGlzKSkK
LSAgICAgICAgcmV0dXJuICpkaXNwbGF5Qm94OwotICAgIHJldHVybiBlbnN1cmVEaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94U2xvdyhsYXlvdXRCb3gpOworICAgIGlmIChhdXRvKiBib3hHZW9tZXRyeSA9
IGxheW91dEJveC5jYWNoZWRHZW9tZXRyeUZvckxheW91dFN0YXRlKCp0aGlzKSkKKyAgICAgICAg
cmV0dXJuICpib3hHZW9tZXRyeTsKKyAgICByZXR1cm4gZW5zdXJlR2VvbWV0cnlGb3JCb3hTbG93
KGxheW91dEJveCk7CiB9CiAKLWlubGluZSBjb25zdCBMYXlvdXQ6Okdlb21ldHJ5JiBMYXlvdXRT
dGF0ZTo6Z2VvbWV0cnlGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Citp
bmxpbmUgY29uc3QgQm94R2VvbWV0cnkmIExheW91dFN0YXRlOjpnZW9tZXRyeUZvckJveChjb25z
dCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogZGlzcGxheUJveCA9IGxh
eW91dEJveC5jYWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0U3RhdGUoKnRoaXMpKQotICAgICAgICBy
ZXR1cm4gKmRpc3BsYXlCb3g7Ci0gICAgQVNTRVJUKG1fbGF5b3V0VG9EaXNwbGF5Qm94LmNvbnRh
aW5zKCZsYXlvdXRCb3gpKTsKLSAgICByZXR1cm4gKm1fbGF5b3V0VG9EaXNwbGF5Qm94LmdldCgm
bGF5b3V0Qm94KTsKKyAgICBpZiAoYXV0byogYm94R2VvbWV0cnkgPSBsYXlvdXRCb3guY2FjaGVk
R2VvbWV0cnlGb3JMYXlvdXRTdGF0ZSgqdGhpcykpCisgICAgICAgIHJldHVybiAqYm94R2VvbWV0
cnk7CisgICAgQVNTRVJUKG1fbGF5b3V0Qm94VG9Cb3hHZW9tZXRyeS5jb250YWlucygmbGF5b3V0
Qm94KSk7CisgICAgcmV0dXJuICptX2xheW91dEJveFRvQm94R2VvbWV0cnkuZ2V0KCZsYXlvdXRC
b3gpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMTUyLDExICsxNTIsMTEgQEAgaW5saW5lIGJv
b2wgQm94OjpjYW5DYWNoZUZvckxheW91dFN0YXRlKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSkgY29uc3QKICAgICByZXR1cm4gIW1fY2FjaGVkTGF5b3V0U3RhdGUgfHwgbV9jYWNoZWRM
YXlvdXRTdGF0ZS5nZXQoKSA9PSAmbGF5b3V0U3RhdGU7CiB9CiAKLWlubGluZSBMYXlvdXQ6Okdl
b21ldHJ5KiBCb3g6OmNhY2hlZERpc3BsYXlCb3hGb3JMYXlvdXRTdGF0ZShjb25zdCBMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUpIGNvbnN0CitpbmxpbmUgQm94R2VvbWV0cnkqIEJveDo6Y2FjaGVk
R2VvbWV0cnlGb3JMYXlvdXRTdGF0ZShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpIGNv
bnN0CiB7CiAgICAgaWYgKG1fY2FjaGVkTGF5b3V0U3RhdGUuZ2V0KCkgIT0gJmxheW91dFN0YXRl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbV9jYWNoZWREaXNwbGF5Qm94
Rm9yTGF5b3V0U3RhdGUuZ2V0KCk7CisgICAgcmV0dXJuIG1fY2FjaGVkR2VvbWV0cnlGb3JMYXlv
dXRTdGF0ZS5nZXQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNw
cAppbmRleCAzZmJkNjhmNjNjNmJjM2E2ZThmODY4MjBhNzhkY2M1ZWI5ZWM2Y2JmLi4zNjI1NzBk
ZmY1NzdhZDhlMjhhYjU5YWIwOTVmYTAxMmNkMTg2YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
VmVyaWZpY2F0aW9uLmNwcApAQCAtMzMsOSArMzMsOSBAQAogI2luY2x1ZGUgIklubGluZUZvcm1h
dHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJMYXlv
dXRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91
dENvbnRhaW5lckJveC5oIgogI2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJM
YXlvdXRHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCkBAIC0yMzMsMTIgKzIz
MywxMiBAQCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGluZ0Jsb2NrQm94SW5mb3JtYXRpb25J
Zk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbgogICAgICAgICBzdHJlYW0ubmV4dExpbmUo
KTsKICAgICB9OwogCi0gICAgYXV0byByZW5kZXJCb3hMaWtlTWFyZ2luQm94ID0gWyZdIChjb25z
dCBhdXRvJiBkaXNwbGF5Qm94KSB7CisgICAgYXV0byByZW5kZXJCb3hMaWtlTWFyZ2luQm94ID0g
WyZdIChjb25zdCBhdXRvJiBib3hHZW9tZXRyeSkgewogICAgICAgICBpZiAobGF5b3V0Qm94Lmlz
SW5pdGlhbENvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gu
cmVjdCgpOworICAgICAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5LnJlY3QoKTsKIAogICAgICAg
ICAvLyBQcm9kdWNlIGEgUmVuZGVyQm94IG1hdGNoaW5nIG1hcmdpbiBib3guCi0gICAgICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckxheW91dEJv
eChsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOworICAgICAg
ICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKTsKICAgICAgICAg
YXV0byBtYXJnaW5TdGFydCA9IExheW91dFVuaXQgeyB9OwogICAgICAgICBhdXRvJiBtYXJnaW5T
dGFydFN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCkubWFyZ2luU3RhcnQoKTsKICAgICAgICAgaWYg
KG1hcmdpblN0YXJ0U3R5bGUuaXNGaXhlZCgpIHx8IG1hcmdpblN0YXJ0U3R5bGUuaXNQZXJjZW50
KCkgfHwgbWFyZ2luU3RhcnRTdHlsZS5pc0NhbGN1bGF0ZWQoKSkKQEAgLTI0OSwxNSArMjQ5LDE1
IEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQmxvY2tCb3hJbmZvcm1hdGlvbklmTmVl
ZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uCiAgICAgICAgIGlmIChtYXJnaW5FbmRTdHlsZS5p
c0ZpeGVkKCkgfHwgbWFyZ2luRW5kU3R5bGUuaXNQZXJjZW50KCkgfHwgbWFyZ2luRW5kU3R5bGUu
aXNDYWxjdWxhdGVkKCkpCiAgICAgICAgICAgICBtYXJnaW5FbmQgPSB2YWx1ZUZvckxlbmd0aCht
YXJnaW5FbmRTdHlsZSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwogCi0gICAgICAgIGF1dG8gbWFy
Z2luQmVmb3JlID0gZGlzcGxheUJveC5tYXJnaW5CZWZvcmUoKTsKLSAgICAgICAgYXV0byBtYXJn
aW5BZnRlciA9IGRpc3BsYXlCb3gubWFyZ2luQWZ0ZXIoKTsKKyAgICAgICAgYXV0byBtYXJnaW5C
ZWZvcmUgPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKTsKKyAgICAgICAgYXV0byBtYXJnaW5B
ZnRlciA9IGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCk7CiAgICAgICAgIGlmIChsYXlvdXRCb3gu
aXNCbG9ja0xldmVsQm94KCkpIHsKICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9
IGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZS5mb3JtYXR0aW5nU3Rh
dGVGb3JCb3gobGF5b3V0Qm94KSk7CiAgICAgICAgICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0g
Zm9ybWF0dGluZ1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gpOwogICAgICAgICAg
ICAgbWFyZ2luQmVmb3JlID0gdmVydGljYWxNYXJnaW4ubm9uQ29sbGFwc2VkVmFsdWVzLmJlZm9y
ZTsKICAgICAgICAgICAgIG1hcmdpbkFmdGVyID0gdmVydGljYWxNYXJnaW4ubm9uQ29sbGFwc2Vk
VmFsdWVzLmFmdGVyOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8gYm9yZGVyQm94ID0gZGlzcGxh
eUJveC5ib3JkZXJCb3goKTsKKyAgICAgICAgYXV0byBib3JkZXJCb3ggPSBib3hHZW9tZXRyeS5i
b3JkZXJCb3goKTsKICAgICAgICAgcmV0dXJuIFJlY3QgewogICAgICAgICAgICAgYm9yZGVyQm94
LnRvcCgpIC0gbWFyZ2luQmVmb3JlLAogICAgICAgICAgICAgYm9yZGVyQm94LmxlZnQoKSAtIG1h
cmdpblN0YXJ0LApAQCAtMjcxLDE1ICsyNzEsMTUgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0
Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb24K
ICAgICBpZiAocmVuZGVyZXIuaXNJbkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgIGZyYW1lUmVj
dC5tb3ZlKHJlbmRlcmVyLm9mZnNldEZvckluRmxvd1Bvc2l0aW9uKCkpOwogCi0gICAgYXV0byBk
aXNwbGF5Qm94ID0gR2VvbWV0cnkgeyBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckxheW91dEJveChs
YXlvdXRCb3gpIH07CisgICAgYXV0byBib3hHZW9tZXRyeSA9IEJveEdlb21ldHJ5IHsgbGF5b3V0
U3RhdGUuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KSB9OwogICAgIGlmIChsYXlvdXRCb3guaXNU
YWJsZUJveCgpKSB7CiAgICAgICAgIC8vIFdoZW4gdGhlIDx0YWJsZT4gaXMgb3V0LW9mLWZsb3cg
cG9zaXRpb25lZCwgdGhlIHdyYXBwZXIgdGFibGUgYm94IGhhcyB0aGUgb2Zmc2V0CiAgICAgICAg
IC8vIHdoaWxlIHRoZSBhY3R1YWwgdGFibGUgYm94IGlzIHN0YXRpYywgaW5mbG93LgotICAgICAg
ICBhdXRvJiB0YWJsZVdyYXBwZXJEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JM
YXlvdXRCb3gobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKLSAgICAgICAgZGlzcGxheUJv
eC5tb3ZlQnkodGFibGVXcmFwcGVyRGlzcGxheUJveC50b3BMZWZ0KCkpOworICAgICAgICBhdXRv
JiB0YWJsZVdyYXBwZXJCb3hHZW9tZXRyeSA9IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CisgICAgICAgIGJveEdlb21ldHJ5Lm1vdmVCeSh0
YWJsZVdyYXBwZXJCb3hHZW9tZXRyeS50b3BMZWZ0KCkpOwogICAgICAgICAvLyBUYWJsZSB3cmFw
cGVyIGJveCBoYXMgdGhlIG1hcmdpbiB2YWx1ZXMgZm9yIHRoZSB0YWJsZS4KLSAgICAgICAgZGlz
cGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHRhYmxlV3JhcHBlckRpc3BsYXlCb3guaG9yaXpv
bnRhbE1hcmdpbigpKTsKLSAgICAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih0YWJs
ZVdyYXBwZXJEaXNwbGF5Qm94LnZlcnRpY2FsTWFyZ2luKCkpOworICAgICAgICBib3hHZW9tZXRy
eS5zZXRIb3Jpem9udGFsTWFyZ2luKHRhYmxlV3JhcHBlckJveEdlb21ldHJ5Lmhvcml6b250YWxN
YXJnaW4oKSk7CisgICAgICAgIGJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHRhYmxlV3Jh
cHBlckJveEdlb21ldHJ5LnZlcnRpY2FsTWFyZ2luKCkpOwogICAgIH0KIAogICAgIGlmIChpczxS
ZW5kZXJUYWJsZVJvdz4ocmVuZGVyZXIpIHx8IGlzPFJlbmRlclRhYmxlU2VjdGlvbj4ocmVuZGVy
ZXIpKSB7CkBAIC0yOTAsMjAgKzI5MCwyMCBAQCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGlu
Z0Jsb2NrQm94SW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbgogICAg
ICAgICBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9uPihyZW5kZXJlcikgJiYgKGRvd25jYXN0PFJl
bmRlclRhYmxlU2VjdGlvbj4ocmVuZGVyZXIpLnRhYmxlKCktPmNvbGxhcHNlQm9yZGVycygpIHx8
IHJlbmRlcmVyLnN0eWxlKCkuaGFzQm9yZGVyKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBpZiAoIWFyZUVzc2VudGlhbGx5RXF1YWwoZnJhbWVSZWN0LCBkaXNwbGF5
Qm94LnJlY3QoKSkpIHsKLSAgICAgICAgb3V0cHV0UmVjdCgiZnJhbWVCb3giLCByZW5kZXJlci5m
cmFtZVJlY3QoKSwgZGlzcGxheUJveC5yZWN0KCkpOworICAgIGlmICghYXJlRXNzZW50aWFsbHlF
cXVhbChmcmFtZVJlY3QsIGJveEdlb21ldHJ5LnJlY3QoKSkpIHsKKyAgICAgICAgb3V0cHV0UmVj
dCgiZnJhbWVCb3giLCByZW5kZXJlci5mcmFtZVJlY3QoKSwgYm94R2VvbWV0cnkucmVjdCgpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFhcmVFc3NlbnRpYWxseUVx
dWFsKHJlbmRlcmVyLmJvcmRlckJveFJlY3QoKSwgZGlzcGxheUJveC5ib3JkZXJCb3goKSkpIHsK
LSAgICAgICAgb3V0cHV0UmVjdCgiYm9yZGVyQm94IiwgcmVuZGVyZXIuYm9yZGVyQm94UmVjdCgp
LCBkaXNwbGF5Qm94LmJvcmRlckJveCgpKTsKKyAgICBpZiAoIWFyZUVzc2VudGlhbGx5RXF1YWwo
cmVuZGVyZXIuYm9yZGVyQm94UmVjdCgpLCBib3hHZW9tZXRyeS5ib3JkZXJCb3goKSkpIHsKKyAg
ICAgICAgb3V0cHV0UmVjdCgiYm9yZGVyQm94IiwgcmVuZGVyZXIuYm9yZGVyQm94UmVjdCgpLCBi
b3hHZW9tZXRyeS5ib3JkZXJCb3goKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAog
ICAgIC8vIFdoZW4gdGhlIHRhYmxlIHJvdyBib3JkZXIgb3ZlcmZsb3dzIHRoZSByb3csIHBhZGRp
bmcgYm94IGJlY29tZXMgbmVnYXRpdmUgYW5kIGNvbnRlbnQgYm94IGlzIGluY29ycmVjdC4KICAg
ICBhdXRvIHNob3VsZENoZWNrUGFkZGluZ0FuZENvbnRlbnRCb3ggPSAhaXM8UmVuZGVyVGFibGVS
b3c+KHJlbmRlcmVyKSB8fCByZW5kZXJlci5wYWRkaW5nQm94UmVjdCgpLndpZHRoKCkgPj0gMDsK
LSAgICBpZiAoc2hvdWxkQ2hlY2tQYWRkaW5nQW5kQ29udGVudEJveCAmJiAhYXJlRXNzZW50aWFs
bHlFcXVhbChyZW5kZXJlci5wYWRkaW5nQm94UmVjdCgpLCBkaXNwbGF5Qm94LnBhZGRpbmdCb3go
KSkpIHsKLSAgICAgICAgb3V0cHV0UmVjdCgicGFkZGluZ0JveCIsIHJlbmRlcmVyLnBhZGRpbmdC
b3hSZWN0KCksIGRpc3BsYXlCb3gucGFkZGluZ0JveCgpKTsKKyAgICBpZiAoc2hvdWxkQ2hlY2tQ
YWRkaW5nQW5kQ29udGVudEJveCAmJiAhYXJlRXNzZW50aWFsbHlFcXVhbChyZW5kZXJlci5wYWRk
aW5nQm94UmVjdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94KCkpKSB7CisgICAgICAgIG91dHB1
dFJlY3QoInBhZGRpbmdCb3giLCByZW5kZXJlci5wYWRkaW5nQm94UmVjdCgpLCBib3hHZW9tZXRy
eS5wYWRkaW5nQm94KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMxNiwy
MSArMzE2LDIxIEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQmxvY2tCb3hJbmZvcm1h
dGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uCiAgICAgICAgIC8vIFRhYmxlcyBo
YXZlIDAgY29udGVudCBib3ggc2l6ZSBmb3Igc29tZSByZWFzb24gd2hlbiBib3JkZXIgY29sbGFw
c2luZyBpcyBvbi4KICAgICAgICAgcmV0dXJuICFpczxSZW5kZXJUYWJsZT4ocmVuZGVyZXIpIHx8
ICFkb3duY2FzdDxSZW5kZXJUYWJsZT4ocmVuZGVyZXIpLmNvbGxhcHNlQm9yZGVycygpOwogICAg
IH0oKTsKLSAgICBpZiAoc2hvdWxkQ2hlY2tDb250ZW50Qm94ICYmICFhcmVFc3NlbnRpYWxseUVx
dWFsKHJlbmRlcmVyLmNvbnRlbnRCb3hSZWN0KCksIGRpc3BsYXlCb3guY29udGVudEJveCgpKSkg
ewotICAgICAgICBvdXRwdXRSZWN0KCJjb250ZW50Qm94IiwgcmVuZGVyZXIuY29udGVudEJveFJl
Y3QoKSwgZGlzcGxheUJveC5jb250ZW50Qm94KCkpOworICAgIGlmIChzaG91bGRDaGVja0NvbnRl
bnRCb3ggJiYgIWFyZUVzc2VudGlhbGx5RXF1YWwocmVuZGVyZXIuY29udGVudEJveFJlY3QoKSwg
Ym94R2VvbWV0cnkuY29udGVudEJveCgpKSkgeworICAgICAgICBvdXRwdXRSZWN0KCJjb250ZW50
Qm94IiwgcmVuZGVyZXIuY29udGVudEJveFJlY3QoKSwgYm94R2VvbWV0cnkuY29udGVudEJveCgp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFhcmVFc3NlbnRpYWxs
eUVxdWFsKHJlbmRlcmVyLm1hcmdpbkJveFJlY3QoKSwgcmVuZGVyQm94TGlrZU1hcmdpbkJveChk
aXNwbGF5Qm94KSkpIHsKKyAgICBpZiAoIWFyZUVzc2VudGlhbGx5RXF1YWwocmVuZGVyZXIubWFy
Z2luQm94UmVjdCgpLCByZW5kZXJCb3hMaWtlTWFyZ2luQm94KGJveEdlb21ldHJ5KSkpIHsKICAg
ICAgICAgLy8gSW4gY2VydGFpbiBjYXNlcywgbGlrZSBvdXQtb2YtZmxvdyBib3hlcyB3aXRoIG1h
cmdpbiBhdXRvLCBtYXJnaW5Cb3hSZWN0KCkgcmV0dXJucyAwLiBJdCdzIGNsZWFybHkgaW5jb3Jy
ZWN0LAogICAgICAgICAvLyBzbyBsZXQncyBjaGVjayB0aGUgaW5kaXZpZHVhbCBtYXJnaW4gdmFs
dWVzIGluc3RlYWQgKGFuZCBhdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCBhbGwgb3RoZXIgYm94
ZXMgbWF0Y2gpLgotICAgICAgICBhdXRvIG1hcmdpbnNNYXRjaCA9IGRpc3BsYXlCb3gubWFyZ2lu
QmVmb3JlKCkgPT0gcmVuZGVyZXIubWFyZ2luQmVmb3JlKCkKLSAgICAgICAgICAgICYmIGRpc3Bs
YXlCb3gubWFyZ2luQWZ0ZXIoKSA9PSByZW5kZXJlci5tYXJnaW5BZnRlcigpCi0gICAgICAgICAg
ICAmJiBkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgPT0gcmVuZGVyZXIubWFyZ2luU3RhcnQoKQot
ICAgICAgICAgICAgJiYgZGlzcGxheUJveC5tYXJnaW5FbmQoKSA9PSByZW5kZXJlci5tYXJnaW5F
bmQoKTsKKyAgICAgICAgYXV0byBtYXJnaW5zTWF0Y2ggPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZv
cmUoKSA9PSByZW5kZXJlci5tYXJnaW5CZWZvcmUoKQorICAgICAgICAgICAgJiYgYm94R2VvbWV0
cnkubWFyZ2luQWZ0ZXIoKSA9PSByZW5kZXJlci5tYXJnaW5BZnRlcigpCisgICAgICAgICAgICAm
JiBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpID09IHJlbmRlcmVyLm1hcmdpblN0YXJ0KCkKKyAg
ICAgICAgICAgICYmIGJveEdlb21ldHJ5Lm1hcmdpbkVuZCgpID09IHJlbmRlcmVyLm1hcmdpbkVu
ZCgpOwogCiAgICAgICAgIGlmICghbWFyZ2luc01hdGNoKSB7Ci0gICAgICAgICAgICBvdXRwdXRS
ZWN0KCJtYXJnaW5Cb3giLCByZW5kZXJlci5tYXJnaW5Cb3hSZWN0KCksIHJlbmRlckJveExpa2VN
YXJnaW5Cb3goZGlzcGxheUJveCkpOworICAgICAgICAgICAgb3V0cHV0UmVjdCgibWFyZ2luQm94
IiwgcmVuZGVyZXIubWFyZ2luQm94UmVjdCgpLCByZW5kZXJCb3hMaWtlTWFyZ2luQm94KGJveEdl
b21ldHJ5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5n
L0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGM1ZDkzMzY5MWVkZjY0OTRhMzk3ODc1
ZWFmNTViOTA0MWEwY2Y5N2EuLjMzNGRmOTlmNmY0YjY1ZGNiNGY5ZmYzNmRiMDFiMzE5Y2Y1N2E1
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMjIyLDE5ICsyMjIsMTkg
QEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGls
ZHJlbihjb25zdCBDb250YWluZXJCb3gmIGMKICAgICAgICAgaWYgKCFjaGlsZEJveC5pc0luRmxv
d1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvIHBvc2l0
aW9uT2Zmc2V0ID0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY2hp
bGRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAgIGZvcm1hdHRpbmdTdGF0ZSgp
LmRpc3BsYXlCb3goY2hpbGRCb3gpLm1vdmUocG9zaXRpb25PZmZzZXQpOworICAgICAgICBmb3Jt
YXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShjaGlsZEJveCkubW92ZShwb3NpdGlvbk9mZnNldCk7
CiAgICAgfQogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3Ry
ZWFtIDw8ICJFbmQ6IG1vdmUgaW4tZmxvdyBwb3NpdGlvbmVkIGNoaWxkcmVuIC0+IHBhcmVudDog
IiA8PCAmY29udGFpbmVyQm94KTsKIH0KIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cykKIHsKLSAgICBmb3JtYXR0
aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0VG9wKGdlb21ldHJ5KCkuc3RhdGlj
VmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpKTsKKyAgICBm
b3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldFRvcChnZW9tZXRyeSgp
LnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0Qm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzKSk7
CiB9CiAKIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY0hvcml6b250
YWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCiB7Ci0gICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlz
cGxheUJveChsYXlvdXRCb3gpLnNldExlZnQoZ2VvbWV0cnkoKS5zdGF0aWNIb3Jpem9udGFsUG9z
aXRpb24obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpKTsKKyAgICBmb3JtYXR0aW5n
U3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldExlZnQoZ2VvbWV0cnkoKS5zdGF0aWNI
b3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpKTsKIH0K
IAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwcmVjb21wdXRlVmVydGljYWxQb3NpdGlv
bkZvckJveEFuZEFuY2VzdG9ycyhjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgQ29uc3RyYWlu
dHNQYWlyJiBjb25zdHJhaW50c1BhaXIpCkBAIC0yNTksMTcgKzI1OSwxNyBAQCB2b2lkIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94QW5kQW5j
ZXN0b3JzKGNvbnN0CiAgICAgICAgIGF1dG8gdXNlZE5vbkNvbGxhcHNlZE1hcmdpbiA9IFVzZWRW
ZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9y
KDApIH07CiAgICAgICAgIGF1dG8gcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgPSBtYXJnaW5Db2xs
YXBzZSgpLnByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCphbmNlc3RvciwgdXNlZE5vbkNvbGxhcHNl
ZE1hcmdpbik7CiAKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgp
LmRpc3BsYXlCb3goKmFuY2VzdG9yKTsKKyAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3Jt
YXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeSgqYW5jZXN0b3IpOwogICAgICAgICBhdXRvIG5vbkNv
bGxhcHNlZFZhbHVlcyA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsg
cHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUubm9uQ29sbGFwc2VkVmFsdWUsIHsgfSB9OwogICAgICAg
ICBhdXRvIGNvbGxhcHNlZFZhbHVlcyA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Q29sbGFwc2VkVmFs
dWVzIHsgcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUuY29sbGFwc2VkVmFsdWUsIHsgfSwgZmFsc2Ug
fTsKICAgICAgICAgYXV0byB2ZXJ0aWNhbE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbiB7IG5v
bkNvbGxhcHNlZFZhbHVlcywgY29sbGFwc2VkVmFsdWVzLCB7IHByZWNvbXB1dGVkTWFyZ2luQmVm
b3JlLnBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW5CZWZvcmUsIHsgfSB9IH07CiAKICAgICAgICAg
Zm9ybWF0dGluZ1N0YXRlKCkuc2V0VXNlZFZlcnRpY2FsTWFyZ2luKCphbmNlc3RvciwgdmVydGlj
YWxNYXJnaW4pOwotICAgICAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgbWFyZ2lu
QmVmb3JlKHZlcnRpY2FsTWFyZ2luKSwgbWFyZ2luQWZ0ZXIodmVydGljYWxNYXJnaW4pIH0pOwot
ICAgICAgICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbigqYW5j
ZXN0b3IsIHZlcnRpY2FsTWFyZ2luLCBjb25zdHJhaW50c0ZvckFuY2VzdG9yLnZlcnRpY2FsKSk7
CisgICAgICAgIGJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgbWFyZ2luQmVmb3JlKHZl
cnRpY2FsTWFyZ2luKSwgbWFyZ2luQWZ0ZXIodmVydGljYWxNYXJnaW4pIH0pOworICAgICAgICBi
b3hHZW9tZXRyeS5zZXRUb3AodmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4oKmFuY2VzdG9yLCB2
ZXJ0aWNhbE1hcmdpbiwgY29uc3RyYWludHNGb3JBbmNlc3Rvci52ZXJ0aWNhbCkpOwogI2lmIEFT
U0VSVF9FTkFCTEVECiAgICAgICAgIHNldFByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCphbmNlc3Rv
ciwgcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUpOwotICAgICAgICBkaXNwbGF5Qm94LnNldEhhc1By
ZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCk7CisgICAgICAgIGJveEdlb21ldHJ5LnNldEhhc1ByZWNv
bXB1dGVkTWFyZ2luQmVmb3JlKCk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0yODQsNyArMjg0LDcg
QEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlUG9zaXRpb25Ub0F2b2lkRmxv
YXRzKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYKICAgICAvLyBIb3dldmVyIGFjY29yZGluZyB0byB0
aGUgQkZDIHJ1bGVzLCBhdCB0aGlzIHBvaW50IG9mIHRoZSBsYXlvdXQgZmxvdyB3ZSBkb24ndCB5
ZXQgaGF2ZSBjb21wdXRlZCB2ZXJ0aWNhbCBwb3NpdGlvbnMgZm9yIHRoZSBhbmNlc3RvcnMuCiAg
ICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKSB7CiAgICAgICAgIHByZWNv
bXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94QW5kQW5jZXN0b3JzKGxheW91dEJveCwgY29uc3Ry
YWludHNQYWlyKTsKLSAgICAgICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRC
b3gpLnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQobGF5b3V0Qm94
LCBjb25zdHJhaW50c1BhaXIuY29udGFpbmluZ0Jsb2NrLmhvcml6b250YWwpKTsKKyAgICAgICAg
Zm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KGZsb2F0
aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGxheW91dEJveCwgY29uc3RyYWludHNQYWlyLmNv
bnRhaW5pbmdCbG9jay5ob3Jpem9udGFsKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ly8gTm9uLWZsb2F0IHBvc2l0aW9uZWQgZmxvYXQgYXZvaWRlcnMgKGZvcm1hdHRpbmcgY29udGV4
dCByb290cyBhbmQgY2xlYXIgYm94ZXMpIHNob3VsZCBiZSBmaW5lIHVubGVzcyB0aGVyZSBhcmUg
ZmxvYXRzIGluIHRoaXMgY29udGV4dC4KQEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lkIEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVQb3NpdGlvblRvQXZvaWRGbG9hdHMoY29uc3QgRmxvYXRp
bmdDb250ZXh0JgogICAgICAgICByZXR1cm4gY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JGbG9h
dENsZWFyKGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0Qm94KTsKIAogICAgIEFTU0VSVChsYXlvdXRC
b3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKLSAgICBmb3JtYXR0aW5nU3RhdGUo
KS5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRp
b25Gb3JOb25GbG9hdGluZ0Zsb2F0QXZvaWRlcihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpci5j
b250YWluaW5nQmxvY2suaG9yaXpvbnRhbCkpOworICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdl
b21ldHJ5KGxheW91dEJveCkuc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JO
b25GbG9hdGluZ0Zsb2F0QXZvaWRlcihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpci5jb250YWlu
aW5nQmxvY2suaG9yaXpvbnRhbCkpOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcihjb25zdCBGbG9hdGluZ0NvbnRl
eHQmIGZsb2F0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCkBAIC0zMDksMTEgKzMw
OSwxMSBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVWZXJ0aWNhbFBvc2l0
aW9uRm9yRmxvYXRDbGVhcihjb25zdCBGbG9hdGluZwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gobGF5
b3V0Qm94KTsKLSAgICBBU1NFUlQoKnZlcnRpY2FsUG9zaXRpb25BbmRDbGVhcmFuY2UucG9zaXRp
b24gPj0gZGlzcGxheUJveC50b3AoKSk7Ci0gICAgZGlzcGxheUJveC5zZXRUb3AoKnZlcnRpY2Fs
UG9zaXRpb25BbmRDbGVhcmFuY2UucG9zaXRpb24pOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0g
Zm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KTsKKyAgICBBU1NFUlQoKnZl
cnRpY2FsUG9zaXRpb25BbmRDbGVhcmFuY2UucG9zaXRpb24gPj0gYm94R2VvbWV0cnkudG9wKCkp
OworICAgIGJveEdlb21ldHJ5LnNldFRvcCgqdmVydGljYWxQb3NpdGlvbkFuZENsZWFyYW5jZS5w
b3NpdGlvbik7CiAgICAgaWYgKHZlcnRpY2FsUG9zaXRpb25BbmRDbGVhcmFuY2UuY2xlYXJhbmNl
KQotICAgICAgICBkaXNwbGF5Qm94LnNldEhhc0NsZWFyYW5jZSgpOworICAgICAgICBib3hHZW9t
ZXRyeS5zZXRIYXNDbGVhcmFuY2UoKTsKICAgICAvLyBGSVhNRTogUmVzZXQgdGhlIG1hcmdpbiB2
YWx1ZXMgb24gdGhlIGFuY2VzdG9ycy9wcmV2aW91cyBzaWJsaW5ncyBub3cgdGhhdCB0aGUgZmxv
YXQgYXZvaWRlciB3aXRoIGNsZWFyYW5jZSBkb2VzIG5vdCBtYXJnaW4gY29sbGFwc2UgYW55bW9y
ZS4KIH0KIApAQCAtMzI1LDkgKzMyNSw5IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpCiAgICAg
ICAgIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyID0gdXNlZEF2YWlsYWJsZVdpZHRoRm9yRmxv
YXRBdm9pZGVyKGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0Qm94LCBjb25zdHJhaW50c1BhaXIpOwog
ICAgIH0KICAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGdlb21ldHJ5KCkuY29tcHV0
ZWRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpci5jb250YWluaW5nQmxv
Y2suaG9yaXpvbnRhbCwgYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIpOwotICAgIGF1dG8mIGRp
c3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7Ci0gICAg
ZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRl
bnRXaWR0aCk7Ci0gICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29udGVudFdp
ZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uc3RhcnQsIGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2Vk
TWFyZ2luLmVuZCB9KTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgp
LmJveEdlb21ldHJ5KGxheW91dEJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdp
ZHRoKGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpOworICAgIGJveEdlb21ldHJ5
LnNldEhvcml6b250YWxNYXJnaW4oeyBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5z
dGFydCwgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uZW5kIH0pOwogfQogCiB2b2lk
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgY29uc3RyYWlu
dHMpCkBAIC0zODMsMTMgKzM4MywxMyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0CiAgICAgICAg
IEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYg
ZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKKyAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91
dEJveCk7CiAgICAgaWYgKCFsYXlvdXRCb3guaXNGbG9hdEF2b2lkZXIoKSkgewogICAgICAgICAv
LyBGbG9hdCBhdm9pZGVycyBoYXZlIHByZS1jb21wdXRlZCB2ZXJ0aWNhbCBtYXJnaW5zLgotICAg
ICAgICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbihsYXlvdXRC
b3gsIHZlcnRpY2FsTWFyZ2luLCBjb25zdHJhaW50cy52ZXJ0aWNhbCkpOworICAgICAgICBib3hH
ZW9tZXRyeS5zZXRUb3AodmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4obGF5b3V0Qm94LCB2ZXJ0
aWNhbE1hcmdpbiwgY29uc3RyYWludHMudmVydGljYWwpKTsKICAgICB9Ci0gICAgZGlzcGxheUJv
eC5zZXRDb250ZW50Qm94SGVpZ2h0KGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdo
dCk7Ci0gICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IG1hcmdpbkJlZm9yZSh2ZXJ0
aWNhbE1hcmdpbiksIG1hcmdpbkFmdGVyKHZlcnRpY2FsTWFyZ2luKSB9KTsKKyAgICBib3hHZW9t
ZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhl
aWdodCk7CisgICAgYm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyBtYXJnaW5CZWZvcmUo
dmVydGljYWxNYXJnaW4pLCBtYXJnaW5BZnRlcih2ZXJ0aWNhbE1hcmdpbikgfSk7CiAgICAgLy8g
QWRqdXN0IHRoZSBwcmV2aW91cyBzaWJsaW5nJ3MgbWFyZ2luIGJvdHRvbSBub3cgdGhhdCB0aGlz
IGJveCdzIHZlcnRpY2FsIG1hcmdpbiBpcyBjb21wdXRlZC4KICAgICBNYXJnaW5Db2xsYXBzZTo6
dXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoKnRoaXMsIG1hcmdpbkNvbGxhcHNl
LCBsYXlvdXRCb3gpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwCmluZGV4IDQxOGIyY2JhYTQ0NzY1YmFhMmY2NTM5ODE4ZDM4NzYyNDc1ZTMwZmYuLmMz
ODdlNjMzM2Y1MjlmN2FiZjhlMGQ3MTUxYWIwNmFhZTMwYmQ4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Js
b2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNs
dWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0
Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgogI2luY2x1ZGUgIkxheW91dFJlcGxh
Y2VkQm94LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtOTYsOCArOTYsOCBAQCBDb250ZW50
SGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dO
b25SZXBsYWNlZEhlaWdodAogICAgICAgICB3aGlsZSAoaW5GbG93Q2hpbGQgJiYgZm9ybWF0dGlu
Z0NvbnRleHQoKS5tYXJnaW5Db2xsYXBzZSgpLm1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJl
bnRNYXJnaW5BZnRlcigqaW5GbG93Q2hpbGQpKQogICAgICAgICAgICAgaW5GbG93Q2hpbGQgPSBp
bkZsb3dDaGlsZC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7CiAgICAgICAgIGlmIChpbkZsb3dD
aGlsZCkgewotICAgICAgICAgICAgYXV0byYgaW5GbG93RGlzcGxheUJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqaW5GbG93Q2hpbGQpOwotICAgICAgICAg
ICAgcmV0dXJuIHsgaW5GbG93RGlzcGxheUJveEdlb21ldHJ5LnRvcCgpICsgaW5GbG93RGlzcGxh
eUJveEdlb21ldHJ5LmJvcmRlckJveCgpLmhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwg
bm9uQ29sbGFwc2VkTWFyZ2luIH07CisgICAgICAgICAgICBhdXRvJiBpbkZsb3dCb3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmluRmxvd0NoaWxkKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IGluRmxvd0JveEdlb21ldHJ5LnRvcCgpICsgaW5GbG93Qm94R2Vv
bWV0cnkuYm9yZGVyQm94KCkuaGVpZ2h0KCkgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xs
YXBzZWRNYXJnaW4gfTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDQuIHplcm8sIG90aGVyd2lz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9j
a0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggNWU3OTFm
OWZkMTYyODhmOGMyZDE4ZDdmNDMyMWZhZjc5M2MzZDI1Ny4uYWQ5ZDZjYjQxY2JhZjA4MmMwYmM2
MDliMzRkMjcyNjE0MDg4YmUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Js
b2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRR
dWlya3MuY3BwCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdT
dGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21l
dHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0
R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAj
aW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKaW5kZXgg
NWZmZTRhMjVjMGEwYmM5NzFmZmM5MzQyYzEzODQ3NDY3NmI3MDhkYS4uODk5Y2E5N2M1NTU2MGRh
MWFjN2E5NWEzM2FhNTYwYmI1N2UxZjllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCkBA
IC04Nyw3ICs4Nyw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFw
c2U6Omhhc0NsZWFyYW5jZShjb25zdCBCb3gmIGxheW91dEJveCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIC8vIEZJWE1FOiBwcmVjb21wdXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0
aW5nUm9vdCBsb2dpYyBlbmRzIHVwIGNhbGxpbmcgaW50byB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhl
IGxheW91dEJveCAoZmlyc3QgaW5mbG93IGNoaWxkKSBoYXMKICAgICAvLyBub3QgYmVlbiBsYWlk
IG91dC4KLSAgICBpZiAoIWxheW91dFN0YXRlKCkuaGFzRGlzcGxheUJveChsYXlvdXRCb3gpKQor
ICAgIGlmICghbGF5b3V0U3RhdGUoKS5oYXNCb3hHZW9tZXRyeShsYXlvdXRCb3gpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KS5oYXNDbGVhcmFuY2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJs
b2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9y
bWF0dGluZy90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5j
cHAKaW5kZXggNjYzOGFlNTMzMDY1Y2RhNDcwNDY3ODlmZWIzMTUxNDBmNjk0M2YxNS4uZWI2MGQx
MTMyYzMxOTlhYzIxNmUzMDgzZDIyMDUzOTk0YWU1MWY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4
dC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRl
LmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hH
ZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJM
YXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJM
YXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAjaW5jbHVkZSAiVGFibGVGb3JtYXR0aW5n
Q29udGV4dC5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCkBAIC0xMzYsOSAr
MTM2LDkgQEAgdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
Qm9yZGVyQW5kUGFkZGluZ0ZvclRhYmxlQm94KGNvbnMKICAgICBhdXRvIGNvbGxhcHNlZEJvcmRl
ciA9IEVkZ2VzIHsgeyBsZWZ0Qm9yZGVyLCByaWdodEJvcmRlciB9LCB7IHRvcEJvcmRlciwgYm90
dG9tQm9yZGVyIH0gfTsKICAgICBncmlkLnNldENvbGxhcHNlZEJvcmRlcihjb2xsYXBzZWRCb3Jk
ZXIpOwogCi0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlC
b3godGFibGVCb3gpOwotICAgIGRpc3BsYXlCb3guc2V0Qm9yZGVyKGNvbGxhcHNlZEJvcmRlciAv
IDIpOwotICAgIGRpc3BsYXlCb3guc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGlu
Zyh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCkpOworICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkodGFibGVCb3gp
OworICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcihjb2xsYXBzZWRCb3JkZXIgLyAyKTsKKyAgICBi
b3hHZW9tZXRyeS5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5nKHRhYmxlQm94
LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKSk7CiB9CiAKIHZvaWQgVGFibGVX
cmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luRm9yVGFi
bGVCb3goY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCkBAIC0yMDcsOSArMjA3LDkgQEAgdm9pZCBU
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW5G
b3JUYWJsZUJveChjb25zdAogCiAgICAgYXV0byBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBnZW9t
ZXRyeS5pbkZsb3dXaWR0aEFuZE1hcmdpbih0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBPdmVycmlkZUhvcml6b250YWxWYWx1ZXMgeyB1c2VkV2lkdGgsIHsgfSB9KTsKIAotICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KHRhYmxlQm94KTsK
LSAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50V2lkdGhBbmRNYXJnaW4u
Y29udGVudFdpZHRoKTsKLSAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyBjb250
ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCwgY29udGVudFdpZHRoQW5kTWFyZ2lu
LnVzZWRNYXJnaW4uZW5kIH0pOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0
YXRlKCkuYm94R2VvbWV0cnkodGFibGVCb3gpOworICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRC
b3hXaWR0aChjb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKTsKKyAgICBib3hHZW9t
ZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJn
aW4uc3RhcnQsIGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLmVuZCB9KTsKIH0KIAog
dm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5k
TWFyZ2luRm9yVGFibGVCb3goY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCwgY29uc3QgQ29u
c3RyYWludHNGb3JJbkZsb3dDb250ZW50JiBjb25zdHJhaW50cykKQEAgLTIyNCwxMCArMjI0LDEw
IEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdo
dEFuZE1hcmdpbkZvclRhYmxlQm94KGNvbnN0CiAgICAgLy8gQ2FjaGUgdGhlIGNvbXB1dGVkIHBv
c2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW4gdmFsdWUgcGFpci4KICAgICBmb3JtYXR0aW5nU3Rh
dGUoKS5zZXRVc2VkVmVydGljYWxNYXJnaW4odGFibGVCb3gsIHZlcnRpY2FsTWFyZ2luKTsKIAot
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KHRhYmxl
Qm94KTsKLSAgICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbih0
YWJsZUJveCwgdmVydGljYWxNYXJnaW4sIGNvbnN0cmFpbnRzLnZlcnRpY2FsKSk7Ci0gICAgZGlz
cGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0
KTsKLSAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgbWFyZ2luQmVmb3JlKHZlcnRp
Y2FsTWFyZ2luKSwgbWFyZ2luQWZ0ZXIodmVydGljYWxNYXJnaW4pIH0pOworICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkodGFibGVCb3gpOworICAg
IGJveEdlb21ldHJ5LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbih0YWJsZUJveCwg
dmVydGljYWxNYXJnaW4sIGNvbnN0cmFpbnRzLnZlcnRpY2FsKSk7CisgICAgYm94R2VvbWV0cnku
c2V0Q29udGVudEJveEhlaWdodChoZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCk7CisgICAg
Ym94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyBtYXJnaW5CZWZvcmUodmVydGljYWxNYXJn
aW4pLCBtYXJnaW5BZnRlcih2ZXJ0aWNhbE1hcmdpbikgfSk7CiAgICAgLy8gQWRqdXN0IHRoZSBw
cmV2aW91cyBzaWJsaW5nJ3MgbWFyZ2luIGJvdHRvbSBub3cgdGhhdCB0aGlzIGJveCdzIHZlcnRp
Y2FsIG1hcmdpbiBpcyBjb21wdXRlZC4KICAgICBNYXJnaW5Db2xsYXBzZTo6dXBkYXRlTWFyZ2lu
QWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoKnRoaXMsIG1hcmdpbkNvbGxhcHNlLCB0YWJsZUJveCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheS9EaXNwbGF5TGF5
ZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5L0Rpc3BsYXlM
YXllckNvbnRyb2xsZXIuY3BwCmluZGV4IDRiYjNhMDdhY2NlZjI0MmU2OTM1NjNmMzI3NTZlOTIy
OWM4M2NmNDQuLjY0Y2E0ODBjODQwMzA3NzdiMWVlOWZlZmE5Zjc0N2YxMzE3YzU3MTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5L0Rpc3BsYXlMYXllckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5L0Rpc3BsYXlMYXllckNv
bnRyb2xsZXIuY3BwCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSAiRGlzcGxheVZpZXcuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkxh
eW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUg
IkxheW91dEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtODMsMTAgKzgzLDEwIEBAIHZvaWQgTGF5ZXJD
b250cm9sbGVyOjpwcmVwYXJlRm9yRGlzcGxheShjb25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSkKICAgICBpZiAoIXJvb3RMYXlvdXRCb3guZmlyc3RDaGlsZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBU1NFUlQobGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChyb290TGF5
b3V0Qm94KSk7CisgICAgQVNTRVJUKGxheW91dFN0YXRlLmhhc0JveEdlb21ldHJ5KHJvb3RMYXlv
dXRCb3gpKTsKIAotICAgIGF1dG8gdmlld1NpemUgPSBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckxh
eW91dEJveChyb290TGF5b3V0Qm94KS5zaXplKCk7Ci0gICAgYXV0byBjb250ZW50U2l6ZSA9IGxh
eW91dFN0YXRlLmdlb21ldHJ5Rm9yTGF5b3V0Qm94KCpyb290TGF5b3V0Qm94LmZpcnN0Q2hpbGQo
KSkuc2l6ZSgpOworICAgIGF1dG8gdmlld1NpemUgPSBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckJv
eChyb290TGF5b3V0Qm94KS5zaXplKCk7CisgICAgYXV0byBjb250ZW50U2l6ZSA9IGxheW91dFN0
YXRlLmdlb21ldHJ5Rm9yQm94KCpyb290TGF5b3V0Qm94LmZpcnN0Q2hpbGQoKSkuc2l6ZSgpOwog
ICAgIAogICAgIC8vIEZJWE1FOiBVc2luZyB0aGUgZmlyc3RDaGlsZCgpIHNpemUgd29uJ3QgYmUg
Y29ycmVjdCB1bnRpbCB3ZSBjb21wdXRlIG92ZXJmbG93IGNvcnJlY3RseSwKICAgICBjb250ZW50
U2l6ZS5jbGFtcFRvTWluaW11bVNpemUodmlld1NpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFpbnRlci5jcHAKaW5kZXggMmEyOWM0NDA0
NDE0Y2MxZmM5MDUxMWZiNmM4NDVkOTlhYjY3ZWU3MS4uYWVhYWQ4ZjU0YWUxYmNhMjdmMWNhYThl
MThjY2RmMmViOWU5YTUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlz
cGxheXRyZWUvRGlzcGxheVBhaW50ZXIuY3BwCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSAi
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0uaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNs
dWRlICJMYXlvdXRDb250YWluZXJCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgog
I2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKICNpbmNsdWRlICJMYXlv
dXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCkBAIC00NSwxMCArNDUsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXkgewogCiAvLyBGSVhNRTogTW92
ZSB0byBkaXNwbGF5IGJveC4KLXN0YXRpYyB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dDo6R2VvbWV0cnkmIGFic29sdXRlRGlzcGxh
eUJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBib29sIG5lZWRzTWFyZ2luUGFpbnRpbmcp
CitzdGF0aWMgdm9pZCBwYWludEJveERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXlvdXQ6OkJveEdlb21ldHJ5JiBhYnNvbHV0ZUJveEdlb21ldHJ5LCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGJvb2wgbmVlZHNNYXJnaW5QYWludGluZykKIHsKLSAgICBhdXRv
IGRlY29yYXRpb25Cb3hUb3BMZWZ0ID0gbmVlZHNNYXJnaW5QYWludGluZyA/IGFic29sdXRlRGlz
cGxheUJveC5yZWN0V2l0aE1hcmdpbigpLnRvcExlZnQoKSA6IGFic29sdXRlRGlzcGxheUJveC50
b3BMZWZ0KCk7Ci0gICAgYXV0byBkZWNvcmF0aW9uQm94U2l6ZSA9IG5lZWRzTWFyZ2luUGFpbnRp
bmcgPyBhYnNvbHV0ZURpc3BsYXlCb3gucmVjdFdpdGhNYXJnaW4oKS5zaXplKCkgOiBMYXlvdXRT
aXplKGFic29sdXRlRGlzcGxheUJveC5ib3JkZXJCb3hXaWR0aCgpLCBhYnNvbHV0ZURpc3BsYXlC
b3guYm9yZGVyQm94SGVpZ2h0KCkpOworICAgIGF1dG8gZGVjb3JhdGlvbkJveFRvcExlZnQgPSBu
ZWVkc01hcmdpblBhaW50aW5nID8gYWJzb2x1dGVCb3hHZW9tZXRyeS5yZWN0V2l0aE1hcmdpbigp
LnRvcExlZnQoKSA6IGFic29sdXRlQm94R2VvbWV0cnkudG9wTGVmdCgpOworICAgIGF1dG8gZGVj
b3JhdGlvbkJveFNpemUgPSBuZWVkc01hcmdpblBhaW50aW5nID8gYWJzb2x1dGVCb3hHZW9tZXRy
eS5yZWN0V2l0aE1hcmdpbigpLnNpemUoKSA6IExheW91dFNpemUoYWJzb2x1dGVCb3hHZW9tZXRy
eS5ib3JkZXJCb3hXaWR0aCgpLCBhYnNvbHV0ZUJveEdlb21ldHJ5LmJvcmRlckJveEhlaWdodCgp
KTsKICAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yCiAgICAgaWYgKHN0eWxlLmhhc0JhY2tncm91bmQo
KSkgewogICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHsgZGVjb3JhdGlvbkJveFRvcExlZnQsIGRl
Y29yYXRpb25Cb3hTaXplIH0sIHN0eWxlLmJhY2tncm91bmRDb2xvcigpKTsKQEAgLTE0MiwxMyAr
MTQyLDEzIEBAIHN0YXRpYyB2b2lkIHBhaW50SW5saW5lQ29udGVudChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIExheW91dFBvaW50IGFic29sdXRlT2ZmCiAgICAgfQogfQogCi1MYXlvdXQ6Okdl
b21ldHJ5IFBhaW50ZXI6OmFic29sdXRlRGlzcGxheUJveChjb25zdCBMYXlvdXQ6OkxheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgTGF5b3V0OjpCb3gmIGxheW91dEJveFRvUGFpbnQpCitM
YXlvdXQ6OkJveEdlb21ldHJ5IFBhaW50ZXI6OmFic29sdXRlQm94R2VvbWV0cnkoY29uc3QgTGF5
b3V0OjpMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IExheW91dDo6Qm94JiBsYXlvdXRC
b3hUb1BhaW50KQogewogICAgIC8vIFNob3VsZCBuZXZlciByZWFsbHkgaGFwcGVuIGJ1dCB0YWJs
ZSBjb2RlIGlzIHdheSB0b28gaW5jb21wbGV0ZS4KLSAgICBpZiAoIWxheW91dFN0YXRlLmhhc0Rp
c3BsYXlCb3gobGF5b3V0Qm94VG9QYWludCkpCisgICAgaWYgKCFsYXlvdXRTdGF0ZS5oYXNCb3hH
ZW9tZXRyeShsYXlvdXRCb3hUb1BhaW50KSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAo
aXM8TGF5b3V0OjpJbml0aWFsQ29udGFpbmluZ0Jsb2NrPihsYXlvdXRCb3hUb1BhaW50KSkKLSAg
ICAgICAgcmV0dXJuIGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yTGF5b3V0Qm94KGxheW91dEJveFRv
UGFpbnQpOworICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94VG9QYWludCk7CiAKICAgICBhdXRvIHBhaW50Q29udGFpbmVyID0gWyZdIChjb25zdCBhdXRv
JiBsYXlvdXRCb3gpIHsKICAgICAgICAgaWYgKGxheW91dEJveC5pc1RhYmxlQ2VsbCgpKSB7CkBA
IC0xNTgsOSArMTU4LDkgQEAgTGF5b3V0OjpHZW9tZXRyeSBQYWludGVyOjphYnNvbHV0ZURpc3Bs
YXlCb3goY29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0ZSYgbGF5b3V0U3QKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gJmxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICB9OwotICAgIGF1
dG8gYWJzb2x1dGVCb3ggPSBMYXlvdXQ6Okdlb21ldHJ5IHsgbGF5b3V0U3RhdGUuZ2VvbWV0cnlG
b3JMYXlvdXRCb3gobGF5b3V0Qm94VG9QYWludCkgfTsKKyAgICBhdXRvIGFic29sdXRlQm94ID0g
TGF5b3V0OjpCb3hHZW9tZXRyeSB7IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94KGxheW91dEJv
eFRvUGFpbnQpIH07CiAgICAgZm9yIChhdXRvKiBjb250YWluZXIgPSBwYWludENvbnRhaW5lcihs
YXlvdXRCb3hUb1BhaW50KTsgIWlzPExheW91dDo6SW5pdGlhbENvbnRhaW5pbmdCbG9jaz4oY29u
dGFpbmVyKTsgY29udGFpbmVyID0gcGFpbnRDb250YWluZXIoKmNvbnRhaW5lcikpCi0gICAgICAg
IGFic29sdXRlQm94Lm1vdmVCeShsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckxheW91dEJveCgqY29u
dGFpbmVyKS50b3BMZWZ0KCkpOworICAgICAgICBhYnNvbHV0ZUJveC5tb3ZlQnkobGF5b3V0U3Rh
dGUuZ2VvbWV0cnlGb3JCb3goKmNvbnRhaW5lcikudG9wTGVmdCgpKTsKICAgICByZXR1cm4gYWJz
b2x1dGVCb3g7CiB9CiAKQEAgLTE3NywyMiArMTc3LDIyIEBAIHN0YXRpYyB2b2lkIHBhaW50U3Vi
dHJlZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUm
IGxhCiAgICAgYXV0byBwYWludCA9IFsmXSAoYXV0byYgbGF5b3V0Qm94KSB7CiAgICAgICAgIGlm
IChsYXlvdXRCb3guc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5
Qm94KGxheW91dEJveCkpCisgICAgICAgIGlmICghbGF5b3V0U3RhdGUuaGFzQm94R2VvbWV0cnko
bGF5b3V0Qm94KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byBhYnNvbHV0ZURp
c3BsYXlCb3ggPSBQYWludGVyOjphYnNvbHV0ZURpc3BsYXlCb3gobGF5b3V0U3RhdGUsIGxheW91
dEJveCk7Ci0gICAgICAgIGlmICghZGlydHlSZWN0LmludGVyc2VjdHMoc25hcHBlZEludFJlY3Qo
YWJzb2x1dGVEaXNwbGF5Qm94LnJlY3QoKSkpKQorICAgICAgICBhdXRvIGFic29sdXRlQm94R2Vv
bWV0cnkgPSBQYWludGVyOjphYnNvbHV0ZUJveEdlb21ldHJ5KGxheW91dFN0YXRlLCBsYXlvdXRC
b3gpOworICAgICAgICBpZiAoIWRpcnR5UmVjdC5pbnRlcnNlY3RzKHNuYXBwZWRJbnRSZWN0KGFi
c29sdXRlQm94R2VvbWV0cnkucmVjdCgpKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgaWYgKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZTo6RGVjb3JhdGlvbikgewogICAgICAgICAg
ICAgaWYgKGxheW91dEJveC5pc0Fub255bW91cygpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbihjb250ZXh0LCBhYnNvbHV0ZURpc3BsYXlC
b3gsIGxheW91dEJveC5zdHlsZSgpLCBsYXlvdXRCb3guaXNCb2R5Qm94KCkpOworICAgICAgICAg
ICAgcGFpbnRCb3hEZWNvcmF0aW9uKGNvbnRleHQsIGFic29sdXRlQm94R2VvbWV0cnksIGxheW91
dEJveC5zdHlsZSgpLCBsYXlvdXRCb3guaXNCb2R5Qm94KCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIC8vIE9ubHkgaW5saW5lIGNvbnRlbnQgZm9yIG5vdy4KICAg
ICAgICAgaWYgKGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkp
IHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5lckJveCA9IGRvd25jYXN0PExheW91dDo6Q29u
dGFpbmVyQm94PihsYXlvdXRCb3gpOwotICAgICAgICAgICAgcGFpbnRJbmxpbmVDb250ZW50KGNv
bnRleHQsIGFic29sdXRlRGlzcGxheUJveC50b3BMZWZ0KCksIGxheW91dFN0YXRlLmVzdGFibGlz
aGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5lckJveCkpOworICAgICAgICAgICAgcGFp
bnRJbmxpbmVDb250ZW50KGNvbnRleHQsIGFic29sdXRlQm94R2VvbWV0cnkudG9wTGVmdCgpLCBs
YXlvdXRTdGF0ZS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShjb250YWluZXJCb3gp
KTsKICAgICAgICAgfQogICAgIH07CiAKQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgTGF5b3V0
UmVjdCBjb2xsZWN0UGFpbnRSb290c0FuZENvbnRlbnRSZWN0KGNvbnN0IExheW91dDo6TGF5b3V0
U3RhdGUmIGxheQogICAgICAgICBwb3NpdGl2ZVpPcmRlckxpc3QuYXBwZW5kKCZsYXlvdXRCb3gp
OwogICAgIH07CiAKLSAgICBhdXRvIGNvbnRlbnRSZWN0ID0gTGF5b3V0UmVjdCB7IGxheW91dFN0
YXRlLmdlb21ldHJ5Rm9yTGF5b3V0Qm94KHJvb3RMYXlvdXRCb3gpLnJlY3QoKSB9OworICAgIGF1
dG8gY29udGVudFJlY3QgPSBMYXlvdXRSZWN0IHsgbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3go
cm9vdExheW91dEJveCkucmVjdCgpIH07CiAKICAgICAvLyBJbml0aWFsIEJGQyBpcyBhbHdheXMg
YSBwYWludCByb290LgogICAgIGFwcGVuZFBhaW50Um9vdChyb290TGF5b3V0Qm94KTsKQEAgLTI0
OCw4ICsyNDgsOCBAQCBzdGF0aWMgTGF5b3V0UmVjdCBjb2xsZWN0UGFpbnRSb290c0FuZENvbnRl
bnRSZWN0KGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUmIGxheQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgaWYgKGlzUGFpbnRSb290Q2FuZGlkYXRlKGxheW91dEJveCkpCiAg
ICAgICAgICAgICAgICAgYXBwZW5kUGFpbnRSb290KGxheW91dEJveCk7Ci0gICAgICAgICAgICBp
ZiAobGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChsYXlvdXRCb3gpKQotICAgICAgICAgICAgICAg
IGNvbnRlbnRSZWN0LnVuaXRlSWZOb25aZXJvKFBhaW50ZXI6OmFic29sdXRlRGlzcGxheUJveChs
YXlvdXRTdGF0ZSwgbGF5b3V0Qm94KS5yZWN0KCkpOworICAgICAgICAgICAgaWYgKGxheW91dFN0
YXRlLmhhc0JveEdlb21ldHJ5KGxheW91dEJveCkpCisgICAgICAgICAgICAgICAgY29udGVudFJl
Y3QudW5pdGVJZk5vblplcm8oUGFpbnRlcjo6YWJzb2x1dGVCb3hHZW9tZXRyeShsYXlvdXRTdGF0
ZSwgbGF5b3V0Qm94KS5yZWN0KCkpOwogICAgICAgICAgICAgaWYgKCFpczxMYXlvdXQ6OkNvbnRh
aW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8TGF5b3V0OjpDb250YWluZXJCb3g+KGxh
eW91dEJveCkuaGFzQ2hpbGQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGxheW91dEJveExpc3QuYXBwZW5kKGRvd25jYXN0PExheW91dDo6Q29udGFpbmVyQm94PihsYXlv
dXRCb3gpLmZpcnN0Q2hpbGQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
ZGlzcGxheXRyZWUvRGlzcGxheVBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5UGFpbnRlci5oCmluZGV4IDFiZTVlZmM5ZWJiZjFjNmQwZDUyZWMyZmQy
YWFjN2FmYzEyYWJkMjEuLjA2ZTZmZjJlNWFlYzdiMDMxZmYyMzVjYmNkNmRmM2Y0YjMyZjM1YzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFp
bnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFp
bnRlci5oCkBAIC0zMyw3ICszMyw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIElu
dFJlY3Q7CiAKIG5hbWVzcGFjZSBMYXlvdXQgewotY2xhc3MgR2VvbWV0cnk7CitjbGFzcyBCb3hH
ZW9tZXRyeTsKIGNsYXNzIExheW91dFN0YXRlOwogfQogCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBwYWludElubGluZUZsb3coY29uc3QgTGF5b3V0OjpMYXlvdXRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dCYpOwogCiAgICAgLy8gRklYTUU6IE1vdmUgdG8gZGlzcGxh
eSBib3guCi0gICAgc3RhdGljIExheW91dDo6R2VvbWV0cnkgYWJzb2x1dGVEaXNwbGF5Qm94KGNv
bnN0IExheW91dDo6TGF5b3V0U3RhdGUmLCBjb25zdCBMYXlvdXQ6OkJveCYpOworICAgIHN0YXRp
YyBMYXlvdXQ6OkJveEdlb21ldHJ5IGFic29sdXRlQm94R2VvbWV0cnkoY29uc3QgTGF5b3V0OjpM
YXlvdXRTdGF0ZSYsIGNvbnN0IExheW91dDo6Qm94Jik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaAppbmRleCA4ZTI1M2IxOTBmMjllMWQyYTQz
MjhhNzRlOGExMDlhY2IzYzNkNzIxLi5hODhiZWMwYTA2ODBhOTEzOWM3MzhkYzVjZjAzMzI1MjUx
MjMxYjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZv
aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmgK
QEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
IAogI2luY2x1ZGUgIkxheW91dEJveC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgog
I2luY2x1ZGUgIkxheW91dFVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCmluZGV4
IDg1NWZmNWZlNTc5MDQ5NjJjMDM5YjIwN2ZkODg4NmU0ZjliYzQxODEuLmNlNjIzNWNjZmRhZDE3
NzhiMWU4MjA4NmJlNDIwYTUzODYxY2MzOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAKQEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRl
ICJGbG9hdEF2b2lkZXIuaCIKICNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0yNDMsMTkgKzI0MywxOSBAQCBMYXlvdXRQb2ludCBGbG9hdGluZ0NvbnRleHQ6OnBvc2l0aW9u
Rm9yRmxvYXQoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6bwogICAgIC8vIEZpbmQg
dGhlIHRvcCBtb3N0IHBvc2l0aW9uIHdoZXJlIHRoZSBmbG9hdCBib3ggZml0cy4KICAgICBBU1NF
UlQoIWlzRW1wdHkoKSk7CiAgICAgYXV0byBwcmV2aW91c0Zsb2F0QWJzb2x1dGVUb3AgPSBmbG9h
dGluZ1N0YXRlKCkuZmxvYXRzKCkubGFzdCgpLnJlY3RXaXRoTWFyZ2luKCkudG9wKCk7Ci0gICAg
YXV0byBhYnNvbHV0ZURpc3BsYXlCb3hDb29yZGluYXRlcyA9IHRoaXMtPmFic29sdXRlRGlzcGxh
eUJveENvb3JkaW5hdGVzKGxheW91dEJveCk7Ci0gICAgYXV0byBhYnNvbHV0ZVRvcExlZnQgPSBh
YnNvbHV0ZURpc3BsYXlCb3hDb29yZGluYXRlcy50b3BMZWZ0OworICAgIGF1dG8gYWJzb2x1dGVC
b3hHZW9tZXRyeUNvb3JkaW5hdGVzID0gdGhpcy0+YWJzb2x1dGVCb3hHZW9tZXRyeUNvb3JkaW5h
dGVzKGxheW91dEJveCk7CisgICAgYXV0byBhYnNvbHV0ZVRvcExlZnQgPSBhYnNvbHV0ZUJveEdl
b21ldHJ5Q29vcmRpbmF0ZXMudG9wTGVmdDsKICAgICAvLyBJbmNvbWluZyBmbG9hdCBjYW5ub3Qg
YmUgcGxhY2VkIGhpZ2hlciB0aGFuIGV4aXN0aW5nIGZsb2F0cyAobWFyZ2luIGJveCBvZiB0aGUg
bGFzdCBmbG9hdCkuCiAgICAgLy8gVGFrZSB0aGUgc3RhdGljIHBvc2l0aW9uICh3aGVyZSB0aGUg
Ym94IHdvdWxkIGdvIGlmIGl0IHdhc24ndCBmbG9hdGluZykgYW5kIGFkanVzdCBpdCB3aXRoIHRo
ZSBsYXN0IGZsb2F0LgotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgaWYgKGFic29sdXRlVG9wTGVmdC55KCkg
LSBkaXNwbGF5Qm94Lm1hcmdpbkJlZm9yZSgpIDwgcHJldmlvdXNGbG9hdEFic29sdXRlVG9wKQot
ICAgICAgICBhYnNvbHV0ZVRvcExlZnQuc2V0WShwcmV2aW91c0Zsb2F0QWJzb2x1dGVUb3AgKyBk
aXNwbGF5Qm94Lm1hcmdpbkJlZm9yZSgpKTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICBpZiAoYWJzb2x1
dGVUb3BMZWZ0LnkoKSAtIGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpIDwgcHJldmlvdXNGbG9h
dEFic29sdXRlVG9wKQorICAgICAgICBhYnNvbHV0ZVRvcExlZnQuc2V0WShwcmV2aW91c0Zsb2F0
QWJzb2x1dGVUb3AgKyBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSk7CiAgICAgYXV0byBob3Jp
em9udGFsTWFyZ2luID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCk7Ci0gICAgYXV0byBtYXJnaW5zID0gRWRnZXMg
eyB7ICpob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCAqaG9yaXpvbnRhbE1hcmdpbi5lbmQgfSwgeyBk
aXNwbGF5Qm94Lm1hcmdpbkJlZm9yZSgpLCBkaXNwbGF5Qm94Lm1hcmdpbkFmdGVyKCkgfSB9Owot
ICAgIGF1dG8gZmxvYXRCb3ggPSBGbG9hdEF2b2lkZXIgeyBsYXlvdXRCb3gsIGFic29sdXRlVG9w
TGVmdCwgZGlzcGxheUJveC53aWR0aCgpLCBtYXJnaW5zLCBhYnNvbHV0ZURpc3BsYXlCb3hDb29y
ZGluYXRlcy5jb250YWluaW5nQmxvY2tDb250ZW50Qm94IH07CisgICAgYXV0byBtYXJnaW5zID0g
RWRnZXMgeyB7ICpob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCAqaG9yaXpvbnRhbE1hcmdpbi5lbmQg
fSwgeyBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSwgYm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIo
KSB9IH07CisgICAgYXV0byBmbG9hdEJveCA9IEZsb2F0QXZvaWRlciB7IGxheW91dEJveCwgYWJz
b2x1dGVUb3BMZWZ0LCBib3hHZW9tZXRyeS53aWR0aCgpLCBtYXJnaW5zLCBhYnNvbHV0ZUJveEdl
b21ldHJ5Q29vcmRpbmF0ZXMuY29udGFpbmluZ0Jsb2NrQ29udGVudEJveCB9OwogICAgIGZpbmRB
dmFpbGFibGVQb3NpdGlvbihmbG9hdEJveCwgbV9mbG9hdGluZ1N0YXRlLmZsb2F0cygpKTsKICAg
ICAvLyBGcm9tIGZvcm1hdHRpbmcgcm9vdCBjb29yZGluYXRlIHN5c3RlbSBiYWNrIHRvIGNvbnRh
aW5pbmcgYmxvY2sncy4KLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1RvcExlZnQgPSBhYnNvbHV0
ZURpc3BsYXlCb3hDb29yZGluYXRlcy5jb250YWluaW5nQmxvY2tUb3BMZWZ0OworICAgIGF1dG8g
Y29udGFpbmluZ0Jsb2NrVG9wTGVmdCA9IGFic29sdXRlQm94R2VvbWV0cnlDb29yZGluYXRlcy5j
b250YWluaW5nQmxvY2tUb3BMZWZ0OwogICAgIHJldHVybiB7IGZsb2F0Qm94LmxlZnQoKSArIG1h
cmdpbnMuaG9yaXpvbnRhbC5sZWZ0IC0gY29udGFpbmluZ0Jsb2NrVG9wTGVmdC54KCksIGZsb2F0
Qm94LnRvcCgpICsgbWFyZ2lucy52ZXJ0aWNhbC50b3AgLSBjb250YWluaW5nQmxvY2tUb3BMZWZ0
LnkoKSB9OwogfQogCkBAIC0yNjksMTMgKzI2OSwxMyBAQCBMYXlvdXRQb2ludCBGbG9hdGluZ0Nv
bnRleHQ6OnBvc2l0aW9uRm9yTm9uRmxvYXRpbmdGbG9hdEF2b2lkZXIoY29uc3QgQm94JiBsYXlv
dQogICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkudG9wTGVmdCgpOwogCi0gICAgYXV0byBhYnNvbHV0
ZURpc3BsYXlCb3hDb29yZGluYXRlcyA9IHRoaXMtPmFic29sdXRlRGlzcGxheUJveENvb3JkaW5h
dGVzKGxheW91dEJveCk7Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvIGFic29sdXRlQm94R2VvbWV0
cnlDb29yZGluYXRlcyA9IHRoaXMtPmFic29sdXRlQm94R2VvbWV0cnlDb29yZGluYXRlcyhsYXlv
dXRCb3gpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gpOwogICAgIGF1dG8gaG9yaXpvbnRhbE1hcmdpbiA9IGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dp
Y2FsV2lkdGgpOwotICAgIGF1dG8gbWFyZ2lucyA9IEVkZ2VzIHsgeyAqaG9yaXpvbnRhbE1hcmdp
bi5zdGFydCwgKmhvcml6b250YWxNYXJnaW4uZW5kIH0sIHsgZGlzcGxheUJveC5tYXJnaW5CZWZv
cmUoKSwgZGlzcGxheUJveC5tYXJnaW5BZnRlcigpIH0gfTsKLSAgICBhdXRvIGZsb2F0QXZvaWRl
ciA9IEZsb2F0QXZvaWRlciB7IGxheW91dEJveCwgYWJzb2x1dGVEaXNwbGF5Qm94Q29vcmRpbmF0
ZXMudG9wTGVmdCwgZGlzcGxheUJveC53aWR0aCgpLCBtYXJnaW5zLCBhYnNvbHV0ZURpc3BsYXlC
b3hDb29yZGluYXRlcy5jb250YWluaW5nQmxvY2tDb250ZW50Qm94IH07CisgICAgYXV0byBtYXJn
aW5zID0gRWRnZXMgeyB7ICpob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCAqaG9yaXpvbnRhbE1hcmdp
bi5lbmQgfSwgeyBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSwgYm94R2VvbWV0cnkubWFyZ2lu
QWZ0ZXIoKSB9IH07CisgICAgYXV0byBmbG9hdEF2b2lkZXIgPSBGbG9hdEF2b2lkZXIgeyBsYXlv
dXRCb3gsIGFic29sdXRlQm94R2VvbWV0cnlDb29yZGluYXRlcy50b3BMZWZ0LCBib3hHZW9tZXRy
eS53aWR0aCgpLCBtYXJnaW5zLCBhYnNvbHV0ZUJveEdlb21ldHJ5Q29vcmRpbmF0ZXMuY29udGFp
bmluZ0Jsb2NrQ29udGVudEJveCB9OwogICAgIGZpbmRQb3NpdGlvbkZvckZvcm1hdHRpbmdDb250
ZXh0Um9vdChmbG9hdEF2b2lkZXIpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrVG9wTGVmdCA9
IGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja1RvcExlZnQ7Cisg
ICAgYXV0byBjb250YWluaW5nQmxvY2tUb3BMZWZ0ID0gYWJzb2x1dGVCb3hHZW9tZXRyeUNvb3Jk
aW5hdGVzLmNvbnRhaW5pbmdCbG9ja1RvcExlZnQ7CiAgICAgcmV0dXJuIHsgZmxvYXRBdm9pZGVy
LmxlZnQoKSAtIGNvbnRhaW5pbmdCbG9ja1RvcExlZnQueCgpLCBmbG9hdEF2b2lkZXIudG9wKCkg
LSBjb250YWluaW5nQmxvY2tUb3BMZWZ0LnkoKSB9OwogfQogCkBAIC00MDQsOSArNDA0LDkgQEAg
RmxvYXRpbmdDb250ZXh0OjpDb25zdHJhaW50cyBGbG9hdGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRz
KExheW91dFVuaXQgY2FuZGlkYXRlVG8KIAogdm9pZCBGbG9hdGluZ0NvbnRleHQ6OmFwcGVuZChj
b25zdCBCb3gmIGZsb2F0Qm94KQogewotICAgIGF1dG8gYWJzb2x1dGVEaXNwbGF5Qm94ID0gR2Vv
bWV0cnkoZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChmbG9hdEJveCkpOwotICAg
IGFic29sdXRlRGlzcGxheUJveC5zZXRUb3BMZWZ0KG1hcFRvcExlZnRUb0Zsb2F0aW5nU3RhdGVS
b290KGZsb2F0Qm94KSk7Ci0gICAgZmxvYXRpbmdTdGF0ZSgpLmFwcGVuZChGbG9hdGluZ1N0YXRl
OjpGbG9hdEl0ZW0geyBmbG9hdEJveCwgYWJzb2x1dGVEaXNwbGF5Qm94IH0pOworICAgIGF1dG8g
YWJzb2x1dGVCb3hHZW9tZXRyeSA9IEJveEdlb21ldHJ5KGZvcm1hdHRpbmdDb250ZXh0KCkuZ2Vv
bWV0cnlGb3JCb3goZmxvYXRCb3gpKTsKKyAgICBhYnNvbHV0ZUJveEdlb21ldHJ5LnNldFRvcExl
ZnQobWFwVG9wTGVmdFRvRmxvYXRpbmdTdGF0ZVJvb3QoZmxvYXRCb3gpKTsKKyAgICBmbG9hdGlu
Z1N0YXRlKCkuYXBwZW5kKEZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbSB7IGZsb2F0Qm94LCBhYnNv
bHV0ZUJveEdlb21ldHJ5IH0pOwogfQogCiB2b2lkIEZsb2F0aW5nQ29udGV4dDo6ZmluZFBvc2l0
aW9uRm9yRm9ybWF0dGluZ0NvbnRleHRSb290KEZsb2F0QXZvaWRlciYgZmxvYXRBdm9pZGVyKSBj
b25zdApAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgRmxvYXRpbmdDb250ZXh0OjpmaW5kUG9zaXRp
b25Gb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoRmxvYXRBdm9pZGVyJiBmbG9hdEF2CiAgICAgfQog
fQogCi1GbG9hdGluZ0NvbnRleHQ6OkFic29sdXRlQ29vcmRpbmF0ZVZhbHVlc0ZvckZsb2F0QXZv
aWRlciBGbG9hdGluZ0NvbnRleHQ6OmFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzKGNvbnN0
IEJveCYgZmxvYXRBdm9pZGVyKSBjb25zdAorRmxvYXRpbmdDb250ZXh0OjpBYnNvbHV0ZUNvb3Jk
aW5hdGVWYWx1ZXNGb3JGbG9hdEF2b2lkZXIgRmxvYXRpbmdDb250ZXh0OjphYnNvbHV0ZUJveEdl
b21ldHJ5Q29vcmRpbmF0ZXMoY29uc3QgQm94JiBmbG9hdEF2b2lkZXIpIGNvbnN0CiB7CiAgICAg
YXV0byYgY29udGFpbmluZ0Jsb2NrID0gZmxvYXRBdm9pZGVyLmNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVS
ZWFzb246OkZsb2F0Qm94TmVlZHNUb0JlSW5BYnNvbHV0ZUNvb3JkaW5hdGVzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5oCmluZGV4IDZiZDlkNTVj
OTZlYzE1OTM4NjhjYTg4MmFlZWRhZTRhMGM1MzRmNDUuLjFjODk2YTczZjk3Njc4ZmZkMGQzYzJh
ZGE1ZWU0NzE1OGFiZmU1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9h
dHMvRmxvYXRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9G
bG9hdGluZ0NvbnRleHQuaApAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlu
ZFBvc2l0aW9uRm9yRm9ybWF0dGluZ0NvbnRleHRSb290KEZsb2F0QXZvaWRlciYpIGNvbnN0Owog
CiAgICAgc3RydWN0IEFic29sdXRlQ29vcmRpbmF0ZVZhbHVlc0ZvckZsb2F0QXZvaWRlcjsKLSAg
ICBBYnNvbHV0ZUNvb3JkaW5hdGVWYWx1ZXNGb3JGbG9hdEF2b2lkZXIgYWJzb2x1dGVEaXNwbGF5
Qm94Q29vcmRpbmF0ZXMoY29uc3QgQm94JikgY29uc3Q7CisgICAgQWJzb2x1dGVDb29yZGluYXRl
VmFsdWVzRm9yRmxvYXRBdm9pZGVyIGFic29sdXRlQm94R2VvbWV0cnlDb29yZGluYXRlcyhjb25z
dCBCb3gmKSBjb25zdDsKICAgICBMYXlvdXRQb2ludCBtYXBUb3BMZWZ0VG9GbG9hdGluZ1N0YXRl
Um9vdChjb25zdCBCb3gmKSBjb25zdDsKICAgICBQb2ludCBtYXBQb2ludEZyb21Gb3JtYXR0aW5n
Q29udGV4dFJvb3RUb0Zsb2F0aW5nU3RhdGVSb290KFBvaW50KSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5jcHAKaW5kZXggM2U2M2MyZjc2
NTliMjRhYmZmNDdkYmM4MmRjMjYwZDM4ZmE4MWU3ZC4uODU2Y2U1NTQ2OTY3MWJkYTNlZmMyOWVm
OTBjYTYyMjM5MmZhMGNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0
cy9GbG9hdGluZ1N0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zs
b2F0aW5nU3RhdGUuY3BwCkBAIC00MCwxNiArNDAsMTYgQEAgbmFtZXNwYWNlIExheW91dCB7CiAK
IFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChGbG9hdGluZ1N0YXRlKTsKIAotRmxvYXRpbmdT
dGF0ZTo6RmxvYXRJdGVtOjpGbG9hdEl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gsIEdlb21ldHJ5
IGFic29sdXRlRGlzcGxheUJveCkKK0Zsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6RmxvYXRJdGVt
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBCb3hHZW9tZXRyeSBhYnNvbHV0ZUJveEdlb21ldHJ5KQog
ICAgIDogbV9sYXlvdXRCb3gobWFrZVdlYWtQdHIobGF5b3V0Qm94KSkKICAgICAsIG1fcG9zaXRp
b24obGF5b3V0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8gUG9zaXRpb246OkxlZnQg
OiBQb3NpdGlvbjo6UmlnaHQpCi0gICAgLCBtX2Fic29sdXRlRGlzcGxheUJveChhYnNvbHV0ZURp
c3BsYXlCb3gpCisgICAgLCBtX2Fic29sdXRlQm94R2VvbWV0cnkoYWJzb2x1dGVCb3hHZW9tZXRy
eSkKIHsKIH0KIAotRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtOjpGbG9hdEl0ZW0oUG9zaXRpb24g
cG9zaXRpb24sIEdlb21ldHJ5IGFic29sdXRlRGlzcGxheUJveCkKK0Zsb2F0aW5nU3RhdGU6OkZs
b2F0SXRlbTo6RmxvYXRJdGVtKFBvc2l0aW9uIHBvc2l0aW9uLCBCb3hHZW9tZXRyeSBhYnNvbHV0
ZUJveEdlb21ldHJ5KQogICAgIDogbV9wb3NpdGlvbihwb3NpdGlvbikKLSAgICAsIG1fYWJzb2x1
dGVEaXNwbGF5Qm94KGFic29sdXRlRGlzcGxheUJveCkKKyAgICAsIG1fYWJzb2x1dGVCb3hHZW9t
ZXRyeShhYnNvbHV0ZUJveEdlb21ldHJ5KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5oCmluZGV4IDFkODEzNTMwMjYyYWRmZjc5ODdiYWYxOGY1
NDFkNzY3YWMwYTFhYzQuLjFhNWRmYTRiYWQ1N2ViY2NiNmE0MjM4MzdjZTc5MzA0MTAzNWJiNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5oCkBAIC0y
Nyw4ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAor
I2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVy
Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBA
IC0zOCw4ICszOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewog
CiBjbGFzcyBCb3g7CitjbGFzcyBCb3hHZW9tZXRyeTsKIGNsYXNzIEZsb2F0aW5nQ29udGV4dDsK
LWNsYXNzIEdlb21ldHJ5OwogY2xhc3MgTGF5b3V0U3RhdGU7CiBjbGFzcyBSZWN0OwogCkBAIC01
OCwxOCArNTgsMTggQEAgcHVibGljOgogCiAgICAgY2xhc3MgRmxvYXRJdGVtIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEZsb2F0SXRlbShjb25zdCBCb3gmLCBHZW9tZXRyeSBhYnNvbHV0ZURpc3Bs
YXlCb3gpOworICAgICAgICBGbG9hdEl0ZW0oY29uc3QgQm94JiwgQm94R2VvbWV0cnkgYWJzb2x1
dGVCb3hHZW9tZXRyeSk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgYyd0b3IgaXMgb25seSB1
c2VkIGJ5IHRoZSByZW5kZXIgdHJlZSBpbnRlZ2F0aW9uIGNvZGVwYXRoLgogICAgICAgICBlbnVt
IGNsYXNzIFBvc2l0aW9uIHsgTGVmdCwgUmlnaHQgfTsKLSAgICAgICAgRmxvYXRJdGVtKFBvc2l0
aW9uLCBHZW9tZXRyeSBhYnNvbHV0ZURpc3BsYXlCb3gpOworICAgICAgICBGbG9hdEl0ZW0oUG9z
aXRpb24sIEJveEdlb21ldHJ5IGFic29sdXRlQm94R2VvbWV0cnkpOwogCiAgICAgICAgIGJvb2wg
aXNMZWZ0UG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0gUG9zaXRpb246
OkxlZnQ7IH0KICAgICAgICAgYm9vbCBpc0luRm9ybWF0dGluZ0NvbnRleHRPZihjb25zdCBDb250
YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRC
b3gtPmlzSW5Gb3JtYXR0aW5nQ29udGV4dE9mKGZvcm1hdHRpbmdDb250ZXh0Um9vdCk7IH0KIAot
ICAgICAgICBSZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURp
c3BsYXlCb3gucmVjdFdpdGhNYXJnaW4oKTsgfQotICAgICAgICBHZW9tZXRyeTo6SG9yaXpvbnRh
bE1hcmdpbiBob3Jpem9udGFsTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURpc3Bs
YXlCb3guaG9yaXpvbnRhbE1hcmdpbigpOyB9Ci0gICAgICAgIFBvc2l0aW9uSW5Db250ZXh0Um9v
dCBib3R0b20oKSBjb25zdCB7IHJldHVybiB7IG1fYWJzb2x1dGVEaXNwbGF5Qm94LmJvdHRvbSgp
IH07IH0KKyAgICAgICAgUmVjdCByZWN0V2l0aE1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYWJz
b2x1dGVCb3hHZW9tZXRyeS5yZWN0V2l0aE1hcmdpbigpOyB9CisgICAgICAgIEJveEdlb21ldHJ5
OjpIb3Jpem9udGFsTWFyZ2luIGhvcml6b250YWxNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX2Fi
c29sdXRlQm94R2VvbWV0cnkuaG9yaXpvbnRhbE1hcmdpbigpOyB9CisgICAgICAgIFBvc2l0aW9u
SW5Db250ZXh0Um9vdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB7IG1fYWJzb2x1dGVCb3hHZW9t
ZXRyeS5ib3R0b20oKSB9OyB9CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICBjb25zdCBC
b3gqIGZsb2F0Qm94KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3guZ2V0KCk7IH0KQEAgLTc3
LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8Y29uc3Qg
Qm94PiBtX2xheW91dEJveDsKICAgICAgICAgUG9zaXRpb24gbV9wb3NpdGlvbjsKLSAgICAgICAg
R2VvbWV0cnkgbV9hYnNvbHV0ZURpc3BsYXlCb3g7CisgICAgICAgIEJveEdlb21ldHJ5IG1fYWJz
b2x1dGVCb3hHZW9tZXRyeTsKICAgICB9OwogICAgIHVzaW5nIEZsb2F0TGlzdCA9IFZlY3RvcjxG
bG9hdEl0ZW0+OwogICAgIGNvbnN0IEZsb2F0TGlzdCYgZmxvYXRzKCkgY29uc3QgeyByZXR1cm4g
bV9mbG9hdHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBlMjcx
NGY3NmFlMGJmMWQyMGMwNzkxMGVkOWU5N2ZkOTYyMDkzMzM0Li5jMjM2ZTYxM2M1ZTEyZmE2ZDc0
YTYwMjliNmQwOWNhYTFhYTZmZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5
b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW8KICAgICAgICAg
ICAgICAgICAvLyBJbmxpbmUgYm94ZXMgKDxzcGFuPikgY2FuJ3QgZ2V0IHNpemVkL3Bvc2l0aW9u
ZWQgeWV0LiBBdCB0aGlzIHBvaW50IHdlIGNhbiBvbmx5IGNvbXB1dGUgdGhlaXIgbWFyZ2lucywg
Ym9yZGVycyBhbmQgcGFkZGluZy4KICAgICAgICAgICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFk
ZGluZygqbGF5b3V0Qm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKICAgICAgICAgICAgICAg
ICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbigqbGF5b3V0Qm94LCBjb25zdHJhaW50cy5ob3Jpem9u
dGFsKTsKLSAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KCpsYXlv
dXRCb3gpLnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7CisgICAgICAgICAgICAgICAgZm9ybWF0dGlu
Z1N0YXRlKCkuYm94R2VvbWV0cnkoKmxheW91dEJveCkuc2V0VmVydGljYWxNYXJnaW4oeyB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUJ1aWxkZXI6OgogICAg
ICAgICBhdXRvIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCA9IHByZXZpb3VzTGluZSA/IHBy
ZXZpb3VzTGluZS0+b3ZlcmZsb3dDb250ZW50TGVuZ3RoIDogV1RGOjpudWxsb3B0OwogICAgICAg
ICBhdXRvIGluaXRpYWxMaW5lQ29uc3RyYWludHMgPSBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRl
bnQgeyBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IGxpbmVMb2dpY2FsVG9wLCBtYWtlT3B0aW9u
YWwodG9MYXlvdXRVbml0KHF1aXJrcygpLmluaXRpYWxMaW5lSGVpZ2h0KCkpKSB9IH07CiAgICAg
ICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lQnVpbGRlci5sYXlvdXRJbmxpbmVDb250ZW50KG5l
ZWRzTGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgaW5pdGlhbExpbmVD
b25zdHJhaW50cywgaXNGaXJzdExpbmUpOwotICAgICAgICBhdXRvIGxpbmVMb2dpY2FsUmVjdCA9
IGNyZWF0ZURpc3BsYXlCb3hlc0ZvckxpbmVDb250ZW50KGxpbmVDb250ZW50LCBjb25zdHJhaW50
cy5ob3Jpem9udGFsKTsKKyAgICAgICAgYXV0byBsaW5lTG9naWNhbFJlY3QgPSBjb21wdXRlR2Vv
bWV0cnlGb3JMaW5lQ29udGVudChsaW5lQ29udGVudCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7
CiAKICAgICAgICAgYXV0byBsaW5lQ29udGVudFJhbmdlID0gbGluZUNvbnRlbnQuaW5saW5lSXRl
bVJhbmdlOwogICAgICAgICBpZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CkBAIC0y
MzIsOSArMjMyLDkgQEAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW4KICAgICAgICAgLy8gU3dpdGNo
IHRvIHRoZSBtaW4vbWF4IGZvcm1hdHRpbmcgcm9vdCB3aWR0aCB2YWx1ZXMgYmVmb3JlIGZvcm1h
dHRpbmcgdGhlIGxpbmVzLgogICAgICAgICBmb3IgKGF1dG8qIGZvcm1hdHRpbmdSb290IDogZm9y
bWF0dGluZ0NvbnRleHRSb290TGlzdCkgewogICAgICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0
aHMgPSBsYXlvdXRTdGF0ZS5mb3JtYXR0aW5nU3RhdGVGb3JCb3goKmZvcm1hdHRpbmdSb290KS5p
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KCpmb3JtYXR0aW5nUm9vdCk7Ci0gICAgICAg
ICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveCgqZm9y
bWF0dGluZ1Jvb3QpOwotICAgICAgICAgICAgYXV0byBjb250ZW50V2lkdGggPSAoYXZhaWxhYmxl
V2lkdGggPyBpbnRyaW5zaWNXaWR0aHMtPm1heGltdW0gOiBpbnRyaW5zaWNXaWR0aHMtPm1pbmlt
dW0pIC0gZGlzcGxheUJveC5ob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpOwotICAg
ICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdpZHRoKTsKKyAg
ICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0
cnkoKmZvcm1hdHRpbmdSb290KTsKKyAgICAgICAgICAgIGF1dG8gY29udGVudFdpZHRoID0gKGF2
YWlsYWJsZVdpZHRoID8gaW50cmluc2ljV2lkdGhzLT5tYXhpbXVtIDogaW50cmluc2ljV2lkdGhz
LT5taW5pbXVtKSAtIGJveEdlb21ldHJ5Lmhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5n
KCk7CisgICAgICAgICAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdp
ZHRoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZv
ckNvbnN0cmFpbnQoYXZhaWxhYmxlV2lkdGgpOwogICAgIH07CkBAIC0yNzgsNyArMjc4LDcgQEAg
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9y
bWF0dGluZ1Jvb3QoY29uc3QgQm94Jgogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUhvcml6b250YWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIGF1dG8gY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luID0gZ2VvbWV0cnkoKS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4o
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIGZvcm1hdHRpbmdTdGF0ZSgp
LmRpc3BsYXlCb3gobGF5b3V0Qm94KS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5l
bmQudmFsdWVPcigwKSB9KTsKKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlv
dXRCb3gpLnNldEhvcml6b250YWxNYXJnaW4oeyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3Rh
cnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH0p
OwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJn
aW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9y
aXpvbnRhbENvbnN0cmFpbnRzKQpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwg
Y29uc3QKICAgICBpZiAoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbldp
ZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkKICAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2lu
ID0gbWluV2lkdGhBbmRNYXJnaW47CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGlu
Z1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpOwotICAgIGRpc3BsYXlCb3guc2V0Q29udGVu
dEJveFdpZHRoKGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpOwotICAgIGRpc3Bs
YXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFy
Z2luLnN0YXJ0LCBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5lbmQgfSk7CisgICAg
YXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRC
b3gpOworICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50V2lkdGhBbmRN
YXJnaW4uY29udGVudFdpZHRoKTsKKyAgICBib3hHZW9tZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2lu
KHsgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uc3RhcnQsIGNvbnRlbnRXaWR0aEFu
ZE1hcmdpbi51c2VkTWFyZ2luLmVuZCB9KTsKIH0KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
SG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCkBAIC0zMzgsOSAr
MzM4LDkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1h
cmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QKICAgICAgICAgaWYgKGNvbnRlbnRIZWln
aHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA8IG1pbkhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVp
Z2h0KQogICAgICAgICAgICAgY29udGVudEhlaWdodEFuZE1hcmdpbiA9IG1pbkhlaWdodEFuZE1h
cmdpbjsKICAgICB9Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRp
c3BsYXlCb3gobGF5b3V0Qm94KTsKLSAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQo
Y29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KTsKLSAgICBkaXNwbGF5Qm94LnNl
dFZlcnRpY2FsTWFyZ2luKHsgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJn
aW4uYmVmb3JlLCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbi5hZnRl
ciB9KTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21l
dHJ5KGxheW91dEJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChjb250
ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQpOworICAgIGJveEdlb21ldHJ5LnNldFZl
cnRpY2FsTWFyZ2luKHsgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4u
YmVmb3JlLCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbi5hZnRlciB9
KTsKIH0KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRl
bnRJZk5lZWRlZCgpCkBAIC00NDAsNyArNDQwLDcgQEAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmVSZWN0QW5kTGluZUJveE9mZnNldCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHUK
ICAgICByZXR1cm4geyBsaW5lQm94T2Zmc2V0LCBsb2dpY2FsUmVjdCB9OwogfQogCi1EaXNwbGF5
OjpJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpjcmVhdGVEaXNwbGF5Qm94ZXNG
b3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKK0Rp
c3BsYXk6OklubGluZVJlY3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVHZW9tZXRy
eUZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRl
bnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQog
ewogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwog
ICAgIGF1dG8mIGxpbmVCb3ggPSBsaW5lQ29udGVudC5saW5lQm94OwpAQCAtNDU0LDEyICs0NTQs
MTIgQEAgRGlzcGxheTo6SW5saW5lUmVjdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRl
RGlzcGxheUJveGVzRm9yTGluZUNvbnRlbnQoY28KICAgICAgICAgLy8gTW92ZSBmbG9hdHMgdG8g
dGhlaXIgZmluYWwgcG9zaXRpb24uCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZmxvYXRDYW5k
aWRhdGUgOiBsaW5lQ29udGVudC5mbG9hdHMpIHsKICAgICAgICAgICAgIGF1dG8mIGZsb2F0Qm94
ID0gZmxvYXRDYW5kaWRhdGUuaXRlbS0+bGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3goZmxvYXRCb3gpOworICAgICAg
ICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUuYm94R2VvbWV0cnkoZmxv
YXRCb3gpOwogICAgICAgICAgICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJzdC4KICAgICAg
ICAgICAgIGF1dG8gdmVydGljYWxTdGF0aWNQb3NpdGlvbiA9IGZsb2F0Q2FuZGlkYXRlLmlzSW50
cnVzaXZlID8gbGluZUxvZ2ljYWxSZWN0LnRvcCgpIDogbGluZUxvZ2ljYWxSZWN0LmJvdHRvbSgp
OwotICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHsgbGluZUxvZ2ljYWxSZWN0Lmxl
ZnQoKSwgdmVydGljYWxTdGF0aWNQb3NpdGlvbiB9KTsKKyAgICAgICAgICAgIGJveEdlb21ldHJ5
LnNldFRvcExlZnQoeyBsaW5lTG9naWNhbFJlY3QubGVmdCgpLCB2ZXJ0aWNhbFN0YXRpY1Bvc2l0
aW9uIH0pOwogICAgICAgICAgICAgLy8gRmxvYXQgaXQuCi0gICAgICAgICAgICBkaXNwbGF5Qm94
LnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQoZmxvYXRCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cykpOworICAgICAgICAgICAgYm94R2VvbWV0cnkuc2V0VG9wTGVm
dChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChmbG9hdEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzKSk7CiAgICAgICAgICAgICBmbG9hdGluZ0NvbnRleHQuYXBwZW5kKGZsb2F0Qm94
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTUwNiwyMSArNTA2LDIxIEBAIERpc3BsYXk6OklubGlu
ZVJlY3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNyZWF0ZURpc3BsYXlCb3hlc0ZvckxpbmVD
b250ZW50KGNvCiAKICAgICAgICAgLy8gQ3JlYXRlIGRpc3BsYXkgYm94ZXMuCiAgICAgICAgIC8v
IEZJWE1FOiBTaW5jZSA8YnI+IGFuZCA8d2JyPiBydW5zIGhhdmUgYXNzb2NpYXRlZCBET00gZWxl
bWVudHMsIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IGEgZGlzcGxheSBib3ggaGVyZS4gCi0g
ICAgICAgIGF1dG8gaW5pdGlhdGVzRGlzcGxheUJveCA9IGxpbmVSdW4uaXNCb3goKSB8fCBsaW5l
UnVuLmlzQ29udGFpbmVyU3RhcnQoKTsKLSAgICAgICAgaWYgKGluaXRpYXRlc0Rpc3BsYXlCb3gp
IHsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxh
eUJveChsYXlvdXRCb3gpOworICAgICAgICBhdXRvIG5lZWRzQm94R2VvbWV0cnkgPSBsaW5lUnVu
LmlzQm94KCkgfHwgbGluZVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCk7CisgICAgICAgIGlmIChuZWVk
c0JveEdlb21ldHJ5KSB7CisgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdTdGF0ZS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpOwogICAgICAgICAgICAgYXV0byYgaW5saW5l
Qm94ID0gbGluZUJveC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICAgICAg
ICAgIGF1dG8gdG9wTGVmdCA9IGlubGluZUJveC5sb2dpY2FsUmVjdCgpLnRvcExlZnQoKTsKICAg
ICAgICAgICAgIHRvcExlZnQubW92ZSh7IH0sIGxpbmVCb3hWZXJ0aWNhbE9mZnNldCk7CiAgICAg
ICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAg
ICAgIHRvcExlZnQgKz0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQo
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgICAgICAgICAgZGlzcGxheUJv
eC5zZXRUb3BMZWZ0KHRvTGF5b3V0UG9pbnQodG9wTGVmdCkpOworICAgICAgICAgICAgYm94R2Vv
bWV0cnkuc2V0VG9wTGVmdCh0b0xheW91dFBvaW50KHRvcExlZnQpKTsKICAgICAgICAgICAgIGlm
IChsaW5lUnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewogICAgICAgICAgICAgICAgIGF1dG8gbWFy
Z2luQm94V2lkdGggPSBpbmxpbmVCb3gubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICAgICAg
YXV0byBjb250ZW50Qm94V2lkdGggPSBtYXJnaW5Cb3hXaWR0aCAtIChkaXNwbGF5Qm94Lm1hcmdp
blN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xl
ZnQoKS52YWx1ZU9yKDApKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnRlbnRCb3hXaWR0aCA9
IG1hcmdpbkJveFdpZHRoIC0gKGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkgKyBib3hHZW9tZXRy
eS5ib3JkZXJMZWZ0KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCkpOwog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGaXggaXQgZm9yIG11bHRpbGluZS4KLSAgICAgICAg
ICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aCh0b0xheW91dFVuaXQoY29udGVu
dEJveFdpZHRoKSk7Ci0gICAgICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVp
Z2h0KHRvTGF5b3V0VW5pdChpbmxpbmVCb3gubG9naWNhbEhlaWdodCgpKSk7CisgICAgICAgICAg
ICAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKHRvTGF5b3V0VW5pdChjb250ZW50
Qm94V2lkdGgpKTsKKyAgICAgICAgICAgICAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94SGVp
Z2h0KHRvTGF5b3V0VW5pdChpbmxpbmVCb3gubG9naWNhbEhlaWdodCgpKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRl
eCBkYzk5NjliZTJjZjRhOTgyOTUxNmEyZjBlNWRjNmQ1NjIxN2ViMzgwLi4xOTNjODZmZmM4MGM2
YWUzZTcxMTdmMWFjNjRmM2MyMTM4MDIxZmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVXaWR0aEFu
ZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKIAogICAg
IHZvaWQgY29sbGVjdElubGluZUNvbnRlbnRJZk5lZWRlZCgpOwotICAgIERpc3BsYXk6OklubGlu
ZVJlY3QgY3JlYXRlRGlzcGxheUJveGVzRm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6
OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CisgICAgRGlzcGxh
eTo6SW5saW5lUmVjdCBjb21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVp
bGRlcjo6TGluZUNvbnRlbnQmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKICAgICBz
dHJ1Y3QgTGluZVJlY3RBbmRMaW5lQm94T2Zmc2V0IHsKICAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBsaW5lQm94VmVydGljYWxPZmZzZXQ7CiAgICAgICAgIERpc3BsYXk6OklubGluZVJlY3QgbG9n
aWNhbFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQm94LmgKaW5kZXggZmM3NWZlMWY0MmJjZTg1OTBmODZiZDg5OTUxZGU1
MWY1ZjNlY2QzMC4uY2MzMWQxZmFhZjRjODZmOWJkZmQ5MDViNjMxZmE0YTI4MDEwMDJlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCb3guaApAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiRGlzcGxheUlubGluZVJl
Y3QuaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lLmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnku
aCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxk
ZXIuY3BwCmluZGV4IGExNTA4NTA1OGI3ZDA0MTRkYWZkZTkyNGI2YTVkZWFmNzg5MGEwNzcuLmYx
YzIyZjI0NmY0MThiMTYwOGUzOWIwNzMwMjBlMDJkZGMyNDJjM2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVp
bGRlci5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheW91dEJv
eC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2Vv
bWV0cnkuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
VGV4dFV0aWwuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCA3N2Ex
ZGMyZjAxYjZlOTZlMjdlMDlhNGMxMDc1ZmU3ODQ0YThkNmNiLi45MGQ4Y2QxYTlkZmZmYTQzY2I5
YmVhN2FlMTUwMGY1MTllMmM0YWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNw
cApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0
aW9uU3RhdGUuaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91
dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTEzOCwxOSAr
MTM4LDE5IEBAIHZvaWQgTGluZUxheW91dDo6cHJlcGFyZUZsb2F0aW5nU3RhdGUoKQogICAgICAg
ICBhdXRvIHBvc2l0aW9uID0gZmxvYXRpbmdPYmplY3QtPnR5cGUoKSA9PSBGbG9hdGluZ09iamVj
dDo6RmxvYXRSaWdodAogICAgICAgICAgICAgPyBMYXlvdXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0
SXRlbTo6UG9zaXRpb246OlJpZ2h0CiAgICAgICAgICAgICA6IExheW91dDo6RmxvYXRpbmdTdGF0
ZTo6RmxvYXRJdGVtOjpQb3NpdGlvbjo6TGVmdDsKLSAgICAgICAgYXV0byBib3ggPSBMYXlvdXQ6
Okdlb21ldHJ5IHsgfTsKKyAgICAgICAgYXV0byBib3hHZW9tZXRyeSA9IExheW91dDo6Qm94R2Vv
bWV0cnkgeyB9OwogICAgICAgICAvLyBGSVhNRTogV2UgYXJlIGZsb29yaW5nIGhlcmUgZm9yIGxl
Z2FjeSBjb21wYXRpYmlsaXR5LgogICAgICAgICAvLyAgICAgICAgU2VlIEZsb2F0aW5nT2JqZWN0
czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdC4KICAgICAgICAgYXV0byB5ID0gcmVjdC55KCku
Zmxvb3IoKTsKICAgICAgICAgYXV0byBtYXhZID0gcmVjdC5tYXhZKCkuZmxvb3IoKTsKLSAgICAg
ICAgYm94LnNldFRvcExlZnQoeyByZWN0LngoKSwgeSB9KTsKLSAgICAgICAgYm94LnNldENvbnRl
bnRCb3hXaWR0aChyZWN0LndpZHRoKCkpOwotICAgICAgICBib3guc2V0Q29udGVudEJveEhlaWdo
dChtYXhZIC0geSk7Ci0gICAgICAgIGJveC5zZXRCb3JkZXIoeyB9KTsKLSAgICAgICAgYm94LnNl
dFBhZGRpbmcoeyB9KTsKLSAgICAgICAgYm94LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKLSAg
ICAgICAgYm94LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7Ci0gICAgICAgIGZsb2F0aW5nU3RhdGUu
YXBwZW5kKHsgcG9zaXRpb24sIGJveCB9KTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0VG9wTGVm
dCh7IHJlY3QueCgpLCB5IH0pOworICAgICAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lk
dGgocmVjdC53aWR0aCgpKTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdo
dChtYXhZIC0geSk7CisgICAgICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcih7IH0pOworICAgICAg
ICBib3hHZW9tZXRyeS5zZXRQYWRkaW5nKHsgfSk7CisgICAgICAgIGJveEdlb21ldHJ5LnNldEhv
cml6b250YWxNYXJnaW4oeyB9KTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJn
aW4oeyB9KTsKKyAgICAgICAgZmxvYXRpbmdTdGF0ZS5hcHBlbmQoeyBwb3NpdGlvbiwgYm94R2Vv
bWV0cnkgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
bGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRy
ZWUvTGF5b3V0Qm94LmNwcAppbmRleCA4ZTE1ODEzYmJkMTBmM2ZhMTEyZjRkZTEzMzk0YjJkYzdj
YmE5NzFlLi5lYWM1ZWViMTZhM2MzMzhhNGZlZDhmYTVhZjZhMzY4ZDQxYmVhMDIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKQEAgLTI4LDgg
KzI4LDggQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5j
bHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXJCb3gu
aCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxD
b250YWluaW5nQmxvY2suaCIKICNpbmNsdWRlICJMYXlvdXRQaGFzZS5oIgogI2luY2x1ZGUgIkxh
eW91dFN0YXRlLmgiCkBAIC00NTQsMTEgKzQ1NCwxMSBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBC
b3g6OmNvbHVtbldpZHRoKCkgY29uc3QKICAgICByZXR1cm4gcmFyZURhdGEoKS5jb2x1bW5XaWR0
aDsKIH0KIAotdm9pZCBCb3g6OnNldENhY2hlZERpc3BsYXlCb3hGb3JMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIHN0ZDo6dW5pcXVlX3B0cjxHZW9tZXRyeT4gYm94KSBjb25z
dAordm9pZCBCb3g6OnNldGNhY2hlZEdlb21ldHJ5Rm9yTGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBzdGQ6OnVuaXF1ZV9wdHI8Qm94R2VvbWV0cnk+IGdlb21ldHJ5KSBjb25z
dAogewogICAgIEFTU0VSVCghbV9jYWNoZWRMYXlvdXRTdGF0ZSk7CiAgICAgbV9jYWNoZWRMYXlv
dXRTdGF0ZSA9IG1ha2VXZWFrUHRyKGxheW91dFN0YXRlKTsKLSAgICBtX2NhY2hlZERpc3BsYXlC
b3hGb3JMYXlvdXRTdGF0ZSA9IFdURk1vdmUoYm94KTsKKyAgICBtX2NhY2hlZEdlb21ldHJ5Rm9y
TGF5b3V0U3RhdGUgPSBXVEZNb3ZlKGdlb21ldHJ5KTsKIH0KIAogQm94OjpSYXJlRGF0YU1hcCYg
Qm94OjpyYXJlRGF0YU1hcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5
b3V0dHJlZS9MYXlvdXRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xh
eW91dEJveC5oCmluZGV4IGE1MWZhYWY1Mjg4NmMyNzI4MGM2NTUxZDBhZmNiNjAzMGM3NzA4N2Eu
LjU2ZGIyMDllMzM2ODFhOGRkNTkyNWFjYzZhZmI1ZWY3MTNhMGYzYzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCkBAIC0zNyw3ICszNyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBDb250YWluZXJC
b3g7Ci1jbGFzcyBHZW9tZXRyeTsKK2NsYXNzIEJveEdlb21ldHJ5OwogY2xhc3MgSW5pdGlhbENv
bnRhaW5pbmdCbG9jazsKIGNsYXNzIExheW91dFN0YXRlOwogY2xhc3MgVHJlZUJ1aWxkZXI7CkBA
IC0xNzAsOCArMTcwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNBbm9ueW1vdXMoKSB7IG1f
aXNBbm9ueW1vdXMgPSB0cnVlOyB9CiAKICAgICBib29sIGNhbkNhY2hlRm9yTGF5b3V0U3RhdGUo
Y29uc3QgTGF5b3V0U3RhdGUmKSBjb25zdDsKLSAgICBHZW9tZXRyeSogY2FjaGVkRGlzcGxheUJv
eEZvckxheW91dFN0YXRlKGNvbnN0IExheW91dFN0YXRlJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRD
YWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUmLCBzdGQ6OnVuaXF1ZV9w
dHI8R2VvbWV0cnk+KSBjb25zdDsKKyAgICBCb3hHZW9tZXRyeSogY2FjaGVkR2VvbWV0cnlGb3JM
YXlvdXRTdGF0ZShjb25zdCBMYXlvdXRTdGF0ZSYpIGNvbnN0OworICAgIHZvaWQgc2V0Y2FjaGVk
R2VvbWV0cnlGb3JMYXlvdXRTdGF0ZShMYXlvdXRTdGF0ZSYsIHN0ZDo6dW5pcXVlX3B0cjxCb3hH
ZW9tZXRyeT4pIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgQm94KE9wdGlvbmFsPEVsZW1lbnRB
dHRyaWJ1dGVzPiwgUmVuZGVyU3R5bGUmJiwgT3B0aW9uU2V0PEJhc2VUeXBlRmxhZz4pOwpAQCAt
MjA3LDcgKzIwNyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gRmlyc3QgTGF5b3V0U3RhdGUg
Z2V0cyBhIGRpcmVjdCBjYWNoZS4KICAgICBtdXRhYmxlIFdlYWtQdHI8TGF5b3V0U3RhdGU+IG1f
Y2FjaGVkTGF5b3V0U3RhdGU7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8R2VvbWV0cnk+
IG1fY2FjaGVkRGlzcGxheUJveEZvckxheW91dFN0YXRlOworICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPEJveEdlb21ldHJ5PiBtX2NhY2hlZEdlb21ldHJ5Rm9yTGF5b3V0U3RhdGU7CiAKICAg
ICB1bnNpZ25lZCBtX2Jhc2VUeXBlRmxhZ3MgOiA2OyAvLyBPcHRpb25TZXQ8QmFzZVR5cGVGbGFn
PgogICAgIGJvb2wgbV9oYXNSYXJlRGF0YSA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y0
NzI2ODViZmE5ODA5YmRmYTgyZTM1MzFhZjU2MTM5MmFlOGNmYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5LmNwcApA
QCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCisKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEJveEdlb21ldHJ5KTsKKworQm94R2VvbWV0cnk6OkJveEdlb21ldHJ5KGNvbnN0IEJv
eEdlb21ldHJ5JiBvdGhlcikKKyAgICA6IG1fdG9wTGVmdChvdGhlci5tX3RvcExlZnQpCisgICAg
LCBtX2NvbnRlbnRXaWR0aChvdGhlci5tX2NvbnRlbnRXaWR0aCkKKyAgICAsIG1fY29udGVudEhl
aWdodChvdGhlci5tX2NvbnRlbnRIZWlnaHQpCisgICAgLCBtX2hvcml6b250YWxNYXJnaW4ob3Ro
ZXIubV9ob3Jpem9udGFsTWFyZ2luKQorICAgICwgbV92ZXJ0aWNhbE1hcmdpbihvdGhlci5tX3Zl
cnRpY2FsTWFyZ2luKQorICAgICwgbV9oYXNDbGVhcmFuY2Uob3RoZXIubV9oYXNDbGVhcmFuY2Up
CisgICAgLCBtX2JvcmRlcihvdGhlci5tX2JvcmRlcikKKyAgICAsIG1fcGFkZGluZyhvdGhlci5t
X3BhZGRpbmcpCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAsIG1faGFzVmFsaWRUb3Aob3RoZXIu
bV9oYXNWYWxpZFRvcCkKKyAgICAsIG1faGFzVmFsaWRMZWZ0KG90aGVyLm1faGFzVmFsaWRMZWZ0
KQorICAgICwgbV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4ob3RoZXIubV9oYXNWYWxpZEhvcml6
b250YWxNYXJnaW4pCisgICAgLCBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4ob3RoZXIubV9oYXNW
YWxpZFZlcnRpY2FsTWFyZ2luKQorICAgICwgbV9oYXNWYWxpZEJvcmRlcihvdGhlci5tX2hhc1Zh
bGlkQm9yZGVyKQorICAgICwgbV9oYXNWYWxpZFBhZGRpbmcob3RoZXIubV9oYXNWYWxpZFBhZGRp
bmcpCisgICAgLCBtX2hhc1ZhbGlkQ29udGVudEhlaWdodChvdGhlci5tX2hhc1ZhbGlkQ29udGVu
dEhlaWdodCkKKyAgICAsIG1faGFzVmFsaWRDb250ZW50V2lkdGgob3RoZXIubV9oYXNWYWxpZENv
bnRlbnRXaWR0aCkKKyAgICAsIG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUob3RoZXIubV9o
YXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSkKKyNlbmRpZgoreworfQorCitCb3hHZW9tZXRyeTo6
fkJveEdlb21ldHJ5KCkKK3sKK30KKworUmVjdCBCb3hHZW9tZXRyeTo6bWFyZ2luQm94KCkgY29u
c3QKK3sKKyAgICBhdXRvIGJvcmRlckJveCA9IHRoaXMtPmJvcmRlckJveCgpOworCisgICAgUmVj
dCBtYXJnaW5Cb3g7CisgICAgbWFyZ2luQm94LnNldFRvcChib3JkZXJCb3gudG9wKCkgLSBtYXJn
aW5CZWZvcmUoKSk7CisgICAgbWFyZ2luQm94LnNldExlZnQoYm9yZGVyQm94LmxlZnQoKSAtIG1h
cmdpblN0YXJ0KCkpOworICAgIG1hcmdpbkJveC5zZXRIZWlnaHQoYm9yZGVyQm94LmhlaWdodCgp
ICsgbWFyZ2luQmVmb3JlKCkgKyBtYXJnaW5BZnRlcigpKTsKKyAgICBtYXJnaW5Cb3guc2V0V2lk
dGgoYm9yZGVyQm94LndpZHRoKCkgKyBtYXJnaW5TdGFydCgpICsgbWFyZ2luRW5kKCkpOworICAg
IHJldHVybiBtYXJnaW5Cb3g7Cit9CisKK1JlY3QgQm94R2VvbWV0cnk6OmJvcmRlckJveCgpIGNv
bnN0Cit7CisgICAgUmVjdCBib3JkZXJCb3g7CisgICAgYm9yZGVyQm94LnNldFRvcExlZnQoeyB9
KTsKKyAgICBib3JkZXJCb3guc2V0U2l6ZSh7IHdpZHRoKCksIGhlaWdodCgpIH0pOworICAgIHJl
dHVybiBib3JkZXJCb3g7Cit9CisKK1JlY3QgQm94R2VvbWV0cnk6OnBhZGRpbmdCb3goKSBjb25z
dAoreworICAgIGF1dG8gYm9yZGVyQm94ID0gdGhpcy0+Ym9yZGVyQm94KCk7CisKKyAgICBSZWN0
IHBhZGRpbmdCb3g7CisgICAgcGFkZGluZ0JveC5zZXRUb3AoYm9yZGVyQm94LnRvcCgpICsgYm9y
ZGVyVG9wKCkpOworICAgIHBhZGRpbmdCb3guc2V0TGVmdChib3JkZXJCb3gubGVmdCgpICsgYm9y
ZGVyTGVmdCgpKTsKKyAgICBwYWRkaW5nQm94LnNldEhlaWdodChib3JkZXJCb3guYm90dG9tKCkg
LSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKKyAgICBwYWRkaW5nQm94LnNldFdpZHRo
KGJvcmRlckJveC53aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSk7CisgICAg
cmV0dXJuIHBhZGRpbmdCb3g7Cit9CisKK1JlY3QgQm94R2VvbWV0cnk6OmNvbnRlbnRCb3goKSBj
b25zdAoreworICAgIFJlY3QgY29udGVudEJveDsKKyAgICBjb250ZW50Qm94LnNldFRvcChjb250
ZW50Qm94VG9wKCkpOworICAgIGNvbnRlbnRCb3guc2V0TGVmdChjb250ZW50Qm94TGVmdCgpKTsK
KyAgICBjb250ZW50Qm94LnNldFdpZHRoKGNvbnRlbnRCb3hXaWR0aCgpKTsKKyAgICBjb250ZW50
Qm94LnNldEhlaWdodChjb250ZW50Qm94SGVpZ2h0KCkpOworICAgIHJldHVybiBjb250ZW50Qm94
OworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2xheW91dHRyZWUvTGF5b3V0Qm94R2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9s
YXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIxMGQ1NTA4MDExYmNh
ZTY3MTZkYmFjYTRjYTMzNjRhODk4MThlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5LmgKQEAgLTAsMCArMSw2ODgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxheVJlY3QuaCIKKyNpbmNsdWRlICJMYXlv
dXRVbml0cy5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIFJlY3QgeworcHVibGljOgorICAgIFJl
Y3QoKSA9IGRlZmF1bHQ7CisgICAgUmVjdChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCBsZWZ0
LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCk7CisgICAgUmVjdChMYXlvdXRQ
b2ludCB0b3BMZWZ0LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCk7CisgICAg
UmVjdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgY29uc3QgTGF5b3V0U2l6ZSYpOworICAg
IAorICAgIExheW91dFVuaXQgdG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29u
c3Q7CisgICAgTGF5b3V0UG9pbnQgdG9wTGVmdCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBi
b3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0
UG9pbnQgYm90dG9tUmlnaHQoKSBjb25zdDsKKworICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25z
dDsKKyAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0OworICAgIExheW91dFNpemUgc2l6ZSgp
IGNvbnN0OworCisgICAgdm9pZCBzZXRUb3AoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRMZWZ0
KExheW91dFVuaXQpOworICAgIHZvaWQgc2V0VG9wTGVmdChjb25zdCBMYXlvdXRQb2ludCYpOwor
ICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRIZWlnaHQoTGF5b3V0
VW5pdCk7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IExheW91dFNpemUmKTsKKworICAgIHZvaWQg
c2hpZnRMZWZ0VG8oTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzaGlmdFJpZ2h0VG8oTGF5b3V0VW5p
dCk7CisgICAgdm9pZCBzaGlmdFRvcFRvKExheW91dFVuaXQpOworICAgIHZvaWQgc2hpZnRCb3R0
b21UbyhMYXlvdXRVbml0KTsKKworICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0
KTsKKyAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KExheW91dFVuaXQpOworCisgICAgdm9pZCBleHBh
bmQoT3B0aW9uYWw8TGF5b3V0VW5pdD4sIE9wdGlvbmFsPExheW91dFVuaXQ+KTsKKyAgICB2b2lk
IGV4cGFuZEhvcml6b250YWxseShMYXlvdXRVbml0IGRlbHRhKSB7IGV4cGFuZChkZWx0YSwgeyB9
KTsgfQorICAgIHZvaWQgZXhwYW5kVmVydGljYWxseShMYXlvdXRVbml0IGRlbHRhKSB7IGV4cGFu
ZCh7IH0sIGRlbHRhKTsgfQorICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBSZWN0JiByZWN0KSBj
b25zdCB7IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0cyhyZWN0KTsgfQorCisgICAgUmVjdCBjbG9u
ZSgpIGNvbnN0OworICAgIG9wZXJhdG9yIExheW91dFJlY3QoKSBjb25zdDsKKworcHJpdmF0ZToK
KyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHZvaWQgaW52YWxpZGF0ZVRvcCgpIHsgbV9oYXNWYWxp
ZFRvcCA9IGZhbHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlTGVmdCgpIHsgbV9oYXNWYWxpZExl
ZnQgPSBmYWxzZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVdpZHRoKCkgeyBtX2hhc1ZhbGlkV2lk
dGggPSBmYWxzZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZUhlaWdodCgpIHsgbV9oYXNWYWxpZEhl
aWdodCA9IGZhbHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUG9zaXRpb24oKTsKKworICAgIGJv
b2wgaGFzVmFsaWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRUb3AgJiYgbV9o
YXNWYWxpZExlZnQ7IH0KKyAgICBib29sIGhhc1ZhbGlkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzVmFsaWRXaWR0aCAmJiBtX2hhc1ZhbGlkSGVpZ2h0OyB9CisgICAgYm9vbCBoYXNWYWxpZEdl
b21ldHJ5KCkgY29uc3QgeyByZXR1cm4gaGFzVmFsaWRQb3NpdGlvbigpICYmIGhhc1ZhbGlkU2l6
ZSgpOyB9CisKKyAgICB2b2lkIHNldEhhc1ZhbGlkUG9zaXRpb24oKTsKKyAgICB2b2lkIHNldEhh
c1ZhbGlkU2l6ZSgpOworCisgICAgYm9vbCBtX2hhc1ZhbGlkVG9wIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1faGFzVmFsaWRMZWZ0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzVmFsaWRXaWR0aCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkSGVpZ2h0IHsgZmFsc2UgfTsKKyNlbmRpZiAv
LyBBU1NFUlRfRU5BQkxFRAorICAgIExheW91dFJlY3QgbV9yZWN0OworfTsKKworaW5saW5lIFJl
Y3Q6OlJlY3QoTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB3aWR0
aCwgTGF5b3V0VW5pdCBoZWlnaHQpCisgICAgOiBtX3JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVp
Z2h0KQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7Cisg
ICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworICAgIG1faGFzVmFsaWRXaWR0aCA9IHRydWU7Cisg
ICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYKK30KKworaW5saW5lIFJlY3Q6OlJl
Y3QoTGF5b3V0UG9pbnQgdG9wTGVmdCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWln
aHQpCisgICAgOiBSZWN0KHRvcExlZnQueSgpLCB0b3BMZWZ0LngoKSwgd2lkdGgsIGhlaWdodCkK
K3sKK30KKworaW5saW5lIFJlY3Q6OlJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIGNv
bnN0IExheW91dFNpemUmIHNpemUpCisgICAgOiBSZWN0KHRvcExlZnQueSgpLCB0b3BMZWZ0Lngo
KSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKQoreworfQorCisjaWYgQVNTRVJUX0VOQUJM
RUQKK2lubGluZSB2b2lkIFJlY3Q6OmludmFsaWRhdGVQb3NpdGlvbigpCit7CisgICAgaW52YWxp
ZGF0ZVRvcCgpOworICAgIGludmFsaWRhdGVMZWZ0KCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6
OnNldEhhc1ZhbGlkUG9zaXRpb24oKQoreworICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOworICAg
IG1faGFzVmFsaWRMZWZ0ID0gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2V0SGFzVmFs
aWRTaXplKCkKK3sKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOworICAgIG1faGFzVmFsaWRI
ZWlnaHQgPSB0cnVlOworfQorI2VuZGlmCisKK2lubGluZSBMYXlvdXRVbml0IFJlY3Q6OnRvcCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAgIHJldHVybiBtX3JlY3Qu
eSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpsZWZ0KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIHJldHVybiBtX3JlY3QueCgpOworfQorCitpbmxp
bmUgTGF5b3V0VW5pdCBSZWN0Ojpib3R0b20oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1Zh
bGlkVG9wICYmIG1faGFzVmFsaWRIZWlnaHQpOworICAgIHJldHVybiBtX3JlY3QubWF4WSgpOwor
fQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpyaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRXaWR0aCk7CisgICAgcmV0dXJuIG1fcmVjdC5t
YXhYKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0Ojp0b3BMZWZ0KCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoaGFzVmFsaWRQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gbV9yZWN0Lm1pblhN
aW5ZQ29ybmVyKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0Ojpib3R0b21SaWdodCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7CisgICAgcmV0dXJuIG1f
cmVjdC5tYXhYTWF4WUNvcm5lcigpOworfQorCitpbmxpbmUgTGF5b3V0U2l6ZSBSZWN0OjpzaXpl
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRTaXplKCkpOworICAgIHJldHVybiBtX3Jl
Y3Quc2l6ZSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0Ojp3aWR0aCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1faGFzVmFsaWRXaWR0aCk7CisgICAgcmV0dXJuIG1fcmVjdC53aWR0aCgp
OworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpoZWlnaHQoKSBjb25zdAoreworICAgIEFT
U0VSVChtX2hhc1ZhbGlkSGVpZ2h0KTsKKyAgICByZXR1cm4gbV9yZWN0LmhlaWdodCgpOworfQor
CitpbmxpbmUgdm9pZCBSZWN0OjpzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0
KQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgc2V0SGFzVmFsaWRQb3NpdGlvbigpOworI2Vu
ZGlmCisgICAgbV9yZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOworfQorCitpbmxpbmUgdm9pZCBS
ZWN0OjpzZXRUb3AoTGF5b3V0VW5pdCB0b3ApCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBt
X2hhc1ZhbGlkVG9wID0gdHJ1ZTsKKyNlbmRpZgorICAgIG1fcmVjdC5zZXRZKHRvcCk7Cit9CisK
K2lubGluZSB2b2lkIFJlY3Q6OnNldExlZnQoTGF5b3V0VW5pdCBsZWZ0KQoreworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworI2VuZGlmCisgICAgbV9yZWN0
LnNldFgobGVmdCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldFdpZHRoKExheW91dFVuaXQg
d2lkdGgpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVl
OworI2VuZGlmCisgICAgbV9yZWN0LnNldFdpZHRoKHdpZHRoKTsKK30KKworaW5saW5lIHZvaWQg
UmVjdDo6c2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KQoreworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0SGVp
Z2h0KGhlaWdodCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldFNpemUoY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHNldEhhc1ZhbGlkU2l6ZSgp
OworI2VuZGlmCisgICAgbV9yZWN0LnNldFNpemUoc2l6ZSk7Cit9CisKK2lubGluZSB2b2lkIFJl
Y3Q6OnNoaWZ0TGVmdFRvKExheW91dFVuaXQgbGVmdCkKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxp
ZExlZnQpOworICAgIG1fcmVjdC5zaGlmdFhFZGdlVG8obGVmdCk7Cit9CisKK2lubGluZSB2b2lk
IFJlY3Q6OnNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0IHJpZ2h0KQoreworICAgIEFTU0VSVChtX2hh
c1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkV2lkdGgpOworICAgIG1fcmVjdC5zaGlmdE1heFhFZGdl
VG8ocmlnaHQpOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzaGlmdFRvcFRvKExheW91dFVuaXQg
dG9wKQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wKTsKKyAgICBtX3JlY3Quc2hpZnRZRWRn
ZVRvKHRvcCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0Qm90dG9tVG8oTGF5b3V0VW5p
dCBib3R0b20pCit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgbV9oYXNWYWxpZEhlaWdo
dCk7CisgICAgbV9yZWN0LnNoaWZ0TWF4WUVkZ2VUbyhib3R0b20pOworfQorCitpbmxpbmUgdm9p
ZCBSZWN0Ojptb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQgb2Zmc2V0KQoreworICAgIEFTU0VS
VChtX2hhc1ZhbGlkTGVmdCk7CisgICAgbV9yZWN0Lm1vdmUoTGF5b3V0U2l6ZSB7IG9mZnNldCwg
MCB9KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6bW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBv
ZmZzZXQpCit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAgIG1fcmVjdC5tb3ZlKExh
eW91dFNpemUgeyAwLCBvZmZzZXQgfSk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OmV4cGFuZChP
cHRpb25hbDxMYXlvdXRVbml0PiB3aWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gaGVpZ2h0KQor
eworICAgIEFTU0VSVCghd2lkdGggfHwgbV9oYXNWYWxpZFdpZHRoKTsKKyAgICBBU1NFUlQoIWhl
aWdodCB8fCBtX2hhc1ZhbGlkSGVpZ2h0KTsKKyAgICBtX3JlY3QuZXhwYW5kKHdpZHRoLnZhbHVl
T3IoMCksIGhlaWdodC52YWx1ZU9yKDApKTsKK30KKworaW5saW5lIFJlY3QgUmVjdDo6Y2xvbmUo
KSBjb25zdAoreworICAgIFJlY3QgcmVjdDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHJlY3Qu
bV9oYXNWYWxpZFRvcCA9IG1faGFzVmFsaWRUb3A7CisgICAgcmVjdC5tX2hhc1ZhbGlkTGVmdCA9
IG1faGFzVmFsaWRMZWZ0OworICAgIHJlY3QubV9oYXNWYWxpZFdpZHRoID0gbV9oYXNWYWxpZFdp
ZHRoOworICAgIHJlY3QubV9oYXNWYWxpZEhlaWdodCAgPSBtX2hhc1ZhbGlkSGVpZ2h0OworI2Vu
ZGlmCisgICAgcmVjdC5tX3JlY3QgPSBtX3JlY3Q7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK2lu
bGluZSBSZWN0OjpvcGVyYXRvciBMYXlvdXRSZWN0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFz
VmFsaWRHZW9tZXRyeSgpKTsKKyAgICByZXR1cm4gbV9yZWN0OworfQorCisKK2NsYXNzIEJveEdl
b21ldHJ5IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEJveEdlb21ldHJ5KTsKK3B1Ymxp
YzoKKyAgICBCb3hHZW9tZXRyeShjb25zdCBCb3hHZW9tZXRyeSYpOworICAgIEJveEdlb21ldHJ5
KCkgPSBkZWZhdWx0OworICAgIH5Cb3hHZW9tZXRyeSgpOworCisgICAgTGF5b3V0VW5pdCB0b3Ao
KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxlZnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGJv
dHRvbSgpIGNvbnN0IHsgcmV0dXJuIHRvcCgpICsgaGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0
IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGVmdCgpICsgd2lkdGgoKTsgfQorCisgICAgTGF5b3V0
UG9pbnQgdG9wTGVmdCgpIGNvbnN0OworICAgIExheW91dFBvaW50IGJvdHRvbVJpZ2h0KCkgY29u
c3QgeyByZXR1cm4geyByaWdodCgpLCBib3R0b20oKSB9OyB9CisKKyAgICBMYXlvdXRTaXplIHNp
emUoKSBjb25zdCB7IHJldHVybiB7IHdpZHRoKCksIGhlaWdodCgpIH07IH0KKyAgICBMYXlvdXRV
bml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0JveFdpZHRo
KCkgKyBib3JkZXJSaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBib3JkZXJUb3AoKSArIHBhZGRpbmdCb3hIZWlnaHQoKSArIGJvcmRlckJvdHRvbSgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLmlzRW1wdHkoKTsgfQor
ICAgIFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIHsgdG9wKCksIGxlZnQoKSwgd2lkdGgoKSwg
aGVpZ2h0KCkgfTsgfQorICAgIFJlY3QgcmVjdFdpdGhNYXJnaW4oKSBjb25zdCB7IHJldHVybiB7
IHRvcCgpIC0gbWFyZ2luQmVmb3JlKCksIGxlZnQoKSAtIG1hcmdpblN0YXJ0KCksIG1hcmdpblN0
YXJ0KCkgKyB3aWR0aCgpICsgbWFyZ2luRW5kKCksIG1hcmdpbkJlZm9yZSgpICsgaGVpZ2h0KCkg
KyBtYXJnaW5BZnRlcigpIH07IH0KKworICAgIHN0cnVjdCBWZXJ0aWNhbE1hcmdpbiB7CisgICAg
ICAgIExheW91dFVuaXQgYmVmb3JlOworICAgICAgICBMYXlvdXRVbml0IGFmdGVyOworICAgIH07
CisgICAgVmVydGljYWxNYXJnaW4gdmVydGljYWxNYXJnaW4oKSBjb25zdDsKKworICAgIHN0cnVj
dCBIb3Jpem9udGFsTWFyZ2luIHsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGFydDsKKyAgICAgICAg
TGF5b3V0VW5pdCBlbmQ7CisgICAgfTsKKyAgICBIb3Jpem9udGFsTWFyZ2luIGhvcml6b250YWxN
YXJnaW4oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG1hcmdpbkJlZm9yZSgpIGNvbnN0OworICAg
IExheW91dFVuaXQgbWFyZ2luU3RhcnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG1hcmdpbkFm
dGVyKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQoKSBjb25zdDsKKyAgICBib29s
IGhhc0NsZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2xlYXJhbmNlOyB9CisKKyAgICBM
YXlvdXRVbml0IGJvcmRlclRvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVyTGVmdCgp
IGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVyQm90dG9tKCkgY29uc3Q7CisgICAgTGF5b3V0
VW5pdCBib3JkZXJSaWdodCgpIGNvbnN0OworICAgIExheW91dFVuaXQgdmVydGljYWxCb3JkZXIo
KSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpOyB9CisgICAgTGF5
b3V0VW5pdCBob3Jpem9udGFsQm9yZGVyKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpICsg
Ym9yZGVyUmlnaHQoKTsgfQorCisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ1RvcCgp
IGNvbnN0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHBhZGRpbmdMZWZ0KCkgY29uc3Q7Cisg
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ0JvdHRvbSgpIGNvbnN0OworICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IHBhZGRpbmdSaWdodCgpIGNvbnN0OworICAgIE9wdGlvbmFsPExheW91
dFVuaXQ+IHZlcnRpY2FsUGFkZGluZygpIGNvbnN0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+
IGhvcml6b250YWxQYWRkaW5nKCkgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0IGNvbnRlbnRCb3hU
b3AoKSBjb25zdCB7IHJldHVybiBwYWRkaW5nQm94VG9wKCkgKyBwYWRkaW5nVG9wKCkudmFsdWVP
cigwKTsgfQorICAgIExheW91dFVuaXQgY29udGVudEJveExlZnQoKSBjb25zdCB7IHJldHVybiBw
YWRkaW5nQm94TGVmdCgpICsgcGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOyB9CisgICAgTGF5b3V0
VW5pdCBjb250ZW50Qm94Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gY29udGVudEJveFRvcCgpICsg
Y29udGVudEJveEhlaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBjb250ZW50Qm94UmlnaHQoKSBj
b25zdCB7IHJldHVybiBjb250ZW50Qm94TGVmdCgpICsgY29udGVudEJveFdpZHRoKCk7IH0KKyAg
ICBMYXlvdXRVbml0IGNvbnRlbnRCb3hIZWlnaHQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNv
bnRlbnRCb3hXaWR0aCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94VG9wKCkg
Y29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCk7IH0KKyAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hM
ZWZ0KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpOyB9CisgICAgTGF5b3V0VW5pdCBwYWRk
aW5nQm94Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ0JveFRvcCgpICsgcGFkZGluZ0Jv
eEhlaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94UmlnaHQoKSBjb25zdCB7IHJl
dHVybiBwYWRkaW5nQm94TGVmdCgpICsgcGFkZGluZ0JveFdpZHRoKCk7IH0KKyAgICBMYXlvdXRV
bml0IHBhZGRpbmdCb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBwYWRkaW5nVG9wKCkudmFsdWVP
cigwKSArIGNvbnRlbnRCb3hIZWlnaHQoKSArIHBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApOyB9
CisgICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBwYWRkaW5n
TGVmdCgpLnZhbHVlT3IoMCkgKyBjb250ZW50Qm94V2lkdGgoKSArIHBhZGRpbmdSaWdodCgpLnZh
bHVlT3IoMCk7IH0KKworICAgIExheW91dFVuaXQgYm9yZGVyQm94SGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gYm9yZGVyVG9wKCkgKyBwYWRkaW5nQm94SGVpZ2h0KCkgKyBib3JkZXJCb3R0b20oKTsg
fQorICAgIExheW91dFVuaXQgYm9yZGVyQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBib3JkZXJM
ZWZ0KCkgKyBwYWRkaW5nQm94V2lkdGgoKSArIGJvcmRlclJpZ2h0KCk7IH0KKyAgICBMYXlvdXRV
bml0IG1hcmdpbkJveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkJlZm9yZSgpICsgYm9y
ZGVyQm94SGVpZ2h0KCkgKyBtYXJnaW5BZnRlcigpOyB9CisgICAgTGF5b3V0VW5pdCBtYXJnaW5C
b3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpblN0YXJ0KCkgKyBib3JkZXJCb3hXaWR0aCgp
ICsgbWFyZ2luRW5kKCk7IH0KKworICAgIExheW91dFVuaXQgdmVydGljYWxNYXJnaW5Cb3JkZXJB
bmRQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQmVmb3JlKCkgKyB2ZXJ0aWNhbEJvcmRl
cigpICsgdmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKSArIG1hcmdpbkFmdGVyKCk7IH0KKyAg
ICBMYXlvdXRVbml0IGhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbWFyZ2luU3RhcnQoKSArIGhvcml6b250YWxCb3JkZXIoKSArIGhvcml6b250YWxQYWRk
aW5nKCkudmFsdWVPcigwKSArIG1hcmdpbkVuZCgpOyB9CisKKyAgICBSZWN0IG1hcmdpbkJveCgp
IGNvbnN0OworICAgIFJlY3QgYm9yZGVyQm94KCkgY29uc3Q7CisgICAgUmVjdCBwYWRkaW5nQm94
KCkgY29uc3Q7CisgICAgUmVjdCBjb250ZW50Qm94KCkgY29uc3Q7CisKKyNpZiBBU1NFUlRfRU5B
QkxFRAorICAgIHZvaWQgc2V0SGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoKSB7IG1faGFzUHJl
Y29tcHV0ZWRNYXJnaW5CZWZvcmUgPSB0cnVlOyB9CisjZW5kaWYKKworICAgIHZvaWQgc2V0VG9w
TGVmdChjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgc2V0VG9wKExheW91dFVuaXQpOwor
ICAgIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0KTsKKyAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHko
TGF5b3V0VW5pdCBvZmZzZXQpIHsgbV90b3BMZWZ0Lm1vdmUob2Zmc2V0LCAwX2x1KTsgfQorICAg
IHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV90b3BMZWZ0Lm1vdmUo
MF9sdSwgb2Zmc2V0KTsgfQorICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7
IG1fdG9wTGVmdC5tb3ZlKHNpemUpOyB9CisgICAgdm9pZCBtb3ZlQnkoTGF5b3V0UG9pbnQgb2Zm
c2V0KSB7IG1fdG9wTGVmdC5tb3ZlQnkob2Zmc2V0KTsgfQorCisgICAgdm9pZCBzZXRDb250ZW50
Qm94SGVpZ2h0KExheW91dFVuaXQpOworICAgIHZvaWQgc2V0Q29udGVudEJveFdpZHRoKExheW91
dFVuaXQpOworCisgICAgdm9pZCBzZXRIb3Jpem9udGFsTWFyZ2luKEhvcml6b250YWxNYXJnaW4p
OworICAgIHZvaWQgc2V0VmVydGljYWxNYXJnaW4oVmVydGljYWxNYXJnaW4pOworICAgIHZvaWQg
c2V0SGFzQ2xlYXJhbmNlKCkgeyBtX2hhc0NsZWFyYW5jZSA9IHRydWU7IH0KKworICAgIHZvaWQg
c2V0Qm9yZGVyKExheW91dDo6RWRnZXMpOworCisgICAgdm9pZCBzZXRWZXJ0aWNhbFBhZGRpbmco
TGF5b3V0OjpWZXJ0aWNhbEVkZ2VzKTsKKyAgICB2b2lkIHNldFBhZGRpbmcoT3B0aW9uYWw8TGF5
b3V0OjpFZGdlcz4pOworCitwcml2YXRlOgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgdm9pZCBp
bnZhbGlkYXRlTWFyZ2luKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlQm9yZGVyKCkgeyBtX2hhc1Zh
bGlkQm9yZGVyID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFsaWRhdGVQYWRkaW5nKCkgeyBtX2hh
c1ZhbGlkUGFkZGluZyA9IGZhbHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUHJlY29tcHV0ZWRN
YXJnaW5CZWZvcmUoKSB7IG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgPSBmYWxzZTsgfQor
CisgICAgdm9pZCBzZXRIYXNWYWxpZFRvcCgpIHsgbV9oYXNWYWxpZFRvcCA9IHRydWU7IH0KKyAg
ICB2b2lkIHNldEhhc1ZhbGlkTGVmdCgpIHsgbV9oYXNWYWxpZExlZnQgPSB0cnVlOyB9CisgICAg
dm9pZCBzZXRIYXNWYWxpZFZlcnRpY2FsTWFyZ2luKCkgeyBtX2hhc1ZhbGlkVmVydGljYWxNYXJn
aW4gPSB0cnVlOyB9CisgICAgdm9pZCBzZXRIYXNWYWxpZEhvcml6b250YWxNYXJnaW4oKSB7IG1f
aGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luID0gdHJ1ZTsgfQorCisgICAgdm9pZCBzZXRIYXNWYWxp
ZEJvcmRlcigpIHsgbV9oYXNWYWxpZEJvcmRlciA9IHRydWU7IH0KKyAgICB2b2lkIHNldEhhc1Zh
bGlkUGFkZGluZygpIHsgbV9oYXNWYWxpZFBhZGRpbmcgPSB0cnVlOyB9CisKKyAgICB2b2lkIHNl
dEhhc1ZhbGlkQ29udGVudEhlaWdodCgpIHsgbV9oYXNWYWxpZENvbnRlbnRIZWlnaHQgPSB0cnVl
OyB9CisgICAgdm9pZCBzZXRIYXNWYWxpZENvbnRlbnRXaWR0aCgpIHsgbV9oYXNWYWxpZENvbnRl
bnRXaWR0aCA9IHRydWU7IH0KKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorCisgICAgTGF5b3V0
UG9pbnQgbV90b3BMZWZ0OworICAgIExheW91dFVuaXQgbV9jb250ZW50V2lkdGg7CisgICAgTGF5
b3V0VW5pdCBtX2NvbnRlbnRIZWlnaHQ7CisKKyAgICBIb3Jpem9udGFsTWFyZ2luIG1faG9yaXpv
bnRhbE1hcmdpbjsKKyAgICBWZXJ0aWNhbE1hcmdpbiBtX3ZlcnRpY2FsTWFyZ2luOworICAgIGJv
b2wgbV9oYXNDbGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAgTGF5b3V0OjpFZGdlcyBtX2JvcmRl
cjsKKyAgICBPcHRpb25hbDxMYXlvdXQ6OkVkZ2VzPiBtX3BhZGRpbmc7CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgIGJvb2wgbV9oYXNWYWxpZFRvcCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hh
c1ZhbGlkTGVmdCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdp
biB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4geyBmYWxzZSB9
OworICAgIGJvb2wgbV9oYXNWYWxpZEJvcmRlciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1Zh
bGlkUGFkZGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkQ29udGVudEhlaWdodCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkQ29udGVudFdpZHRoIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgeyBmYWxzZSB9OworI2VuZGlmIC8v
IEFTU0VSVF9FTkFCTEVECit9OworCisjaWYgQVNTRVJUX0VOQUJMRUQKK2lubGluZSB2b2lkIEJv
eEdlb21ldHJ5OjppbnZhbGlkYXRlTWFyZ2luKCkKK3sKKyAgICBtX2hhc1ZhbGlkSG9yaXpvbnRh
bE1hcmdpbiA9IGZhbHNlOworICAgIG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbiA9IGZhbHNlOwor
fQorI2VuZGlmCisKK2lubGluZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5Ojp0b3AoKSBjb25zdAor
eworICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmIChtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVm
b3JlIHx8IG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbikpOworICAgIHJldHVybiBtX3RvcExlZnQu
eSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBCb3hHZW9tZXRyeTo6bGVmdCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2lu
KTsKKyAgICByZXR1cm4gbV90b3BMZWZ0LngoKTsKK30KKworaW5saW5lIExheW91dFBvaW50IEJv
eEdlb21ldHJ5Ojp0b3BMZWZ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCAm
JiAobV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSB8fCBtX2hhc1ZhbGlkVmVydGljYWxNYXJn
aW4pKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZEhvcml6b250YWxN
YXJnaW4pOworICAgIHJldHVybiBtX3RvcExlZnQ7Cit9CisKK2lubGluZSB2b2lkIEJveEdlb21l
dHJ5OjpzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0KQoreworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgc2V0SGFzVmFsaWRUb3AoKTsKKyAgICBzZXRIYXNWYWxpZExlZnQoKTsK
KyNlbmRpZgorICAgIG1fdG9wTGVmdCA9IHRvcExlZnQ7Cit9CisKK2lubGluZSB2b2lkIEJveEdl
b21ldHJ5OjpzZXRUb3AoTGF5b3V0VW5pdCB0b3ApCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICBzZXRIYXNWYWxpZFRvcCgpOworI2VuZGlmCisgICAgbV90b3BMZWZ0LnNldFkodG9wKTsKK30K
KworaW5saW5lIHZvaWQgQm94R2VvbWV0cnk6OnNldExlZnQoTGF5b3V0VW5pdCBsZWZ0KQorewor
I2lmIEFTU0VSVF9FTkFCTEVECisgICAgc2V0SGFzVmFsaWRMZWZ0KCk7CisjZW5kaWYKKyAgICBt
X3RvcExlZnQuc2V0WChsZWZ0KTsKK30KKworaW5saW5lIHZvaWQgQm94R2VvbWV0cnk6OnNldENv
bnRlbnRCb3hIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpCit7IAorI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgc2V0SGFzVmFsaWRDb250ZW50SGVpZ2h0KCk7CisjZW5kaWYKKyAgICBtX2NvbnRlbnRI
ZWlnaHQgPSBoZWlnaHQ7Cit9CisKK2lubGluZSB2b2lkIEJveEdlb21ldHJ5OjpzZXRDb250ZW50
Qm94V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkKK3sgCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBz
ZXRIYXNWYWxpZENvbnRlbnRXaWR0aCgpOworI2VuZGlmCisgICAgbV9jb250ZW50V2lkdGggPSB3
aWR0aDsKK30KKworaW5saW5lIExheW91dFVuaXQgQm94R2VvbWV0cnk6OmNvbnRlbnRCb3hIZWln
aHQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkQ29udGVudEhlaWdodCk7CisgICAg
cmV0dXJuIG1fY29udGVudEhlaWdodDsKK30KKworaW5saW5lIExheW91dFVuaXQgQm94R2VvbWV0
cnk6OmNvbnRlbnRCb3hXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRDb250
ZW50V2lkdGgpOworICAgIHJldHVybiBtX2NvbnRlbnRXaWR0aDsKK30KKworaW5saW5lIHZvaWQg
Qm94R2VvbWV0cnk6OnNldEhvcml6b250YWxNYXJnaW4oSG9yaXpvbnRhbE1hcmdpbiBtYXJnaW4p
Cit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBzZXRIYXNWYWxpZEhvcml6b250YWxNYXJnaW4o
KTsKKyNlbmRpZgorICAgIG1faG9yaXpvbnRhbE1hcmdpbiA9IG1hcmdpbjsKK30KKworaW5saW5l
IHZvaWQgQm94R2VvbWV0cnk6OnNldFZlcnRpY2FsTWFyZ2luKFZlcnRpY2FsTWFyZ2luIG1hcmdp
bikKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHNldEhhc1ZhbGlkVmVydGljYWxNYXJnaW4o
KTsKKyAgICBpbnZhbGlkYXRlUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoKTsKKyNlbmRpZgorICAg
IG1fdmVydGljYWxNYXJnaW4gPSBtYXJnaW47Cit9CisKK2lubGluZSB2b2lkIEJveEdlb21ldHJ5
OjpzZXRCb3JkZXIoTGF5b3V0OjpFZGdlcyBib3JkZXIpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBzZXRIYXNWYWxpZEJvcmRlcigpOworI2VuZGlmCisgICAgbV9ib3JkZXIgPSBib3JkZXI7
Cit9CisKK2lubGluZSB2b2lkIEJveEdlb21ldHJ5OjpzZXRQYWRkaW5nKE9wdGlvbmFsPExheW91
dDo6RWRnZXM+IHBhZGRpbmcpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBzZXRIYXNWYWxp
ZFBhZGRpbmcoKTsKKyNlbmRpZgorICAgIG1fcGFkZGluZyA9IHBhZGRpbmc7Cit9CisKK2lubGlu
ZSB2b2lkIEJveEdlb21ldHJ5OjpzZXRWZXJ0aWNhbFBhZGRpbmcoTGF5b3V0OjpWZXJ0aWNhbEVk
Z2VzIHZlcnRpY2FsUGFkZGluZykKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHNldEhhc1Zh
bGlkUGFkZGluZygpOworI2VuZGlmCisgICAgbV9wYWRkaW5nID0gTGF5b3V0OjpFZGdlcyB7IG1f
cGFkZGluZyA/IG1fcGFkZGluZy0+aG9yaXpvbnRhbCA6IExheW91dDo6SG9yaXpvbnRhbEVkZ2Vz
KCksIHZlcnRpY2FsUGFkZGluZyB9OworfQorCitpbmxpbmUgQm94R2VvbWV0cnk6OlZlcnRpY2Fs
TWFyZ2luIEJveEdlb21ldHJ5Ojp2ZXJ0aWNhbE1hcmdpbigpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbik7CisgICAgcmV0dXJuIG1fdmVydGljYWxNYXJnaW47
Cit9CisKK2lubGluZSBCb3hHZW9tZXRyeTo6SG9yaXpvbnRhbE1hcmdpbiBCb3hHZW9tZXRyeTo6
aG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRIb3Jpem9u
dGFsTWFyZ2luKTsKKyAgICByZXR1cm4gbV9ob3Jpem9udGFsTWFyZ2luOworfQorCitpbmxpbmUg
TGF5b3V0VW5pdCBCb3hHZW9tZXRyeTo6bWFyZ2luQmVmb3JlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKTsKKyAgICByZXR1cm4gbV92ZXJ0aWNhbE1hcmdp
bi5iZWZvcmU7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5OjptYXJnaW5TdGFy
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKTsKKyAg
ICByZXR1cm4gbV9ob3Jpem9udGFsTWFyZ2luLnN0YXJ0OworfQorCitpbmxpbmUgTGF5b3V0VW5p
dCBCb3hHZW9tZXRyeTo6bWFyZ2luQWZ0ZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1Zh
bGlkVmVydGljYWxNYXJnaW4pOworICAgIHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luLmFmdGVyOwor
fQorCitpbmxpbmUgTGF5b3V0VW5pdCBCb3hHZW9tZXRyeTo6bWFyZ2luRW5kKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4pOworICAgIHJldHVybiBtX2hv
cml6b250YWxNYXJnaW4uZW5kOworfQorCitpbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94
R2VvbWV0cnk6OnBhZGRpbmdUb3AoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFk
ZGluZyk7CisgICAgaWYgKCFtX3BhZGRpbmcpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0
dXJuIG1fcGFkZGluZy0+dmVydGljYWwudG9wOworfQorCitpbmxpbmUgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gQm94R2VvbWV0cnk6OnBhZGRpbmdMZWZ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9o
YXNWYWxpZFBhZGRpbmcpOworICAgIGlmICghbV9wYWRkaW5nKQorICAgICAgICByZXR1cm4geyB9
OworICAgIHJldHVybiBtX3BhZGRpbmctPmhvcml6b250YWwubGVmdDsKK30KKworaW5saW5lIE9w
dGlvbmFsPExheW91dFVuaXQ+IEJveEdlb21ldHJ5OjpwYWRkaW5nQm90dG9tKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9oYXNWYWxpZFBhZGRpbmcpOworICAgIGlmICghbV9wYWRkaW5nKQorICAg
ICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBtX3BhZGRpbmctPnZlcnRpY2FsLmJvdHRvbTsK
K30KKworaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveEdlb21ldHJ5OjpwYWRkaW5nUmln
aHQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFkZGluZyk7CisgICAgaWYgKCFt
X3BhZGRpbmcpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fcGFkZGluZy0+aG9y
aXpvbnRhbC5yaWdodDsKK30KKworaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveEdlb21l
dHJ5Ojp2ZXJ0aWNhbFBhZGRpbmcoKSBjb25zdAoreworICAgIGF1dG8gcGFkZGluZ1RvcCA9IHRo
aXMtPnBhZGRpbmdUb3AoKTsKKyAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSB0aGlzLT5wYWRkaW5n
Qm90dG9tKCk7CisgICAgaWYgKCFwYWRkaW5nVG9wICYmICFwYWRkaW5nQm90dG9tKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBwYWRkaW5nVG9wLnZhbHVlT3IoMCkgKyBwYWRkaW5n
Qm90dG9tLnZhbHVlT3IoMCk7Cit9CisKK2lubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBCb3hH
ZW9tZXRyeTo6aG9yaXpvbnRhbFBhZGRpbmcoKSBjb25zdAoreworICAgIGF1dG8gcGFkZGluZ0xl
ZnQgPSB0aGlzLT5wYWRkaW5nTGVmdCgpOworICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gdGhpcy0+
cGFkZGluZ1JpZ2h0KCk7CisgICAgaWYgKCFwYWRkaW5nTGVmdCAmJiAhcGFkZGluZ1JpZ2h0KQor
ICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBwYWRkaW5nTGVmdC52YWx1ZU9yKDApICsg
cGFkZGluZ1JpZ2h0LnZhbHVlT3IoMCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IEJveEdlb21l
dHJ5Ojpib3JkZXJUb3AoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsK
KyAgICByZXR1cm4gbV9ib3JkZXIudmVydGljYWwudG9wOworfQorCitpbmxpbmUgTGF5b3V0VW5p
dCBCb3hHZW9tZXRyeTo6Ym9yZGVyTGVmdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFs
aWRCb3JkZXIpOworICAgIHJldHVybiBtX2JvcmRlci5ob3Jpem9udGFsLmxlZnQ7Cit9CisKK2lu
bGluZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5Ojpib3JkZXJCb3R0b20oKSBjb25zdAoreworICAg
IEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsKKyAgICByZXR1cm4gbV9ib3JkZXIudmVydGljYWwu
Ym90dG9tOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBCb3hHZW9tZXRyeTo6Ym9yZGVyUmlnaHQo
KSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsKKyAgICByZXR1cm4gbV9i
b3JkZXIuaG9yaXpvbnRhbC5yaWdodDsKK30KKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNTkzY2E1MDNhMjNlOWRmMzgzMGQyYWZkNDk0OWNhZmM4
NzNmY2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0cnkuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQotCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLVdURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChHZW9tZXRyeSk7Ci0KLUdlb21ldHJ5OjpHZW9tZXRyeShjb25zdCBHZW9tZXRy
eSYgb3RoZXIpCi0gICAgOiBtX3RvcExlZnQob3RoZXIubV90b3BMZWZ0KQotICAgICwgbV9jb250
ZW50V2lkdGgob3RoZXIubV9jb250ZW50V2lkdGgpCi0gICAgLCBtX2NvbnRlbnRIZWlnaHQob3Ro
ZXIubV9jb250ZW50SGVpZ2h0KQotICAgICwgbV9ob3Jpem9udGFsTWFyZ2luKG90aGVyLm1faG9y
aXpvbnRhbE1hcmdpbikKLSAgICAsIG1fdmVydGljYWxNYXJnaW4ob3RoZXIubV92ZXJ0aWNhbE1h
cmdpbikKLSAgICAsIG1faGFzQ2xlYXJhbmNlKG90aGVyLm1faGFzQ2xlYXJhbmNlKQotICAgICwg
bV9ib3JkZXIob3RoZXIubV9ib3JkZXIpCi0gICAgLCBtX3BhZGRpbmcob3RoZXIubV9wYWRkaW5n
KQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLCBtX2hhc1ZhbGlkVG9wKG90aGVyLm1faGFzVmFs
aWRUb3ApCi0gICAgLCBtX2hhc1ZhbGlkTGVmdChvdGhlci5tX2hhc1ZhbGlkTGVmdCkKLSAgICAs
IG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKG90aGVyLm1faGFzVmFsaWRIb3Jpem9udGFsTWFy
Z2luKQotICAgICwgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKG90aGVyLm1faGFzVmFsaWRWZXJ0
aWNhbE1hcmdpbikKLSAgICAsIG1faGFzVmFsaWRCb3JkZXIob3RoZXIubV9oYXNWYWxpZEJvcmRl
cikKLSAgICAsIG1faGFzVmFsaWRQYWRkaW5nKG90aGVyLm1faGFzVmFsaWRQYWRkaW5nKQotICAg
ICwgbV9oYXNWYWxpZENvbnRlbnRIZWlnaHQob3RoZXIubV9oYXNWYWxpZENvbnRlbnRIZWlnaHQp
Ci0gICAgLCBtX2hhc1ZhbGlkQ29udGVudFdpZHRoKG90aGVyLm1faGFzVmFsaWRDb250ZW50V2lk
dGgpCi0gICAgLCBtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKG90aGVyLm1faGFzUHJlY29t
cHV0ZWRNYXJnaW5CZWZvcmUpCi0jZW5kaWYKLXsKLX0KLQotR2VvbWV0cnk6On5HZW9tZXRyeSgp
Ci17Ci19Ci0KLVJlY3QgR2VvbWV0cnk6Om1hcmdpbkJveCgpIGNvbnN0Ci17Ci0gICAgYXV0byBi
b3JkZXJCb3ggPSB0aGlzLT5ib3JkZXJCb3goKTsKLQotICAgIFJlY3QgbWFyZ2luQm94OwotICAg
IG1hcmdpbkJveC5zZXRUb3AoYm9yZGVyQm94LnRvcCgpIC0gbWFyZ2luQmVmb3JlKCkpOwotICAg
IG1hcmdpbkJveC5zZXRMZWZ0KGJvcmRlckJveC5sZWZ0KCkgLSBtYXJnaW5TdGFydCgpKTsKLSAg
ICBtYXJnaW5Cb3guc2V0SGVpZ2h0KGJvcmRlckJveC5oZWlnaHQoKSArIG1hcmdpbkJlZm9yZSgp
ICsgbWFyZ2luQWZ0ZXIoKSk7Ci0gICAgbWFyZ2luQm94LnNldFdpZHRoKGJvcmRlckJveC53aWR0
aCgpICsgbWFyZ2luU3RhcnQoKSArIG1hcmdpbkVuZCgpKTsKLSAgICByZXR1cm4gbWFyZ2luQm94
OwotfQotCi1SZWN0IEdlb21ldHJ5Ojpib3JkZXJCb3goKSBjb25zdAotewotICAgIFJlY3QgYm9y
ZGVyQm94OwotICAgIGJvcmRlckJveC5zZXRUb3BMZWZ0KHsgfSk7Ci0gICAgYm9yZGVyQm94LnNl
dFNpemUoeyB3aWR0aCgpLCBoZWlnaHQoKSB9KTsKLSAgICByZXR1cm4gYm9yZGVyQm94OwotfQot
Ci1SZWN0IEdlb21ldHJ5OjpwYWRkaW5nQm94KCkgY29uc3QKLXsKLSAgICBhdXRvIGJvcmRlckJv
eCA9IHRoaXMtPmJvcmRlckJveCgpOwotCi0gICAgUmVjdCBwYWRkaW5nQm94OwotICAgIHBhZGRp
bmdCb3guc2V0VG9wKGJvcmRlckJveC50b3AoKSArIGJvcmRlclRvcCgpKTsKLSAgICBwYWRkaW5n
Qm94LnNldExlZnQoYm9yZGVyQm94LmxlZnQoKSArIGJvcmRlckxlZnQoKSk7Ci0gICAgcGFkZGlu
Z0JveC5zZXRIZWlnaHQoYm9yZGVyQm94LmJvdHRvbSgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJC
b3R0b20oKSk7Ci0gICAgcGFkZGluZ0JveC5zZXRXaWR0aChib3JkZXJCb3gud2lkdGgoKSAtIGJv
cmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCkpOwotICAgIHJldHVybiBwYWRkaW5nQm94OwotfQot
Ci1SZWN0IEdlb21ldHJ5Ojpjb250ZW50Qm94KCkgY29uc3QKLXsKLSAgICBSZWN0IGNvbnRlbnRC
b3g7Ci0gICAgY29udGVudEJveC5zZXRUb3AoY29udGVudEJveFRvcCgpKTsKLSAgICBjb250ZW50
Qm94LnNldExlZnQoY29udGVudEJveExlZnQoKSk7Ci0gICAgY29udGVudEJveC5zZXRXaWR0aChj
b250ZW50Qm94V2lkdGgoKSk7Ci0gICAgY29udGVudEJveC5zZXRIZWlnaHQoY29udGVudEJveEhl
aWdodCgpKTsKLSAgICByZXR1cm4gY29udGVudEJveDsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEdlb21ldHJ5
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmQ2NGRhMjM1OWJkYTNhODA3ODA0YTE5OTRl
Yjc5YzM2ODIxMDdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEdlb21ldHJ5LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2ODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJEaXNw
bGF5UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFVuaXRzLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01h
bGxvYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotY2xh
c3MgUmVjdCB7Ci1wdWJsaWM6Ci0gICAgUmVjdCgpID0gZGVmYXVsdDsKLSAgICBSZWN0KExheW91
dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQg
aGVpZ2h0KTsKLSAgICBSZWN0KExheW91dFBvaW50IHRvcExlZnQsIExheW91dFVuaXQgd2lkdGgs
IExheW91dFVuaXQgaGVpZ2h0KTsKLSAgICBSZWN0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0
LCBjb25zdCBMYXlvdXRTaXplJik7Ci0gICAgCi0gICAgTGF5b3V0VW5pdCB0b3AoKSBjb25zdDsK
LSAgICBMYXlvdXRVbml0IGxlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRQb2ludCB0b3BMZWZ0KCkg
Y29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQg
cmlnaHQoKSBjb25zdDsKLSAgICBMYXlvdXRQb2ludCBib3R0b21SaWdodCgpIGNvbnN0OwotCi0g
ICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29u
c3Q7Ci0gICAgTGF5b3V0U2l6ZSBzaXplKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFRvcChMYXlv
dXRVbml0KTsKLSAgICB2b2lkIHNldExlZnQoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRUb3BM
ZWZ0KGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0KTsK
LSAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldFNpemUoY29uc3Qg
TGF5b3V0U2l6ZSYpOwotCi0gICAgdm9pZCBzaGlmdExlZnRUbyhMYXlvdXRVbml0KTsKLSAgICB2
b2lkIHNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNoaWZ0VG9wVG8oTGF5b3V0
VW5pdCk7Ci0gICAgdm9pZCBzaGlmdEJvdHRvbVRvKExheW91dFVuaXQpOwotCi0gICAgdm9pZCBt
b3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQpOwotICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5
b3V0VW5pdCk7Ci0KLSAgICB2b2lkIGV4cGFuZChPcHRpb25hbDxMYXlvdXRVbml0PiwgT3B0aW9u
YWw8TGF5b3V0VW5pdD4pOwotICAgIHZvaWQgZXhwYW5kSG9yaXpvbnRhbGx5KExheW91dFVuaXQg
ZGVsdGEpIHsgZXhwYW5kKGRlbHRhLCB7IH0pOyB9Ci0gICAgdm9pZCBleHBhbmRWZXJ0aWNhbGx5
KExheW91dFVuaXQgZGVsdGEpIHsgZXhwYW5kKHsgfSwgZGVsdGEpOyB9Ci0gICAgYm9vbCBpbnRl
cnNlY3RzKGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5pbnRlcnNlY3Rz
KHJlY3QpOyB9Ci0KLSAgICBSZWN0IGNsb25lKCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgTGF5b3V0
UmVjdCgpIGNvbnN0OwotCi1wcml2YXRlOgotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdm9pZCBp
bnZhbGlkYXRlVG9wKCkgeyBtX2hhc1ZhbGlkVG9wID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFs
aWRhdGVMZWZ0KCkgeyBtX2hhc1ZhbGlkTGVmdCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBpbnZhbGlk
YXRlV2lkdGgoKSB7IG1faGFzVmFsaWRXaWR0aCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBpbnZhbGlk
YXRlSGVpZ2h0KCkgeyBtX2hhc1ZhbGlkSGVpZ2h0ID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFs
aWRhdGVQb3NpdGlvbigpOwotCi0gICAgYm9vbCBoYXNWYWxpZFBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNWYWxpZFRvcCAmJiBtX2hhc1ZhbGlkTGVmdDsgfQotICAgIGJvb2wgaGFzVmFs
aWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZFdpZHRoICYmIG1faGFzVmFsaWRIZWln
aHQ7IH0KLSAgICBib29sIGhhc1ZhbGlkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBoYXNWYWxp
ZFBvc2l0aW9uKCkgJiYgaGFzVmFsaWRTaXplKCk7IH0KLQotICAgIHZvaWQgc2V0SGFzVmFsaWRQ
b3NpdGlvbigpOwotICAgIHZvaWQgc2V0SGFzVmFsaWRTaXplKCk7Ci0KLSAgICBib29sIG1faGFz
VmFsaWRUb3AgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZExlZnQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNWYWxpZFdpZHRoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRI
ZWlnaHQgeyBmYWxzZSB9OwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgTGF5b3V0UmVj
dCBtX3JlY3Q7Ci19OwotCi1pbmxpbmUgUmVjdDo6UmVjdChMYXlvdXRVbml0IHRvcCwgTGF5b3V0
VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKLSAgICA6IG1f
cmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBtX2hhc1ZhbGlkVG9wID0gdHJ1ZTsKLSAgICBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7Ci0gICAg
bV9oYXNWYWxpZFdpZHRoID0gdHJ1ZTsKLSAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsKLSNl
bmRpZgotfQotCi1pbmxpbmUgUmVjdDo6UmVjdChMYXlvdXRQb2ludCB0b3BMZWZ0LCBMYXlvdXRV
bml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKLSAgICA6IFJlY3QodG9wTGVmdC55KCksIHRv
cExlZnQueCgpLCB3aWR0aCwgaGVpZ2h0KQotewotfQotCi1pbmxpbmUgUmVjdDo6UmVjdChjb25z
dCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKLSAgICA6IFJl
Y3QodG9wTGVmdC55KCksIHRvcExlZnQueCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
Ci17Ci19Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotaW5saW5lIHZvaWQgUmVjdDo6aW52YWxpZGF0
ZVBvc2l0aW9uKCkKLXsKLSAgICBpbnZhbGlkYXRlVG9wKCk7Ci0gICAgaW52YWxpZGF0ZUxlZnQo
KTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2V0SGFzVmFsaWRQb3NpdGlvbigpCi17Ci0gICAg
bV9oYXNWYWxpZFRvcCA9IHRydWU7Ci0gICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOwotfQotCi1p
bmxpbmUgdm9pZCBSZWN0OjpzZXRIYXNWYWxpZFNpemUoKQotewotICAgIG1faGFzVmFsaWRXaWR0
aCA9IHRydWU7Ci0gICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7Ci19Ci0jZW5kaWYKLQotaW5s
aW5lIExheW91dFVuaXQgUmVjdDo6dG9wKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxp
ZFRvcCk7Ci0gICAgcmV0dXJuIG1fcmVjdC55KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFJl
Y3Q6OmxlZnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7Ci0gICAgcmV0
dXJuIG1fcmVjdC54KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFJlY3Q6OmJvdHRvbSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgbV9oYXNWYWxpZEhlaWdodCk7Ci0g
ICAgcmV0dXJuIG1fcmVjdC5tYXhZKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFJlY3Q6OnJp
Z2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZFdp
ZHRoKTsKLSAgICByZXR1cm4gbV9yZWN0Lm1heFgoKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50
IFJlY3Q6OnRvcExlZnQoKSBjb25zdAotewotICAgIEFTU0VSVChoYXNWYWxpZFBvc2l0aW9uKCkp
OwotICAgIHJldHVybiBtX3JlY3QubWluWE1pbllDb3JuZXIoKTsKLX0KLQotaW5saW5lIExheW91
dFBvaW50IFJlY3Q6OmJvdHRvbVJpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFzVmFsaWRH
ZW9tZXRyeSgpKTsKLSAgICByZXR1cm4gbV9yZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci19Ci0KLWlu
bGluZSBMYXlvdXRTaXplIFJlY3Q6OnNpemUoKSBjb25zdAotewotICAgIEFTU0VSVChoYXNWYWxp
ZFNpemUoKSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5zaXplKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRV
bml0IFJlY3Q6OndpZHRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFdpZHRoKTsK
LSAgICByZXR1cm4gbV9yZWN0LndpZHRoKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFJlY3Q6
OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRIZWlnaHQpOwotICAgIHJl
dHVybiBtX3JlY3QuaGVpZ2h0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlY3Q6OnNldFRvcExlZnQo
Y29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBz
ZXRIYXNWYWxpZFBvc2l0aW9uKCk7Ci0jZW5kaWYKLSAgICBtX3JlY3Quc2V0TG9jYXRpb24odG9w
TGVmdCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlY3Q6OnNldFRvcChMYXlvdXRVbml0IHRvcCkKLXsK
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOwotI2VuZGlmCi0g
ICAgbV9yZWN0LnNldFkodG9wKTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2V0TGVmdChMYXlv
dXRVbml0IGxlZnQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1ZhbGlkTGVmdCA9
IHRydWU7Ci0jZW5kaWYKLSAgICBtX3JlY3Quc2V0WChsZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQg
UmVjdDo6c2V0V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAot
ICAgIG1faGFzVmFsaWRXaWR0aCA9IHRydWU7Ci0jZW5kaWYKLSAgICBtX3JlY3Quc2V0V2lkdGgo
d2lkdGgpOwotfQotCi1pbmxpbmUgdm9pZCBSZWN0OjpzZXRIZWlnaHQoTGF5b3V0VW5pdCBoZWln
aHQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsK
LSNlbmRpZgotICAgIG1fcmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKLX0KLQotaW5saW5lIHZvaWQg
UmVjdDo6c2V0U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKQotewotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgc2V0SGFzVmFsaWRTaXplKCk7Ci0jZW5kaWYKLSAgICBtX3JlY3Quc2V0U2l6ZShz
aXplKTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2hpZnRMZWZ0VG8oTGF5b3V0VW5pdCBsZWZ0
KQotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7Ci0gICAgbV9yZWN0LnNoaWZ0WEVkZ2VU
byhsZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2hpZnRSaWdodFRvKExheW91dFVuaXQg
cmlnaHQpCi17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRXaWR0aCk7
Ci0gICAgbV9yZWN0LnNoaWZ0TWF4WEVkZ2VUbyhyaWdodCk7Ci19Ci0KLWlubGluZSB2b2lkIFJl
Y3Q6OnNoaWZ0VG9wVG8oTGF5b3V0VW5pdCB0b3ApCi17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRU
b3ApOwotICAgIG1fcmVjdC5zaGlmdFlFZGdlVG8odG9wKTsKLX0KLQotaW5saW5lIHZvaWQgUmVj
dDo6c2hpZnRCb3R0b21UbyhMYXlvdXRVbml0IGJvdHRvbSkKLXsKLSAgICBBU1NFUlQobV9oYXNW
YWxpZFRvcCAmJiBtX2hhc1ZhbGlkSGVpZ2h0KTsKLSAgICBtX3JlY3Quc2hpZnRNYXhZRWRnZVRv
KGJvdHRvbSk7Ci19Ci0KLWlubGluZSB2b2lkIFJlY3Q6Om1vdmVIb3Jpem9udGFsbHkoTGF5b3V0
VW5pdCBvZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0KTsKLSAgICBtX3JlY3Qu
bW92ZShMYXlvdXRTaXplIHsgb2Zmc2V0LCAwIH0pOwotfQotCi1pbmxpbmUgdm9pZCBSZWN0Ojpt
b3ZlVmVydGljYWxseShMYXlvdXRVbml0IG9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxp
ZFRvcCk7Ci0gICAgbV9yZWN0Lm1vdmUoTGF5b3V0U2l6ZSB7IDAsIG9mZnNldCB9KTsKLX0KLQot
aW5saW5lIHZvaWQgUmVjdDo6ZXhwYW5kKE9wdGlvbmFsPExheW91dFVuaXQ+IHdpZHRoLCBPcHRp
b25hbDxMYXlvdXRVbml0PiBoZWlnaHQpCi17Ci0gICAgQVNTRVJUKCF3aWR0aCB8fCBtX2hhc1Zh
bGlkV2lkdGgpOwotICAgIEFTU0VSVCghaGVpZ2h0IHx8IG1faGFzVmFsaWRIZWlnaHQpOwotICAg
IG1fcmVjdC5leHBhbmQod2lkdGgudmFsdWVPcigwKSwgaGVpZ2h0LnZhbHVlT3IoMCkpOwotfQot
Ci1pbmxpbmUgUmVjdCBSZWN0OjpjbG9uZSgpIGNvbnN0Ci17Ci0gICAgUmVjdCByZWN0OwotI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgcmVjdC5tX2hhc1ZhbGlkVG9wID0gbV9oYXNWYWxpZFRvcDsK
LSAgICByZWN0Lm1faGFzVmFsaWRMZWZ0ID0gbV9oYXNWYWxpZExlZnQ7Ci0gICAgcmVjdC5tX2hh
c1ZhbGlkV2lkdGggPSBtX2hhc1ZhbGlkV2lkdGg7Ci0gICAgcmVjdC5tX2hhc1ZhbGlkSGVpZ2h0
ICA9IG1faGFzVmFsaWRIZWlnaHQ7Ci0jZW5kaWYKLSAgICByZWN0Lm1fcmVjdCA9IG1fcmVjdDsK
LSAgICByZXR1cm4gcmVjdDsKLX0KLQotaW5saW5lIFJlY3Q6Om9wZXJhdG9yIExheW91dFJlY3Qo
KSBjb25zdAotewotICAgIEFTU0VSVChoYXNWYWxpZEdlb21ldHJ5KCkpOwotICAgIHJldHVybiBt
X3JlY3Q7Ci19Ci0KLQotY2xhc3MgR2VvbWV0cnkgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoR2VvbWV0cnkpOwotcHVibGljOgotICAgIEdlb21ldHJ5KGNvbnN0IEdlb21ldHJ5Jik7Ci0g
ICAgR2VvbWV0cnkoKSA9IGRlZmF1bHQ7Ci0gICAgfkdlb21ldHJ5KCk7Ci0KLSAgICBMYXlvdXRV
bml0IHRvcCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgbGVmdCgpIGNvbnN0OwotICAgIExheW91
dFVuaXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gdG9wKCkgKyBoZWlnaHQoKTsgfQotICAgIExh
eW91dFVuaXQgcmlnaHQoKSBjb25zdCB7IHJldHVybiBsZWZ0KCkgKyB3aWR0aCgpOyB9Ci0KLSAg
ICBMYXlvdXRQb2ludCB0b3BMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0UG9pbnQgYm90dG9tUmln
aHQoKSBjb25zdCB7IHJldHVybiB7IHJpZ2h0KCksIGJvdHRvbSgpIH07IH0KLQotICAgIExheW91
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHsgd2lkdGgoKSwgaGVpZ2h0KCkgfTsgfQotICAg
IExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5n
Qm94V2lkdGgoKSArIGJvcmRlclJpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpICsgcGFkZGluZ0JveEhlaWdodCgpICsgYm9yZGVyQm90
dG9tKCk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXplKCkuaXNFbXB0
eSgpOyB9Ci0gICAgUmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4geyB0b3AoKSwgbGVmdCgpLCB3
aWR0aCgpLCBoZWlnaHQoKSB9OyB9Ci0gICAgUmVjdCByZWN0V2l0aE1hcmdpbigpIGNvbnN0IHsg
cmV0dXJuIHsgdG9wKCkgLSBtYXJnaW5CZWZvcmUoKSwgbGVmdCgpIC0gbWFyZ2luU3RhcnQoKSwg
bWFyZ2luU3RhcnQoKSArIHdpZHRoKCkgKyBtYXJnaW5FbmQoKSwgbWFyZ2luQmVmb3JlKCkgKyBo
ZWlnaHQoKSArIG1hcmdpbkFmdGVyKCkgfTsgfQotCi0gICAgc3RydWN0IFZlcnRpY2FsTWFyZ2lu
IHsKLSAgICAgICAgTGF5b3V0VW5pdCBiZWZvcmU7Ci0gICAgICAgIExheW91dFVuaXQgYWZ0ZXI7
Ci0gICAgfTsKLSAgICBWZXJ0aWNhbE1hcmdpbiB2ZXJ0aWNhbE1hcmdpbigpIGNvbnN0OwotCi0g
ICAgc3RydWN0IEhvcml6b250YWxNYXJnaW4gewotICAgICAgICBMYXlvdXRVbml0IHN0YXJ0Owot
ICAgICAgICBMYXlvdXRVbml0IGVuZDsKLSAgICB9OwotICAgIEhvcml6b250YWxNYXJnaW4gaG9y
aXpvbnRhbE1hcmdpbigpIGNvbnN0OwotICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKCkgY29u
c3Q7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0OwotICAgIExheW91dFVuaXQg
bWFyZ2luQWZ0ZXIoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCgpIGNvbnN0Owot
ICAgIGJvb2wgaGFzQ2xlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDbGVhcmFuY2U7IH0K
LQotICAgIExheW91dFVuaXQgYm9yZGVyVG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3Jk
ZXJMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJCb3R0b20oKSBjb25zdDsKLSAg
ICBMYXlvdXRVbml0IGJvcmRlclJpZ2h0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNh
bEJvcmRlcigpIGNvbnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCk7IH0K
LSAgICBMYXlvdXRVbml0IGhvcml6b250YWxCb3JkZXIoKSBjb25zdCB7IHJldHVybiBib3JkZXJM
ZWZ0KCkgKyBib3JkZXJSaWdodCgpOyB9Ci0KLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRk
aW5nVG9wKCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ0xlZnQoKSBj
b25zdDsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nQm90dG9tKCkgY29uc3Q7Ci0g
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ1JpZ2h0KCkgY29uc3Q7Ci0gICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gdmVydGljYWxQYWRkaW5nKCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gaG9yaXpvbnRhbFBhZGRpbmcoKSBjb25zdDsKLQotICAgIExheW91dFVuaXQgY29u
dGVudEJveFRvcCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdCb3hUb3AoKSArIHBhZGRpbmdUb3Ao
KS52YWx1ZU9yKDApOyB9Ci0gICAgTGF5b3V0VW5pdCBjb250ZW50Qm94TGVmdCgpIGNvbnN0IHsg
cmV0dXJuIHBhZGRpbmdCb3hMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7IH0KLSAg
ICBMYXlvdXRVbml0IGNvbnRlbnRCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBjb250ZW50Qm94
VG9wKCkgKyBjb250ZW50Qm94SGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGNvbnRlbnRCb3hS
aWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRCb3hMZWZ0KCkgKyBjb250ZW50Qm94V2lkdGgo
KTsgfQotICAgIExheW91dFVuaXQgY29udGVudEJveEhlaWdodCgpIGNvbnN0OwotICAgIExheW91
dFVuaXQgY29udGVudEJveFdpZHRoKCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IHBhZGRpbmdC
b3hUb3AoKSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKTsgfQotICAgIExheW91dFVuaXQgcGFk
ZGluZ0JveExlZnQoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCk7IH0KLSAgICBMYXlvdXRV
bml0IHBhZGRpbmdCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBwYWRkaW5nQm94VG9wKCkgKyBw
YWRkaW5nQm94SGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHBhZGRpbmdCb3hMZWZ0KCkgKyBwYWRkaW5nQm94V2lkdGgoKTsgfQotICAg
IExheW91dFVuaXQgcGFkZGluZ0JveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdUb3Ao
KS52YWx1ZU9yKDApICsgY29udGVudEJveEhlaWdodCgpICsgcGFkZGluZ0JvdHRvbSgpLnZhbHVl
T3IoMCk7IH0KLSAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IHBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKSArIGNvbnRlbnRCb3hXaWR0aCgpICsgcGFkZGluZ1Jp
Z2h0KCkudmFsdWVPcigwKTsgfQotCi0gICAgTGF5b3V0VW5pdCBib3JkZXJCb3hIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBib3JkZXJUb3AoKSArIHBhZGRpbmdCb3hIZWlnaHQoKSArIGJvcmRlckJv
dHRvbSgpOyB9Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJCb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IGJvcmRlckxlZnQoKSArIHBhZGRpbmdCb3hXaWR0aCgpICsgYm9yZGVyUmlnaHQoKTsgfQotICAg
IExheW91dFVuaXQgbWFyZ2luQm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQmVmb3Jl
KCkgKyBib3JkZXJCb3hIZWlnaHQoKSArIG1hcmdpbkFmdGVyKCk7IH0KLSAgICBMYXlvdXRVbml0
IG1hcmdpbkJveFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luU3RhcnQoKSArIGJvcmRlckJv
eFdpZHRoKCkgKyBtYXJnaW5FbmQoKTsgfQotCi0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE1hcmdp
bkJvcmRlckFuZFBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtYXJnaW5CZWZvcmUoKSArIHZlcnRp
Y2FsQm9yZGVyKCkgKyB2ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDApICsgbWFyZ2luQWZ0ZXIo
KTsgfQotICAgIExheW91dFVuaXQgaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSBj
b25zdCB7IHJldHVybiBtYXJnaW5TdGFydCgpICsgaG9yaXpvbnRhbEJvcmRlcigpICsgaG9yaXpv
bnRhbFBhZGRpbmcoKS52YWx1ZU9yKDApICsgbWFyZ2luRW5kKCk7IH0KLQotICAgIFJlY3QgbWFy
Z2luQm94KCkgY29uc3Q7Ci0gICAgUmVjdCBib3JkZXJCb3goKSBjb25zdDsKLSAgICBSZWN0IHBh
ZGRpbmdCb3goKSBjb25zdDsKLSAgICBSZWN0IGNvbnRlbnRCb3goKSBjb25zdDsKLQotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgdm9pZCBzZXRIYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgpIHsg
bV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSA9IHRydWU7IH0KLSNlbmRpZgotCi0gICAgdm9p
ZCBzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBzZXRUb3AoTGF5b3V0
VW5pdCk7Ci0gICAgdm9pZCBzZXRMZWZ0KExheW91dFVuaXQpOwotICAgIHZvaWQgbW92ZUhvcml6
b250YWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX3RvcExlZnQubW92ZShvZmZzZXQsIDBfbHUp
OyB9Ci0gICAgdm9pZCBtb3ZlVmVydGljYWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX3RvcExl
ZnQubW92ZSgwX2x1LCBvZmZzZXQpOyB9Ci0gICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNpemUm
IHNpemUpIHsgbV90b3BMZWZ0Lm1vdmUoc2l6ZSk7IH0KLSAgICB2b2lkIG1vdmVCeShMYXlvdXRQ
b2ludCBvZmZzZXQpIHsgbV90b3BMZWZ0Lm1vdmVCeShvZmZzZXQpOyB9Ci0KLSAgICB2b2lkIHNl
dENvbnRlbnRCb3hIZWlnaHQoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRDb250ZW50Qm94V2lk
dGgoTGF5b3V0VW5pdCk7Ci0KLSAgICB2b2lkIHNldEhvcml6b250YWxNYXJnaW4oSG9yaXpvbnRh
bE1hcmdpbik7Ci0gICAgdm9pZCBzZXRWZXJ0aWNhbE1hcmdpbihWZXJ0aWNhbE1hcmdpbik7Ci0g
ICAgdm9pZCBzZXRIYXNDbGVhcmFuY2UoKSB7IG1faGFzQ2xlYXJhbmNlID0gdHJ1ZTsgfQotCi0g
ICAgdm9pZCBzZXRCb3JkZXIoTGF5b3V0OjpFZGdlcyk7Ci0KLSAgICB2b2lkIHNldFZlcnRpY2Fs
UGFkZGluZyhMYXlvdXQ6OlZlcnRpY2FsRWRnZXMpOwotICAgIHZvaWQgc2V0UGFkZGluZyhPcHRp
b25hbDxMYXlvdXQ6OkVkZ2VzPik7Ci0KLXByaXZhdGU6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICB2b2lkIGludmFsaWRhdGVNYXJnaW4oKTsKLSAgICB2b2lkIGludmFsaWRhdGVCb3JkZXIoKSB7
IG1faGFzVmFsaWRCb3JkZXIgPSBmYWxzZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVBhZGRpbmco
KSB7IG1faGFzVmFsaWRQYWRkaW5nID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFsaWRhdGVQcmVj
b21wdXRlZE1hcmdpbkJlZm9yZSgpIHsgbV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSA9IGZh
bHNlOyB9Ci0KLSAgICB2b2lkIHNldEhhc1ZhbGlkVG9wKCkgeyBtX2hhc1ZhbGlkVG9wID0gdHJ1
ZTsgfQotICAgIHZvaWQgc2V0SGFzVmFsaWRMZWZ0KCkgeyBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7
IH0KLSAgICB2b2lkIHNldEhhc1ZhbGlkVmVydGljYWxNYXJnaW4oKSB7IG1faGFzVmFsaWRWZXJ0
aWNhbE1hcmdpbiA9IHRydWU7IH0KLSAgICB2b2lkIHNldEhhc1ZhbGlkSG9yaXpvbnRhbE1hcmdp
bigpIHsgbV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4gPSB0cnVlOyB9Ci0KLSAgICB2b2lkIHNl
dEhhc1ZhbGlkQm9yZGVyKCkgeyBtX2hhc1ZhbGlkQm9yZGVyID0gdHJ1ZTsgfQotICAgIHZvaWQg
c2V0SGFzVmFsaWRQYWRkaW5nKCkgeyBtX2hhc1ZhbGlkUGFkZGluZyA9IHRydWU7IH0KLQotICAg
IHZvaWQgc2V0SGFzVmFsaWRDb250ZW50SGVpZ2h0KCkgeyBtX2hhc1ZhbGlkQ29udGVudEhlaWdo
dCA9IHRydWU7IH0KLSAgICB2b2lkIHNldEhhc1ZhbGlkQ29udGVudFdpZHRoKCkgeyBtX2hhc1Zh
bGlkQ29udGVudFdpZHRoID0gdHJ1ZTsgfQotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi0KLSAg
ICBMYXlvdXRQb2ludCBtX3RvcExlZnQ7Ci0gICAgTGF5b3V0VW5pdCBtX2NvbnRlbnRXaWR0aDsK
LSAgICBMYXlvdXRVbml0IG1fY29udGVudEhlaWdodDsKLQotICAgIEhvcml6b250YWxNYXJnaW4g
bV9ob3Jpem9udGFsTWFyZ2luOwotICAgIFZlcnRpY2FsTWFyZ2luIG1fdmVydGljYWxNYXJnaW47
Ci0gICAgYm9vbCBtX2hhc0NsZWFyYW5jZSB7IGZhbHNlIH07Ci0KLSAgICBMYXlvdXQ6OkVkZ2Vz
IG1fYm9yZGVyOwotICAgIE9wdGlvbmFsPExheW91dDo6RWRnZXM+IG1fcGFkZGluZzsKLQotI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2hhc1ZhbGlkVG9wIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1faGFzVmFsaWRMZWZ0IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRIb3Jpem9u
dGFsTWFyZ2luIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbiB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ZhbGlkQm9yZGVyIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faGFzVmFsaWRQYWRkaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRDb250ZW50
SGVpZ2h0IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRDb250ZW50V2lkdGggeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSB7IGZhbHNlIH07Ci0j
ZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLX07Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotaW5saW5l
IHZvaWQgR2VvbWV0cnk6OmludmFsaWRhdGVNYXJnaW4oKQotewotICAgIG1faGFzVmFsaWRIb3Jp
em9udGFsTWFyZ2luID0gZmFsc2U7Ci0gICAgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luID0gZmFs
c2U7Ci19Ci0jZW5kaWYKLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6OnRvcCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgKG1faGFzUHJlY29tcHV0ZWRNYXJnaW5C
ZWZvcmUgfHwgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKSk7Ci0gICAgcmV0dXJuIG1fdG9wTGVm
dC55KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEdlb21ldHJ5OjpsZWZ0KCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4p
OwotICAgIHJldHVybiBtX3RvcExlZnQueCgpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQgR2Vv
bWV0cnk6OnRvcExlZnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmICht
X2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHx8IG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbikp
OwotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdp
bik7Ci0gICAgcmV0dXJuIG1fdG9wTGVmdDsKLX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNl
dFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQpCi17Ci0jaWYgQVNTRVJUX0VOQUJM
RUQKLSAgICBzZXRIYXNWYWxpZFRvcCgpOwotICAgIHNldEhhc1ZhbGlkTGVmdCgpOwotI2VuZGlm
Ci0gICAgbV90b3BMZWZ0ID0gdG9wTGVmdDsKLX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNl
dFRvcChMYXlvdXRVbml0IHRvcCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1Zh
bGlkVG9wKCk7Ci0jZW5kaWYKLSAgICBtX3RvcExlZnQuc2V0WSh0b3ApOwotfQotCi1pbmxpbmUg
dm9pZCBHZW9tZXRyeTo6c2V0TGVmdChMYXlvdXRVbml0IGxlZnQpCi17Ci0jaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBzZXRIYXNWYWxpZExlZnQoKTsKLSNlbmRpZgotICAgIG1fdG9wTGVmdC5zZXRY
KGxlZnQpOwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0Q29udGVudEJveEhlaWdodChM
YXlvdXRVbml0IGhlaWdodCkKLXsgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxp
ZENvbnRlbnRIZWlnaHQoKTsKLSNlbmRpZgotICAgIG1fY29udGVudEhlaWdodCA9IGhlaWdodDsK
LX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNldENvbnRlbnRCb3hXaWR0aChMYXlvdXRVbml0
IHdpZHRoKQoteyAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkQ29udGVudFdp
ZHRoKCk7Ci0jZW5kaWYKLSAgICBtX2NvbnRlbnRXaWR0aCA9IHdpZHRoOwotfQotCi1pbmxpbmUg
TGF5b3V0VW5pdCBHZW9tZXRyeTo6Y29udGVudEJveEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1faGFzVmFsaWRDb250ZW50SGVpZ2h0KTsKLSAgICByZXR1cm4gbV9jb250ZW50SGVpZ2h0
OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBHZW9tZXRyeTo6Y29udGVudEJveFdpZHRoKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZENvbnRlbnRXaWR0aCk7Ci0gICAgcmV0dXJuIG1f
Y29udGVudFdpZHRoOwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0SG9yaXpvbnRhbE1h
cmdpbihIb3Jpem9udGFsTWFyZ2luIG1hcmdpbikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IHNldEhhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbigpOwotI2VuZGlmCi0gICAgbV9ob3Jpem9udGFs
TWFyZ2luID0gbWFyZ2luOwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0VmVydGljYWxN
YXJnaW4oVmVydGljYWxNYXJnaW4gbWFyZ2luKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
c2V0SGFzVmFsaWRWZXJ0aWNhbE1hcmdpbigpOwotICAgIGludmFsaWRhdGVQcmVjb21wdXRlZE1h
cmdpbkJlZm9yZSgpOwotI2VuZGlmCi0gICAgbV92ZXJ0aWNhbE1hcmdpbiA9IG1hcmdpbjsKLX0K
LQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNldEJvcmRlcihMYXlvdXQ6OkVkZ2VzIGJvcmRlcikK
LXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkQm9yZGVyKCk7Ci0jZW5kaWYK
LSAgICBtX2JvcmRlciA9IGJvcmRlcjsKLX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNldFBh
ZGRpbmcoT3B0aW9uYWw8TGF5b3V0OjpFZGdlcz4gcGFkZGluZykKLXsKLSNpZiBBU1NFUlRfRU5B
QkxFRAotICAgIHNldEhhc1ZhbGlkUGFkZGluZygpOwotI2VuZGlmCi0gICAgbV9wYWRkaW5nID0g
cGFkZGluZzsKLX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNldFZlcnRpY2FsUGFkZGluZyhM
YXlvdXQ6OlZlcnRpY2FsRWRnZXMgdmVydGljYWxQYWRkaW5nKQotewotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgc2V0SGFzVmFsaWRQYWRkaW5nKCk7Ci0jZW5kaWYKLSAgICBtX3BhZGRpbmcgPSBM
YXlvdXQ6OkVkZ2VzIHsgbV9wYWRkaW5nID8gbV9wYWRkaW5nLT5ob3Jpem9udGFsIDogTGF5b3V0
OjpIb3Jpem9udGFsRWRnZXMoKSwgdmVydGljYWxQYWRkaW5nIH07Ci19Ci0KLWlubGluZSBHZW9t
ZXRyeTo6VmVydGljYWxNYXJnaW4gR2VvbWV0cnk6OnZlcnRpY2FsTWFyZ2luKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKTsKLSAgICByZXR1cm4gbV92ZXJ0
aWNhbE1hcmdpbjsKLX0KLQotaW5saW5lIEdlb21ldHJ5OjpIb3Jpem9udGFsTWFyZ2luIEdlb21l
dHJ5Ojpob3Jpem9udGFsTWFyZ2luKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEhv
cml6b250YWxNYXJnaW4pOwotICAgIHJldHVybiBtX2hvcml6b250YWxNYXJnaW47Ci19Ci0KLWlu
bGluZSBMYXlvdXRVbml0IEdlb21ldHJ5OjptYXJnaW5CZWZvcmUoKSBjb25zdAotewotICAgIEFT
U0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwotICAgIHJldHVybiBtX3ZlcnRpY2FsTWFy
Z2luLmJlZm9yZTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6Om1hcmdpblN0YXJ0
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4pOwotICAg
IHJldHVybiBtX2hvcml6b250YWxNYXJnaW4uc3RhcnQ7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0
IEdlb21ldHJ5OjptYXJnaW5BZnRlcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRW
ZXJ0aWNhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1fdmVydGljYWxNYXJnaW4uYWZ0ZXI7Ci19Ci0K
LWlubGluZSBMYXlvdXRVbml0IEdlb21ldHJ5OjptYXJnaW5FbmQoKSBjb25zdAotewotICAgIEFT
U0VSVChtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1faG9yaXpvbnRh
bE1hcmdpbi5lbmQ7Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBHZW9tZXRyeTo6
cGFkZGluZ1RvcCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAg
ICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRk
aW5nLT52ZXJ0aWNhbC50b3A7Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBHZW9t
ZXRyeTo6cGFkZGluZ0xlZnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFkZGlu
Zyk7Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJu
IG1fcGFkZGluZy0+aG9yaXpvbnRhbC5sZWZ0OwotfQotCi1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gR2VvbWV0cnk6OnBhZGRpbmdCb3R0b20oKSBjb25zdAotewotICAgIEFTU0VSVChtX2hh
c1ZhbGlkUGFkZGluZyk7Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgcmV0dXJuIG1fcGFkZGluZy0+dmVydGljYWwuYm90dG9tOwotfQotCi1pbmxpbmUgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gR2VvbWV0cnk6OnBhZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRkaW5nLT5ob3Jpem9udGFsLnJpZ2h0OwotfQot
Ci1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gR2VvbWV0cnk6OnZlcnRpY2FsUGFkZGluZygp
IGNvbnN0Ci17Ci0gICAgYXV0byBwYWRkaW5nVG9wID0gdGhpcy0+cGFkZGluZ1RvcCgpOwotICAg
IGF1dG8gcGFkZGluZ0JvdHRvbSA9IHRoaXMtPnBhZGRpbmdCb3R0b20oKTsKLSAgICBpZiAoIXBh
ZGRpbmdUb3AgJiYgIXBhZGRpbmdCb3R0b20pCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0
dXJuIHBhZGRpbmdUb3AudmFsdWVPcigwKSArIHBhZGRpbmdCb3R0b20udmFsdWVPcigwKTsKLX0K
LQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEdlb21ldHJ5Ojpob3Jpem9udGFsUGFkZGlu
ZygpIGNvbnN0Ci17Ci0gICAgYXV0byBwYWRkaW5nTGVmdCA9IHRoaXMtPnBhZGRpbmdMZWZ0KCk7
Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSB0aGlzLT5wYWRkaW5nUmlnaHQoKTsKLSAgICBpZiAo
IXBhZGRpbmdMZWZ0ICYmICFwYWRkaW5nUmlnaHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
cmV0dXJuIHBhZGRpbmdMZWZ0LnZhbHVlT3IoMCkgKyBwYWRkaW5nUmlnaHQudmFsdWVPcigwKTsK
LX0KLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6OmJvcmRlclRvcCgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJldHVybiBtX2JvcmRlci52ZXJ0aWNh
bC50b3A7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEdlb21ldHJ5Ojpib3JkZXJMZWZ0KCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEJvcmRlcik7Ci0gICAgcmV0dXJuIG1fYm9yZGVy
Lmhvcml6b250YWwubGVmdDsKLX0KLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6OmJvcmRl
ckJvdHRvbSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJl
dHVybiBtX2JvcmRlci52ZXJ0aWNhbC5ib3R0b207Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEdl
b21ldHJ5Ojpib3JkZXJSaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRCb3Jk
ZXIpOwotICAgIHJldHVybiBtX2JvcmRlci5ob3Jpem9udGFsLnJpZ2h0OwotfQotCi19Ci19Ci0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91
dFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91
dFRyZWVCdWlsZGVyLmNwcAppbmRleCBkNGJmYmEwNjI2NjZmODZmN2RkNzljOWYxMmMyNjI1NzZh
MzJlMjFjLi5lNDI5NDUwZTA1OTgwNDQxZDA1YWFmZGU2NzZlMDkyOWU1Y2ExOWI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxk
ZXIuY3BwCkBAIC0zOCwxMCArMzgsMTAgQEAKICNpbmNsdWRlICJJbnZhbGlkYXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3gu
aCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dENoaWxk
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXJCb3guaCIKICNpbmNsdWRlICJM
YXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJM
YXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAjaW5jbHVkZSAiTGF5b3V0SW5saW5lVGV4
dEJveC5oIgogI2luY2x1ZGUgIkxheW91dExpbmVCcmVha0JveC5oIgpAQCAtNDI2LDcgKzQyNiw3
IEBAIHN0YXRpYyB2b2lkIG91dHB1dElubGluZVJ1bnMoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25z
dCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBvdXRw
dXRMYXlvdXRCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGxheW91dEJveCwgY29u
c3QgR2VvbWV0cnkqIGRpc3BsYXlCb3gsIHVuc2lnbmVkIGRlcHRoKQorc3RhdGljIHZvaWQgb3V0
cHV0TGF5b3V0Qm94KFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIGNv
bnN0IEJveEdlb21ldHJ5KiBib3hHZW9tZXRyeSwgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgdW5z
aWduZWQgcHJpbnRlZENoYXJhY3RlcnMgPSAwOwogICAgIHdoaWxlICgrK3ByaW50ZWRDaGFyYWN0
ZXJzIDw9IGRlcHRoICogMikKQEAgLTQ4MSw4ICs0ODEsOCBAQCBzdGF0aWMgdm9pZCBvdXRwdXRM
YXlvdXRCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
R2VvbQogICAgIGVsc2UKICAgICAgICAgc3RyZWFtIDw8ICJ1bmtub3duIGJveCI7CiAKLSAgICBp
ZiAoZGlzcGxheUJveCkKLSAgICAgICAgc3RyZWFtIDw8ICIgYXQgKCIgPDwgZGlzcGxheUJveC0+
bGVmdCgpIDw8ICIsIiA8PCBkaXNwbGF5Qm94LT50b3AoKSA8PCAiKSBzaXplICIgPDwgZGlzcGxh
eUJveC0+d2lkdGgoKSA8PCAieCIgPDwgZGlzcGxheUJveC0+aGVpZ2h0KCk7CisgICAgaWYgKGJv
eEdlb21ldHJ5KQorICAgICAgICBzdHJlYW0gPDwgIiBhdCAoIiA8PCBib3hHZW9tZXRyeS0+bGVm
dCgpIDw8ICIsIiA8PCBib3hHZW9tZXRyeS0+dG9wKCkgPDwgIikgc2l6ZSAiIDw8IGJveEdlb21l
dHJ5LT53aWR0aCgpIDw8ICJ4IiA8PCBib3hHZW9tZXRyeS0+aGVpZ2h0KCk7CiAgICAgc3RyZWFt
IDw8ICIgKCIgPDwgJmxheW91dEJveCA8PCAiKSI7CiAgICAgaWYgKGlzPElubGluZVRleHRCb3g+
KGxheW91dEJveCkpIHsKICAgICAgICAgYXV0byB0ZXh0Q29udGVudCA9IGRvd25jYXN0PElubGlu
ZVRleHRCb3g+KGxheW91dEJveCkuY29udGVudCgpOwpAQCAtNTA2LDggKzUwNiw4IEBAIHN0YXRp
YyB2b2lkIG91dHB1dExheW91dFRyZWUoY29uc3QgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlLCBU
ZXh0U3RyZWFtJiBzdHJlYW0sCiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBl
PEJveD4ocm9vdENvbnRhaW5lcikpIHsKICAgICAgICAgaWYgKGxheW91dFN0YXRlKSB7CiAgICAg
ICAgICAgICAvLyBOb3QgYWxsIGJveGVzIGdlbmVyYXRlIGRpc3BsYXkgYm94ZXMuCi0gICAgICAg
ICAgICBpZiAobGF5b3V0U3RhdGUtPmhhc0Rpc3BsYXlCb3goY2hpbGQpKQotICAgICAgICAgICAg
ICAgIG91dHB1dExheW91dEJveChzdHJlYW0sIGNoaWxkLCAmbGF5b3V0U3RhdGUtPmdlb21ldHJ5
Rm9yTGF5b3V0Qm94KGNoaWxkKSwgZGVwdGgpOworICAgICAgICAgICAgaWYgKGxheW91dFN0YXRl
LT5oYXNCb3hHZW9tZXRyeShjaGlsZCkpCisgICAgICAgICAgICAgICAgb3V0cHV0TGF5b3V0Qm94
KHN0cmVhbSwgY2hpbGQsICZsYXlvdXRTdGF0ZS0+Z2VvbWV0cnlGb3JCb3goY2hpbGQpLCBkZXB0
aCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb3V0cHV0TGF5b3V0Qm94KHN0
cmVhbSwgY2hpbGQsIG51bGxwdHIsIGRlcHRoKTsKICAgICAgICAgICAgIGlmIChjaGlsZC5lc3Rh
Ymxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpCkBAIC01MjUsNyArNTI1LDcgQEAgdm9p
ZCBzaG93TGF5b3V0VHJlZShjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgTGF5b3V0U3RhdGUq
IGxheW91dFN0YXRlKQogICAgIFRleHRTdHJlYW0gc3RyZWFtKFRleHRTdHJlYW06OkxpbmVNb2Rl
OjpNdWx0aXBsZUxpbmUsIFRleHRTdHJlYW06OkZvcm1hdHRpbmc6OlNWR1N0eWxlUmVjdCk7CiAK
ICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmluaXRpYWxDb250
YWluaW5nQmxvY2soKTsKLSAgICBvdXRwdXRMYXlvdXRCb3goc3RyZWFtLCBpbml0aWFsQ29udGFp
bmluZ0Jsb2NrLCBsYXlvdXRTdGF0ZSA/ICZsYXlvdXRTdGF0ZS0+Z2VvbWV0cnlGb3JMYXlvdXRC
b3goaW5pdGlhbENvbnRhaW5pbmdCbG9jaykgOiBudWxscHRyLCAwKTsKKyAgICBvdXRwdXRMYXlv
dXRCb3goc3RyZWFtLCBpbml0aWFsQ29udGFpbmluZ0Jsb2NrLCBsYXlvdXRTdGF0ZSA/ICZsYXlv
dXRTdGF0ZS0+Z2VvbWV0cnlGb3JCb3goaW5pdGlhbENvbnRhaW5pbmdCbG9jaykgOiBudWxscHRy
LCAwKTsKICAgICBvdXRwdXRMYXlvdXRUcmVlKGxheW91dFN0YXRlLCBzdHJlYW0sIGluaXRpYWxD
b250YWluaW5nQmxvY2ssIDEpOwogICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBzdHJlYW0ucmVsZWFz
ZSgpLnV0ZjgoKS5kYXRhKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5k
ZXggNWI5YzA5ZDJjZjdmZmI1OWYxY2YyMmJmNWNlNmVhOWUwYzZhNjllZC4uYjVlMDhmMmQ4NzBm
NTk2ZDgwMzA2NDcwZjJhNWM1NzQzZDg2MGQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRl
eHQuY3BwCkBAIC0zMyw5ICszMyw5IEBACiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRl
LmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3gu
aCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dENoaWxk
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAj
aW5jbHVkZSAiVGFibGVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgpAQCAtNzUsMTUgKzc1LDE1IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6c2V0VXNlZEdlb21ldHJ5Rm9yQ2VsbHMoTGF5b3V0VW5pdCBhdmFpbGFibGVIb3Jpem9uCiAg
ICAgYXV0byogY3VycmVudFNlY3Rpb24gPSAmcm93TGlzdC5maXJzdCgpLmJveCgpLnBhcmVudCgp
OwogICAgIGZvciAoYXV0byYgY2VsbCA6IGdyaWQuY2VsbHMoKSkgewogICAgICAgICBhdXRvJiBj
ZWxsQm94ID0gY2VsbC0+Ym94KCk7Ci0gICAgICAgIGF1dG8mIGNlbGxEaXNwbGF5Qm94ID0gZm9y
bWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChjZWxsQm94KTsKKyAgICAgICAgYXV0byYgY2VsbEJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoY2VsbEJveCk7CiAgICAg
ICAgIGF1dG8mIHNlY3Rpb24gPSByb3dMaXN0W2NlbGwtPnN0YXJ0Um93KCldLmJveCgpLnBhcmVu
dCgpOwogICAgICAgICBpZiAoJnNlY3Rpb24gIT0gY3VycmVudFNlY3Rpb24pIHsKICAgICAgICAg
ICAgIGN1cnJlbnRTZWN0aW9uID0gJnNlY3Rpb247CiAgICAgICAgICAgICAvLyBXaGlsZSB0aGUg
Z3JpZCBpcyBhIGNvbnRpbnVvdXMgZmxvdyBvZiByb3dzLCBpbiB0aGUgZGlzcGxheSB0cmVlIHRo
ZXkgYXJlIHJlbGF0aXZlIHRvIHRoZWlyIHNlY3Rpb25zLgogICAgICAgICAgICAgc2VjdGlvbk9m
ZnNldCA9IHJvd0xpc3RbY2VsbC0+c3RhcnRSb3coKV0ubG9naWNhbFRvcCgpOwogICAgICAgICB9
Ci0gICAgICAgIGNlbGxEaXNwbGF5Qm94LnNldFRvcChyb3dMaXN0W2NlbGwtPnN0YXJ0Um93KCld
LmxvZ2ljYWxUb3AoKSAtIHNlY3Rpb25PZmZzZXQpOwotICAgICAgICBjZWxsRGlzcGxheUJveC5z
ZXRMZWZ0KGNvbHVtbkxpc3RbY2VsbC0+c3RhcnRDb2x1bW4oKV0ubG9naWNhbExlZnQoKSk7Cisg
ICAgICAgIGNlbGxCb3hHZW9tZXRyeS5zZXRUb3Aocm93TGlzdFtjZWxsLT5zdGFydFJvdygpXS5s
b2dpY2FsVG9wKCkgLSBzZWN0aW9uT2Zmc2V0KTsKKyAgICAgICAgY2VsbEJveEdlb21ldHJ5LnNl
dExlZnQoY29sdW1uTGlzdFtjZWxsLT5zdGFydENvbHVtbigpXS5sb2dpY2FsTGVmdCgpKTsKICAg
ICAgICAgYXV0byBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlID0gcm93TGlzdFtjZWxsLT5zdGFydFJv
dygpXS5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gY2Vs
bC0+c3RhcnRSb3coKSArIDE7IHJvd0luZGV4IDwgY2VsbC0+ZW5kUm93KCk7ICsrcm93SW5kZXgp
CiAgICAgICAgICAgICBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlICs9IHJvd0xpc3Rbcm93SW5kZXhd
LmxvZ2ljYWxIZWlnaHQoKTsKQEAgLTkxLDE0ICs5MSwxNCBAQCB2b2lkIFRhYmxlRm9ybWF0dGlu
Z0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvckNlbGxzKExheW91dFVuaXQgYXZhaWxhYmxlSG9y
aXpvbgogICAgICAgICBsYXlvdXRDZWxsKCpjZWxsLCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2Us
IGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UpOwogICAgICAgICAvLyBGSVhNRTogRmluZCBvdXQgaWYg
aXQgaXMgb2sgdG8gdXNlIHRoZSByZWd1bGFyIHBhZGRpbmcgaGVyZSB0byBhbGlnbiB0aGUgY29u
dGVudCBib3ggaW5zaWRlIGEgdGFsbCBjZWxsIG9yIHdlIG5lZWQgdG8gCiAgICAgICAgIC8vIHVz
ZSBzb21lIGtpbmQgb2YgaW50cmluc2ljIHBhZGRpbmcgc2ltaWxhciB0byBSZW5kZXJUYWJsZUNl
bGwuCi0gICAgICAgIGF1dG8gcGFkZGluZ1RvcCA9IGNlbGxEaXNwbGF5Qm94LnBhZGRpbmdUb3Ao
KS52YWx1ZU9yKExheW91dFVuaXQgeyB9KTsKLSAgICAgICAgYXV0byBwYWRkaW5nQm90dG9tID0g
Y2VsbERpc3BsYXlCb3gucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoTGF5b3V0VW5pdCB7IH0pOwor
ICAgICAgICBhdXRvIHBhZGRpbmdUb3AgPSBjZWxsQm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZh
bHVlT3IoTGF5b3V0VW5pdCB7IH0pOworICAgICAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBjZWxs
Qm94R2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoTGF5b3V0VW5pdCB7IH0pOwogICAg
ICAgICBhdXRvIGludHJpbnNpY1BhZGRpbmdUb3AgPSBMYXlvdXRVbml0IHsgfTsKICAgICAgICAg
YXV0byBpbnRyaW5zaWNQYWRkaW5nQm90dG9tID0gTGF5b3V0VW5pdCB7IH07CiAKICAgICAgICAg
c3dpdGNoIChjZWxsQm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpKSB7CiAgICAgICAgIGNhc2Ug
VmVydGljYWxBbGlnbjo6TWlkZGxlOiB7Ci0gICAgICAgICAgICBhdXRvIGludHJpbnNpY1ZlcnRp
Y2FsUGFkZGluZyA9IHN0ZDo6bWF4KDBfbHUsIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UgLSBjZWxs
RGlzcGxheUJveC52ZXJ0aWNhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSAtIGNlbGxEaXNwbGF5
Qm94LmNvbnRlbnRCb3hIZWlnaHQoKSk7CisgICAgICAgICAgICBhdXRvIGludHJpbnNpY1ZlcnRp
Y2FsUGFkZGluZyA9IHN0ZDo6bWF4KDBfbHUsIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UgLSBjZWxs
Qm94R2VvbWV0cnkudmVydGljYWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkgLSBjZWxsQm94R2Vv
bWV0cnkuY29udGVudEJveEhlaWdodCgpKTsKICAgICAgICAgICAgIGludHJpbnNpY1BhZGRpbmdU
b3AgPSBpbnRyaW5zaWNWZXJ0aWNhbFBhZGRpbmcgLyAyOwogICAgICAgICAgICAgaW50cmluc2lj
UGFkZGluZ0JvdHRvbSA9IGludHJpbnNpY1ZlcnRpY2FsUGFkZGluZyAvIDI7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTEwNiw4ICsxMDYsOCBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6
OnNldFVzZWRHZW9tZXRyeUZvckNlbGxzKExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbgogICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7CiAgICAgICAgICAgICBhdXRvIHJv
d0Jhc2VsaW5lID0gTGF5b3V0VW5pdCB7IHJvd0xpc3RbY2VsbC0+c3RhcnRSb3coKV0uYmFzZWxp
bmUoKSB9OwogICAgICAgICAgICAgYXV0byBjZWxsQmFzZWxpbmUgPSBMYXlvdXRVbml0IHsgY2Vs
bC0+YmFzZWxpbmUoKSB9OwotICAgICAgICAgICAgaW50cmluc2ljUGFkZGluZ1RvcCA9IHN0ZDo6
bWF4KDBfbHUsIHJvd0Jhc2VsaW5lIC0gY2VsbEJhc2VsaW5lIC0gY2VsbERpc3BsYXlCb3guYm9y
ZGVyVG9wKCkpOwotICAgICAgICAgICAgaW50cmluc2ljUGFkZGluZ0JvdHRvbSA9IHN0ZDo6bWF4
KDBfbHUsIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UgLSBjZWxsRGlzcGxheUJveC52ZXJ0aWNhbE1h
cmdpbkJvcmRlckFuZFBhZGRpbmcoKSAtIGludHJpbnNpY1BhZGRpbmdUb3AgLSBjZWxsRGlzcGxh
eUJveC5jb250ZW50Qm94SGVpZ2h0KCkpOworICAgICAgICAgICAgaW50cmluc2ljUGFkZGluZ1Rv
cCA9IHN0ZDo6bWF4KDBfbHUsIHJvd0Jhc2VsaW5lIC0gY2VsbEJhc2VsaW5lIC0gY2VsbEJveEdl
b21ldHJ5LmJvcmRlclRvcCgpKTsKKyAgICAgICAgICAgIGludHJpbnNpY1BhZGRpbmdCb3R0b20g
PSBzdGQ6Om1heCgwX2x1LCBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlIC0gY2VsbEJveEdlb21ldHJ5
LnZlcnRpY2FsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpIC0gaW50cmluc2ljUGFkZGluZ1RvcCAt
IGNlbGxCb3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvckNlbGxzKExheW91dFVuaXQg
YXZhaWxhYmxlSG9yaXpvbgogICAgICAgICAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBjZWxs
Qm94LmZpcnN0SW5GbG93T3JGbG9hdGluZ0NoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQtPmlzQW5vbnltb3VzKCkgfHwgY2hpbGQtPmlzTGluZUJyZWFrQm94KCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGlu
Z1N0YXRlLmRpc3BsYXlCb3goKmNoaWxkKS5tb3ZlVmVydGljYWxseShpbnRyaW5zaWNQYWRkaW5n
VG9wKTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmJveEdlb21ldHJ5KCpj
aGlsZCkubW92ZVZlcnRpY2FsbHkoaW50cmluc2ljUGFkZGluZ1RvcCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGlmIChjZWxsQm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Q29udGVu
dCA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoY2VsbEJv
eCkuZW5zdXJlRGlzcGxheUlubGluZUNvbnRlbnQoKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lk
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvckNlbGxzKExheW91dFVu
aXQgYXZhaWxhYmxlSG9yaXpvbgogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGFkanVzdENl
bGxDb250ZW50V2l0aEluc3RyaW5zaWNQYWRkaW5nQmVmb3JlKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgY2VsbERpc3BsYXlCb3guc2V0VmVydGljYWxQYWRkaW5nKHsgcGFkZGluZ1RvcCArIGludHJp
bnNpY1BhZGRpbmdUb3AsIHBhZGRpbmdCb3R0b20gKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tIH0p
OworICAgICAgICBjZWxsQm94R2VvbWV0cnkuc2V0VmVydGljYWxQYWRkaW5nKHsgcGFkZGluZ1Rv
cCArIGludHJpbnNpY1BhZGRpbmdUb3AsIHBhZGRpbmdCb3R0b20gKyBpbnRyaW5zaWNQYWRkaW5n
Qm90dG9tIH0pOwogICAgIH0KIH0KIApAQCAtMTUyLDEyICsxNTIsMTIgQEAgdm9pZCBUYWJsZUZv
cm1hdHRpbmdDb250ZXh0OjpzZXRVc2VkR2VvbWV0cnlGb3JSb3dzKExheW91dFVuaXQgYXZhaWxh
YmxlSG9yaXpvbnQKICAgICBmb3IgKHNpemVfdCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgcm93
cy5zaXplKCk7ICsrcm93SW5kZXgpIHsKICAgICAgICAgYXV0byYgcm93ID0gcm93c1tyb3dJbmRl
eF07CiAgICAgICAgIGF1dG8mIHJvd0JveCA9IHJvdy5ib3goKTsKLSAgICAgICAgYXV0byYgcm93
RGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gocm93Qm94KTsKKyAgICAg
ICAgYXV0byYgcm93Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShy
b3dCb3gpOwogCi0gICAgICAgIHJvd0Rpc3BsYXlCb3guc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNv
bXB1dGVkUGFkZGluZyhyb3dCb3gsIGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOworICAgICAg
ICByb3dCb3hHZW9tZXRyeS5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5nKHJv
d0JveCwgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlKSk7CiAgICAgICAgIC8vIEludGVybmFsIHRh
YmxlIGVsZW1lbnRzIGRvIG5vdCBoYXZlIG1hcmdpbnMuCi0gICAgICAgIHJvd0Rpc3BsYXlCb3gu
c2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOwotICAgICAgICByb3dEaXNwbGF5Qm94LnNldFZlcnRp
Y2FsTWFyZ2luKHsgfSk7CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJn
aW4oeyB9KTsKKyAgICAgICAgcm93Qm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyB9KTsK
IAogICAgICAgICBhdXRvIGNvbXB1dGVkUm93Qm9yZGVyID0gWyZdIHsKICAgICAgICAgICAgIGF1
dG8gYm9yZGVyID0gZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dCb3gpOwpAQCAtMTgxLDcg
KzE4MSw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9y
Um93cyhMYXlvdXRVbml0IGF2YWlsYWJsZUhvcml6b250CiAgICAgICAgICAgICBjb21wdXRlZFJv
d0JvcmRlci52ZXJ0aWNhbC50b3AgPSB7IH07CiAgICAgICAgICAgICBjb21wdXRlZFJvd0JvcmRl
ci52ZXJ0aWNhbC5ib3R0b20gPSB7IH07CiAgICAgICAgIH0KLSAgICAgICAgcm93RGlzcGxheUJv
eC5zZXRDb250ZW50Qm94SGVpZ2h0KHJvdy5sb2dpY2FsSGVpZ2h0KCkgLSBjb21wdXRlZFJvd0Jv
cmRlci5oZWlnaHQoKSk7CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldENvbnRlbnRCb3hIZWln
aHQocm93LmxvZ2ljYWxIZWlnaHQoKSAtIGNvbXB1dGVkUm93Qm9yZGVyLmhlaWdodCgpKTsKIAog
ICAgICAgICBhdXRvIHJvd0xvZ2ljYWxXaWR0aCA9IGdyaWQuY29sdW1ucygpLmxvZ2ljYWxXaWR0
aCgpICsgMiAqIGdyaWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsKICAgICAgICAgaWYgKGNvbXB1dGVk
Um93Qm9yZGVyLndpZHRoKCkgPiByb3dMb2dpY2FsV2lkdGgpIHsKQEAgLTE4OSwxNSArMTg5LDE1
IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yUm93cyhM
YXlvdXRVbml0IGF2YWlsYWJsZUhvcml6b250CiAgICAgICAgICAgICBjb21wdXRlZFJvd0JvcmRl
ci5ob3Jpem9udGFsLmxlZnQgPSB7IH07CiAgICAgICAgICAgICBjb21wdXRlZFJvd0JvcmRlci5o
b3Jpem9udGFsLnJpZ2h0ID0geyB9OwogICAgICAgICB9Ci0gICAgICAgIHJvd0Rpc3BsYXlCb3gu
c2V0Q29udGVudEJveFdpZHRoKHJvd0xvZ2ljYWxXaWR0aCAtIGNvbXB1dGVkUm93Qm9yZGVyLndp
ZHRoKCkpOwotICAgICAgICByb3dEaXNwbGF5Qm94LnNldEJvcmRlcihjb21wdXRlZFJvd0JvcmRl
cik7CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChyb3dMb2dpY2Fs
V2lkdGggLSBjb21wdXRlZFJvd0JvcmRlci53aWR0aCgpKTsKKyAgICAgICAgcm93Qm94R2VvbWV0
cnkuc2V0Qm9yZGVyKGNvbXB1dGVkUm93Qm9yZGVyKTsKIAogICAgICAgICBpZiAocHJldmlvdXNS
b3cgJiYgJnByZXZpb3VzUm93LT5wYXJlbnQoKSAhPSAmcm93Qm94LnBhcmVudCgpKSB7CiAgICAg
ICAgICAgICAvLyBUaGlzIHJvdyBpcyBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLgogICAgICAgICAg
ICAgcm93TG9naWNhbFRvcCA9IHsgfTsKICAgICAgICAgfQotICAgICAgICByb3dEaXNwbGF5Qm94
LnNldFRvcChyb3dMb2dpY2FsVG9wKTsKLSAgICAgICAgcm93RGlzcGxheUJveC5zZXRMZWZ0KHsg
fSk7CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldFRvcChyb3dMb2dpY2FsVG9wKTsKKyAgICAg
ICAgcm93Qm94R2VvbWV0cnkuc2V0TGVmdCh7IH0pOwogCiAgICAgICAgIHJvd0xvZ2ljYWxUb3Ag
Kz0gcm93LmxvZ2ljYWxIZWlnaHQoKSArIGdyaWQudmVydGljYWxTcGFjaW5nKCk7CiAgICAgICAg
IHByZXZpb3VzUm93ID0gJnJvd0JveDsKQEAgLTIzMSwxNyArMjMxLDE3IEBAIHZvaWQgVGFibGVG
b3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yU2VjdGlvbnMoY29uc3QgQ29uc3Ry
YWludHNGb3JJbkZsCiAgICAgYXV0byBwYWRkaW5nQmVmb3JlID0gT3B0aW9uYWw8TGF5b3V0VW5p
dD4geyB2ZXJ0aWNhbFNwYWNpbmcgfTsKICAgICBhdXRvIHBhZGRpbmdBZnRlciA9IHZlcnRpY2Fs
U3BhY2luZzsKICAgICBmb3IgKGF1dG8mIHNlY3Rpb25Cb3ggOiBjaGlsZHJlbk9mVHlwZTxDb250
YWluZXJCb3g+KHRhYmxlQm94KSkgewotICAgICAgICBhdXRvJiBzZWN0aW9uRGlzcGxheUJveCA9
IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goc2VjdGlvbkJveCk7CisgICAgICAgIGF1dG8m
IHNlY3Rpb25Cb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KHNlY3Rp
b25Cb3gpOwogICAgICAgICAvLyBTZWN0aW9uIGJvcmRlcnMgYXJlIGVpdGhlciBjb2xsYXBzZWQg
b3IgaWdub3JlZC4KLSAgICAgICAgc2VjdGlvbkRpc3BsYXlCb3guc2V0Qm9yZGVyKHsgfSk7Cisg
ICAgICAgIHNlY3Rpb25Cb3hHZW9tZXRyeS5zZXRCb3JkZXIoeyB9KTsKICAgICAgICAgLy8gVXNl
IGZha2UgdmVydGljYWwgcGFkZGluZyB0byBzcGFjZSBvdXQgdGhlIHNlY3Rpb25zLgotICAgICAg
ICBzZWN0aW9uRGlzcGxheUJveC5zZXRQYWRkaW5nKEVkZ2VzIHsgeyB9LCB7IHBhZGRpbmdCZWZv
cmUudmFsdWVPcigwX2x1KSwgcGFkZGluZ0FmdGVyIH0gfSk7CisgICAgICAgIHNlY3Rpb25Cb3hH
ZW9tZXRyeS5zZXRQYWRkaW5nKEVkZ2VzIHsgeyB9LCB7IHBhZGRpbmdCZWZvcmUudmFsdWVPcigw
X2x1KSwgcGFkZGluZ0FmdGVyIH0gfSk7CiAgICAgICAgIHBhZGRpbmdCZWZvcmUgPSBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIC8vIEludGVybmFsIHRhYmxlIGVsZW1lbnRzIGRvIG5vdCBoYXZlIG1h
cmdpbnMuCi0gICAgICAgIHNlY3Rpb25EaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyB9
KTsKLSAgICAgICAgc2VjdGlvbkRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKKyAg
ICAgICAgc2VjdGlvbkJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKKyAgICAg
ICAgc2VjdGlvbkJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7CiAKLSAgICAgICAg
c2VjdGlvbkRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHNlY3Rpb25XaWR0aCk7CisgICAg
ICAgIHNlY3Rpb25Cb3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoc2VjdGlvbldpZHRoKTsK
ICAgICAgICAgYXV0byBzZWN0aW9uQ29udGVudEhlaWdodCA9IExheW91dFVuaXQgeyB9OwogICAg
ICAgICBzaXplX3Qgcm93Q291bnQgPSAwOwogICAgICAgICBmb3IgKGF1dG8mIHJvd0JveCA6IGNo
aWxkcmVuT2ZUeXBlPENvbnRhaW5lckJveD4oc2VjdGlvbkJveCkpIHsKQEAgLTI0OSwxMSArMjQ5
LDExIEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yU2Vj
dGlvbnMoY29uc3QgQ29uc3RyYWludHNGb3JJbkZsCiAgICAgICAgICAgICArK3Jvd0NvdW50Owog
ICAgICAgICB9CiAgICAgICAgIHNlY3Rpb25Db250ZW50SGVpZ2h0ICs9IHZlcnRpY2FsU3BhY2lu
ZyAqIChyb3dDb3VudCAtIDEpOwotICAgICAgICBzZWN0aW9uRGlzcGxheUJveC5zZXRDb250ZW50
Qm94SGVpZ2h0KHNlY3Rpb25Db250ZW50SGVpZ2h0KTsKLSAgICAgICAgc2VjdGlvbkRpc3BsYXlC
b3guc2V0TGVmdChjb25zdHJhaW50cy5ob3Jpem9udGFsLmxvZ2ljYWxMZWZ0KTsKLSAgICAgICAg
c2VjdGlvbkRpc3BsYXlCb3guc2V0VG9wKGxvZ2ljYWxUb3ApOworICAgICAgICBzZWN0aW9uQm94
R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChzZWN0aW9uQ29udGVudEhlaWdodCk7CisgICAg
ICAgIHNlY3Rpb25Cb3hHZW9tZXRyeS5zZXRMZWZ0KGNvbnN0cmFpbnRzLmhvcml6b250YWwubG9n
aWNhbExlZnQpOworICAgICAgICBzZWN0aW9uQm94R2VvbWV0cnkuc2V0VG9wKGxvZ2ljYWxUb3Ap
OwogCi0gICAgICAgIGxvZ2ljYWxUb3AgKz0gc2VjdGlvbkRpc3BsYXlCb3guaGVpZ2h0KCk7Cisg
ICAgICAgIGxvZ2ljYWxUb3AgKz0gc2VjdGlvbkJveEdlb21ldHJ5LmhlaWdodCgpOwogICAgIH0K
IH0KIApAQCAtMjYzLDEzICsyNjMsMTMgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojps
YXlvdXRDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCwgTGF5b3V0VW5pdAogCiAgICAg
YXV0byYgZ3JpZCA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpOwogICAgIGF1dG8mIGNl
bGxCb3ggPSBjZWxsLmJveCgpOwotICAgIGF1dG8mIGNlbGxEaXNwbGF5Qm94ID0gZm9ybWF0dGlu
Z1N0YXRlKCkuZGlzcGxheUJveChjZWxsQm94KTsKKyAgICBhdXRvJiBjZWxsQm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShjZWxsQm94KTsKIAotICAgIGNlbGxEaXNw
bGF5Qm94LnNldEJvcmRlcihnZW9tZXRyeSgpLmNvbXB1dGVkQ2VsbEJvcmRlcihjZWxsKSk7Ci0g
ICAgY2VsbERpc3BsYXlCb3guc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhj
ZWxsQm94LCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpKTsKKyAgICBjZWxsQm94R2VvbWV0cnku
c2V0Qm9yZGVyKGdlb21ldHJ5KCkuY29tcHV0ZWRDZWxsQm9yZGVyKGNlbGwpKTsKKyAgICBjZWxs
Qm94R2VvbWV0cnkuc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhjZWxsQm94
LCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpKTsKICAgICAvLyBJbnRlcm5hbCB0YWJsZSBlbGVt
ZW50cyBkbyBub3QgaGF2ZSBtYXJnaW5zLgotICAgIGNlbGxEaXNwbGF5Qm94LnNldEhvcml6b250
YWxNYXJnaW4oeyB9KTsKLSAgICBjZWxsRGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IH0p
OworICAgIGNlbGxCb3hHZW9tZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgfSk7CisgICAgY2Vs
bEJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7CiAKICAgICBhdXRvIGF2YWlsYWJs
ZVNwYWNlRm9yQ29udGVudCA9IFsmXSB7CiAgICAgICAgIGF1dG8mIGNvbHVtbkxpc3QgPSBncmlk
LmNvbHVtbnMoKS5saXN0KCk7CkBAIC0yNzgsOSArMjc4LDkgQEAgdm9pZCBUYWJsZUZvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXRDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCwgTGF5b3V0
VW5pdAogICAgICAgICAgICAgbG9naWNhbFdpZHRoICs9IGNvbHVtbkxpc3QuYXQoY29sdW1uSW5k
ZXgpLmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICAvLyBObyBjb2x1bW4gc3BhY2luZyB3aGVuIHNw
YW5uaW5nLgogICAgICAgICBsb2dpY2FsV2lkdGggKz0gKGNlbGwuY29sdW1uU3BhbigpIC0gMSkg
KiBncmlkLmhvcml6b250YWxTcGFjaW5nKCk7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsV2lkdGgg
LSBjZWxsRGlzcGxheUJveC5ob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpOworICAg
ICAgICByZXR1cm4gbG9naWNhbFdpZHRoIC0gY2VsbEJveEdlb21ldHJ5Lmhvcml6b250YWxNYXJn
aW5Cb3JkZXJBbmRQYWRkaW5nKCk7CiAgICAgfSgpOwotICAgIGNlbGxEaXNwbGF5Qm94LnNldENv
bnRlbnRCb3hXaWR0aChhdmFpbGFibGVTcGFjZUZvckNvbnRlbnQpOworICAgIGNlbGxCb3hHZW9t
ZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoYXZhaWxhYmxlU3BhY2VGb3JDb250ZW50KTsKIAogICAg
IGlmIChjZWxsQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKSB7CiAgICAgICAgIGF1dG8g
Y29uc3RyYWludHNGb3JDZWxsQ29udGVudCA9IGdlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZs
b3dDb250ZW50KGNlbGxCb3gpOwpAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgVGFibGVGb3JtYXR0
aW5nQ29udGV4dDo6bGF5b3V0Q2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwsIExheW91
dFVuaXQKICAgICAgICAgZmxvYXRpbmdTdGF0ZUZvckNlbGxDb250ZW50LmNsZWFyKCk7CiAgICAg
ICAgIExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNlbGxCb3gsIGxheW91
dFN0YXRlKCkpLT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBjb25zdHJh
aW50c0ZvckNlbGxDb250ZW50KTsKICAgICB9Ci0gICAgY2VsbERpc3BsYXlCb3guc2V0Q29udGVu
dEJveEhlaWdodChnZW9tZXRyeSgpLmNlbGxIZWlnaChjZWxsQm94KSk7CisgICAgY2VsbEJveEdl
b21ldHJ5LnNldENvbnRlbnRCb3hIZWlnaHQoZ2VvbWV0cnkoKS5jZWxsSGVpZ2goY2VsbEJveCkp
OwogfQogCiBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxl
Zm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDEyMTRm
MTYyM2NiNjRjMzA5NGM4YjRkNzM2MjEyOTVhNjI0ZGZlNDMuLjlkNDViNDljMmFjMjVmZjllMTkx
YmZmZGJmYzQ2MjEzZmViN2RmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90
YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAKQEAgLTI5LDkgKzI5LDkgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2lu
Y2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgog
I2luY2x1ZGUgIkxheW91dERlc2NlbmRhbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxheW91dEdl
b21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgogI2lu
Y2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUxheW91dC5jcHAKaW5kZXggODE0ZmIxMzBj
NmEwODUwYjI3NWZkOTY5NjU1OTc1OTY1ODZkNGQ3Ny4uMWI3MDAwNDEzZjAyZmNlY2M2ZWE1MmNh
ZWUwZTczYTRlMjk0NGZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxl
Zm9ybWF0dGluZy9UYWJsZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUxheW91dC5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkxheW91dEJveC5oIgot
I2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnku
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcAppbmRleCBkYWEyYzViMTYz
ZTM3M2YwOGFjMWJhNTBkYzUzMzIyNjI1N2FkZDViLi4wYzhiZTc5NDk1MWI3OGUxOWI3NTkyODg1
YmJmODM1ZWIxYzk1M2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
d0xheW91dENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5
b3V0Q29udGV4dC5jcHAKQEAgLTQyLDggKzQyLDggQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKICNpbmNsdWRlICJJbnZhbGlkYXRpb25Db250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgog
I2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgog
I2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1aWxkZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJEZXNjZW5kYW50SXRlcmF0b3IuaCIKQEAgLTgxLDcgKzgxLDcgQEAg
dm9pZCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXRVc2luZ0Zvcm1hdHRpbmdDb250ZXh0
KCkKIAogICAgIC8vIENsZWFuIHVwIHRoZSByZW5kZXIgdHJlZSBzdGF0ZSB3aGVuIHdlIGRvbid0
IHJ1biBSZW5kZXJWaWV3OjpsYXlvdXQuCiAgICAgaWYgKHJlbmRlclZpZXcubmVlZHNMYXlvdXQo
KSkgewotICAgICAgICBhdXRvIGNvbnRlbnRTaXplID0gbV9sYXlvdXRTdGF0ZS0+Z2VvbWV0cnlG
b3JMYXlvdXRCb3goKm1fbGF5b3V0U3RhdGUtPnJvb3QoKS5maXJzdENoaWxkKCkpLnNpemUoKTsK
KyAgICAgICAgYXV0byBjb250ZW50U2l6ZSA9IG1fbGF5b3V0U3RhdGUtPmdlb21ldHJ5Rm9yQm94
KCptX2xheW91dFN0YXRlLT5yb290KCkuZmlyc3RDaGlsZCgpKS5zaXplKCk7CiAgICAgICAgIHJl
bmRlclZpZXcuc2V0U2l6ZShjb250ZW50U2l6ZSk7CiAgICAgICAgIHJlbmRlclZpZXcucmVwYWlu
dFZpZXdSZWN0YW5nbGUoeyAwLCAwLCBjb250ZW50U2l6ZS53aWR0aCgpLCBjb250ZW50U2l6ZS5o
ZWlnaHQoKSB9KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408792</attachid>
            <date>2020-09-14 22:19:03 -0700</date>
            <delta_ts>2020-09-14 22:52:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216523-20200914221901.patch</filename>
            <type>text/plain</type>
            <size>162236</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIwZTE5ZTRkNzcxM2Vi
MGY4YjM2MDJkNTY3ZDMxYTJjYTdkYzI3Yy4uNzI0MDY3OTdiZTUyZGYzNDYzOGM0MzQ0NjEzZmY5
OTA0YjRmMTAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0NCBAQAorMjAyMC0wOS0xNCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdIExheW91dDo6Qm94
R2VvbWV0cnkgcmVuYW1lLCBwYXJ0IElJLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJh
c2VyLgorCisgICAgICAgIFJlbmFtZSBMYXlvdXQ6Okdlb21ldHJ5IHRvIExheW91dDo6Qm94R2Vv
bWV0cnkgKHNvIHRoYXQgbGF0ZXIgd2UgY2FuIGludHJvZHVjZSBMYXlvdXQ6OkxpbmVHZW9tZXRy
eSBhbmQgTGF5b3V0OjpSdW5HZW9tZXRyeSkgYW5kCisgICAgICAgIG1ha2Ugc3VyZSB3ZSBkb24n
dCB1c2UgZGlzcGxheUJveCBhcyBhIHZhcmlhYmxlIG5hbWUgaW4gTGF5b3V0IG5hbWVzcGFjZS4K
KworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9m
Rmxvd0hvcml6b250YWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFk
ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpnZW9t
ZXRyeUZvckJveCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0Lmg6
CisgICAgICAgICogbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1Zl
cnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAgICAqIGxheW91dC9Gb3JtYXR0
aW5nU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nU3RhdGU6
OmJveEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ1N0YXRl
OjpkaXNwbGF5Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ1N0YXRl
Lmg6CisgICAgICAgICogbGF5b3V0L0xheW91dENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMYXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMYXlvdXRDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFN1YnRyZWUpOgorICAg
ICAgICAqIGxheW91dC9MYXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxheW91dFN0YXRlOjpnZW9tZXRyeUZvclJvb3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMYXlvdXRTdGF0ZTo6ZW5zdXJlR2VvbWV0cnlGb3JCb3hTbG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6Omdlb21ldHJ5Rm9yUm9vdExheW91dEJveCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjplbnN1cmVEaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94U2xvdyk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L0xheW91
dFN0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjpoYXNCb3hH
ZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0YXRlOjpl
bnN1cmVHZW9tZXRyeUZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxheW91dFN0
YXRlOjpnZW9tZXRyeUZvckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJv
eDo6Y2FjaGVkR2VvbWV0cnlGb3JMYXlvdXRTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxheW91dFN0YXRlOjpoYXNEaXNwbGF5Qm94IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6OmVuc3VyZUdlb21ldHJ5Rm9yTGF5
b3V0Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGF5b3V0U3RhdGU6
Omdlb21ldHJ5Rm9yTGF5b3V0Qm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Qm94OjpjYWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0U3RhdGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGxheW91dC9WZXJpZmljYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpvdXRwdXRNaXNtYXRjaGluZ0Jsb2NrQm94SW5mb3JtYXRpb25JZk5lZWRlZCk6
CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwcmVjb21wdXRlVmVydGljYWxQb3NpdGlvbkZvckJveEFu
ZEFuY2VzdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVQb3NpdGlvblRvQXZvaWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlVmVydGljYWxQb3NpdGlvbkZv
ckZsb2F0Q2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAg
ICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRy
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdpbik6CisgICAgICAgICog
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcDoK
KyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJn
aW5Db2xsYXBzZTo6aGFzQ2xlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tm
b3JtYXR0aW5nL3RhYmxld3JhcHBlci9UYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmdGb3JUYWJsZUJveCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVXaWR0aEFuZE1hcmdpbkZvclRhYmxlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6VGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1h
cmdpbkZvclRhYmxlQm94KToKKyAgICAgICAgKiBsYXlvdXQvZGlzcGxheS9EaXNwbGF5TGF5ZXJD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkxheWVyQ29udHJvbGxl
cjo6cHJlcGFyZUZvckRpc3BsYXkpOgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNw
bGF5UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpwYWludEJveERlY29y
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6UGFpbnRlcjo6YWJzb2x1dGVCb3hH
ZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpwYWludFN1YnRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Y29sbGVjdFBhaW50Um9vdHNBbmRDb250ZW50UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpQYWludGVyOjphYnNvbHV0ZURpc3BsYXlCb3gp
OiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFpbnRlci5o
OgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmg6CisgICAgICAgICogbGF5
b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGbG9hdGluZ0NvbnRleHQ6OnBvc2l0aW9uRm9yRmxvYXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRleHQ6OnBvc2l0aW9uRm9yTm9uRmxvYXRpbmdGbG9h
dEF2b2lkZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRl
eHQ6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsb2F0aW5nQ29udGV4dDo6
YWJzb2x1dGVCb3hHZW9tZXRyeUNvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6RmxvYXRpbmdDb250ZXh0OjphYnNvbHV0ZURpc3BsYXlCb3hDb29yZGluYXRlcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQu
aDoKKyAgICAgICAgKiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ1N0YXRlOjpGbG9hdEl0ZW06OkZsb2F0SXRlbSk6Cisg
ICAgICAgICogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6cmVjdFdpdGhNYXJnaW4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ1N0YXRlOjpGbG9hdEl0ZW06Omhv
cml6b250YWxNYXJnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGlu
Z1N0YXRlOjpGbG9hdEl0ZW06OmJvdHRvbSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5l
TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSG9yaXpvbnRhbE1hcmdp
bik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlV2lkdGhBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbik6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JM
aW5lQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpjcmVhdGVEaXNwbGF5Qm94ZXNGb3JMaW5lQ29udGVudCk6IERlbGV0ZWQuCisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDoK
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94Lmg6CisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OnByZXBh
cmVGbG9hdGluZ1N0YXRlKToKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3g6OnNldGNhY2hlZEdlb21ldHJ5Rm9y
TGF5b3V0U3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3g6OnNldENh
Y2hlZERpc3BsYXlCb3hGb3JMYXlvdXRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
bGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94Lmg6CisgICAgICAgICogbGF5b3V0L2xheW91dHRy
ZWUvTGF5b3V0Qm94R2VvbWV0cnkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5
b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0cnkuY3BwLgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpCb3hHZW9tZXRyeTo6Qm94R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCb3hHZW9tZXRyeTo6fkJveEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Qm94R2VvbWV0cnk6Om1hcmdpbkJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJveEdlb21ldHJ5Ojpib3JkZXJCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCb3hHZW9tZXRyeTo6cGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJveEdlb21ldHJ5Ojpjb250ZW50Qm94IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvbGF5
b3V0dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
bGF5b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0cnkuaC4KKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6UmVjdDo6ZXhwYW5kSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6UmVjdDo6ZXhwYW5kVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJl
Y3Q6OmludGVyc2VjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojpp
bnZhbGlkYXRlVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6aW52YWxpZGF0
ZUxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjppbnZhbGlkYXRlV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjppbnZhbGlkYXRlSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6aGFzVmFsaWRQb3NpdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6Omhhc1ZhbGlkU2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6Omhhc1ZhbGlkR2VvbWV0cnkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6UmVjdDo6aW52YWxpZGF0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6UmVjdDo6c2V0SGFzVmFsaWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlJlY3Q6OnNldEhhc1ZhbGlkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6
OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OmxlZnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojpib3R0b20gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpyaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlJlY3Q6OnRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpSZWN0Ojpib3R0b21SaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJl
Y3Q6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojp3aWR0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OmhlaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6OnNldFRvcExlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpSZWN0OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpS
ZWN0OjpzZXRMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6c2V0V2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpzZXRIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6UmVjdDo6c2hpZnRMZWZ0VG8pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojpz
aGlmdFJpZ2h0VG8pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpSZWN0OjpzaGlmdFRvcFRv
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6c2hpZnRCb3R0b21Ubyk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6Om1vdmVIb3Jpem9udGFsbHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpSZWN0Ojptb3ZlVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OlJlY3Q6OmV4cGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlJlY3Q6
OmNsb25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UmVjdDo6b3BlcmF0b3Ig
TGF5b3V0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
Ojpib3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6
cmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym90
dG9tUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6
c2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojp3aWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpoZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6aXNFbXB0eSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpyZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnJlY3RXaXRoTWFyZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Omhhc0NsZWFy
YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojp2ZXJ0
aWNhbEJvcmRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
Ojpob3Jpem9udGFsQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94
R2VvbWV0cnk6OmNvbnRlbnRCb3hUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpCb3hHZW9tZXRyeTo6Y29udGVudEJveExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCb3hHZW9tZXRyeTo6Y29udGVudEJveEJvdHRvbSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpjb250ZW50Qm94UmlnaHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6cGFkZGluZ0JveFRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nQm94TGVmdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nQm94
Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnBh
ZGRpbmdCb3hSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21l
dHJ5OjpwYWRkaW5nQm94SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
Qm94R2VvbWV0cnk6OnBhZGRpbmdCb3hXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJveEdlb21ldHJ5Ojpib3JkZXJCb3hIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9yZGVyQm94V2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6bWFyZ2luQm94SGVpZ2h0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Om1hcmdpbkJveFdpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnZlcnRpY2FsTWFy
Z2luQm9yZGVyQW5kUGFkZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJv
eEdlb21ldHJ5Ojpob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRIYXNQcmVjb21wdXRlZE1hcmdp
bkJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojptb3ZlSG9y
aXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Om1vdmVW
ZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6Om1vdmUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6bW92ZUJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldEhhc0NsZWFyYW5jZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjppbnZhbGlkYXRlQm9yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmludmFsaWRhdGVQYWRkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmludmFsaWRhdGVQcmVjb21w
dXRlZE1hcmdpbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
OjpzZXRIYXNWYWxpZFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
OjpzZXRIYXNWYWxpZExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRy
eTo6c2V0SGFzVmFsaWRWZXJ0aWNhbE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJveEdlb21ldHJ5OjpzZXRIYXNWYWxpZEhvcml6b250YWxNYXJnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0SGFzVmFsaWRCb3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0SGFzVmFsaWRQYWRkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldEhhc1ZhbGlkQ29udGVudEhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRIYXNWYWxpZENv
bnRlbnRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjppbnZh
bGlkYXRlTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnRv
cCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpsZWZ0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnRvcExlZnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0VG9wTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6c2V0TGVmdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRDb250ZW50Qm94SGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldENvbnRlbnRCb3hXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojpjb250ZW50Qm94SGVpZ2h0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmNvbnRlbnRCb3hXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRIb3Jp
em9udGFsTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNl
dFZlcnRpY2FsTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6
OnNldEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpzZXRQ
YWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnNldFZlcnRp
Y2FsUGFkZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojp2ZXJ0
aWNhbE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5
Ojpob3Jpem9udGFsTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94
R2VvbWV0cnk6Om1hcmdpbkJlZm9yZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJveEdlb21ldHJ5OjptYXJnaW5TdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJveEdlb21ldHJ5OjptYXJnaW5BZnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJveEdlb21ldHJ5OjptYXJnaW5FbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpCb3hHZW9tZXRyeTo6cGFkZGluZ1RvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5OjpwYWRkaW5nQm90dG9tIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OnBhZGRpbmdSaWdodCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJveEdlb21ldHJ5Ojp2ZXJ0aWNhbFBhZGRpbmcgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6aG9yaXpvbnRhbFBhZGRp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9yZGVy
VG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6OmJvcmRl
ckxlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCb3hHZW9tZXRyeTo6Ym9y
ZGVyQm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Qm94R2VvbWV0cnk6
OmJvcmRlclJpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRU
cmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dExheW91dEJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Om91dHB1dExheW91dFRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpzaG93TGF5b3V0VHJlZSk6CisgICAgICAgICogbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yQ2Vs
bHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpz
ZXRVc2VkR2VvbWV0cnlGb3JSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVG
b3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yU2VjdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRDZWxsKToKKyAg
ICAgICAgKiBsYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHA6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUxheW91dC5j
cHA6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlld0xheW91dENvbnRleHQ6OmxheW91dFVzaW5nRm9ybWF0dGluZ0Nv
bnRleHQpOgorCiAyMDIwLTA5LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgRHJvcCBzbW9vdGhpbmcgbG9naWMgZnJvbSBEZWxheURTUEtlcm5lbDo6cHJvY2Vz
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CmluZGV4IGY3MjhlNmI2NGExNzQ5NzIzZmUxNzE5YzVhMjY1NTZjZWUx
Zjk4ODQuLmNiMDgzMTg1YzlhNTM2NGVjOGQ0NTI2NWYxOTg1M2U4ZGMxMDQ4MDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CkBAIC0xNDU5LDcgKzE0NTksNyBAQCBsYXlvdXQvaW52YWxpZGF0aW9uL0ludmFsaWRh
dGlvbkNvbnRleHQuY3BwCiBsYXlvdXQvaW52YWxpZGF0aW9uL0ludmFsaWRhdGlvblN0YXRlLmNw
cAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5
b3V0Q29udGFpbmVyQm94LmNwcAotbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0cnkuY3Bw
CitsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5jcHAKIGxheW91dC9sYXlvdXR0
cmVlL0xheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9M
YXlvdXRJbmxpbmVUZXh0Qm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0TGluZUJyZWFr
Qm94LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDkyM2EzYTIzNzlkYmJiNGFiMWY4MmE4ZjRmYzI5ZTlhNmRiMWRhNmIuLjY4
MjRlZDBiNDE3YTM2NDkwYTkwMmIwMTI2MjI0MzA1MDMwZDY2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYwNjEsOCArNjA2
MSw4IEBACiAJCTBGRUMxMjBCMjJCRjJDQzcwMDRFOUQzNSAvKiBMYXllckFuY2VzdG9yQ2xpcHBp
bmdTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFj
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUYyMENEMUJENEEyNDEwMDEy
OEU1RCAvKiBMZW5ndGhTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExlbmd0aFNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVGMjBD
RjFCRDRBNjRGMDAxMjhFNUQgLyogUmVuZGVyU3R5bGVDb25zdGFudHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU3R5bGVDb25zdGFudHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkYyOUE1MzI1MTAxQTYxMDAzQzM0RTIgLyogTGF5
b3V0R2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0R2VvbWV0cnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZGMjlBNTUyNTEwMUE2MTAwM0MzNEUyIC8qIExheW91dEdl
b21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dEdlb21ldHJ5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGMjlBNTMyNTEwMUE2MTAwM0MzNEUyIC8qIExheW91
dEJveEdlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEJveEdlb21ldHJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjI5QTU1MjUxMDFBNjEwMDNDMzRFMiAvKiBMYXlv
dXRCb3hHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRCb3hHZW9tZXRyeS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjJFODBDMUVFMEQ0MzAwMDlFQUJE
NCAvKiBQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZGM0I5MjQxRUUzQjZERTAwQjg0MTQ0IC8qIEpTRE9NUXVhZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVF1YWQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkYzQjkyNTFFRTNCNkRFMDBCODQxNDQgLyog
SlNET01RdWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NUXVhZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc0NzksMTIgKzE3NDc5LDEyIEBACiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQkxMTVDRkE5NjIwOEI5NTJCMDAxRTY5OTEgLyogTGF5b3V0Qm94
LmNwcCAqLywKIAkJCQkxMTVDRkE5NTIwOEI5NTJCMDAxRTY5OTEgLyogTGF5b3V0Qm94LmggKi8s
CisJCQkJMEZGMjlBNTUyNTEwMUE2MTAwM0MzNEUyIC8qIExheW91dEJveEdlb21ldHJ5LmNwcCAq
LywKKwkJCQkwRkYyOUE1MzI1MTAxQTYxMDAzQzM0RTIgLyogTGF5b3V0Qm94R2VvbWV0cnkuaCAq
LywKIAkJCQkxMTEwMEZDOTIwOTI3Q0JDMDA4MUFBNkMgLyogTGF5b3V0Q2hpbGRJdGVyYXRvci5o
ICovLAogCQkJCTExOTlGQTQ1MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJCb3gu
Y3BwICovLAogCQkJCTExOTlGQTQ0MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJC
b3guaCAqLywKIAkJCQkxMUIwNDJGQjIwQjBFMjE0MDA4MjhBNkIgLyogTGF5b3V0RGVzY2VuZGFu
dEl0ZXJhdG9yLmggKi8sCi0JCQkJMEZGMjlBNTUyNTEwMUE2MTAwM0MzNEUyIC8qIExheW91dEdl
b21ldHJ5LmNwcCAqLywKLQkJCQkwRkYyOUE1MzI1MTAxQTYxMDAzQzM0RTIgLyogTGF5b3V0R2Vv
bWV0cnkuaCAqLywKIAkJCQk2RkIwRUQxMTI0MjdCNkM2MDAyNzM3RTYgLyogTGF5b3V0SW5pdGlh
bENvbnRhaW5pbmdCbG9jay5jcHAgKi8sCiAJCQkJNkY2MzgzRjQyNDI3QUY0OTAwREFCQTUzIC8q
IExheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCAqLywKIAkJCQk2RjBCOThCNjIzRjI2OTA2
MDBFRUMyRjIgLyogTGF5b3V0SW5saW5lVGV4dEJveC5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCA2NWU4NjNhNGIyODFlMTMzNWVjNjdl
MmE5MjY1YzUzNmE5MTk2YThhLi5jMTMxNTM2MzYyMzAwNDQzOTMzZDQ2ODMwMDYwMzIyYmJlODUw
ZmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAg
LTMxLDEwICszMSwxMCBAQAogI2luY2x1ZGUgIkZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUg
IkludmFsaWRhdGlvblN0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0Qm94LmgiCisjaW5jbHVkZSAi
TGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXJCb3guaCIKICNp
bmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0RGVzY2VuZGFudEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0
aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwbGFjZWRCb3guaCIKICNp
bmNsdWRlICJMYXlvdXRTdGF0ZS5oIgpAQCAtOTAsMTEgKzkwLDExIEBAIHZvaWQgRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBs
YXlvdXRCb3gsCiAgICAgICAgICAgICBob3Jpem9udGFsR2VvbWV0cnkgPSBtaW5Ib3Jpem9udGFs
R2VvbWV0cnk7CiAgICAgfQogCi0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0
ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKLSAgICBkaXNwbGF5Qm94LnNldExlZnQoaG9yaXpv
bnRhbEdlb21ldHJ5LmxlZnQgKyBob3Jpem9udGFsR2VvbWV0cnkuY29udGVudFdpZHRoQW5kTWFy
Z2luLnVzZWRNYXJnaW4uc3RhcnQpOwotICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRo
KGhvcml6b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKTsK
KyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxh
eW91dEJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0TGVmdChob3Jpem9udGFsR2VvbWV0cnkubGVm
dCArIGhvcml6b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5z
dGFydCk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGhvcml6b250YWxHZW9t
ZXRyeS5jb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKTsKICAgICBhdXRvJiB1c2Vk
SG9yaXpvbnRhbE1hcmdpbiA9IGhvcml6b250YWxHZW9tZXRyeS5jb250ZW50V2lkdGhBbmRNYXJn
aW4udXNlZE1hcmdpbjsKLSAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5zdGFydCwgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kIH0pOworICAg
IGJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydCwgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kIH0pOwogfQogCiB2b2lkIEZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91
dEJveCwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50JiBjb25zdHJhaW50cykK
QEAgLTExOCwxOSArMTE4LDE5IEBAIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVPdXRP
ZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjCiAgICAgICAgICAg
ICB2ZXJ0aWNhbEdlb21ldHJ5ID0gbWluVmVydGljYWxHZW9tZXRyeTsKICAgICB9CiAKLSAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gp
OworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnko
bGF5b3V0Qm94KTsKICAgICBhdXRvIG5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luID0gdmVydGlj
YWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbjsKLSAg
ICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0aWNhbEdlb21ldHJ5LnRvcCArIG5vbkNvbGxhcHNlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZSk7Ci0gICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0
KHZlcnRpY2FsR2VvbWV0cnkuY29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KTsK
KyAgICBib3hHZW9tZXRyeS5zZXRUb3AodmVydGljYWxHZW9tZXRyeS50b3AgKyBub25Db2xsYXBz
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUpOworICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hI
ZWlnaHQodmVydGljYWxHZW9tZXRyeS5jb250ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWln
aHQpOwogICAgIC8vIE1hcmdpbnMgb2YgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJveGVzIGRvIG5v
dCBjb2xsYXBzZS4KLSAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgbm9uQ29sbGFw
c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlLCBub25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbi5hZnRl
ciB9KTsKKyAgICBib3hHZW9tZXRyeS5zZXRWZXJ0aWNhbE1hcmdpbih7IG5vbkNvbGxhcHNlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZSwgbm9uQ29sbGFwc2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgfSk7
CiB9CiAKIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250
YWxDb25zdHJhaW50KQogewotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUo
KS5kaXNwbGF5Qm94KGxheW91dEJveCk7Ci0gICAgZGlzcGxheUJveC5zZXRCb3JkZXIoZ2VvbWV0
cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKLSAgICBkaXNwbGF5Qm94LnNldFBhZGRp
bmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3Ry
YWludC5sb2dpY2FsV2lkdGgpKTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdT
dGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0Qm9yZGVy
KGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIobGF5b3V0Qm94KSk7CisgICAgYm94R2VvbWV0cnku
c2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhsYXlvdXRCb3gsIGhvcml6b250
YWxDb25zdHJhaW50LmxvZ2ljYWxXaWR0aCkpOwogfQogCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRPdXRPZkZsb3dDb250ZW50KEludmFsaWRhdGlvblN0YXRlJiBpbnZhbGlkYXRpb25T
dGF0ZSwgY29uc3QgQ29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50JiBjb25zdHJhaW50cykK
QEAgLTE2OCwxMSArMTY4LDExIEBAIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dE91dE9m
Rmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGludmFsaWRhdGlvblN0CiAgICAgTE9HX1dJ
VEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIkVuZDogbGF5b3V0
IG91dC1vZi1mbG93IGNvbnRlbnQgLT4gY29udGV4dDogIiA8PCAmbGF5b3V0U3RhdGUoKSA8PCAi
IHJvb3Q6ICIgPDwgJnJvb3QoKSk7CiB9CiAKLWNvbnN0IExheW91dDo6R2VvbWV0cnkmIEZvcm1h
dHRpbmdDb250ZXh0OjpnZW9tZXRyeUZvckJveChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9u
YWw8RXNjYXBlUmVhc29uPiBlc2NhcGVSZWFzb24pIGNvbnN0Citjb25zdCBCb3hHZW9tZXRyeSYg
Rm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5Rm9yQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBP
cHRpb25hbDxFc2NhcGVSZWFzb24+IGVzY2FwZVJlYXNvbikgY29uc3QKIHsKICAgICBVTlVTRURf
UEFSQU0oZXNjYXBlUmVhc29uKTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGF1dG8gaXNPa1Rv
QWNjZXNzRGlzcGxheUJveCA9IFsmXSB7CisgICAgYXV0byBpc09rVG9BY2Nlc3NCb3hHZW9tZXRy
eSA9IFsmXSB7CiAgICAgICAgIGlmICghaXM8SW5pdGlhbENvbnRhaW5pbmdCbG9jaz4obGF5b3V0
Qm94KSAmJiAmbGF5b3V0Qm94LmZvcm1hdHRpbmdDb250ZXh0Um9vdCgpID09ICZyb290KCkpIHsK
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG5vbi1lc2NhcGUgY2FzZSBvZiBhY2Nlc3Npbmcg
YSBib3gncyBnZW9tZXRyeSBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIHNhbWUgZm9ybWF0dGluZyBj
b250ZXh0LgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDksOSArMjQ5LDkgQEAgY29u
c3QgTGF5b3V0OjpHZW9tZXRyeSYgRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5Rm9yQm94KGNv
bnN0IEJveCYgbGF5b3V0Qm94LAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfTsKICNlbmRp
ZgotICAgIEFTU0VSVChpc09rVG9BY2Nlc3NEaXNwbGF5Qm94KCkpOwotICAgIEFTU0VSVChsYXlv
dXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KSk7Ci0gICAgcmV0dXJuIGxheW91dFN0
YXRlKCkuZ2VvbWV0cnlGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBBU1NFUlQoaXNPa1Rv
QWNjZXNzQm94R2VvbWV0cnkoKSk7CisgICAgQVNTRVJUKGxheW91dFN0YXRlKCkuaGFzQm94R2Vv
bWV0cnkobGF5b3V0Qm94KSk7CisgICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKIH0KIAogdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdE91dE9m
Rmxvd0Rlc2NlbmRhbnRzSWZOZWVkZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGlu
Z0NvbnRleHQuaAppbmRleCAwYjVkN2QwYWU2YmRhMWRhNzUxNWZhNDE1Y2U2ODdjNWFhMTFlMzA3
Li44MTllN2ZjYjk3YmJiNzVlZTRkNWVlODc5NGQ2NDFhNzA5NDM5ZTM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDEsNiArNDEsNyBAQCBzdHJ1Y3Qg
TGVuZ3RoOwogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIEJveDsKK2NsYXNzIEJveEdlb21l
dHJ5OwogY2xhc3MgUmVwbGFjZWRCb3g7CiBzdHJ1Y3QgQ29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
Owogc3RydWN0IENvbXB1dGVkVmVydGljYWxNYXJnaW47CkBAIC00OSw3ICs1MCw2IEBAIHN0cnVj
dCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luOwogc3RydWN0IENvbnRlbnRXaWR0aEFuZE1hcmdpbjsK
IHN0cnVjdCBFZGdlczsKIGNsYXNzIEZvcm1hdHRpbmdTdGF0ZTsKLWNsYXNzIEdlb21ldHJ5Owog
c3RydWN0IEhvcml6b250YWxHZW9tZXRyeTsKIGNsYXNzIEludmFsaWRhdGlvblN0YXRlOwogY2xh
c3MgTGF5b3V0U3RhdGU7CkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgICAgICBTdHJv
a2VPdmVyZmxvd05lZWRzVmlld3BvcnRHZW9tZXRyeSwKICAgICAgICAgVGFibGVOZWVkc0FjY2Vz
c1RvVGFibGVXcmFwcGVyCiAgICAgfTsKLSAgICBjb25zdCBMYXlvdXQ6Okdlb21ldHJ5JiBnZW9t
ZXRyeUZvckJveChjb25zdCBCb3gmLCBPcHRpb25hbDxFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxs
b3B0KSBjb25zdDsKKyAgICBjb25zdCBCb3hHZW9tZXRyeSYgZ2VvbWV0cnlGb3JCb3goY29uc3Qg
Qm94JiwgT3B0aW9uYWw8RXNjYXBlUmVhc29uPiA9IFdURjo6bnVsbG9wdCkgY29uc3Q7CiAgICAg
Y29uc3QgQ29udGFpbmVyQm94JiByb290KCkgY29uc3QgeyByZXR1cm4gKm1fcm9vdDsgfQogCiAg
ICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggODAxYTFiYzFh
YTVkYzY3MzY5YjMyMjcwNWQwOGU2ODJjYTk5ZTkwNy4uNzBlMDc3NTYxMWE4ZTVjYWIwNTYzY2Vk
NWVmNWU5YzQwNTc1MTJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtMjk3LDcgKzI5Nyw3IEBAIExheW91dFVuaXQg
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0
T2ZGbG93UG9zaXRpCiAgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRl
bmQgdGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KICAgICBmb3IgKGF1dG8qIGFuY2VzdG9y
ID0gJmxheW91dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRhaW5pbmdCbG9jazsgYW5j
ZXN0b3IgPSAmYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7CiAgICAgICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmFuY2VzdG9yLCBF
c2NhcGVSZWFzb246Ok91dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkpOwotICAgICAgICAv
LyBMYXlvdXQ6Okdlb21ldHJ5Ojp0b3AgaXMgdGhlIGJvcmRlciBib3ggdG9wIHBvc2l0aW9uIGlu
IGl0cyBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgICAgIC8vIEJv
eEdlb21ldHJ5Ojp0b3AgaXMgdGhlIGJvcmRlciBib3ggdG9wIHBvc2l0aW9uIGluIGl0cyBjb250
YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgICAgIHRvcCArPSBib3hHZW9t
ZXRyeS50b3AoKTsKICAgICAgICAgQVNTRVJUKCFhbmNlc3Rvci0+aXNQb3NpdGlvbmVkKCkgfHwg
bGF5b3V0Qm94LmlzRml4ZWRQb3NpdGlvbmVkKCkpOwogICAgIH0KQEAgLTMxOSw3ICszMTksNyBA
QCBMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaQogICAgIC8vIFN0YXJ0IHdpdGggdGhlIHBhcmVudCBz
aW5jZSB3ZSBwcmV0ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFsIGZsb3cuCiAgICAgZm9yIChh
dXRvKiBhbmNlc3RvciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFuY2VzdG9yICE9ICZjb250YWlu
aW5nQmxvY2s7IGFuY2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgewogICAg
ICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94
KCphbmNlc3RvciwgRXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5
KTsKLSAgICAgICAgLy8gTGF5b3V0OjpHZW9tZXRyeTo6bGVmdCBpcyB0aGUgYm9yZGVyIGJveCBs
ZWZ0IHBvc2l0aW9uIGluIGl0cyBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0u
CisgICAgICAgIC8vIEJveEdlb21ldHJ5OjpsZWZ0IGlzIHRoZSBib3JkZXIgYm94IGxlZnQgcG9z
aXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KICAgICAg
ICAgbGVmdCArPSBib3hHZW9tZXRyeS5sZWZ0KCk7CiAgICAgICAgIEFTU0VSVCghYW5jZXN0b3It
PmlzUG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWly
a3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNw
cAppbmRleCA4ODVlZGZiYWFjYjViMDg2N2QwNWRhYzlkYjNmMTdjNzM3ODg4NjJhLi44MjExYjBk
YzYzMGNhMjM5N2JhYjM4NGY5ODA4MzAzMTkxZjJiZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkxheW91
dEJveC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94
R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9G
b3JtYXR0aW5nU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0
ZS5jcHAKaW5kZXggOGEyMTljY2YxMTE2MmE2Y2E0YmE3NDM4Yjg2ZmFlZTk1ZmEwZTFmMS4uYTJj
NDg1MzFlNzZkNjQ4YTdlZjk0YTllYTg4YzRjMGQ0NDUzZDcxMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUo
TEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIK
LSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDgsMTMgKzQ4LDEzIEBAIEZvcm1hdHRpbmdTdGF0ZTo6fkZvcm1hdHRpbmdTdGF0
ZSgpCiB7CiB9CiAKLUxheW91dDo6R2VvbWV0cnkmIEZvcm1hdHRpbmdTdGF0ZTo6ZGlzcGxheUJv
eChjb25zdCBCb3gmIGxheW91dEJveCkKK0JveEdlb21ldHJ5JiBGb3JtYXR0aW5nU3RhdGU6OmJv
eEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIC8vIFNob3VsZCBuZXZlciBu
ZWVkIHRvIG11dGF0ZSBhIGRpc3BsYXkgYm94IG91dHNpZGUgb2YgdGhlIGZvcm1hdHRpbmcgY29u
dGV4dC4KICAgICBBU1NFUlQoJmxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3Rh
dGUobGF5b3V0Qm94LmZvcm1hdHRpbmdDb250ZXh0Um9vdCgpKSA9PSB0aGlzKTsKICAgICAvLyBB
bm9ueW1vdXMgdGV4dCB3cmFwcGVycy9saW5lIGJyZWFrIGJveGVzIHNob3VsZCBub3QgbmVlZCBk
aXNwbGF5IGJveGVzLgogICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lVGV4dEJveCgpICYm
ICghbGF5b3V0Qm94LmlzTGluZUJyZWFrQm94KCkgfHwgbGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9z
aXRpb25lZCgpKSk7Ci0gICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZW5zdXJlR2VvbWV0cnlGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5lbnN1cmVHZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0
dGluZ1N0YXRlLmgKaW5kZXggY2VmOGRkOWJmYTBhZmNhMmIxZThiMzY4ZWU3ZmY2NDkzNTI0ODA1
OS4uZTM0MThkN2Q0MjU4MmMzYjM4MGMwNjZlNGJiYjI5OWNjMWIxYmZhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuaApAQCAtNjEsNyArNjEsOCBAQCBwdWJsaWM6CiAK
ICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dFN0
YXRlOyB9CiAKLSAgICBMYXlvdXQ6Okdlb21ldHJ5JiBkaXNwbGF5Qm94KGNvbnN0IEJveCYgbGF5
b3V0Qm94KTsKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGxpbWl0IGFj
Y2VzcyB0byBtdXRhdGFibGUgZ2VvbWV0cnkuCisgICAgQm94R2VvbWV0cnkmIGJveEdlb21ldHJ5
KGNvbnN0IEJveCYgbGF5b3V0Qm94KTsKICAgICAvLyBTaW5jZSB3ZSBsYXlvdXQgdGhlIG91dC1v
Zi1mbG93IGJveGVzIGF0IHRoZSBlbmQgb2YgdGhlIGZvcm1hdHRpbmcgY29udGV4dCBsYXlvdXQs
IGl0J3Mgb2theSB0byBzdG9yZSB0aGVtIGluIHRoZSBmb3JtYXR0aW5nIHN0YXRlIC1hcyBvcHBv
c2VkIHRvIHRoZSBjb250YWluaW5nIGJsb2NrIGxldmVsLgogICAgIHVzaW5nIE91dE9mRmxvd0Jv
eExpc3QgPSBWZWN0b3I8V2Vha1B0cjxjb25zdCBCb3g+PjsKICAgICB2b2lkIGFkZE91dE9mRmxv
d0JveChjb25zdCBCb3gmIG91dE9mRmxvd0JveCkgeyBtX291dE9mRmxvd0JveGVzLmFwcGVuZCht
YWtlV2Vha1B0cihvdXRPZkZsb3dCb3gpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L0xheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dENv
bnRleHQuY3BwCmluZGV4IGZmM2MxNGVmYTFhMmJhY2QzMDU2ZWMyYzQ4YmM5NjA4ZjZhODI3NWUu
LjkxMGU5YjNkNTk2OTljOTRmYTYyMWRkM2E0M2Y2NGIzOTI2ZDA4NzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvTGF5b3V0Q29udGV4dC5jcHAKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlICJJ
bnZhbGlkYXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNp
bmNsdWRlICJMYXlvdXRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2lu
Y2x1ZGUgIkxheW91dENvbnRhaW5lckJveC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRlICJMYXlvdXRUcmVlQnVpbGRlci5o
IgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCkBAIC02NCwxNCArNjQsMTQgQEAg
dm9pZCBMYXlvdXRDb250ZXh0OjpsYXlvdXQoY29uc3QgTGF5b3V0U2l6ZSYgcm9vdENvbnRlbnRC
b3hTaXplLCBJbnZhbGlkYXRpb25TdGEKICAgICAvLyBOb3RlIHRoYXQgd2UgbmV2ZXIgbGF5b3V0
IHRoZSByb290IGJveC4gSXQgaGFzIHRvIGhhdmUgYW4gYWxyZWFkeSBjb21wdXRlZCBnZW9tZXRy
eSAoaW4gY2FzZSBvZiBJQ0IsIGl0J3MgdGhlIHZpZXcgZ2VvbWV0cnkpLgogICAgIC8vIElDQiBl
c3RhYmxpc2hlcyB0aGUgaW5pdGlhbCBCRkMsIGJ1dCBpdCBkb2VzIG5vdCBsaXZlIGluIGEgZm9y
bWF0dGluZyBjb250ZXh0IGFuZCB3aGlsZSBhIG5vbi1JQ0Igcm9vdChzdWJ0cmVlIGxheW91dCkg
aGFzIHRvIGhhdmUgYSBmb3JtYXR0aW5nIGNvbnRleHQsCiAgICAgLy8gd2UgY291bGQgbm90IGxh
eSBpdCBvdXQgZXZlbiBpZiB3ZSB3YW50ZWQgdG8gc2luY2UgaXQncyBvdXRzaWRlIG9mIHRoaXMg
TGF5b3V0Q29udGV4dC4KLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5nZW9t
ZXRyeUZvclJvb3RMYXlvdXRCb3goKTsKLSAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJn
aW4oeyB9KTsKLSAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7Ci0gICAgZGlz
cGxheUJveC5zZXRCb3JkZXIoeyB9KTsKLSAgICBkaXNwbGF5Qm94LnNldFBhZGRpbmcoeyB9KTsK
LSAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyB9KTsKLSAgICBkaXNwbGF5Qm94LnNldENvbnRl
bnRCb3hIZWlnaHQocm9vdENvbnRlbnRCb3hTaXplLmhlaWdodCgpKTsKLSAgICBkaXNwbGF5Qm94
LnNldENvbnRlbnRCb3hXaWR0aChyb290Q29udGVudEJveFNpemUud2lkdGgoKSk7CisgICAgYXV0
byYgYm94R2VvbWV0cnkgPSBsYXlvdXRTdGF0ZSgpLmdlb21ldHJ5Rm9yUm9vdEJveCgpOworICAg
IGJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKKyAgICBib3hHZW9tZXRyeS5z
ZXRWZXJ0aWNhbE1hcmdpbih7IH0pOworICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcih7IH0pOwor
ICAgIGJveEdlb21ldHJ5LnNldFBhZGRpbmcoeyB9KTsKKyAgICBib3hHZW9tZXRyeS5zZXRUb3BM
ZWZ0KHsgfSk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChyb290Q29udGVu
dEJveFNpemUuaGVpZ2h0KCkpOworICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChy
b290Q29udGVudEJveFNpemUud2lkdGgoKSk7CiAKICAgICBsYXlvdXRXaXRoUHJlcGFyZWRSb290
R2VvbWV0cnkoaW52YWxpZGF0aW9uU3RhdGUpOwogfQpAQCAtOTYsMTAgKzk2LDEwIEBAIHZvaWQg
TGF5b3V0Q29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRTdWJ0cmVlKGNvbnN0IENvbnRh
aW5lckJveCYgZm9ybWF0dGluCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gZm9ybWF0dGlu
Z0NvbnRleHQgPSBjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4dFJvb3Qs
IGxheW91dFN0YXRlKCkpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmdl
b21ldHJ5Rm9yTGF5b3V0Qm94KGZvcm1hdHRpbmdDb250ZXh0Um9vdCk7CisgICAgYXV0byYgYm94
R2VvbWV0cnkgPSBsYXlvdXRTdGF0ZSgpLmdlb21ldHJ5Rm9yQm94KGZvcm1hdHRpbmdDb250ZXh0
Um9vdCk7CiAKICAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHRSb290Lmhhc0luRmxvd09yRmxvYXRp
bmdDaGlsZCgpKSB7Ci0gICAgICAgIGF1dG8gY29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50ID0g
Rm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCB7IHsgZGlzcGxh
eUJveC5jb250ZW50Qm94TGVmdCgpLCBkaXNwbGF5Qm94LmNvbnRlbnRCb3hXaWR0aCgpIH0sIHsg
ZGlzcGxheUJveC5jb250ZW50Qm94VG9wKCksIHsgfSB9IH07CisgICAgICAgIGF1dG8gY29uc3Ry
YWludHNGb3JJbkZsb3dDb250ZW50ID0gRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudCB7IHsgYm94R2VvbWV0cnkuY29udGVudEJveExlZnQoKSwgYm94R2VvbWV0
cnkuY29udGVudEJveFdpZHRoKCkgfSwgeyBib3hHZW9tZXRyeS5jb250ZW50Qm94VG9wKCksIHsg
fSB9IH07CiAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXRJbkZsb3dDb250ZW50KGlu
dmFsaWRhdGlvblN0YXRlLCBjb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQpOwogICAgIH0KIApA
QCAtMTA3LDggKzEwNyw4IEBAIHZvaWQgTGF5b3V0Q29udGV4dDo6bGF5b3V0Rm9ybWF0dGluZ0Nv
bnRleHRTdWJ0cmVlKGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluCiAgICAgLy8gSXQgY29u
c3RydWN0cyBhbiBGQyBmb3IgZGVzY2VuZGFudCBib3hlcyBhbmQgcnVucyBsYXlvdXQgb24gdGhl
bS4gVGhlIGZvcm1hdHRpbmdDb250ZXh0Um9vdCBpcyBsYWlkIG91dCBpbiB0aGUgRkMgaW4gd2hp
Y2ggaXQgbGl2ZXMgKHBhcmVudCBmb3JtYXR0aW5nIGNvbnRleHQpLgogICAgIC8vIEl0IGFsc28g
bWVhbnMgdGhhdCB0aGUgZm9ybWF0dGluZ0NvbnRleHRSb290IGhhcyB0byBoYXZlIGEgdmFsaWQv
Y2xlYW4gZ2VvbWV0cnkgYXQgdGhpcyBwb2ludC4KICAgICB7Ci0gICAgICAgIGF1dG8gY29uc3Ry
YWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6Q29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50
IHsgeyBkaXNwbGF5Qm94LnBhZGRpbmdCb3hMZWZ0KCksIGRpc3BsYXlCb3gucGFkZGluZ0JveFdp
ZHRoKCkgfSwKLSAgICAgICAgICAgIHsgZGlzcGxheUJveC5wYWRkaW5nQm94VG9wKCksIGRpc3Bs
YXlCb3gucGFkZGluZ0JveEhlaWdodCgpIH0sIGRpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCkg
fTsKKyAgICAgICAgYXV0byBjb25zdHJhaW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJh
aW50c0Zvck91dE9mRmxvd0NvbnRlbnQgeyB7IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hMZWZ0KCks
IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hXaWR0aCgpIH0sCisgICAgICAgICAgICB7IGJveEdlb21l
dHJ5LnBhZGRpbmdCb3hUb3AoKSwgYm94R2VvbWV0cnkucGFkZGluZ0JveEhlaWdodCgpIH0sIGJv
eEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH07CiAgICAgICAgIGZvcm1hdHRpbmdDb250ZXh0
LT5sYXlvdXRPdXRPZkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBjb25zdHJhaW50cyk7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFN0YXRl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRTdGF0ZS5jcHAKaW5kZXggYzczNmJl
NWQzMzI0YmI3N2UzNjQ3OTBmNGVmOGNiZGU0ZGE2YTAzMC4uMTcwNDhmNzFkM2VlNTEzNGQ0N2U2
ZWNhZGE0NzNiNzkwMjllNzY5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xh
eW91dFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0U3RhdGUuY3Bw
CkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiRmxvYXRpbmdTdGF0ZS5oIgogI2luY2x1ZGUg
IklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1
ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94Lmgi
Ci0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVGFibGVGb3JtYXR0
aW5nU3RhdGUuaCIKQEAgLTYzLDIzICs2MywyMyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUo
Y29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBDb250YWluZXJCb3gmIHJvb3RDb250YQog
CiBMYXlvdXRTdGF0ZTo6fkxheW91dFN0YXRlKCkgPSBkZWZhdWx0OwogCi1MYXlvdXQ6Okdlb21l
dHJ5JiBMYXlvdXRTdGF0ZTo6Z2VvbWV0cnlGb3JSb290TGF5b3V0Qm94KCkKK0JveEdlb21ldHJ5
JiBMYXlvdXRTdGF0ZTo6Z2VvbWV0cnlGb3JSb290Qm94KCkKIHsKLSAgICByZXR1cm4gZW5zdXJl
R2VvbWV0cnlGb3JMYXlvdXRCb3gocm9vdCgpKTsKKyAgICByZXR1cm4gZW5zdXJlR2VvbWV0cnlG
b3JCb3gocm9vdCgpKTsKIH0KIAotTGF5b3V0OjpHZW9tZXRyeSYgTGF5b3V0U3RhdGU6OmVuc3Vy
ZURpc3BsYXlCb3hGb3JMYXlvdXRCb3hTbG93KGNvbnN0IEJveCYgbGF5b3V0Qm94KQorQm94R2Vv
bWV0cnkmIExheW91dFN0YXRlOjplbnN1cmVHZW9tZXRyeUZvckJveFNsb3coY29uc3QgQm94JiBs
YXlvdXRCb3gpCiB7CiAgICAgaWYgKGxheW91dEJveC5jYW5DYWNoZUZvckxheW91dFN0YXRlKCp0
aGlzKSkgewotICAgICAgICBBU1NFUlQoIWxheW91dEJveC5jYWNoZWREaXNwbGF5Qm94Rm9yTGF5
b3V0U3RhdGUoKnRoaXMpKTsKLSAgICAgICAgYXV0byBuZXdCb3ggPSBtYWtlVW5pcXVlPExheW91
dDo6R2VvbWV0cnk+KCk7CisgICAgICAgIEFTU0VSVCghbGF5b3V0Qm94LmNhY2hlZEdlb21ldHJ5
Rm9yTGF5b3V0U3RhdGUoKnRoaXMpKTsKKyAgICAgICAgYXV0byBuZXdCb3ggPSBtYWtlVW5pcXVl
PEJveEdlb21ldHJ5PigpOwogICAgICAgICBhdXRvJiBuZXdCb3hQdHIgPSAqbmV3Qm94OwotICAg
ICAgICBsYXlvdXRCb3guc2V0Q2FjaGVkRGlzcGxheUJveEZvckxheW91dFN0YXRlKCp0aGlzLCBX
VEZNb3ZlKG5ld0JveCkpOworICAgICAgICBsYXlvdXRCb3guc2V0Q2FjaGVkR2VvbWV0cnlGb3JM
YXlvdXRTdGF0ZSgqdGhpcywgV1RGTW92ZShuZXdCb3gpKTsKICAgICAgICAgcmV0dXJuIG5ld0Jv
eFB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gKm1fbGF5b3V0VG9EaXNwbGF5Qm94LmVuc3VyZSgm
bGF5b3V0Qm94LCBbXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPExheW91dDo6R2VvbWV0
cnk+KCk7CisgICAgcmV0dXJuICptX2xheW91dEJveFRvQm94R2VvbWV0cnkuZW5zdXJlKCZsYXlv
dXRCb3gsIFtdIHsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Qm94R2VvbWV0cnk+KCk7CiAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvTGF5b3V0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRTdGF0ZS5o
CmluZGV4IGQ3NDlhZWRlMzc5NDVjYjdhOTkyMmY2NDk4NTZkZDgyMzMzMzc1ZDIuLmM0MThlZGEx
NDRlOGMzYzEyMzhhNGFmYzcyZTU1ZDFiNmVjNWU3OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9MYXlvdXRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9MYXlv
dXRTdGF0ZS5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIEJsb2NrRm9ybWF0dGluZ1N0YXRlOwog
Y2xhc3MgRmxleEZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNzIEZvcm1hdHRpbmdDb250ZXh0OwogY2xh
c3MgRm9ybWF0dGluZ1N0YXRlOwotY2xhc3MgR2VvbWV0cnk7CitjbGFzcyBCb3hHZW9tZXRyeTsK
IGNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0ZTsKIGNsYXNzIFRhYmxlRm9ybWF0dGluZ1N0YXRl
OwogCkBAIC03MSwxMSArNzEsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGVyZWdpc3RlckZvcm1h
dHRpbmdDb250ZXh0KGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCkg
eyBtX2Zvcm1hdHRpbmdDb250ZXh0TGlzdC5yZW1vdmUoJmZvcm1hdHRpbmdDb250ZXh0KTsgfQog
I2VuZGlmCiAKLSAgICBMYXlvdXQ6Okdlb21ldHJ5JiBnZW9tZXRyeUZvclJvb3RMYXlvdXRCb3go
KTsKLSAgICBMYXlvdXQ6Okdlb21ldHJ5JiBlbnN1cmVHZW9tZXRyeUZvckxheW91dEJveChjb25z
dCBCb3gmKTsKLSAgICBjb25zdCBMYXlvdXQ6Okdlb21ldHJ5JiBnZW9tZXRyeUZvckxheW91dEJv
eChjb25zdCBCb3gmKSBjb25zdDsKKyAgICBCb3hHZW9tZXRyeSYgZ2VvbWV0cnlGb3JSb290Qm94
KCk7CisgICAgQm94R2VvbWV0cnkmIGVuc3VyZUdlb21ldHJ5Rm9yQm94KGNvbnN0IEJveCYpOwor
ICAgIGNvbnN0IEJveEdlb21ldHJ5JiBnZW9tZXRyeUZvckJveChjb25zdCBCb3gmKSBjb25zdDsK
IAotICAgIGJvb2wgaGFzRGlzcGxheUJveChjb25zdCBCb3gmKSBjb25zdDsKKyAgICBib29sIGhh
c0JveEdlb21ldHJ5KGNvbnN0IEJveCYpIGNvbnN0OwogCiAgICAgZW51bSBjbGFzcyBRdWlya3NN
b2RlIHsgTm8sIExpbWl0ZWQsIFllcyB9OwogICAgIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9xdWlya3NNb2RlID09IFF1aXJrc01vZGU6OlllczsgfQpAQCAtOTMsNyArOTMs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRRdWlya3NNb2RlKFF1aXJrc01v
ZGUgcXVpcmtzTW9kZSkgeyBtX3F1aXJrc01vZGUgPSBxdWlya3NNb2RlOyB9Ci0gICAgTGF5b3V0
OjpHZW9tZXRyeSYgZW5zdXJlRGlzcGxheUJveEZvckxheW91dEJveFNsb3coY29uc3QgQm94Jik7
CisgICAgQm94R2VvbWV0cnkmIGVuc3VyZUdlb21ldHJ5Rm9yQm94U2xvdyhjb25zdCBCb3gmKTsK
IAogICAgIEhhc2hNYXA8Y29uc3QgQ29udGFpbmVyQm94Kiwgc3RkOjp1bmlxdWVfcHRyPElubGlu
ZUZvcm1hdHRpbmdTdGF0ZT4+IG1faW5saW5lRm9ybWF0dGluZ1N0YXRlczsKICAgICBIYXNoTWFw
PGNvbnN0IENvbnRhaW5lckJveCosIHN0ZDo6dW5pcXVlX3B0cjxCbG9ja0Zvcm1hdHRpbmdTdGF0
ZT4+IG1fYmxvY2tGb3JtYXR0aW5nU3RhdGVzOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHByaXZhdGU6
CiAjaWZuZGVmIE5ERUJVRwogICAgIEhhc2hTZXQ8Y29uc3QgRm9ybWF0dGluZ0NvbnRleHQqPiBt
X2Zvcm1hdHRpbmdDb250ZXh0TGlzdDsKICNlbmRpZgotICAgIEhhc2hNYXA8Y29uc3QgQm94Kiwg
c3RkOjp1bmlxdWVfcHRyPExheW91dDo6R2VvbWV0cnk+PiBtX2xheW91dFRvRGlzcGxheUJveDsK
KyAgICBIYXNoTWFwPGNvbnN0IEJveCosIHN0ZDo6dW5pcXVlX3B0cjxCb3hHZW9tZXRyeT4+IG1f
bGF5b3V0Qm94VG9Cb3hHZW9tZXRyeTsKICAgICBRdWlya3NNb2RlIG1fcXVpcmtzTW9kZSB7IFF1
aXJrc01vZGU6Ok5vIH07CiAKICAgICBXZWFrUHRyPGNvbnN0IENvbnRhaW5lckJveD4gbV9yb290
Q29udGFpbmVyOwpAQCAtMTE1LDI2ICsxMTUsMjYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNJ
bnRlZ3JhdGVkUm9vdEJveEZpcnN0Q2hpbGQgeyBmYWxzZSB9OwogfTsKIAotaW5saW5lIGJvb2wg
TGF5b3V0U3RhdGU6Omhhc0Rpc3BsYXlCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Citp
bmxpbmUgYm9vbCBMYXlvdXRTdGF0ZTo6aGFzQm94R2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRC
b3gpIGNvbnN0CiB7Ci0gICAgaWYgKGxheW91dEJveC5jYWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0
U3RhdGUoKnRoaXMpKQorICAgIGlmIChsYXlvdXRCb3guY2FjaGVkR2VvbWV0cnlGb3JMYXlvdXRT
dGF0ZSgqdGhpcykpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX2xheW91dFRv
RGlzcGxheUJveC5jb250YWlucygmbGF5b3V0Qm94KTsKKyAgICByZXR1cm4gbV9sYXlvdXRCb3hU
b0JveEdlb21ldHJ5LmNvbnRhaW5zKCZsYXlvdXRCb3gpOwogfQogCi1pbmxpbmUgTGF5b3V0OjpH
ZW9tZXRyeSYgTGF5b3V0U3RhdGU6OmVuc3VyZUdlb21ldHJ5Rm9yTGF5b3V0Qm94KGNvbnN0IEJv
eCYgbGF5b3V0Qm94KQoraW5saW5lIEJveEdlb21ldHJ5JiBMYXlvdXRTdGF0ZTo6ZW5zdXJlR2Vv
bWV0cnlGb3JCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7Ci0gICAgaWYgKGF1dG8qIGRpc3Bs
YXlCb3ggPSBsYXlvdXRCb3guY2FjaGVkRGlzcGxheUJveEZvckxheW91dFN0YXRlKCp0aGlzKSkK
LSAgICAgICAgcmV0dXJuICpkaXNwbGF5Qm94OwotICAgIHJldHVybiBlbnN1cmVEaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94U2xvdyhsYXlvdXRCb3gpOworICAgIGlmIChhdXRvKiBib3hHZW9tZXRyeSA9
IGxheW91dEJveC5jYWNoZWRHZW9tZXRyeUZvckxheW91dFN0YXRlKCp0aGlzKSkKKyAgICAgICAg
cmV0dXJuICpib3hHZW9tZXRyeTsKKyAgICByZXR1cm4gZW5zdXJlR2VvbWV0cnlGb3JCb3hTbG93
KGxheW91dEJveCk7CiB9CiAKLWlubGluZSBjb25zdCBMYXlvdXQ6Okdlb21ldHJ5JiBMYXlvdXRT
dGF0ZTo6Z2VvbWV0cnlGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Citp
bmxpbmUgY29uc3QgQm94R2VvbWV0cnkmIExheW91dFN0YXRlOjpnZW9tZXRyeUZvckJveChjb25z
dCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogZGlzcGxheUJveCA9IGxh
eW91dEJveC5jYWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0U3RhdGUoKnRoaXMpKQotICAgICAgICBy
ZXR1cm4gKmRpc3BsYXlCb3g7Ci0gICAgQVNTRVJUKG1fbGF5b3V0VG9EaXNwbGF5Qm94LmNvbnRh
aW5zKCZsYXlvdXRCb3gpKTsKLSAgICByZXR1cm4gKm1fbGF5b3V0VG9EaXNwbGF5Qm94LmdldCgm
bGF5b3V0Qm94KTsKKyAgICBpZiAoYXV0byogYm94R2VvbWV0cnkgPSBsYXlvdXRCb3guY2FjaGVk
R2VvbWV0cnlGb3JMYXlvdXRTdGF0ZSgqdGhpcykpCisgICAgICAgIHJldHVybiAqYm94R2VvbWV0
cnk7CisgICAgQVNTRVJUKG1fbGF5b3V0Qm94VG9Cb3hHZW9tZXRyeS5jb250YWlucygmbGF5b3V0
Qm94KSk7CisgICAgcmV0dXJuICptX2xheW91dEJveFRvQm94R2VvbWV0cnkuZ2V0KCZsYXlvdXRC
b3gpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMTUyLDExICsxNTIsMTEgQEAgaW5saW5lIGJv
b2wgQm94OjpjYW5DYWNoZUZvckxheW91dFN0YXRlKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSkgY29uc3QKICAgICByZXR1cm4gIW1fY2FjaGVkTGF5b3V0U3RhdGUgfHwgbV9jYWNoZWRM
YXlvdXRTdGF0ZS5nZXQoKSA9PSAmbGF5b3V0U3RhdGU7CiB9CiAKLWlubGluZSBMYXlvdXQ6Okdl
b21ldHJ5KiBCb3g6OmNhY2hlZERpc3BsYXlCb3hGb3JMYXlvdXRTdGF0ZShjb25zdCBMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUpIGNvbnN0CitpbmxpbmUgQm94R2VvbWV0cnkqIEJveDo6Y2FjaGVk
R2VvbWV0cnlGb3JMYXlvdXRTdGF0ZShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpIGNv
bnN0CiB7CiAgICAgaWYgKG1fY2FjaGVkTGF5b3V0U3RhdGUuZ2V0KCkgIT0gJmxheW91dFN0YXRl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbV9jYWNoZWREaXNwbGF5Qm94
Rm9yTGF5b3V0U3RhdGUuZ2V0KCk7CisgICAgcmV0dXJuIG1fY2FjaGVkR2VvbWV0cnlGb3JMYXlv
dXRTdGF0ZS5nZXQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L1ZlcmlmaWNhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNw
cAppbmRleCAzZmJkNjhmNjNjNmJjM2E2ZThmODY4MjBhNzhkY2M1ZWI5ZWM2Y2JmLi4zNjI1NzBk
ZmY1NzdhZDhlMjhhYjU5YWIwOTVmYTAxMmNkMTg2YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
VmVyaWZpY2F0aW9uLmNwcApAQCAtMzMsOSArMzMsOSBAQAogI2luY2x1ZGUgIklubGluZUZvcm1h
dHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJMYXlv
dXRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91
dENvbnRhaW5lckJveC5oIgogI2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJM
YXlvdXRHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCkBAIC0yMzMsMTIgKzIz
MywxMiBAQCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGluZ0Jsb2NrQm94SW5mb3JtYXRpb25J
Zk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbgogICAgICAgICBzdHJlYW0ubmV4dExpbmUo
KTsKICAgICB9OwogCi0gICAgYXV0byByZW5kZXJCb3hMaWtlTWFyZ2luQm94ID0gWyZdIChjb25z
dCBhdXRvJiBkaXNwbGF5Qm94KSB7CisgICAgYXV0byByZW5kZXJCb3hMaWtlTWFyZ2luQm94ID0g
WyZdIChjb25zdCBhdXRvJiBib3hHZW9tZXRyeSkgewogICAgICAgICBpZiAobGF5b3V0Qm94Lmlz
SW5pdGlhbENvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gu
cmVjdCgpOworICAgICAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5LnJlY3QoKTsKIAogICAgICAg
ICAvLyBQcm9kdWNlIGEgUmVuZGVyQm94IG1hdGNoaW5nIG1hcmdpbiBib3guCi0gICAgICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckxheW91dEJv
eChsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOworICAgICAg
ICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKTsKICAgICAgICAg
YXV0byBtYXJnaW5TdGFydCA9IExheW91dFVuaXQgeyB9OwogICAgICAgICBhdXRvJiBtYXJnaW5T
dGFydFN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCkubWFyZ2luU3RhcnQoKTsKICAgICAgICAgaWYg
KG1hcmdpblN0YXJ0U3R5bGUuaXNGaXhlZCgpIHx8IG1hcmdpblN0YXJ0U3R5bGUuaXNQZXJjZW50
KCkgfHwgbWFyZ2luU3RhcnRTdHlsZS5pc0NhbGN1bGF0ZWQoKSkKQEAgLTI0OSwxNSArMjQ5LDE1
IEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQmxvY2tCb3hJbmZvcm1hdGlvbklmTmVl
ZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uCiAgICAgICAgIGlmIChtYXJnaW5FbmRTdHlsZS5p
c0ZpeGVkKCkgfHwgbWFyZ2luRW5kU3R5bGUuaXNQZXJjZW50KCkgfHwgbWFyZ2luRW5kU3R5bGUu
aXNDYWxjdWxhdGVkKCkpCiAgICAgICAgICAgICBtYXJnaW5FbmQgPSB2YWx1ZUZvckxlbmd0aCht
YXJnaW5FbmRTdHlsZSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwogCi0gICAgICAgIGF1dG8gbWFy
Z2luQmVmb3JlID0gZGlzcGxheUJveC5tYXJnaW5CZWZvcmUoKTsKLSAgICAgICAgYXV0byBtYXJn
aW5BZnRlciA9IGRpc3BsYXlCb3gubWFyZ2luQWZ0ZXIoKTsKKyAgICAgICAgYXV0byBtYXJnaW5C
ZWZvcmUgPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKTsKKyAgICAgICAgYXV0byBtYXJnaW5B
ZnRlciA9IGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCk7CiAgICAgICAgIGlmIChsYXlvdXRCb3gu
aXNCbG9ja0xldmVsQm94KCkpIHsKICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9
IGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZS5mb3JtYXR0aW5nU3Rh
dGVGb3JCb3gobGF5b3V0Qm94KSk7CiAgICAgICAgICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0g
Zm9ybWF0dGluZ1N0YXRlLnVzZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gpOwogICAgICAgICAg
ICAgbWFyZ2luQmVmb3JlID0gdmVydGljYWxNYXJnaW4ubm9uQ29sbGFwc2VkVmFsdWVzLmJlZm9y
ZTsKICAgICAgICAgICAgIG1hcmdpbkFmdGVyID0gdmVydGljYWxNYXJnaW4ubm9uQ29sbGFwc2Vk
VmFsdWVzLmFmdGVyOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8gYm9yZGVyQm94ID0gZGlzcGxh
eUJveC5ib3JkZXJCb3goKTsKKyAgICAgICAgYXV0byBib3JkZXJCb3ggPSBib3hHZW9tZXRyeS5i
b3JkZXJCb3goKTsKICAgICAgICAgcmV0dXJuIFJlY3QgewogICAgICAgICAgICAgYm9yZGVyQm94
LnRvcCgpIC0gbWFyZ2luQmVmb3JlLAogICAgICAgICAgICAgYm9yZGVyQm94LmxlZnQoKSAtIG1h
cmdpblN0YXJ0LApAQCAtMjcxLDE1ICsyNzEsMTUgQEAgc3RhdGljIGJvb2wgb3V0cHV0TWlzbWF0
Y2hpbmdCbG9ja0JveEluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb24K
ICAgICBpZiAocmVuZGVyZXIuaXNJbkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgIGZyYW1lUmVj
dC5tb3ZlKHJlbmRlcmVyLm9mZnNldEZvckluRmxvd1Bvc2l0aW9uKCkpOwogCi0gICAgYXV0byBk
aXNwbGF5Qm94ID0gR2VvbWV0cnkgeyBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckxheW91dEJveChs
YXlvdXRCb3gpIH07CisgICAgYXV0byBib3hHZW9tZXRyeSA9IEJveEdlb21ldHJ5IHsgbGF5b3V0
U3RhdGUuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KSB9OwogICAgIGlmIChsYXlvdXRCb3guaXNU
YWJsZUJveCgpKSB7CiAgICAgICAgIC8vIFdoZW4gdGhlIDx0YWJsZT4gaXMgb3V0LW9mLWZsb3cg
cG9zaXRpb25lZCwgdGhlIHdyYXBwZXIgdGFibGUgYm94IGhhcyB0aGUgb2Zmc2V0CiAgICAgICAg
IC8vIHdoaWxlIHRoZSBhY3R1YWwgdGFibGUgYm94IGlzIHN0YXRpYywgaW5mbG93LgotICAgICAg
ICBhdXRvJiB0YWJsZVdyYXBwZXJEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JM
YXlvdXRCb3gobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKLSAgICAgICAgZGlzcGxheUJv
eC5tb3ZlQnkodGFibGVXcmFwcGVyRGlzcGxheUJveC50b3BMZWZ0KCkpOworICAgICAgICBhdXRv
JiB0YWJsZVdyYXBwZXJCb3hHZW9tZXRyeSA9IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CisgICAgICAgIGJveEdlb21ldHJ5Lm1vdmVCeSh0
YWJsZVdyYXBwZXJCb3hHZW9tZXRyeS50b3BMZWZ0KCkpOwogICAgICAgICAvLyBUYWJsZSB3cmFw
cGVyIGJveCBoYXMgdGhlIG1hcmdpbiB2YWx1ZXMgZm9yIHRoZSB0YWJsZS4KLSAgICAgICAgZGlz
cGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHRhYmxlV3JhcHBlckRpc3BsYXlCb3guaG9yaXpv
bnRhbE1hcmdpbigpKTsKLSAgICAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih0YWJs
ZVdyYXBwZXJEaXNwbGF5Qm94LnZlcnRpY2FsTWFyZ2luKCkpOworICAgICAgICBib3hHZW9tZXRy
eS5zZXRIb3Jpem9udGFsTWFyZ2luKHRhYmxlV3JhcHBlckJveEdlb21ldHJ5Lmhvcml6b250YWxN
YXJnaW4oKSk7CisgICAgICAgIGJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHRhYmxlV3Jh
cHBlckJveEdlb21ldHJ5LnZlcnRpY2FsTWFyZ2luKCkpOwogICAgIH0KIAogICAgIGlmIChpczxS
ZW5kZXJUYWJsZVJvdz4ocmVuZGVyZXIpIHx8IGlzPFJlbmRlclRhYmxlU2VjdGlvbj4ocmVuZGVy
ZXIpKSB7CkBAIC0yOTAsMjAgKzI5MCwyMCBAQCBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGlu
Z0Jsb2NrQm94SW5mb3JtYXRpb25JZk5lZWRlZChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbgogICAg
ICAgICBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9uPihyZW5kZXJlcikgJiYgKGRvd25jYXN0PFJl
bmRlclRhYmxlU2VjdGlvbj4ocmVuZGVyZXIpLnRhYmxlKCktPmNvbGxhcHNlQm9yZGVycygpIHx8
IHJlbmRlcmVyLnN0eWxlKCkuaGFzQm9yZGVyKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBpZiAoIWFyZUVzc2VudGlhbGx5RXF1YWwoZnJhbWVSZWN0LCBkaXNwbGF5
Qm94LnJlY3QoKSkpIHsKLSAgICAgICAgb3V0cHV0UmVjdCgiZnJhbWVCb3giLCByZW5kZXJlci5m
cmFtZVJlY3QoKSwgZGlzcGxheUJveC5yZWN0KCkpOworICAgIGlmICghYXJlRXNzZW50aWFsbHlF
cXVhbChmcmFtZVJlY3QsIGJveEdlb21ldHJ5LnJlY3QoKSkpIHsKKyAgICAgICAgb3V0cHV0UmVj
dCgiZnJhbWVCb3giLCByZW5kZXJlci5mcmFtZVJlY3QoKSwgYm94R2VvbWV0cnkucmVjdCgpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFhcmVFc3NlbnRpYWxseUVx
dWFsKHJlbmRlcmVyLmJvcmRlckJveFJlY3QoKSwgZGlzcGxheUJveC5ib3JkZXJCb3goKSkpIHsK
LSAgICAgICAgb3V0cHV0UmVjdCgiYm9yZGVyQm94IiwgcmVuZGVyZXIuYm9yZGVyQm94UmVjdCgp
LCBkaXNwbGF5Qm94LmJvcmRlckJveCgpKTsKKyAgICBpZiAoIWFyZUVzc2VudGlhbGx5RXF1YWwo
cmVuZGVyZXIuYm9yZGVyQm94UmVjdCgpLCBib3hHZW9tZXRyeS5ib3JkZXJCb3goKSkpIHsKKyAg
ICAgICAgb3V0cHV0UmVjdCgiYm9yZGVyQm94IiwgcmVuZGVyZXIuYm9yZGVyQm94UmVjdCgpLCBi
b3hHZW9tZXRyeS5ib3JkZXJCb3goKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAog
ICAgIC8vIFdoZW4gdGhlIHRhYmxlIHJvdyBib3JkZXIgb3ZlcmZsb3dzIHRoZSByb3csIHBhZGRp
bmcgYm94IGJlY29tZXMgbmVnYXRpdmUgYW5kIGNvbnRlbnQgYm94IGlzIGluY29ycmVjdC4KICAg
ICBhdXRvIHNob3VsZENoZWNrUGFkZGluZ0FuZENvbnRlbnRCb3ggPSAhaXM8UmVuZGVyVGFibGVS
b3c+KHJlbmRlcmVyKSB8fCByZW5kZXJlci5wYWRkaW5nQm94UmVjdCgpLndpZHRoKCkgPj0gMDsK
LSAgICBpZiAoc2hvdWxkQ2hlY2tQYWRkaW5nQW5kQ29udGVudEJveCAmJiAhYXJlRXNzZW50aWFs
bHlFcXVhbChyZW5kZXJlci5wYWRkaW5nQm94UmVjdCgpLCBkaXNwbGF5Qm94LnBhZGRpbmdCb3go
KSkpIHsKLSAgICAgICAgb3V0cHV0UmVjdCgicGFkZGluZ0JveCIsIHJlbmRlcmVyLnBhZGRpbmdC
b3hSZWN0KCksIGRpc3BsYXlCb3gucGFkZGluZ0JveCgpKTsKKyAgICBpZiAoc2hvdWxkQ2hlY2tQ
YWRkaW5nQW5kQ29udGVudEJveCAmJiAhYXJlRXNzZW50aWFsbHlFcXVhbChyZW5kZXJlci5wYWRk
aW5nQm94UmVjdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94KCkpKSB7CisgICAgICAgIG91dHB1
dFJlY3QoInBhZGRpbmdCb3giLCByZW5kZXJlci5wYWRkaW5nQm94UmVjdCgpLCBib3hHZW9tZXRy
eS5wYWRkaW5nQm94KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMxNiwy
MSArMzE2LDIxIEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nQmxvY2tCb3hJbmZvcm1h
dGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uCiAgICAgICAgIC8vIFRhYmxlcyBo
YXZlIDAgY29udGVudCBib3ggc2l6ZSBmb3Igc29tZSByZWFzb24gd2hlbiBib3JkZXIgY29sbGFw
c2luZyBpcyBvbi4KICAgICAgICAgcmV0dXJuICFpczxSZW5kZXJUYWJsZT4ocmVuZGVyZXIpIHx8
ICFkb3duY2FzdDxSZW5kZXJUYWJsZT4ocmVuZGVyZXIpLmNvbGxhcHNlQm9yZGVycygpOwogICAg
IH0oKTsKLSAgICBpZiAoc2hvdWxkQ2hlY2tDb250ZW50Qm94ICYmICFhcmVFc3NlbnRpYWxseUVx
dWFsKHJlbmRlcmVyLmNvbnRlbnRCb3hSZWN0KCksIGRpc3BsYXlCb3guY29udGVudEJveCgpKSkg
ewotICAgICAgICBvdXRwdXRSZWN0KCJjb250ZW50Qm94IiwgcmVuZGVyZXIuY29udGVudEJveFJl
Y3QoKSwgZGlzcGxheUJveC5jb250ZW50Qm94KCkpOworICAgIGlmIChzaG91bGRDaGVja0NvbnRl
bnRCb3ggJiYgIWFyZUVzc2VudGlhbGx5RXF1YWwocmVuZGVyZXIuY29udGVudEJveFJlY3QoKSwg
Ym94R2VvbWV0cnkuY29udGVudEJveCgpKSkgeworICAgICAgICBvdXRwdXRSZWN0KCJjb250ZW50
Qm94IiwgcmVuZGVyZXIuY29udGVudEJveFJlY3QoKSwgYm94R2VvbWV0cnkuY29udGVudEJveCgp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFhcmVFc3NlbnRpYWxs
eUVxdWFsKHJlbmRlcmVyLm1hcmdpbkJveFJlY3QoKSwgcmVuZGVyQm94TGlrZU1hcmdpbkJveChk
aXNwbGF5Qm94KSkpIHsKKyAgICBpZiAoIWFyZUVzc2VudGlhbGx5RXF1YWwocmVuZGVyZXIubWFy
Z2luQm94UmVjdCgpLCByZW5kZXJCb3hMaWtlTWFyZ2luQm94KGJveEdlb21ldHJ5KSkpIHsKICAg
ICAgICAgLy8gSW4gY2VydGFpbiBjYXNlcywgbGlrZSBvdXQtb2YtZmxvdyBib3hlcyB3aXRoIG1h
cmdpbiBhdXRvLCBtYXJnaW5Cb3hSZWN0KCkgcmV0dXJucyAwLiBJdCdzIGNsZWFybHkgaW5jb3Jy
ZWN0LAogICAgICAgICAvLyBzbyBsZXQncyBjaGVjayB0aGUgaW5kaXZpZHVhbCBtYXJnaW4gdmFs
dWVzIGluc3RlYWQgKGFuZCBhdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCBhbGwgb3RoZXIgYm94
ZXMgbWF0Y2gpLgotICAgICAgICBhdXRvIG1hcmdpbnNNYXRjaCA9IGRpc3BsYXlCb3gubWFyZ2lu
QmVmb3JlKCkgPT0gcmVuZGVyZXIubWFyZ2luQmVmb3JlKCkKLSAgICAgICAgICAgICYmIGRpc3Bs
YXlCb3gubWFyZ2luQWZ0ZXIoKSA9PSByZW5kZXJlci5tYXJnaW5BZnRlcigpCi0gICAgICAgICAg
ICAmJiBkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgPT0gcmVuZGVyZXIubWFyZ2luU3RhcnQoKQot
ICAgICAgICAgICAgJiYgZGlzcGxheUJveC5tYXJnaW5FbmQoKSA9PSByZW5kZXJlci5tYXJnaW5F
bmQoKTsKKyAgICAgICAgYXV0byBtYXJnaW5zTWF0Y2ggPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZv
cmUoKSA9PSByZW5kZXJlci5tYXJnaW5CZWZvcmUoKQorICAgICAgICAgICAgJiYgYm94R2VvbWV0
cnkubWFyZ2luQWZ0ZXIoKSA9PSByZW5kZXJlci5tYXJnaW5BZnRlcigpCisgICAgICAgICAgICAm
JiBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpID09IHJlbmRlcmVyLm1hcmdpblN0YXJ0KCkKKyAg
ICAgICAgICAgICYmIGJveEdlb21ldHJ5Lm1hcmdpbkVuZCgpID09IHJlbmRlcmVyLm1hcmdpbkVu
ZCgpOwogCiAgICAgICAgIGlmICghbWFyZ2luc01hdGNoKSB7Ci0gICAgICAgICAgICBvdXRwdXRS
ZWN0KCJtYXJnaW5Cb3giLCByZW5kZXJlci5tYXJnaW5Cb3hSZWN0KCksIHJlbmRlckJveExpa2VN
YXJnaW5Cb3goZGlzcGxheUJveCkpOworICAgICAgICAgICAgb3V0cHV0UmVjdCgibWFyZ2luQm94
IiwgcmVuZGVyZXIubWFyZ2luQm94UmVjdCgpLCByZW5kZXJCb3hMaWtlTWFyZ2luQm94KGJveEdl
b21ldHJ5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5n
L0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGM1ZDkzMzY5MWVkZjY0OTRhMzk3ODc1
ZWFmNTViOTA0MWEwY2Y5N2EuLjMzNGRmOTlmNmY0YjY1ZGNiNGY5ZmYzNmRiMDFiMzE5Y2Y1N2E1
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMjIyLDE5ICsyMjIsMTkg
QEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGls
ZHJlbihjb25zdCBDb250YWluZXJCb3gmIGMKICAgICAgICAgaWYgKCFjaGlsZEJveC5pc0luRmxv
d1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvIHBvc2l0
aW9uT2Zmc2V0ID0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY2hp
bGRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAgIGZvcm1hdHRpbmdTdGF0ZSgp
LmRpc3BsYXlCb3goY2hpbGRCb3gpLm1vdmUocG9zaXRpb25PZmZzZXQpOworICAgICAgICBmb3Jt
YXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShjaGlsZEJveCkubW92ZShwb3NpdGlvbk9mZnNldCk7
CiAgICAgfQogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3Ry
ZWFtIDw8ICJFbmQ6IG1vdmUgaW4tZmxvdyBwb3NpdGlvbmVkIGNoaWxkcmVuIC0+IHBhcmVudDog
IiA8PCAmY29udGFpbmVyQm94KTsKIH0KIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cykKIHsKLSAgICBmb3JtYXR0
aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0VG9wKGdlb21ldHJ5KCkuc3RhdGlj
VmVydGljYWxQb3NpdGlvbihsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWludHMpKTsKKyAgICBm
b3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldFRvcChnZW9tZXRyeSgp
LnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0Qm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzKSk7
CiB9CiAKIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY0hvcml6b250
YWxQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCiB7Ci0gICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlz
cGxheUJveChsYXlvdXRCb3gpLnNldExlZnQoZ2VvbWV0cnkoKS5zdGF0aWNIb3Jpem9udGFsUG9z
aXRpb24obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpKTsKKyAgICBmb3JtYXR0aW5n
U3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldExlZnQoZ2VvbWV0cnkoKS5zdGF0aWNI
b3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpKTsKIH0K
IAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwcmVjb21wdXRlVmVydGljYWxQb3NpdGlv
bkZvckJveEFuZEFuY2VzdG9ycyhjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgQ29uc3RyYWlu
dHNQYWlyJiBjb25zdHJhaW50c1BhaXIpCkBAIC0yNTksMTcgKzI1OSwxNyBAQCB2b2lkIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OnByZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94QW5kQW5j
ZXN0b3JzKGNvbnN0CiAgICAgICAgIGF1dG8gdXNlZE5vbkNvbGxhcHNlZE1hcmdpbiA9IFVzZWRW
ZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9y
KDApIH07CiAgICAgICAgIGF1dG8gcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgPSBtYXJnaW5Db2xs
YXBzZSgpLnByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCphbmNlc3RvciwgdXNlZE5vbkNvbGxhcHNl
ZE1hcmdpbik7CiAKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgp
LmRpc3BsYXlCb3goKmFuY2VzdG9yKTsKKyAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3Jt
YXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeSgqYW5jZXN0b3IpOwogICAgICAgICBhdXRvIG5vbkNv
bGxhcHNlZFZhbHVlcyA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsg
cHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUubm9uQ29sbGFwc2VkVmFsdWUsIHsgfSB9OwogICAgICAg
ICBhdXRvIGNvbGxhcHNlZFZhbHVlcyA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Q29sbGFwc2VkVmFs
dWVzIHsgcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUuY29sbGFwc2VkVmFsdWUsIHsgfSwgZmFsc2Ug
fTsKICAgICAgICAgYXV0byB2ZXJ0aWNhbE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbiB7IG5v
bkNvbGxhcHNlZFZhbHVlcywgY29sbGFwc2VkVmFsdWVzLCB7IHByZWNvbXB1dGVkTWFyZ2luQmVm
b3JlLnBvc2l0aXZlQW5kTmVnYXRpdmVNYXJnaW5CZWZvcmUsIHsgfSB9IH07CiAKICAgICAgICAg
Zm9ybWF0dGluZ1N0YXRlKCkuc2V0VXNlZFZlcnRpY2FsTWFyZ2luKCphbmNlc3RvciwgdmVydGlj
YWxNYXJnaW4pOwotICAgICAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgbWFyZ2lu
QmVmb3JlKHZlcnRpY2FsTWFyZ2luKSwgbWFyZ2luQWZ0ZXIodmVydGljYWxNYXJnaW4pIH0pOwot
ICAgICAgICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbigqYW5j
ZXN0b3IsIHZlcnRpY2FsTWFyZ2luLCBjb25zdHJhaW50c0ZvckFuY2VzdG9yLnZlcnRpY2FsKSk7
CisgICAgICAgIGJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgbWFyZ2luQmVmb3JlKHZl
cnRpY2FsTWFyZ2luKSwgbWFyZ2luQWZ0ZXIodmVydGljYWxNYXJnaW4pIH0pOworICAgICAgICBi
b3hHZW9tZXRyeS5zZXRUb3AodmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4oKmFuY2VzdG9yLCB2
ZXJ0aWNhbE1hcmdpbiwgY29uc3RyYWludHNGb3JBbmNlc3Rvci52ZXJ0aWNhbCkpOwogI2lmIEFT
U0VSVF9FTkFCTEVECiAgICAgICAgIHNldFByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCphbmNlc3Rv
ciwgcHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUpOwotICAgICAgICBkaXNwbGF5Qm94LnNldEhhc1By
ZWNvbXB1dGVkTWFyZ2luQmVmb3JlKCk7CisgICAgICAgIGJveEdlb21ldHJ5LnNldEhhc1ByZWNv
bXB1dGVkTWFyZ2luQmVmb3JlKCk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0yODQsNyArMjg0LDcg
QEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlUG9zaXRpb25Ub0F2b2lkRmxv
YXRzKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYKICAgICAvLyBIb3dldmVyIGFjY29yZGluZyB0byB0
aGUgQkZDIHJ1bGVzLCBhdCB0aGlzIHBvaW50IG9mIHRoZSBsYXlvdXQgZmxvdyB3ZSBkb24ndCB5
ZXQgaGF2ZSBjb21wdXRlZCB2ZXJ0aWNhbCBwb3NpdGlvbnMgZm9yIHRoZSBhbmNlc3RvcnMuCiAg
ICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKSB7CiAgICAgICAgIHByZWNv
bXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yQm94QW5kQW5jZXN0b3JzKGxheW91dEJveCwgY29uc3Ry
YWludHNQYWlyKTsKLSAgICAgICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRC
b3gpLnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQobGF5b3V0Qm94
LCBjb25zdHJhaW50c1BhaXIuY29udGFpbmluZ0Jsb2NrLmhvcml6b250YWwpKTsKKyAgICAgICAg
Zm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KGZsb2F0
aW5nQ29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGxheW91dEJveCwgY29uc3RyYWludHNQYWlyLmNv
bnRhaW5pbmdCbG9jay5ob3Jpem9udGFsKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ly8gTm9uLWZsb2F0IHBvc2l0aW9uZWQgZmxvYXQgYXZvaWRlcnMgKGZvcm1hdHRpbmcgY29udGV4
dCByb290cyBhbmQgY2xlYXIgYm94ZXMpIHNob3VsZCBiZSBmaW5lIHVubGVzcyB0aGVyZSBhcmUg
ZmxvYXRzIGluIHRoaXMgY29udGV4dC4KQEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lkIEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVQb3NpdGlvblRvQXZvaWRGbG9hdHMoY29uc3QgRmxvYXRp
bmdDb250ZXh0JgogICAgICAgICByZXR1cm4gY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JGbG9h
dENsZWFyKGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0Qm94KTsKIAogICAgIEFTU0VSVChsYXlvdXRC
b3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKLSAgICBmb3JtYXR0aW5nU3RhdGUo
KS5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRp
b25Gb3JOb25GbG9hdGluZ0Zsb2F0QXZvaWRlcihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpci5j
b250YWluaW5nQmxvY2suaG9yaXpvbnRhbCkpOworICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdl
b21ldHJ5KGxheW91dEJveCkuc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JO
b25GbG9hdGluZ0Zsb2F0QXZvaWRlcihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpci5jb250YWlu
aW5nQmxvY2suaG9yaXpvbnRhbCkpOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcihjb25zdCBGbG9hdGluZ0NvbnRl
eHQmIGZsb2F0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCkBAIC0zMDksMTEgKzMw
OSwxMSBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVWZXJ0aWNhbFBvc2l0
aW9uRm9yRmxvYXRDbGVhcihjb25zdCBGbG9hdGluZwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gobGF5
b3V0Qm94KTsKLSAgICBBU1NFUlQoKnZlcnRpY2FsUG9zaXRpb25BbmRDbGVhcmFuY2UucG9zaXRp
b24gPj0gZGlzcGxheUJveC50b3AoKSk7Ci0gICAgZGlzcGxheUJveC5zZXRUb3AoKnZlcnRpY2Fs
UG9zaXRpb25BbmRDbGVhcmFuY2UucG9zaXRpb24pOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0g
Zm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KTsKKyAgICBBU1NFUlQoKnZl
cnRpY2FsUG9zaXRpb25BbmRDbGVhcmFuY2UucG9zaXRpb24gPj0gYm94R2VvbWV0cnkudG9wKCkp
OworICAgIGJveEdlb21ldHJ5LnNldFRvcCgqdmVydGljYWxQb3NpdGlvbkFuZENsZWFyYW5jZS5w
b3NpdGlvbik7CiAgICAgaWYgKHZlcnRpY2FsUG9zaXRpb25BbmRDbGVhcmFuY2UuY2xlYXJhbmNl
KQotICAgICAgICBkaXNwbGF5Qm94LnNldEhhc0NsZWFyYW5jZSgpOworICAgICAgICBib3hHZW9t
ZXRyeS5zZXRIYXNDbGVhcmFuY2UoKTsKICAgICAvLyBGSVhNRTogUmVzZXQgdGhlIG1hcmdpbiB2
YWx1ZXMgb24gdGhlIGFuY2VzdG9ycy9wcmV2aW91cyBzaWJsaW5ncyBub3cgdGhhdCB0aGUgZmxv
YXQgYXZvaWRlciB3aXRoIGNsZWFyYW5jZSBkb2VzIG5vdCBtYXJnaW4gY29sbGFwc2UgYW55bW9y
ZS4KIH0KIApAQCAtMzI1LDkgKzMyNSw5IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpCiAgICAg
ICAgIGF2YWlsYWJsZVdpZHRoRmxvYXRBdm9pZGVyID0gdXNlZEF2YWlsYWJsZVdpZHRoRm9yRmxv
YXRBdm9pZGVyKGZsb2F0aW5nQ29udGV4dCwgbGF5b3V0Qm94LCBjb25zdHJhaW50c1BhaXIpOwog
ICAgIH0KICAgICBhdXRvIGNvbnRlbnRXaWR0aEFuZE1hcmdpbiA9IGdlb21ldHJ5KCkuY29tcHV0
ZWRXaWR0aEFuZE1hcmdpbihsYXlvdXRCb3gsIGNvbnN0cmFpbnRzUGFpci5jb250YWluaW5nQmxv
Y2suaG9yaXpvbnRhbCwgYXZhaWxhYmxlV2lkdGhGbG9hdEF2b2lkZXIpOwotICAgIGF1dG8mIGRp
c3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7Ci0gICAg
ZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRl
bnRXaWR0aCk7Ci0gICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29udGVudFdp
ZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uc3RhcnQsIGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2Vk
TWFyZ2luLmVuZCB9KTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgp
LmJveEdlb21ldHJ5KGxheW91dEJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdp
ZHRoKGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpOworICAgIGJveEdlb21ldHJ5
LnNldEhvcml6b250YWxNYXJnaW4oeyBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5z
dGFydCwgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uZW5kIH0pOwogfQogCiB2b2lk
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgY29uc3RyYWlu
dHMpCkBAIC0zODMsMTMgKzM4MywxMyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0CiAgICAgICAg
IEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYg
ZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKKyAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91
dEJveCk7CiAgICAgaWYgKCFsYXlvdXRCb3guaXNGbG9hdEF2b2lkZXIoKSkgewogICAgICAgICAv
LyBGbG9hdCBhdm9pZGVycyBoYXZlIHByZS1jb21wdXRlZCB2ZXJ0aWNhbCBtYXJnaW5zLgotICAg
ICAgICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbihsYXlvdXRC
b3gsIHZlcnRpY2FsTWFyZ2luLCBjb25zdHJhaW50cy52ZXJ0aWNhbCkpOworICAgICAgICBib3hH
ZW9tZXRyeS5zZXRUb3AodmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4obGF5b3V0Qm94LCB2ZXJ0
aWNhbE1hcmdpbiwgY29uc3RyYWludHMudmVydGljYWwpKTsKICAgICB9Ci0gICAgZGlzcGxheUJv
eC5zZXRDb250ZW50Qm94SGVpZ2h0KGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdo
dCk7Ci0gICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IG1hcmdpbkJlZm9yZSh2ZXJ0
aWNhbE1hcmdpbiksIG1hcmdpbkFmdGVyKHZlcnRpY2FsTWFyZ2luKSB9KTsKKyAgICBib3hHZW9t
ZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KGNvbnRlbnRIZWlnaHRBbmRNYXJnaW4uY29udGVudEhl
aWdodCk7CisgICAgYm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyBtYXJnaW5CZWZvcmUo
dmVydGljYWxNYXJnaW4pLCBtYXJnaW5BZnRlcih2ZXJ0aWNhbE1hcmdpbikgfSk7CiAgICAgLy8g
QWRqdXN0IHRoZSBwcmV2aW91cyBzaWJsaW5nJ3MgbWFyZ2luIGJvdHRvbSBub3cgdGhhdCB0aGlz
IGJveCdzIHZlcnRpY2FsIG1hcmdpbiBpcyBjb21wdXRlZC4KICAgICBNYXJnaW5Db2xsYXBzZTo6
dXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoKnRoaXMsIG1hcmdpbkNvbGxhcHNl
LCBsYXlvdXRCb3gpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwCmluZGV4IDQxOGIyY2JhYTQ0NzY1YmFhMmY2NTM5ODE4ZDM4NzYyNDc1ZTMwZmYuLmMz
ODdlNjMzM2Y1MjlmN2FiZjhlMGQ3MTUxYWIwNmFhZTMwYmQ4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Js
b2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNs
dWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0
Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgogI2luY2x1ZGUgIkxheW91dFJlcGxh
Y2VkQm94LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtOTYsOCArOTYsOCBAQCBDb250ZW50
SGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dO
b25SZXBsYWNlZEhlaWdodAogICAgICAgICB3aGlsZSAoaW5GbG93Q2hpbGQgJiYgZm9ybWF0dGlu
Z0NvbnRleHQoKS5tYXJnaW5Db2xsYXBzZSgpLm1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJl
bnRNYXJnaW5BZnRlcigqaW5GbG93Q2hpbGQpKQogICAgICAgICAgICAgaW5GbG93Q2hpbGQgPSBp
bkZsb3dDaGlsZC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7CiAgICAgICAgIGlmIChpbkZsb3dD
aGlsZCkgewotICAgICAgICAgICAgYXV0byYgaW5GbG93RGlzcGxheUJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqaW5GbG93Q2hpbGQpOwotICAgICAgICAg
ICAgcmV0dXJuIHsgaW5GbG93RGlzcGxheUJveEdlb21ldHJ5LnRvcCgpICsgaW5GbG93RGlzcGxh
eUJveEdlb21ldHJ5LmJvcmRlckJveCgpLmhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwg
bm9uQ29sbGFwc2VkTWFyZ2luIH07CisgICAgICAgICAgICBhdXRvJiBpbkZsb3dCb3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmluRmxvd0NoaWxkKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IGluRmxvd0JveEdlb21ldHJ5LnRvcCgpICsgaW5GbG93Qm94R2Vv
bWV0cnkuYm9yZGVyQm94KCkuaGVpZ2h0KCkgLSBib3JkZXJBbmRQYWRkaW5nVG9wLCBub25Db2xs
YXBzZWRNYXJnaW4gfTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIDQuIHplcm8sIG90aGVyd2lz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9j
a0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggNWU3OTFm
OWZkMTYyODhmOGMyZDE4ZDdmNDMyMWZhZjc5M2MzZDI1Ny4uYWQ5ZDZjYjQxY2JhZjA4MmMwYmM2
MDliMzRkMjcyNjE0MDg4YmUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Js
b2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRR
dWlya3MuY3BwCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdT
dGF0ZS5oIgogI2luY2x1ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21l
dHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0
R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAj
aW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKaW5kZXgg
NWZmZTRhMjVjMGEwYmM5NzFmZmM5MzQyYzEzODQ3NDY3NmI3MDhkYS4uODk5Y2E5N2M1NTU2MGRh
MWFjN2E5NWEzM2FhNTYwYmI1N2UxZjllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwCkBA
IC04Nyw3ICs4Nyw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFw
c2U6Omhhc0NsZWFyYW5jZShjb25zdCBCb3gmIGxheW91dEJveCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIC8vIEZJWE1FOiBwcmVjb21wdXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JGb3JtYXR0
aW5nUm9vdCBsb2dpYyBlbmRzIHVwIGNhbGxpbmcgaW50byB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhl
IGxheW91dEJveCAoZmlyc3QgaW5mbG93IGNoaWxkKSBoYXMKICAgICAvLyBub3QgYmVlbiBsYWlk
IG91dC4KLSAgICBpZiAoIWxheW91dFN0YXRlKCkuaGFzRGlzcGxheUJveChsYXlvdXRCb3gpKQor
ICAgIGlmICghbGF5b3V0U3RhdGUoKS5oYXNCb3hHZW9tZXRyeShsYXlvdXRCb3gpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KS5oYXNDbGVhcmFuY2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJs
b2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9y
bWF0dGluZy90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5j
cHAKaW5kZXggNjYzOGFlNTMzMDY1Y2RhNDcwNDY3ODlmZWIzMTUxNDBmNjk0M2YxNS4uZWI2MGQx
MTMyYzMxOTlhYzIxNmUzMDgzZDIyMDUzOTk0YWU1MWY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy90YWJsZXdyYXBwZXIvVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4
dC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRl
LmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hH
ZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJM
YXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJM
YXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAjaW5jbHVkZSAiVGFibGVGb3JtYXR0aW5n
Q29udGV4dC5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCkBAIC0xMzYsOSAr
MTM2LDkgQEAgdm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
Qm9yZGVyQW5kUGFkZGluZ0ZvclRhYmxlQm94KGNvbnMKICAgICBhdXRvIGNvbGxhcHNlZEJvcmRl
ciA9IEVkZ2VzIHsgeyBsZWZ0Qm9yZGVyLCByaWdodEJvcmRlciB9LCB7IHRvcEJvcmRlciwgYm90
dG9tQm9yZGVyIH0gfTsKICAgICBncmlkLnNldENvbGxhcHNlZEJvcmRlcihjb2xsYXBzZWRCb3Jk
ZXIpOwogCi0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlC
b3godGFibGVCb3gpOwotICAgIGRpc3BsYXlCb3guc2V0Qm9yZGVyKGNvbGxhcHNlZEJvcmRlciAv
IDIpOwotICAgIGRpc3BsYXlCb3guc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGlu
Zyh0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCkpOworICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkodGFibGVCb3gp
OworICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcihjb2xsYXBzZWRCb3JkZXIgLyAyKTsKKyAgICBi
b3hHZW9tZXRyeS5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5nKHRhYmxlQm94
LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKSk7CiB9CiAKIHZvaWQgVGFibGVX
cmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luRm9yVGFi
bGVCb3goY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCkBAIC0yMDcsOSArMjA3LDkgQEAgdm9pZCBU
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW5G
b3JUYWJsZUJveChjb25zdAogCiAgICAgYXV0byBjb250ZW50V2lkdGhBbmRNYXJnaW4gPSBnZW9t
ZXRyeS5pbkZsb3dXaWR0aEFuZE1hcmdpbih0YWJsZUJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBPdmVycmlkZUhvcml6b250YWxWYWx1ZXMgeyB1c2VkV2lkdGgsIHsgfSB9KTsKIAotICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KHRhYmxlQm94KTsK
LSAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50V2lkdGhBbmRNYXJnaW4u
Y29udGVudFdpZHRoKTsKLSAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyBjb250
ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5zdGFydCwgY29udGVudFdpZHRoQW5kTWFyZ2lu
LnVzZWRNYXJnaW4uZW5kIH0pOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0
YXRlKCkuYm94R2VvbWV0cnkodGFibGVCb3gpOworICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRC
b3hXaWR0aChjb250ZW50V2lkdGhBbmRNYXJnaW4uY29udGVudFdpZHRoKTsKKyAgICBib3hHZW9t
ZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJn
aW4uc3RhcnQsIGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luLmVuZCB9KTsKIH0KIAog
dm9pZCBUYWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5k
TWFyZ2luRm9yVGFibGVCb3goY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCwgY29uc3QgQ29u
c3RyYWludHNGb3JJbkZsb3dDb250ZW50JiBjb25zdHJhaW50cykKQEAgLTIyNCwxMCArMjI0LDEw
IEBAIHZvaWQgVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdo
dEFuZE1hcmdpbkZvclRhYmxlQm94KGNvbnN0CiAgICAgLy8gQ2FjaGUgdGhlIGNvbXB1dGVkIHBv
c2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW4gdmFsdWUgcGFpci4KICAgICBmb3JtYXR0aW5nU3Rh
dGUoKS5zZXRVc2VkVmVydGljYWxNYXJnaW4odGFibGVCb3gsIHZlcnRpY2FsTWFyZ2luKTsKIAot
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KHRhYmxl
Qm94KTsKLSAgICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbih0
YWJsZUJveCwgdmVydGljYWxNYXJnaW4sIGNvbnN0cmFpbnRzLnZlcnRpY2FsKSk7Ci0gICAgZGlz
cGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KGhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0
KTsKLSAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgbWFyZ2luQmVmb3JlKHZlcnRp
Y2FsTWFyZ2luKSwgbWFyZ2luQWZ0ZXIodmVydGljYWxNYXJnaW4pIH0pOworICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkodGFibGVCb3gpOworICAg
IGJveEdlb21ldHJ5LnNldFRvcCh2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbih0YWJsZUJveCwg
dmVydGljYWxNYXJnaW4sIGNvbnN0cmFpbnRzLnZlcnRpY2FsKSk7CisgICAgYm94R2VvbWV0cnku
c2V0Q29udGVudEJveEhlaWdodChoZWlnaHRBbmRNYXJnaW4uY29udGVudEhlaWdodCk7CisgICAg
Ym94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyBtYXJnaW5CZWZvcmUodmVydGljYWxNYXJn
aW4pLCBtYXJnaW5BZnRlcih2ZXJ0aWNhbE1hcmdpbikgfSk7CiAgICAgLy8gQWRqdXN0IHRoZSBw
cmV2aW91cyBzaWJsaW5nJ3MgbWFyZ2luIGJvdHRvbSBub3cgdGhhdCB0aGlzIGJveCdzIHZlcnRp
Y2FsIG1hcmdpbiBpcyBjb21wdXRlZC4KICAgICBNYXJnaW5Db2xsYXBzZTo6dXBkYXRlTWFyZ2lu
QWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcoKnRoaXMsIG1hcmdpbkNvbGxhcHNlLCB0YWJsZUJveCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheS9EaXNwbGF5TGF5
ZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5L0Rpc3BsYXlM
YXllckNvbnRyb2xsZXIuY3BwCmluZGV4IDRiYjNhMDdhY2NlZjI0MmU2OTM1NjNmMzI3NTZlOTIy
OWM4M2NmNDQuLjY0Y2E0ODBjODQwMzA3NzdiMWVlOWZlZmE5Zjc0N2YxMzE3YzU3MTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5L0Rpc3BsYXlMYXllckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5L0Rpc3BsYXlMYXllckNv
bnRyb2xsZXIuY3BwCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSAiRGlzcGxheVZpZXcuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkxh
eW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUg
IkxheW91dEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtODMsMTAgKzgzLDEwIEBAIHZvaWQgTGF5ZXJD
b250cm9sbGVyOjpwcmVwYXJlRm9yRGlzcGxheShjb25zdCBMYXlvdXQ6OkxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSkKICAgICBpZiAoIXJvb3RMYXlvdXRCb3guZmlyc3RDaGlsZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBU1NFUlQobGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChyb290TGF5
b3V0Qm94KSk7CisgICAgQVNTRVJUKGxheW91dFN0YXRlLmhhc0JveEdlb21ldHJ5KHJvb3RMYXlv
dXRCb3gpKTsKIAotICAgIGF1dG8gdmlld1NpemUgPSBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckxh
eW91dEJveChyb290TGF5b3V0Qm94KS5zaXplKCk7Ci0gICAgYXV0byBjb250ZW50U2l6ZSA9IGxh
eW91dFN0YXRlLmdlb21ldHJ5Rm9yTGF5b3V0Qm94KCpyb290TGF5b3V0Qm94LmZpcnN0Q2hpbGQo
KSkuc2l6ZSgpOworICAgIGF1dG8gdmlld1NpemUgPSBsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckJv
eChyb290TGF5b3V0Qm94KS5zaXplKCk7CisgICAgYXV0byBjb250ZW50U2l6ZSA9IGxheW91dFN0
YXRlLmdlb21ldHJ5Rm9yQm94KCpyb290TGF5b3V0Qm94LmZpcnN0Q2hpbGQoKSkuc2l6ZSgpOwog
ICAgIAogICAgIC8vIEZJWE1FOiBVc2luZyB0aGUgZmlyc3RDaGlsZCgpIHNpemUgd29uJ3QgYmUg
Y29ycmVjdCB1bnRpbCB3ZSBjb21wdXRlIG92ZXJmbG93IGNvcnJlY3RseSwKICAgICBjb250ZW50
U2l6ZS5jbGFtcFRvTWluaW11bVNpemUodmlld1NpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFpbnRlci5jcHAKaW5kZXggMmEyOWM0NDA0
NDE0Y2MxZmM5MDUxMWZiNmM4NDVkOTlhYjY3ZWU3MS4uYWVhYWQ4ZjU0YWUxYmNhMjdmMWNhYThl
MThjY2RmMmViOWU5YTUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3Bs
YXl0cmVlL0Rpc3BsYXlQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlz
cGxheXRyZWUvRGlzcGxheVBhaW50ZXIuY3BwCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSAi
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0uaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNs
dWRlICJMYXlvdXRDb250YWluZXJCb3guaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgog
I2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKICNpbmNsdWRlICJMYXlv
dXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCkBAIC00NSwxMCArNDUsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXkgewogCiAvLyBGSVhNRTogTW92
ZSB0byBkaXNwbGF5IGJveC4KLXN0YXRpYyB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dDo6R2VvbWV0cnkmIGFic29sdXRlRGlzcGxh
eUJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBib29sIG5lZWRzTWFyZ2luUGFpbnRpbmcp
CitzdGF0aWMgdm9pZCBwYWludEJveERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXlvdXQ6OkJveEdlb21ldHJ5JiBhYnNvbHV0ZUJveEdlb21ldHJ5LCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGJvb2wgbmVlZHNNYXJnaW5QYWludGluZykKIHsKLSAgICBhdXRv
IGRlY29yYXRpb25Cb3hUb3BMZWZ0ID0gbmVlZHNNYXJnaW5QYWludGluZyA/IGFic29sdXRlRGlz
cGxheUJveC5yZWN0V2l0aE1hcmdpbigpLnRvcExlZnQoKSA6IGFic29sdXRlRGlzcGxheUJveC50
b3BMZWZ0KCk7Ci0gICAgYXV0byBkZWNvcmF0aW9uQm94U2l6ZSA9IG5lZWRzTWFyZ2luUGFpbnRp
bmcgPyBhYnNvbHV0ZURpc3BsYXlCb3gucmVjdFdpdGhNYXJnaW4oKS5zaXplKCkgOiBMYXlvdXRT
aXplKGFic29sdXRlRGlzcGxheUJveC5ib3JkZXJCb3hXaWR0aCgpLCBhYnNvbHV0ZURpc3BsYXlC
b3guYm9yZGVyQm94SGVpZ2h0KCkpOworICAgIGF1dG8gZGVjb3JhdGlvbkJveFRvcExlZnQgPSBu
ZWVkc01hcmdpblBhaW50aW5nID8gYWJzb2x1dGVCb3hHZW9tZXRyeS5yZWN0V2l0aE1hcmdpbigp
LnRvcExlZnQoKSA6IGFic29sdXRlQm94R2VvbWV0cnkudG9wTGVmdCgpOworICAgIGF1dG8gZGVj
b3JhdGlvbkJveFNpemUgPSBuZWVkc01hcmdpblBhaW50aW5nID8gYWJzb2x1dGVCb3hHZW9tZXRy
eS5yZWN0V2l0aE1hcmdpbigpLnNpemUoKSA6IExheW91dFNpemUoYWJzb2x1dGVCb3hHZW9tZXRy
eS5ib3JkZXJCb3hXaWR0aCgpLCBhYnNvbHV0ZUJveEdlb21ldHJ5LmJvcmRlckJveEhlaWdodCgp
KTsKICAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yCiAgICAgaWYgKHN0eWxlLmhhc0JhY2tncm91bmQo
KSkgewogICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHsgZGVjb3JhdGlvbkJveFRvcExlZnQsIGRl
Y29yYXRpb25Cb3hTaXplIH0sIHN0eWxlLmJhY2tncm91bmRDb2xvcigpKTsKQEAgLTE0MiwxMyAr
MTQyLDEzIEBAIHN0YXRpYyB2b2lkIHBhaW50SW5saW5lQ29udGVudChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIExheW91dFBvaW50IGFic29sdXRlT2ZmCiAgICAgfQogfQogCi1MYXlvdXQ6Okdl
b21ldHJ5IFBhaW50ZXI6OmFic29sdXRlRGlzcGxheUJveChjb25zdCBMYXlvdXQ6OkxheW91dFN0
YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgTGF5b3V0OjpCb3gmIGxheW91dEJveFRvUGFpbnQpCitM
YXlvdXQ6OkJveEdlb21ldHJ5IFBhaW50ZXI6OmFic29sdXRlQm94R2VvbWV0cnkoY29uc3QgTGF5
b3V0OjpMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IExheW91dDo6Qm94JiBsYXlvdXRC
b3hUb1BhaW50KQogewogICAgIC8vIFNob3VsZCBuZXZlciByZWFsbHkgaGFwcGVuIGJ1dCB0YWJs
ZSBjb2RlIGlzIHdheSB0b28gaW5jb21wbGV0ZS4KLSAgICBpZiAoIWxheW91dFN0YXRlLmhhc0Rp
c3BsYXlCb3gobGF5b3V0Qm94VG9QYWludCkpCisgICAgaWYgKCFsYXlvdXRTdGF0ZS5oYXNCb3hH
ZW9tZXRyeShsYXlvdXRCb3hUb1BhaW50KSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAo
aXM8TGF5b3V0OjpJbml0aWFsQ29udGFpbmluZ0Jsb2NrPihsYXlvdXRCb3hUb1BhaW50KSkKLSAg
ICAgICAgcmV0dXJuIGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yTGF5b3V0Qm94KGxheW91dEJveFRv
UGFpbnQpOworICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94VG9QYWludCk7CiAKICAgICBhdXRvIHBhaW50Q29udGFpbmVyID0gWyZdIChjb25zdCBhdXRv
JiBsYXlvdXRCb3gpIHsKICAgICAgICAgaWYgKGxheW91dEJveC5pc1RhYmxlQ2VsbCgpKSB7CkBA
IC0xNTgsOSArMTU4LDkgQEAgTGF5b3V0OjpHZW9tZXRyeSBQYWludGVyOjphYnNvbHV0ZURpc3Bs
YXlCb3goY29uc3QgTGF5b3V0OjpMYXlvdXRTdGF0ZSYgbGF5b3V0U3QKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gJmxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICB9OwotICAgIGF1
dG8gYWJzb2x1dGVCb3ggPSBMYXlvdXQ6Okdlb21ldHJ5IHsgbGF5b3V0U3RhdGUuZ2VvbWV0cnlG
b3JMYXlvdXRCb3gobGF5b3V0Qm94VG9QYWludCkgfTsKKyAgICBhdXRvIGFic29sdXRlQm94ID0g
TGF5b3V0OjpCb3hHZW9tZXRyeSB7IGxheW91dFN0YXRlLmdlb21ldHJ5Rm9yQm94KGxheW91dEJv
eFRvUGFpbnQpIH07CiAgICAgZm9yIChhdXRvKiBjb250YWluZXIgPSBwYWludENvbnRhaW5lcihs
YXlvdXRCb3hUb1BhaW50KTsgIWlzPExheW91dDo6SW5pdGlhbENvbnRhaW5pbmdCbG9jaz4oY29u
dGFpbmVyKTsgY29udGFpbmVyID0gcGFpbnRDb250YWluZXIoKmNvbnRhaW5lcikpCi0gICAgICAg
IGFic29sdXRlQm94Lm1vdmVCeShsYXlvdXRTdGF0ZS5nZW9tZXRyeUZvckxheW91dEJveCgqY29u
dGFpbmVyKS50b3BMZWZ0KCkpOworICAgICAgICBhYnNvbHV0ZUJveC5tb3ZlQnkobGF5b3V0U3Rh
dGUuZ2VvbWV0cnlGb3JCb3goKmNvbnRhaW5lcikudG9wTGVmdCgpKTsKICAgICByZXR1cm4gYWJz
b2x1dGVCb3g7CiB9CiAKQEAgLTE3NywyMiArMTc3LDIyIEBAIHN0YXRpYyB2b2lkIHBhaW50U3Vi
dHJlZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUm
IGxhCiAgICAgYXV0byBwYWludCA9IFsmXSAoYXV0byYgbGF5b3V0Qm94KSB7CiAgICAgICAgIGlm
IChsYXlvdXRCb3guc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVmlzaWJpbGl0eTo6VmlzaWJsZSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5
Qm94KGxheW91dEJveCkpCisgICAgICAgIGlmICghbGF5b3V0U3RhdGUuaGFzQm94R2VvbWV0cnko
bGF5b3V0Qm94KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byBhYnNvbHV0ZURp
c3BsYXlCb3ggPSBQYWludGVyOjphYnNvbHV0ZURpc3BsYXlCb3gobGF5b3V0U3RhdGUsIGxheW91
dEJveCk7Ci0gICAgICAgIGlmICghZGlydHlSZWN0LmludGVyc2VjdHMoc25hcHBlZEludFJlY3Qo
YWJzb2x1dGVEaXNwbGF5Qm94LnJlY3QoKSkpKQorICAgICAgICBhdXRvIGFic29sdXRlQm94R2Vv
bWV0cnkgPSBQYWludGVyOjphYnNvbHV0ZUJveEdlb21ldHJ5KGxheW91dFN0YXRlLCBsYXlvdXRC
b3gpOworICAgICAgICBpZiAoIWRpcnR5UmVjdC5pbnRlcnNlY3RzKHNuYXBwZWRJbnRSZWN0KGFi
c29sdXRlQm94R2VvbWV0cnkucmVjdCgpKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgaWYgKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZTo6RGVjb3JhdGlvbikgewogICAgICAgICAg
ICAgaWYgKGxheW91dEJveC5pc0Fub255bW91cygpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbihjb250ZXh0LCBhYnNvbHV0ZURpc3BsYXlC
b3gsIGxheW91dEJveC5zdHlsZSgpLCBsYXlvdXRCb3guaXNCb2R5Qm94KCkpOworICAgICAgICAg
ICAgcGFpbnRCb3hEZWNvcmF0aW9uKGNvbnRleHQsIGFic29sdXRlQm94R2VvbWV0cnksIGxheW91
dEJveC5zdHlsZSgpLCBsYXlvdXRCb3guaXNCb2R5Qm94KCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIC8vIE9ubHkgaW5saW5lIGNvbnRlbnQgZm9yIG5vdy4KICAg
ICAgICAgaWYgKGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkp
IHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5lckJveCA9IGRvd25jYXN0PExheW91dDo6Q29u
dGFpbmVyQm94PihsYXlvdXRCb3gpOwotICAgICAgICAgICAgcGFpbnRJbmxpbmVDb250ZW50KGNv
bnRleHQsIGFic29sdXRlRGlzcGxheUJveC50b3BMZWZ0KCksIGxheW91dFN0YXRlLmVzdGFibGlz
aGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5lckJveCkpOworICAgICAgICAgICAgcGFp
bnRJbmxpbmVDb250ZW50KGNvbnRleHQsIGFic29sdXRlQm94R2VvbWV0cnkudG9wTGVmdCgpLCBs
YXlvdXRTdGF0ZS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShjb250YWluZXJCb3gp
KTsKICAgICAgICAgfQogICAgIH07CiAKQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgTGF5b3V0
UmVjdCBjb2xsZWN0UGFpbnRSb290c0FuZENvbnRlbnRSZWN0KGNvbnN0IExheW91dDo6TGF5b3V0
U3RhdGUmIGxheQogICAgICAgICBwb3NpdGl2ZVpPcmRlckxpc3QuYXBwZW5kKCZsYXlvdXRCb3gp
OwogICAgIH07CiAKLSAgICBhdXRvIGNvbnRlbnRSZWN0ID0gTGF5b3V0UmVjdCB7IGxheW91dFN0
YXRlLmdlb21ldHJ5Rm9yTGF5b3V0Qm94KHJvb3RMYXlvdXRCb3gpLnJlY3QoKSB9OworICAgIGF1
dG8gY29udGVudFJlY3QgPSBMYXlvdXRSZWN0IHsgbGF5b3V0U3RhdGUuZ2VvbWV0cnlGb3JCb3go
cm9vdExheW91dEJveCkucmVjdCgpIH07CiAKICAgICAvLyBJbml0aWFsIEJGQyBpcyBhbHdheXMg
YSBwYWludCByb290LgogICAgIGFwcGVuZFBhaW50Um9vdChyb290TGF5b3V0Qm94KTsKQEAgLTI0
OCw4ICsyNDgsOCBAQCBzdGF0aWMgTGF5b3V0UmVjdCBjb2xsZWN0UGFpbnRSb290c0FuZENvbnRl
bnRSZWN0KGNvbnN0IExheW91dDo6TGF5b3V0U3RhdGUmIGxheQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgaWYgKGlzUGFpbnRSb290Q2FuZGlkYXRlKGxheW91dEJveCkpCiAg
ICAgICAgICAgICAgICAgYXBwZW5kUGFpbnRSb290KGxheW91dEJveCk7Ci0gICAgICAgICAgICBp
ZiAobGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChsYXlvdXRCb3gpKQotICAgICAgICAgICAgICAg
IGNvbnRlbnRSZWN0LnVuaXRlSWZOb25aZXJvKFBhaW50ZXI6OmFic29sdXRlRGlzcGxheUJveChs
YXlvdXRTdGF0ZSwgbGF5b3V0Qm94KS5yZWN0KCkpOworICAgICAgICAgICAgaWYgKGxheW91dFN0
YXRlLmhhc0JveEdlb21ldHJ5KGxheW91dEJveCkpCisgICAgICAgICAgICAgICAgY29udGVudFJl
Y3QudW5pdGVJZk5vblplcm8oUGFpbnRlcjo6YWJzb2x1dGVCb3hHZW9tZXRyeShsYXlvdXRTdGF0
ZSwgbGF5b3V0Qm94KS5yZWN0KCkpOwogICAgICAgICAgICAgaWYgKCFpczxMYXlvdXQ6OkNvbnRh
aW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8TGF5b3V0OjpDb250YWluZXJCb3g+KGxh
eW91dEJveCkuaGFzQ2hpbGQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGxheW91dEJveExpc3QuYXBwZW5kKGRvd25jYXN0PExheW91dDo6Q29udGFpbmVyQm94PihsYXlv
dXRCb3gpLmZpcnN0Q2hpbGQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
ZGlzcGxheXRyZWUvRGlzcGxheVBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5UGFpbnRlci5oCmluZGV4IDFiZTVlZmM5ZWJiZjFjNmQwZDUyZWMyZmQy
YWFjN2FmYzEyYWJkMjEuLjA2ZTZmZjJlNWFlYzdiMDMxZmYyMzVjYmNkNmRmM2Y0YjMyZjM1YzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFp
bnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5UGFp
bnRlci5oCkBAIC0zMyw3ICszMyw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIElu
dFJlY3Q7CiAKIG5hbWVzcGFjZSBMYXlvdXQgewotY2xhc3MgR2VvbWV0cnk7CitjbGFzcyBCb3hH
ZW9tZXRyeTsKIGNsYXNzIExheW91dFN0YXRlOwogfQogCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBwYWludElubGluZUZsb3coY29uc3QgTGF5b3V0OjpMYXlvdXRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dCYpOwogCiAgICAgLy8gRklYTUU6IE1vdmUgdG8gZGlzcGxh
eSBib3guCi0gICAgc3RhdGljIExheW91dDo6R2VvbWV0cnkgYWJzb2x1dGVEaXNwbGF5Qm94KGNv
bnN0IExheW91dDo6TGF5b3V0U3RhdGUmLCBjb25zdCBMYXlvdXQ6OkJveCYpOworICAgIHN0YXRp
YyBMYXlvdXQ6OkJveEdlb21ldHJ5IGFic29sdXRlQm94R2VvbWV0cnkoY29uc3QgTGF5b3V0OjpM
YXlvdXRTdGF0ZSYsIGNvbnN0IExheW91dDo6Qm94Jik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRlci5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuaAppbmRleCA4ZTI1M2IxOTBmMjllMWQyYTQz
MjhhNzRlOGExMDlhY2IzYzNkNzIxLi5hODhiZWMwYTA2ODBhOTEzOWM3MzhkYzVjZjAzMzI1MjUx
MjMxYjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0QXZv
aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmgK
QEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
IAogI2luY2x1ZGUgIkxheW91dEJveC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisj
aW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgog
I2luY2x1ZGUgIkxheW91dFVuaXRzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCmluZGV4
IDg1NWZmNWZlNTc5MDQ5NjJjMDM5YjIwN2ZkODg4NmU0ZjliYzQxODEuLmNlNjIzNWNjZmRhZDE3
NzhiMWU4MjA4NmJlNDIwYTUzODYxY2MzOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAKQEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRl
ICJGbG9hdEF2b2lkZXIuaCIKICNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkxheW91dEJveC5oIgorI2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0Q29udGFpbmVyQm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0yNDMsMTkgKzI0MywxOSBAQCBMYXlvdXRQb2ludCBGbG9hdGluZ0NvbnRleHQ6OnBvc2l0aW9u
Rm9yRmxvYXQoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6bwogICAgIC8vIEZpbmQg
dGhlIHRvcCBtb3N0IHBvc2l0aW9uIHdoZXJlIHRoZSBmbG9hdCBib3ggZml0cy4KICAgICBBU1NF
UlQoIWlzRW1wdHkoKSk7CiAgICAgYXV0byBwcmV2aW91c0Zsb2F0QWJzb2x1dGVUb3AgPSBmbG9h
dGluZ1N0YXRlKCkuZmxvYXRzKCkubGFzdCgpLnJlY3RXaXRoTWFyZ2luKCkudG9wKCk7Ci0gICAg
YXV0byBhYnNvbHV0ZURpc3BsYXlCb3hDb29yZGluYXRlcyA9IHRoaXMtPmFic29sdXRlRGlzcGxh
eUJveENvb3JkaW5hdGVzKGxheW91dEJveCk7Ci0gICAgYXV0byBhYnNvbHV0ZVRvcExlZnQgPSBh
YnNvbHV0ZURpc3BsYXlCb3hDb29yZGluYXRlcy50b3BMZWZ0OworICAgIGF1dG8gYWJzb2x1dGVC
b3hHZW9tZXRyeUNvb3JkaW5hdGVzID0gdGhpcy0+YWJzb2x1dGVCb3hHZW9tZXRyeUNvb3JkaW5h
dGVzKGxheW91dEJveCk7CisgICAgYXV0byBhYnNvbHV0ZVRvcExlZnQgPSBhYnNvbHV0ZUJveEdl
b21ldHJ5Q29vcmRpbmF0ZXMudG9wTGVmdDsKICAgICAvLyBJbmNvbWluZyBmbG9hdCBjYW5ub3Qg
YmUgcGxhY2VkIGhpZ2hlciB0aGFuIGV4aXN0aW5nIGZsb2F0cyAobWFyZ2luIGJveCBvZiB0aGUg
bGFzdCBmbG9hdCkuCiAgICAgLy8gVGFrZSB0aGUgc3RhdGljIHBvc2l0aW9uICh3aGVyZSB0aGUg
Ym94IHdvdWxkIGdvIGlmIGl0IHdhc24ndCBmbG9hdGluZykgYW5kIGFkanVzdCBpdCB3aXRoIHRo
ZSBsYXN0IGZsb2F0LgotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgaWYgKGFic29sdXRlVG9wTGVmdC55KCkg
LSBkaXNwbGF5Qm94Lm1hcmdpbkJlZm9yZSgpIDwgcHJldmlvdXNGbG9hdEFic29sdXRlVG9wKQot
ICAgICAgICBhYnNvbHV0ZVRvcExlZnQuc2V0WShwcmV2aW91c0Zsb2F0QWJzb2x1dGVUb3AgKyBk
aXNwbGF5Qm94Lm1hcmdpbkJlZm9yZSgpKTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICBpZiAoYWJzb2x1
dGVUb3BMZWZ0LnkoKSAtIGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpIDwgcHJldmlvdXNGbG9h
dEFic29sdXRlVG9wKQorICAgICAgICBhYnNvbHV0ZVRvcExlZnQuc2V0WShwcmV2aW91c0Zsb2F0
QWJzb2x1dGVUb3AgKyBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSk7CiAgICAgYXV0byBob3Jp
em9udGFsTWFyZ2luID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCk7Ci0gICAgYXV0byBtYXJnaW5zID0gRWRnZXMg
eyB7ICpob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCAqaG9yaXpvbnRhbE1hcmdpbi5lbmQgfSwgeyBk
aXNwbGF5Qm94Lm1hcmdpbkJlZm9yZSgpLCBkaXNwbGF5Qm94Lm1hcmdpbkFmdGVyKCkgfSB9Owot
ICAgIGF1dG8gZmxvYXRCb3ggPSBGbG9hdEF2b2lkZXIgeyBsYXlvdXRCb3gsIGFic29sdXRlVG9w
TGVmdCwgZGlzcGxheUJveC53aWR0aCgpLCBtYXJnaW5zLCBhYnNvbHV0ZURpc3BsYXlCb3hDb29y
ZGluYXRlcy5jb250YWluaW5nQmxvY2tDb250ZW50Qm94IH07CisgICAgYXV0byBtYXJnaW5zID0g
RWRnZXMgeyB7ICpob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCAqaG9yaXpvbnRhbE1hcmdpbi5lbmQg
fSwgeyBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSwgYm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIo
KSB9IH07CisgICAgYXV0byBmbG9hdEJveCA9IEZsb2F0QXZvaWRlciB7IGxheW91dEJveCwgYWJz
b2x1dGVUb3BMZWZ0LCBib3hHZW9tZXRyeS53aWR0aCgpLCBtYXJnaW5zLCBhYnNvbHV0ZUJveEdl
b21ldHJ5Q29vcmRpbmF0ZXMuY29udGFpbmluZ0Jsb2NrQ29udGVudEJveCB9OwogICAgIGZpbmRB
dmFpbGFibGVQb3NpdGlvbihmbG9hdEJveCwgbV9mbG9hdGluZ1N0YXRlLmZsb2F0cygpKTsKICAg
ICAvLyBGcm9tIGZvcm1hdHRpbmcgcm9vdCBjb29yZGluYXRlIHN5c3RlbSBiYWNrIHRvIGNvbnRh
aW5pbmcgYmxvY2sncy4KLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1RvcExlZnQgPSBhYnNvbHV0
ZURpc3BsYXlCb3hDb29yZGluYXRlcy5jb250YWluaW5nQmxvY2tUb3BMZWZ0OworICAgIGF1dG8g
Y29udGFpbmluZ0Jsb2NrVG9wTGVmdCA9IGFic29sdXRlQm94R2VvbWV0cnlDb29yZGluYXRlcy5j
b250YWluaW5nQmxvY2tUb3BMZWZ0OwogICAgIHJldHVybiB7IGZsb2F0Qm94LmxlZnQoKSArIG1h
cmdpbnMuaG9yaXpvbnRhbC5sZWZ0IC0gY29udGFpbmluZ0Jsb2NrVG9wTGVmdC54KCksIGZsb2F0
Qm94LnRvcCgpICsgbWFyZ2lucy52ZXJ0aWNhbC50b3AgLSBjb250YWluaW5nQmxvY2tUb3BMZWZ0
LnkoKSB9OwogfQogCkBAIC0yNjksMTMgKzI2OSwxMyBAQCBMYXlvdXRQb2ludCBGbG9hdGluZ0Nv
bnRleHQ6OnBvc2l0aW9uRm9yTm9uRmxvYXRpbmdGbG9hdEF2b2lkZXIoY29uc3QgQm94JiBsYXlv
dQogICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkudG9wTGVmdCgpOwogCi0gICAgYXV0byBhYnNvbHV0
ZURpc3BsYXlCb3hDb29yZGluYXRlcyA9IHRoaXMtPmFic29sdXRlRGlzcGxheUJveENvb3JkaW5h
dGVzKGxheW91dEJveCk7Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvIGFic29sdXRlQm94R2VvbWV0
cnlDb29yZGluYXRlcyA9IHRoaXMtPmFic29sdXRlQm94R2VvbWV0cnlDb29yZGluYXRlcyhsYXlv
dXRCb3gpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gpOwogICAgIGF1dG8gaG9yaXpvbnRhbE1hcmdpbiA9IGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dp
Y2FsV2lkdGgpOwotICAgIGF1dG8gbWFyZ2lucyA9IEVkZ2VzIHsgeyAqaG9yaXpvbnRhbE1hcmdp
bi5zdGFydCwgKmhvcml6b250YWxNYXJnaW4uZW5kIH0sIHsgZGlzcGxheUJveC5tYXJnaW5CZWZv
cmUoKSwgZGlzcGxheUJveC5tYXJnaW5BZnRlcigpIH0gfTsKLSAgICBhdXRvIGZsb2F0QXZvaWRl
ciA9IEZsb2F0QXZvaWRlciB7IGxheW91dEJveCwgYWJzb2x1dGVEaXNwbGF5Qm94Q29vcmRpbmF0
ZXMudG9wTGVmdCwgZGlzcGxheUJveC53aWR0aCgpLCBtYXJnaW5zLCBhYnNvbHV0ZURpc3BsYXlC
b3hDb29yZGluYXRlcy5jb250YWluaW5nQmxvY2tDb250ZW50Qm94IH07CisgICAgYXV0byBtYXJn
aW5zID0gRWRnZXMgeyB7ICpob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCAqaG9yaXpvbnRhbE1hcmdp
bi5lbmQgfSwgeyBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSwgYm94R2VvbWV0cnkubWFyZ2lu
QWZ0ZXIoKSB9IH07CisgICAgYXV0byBmbG9hdEF2b2lkZXIgPSBGbG9hdEF2b2lkZXIgeyBsYXlv
dXRCb3gsIGFic29sdXRlQm94R2VvbWV0cnlDb29yZGluYXRlcy50b3BMZWZ0LCBib3hHZW9tZXRy
eS53aWR0aCgpLCBtYXJnaW5zLCBhYnNvbHV0ZUJveEdlb21ldHJ5Q29vcmRpbmF0ZXMuY29udGFp
bmluZ0Jsb2NrQ29udGVudEJveCB9OwogICAgIGZpbmRQb3NpdGlvbkZvckZvcm1hdHRpbmdDb250
ZXh0Um9vdChmbG9hdEF2b2lkZXIpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrVG9wTGVmdCA9
IGFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzLmNvbnRhaW5pbmdCbG9ja1RvcExlZnQ7Cisg
ICAgYXV0byBjb250YWluaW5nQmxvY2tUb3BMZWZ0ID0gYWJzb2x1dGVCb3hHZW9tZXRyeUNvb3Jk
aW5hdGVzLmNvbnRhaW5pbmdCbG9ja1RvcExlZnQ7CiAgICAgcmV0dXJuIHsgZmxvYXRBdm9pZGVy
LmxlZnQoKSAtIGNvbnRhaW5pbmdCbG9ja1RvcExlZnQueCgpLCBmbG9hdEF2b2lkZXIudG9wKCkg
LSBjb250YWluaW5nQmxvY2tUb3BMZWZ0LnkoKSB9OwogfQogCkBAIC00MDQsOSArNDA0LDkgQEAg
RmxvYXRpbmdDb250ZXh0OjpDb25zdHJhaW50cyBGbG9hdGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRz
KExheW91dFVuaXQgY2FuZGlkYXRlVG8KIAogdm9pZCBGbG9hdGluZ0NvbnRleHQ6OmFwcGVuZChj
b25zdCBCb3gmIGZsb2F0Qm94KQogewotICAgIGF1dG8gYWJzb2x1dGVEaXNwbGF5Qm94ID0gR2Vv
bWV0cnkoZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChmbG9hdEJveCkpOwotICAg
IGFic29sdXRlRGlzcGxheUJveC5zZXRUb3BMZWZ0KG1hcFRvcExlZnRUb0Zsb2F0aW5nU3RhdGVS
b290KGZsb2F0Qm94KSk7Ci0gICAgZmxvYXRpbmdTdGF0ZSgpLmFwcGVuZChGbG9hdGluZ1N0YXRl
OjpGbG9hdEl0ZW0geyBmbG9hdEJveCwgYWJzb2x1dGVEaXNwbGF5Qm94IH0pOworICAgIGF1dG8g
YWJzb2x1dGVCb3hHZW9tZXRyeSA9IEJveEdlb21ldHJ5KGZvcm1hdHRpbmdDb250ZXh0KCkuZ2Vv
bWV0cnlGb3JCb3goZmxvYXRCb3gpKTsKKyAgICBhYnNvbHV0ZUJveEdlb21ldHJ5LnNldFRvcExl
ZnQobWFwVG9wTGVmdFRvRmxvYXRpbmdTdGF0ZVJvb3QoZmxvYXRCb3gpKTsKKyAgICBmbG9hdGlu
Z1N0YXRlKCkuYXBwZW5kKEZsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbSB7IGZsb2F0Qm94LCBhYnNv
bHV0ZUJveEdlb21ldHJ5IH0pOwogfQogCiB2b2lkIEZsb2F0aW5nQ29udGV4dDo6ZmluZFBvc2l0
aW9uRm9yRm9ybWF0dGluZ0NvbnRleHRSb290KEZsb2F0QXZvaWRlciYgZmxvYXRBdm9pZGVyKSBj
b25zdApAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgRmxvYXRpbmdDb250ZXh0OjpmaW5kUG9zaXRp
b25Gb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoRmxvYXRBdm9pZGVyJiBmbG9hdEF2CiAgICAgfQog
fQogCi1GbG9hdGluZ0NvbnRleHQ6OkFic29sdXRlQ29vcmRpbmF0ZVZhbHVlc0ZvckZsb2F0QXZv
aWRlciBGbG9hdGluZ0NvbnRleHQ6OmFic29sdXRlRGlzcGxheUJveENvb3JkaW5hdGVzKGNvbnN0
IEJveCYgZmxvYXRBdm9pZGVyKSBjb25zdAorRmxvYXRpbmdDb250ZXh0OjpBYnNvbHV0ZUNvb3Jk
aW5hdGVWYWx1ZXNGb3JGbG9hdEF2b2lkZXIgRmxvYXRpbmdDb250ZXh0OjphYnNvbHV0ZUJveEdl
b21ldHJ5Q29vcmRpbmF0ZXMoY29uc3QgQm94JiBmbG9hdEF2b2lkZXIpIGNvbnN0CiB7CiAgICAg
YXV0byYgY29udGFpbmluZ0Jsb2NrID0gZmxvYXRBdm9pZGVyLmNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVS
ZWFzb246OkZsb2F0Qm94TmVlZHNUb0JlSW5BYnNvbHV0ZUNvb3JkaW5hdGVzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5oCmluZGV4IDZiZDlkNTVj
OTZlYzE1OTM4NjhjYTg4MmFlZWRhZTRhMGM1MzRmNDUuLjFjODk2YTczZjk3Njc4ZmZkMGQzYzJh
ZGE1ZWU0NzE1OGFiZmU1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9h
dHMvRmxvYXRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9G
bG9hdGluZ0NvbnRleHQuaApAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlu
ZFBvc2l0aW9uRm9yRm9ybWF0dGluZ0NvbnRleHRSb290KEZsb2F0QXZvaWRlciYpIGNvbnN0Owog
CiAgICAgc3RydWN0IEFic29sdXRlQ29vcmRpbmF0ZVZhbHVlc0ZvckZsb2F0QXZvaWRlcjsKLSAg
ICBBYnNvbHV0ZUNvb3JkaW5hdGVWYWx1ZXNGb3JGbG9hdEF2b2lkZXIgYWJzb2x1dGVEaXNwbGF5
Qm94Q29vcmRpbmF0ZXMoY29uc3QgQm94JikgY29uc3Q7CisgICAgQWJzb2x1dGVDb29yZGluYXRl
VmFsdWVzRm9yRmxvYXRBdm9pZGVyIGFic29sdXRlQm94R2VvbWV0cnlDb29yZGluYXRlcyhjb25z
dCBCb3gmKSBjb25zdDsKICAgICBMYXlvdXRQb2ludCBtYXBUb3BMZWZ0VG9GbG9hdGluZ1N0YXRl
Um9vdChjb25zdCBCb3gmKSBjb25zdDsKICAgICBQb2ludCBtYXBQb2ludEZyb21Gb3JtYXR0aW5n
Q29udGV4dFJvb3RUb0Zsb2F0aW5nU3RhdGVSb290KFBvaW50KSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ1N0YXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5jcHAKaW5kZXggM2U2M2MyZjc2
NTliMjRhYmZmNDdkYmM4MmRjMjYwZDM4ZmE4MWU3ZC4uODU2Y2U1NTQ2OTY3MWJkYTNlZmMyOWVm
OTBjYTYyMjM5MmZhMGNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0
cy9GbG9hdGluZ1N0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zs
b2F0aW5nU3RhdGUuY3BwCkBAIC00MCwxNiArNDAsMTYgQEAgbmFtZXNwYWNlIExheW91dCB7CiAK
IFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChGbG9hdGluZ1N0YXRlKTsKIAotRmxvYXRpbmdT
dGF0ZTo6RmxvYXRJdGVtOjpGbG9hdEl0ZW0oY29uc3QgQm94JiBsYXlvdXRCb3gsIEdlb21ldHJ5
IGFic29sdXRlRGlzcGxheUJveCkKK0Zsb2F0aW5nU3RhdGU6OkZsb2F0SXRlbTo6RmxvYXRJdGVt
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBCb3hHZW9tZXRyeSBhYnNvbHV0ZUJveEdlb21ldHJ5KQog
ICAgIDogbV9sYXlvdXRCb3gobWFrZVdlYWtQdHIobGF5b3V0Qm94KSkKICAgICAsIG1fcG9zaXRp
b24obGF5b3V0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8gUG9zaXRpb246OkxlZnQg
OiBQb3NpdGlvbjo6UmlnaHQpCi0gICAgLCBtX2Fic29sdXRlRGlzcGxheUJveChhYnNvbHV0ZURp
c3BsYXlCb3gpCisgICAgLCBtX2Fic29sdXRlQm94R2VvbWV0cnkoYWJzb2x1dGVCb3hHZW9tZXRy
eSkKIHsKIH0KIAotRmxvYXRpbmdTdGF0ZTo6RmxvYXRJdGVtOjpGbG9hdEl0ZW0oUG9zaXRpb24g
cG9zaXRpb24sIEdlb21ldHJ5IGFic29sdXRlRGlzcGxheUJveCkKK0Zsb2F0aW5nU3RhdGU6OkZs
b2F0SXRlbTo6RmxvYXRJdGVtKFBvc2l0aW9uIHBvc2l0aW9uLCBCb3hHZW9tZXRyeSBhYnNvbHV0
ZUJveEdlb21ldHJ5KQogICAgIDogbV9wb3NpdGlvbihwb3NpdGlvbikKLSAgICAsIG1fYWJzb2x1
dGVEaXNwbGF5Qm94KGFic29sdXRlRGlzcGxheUJveCkKKyAgICAsIG1fYWJzb2x1dGVCb3hHZW9t
ZXRyeShhYnNvbHV0ZUJveEdlb21ldHJ5KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5oCmluZGV4IDFkODEzNTMwMjYyYWRmZjc5ODdiYWYxOGY1
NDFkNzY3YWMwYTFhYzQuLjFhNWRmYTRiYWQ1N2ViY2NiNmE0MjM4MzdjZTc5MzA0MTAzNWJiNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdTdGF0ZS5oCkBAIC0y
Nyw4ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAor
I2luY2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGFpbmVy
Qm94LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBA
IC0zOCw4ICszOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewog
CiBjbGFzcyBCb3g7CitjbGFzcyBCb3hHZW9tZXRyeTsKIGNsYXNzIEZsb2F0aW5nQ29udGV4dDsK
LWNsYXNzIEdlb21ldHJ5OwogY2xhc3MgTGF5b3V0U3RhdGU7CiBjbGFzcyBSZWN0OwogCkBAIC01
OCwxOCArNTgsMTggQEAgcHVibGljOgogCiAgICAgY2xhc3MgRmxvYXRJdGVtIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEZsb2F0SXRlbShjb25zdCBCb3gmLCBHZW9tZXRyeSBhYnNvbHV0ZURpc3Bs
YXlCb3gpOworICAgICAgICBGbG9hdEl0ZW0oY29uc3QgQm94JiwgQm94R2VvbWV0cnkgYWJzb2x1
dGVCb3hHZW9tZXRyeSk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgYyd0b3IgaXMgb25seSB1
c2VkIGJ5IHRoZSByZW5kZXIgdHJlZSBpbnRlZ2F0aW9uIGNvZGVwYXRoLgogICAgICAgICBlbnVt
IGNsYXNzIFBvc2l0aW9uIHsgTGVmdCwgUmlnaHQgfTsKLSAgICAgICAgRmxvYXRJdGVtKFBvc2l0
aW9uLCBHZW9tZXRyeSBhYnNvbHV0ZURpc3BsYXlCb3gpOworICAgICAgICBGbG9hdEl0ZW0oUG9z
aXRpb24sIEJveEdlb21ldHJ5IGFic29sdXRlQm94R2VvbWV0cnkpOwogCiAgICAgICAgIGJvb2wg
aXNMZWZ0UG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24gPT0gUG9zaXRpb246
OkxlZnQ7IH0KICAgICAgICAgYm9vbCBpc0luRm9ybWF0dGluZ0NvbnRleHRPZihjb25zdCBDb250
YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRC
b3gtPmlzSW5Gb3JtYXR0aW5nQ29udGV4dE9mKGZvcm1hdHRpbmdDb250ZXh0Um9vdCk7IH0KIAot
ICAgICAgICBSZWN0IHJlY3RXaXRoTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURp
c3BsYXlCb3gucmVjdFdpdGhNYXJnaW4oKTsgfQotICAgICAgICBHZW9tZXRyeTo6SG9yaXpvbnRh
bE1hcmdpbiBob3Jpem9udGFsTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZURpc3Bs
YXlCb3guaG9yaXpvbnRhbE1hcmdpbigpOyB9Ci0gICAgICAgIFBvc2l0aW9uSW5Db250ZXh0Um9v
dCBib3R0b20oKSBjb25zdCB7IHJldHVybiB7IG1fYWJzb2x1dGVEaXNwbGF5Qm94LmJvdHRvbSgp
IH07IH0KKyAgICAgICAgUmVjdCByZWN0V2l0aE1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYWJz
b2x1dGVCb3hHZW9tZXRyeS5yZWN0V2l0aE1hcmdpbigpOyB9CisgICAgICAgIEJveEdlb21ldHJ5
OjpIb3Jpem9udGFsTWFyZ2luIGhvcml6b250YWxNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX2Fi
c29sdXRlQm94R2VvbWV0cnkuaG9yaXpvbnRhbE1hcmdpbigpOyB9CisgICAgICAgIFBvc2l0aW9u
SW5Db250ZXh0Um9vdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB7IG1fYWJzb2x1dGVCb3hHZW9t
ZXRyeS5ib3R0b20oKSB9OyB9CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICBjb25zdCBC
b3gqIGZsb2F0Qm94KCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRCb3guZ2V0KCk7IH0KQEAgLTc3
LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8Y29uc3Qg
Qm94PiBtX2xheW91dEJveDsKICAgICAgICAgUG9zaXRpb24gbV9wb3NpdGlvbjsKLSAgICAgICAg
R2VvbWV0cnkgbV9hYnNvbHV0ZURpc3BsYXlCb3g7CisgICAgICAgIEJveEdlb21ldHJ5IG1fYWJz
b2x1dGVCb3hHZW9tZXRyeTsKICAgICB9OwogICAgIHVzaW5nIEZsb2F0TGlzdCA9IFZlY3RvcjxG
bG9hdEl0ZW0+OwogICAgIGNvbnN0IEZsb2F0TGlzdCYgZmxvYXRzKCkgY29uc3QgeyByZXR1cm4g
bV9mbG9hdHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBlMjcx
NGY3NmFlMGJmMWQyMGMwNzkxMGVkOWU5N2ZkOTYyMDkzMzM0Li5jMjM2ZTYxM2M1ZTEyZmE2ZDc0
YTYwMjliNmQwOWNhYTFhYTZmZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5
b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW8KICAgICAgICAg
ICAgICAgICAvLyBJbmxpbmUgYm94ZXMgKDxzcGFuPikgY2FuJ3QgZ2V0IHNpemVkL3Bvc2l0aW9u
ZWQgeWV0LiBBdCB0aGlzIHBvaW50IHdlIGNhbiBvbmx5IGNvbXB1dGUgdGhlaXIgbWFyZ2lucywg
Ym9yZGVycyBhbmQgcGFkZGluZy4KICAgICAgICAgICAgICAgICBjb21wdXRlQm9yZGVyQW5kUGFk
ZGluZygqbGF5b3V0Qm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKICAgICAgICAgICAgICAg
ICBjb21wdXRlSG9yaXpvbnRhbE1hcmdpbigqbGF5b3V0Qm94LCBjb25zdHJhaW50cy5ob3Jpem9u
dGFsKTsKLSAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KCpsYXlv
dXRCb3gpLnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7CisgICAgICAgICAgICAgICAgZm9ybWF0dGlu
Z1N0YXRlKCkuYm94R2VvbWV0cnkoKmxheW91dEJveCkuc2V0VmVydGljYWxNYXJnaW4oeyB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUJ1aWxkZXI6OgogICAg
ICAgICBhdXRvIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCA9IHByZXZpb3VzTGluZSA/IHBy
ZXZpb3VzTGluZS0+b3ZlcmZsb3dDb250ZW50TGVuZ3RoIDogV1RGOjpudWxsb3B0OwogICAgICAg
ICBhdXRvIGluaXRpYWxMaW5lQ29uc3RyYWludHMgPSBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRl
bnQgeyBjb25zdHJhaW50cy5ob3Jpem9udGFsLCB7IGxpbmVMb2dpY2FsVG9wLCBtYWtlT3B0aW9u
YWwodG9MYXlvdXRVbml0KHF1aXJrcygpLmluaXRpYWxMaW5lSGVpZ2h0KCkpKSB9IH07CiAgICAg
ICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lQnVpbGRlci5sYXlvdXRJbmxpbmVDb250ZW50KG5l
ZWRzTGF5b3V0UmFuZ2UsIHBhcnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCwgaW5pdGlhbExpbmVD
b25zdHJhaW50cywgaXNGaXJzdExpbmUpOwotICAgICAgICBhdXRvIGxpbmVMb2dpY2FsUmVjdCA9
IGNyZWF0ZURpc3BsYXlCb3hlc0ZvckxpbmVDb250ZW50KGxpbmVDb250ZW50LCBjb25zdHJhaW50
cy5ob3Jpem9udGFsKTsKKyAgICAgICAgYXV0byBsaW5lTG9naWNhbFJlY3QgPSBjb21wdXRlR2Vv
bWV0cnlGb3JMaW5lQ29udGVudChsaW5lQ29udGVudCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7
CiAKICAgICAgICAgYXV0byBsaW5lQ29udGVudFJhbmdlID0gbGluZUNvbnRlbnQuaW5saW5lSXRl
bVJhbmdlOwogICAgICAgICBpZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CkBAIC0y
MzIsOSArMjMyLDkgQEAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW4KICAgICAgICAgLy8gU3dpdGNo
IHRvIHRoZSBtaW4vbWF4IGZvcm1hdHRpbmcgcm9vdCB3aWR0aCB2YWx1ZXMgYmVmb3JlIGZvcm1h
dHRpbmcgdGhlIGxpbmVzLgogICAgICAgICBmb3IgKGF1dG8qIGZvcm1hdHRpbmdSb290IDogZm9y
bWF0dGluZ0NvbnRleHRSb290TGlzdCkgewogICAgICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0
aHMgPSBsYXlvdXRTdGF0ZS5mb3JtYXR0aW5nU3RhdGVGb3JCb3goKmZvcm1hdHRpbmdSb290KS5p
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KCpmb3JtYXR0aW5nUm9vdCk7Ci0gICAgICAg
ICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveCgqZm9y
bWF0dGluZ1Jvb3QpOwotICAgICAgICAgICAgYXV0byBjb250ZW50V2lkdGggPSAoYXZhaWxhYmxl
V2lkdGggPyBpbnRyaW5zaWNXaWR0aHMtPm1heGltdW0gOiBpbnRyaW5zaWNXaWR0aHMtPm1pbmlt
dW0pIC0gZGlzcGxheUJveC5ob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpOwotICAg
ICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdpZHRoKTsKKyAg
ICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0
cnkoKmZvcm1hdHRpbmdSb290KTsKKyAgICAgICAgICAgIGF1dG8gY29udGVudFdpZHRoID0gKGF2
YWlsYWJsZVdpZHRoID8gaW50cmluc2ljV2lkdGhzLT5tYXhpbXVtIDogaW50cmluc2ljV2lkdGhz
LT5taW5pbXVtKSAtIGJveEdlb21ldHJ5Lmhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5n
KCk7CisgICAgICAgICAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdp
ZHRoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZv
ckNvbnN0cmFpbnQoYXZhaWxhYmxlV2lkdGgpOwogICAgIH07CkBAIC0yNzgsNyArMjc4LDcgQEAg
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9y
bWF0dGluZ1Jvb3QoY29uc3QgQm94Jgogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUhvcml6b250YWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQogewogICAgIGF1dG8gY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luID0gZ2VvbWV0cnkoKS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4o
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIGZvcm1hdHRpbmdTdGF0ZSgp
LmRpc3BsYXlCb3gobGF5b3V0Qm94KS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5l
bmQudmFsdWVPcigwKSB9KTsKKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlv
dXRCb3gpLnNldEhvcml6b250YWxNYXJnaW4oeyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3Rh
cnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH0p
OwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJn
aW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9y
aXpvbnRhbENvbnN0cmFpbnRzKQpAQCAtMzA4LDkgKzMwOCw5IEBAIHZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwg
Y29uc3QKICAgICBpZiAoY29udGVudFdpZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCA8IG1pbldp
ZHRoQW5kTWFyZ2luLmNvbnRlbnRXaWR0aCkKICAgICAgICAgY29udGVudFdpZHRoQW5kTWFyZ2lu
ID0gbWluV2lkdGhBbmRNYXJnaW47CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGlu
Z1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpOwotICAgIGRpc3BsYXlCb3guc2V0Q29udGVu
dEJveFdpZHRoKGNvbnRlbnRXaWR0aEFuZE1hcmdpbi5jb250ZW50V2lkdGgpOwotICAgIGRpc3Bs
YXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IGNvbnRlbnRXaWR0aEFuZE1hcmdpbi51c2VkTWFy
Z2luLnN0YXJ0LCBjb250ZW50V2lkdGhBbmRNYXJnaW4udXNlZE1hcmdpbi5lbmQgfSk7CisgICAg
YXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRC
b3gpOworICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50V2lkdGhBbmRN
YXJnaW4uY29udGVudFdpZHRoKTsKKyAgICBib3hHZW9tZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2lu
KHsgY29udGVudFdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uc3RhcnQsIGNvbnRlbnRXaWR0aEFu
ZE1hcmdpbi51c2VkTWFyZ2luLmVuZCB9KTsKIH0KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
SG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCkBAIC0zMzgsOSAr
MzM4LDkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1h
cmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QKICAgICAgICAgaWYgKGNvbnRlbnRIZWln
aHRBbmRNYXJnaW4uY29udGVudEhlaWdodCA8IG1pbkhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVp
Z2h0KQogICAgICAgICAgICAgY29udGVudEhlaWdodEFuZE1hcmdpbiA9IG1pbkhlaWdodEFuZE1h
cmdpbjsKICAgICB9Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRp
c3BsYXlCb3gobGF5b3V0Qm94KTsKLSAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQo
Y29udGVudEhlaWdodEFuZE1hcmdpbi5jb250ZW50SGVpZ2h0KTsKLSAgICBkaXNwbGF5Qm94LnNl
dFZlcnRpY2FsTWFyZ2luKHsgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJn
aW4uYmVmb3JlLCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbi5hZnRl
ciB9KTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21l
dHJ5KGxheW91dEJveCk7CisgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChjb250
ZW50SGVpZ2h0QW5kTWFyZ2luLmNvbnRlbnRIZWlnaHQpOworICAgIGJveEdlb21ldHJ5LnNldFZl
cnRpY2FsTWFyZ2luKHsgY29udGVudEhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4u
YmVmb3JlLCBjb250ZW50SGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbi5hZnRlciB9
KTsKIH0KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29sbGVjdElubGluZUNvbnRl
bnRJZk5lZWRlZCgpCkBAIC00NDAsNyArNDQwLDcgQEAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmVSZWN0QW5kTGluZUJveE9mZnNldCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHUK
ICAgICByZXR1cm4geyBsaW5lQm94T2Zmc2V0LCBsb2dpY2FsUmVjdCB9OwogfQogCi1EaXNwbGF5
OjpJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpjcmVhdGVEaXNwbGF5Qm94ZXNG
b3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKK0Rp
c3BsYXk6OklubGluZVJlY3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVHZW9tZXRy
eUZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRl
bnQsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQog
ewogICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOwog
ICAgIGF1dG8mIGxpbmVCb3ggPSBsaW5lQ29udGVudC5saW5lQm94OwpAQCAtNDU0LDEyICs0NTQs
MTIgQEAgRGlzcGxheTo6SW5saW5lUmVjdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y3JlYXRl
RGlzcGxheUJveGVzRm9yTGluZUNvbnRlbnQoY28KICAgICAgICAgLy8gTW92ZSBmbG9hdHMgdG8g
dGhlaXIgZmluYWwgcG9zaXRpb24uCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZmxvYXRDYW5k
aWRhdGUgOiBsaW5lQ29udGVudC5mbG9hdHMpIHsKICAgICAgICAgICAgIGF1dG8mIGZsb2F0Qm94
ID0gZmxvYXRDYW5kaWRhdGUuaXRlbS0+bGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3goZmxvYXRCb3gpOworICAgICAg
ICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUuYm94R2VvbWV0cnkoZmxv
YXRCb3gpOwogICAgICAgICAgICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJzdC4KICAgICAg
ICAgICAgIGF1dG8gdmVydGljYWxTdGF0aWNQb3NpdGlvbiA9IGZsb2F0Q2FuZGlkYXRlLmlzSW50
cnVzaXZlID8gbGluZUxvZ2ljYWxSZWN0LnRvcCgpIDogbGluZUxvZ2ljYWxSZWN0LmJvdHRvbSgp
OwotICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHsgbGluZUxvZ2ljYWxSZWN0Lmxl
ZnQoKSwgdmVydGljYWxTdGF0aWNQb3NpdGlvbiB9KTsKKyAgICAgICAgICAgIGJveEdlb21ldHJ5
LnNldFRvcExlZnQoeyBsaW5lTG9naWNhbFJlY3QubGVmdCgpLCB2ZXJ0aWNhbFN0YXRpY1Bvc2l0
aW9uIH0pOwogICAgICAgICAgICAgLy8gRmxvYXQgaXQuCi0gICAgICAgICAgICBkaXNwbGF5Qm94
LnNldFRvcExlZnQoZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRmxvYXQoZmxvYXRCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cykpOworICAgICAgICAgICAgYm94R2VvbWV0cnkuc2V0VG9wTGVm
dChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChmbG9hdEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzKSk7CiAgICAgICAgICAgICBmbG9hdGluZ0NvbnRleHQuYXBwZW5kKGZsb2F0Qm94
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTUwNiwyMSArNTA2LDIxIEBAIERpc3BsYXk6OklubGlu
ZVJlY3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNyZWF0ZURpc3BsYXlCb3hlc0ZvckxpbmVD
b250ZW50KGNvCiAKICAgICAgICAgLy8gQ3JlYXRlIGRpc3BsYXkgYm94ZXMuCiAgICAgICAgIC8v
IEZJWE1FOiBTaW5jZSA8YnI+IGFuZCA8d2JyPiBydW5zIGhhdmUgYXNzb2NpYXRlZCBET00gZWxl
bWVudHMsIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IGEgZGlzcGxheSBib3ggaGVyZS4gCi0g
ICAgICAgIGF1dG8gaW5pdGlhdGVzRGlzcGxheUJveCA9IGxpbmVSdW4uaXNCb3goKSB8fCBsaW5l
UnVuLmlzQ29udGFpbmVyU3RhcnQoKTsKLSAgICAgICAgaWYgKGluaXRpYXRlc0Rpc3BsYXlCb3gp
IHsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxh
eUJveChsYXlvdXRCb3gpOworICAgICAgICBhdXRvIG5lZWRzQm94R2VvbWV0cnkgPSBsaW5lUnVu
LmlzQm94KCkgfHwgbGluZVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCk7CisgICAgICAgIGlmIChuZWVk
c0JveEdlb21ldHJ5KSB7CisgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdTdGF0ZS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpOwogICAgICAgICAgICAgYXV0byYgaW5saW5l
Qm94ID0gbGluZUJveC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICAgICAg
ICAgIGF1dG8gdG9wTGVmdCA9IGlubGluZUJveC5sb2dpY2FsUmVjdCgpLnRvcExlZnQoKTsKICAg
ICAgICAgICAgIHRvcExlZnQubW92ZSh7IH0sIGxpbmVCb3hWZXJ0aWNhbE9mZnNldCk7CiAgICAg
ICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAg
ICAgIHRvcExlZnQgKz0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQo
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgICAgICAgICAgZGlzcGxheUJv
eC5zZXRUb3BMZWZ0KHRvTGF5b3V0UG9pbnQodG9wTGVmdCkpOworICAgICAgICAgICAgYm94R2Vv
bWV0cnkuc2V0VG9wTGVmdCh0b0xheW91dFBvaW50KHRvcExlZnQpKTsKICAgICAgICAgICAgIGlm
IChsaW5lUnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewogICAgICAgICAgICAgICAgIGF1dG8gbWFy
Z2luQm94V2lkdGggPSBpbmxpbmVCb3gubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICAgICAg
YXV0byBjb250ZW50Qm94V2lkdGggPSBtYXJnaW5Cb3hXaWR0aCAtIChkaXNwbGF5Qm94Lm1hcmdp
blN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xl
ZnQoKS52YWx1ZU9yKDApKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnRlbnRCb3hXaWR0aCA9
IG1hcmdpbkJveFdpZHRoIC0gKGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkgKyBib3hHZW9tZXRy
eS5ib3JkZXJMZWZ0KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCkpOwog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGaXggaXQgZm9yIG11bHRpbGluZS4KLSAgICAgICAg
ICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aCh0b0xheW91dFVuaXQoY29udGVu
dEJveFdpZHRoKSk7Ci0gICAgICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVp
Z2h0KHRvTGF5b3V0VW5pdChpbmxpbmVCb3gubG9naWNhbEhlaWdodCgpKSk7CisgICAgICAgICAg
ICAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKHRvTGF5b3V0VW5pdChjb250ZW50
Qm94V2lkdGgpKTsKKyAgICAgICAgICAgICAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94SGVp
Z2h0KHRvTGF5b3V0VW5pdChpbmxpbmVCb3gubG9naWNhbEhlaWdodCgpKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRl
eCBkYzk5NjliZTJjZjRhOTgyOTUxNmEyZjBlNWRjNmQ1NjIxN2ViMzgwLi4xOTNjODZmZmM4MGM2
YWUzZTcxMTdmMWFjNjRmM2MyMTM4MDIxZmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVXaWR0aEFu
ZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKIAogICAg
IHZvaWQgY29sbGVjdElubGluZUNvbnRlbnRJZk5lZWRlZCgpOwotICAgIERpc3BsYXk6OklubGlu
ZVJlY3QgY3JlYXRlRGlzcGxheUJveGVzRm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6
OkxpbmVDb250ZW50JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJik7CisgICAgRGlzcGxh
eTo6SW5saW5lUmVjdCBjb21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVp
bGRlcjo6TGluZUNvbnRlbnQmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKTsKICAgICBz
dHJ1Y3QgTGluZVJlY3RBbmRMaW5lQm94T2Zmc2V0IHsKICAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBsaW5lQm94VmVydGljYWxPZmZzZXQ7CiAgICAgICAgIERpc3BsYXk6OklubGluZVJlY3QgbG9n
aWNhbFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQm94LmgKaW5kZXggZmM3NWZlMWY0MmJjZTg1OTBmODZiZDg5OTUxZGU1
MWY1ZjNlY2QzMC4uY2MzMWQxZmFhZjRjODZmOWJkZmQ5MDViNjMxZmE0YTI4MDEwMDJlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCb3guaApAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiRGlzcGxheUlubGluZVJl
Y3QuaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lLmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnku
aCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxk
ZXIuY3BwCmluZGV4IGExNTA4NTA1OGI3ZDA0MTRkYWZkZTkyNGI2YTVkZWFmNzg5MGEwNzcuLmYx
YzIyZjI0NmY0MThiMTYwOGUzOWIwNzMwMjBlMDJkZGMyNDJjM2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVp
bGRlci5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkxheW91dEJv
eC5oIgotI2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2Vv
bWV0cnkuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
VGV4dFV0aWwuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0
aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAppbmRleCA3N2Ex
ZGMyZjAxYjZlOTZlMjdlMDlhNGMxMDc1ZmU3ODQ0YThkNmNiLi45MGQ4Y2QxYTlkZmZmYTQzY2I5
YmVhN2FlMTUwMGY1MTllMmM0YWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNw
cApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0
aW9uU3RhdGUuaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgorI2luY2x1ZGUgIkxheW91
dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKQEAgLTEzOCwxOSAr
MTM4LDE5IEBAIHZvaWQgTGluZUxheW91dDo6cHJlcGFyZUZsb2F0aW5nU3RhdGUoKQogICAgICAg
ICBhdXRvIHBvc2l0aW9uID0gZmxvYXRpbmdPYmplY3QtPnR5cGUoKSA9PSBGbG9hdGluZ09iamVj
dDo6RmxvYXRSaWdodAogICAgICAgICAgICAgPyBMYXlvdXQ6OkZsb2F0aW5nU3RhdGU6OkZsb2F0
SXRlbTo6UG9zaXRpb246OlJpZ2h0CiAgICAgICAgICAgICA6IExheW91dDo6RmxvYXRpbmdTdGF0
ZTo6RmxvYXRJdGVtOjpQb3NpdGlvbjo6TGVmdDsKLSAgICAgICAgYXV0byBib3ggPSBMYXlvdXQ6
Okdlb21ldHJ5IHsgfTsKKyAgICAgICAgYXV0byBib3hHZW9tZXRyeSA9IExheW91dDo6Qm94R2Vv
bWV0cnkgeyB9OwogICAgICAgICAvLyBGSVhNRTogV2UgYXJlIGZsb29yaW5nIGhlcmUgZm9yIGxl
Z2FjeSBjb21wYXRpYmlsaXR5LgogICAgICAgICAvLyAgICAgICAgU2VlIEZsb2F0aW5nT2JqZWN0
czo6aW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdC4KICAgICAgICAgYXV0byB5ID0gcmVjdC55KCku
Zmxvb3IoKTsKICAgICAgICAgYXV0byBtYXhZID0gcmVjdC5tYXhZKCkuZmxvb3IoKTsKLSAgICAg
ICAgYm94LnNldFRvcExlZnQoeyByZWN0LngoKSwgeSB9KTsKLSAgICAgICAgYm94LnNldENvbnRl
bnRCb3hXaWR0aChyZWN0LndpZHRoKCkpOwotICAgICAgICBib3guc2V0Q29udGVudEJveEhlaWdo
dChtYXhZIC0geSk7Ci0gICAgICAgIGJveC5zZXRCb3JkZXIoeyB9KTsKLSAgICAgICAgYm94LnNl
dFBhZGRpbmcoeyB9KTsKLSAgICAgICAgYm94LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKLSAg
ICAgICAgYm94LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7Ci0gICAgICAgIGZsb2F0aW5nU3RhdGUu
YXBwZW5kKHsgcG9zaXRpb24sIGJveCB9KTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0VG9wTGVm
dCh7IHJlY3QueCgpLCB5IH0pOworICAgICAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lk
dGgocmVjdC53aWR0aCgpKTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdo
dChtYXhZIC0geSk7CisgICAgICAgIGJveEdlb21ldHJ5LnNldEJvcmRlcih7IH0pOworICAgICAg
ICBib3hHZW9tZXRyeS5zZXRQYWRkaW5nKHsgfSk7CisgICAgICAgIGJveEdlb21ldHJ5LnNldEhv
cml6b250YWxNYXJnaW4oeyB9KTsKKyAgICAgICAgYm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJn
aW4oeyB9KTsKKyAgICAgICAgZmxvYXRpbmdTdGF0ZS5hcHBlbmQoeyBwb3NpdGlvbiwgYm94R2Vv
bWV0cnkgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
bGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRy
ZWUvTGF5b3V0Qm94LmNwcAppbmRleCA4ZTE1ODEzYmJkMTBmM2ZhMTEyZjRkZTEzMzk0YjJkYzdj
YmE5NzFlLi42YzBkOWE2NjdjNDVjM2UwZWIzZDU5M2Q3NjZhZTE0MzMzMmUzOTllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5jcHAKQEAgLTI4LDgg
KzI4LDggQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5j
bHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXJCb3gu
aCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxD
b250YWluaW5nQmxvY2suaCIKICNpbmNsdWRlICJMYXlvdXRQaGFzZS5oIgogI2luY2x1ZGUgIkxh
eW91dFN0YXRlLmgiCkBAIC00NTQsMTEgKzQ1NCwxMSBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBC
b3g6OmNvbHVtbldpZHRoKCkgY29uc3QKICAgICByZXR1cm4gcmFyZURhdGEoKS5jb2x1bW5XaWR0
aDsKIH0KIAotdm9pZCBCb3g6OnNldENhY2hlZERpc3BsYXlCb3hGb3JMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIHN0ZDo6dW5pcXVlX3B0cjxHZW9tZXRyeT4gYm94KSBjb25z
dAordm9pZCBCb3g6OnNldENhY2hlZEdlb21ldHJ5Rm9yTGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBzdGQ6OnVuaXF1ZV9wdHI8Qm94R2VvbWV0cnk+IGdlb21ldHJ5KSBjb25z
dAogewogICAgIEFTU0VSVCghbV9jYWNoZWRMYXlvdXRTdGF0ZSk7CiAgICAgbV9jYWNoZWRMYXlv
dXRTdGF0ZSA9IG1ha2VXZWFrUHRyKGxheW91dFN0YXRlKTsKLSAgICBtX2NhY2hlZERpc3BsYXlC
b3hGb3JMYXlvdXRTdGF0ZSA9IFdURk1vdmUoYm94KTsKKyAgICBtX2NhY2hlZEdlb21ldHJ5Rm9y
TGF5b3V0U3RhdGUgPSBXVEZNb3ZlKGdlb21ldHJ5KTsKIH0KIAogQm94OjpSYXJlRGF0YU1hcCYg
Qm94OjpyYXJlRGF0YU1hcCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5
b3V0dHJlZS9MYXlvdXRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xh
eW91dEJveC5oCmluZGV4IGE1MWZhYWY1Mjg4NmMyNzI4MGM2NTUxZDBhZmNiNjAzMGM3NzA4N2Eu
LmI1NTYxYWE5OTk5YzQ2MTMzYjIwNzE4YjRlOGQ0ZWM1MWY0ZjliMWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveC5oCkBAIC0zNyw3ICszNyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBDb250YWluZXJC
b3g7Ci1jbGFzcyBHZW9tZXRyeTsKK2NsYXNzIEJveEdlb21ldHJ5OwogY2xhc3MgSW5pdGlhbENv
bnRhaW5pbmdCbG9jazsKIGNsYXNzIExheW91dFN0YXRlOwogY2xhc3MgVHJlZUJ1aWxkZXI7CkBA
IC0xNzAsOCArMTcwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNBbm9ueW1vdXMoKSB7IG1f
aXNBbm9ueW1vdXMgPSB0cnVlOyB9CiAKICAgICBib29sIGNhbkNhY2hlRm9yTGF5b3V0U3RhdGUo
Y29uc3QgTGF5b3V0U3RhdGUmKSBjb25zdDsKLSAgICBHZW9tZXRyeSogY2FjaGVkRGlzcGxheUJv
eEZvckxheW91dFN0YXRlKGNvbnN0IExheW91dFN0YXRlJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRD
YWNoZWREaXNwbGF5Qm94Rm9yTGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUmLCBzdGQ6OnVuaXF1ZV9w
dHI8R2VvbWV0cnk+KSBjb25zdDsKKyAgICBCb3hHZW9tZXRyeSogY2FjaGVkR2VvbWV0cnlGb3JM
YXlvdXRTdGF0ZShjb25zdCBMYXlvdXRTdGF0ZSYpIGNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVk
R2VvbWV0cnlGb3JMYXlvdXRTdGF0ZShMYXlvdXRTdGF0ZSYsIHN0ZDo6dW5pcXVlX3B0cjxCb3hH
ZW9tZXRyeT4pIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgQm94KE9wdGlvbmFsPEVsZW1lbnRB
dHRyaWJ1dGVzPiwgUmVuZGVyU3R5bGUmJiwgT3B0aW9uU2V0PEJhc2VUeXBlRmxhZz4pOwpAQCAt
MjA3LDcgKzIwNyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gRmlyc3QgTGF5b3V0U3RhdGUg
Z2V0cyBhIGRpcmVjdCBjYWNoZS4KICAgICBtdXRhYmxlIFdlYWtQdHI8TGF5b3V0U3RhdGU+IG1f
Y2FjaGVkTGF5b3V0U3RhdGU7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8R2VvbWV0cnk+
IG1fY2FjaGVkRGlzcGxheUJveEZvckxheW91dFN0YXRlOworICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPEJveEdlb21ldHJ5PiBtX2NhY2hlZEdlb21ldHJ5Rm9yTGF5b3V0U3RhdGU7CiAKICAg
ICB1bnNpZ25lZCBtX2Jhc2VUeXBlRmxhZ3MgOiA2OyAvLyBPcHRpb25TZXQ8QmFzZVR5cGVGbGFn
PgogICAgIGJvb2wgbV9oYXNSYXJlRGF0YSA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRCb3hHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y0
NzI2ODViZmE5ODA5YmRmYTgyZTM1MzFhZjU2MTM5MmFlOGNmYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5LmNwcApA
QCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCisKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEJveEdlb21ldHJ5KTsKKworQm94R2VvbWV0cnk6OkJveEdlb21ldHJ5KGNvbnN0IEJv
eEdlb21ldHJ5JiBvdGhlcikKKyAgICA6IG1fdG9wTGVmdChvdGhlci5tX3RvcExlZnQpCisgICAg
LCBtX2NvbnRlbnRXaWR0aChvdGhlci5tX2NvbnRlbnRXaWR0aCkKKyAgICAsIG1fY29udGVudEhl
aWdodChvdGhlci5tX2NvbnRlbnRIZWlnaHQpCisgICAgLCBtX2hvcml6b250YWxNYXJnaW4ob3Ro
ZXIubV9ob3Jpem9udGFsTWFyZ2luKQorICAgICwgbV92ZXJ0aWNhbE1hcmdpbihvdGhlci5tX3Zl
cnRpY2FsTWFyZ2luKQorICAgICwgbV9oYXNDbGVhcmFuY2Uob3RoZXIubV9oYXNDbGVhcmFuY2Up
CisgICAgLCBtX2JvcmRlcihvdGhlci5tX2JvcmRlcikKKyAgICAsIG1fcGFkZGluZyhvdGhlci5t
X3BhZGRpbmcpCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAsIG1faGFzVmFsaWRUb3Aob3RoZXIu
bV9oYXNWYWxpZFRvcCkKKyAgICAsIG1faGFzVmFsaWRMZWZ0KG90aGVyLm1faGFzVmFsaWRMZWZ0
KQorICAgICwgbV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4ob3RoZXIubV9oYXNWYWxpZEhvcml6
b250YWxNYXJnaW4pCisgICAgLCBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4ob3RoZXIubV9oYXNW
YWxpZFZlcnRpY2FsTWFyZ2luKQorICAgICwgbV9oYXNWYWxpZEJvcmRlcihvdGhlci5tX2hhc1Zh
bGlkQm9yZGVyKQorICAgICwgbV9oYXNWYWxpZFBhZGRpbmcob3RoZXIubV9oYXNWYWxpZFBhZGRp
bmcpCisgICAgLCBtX2hhc1ZhbGlkQ29udGVudEhlaWdodChvdGhlci5tX2hhc1ZhbGlkQ29udGVu
dEhlaWdodCkKKyAgICAsIG1faGFzVmFsaWRDb250ZW50V2lkdGgob3RoZXIubV9oYXNWYWxpZENv
bnRlbnRXaWR0aCkKKyAgICAsIG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUob3RoZXIubV9o
YXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSkKKyNlbmRpZgoreworfQorCitCb3hHZW9tZXRyeTo6
fkJveEdlb21ldHJ5KCkKK3sKK30KKworUmVjdCBCb3hHZW9tZXRyeTo6bWFyZ2luQm94KCkgY29u
c3QKK3sKKyAgICBhdXRvIGJvcmRlckJveCA9IHRoaXMtPmJvcmRlckJveCgpOworCisgICAgUmVj
dCBtYXJnaW5Cb3g7CisgICAgbWFyZ2luQm94LnNldFRvcChib3JkZXJCb3gudG9wKCkgLSBtYXJn
aW5CZWZvcmUoKSk7CisgICAgbWFyZ2luQm94LnNldExlZnQoYm9yZGVyQm94LmxlZnQoKSAtIG1h
cmdpblN0YXJ0KCkpOworICAgIG1hcmdpbkJveC5zZXRIZWlnaHQoYm9yZGVyQm94LmhlaWdodCgp
ICsgbWFyZ2luQmVmb3JlKCkgKyBtYXJnaW5BZnRlcigpKTsKKyAgICBtYXJnaW5Cb3guc2V0V2lk
dGgoYm9yZGVyQm94LndpZHRoKCkgKyBtYXJnaW5TdGFydCgpICsgbWFyZ2luRW5kKCkpOworICAg
IHJldHVybiBtYXJnaW5Cb3g7Cit9CisKK1JlY3QgQm94R2VvbWV0cnk6OmJvcmRlckJveCgpIGNv
bnN0Cit7CisgICAgUmVjdCBib3JkZXJCb3g7CisgICAgYm9yZGVyQm94LnNldFRvcExlZnQoeyB9
KTsKKyAgICBib3JkZXJCb3guc2V0U2l6ZSh7IHdpZHRoKCksIGhlaWdodCgpIH0pOworICAgIHJl
dHVybiBib3JkZXJCb3g7Cit9CisKK1JlY3QgQm94R2VvbWV0cnk6OnBhZGRpbmdCb3goKSBjb25z
dAoreworICAgIGF1dG8gYm9yZGVyQm94ID0gdGhpcy0+Ym9yZGVyQm94KCk7CisKKyAgICBSZWN0
IHBhZGRpbmdCb3g7CisgICAgcGFkZGluZ0JveC5zZXRUb3AoYm9yZGVyQm94LnRvcCgpICsgYm9y
ZGVyVG9wKCkpOworICAgIHBhZGRpbmdCb3guc2V0TGVmdChib3JkZXJCb3gubGVmdCgpICsgYm9y
ZGVyTGVmdCgpKTsKKyAgICBwYWRkaW5nQm94LnNldEhlaWdodChib3JkZXJCb3guYm90dG9tKCkg
LSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKKyAgICBwYWRkaW5nQm94LnNldFdpZHRo
KGJvcmRlckJveC53aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSk7CisgICAg
cmV0dXJuIHBhZGRpbmdCb3g7Cit9CisKK1JlY3QgQm94R2VvbWV0cnk6OmNvbnRlbnRCb3goKSBj
b25zdAoreworICAgIFJlY3QgY29udGVudEJveDsKKyAgICBjb250ZW50Qm94LnNldFRvcChjb250
ZW50Qm94VG9wKCkpOworICAgIGNvbnRlbnRCb3guc2V0TGVmdChjb250ZW50Qm94TGVmdCgpKTsK
KyAgICBjb250ZW50Qm94LnNldFdpZHRoKGNvbnRlbnRCb3hXaWR0aCgpKTsKKyAgICBjb250ZW50
Qm94LnNldEhlaWdodChjb250ZW50Qm94SGVpZ2h0KCkpOworICAgIHJldHVybiBjb250ZW50Qm94
OworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2xheW91dHRyZWUvTGF5b3V0Qm94R2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9s
YXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIxMGQ1NTA4MDExYmNh
ZTY3MTZkYmFjYTRjYTMzNjRhODk4MThlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEJveEdlb21ldHJ5LmgKQEAgLTAsMCArMSw2ODgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRGlzcGxheVJlY3QuaCIKKyNpbmNsdWRlICJMYXlv
dXRVbml0cy5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIFJlY3QgeworcHVibGljOgorICAgIFJl
Y3QoKSA9IGRlZmF1bHQ7CisgICAgUmVjdChMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCBsZWZ0
LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCk7CisgICAgUmVjdChMYXlvdXRQ
b2ludCB0b3BMZWZ0LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCk7CisgICAg
UmVjdChjb25zdCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgY29uc3QgTGF5b3V0U2l6ZSYpOworICAg
IAorICAgIExheW91dFVuaXQgdG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsZWZ0KCkgY29u
c3Q7CisgICAgTGF5b3V0UG9pbnQgdG9wTGVmdCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBi
b3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHJpZ2h0KCkgY29uc3Q7CisgICAgTGF5b3V0
UG9pbnQgYm90dG9tUmlnaHQoKSBjb25zdDsKKworICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25z
dDsKKyAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0OworICAgIExheW91dFNpemUgc2l6ZSgp
IGNvbnN0OworCisgICAgdm9pZCBzZXRUb3AoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRMZWZ0
KExheW91dFVuaXQpOworICAgIHZvaWQgc2V0VG9wTGVmdChjb25zdCBMYXlvdXRQb2ludCYpOwor
ICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzZXRIZWlnaHQoTGF5b3V0
VW5pdCk7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IExheW91dFNpemUmKTsKKworICAgIHZvaWQg
c2hpZnRMZWZ0VG8oTGF5b3V0VW5pdCk7CisgICAgdm9pZCBzaGlmdFJpZ2h0VG8oTGF5b3V0VW5p
dCk7CisgICAgdm9pZCBzaGlmdFRvcFRvKExheW91dFVuaXQpOworICAgIHZvaWQgc2hpZnRCb3R0
b21UbyhMYXlvdXRVbml0KTsKKworICAgIHZvaWQgbW92ZUhvcml6b250YWxseShMYXlvdXRVbml0
KTsKKyAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5KExheW91dFVuaXQpOworCisgICAgdm9pZCBleHBh
bmQoT3B0aW9uYWw8TGF5b3V0VW5pdD4sIE9wdGlvbmFsPExheW91dFVuaXQ+KTsKKyAgICB2b2lk
IGV4cGFuZEhvcml6b250YWxseShMYXlvdXRVbml0IGRlbHRhKSB7IGV4cGFuZChkZWx0YSwgeyB9
KTsgfQorICAgIHZvaWQgZXhwYW5kVmVydGljYWxseShMYXlvdXRVbml0IGRlbHRhKSB7IGV4cGFu
ZCh7IH0sIGRlbHRhKTsgfQorICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBSZWN0JiByZWN0KSBj
b25zdCB7IHJldHVybiBtX3JlY3QuaW50ZXJzZWN0cyhyZWN0KTsgfQorCisgICAgUmVjdCBjbG9u
ZSgpIGNvbnN0OworICAgIG9wZXJhdG9yIExheW91dFJlY3QoKSBjb25zdDsKKworcHJpdmF0ZToK
KyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHZvaWQgaW52YWxpZGF0ZVRvcCgpIHsgbV9oYXNWYWxp
ZFRvcCA9IGZhbHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlTGVmdCgpIHsgbV9oYXNWYWxpZExl
ZnQgPSBmYWxzZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVdpZHRoKCkgeyBtX2hhc1ZhbGlkV2lk
dGggPSBmYWxzZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZUhlaWdodCgpIHsgbV9oYXNWYWxpZEhl
aWdodCA9IGZhbHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUG9zaXRpb24oKTsKKworICAgIGJv
b2wgaGFzVmFsaWRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFsaWRUb3AgJiYgbV9o
YXNWYWxpZExlZnQ7IH0KKyAgICBib29sIGhhc1ZhbGlkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzVmFsaWRXaWR0aCAmJiBtX2hhc1ZhbGlkSGVpZ2h0OyB9CisgICAgYm9vbCBoYXNWYWxpZEdl
b21ldHJ5KCkgY29uc3QgeyByZXR1cm4gaGFzVmFsaWRQb3NpdGlvbigpICYmIGhhc1ZhbGlkU2l6
ZSgpOyB9CisKKyAgICB2b2lkIHNldEhhc1ZhbGlkUG9zaXRpb24oKTsKKyAgICB2b2lkIHNldEhh
c1ZhbGlkU2l6ZSgpOworCisgICAgYm9vbCBtX2hhc1ZhbGlkVG9wIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1faGFzVmFsaWRMZWZ0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzVmFsaWRXaWR0aCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkSGVpZ2h0IHsgZmFsc2UgfTsKKyNlbmRpZiAv
LyBBU1NFUlRfRU5BQkxFRAorICAgIExheW91dFJlY3QgbV9yZWN0OworfTsKKworaW5saW5lIFJl
Y3Q6OlJlY3QoTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB3aWR0
aCwgTGF5b3V0VW5pdCBoZWlnaHQpCisgICAgOiBtX3JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVp
Z2h0KQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9oYXNWYWxpZFRvcCA9IHRydWU7Cisg
ICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworICAgIG1faGFzVmFsaWRXaWR0aCA9IHRydWU7Cisg
ICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYKK30KKworaW5saW5lIFJlY3Q6OlJl
Y3QoTGF5b3V0UG9pbnQgdG9wTGVmdCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWln
aHQpCisgICAgOiBSZWN0KHRvcExlZnQueSgpLCB0b3BMZWZ0LngoKSwgd2lkdGgsIGhlaWdodCkK
K3sKK30KKworaW5saW5lIFJlY3Q6OlJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQsIGNv
bnN0IExheW91dFNpemUmIHNpemUpCisgICAgOiBSZWN0KHRvcExlZnQueSgpLCB0b3BMZWZ0Lngo
KSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKQoreworfQorCisjaWYgQVNTRVJUX0VOQUJM
RUQKK2lubGluZSB2b2lkIFJlY3Q6OmludmFsaWRhdGVQb3NpdGlvbigpCit7CisgICAgaW52YWxp
ZGF0ZVRvcCgpOworICAgIGludmFsaWRhdGVMZWZ0KCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6
OnNldEhhc1ZhbGlkUG9zaXRpb24oKQoreworICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOworICAg
IG1faGFzVmFsaWRMZWZ0ID0gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6c2V0SGFzVmFs
aWRTaXplKCkKK3sKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOworICAgIG1faGFzVmFsaWRI
ZWlnaHQgPSB0cnVlOworfQorI2VuZGlmCisKK2lubGluZSBMYXlvdXRVbml0IFJlY3Q6OnRvcCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAgIHJldHVybiBtX3JlY3Qu
eSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpsZWZ0KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIHJldHVybiBtX3JlY3QueCgpOworfQorCitpbmxp
bmUgTGF5b3V0VW5pdCBSZWN0Ojpib3R0b20oKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1Zh
bGlkVG9wICYmIG1faGFzVmFsaWRIZWlnaHQpOworICAgIHJldHVybiBtX3JlY3QubWF4WSgpOwor
fQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpyaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRXaWR0aCk7CisgICAgcmV0dXJuIG1fcmVjdC5t
YXhYKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0Ojp0b3BMZWZ0KCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoaGFzVmFsaWRQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gbV9yZWN0Lm1pblhN
aW5ZQ29ybmVyKCk7Cit9CisKK2lubGluZSBMYXlvdXRQb2ludCBSZWN0Ojpib3R0b21SaWdodCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1ZhbGlkR2VvbWV0cnkoKSk7CisgICAgcmV0dXJuIG1f
cmVjdC5tYXhYTWF4WUNvcm5lcigpOworfQorCitpbmxpbmUgTGF5b3V0U2l6ZSBSZWN0OjpzaXpl
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsaWRTaXplKCkpOworICAgIHJldHVybiBtX3Jl
Y3Quc2l6ZSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0Ojp3aWR0aCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1faGFzVmFsaWRXaWR0aCk7CisgICAgcmV0dXJuIG1fcmVjdC53aWR0aCgp
OworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZWN0OjpoZWlnaHQoKSBjb25zdAoreworICAgIEFT
U0VSVChtX2hhc1ZhbGlkSGVpZ2h0KTsKKyAgICByZXR1cm4gbV9yZWN0LmhlaWdodCgpOworfQor
CitpbmxpbmUgdm9pZCBSZWN0OjpzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0
KQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgc2V0SGFzVmFsaWRQb3NpdGlvbigpOworI2Vu
ZGlmCisgICAgbV9yZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOworfQorCitpbmxpbmUgdm9pZCBS
ZWN0OjpzZXRUb3AoTGF5b3V0VW5pdCB0b3ApCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBt
X2hhc1ZhbGlkVG9wID0gdHJ1ZTsKKyNlbmRpZgorICAgIG1fcmVjdC5zZXRZKHRvcCk7Cit9CisK
K2lubGluZSB2b2lkIFJlY3Q6OnNldExlZnQoTGF5b3V0VW5pdCBsZWZ0KQoreworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworI2VuZGlmCisgICAgbV9yZWN0
LnNldFgobGVmdCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldFdpZHRoKExheW91dFVuaXQg
d2lkdGgpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVl
OworI2VuZGlmCisgICAgbV9yZWN0LnNldFdpZHRoKHdpZHRoKTsKK30KKworaW5saW5lIHZvaWQg
UmVjdDo6c2V0SGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0KQoreworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYKKyAgICBtX3JlY3Quc2V0SGVp
Z2h0KGhlaWdodCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNldFNpemUoY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHNldEhhc1ZhbGlkU2l6ZSgp
OworI2VuZGlmCisgICAgbV9yZWN0LnNldFNpemUoc2l6ZSk7Cit9CisKK2lubGluZSB2b2lkIFJl
Y3Q6OnNoaWZ0TGVmdFRvKExheW91dFVuaXQgbGVmdCkKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxp
ZExlZnQpOworICAgIG1fcmVjdC5zaGlmdFhFZGdlVG8obGVmdCk7Cit9CisKK2lubGluZSB2b2lk
IFJlY3Q6OnNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0IHJpZ2h0KQoreworICAgIEFTU0VSVChtX2hh
c1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkV2lkdGgpOworICAgIG1fcmVjdC5zaGlmdE1heFhFZGdl
VG8ocmlnaHQpOworfQorCitpbmxpbmUgdm9pZCBSZWN0OjpzaGlmdFRvcFRvKExheW91dFVuaXQg
dG9wKQoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wKTsKKyAgICBtX3JlY3Quc2hpZnRZRWRn
ZVRvKHRvcCk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OnNoaWZ0Qm90dG9tVG8oTGF5b3V0VW5p
dCBib3R0b20pCit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgbV9oYXNWYWxpZEhlaWdo
dCk7CisgICAgbV9yZWN0LnNoaWZ0TWF4WUVkZ2VUbyhib3R0b20pOworfQorCitpbmxpbmUgdm9p
ZCBSZWN0Ojptb3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQgb2Zmc2V0KQoreworICAgIEFTU0VS
VChtX2hhc1ZhbGlkTGVmdCk7CisgICAgbV9yZWN0Lm1vdmUoTGF5b3V0U2l6ZSB7IG9mZnNldCwg
MCB9KTsKK30KKworaW5saW5lIHZvaWQgUmVjdDo6bW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBv
ZmZzZXQpCit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRUb3ApOworICAgIG1fcmVjdC5tb3ZlKExh
eW91dFNpemUgeyAwLCBvZmZzZXQgfSk7Cit9CisKK2lubGluZSB2b2lkIFJlY3Q6OmV4cGFuZChP
cHRpb25hbDxMYXlvdXRVbml0PiB3aWR0aCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gaGVpZ2h0KQor
eworICAgIEFTU0VSVCghd2lkdGggfHwgbV9oYXNWYWxpZFdpZHRoKTsKKyAgICBBU1NFUlQoIWhl
aWdodCB8fCBtX2hhc1ZhbGlkSGVpZ2h0KTsKKyAgICBtX3JlY3QuZXhwYW5kKHdpZHRoLnZhbHVl
T3IoMCksIGhlaWdodC52YWx1ZU9yKDApKTsKK30KKworaW5saW5lIFJlY3QgUmVjdDo6Y2xvbmUo
KSBjb25zdAoreworICAgIFJlY3QgcmVjdDsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHJlY3Qu
bV9oYXNWYWxpZFRvcCA9IG1faGFzVmFsaWRUb3A7CisgICAgcmVjdC5tX2hhc1ZhbGlkTGVmdCA9
IG1faGFzVmFsaWRMZWZ0OworICAgIHJlY3QubV9oYXNWYWxpZFdpZHRoID0gbV9oYXNWYWxpZFdp
ZHRoOworICAgIHJlY3QubV9oYXNWYWxpZEhlaWdodCAgPSBtX2hhc1ZhbGlkSGVpZ2h0OworI2Vu
ZGlmCisgICAgcmVjdC5tX3JlY3QgPSBtX3JlY3Q7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK2lu
bGluZSBSZWN0OjpvcGVyYXRvciBMYXlvdXRSZWN0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFz
VmFsaWRHZW9tZXRyeSgpKTsKKyAgICByZXR1cm4gbV9yZWN0OworfQorCisKK2NsYXNzIEJveEdl
b21ldHJ5IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEJveEdlb21ldHJ5KTsKK3B1Ymxp
YzoKKyAgICBCb3hHZW9tZXRyeShjb25zdCBCb3hHZW9tZXRyeSYpOworICAgIEJveEdlb21ldHJ5
KCkgPSBkZWZhdWx0OworICAgIH5Cb3hHZW9tZXRyeSgpOworCisgICAgTGF5b3V0VW5pdCB0b3Ao
KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxlZnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGJv
dHRvbSgpIGNvbnN0IHsgcmV0dXJuIHRvcCgpICsgaGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRVbml0
IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGVmdCgpICsgd2lkdGgoKTsgfQorCisgICAgTGF5b3V0
UG9pbnQgdG9wTGVmdCgpIGNvbnN0OworICAgIExheW91dFBvaW50IGJvdHRvbVJpZ2h0KCkgY29u
c3QgeyByZXR1cm4geyByaWdodCgpLCBib3R0b20oKSB9OyB9CisKKyAgICBMYXlvdXRTaXplIHNp
emUoKSBjb25zdCB7IHJldHVybiB7IHdpZHRoKCksIGhlaWdodCgpIH07IH0KKyAgICBMYXlvdXRV
bml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0JveFdpZHRo
KCkgKyBib3JkZXJSaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBib3JkZXJUb3AoKSArIHBhZGRpbmdCb3hIZWlnaHQoKSArIGJvcmRlckJvdHRvbSgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpLmlzRW1wdHkoKTsgfQor
ICAgIFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIHsgdG9wKCksIGxlZnQoKSwgd2lkdGgoKSwg
aGVpZ2h0KCkgfTsgfQorICAgIFJlY3QgcmVjdFdpdGhNYXJnaW4oKSBjb25zdCB7IHJldHVybiB7
IHRvcCgpIC0gbWFyZ2luQmVmb3JlKCksIGxlZnQoKSAtIG1hcmdpblN0YXJ0KCksIG1hcmdpblN0
YXJ0KCkgKyB3aWR0aCgpICsgbWFyZ2luRW5kKCksIG1hcmdpbkJlZm9yZSgpICsgaGVpZ2h0KCkg
KyBtYXJnaW5BZnRlcigpIH07IH0KKworICAgIHN0cnVjdCBWZXJ0aWNhbE1hcmdpbiB7CisgICAg
ICAgIExheW91dFVuaXQgYmVmb3JlOworICAgICAgICBMYXlvdXRVbml0IGFmdGVyOworICAgIH07
CisgICAgVmVydGljYWxNYXJnaW4gdmVydGljYWxNYXJnaW4oKSBjb25zdDsKKworICAgIHN0cnVj
dCBIb3Jpem9udGFsTWFyZ2luIHsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGFydDsKKyAgICAgICAg
TGF5b3V0VW5pdCBlbmQ7CisgICAgfTsKKyAgICBIb3Jpem9udGFsTWFyZ2luIGhvcml6b250YWxN
YXJnaW4oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG1hcmdpbkJlZm9yZSgpIGNvbnN0OworICAg
IExheW91dFVuaXQgbWFyZ2luU3RhcnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG1hcmdpbkFm
dGVyKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQoKSBjb25zdDsKKyAgICBib29s
IGhhc0NsZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2xlYXJhbmNlOyB9CisKKyAgICBM
YXlvdXRVbml0IGJvcmRlclRvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVyTGVmdCgp
IGNvbnN0OworICAgIExheW91dFVuaXQgYm9yZGVyQm90dG9tKCkgY29uc3Q7CisgICAgTGF5b3V0
VW5pdCBib3JkZXJSaWdodCgpIGNvbnN0OworICAgIExheW91dFVuaXQgdmVydGljYWxCb3JkZXIo
KSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpOyB9CisgICAgTGF5
b3V0VW5pdCBob3Jpem9udGFsQm9yZGVyKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpICsg
Ym9yZGVyUmlnaHQoKTsgfQorCisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ1RvcCgp
IGNvbnN0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHBhZGRpbmdMZWZ0KCkgY29uc3Q7Cisg
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ0JvdHRvbSgpIGNvbnN0OworICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IHBhZGRpbmdSaWdodCgpIGNvbnN0OworICAgIE9wdGlvbmFsPExheW91
dFVuaXQ+IHZlcnRpY2FsUGFkZGluZygpIGNvbnN0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+
IGhvcml6b250YWxQYWRkaW5nKCkgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0IGNvbnRlbnRCb3hU
b3AoKSBjb25zdCB7IHJldHVybiBwYWRkaW5nQm94VG9wKCkgKyBwYWRkaW5nVG9wKCkudmFsdWVP
cigwKTsgfQorICAgIExheW91dFVuaXQgY29udGVudEJveExlZnQoKSBjb25zdCB7IHJldHVybiBw
YWRkaW5nQm94TGVmdCgpICsgcGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOyB9CisgICAgTGF5b3V0
VW5pdCBjb250ZW50Qm94Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gY29udGVudEJveFRvcCgpICsg
Y29udGVudEJveEhlaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBjb250ZW50Qm94UmlnaHQoKSBj
b25zdCB7IHJldHVybiBjb250ZW50Qm94TGVmdCgpICsgY29udGVudEJveFdpZHRoKCk7IH0KKyAg
ICBMYXlvdXRVbml0IGNvbnRlbnRCb3hIZWlnaHQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNv
bnRlbnRCb3hXaWR0aCgpIGNvbnN0OworCisgICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94VG9wKCkg
Y29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCk7IH0KKyAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hM
ZWZ0KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpOyB9CisgICAgTGF5b3V0VW5pdCBwYWRk
aW5nQm94Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gcGFkZGluZ0JveFRvcCgpICsgcGFkZGluZ0Jv
eEhlaWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94UmlnaHQoKSBjb25zdCB7IHJl
dHVybiBwYWRkaW5nQm94TGVmdCgpICsgcGFkZGluZ0JveFdpZHRoKCk7IH0KKyAgICBMYXlvdXRV
bml0IHBhZGRpbmdCb3hIZWlnaHQoKSBjb25zdCB7IHJldHVybiBwYWRkaW5nVG9wKCkudmFsdWVP
cigwKSArIGNvbnRlbnRCb3hIZWlnaHQoKSArIHBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApOyB9
CisgICAgTGF5b3V0VW5pdCBwYWRkaW5nQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBwYWRkaW5n
TGVmdCgpLnZhbHVlT3IoMCkgKyBjb250ZW50Qm94V2lkdGgoKSArIHBhZGRpbmdSaWdodCgpLnZh
bHVlT3IoMCk7IH0KKworICAgIExheW91dFVuaXQgYm9yZGVyQm94SGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gYm9yZGVyVG9wKCkgKyBwYWRkaW5nQm94SGVpZ2h0KCkgKyBib3JkZXJCb3R0b20oKTsg
fQorICAgIExheW91dFVuaXQgYm9yZGVyQm94V2lkdGgoKSBjb25zdCB7IHJldHVybiBib3JkZXJM
ZWZ0KCkgKyBwYWRkaW5nQm94V2lkdGgoKSArIGJvcmRlclJpZ2h0KCk7IH0KKyAgICBMYXlvdXRV
bml0IG1hcmdpbkJveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkJlZm9yZSgpICsgYm9y
ZGVyQm94SGVpZ2h0KCkgKyBtYXJnaW5BZnRlcigpOyB9CisgICAgTGF5b3V0VW5pdCBtYXJnaW5C
b3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpblN0YXJ0KCkgKyBib3JkZXJCb3hXaWR0aCgp
ICsgbWFyZ2luRW5kKCk7IH0KKworICAgIExheW91dFVuaXQgdmVydGljYWxNYXJnaW5Cb3JkZXJB
bmRQYWRkaW5nKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQmVmb3JlKCkgKyB2ZXJ0aWNhbEJvcmRl
cigpICsgdmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKSArIG1hcmdpbkFmdGVyKCk7IH0KKyAg
ICBMYXlvdXRVbml0IGhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbWFyZ2luU3RhcnQoKSArIGhvcml6b250YWxCb3JkZXIoKSArIGhvcml6b250YWxQYWRk
aW5nKCkudmFsdWVPcigwKSArIG1hcmdpbkVuZCgpOyB9CisKKyAgICBSZWN0IG1hcmdpbkJveCgp
IGNvbnN0OworICAgIFJlY3QgYm9yZGVyQm94KCkgY29uc3Q7CisgICAgUmVjdCBwYWRkaW5nQm94
KCkgY29uc3Q7CisgICAgUmVjdCBjb250ZW50Qm94KCkgY29uc3Q7CisKKyNpZiBBU1NFUlRfRU5B
QkxFRAorICAgIHZvaWQgc2V0SGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoKSB7IG1faGFzUHJl
Y29tcHV0ZWRNYXJnaW5CZWZvcmUgPSB0cnVlOyB9CisjZW5kaWYKKworICAgIHZvaWQgc2V0VG9w
TGVmdChjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgc2V0VG9wKExheW91dFVuaXQpOwor
ICAgIHZvaWQgc2V0TGVmdChMYXlvdXRVbml0KTsKKyAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHko
TGF5b3V0VW5pdCBvZmZzZXQpIHsgbV90b3BMZWZ0Lm1vdmUob2Zmc2V0LCAwX2x1KTsgfQorICAg
IHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5b3V0VW5pdCBvZmZzZXQpIHsgbV90b3BMZWZ0Lm1vdmUo
MF9sdSwgb2Zmc2V0KTsgfQorICAgIHZvaWQgbW92ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7
IG1fdG9wTGVmdC5tb3ZlKHNpemUpOyB9CisgICAgdm9pZCBtb3ZlQnkoTGF5b3V0UG9pbnQgb2Zm
c2V0KSB7IG1fdG9wTGVmdC5tb3ZlQnkob2Zmc2V0KTsgfQorCisgICAgdm9pZCBzZXRDb250ZW50
Qm94SGVpZ2h0KExheW91dFVuaXQpOworICAgIHZvaWQgc2V0Q29udGVudEJveFdpZHRoKExheW91
dFVuaXQpOworCisgICAgdm9pZCBzZXRIb3Jpem9udGFsTWFyZ2luKEhvcml6b250YWxNYXJnaW4p
OworICAgIHZvaWQgc2V0VmVydGljYWxNYXJnaW4oVmVydGljYWxNYXJnaW4pOworICAgIHZvaWQg
c2V0SGFzQ2xlYXJhbmNlKCkgeyBtX2hhc0NsZWFyYW5jZSA9IHRydWU7IH0KKworICAgIHZvaWQg
c2V0Qm9yZGVyKExheW91dDo6RWRnZXMpOworCisgICAgdm9pZCBzZXRWZXJ0aWNhbFBhZGRpbmco
TGF5b3V0OjpWZXJ0aWNhbEVkZ2VzKTsKKyAgICB2b2lkIHNldFBhZGRpbmcoT3B0aW9uYWw8TGF5
b3V0OjpFZGdlcz4pOworCitwcml2YXRlOgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAgdm9pZCBp
bnZhbGlkYXRlTWFyZ2luKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlQm9yZGVyKCkgeyBtX2hhc1Zh
bGlkQm9yZGVyID0gZmFsc2U7IH0KKyAgICB2b2lkIGludmFsaWRhdGVQYWRkaW5nKCkgeyBtX2hh
c1ZhbGlkUGFkZGluZyA9IGZhbHNlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUHJlY29tcHV0ZWRN
YXJnaW5CZWZvcmUoKSB7IG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgPSBmYWxzZTsgfQor
CisgICAgdm9pZCBzZXRIYXNWYWxpZFRvcCgpIHsgbV9oYXNWYWxpZFRvcCA9IHRydWU7IH0KKyAg
ICB2b2lkIHNldEhhc1ZhbGlkTGVmdCgpIHsgbV9oYXNWYWxpZExlZnQgPSB0cnVlOyB9CisgICAg
dm9pZCBzZXRIYXNWYWxpZFZlcnRpY2FsTWFyZ2luKCkgeyBtX2hhc1ZhbGlkVmVydGljYWxNYXJn
aW4gPSB0cnVlOyB9CisgICAgdm9pZCBzZXRIYXNWYWxpZEhvcml6b250YWxNYXJnaW4oKSB7IG1f
aGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luID0gdHJ1ZTsgfQorCisgICAgdm9pZCBzZXRIYXNWYWxp
ZEJvcmRlcigpIHsgbV9oYXNWYWxpZEJvcmRlciA9IHRydWU7IH0KKyAgICB2b2lkIHNldEhhc1Zh
bGlkUGFkZGluZygpIHsgbV9oYXNWYWxpZFBhZGRpbmcgPSB0cnVlOyB9CisKKyAgICB2b2lkIHNl
dEhhc1ZhbGlkQ29udGVudEhlaWdodCgpIHsgbV9oYXNWYWxpZENvbnRlbnRIZWlnaHQgPSB0cnVl
OyB9CisgICAgdm9pZCBzZXRIYXNWYWxpZENvbnRlbnRXaWR0aCgpIHsgbV9oYXNWYWxpZENvbnRl
bnRXaWR0aCA9IHRydWU7IH0KKyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorCisgICAgTGF5b3V0
UG9pbnQgbV90b3BMZWZ0OworICAgIExheW91dFVuaXQgbV9jb250ZW50V2lkdGg7CisgICAgTGF5
b3V0VW5pdCBtX2NvbnRlbnRIZWlnaHQ7CisKKyAgICBIb3Jpem9udGFsTWFyZ2luIG1faG9yaXpv
bnRhbE1hcmdpbjsKKyAgICBWZXJ0aWNhbE1hcmdpbiBtX3ZlcnRpY2FsTWFyZ2luOworICAgIGJv
b2wgbV9oYXNDbGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAgTGF5b3V0OjpFZGdlcyBtX2JvcmRl
cjsKKyAgICBPcHRpb25hbDxMYXlvdXQ6OkVkZ2VzPiBtX3BhZGRpbmc7CisKKyNpZiBBU1NFUlRf
RU5BQkxFRAorICAgIGJvb2wgbV9oYXNWYWxpZFRvcCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hh
c1ZhbGlkTGVmdCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdp
biB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4geyBmYWxzZSB9
OworICAgIGJvb2wgbV9oYXNWYWxpZEJvcmRlciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1Zh
bGlkUGFkZGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkQ29udGVudEhlaWdodCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1ZhbGlkQ29udGVudFdpZHRoIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faGFzUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUgeyBmYWxzZSB9OworI2VuZGlmIC8v
IEFTU0VSVF9FTkFCTEVECit9OworCisjaWYgQVNTRVJUX0VOQUJMRUQKK2lubGluZSB2b2lkIEJv
eEdlb21ldHJ5OjppbnZhbGlkYXRlTWFyZ2luKCkKK3sKKyAgICBtX2hhc1ZhbGlkSG9yaXpvbnRh
bE1hcmdpbiA9IGZhbHNlOworICAgIG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbiA9IGZhbHNlOwor
fQorI2VuZGlmCisKK2lubGluZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5Ojp0b3AoKSBjb25zdAor
eworICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmIChtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVm
b3JlIHx8IG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbikpOworICAgIHJldHVybiBtX3RvcExlZnQu
eSgpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBCb3hHZW9tZXRyeTo6bGVmdCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2lu
KTsKKyAgICByZXR1cm4gbV90b3BMZWZ0LngoKTsKK30KKworaW5saW5lIExheW91dFBvaW50IEJv
eEdlb21ldHJ5Ojp0b3BMZWZ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCAm
JiAobV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSB8fCBtX2hhc1ZhbGlkVmVydGljYWxNYXJn
aW4pKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZEhvcml6b250YWxN
YXJnaW4pOworICAgIHJldHVybiBtX3RvcExlZnQ7Cit9CisKK2lubGluZSB2b2lkIEJveEdlb21l
dHJ5OjpzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0KQoreworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgc2V0SGFzVmFsaWRUb3AoKTsKKyAgICBzZXRIYXNWYWxpZExlZnQoKTsK
KyNlbmRpZgorICAgIG1fdG9wTGVmdCA9IHRvcExlZnQ7Cit9CisKK2lubGluZSB2b2lkIEJveEdl
b21ldHJ5OjpzZXRUb3AoTGF5b3V0VW5pdCB0b3ApCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICBzZXRIYXNWYWxpZFRvcCgpOworI2VuZGlmCisgICAgbV90b3BMZWZ0LnNldFkodG9wKTsKK30K
KworaW5saW5lIHZvaWQgQm94R2VvbWV0cnk6OnNldExlZnQoTGF5b3V0VW5pdCBsZWZ0KQorewor
I2lmIEFTU0VSVF9FTkFCTEVECisgICAgc2V0SGFzVmFsaWRMZWZ0KCk7CisjZW5kaWYKKyAgICBt
X3RvcExlZnQuc2V0WChsZWZ0KTsKK30KKworaW5saW5lIHZvaWQgQm94R2VvbWV0cnk6OnNldENv
bnRlbnRCb3hIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpCit7IAorI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgc2V0SGFzVmFsaWRDb250ZW50SGVpZ2h0KCk7CisjZW5kaWYKKyAgICBtX2NvbnRlbnRI
ZWlnaHQgPSBoZWlnaHQ7Cit9CisKK2lubGluZSB2b2lkIEJveEdlb21ldHJ5OjpzZXRDb250ZW50
Qm94V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkKK3sgCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBz
ZXRIYXNWYWxpZENvbnRlbnRXaWR0aCgpOworI2VuZGlmCisgICAgbV9jb250ZW50V2lkdGggPSB3
aWR0aDsKK30KKworaW5saW5lIExheW91dFVuaXQgQm94R2VvbWV0cnk6OmNvbnRlbnRCb3hIZWln
aHQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkQ29udGVudEhlaWdodCk7CisgICAg
cmV0dXJuIG1fY29udGVudEhlaWdodDsKK30KKworaW5saW5lIExheW91dFVuaXQgQm94R2VvbWV0
cnk6OmNvbnRlbnRCb3hXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRDb250
ZW50V2lkdGgpOworICAgIHJldHVybiBtX2NvbnRlbnRXaWR0aDsKK30KKworaW5saW5lIHZvaWQg
Qm94R2VvbWV0cnk6OnNldEhvcml6b250YWxNYXJnaW4oSG9yaXpvbnRhbE1hcmdpbiBtYXJnaW4p
Cit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBzZXRIYXNWYWxpZEhvcml6b250YWxNYXJnaW4o
KTsKKyNlbmRpZgorICAgIG1faG9yaXpvbnRhbE1hcmdpbiA9IG1hcmdpbjsKK30KKworaW5saW5l
IHZvaWQgQm94R2VvbWV0cnk6OnNldFZlcnRpY2FsTWFyZ2luKFZlcnRpY2FsTWFyZ2luIG1hcmdp
bikKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHNldEhhc1ZhbGlkVmVydGljYWxNYXJnaW4o
KTsKKyAgICBpbnZhbGlkYXRlUHJlY29tcHV0ZWRNYXJnaW5CZWZvcmUoKTsKKyNlbmRpZgorICAg
IG1fdmVydGljYWxNYXJnaW4gPSBtYXJnaW47Cit9CisKK2lubGluZSB2b2lkIEJveEdlb21ldHJ5
OjpzZXRCb3JkZXIoTGF5b3V0OjpFZGdlcyBib3JkZXIpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBzZXRIYXNWYWxpZEJvcmRlcigpOworI2VuZGlmCisgICAgbV9ib3JkZXIgPSBib3JkZXI7
Cit9CisKK2lubGluZSB2b2lkIEJveEdlb21ldHJ5OjpzZXRQYWRkaW5nKE9wdGlvbmFsPExheW91
dDo6RWRnZXM+IHBhZGRpbmcpCit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBzZXRIYXNWYWxp
ZFBhZGRpbmcoKTsKKyNlbmRpZgorICAgIG1fcGFkZGluZyA9IHBhZGRpbmc7Cit9CisKK2lubGlu
ZSB2b2lkIEJveEdlb21ldHJ5OjpzZXRWZXJ0aWNhbFBhZGRpbmcoTGF5b3V0OjpWZXJ0aWNhbEVk
Z2VzIHZlcnRpY2FsUGFkZGluZykKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHNldEhhc1Zh
bGlkUGFkZGluZygpOworI2VuZGlmCisgICAgbV9wYWRkaW5nID0gTGF5b3V0OjpFZGdlcyB7IG1f
cGFkZGluZyA/IG1fcGFkZGluZy0+aG9yaXpvbnRhbCA6IExheW91dDo6SG9yaXpvbnRhbEVkZ2Vz
KCksIHZlcnRpY2FsUGFkZGluZyB9OworfQorCitpbmxpbmUgQm94R2VvbWV0cnk6OlZlcnRpY2Fs
TWFyZ2luIEJveEdlb21ldHJ5Ojp2ZXJ0aWNhbE1hcmdpbigpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbik7CisgICAgcmV0dXJuIG1fdmVydGljYWxNYXJnaW47
Cit9CisKK2lubGluZSBCb3hHZW9tZXRyeTo6SG9yaXpvbnRhbE1hcmdpbiBCb3hHZW9tZXRyeTo6
aG9yaXpvbnRhbE1hcmdpbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRIb3Jpem9u
dGFsTWFyZ2luKTsKKyAgICByZXR1cm4gbV9ob3Jpem9udGFsTWFyZ2luOworfQorCitpbmxpbmUg
TGF5b3V0VW5pdCBCb3hHZW9tZXRyeTo6bWFyZ2luQmVmb3JlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKTsKKyAgICByZXR1cm4gbV92ZXJ0aWNhbE1hcmdp
bi5iZWZvcmU7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5OjptYXJnaW5TdGFy
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKTsKKyAg
ICByZXR1cm4gbV9ob3Jpem9udGFsTWFyZ2luLnN0YXJ0OworfQorCitpbmxpbmUgTGF5b3V0VW5p
dCBCb3hHZW9tZXRyeTo6bWFyZ2luQWZ0ZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1Zh
bGlkVmVydGljYWxNYXJnaW4pOworICAgIHJldHVybiBtX3ZlcnRpY2FsTWFyZ2luLmFmdGVyOwor
fQorCitpbmxpbmUgTGF5b3V0VW5pdCBCb3hHZW9tZXRyeTo6bWFyZ2luRW5kKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4pOworICAgIHJldHVybiBtX2hv
cml6b250YWxNYXJnaW4uZW5kOworfQorCitpbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gQm94
R2VvbWV0cnk6OnBhZGRpbmdUb3AoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFk
ZGluZyk7CisgICAgaWYgKCFtX3BhZGRpbmcpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0
dXJuIG1fcGFkZGluZy0+dmVydGljYWwudG9wOworfQorCitpbmxpbmUgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gQm94R2VvbWV0cnk6OnBhZGRpbmdMZWZ0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9o
YXNWYWxpZFBhZGRpbmcpOworICAgIGlmICghbV9wYWRkaW5nKQorICAgICAgICByZXR1cm4geyB9
OworICAgIHJldHVybiBtX3BhZGRpbmctPmhvcml6b250YWwubGVmdDsKK30KKworaW5saW5lIE9w
dGlvbmFsPExheW91dFVuaXQ+IEJveEdlb21ldHJ5OjpwYWRkaW5nQm90dG9tKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9oYXNWYWxpZFBhZGRpbmcpOworICAgIGlmICghbV9wYWRkaW5nKQorICAg
ICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBtX3BhZGRpbmctPnZlcnRpY2FsLmJvdHRvbTsK
K30KKworaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveEdlb21ldHJ5OjpwYWRkaW5nUmln
aHQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFkZGluZyk7CisgICAgaWYgKCFt
X3BhZGRpbmcpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fcGFkZGluZy0+aG9y
aXpvbnRhbC5yaWdodDsKK30KKworaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEJveEdlb21l
dHJ5Ojp2ZXJ0aWNhbFBhZGRpbmcoKSBjb25zdAoreworICAgIGF1dG8gcGFkZGluZ1RvcCA9IHRo
aXMtPnBhZGRpbmdUb3AoKTsKKyAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSB0aGlzLT5wYWRkaW5n
Qm90dG9tKCk7CisgICAgaWYgKCFwYWRkaW5nVG9wICYmICFwYWRkaW5nQm90dG9tKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBwYWRkaW5nVG9wLnZhbHVlT3IoMCkgKyBwYWRkaW5n
Qm90dG9tLnZhbHVlT3IoMCk7Cit9CisKK2lubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBCb3hH
ZW9tZXRyeTo6aG9yaXpvbnRhbFBhZGRpbmcoKSBjb25zdAoreworICAgIGF1dG8gcGFkZGluZ0xl
ZnQgPSB0aGlzLT5wYWRkaW5nTGVmdCgpOworICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gdGhpcy0+
cGFkZGluZ1JpZ2h0KCk7CisgICAgaWYgKCFwYWRkaW5nTGVmdCAmJiAhcGFkZGluZ1JpZ2h0KQor
ICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBwYWRkaW5nTGVmdC52YWx1ZU9yKDApICsg
cGFkZGluZ1JpZ2h0LnZhbHVlT3IoMCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IEJveEdlb21l
dHJ5Ojpib3JkZXJUb3AoKSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsK
KyAgICByZXR1cm4gbV9ib3JkZXIudmVydGljYWwudG9wOworfQorCitpbmxpbmUgTGF5b3V0VW5p
dCBCb3hHZW9tZXRyeTo6Ym9yZGVyTGVmdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faGFzVmFs
aWRCb3JkZXIpOworICAgIHJldHVybiBtX2JvcmRlci5ob3Jpem9udGFsLmxlZnQ7Cit9CisKK2lu
bGluZSBMYXlvdXRVbml0IEJveEdlb21ldHJ5Ojpib3JkZXJCb3R0b20oKSBjb25zdAoreworICAg
IEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsKKyAgICByZXR1cm4gbV9ib3JkZXIudmVydGljYWwu
Ym90dG9tOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBCb3hHZW9tZXRyeTo6Ym9yZGVyUmlnaHQo
KSBjb25zdAoreworICAgIEFTU0VSVChtX2hhc1ZhbGlkQm9yZGVyKTsKKyAgICByZXR1cm4gbV9i
b3JkZXIuaG9yaXpvbnRhbC5yaWdodDsKK30KKworfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNTkzY2E1MDNhMjNlOWRmMzgzMGQyYWZkNDk0OWNhZmM4
NzNmY2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0R2VvbWV0cnkuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQotCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLVdURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChHZW9tZXRyeSk7Ci0KLUdlb21ldHJ5OjpHZW9tZXRyeShjb25zdCBHZW9tZXRy
eSYgb3RoZXIpCi0gICAgOiBtX3RvcExlZnQob3RoZXIubV90b3BMZWZ0KQotICAgICwgbV9jb250
ZW50V2lkdGgob3RoZXIubV9jb250ZW50V2lkdGgpCi0gICAgLCBtX2NvbnRlbnRIZWlnaHQob3Ro
ZXIubV9jb250ZW50SGVpZ2h0KQotICAgICwgbV9ob3Jpem9udGFsTWFyZ2luKG90aGVyLm1faG9y
aXpvbnRhbE1hcmdpbikKLSAgICAsIG1fdmVydGljYWxNYXJnaW4ob3RoZXIubV92ZXJ0aWNhbE1h
cmdpbikKLSAgICAsIG1faGFzQ2xlYXJhbmNlKG90aGVyLm1faGFzQ2xlYXJhbmNlKQotICAgICwg
bV9ib3JkZXIob3RoZXIubV9ib3JkZXIpCi0gICAgLCBtX3BhZGRpbmcob3RoZXIubV9wYWRkaW5n
KQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLCBtX2hhc1ZhbGlkVG9wKG90aGVyLm1faGFzVmFs
aWRUb3ApCi0gICAgLCBtX2hhc1ZhbGlkTGVmdChvdGhlci5tX2hhc1ZhbGlkTGVmdCkKLSAgICAs
IG1faGFzVmFsaWRIb3Jpem9udGFsTWFyZ2luKG90aGVyLm1faGFzVmFsaWRIb3Jpem9udGFsTWFy
Z2luKQotICAgICwgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKG90aGVyLm1faGFzVmFsaWRWZXJ0
aWNhbE1hcmdpbikKLSAgICAsIG1faGFzVmFsaWRCb3JkZXIob3RoZXIubV9oYXNWYWxpZEJvcmRl
cikKLSAgICAsIG1faGFzVmFsaWRQYWRkaW5nKG90aGVyLm1faGFzVmFsaWRQYWRkaW5nKQotICAg
ICwgbV9oYXNWYWxpZENvbnRlbnRIZWlnaHQob3RoZXIubV9oYXNWYWxpZENvbnRlbnRIZWlnaHQp
Ci0gICAgLCBtX2hhc1ZhbGlkQ29udGVudFdpZHRoKG90aGVyLm1faGFzVmFsaWRDb250ZW50V2lk
dGgpCi0gICAgLCBtX2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlKG90aGVyLm1faGFzUHJlY29t
cHV0ZWRNYXJnaW5CZWZvcmUpCi0jZW5kaWYKLXsKLX0KLQotR2VvbWV0cnk6On5HZW9tZXRyeSgp
Ci17Ci19Ci0KLVJlY3QgR2VvbWV0cnk6Om1hcmdpbkJveCgpIGNvbnN0Ci17Ci0gICAgYXV0byBi
b3JkZXJCb3ggPSB0aGlzLT5ib3JkZXJCb3goKTsKLQotICAgIFJlY3QgbWFyZ2luQm94OwotICAg
IG1hcmdpbkJveC5zZXRUb3AoYm9yZGVyQm94LnRvcCgpIC0gbWFyZ2luQmVmb3JlKCkpOwotICAg
IG1hcmdpbkJveC5zZXRMZWZ0KGJvcmRlckJveC5sZWZ0KCkgLSBtYXJnaW5TdGFydCgpKTsKLSAg
ICBtYXJnaW5Cb3guc2V0SGVpZ2h0KGJvcmRlckJveC5oZWlnaHQoKSArIG1hcmdpbkJlZm9yZSgp
ICsgbWFyZ2luQWZ0ZXIoKSk7Ci0gICAgbWFyZ2luQm94LnNldFdpZHRoKGJvcmRlckJveC53aWR0
aCgpICsgbWFyZ2luU3RhcnQoKSArIG1hcmdpbkVuZCgpKTsKLSAgICByZXR1cm4gbWFyZ2luQm94
OwotfQotCi1SZWN0IEdlb21ldHJ5Ojpib3JkZXJCb3goKSBjb25zdAotewotICAgIFJlY3QgYm9y
ZGVyQm94OwotICAgIGJvcmRlckJveC5zZXRUb3BMZWZ0KHsgfSk7Ci0gICAgYm9yZGVyQm94LnNl
dFNpemUoeyB3aWR0aCgpLCBoZWlnaHQoKSB9KTsKLSAgICByZXR1cm4gYm9yZGVyQm94OwotfQot
Ci1SZWN0IEdlb21ldHJ5OjpwYWRkaW5nQm94KCkgY29uc3QKLXsKLSAgICBhdXRvIGJvcmRlckJv
eCA9IHRoaXMtPmJvcmRlckJveCgpOwotCi0gICAgUmVjdCBwYWRkaW5nQm94OwotICAgIHBhZGRp
bmdCb3guc2V0VG9wKGJvcmRlckJveC50b3AoKSArIGJvcmRlclRvcCgpKTsKLSAgICBwYWRkaW5n
Qm94LnNldExlZnQoYm9yZGVyQm94LmxlZnQoKSArIGJvcmRlckxlZnQoKSk7Ci0gICAgcGFkZGlu
Z0JveC5zZXRIZWlnaHQoYm9yZGVyQm94LmJvdHRvbSgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJC
b3R0b20oKSk7Ci0gICAgcGFkZGluZ0JveC5zZXRXaWR0aChib3JkZXJCb3gud2lkdGgoKSAtIGJv
cmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCkpOwotICAgIHJldHVybiBwYWRkaW5nQm94OwotfQot
Ci1SZWN0IEdlb21ldHJ5Ojpjb250ZW50Qm94KCkgY29uc3QKLXsKLSAgICBSZWN0IGNvbnRlbnRC
b3g7Ci0gICAgY29udGVudEJveC5zZXRUb3AoY29udGVudEJveFRvcCgpKTsKLSAgICBjb250ZW50
Qm94LnNldExlZnQoY29udGVudEJveExlZnQoKSk7Ci0gICAgY29udGVudEJveC5zZXRXaWR0aChj
b250ZW50Qm94V2lkdGgoKSk7Ci0gICAgY29udGVudEJveC5zZXRIZWlnaHQoY29udGVudEJveEhl
aWdodCgpKTsKLSAgICByZXR1cm4gY29udGVudEJveDsKLX0KLQotfQotfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEdlb21ldHJ5
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRHZW9tZXRyeS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmQ2NGRhMjM1OWJkYTNhODA3ODA0YTE5OTRl
Yjc5YzM2ODIxMDdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dEdlb21ldHJ5LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2ODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJEaXNw
bGF5UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFVuaXRzLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01h
bGxvYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotY2xh
c3MgUmVjdCB7Ci1wdWJsaWM6Ci0gICAgUmVjdCgpID0gZGVmYXVsdDsKLSAgICBSZWN0KExheW91
dFVuaXQgdG9wLCBMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQg
aGVpZ2h0KTsKLSAgICBSZWN0KExheW91dFBvaW50IHRvcExlZnQsIExheW91dFVuaXQgd2lkdGgs
IExheW91dFVuaXQgaGVpZ2h0KTsKLSAgICBSZWN0KGNvbnN0IExheW91dFBvaW50JiB0b3BMZWZ0
LCBjb25zdCBMYXlvdXRTaXplJik7Ci0gICAgCi0gICAgTGF5b3V0VW5pdCB0b3AoKSBjb25zdDsK
LSAgICBMYXlvdXRVbml0IGxlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRQb2ludCB0b3BMZWZ0KCkg
Y29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQg
cmlnaHQoKSBjb25zdDsKLSAgICBMYXlvdXRQb2ludCBib3R0b21SaWdodCgpIGNvbnN0OwotCi0g
ICAgTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29u
c3Q7Ci0gICAgTGF5b3V0U2l6ZSBzaXplKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFRvcChMYXlv
dXRVbml0KTsKLSAgICB2b2lkIHNldExlZnQoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRUb3BM
ZWZ0KGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBzZXRXaWR0aChMYXlvdXRVbml0KTsK
LSAgICB2b2lkIHNldEhlaWdodChMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldFNpemUoY29uc3Qg
TGF5b3V0U2l6ZSYpOwotCi0gICAgdm9pZCBzaGlmdExlZnRUbyhMYXlvdXRVbml0KTsKLSAgICB2
b2lkIHNoaWZ0UmlnaHRUbyhMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNoaWZ0VG9wVG8oTGF5b3V0
VW5pdCk7Ci0gICAgdm9pZCBzaGlmdEJvdHRvbVRvKExheW91dFVuaXQpOwotCi0gICAgdm9pZCBt
b3ZlSG9yaXpvbnRhbGx5KExheW91dFVuaXQpOwotICAgIHZvaWQgbW92ZVZlcnRpY2FsbHkoTGF5
b3V0VW5pdCk7Ci0KLSAgICB2b2lkIGV4cGFuZChPcHRpb25hbDxMYXlvdXRVbml0PiwgT3B0aW9u
YWw8TGF5b3V0VW5pdD4pOwotICAgIHZvaWQgZXhwYW5kSG9yaXpvbnRhbGx5KExheW91dFVuaXQg
ZGVsdGEpIHsgZXhwYW5kKGRlbHRhLCB7IH0pOyB9Ci0gICAgdm9pZCBleHBhbmRWZXJ0aWNhbGx5
KExheW91dFVuaXQgZGVsdGEpIHsgZXhwYW5kKHsgfSwgZGVsdGEpOyB9Ci0gICAgYm9vbCBpbnRl
cnNlY3RzKGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5pbnRlcnNlY3Rz
KHJlY3QpOyB9Ci0KLSAgICBSZWN0IGNsb25lKCkgY29uc3Q7Ci0gICAgb3BlcmF0b3IgTGF5b3V0
UmVjdCgpIGNvbnN0OwotCi1wcml2YXRlOgotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgdm9pZCBp
bnZhbGlkYXRlVG9wKCkgeyBtX2hhc1ZhbGlkVG9wID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFs
aWRhdGVMZWZ0KCkgeyBtX2hhc1ZhbGlkTGVmdCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBpbnZhbGlk
YXRlV2lkdGgoKSB7IG1faGFzVmFsaWRXaWR0aCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBpbnZhbGlk
YXRlSGVpZ2h0KCkgeyBtX2hhc1ZhbGlkSGVpZ2h0ID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFs
aWRhdGVQb3NpdGlvbigpOwotCi0gICAgYm9vbCBoYXNWYWxpZFBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNWYWxpZFRvcCAmJiBtX2hhc1ZhbGlkTGVmdDsgfQotICAgIGJvb2wgaGFzVmFs
aWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWYWxpZFdpZHRoICYmIG1faGFzVmFsaWRIZWln
aHQ7IH0KLSAgICBib29sIGhhc1ZhbGlkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBoYXNWYWxp
ZFBvc2l0aW9uKCkgJiYgaGFzVmFsaWRTaXplKCk7IH0KLQotICAgIHZvaWQgc2V0SGFzVmFsaWRQ
b3NpdGlvbigpOwotICAgIHZvaWQgc2V0SGFzVmFsaWRTaXplKCk7Ci0KLSAgICBib29sIG1faGFz
VmFsaWRUb3AgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNWYWxpZExlZnQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNWYWxpZFdpZHRoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRI
ZWlnaHQgeyBmYWxzZSB9OwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgTGF5b3V0UmVj
dCBtX3JlY3Q7Ci19OwotCi1pbmxpbmUgUmVjdDo6UmVjdChMYXlvdXRVbml0IHRvcCwgTGF5b3V0
VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKLSAgICA6IG1f
cmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBtX2hhc1ZhbGlkVG9wID0gdHJ1ZTsKLSAgICBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7Ci0gICAg
bV9oYXNWYWxpZFdpZHRoID0gdHJ1ZTsKLSAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsKLSNl
bmRpZgotfQotCi1pbmxpbmUgUmVjdDo6UmVjdChMYXlvdXRQb2ludCB0b3BMZWZ0LCBMYXlvdXRV
bml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKLSAgICA6IFJlY3QodG9wTGVmdC55KCksIHRv
cExlZnQueCgpLCB3aWR0aCwgaGVpZ2h0KQotewotfQotCi1pbmxpbmUgUmVjdDo6UmVjdChjb25z
dCBMYXlvdXRQb2ludCYgdG9wTGVmdCwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKLSAgICA6IFJl
Y3QodG9wTGVmdC55KCksIHRvcExlZnQueCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
Ci17Ci19Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotaW5saW5lIHZvaWQgUmVjdDo6aW52YWxpZGF0
ZVBvc2l0aW9uKCkKLXsKLSAgICBpbnZhbGlkYXRlVG9wKCk7Ci0gICAgaW52YWxpZGF0ZUxlZnQo
KTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2V0SGFzVmFsaWRQb3NpdGlvbigpCi17Ci0gICAg
bV9oYXNWYWxpZFRvcCA9IHRydWU7Ci0gICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOwotfQotCi1p
bmxpbmUgdm9pZCBSZWN0OjpzZXRIYXNWYWxpZFNpemUoKQotewotICAgIG1faGFzVmFsaWRXaWR0
aCA9IHRydWU7Ci0gICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7Ci19Ci0jZW5kaWYKLQotaW5s
aW5lIExheW91dFVuaXQgUmVjdDo6dG9wKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxp
ZFRvcCk7Ci0gICAgcmV0dXJuIG1fcmVjdC55KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFJl
Y3Q6OmxlZnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7Ci0gICAgcmV0
dXJuIG1fcmVjdC54KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFJlY3Q6OmJvdHRvbSgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgbV9oYXNWYWxpZEhlaWdodCk7Ci0g
ICAgcmV0dXJuIG1fcmVjdC5tYXhZKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFJlY3Q6OnJp
Z2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZFdp
ZHRoKTsKLSAgICByZXR1cm4gbV9yZWN0Lm1heFgoKTsKLX0KLQotaW5saW5lIExheW91dFBvaW50
IFJlY3Q6OnRvcExlZnQoKSBjb25zdAotewotICAgIEFTU0VSVChoYXNWYWxpZFBvc2l0aW9uKCkp
OwotICAgIHJldHVybiBtX3JlY3QubWluWE1pbllDb3JuZXIoKTsKLX0KLQotaW5saW5lIExheW91
dFBvaW50IFJlY3Q6OmJvdHRvbVJpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFzVmFsaWRH
ZW9tZXRyeSgpKTsKLSAgICByZXR1cm4gbV9yZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci19Ci0KLWlu
bGluZSBMYXlvdXRTaXplIFJlY3Q6OnNpemUoKSBjb25zdAotewotICAgIEFTU0VSVChoYXNWYWxp
ZFNpemUoKSk7Ci0gICAgcmV0dXJuIG1fcmVjdC5zaXplKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRV
bml0IFJlY3Q6OndpZHRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZFdpZHRoKTsK
LSAgICByZXR1cm4gbV9yZWN0LndpZHRoKCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IFJlY3Q6
OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRIZWlnaHQpOwotICAgIHJl
dHVybiBtX3JlY3QuaGVpZ2h0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlY3Q6OnNldFRvcExlZnQo
Y29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBz
ZXRIYXNWYWxpZFBvc2l0aW9uKCk7Ci0jZW5kaWYKLSAgICBtX3JlY3Quc2V0TG9jYXRpb24odG9w
TGVmdCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlY3Q6OnNldFRvcChMYXlvdXRVbml0IHRvcCkKLXsK
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOwotI2VuZGlmCi0g
ICAgbV9yZWN0LnNldFkodG9wKTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2V0TGVmdChMYXlv
dXRVbml0IGxlZnQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1ZhbGlkTGVmdCA9
IHRydWU7Ci0jZW5kaWYKLSAgICBtX3JlY3Quc2V0WChsZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQg
UmVjdDo6c2V0V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAot
ICAgIG1faGFzVmFsaWRXaWR0aCA9IHRydWU7Ci0jZW5kaWYKLSAgICBtX3JlY3Quc2V0V2lkdGgo
d2lkdGgpOwotfQotCi1pbmxpbmUgdm9pZCBSZWN0OjpzZXRIZWlnaHQoTGF5b3V0VW5pdCBoZWln
aHQpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1ZhbGlkSGVpZ2h0ID0gdHJ1ZTsK
LSNlbmRpZgotICAgIG1fcmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKLX0KLQotaW5saW5lIHZvaWQg
UmVjdDo6c2V0U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzaXplKQotewotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgc2V0SGFzVmFsaWRTaXplKCk7Ci0jZW5kaWYKLSAgICBtX3JlY3Quc2V0U2l6ZShz
aXplKTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2hpZnRMZWZ0VG8oTGF5b3V0VW5pdCBsZWZ0
KQotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCk7Ci0gICAgbV9yZWN0LnNoaWZ0WEVkZ2VU
byhsZWZ0KTsKLX0KLQotaW5saW5lIHZvaWQgUmVjdDo6c2hpZnRSaWdodFRvKExheW91dFVuaXQg
cmlnaHQpCi17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0ICYmIG1faGFzVmFsaWRXaWR0aCk7
Ci0gICAgbV9yZWN0LnNoaWZ0TWF4WEVkZ2VUbyhyaWdodCk7Ci19Ci0KLWlubGluZSB2b2lkIFJl
Y3Q6OnNoaWZ0VG9wVG8oTGF5b3V0VW5pdCB0b3ApCi17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRU
b3ApOwotICAgIG1fcmVjdC5zaGlmdFlFZGdlVG8odG9wKTsKLX0KLQotaW5saW5lIHZvaWQgUmVj
dDo6c2hpZnRCb3R0b21UbyhMYXlvdXRVbml0IGJvdHRvbSkKLXsKLSAgICBBU1NFUlQobV9oYXNW
YWxpZFRvcCAmJiBtX2hhc1ZhbGlkSGVpZ2h0KTsKLSAgICBtX3JlY3Quc2hpZnRNYXhZRWRnZVRv
KGJvdHRvbSk7Ci19Ci0KLWlubGluZSB2b2lkIFJlY3Q6Om1vdmVIb3Jpem9udGFsbHkoTGF5b3V0
VW5pdCBvZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0KTsKLSAgICBtX3JlY3Qu
bW92ZShMYXlvdXRTaXplIHsgb2Zmc2V0LCAwIH0pOwotfQotCi1pbmxpbmUgdm9pZCBSZWN0Ojpt
b3ZlVmVydGljYWxseShMYXlvdXRVbml0IG9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxp
ZFRvcCk7Ci0gICAgbV9yZWN0Lm1vdmUoTGF5b3V0U2l6ZSB7IDAsIG9mZnNldCB9KTsKLX0KLQot
aW5saW5lIHZvaWQgUmVjdDo6ZXhwYW5kKE9wdGlvbmFsPExheW91dFVuaXQ+IHdpZHRoLCBPcHRp
b25hbDxMYXlvdXRVbml0PiBoZWlnaHQpCi17Ci0gICAgQVNTRVJUKCF3aWR0aCB8fCBtX2hhc1Zh
bGlkV2lkdGgpOwotICAgIEFTU0VSVCghaGVpZ2h0IHx8IG1faGFzVmFsaWRIZWlnaHQpOwotICAg
IG1fcmVjdC5leHBhbmQod2lkdGgudmFsdWVPcigwKSwgaGVpZ2h0LnZhbHVlT3IoMCkpOwotfQot
Ci1pbmxpbmUgUmVjdCBSZWN0OjpjbG9uZSgpIGNvbnN0Ci17Ci0gICAgUmVjdCByZWN0OwotI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgcmVjdC5tX2hhc1ZhbGlkVG9wID0gbV9oYXNWYWxpZFRvcDsK
LSAgICByZWN0Lm1faGFzVmFsaWRMZWZ0ID0gbV9oYXNWYWxpZExlZnQ7Ci0gICAgcmVjdC5tX2hh
c1ZhbGlkV2lkdGggPSBtX2hhc1ZhbGlkV2lkdGg7Ci0gICAgcmVjdC5tX2hhc1ZhbGlkSGVpZ2h0
ICA9IG1faGFzVmFsaWRIZWlnaHQ7Ci0jZW5kaWYKLSAgICByZWN0Lm1fcmVjdCA9IG1fcmVjdDsK
LSAgICByZXR1cm4gcmVjdDsKLX0KLQotaW5saW5lIFJlY3Q6Om9wZXJhdG9yIExheW91dFJlY3Qo
KSBjb25zdAotewotICAgIEFTU0VSVChoYXNWYWxpZEdlb21ldHJ5KCkpOwotICAgIHJldHVybiBt
X3JlY3Q7Ci19Ci0KLQotY2xhc3MgR2VvbWV0cnkgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoR2VvbWV0cnkpOwotcHVibGljOgotICAgIEdlb21ldHJ5KGNvbnN0IEdlb21ldHJ5Jik7Ci0g
ICAgR2VvbWV0cnkoKSA9IGRlZmF1bHQ7Ci0gICAgfkdlb21ldHJ5KCk7Ci0KLSAgICBMYXlvdXRV
bml0IHRvcCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgbGVmdCgpIGNvbnN0OwotICAgIExheW91
dFVuaXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gdG9wKCkgKyBoZWlnaHQoKTsgfQotICAgIExh
eW91dFVuaXQgcmlnaHQoKSBjb25zdCB7IHJldHVybiBsZWZ0KCkgKyB3aWR0aCgpOyB9Ci0KLSAg
ICBMYXlvdXRQb2ludCB0b3BMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0UG9pbnQgYm90dG9tUmln
aHQoKSBjb25zdCB7IHJldHVybiB7IHJpZ2h0KCksIGJvdHRvbSgpIH07IH0KLQotICAgIExheW91
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHsgd2lkdGgoKSwgaGVpZ2h0KCkgfTsgfQotICAg
IExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5n
Qm94V2lkdGgoKSArIGJvcmRlclJpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpICsgcGFkZGluZ0JveEhlaWdodCgpICsgYm9yZGVyQm90
dG9tKCk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXplKCkuaXNFbXB0
eSgpOyB9Ci0gICAgUmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4geyB0b3AoKSwgbGVmdCgpLCB3
aWR0aCgpLCBoZWlnaHQoKSB9OyB9Ci0gICAgUmVjdCByZWN0V2l0aE1hcmdpbigpIGNvbnN0IHsg
cmV0dXJuIHsgdG9wKCkgLSBtYXJnaW5CZWZvcmUoKSwgbGVmdCgpIC0gbWFyZ2luU3RhcnQoKSwg
bWFyZ2luU3RhcnQoKSArIHdpZHRoKCkgKyBtYXJnaW5FbmQoKSwgbWFyZ2luQmVmb3JlKCkgKyBo
ZWlnaHQoKSArIG1hcmdpbkFmdGVyKCkgfTsgfQotCi0gICAgc3RydWN0IFZlcnRpY2FsTWFyZ2lu
IHsKLSAgICAgICAgTGF5b3V0VW5pdCBiZWZvcmU7Ci0gICAgICAgIExheW91dFVuaXQgYWZ0ZXI7
Ci0gICAgfTsKLSAgICBWZXJ0aWNhbE1hcmdpbiB2ZXJ0aWNhbE1hcmdpbigpIGNvbnN0OwotCi0g
ICAgc3RydWN0IEhvcml6b250YWxNYXJnaW4gewotICAgICAgICBMYXlvdXRVbml0IHN0YXJ0Owot
ICAgICAgICBMYXlvdXRVbml0IGVuZDsKLSAgICB9OwotICAgIEhvcml6b250YWxNYXJnaW4gaG9y
aXpvbnRhbE1hcmdpbigpIGNvbnN0OwotICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKCkgY29u
c3Q7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydCgpIGNvbnN0OwotICAgIExheW91dFVuaXQg
bWFyZ2luQWZ0ZXIoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCgpIGNvbnN0Owot
ICAgIGJvb2wgaGFzQ2xlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDbGVhcmFuY2U7IH0K
LQotICAgIExheW91dFVuaXQgYm9yZGVyVG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3Jk
ZXJMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJCb3R0b20oKSBjb25zdDsKLSAg
ICBMYXlvdXRVbml0IGJvcmRlclJpZ2h0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNh
bEJvcmRlcigpIGNvbnN0IHsgcmV0dXJuIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCk7IH0K
LSAgICBMYXlvdXRVbml0IGhvcml6b250YWxCb3JkZXIoKSBjb25zdCB7IHJldHVybiBib3JkZXJM
ZWZ0KCkgKyBib3JkZXJSaWdodCgpOyB9Ci0KLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRk
aW5nVG9wKCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ0xlZnQoKSBj
b25zdDsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBwYWRkaW5nQm90dG9tKCkgY29uc3Q7Ci0g
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gcGFkZGluZ1JpZ2h0KCkgY29uc3Q7Ci0gICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gdmVydGljYWxQYWRkaW5nKCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gaG9yaXpvbnRhbFBhZGRpbmcoKSBjb25zdDsKLQotICAgIExheW91dFVuaXQgY29u
dGVudEJveFRvcCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdCb3hUb3AoKSArIHBhZGRpbmdUb3Ao
KS52YWx1ZU9yKDApOyB9Ci0gICAgTGF5b3V0VW5pdCBjb250ZW50Qm94TGVmdCgpIGNvbnN0IHsg
cmV0dXJuIHBhZGRpbmdCb3hMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7IH0KLSAg
ICBMYXlvdXRVbml0IGNvbnRlbnRCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBjb250ZW50Qm94
VG9wKCkgKyBjb250ZW50Qm94SGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGNvbnRlbnRCb3hS
aWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRCb3hMZWZ0KCkgKyBjb250ZW50Qm94V2lkdGgo
KTsgfQotICAgIExheW91dFVuaXQgY29udGVudEJveEhlaWdodCgpIGNvbnN0OwotICAgIExheW91
dFVuaXQgY29udGVudEJveFdpZHRoKCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IHBhZGRpbmdC
b3hUb3AoKSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKTsgfQotICAgIExheW91dFVuaXQgcGFk
ZGluZ0JveExlZnQoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCk7IH0KLSAgICBMYXlvdXRV
bml0IHBhZGRpbmdCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBwYWRkaW5nQm94VG9wKCkgKyBw
YWRkaW5nQm94SGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHBhZGRpbmdCb3hMZWZ0KCkgKyBwYWRkaW5nQm94V2lkdGgoKTsgfQotICAg
IExheW91dFVuaXQgcGFkZGluZ0JveEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmdUb3Ao
KS52YWx1ZU9yKDApICsgY29udGVudEJveEhlaWdodCgpICsgcGFkZGluZ0JvdHRvbSgpLnZhbHVl
T3IoMCk7IH0KLSAgICBMYXlvdXRVbml0IHBhZGRpbmdCb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IHBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKSArIGNvbnRlbnRCb3hXaWR0aCgpICsgcGFkZGluZ1Jp
Z2h0KCkudmFsdWVPcigwKTsgfQotCi0gICAgTGF5b3V0VW5pdCBib3JkZXJCb3hIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBib3JkZXJUb3AoKSArIHBhZGRpbmdCb3hIZWlnaHQoKSArIGJvcmRlckJv
dHRvbSgpOyB9Ci0gICAgTGF5b3V0VW5pdCBib3JkZXJCb3hXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IGJvcmRlckxlZnQoKSArIHBhZGRpbmdCb3hXaWR0aCgpICsgYm9yZGVyUmlnaHQoKTsgfQotICAg
IExheW91dFVuaXQgbWFyZ2luQm94SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQmVmb3Jl
KCkgKyBib3JkZXJCb3hIZWlnaHQoKSArIG1hcmdpbkFmdGVyKCk7IH0KLSAgICBMYXlvdXRVbml0
IG1hcmdpbkJveFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luU3RhcnQoKSArIGJvcmRlckJv
eFdpZHRoKCkgKyBtYXJnaW5FbmQoKTsgfQotCi0gICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE1hcmdp
bkJvcmRlckFuZFBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtYXJnaW5CZWZvcmUoKSArIHZlcnRp
Y2FsQm9yZGVyKCkgKyB2ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDApICsgbWFyZ2luQWZ0ZXIo
KTsgfQotICAgIExheW91dFVuaXQgaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSBj
b25zdCB7IHJldHVybiBtYXJnaW5TdGFydCgpICsgaG9yaXpvbnRhbEJvcmRlcigpICsgaG9yaXpv
bnRhbFBhZGRpbmcoKS52YWx1ZU9yKDApICsgbWFyZ2luRW5kKCk7IH0KLQotICAgIFJlY3QgbWFy
Z2luQm94KCkgY29uc3Q7Ci0gICAgUmVjdCBib3JkZXJCb3goKSBjb25zdDsKLSAgICBSZWN0IHBh
ZGRpbmdCb3goKSBjb25zdDsKLSAgICBSZWN0IGNvbnRlbnRCb3goKSBjb25zdDsKLQotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgdm9pZCBzZXRIYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSgpIHsg
bV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSA9IHRydWU7IH0KLSNlbmRpZgotCi0gICAgdm9p
ZCBzZXRUb3BMZWZ0KGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBzZXRUb3AoTGF5b3V0
VW5pdCk7Ci0gICAgdm9pZCBzZXRMZWZ0KExheW91dFVuaXQpOwotICAgIHZvaWQgbW92ZUhvcml6
b250YWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX3RvcExlZnQubW92ZShvZmZzZXQsIDBfbHUp
OyB9Ci0gICAgdm9pZCBtb3ZlVmVydGljYWxseShMYXlvdXRVbml0IG9mZnNldCkgeyBtX3RvcExl
ZnQubW92ZSgwX2x1LCBvZmZzZXQpOyB9Ci0gICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNpemUm
IHNpemUpIHsgbV90b3BMZWZ0Lm1vdmUoc2l6ZSk7IH0KLSAgICB2b2lkIG1vdmVCeShMYXlvdXRQ
b2ludCBvZmZzZXQpIHsgbV90b3BMZWZ0Lm1vdmVCeShvZmZzZXQpOyB9Ci0KLSAgICB2b2lkIHNl
dENvbnRlbnRCb3hIZWlnaHQoTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRDb250ZW50Qm94V2lk
dGgoTGF5b3V0VW5pdCk7Ci0KLSAgICB2b2lkIHNldEhvcml6b250YWxNYXJnaW4oSG9yaXpvbnRh
bE1hcmdpbik7Ci0gICAgdm9pZCBzZXRWZXJ0aWNhbE1hcmdpbihWZXJ0aWNhbE1hcmdpbik7Ci0g
ICAgdm9pZCBzZXRIYXNDbGVhcmFuY2UoKSB7IG1faGFzQ2xlYXJhbmNlID0gdHJ1ZTsgfQotCi0g
ICAgdm9pZCBzZXRCb3JkZXIoTGF5b3V0OjpFZGdlcyk7Ci0KLSAgICB2b2lkIHNldFZlcnRpY2Fs
UGFkZGluZyhMYXlvdXQ6OlZlcnRpY2FsRWRnZXMpOwotICAgIHZvaWQgc2V0UGFkZGluZyhPcHRp
b25hbDxMYXlvdXQ6OkVkZ2VzPik7Ci0KLXByaXZhdGU6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICB2b2lkIGludmFsaWRhdGVNYXJnaW4oKTsKLSAgICB2b2lkIGludmFsaWRhdGVCb3JkZXIoKSB7
IG1faGFzVmFsaWRCb3JkZXIgPSBmYWxzZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVBhZGRpbmco
KSB7IG1faGFzVmFsaWRQYWRkaW5nID0gZmFsc2U7IH0KLSAgICB2b2lkIGludmFsaWRhdGVQcmVj
b21wdXRlZE1hcmdpbkJlZm9yZSgpIHsgbV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSA9IGZh
bHNlOyB9Ci0KLSAgICB2b2lkIHNldEhhc1ZhbGlkVG9wKCkgeyBtX2hhc1ZhbGlkVG9wID0gdHJ1
ZTsgfQotICAgIHZvaWQgc2V0SGFzVmFsaWRMZWZ0KCkgeyBtX2hhc1ZhbGlkTGVmdCA9IHRydWU7
IH0KLSAgICB2b2lkIHNldEhhc1ZhbGlkVmVydGljYWxNYXJnaW4oKSB7IG1faGFzVmFsaWRWZXJ0
aWNhbE1hcmdpbiA9IHRydWU7IH0KLSAgICB2b2lkIHNldEhhc1ZhbGlkSG9yaXpvbnRhbE1hcmdp
bigpIHsgbV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4gPSB0cnVlOyB9Ci0KLSAgICB2b2lkIHNl
dEhhc1ZhbGlkQm9yZGVyKCkgeyBtX2hhc1ZhbGlkQm9yZGVyID0gdHJ1ZTsgfQotICAgIHZvaWQg
c2V0SGFzVmFsaWRQYWRkaW5nKCkgeyBtX2hhc1ZhbGlkUGFkZGluZyA9IHRydWU7IH0KLQotICAg
IHZvaWQgc2V0SGFzVmFsaWRDb250ZW50SGVpZ2h0KCkgeyBtX2hhc1ZhbGlkQ29udGVudEhlaWdo
dCA9IHRydWU7IH0KLSAgICB2b2lkIHNldEhhc1ZhbGlkQ29udGVudFdpZHRoKCkgeyBtX2hhc1Zh
bGlkQ29udGVudFdpZHRoID0gdHJ1ZTsgfQotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi0KLSAg
ICBMYXlvdXRQb2ludCBtX3RvcExlZnQ7Ci0gICAgTGF5b3V0VW5pdCBtX2NvbnRlbnRXaWR0aDsK
LSAgICBMYXlvdXRVbml0IG1fY29udGVudEhlaWdodDsKLQotICAgIEhvcml6b250YWxNYXJnaW4g
bV9ob3Jpem9udGFsTWFyZ2luOwotICAgIFZlcnRpY2FsTWFyZ2luIG1fdmVydGljYWxNYXJnaW47
Ci0gICAgYm9vbCBtX2hhc0NsZWFyYW5jZSB7IGZhbHNlIH07Ci0KLSAgICBMYXlvdXQ6OkVkZ2Vz
IG1fYm9yZGVyOwotICAgIE9wdGlvbmFsPExheW91dDo6RWRnZXM+IG1fcGFkZGluZzsKLQotI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBtX2hhc1ZhbGlkVG9wIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1faGFzVmFsaWRMZWZ0IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRIb3Jpem9u
dGFsTWFyZ2luIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbiB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ZhbGlkQm9yZGVyIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faGFzVmFsaWRQYWRkaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRDb250ZW50
SGVpZ2h0IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVmFsaWRDb250ZW50V2lkdGggeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9oYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZSB7IGZhbHNlIH07Ci0j
ZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLX07Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotaW5saW5l
IHZvaWQgR2VvbWV0cnk6OmludmFsaWRhdGVNYXJnaW4oKQotewotICAgIG1faGFzVmFsaWRIb3Jp
em9udGFsTWFyZ2luID0gZmFsc2U7Ci0gICAgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luID0gZmFs
c2U7Ci19Ci0jZW5kaWYKLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6OnRvcCgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRUb3AgJiYgKG1faGFzUHJlY29tcHV0ZWRNYXJnaW5C
ZWZvcmUgfHwgbV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKSk7Ci0gICAgcmV0dXJuIG1fdG9wTGVm
dC55KCk7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEdlb21ldHJ5OjpsZWZ0KCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQgJiYgbV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4p
OwotICAgIHJldHVybiBtX3RvcExlZnQueCgpOwotfQotCi1pbmxpbmUgTGF5b3V0UG9pbnQgR2Vv
bWV0cnk6OnRvcExlZnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkVG9wICYmICht
X2hhc1ByZWNvbXB1dGVkTWFyZ2luQmVmb3JlIHx8IG1faGFzVmFsaWRWZXJ0aWNhbE1hcmdpbikp
OwotICAgIEFTU0VSVChtX2hhc1ZhbGlkTGVmdCAmJiBtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdp
bik7Ci0gICAgcmV0dXJuIG1fdG9wTGVmdDsKLX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNl
dFRvcExlZnQoY29uc3QgTGF5b3V0UG9pbnQmIHRvcExlZnQpCi17Ci0jaWYgQVNTRVJUX0VOQUJM
RUQKLSAgICBzZXRIYXNWYWxpZFRvcCgpOwotICAgIHNldEhhc1ZhbGlkTGVmdCgpOwotI2VuZGlm
Ci0gICAgbV90b3BMZWZ0ID0gdG9wTGVmdDsKLX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNl
dFRvcChMYXlvdXRVbml0IHRvcCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1Zh
bGlkVG9wKCk7Ci0jZW5kaWYKLSAgICBtX3RvcExlZnQuc2V0WSh0b3ApOwotfQotCi1pbmxpbmUg
dm9pZCBHZW9tZXRyeTo6c2V0TGVmdChMYXlvdXRVbml0IGxlZnQpCi17Ci0jaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBzZXRIYXNWYWxpZExlZnQoKTsKLSNlbmRpZgotICAgIG1fdG9wTGVmdC5zZXRY
KGxlZnQpOwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0Q29udGVudEJveEhlaWdodChM
YXlvdXRVbml0IGhlaWdodCkKLXsgCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBzZXRIYXNWYWxp
ZENvbnRlbnRIZWlnaHQoKTsKLSNlbmRpZgotICAgIG1fY29udGVudEhlaWdodCA9IGhlaWdodDsK
LX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNldENvbnRlbnRCb3hXaWR0aChMYXlvdXRVbml0
IHdpZHRoKQoteyAKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkQ29udGVudFdp
ZHRoKCk7Ci0jZW5kaWYKLSAgICBtX2NvbnRlbnRXaWR0aCA9IHdpZHRoOwotfQotCi1pbmxpbmUg
TGF5b3V0VW5pdCBHZW9tZXRyeTo6Y29udGVudEJveEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1faGFzVmFsaWRDb250ZW50SGVpZ2h0KTsKLSAgICByZXR1cm4gbV9jb250ZW50SGVpZ2h0
OwotfQotCi1pbmxpbmUgTGF5b3V0VW5pdCBHZW9tZXRyeTo6Y29udGVudEJveFdpZHRoKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZENvbnRlbnRXaWR0aCk7Ci0gICAgcmV0dXJuIG1f
Y29udGVudFdpZHRoOwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0SG9yaXpvbnRhbE1h
cmdpbihIb3Jpem9udGFsTWFyZ2luIG1hcmdpbikKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IHNldEhhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbigpOwotI2VuZGlmCi0gICAgbV9ob3Jpem9udGFs
TWFyZ2luID0gbWFyZ2luOwotfQotCi1pbmxpbmUgdm9pZCBHZW9tZXRyeTo6c2V0VmVydGljYWxN
YXJnaW4oVmVydGljYWxNYXJnaW4gbWFyZ2luKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
c2V0SGFzVmFsaWRWZXJ0aWNhbE1hcmdpbigpOwotICAgIGludmFsaWRhdGVQcmVjb21wdXRlZE1h
cmdpbkJlZm9yZSgpOwotI2VuZGlmCi0gICAgbV92ZXJ0aWNhbE1hcmdpbiA9IG1hcmdpbjsKLX0K
LQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNldEJvcmRlcihMYXlvdXQ6OkVkZ2VzIGJvcmRlcikK
LXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIHNldEhhc1ZhbGlkQm9yZGVyKCk7Ci0jZW5kaWYK
LSAgICBtX2JvcmRlciA9IGJvcmRlcjsKLX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNldFBh
ZGRpbmcoT3B0aW9uYWw8TGF5b3V0OjpFZGdlcz4gcGFkZGluZykKLXsKLSNpZiBBU1NFUlRfRU5B
QkxFRAotICAgIHNldEhhc1ZhbGlkUGFkZGluZygpOwotI2VuZGlmCi0gICAgbV9wYWRkaW5nID0g
cGFkZGluZzsKLX0KLQotaW5saW5lIHZvaWQgR2VvbWV0cnk6OnNldFZlcnRpY2FsUGFkZGluZyhM
YXlvdXQ6OlZlcnRpY2FsRWRnZXMgdmVydGljYWxQYWRkaW5nKQotewotI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgc2V0SGFzVmFsaWRQYWRkaW5nKCk7Ci0jZW5kaWYKLSAgICBtX3BhZGRpbmcgPSBM
YXlvdXQ6OkVkZ2VzIHsgbV9wYWRkaW5nID8gbV9wYWRkaW5nLT5ob3Jpem9udGFsIDogTGF5b3V0
OjpIb3Jpem9udGFsRWRnZXMoKSwgdmVydGljYWxQYWRkaW5nIH07Ci19Ci0KLWlubGluZSBHZW9t
ZXRyeTo6VmVydGljYWxNYXJnaW4gR2VvbWV0cnk6OnZlcnRpY2FsTWFyZ2luKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9oYXNWYWxpZFZlcnRpY2FsTWFyZ2luKTsKLSAgICByZXR1cm4gbV92ZXJ0
aWNhbE1hcmdpbjsKLX0KLQotaW5saW5lIEdlb21ldHJ5OjpIb3Jpem9udGFsTWFyZ2luIEdlb21l
dHJ5Ojpob3Jpem9udGFsTWFyZ2luKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEhv
cml6b250YWxNYXJnaW4pOwotICAgIHJldHVybiBtX2hvcml6b250YWxNYXJnaW47Ci19Ci0KLWlu
bGluZSBMYXlvdXRVbml0IEdlb21ldHJ5OjptYXJnaW5CZWZvcmUoKSBjb25zdAotewotICAgIEFT
U0VSVChtX2hhc1ZhbGlkVmVydGljYWxNYXJnaW4pOwotICAgIHJldHVybiBtX3ZlcnRpY2FsTWFy
Z2luLmJlZm9yZTsKLX0KLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6Om1hcmdpblN0YXJ0
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEhvcml6b250YWxNYXJnaW4pOwotICAg
IHJldHVybiBtX2hvcml6b250YWxNYXJnaW4uc3RhcnQ7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0
IEdlb21ldHJ5OjptYXJnaW5BZnRlcigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRW
ZXJ0aWNhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1fdmVydGljYWxNYXJnaW4uYWZ0ZXI7Ci19Ci0K
LWlubGluZSBMYXlvdXRVbml0IEdlb21ldHJ5OjptYXJnaW5FbmQoKSBjb25zdAotewotICAgIEFT
U0VSVChtX2hhc1ZhbGlkSG9yaXpvbnRhbE1hcmdpbik7Ci0gICAgcmV0dXJuIG1faG9yaXpvbnRh
bE1hcmdpbi5lbmQ7Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBHZW9tZXRyeTo6
cGFkZGluZ1RvcCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAg
ICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRk
aW5nLT52ZXJ0aWNhbC50b3A7Ci19Ci0KLWlubGluZSBPcHRpb25hbDxMYXlvdXRVbml0PiBHZW9t
ZXRyeTo6cGFkZGluZ0xlZnQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2hhc1ZhbGlkUGFkZGlu
Zyk7Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJu
IG1fcGFkZGluZy0+aG9yaXpvbnRhbC5sZWZ0OwotfQotCi1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gR2VvbWV0cnk6OnBhZGRpbmdCb3R0b20oKSBjb25zdAotewotICAgIEFTU0VSVChtX2hh
c1ZhbGlkUGFkZGluZyk7Ci0gICAgaWYgKCFtX3BhZGRpbmcpCi0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgcmV0dXJuIG1fcGFkZGluZy0+dmVydGljYWwuYm90dG9tOwotfQotCi1pbmxpbmUgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gR2VvbWV0cnk6OnBhZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1faGFzVmFsaWRQYWRkaW5nKTsKLSAgICBpZiAoIW1fcGFkZGluZykKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9wYWRkaW5nLT5ob3Jpem9udGFsLnJpZ2h0OwotfQot
Ci1pbmxpbmUgT3B0aW9uYWw8TGF5b3V0VW5pdD4gR2VvbWV0cnk6OnZlcnRpY2FsUGFkZGluZygp
IGNvbnN0Ci17Ci0gICAgYXV0byBwYWRkaW5nVG9wID0gdGhpcy0+cGFkZGluZ1RvcCgpOwotICAg
IGF1dG8gcGFkZGluZ0JvdHRvbSA9IHRoaXMtPnBhZGRpbmdCb3R0b20oKTsKLSAgICBpZiAoIXBh
ZGRpbmdUb3AgJiYgIXBhZGRpbmdCb3R0b20pCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0
dXJuIHBhZGRpbmdUb3AudmFsdWVPcigwKSArIHBhZGRpbmdCb3R0b20udmFsdWVPcigwKTsKLX0K
LQotaW5saW5lIE9wdGlvbmFsPExheW91dFVuaXQ+IEdlb21ldHJ5Ojpob3Jpem9udGFsUGFkZGlu
ZygpIGNvbnN0Ci17Ci0gICAgYXV0byBwYWRkaW5nTGVmdCA9IHRoaXMtPnBhZGRpbmdMZWZ0KCk7
Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSB0aGlzLT5wYWRkaW5nUmlnaHQoKTsKLSAgICBpZiAo
IXBhZGRpbmdMZWZ0ICYmICFwYWRkaW5nUmlnaHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
cmV0dXJuIHBhZGRpbmdMZWZ0LnZhbHVlT3IoMCkgKyBwYWRkaW5nUmlnaHQudmFsdWVPcigwKTsK
LX0KLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6OmJvcmRlclRvcCgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJldHVybiBtX2JvcmRlci52ZXJ0aWNh
bC50b3A7Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEdlb21ldHJ5Ojpib3JkZXJMZWZ0KCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEJvcmRlcik7Ci0gICAgcmV0dXJuIG1fYm9yZGVy
Lmhvcml6b250YWwubGVmdDsKLX0KLQotaW5saW5lIExheW91dFVuaXQgR2VvbWV0cnk6OmJvcmRl
ckJvdHRvbSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRCb3JkZXIpOwotICAgIHJl
dHVybiBtX2JvcmRlci52ZXJ0aWNhbC5ib3R0b207Ci19Ci0KLWlubGluZSBMYXlvdXRVbml0IEdl
b21ldHJ5Ojpib3JkZXJSaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRCb3Jk
ZXIpOwotICAgIHJldHVybiBtX2JvcmRlci5ob3Jpem9udGFsLnJpZ2h0OwotfQotCi19Ci19Ci0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91
dFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91
dFRyZWVCdWlsZGVyLmNwcAppbmRleCBkNGJmYmEwNjI2NjZmODZmN2RkNzljOWYxMmMyNjI1NzZh
MzJlMjFjLi5lNDI5NDUwZTA1OTgwNDQxZDA1YWFmZGU2NzZlMDkyOWU1Y2ExOWI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRUcmVlQnVpbGRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxk
ZXIuY3BwCkBAIC0zOCwxMCArMzgsMTAgQEAKICNpbmNsdWRlICJJbnZhbGlkYXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3gu
aCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dENoaWxk
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRDb250YWluZXJCb3guaCIKICNpbmNsdWRlICJM
YXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJM
YXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAjaW5jbHVkZSAiTGF5b3V0SW5saW5lVGV4
dEJveC5oIgogI2luY2x1ZGUgIkxheW91dExpbmVCcmVha0JveC5oIgpAQCAtNDI2LDcgKzQyNiw3
IEBAIHN0YXRpYyB2b2lkIG91dHB1dElubGluZVJ1bnMoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25z
dCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBvdXRw
dXRMYXlvdXRCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGxheW91dEJveCwgY29u
c3QgR2VvbWV0cnkqIGRpc3BsYXlCb3gsIHVuc2lnbmVkIGRlcHRoKQorc3RhdGljIHZvaWQgb3V0
cHV0TGF5b3V0Qm94KFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgQm94JiBsYXlvdXRCb3gsIGNv
bnN0IEJveEdlb21ldHJ5KiBib3hHZW9tZXRyeSwgdW5zaWduZWQgZGVwdGgpCiB7CiAgICAgdW5z
aWduZWQgcHJpbnRlZENoYXJhY3RlcnMgPSAwOwogICAgIHdoaWxlICgrK3ByaW50ZWRDaGFyYWN0
ZXJzIDw9IGRlcHRoICogMikKQEAgLTQ4MSw4ICs0ODEsOCBAQCBzdGF0aWMgdm9pZCBvdXRwdXRM
YXlvdXRCb3goVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
R2VvbQogICAgIGVsc2UKICAgICAgICAgc3RyZWFtIDw8ICJ1bmtub3duIGJveCI7CiAKLSAgICBp
ZiAoZGlzcGxheUJveCkKLSAgICAgICAgc3RyZWFtIDw8ICIgYXQgKCIgPDwgZGlzcGxheUJveC0+
bGVmdCgpIDw8ICIsIiA8PCBkaXNwbGF5Qm94LT50b3AoKSA8PCAiKSBzaXplICIgPDwgZGlzcGxh
eUJveC0+d2lkdGgoKSA8PCAieCIgPDwgZGlzcGxheUJveC0+aGVpZ2h0KCk7CisgICAgaWYgKGJv
eEdlb21ldHJ5KQorICAgICAgICBzdHJlYW0gPDwgIiBhdCAoIiA8PCBib3hHZW9tZXRyeS0+bGVm
dCgpIDw8ICIsIiA8PCBib3hHZW9tZXRyeS0+dG9wKCkgPDwgIikgc2l6ZSAiIDw8IGJveEdlb21l
dHJ5LT53aWR0aCgpIDw8ICJ4IiA8PCBib3hHZW9tZXRyeS0+aGVpZ2h0KCk7CiAgICAgc3RyZWFt
IDw8ICIgKCIgPDwgJmxheW91dEJveCA8PCAiKSI7CiAgICAgaWYgKGlzPElubGluZVRleHRCb3g+
KGxheW91dEJveCkpIHsKICAgICAgICAgYXV0byB0ZXh0Q29udGVudCA9IGRvd25jYXN0PElubGlu
ZVRleHRCb3g+KGxheW91dEJveCkuY29udGVudCgpOwpAQCAtNTA2LDggKzUwNiw4IEBAIHN0YXRp
YyB2b2lkIG91dHB1dExheW91dFRyZWUoY29uc3QgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlLCBU
ZXh0U3RyZWFtJiBzdHJlYW0sCiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBl
PEJveD4ocm9vdENvbnRhaW5lcikpIHsKICAgICAgICAgaWYgKGxheW91dFN0YXRlKSB7CiAgICAg
ICAgICAgICAvLyBOb3QgYWxsIGJveGVzIGdlbmVyYXRlIGRpc3BsYXkgYm94ZXMuCi0gICAgICAg
ICAgICBpZiAobGF5b3V0U3RhdGUtPmhhc0Rpc3BsYXlCb3goY2hpbGQpKQotICAgICAgICAgICAg
ICAgIG91dHB1dExheW91dEJveChzdHJlYW0sIGNoaWxkLCAmbGF5b3V0U3RhdGUtPmdlb21ldHJ5
Rm9yTGF5b3V0Qm94KGNoaWxkKSwgZGVwdGgpOworICAgICAgICAgICAgaWYgKGxheW91dFN0YXRl
LT5oYXNCb3hHZW9tZXRyeShjaGlsZCkpCisgICAgICAgICAgICAgICAgb3V0cHV0TGF5b3V0Qm94
KHN0cmVhbSwgY2hpbGQsICZsYXlvdXRTdGF0ZS0+Z2VvbWV0cnlGb3JCb3goY2hpbGQpLCBkZXB0
aCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb3V0cHV0TGF5b3V0Qm94KHN0
cmVhbSwgY2hpbGQsIG51bGxwdHIsIGRlcHRoKTsKICAgICAgICAgICAgIGlmIChjaGlsZC5lc3Rh
Ymxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpCkBAIC01MjUsNyArNTI1LDcgQEAgdm9p
ZCBzaG93TGF5b3V0VHJlZShjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgTGF5b3V0U3RhdGUq
IGxheW91dFN0YXRlKQogICAgIFRleHRTdHJlYW0gc3RyZWFtKFRleHRTdHJlYW06OkxpbmVNb2Rl
OjpNdWx0aXBsZUxpbmUsIFRleHRTdHJlYW06OkZvcm1hdHRpbmc6OlNWR1N0eWxlUmVjdCk7CiAK
ICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmluaXRpYWxDb250
YWluaW5nQmxvY2soKTsKLSAgICBvdXRwdXRMYXlvdXRCb3goc3RyZWFtLCBpbml0aWFsQ29udGFp
bmluZ0Jsb2NrLCBsYXlvdXRTdGF0ZSA/ICZsYXlvdXRTdGF0ZS0+Z2VvbWV0cnlGb3JMYXlvdXRC
b3goaW5pdGlhbENvbnRhaW5pbmdCbG9jaykgOiBudWxscHRyLCAwKTsKKyAgICBvdXRwdXRMYXlv
dXRCb3goc3RyZWFtLCBpbml0aWFsQ29udGFpbmluZ0Jsb2NrLCBsYXlvdXRTdGF0ZSA/ICZsYXlv
dXRTdGF0ZS0+Z2VvbWV0cnlGb3JCb3goaW5pdGlhbENvbnRhaW5pbmdCbG9jaykgOiBudWxscHRy
LCAwKTsKICAgICBvdXRwdXRMYXlvdXRUcmVlKGxheW91dFN0YXRlLCBzdHJlYW0sIGluaXRpYWxD
b250YWluaW5nQmxvY2ssIDEpOwogICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBzdHJlYW0ucmVsZWFz
ZSgpLnV0ZjgoKS5kYXRhKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5k
ZXggNWI5YzA5ZDJjZjdmZmI1OWYxY2YyMmJmNWNlNmVhOWUwYzZhNjllZC4uYjVlMDhmMmQ4NzBm
NTk2ZDgwMzA2NDcwZjJhNWM1NzQzZDg2MGQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRl
eHQuY3BwCkBAIC0zMyw5ICszMyw5IEBACiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRl
LmgiCiAjaW5jbHVkZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKICNpbmNsdWRlICJMYXlvdXRCb3gu
aCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkxheW91dENoaWxk
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0
R2VvbWV0cnkuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCiAj
aW5jbHVkZSAiVGFibGVGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgpAQCAtNzUsMTUgKzc1LDE1IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6c2V0VXNlZEdlb21ldHJ5Rm9yQ2VsbHMoTGF5b3V0VW5pdCBhdmFpbGFibGVIb3Jpem9uCiAg
ICAgYXV0byogY3VycmVudFNlY3Rpb24gPSAmcm93TGlzdC5maXJzdCgpLmJveCgpLnBhcmVudCgp
OwogICAgIGZvciAoYXV0byYgY2VsbCA6IGdyaWQuY2VsbHMoKSkgewogICAgICAgICBhdXRvJiBj
ZWxsQm94ID0gY2VsbC0+Ym94KCk7Ci0gICAgICAgIGF1dG8mIGNlbGxEaXNwbGF5Qm94ID0gZm9y
bWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChjZWxsQm94KTsKKyAgICAgICAgYXV0byYgY2VsbEJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoY2VsbEJveCk7CiAgICAg
ICAgIGF1dG8mIHNlY3Rpb24gPSByb3dMaXN0W2NlbGwtPnN0YXJ0Um93KCldLmJveCgpLnBhcmVu
dCgpOwogICAgICAgICBpZiAoJnNlY3Rpb24gIT0gY3VycmVudFNlY3Rpb24pIHsKICAgICAgICAg
ICAgIGN1cnJlbnRTZWN0aW9uID0gJnNlY3Rpb247CiAgICAgICAgICAgICAvLyBXaGlsZSB0aGUg
Z3JpZCBpcyBhIGNvbnRpbnVvdXMgZmxvdyBvZiByb3dzLCBpbiB0aGUgZGlzcGxheSB0cmVlIHRo
ZXkgYXJlIHJlbGF0aXZlIHRvIHRoZWlyIHNlY3Rpb25zLgogICAgICAgICAgICAgc2VjdGlvbk9m
ZnNldCA9IHJvd0xpc3RbY2VsbC0+c3RhcnRSb3coKV0ubG9naWNhbFRvcCgpOwogICAgICAgICB9
Ci0gICAgICAgIGNlbGxEaXNwbGF5Qm94LnNldFRvcChyb3dMaXN0W2NlbGwtPnN0YXJ0Um93KCld
LmxvZ2ljYWxUb3AoKSAtIHNlY3Rpb25PZmZzZXQpOwotICAgICAgICBjZWxsRGlzcGxheUJveC5z
ZXRMZWZ0KGNvbHVtbkxpc3RbY2VsbC0+c3RhcnRDb2x1bW4oKV0ubG9naWNhbExlZnQoKSk7Cisg
ICAgICAgIGNlbGxCb3hHZW9tZXRyeS5zZXRUb3Aocm93TGlzdFtjZWxsLT5zdGFydFJvdygpXS5s
b2dpY2FsVG9wKCkgLSBzZWN0aW9uT2Zmc2V0KTsKKyAgICAgICAgY2VsbEJveEdlb21ldHJ5LnNl
dExlZnQoY29sdW1uTGlzdFtjZWxsLT5zdGFydENvbHVtbigpXS5sb2dpY2FsTGVmdCgpKTsKICAg
ICAgICAgYXV0byBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlID0gcm93TGlzdFtjZWxsLT5zdGFydFJv
dygpXS5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gY2Vs
bC0+c3RhcnRSb3coKSArIDE7IHJvd0luZGV4IDwgY2VsbC0+ZW5kUm93KCk7ICsrcm93SW5kZXgp
CiAgICAgICAgICAgICBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlICs9IHJvd0xpc3Rbcm93SW5kZXhd
LmxvZ2ljYWxIZWlnaHQoKTsKQEAgLTkxLDE0ICs5MSwxNCBAQCB2b2lkIFRhYmxlRm9ybWF0dGlu
Z0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvckNlbGxzKExheW91dFVuaXQgYXZhaWxhYmxlSG9y
aXpvbgogICAgICAgICBsYXlvdXRDZWxsKCpjZWxsLCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2Us
IGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UpOwogICAgICAgICAvLyBGSVhNRTogRmluZCBvdXQgaWYg
aXQgaXMgb2sgdG8gdXNlIHRoZSByZWd1bGFyIHBhZGRpbmcgaGVyZSB0byBhbGlnbiB0aGUgY29u
dGVudCBib3ggaW5zaWRlIGEgdGFsbCBjZWxsIG9yIHdlIG5lZWQgdG8gCiAgICAgICAgIC8vIHVz
ZSBzb21lIGtpbmQgb2YgaW50cmluc2ljIHBhZGRpbmcgc2ltaWxhciB0byBSZW5kZXJUYWJsZUNl
bGwuCi0gICAgICAgIGF1dG8gcGFkZGluZ1RvcCA9IGNlbGxEaXNwbGF5Qm94LnBhZGRpbmdUb3Ao
KS52YWx1ZU9yKExheW91dFVuaXQgeyB9KTsKLSAgICAgICAgYXV0byBwYWRkaW5nQm90dG9tID0g
Y2VsbERpc3BsYXlCb3gucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoTGF5b3V0VW5pdCB7IH0pOwor
ICAgICAgICBhdXRvIHBhZGRpbmdUb3AgPSBjZWxsQm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZh
bHVlT3IoTGF5b3V0VW5pdCB7IH0pOworICAgICAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBjZWxs
Qm94R2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoTGF5b3V0VW5pdCB7IH0pOwogICAg
ICAgICBhdXRvIGludHJpbnNpY1BhZGRpbmdUb3AgPSBMYXlvdXRVbml0IHsgfTsKICAgICAgICAg
YXV0byBpbnRyaW5zaWNQYWRkaW5nQm90dG9tID0gTGF5b3V0VW5pdCB7IH07CiAKICAgICAgICAg
c3dpdGNoIChjZWxsQm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpKSB7CiAgICAgICAgIGNhc2Ug
VmVydGljYWxBbGlnbjo6TWlkZGxlOiB7Ci0gICAgICAgICAgICBhdXRvIGludHJpbnNpY1ZlcnRp
Y2FsUGFkZGluZyA9IHN0ZDo6bWF4KDBfbHUsIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UgLSBjZWxs
RGlzcGxheUJveC52ZXJ0aWNhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSAtIGNlbGxEaXNwbGF5
Qm94LmNvbnRlbnRCb3hIZWlnaHQoKSk7CisgICAgICAgICAgICBhdXRvIGludHJpbnNpY1ZlcnRp
Y2FsUGFkZGluZyA9IHN0ZDo6bWF4KDBfbHUsIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UgLSBjZWxs
Qm94R2VvbWV0cnkudmVydGljYWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkgLSBjZWxsQm94R2Vv
bWV0cnkuY29udGVudEJveEhlaWdodCgpKTsKICAgICAgICAgICAgIGludHJpbnNpY1BhZGRpbmdU
b3AgPSBpbnRyaW5zaWNWZXJ0aWNhbFBhZGRpbmcgLyAyOwogICAgICAgICAgICAgaW50cmluc2lj
UGFkZGluZ0JvdHRvbSA9IGludHJpbnNpY1ZlcnRpY2FsUGFkZGluZyAvIDI7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTEwNiw4ICsxMDYsOCBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6
OnNldFVzZWRHZW9tZXRyeUZvckNlbGxzKExheW91dFVuaXQgYXZhaWxhYmxlSG9yaXpvbgogICAg
ICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7CiAgICAgICAgICAgICBhdXRvIHJv
d0Jhc2VsaW5lID0gTGF5b3V0VW5pdCB7IHJvd0xpc3RbY2VsbC0+c3RhcnRSb3coKV0uYmFzZWxp
bmUoKSB9OwogICAgICAgICAgICAgYXV0byBjZWxsQmFzZWxpbmUgPSBMYXlvdXRVbml0IHsgY2Vs
bC0+YmFzZWxpbmUoKSB9OwotICAgICAgICAgICAgaW50cmluc2ljUGFkZGluZ1RvcCA9IHN0ZDo6
bWF4KDBfbHUsIHJvd0Jhc2VsaW5lIC0gY2VsbEJhc2VsaW5lIC0gY2VsbERpc3BsYXlCb3guYm9y
ZGVyVG9wKCkpOwotICAgICAgICAgICAgaW50cmluc2ljUGFkZGluZ0JvdHRvbSA9IHN0ZDo6bWF4
KDBfbHUsIGF2YWlsYWJsZVZlcnRpY2FsU3BhY2UgLSBjZWxsRGlzcGxheUJveC52ZXJ0aWNhbE1h
cmdpbkJvcmRlckFuZFBhZGRpbmcoKSAtIGludHJpbnNpY1BhZGRpbmdUb3AgLSBjZWxsRGlzcGxh
eUJveC5jb250ZW50Qm94SGVpZ2h0KCkpOworICAgICAgICAgICAgaW50cmluc2ljUGFkZGluZ1Rv
cCA9IHN0ZDo6bWF4KDBfbHUsIHJvd0Jhc2VsaW5lIC0gY2VsbEJhc2VsaW5lIC0gY2VsbEJveEdl
b21ldHJ5LmJvcmRlclRvcCgpKTsKKyAgICAgICAgICAgIGludHJpbnNpY1BhZGRpbmdCb3R0b20g
PSBzdGQ6Om1heCgwX2x1LCBhdmFpbGFibGVWZXJ0aWNhbFNwYWNlIC0gY2VsbEJveEdlb21ldHJ5
LnZlcnRpY2FsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpIC0gaW50cmluc2ljUGFkZGluZ1RvcCAt
IGNlbGxCb3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvckNlbGxzKExheW91dFVuaXQg
YXZhaWxhYmxlSG9yaXpvbgogICAgICAgICAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBjZWxs
Qm94LmZpcnN0SW5GbG93T3JGbG9hdGluZ0NoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0SW5GbG93T3JGbG9hdGluZ1NpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQtPmlzQW5vbnltb3VzKCkgfHwgY2hpbGQtPmlzTGluZUJyZWFrQm94KCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGlu
Z1N0YXRlLmRpc3BsYXlCb3goKmNoaWxkKS5tb3ZlVmVydGljYWxseShpbnRyaW5zaWNQYWRkaW5n
VG9wKTsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmJveEdlb21ldHJ5KCpj
aGlsZCkubW92ZVZlcnRpY2FsbHkoaW50cmluc2ljUGFkZGluZ1RvcCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGlmIChjZWxsQm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Q29udGVu
dCA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoY2VsbEJv
eCkuZW5zdXJlRGlzcGxheUlubGluZUNvbnRlbnQoKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lk
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNldFVzZWRHZW9tZXRyeUZvckNlbGxzKExheW91dFVu
aXQgYXZhaWxhYmxlSG9yaXpvbgogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGFkanVzdENl
bGxDb250ZW50V2l0aEluc3RyaW5zaWNQYWRkaW5nQmVmb3JlKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgY2VsbERpc3BsYXlCb3guc2V0VmVydGljYWxQYWRkaW5nKHsgcGFkZGluZ1RvcCArIGludHJp
bnNpY1BhZGRpbmdUb3AsIHBhZGRpbmdCb3R0b20gKyBpbnRyaW5zaWNQYWRkaW5nQm90dG9tIH0p
OworICAgICAgICBjZWxsQm94R2VvbWV0cnkuc2V0VmVydGljYWxQYWRkaW5nKHsgcGFkZGluZ1Rv
cCArIGludHJpbnNpY1BhZGRpbmdUb3AsIHBhZGRpbmdCb3R0b20gKyBpbnRyaW5zaWNQYWRkaW5n
Qm90dG9tIH0pOwogICAgIH0KIH0KIApAQCAtMTUyLDEyICsxNTIsMTIgQEAgdm9pZCBUYWJsZUZv
cm1hdHRpbmdDb250ZXh0OjpzZXRVc2VkR2VvbWV0cnlGb3JSb3dzKExheW91dFVuaXQgYXZhaWxh
YmxlSG9yaXpvbnQKICAgICBmb3IgKHNpemVfdCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgcm93
cy5zaXplKCk7ICsrcm93SW5kZXgpIHsKICAgICAgICAgYXV0byYgcm93ID0gcm93c1tyb3dJbmRl
eF07CiAgICAgICAgIGF1dG8mIHJvd0JveCA9IHJvdy5ib3goKTsKLSAgICAgICAgYXV0byYgcm93
RGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gocm93Qm94KTsKKyAgICAg
ICAgYXV0byYgcm93Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShy
b3dCb3gpOwogCi0gICAgICAgIHJvd0Rpc3BsYXlCb3guc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNv
bXB1dGVkUGFkZGluZyhyb3dCb3gsIGF2YWlsYWJsZUhvcml6b250YWxTcGFjZSkpOworICAgICAg
ICByb3dCb3hHZW9tZXRyeS5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQYWRkaW5nKHJv
d0JveCwgYXZhaWxhYmxlSG9yaXpvbnRhbFNwYWNlKSk7CiAgICAgICAgIC8vIEludGVybmFsIHRh
YmxlIGVsZW1lbnRzIGRvIG5vdCBoYXZlIG1hcmdpbnMuCi0gICAgICAgIHJvd0Rpc3BsYXlCb3gu
c2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOwotICAgICAgICByb3dEaXNwbGF5Qm94LnNldFZlcnRp
Y2FsTWFyZ2luKHsgfSk7CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJn
aW4oeyB9KTsKKyAgICAgICAgcm93Qm94R2VvbWV0cnkuc2V0VmVydGljYWxNYXJnaW4oeyB9KTsK
IAogICAgICAgICBhdXRvIGNvbXB1dGVkUm93Qm9yZGVyID0gWyZdIHsKICAgICAgICAgICAgIGF1
dG8gYm9yZGVyID0gZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihyb3dCb3gpOwpAQCAtMTgxLDcg
KzE4MSw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9y
Um93cyhMYXlvdXRVbml0IGF2YWlsYWJsZUhvcml6b250CiAgICAgICAgICAgICBjb21wdXRlZFJv
d0JvcmRlci52ZXJ0aWNhbC50b3AgPSB7IH07CiAgICAgICAgICAgICBjb21wdXRlZFJvd0JvcmRl
ci52ZXJ0aWNhbC5ib3R0b20gPSB7IH07CiAgICAgICAgIH0KLSAgICAgICAgcm93RGlzcGxheUJv
eC5zZXRDb250ZW50Qm94SGVpZ2h0KHJvdy5sb2dpY2FsSGVpZ2h0KCkgLSBjb21wdXRlZFJvd0Jv
cmRlci5oZWlnaHQoKSk7CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldENvbnRlbnRCb3hIZWln
aHQocm93LmxvZ2ljYWxIZWlnaHQoKSAtIGNvbXB1dGVkUm93Qm9yZGVyLmhlaWdodCgpKTsKIAog
ICAgICAgICBhdXRvIHJvd0xvZ2ljYWxXaWR0aCA9IGdyaWQuY29sdW1ucygpLmxvZ2ljYWxXaWR0
aCgpICsgMiAqIGdyaWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsKICAgICAgICAgaWYgKGNvbXB1dGVk
Um93Qm9yZGVyLndpZHRoKCkgPiByb3dMb2dpY2FsV2lkdGgpIHsKQEAgLTE4OSwxNSArMTg5LDE1
IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yUm93cyhM
YXlvdXRVbml0IGF2YWlsYWJsZUhvcml6b250CiAgICAgICAgICAgICBjb21wdXRlZFJvd0JvcmRl
ci5ob3Jpem9udGFsLmxlZnQgPSB7IH07CiAgICAgICAgICAgICBjb21wdXRlZFJvd0JvcmRlci5o
b3Jpem9udGFsLnJpZ2h0ID0geyB9OwogICAgICAgICB9Ci0gICAgICAgIHJvd0Rpc3BsYXlCb3gu
c2V0Q29udGVudEJveFdpZHRoKHJvd0xvZ2ljYWxXaWR0aCAtIGNvbXB1dGVkUm93Qm9yZGVyLndp
ZHRoKCkpOwotICAgICAgICByb3dEaXNwbGF5Qm94LnNldEJvcmRlcihjb21wdXRlZFJvd0JvcmRl
cik7CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChyb3dMb2dpY2Fs
V2lkdGggLSBjb21wdXRlZFJvd0JvcmRlci53aWR0aCgpKTsKKyAgICAgICAgcm93Qm94R2VvbWV0
cnkuc2V0Qm9yZGVyKGNvbXB1dGVkUm93Qm9yZGVyKTsKIAogICAgICAgICBpZiAocHJldmlvdXNS
b3cgJiYgJnByZXZpb3VzUm93LT5wYXJlbnQoKSAhPSAmcm93Qm94LnBhcmVudCgpKSB7CiAgICAg
ICAgICAgICAvLyBUaGlzIHJvdyBpcyBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLgogICAgICAgICAg
ICAgcm93TG9naWNhbFRvcCA9IHsgfTsKICAgICAgICAgfQotICAgICAgICByb3dEaXNwbGF5Qm94
LnNldFRvcChyb3dMb2dpY2FsVG9wKTsKLSAgICAgICAgcm93RGlzcGxheUJveC5zZXRMZWZ0KHsg
fSk7CisgICAgICAgIHJvd0JveEdlb21ldHJ5LnNldFRvcChyb3dMb2dpY2FsVG9wKTsKKyAgICAg
ICAgcm93Qm94R2VvbWV0cnkuc2V0TGVmdCh7IH0pOwogCiAgICAgICAgIHJvd0xvZ2ljYWxUb3Ag
Kz0gcm93LmxvZ2ljYWxIZWlnaHQoKSArIGdyaWQudmVydGljYWxTcGFjaW5nKCk7CiAgICAgICAg
IHByZXZpb3VzUm93ID0gJnJvd0JveDsKQEAgLTIzMSwxNyArMjMxLDE3IEBAIHZvaWQgVGFibGVG
b3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yU2VjdGlvbnMoY29uc3QgQ29uc3Ry
YWludHNGb3JJbkZsCiAgICAgYXV0byBwYWRkaW5nQmVmb3JlID0gT3B0aW9uYWw8TGF5b3V0VW5p
dD4geyB2ZXJ0aWNhbFNwYWNpbmcgfTsKICAgICBhdXRvIHBhZGRpbmdBZnRlciA9IHZlcnRpY2Fs
U3BhY2luZzsKICAgICBmb3IgKGF1dG8mIHNlY3Rpb25Cb3ggOiBjaGlsZHJlbk9mVHlwZTxDb250
YWluZXJCb3g+KHRhYmxlQm94KSkgewotICAgICAgICBhdXRvJiBzZWN0aW9uRGlzcGxheUJveCA9
IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goc2VjdGlvbkJveCk7CisgICAgICAgIGF1dG8m
IHNlY3Rpb25Cb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KHNlY3Rp
b25Cb3gpOwogICAgICAgICAvLyBTZWN0aW9uIGJvcmRlcnMgYXJlIGVpdGhlciBjb2xsYXBzZWQg
b3IgaWdub3JlZC4KLSAgICAgICAgc2VjdGlvbkRpc3BsYXlCb3guc2V0Qm9yZGVyKHsgfSk7Cisg
ICAgICAgIHNlY3Rpb25Cb3hHZW9tZXRyeS5zZXRCb3JkZXIoeyB9KTsKICAgICAgICAgLy8gVXNl
IGZha2UgdmVydGljYWwgcGFkZGluZyB0byBzcGFjZSBvdXQgdGhlIHNlY3Rpb25zLgotICAgICAg
ICBzZWN0aW9uRGlzcGxheUJveC5zZXRQYWRkaW5nKEVkZ2VzIHsgeyB9LCB7IHBhZGRpbmdCZWZv
cmUudmFsdWVPcigwX2x1KSwgcGFkZGluZ0FmdGVyIH0gfSk7CisgICAgICAgIHNlY3Rpb25Cb3hH
ZW9tZXRyeS5zZXRQYWRkaW5nKEVkZ2VzIHsgeyB9LCB7IHBhZGRpbmdCZWZvcmUudmFsdWVPcigw
X2x1KSwgcGFkZGluZ0FmdGVyIH0gfSk7CiAgICAgICAgIHBhZGRpbmdCZWZvcmUgPSBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIC8vIEludGVybmFsIHRhYmxlIGVsZW1lbnRzIGRvIG5vdCBoYXZlIG1h
cmdpbnMuCi0gICAgICAgIHNlY3Rpb25EaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyB9
KTsKLSAgICAgICAgc2VjdGlvbkRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4oeyB9KTsKKyAg
ICAgICAgc2VjdGlvbkJveEdlb21ldHJ5LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKKyAgICAg
ICAgc2VjdGlvbkJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7CiAKLSAgICAgICAg
c2VjdGlvbkRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHNlY3Rpb25XaWR0aCk7CisgICAg
ICAgIHNlY3Rpb25Cb3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoc2VjdGlvbldpZHRoKTsK
ICAgICAgICAgYXV0byBzZWN0aW9uQ29udGVudEhlaWdodCA9IExheW91dFVuaXQgeyB9OwogICAg
ICAgICBzaXplX3Qgcm93Q291bnQgPSAwOwogICAgICAgICBmb3IgKGF1dG8mIHJvd0JveCA6IGNo
aWxkcmVuT2ZUeXBlPENvbnRhaW5lckJveD4oc2VjdGlvbkJveCkpIHsKQEAgLTI0OSwxMSArMjQ5
LDExIEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0VXNlZEdlb21ldHJ5Rm9yU2Vj
dGlvbnMoY29uc3QgQ29uc3RyYWludHNGb3JJbkZsCiAgICAgICAgICAgICArK3Jvd0NvdW50Owog
ICAgICAgICB9CiAgICAgICAgIHNlY3Rpb25Db250ZW50SGVpZ2h0ICs9IHZlcnRpY2FsU3BhY2lu
ZyAqIChyb3dDb3VudCAtIDEpOwotICAgICAgICBzZWN0aW9uRGlzcGxheUJveC5zZXRDb250ZW50
Qm94SGVpZ2h0KHNlY3Rpb25Db250ZW50SGVpZ2h0KTsKLSAgICAgICAgc2VjdGlvbkRpc3BsYXlC
b3guc2V0TGVmdChjb25zdHJhaW50cy5ob3Jpem9udGFsLmxvZ2ljYWxMZWZ0KTsKLSAgICAgICAg
c2VjdGlvbkRpc3BsYXlCb3guc2V0VG9wKGxvZ2ljYWxUb3ApOworICAgICAgICBzZWN0aW9uQm94
R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChzZWN0aW9uQ29udGVudEhlaWdodCk7CisgICAg
ICAgIHNlY3Rpb25Cb3hHZW9tZXRyeS5zZXRMZWZ0KGNvbnN0cmFpbnRzLmhvcml6b250YWwubG9n
aWNhbExlZnQpOworICAgICAgICBzZWN0aW9uQm94R2VvbWV0cnkuc2V0VG9wKGxvZ2ljYWxUb3Ap
OwogCi0gICAgICAgIGxvZ2ljYWxUb3AgKz0gc2VjdGlvbkRpc3BsYXlCb3guaGVpZ2h0KCk7Cisg
ICAgICAgIGxvZ2ljYWxUb3AgKz0gc2VjdGlvbkJveEdlb21ldHJ5LmhlaWdodCgpOwogICAgIH0K
IH0KIApAQCAtMjYzLDEzICsyNjMsMTMgQEAgdm9pZCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojps
YXlvdXRDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCwgTGF5b3V0VW5pdAogCiAgICAg
YXV0byYgZ3JpZCA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpOwogICAgIGF1dG8mIGNl
bGxCb3ggPSBjZWxsLmJveCgpOwotICAgIGF1dG8mIGNlbGxEaXNwbGF5Qm94ID0gZm9ybWF0dGlu
Z1N0YXRlKCkuZGlzcGxheUJveChjZWxsQm94KTsKKyAgICBhdXRvJiBjZWxsQm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShjZWxsQm94KTsKIAotICAgIGNlbGxEaXNw
bGF5Qm94LnNldEJvcmRlcihnZW9tZXRyeSgpLmNvbXB1dGVkQ2VsbEJvcmRlcihjZWxsKSk7Ci0g
ICAgY2VsbERpc3BsYXlCb3guc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhj
ZWxsQm94LCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpKTsKKyAgICBjZWxsQm94R2VvbWV0cnku
c2V0Qm9yZGVyKGdlb21ldHJ5KCkuY29tcHV0ZWRDZWxsQm9yZGVyKGNlbGwpKTsKKyAgICBjZWxs
Qm94R2VvbWV0cnkuc2V0UGFkZGluZyhnZW9tZXRyeSgpLmNvbXB1dGVkUGFkZGluZyhjZWxsQm94
LCBhdmFpbGFibGVIb3Jpem9udGFsU3BhY2UpKTsKICAgICAvLyBJbnRlcm5hbCB0YWJsZSBlbGVt
ZW50cyBkbyBub3QgaGF2ZSBtYXJnaW5zLgotICAgIGNlbGxEaXNwbGF5Qm94LnNldEhvcml6b250
YWxNYXJnaW4oeyB9KTsKLSAgICBjZWxsRGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IH0p
OworICAgIGNlbGxCb3hHZW9tZXRyeS5zZXRIb3Jpem9udGFsTWFyZ2luKHsgfSk7CisgICAgY2Vs
bEJveEdlb21ldHJ5LnNldFZlcnRpY2FsTWFyZ2luKHsgfSk7CiAKICAgICBhdXRvIGF2YWlsYWJs
ZVNwYWNlRm9yQ29udGVudCA9IFsmXSB7CiAgICAgICAgIGF1dG8mIGNvbHVtbkxpc3QgPSBncmlk
LmNvbHVtbnMoKS5saXN0KCk7CkBAIC0yNzgsOSArMjc4LDkgQEAgdm9pZCBUYWJsZUZvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXRDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCwgTGF5b3V0
VW5pdAogICAgICAgICAgICAgbG9naWNhbFdpZHRoICs9IGNvbHVtbkxpc3QuYXQoY29sdW1uSW5k
ZXgpLmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICAvLyBObyBjb2x1bW4gc3BhY2luZyB3aGVuIHNw
YW5uaW5nLgogICAgICAgICBsb2dpY2FsV2lkdGggKz0gKGNlbGwuY29sdW1uU3BhbigpIC0gMSkg
KiBncmlkLmhvcml6b250YWxTcGFjaW5nKCk7Ci0gICAgICAgIHJldHVybiBsb2dpY2FsV2lkdGgg
LSBjZWxsRGlzcGxheUJveC5ob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpOworICAg
ICAgICByZXR1cm4gbG9naWNhbFdpZHRoIC0gY2VsbEJveEdlb21ldHJ5Lmhvcml6b250YWxNYXJn
aW5Cb3JkZXJBbmRQYWRkaW5nKCk7CiAgICAgfSgpOwotICAgIGNlbGxEaXNwbGF5Qm94LnNldENv
bnRlbnRCb3hXaWR0aChhdmFpbGFibGVTcGFjZUZvckNvbnRlbnQpOworICAgIGNlbGxCb3hHZW9t
ZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoYXZhaWxhYmxlU3BhY2VGb3JDb250ZW50KTsKIAogICAg
IGlmIChjZWxsQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKSB7CiAgICAgICAgIGF1dG8g
Y29uc3RyYWludHNGb3JDZWxsQ29udGVudCA9IGdlb21ldHJ5KCkuY29uc3RyYWludHNGb3JJbkZs
b3dDb250ZW50KGNlbGxCb3gpOwpAQCAtMjkyLDcgKzI5Miw3IEBAIHZvaWQgVGFibGVGb3JtYXR0
aW5nQ29udGV4dDo6bGF5b3V0Q2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwsIExheW91
dFVuaXQKICAgICAgICAgZmxvYXRpbmdTdGF0ZUZvckNlbGxDb250ZW50LmNsZWFyKCk7CiAgICAg
ICAgIExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNlbGxCb3gsIGxheW91
dFN0YXRlKCkpLT5sYXlvdXRJbkZsb3dDb250ZW50KGludmFsaWRhdGlvblN0YXRlLCBjb25zdHJh
aW50c0ZvckNlbGxDb250ZW50KTsKICAgICB9Ci0gICAgY2VsbERpc3BsYXlCb3guc2V0Q29udGVu
dEJveEhlaWdodChnZW9tZXRyeSgpLmNlbGxIZWlnaChjZWxsQm94KSk7CisgICAgY2VsbEJveEdl
b21ldHJ5LnNldENvbnRlbnRCb3hIZWlnaHQoZ2VvbWV0cnkoKS5jZWxsSGVpZ2goY2VsbEJveCkp
OwogfQogCiBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZv
cm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxl
Zm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDEyMTRm
MTYyM2NiNjRjMzA5NGM4YjRkNzM2MjEyOTVhNjI0ZGZlNDMuLjlkNDViNDljMmFjMjVmZjllMTkx
YmZmZGJmYzQ2MjEzZmViN2RmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90
YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAKQEAgLTI5LDkgKzI5LDkgQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2lu
Y2x1ZGUgIkxheW91dEJveEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgog
I2luY2x1ZGUgIkxheW91dERlc2NlbmRhbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxheW91dEdl
b21ldHJ5LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgogI2lu
Y2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUxheW91dC5jcHAKaW5kZXggODE0ZmIxMzBj
NmEwODUwYjI3NWZkOTY5NjU1OTc1OTY1ODZkNGQ3Ny4uMWI3MDAwNDEzZjAyZmNlY2M2ZWE1MmNh
ZWUwZTczYTRlMjk0NGZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxl
Zm9ybWF0dGluZy9UYWJsZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUxheW91dC5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFC
TEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAogI2luY2x1ZGUgIkxheW91dEJveC5oIgot
I2luY2x1ZGUgIkxheW91dEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnku
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcAppbmRleCBkYWEyYzViMTYz
ZTM3M2YwOGFjMWJhNTBkYzUzMzIyNjI1N2FkZDViLi4wYzhiZTc5NDk1MWI3OGUxOWI3NTkyODg1
YmJmODM1ZWIxYzk1M2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
d0xheW91dENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5
b3V0Q29udGV4dC5jcHAKQEAgLTQyLDggKzQyLDggQEAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKICNpbmNsdWRlICJJbnZhbGlkYXRpb25Db250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW52YWxpZGF0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgog
I2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJMYXlvdXRHZW9tZXRyeS5oIgog
I2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiTGF5b3V0VHJlZUJ1aWxkZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJEZXNjZW5kYW50SXRlcmF0b3IuaCIKQEAgLTgxLDcgKzgxLDcgQEAg
dm9pZCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXRVc2luZ0Zvcm1hdHRpbmdDb250ZXh0
KCkKIAogICAgIC8vIENsZWFuIHVwIHRoZSByZW5kZXIgdHJlZSBzdGF0ZSB3aGVuIHdlIGRvbid0
IHJ1biBSZW5kZXJWaWV3OjpsYXlvdXQuCiAgICAgaWYgKHJlbmRlclZpZXcubmVlZHNMYXlvdXQo
KSkgewotICAgICAgICBhdXRvIGNvbnRlbnRTaXplID0gbV9sYXlvdXRTdGF0ZS0+Z2VvbWV0cnlG
b3JMYXlvdXRCb3goKm1fbGF5b3V0U3RhdGUtPnJvb3QoKS5maXJzdENoaWxkKCkpLnNpemUoKTsK
KyAgICAgICAgYXV0byBjb250ZW50U2l6ZSA9IG1fbGF5b3V0U3RhdGUtPmdlb21ldHJ5Rm9yQm94
KCptX2xheW91dFN0YXRlLT5yb290KCkuZmlyc3RDaGlsZCgpKS5zaXplKCk7CiAgICAgICAgIHJl
bmRlclZpZXcuc2V0U2l6ZShjb250ZW50U2l6ZSk7CiAgICAgICAgIHJlbmRlclZpZXcucmVwYWlu
dFZpZXdSZWN0YW5nbGUoeyAwLCAwLCBjb250ZW50U2l6ZS53aWR0aCgpLCBjb250ZW50U2l6ZS5o
ZWlnaHQoKSB9KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>