<?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>200527</bug_id>
          
          <creation_ts>2019-08-07 19:18:32 -0700</creation_ts>
          <short_desc>Move classes declared inside StorageManager.cpp into their own headers</short_desc>
          <delta_ts>2019-08-08 09:48:18 -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>WebKit2</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1559414</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-07 19:18:32 -0700</bug_when>
    <thetext>Move classes declared inside StorageManager.cpp into their own headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559416</commentid>
    <comment_count>1</comment_count>
      <attachid>375777</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-07 19:19:58 -0700</bug_when>
    <thetext>Created attachment 375777
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559522</commentid>
    <comment_count>2</comment_count>
      <attachid>375777</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-08-08 08:57:49 -0700</bug_when>
    <thetext>Comment on attachment 375777
Patch

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

&gt; Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp:37
&gt; +// FIXME: The quota value is copied from GroupSettings.cpp.

I&apos;m not sure this comment is current.  This file doesn&apos;t exist any more.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp:40
&gt; +    : m_localStorageNamespace(localStorageNamespace ? makeWeakPtr(*localStorageNamespace) : nullptr)

Can&apos;t we just use the makeWeakPtr overload that takes a pointer now?

&gt; Source/WebKit/NetworkProcess/WebStorage/TransientLocalStorageNamespace.h:55
&gt; +    const unsigned m_quotaInBytes;

There are many of these that don&apos;t have default initializers in the headers.  It might be worth adding some.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559524</commentid>
    <comment_count>3</comment_count>
      <attachid>375806</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-08 09:03:07 -0700</bug_when>
    <thetext>Created attachment 375806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559536</commentid>
    <comment_count>4</comment_count>
      <attachid>375806</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-08 09:47:03 -0700</bug_when>
    <thetext>Comment on attachment 375806
Patch

Clearing flags on attachment: 375806

Committed r248422: &lt;https://trac.webkit.org/changeset/248422&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559537</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-08 09:47:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559538</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-08 09:48:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/54083615&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375777</attachid>
            <date>2019-08-07 19:19:58 -0700</date>
            <delta_ts>2019-08-08 09:03:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200527-20190807191956.patch</filename>
            <type>text/plain</type>
            <size>73048</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4Mzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5M2NkMmIzMjE2ODg2OWI2
OGEyZDE4OTE2OGQ2MDUwNGNhOGZlYjQuLjAzMjljYzZiNzlkOTc2NDg0MTMzYzg2OGRhMDBiYzNk
MjFiNTEwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTktMDgtMDcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGNsYXNzZXMgZGVjbGFyZWQg
aW5zaWRlIFN0b3JhZ2VNYW5hZ2VyLmNwcCBpbnRvIHRoZWlyIG93biBoZWFkZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA1MjcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGNsYXNzZXMgZGVj
bGFyZWQgaW5zaWRlIFN0b3JhZ2VNYW5hZ2VyLmNwcCBpbnRvIHRoZWlyIG93biBoZWFkZXJzCisg
ICAgICAgIGZvciBjbGFyaXR5LiBTdG9yYWdlTWFuYWdlci5jcHAgd2FzIGdldHRpbmcgcmVhbGx5
IGJpZy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
TmFtZXNwYWNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU5hbWVz
cGFjZTo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9y
YWdlTmFtZXNwYWNlOjp+TG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6
TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAg
KFdlYktpdDo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5n
T3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhckFs
bFN0b3JhZ2VBcmVhcyk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6
ZXBoZW1lcmFsT3JpZ2lucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZU5h
bWVzcGFjZTo6Y2xvbmVUbyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9M
b2NhbFN0b3JhZ2VOYW1lc3BhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxvY2FsU3Rv
cmFnZU5hbWVzcGFjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlOjpzdG9yYWdlTWFuYWdlciBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6flNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U6
OmFkZEFsbG93ZWRDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2U6OnJlbW92ZUFsbG93ZWRDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6U2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAo
V2ViS2l0OjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6Y2xvbmVUbyk6CisgICAgICAgIChXZWJL
aXQ6OlNlc3Npb25TdG9yYWdlTmFtZXNwYWNlOjpvcmlnaW5zIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdP
cmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJB
bGxTdG9yYWdlQXJlYXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25T
dG9yYWdlTmFtZXNwYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlOjphbGxvd2VkQ29ubmVjdGlvbnMgY29uc3QpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFn
ZUFyZWE6On5TdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjphZGRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpyZW1vdmVMaXN0ZW5lcik6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpoYXNMaXN0ZW5lciBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpjbG9uZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnNl
dEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlQXJlYTo6aXRlbXMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6b3Bl
bkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhOjpkaXNwYXRjaEV2ZW50cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
U3RvcmFnZUFyZWE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpzZWN1
cml0eU9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjppc0VwaGVt
ZXJhbCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGVMb2Nh
bFN0b3JhZ2VNYXApOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6ZmluZFN0b3Jh
Z2VBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmdldE9yQ3Jl
YXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFn
ZXI6OmdldE9yQ3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmg6CisgICAgICAgIChX
ZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdl
TWFuYWdlcjo6bG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZU1hbmFnZXI6OndvcmtRdWV1ZSBjb25zdCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpU
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpUcmFuc2ll
bnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6On5UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmdldE9y
Q3JlYXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpUcmFuc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2U6Om9yaWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpUcmFuc2llbnRM
b2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxs
U3RvcmFnZUFyZWFzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5z
aWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VHJh
bnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjcmVhdGUpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6Y2FuUmVxdWVzdFVzZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKToKKyAgICAgICAgKiBT
b3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KwogMjAxOS0wOC0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJlbW92ZSBzcGVjdWxhdGl2ZSB3b3JrYXJvdW5kIGZvciB1cGxvYWQgY3Jh
c2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9M
b2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL0xvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg4ZjJjOWEy
YzE3NDlkZjdhOTZmYjBjMTIzOTg2MWU1NzQ0OGMxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VOYW1lc3BhY2Uu
Y3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCIKKworI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L1NlY3VyaXR5T3JpZ2luRGF0YS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKKy8vIEZJWE1FOiBUaGUgcXVvdGEgdmFsdWUgaXMgY29waWVkIGZy
b20gR3JvdXBTZXR0aW5ncy5jcHAuCisvLyBXZSBzaG91bGQgaW52ZXN0aWdhdGUgYSB3YXkgdG8g
c2hhcmUgaXQgd2l0aCBXZWJDb3JlLgorTG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UoU3RvcmFnZU1hbmFnZXImIHN0b3JhZ2VNYW5hZ2VyLCB1aW50NjRfdCBzdG9y
YWdlTmFtZXNwYWNlSUQpCisgICAgOiBtX3N0b3JhZ2VNYW5hZ2VyKHN0b3JhZ2VNYW5hZ2VyKQor
ICAgICwgbV9xdW90YUluQnl0ZXMoU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFnZURhdGFiYXNl
UXVvdGFJbkJ5dGVzKQoreworfQorCitMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6On5Mb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UoKQoreworfQorCithdXRvIExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JD
cmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbiwgSXNF
cGhlbWVyYWwgaXNFcGhlbWVyYWwpIC0+IFJlZjxTdG9yYWdlQXJlYT4KK3sKKyAgICByZXR1cm4g
Km1fc3RvcmFnZUFyZWFNYXAuZW5zdXJlKHNlY3VyaXR5T3JpZ2luLCBbJl0oKSBtdXRhYmxlIHsK
KyAgICAgICAgcmV0dXJuIFN0b3JhZ2VBcmVhOjpjcmVhdGUoaXNFcGhlbWVyYWwgPT0gSXNFcGhl
bWVyYWw6OlllcyA/IG51bGxwdHIgOiB0aGlzLCBXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luKSwgbV9x
dW90YUluQnl0ZXMpOworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6OmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBhdXRvIG9yaWdpbkFuZFN0
b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5maW5kKHNlY3VyaXR5T3JpZ2luKTsKKyAgICBp
ZiAob3JpZ2luQW5kU3RvcmFnZUFyZWEgIT0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKSkKKyAgICAg
ICAgb3JpZ2luQW5kU3RvcmFnZUFyZWEtPnZhbHVlLT5jbGVhcigpOworfQorCit2b2lkIExvY2Fs
U3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKQoreworICAgIGZvciAoYXV0
byBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpCisgICAgICAgIHN0b3Jh
Z2VBcmVhLT5jbGVhcigpOworfQorCitWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6OmVwaGVtZXJhbE9yaWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxT
ZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdG9yYWdl
QXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCFzdG9yYWdl
QXJlYS0+aXRlbXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChzdG9y
YWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgfQorICAgIHJldHVybiBvcmlnaW5zOwor
fQorCit2b2lkIExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xvbmVUbyhMb2NhbFN0b3JhZ2VOYW1l
c3BhY2UmIG5ld0xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKK3sKKyAgICBmb3IgKGF1dG8mIHBhaXIg
OiBtX3N0b3JhZ2VBcmVhTWFwKQorICAgICAgICBuZXdMb2NhbFN0b3JhZ2VOYW1lc3BhY2UubV9z
dG9yYWdlQXJlYU1hcC5hZGQocGFpci5rZXksIHBhaXIudmFsdWUtPmNsb25lKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yYWNlZWUyM2I5OWFiMGUzMTM1ZjU2M2Y0NTFmNTc2ZTEwMzZkMzE0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3Rv
cmFnZU5hbWVzcGFjZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFN0b3JhZ2VBcmVhOworY2xhc3MgU3RvcmFnZU1h
bmFnZXI7CisKK2NsYXNzIExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZShTdG9yYWdlTWFuYWdlciYgc3RvcmFnZU1hbmFnZXIsIHVp
bnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IExvY2FsU3RvcmFnZU5hbWVzcGFjZShzdG9yYWdlTWFuYWdlciwgc3RvcmFnZU5hbWVz
cGFjZUlEKSk7CisgICAgfQorCisgICAgfkxvY2FsU3RvcmFnZU5hbWVzcGFjZSgpOworCisgICAg
U3RvcmFnZU1hbmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gJm1fc3RvcmFn
ZU1hbmFnZXI7IH0KKworICAgIGVudW0gY2xhc3MgSXNFcGhlbWVyYWwgOiBib29sIHsgTm8sIFll
cyB9OworICAgIFJlZjxTdG9yYWdlQXJlYT4gZ2V0T3JDcmVhdGVTdG9yYWdlQXJlYShXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmJiwgSXNFcGhlbWVyYWwpOworCisgICAgdm9pZCBjbGVhclN0
b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYpOworICAgIHZvaWQgY2xlYXJBbGxTdG9yYWdlQXJlYXMoKTsKKworICAgIFZlY3RvcjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGVwaGVtZXJhbE9yaWdpbnMoKSBjb25zdDsKKyAgICB2
b2lkIGNsb25lVG8oTG9jYWxTdG9yYWdlTmFtZXNwYWNlJiBuZXdMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UpOworCitwcml2YXRlOgorICAgIExvY2FsU3RvcmFnZU5hbWVzcGFjZShTdG9yYWdlTWFuYWdl
ciYsIHVpbnQ2NF90IHN0b3JhZ2VNYW5hZ2VySUQpOworCisgICAgU3RvcmFnZU1hbmFnZXImIG1f
c3RvcmFnZU1hbmFnZXI7CisgICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXM7CisKKyAgICBIYXNo
TWFwPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9z
dG9yYWdlQXJlYU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1Nlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTg0NGVkYTQzZmU0ODBjNjU3Mzlj
MmIwYTU1MGJkNDJiNzJjMWE2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5jcHAKQEAgLTAs
MCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmgiCisKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1Nl
c3Npb25TdG9yYWdlTmFtZXNwYWNlOjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBx
dW90YUluQnl0ZXMpCisgICAgOiBtX3F1b3RhSW5CeXRlcyhxdW90YUluQnl0ZXMpCit7Cit9CisK
K1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlOjp+U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKQorewor
fQorCit2b2lkIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlOjphZGRBbGxvd2VkQ29ubmVjdGlvbihJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGFsbG93ZWRDb25uZWN0aW9uKQoreworICAgIG1fYWxs
b3dlZENvbm5lY3Rpb25zLmFkZChhbGxvd2VkQ29ubmVjdGlvbik7Cit9CisKKwordm9pZCBTZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZTo6cmVtb3ZlQWxsb3dlZENvbm5lY3Rpb24oSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCBhbGxvd2VkQ29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlQobV9hbGxvd2Vk
Q29ubmVjdGlvbnMuY29udGFpbnMoYWxsb3dlZENvbm5lY3Rpb24pKTsKKyAgICBtX2FsbG93ZWRD
b25uZWN0aW9ucy5yZW1vdmUoYWxsb3dlZENvbm5lY3Rpb24pOworfQorYXV0byBTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbkRhdGEm
JiBzZWN1cml0eU9yaWdpbikgLT4gUmVmPFN0b3JhZ2VBcmVhPgoreworICAgIHJldHVybiAqbV9z
dG9yYWdlQXJlYU1hcC5lbnN1cmUoc2VjdXJpdHlPcmlnaW4sIFt0aGlzLCAmc2VjdXJpdHlPcmln
aW5dKCkgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiBTdG9yYWdlQXJlYTo6Y3JlYXRlKG51bGxw
dHIsIFdURk1vdmUoc2VjdXJpdHlPcmlnaW4pLCBtX3F1b3RhSW5CeXRlcyk7CisgICAgfSkuaXRl
cmF0b3ItPnZhbHVlLmNvcHlSZWYoKTsKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZTo6Y2xvbmVUbyhTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSYgbmV3U2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSwg
bmV3U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuaXNFbXB0eSgpKTsKKworICAgIGZvciAoYXV0byYg
cGFpciA6IG1fc3RvcmFnZUFyZWFNYXApCisgICAgICAgIG5ld1Nlc3Npb25TdG9yYWdlTmFtZXNw
YWNlLm1fc3RvcmFnZUFyZWFNYXAuYWRkKHBhaXIua2V5LCBwYWlyLnZhbHVlLT5jbG9uZSgpKTsK
K30KKworVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U6
Om9yaWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdp
bnM7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1h
cC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhLT5pdGVtcygpLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKHN0b3JhZ2VBcmVhLT5zZWN1cml0eU9yaWdp
bigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gb3JpZ2luczsKK30KKwordm9pZCBTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZTo6Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKQoreworICAgIGF1dG8gb3JpZ2luQW5kU3Rv
cmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhTWFwLmZpbmQoc2VjdXJpdHlPcmlnaW4pOworICAgIGlm
IChvcmlnaW5BbmRTdG9yYWdlQXJlYSAhPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpKQorICAgICAg
ICBvcmlnaW5BbmRTdG9yYWdlQXJlYS0+dmFsdWUtPmNsZWFyKCk7Cit9CisKK3ZvaWQgU2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKK3sKKyAgICBmb3IgKGF1
dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkKKyAgICAgICAgc3Rv
cmFnZUFyZWEtPmNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1Nlc3Npb25TdG9yYWdl
TmFtZXNwYWNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWJmNDNmZWQzODc2NTI1ZGEyNDRj
NWNiZGY2YWJjNmQ5ZGNkNTIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmgKQEAgLTAsMCAr
MSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb25u
ZWN0aW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU3RvcmFnZUFyZWE7CisKK2NsYXNzIFNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZT4gY3JlYXRlKHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHF1b3RhSW5C
eXRlcykpOworICAgIH0KKyAgICAKKyAgICB+U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKTsKKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUFyZWFNYXAuaXNFbXB0
eSgpOyB9CisKKyAgICBjb25zdCBIYXNoU2V0PElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQ+JiBh
bGxvd2VkQ29ubmVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRDb25uZWN0aW9uczsg
fQorICAgIHZvaWQgYWRkQWxsb3dlZENvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCk7CisgICAgdm9pZCByZW1vdmVBbGxvd2VkQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OlVu
aXF1ZUlEKTsKKworICAgIFJlZjxTdG9yYWdlQXJlYT4gZ2V0T3JDcmVhdGVTdG9yYWdlQXJlYShX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJik7CisKKyAgICB2b2lkIGNsb25lVG8oU2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2UmIG5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlKTsKKworICAgIFZl
Y3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnMoKSBjb25zdDsKKworICAg
IHZvaWQgY2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmKTsKKyAgICB2b2lkIGNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7CisKK3By
aXZhdGU6CisgICAgZXhwbGljaXQgU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVv
dGFJbkJ5dGVzKTsKKworICAgIEhhc2hTZXQ8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRD4gbV9h
bGxvd2VkQ29ubmVjdGlvbnM7CisgICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXM7CisKKyAgICBI
YXNoTWFwPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4g
bV9zdG9yYWdlQXJlYU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTA1NzM5ZGJhOTA1NjlmOTMzYjZhMzdmMzI5ZmJjNGEyMjc1MWViMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlQXJlYS5jcHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorCisjaW5jbHVkZSAi
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uu
aCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiU3RvcmFn
ZU1hbmFnZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitTdG9yYWdlQXJlYTo6U3Rv
cmFnZUFyZWEoTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UsIGNv
bnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5C
eXRlcykKKyAgICA6IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKGxvY2FsU3RvcmFnZU5hbWVzcGFj
ZSA/IG1ha2VXZWFrUHRyKCpsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpIDogbnVsbHB0cikKKyAgICAs
IG1fc2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4pCisgICAgLCBtX3F1b3RhSW5CeXRlcyhx
dW90YUluQnl0ZXMpCisgICAgLCBtX3N0b3JhZ2VNYXAoU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVv
dGFJbkJ5dGVzKSkKK3sKK30KKworU3RvcmFnZUFyZWE6On5TdG9yYWdlQXJlYSgpCit7CisgICAg
QVNTRVJUKG1fZXZlbnRMaXN0ZW5lcnMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fbG9jYWxT
dG9yYWdlTmFtZXNwYWNlKTsKKworICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQorICAg
ICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbG9zZSgpOworfQorCit2b2lkIFN0b3JhZ2VB
cmVhOjphZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb25JRCwg
dWludDY0X3Qgc3RvcmFnZU1hcElEKQoreworICAgIEFTU0VSVCghbV9ldmVudExpc3RlbmVycy5j
b250YWlucyhzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpKTsKKyAg
ICBtX2V2ZW50TGlzdGVuZXJzLmFkZChzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3Jh
Z2VNYXBJRCkpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhOjpyZW1vdmVMaXN0ZW5lcihJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb25JRCwgdWludDY0X3Qgc3RvcmFnZU1hcElEKQor
eworICAgIEFTU0VSVChpc0VwaGVtZXJhbCgpIHx8IG1fZXZlbnRMaXN0ZW5lcnMuY29udGFpbnMo
c3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpKSk7CisgICAgbV9ldmVu
dExpc3RlbmVycy5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFw
SUQpKTsKK30KKworYm9vbCBTdG9yYWdlQXJlYTo6aGFzTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9ldmVudExpc3RlbmVycy5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihjb25u
ZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpOworfQorCitSZWY8U3RvcmFnZUFyZWE+IFN0b3JhZ2VB
cmVhOjpjbG9uZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX2xvY2FsU3RvcmFnZU5hbWVzcGFj
ZSk7CisKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gU3RvcmFnZUFyZWE6OmNyZWF0ZShudWxscHRy
LCBtX3NlY3VyaXR5T3JpZ2luLCBtX3F1b3RhSW5CeXRlcyk7CisgICAgc3RvcmFnZUFyZWEtPm1f
c3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcDsKKworICAgIHJldHVybiBzdG9yYWdlQXJlYTsKK30K
Kwordm9pZCBTdG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNv
dXJjZUNvbm5lY3Rpb24sIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgYm9v
bCYgcXVvdGFFeGNlcHRpb24pCit7CisgICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5l
ZWRlZCgpOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworCisgICAgYXV0byBuZXdTdG9yYWdlTWFw
ID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2Vw
dGlvbik7CisgICAgaWYgKG5ld1N0b3JhZ2VNYXApCisgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdU
Rk1vdmUobmV3U3RvcmFnZU1hcCk7CisKKyAgICBpZiAocXVvdGFFeGNlcHRpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQorICAgICAgICBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlLT5zZXRJdGVtKGtleSwgdmFsdWUpOworCisgICAgZGlzcGF0Y2hF
dmVudHMoc291cmNlQ29ubmVjdGlvbiwgc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCBvbGRWYWx1
ZSwgdmFsdWUsIHVybFN0cmluZyk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW1zKGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcykKK3sKKyAgICAvLyBJbXBvcnQgaXRl
bXMgZnJvbSB3ZWIgcHJvY2VzcyBpZiBpdGVtcyBhcmUgbm90IHN0b3JlZCBvbiBkaXNrLgorICAg
IGlmICghaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBp
dGVtIDogaXRlbXMpIHsKKyAgICAgICAgU3RyaW5nIG9sZFZhbHVlOworICAgICAgICBib29sIHF1
b3RhRXhjZXB0aW9uOworICAgICAgICBhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAt
PnNldEl0ZW0oaXRlbS5rZXksIGl0ZW0udmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbik7
CisgICAgICAgIGlmIChuZXdTdG9yYWdlTWFwKQorICAgICAgICAgICAgbV9zdG9yYWdlTWFwID0g
V1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICAgICAgCisgICAgICAgIGlmIChxdW90YUV4Y2Vw
dGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6
OnJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCB1
aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpCit7CisgICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRl
ZCgpOworCisgICAgU3RyaW5nIG9sZFZhbHVlOworICAgIGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1f
c3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKKyAgICBpZiAobmV3U3RvcmFn
ZU1hcCkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKwor
ICAgIGlmIChvbGRWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
bG9jYWxTdG9yYWdlRGF0YWJhc2UpCisgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPnJl
bW92ZUl0ZW0oa2V5KTsKKworICAgIGRpc3BhdGNoRXZlbnRzKHNvdXJjZUNvbm5lY3Rpb24sIHNv
dXJjZVN0b3JhZ2VBcmVhSUQsIGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCB1cmxTdHJpbmcpOwor
fQorCit2b2lkIFN0b3JhZ2VBcmVhOjpjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNv
dXJjZUNvbm5lY3Rpb24sIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKQoreworICAgIG9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQo
KTsKKworICAgIGlmICghbV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsK
KworICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQorICAgICAgICBtX2xvY2FsU3RvcmFn
ZURhdGFiYXNlLT5jbGVhcigpOworCisgICAgZGlzcGF0Y2hFdmVudHMoc291cmNlQ29ubmVjdGlv
biwgc291cmNlU3RvcmFnZUFyZWFJRCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgdXJs
U3RyaW5nKTsKK30KKworY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIFN0b3JhZ2VBcmVh
OjppdGVtcygpIGNvbnN0Cit7CisgICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRl
ZCgpOworCisgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+aXRlbXMoKTsKK30KKwordm9pZCBTdG9y
YWdlQXJlYTo6Y2xlYXIoKQoreworICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0
ZShtX3F1b3RhSW5CeXRlcyk7CisKKyAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkgewor
ICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbG9zZSgpOworICAgICAgICBtX2xvY2Fs
U3RvcmFnZURhdGFiYXNlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8gaXQgPSBt
X2V2ZW50TGlzdGVuZXJzLmJlZ2luKCksIGVuZCA9IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2Nvbm5l
Y3Rpb25JRCA9IGl0LT5maXJzdCwgZGVzdGluYXRpb25TdG9yYWdlQXJlYUlEID0gaXQtPnNlY29u
ZF0geworICAgICAgICAgICAgaWYgKGF1dG8qIGNvbm5lY3Rpb24gPSBJUEM6OkNvbm5lY3Rpb246
OmNvbm5lY3Rpb24oY29ubmVjdGlvbklEKSkKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLT5z
ZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6Q2xlYXJDYWNoZSgpLCBkZXN0aW5hdGlvblN0
b3JhZ2VBcmVhSUQpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6
Om9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKSBjb25zdAoreworICAgIGlmICgh
bV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyKCkpOworICAgIC8vIFdlIG9wZW4gdGhlIGRhdGFiYXNlIGhlcmUgZXZlbiBp
ZiB3ZSd2ZSBhbHJlYWR5IGltcG9ydGVkIG91ciBpdGVtcyB0byBlbnN1cmUgdGhhdCB0aGUgZGF0
YWJhc2UgaXMgb3BlbiBpZiB3ZSBuZWVkIHRvIHdyaXRlIHRvIGl0LgorICAgIGlmICghbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZSkKKyAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSA9IExvY2Fs
U3RvcmFnZURhdGFiYXNlOjpjcmVhdGUobV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VN
YW5hZ2VyKCktPndvcmtRdWV1ZSgpLCAqbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VN
YW5hZ2VyKCktPmxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcigpLCBtX3NlY3VyaXR5T3JpZ2lu
KTsKKworICAgIGlmIChtX2RpZEltcG9ydEl0ZW1zRnJvbURhdGFiYXNlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5pbXBvcnRJdGVtcygqbV9zdG9yYWdl
TWFwKTsKKyAgICBtX2RpZEltcG9ydEl0ZW1zRnJvbURhdGFiYXNlID0gdHJ1ZTsKK30KKwordm9p
ZCBTdG9yYWdlQXJlYTo6ZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBz
b3VyY2VDb25uZWN0aW9uLCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvIGl0ID0gbV9l
dmVudExpc3RlbmVycy5iZWdpbigpLCBlbmQgPSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgc291cmNlU3RvcmFnZUFyZWFJRCA9IGl0LT5maXJzdCA9
PSBzb3VyY2VDb25uZWN0aW9uID8gc291cmNlU3RvcmFnZUFyZWFJRCA6IDA7CisKKyAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb25uZWN0aW9uSUQgPSBpdC0+Zmlyc3QsIHNvdXJj
ZVN0b3JhZ2VBcmVhSUQsIGRlc3RpbmF0aW9uU3RvcmFnZUFyZWFJRCA9IGl0LT5zZWNvbmQsIGtl
eSA9IGtleS5pc29sYXRlZENvcHkoKSwgb2xkVmFsdWUgPSBvbGRWYWx1ZS5pc29sYXRlZENvcHko
KSwgbmV3VmFsdWUgPSBuZXdWYWx1ZS5pc29sYXRlZENvcHkoKSwgdXJsU3RyaW5nID0gdXJsU3Ry
aW5nLmlzb2xhdGVkQ29weSgpXSB7CisgICAgICAgICAgICBpZiAoYXV0byogY29ubmVjdGlvbiA9
IElQQzo6Q29ubmVjdGlvbjo6Y29ubmVjdGlvbihjb25uZWN0aW9uSUQpKQorICAgICAgICAgICAg
ICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaXNwYXRjaFN0
b3JhZ2VFdmVudChzb3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwg
dXJsU3RyaW5nKSwgZGVzdGluYXRpb25TdG9yYWdlQXJlYUlEKTsKKyAgICAgICAgfSk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDFlYTg1
Yjg2MWYzNWY2NmM0MTljNzJjOTAwNzlmOGU3OWIyMTcyOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oCkBAIC0w
LDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU3RvcmFnZU1hcDsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExvY2FsU3RvcmFnZURhdGFiYXNlOworY2xhc3MgTG9j
YWxTdG9yYWdlTmFtZXNwYWNlOworCitjbGFzcyBTdG9yYWdlQXJlYSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxTdG9yYWdlQXJlYT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3Rv
cmFnZUFyZWE+IGNyZWF0ZShMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIGxvY2FsU3RvcmFnZU5hbWVz
cGFjZSwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwg
dW5zaWduZWQgcXVvdGFJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU3RvcmFnZUFyZWEobG9jYWxTdG9yYWdlTmFtZXNwYWNlLCBzZWN1cml0eU9yaWdpbiwgcXVv
dGFJbkJ5dGVzKSk7CisgICAgfQorICAgIAorICAgIH5TdG9yYWdlQXJlYSgpOworCisgICAgY29u
c3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2VjdXJpdHlPcmlnaW47IH0KKworICAgIHZvaWQgYWRkTGlzdGVuZXIoSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Qgc3RvcmFnZU1hcElEKTsKKyAgICB2b2lkIHJl
bW92ZUxpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90IHN0b3JhZ2VN
YXBJRCk7CisgICAgYm9vbCBoYXNMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1
aW50NjRfdCBzdG9yYWdlTWFwSUQpIGNvbnN0OworCisgICAgUmVmPFN0b3JhZ2VBcmVhPiBjbG9u
ZSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQg
c291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBi
b29sJiBxdW90YUV4Y2VwdGlvbik7CisgICAgdm9pZCBzZXRJdGVtcyhjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYpOworICAgIHZvaWQgcmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVu
aXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisgICAgdm9pZCBjbGVh
cihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIHVpbnQ2NF90IHNv
dXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKworICAgIGNvbnN0
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcygpIGNvbnN0OworICAgIHZvaWQgY2xlYXIo
KTsKKworICAgIGJvb2wgaXNFcGhlbWVyYWwoKSBjb25zdCB7IHJldHVybiAhbV9sb2NhbFN0b3Jh
Z2VOYW1lc3BhY2U7IH0KKworICAgIHZvaWQgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5l
ZWRlZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0b3JhZ2VBcmVhKExvY2FsU3RvcmFnZU5h
bWVzcGFjZSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIHVuc2lnbmVkIHF1
b3RhSW5CeXRlcyk7CisKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYg
bmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdDsKKworICAgIC8vIFdpbGwg
YmUgbnVsbCBpZiB0aGUgc3RvcmFnZSBhcmVhIGJlbG9uZ3MgdG8gYSBzZXNzaW9uIHN0b3JhZ2Ug
bmFtZXNwYWNlIG9yIHRoZSBzdG9yYWdlIGFyZWEgaXMgaW4gYW4gZXBoZW1lcmFsIHNlc3Npb24u
CisgICAgV2Vha1B0cjxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+IG1fbG9jYWxTdG9yYWdlTmFtZXNw
YWNlOworICAgIG11dGFibGUgUmVmUHRyPExvY2FsU3RvcmFnZURhdGFiYXNlPiBtX2xvY2FsU3Rv
cmFnZURhdGFiYXNlOworICAgIG11dGFibGUgYm9vbCBtX2RpZEltcG9ydEl0ZW1zRnJvbURhdGFi
YXNlIHsgZmFsc2UgfTsKKworICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBtX3NlY3Vy
aXR5T3JpZ2luOworICAgIHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzOworCisgICAgUmVmUHRyPFdl
YkNvcmU6OlN0b3JhZ2VNYXA+IG1fc3RvcmFnZU1hcDsKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50NjRfdD4+IG1fZXZlbnRMaXN0ZW5lcnM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGExN2M1
NzljYmFhNTdlMTkyNTFhNjM0MGJlZGJkMWVhZGI3ZDY5ODIuLmI3NGI5MTU5NGQzYTk2MDllZTdi
MzdhNDdlNzQ0YTE0MDI0YzZmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjgsOCArMjgs
MTIgQEAKIAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAiTG9j
YWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlTmFtZXNw
YWNlLmgiCisjaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJT
dG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJTdG9yYWdlTWFuYWdlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiVHJhbnNpZW50TG9jYWxT
dG9yYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3Vy
aXR5T3JpZ2luSGFzaC5oPgpAQCAtNDIsNDQ3ICs0Niw4IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jbGFzcyBTdG9yYWdlTWFuYWdlcjo6U3RvcmFn
ZUFyZWEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZU1hbmFnZXI6OlN0b3Jh
Z2VBcmVhPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdG9yYWdlQXJlYT4gY3JlYXRlKExv
Y2FsU3RvcmFnZU5hbWVzcGFjZSosIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYsIHVuc2lnbmVk
IHF1b3RhSW5CeXRlcyk7Ci0gICAgflN0b3JhZ2VBcmVhKCk7Ci0KLSAgICBjb25zdCBXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9z
ZWN1cml0eU9yaWdpbjsgfQotCi0gICAgdm9pZCBhZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpOwotICAgIHZvaWQgcmVtb3ZlTGlzdGVu
ZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Qgc3RvcmFnZU1hcElEKTsKLSAg
ICBib29sIGhhc0xpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90IHN0
b3JhZ2VNYXBJRCkgY29uc3Q7Ci0KLSAgICBSZWY8U3RvcmFnZUFyZWE+IGNsb25lKCkgY29uc3Q7
Ci0KLSAgICB2b2lkIHNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25u
ZWN0aW9uLCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGJvb2wmIHF1b3Rh
RXhjZXB0aW9uKTsKLSAgICB2b2lkIHNldEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+Jik7Ci0gICAgdm9pZCByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291
cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKLSAgICB2b2lkIGNsZWFyKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qgc291cmNlU3RvcmFn
ZUFyZWFJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwotCi0gICAgY29uc3QgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4mIGl0ZW1zKCkgY29uc3Q7Ci0gICAgdm9pZCBjbGVhcigpOwotCi0gICAg
Ym9vbCBpc0VwaGVtZXJhbCgpIGNvbnN0IHsgcmV0dXJuICFtX2xvY2FsU3RvcmFnZU5hbWVzcGFj
ZTsgfQotCi0gICAgdm9pZCBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCkgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgU3RvcmFnZUFyZWEoTG9jYWxTdG9yYWdlTmFt
ZXNwYWNlKiwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVz
KTsKLQotICAgIHZvaWQgZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBz
b3VyY2VDb25uZWN0aW9uLCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0OwotCi0gICAgLy8gV2lsbCBiZSBudWxsIGlm
IHRoZSBzdG9yYWdlIGFyZWEgYmVsb25ncyB0byBhIHNlc3Npb24gc3RvcmFnZSBuYW1lc3BhY2Ug
b3IgdGhlIHN0b3JhZ2UgYXJlYSBpcyBpbiBhbiBlcGhlbWVyYWwgc2Vzc2lvbi4KLSAgICBXZWFr
UHRyPExvY2FsU3RvcmFnZU5hbWVzcGFjZT4gbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2U7Ci0gICAg
bXV0YWJsZSBSZWZQdHI8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IG1fbG9jYWxTdG9yYWdlRGF0YWJh
c2U7Ci0gICAgbXV0YWJsZSBib29sIG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0YWJhc2UgeyBmYWxz
ZSB9OwotCi0gICAgU2VjdXJpdHlPcmlnaW5EYXRhIG1fc2VjdXJpdHlPcmlnaW47Ci0gICAgdW5z
aWduZWQgbV9xdW90YUluQnl0ZXM7Ci0KLSAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbV9zdG9yYWdl
TWFwOwotICAgIEhhc2hTZXQ8c3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVp
bnQ2NF90Pj4gbV9ldmVudExpc3RlbmVyczsKLX07Ci0KLWNsYXNzIFN0b3JhZ2VNYW5hZ2VyOjpM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TG9jYWxT
dG9yYWdlTmFtZXNwYWNlPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPExvY2FsU3RvcmFnZU5hbWVz
cGFjZT4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiBj
cmVhdGUoU3RvcmFnZU1hbmFnZXImLCB1aW50NjRfdCBzdG9yYWdlTWFuYWdlcklEKTsKLSAgICB+
TG9jYWxTdG9yYWdlTmFtZXNwYWNlKCk7Ci0KLSAgICBTdG9yYWdlTWFuYWdlciogc3RvcmFnZU1h
bmFnZXIoKSBjb25zdCB7IHJldHVybiAmbV9zdG9yYWdlTWFuYWdlcjsgfQotCi0gICAgZW51bSBj
bGFzcyBJc0VwaGVtZXJhbCA6IGJvb2wgeyBObywgWWVzIH07Ci0gICAgUmVmPFN0b3JhZ2VBcmVh
PiBnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YSYmLCBJc0VwaGVtZXJh
bCk7Ci0KLSAgICB2b2lkIGNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJik7Ci0gICAgdm9pZCBjbGVhckFsbFN0b3JhZ2VBcmVhcygpOwotCi0g
ICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gZXBoZW1lcmFsT3JpZ2lucygpIGNvbnN0Owot
ICAgIHZvaWQgY2xvbmVUbyhMb2NhbFN0b3JhZ2VOYW1lc3BhY2UmIG5ld0xvY2FsU3RvcmFnZU5h
bWVzcGFjZSk7Ci0KLXByaXZhdGU6Ci0gICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlKFN0b3JhZ2VN
YW5hZ2VyJiwgdWludDY0X3Qgc3RvcmFnZU1hbmFnZXJJRCk7Ci0KLSAgICBTdG9yYWdlTWFuYWdl
ciYgbV9zdG9yYWdlTWFuYWdlcjsKLSAgICB1bnNpZ25lZCBtX3F1b3RhSW5CeXRlczsKLQotICAg
IEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBtX3N0b3Jh
Z2VBcmVhTWFwOwotfTsKLQogLy8gU3VnZ2VzdGVkIGJ5IGh0dHBzOi8vd3d3LnczLm9yZy9UUi93
ZWJzdG9yYWdlLyNkaXNrLXNwYWNlCi1jb25zdCB1bnNpZ25lZCBsb2NhbFN0b3JhZ2VEYXRhYmFz
ZVF1b3RhSW5CeXRlcyA9IDUgKiAxMDI0ICogMTAyNDsKLQotY2xhc3MgU3RvcmFnZU1hbmFnZXI6
OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZSgpKTsKLSAgICB9Ci0KLSAgICB+VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgUmVmPFN0b3JhZ2VBcmVhPiBnZXRPckNyZWF0ZVN0b3JhZ2VBcmVh
KFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3JpZ2luKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICptX3N0b3JhZ2VBcmVhTWFwLmVuc3VyZShzZWN1cml0eU9yaWdpbiwgW3RoaXMsICZzZWN1
cml0eU9yaWdpbl0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHJldHVybiBTdG9yYWdlQXJlYTo6
Y3JlYXRlKG51bGxwdHIsIFdURk1vdmUoc2VjdXJpdHlPcmlnaW4pLCBtX3F1b3RhSW5CeXRlcyk7
Ci0gICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5jb3B5UmVmKCk7Ci0gICAgfQotCi0gICAgVmVj
dG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2lucygpIGNvbnN0Ci0gICAgewotICAgICAgICBW
ZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwotCi0gICAgICAgIGZvciAoY29uc3Qg
YXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKSB7Ci0gICAgICAg
ICAgICBpZiAoIXN0b3JhZ2VBcmVhLT5pdGVtcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBvcmlnaW5zLmFwcGVuZChzdG9yYWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gb3JpZ2luczsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyU3Rv
cmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0
eU9yaWdpbikKLSAgICB7Ci0gICAgICAgIGF1dG8gb3JpZ2luQW5kU3RvcmFnZUFyZWEgPSBtX3N0
b3JhZ2VBcmVhTWFwLmZpbmQoc2VjdXJpdHlPcmlnaW4pOwotICAgICAgICBpZiAob3JpZ2luQW5k
U3RvcmFnZUFyZWEgIT0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKSkKLSAgICAgICAgICAgIG9yaWdp
bkFuZFN0b3JhZ2VBcmVhLT52YWx1ZS0+Y2xlYXIoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFy
QWxsU3RvcmFnZUFyZWFzKCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEg
OiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQotICAgICAgICAgICAgc3RvcmFnZUFyZWEtPmNs
ZWFyKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFRyYW5zaWVudExvY2FsU3Rv
cmFnZU5hbWVzcGFjZSgpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IHVuc2lnbmVkIG1fcXVv
dGFJbkJ5dGVzID0gbG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90YUluQnl0ZXM7Ci0KLSAgICBIYXNo
TWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9zdG9yYWdlQXJl
YU1hcDsKLX07Ci0KLWF1dG8gU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpjcmVhdGUoTG9j
YWxTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UsIGNvbnN0IFNlY3VyaXR5
T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4sIHVuc2lnbmVkIHF1b3RhSW5CeXRlcykgLT4gUmVm
PFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYT4KLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTdG9yYWdlQXJlYShsb2NhbFN0b3JhZ2VOYW1lc3BhY2UsIHNlY3VyaXR5T3JpZ2luLCBxdW90
YUluQnl0ZXMpKTsKLX0KLQotU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJl
YShMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSwgY29uc3QgU2Vj
dXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKQot
ICAgIDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UobG9jYWxTdG9yYWdlTmFtZXNwYWNlID8gbWFr
ZVdlYWtQdHIoKmxvY2FsU3RvcmFnZU5hbWVzcGFjZSkgOiBudWxscHRyKQotICAgICwgbV9zZWN1
cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbikKLSAgICAsIG1fcXVvdGFJbkJ5dGVzKHF1b3RhSW5C
eXRlcykKLSAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0
ZXMpKQotewotfQotCi1TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6On5TdG9yYWdlQXJlYSgp
Ci17Ci0gICAgQVNTRVJUKG1fZXZlbnRMaXN0ZW5lcnMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
IW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKLQotICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFi
YXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbG9zZSgpOwotfQotCi12b2lk
IFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6YWRkTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkKLXsKLSAgICBB
U1NFUlQoIW1fZXZlbnRMaXN0ZW5lcnMuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlv
bklELCBzdG9yYWdlTWFwSUQpKSk7Ci0gICAgbV9ldmVudExpc3RlbmVycy5hZGQoc3RkOjptYWtl
X3BhaXIoY29ubmVjdGlvbklELCBzdG9yYWdlTWFwSUQpKTsKLX0KLQotdm9pZCBTdG9yYWdlTWFu
YWdlcjo6U3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQgY29ubmVjdGlvbklELCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpCi17Ci0gICAgQVNTRVJUKGlz
RXBoZW1lcmFsKCkgfHwgbV9ldmVudExpc3RlbmVycy5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihj
b25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpKTsKLSAgICBtX2V2ZW50TGlzdGVuZXJzLnJlbW92
ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpOwotfQotCi1ib29s
IFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6aGFzTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9ldmVudExpc3RlbmVycy5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihjb25u
ZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpOwotfQotCi1SZWY8U3RvcmFnZU1hbmFnZXI6OlN0b3Jh
Z2VBcmVhPiBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6OmNsb25lKCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQoIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKLQotICAgIGF1dG8gc3RvcmFnZUFy
ZWEgPSBTdG9yYWdlQXJlYTo6Y3JlYXRlKG51bGxwdHIsIG1fc2VjdXJpdHlPcmlnaW4sIG1fcXVv
dGFJbkJ5dGVzKTsKLSAgICBzdG9yYWdlQXJlYS0+bV9zdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFw
OwotCi0gICAgcmV0dXJuIHN0b3JhZ2VBcmVhOwotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5l
Y3Rpb24sIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgYm9vbCYgcXVvdGFF
eGNlcHRpb24pCi17Ci0gICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOwot
Ci0gICAgU3RyaW5nIG9sZFZhbHVlOwotCi0gICAgYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9y
YWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbik7Ci0g
ICAgaWYgKG5ld1N0b3JhZ2VNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3
U3RvcmFnZU1hcCk7Ci0KLSAgICBpZiAocXVvdGFFeGNlcHRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFn
ZURhdGFiYXNlLT5zZXRJdGVtKGtleSwgdmFsdWUpOwotCi0gICAgZGlzcGF0Y2hFdmVudHMoc291
cmNlQ29ubmVjdGlvbiwgc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUs
IHVybFN0cmluZyk7Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpzZXRJ
dGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMpCi17Ci0gICAgLy8gSW1w
b3J0IGl0ZW1zIGZyb20gd2ViIHByb2Nlc3MgaWYgaXRlbXMgYXJlIG5vdCBzdG9yZWQgb24gZGlz
ay4KLSAgICBpZiAoIWlzRXBoZW1lcmFsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAo
YXV0byYgaXRlbSA6IGl0ZW1zKSB7Ci0gICAgICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICAgICAg
Ym9vbCBxdW90YUV4Y2VwdGlvbjsKLSAgICAgICAgYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9y
YWdlTWFwLT5zZXRJdGVtKGl0ZW0ua2V5LCBpdGVtLnZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNl
cHRpb24pOwotICAgICAgICBpZiAobmV3U3RvcmFnZU1hcCkKLSAgICAgICAgICAgIG1fc3RvcmFn
ZU1hcCA9IFdURk1vdmUobmV3U3RvcmFnZU1hcCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocXVv
dGFFeGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rpb246OlVuaXF1
ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBvcGVuRGF0YWJh
c2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7Ci0KLSAgICBTdHJpbmcgb2xkVmFsdWU7Ci0gICAg
YXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFs
dWUpOwotICAgIGlmIChuZXdTdG9yYWdlTWFwKQotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZN
b3ZlKG5ld1N0b3JhZ2VNYXApOwotCi0gICAgaWYgKG9sZFZhbHVlLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkKLSAgICAgICAgbV9s
b2NhbFN0b3JhZ2VEYXRhYmFzZS0+cmVtb3ZlSXRlbShrZXkpOwotCi0gICAgZGlzcGF0Y2hFdmVu
dHMoc291cmNlQ29ubmVjdGlvbiwgc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCBvbGRWYWx1ZSwg
U3RyaW5nKCksIHVybFN0cmluZyk7Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VB
cmVhOjpjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIHVp
bnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewot
ICAgIG9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKLQotICAgIGlmICghbV9z
dG9yYWdlTWFwLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdG9yYWdlTWFw
ID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKLQotICAgIGlmIChtX2xvY2Fs
U3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbGVhcigp
OwotCi0gICAgZGlzcGF0Y2hFdmVudHMoc291cmNlQ29ubmVjdGlvbiwgc291cmNlU3RvcmFnZUFy
ZWFJRCwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgdXJsU3RyaW5nKTsKLX0KLQotY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6
aXRlbXMoKSBjb25zdAotewotICAgIG9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQo
KTsKLQotICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPml0ZW1zKCk7Ci19Ci0KLXZvaWQgU3RvcmFn
ZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpjbGVhcigpCi17Ci0gICAgbV9zdG9yYWdlTWFwID0gU3Rv
cmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKLQotICAgIGlmIChtX2xvY2FsU3RvcmFn
ZURhdGFiYXNlKSB7Ci0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmNsb3NlKCk7Ci0g
ICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UgPSBudWxscHRyOwotICAgIH0KLQotICAgIGZv
ciAoYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKSwgZW5kID0gbV9ldmVudExpc3Rl
bmVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbY29ubmVjdGlvbklEID0gaXQtPmZpcnN0LCBkZXN0aW5hdGlvblN0b3JhZ2VBcmVh
SUQgPSBpdC0+c2Vjb25kXSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogY29ubmVjdGlvbiA9IElQ
Qzo6Q29ubmVjdGlvbjo6Y29ubmVjdGlvbihjb25uZWN0aW9uSUQpKQotICAgICAgICAgICAgICAg
IGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpDbGVhckNhY2hlKCks
IGRlc3RpbmF0aW9uU3RvcmFnZUFyZWFJRCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQotdm9p
ZCBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6Om9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1z
SWZOZWVkZWQoKSBjb25zdAotewotICAgIGlmICghbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3Rv
cmFnZU1hbmFnZXIoKS0+bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIpOwotICAgIC8vIFdl
IG9wZW4gdGhlIGRhdGFiYXNlIGhlcmUgZXZlbiBpZiB3ZSd2ZSBhbHJlYWR5IGltcG9ydGVkIG91
ciBpdGVtcyB0byBlbnN1cmUgdGhhdCB0aGUgZGF0YWJhc2UgaXMgb3BlbiBpZiB3ZSBuZWVkIHRv
IHdyaXRlIHRvIGl0LgotICAgIGlmICghbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkKLSAgICAgICAg
bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSA9IExvY2FsU3RvcmFnZURhdGFiYXNlOjpjcmVhdGUobV9s
b2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2VyKCktPm1fcXVldWUuY29weVJlZigp
LCAqbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VNYW5hZ2VyKCktPm1fbG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyLCBtX3NlY3VyaXR5T3JpZ2luKTsKLQotICAgIGlmIChtX2RpZElt
cG9ydEl0ZW1zRnJvbURhdGFiYXNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xvY2FsU3Rv
cmFnZURhdGFiYXNlLT5pbXBvcnRJdGVtcygqbV9zdG9yYWdlTWFwKTsKLSAgICBtX2RpZEltcG9y
dEl0ZW1zRnJvbURhdGFiYXNlID0gdHJ1ZTsKLX0KLQotdm9pZCBTdG9yYWdlTWFuYWdlcjo6U3Rv
cmFnZUFyZWE6OmRpc3BhdGNoRXZlbnRzKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNl
Q29ubmVjdGlvbiwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdAotewotICAgIGZvciAoYXV0byBpdCA9IG1fZXZlbnRM
aXN0ZW5lcnMuYmVnaW4oKSwgZW5kID0gbV9ldmVudExpc3RlbmVycy5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIHNvdXJjZVN0b3JhZ2VBcmVhSUQgPSBpdC0+Zmlyc3QgPT0gc291
cmNlQ29ubmVjdGlvbiA/IHNvdXJjZVN0b3JhZ2VBcmVhSUQgOiAwOwotCi0gICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbY29ubmVjdGlvbklEID0gaXQtPmZpcnN0LCBzb3VyY2VTdG9y
YWdlQXJlYUlELCBkZXN0aW5hdGlvblN0b3JhZ2VBcmVhSUQgPSBpdC0+c2Vjb25kLCBrZXkgPSBr
ZXkuaXNvbGF0ZWRDb3B5KCksIG9sZFZhbHVlID0gb2xkVmFsdWUuaXNvbGF0ZWRDb3B5KCksIG5l
d1ZhbHVlID0gbmV3VmFsdWUuaXNvbGF0ZWRDb3B5KCksIHVybFN0cmluZyA9IHVybFN0cmluZy5p
c29sYXRlZENvcHkoKV0gewotICAgICAgICAgICAgaWYgKGF1dG8qIGNvbm5lY3Rpb24gPSBJUEM6
OkNvbm5lY3Rpb246OmNvbm5lY3Rpb24oY29ubmVjdGlvbklEKSkKLSAgICAgICAgICAgICAgICBj
b25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6RGlzcGF0Y2hTdG9yYWdl
RXZlbnQoc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybFN0
cmluZyksIGRlc3RpbmF0aW9uU3RvcmFnZUFyZWFJRCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0K
LQotUmVmPFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VNYW5h
Z2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNyZWF0ZShTdG9yYWdlTWFuYWdlciYgc3RvcmFn
ZU1hbmFnZXIsIHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uoc3RvcmFnZU1hbmFnZXIsIHN0b3JhZ2VO
YW1lc3BhY2VJRCkpOwotfQotCi0vLyBGSVhNRTogVGhlIHF1b3RhIHZhbHVlIGlzIGNvcGllZCBm
cm9tIEdyb3VwU2V0dGluZ3MuY3BwLgotLy8gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGEgd2F5IHRv
IHNoYXJlIGl0IHdpdGggV2ViQ29yZS4KLVN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1l
c3BhY2U6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZShTdG9yYWdlTWFuYWdlciYgc3RvcmFnZU1hbmFn
ZXIsIHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCkKLSAgICA6IG1fc3RvcmFnZU1hbmFnZXIo
c3RvcmFnZU1hbmFnZXIpCi0gICAgLCBtX3F1b3RhSW5CeXRlcyhsb2NhbFN0b3JhZ2VEYXRhYmFz
ZVF1b3RhSW5CeXRlcykKLXsKLX0KLQotU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVz
cGFjZTo6fkxvY2FsU3RvcmFnZU5hbWVzcGFjZSgpCi17Ci19Ci0KLWF1dG8gU3RvcmFnZU1hbmFn
ZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0
eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbiwgSXNFcGhlbWVyYWwgaXNFcGhlbWVyYWwpIC0+
IFJlZjxTdG9yYWdlQXJlYT4KLXsKLSAgICByZXR1cm4gKm1fc3RvcmFnZUFyZWFNYXAuZW5zdXJl
KHNlY3VyaXR5T3JpZ2luLCBbJl0oKSBtdXRhYmxlIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VB
cmVhOjpjcmVhdGUoaXNFcGhlbWVyYWwgPT0gSXNFcGhlbWVyYWw6OlllcyA/IG51bGxwdHIgOiB0
aGlzLCBXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luKSwgbV9xdW90YUluQnl0ZXMpOwotICAgIH0pLml0
ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9pZCBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgYXV0byBvcmlnaW5BbmRTdG9yYWdlQXJl
YSA9IG1fc3RvcmFnZUFyZWFNYXAuZmluZChzZWN1cml0eU9yaWdpbik7Ci0gICAgaWYgKG9yaWdp
bkFuZFN0b3JhZ2VBcmVhICE9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCkpCi0gICAgICAgIG9yaWdp
bkFuZFN0b3JhZ2VBcmVhLT52YWx1ZS0+Y2xlYXIoKTsKLX0KLQotdm9pZCBTdG9yYWdlTWFuYWdl
cjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhckFsbFN0b3JhZ2VBcmVhcygpCi17Ci0gICAg
Zm9yIChhdXRvIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkKLSAgICAg
ICAgc3RvcmFnZUFyZWEtPmNsZWFyKCk7Ci19Ci0KLVZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+
IFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmVwaGVtZXJhbE9yaWdpbnMo
KSBjb25zdAotewotICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkp
IHsKLSAgICAgICAgaWYgKCFzdG9yYWdlQXJlYS0+aXRlbXMoKS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBvcmlnaW5zLmFwcGVuZChzdG9yYWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAg
fQotICAgIHJldHVybiBvcmlnaW5zOwotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6OmNsb25lVG8oTG9jYWxTdG9yYWdlTmFtZXNwYWNlJiBuZXdMb2NhbFN0
b3JhZ2VOYW1lc3BhY2UpCi17Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9zdG9yYWdlQXJlYU1h
cCkKLSAgICAgICAgbmV3TG9jYWxTdG9yYWdlTmFtZXNwYWNlLm1fc3RvcmFnZUFyZWFNYXAuYWRk
KHBhaXIua2V5LCBwYWlyLnZhbHVlLT5jbG9uZSgpKTsKLX0KLQotY2xhc3MgU3RvcmFnZU1hbmFn
ZXI6OlNlc3Npb25TdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZT4gY3JlYXRlKHVuc2lnbmVkIHF1b3RhSW5CeXRlcyk7Ci0gICAg
flNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX3N0b3JhZ2VBcmVhTWFwLmlzRW1wdHkoKTsgfQotCi0gICAgY29uc3QgSGFzaFNl
dDxJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEPiYgYWxsb3dlZENvbm5lY3Rpb25zKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd2VkQ29ubmVjdGlvbnM7IH0KLSAgICB2b2lkIGFkZEFsbG93ZWRDb25u
ZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQpOwotICAgIHZvaWQgcmVtb3ZlQWxsb3dl
ZENvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCk7Ci0KLSAgICBSZWY8U3RvcmFn
ZUFyZWE+IGdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhJiYpOwotCi0g
ICAgdm9pZCBjbG9uZVRvKFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlJiBuZXdTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSk7Ci0KLSAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7
Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFN
YXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICghc3RvcmFnZUFyZWEtPml0ZW1zKCkuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKHN0b3JhZ2VBcmVhLT5zZWN1
cml0eU9yaWdpbigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBvcmlnaW5zOwotICAg
IH0KLQotICAgIHZvaWQgY2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKQotICAgIHsKLSAgICAgICAgYXV0byBvcmln
aW5BbmRTdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZmluZChzZWN1cml0eU9yaWdpbik7
Ci0gICAgICAgIGlmIChvcmlnaW5BbmRTdG9yYWdlQXJlYSAhPSBtX3N0b3JhZ2VBcmVhTWFwLmVu
ZCgpKQotICAgICAgICAgICAgb3JpZ2luQW5kU3RvcmFnZUFyZWEtPnZhbHVlLT5jbGVhcigpOwot
ICAgIH0KLQotICAgIHZvaWQgY2xlYXJBbGxTdG9yYWdlQXJlYXMoKQotICAgIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpCi0gICAg
ICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZXhw
bGljaXQgU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKLQot
ICAgIEhhc2hTZXQ8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRD4gbV9hbGxvd2VkQ29ubmVjdGlv
bnM7Ci0gICAgdW5zaWduZWQgbV9xdW90YUluQnl0ZXM7Ci0KLSAgICBIYXNoTWFwPFNlY3VyaXR5
T3JpZ2luRGF0YSwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9zdG9yYWdlQXJlYU1hcDsKLX07Ci0K
LVJlZjxTdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VNYW5h
Z2VyOjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6Y3JlYXRlKHVuc2lnbmVkIHF1b3RhSW5CeXRl
cykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShx
dW90YUluQnl0ZXMpKTsKLX0KLQotU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTmFtZXNw
YWNlOjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YUluQnl0ZXMpCi0gICAg
OiBtX3F1b3RhSW5CeXRlcyhxdW90YUluQnl0ZXMpCi17Ci19Ci0KLVN0b3JhZ2VNYW5hZ2VyOjpT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6flNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCkKLXsKLX0K
LQotdm9pZCBTdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U6OmFkZEFsbG93
ZWRDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgYWxsb3dlZENvbm5lY3Rpb24p
Ci17Ci0gICAgbV9hbGxvd2VkQ29ubmVjdGlvbnMuYWRkKGFsbG93ZWRDb25uZWN0aW9uKTsKLX0K
LQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6cmVtb3Zl
QWxsb3dlZENvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBhbGxvd2VkQ29ubmVj
dGlvbikKLXsKLSAgICBBU1NFUlQobV9hbGxvd2VkQ29ubmVjdGlvbnMuY29udGFpbnMoYWxsb3dl
ZENvbm5lY3Rpb24pKTsKLSAgICBtX2FsbG93ZWRDb25uZWN0aW9ucy5yZW1vdmUoYWxsb3dlZENv
bm5lY3Rpb24pOwotfQotYXV0byBTdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlP
cmlnaW4pIC0+IFJlZjxTdG9yYWdlQXJlYT4KLXsKLSAgICByZXR1cm4gKm1fc3RvcmFnZUFyZWFN
YXAuZW5zdXJlKHNlY3VyaXR5T3JpZ2luLCBbdGhpcywgJnNlY3VyaXR5T3JpZ2luXSgpIG11dGFi
bGUgewotICAgICAgICByZXR1cm4gU3RvcmFnZUFyZWE6OmNyZWF0ZShudWxscHRyLCBXVEZNb3Zl
KHNlY3VyaXR5T3JpZ2luKSwgbV9xdW90YUluQnl0ZXMpOwotICAgIH0pLml0ZXJhdG9yLT52YWx1
ZS5jb3B5UmVmKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlOjpjbG9uZVRvKFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlJiBuZXdTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKG5ld1Nlc3Npb25TdG9yYWdlTmFtZXNw
YWNlLCBuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5pc0VtcHR5KCkpOwotCi0gICAgZm9yIChh
dXRvJiBwYWlyIDogbV9zdG9yYWdlQXJlYU1hcCkKLSAgICAgICAgbmV3U2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UubV9zdG9yYWdlQXJlYU1hcC5hZGQocGFpci5rZXksIHBhaXIudmFsdWUtPmNsb25l
KCkpOwotfQotCi1SZWY8U3RvcmFnZU1hbmFnZXI+IFN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoU3Ry
aW5nJiYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0b3JhZ2VNYW5hZ2VyKFdURk1vdmUobG9jYWxTdG9yYWdlRGlyZWN0b3J5KSkpOwotfQorY29u
c3QgdW5zaWduZWQgU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5
dGVzID0gNSAqIDEwMjQgKiAxMDI0OwogCiBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZU1hbmFnZXIo
U3RyaW5nJiYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KQogICAgIDogbV9xdWV1ZShXb3JrUXVldWU6
OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5TdG9yYWdlTWFuYWdlciIpKQpAQCAtNzQ5LDcgKzMx
NCw3IEBAIHZvaWQgU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZUxvY2FsU3RvcmFnZU1hcChJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90CiAgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPSBnZXRPckNyZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFj
ZShzdG9yYWdlTmFtZXNwYWNlSUQpOwogICAgIEFTU0VSVChsb2NhbFN0b3JhZ2VOYW1lc3BhY2Up
OwogCi0gICAgYXV0byBzdG9yYWdlQXJlYSA9IGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+Z2V0T3JD
cmVhdGVTdG9yYWdlQXJlYShXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luRGF0YSksIG1fbG9jYWxTdG9y
YWdlRGF0YWJhc2VUcmFja2VyID8gU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFj
ZTo6SXNFcGhlbWVyYWw6Ok5vIDogU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFj
ZTo6SXNFcGhlbWVyYWw6Olllcyk7CisgICAgYXV0byBzdG9yYWdlQXJlYSA9IGxvY2FsU3RvcmFn
ZU5hbWVzcGFjZS0+Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShXVEZNb3ZlKHNlY3VyaXR5T3JpZ2lu
RGF0YSksIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyID8gTG9jYWxTdG9yYWdlTmFtZXNw
YWNlOjpJc0VwaGVtZXJhbDo6Tm8gOiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OklzRXBoZW1lcmFs
OjpZZXMpOwogICAgIHN0b3JhZ2VBcmVhLT5hZGRMaXN0ZW5lcihjb25uZWN0aW9uSUQsIHN0b3Jh
Z2VNYXBJRCk7CiAKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV1RGTW92ZShzdG9yYWdl
QXJlYSk7CkBAIC05NzAsNyArNTM1LDcgQEAgdm9pZCBTdG9yYWdlTWFuYWdlcjo6cmVzdW1lKCkK
ICAgICAgICAgbV9zdGF0ZUNoYW5nZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKIH0KIAotU3RvcmFn
ZU1hbmFnZXI6OlN0b3JhZ2VBcmVhKiBTdG9yYWdlTWFuYWdlcjo6ZmluZFN0b3JhZ2VBcmVhKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3Qgc3RvcmFnZU1hcElEKSBjb25zdAor
U3RvcmFnZUFyZWEqIFN0b3JhZ2VNYW5hZ2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpIGNvbnN0CiB7CiAgICAgc3Rk
OjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiBjb25uZWN0aW9uQW5k
U3RvcmFnZU1hcElEUGFpcihjb25uZWN0aW9uLnVuaXF1ZUlEKCksIHN0b3JhZ2VNYXBJRCk7CiAK
QEAgLTk4MCw3ICs1NDUsNyBAQCBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWEqIFN0b3JhZ2VN
YW5hZ2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjbwogICAgIHJldHVybiBt
X3N0b3JhZ2VBcmVhc0J5Q29ubmVjdGlvbi5nZXQoY29ubmVjdGlvbkFuZFN0b3JhZ2VNYXBJRFBh
aXIpOwogfQogCi1TdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBTdG9yYWdl
TWFuYWdlcjo6Z2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFn
ZU5hbWVzcGFjZUlEKQorTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBTdG9yYWdlTWFuYWdlcjo6Z2V0
T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlE
KQogewogICAgIGlmICghbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLmlzVmFsaWRLZXkoc3RvcmFn
ZU5hbWVzcGFjZUlEKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05OTAsNyArNTU1LDcg
QEAgU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZSogU3RvcmFnZU1hbmFnZXI6
OmdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmEKICAgICB9KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7
CiB9CiAKLVN0b3JhZ2VNYW5hZ2VyOjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIFN0
b3JhZ2VNYW5hZ2VyOjpnZXRPckNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1
aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYm
IHRvcExldmVsT3JpZ2luKQorVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBTdG9yYWdl
TWFuYWdlcjo6Z2V0T3JDcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0
X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmJiB0b3BM
ZXZlbE9yaWdpbikKIHsKICAgICBpZiAoIW1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
cy5pc1ZhbGlkS2V5KHsgc3RvcmFnZU5hbWVzcGFjZUlELCB0b3BMZXZlbE9yaWdpbiB9KSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCmluZGV4IDYwYTI1ZTNkMWMzMTBh
NWMwYjhmZWE0YWIxNDNlZWI3MGUxNWFjMjIuLjMxOTlhNDIwYThmZGJjYmIxZjc3ZDcyZDAxN2Vh
NmIzYzA4MDk1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5oCkBAIC00MSwxMyArNDEsMjEgQEAgY2xhc3Mg
U2VjdXJpdHlPcmlnaW47CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTG9jYWxTdG9yYWdl
RGF0YWJhc2VUcmFja2VyOworY2xhc3MgTG9jYWxTdG9yYWdlTmFtZXNwYWNlOworY2xhc3MgU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2U7CitjbGFzcyBTdG9yYWdlQXJlYTsKK2NsYXNzIFRyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIAogdXNpbmcg
R2V0VmFsdWVzQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+Jik+OwogCiBjbGFzcyBTdG9yYWdlTWFuYWdlciA6IHB1YmxpYyBJUEM6
OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxTdG9yYWdlTWFuYWdlcj4gY3JlYXRlKFN0cmluZyYmIGxvY2FsU3RvcmFnZURpcmVj
dG9yeSk7CisgICAgc3RhdGljIFJlZjxTdG9yYWdlTWFuYWdlcj4gY3JlYXRlKFN0cmluZyYmIGxv
Y2FsU3RvcmFnZURpcmVjdG9yeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0b3JhZ2VNYW5hZ2VyKFdURk1vdmUobG9jYWxTdG9yYWdlRGlyZWN0b3J5KSkpOworICAgIH0K
KyAgICAKICAgICB+U3RvcmFnZU1hbmFnZXIoKTsKIAogICAgIHZvaWQgY3JlYXRlU2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCB1bnNpZ25lZCBxdW90
YUluQnl0ZXMpOwpAQCAtNzUsNiArODMsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKICAgICB2b2lkIGRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKTsKKyAgICAKKyAgICBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIqIGxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcigpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLmdldCgpOyB9CisgICAg
CisgICAgV29ya1F1ZXVlJiB3b3JrUXVldWUoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlLmdldCgp
OyB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvY2FsU3RvcmFnZURhdGFiYXNl
UXVvdGFJbkJ5dGVzOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFN0b3JhZ2VNYW5hZ2VyKFN0
cmluZyYmIGxvY2FsU3RvcmFnZURpcmVjdG9yeSk7CkBAIC05MiwxMyArMTA2LDEwIEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbiYsIFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSYmLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQsIHVpbnQ2NF90IHNvdXJjZVN0
b3JhZ2VBcmVhSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBTZWVkLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgY2xlYXIoSVBDOjpDb25uZWN0aW9u
JiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCwg
dWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0X3Qgc3RvcmFnZU1hcFNlZWQsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKIAotICAgIGNsYXNzIFN0b3JhZ2VBcmVhOwogICAgIFN0
b3JhZ2VBcmVhKiBmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3QpIGNv
bnN0OwogCi0gICAgY2xhc3MgTG9jYWxTdG9yYWdlTmFtZXNwYWNlOwogICAgIExvY2FsU3RvcmFn
ZU5hbWVzcGFjZSogZ2V0T3JDcmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UodWludDY0X3Qgc3Rv
cmFnZU5hbWVzcGFjZUlEKTsKIAotICAgIGNsYXNzIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZTsKICAgICBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIGdldE9yQ3JlYXRlVHJh
bnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IHN0b3JhZ2VOYW1lc3BhY2VJRCwg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgdG9wTGV2ZWxPcmlnaW4pOwogCiAgICAgUmVm
PFdvcmtRdWV1ZT4gbV9xdWV1ZTsKQEAgLTEwOCw3ICsxMTksNiBAQCBwcml2YXRlOgogCiAgICAg
SGFzaE1hcDxzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4s
IFJlZlB0cjxUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+PiBtX3RyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZXM7CiAKLSAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTsK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U+PiBt
X3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlczsKIAogICAgIEhhc2hNYXA8c3RkOjpwYWlyPElQQzo6
Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90PiwgUmVmUHRyPFN0b3JhZ2VBcmVhPj4gbV9z
dG9yYWdlQXJlYXNCeUNvbm5lY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0
b3JhZ2VOYW1lc3BhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxMzlhOGRjYTdjZTBhYmY5NTQ5ODdhYjNl
MTAyNjk5ZmVhNTBlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcApAQCAt
MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmgiCisKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworVHJhbnNpZW50TG9jYWxTdG9yYWdl
TmFtZXNwYWNlOjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoKQorICAgIDogbV9xdW90
YUluQnl0ZXMoU3RvcmFnZU1hbmFnZXI6OmxvY2FsU3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVz
KQoreworfQorCitUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6On5UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UoKQoreworfQorCitSZWY8U3RvcmFnZUFyZWE+IFRyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdp
bkRhdGEmJiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4gKm1fc3RvcmFnZUFyZWFNYXAu
ZW5zdXJlKHNlY3VyaXR5T3JpZ2luLCBbdGhpcywgJnNlY3VyaXR5T3JpZ2luXSgpIG11dGFibGUg
eworICAgICAgICByZXR1cm4gU3RvcmFnZUFyZWE6OmNyZWF0ZShudWxscHRyLCBXVEZNb3ZlKHNl
Y3VyaXR5T3JpZ2luKSwgbV9xdW90YUluQnl0ZXMpOworICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5j
b3B5UmVmKCk7Cit9CisKK1ZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IFRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFNlY3VyaXR5
T3JpZ2luRGF0YT4gb3JpZ2luczsKKworICAgIGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFyZWEg
OiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmICghc3RvcmFnZUFyZWEt
Pml0ZW1zKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoc3RvcmFnZUFy
ZWEtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIH0KKworICAgIHJldHVybiBvcmlnaW5zOworfQor
Cit2b2lkIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJTdG9yYWdlQXJlYXNN
YXRjaGluZ09yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKQor
eworICAgIGF1dG8gb3JpZ2luQW5kU3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhTWFwLmZpbmQo
c2VjdXJpdHlPcmlnaW4pOworICAgIGlmIChvcmlnaW5BbmRTdG9yYWdlQXJlYSAhPSBtX3N0b3Jh
Z2VBcmVhTWFwLmVuZCgpKQorICAgICAgICBvcmlnaW5BbmRTdG9yYWdlQXJlYS0+dmFsdWUtPmNs
ZWFyKCk7Cit9CisKK3ZvaWQgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhckFs
bFN0b3JhZ2VBcmVhcygpCit7CisgICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFn
ZUFyZWFNYXAudmFsdWVzKCkpCisgICAgICAgIHN0b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjQ4MzkxMGNmM2RlOGM2OTgxMjdlZmZlNGNjY2U1Y2I5
MDk1YjMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oCkBAIC0wLDAgKzEsNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9T
ZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTdG9yYWdlQXJlYTsKKworY2xhc3MgVHJhbnNp
ZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKCkpOwor
ICAgIH0KKworICAgIH5UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoKTsKKworICAgIFJl
ZjxTdG9yYWdlQXJlYT4gZ2V0T3JDcmVhdGVTdG9yYWdlQXJlYShXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGEmJik7CisgICAgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3Jp
Z2lucygpIGNvbnN0OworCisgICAgdm9pZCBjbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2lu
KGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpOworICAgIHZvaWQgY2xlYXJBbGxT
dG9yYWdlQXJlYXMoKTsKKworcHJpdmF0ZToKKyAgICBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1l
c3BhY2UoKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzOworICAgIEhhc2hN
YXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBtX3N0
b3JhZ2VBcmVhTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKaW5kZXggZWM4
OGZhNjQzMzRkYjVkYzA4MjRlZmUzYzdhYjU3NTRlYmQyYmNlOC4uM2U5ZDE3ZDYwMmQzNDE3NzAz
M2M5MzM4YjRiYmU2ZGEwYmFiYThhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtMjcwLDEyICsyNzAsMTIgQEAgc3Rh
dGljIFN0b3JlRGVjaXNpb24gbWFrZVN0b3JlRGVjaXNpb24oY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiBvcmlnaW5hbFIKIH0KIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFX1NQRUNV
TEFUSVZFX1JFVkFMSURBVElPTikKLXN0YXRpYyBib29sIGlubGluZSBjYW5SZXF1ZXN0VXNlU3Bl
Y3VsYXRpdmVSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorc3Rh
dGljIGJvb2wgaW5saW5lIGNhblJlcXVlc3RVc2VTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbihjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgaWYgKHJlcXVlc3Qu
aXNDb25kaXRpb25hbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVxdWVz
dC5yZXF1ZXN0ZXIoKSA9PSBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6WEhSIHx8IHJlcXVl
c3QucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6OkZldGNoKQorICAg
IGlmIChyZXF1ZXN0LnJlcXVlc3RlcigpID09IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVx
dWVzdGVyOjpYSFIgfHwgcmVxdWVzdC5yZXF1ZXN0ZXIoKSA9PSBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3Q6OlJlcXVlc3Rlcjo6RmV0Y2gpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3
aXRjaCAocmVxdWVzdC5jYWNoZVBvbGljeSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA3OTE2ZTIzYjc3
ZWVmYmMwOGIxOTcwNDI3OTdmMDAwNDhjZmMxNjNmLi41YjRmZjY5YzU0ZjUwMjdhYzllNDRkOTA1
ODAxZGIzYmY5YWRhZjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTY4LDcgKzY4LDExIEBAIE5ldHdvcmtQ
cm9jZXNzL1NlcnZpY2VXb3JrZXIvV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0aW9uLmNwcCBA
bm8tdW5pZnkKIAogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5jcHAKIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyLmNwcAorTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VOYW1lc3BhY2Uu
Y3BwCitOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmNw
cAorTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAKIE5ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCitOZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKIAogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAyYzA4ZjVlNGQ3ZjhhNjY5YmRkM2MwMTk0NDI3MzllY2Nh
YTk2NjZiLi5lMTY2NDA2MGNhOTM3Yjc4NzNiM2U0ZTRlMGJmNDZkZTdmMWY4N2Y4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTkxMSw2
ICs5MTEsMTAgQEAKIAkJNDY3RTQzRTgyMjQzRkY3RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NEYXRh
U3RvcmVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NjdFNDNFNzIyNDNGRjZEMDBCMTM5MjQgLyogV2ViUHJvY2Vzc0RhdGFTdG9yZVBh
cmFtZXRlcnMuaCAqLzsgfTsKIAkJNDZBMkI2MDkxRTU2NzZBNjAwQzNERURBIC8qIEJhY2tncm91
bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDZBMkI2MDcxRTU2NzVBMjAwQzNERURBIC8qIEJhY2tncm91
bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovOyB9OwogCQk0NkIwNTI0NzIyNjY4RDg1
MDAyNjVCOTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkIwNTI0
NDIyNjY4RDIzMDAyNjVCOTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3ND
b250cm9sbGVyLmggKi87IH07CisJCTQ2QkVCNkQ3MjJGQjlCRDcwMDI2OTg2NyAvKiBTdG9yYWdl
QXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZC
RUI2RDUyMkZCOUJENjAwMjY5ODY3IC8qIFN0b3JhZ2VBcmVhLmggKi87IH07CisJCTQ2QkVCNkRC
MjJGQjlENDgwMDI2OTg2NyAvKiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QkVCNkQ5MjJGQjlENDgwMDI2OTg2
NyAvKiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCAqLzsgfTsKKwkJNDZCRUI2REYyMkZCQjE2QjAw
MjY5ODY3IC8qIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkJFQjZERDIyRkJCMTZCMDAyNjk4NjcgLyogU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UuaCAqLzsgfTsKKwkJNDZCRUI2RTMyMkZCQjIxQTAwMjY5ODY3
IC8qIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZCRUI2RTEyMkZCQjIxQTAwMjY5ODY3IC8qIFRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oICovOyB9OwogCQk0NkRGMDYzQzFGMzkwNUY4
MDAxOTgwQkIgLyogTmV0d29ya0NPUlNQcmVmbGlnaHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkRGMDYzQTFGMzkwNUU1MDAxOTgwQkIg
LyogTmV0d29ya0NPUlNQcmVmbGlnaHRDaGVja2VyLmggKi87IH07CiAJCTRBM0NDMThCMTlCMDY0
MEYwMEQxNEFFRiAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0MTBGM0ExOUFG
N0IwNDAwMkVCQUI1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Lmgg
Ki87IH07CiAJCTRBM0NDMThEMTlCMDY0MTkwMEQxNEFFRiAvKiBVc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdFByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QTQxMEYzQzE5QUY3QjA0MDAyRUJBQjUgLyogVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RQcm94eS5oICovOyB9OwpAQCAtMzE5Miw2ICszMTk2LDE0IEBACiAJCTQ2QTJCNjA3MUU1Njc1
QTIwMEMzREVEQSAvKiBCYWNrZ3JvdW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja2dyb3VuZFByb2Nlc3NSZXNwb25zaXZl
bmVzc1RpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2QjA1MjQ0MjI2NjhE
MjMwMDI2NUI5NyAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGV2aWNlT3JpZW50YXRp
b25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ2QjA1MjQ1MjI2NjhEMjQwMDI2NUI5NyAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1v
dGlvbkFjY2Vzc0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDZCRUI2RDUyMkZCOUJENjAwMjY5ODY3IC8q
IFN0b3JhZ2VBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ2QkVCNkQ2MjJGQjlCRDcwMDI2OTg2NyAvKiBTdG9yYWdlQXJl
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ2QkVCNkQ5MjJGQjlENDgwMDI2OTg2NyAvKiBMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ2QkVCNkRBMjJGQjlENDgwMDI2OTg2NyAvKiBMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDZCRUI2REQyMkZCQjE2
QjAwMjY5ODY3IC8qIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ2
QkVCNkRFMjJGQkIxNkIwMDI2OTg2NyAvKiBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ2QkVCNkUxMjJGQkIyMUEwMDI2OTg2NyAvKiBUcmFuc2llbnRM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ2QkVCNkUyMjJG
QkIyMUEwMDI2OTg2NyAvKiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZERjA2MzkxRjM5MDVFNTAwMTk4MEJCIC8qIE5ldHdv
cmtDT1JTUHJlZmxpZ2h0Q2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOZXR3b3JrQ09SU1ByZWZsaWdodENoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NkRGMDYzQTFGMzkwNUU1MDAxOTgwQkIgLyogTmV0d29ya0NPUlNQcmVm
bGlnaHRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtD
T1JTUHJlZmxpZ2h0Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTQx
MEYzNTE5QUY3QUMzMDAyRUJBQjUgLyogV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1VzZXJNZWRpYVBlcm1pc3Np
b25SZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyODMsOSArNzI5
NSwxNyBAQAogCQkJCTkzQjI2MTQ1MjI3RDE0NzAwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VEYXRh
YmFzZS5oICovLAogCQkJCTkzQjI2MTQ3MjI3RDE0NzEwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXIuY3BwICovLAogCQkJCTkzQjI2MTQ2MjI3RDE0NzEwMEI5N0E3NiAvKiBM
b2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCAqLywKKwkJCQk0NkJFQjZEQTIyRkI5RDQ4MDAy
Njk4NjcgLyogTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcCAqLywKKwkJCQk0NkJFQjZEOTIyRkI5
RDQ4MDAyNjk4NjcgLyogTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmggKi8sCisJCQkJNDZCRUI2REUy
MkZCQjE2QjAwMjY5ODY3IC8qIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmNwcCAqLywKKwkJCQk0
NkJFQjZERDIyRkJCMTZCMDAyNjk4NjcgLyogU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuaCAqLywK
KwkJCQk0NkJFQjZENjIyRkI5QkQ3MDAyNjk4NjcgLyogU3RvcmFnZUFyZWEuY3BwICovLAorCQkJ
CTQ2QkVCNkQ1MjJGQjlCRDYwMDI2OTg2NyAvKiBTdG9yYWdlQXJlYS5oICovLAogCQkJCTkzQjI2
MTRBMjI3RDE0NzIwMEI5N0E3NiAvKiBTdG9yYWdlTWFuYWdlci5jcHAgKi8sCiAJCQkJOTNCMjYx
NDkyMjdEMTQ3MjAwQjk3QTc2IC8qIFN0b3JhZ2VNYW5hZ2VyLmggKi8sCiAJCQkJOTNCMjYxNEIy
MjdEMTQ3MjAwQjk3QTc2IC8qIFN0b3JhZ2VNYW5hZ2VyLm1lc3NhZ2VzLmluICovLAorCQkJCTQ2
QkVCNkUyMjJGQkIyMUEwMDI2OTg2NyAvKiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uu
Y3BwICovLAorCQkJCTQ2QkVCNkUxMjJGQkIyMUEwMDI2OTg2NyAvKiBUcmFuc2llbnRMb2NhbFN0
b3JhZ2VOYW1lc3BhY2UuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gV2ViU3RvcmFnZTsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC04OTQ3LDggKzg5NjcsOCBAQAogCQkJY2hpbGRyZW4g
PSAoCiAJCQkJQ0QxOUQyRTkyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hl
dXJpc3RpYy5jcHAgKi8sCiAJCQkJQ0QxOUQyRTgyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3Jl
ZW5Ub3VjaFNlY2hldXJpc3RpYy5oICovLAotCQkJCUNEQTkzREFFMjJGOEJDRjMwMDQ5MEE2OSAv
KiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWNQYXJhbWV0ZXJzLmggKi8sCiAJCQkJQ0RBOTNE
QUYyMkY4QkNGNDAwNDkwQTY5IC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpY1BhcmFtZXRl
cnMuY3BwICovLAorCQkJCUNEQTkzREFFMjJGOEJDRjMwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91
Y2hTZWNoZXVyaXN0aWNQYXJhbWV0ZXJzLmggKi8sCiAJCQkJQ0RDMjgzMUIyMDFCRDc5RDAwRTZF
NzQ1IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5oICovLAogCQkJCUNEQzI4MzFDMjAxQkQ3OUQw
MEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gKi8sCiAJCQkJQ0QwQzY4MkYyMDFG
RDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmggKi8sCkBAIC05MzY5
LDYgKzkzODksNyBAQAogCQkJCTJENEFGMDg5MjA0NEMzQzQwMDZDODgxNyAvKiBGcm9udEJvYXJk
U2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENzhFMTE1MURCN0Q3RUQwMDE0QTJE
RSAvKiBGdWxsc2NyZWVuQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDE5RDJFQTIwNDY0
MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmggaW4gSGVhZGVycyAq
LywKKwkJCQlDREE5M0RCMDIyRjhCQ0Y0MDA0OTBBNjkgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1
cmlzdGljUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxQjMxRDU5MDJERDAw
REQ3QzY4IC8qIEdhbWVwYWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3NzUzRjExOEJB
QkYwMDA3RDlFOUEgLyogR2VuZXJpY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzA2
RjQyRjEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtOTQzMSw2ICs5NDUyLDcgQEAKIAkJCQk1N0RDRURBRTIx
NEM2MDMzMDAxNkI4NDcgLyogTG9jYWxTZXJ2aWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Iy
NjE0RTIyN0QxNEIxMDBCOTdBNzYgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzQjI2MTRGMjI3RDE0QjEwMEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2QkVCNkRCMjJGQjlENDgwMDI2OTg2NyAv
KiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTdGMkYzMTI1
QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRDRDdGNzFE
NDdFOTJBMDA5RjA4QkMgLyogTG9nSW5pdGlhbGl6YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBNkQ4NkMyMURGNzUyNjUwMDc3NDVFOCAvKiBNYWNoTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC05NjMyLDYgKzk2NTQsNyBAQAogCQkJCTQxNERFREQ3MUY5RURERTUwMDQ3QzQwRCAvKiBT
ZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZERTY1QTE5
NTRBNDJCMDBDNDhGRkEgLyogU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTAw
MkQ0OTE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0NkJFQjZERjIyRkJCMTZCMDAyNjk4NjcgLyogU2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjQyMEU1MTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFy
ZWFibGVCaXRtYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMjE3NDYxMTY0QzIwRTMwMDM3QTVD
MSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyNEJFRDUxMjA4
OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NjUxLDYg
Kzk2NzQsNyBAQAogCQkJCTUyNzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0QkRFRDMxNkM5OEVERDAwRTRFMjVFIC8qIFN0YXRp
c3RpY3NSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTNGRUNBMjIxRjdDMDk3MDBGMjY3
Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDZCRUI2RDcy
MkZCOUJENzAwMjY5ODY3IC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQz
MzA2RjE2QjFEOTkxMDA0RjYwRTcgLyogU3RvcmFnZUFyZWFJbXBsLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUNFQ0QyNTE3MTYyREIxMDAxRkM5RUYgLyogU3RvcmFnZUFyZWFNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBMzM0REVFMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTk2NzAsNiArOTY5NCw3IEBACiAJCQkJMUFBRjI2
MzkxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUYwNUQ4NzE0Njg4MzQ4MDA4QjFFODEgLyogVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkY4MzM2ODYxRkEx
MzlERjAwQzZFMDgwIC8qIFRvdWNoQmFyTWVudURhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2
QkVCNkUzMjJGQkIyMUEwMDI2OTg2NyAvKiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTU3RUIyRTNBMjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRB
dXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZFNDM2NjE4QjZDMDgxMDA5QzdB
NDggLyogVUlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxQjUxRDU5MTdGRjAw
REQ3QzY4IC8qIFVJR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAwNiw3ICsxMDAzMSw2
IEBACiAJCQkJMUE0NDVCQTUxODRENUZEQTAwNEIzNDE0IC8qIFdLQ29udGV4dENvbm5lY3Rpb25D
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDQ1QkEzMTg0RDVGQ0YwMDRCMzQxNCAvKiBX
S0NvbnRleHREb3dubG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0NDVCQTExODRE
NUZDMTAwNEIzNDE0IC8qIFdLQ29udGV4dEhpc3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovLAot
CQkJCUNEQTkzREIwMjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0
aWNQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ0NUI5RjE4NEQ1RkI1MDA0QjM0
MTQgLyogV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDNzk1RDcwMjI5RjM3M0YwMDNGRjFDNCAvKiBXS0NvbnRleHRNZW51RWxlbWVudEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCTVDNzk1RDcxMjI5RjM3NTcwMDNGRjFDNCAvKiBXS0NvbnRleHRN
ZW51RWxlbWVudEluZm9Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTExMDk1LDYgKzExMTE5
LDcgQEAKIAkJCQkxQTY0MjMwODEyREQwOUVCMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc4MDIxMkI2QTcxMDBG
NDkzRkQgLyogRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUE1NzYwMjE0OTZCOTc5
MDBBNEVFMDYgLyogRXZlbnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUNEQTkzREIxMjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNo
ZXVyaXN0aWNQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI3NDlGNjQ0MjE0NjU2
MUIwMDgzODBCRiAvKiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMjc0OUY2NDUyMTQ2NTYxRTAwODM4MEJGIC8qIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MTM0NDEyMTJDRjlGMDAwMTI4QUZEIC8qIEpT
TlBNZXRob2QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMTE1Myw3ICsxMTE3OCw2IEBACiAJCQkJ
QkM4Mjg0NEQxNkI1MDgxQzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQ5MTM0NEQyMTJDRjlGMDAwMTI4QUZEIC8qIFBsdWdpblZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ1NEMzMUIyMTJGNERBNjAwNDlDMTc0IC8qIFByb2Nl
c3NMYXVuY2hlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDREE5M0RCMTIyRjhCQ0Y0MDA0OTBB
NjkgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljUGFyYW1ldGVycy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDRDI4NjVFRjIyNTU1NjIwMDA2MDZBQzcgLyogUHJvY2Vzc1Rhc2tTdGF0ZU9i
c2VydmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ3MkExRkEyMTJCRjQ2RTAwNTE3QTIwIC8q
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMjRB
MkQxODc5RTRCQzAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375806</attachid>
            <date>2019-08-08 09:03:07 -0700</date>
            <delta_ts>2019-08-08 09:47:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200527-20190808090305.patch</filename>
            <type>text/plain</type>
            <size>72978</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4Mzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5M2NkMmIzMjE2ODg2OWI2
OGEyZDE4OTE2OGQ2MDUwNGNhOGZlYjQuLmNkZWM1NGUzMTVhNzVkM2RhMjdkY2E2ZmI5YWI5YzVm
NmUwNmY2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTktMDgtMDcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGNsYXNzZXMgZGVjbGFyZWQg
aW5zaWRlIFN0b3JhZ2VNYW5hZ2VyLmNwcCBpbnRvIHRoZWlyIG93biBoZWFkZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA1MjcKKworICAgICAg
ICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIE1vdmUgY2xhc3NlcyBk
ZWNsYXJlZCBpbnNpZGUgU3RvcmFnZU1hbmFnZXIuY3BwIGludG8gdGhlaXIgb3duIGhlYWRlcnMK
KyAgICAgICAgZm9yIGNsYXJpdHkuIFN0b3JhZ2VNYW5hZ2VyLmNwcCB3YXMgZ2V0dGluZyByZWFs
bHkgYmlnLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6On5Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0
OjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEpOgorICAgICAg
ICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hp
bmdPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFy
QWxsU3RvcmFnZUFyZWFzKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlTmFtZXNwYWNl
OjplcGhlbWVyYWxPcmlnaW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdl
TmFtZXNwYWNlOjpjbG9uZVRvKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L0xvY2FsU3RvcmFnZU5hbWVzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TG9jYWxT
dG9yYWdlTmFtZXNwYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VO
YW1lc3BhY2U6OnN0b3JhZ2VNYW5hZ2VyIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTmFtZXNwYWNlOjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTmFtZXNwYWNlOjp+U2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZTo6YWRkQWxsb3dlZENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZTo6cmVtb3ZlQWxsb3dlZENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYSk6CisgICAgICAg
IChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTmFtZXNwYWNlOjpjbG9uZVRvKToKKyAgICAgICAgKFdl
YktpdDo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U6Om9yaWdpbnMgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGlu
Z09yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25TdG9yYWdlTmFtZXNwYWNlOjpjbGVh
ckFsbFN0b3JhZ2VBcmVhcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2U6OmFsbG93ZWRDb25uZWN0aW9ucyBjb25zdCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTdG9y
YWdlQXJlYTo6flN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OmFk
ZExpc3RlbmVyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVy
KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6Omhhc0xpc3RlbmVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OmNsb25lIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWE6OnNldEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6
c2V0SXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhOjppdGVtcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpv
cGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWE6OmRpc3BhdGNoRXZlbnRzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpTdG9yYWdlQXJlYTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OnNl
Y3VyaXR5T3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6OmlzRXBo
ZW1lcmFsIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZUxv
Y2FsU3RvcmFnZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjpmaW5kU3Rv
cmFnZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6Z2V0T3JD
cmVhdGVMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFu
YWdlcjo6Z2V0T3JDcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuaDoKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3Jh
Z2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6d29ya1F1ZXVlIGNvbnN0KToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6
OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlRyYW5z
aWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6flRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0
T3JDcmVhdGVTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlRyYW5zaWVudExvY2FsU3Rv
cmFnZU5hbWVzcGFjZTo6b3JpZ2lucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlRyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbik6
CisgICAgICAgIChXZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJB
bGxTdG9yYWdlQXJlYXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJh
bnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpU
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNyZWF0ZSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhY2hlOjpjYW5SZXF1ZXN0VXNlU3BlY3VsYXRpdmVSZXZhbGlkYXRpb24pOgorICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorCiAyMDE5LTA4LTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmVtb3ZlIHNwZWN1bGF0aXZlIHdvcmthcm91bmQgZm9yIHVwbG9hZCBj
cmFzaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L0xvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGY1ZDdh
ZmM2ZGM4OGZmMmE5YWUwMTg0NmRjYzExY2U4MTQ5MjdiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZU5hbWVzcGFj
ZS5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZU5hbWVzcGFjZS5oIgorCisjaW5jbHVkZSAiU3Rv
cmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlTWFuYWdlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworLy8gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGEgd2F5IHRvIHNo
YXJlIGl0IHdpdGggV2ViQ29yZS4KK0xvY2FsU3RvcmFnZU5hbWVzcGFjZTo6TG9jYWxTdG9yYWdl
TmFtZXNwYWNlKFN0b3JhZ2VNYW5hZ2VyJiBzdG9yYWdlTWFuYWdlciwgdWludDY0X3Qgc3RvcmFn
ZU5hbWVzcGFjZUlEKQorICAgIDogbV9zdG9yYWdlTWFuYWdlcihzdG9yYWdlTWFuYWdlcikKKyAg
ICAsIG1fcXVvdGFJbkJ5dGVzKFN0b3JhZ2VNYW5hZ2VyOjpsb2NhbFN0b3JhZ2VEYXRhYmFzZVF1
b3RhSW5CeXRlcykKK3sKK30KKworTG9jYWxTdG9yYWdlTmFtZXNwYWNlOjp+TG9jYWxTdG9yYWdl
TmFtZXNwYWNlKCkKK3sKK30KKworYXV0byBMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmdldE9yQ3Jl
YXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhJiYgc2VjdXJpdHlPcmlnaW4sIElzRXBo
ZW1lcmFsIGlzRXBoZW1lcmFsKSAtPiBSZWY8U3RvcmFnZUFyZWE+Cit7CisgICAgcmV0dXJuICpt
X3N0b3JhZ2VBcmVhTWFwLmVuc3VyZShzZWN1cml0eU9yaWdpbiwgWyZdKCkgbXV0YWJsZSB7Cisg
ICAgICAgIHJldHVybiBTdG9yYWdlQXJlYTo6Y3JlYXRlKGlzRXBoZW1lcmFsID09IElzRXBoZW1l
cmFsOjpZZXMgPyBudWxscHRyIDogdGhpcywgV1RGTW92ZShzZWN1cml0eU9yaWdpbiksIG1fcXVv
dGFJbkJ5dGVzKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgTG9jYWxTdG9y
YWdlTmFtZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3Vy
aXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4pCit7CisgICAgYXV0byBvcmlnaW5BbmRTdG9y
YWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZmluZChzZWN1cml0eU9yaWdpbik7CisgICAgaWYg
KG9yaWdpbkFuZFN0b3JhZ2VBcmVhICE9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCkpCisgICAgICAg
IG9yaWdpbkFuZFN0b3JhZ2VBcmVhLT52YWx1ZS0+Y2xlYXIoKTsKK30KKwordm9pZCBMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKK3sKKyAgICBmb3IgKGF1dG8g
c3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQorICAgICAgICBzdG9yYWdl
QXJlYS0+Y2xlYXIoKTsKK30KKworVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gTG9jYWxTdG9y
YWdlTmFtZXNwYWNlOjplcGhlbWVyYWxPcmlnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8U2Vj
dXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOworICAgIGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFy
ZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmICghc3RvcmFnZUFy
ZWEtPml0ZW1zKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoc3RvcmFn
ZUFyZWEtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIH0KKyAgICByZXR1cm4gb3JpZ2luczsKK30K
Kwordm9pZCBMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsb25lVG8oTG9jYWxTdG9yYWdlTmFtZXNw
YWNlJiBuZXdMb2NhbFN0b3JhZ2VOYW1lc3BhY2UpCit7CisgICAgZm9yIChhdXRvJiBwYWlyIDog
bV9zdG9yYWdlQXJlYU1hcCkKKyAgICAgICAgbmV3TG9jYWxTdG9yYWdlTmFtZXNwYWNlLm1fc3Rv
cmFnZUFyZWFNYXAuYWRkKHBhaXIua2V5LCBwYWlyLnZhbHVlLT5jbG9uZSgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlTmFtZXNwYWNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDcxOTBjYzZjYjQ1MDM5NzJjMjcyZDBjY2Y0OTY3NzhhOTA5Yzg4ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTdG9yYWdlQXJlYTsKK2NsYXNzIFN0b3JhZ2VNYW5h
Z2VyOworCitjbGFzcyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPExv
Y2FsU3RvcmFnZU5hbWVzcGFjZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TG9jYWxTdG9y
YWdlTmFtZXNwYWNlPiBjcmVhdGUoU3RvcmFnZU1hbmFnZXImIHN0b3JhZ2VNYW5hZ2VyLCB1aW50
NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uoc3RvcmFnZU1hbmFnZXIsIHN0b3JhZ2VOYW1lc3Bh
Y2VJRCkpOworICAgIH0KKworICAgIH5Mb2NhbFN0b3JhZ2VOYW1lc3BhY2UoKTsKKworICAgIFN0
b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuICZtX3N0b3JhZ2VN
YW5hZ2VyOyB9CisKKyAgICBlbnVtIGNsYXNzIElzRXBoZW1lcmFsIDogYm9vbCB7IE5vLCBZZXMg
fTsKKyAgICBSZWY8U3RvcmFnZUFyZWE+IGdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiYsIElzRXBoZW1lcmFsKTsKKworICAgIHZvaWQgY2xlYXJTdG9y
YWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEm
KTsKKyAgICB2b2lkIGNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7CisKKyAgICBWZWN0b3I8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBlcGhlbWVyYWxPcmlnaW5zKCkgY29uc3Q7CisgICAgdm9p
ZCBjbG9uZVRvKExvY2FsU3RvcmFnZU5hbWVzcGFjZSYgbmV3TG9jYWxTdG9yYWdlTmFtZXNwYWNl
KTsKKworcHJpdmF0ZToKKyAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZU1hbmFnZXIm
LCB1aW50NjRfdCBzdG9yYWdlTWFuYWdlcklEKTsKKworICAgIFN0b3JhZ2VNYW5hZ2VyJiBtX3N0
b3JhZ2VNYW5hZ2VyOworICAgIHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzIHsgMCB9OworCisgICAg
SGFzaE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIFJlZlB0cjxTdG9yYWdlQXJlYT4+
IG1fc3RvcmFnZUFyZWFNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4NDRlZGE0M2ZlNDgwYzY1
NzM5YzJiMGE1NTBiZDQyYjcyYzFhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuY3BwCkBA
IC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5oIgorCisjaW5jbHVkZSAiU3RvcmFnZUFy
ZWEuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UodW5zaWdu
ZWQgcXVvdGFJbkJ5dGVzKQorICAgIDogbV9xdW90YUluQnl0ZXMocXVvdGFJbkJ5dGVzKQorewor
fQorCitTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6flNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCkK
K3sKK30KKwordm9pZCBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6YWRkQWxsb3dlZENvbm5lY3Rp
b24oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBhbGxvd2VkQ29ubmVjdGlvbikKK3sKKyAgICBt
X2FsbG93ZWRDb25uZWN0aW9ucy5hZGQoYWxsb3dlZENvbm5lY3Rpb24pOworfQorCisKK3ZvaWQg
U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U6OnJlbW92ZUFsbG93ZWRDb25uZWN0aW9uKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgYWxsb3dlZENvbm5lY3Rpb24pCit7CisgICAgQVNTRVJUKG1fYWxs
b3dlZENvbm5lY3Rpb25zLmNvbnRhaW5zKGFsbG93ZWRDb25uZWN0aW9uKSk7CisgICAgbV9hbGxv
d2VkQ29ubmVjdGlvbnMucmVtb3ZlKGFsbG93ZWRDb25uZWN0aW9uKTsKK30KK2F1dG8gU2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5E
YXRhJiYgc2VjdXJpdHlPcmlnaW4pIC0+IFJlZjxTdG9yYWdlQXJlYT4KK3sKKyAgICByZXR1cm4g
Km1fc3RvcmFnZUFyZWFNYXAuZW5zdXJlKHNlY3VyaXR5T3JpZ2luLCBbdGhpcywgJnNlY3VyaXR5
T3JpZ2luXSgpIG11dGFibGUgeworICAgICAgICByZXR1cm4gU3RvcmFnZUFyZWE6OmNyZWF0ZShu
dWxscHRyLCBXVEZNb3ZlKHNlY3VyaXR5T3JpZ2luKSwgbV9xdW90YUluQnl0ZXMpOworICAgIH0p
Lml0ZXJhdG9yLT52YWx1ZS5jb3B5UmVmKCk7Cit9CisKK3ZvaWQgU2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2U6OmNsb25lVG8oU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UmIG5ld1Nlc3Npb25TdG9yYWdl
TmFtZXNwYWNlKQoreworICAgIEFTU0VSVF9VTlVTRUQobmV3U2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UsIG5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmlzRW1wdHkoKSk7CisKKyAgICBmb3IgKGF1
dG8mIHBhaXIgOiBtX3N0b3JhZ2VBcmVhTWFwKQorICAgICAgICBuZXdTZXNzaW9uU3RvcmFnZU5h
bWVzcGFjZS5tX3N0b3JhZ2VBcmVhTWFwLmFkZChwYWlyLmtleSwgcGFpci52YWx1ZS0+Y2xvbmUo
KSk7Cit9CisKK1ZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IFNlc3Npb25TdG9yYWdlTmFtZXNw
YWNlOjpvcmlnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBv
cmlnaW5zOworCisgICAgZm9yIChjb25zdCBhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFy
ZWFNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYS0+aXRlbXMoKS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChzdG9yYWdlQXJlYS0+c2VjdXJpdHlP
cmlnaW4oKSk7CisgICAgfQorCisgICAgcmV0dXJuIG9yaWdpbnM7Cit9CisKK3ZvaWQgU2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3Qg
U2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBhdXRvIG9yaWdpbkFu
ZFN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5maW5kKHNlY3VyaXR5T3JpZ2luKTsKKyAg
ICBpZiAob3JpZ2luQW5kU3RvcmFnZUFyZWEgIT0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKSkKKyAg
ICAgICAgb3JpZ2luQW5kU3RvcmFnZUFyZWEtPnZhbHVlLT5jbGVhcigpOworfQorCit2b2lkIFNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlOjpjbGVhckFsbFN0b3JhZ2VBcmVhcygpCit7CisgICAgZm9y
IChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpCisgICAgICAg
IHN0b3JhZ2VBcmVhLT5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIwNzQ4ZjY3ODY4MDZiMGVj
MTBkMmIwYzI3Y2VmMDMyYTJmNTMwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5oCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFN0b3JhZ2VBcmVhOworCitjbGFz
cyBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZSh1bnNpZ25lZCBxdW90YUluQnl0ZXMpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShxdW90
YUluQnl0ZXMpKTsKKyAgICB9CisgICAgCisgICAgflNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCk7
CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VBcmVhTWFwLmlz
RW1wdHkoKTsgfQorCisgICAgY29uc3QgSGFzaFNldDxJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlE
PiYgYWxsb3dlZENvbm5lY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd2VkQ29ubmVjdGlv
bnM7IH0KKyAgICB2b2lkIGFkZEFsbG93ZWRDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQpOworICAgIHZvaWQgcmVtb3ZlQWxsb3dlZENvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9u
OjpVbmlxdWVJRCk7CisKKyAgICBSZWY8U3RvcmFnZUFyZWE+IGdldE9yQ3JlYXRlU3RvcmFnZUFy
ZWEoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYpOworCisgICAgdm9pZCBjbG9uZVRvKFNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlJiBuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSk7CisKKyAg
ICBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zKCkgY29uc3Q7CisK
KyAgICB2b2lkIGNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJik7CisgICAgdm9pZCBjbGVhckFsbFN0b3JhZ2VBcmVhcygpOwor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHVuc2lnbmVk
IHF1b3RhSW5CeXRlcyk7CisKKyAgICBIYXNoU2V0PElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQ+
IG1fYWxsb3dlZENvbm5lY3Rpb25zOworICAgIHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzIHsgMCB9
OworCisgICAgSGFzaE1hcDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEsIFJlZlB0cjxTdG9y
YWdlQXJlYT4+IG1fc3RvcmFnZUFyZWFNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9y
YWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZUFyZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmZTU2YjAxZjZiYTRhMGNhMTgzZGNiYWVlMjU2MmJi
MzA2YWEwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKwor
I2luY2x1ZGUgIkxvY2FsU3RvcmFnZURhdGFiYXNlLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdl
TmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIlN0b3JhZ2VNYW5hZ2VyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworU3RvcmFn
ZUFyZWE6OlN0b3JhZ2VBcmVhKExvY2FsU3RvcmFnZU5hbWVzcGFjZSogbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luLCB1bnNpZ25l
ZCBxdW90YUluQnl0ZXMpCisgICAgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZShtYWtlV2Vha1B0
cihsb2NhbFN0b3JhZ2VOYW1lc3BhY2UpKQorICAgICwgbV9zZWN1cml0eU9yaWdpbihzZWN1cml0
eU9yaWdpbikKKyAgICAsIG1fcXVvdGFJbkJ5dGVzKHF1b3RhSW5CeXRlcykKKyAgICAsIG1fc3Rv
cmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpKQoreworfQorCitTdG9y
YWdlQXJlYTo6flN0b3JhZ2VBcmVhKCkKK3sKKyAgICBBU1NFUlQobV9ldmVudExpc3RlbmVycy5p
c0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOworCisgICAg
aWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCisgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJh
c2UtPmNsb3NlKCk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6OmFkZExpc3RlbmVyKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgY29ubmVjdGlvbklELCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpCit7
CisgICAgQVNTRVJUKCFtX2V2ZW50TGlzdGVuZXJzLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGNv
bm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKSkpOworICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKHN0
ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKSk7Cit9CisKK3ZvaWQgU3Rv
cmFnZUFyZWE6OnJlbW92ZUxpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgY29ubmVj
dGlvbklELCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpCit7CisgICAgQVNTRVJUKGlzRXBoZW1lcmFs
KCkgfHwgbV9ldmVudExpc3RlbmVycy5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9u
SUQsIHN0b3JhZ2VNYXBJRCkpKTsKKyAgICBtX2V2ZW50TGlzdGVuZXJzLnJlbW92ZShzdGQ6Om1h
a2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkpOworfQorCitib29sIFN0b3JhZ2VB
cmVhOjpoYXNMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rpb25JRCwg
dWludDY0X3Qgc3RvcmFnZU1hcElEKSBjb25zdAoreworICAgIHJldHVybiBtX2V2ZW50TGlzdGVu
ZXJzLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKSk7
Cit9CisKK1JlZjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNsb25lKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKKworICAgIGF1dG8gc3RvcmFnZUFy
ZWEgPSBTdG9yYWdlQXJlYTo6Y3JlYXRlKG51bGxwdHIsIG1fc2VjdXJpdHlPcmlnaW4sIG1fcXVv
dGFJbkJ5dGVzKTsKKyAgICBzdG9yYWdlQXJlYS0+bV9zdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFw
OworCisgICAgcmV0dXJuIHN0b3JhZ2VBcmVhOworfQorCit2b2lkIFN0b3JhZ2VBcmVhOjpzZXRJ
dGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qg
c291cmNlU3RvcmFnZUFyZWFJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBib29sJiBxdW90YUV4Y2VwdGlvbikKK3sKKyAg
ICBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7CisKKyAgICBTdHJpbmcgb2xk
VmFsdWU7CisKKyAgICBhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnNldEl0ZW0o
a2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKKyAgICBpZiAobmV3U3RvcmFn
ZU1hcCkKKyAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKwor
ICAgIGlmIChxdW90YUV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbG9j
YWxTdG9yYWdlRGF0YWJhc2UpCisgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPnNldEl0
ZW0oa2V5LCB2YWx1ZSk7CisKKyAgICBkaXNwYXRjaEV2ZW50cyhzb3VyY2VDb25uZWN0aW9uLCBz
b3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIG9sZFZhbHVlLCB2YWx1ZSwgdXJsU3RyaW5nKTsKK30K
Kwordm9pZCBTdG9yYWdlQXJlYTo6c2V0SXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mIGl0ZW1zKQoreworICAgIC8vIEltcG9ydCBpdGVtcyBmcm9tIHdlYiBwcm9jZXNzIGlmIGl0
ZW1zIGFyZSBub3Qgc3RvcmVkIG9uIGRpc2suCisgICAgaWYgKCFpc0VwaGVtZXJhbCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgeworICAgICAgICBT
dHJpbmcgb2xkVmFsdWU7CisgICAgICAgIGJvb2wgcXVvdGFFeGNlcHRpb247CisgICAgICAgIGF1
dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+c2V0SXRlbShpdGVtLmtleSwgaXRlbS52
YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKG5ld1N0b3JhZ2VN
YXApCisgICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHF1b3RhRXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShJUEM6OkNvbm5lY3Rp
b246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVh
SUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBv
cGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7CisKKyAgICBTdHJpbmcgb2xkVmFs
dWU7CisgICAgYXV0byBuZXdTdG9yYWdlTWFwID0gbV9zdG9yYWdlTWFwLT5yZW1vdmVJdGVtKGtl
eSwgb2xkVmFsdWUpOworICAgIGlmIChuZXdTdG9yYWdlTWFwKQorICAgICAgICBtX3N0b3JhZ2VN
YXAgPSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOworCisgICAgaWYgKG9sZFZhbHVlLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9sb2NhbFN0b3JhZ2VEYXRhYmFzZSkKKyAg
ICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+cmVtb3ZlSXRlbShrZXkpOworCisgICAgZGlz
cGF0Y2hFdmVudHMoc291cmNlQ29ubmVjdGlvbiwgc291cmNlU3RvcmFnZUFyZWFJRCwga2V5LCBv
bGRWYWx1ZSwgU3RyaW5nKCksIHVybFN0cmluZyk7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWE6OmNs
ZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qg
c291cmNlU3RvcmFnZUFyZWFJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgb3Bl
bkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOworCisgICAgaWYgKCFtX3N0b3JhZ2VN
YXAtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0b3JhZ2VNYXAgPSBTdG9y
YWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOworCisgICAgaWYgKG1fbG9jYWxTdG9yYWdl
RGF0YWJhc2UpCisgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmNsZWFyKCk7CisKKyAg
ICBkaXNwYXRjaEV2ZW50cyhzb3VyY2VDb25uZWN0aW9uLCBzb3VyY2VTdG9yYWdlQXJlYUlELCBT
dHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCB1cmxTdHJpbmcpOworfQorCitjb25zdCBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYgU3RvcmFnZUFyZWE6Oml0ZW1zKCkgY29uc3QKK3sKKyAgICBv
cGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7CisKKyAgICByZXR1cm4gbV9zdG9y
YWdlTWFwLT5pdGVtcygpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhOjpjbGVhcigpCit7CisgICAg
bV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKKworICAg
IGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKSB7CisgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0
YWJhc2UtPmNsb3NlKCk7CisgICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UgPSBudWxscHRy
OworICAgIH0KKworICAgIGZvciAoYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKSwg
ZW5kID0gbV9ldmVudExpc3RlbmVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29ubmVjdGlvbklEID0gaXQtPmZpcnN0LCBkZXN0
aW5hdGlvblN0b3JhZ2VBcmVhSUQgPSBpdC0+c2Vjb25kXSB7CisgICAgICAgICAgICBpZiAoYXV0
byogY29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y29ubmVjdGlvbihjb25uZWN0aW9uSUQp
KQorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VBcmVh
TWFwOjpDbGVhckNhY2hlKCksIGRlc3RpbmF0aW9uU3RvcmFnZUFyZWFJRCk7CisgICAgICAgIH0p
OworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYTo6b3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRl
bXNJZk5lZWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5z
dG9yYWdlTWFuYWdlcigpLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIoKSk7CisgICAgLy8g
V2Ugb3BlbiB0aGUgZGF0YWJhc2UgaGVyZSBldmVuIGlmIHdlJ3ZlIGFscmVhZHkgaW1wb3J0ZWQg
b3VyIGl0ZW1zIHRvIGVuc3VyZSB0aGF0IHRoZSBkYXRhYmFzZSBpcyBvcGVuIGlmIHdlIG5lZWQg
dG8gd3JpdGUgdG8gaXQuCisgICAgaWYgKCFtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQorICAgICAg
ICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlID0gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZSht
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+d29ya1F1ZXVlKCksICpt
X2xvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bG9jYWxTdG9yYWdlRGF0
YWJhc2VUcmFja2VyKCksIG1fc2VjdXJpdHlPcmlnaW4pOworCisgICAgaWYgKG1fZGlkSW1wb3J0
SXRlbXNGcm9tRGF0YWJhc2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbG9jYWxTdG9yYWdl
RGF0YWJhc2UtPmltcG9ydEl0ZW1zKCptX3N0b3JhZ2VNYXApOworICAgIG1fZGlkSW1wb3J0SXRl
bXNGcm9tRGF0YWJhc2UgPSB0cnVlOworfQorCit2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaEV2
ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIHVpbnQ2NF90
IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9s
ZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykg
Y29uc3QKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJzLmJlZ2luKCksIGVu
ZCA9IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBz
b3VyY2VTdG9yYWdlQXJlYUlEID0gaXQtPmZpcnN0ID09IHNvdXJjZUNvbm5lY3Rpb24gPyBzb3Vy
Y2VTdG9yYWdlQXJlYUlEIDogMDsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W2Nvbm5lY3Rpb25JRCA9IGl0LT5maXJzdCwgc291cmNlU3RvcmFnZUFyZWFJRCwgZGVzdGluYXRp
b25TdG9yYWdlQXJlYUlEID0gaXQtPnNlY29uZCwga2V5ID0ga2V5Lmlzb2xhdGVkQ29weSgpLCBv
bGRWYWx1ZSA9IG9sZFZhbHVlLmlzb2xhdGVkQ29weSgpLCBuZXdWYWx1ZSA9IG5ld1ZhbHVlLmlz
b2xhdGVkQ29weSgpLCB1cmxTdHJpbmcgPSB1cmxTdHJpbmcuaXNvbGF0ZWRDb3B5KCldIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBjb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjb25uZWN0
aW9uKGNvbm5lY3Rpb25JRCkpCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNz
YWdlczo6U3RvcmFnZUFyZWFNYXA6OkRpc3BhdGNoU3RvcmFnZUV2ZW50KHNvdXJjZVN0b3JhZ2VB
cmVhSUQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmxTdHJpbmcpLCBkZXN0aW5hdGlvblN0
b3JhZ2VBcmVhSUQpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZUFyZWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDAxMDc1NGM3ZjQxYTI2OTJlODMxN2M1Njc5ODVj
YTcwMDIyNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBTdG9yYWdlTWFwOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
TG9jYWxTdG9yYWdlRGF0YWJhc2U7CitjbGFzcyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2U7CisKK2Ns
YXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2VBcmVh
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTdG9yYWdlQXJlYT4gY3JlYXRlKExvY2FsU3Rv
cmFnZU5hbWVzcGFjZSogbG9jYWxTdG9yYWdlTmFtZXNwYWNlLCBjb25zdCBXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlQXJlYShsb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UsIHNlY3VyaXR5T3JpZ2luLCBxdW90YUluQnl0ZXMpKTsKKyAgICB9CisgICAg
CisgICAgflN0b3JhZ2VBcmVhKCk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEmIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbjsg
fQorCisgICAgdm9pZCBhZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlELCB1aW50
NjRfdCBzdG9yYWdlTWFwSUQpOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCwgdWludDY0X3Qgc3RvcmFnZU1hcElEKTsKKyAgICBib29sIGhhc0xpc3Rl
bmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90IHN0b3JhZ2VNYXBJRCkgY29u
c3Q7CisKKyAgICBSZWY8U3RvcmFnZUFyZWE+IGNsb25lKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCB1aW50NjRf
dCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKTsKKyAg
ICB2b2lkIHNldEl0ZW1zKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik7CisgICAgdm9p
ZCByZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwg
dWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKTsKKyAgICB2b2lkIGNsZWFyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVl
SUQgc291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpOworCisgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4m
IGl0ZW1zKCkgY29uc3Q7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgYm9vbCBpc0VwaGVtZXJh
bCgpIGNvbnN0IHsgcmV0dXJuICFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZTsgfQorCisgICAgdm9p
ZCBvcGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgU3RvcmFnZUFyZWEoTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiwgY29uc3QgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKKworICAgIHZvaWQg
ZGlzcGF0Y2hFdmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9u
LCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpIGNvbnN0OworCisgICAgLy8gV2lsbCBiZSBudWxsIGlmIHRoZSBzdG9yYWdlIGFy
ZWEgYmVsb25ncyB0byBhIHNlc3Npb24gc3RvcmFnZSBuYW1lc3BhY2Ugb3IgdGhlIHN0b3JhZ2Ug
YXJlYSBpcyBpbiBhbiBlcGhlbWVyYWwgc2Vzc2lvbi4KKyAgICBXZWFrUHRyPExvY2FsU3RvcmFn
ZU5hbWVzcGFjZT4gbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2U7CisgICAgbXV0YWJsZSBSZWZQdHI8
TG9jYWxTdG9yYWdlRGF0YWJhc2U+IG1fbG9jYWxTdG9yYWdlRGF0YWJhc2U7CisgICAgbXV0YWJs
ZSBib29sIG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0YWJhc2UgeyBmYWxzZSB9OworCisgICAgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG1fc2VjdXJpdHlPcmlnaW47CisgICAgdW5zaWduZWQg
bV9xdW90YUluQnl0ZXMgeyAwIH07CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZU1hcD4g
bV9zdG9yYWdlTWFwOworICAgIEhhc2hTZXQ8c3RkOjpwYWlyPElQQzo6Q29ubmVjdGlvbjo6VW5p
cXVlSUQsIHVpbnQ2NF90Pj4gbV9ldmVudExpc3RlbmVyczsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggYTE3YzU3OWNiYWE1N2UxOTI1MWE2MzQw
YmVkYmQxZWFkYjdkNjk4Mi4uYjc0YjkxNTk0ZDNhOTYwOWVlN2IzN2E0N2U3NDRhMTQwMjRjNmZj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0yOCw4ICsyOCwxMiBAQAogCiAjaW5jbHVkZSAi
TG9jYWxTdG9yYWdlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VEYXRhYmFzZVRy
YWNrZXIuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJT
ZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5j
bHVkZSAiU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2Vy
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5IYXNoLmg+CkBA
IC00Miw0NDcgKzQ2LDggQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKLWNsYXNzIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE+IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFN0b3JhZ2VBcmVhPiBjcmVhdGUoTG9jYWxTdG9yYWdlTmFtZXNwYWNl
KiwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKLSAg
ICB+U3RvcmFnZUFyZWEoKTsKLQotICAgIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYgc2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luOyB9Ci0K
LSAgICB2b2lkIGFkZExpc3RlbmVyKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQsIHVpbnQ2NF90
IHN0b3JhZ2VNYXBJRCk7Ci0gICAgdm9pZCByZW1vdmVMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246
OlVuaXF1ZUlELCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpOwotICAgIGJvb2wgaGFzTGlzdGVuZXIo
SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Qgc3RvcmFnZU1hcElEKSBjb25zdDsK
LQotICAgIFJlZjxTdG9yYWdlQXJlYT4gY2xvbmUoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SXRl
bShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIHVpbnQ2NF90IHNv
dXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgYm9vbCYgcXVvdGFFeGNlcHRpb24pOwotICAgIHZv
aWQgc2V0SXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKLSAgICB2b2lkIHJl
bW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCB1aW50
NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpOwotICAgIHZvaWQgY2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBz
b3VyY2VDb25uZWN0aW9uLCB1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZyk7Ci0KLSAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRl
bXMoKSBjb25zdDsKLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICBib29sIGlzRXBoZW1lcmFsKCkg
Y29uc3QgeyByZXR1cm4gIW1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlOyB9Ci0KLSAgICB2b2lkIG9w
ZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBTdG9yYWdlQXJlYShMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqLCBjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpOwotCi0gICAgdm9pZCBkaXNw
YXRjaEV2ZW50cyhJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIHVp
bnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZykgY29uc3Q7Ci0KLSAgICAvLyBXaWxsIGJlIG51bGwgaWYgdGhlIHN0b3JhZ2UgYXJlYSBi
ZWxvbmdzIHRvIGEgc2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFjZSBvciB0aGUgc3RvcmFnZSBhcmVh
IGlzIGluIGFuIGVwaGVtZXJhbCBzZXNzaW9uLgotICAgIFdlYWtQdHI8TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlPiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZTsKLSAgICBtdXRhYmxlIFJlZlB0cjxMb2Nh
bFN0b3JhZ2VEYXRhYmFzZT4gbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZTsKLSAgICBtdXRhYmxlIGJv
b2wgbV9kaWRJbXBvcnRJdGVtc0Zyb21EYXRhYmFzZSB7IGZhbHNlIH07Ci0KLSAgICBTZWN1cml0
eU9yaWdpbkRhdGEgbV9zZWN1cml0eU9yaWdpbjsKLSAgICB1bnNpZ25lZCBtX3F1b3RhSW5CeXRl
czsKLQotICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBtX3N0b3JhZ2VNYXA7Ci0gICAgSGFzaFNldDxz
dGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCwgdWludDY0X3Q+PiBtX2V2ZW50TGlz
dGVuZXJzOwotfTsKLQotY2xhc3MgU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFj
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8TG9jYWxTdG9yYWdlTmFtZXNwYWNlPiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxMb2NhbFN0b3JhZ2VOYW1lc3BhY2U+IGNyZWF0ZShTdG9yYWdlTWFuYWdl
ciYsIHVpbnQ2NF90IHN0b3JhZ2VNYW5hZ2VySUQpOwotICAgIH5Mb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UoKTsKLQotICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIGNvbnN0IHsgcmV0
dXJuICZtX3N0b3JhZ2VNYW5hZ2VyOyB9Ci0KLSAgICBlbnVtIGNsYXNzIElzRXBoZW1lcmFsIDog
Ym9vbCB7IE5vLCBZZXMgfTsKLSAgICBSZWY8U3RvcmFnZUFyZWE+IGdldE9yQ3JlYXRlU3RvcmFn
ZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRhJiYsIElzRXBoZW1lcmFsKTsKLQotICAgIHZvaWQgY2xl
YXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmKTsK
LSAgICB2b2lkIGNsZWFyQWxsU3RvcmFnZUFyZWFzKCk7Ci0KLSAgICBWZWN0b3I8U2VjdXJpdHlP
cmlnaW5EYXRhPiBlcGhlbWVyYWxPcmlnaW5zKCkgY29uc3Q7Ci0gICAgdm9pZCBjbG9uZVRvKExv
Y2FsU3RvcmFnZU5hbWVzcGFjZSYgbmV3TG9jYWxTdG9yYWdlTmFtZXNwYWNlKTsKLQotcHJpdmF0
ZToKLSAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZU1hbmFnZXImLCB1aW50NjRfdCBz
dG9yYWdlTWFuYWdlcklEKTsKLQotICAgIFN0b3JhZ2VNYW5hZ2VyJiBtX3N0b3JhZ2VNYW5hZ2Vy
OwotICAgIHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzOwotCi0gICAgSGFzaE1hcDxTZWN1cml0eU9y
aWdpbkRhdGEsIFJlZlB0cjxTdG9yYWdlQXJlYT4+IG1fc3RvcmFnZUFyZWFNYXA7Ci19OwotCiAv
LyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYnN0b3JhZ2UvI2Rpc2stc3Bh
Y2UKLWNvbnN0IHVuc2lnbmVkIGxvY2FsU3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVzID0gNSAq
IDEwMjQgKiAxMDI0OwotCi1jbGFzcyBTdG9yYWdlTWFuYWdlcjo6VHJhbnNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZT4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8VHJhbnNpZW50TG9j
YWxTdG9yYWdlTmFtZXNwYWNlPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKCkpOwotICAgIH0KLQotICAg
IH5UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoKQotICAgIHsKLSAgICB9Ci0KLSAgICBS
ZWY8U3RvcmFnZUFyZWE+IGdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW5EYXRh
JiYgc2VjdXJpdHlPcmlnaW4pCi0gICAgewotICAgICAgICByZXR1cm4gKm1fc3RvcmFnZUFyZWFN
YXAuZW5zdXJlKHNlY3VyaXR5T3JpZ2luLCBbdGhpcywgJnNlY3VyaXR5T3JpZ2luXSgpIG11dGFi
bGUgewotICAgICAgICAgICAgcmV0dXJuIFN0b3JhZ2VBcmVhOjpjcmVhdGUobnVsbHB0ciwgV1RG
TW92ZShzZWN1cml0eU9yaWdpbiksIG1fcXVvdGFJbkJ5dGVzKTsKLSAgICAgICAgfSkuaXRlcmF0
b3ItPnZhbHVlLmNvcHlSZWYoKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5E
YXRhPiBvcmlnaW5zKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxTZWN1cml0eU9yaWdp
bkRhdGE+IG9yaWdpbnM7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdG9yYWdlQXJlYSA6
IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICghc3RvcmFnZUFy
ZWEtPml0ZW1zKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKHN0
b3JhZ2VBcmVhLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBvcmlnaW5zOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09y
aWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKQotICAgIHsKLSAg
ICAgICAgYXV0byBvcmlnaW5BbmRTdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZmluZChz
ZWN1cml0eU9yaWdpbik7Ci0gICAgICAgIGlmIChvcmlnaW5BbmRTdG9yYWdlQXJlYSAhPSBtX3N0
b3JhZ2VBcmVhTWFwLmVuZCgpKQotICAgICAgICAgICAgb3JpZ2luQW5kU3RvcmFnZUFyZWEtPnZh
bHVlLT5jbGVhcigpOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJBbGxTdG9yYWdlQXJlYXMoKQot
ICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAu
dmFsdWVzKCkpCi0gICAgICAgICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgY29uc3QgdW5zaWduZWQgbV9xdW90YUluQnl0ZXMgPSBsb2NhbFN0
b3JhZ2VEYXRhYmFzZVF1b3RhSW5CeXRlczsKLQotICAgIEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5E
YXRhLCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVhTWFwOwotfTsKLQotYXV0byBT
dG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6OmNyZWF0ZShMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uq
IGxvY2FsU3RvcmFnZU5hbWVzcGFjZSwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0
eU9yaWdpbiwgdW5zaWduZWQgcXVvdGFJbkJ5dGVzKSAtPiBSZWY8U3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VBcmVhPgotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VBcmVhKGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZSwgc2VjdXJpdHlPcmlnaW4sIHF1b3RhSW5CeXRlcykpOwotfQotCi1T
dG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKExvY2FsU3RvcmFnZU5hbWVz
cGFjZSogbG9jYWxTdG9yYWdlTmFtZXNwYWNlLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNl
Y3VyaXR5T3JpZ2luLCB1bnNpZ25lZCBxdW90YUluQnl0ZXMpCi0gICAgOiBtX2xvY2FsU3RvcmFn
ZU5hbWVzcGFjZShsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgPyBtYWtlV2Vha1B0cigqbG9jYWxTdG9y
YWdlTmFtZXNwYWNlKSA6IG51bGxwdHIpCi0gICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3VyaXR5
T3JpZ2luKQotICAgICwgbV9xdW90YUluQnl0ZXMocXVvdGFJbkJ5dGVzKQotICAgICwgbV9zdG9y
YWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0ZShtX3F1b3RhSW5CeXRlcykpCi17Ci19Ci0KLVN0b3Jh
Z2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6flN0b3JhZ2VBcmVhKCkKLXsKLSAgICBBU1NFUlQobV9l
dmVudExpc3RlbmVycy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV9sb2NhbFN0b3JhZ2VOYW1l
c3BhY2UpOwotCi0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0gICAgICAgIG1fbG9j
YWxTdG9yYWdlRGF0YWJhc2UtPmNsb3NlKCk7Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VBcmVhOjphZGRMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rp
b25JRCwgdWludDY0X3Qgc3RvcmFnZU1hcElEKQotewotICAgIEFTU0VSVCghbV9ldmVudExpc3Rl
bmVycy5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHN0b3JhZ2VNYXBJRCkp
KTsKLSAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQs
IHN0b3JhZ2VNYXBJRCkpOwotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6
cmVtb3ZlTGlzdGVuZXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBjb25uZWN0aW9uSUQsIHVp
bnQ2NF90IHN0b3JhZ2VNYXBJRCkKLXsKLSAgICBBU1NFUlQoaXNFcGhlbWVyYWwoKSB8fCBtX2V2
ZW50TGlzdGVuZXJzLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgc3RvcmFn
ZU1hcElEKSkpOwotICAgIG1fZXZlbnRMaXN0ZW5lcnMucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNv
bm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKSk7Ci19Ci0KLWJvb2wgU3RvcmFnZU1hbmFnZXI6OlN0
b3JhZ2VBcmVhOjpoYXNMaXN0ZW5lcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGNvbm5lY3Rp
b25JRCwgdWludDY0X3Qgc3RvcmFnZU1hcElEKSBjb25zdAotewotICAgIHJldHVybiBtX2V2ZW50
TGlzdGVuZXJzLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1h
cElEKSk7Ci19Ci0KLVJlZjxTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE+IFN0b3JhZ2VNYW5h
Z2VyOjpTdG9yYWdlQXJlYTo6Y2xvbmUoKSBjb25zdAotewotICAgIEFTU0VSVCghbV9sb2NhbFN0
b3JhZ2VOYW1lc3BhY2UpOwotCi0gICAgYXV0byBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVhOjpj
cmVhdGUobnVsbHB0ciwgbV9zZWN1cml0eU9yaWdpbiwgbV9xdW90YUluQnl0ZXMpOwotICAgIHN0
b3JhZ2VBcmVhLT5tX3N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXA7Ci0KLSAgICByZXR1cm4gc3Rv
cmFnZUFyZWE7Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjpzZXRJdGVt
KElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qgc291
cmNlU3RvcmFnZUFyZWFJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBib29sJiBxdW90YUV4Y2VwdGlvbikKLXsKLSAgICBv
cGVuRGF0YWJhc2VBbmRJbXBvcnRJdGVtc0lmTmVlZGVkKCk7Ci0KLSAgICBTdHJpbmcgb2xkVmFs
dWU7Ci0KLSAgICBhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5
LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKLSAgICBpZiAobmV3U3RvcmFnZU1h
cCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKLQotICAg
IGlmIChxdW90YUV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fbG9jYWxT
dG9yYWdlRGF0YWJhc2UpCi0gICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPnNldEl0ZW0o
a2V5LCB2YWx1ZSk7Ci0KLSAgICBkaXNwYXRjaEV2ZW50cyhzb3VyY2VDb25uZWN0aW9uLCBzb3Vy
Y2VTdG9yYWdlQXJlYUlELCBrZXksIG9sZFZhbHVlLCB2YWx1ZSwgdXJsU3RyaW5nKTsKLX0KLQot
dm9pZCBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6OnNldEl0ZW1zKGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBpdGVtcykKLXsKLSAgICAvLyBJbXBvcnQgaXRlbXMgZnJvbSB3ZWIg
cHJvY2VzcyBpZiBpdGVtcyBhcmUgbm90IHN0b3JlZCBvbiBkaXNrLgotICAgIGlmICghaXNFcGhl
bWVyYWwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMp
IHsKLSAgICAgICAgU3RyaW5nIG9sZFZhbHVlOwotICAgICAgICBib29sIHF1b3RhRXhjZXB0aW9u
OwotICAgICAgICBhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPnNldEl0ZW0oaXRl
bS5rZXksIGl0ZW0udmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbik7Ci0gICAgICAgIGlm
IChuZXdTdG9yYWdlTWFwKQotICAgICAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdT
dG9yYWdlTWFwKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChxdW90YUV4Y2VwdGlvbikKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VB
cmVhOjpyZW1vdmVJdGVtKElQQzo6Q29ubmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlv
biwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIG9wZW5EYXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZO
ZWVkZWQoKTsKLQotICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICBhdXRvIG5ld1N0b3JhZ2VNYXAg
PSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7Ci0gICAgaWYgKG5ld1N0
b3JhZ2VNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3RvcmFnZU1hcCk7
Ci0KLSAgICBpZiAob2xkVmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNl
LT5yZW1vdmVJdGVtKGtleSk7Ci0KLSAgICBkaXNwYXRjaEV2ZW50cyhzb3VyY2VDb25uZWN0aW9u
LCBzb3VyY2VTdG9yYWdlQXJlYUlELCBrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgdXJsU3RyaW5n
KTsKLX0KLQotdm9pZCBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFyZWE6OmNsZWFyKElQQzo6Q29u
bmVjdGlvbjo6VW5pcXVlSUQgc291cmNlQ29ubmVjdGlvbiwgdWludDY0X3Qgc291cmNlU3RvcmFn
ZUFyZWFJRCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgb3BlbkRhdGFiYXNlQW5k
SW1wb3J0SXRlbXNJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVh
dGUobV9xdW90YUluQnl0ZXMpOwotCi0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpCi0g
ICAgICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmNsZWFyKCk7Ci0KLSAgICBkaXNwYXRjaEV2
ZW50cyhzb3VyY2VDb25uZWN0aW9uLCBzb3VyY2VTdG9yYWdlQXJlYUlELCBTdHJpbmcoKSwgU3Ry
aW5nKCksIFN0cmluZygpLCB1cmxTdHJpbmcpOwotfQotCi1jb25zdCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiYgU3RvcmFnZU1hbmFnZXI6OlN0b3JhZ2VBcmVhOjppdGVtcygpIGNvbnN0Ci17Ci0g
ICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIG1f
c3RvcmFnZU1hcC0+aXRlbXMoKTsKLX0KLQotdm9pZCBTdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFy
ZWE6OmNsZWFyKCkKLXsKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9x
dW90YUluQnl0ZXMpOwotCi0gICAgaWYgKG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UpIHsKLSAgICAg
ICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+Y2xvc2UoKTsKLSAgICAgICAgbV9sb2NhbFN0b3Jh
Z2VEYXRhYmFzZSA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvIGl0ID0gbV9ldmVu
dExpc3RlbmVycy5iZWdpbigpLCBlbmQgPSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb25uZWN0aW9u
SUQgPSBpdC0+Zmlyc3QsIGRlc3RpbmF0aW9uU3RvcmFnZUFyZWFJRCA9IGl0LT5zZWNvbmRdIHsK
LSAgICAgICAgICAgIGlmIChhdXRvKiBjb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjb25u
ZWN0aW9uKGNvbm5lY3Rpb25JRCkpCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi0+c2VuZChN
ZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6OkNsZWFyQ2FjaGUoKSwgZGVzdGluYXRpb25TdG9yYWdl
QXJlYUlEKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpT
dG9yYWdlQXJlYTo6b3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTWFuYWdlcigpLT5tX2xv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlcik7Ci0gICAgLy8gV2Ugb3BlbiB0aGUgZGF0YWJhc2Ug
aGVyZSBldmVuIGlmIHdlJ3ZlIGFscmVhZHkgaW1wb3J0ZWQgb3VyIGl0ZW1zIHRvIGVuc3VyZSB0
aGF0IHRoZSBkYXRhYmFzZSBpcyBvcGVuIGlmIHdlIG5lZWQgdG8gd3JpdGUgdG8gaXQuCi0gICAg
aWYgKCFtX2xvY2FsU3RvcmFnZURhdGFiYXNlKQotICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFi
YXNlID0gTG9jYWxTdG9yYWdlRGF0YWJhc2U6OmNyZWF0ZShtX2xvY2FsU3RvcmFnZU5hbWVzcGFj
ZS0+c3RvcmFnZU1hbmFnZXIoKS0+bV9xdWV1ZS5jb3B5UmVmKCksICptX2xvY2FsU3RvcmFnZU5h
bWVzcGFjZS0+c3RvcmFnZU1hbmFnZXIoKS0+bV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIs
IG1fc2VjdXJpdHlPcmlnaW4pOwotCi0gICAgaWYgKG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0YWJh
c2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbG9jYWxTdG9yYWdlRGF0YWJhc2UtPmltcG9y
dEl0ZW1zKCptX3N0b3JhZ2VNYXApOwotICAgIG1fZGlkSW1wb3J0SXRlbXNGcm9tRGF0YWJhc2Ug
PSB0cnVlOwotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYTo6ZGlzcGF0Y2hF
dmVudHMoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9uLCB1aW50NjRf
dCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBv
bGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
IGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvIGl0ID0gbV9ldmVudExpc3RlbmVycy5iZWdpbigpLCBl
bmQgPSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
c291cmNlU3RvcmFnZUFyZWFJRCA9IGl0LT5maXJzdCA9PSBzb3VyY2VDb25uZWN0aW9uID8gc291
cmNlU3RvcmFnZUFyZWFJRCA6IDA7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtjb25uZWN0aW9uSUQgPSBpdC0+Zmlyc3QsIHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGRlc3RpbmF0
aW9uU3RvcmFnZUFyZWFJRCA9IGl0LT5zZWNvbmQsIGtleSA9IGtleS5pc29sYXRlZENvcHkoKSwg
b2xkVmFsdWUgPSBvbGRWYWx1ZS5pc29sYXRlZENvcHkoKSwgbmV3VmFsdWUgPSBuZXdWYWx1ZS5p
c29sYXRlZENvcHkoKSwgdXJsU3RyaW5nID0gdXJsU3RyaW5nLmlzb2xhdGVkQ29weSgpXSB7Ci0g
ICAgICAgICAgICBpZiAoYXV0byogY29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y29ubmVj
dGlvbihjb25uZWN0aW9uSUQpKQotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjpEaXNwYXRjaFN0b3JhZ2VFdmVudChzb3VyY2VTdG9yYWdl
QXJlYUlELCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsU3RyaW5nKSwgZGVzdGluYXRpb25T
dG9yYWdlQXJlYUlEKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi1SZWY8U3RvcmFnZU1hbmFn
ZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5h
bWVzcGFjZTo6Y3JlYXRlKFN0b3JhZ2VNYW5hZ2VyJiBzdG9yYWdlTWFuYWdlciwgdWludDY0X3Qg
c3RvcmFnZU5hbWVzcGFjZUlEKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExvY2FsU3Rv
cmFnZU5hbWVzcGFjZShzdG9yYWdlTWFuYWdlciwgc3RvcmFnZU5hbWVzcGFjZUlEKSk7Ci19Ci0K
LS8vIEZJWE1FOiBUaGUgcXVvdGEgdmFsdWUgaXMgY29waWVkIGZyb20gR3JvdXBTZXR0aW5ncy5j
cHAuCi0vLyBXZSBzaG91bGQgaW52ZXN0aWdhdGUgYSB3YXkgdG8gc2hhcmUgaXQgd2l0aCBXZWJD
b3JlLgotU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6TG9jYWxTdG9yYWdl
TmFtZXNwYWNlKFN0b3JhZ2VNYW5hZ2VyJiBzdG9yYWdlTWFuYWdlciwgdWludDY0X3Qgc3RvcmFn
ZU5hbWVzcGFjZUlEKQotICAgIDogbV9zdG9yYWdlTWFuYWdlcihzdG9yYWdlTWFuYWdlcikKLSAg
ICAsIG1fcXVvdGFJbkJ5dGVzKGxvY2FsU3RvcmFnZURhdGFiYXNlUXVvdGFJbkJ5dGVzKQotewot
fQotCi1TdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjp+TG9jYWxTdG9yYWdl
TmFtZXNwYWNlKCkKLXsKLX0KLQotYXV0byBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3Vy
aXR5T3JpZ2luLCBJc0VwaGVtZXJhbCBpc0VwaGVtZXJhbCkgLT4gUmVmPFN0b3JhZ2VBcmVhPgot
ewotICAgIHJldHVybiAqbV9zdG9yYWdlQXJlYU1hcC5lbnN1cmUoc2VjdXJpdHlPcmlnaW4sIFsm
XSgpIG11dGFibGUgewotICAgICAgICByZXR1cm4gU3RvcmFnZUFyZWE6OmNyZWF0ZShpc0VwaGVt
ZXJhbCA9PSBJc0VwaGVtZXJhbDo6WWVzID8gbnVsbHB0ciA6IHRoaXMsIFdURk1vdmUoc2VjdXJp
dHlPcmlnaW4pLCBtX3F1b3RhSW5CeXRlcyk7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotfQot
Ci12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyU3RvcmFn
ZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9y
aWdpbikKLXsKLSAgICBhdXRvIG9yaWdpbkFuZFN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1h
cC5maW5kKHNlY3VyaXR5T3JpZ2luKTsKLSAgICBpZiAob3JpZ2luQW5kU3RvcmFnZUFyZWEgIT0g
bV9zdG9yYWdlQXJlYU1hcC5lbmQoKSkKLSAgICAgICAgb3JpZ2luQW5kU3RvcmFnZUFyZWEtPnZh
bHVlLT5jbGVhcigpOwotfQotCi12b2lkIFN0b3JhZ2VNYW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1l
c3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKLXsKLSAgICBmb3IgKGF1dG8gc3RvcmFnZUFy
ZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQotICAgICAgICBzdG9yYWdlQXJlYS0+Y2xl
YXIoKTsKLX0KLQotVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gU3RvcmFnZU1hbmFnZXI6Okxv
Y2FsU3RvcmFnZU5hbWVzcGFjZTo6ZXBoZW1lcmFsT3JpZ2lucygpIGNvbnN0Ci17Ci0gICAgVmVj
dG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN0
b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIXN0
b3JhZ2VBcmVhLT5pdGVtcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5k
KHN0b3JhZ2VBcmVhLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9yaWdp
bnM7Ci19Ci0KLXZvaWQgU3RvcmFnZU1hbmFnZXI6OkxvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xv
bmVUbyhMb2NhbFN0b3JhZ2VOYW1lc3BhY2UmIG5ld0xvY2FsU3RvcmFnZU5hbWVzcGFjZSkKLXsK
LSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3N0b3JhZ2VBcmVhTWFwKQotICAgICAgICBuZXdMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UubV9zdG9yYWdlQXJlYU1hcC5hZGQocGFpci5rZXksIHBhaXIudmFs
dWUtPmNsb25lKCkpOwotfQotCi1jbGFzcyBTdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2U+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNlc3Npb25TdG9yYWdlTmFtZXNwYWNl
PiBjcmVhdGUodW5zaWduZWQgcXVvdGFJbkJ5dGVzKTsKLSAgICB+U2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2UoKTsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUFy
ZWFNYXAuaXNFbXB0eSgpOyB9Ci0KLSAgICBjb25zdCBIYXNoU2V0PElQQzo6Q29ubmVjdGlvbjo6
VW5pcXVlSUQ+JiBhbGxvd2VkQ29ubmVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRD
b25uZWN0aW9uczsgfQotICAgIHZvaWQgYWRkQWxsb3dlZENvbm5lY3Rpb24oSVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCk7Ci0gICAgdm9pZCByZW1vdmVBbGxvd2VkQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEKTsKLQotICAgIFJlZjxTdG9yYWdlQXJlYT4gZ2V0T3JDcmVhdGVT
dG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbkRhdGEmJik7Ci0KLSAgICB2b2lkIGNsb25lVG8oU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UmIG5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlKTsKLQotICAg
IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnMoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKLQotICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkgewotICAg
ICAgICAgICAgaWYgKCFzdG9yYWdlQXJlYS0+aXRlbXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgb3JpZ2lucy5hcHBlbmQoc3RvcmFnZUFyZWEtPnNlY3VyaXR5T3JpZ2luKCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG9yaWdpbnM7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVh
clN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2Vj
dXJpdHlPcmlnaW4pCi0gICAgewotICAgICAgICBhdXRvIG9yaWdpbkFuZFN0b3JhZ2VBcmVhID0g
bV9zdG9yYWdlQXJlYU1hcC5maW5kKHNlY3VyaXR5T3JpZ2luKTsKLSAgICAgICAgaWYgKG9yaWdp
bkFuZFN0b3JhZ2VBcmVhICE9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCkpCi0gICAgICAgICAgICBv
cmlnaW5BbmRTdG9yYWdlQXJlYS0+dmFsdWUtPmNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBj
bGVhckFsbFN0b3JhZ2VBcmVhcygpCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHN0b3JhZ2VB
cmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkKLSAgICAgICAgICAgIHN0b3JhZ2VBcmVh
LT5jbGVhcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YUluQnl0ZXMpOwotCi0gICAgSGFzaFNldDxJUEM6OkNv
bm5lY3Rpb246OlVuaXF1ZUlEPiBtX2FsbG93ZWRDb25uZWN0aW9uczsKLSAgICB1bnNpZ25lZCBt
X3F1b3RhSW5CeXRlczsKLQotICAgIEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCBSZWZQdHI8
U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVhTWFwOwotfTsKLQotUmVmPFN0b3JhZ2VNYW5hZ2Vy
OjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlOjpjcmVhdGUodW5zaWduZWQgcXVvdGFJbkJ5dGVzKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHF1b3RhSW5CeXRlcykpOwotfQot
Ci1TdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U6OlNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlKHVuc2lnbmVkIHF1b3RhSW5CeXRlcykKLSAgICA6IG1fcXVvdGFJbkJ5dGVzKHF1
b3RhSW5CeXRlcykKLXsKLX0KLQotU3RvcmFnZU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlTmFtZXNw
YWNlOjp+U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKQotewotfQotCi12b2lkIFN0b3JhZ2VNYW5h
Z2VyOjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6YWRkQWxsb3dlZENvbm5lY3Rpb24oSVBDOjpD
b25uZWN0aW9uOjpVbmlxdWVJRCBhbGxvd2VkQ29ubmVjdGlvbikKLXsKLSAgICBtX2FsbG93ZWRD
b25uZWN0aW9ucy5hZGQoYWxsb3dlZENvbm5lY3Rpb24pOwotfQotCi0KLXZvaWQgU3RvcmFnZU1h
bmFnZXI6OlNlc3Npb25TdG9yYWdlTmFtZXNwYWNlOjpyZW1vdmVBbGxvd2VkQ29ubmVjdGlvbihJ
UEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIGFsbG93ZWRDb25uZWN0aW9uKQotewotICAgIEFTU0VS
VChtX2FsbG93ZWRDb25uZWN0aW9ucy5jb250YWlucyhhbGxvd2VkQ29ubmVjdGlvbikpOwotICAg
IG1fYWxsb3dlZENvbm5lY3Rpb25zLnJlbW92ZShhbGxvd2VkQ29ubmVjdGlvbik7Ci19Ci1hdXRv
IFN0b3JhZ2VNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9y
YWdlQXJlYShTZWN1cml0eU9yaWdpbkRhdGEmJiBzZWN1cml0eU9yaWdpbikgLT4gUmVmPFN0b3Jh
Z2VBcmVhPgotewotICAgIHJldHVybiAqbV9zdG9yYWdlQXJlYU1hcC5lbnN1cmUoc2VjdXJpdHlP
cmlnaW4sIFt0aGlzLCAmc2VjdXJpdHlPcmlnaW5dKCkgbXV0YWJsZSB7Ci0gICAgICAgIHJldHVy
biBTdG9yYWdlQXJlYTo6Y3JlYXRlKG51bGxwdHIsIFdURk1vdmUoc2VjdXJpdHlPcmlnaW4pLCBt
X3F1b3RhSW5CeXRlcyk7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlLmNvcHlSZWYoKTsKLX0KLQot
dm9pZCBTdG9yYWdlTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2U6OmNsb25lVG8oU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UmIG5ld1Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlKQotewotICAg
IEFTU0VSVF9VTlVTRUQobmV3U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UsIG5ld1Nlc3Npb25TdG9y
YWdlTmFtZXNwYWNlLmlzRW1wdHkoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3N0b3Jh
Z2VBcmVhTWFwKQotICAgICAgICBuZXdTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5tX3N0b3JhZ2VB
cmVhTWFwLmFkZChwYWlyLmtleSwgcGFpci52YWx1ZS0+Y2xvbmUoKSk7Ci19Ci0KLVJlZjxTdG9y
YWdlTWFuYWdlcj4gU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShTdHJpbmcmJiBsb2NhbFN0b3JhZ2VE
aXJlY3RvcnkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZU1hbmFnZXIoV1RG
TW92ZShsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpKSk7Ci19Citjb25zdCB1bnNpZ25lZCBTdG9yYWdl
TWFuYWdlcjo6bG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90YUluQnl0ZXMgPSA1ICogMTAyNCAqIDEw
MjQ7CiAKIFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlTWFuYWdlcihTdHJpbmcmJiBsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkpCiAgICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUu
V2ViS2l0LlN0b3JhZ2VNYW5hZ2VyIikpCkBAIC03NDksNyArMzE0LDcgQEAgdm9pZCBTdG9yYWdl
TWFuYWdlcjo6Y3JlYXRlTG9jYWxTdG9yYWdlTWFwKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgdWludDY0X3QKICAgICBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIGxvY2FsU3RvcmFnZU5hbWVz
cGFjZSA9IGdldE9yQ3JlYXRlTG9jYWxTdG9yYWdlTmFtZXNwYWNlKHN0b3JhZ2VOYW1lc3BhY2VJ
RCk7CiAgICAgQVNTRVJUKGxvY2FsU3RvcmFnZU5hbWVzcGFjZSk7CiAKLSAgICBhdXRvIHN0b3Jh
Z2VBcmVhID0gbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFdU
Rk1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKSwgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIg
PyBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpJc0VwaGVtZXJhbDo6Tm8g
OiBTdG9yYWdlTWFuYWdlcjo6TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpJc0VwaGVtZXJhbDo6WWVz
KTsKKyAgICBhdXRvIHN0b3JhZ2VBcmVhID0gbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5nZXRPckNy
ZWF0ZVN0b3JhZ2VBcmVhKFdURk1vdmUoc2VjdXJpdHlPcmlnaW5EYXRhKSwgbV9sb2NhbFN0b3Jh
Z2VEYXRhYmFzZVRyYWNrZXIgPyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OklzRXBoZW1lcmFsOjpO
byA6IExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6SXNFcGhlbWVyYWw6Olllcyk7CiAgICAgc3RvcmFn
ZUFyZWEtPmFkZExpc3RlbmVyKGNvbm5lY3Rpb25JRCwgc3RvcmFnZU1hcElEKTsKIAogICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXVEZNb3ZlKHN0b3JhZ2VBcmVhKTsKQEAgLTk3MCw3ICs1
MzUsNyBAQCB2b2lkIFN0b3JhZ2VNYW5hZ2VyOjpyZXN1bWUoKQogICAgICAgICBtX3N0YXRlQ2hh
bmdlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogfQogCi1TdG9yYWdlTWFuYWdlcjo6U3RvcmFnZUFy
ZWEqIFN0b3JhZ2VNYW5hZ2VyOjpmaW5kU3RvcmFnZUFyZWEoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCB1aW50NjRfdCBzdG9yYWdlTWFwSUQpIGNvbnN0CitTdG9yYWdlQXJlYSogU3RvcmFn
ZU1hbmFnZXI6OmZpbmRTdG9yYWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVp
bnQ2NF90IHN0b3JhZ2VNYXBJRCkgY29uc3QKIHsKICAgICBzdGQ6OnBhaXI8SVBDOjpDb25uZWN0
aW9uOjpVbmlxdWVJRCwgdWludDY0X3Q+IGNvbm5lY3Rpb25BbmRTdG9yYWdlTWFwSURQYWlyKGNv
bm5lY3Rpb24udW5pcXVlSUQoKSwgc3RvcmFnZU1hcElEKTsKIApAQCAtOTgwLDcgKzU0NSw3IEBA
IFN0b3JhZ2VNYW5hZ2VyOjpTdG9yYWdlQXJlYSogU3RvcmFnZU1hbmFnZXI6OmZpbmRTdG9yYWdl
QXJlYShJUEM6OkNvbm5lY3Rpb24mIGNvCiAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWFzQnlDb25u
ZWN0aW9uLmdldChjb25uZWN0aW9uQW5kU3RvcmFnZU1hcElEUGFpcik7CiB9CiAKLVN0b3JhZ2VN
YW5hZ2VyOjpMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIFN0b3JhZ2VNYW5hZ2VyOjpnZXRPckNyZWF0
ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQpCitMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UqIFN0b3JhZ2VNYW5hZ2VyOjpnZXRPckNyZWF0ZUxvY2FsU3RvcmFn
ZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQpCiB7CiAgICAgaWYgKCFtX2xv
Y2FsU3RvcmFnZU5hbWVzcGFjZXMuaXNWYWxpZEtleShzdG9yYWdlTmFtZXNwYWNlSUQpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk5MCw3ICs1NTUsNyBAQCBTdG9yYWdlTWFuYWdlcjo6
TG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBTdG9yYWdlTWFuYWdlcjo6Z2V0T3JDcmVhdGVMb2NhbFN0
b3JhZ2VOYQogICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAotU3RvcmFnZU1hbmFn
ZXI6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSogU3RvcmFnZU1hbmFnZXI6OmdldE9y
Q3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlKHVpbnQ2NF90IHN0b3JhZ2VOYW1l
c3BhY2VJRCwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgdG9wTGV2ZWxPcmlnaW4pCitU
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UqIFN0b3JhZ2VNYW5hZ2VyOjpnZXRPckNyZWF0
ZVRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNl
SUQsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmIHRvcExldmVsT3JpZ2luKQogewogICAg
IGlmICghbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLmlzVmFsaWRLZXkoeyBzdG9y
YWdlTmFtZXNwYWNlSUQsIHRvcExldmVsT3JpZ2luIH0pKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmgKaW5kZXggNjBhMjVlM2QxYzMxMGE1YzBiOGZlYTRhYjE0M2VlYjcw
ZTE1YWMyMi4uMzE5OWE0MjBhOGZkYmNiYjFmNzdkNzJkMDE3ZWE2YjNjMDgwOTUwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5h
Z2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VNYW5hZ2VyLmgKQEAgLTQxLDEzICs0MSwyMSBAQCBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXI7Citj
bGFzcyBMb2NhbFN0b3JhZ2VOYW1lc3BhY2U7CitjbGFzcyBTZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZTsKK2NsYXNzIFN0b3JhZ2VBcmVhOworY2xhc3MgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNw
YWNlOwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwogCiB1c2luZyBHZXRWYWx1ZXNDYWxsYmFjayA9
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKT47
CiAKIGNsYXNzIFN0b3JhZ2VNYW5hZ2VyIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1
ZXVlTWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0b3JhZ2VNYW5h
Z2VyPiBjcmVhdGUoU3RyaW5nJiYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5KTsKKyAgICBzdGF0aWMg
UmVmPFN0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUoU3RyaW5nJiYgbG9jYWxTdG9yYWdlRGlyZWN0b3J5
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZU1hbmFnZXIoV1RG
TW92ZShsb2NhbFN0b3JhZ2VEaXJlY3RvcnkpKSk7CisgICAgfQorICAgIAogICAgIH5TdG9yYWdl
TWFuYWdlcigpOwogCiAgICAgdm9pZCBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSh1aW50
NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQsIHVuc2lnbmVkIHF1b3RhSW5CeXRlcyk7CkBAIC03NSw2
ICs4MywxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVu
Y29kZXI+JiByZXBseUVuY29kZXIpOworICAgIAorICAgIExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlciogbG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuZ2V0KCk7IH0KKyAgICAKKyAgICBXb3JrUXVldWUmIHdv
cmtRdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVldWUuZ2V0KCk7IH0KKyAgICAKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90YUluQnl0ZXM7CiAKIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgU3RvcmFnZU1hbmFnZXIoU3RyaW5nJiYgbG9jYWxTdG9yYWdl
RGlyZWN0b3J5KTsKQEAgLTkyLDEzICsxMDYsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92
ZUl0ZW0oSVBDOjpDb25uZWN0aW9uJiwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIHVp
bnQ2NF90IHN0b3JhZ2VNYXBJRCwgdWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgdWludDY0
X3Qgc3RvcmFnZU1hcFNlZWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHVybFN0
cmluZyk7CiAgICAgdm9pZCBjbGVhcihJUEM6OkNvbm5lY3Rpb24mLCBXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGEmJiwgdWludDY0X3Qgc3RvcmFnZU1hcElELCB1aW50NjRfdCBzb3VyY2VTdG9y
YWdlQXJlYUlELCB1aW50NjRfdCBzdG9yYWdlTWFwU2VlZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpOwogCi0gICAgY2xhc3MgU3RvcmFnZUFyZWE7CiAgICAgU3RvcmFnZUFyZWEqIGZpbmRTdG9y
YWdlQXJlYShJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCkgY29uc3Q7CiAKLSAgICBjbGFzcyBM
b2NhbFN0b3JhZ2VOYW1lc3BhY2U7CiAgICAgTG9jYWxTdG9yYWdlTmFtZXNwYWNlKiBnZXRPckNy
ZWF0ZUxvY2FsU3RvcmFnZU5hbWVzcGFjZSh1aW50NjRfdCBzdG9yYWdlTmFtZXNwYWNlSUQpOwog
Ci0gICAgY2xhc3MgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOwogICAgIFRyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZSogZ2V0T3JDcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UodWludDY0X3Qgc3RvcmFnZU5hbWVzcGFjZUlELCBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGEmJiB0b3BMZXZlbE9yaWdpbik7CiAKICAgICBSZWY8V29ya1F1ZXVlPiBtX3F1ZXVl
OwpAQCAtMTA4LDcgKzExOSw2IEBAIHByaXZhdGU6CiAKICAgICBIYXNoTWFwPHN0ZDo6cGFpcjx1
aW50NjRfdCwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiwgUmVmUHRyPFRyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZT4+IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlczsK
IAotICAgIGNsYXNzIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlOwogICAgIEhhc2hNYXA8dWludDY0
X3QsIFJlZlB0cjxTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZT4+IG1fc2Vzc2lvblN0b3JhZ2VOYW1l
c3BhY2VzOwogCiAgICAgSGFzaE1hcDxzdGQ6OnBhaXI8SVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJ
RCwgdWludDY0X3Q+LCBSZWZQdHI8U3RvcmFnZUFyZWE+PiBtX3N0b3JhZ2VBcmVhc0J5Q29ubmVj
dGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDEzOWE4ZGNhN2NlMGFiZjk1NDk4N2FiM2UxMDI2OTlmZWE1MGVmMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9U
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuaCIKKworI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVk
ZSAiU3RvcmFnZU1hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OlRyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZSgpCisgICAgOiBtX3F1b3RhSW5CeXRlcyhTdG9yYWdlTWFu
YWdlcjo6bG9jYWxTdG9yYWdlRGF0YWJhc2VRdW90YUluQnl0ZXMpCit7Cit9CisKK1RyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6flRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSgp
Cit7Cit9CisKK1JlZjxTdG9yYWdlQXJlYT4gVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
OjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luRGF0YSYmIHNlY3VyaXR5T3Jp
Z2luKQoreworICAgIHJldHVybiAqbV9zdG9yYWdlQXJlYU1hcC5lbnN1cmUoc2VjdXJpdHlPcmln
aW4sIFt0aGlzLCAmc2VjdXJpdHlPcmlnaW5dKCkgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiBT
dG9yYWdlQXJlYTo6Y3JlYXRlKG51bGxwdHIsIFdURk1vdmUoc2VjdXJpdHlPcmlnaW4pLCBtX3F1
b3RhSW5CeXRlcyk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmNvcHlSZWYoKTsKK30KKworVmVj
dG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpv
cmlnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5z
OworCisgICAgZm9yIChjb25zdCBhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAu
dmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKCFzdG9yYWdlQXJlYS0+aXRlbXMoKS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChzdG9yYWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4o
KSk7CisgICAgfQorCisgICAgcmV0dXJuIG9yaWdpbnM7Cit9CisKK3ZvaWQgVHJhbnNpZW50TG9j
YWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0
IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4pCit7CisgICAgYXV0byBvcmlnaW5B
bmRTdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZmluZChzZWN1cml0eU9yaWdpbik7Cisg
ICAgaWYgKG9yaWdpbkFuZFN0b3JhZ2VBcmVhICE9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCkpCisg
ICAgICAgIG9yaWdpbkFuZFN0b3JhZ2VBcmVhLT52YWx1ZS0+Y2xlYXIoKTsKK30KKwordm9pZCBU
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKK3sK
KyAgICBmb3IgKGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkK
KyAgICAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1Ry
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM5NDJkNGMyMjI5OTdhYWYwMDRiZjVkMThhNzQ3Yjk2OWFiMDNmYTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5o
PgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFN0b3JhZ2VBcmVhOworCitjbGFzcyBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1l
c3BhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VHJhbnNpZW50TG9jYWxTdG9yYWdl
TmFtZXNwYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxUcmFuc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2U+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UoKSk7CisgICAgfQorCisgICAgflRyYW5z
aWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSgpOworCisgICAgUmVmPFN0b3JhZ2VBcmVhPiBnZXRP
ckNyZWF0ZVN0b3JhZ2VBcmVhKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYmKTsKKyAgICBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zKCkgY29uc3Q7CisKKyAg
ICB2b2lkIGNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJik7CisgICAgdm9pZCBjbGVhckFsbFN0b3JhZ2VBcmVhcygpOworCitw
cml2YXRlOgorICAgIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSgpOworCisgICAgY29u
c3QgdW5zaWduZWQgbV9xdW90YUluQnl0ZXMgeyAwIH07CisgICAgSGFzaE1hcDxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGEsIFJlZlB0cjxTdG9yYWdlQXJlYT4+IG1fc3RvcmFnZUFyZWFNYXA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAppbmRleCBlYzg4ZmE2NDMzNGRiNWRj
MDgyNGVmZTNjN2FiNTc1NGViZDJiY2U4Li4zZTlkMTdkNjAyZDM0MTc3MDMzYzkzMzhiNGJiZTZk
YTBiYWJhOGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGUuY3BwCkBAIC0yNzAsMTIgKzI3MCwxMiBAQCBzdGF0aWMgU3RvcmVEZWNp
c2lvbiBtYWtlU3RvcmVEZWNpc2lvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9y
aWdpbmFsUgogfQogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJ
REFUSU9OKQotc3RhdGljIGJvb2wgaW5saW5lIGNhblJlcXVlc3RVc2VTcGVjdWxhdGl2ZVJldmFs
aWRhdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitzdGF0aWMgYm9vbCBpbmxp
bmUgY2FuUmVxdWVzdFVzZVNwZWN1bGF0aXZlUmV2YWxpZGF0aW9uKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBpZiAocmVxdWVzdC5pc0NvbmRpdGlvbmFs
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChyZXF1ZXN0LnJlcXVlc3Rlcigp
ID09IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpYSFIgfHwgcmVxdWVzdC5yZXF1ZXN0ZXIo
KSA9PSBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6RmV0Y2gpCisgICAgaWYgKHJlcXVlc3Qu
cmVxdWVzdGVyKCkgPT0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6OlhIUiB8
fCByZXF1ZXN0LnJlcXVlc3RlcigpID09IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVxdWVz
dGVyOjpGZXRjaCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3dpdGNoIChyZXF1ZXN0
LmNhY2hlUG9saWN5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDc5MTZlMjNiNzdlZWZiYzA4YjE5NzA0
Mjc5N2YwMDA0OGNmYzE2M2YuLjViNGZmNjljNTRmNTAyN2FjOWU0NGQ5MDU4MDFkYjNiZjlhZGFm
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dApAQCAtNjgsNyArNjgsMTEgQEAgTmV0d29ya1Byb2Nlc3MvU2Vydmlj
ZVdvcmtlci9XZWJTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24uY3BwIEBuby11bmlmeQogCiBO
ZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAogTmV0d29y
a1Byb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIuY3BwCitOZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKK05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuY3BwCitOZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlTWFuYWdlci5jcHAKK05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDJjMDhmNWU0ZDdmOGE2NjliZGQzYzAxOTQ0MjczOWVjY2FhOTY2NmIuLmUxNjY0
MDYwY2E5MzdiNzg3M2IzZTRlNGUwYmY0NmRlN2YxZjg3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTExLDYgKzkxMSwxMCBAQAog
CQk0NjdFNDNFODIyNDNGRjdEMDBCMTM5MjQgLyogV2ViUHJvY2Vzc0RhdGFTdG9yZVBhcmFtZXRl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2N0U0
M0U3MjI0M0ZGNkQwMEIxMzkyNCAvKiBXZWJQcm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycy5oICov
OyB9OwogCQk0NkEyQjYwOTFFNTY3NkE2MDBDM0RFREEgLyogQmFja2dyb3VuZFByb2Nlc3NSZXNw
b25zaXZlbmVzc1RpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NkEyQjYwNzFFNTY3NUEyMDBDM0RFREEgLyogQmFja2dyb3VuZFByb2Nlc3NSZXNw
b25zaXZlbmVzc1RpbWVyLmggKi87IH07CiAJCTQ2QjA1MjQ3MjI2NjhEODUwMDI2NUI5NyAvKiBX
ZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2QjA1MjQ0MjI2NjhEMjMwMDI2
NUI5NyAvKiBXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIuaCAq
LzsgfTsKKwkJNDZCRUI2RDcyMkZCOUJENzAwMjY5ODY3IC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkJFQjZENTIyRkI5QkQ2
MDAyNjk4NjcgLyogU3RvcmFnZUFyZWEuaCAqLzsgfTsKKwkJNDZCRUI2REIyMkZCOUQ0ODAwMjY5
ODY3IC8qIExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDZCRUI2RDkyMkZCOUQ0ODAwMjY5ODY3IC8qIExvY2FsU3Rv
cmFnZU5hbWVzcGFjZS5oICovOyB9OworCQk0NkJFQjZERjIyRkJCMTZCMDAyNjk4NjcgLyogU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ2QkVCNkREMjJGQkIxNkIwMDI2OTg2NyAvKiBTZXNzaW9uU3RvcmFnZU5h
bWVzcGFjZS5oICovOyB9OworCQk0NkJFQjZFMzIyRkJCMjFBMDAyNjk4NjcgLyogVHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NkJFQjZFMTIyRkJCMjFBMDAyNjk4NjcgLyogVHJhbnNpZW50TG9jYWxT
dG9yYWdlTmFtZXNwYWNlLmggKi87IH07CiAJCTQ2REYwNjNDMUYzOTA1RjgwMDE5ODBCQiAvKiBO
ZXR3b3JrQ09SU1ByZWZsaWdodENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ2REYwNjNBMUYzOTA1RTUwMDE5ODBCQiAvKiBOZXR3b3JrQ09S
U1ByZWZsaWdodENoZWNrZXIuaCAqLzsgfTsKIAkJNEEzQ0MxOEIxOUIwNjQwRjAwRDE0QUVGIC8q
IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTQxMEYzQTE5QUY3QjA0MDAyRUJBQjUg
LyogVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCAqLzsgfTsKIAkJNEEz
Q0MxOEQxOUIwNjQxOTAwRDE0QUVGIC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNDEwRjND
MTlBRjdCMDQwMDJFQkFCNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5LmggKi87
IH07CkBAIC0zMTkyLDYgKzMxOTYsMTQgQEAKIAkJNDZBMkI2MDcxRTU2NzVBMjAwQzNERURBIC8q
IEJhY2tncm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCYWNrZ3JvdW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZCMDUyNDQyMjY2OEQyMzAwMjY1Qjk3IC8q
IFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFj
Y2Vzc0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZCMDUyNDUy
MjY2OEQyNDAwMjY1Qjk3IC8qIFdlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29u
dHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJEZXZp
Y2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2Vzc0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0NkJFQjZENTIyRkI5QkQ2MDAyNjk4NjcgLyogU3RvcmFnZUFyZWEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDZCRUI2RDYyMkZCOUJENzAwMjY5ODY3IC8qIFN0b3JhZ2VBcmVhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDZCRUI2RDkyMkZCOUQ0ODAwMjY5ODY3IC8qIExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDZCRUI2REEyMkZCOUQ0ODAwMjY5ODY3IC8qIExvY2FsU3RvcmFnZU5hbWVz
cGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NkJFQjZERDIyRkJCMTZCMDAyNjk4NjcgLyog
U2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDZCRUI2REUyMkZCQjE2
QjAwMjY5ODY3IC8qIFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDZCRUI2RTEyMkZCQjIxQTAwMjY5ODY3IC8qIFRyYW5zaWVudExvY2FsU3RvcmFnZU5h
bWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDZCRUI2RTIyMkZCQjIxQTAwMjY5ODY3
IC8qIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NkRGMDYzOTFGMzkwNUU1MDAxOTgwQkIgLyogTmV0d29ya0NPUlNQcmVmbGln
aHRDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdv
cmtDT1JTUHJlZmxpZ2h0Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ2REYwNjNBMUYzOTA1RTUwMDE5ODBCQiAvKiBOZXR3b3JrQ09SU1ByZWZsaWdodENoZWNrZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NPUlNQcmVmbGlnaHRD
aGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNDEwRjM1MTlBRjdBQzMw
MDJFQkFCNSAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzI4Myw5ICs3Mjk1LDE3IEBACiAJCQkJ
OTNCMjYxNDUyMjdEMTQ3MDAwQjk3QTc2IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlLmggKi8sCiAJ
CQkJOTNCMjYxNDcyMjdEMTQ3MTAwQjk3QTc2IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
ci5jcHAgKi8sCiAJCQkJOTNCMjYxNDYyMjdEMTQ3MTAwQjk3QTc2IC8qIExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlci5oICovLAorCQkJCTQ2QkVCNkRBMjJGQjlENDgwMDI2OTg2NyAvKiBMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuY3BwICovLAorCQkJCTQ2QkVCNkQ5MjJGQjlENDgwMDI2OTg2NyAv
KiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCAqLywKKwkJCQk0NkJFQjZERTIyRkJCMTZCMDAyNjk4
NjcgLyogU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UuY3BwICovLAorCQkJCTQ2QkVCNkREMjJGQkIx
NkIwMDI2OTg2NyAvKiBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5oICovLAorCQkJCTQ2QkVCNkQ2
MjJGQjlCRDcwMDI2OTg2NyAvKiBTdG9yYWdlQXJlYS5jcHAgKi8sCisJCQkJNDZCRUI2RDUyMkZC
OUJENjAwMjY5ODY3IC8qIFN0b3JhZ2VBcmVhLmggKi8sCiAJCQkJOTNCMjYxNEEyMjdEMTQ3MjAw
Qjk3QTc2IC8qIFN0b3JhZ2VNYW5hZ2VyLmNwcCAqLywKIAkJCQk5M0IyNjE0OTIyN0QxNDcyMDBC
OTdBNzYgLyogU3RvcmFnZU1hbmFnZXIuaCAqLywKIAkJCQk5M0IyNjE0QjIyN0QxNDcyMDBCOTdB
NzYgLyogU3RvcmFnZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNDZCRUI2RTIyMkZCQjIx
QTAwMjY5ODY3IC8qIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAgKi8sCisJCQkJ
NDZCRUI2RTEyMkZCQjIxQTAwMjY5ODY3IC8qIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBXZWJTdG9yYWdlOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTg5NDcsOCArODk2Nyw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDRDE5
RDJFOTIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCAq
LywKIAkJCQlDRDE5RDJFODIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1
cmlzdGljLmggKi8sCi0JCQkJQ0RBOTNEQUUyMkY4QkNGMzAwNDkwQTY5IC8qIEZ1bGxzY3JlZW5U
b3VjaFNlY2hldXJpc3RpY1BhcmFtZXRlcnMuaCAqLywKIAkJCQlDREE5M0RBRjIyRjhCQ0Y0MDA0
OTBBNjkgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljUGFyYW1ldGVycy5jcHAgKi8sCisJ
CQkJQ0RBOTNEQUUyMkY4QkNGMzAwNDkwQTY5IC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3Rp
Y1BhcmFtZXRlcnMuaCAqLywKIAkJCQlDREMyODMxQjIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxs
c2NyZWVuU3RhY2tWaWV3LmggKi8sCiAJCQkJQ0RDMjgzMUMyMDFCRDc5RDAwRTZFNzQ1IC8qIFdL
RnVsbHNjcmVlblN0YWNrVmlldy5tbSAqLywKIAkJCQlDRDBDNjgyRjIwMUZEMTAxMDBBNTk0MDkg
LyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLywKQEAgLTkzNjksNiArOTM4OSw3IEBA
CiAJCQkJMkQ0QUYwODkyMDQ0QzNDNDAwNkM4ODE3IC8qIEZyb250Qm9hcmRTZXJ2aWNlc1NQSS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q3OEUxMTUxREI3RDdFRDAwMTRBMkRFIC8qIEZ1bGxzY3Jl
ZW5DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEMTlEMkVBMjA0NjQwNkYwMDE3MDc0QSAv
KiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQTkz
REIwMjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWNQYXJhbWV0
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTFCMzFENTkwMkREMDBERDdDNjggLyogR2Ft
ZXBhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTc3NTNGMTE4QkFCRjAwMDdEOUU5QSAv
KiBHZW5lcmljQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDZGNDJGMTJEQkI5QjYw
MDJENzhERSAvKiBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC05NDMxLDYgKzk0NTIsNyBAQAogCQkJCTU3RENFREFFMjE0QzYwMzMwMDE2Qjg0
NyAvKiBMb2NhbFNlcnZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjI2MTRFMjI3RDE0QjEw
MEI5N0E3NiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNC
MjYxNEYyMjdEMTRCMTAwQjk3QTc2IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDZCRUI2REIyMkZCOUQ0ODAwMjY5ODY3IC8qIExvY2FsU3RvcmFn
ZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBN0YyRjMxMjVCRjgyMDAwOEFFQjFE
IC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENEN0Y3MUQ0N0U5MkEwMDlGMDhC
QyAvKiBMb2dJbml0aWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RDg2QzIxREY3
NTI2NTAwNzc0NUU4IC8qIE1hY2hNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKQEAgLTk2MzIsNiAr
OTY1NCw3IEBACiAJCQkJNDE0REVERDcxRjlFRERFNTAwNDdDNDBEIC8qIFNlcnZpY2VXb3JrZXJQ
cm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkRFNjVBMTk1NEE0MkIwMEM0OEZG
QSAvKiBTZXNzaW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDAyRDQ5MTk2QjM0NUQw
MEI5QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2QkVC
NkRGMjJGQkIxNkIwMDI2OTg2NyAvKiBTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE2NDIwRTUxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyMTc0NjExNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJs
ZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTI0QkVENTEyMDg5NEQxMDBGQkIwNTkg
LyogU2hhcmVkTWVtb3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTk2NTEsNiArOTY3NCw3IEBACiAJ
CQkJNTI3MkIyOEIxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTRCREVEMzE2Qzk4RUREMDBFNEUyNUUgLyogU3RhdGlzdGljc1JlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdBM0ZFQ0EyMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdl
QWNjZXNzU3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NkJFQjZENzIyRkI5QkQ3MDAyNjk4
NjcgLyogU3RvcmFnZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRDMzMDZGMTZCMUQ5OTEw
MDRGNjBFNyAvKiBTdG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQ0VDRDI1
MTcxNjJEQjEwMDFGQzlFRiAvKiBTdG9yYWdlQXJlYU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEzMzRERUUxNkRFOEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTY3MCw2ICs5Njk0LDcgQEAKIAkJCQkxQUFGMjYzOTE0Njg3QzM5MDA0
QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRjA1RDg3MTQ2ODgzNDgwMDhCMUU4MSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRjgzMzY4NjFGQTEzOURGMDBDNkUwODAg
LyogVG91Y2hCYXJNZW51RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDZCRUI2RTMyMkZCQjIx
QTAwMjY5ODY3IC8qIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTdFQjJFM0EyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkhpZEF1dGhlbnRpY2F0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkU0MzY2MThCNkMwODEwMDlDN0E0OCAvKiBVSURlbGVn
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTFCNTFENTkxN0ZGMDBERDdDNjggLyogVUlH
YW1lcGFkLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDA2LDcgKzEwMDMxLDYgQEAKIAkJCQkxQTQ0
NUJBNTE4NEQ1RkRBMDA0QjM0MTQgLyogV0tDb250ZXh0Q29ubmVjdGlvbkNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE0NDVCQTMxODRENUZDRjAwNEIzNDE0IC8qIFdLQ29udGV4dERvd25s
b2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ0NUJBMTE4NEQ1RkMxMDA0QjM0MTQg
LyogV0tDb250ZXh0SGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RBOTNEQjAy
MkY4QkNGNDAwNDkwQTY5IC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpY1BhcmFtZXRlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDQ1QjlGMTg0RDVGQjUwMDRCMzQxNCAvKiBXS0NvbnRl
eHRJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM3OTVENzAyMjlG
MzczRjAwM0ZGMUM0IC8qIFdLQ29udGV4dE1lbnVFbGVtZW50SW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUM3OTVENzEyMjlGMzc1NzAwM0ZGMUM0IC8qIFdLQ29udGV4dE1lbnVFbGVtZW50SW5m
b1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTEwOTUsNiArMTExMTksNyBAQAogCQkJCTFB
NjQyMzA4MTJERDA5RUIwMENBQUUyQyAvKiBEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzgwMjEyQjZBNzEwMEY0OTNGRCAvKiBFbmNv
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQTU3NjAyMTQ5NkI5NzkwMEE0RUUwNiAvKiBF
dmVudERpc3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0RB
OTNEQjEyMkY4QkNGNDAwNDkwQTY5IC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpY1BhcmFt
ZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjc0OUY2NDQyMTQ2NTYxQjAwODM4MEJGIC8q
IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNzQ5RjY0
NTIxNDY1NjFFMDA4MzgwQkYgLyogSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRDkxMzQ0MTIxMkNGOUYwMDAxMjhBRkQgLyogSlNOUE1ldGhvZC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTExMTUzLDcgKzExMTc4LDYgQEAKIAkJCQlCQzgyODQ0RDE2QjUw
ODFDMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQkyRDkxMzQ0RDIxMkNGOUYwMDAxMjhBRkQgLyogUGx1Z2luVmlldy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyRDU0QzMxQjIxMkY0REE2MDA0OUMxNzQgLyogUHJvY2Vzc0xhdW5jaGVyLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUNEQTkzREIxMjJGOEJDRjQwMDQ5MEE2OSAvKiBGdWxsc2Ny
ZWVuVG91Y2hTZWNoZXVyaXN0aWNQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNE
Mjg2NUVGMjI1NTU2MjAwMDYwNkFDNyAvKiBQcm9jZXNzVGFza1N0YXRlT2JzZXJ2ZXIubW0gaW4g
U291cmNlcyAqLywKIAkJCQkyRDcyQTFGQTIxMkJGNDZFMDA1MTdBMjAgLyogUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkYyNEEyRDE4NzlFNEJDMDAz
QUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>