<?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>142259</bug_id>
          
          <creation_ts>2015-03-03 21:28:20 -0800</creation_ts>
          <short_desc>[Content Extensions] Split parsing and compiling of content extensions into their own files</short_desc>
          <delta_ts>2015-03-04 08:41:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1073967</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-03 21:28:20 -0800</bug_when>
    <thetext>[Content Extensions] Split parsing and compiling of content extensions into their own files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073975</commentid>
    <comment_count>1</comment_count>
      <attachid>247838</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-03 21:43:23 -0800</bug_when>
    <thetext>Created attachment 247838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073978</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-03 21:46:32 -0800</bug_when>
    <thetext>Attachment 247838 did not pass style-queue:


ERROR: Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:40:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/contentextensions/ContentExtensionsBackend.h:55:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074073</commentid>
    <comment_count>3</comment_count>
      <attachid>247838</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-03-04 08:38:37 -0800</bug_when>
    <thetext>Comment on attachment 247838
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074075</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-04 08:41:52 -0800</bug_when>
    <thetext>Committed r181000: &lt;http://trac.webkit.org/changeset/181000&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247838</attachid>
            <date>2015-03-03 21:43:23 -0800</date>
            <delta_ts>2015-03-04 08:38:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142259-20150303214305.patch</filename>
            <type>text/plain</type>
            <size>73969</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDk5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE1LTAzLTAzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gU3Bs
aXQgcGFyc2luZyBhbmQgY29tcGlsaW5nIG9mIGNvbnRlbnQgZXh0ZW5zaW9ucyBpbnRvIHRoZWly
IG93biBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQyMjU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgbmV3IHVuaXQgdGVzdDoKKyAgICAgICAgICAgIENvbnRlbnRGaWx0ZXJUZXN0LkJh
c2ljCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgIEFkZCBuZXcgZmlsZXMgKENvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oL2NwcCwgQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmgvY3BwLCBhbmQgQ29udGVudEV4dGVuc2lvblBhcnNlci5oL2Nw
cCkKKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29udGVudEV4dGVuc2lv
bi5jcHA6IEFkZGVkLgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgQWRkIG5ldyBjbGFzcyBmb3IgaG9sZGluZyBv
bnRvIHRoZSBjb21waWxlZCBjb250ZW50IGV4dGVuc2lvbiBpdHNlbGYuIE1ha2UgaXQgVGhyZWFk
U2FmZVJlZkNvdW50ZWQgc28gaXQgaXMgZWFzeQorICAgICAgICB0byBtb3ZlIGJldHdlZW4gdGhy
ZWFkcyB3aGljaCB3aWxsIGJlIGltcG9ydGFudCBpbiBhIHN1YnNlcXVlbnQgcGF0Y2ggd2hlcmUg
d2UgZW5hYmxlIGNvbXBpbGF0aW9uIG9uIGEgYmFja2dyb3VuZAorICAgICAgICB0aHJlYWQuCisK
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpzZXJpYWxpemVB
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVs
ZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21w
aWxlci5oOiBBZGRlZC4KKyAgICAgICAgTW92aW5nIGNvbXBpbGF0aW9uIHRvIGl0cyBvd24gZmls
ZS4gV2FzIHByZXZpb3VzbHkgaW4gQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLiBUaGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlCisgICAgICAgIHdlIHdpbGwgd2FudCB0byBiZSBhYmxlIHRvIGNvbXBp
bGUgd2l0aG91dCB0aGUgbmVlZCBvZiBhIGJhY2tlbmQuCisKKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDogQ29waWVkIGZyb20gY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNwcC4KKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmg6IENvcGllZCBmcm9tIGNvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5oLgorICAgICAgICBSZW5hbWVkIENv
bnRlbnRFeHRlbnNpb25zTWFuYWdlciB0byBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLCBzaW5jZSB0
aGF0IGlzIGFsbCBpdCBpcyBkb2luZy4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjphZGRDb250ZW50RXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQ6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6cmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRF
eHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXJpYWxpemVBY3Rpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQ6OnNldFJ1bGVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnJlbW92ZVJ1
bGVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnJlbW92ZUFsbFJ1bGVMaXN0cyk6IERlbGV0ZWQuCisg
ICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg6Cisg
ICAgICAgIENoYW5nZSB0aGUgYmFja2VuZCB0byB1c2UgdGhlIG5ldyBDb21waWxlZENvbnRlbnRF
eHRlbnNpb24gYW5kIGNoYW5nZSB0aGUgdGVybWlub2xvZ3kgdG8KKyAgICAgICAgcmVmZXJlbmNl
IGNvbnRlbnQgZXh0ZW5zaW9ucywgcmF0aGVyIHRoYW4gcnVsZSBsaXN0cy4KKworICAgICAgICAq
IHBhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEZpbHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50
RmlsdGVycyk6CisgICAgICAgIFVwZGF0ZSBmb3IgbmV3IG5hbWVzIGFuZCBjaGFuZ2UgYWRkVXNl
ckNvbnRlbnRGaWx0ZXIgdG8gZXhwbGljaXRseSBjb21waWxlIHRoZSBKU09OCisgICAgICAgIHJ1
bGUgbGlzdCBiZWZvcmUgaGFuZGluZyBpdCB0byB0aGUgYmFja2VuZC4gSW4gc3Vic2VxdWVudCBj
aGFuZ2VzLCBhZGRVc2VyQ29udGVudEZpbHRlcgorICAgICAgICBzaG91bGQgYmUgY2hhbmdlZCB0
byB0YWtlIHRoZSBjb21waWxlZCBjb250ZW50IGV4dGVuc2lvbiwgYW5kIGl0IHNob3VsZCBiZWNv
bWUgdGhlIHJlc3BvbnNpYmlsaXR5CisgICAgICAgIG9mIHRoZSBjYWxsZWQgKFdlYktpdCkgdG8g
Y3JlYXRlIHRoZW0uCisKIDIwMTUtMDMtMDMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgU2Nyb2xsIHNuYXAgcG9pbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9u
IHRoZSBtYWluIGZyYW1lCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODA5ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEw
MzEsMTIgKzEwMzEsMTIgQEAKIAkJMjZDMTdBM0UxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0
ZW1JT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
QzE3QTNDMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjZDMTdBM0YxNDkxRDJENDAwRDEy
QkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNkMxN0EzRDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5t
bSAqLzsgfTsKIAkJMjZFOThBMTAxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFz
dFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
RTk4QTBGMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggKi87IH07
Ci0JCTI2RjBDODk3MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGMEM4
OTUxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAgKi87IH07
Ci0JCTI2RjBDODk4MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjBDODk2
MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyNkYwQzg5NzFBMkU3MjRC
MDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkYwQzg5NTFBMkU3MjRCMDAyNzk0RjggLyog
Q29udGVudEV4dGVuc2lvblBhcnNlci5jcHAgKi87IH07CisJCTI2RjBDODk4MUEyRTcyNEIwMDI3
OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkYwQzg5NjFBMkU3MjRCMDAyNzk0RjggLyogQ29udGVu
dEV4dGVuc2lvblBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTI2RjBDODlCMUEyRUMxMTAwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9u
UnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NkYwQzg5OTFBMkVDMTEwMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwICovOyB9
OwotCQkyNkYwQzg5QzFBMkVDMTEwMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblJ1bGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjBDODlBMUEy
RUMxMTAwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUnVsZS5oICovOyB9OworCQkyNkYwQzg5
QzFBMkVDMTEwMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblJ1bGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjBDODlBMUEyRUMxMTAwMDI3OTRG
OCAvKiBDb250ZW50RXh0ZW5zaW9uUnVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTI2RjBDODlGMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZGMEM4OUQxQTJFQzNCRTAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25z
QmFja2VuZC5jcHAgKi87IH07Ci0JCTI2RjBDOEEwMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2RjBDODlFMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc0Jh
Y2tlbmQuaCAqLzsgfTsKKwkJMjZGMEM4QTAxQTJFQzNCRTAwMjc5NEY4IC8qIENvbnRlbnRFeHRl
bnNpb25zQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjZGMEM4OUUxQTJFQzNCRTAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25zQmFja2Vu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2
RjQwRDRBMTQ5MDRBNjMwMENBNjdDNCAvKiBFdmVudExvb3BJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkY0MEQ0OTE0OTA0QTYzMDBDQTY3QzQg
LyogRXZlbnRMb29wSU9TLm1tICovOyB9OwogCQkyNkY5QTgzODE4QTA0NkFDMDBBRUI4OEEgLyog
Vmlld3BvcnRDb25maWd1cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI2RjlBODM2MThBMDQ2QUMwMEFFQjg4QSAvKiBWaWV3cG9ydENvbmZp
Z3VyYXRpb24uY3BwICovOyB9OwogCQkyNkY5QTgzOTE4QTA0NkFDMDBBRUI4OEEgLyogVmlld3Bv
cnRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkY5QTgzNzE4QTA0NkFDMDBBRUI4OEEgLyogVmlld3BvcnRDb25maWd1cmF0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIx
NDQsMTAgKzIxNDQsMTAgQEAKIAkJNUM0MzA0QjYxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hh
ZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM0MzA0QjQxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5o
ICovOyB9OwogCQk1QzlBN0E3NTFBQTBGNkVBMDA5NThBQ0YgLyogREZBQnl0ZWNvZGVDb21waWxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5
MzA1RTFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGVDb21waWxlci5jcHAgKi87IH07CiAJ
CTVDOUE3QTc2MUFBMEY2RUQwMDk1OEFDRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMzkzMDYwMUFB
MEY2QTkwMDI5QzgxNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCAqLzsgfTsKLQkJNUNE
OUY1NjYxQUEwRjczQzAwREE0NUZGIC8qIERGQUJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzM5MzA1RDFBQTBGNkE5MDAyOUM4MTYgLyog
REZBQnl0ZWNvZGUuaCAqLzsgfTsKKwkJNUNEOUY1NjYxQUEwRjczQzAwREE0NUZGIC8qIERGQUJ5
dGVjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzM5MzA1RDFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0Q5RjU2NzFBQTBGNzQyMDBEQTQ1
RkYgLyogREZBQnl0ZWNvZGVDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUMzOTMwNUYxQUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2Rl
Q29tcGlsZXIuaCAqLzsgfTsKIAkJNUNEOUY1NjgxQUEwRjc0NjAwREE0NUZGIC8qIERGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDMzkzMDYxMUFBMEY2QTkwMDI5QzgxNiAvKiBERkFCeXRlY29kZUludGVycHJldGVy
LmggKi87IH07Ci0JCTVDREZBNkM4MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9u
QWN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNERkE2QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmggKi87
IH07CisJCTVDREZBNkM4MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNERkE2
QzcxQUE0RjJEQTAwRUE4NzQ2IC8qIENvbnRlbnRFeHRlbnNpb25BY3Rpb25zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNGQzQzNTAxOTI0MDlF
MzAwQTBEM0I1IC8qIFBvaW50ZXJMb2NrQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0ZDNDM0RTE5MjQwNkE5MDBBMEQzQjUgLyog
UG9pbnRlckxvY2tDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJNUQyMUE4MDIxM0VDRTVERjAwQkI3
MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RDIxQTgwMDEzRUNFNURGMDBCQjcwNjQgLyogV2ViVlRUUGFyc2VyLmNw
cCAqLzsgfTsKIAkJNUQyMUE4MDMxM0VDRTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQyMUE4MDExM0VD
RTVERjAwQkI3MDY0IC8qIFdlYlZUVFBhcnNlci5oICovOyB9OwpAQCAtMjUwMCw2ICsyNTAwLDEw
IEBACiAJCTdDNzRENDM4MTg4MjNCMTkwMEU1RUQ1NyAvKiBVVGV4dFByb3ZpZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzc0RDQzNjE4ODIzQjE5
MDBFNUVENTcgLyogVVRleHRQcm92aWRlci5oICovOyB9OwogCQk3Qzc0RDQzQjE4ODI0MDA0MDBF
NUVENTcgLyogVVRleHRQcm92aWRlclVURjE2LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzRENDM5MTg4MjQwMDQwMEU1RUQ1NyAvKiBVVGV4dFBy
b3ZpZGVyVVRGMTYuY3BwICovOyB9OwogCQk3Qzc0RDQzQzE4ODI0MDA0MDBFNUVENTcgLyogVVRl
eHRQcm92aWRlclVURjE2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Qzc0RDQzQTE4ODI0MDA0MDBFNUVENTcgLyogVVRleHRQcm92aWRlclVURjE2Lmgg
Ki87IH07CisJCTdDOTNGMzQ5MUFBNkJBNUUwMEE5OEJBQiAvKiBDb21waWxlZENvbnRlbnRFeHRl
bnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0M5M0YzNDcxQUE2QkE1RTAwQTk4QkFCIC8qIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAg
Ki87IH07CisJCTdDOTNGMzRBMUFBNkJBNUUwMEE5OEJBQiAvKiBDb21waWxlZENvbnRlbnRFeHRl
bnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
OTNGMzQ4MUFBNkJBNUUwMEE5OEJBQiAvKiBDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QzkzRjM0RDFB
QTZCRjA3MDBBOThCQUIgLyogQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOTNGMzRCMUFBNkJGMDcwMEE5
OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwICovOyB9OworCQk3QzkzRjM0RTFB
QTZCRjA3MDBBOThCQUIgLyogQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzkzRjM0QzFBQTZCRjA3MDBBOThC
QUIgLyogQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0M5REJGRUQxQTlDNDlCMTAwMEQ2QjI1IC8qIEpT
SFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDOURCRkVCMUE5QzQ5QjEwMDBENkIyNSAvKiBKU0hUTUxBdHRhY2ht
ZW50RWxlbWVudC5jcHAgKi87IH07CiAJCTdDOURCRkVFMUE5QzQ5QjEwMDBENkIyNSAvKiBKU0hU
TUxBdHRhY2htZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0M5REJGRUMxQTlDNDlCMTAwMEQ2QjI1IC8qIEpTSFRNTEF0dGFjaG1lbnRF
bGVtZW50LmggKi87IH07CiAJCTdDQzI4OURGMUFBMEZFNUQwMDlBOUNFMyAvKiBVUkxSZWdpc3Ry
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFRTM5
MzgxNzk3NDI3NDAwMUQ3NTgwIC8qIFVSTFJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgwNzMsOCArODA3Nyw4IEBACiAJCTI2QzE3
QTNDMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEZpbGVTeXN0ZW1JT1MuaDsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9T
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJB
MiAvKiBGaWxlU3lzdGVtSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gRmlsZVN5c3RlbUlPUy5tbTsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4
dENvZGVjQVNDSUlGYXN0UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI2
RjBDODk1MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbnNNYW5h
Z2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZGMEM4OTYxQTJFNzI0QjAw
Mjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMjZGMEM4OTUxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNp
b25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVu
dEV4dGVuc2lvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RjBD
ODk2MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25QYXJzZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZGMEM4OTkxQTJFQzExMDAwMjc5NEY4IC8qIENvbnRl
bnRFeHRlbnNpb25SdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvbnRlbnRFeHRlbnNpb25SdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjZGMEM4OUExQTJFQzExMDAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25SdWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25SdWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2RjBDODlEMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTk3MDUsNiArOTcwOSwxMCBAQAogCQk3Qzc0RDQzNjE4ODIzQjE5MDBFNUVENTcg
LyogVVRleHRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVVGV4
dFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNzRENDM5MTg4MjQw
MDQwMEU1RUQ1NyAvKiBVVGV4dFByb3ZpZGVyVVRGMTYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVVRleHRQcm92aWRlclVURjE2LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0M3NEQ0M0ExODgyNDAwNDAwRTVFRDU3IC8qIFVUZXh0UHJvdmlkZXJV
VEYxNi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVVGV4dFByb3ZpZGVyVVRG
MTYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M5M0YzNDcxQUE2QkE1RTAwQTk4
QkFCIC8qIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QzkzRjM0ODFBQTZCQTVFMDBBOThCQUIgLyogQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBp
bGVkQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzkz
RjM0QjFBQTZCRjA3MDBBOThCQUIgLyogQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25Db21waWxl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDOTNGMzRDMUFBNkJGMDcwMEE5
OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDOURCRkVBMUE5QzQ4OUYwMDBENkIyNSAvKiBIVE1MQXR0YWNobWVudEVs
ZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IEhUTUxBdHRhY2htZW50RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDOURCRkVCMUE5QzQ5QjEwMDBENkIyNSAvKiBKU0hUTUxBdHRhY2ht
ZW50RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hU
TUxBdHRhY2htZW50RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
OURCRkVDMUE5QzQ5QjEwMDBENkIyNSAvKiBKU0hUTUxBdHRhY2htZW50RWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxBdHRhY2htZW50RWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUzOTksMTQgKzE1NDA3LDE4IEBACiAJCTI2
RjBDODkwMUEyRDc5Q0IwMDI3OTRGOCAvKiBjb250ZW50ZXh0ZW5zaW9ucyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0M5M0YzNDcxQUE2QkE1RTAwQTk4
QkFCIC8qIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgKi8sCisJCQkJN0M5M0YzNDgxQUE2
QkE1RTAwQTk4QkFCIC8qIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oICovLAogCQkJCTVDREZB
NkM3MUFBNEYyREEwMEVBODc0NiAvKiBDb250ZW50RXh0ZW5zaW9uQWN0aW9ucy5oICovLAorCQkJ
CTdDOTNGMzRCMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3Bw
ICovLAorCQkJCTdDOTNGMzRDMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29t
cGlsZXIuaCAqLywKKwkJCQkyNkYwQzg5NTFBMkU3MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVu
c2lvblBhcnNlci5jcHAgKi8sCisJCQkJMjZGMEM4OTYxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRl
bnRFeHRlbnNpb25QYXJzZXIuaCAqLywKIAkJCQkyNkYwQzg5OTFBMkVDMTEwMDAyNzk0RjggLyog
Q29udGVudEV4dGVuc2lvblJ1bGUuY3BwICovLAogCQkJCTI2RjBDODlBMUEyRUMxMTAwMDI3OTRG
OCAvKiBDb250ZW50RXh0ZW5zaW9uUnVsZS5oICovLAogCQkJCTI2RjBDODlEMUEyRUMzQkUwMDI3
OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwICovLAogCQkJCTI2RjBDODlFMUEy
RUMzQkUwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCAqLywKIAkJCQkyNjIz
OTEzNTFBNjQ4Q0VFMDA3MjUxQTMgLyogQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaCAqLywK
LQkJCQkyNkYwQzg5NTFBMkU3MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvbnNNYW5hZ2Vy
LmNwcCAqLywKLQkJCQkyNkYwQzg5NjFBMkU3MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lv
bnNNYW5hZ2VyLmggKi8sCiAJCQkJMjY3NzI1RjYxQTVCM0FEOTAwM0MyNEREIC8qIERGQS5jcHAg
Ki8sCiAJCQkJMjY3NzI1RjcxQTVCM0FEOTAwM0MyNEREIC8qIERGQS5oICovLAogCQkJCTVDMzkz
MDVEMUFBMEY2QTkwMDI5QzgxNiAvKiBERkFCeXRlY29kZS5oICovLApAQCAtMjUyMjIsNyArMjUy
MzQsNyBAQAogCQkJCUIyRkEzRDU3MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGlvbkVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzRDU5MEFCNzVBNkYwMDBFNUFDNCAvKiBK
U1NWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzRDVCMEFCNzVBNkYw
MDBFNUFDNCAvKiBKU1NWR0NsaXBQYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjZG
MEM4OTgxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMjZGMEM4OTgxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNp
b25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzRDVEMEFCNzVBNkYwMDBFNUFDNCAv
KiBKU1NWR0NvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q1RjBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJGQTNENjEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQ3Vyc29yRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNjQyNyw2ICsyNjQzOSw3IEBACiAJCQkJMDg1NEIwMjExMjU1
RTRFNjAwQjlDREQwIC8qIFNWR0lubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3QTMwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMYW5nU3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3QTMzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdMZW5ndGguaCBpbiBIZWFkZXJzICov
LAorCQkJCTdDOTNGMzRBMUFBNkJBNUUwMEE5OEJBQiAvKiBDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMzQ0OTZFMTQ2OTQxQjMwMDcyMDMxMiAvKiBTVkdM
ZW5ndGhDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EzNjBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHTGVuZ3RoTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMzkwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNjQ5MSw2ICsyNjUwNCw3IEBACiAJCQkJODQxOUQyQkExMjBFMEM3NjAwMTQxRjhGIC8qIFNW
R1BhdGhTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDMwMEJENjEyMEM5QUFD
MDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODRD
NUIyRkIxMjE2REM4MTAwODhCNTNBIC8qIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTdDOTNGMzRFMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxQTU3REYyMTU0QkUyNUMwMDA5
RDEyMCAvKiBTVkdQYXRoVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E4ODBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0dGVybkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3QThDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQb2ludExpc3QuaCBpbiBIZWFkZXJzICov
LApAQCAtMjgzOTksNyArMjg0MTMsNyBAQAogCQkJCTFBQ0U1M0RGMEE4RDE4ODEwMDIyOTQ3RCAv
KiBKU0RPTVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGQjkxMzkyQjE2QUU0RkMwMDAx
RkU2ODIgLyogSlNET01QYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE5RDI0N0ZFMEQ3NTdF
NjkwMEZERjk1OSAvKiBKU0RPTVBsdWdpbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyNkYwQzg5
NzFBMkU3MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTI2RjBDODk3MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9u
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE5RDI0ODAwMEQ3NTdFNjkwMEZERjk1OSAv
KiBKU0RPTVBsdWdpbkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE5QzZFNjRDMEQ3NDY1
RTcwMDY0NDJFOSAvKiBKU0RPTVBsdWdpbkFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE5QzZFNjREMEQ3NDY1RTcwMDY0NDJFOSAvKiBKU0RPTVBsdWdpbkN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTI4ODc0LDYgKzI4ODg4LDcgQEAKIAkJCQlCMkZBM0UxNjBBQjc1QTZG
MDAwRTVBQzQgLyogSlNTVkdWaWV3RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MTE4
RkVENDE1Njg1Q0M2MDAzMEI3OUEgLyogSlNTVkdWaWV3U3BlYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NDg1MjI3RDExOTAxNjJDMDA2RURDN0YgLyogSlNTVkdWS2VybkVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJN0M5M0YzNDkxQUE2QkE1RTAwQTk4QkFCIC8qIENvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MURDQjcwMTE1NjgxOTc2MDA4
NjIyNzEgLyogSlNTVkdab29tQW5kUGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRTE4
MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1pvb21FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2NURGMzIwMzA5RDFDQzYwMDAwQkUzMjUgLyogSlNUZXh0LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjkwNTcsNiArMjkwNzIsNyBAQAogCQkJCUNEMUI0QTY1MTYwNzg2QUUwMDI4MkRGOSAvKiBN
ZWRpYUtleU5lZWRlZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZDNTY4Q0IwMTlEQUZF
QTAwMDQzMENBMiAvKiBNYXNrSW1hZ2VPcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0RBOThFMEQxNjAzRkU0QTAwRkVBM0IxIC8qIE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk3QzkzRjM0RDFBQTZCRjA3MDBBOThCQUIgLyogQ29udGVudEV4dGVuc2lvbkNvbXBpbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTk4RTBFMTYwM0ZFNTgwMEZFQTNCMSAvKiBNZWRp
YUtleVNlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTgwMDkwQTE5NTE2RTAwQThF
RjVGIC8qIE1lZGlhTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDQ2MTNFMzBDRDY4MTlG
MDBGQURBNzUgLyogTWVkaWFQbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMgeworCitSZWY8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OmNyZWF0ZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUsIFZlY3RvcjxTZXJp
YWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25zKQoreworICAgIHJldHVybiBXVEY6OmFkb3B0UmVm
KCpuZXcgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFdURjo6bW92ZShieXRlY29kZSksIFdURjo6
bW92ZShhY3Rpb25zKSkpOworfQorCitDb21waWxlZENvbnRlbnRFeHRlbnNpb246OkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbihWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUsIFZlY3RvcjxT
ZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25zKQorICAgIDogbV9ieXRlY29kZShXVEY6Om1v
dmUoYnl0ZWNvZGUpKQorICAgICwgbV9hY3Rpb25zKFdURjo6bW92ZShhY3Rpb25zKSkKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRl
bnRFeHRlbnNpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbl9o
CisjZGVmaW5lIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbl9oCisKKyNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKKyNpbmNs
dWRlICJERkFCeXRlY29kZS5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitjbGFzcyBDb21waWxlZENvbnRlbnRFeHRlbnNp
b24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNy
ZWF0ZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYsIFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4m
Jik7CisKKyAgICBjb25zdCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZWNvZGU7IH0KKyAgICBjb25zdCBWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5
dGU+JiBhY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rpb25zOyB9CisKK3ByaXZhdGU6Cisg
ICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFZlY3RvcjxERkFCeXRlY29kZT4mJiwgVmVjdG9y
PFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYmKTsKKworICAgIFZlY3RvcjxERkFCeXRlY29kZT4gbV9i
eXRlY29kZTsKKyAgICBWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+IG1fYWN0aW9uczsKK307
CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjZW5kaWYgLy8g
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29udGVudEV4dGVu
c2lvbkNvbXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5j
bHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQ29udGVudEV4dGVu
c2lvbkFjdGlvbnMuaCIKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmgiCisjaW5j
bHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9u
c0RlYnVnZ2luZy5oIgorI2luY2x1ZGUgIkRGQUJ5dGVjb2RlQ29tcGlsZXIuaCIKKyNpbmNsdWRl
ICJORkEuaCIKKyNpbmNsdWRlICJORkFUb0RGQS5oIgorI2luY2x1ZGUgIlVSTEZpbHRlclBhcnNl
ci5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitzdGF0aWMgVmVjdG9yPHVuc2lnbmVk
PiBzZXJpYWxpemVBY3Rpb25zKGNvbnN0IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1
bGVMaXN0LCBWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiBhY3Rpb25zKQoreworICAgIEFT
U0VSVCghYWN0aW9ucy5zaXplKCkpOworICAgIAorICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWN0aW9u
TG9jYXRpb25zOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHJ1bGVJbmRleCA9IDA7IHJ1
bGVJbmRleCA8IHJ1bGVMaXN0LnNpemUoKTsgKytydWxlSW5kZXgpIHsKKyAgICAgICAgY29uc3Qg
Q29udGVudEV4dGVuc2lvblJ1bGUmIHJ1bGUgPSBydWxlTGlzdFtydWxlSW5kZXhdOworICAgICAg
ICBhY3Rpb25Mb2NhdGlvbnMuYXBwZW5kKGFjdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgCisgICAg
ICAgIHN3aXRjaCAocnVsZS5hY3Rpb24oKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBY3Rpb25U
eXBlOjpJbnZhbGlkQWN0aW9uOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgICAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKKyAgICAgICAgY2Fz
ZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CisgICAgICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdu
b3JlUHJldmlvdXNSdWxlczoKKyAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKHN0YXRpY19jYXN0
PFNlcmlhbGl6ZWRBY3Rpb25CeXRlPihydWxlLmFjdGlvbigpLnR5cGUoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZTogewor
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzZWxlY3RvciA9IHJ1bGUuYWN0aW9uKCkuY3NzU2Vs
ZWN0b3IoKTsKKyAgICAgICAgICAgIC8vIEFwcGVuZCBhY3Rpb24gdHlwZSAoMSBieXRlKS4KKyAg
ICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRBY3Rpb25CeXRl
PihBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZSkpOworICAgICAgICAgICAgLy8gQXBwZW5kIFNl
bGVjdG9yIGxlbmd0aCAoNCBieXRlcykuCisgICAgICAgICAgICB1bnNpZ25lZCBzZWxlY3Rvckxl
bmd0aCA9IHNlbGVjdG9yLmxlbmd0aCgpOworICAgICAgICAgICAgYWN0aW9ucy5yZXNpemUoYWN0
aW9ucy5zaXplKCkgKyBzaXplb2YodW5zaWduZWQpKTsKKyAgICAgICAgICAgICpyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4oJmFjdGlvbnNbYWN0aW9ucy5zaXplKCkgLSBzaXplb2YodW5zaWdu
ZWQpXSkgPSBzZWxlY3Rvckxlbmd0aDsKKyAgICAgICAgICAgIGJvb2wgd2lkZUNoYXJhY3RlcnMg
PSAhc2VsZWN0b3IuaXM4Qml0KCk7CisgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZCh3aWRlQ2hh
cmFjdGVycyk7CisgICAgICAgICAgICAvLyBBcHBlbmQgU2VsZWN0b3IuCisgICAgICAgICAgICBp
ZiAod2lkZUNoYXJhY3RlcnMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2VsZWN0b3JMZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhY3Rpb25z
LnJlc2l6ZShhY3Rpb25zLnNpemUoKSArIHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgICAg
ICAgICAqcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KCZhY3Rpb25zW2FjdGlvbnMuc2l6ZSgpIC0g
c2l6ZW9mKFVDaGFyKV0pID0gc2VsZWN0b3JbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2VsZWN0b3JMZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQo
c2VsZWN0b3JbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYWN0aW9uTG9jYXRpb25zOworfQorCisK
K1JlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNvbXBpbGVSdWxlTGlzdChjb25zdCBTdHJp
bmcmIHJ1bGVMaXN0KQoreworICAgIGF1dG8gcGFyc2VkUnVsZUxpc3QgPSBwYXJzZVJ1bGVMaXN0
KHJ1bGVMaXN0KTsKKworI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJ
TkcKKyAgICBkb3VibGUgbmZhQnVpbGRUaW1lU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKTsKKyNlbmRpZgorCisgICAgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiBhY3Rp
b25zOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWN0aW9uTG9jYXRpb25zID0gc2VyaWFsaXplQWN0
aW9ucyhwYXJzZWRSdWxlTGlzdCwgYWN0aW9ucyk7CisKKyAgICBORkEgbmZhOworICAgIFVSTEZp
bHRlclBhcnNlciB1cmxGaWx0ZXJQYXJzZXIobmZhKTsKKyAgICBmb3IgKHVuc2lnbmVkIHJ1bGVJ
bmRleCA9IDA7IHJ1bGVJbmRleCA8IHBhcnNlZFJ1bGVMaXN0LnNpemUoKTsgKytydWxlSW5kZXgp
IHsKKyAgICAgICAgY29uc3QgQ29udGVudEV4dGVuc2lvblJ1bGUmIGNvbnRlbnRFeHRlbnNpb25S
dWxlID0gcGFyc2VkUnVsZUxpc3RbcnVsZUluZGV4XTsKKyAgICAgICAgY29uc3QgVHJpZ2dlciYg
dHJpZ2dlciA9IGNvbnRlbnRFeHRlbnNpb25SdWxlLnRyaWdnZXIoKTsKKyAgICAgICAgQVNTRVJU
KHRyaWdnZXIudXJsRmlsdGVyLmxlbmd0aCgpKTsKKworICAgICAgICBTdHJpbmcgZXJyb3IgPSB1
cmxGaWx0ZXJQYXJzZXIuYWRkUGF0dGVybih0cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxG
aWx0ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxvY2F0aW9uc1tydWxlSW5kZXhdKTsKKworICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBkYXRhTG9nRigiRXJyb3Ig
d2hpbGUgcGFyc2luZyAlczogJXNcbiIsIHRyaWdnZXIudXJsRmlsdGVyLnV0ZjgoKS5kYXRhKCks
IGVycm9yLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICB9CisKKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisg
ICAgZG91YmxlIG5mYUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
OworICAgIGRhdGFMb2dGKCIgICAgVGltZSBzcGVudCBidWlsZGluZyB0aGUgTkZBOiAlZlxuIiwg
KG5mYUJ1aWxkVGltZUVuZCAtIG5mYUJ1aWxkVGltZVN0YXJ0KSk7CisjZW5kaWYKKworI2lmIENP
TlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgIG5mYS5kZWJ1Z1By
aW50RG90KCk7CisjZW5kaWYKKworI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9S
RVBPUlRJTkcKKyAgICBkb3VibGUgZGZhQnVpbGRUaW1lU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKKyNlbmRpZgorCisgICAgY29uc3QgREZBIGRmYSA9IE5GQVRvREZBOjpj
b252ZXJ0KG5mYSk7CisKKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JU
SU5HCisgICAgZG91YmxlIGRmYUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOworICAgIGRhdGFMb2dGKCIgICAgVGltZSBzcGVudCBidWlsZGluZyB0aGUgREZBOiAl
ZlxuIiwgKGRmYUJ1aWxkVGltZUVuZCAtIGRmYUJ1aWxkVGltZVN0YXJ0KSk7CisjZW5kaWYKKwor
ICAgIC8vIEZJWE1FOiBuZXZlciBhZGQgYSBERkEgdGhhdCBvbmx5IG1hdGNoZXMgdGhlIGVtcHR5
IHNldC4KKworI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwor
ICAgIGRmYS5kZWJ1Z1ByaW50RG90KCk7CisjZW5kaWYKKworICAgIFZlY3RvcjxERkFCeXRlY29k
ZT4gYnl0ZWNvZGU7CisgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihkZmEsIGJ5dGVj
b2RlKTsKKyAgICBjb21waWxlci5jb21waWxlKCk7CisKKyAgICByZXR1cm4gQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGJ5dGVjb2RlKSwgV1RGOjptb3ZlKGFjdGlv
bnMpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbnRlbnRFeHRlbnNpb25D
b21waWxlcl9oCisjZGVmaW5lIENvbnRlbnRFeHRlbnNpb25Db21waWxlcl9oCisKKyNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK1dF
QkNPUkVfRVhQT1JUIFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNvbXBpbGVSdWxlTGlz
dChjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisjZW5kaWYgLy8gQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyX2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25QYXJzZXIuY3BwCShyZXZpc2lvbiAxODA5ODQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHA6MTgwOTg0KQorKysgU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmgiCisKKyNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1
bGUuaCIKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCIKKyNpbmNsdWRlICJD
b250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lk
ZW50aWZpZXJJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlu
bGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT05PYmplY3QuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4K
KyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCituYW1lc3BhY2UgRXh0ZW5zaW9uc01hbmFn
ZXIgeworCitzdGF0aWMgYm9vbCBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0
JiBydWxlT2JqZWN0LCBUcmlnZ2VyJiB0cmlnZ2VyKQoreworICAgIEpTVmFsdWUgdHJpZ2dlck9i
amVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAidHJpZ2dlciIp
KTsKKyAgICBpZiAoIXRyaWdnZXJPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdHJp
Z2dlck9iamVjdC5pc09iamVjdCgpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCB0
cmlnZ2VyIG9iamVjdC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEpT
VmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZp
ZXIoJmV4ZWMsICJ1cmwtZmlsdGVyIikpOworICAgIGlmICghdXJsRmlsdGVyT2JqZWN0IHx8IGV4
ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXVybEZpbHRlck9iamVjdC5pc1N0cmluZygpKSB7CisgICAg
ICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCB1cmwtZmlsdGVyIG9iamVjdC4iKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFN0cmluZyB1cmxGaWx0ZXIgPSB1cmxGaWx0ZXJP
YmplY3QudG9XVEZTdHJpbmcoJmV4ZWMpOworICAgIGlmICh1cmxGaWx0ZXIuaXNFbXB0eSgpKSB7
CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCB1cmwtZmlsdGVyIG9iamVjdC4gVGhlIHVy
bCBpcyBlbXB0eS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB0cmlnZ2Vy
LnVybEZpbHRlciA9IHVybEZpbHRlcjsKKworICAgIEpTVmFsdWUgdXJsRmlsdGVyQ2FzZU9iamVj
dCA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAidXJsLWZpbHRl
ci1pcy1jYXNlLXNlbnNpdGl2ZSIpKTsKKyAgICBpZiAodXJsRmlsdGVyQ2FzZU9iamVjdCAmJiAh
ZXhlYy5oYWRFeGNlcHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNlT2JqZWN0LmlzQm9vbGVhbigpKQor
ICAgICAgICB0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSA9IHVybEZpbHRlckNhc2VP
YmplY3QudG9Cb29sZWFuKCZleGVjKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Ym9vbCBsb2FkQWN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgSlNPYmplY3QmIHJ1bGVPYmplY3QsIEFj
dGlvbiYgYWN0aW9uKQoreworICAgIEpTVmFsdWUgYWN0aW9uT2JqZWN0ID0gcnVsZU9iamVjdC5n
ZXQoJmV4ZWMsIElkZW50aWZpZXIoJmV4ZWMsICJhY3Rpb24iKSk7CisgICAgaWYgKCFhY3Rpb25P
YmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhYWN0aW9uT2JqZWN0LmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJJbnZhbGlkIGFjdGlvbiBvYmplY3QuIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBKU1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rp
b25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAidHlwZSIpKTsKKyAgICBpZiAo
IXR5cGVPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmlu
ZygpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCB1cmwtZmlsdGVyIG9iamVjdC4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFN0cmluZyBhY3Rpb25UeXBl
ID0gdHlwZU9iamVjdC50b1dURlN0cmluZygmZXhlYyk7CisKKyAgICBpZiAoYWN0aW9uVHlwZSA9
PSAiYmxvY2siKQorICAgICAgICBhY3Rpb24gPSBBY3Rpb25UeXBlOjpCbG9ja0xvYWQ7CisgICAg
ZWxzZSBpZiAoYWN0aW9uVHlwZSA9PSAiaWdub3JlLXByZXZpb3VzLXJ1bGVzIikKKyAgICAgICAg
YWN0aW9uID0gQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczsKKyAgICBlbHNlIGlmIChh
Y3Rpb25UeXBlID09ICJibG9jay1jb29raWVzIikKKyAgICAgICAgYWN0aW9uID0gQWN0aW9uVHlw
ZTo6QmxvY2tDb29raWVzOworICAgIGVsc2UgaWYgKGFjdGlvblR5cGUgPT0gImNzcy1kaXNwbGF5
LW5vbmUiKSB7CisgICAgICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0KCZl
eGVjLCBJZGVudGlmaWVyKCZleGVjLCAic2VsZWN0b3IiKSk7CisgICAgICAgIGlmICghc2VsZWN0
b3IgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkgeworICAg
ICAgICAgICAgV1RGTG9nQWx3YXlzKCJjc3MtZGlzcGxheS1ub25lIGFjdGlvbiB0eXBlIHJlcXVp
cmVzIGEgc2VsZWN0b3IiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBhY3Rpb24gPSBBY3Rpb24oQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmUsIHNlbGVj
dG9yLnRvV1RGU3RyaW5nKCZleGVjKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV1RGTG9nQWx3
YXlzKCJVbnJlY29nbml6ZWQgYWN0aW9uOiBcIiVzXCIiLCBhY3Rpb25UeXBlLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyB2b2lkIGxvYWRSdWxlKEV4ZWNTdGF0ZSYgZXhlYywgSlNPYmplY3QmIHJ1bGVP
YmplY3QsIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1bGVMaXN0KQoreworICAgIFRy
aWdnZXIgdHJpZ2dlcjsKKyAgICBpZiAoIWxvYWRUcmlnZ2VyKGV4ZWMsIHJ1bGVPYmplY3QsIHRy
aWdnZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBY3Rpb24gYWN0aW9uOworICAgIGlmICgh
bG9hZEFjdGlvbihleGVjLCBydWxlT2JqZWN0LCBhY3Rpb24pKQorICAgICAgICByZXR1cm47CisK
KyAgICBydWxlTGlzdC5hcHBlbmQoQ29udGVudEV4dGVuc2lvblJ1bGUodHJpZ2dlciwgYWN0aW9u
KSk7Cit9CisKK3N0YXRpYyBWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+IGxvYWRFbmNvZGVk
UnVsZXMoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBTdHJpbmcmIHJ1bGVzKQoreworICAgIEpTVmFs
dWUgZGVjb2RlZFJ1bGVzID0gSlNPTlBhcnNlKCZleGVjLCBydWxlcyk7CisKKyAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSB8fCAhZGVjb2RlZFJ1bGVzKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5
cygiRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09OIHN0cmluZy4iKTsKKyAgICAgICAgcmV0dXJuIFZl
Y3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4oKTsKKyAgICB9CisKKyAgICBpZiAoZGVjb2RlZFJ1
bGVzLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIHRvcExldmVsT2JqZWN0ID0gZGVj
b2RlZFJ1bGVzLnRvT2JqZWN0KCZleGVjKTsKKyAgICAgICAgaWYgKCF0b3BMZXZlbE9iamVjdCB8
fCBleGVjLmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkludmFs
aWQgaW5wdXQsIHRoZSB0b3AgbGV2ZWwgc3RydWN0dXJlIGlzIG5vdCBhbiBvYmplY3QuIik7Cisg
ICAgICAgICAgICByZXR1cm4gVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPigpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFpc0pTQXJyYXkodG9wTGV2ZWxPYmplY3QpKSB7CisgICAgICAg
ICAgICBXVEZMb2dBbHdheXMoIkludmFsaWQgaW5wdXQsIHRoZSB0b3AgbGV2ZWwgb2JqZWN0IGlz
IG5vdCBhbiBhcnJheS4iKTsKKyAgICAgICAgICAgIHJldHVybiBWZWN0b3I8Q29udGVudEV4dGVu
c2lvblJ1bGU+KCk7CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lv
blJ1bGU+IHJ1bGVMaXN0OworICAgICAgICBKU0FycmF5KiB0b3BMZXZlbEFycmF5ID0ganNDYXN0
PEpTQXJyYXkqPih0b3BMZXZlbE9iamVjdCk7CisKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
dG9wTGV2ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRvcExldmVsQXJy
YXktPmdldEluZGV4KCZleGVjLCBpKTsKKyAgICAgICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpIHx8ICF2YWx1ZSkgeworICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCBv
YmplY3QgaW4gdGhlIGFycmF5LiIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBKU09iamVjdCogcnVsZU9iamVjdCA9IHZhbHVlLnRvT2Jq
ZWN0KCZleGVjKTsKKyAgICAgICAgICAgIGlmICghcnVsZU9iamVjdCB8fCBleGVjLmhhZEV4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJJbnZhbGlkIHJ1bGUiKTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxv
YWRSdWxlKGV4ZWMsICpydWxlT2JqZWN0LCBydWxlTGlzdCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJ1bGVMaXN0OworICAgIH0KKyAgICByZXR1cm4gVmVjdG9yPENvbnRlbnRFeHRlbnNp
b25SdWxlPigpOworfQorCitWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+IGNyZWF0ZVJ1bGVM
aXN0KGNvbnN0IFN0cmluZyYgcnVsZXMpCit7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZP
Uk1BTkNFX1JFUE9SVElORworICAgIGRvdWJsZSBsb2FkRXh0ZW5zaW9uU3RhcnRUaW1lID0gbW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisjZW5kaWYKKyAgICBSZWZQdHI8Vk0+IHZtID0g
Vk06OmNyZWF0ZSgpOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5nZXQoKSk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUoKnZt
LCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp2bSwganNOdWxsKCkpKTsKKworICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIFZlY3Rv
cjxDb250ZW50RXh0ZW5zaW9uUnVsZT4gcnVsZUxpc3QgPSBsb2FkRW5jb2RlZFJ1bGVzKCpleGVj
LCBydWxlcyk7CisKKyAgICB2bS5jbGVhcigpOworCisgICAgaWYgKHJ1bGVMaXN0LmlzRW1wdHko
KSkKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJFbXB0eSBleHRlbnNpb24uIik7CisKKyNpZiBDT05U
RU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisgICAgZG91YmxlIGxvYWRFeHRl
bnNpb25FbmRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgZGF0YUxv
Z0YoIlRpbWUgc3BlbnQgbG9hZGluZyBleHRlbnNpb24gJXM6ICVmXG4iLCBpZGVudGlmaWVyLnV0
ZjgoKS5kYXRhKCksIChsb2FkRXh0ZW5zaW9uRW5kVGltZSAtIGxvYWRFeHRlbnNpb25TdGFydFRp
bWUpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJ1bGVMaXN0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBFeHRlbnNpb25zTWFuYWdlcgorfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ29udGVu
dEV4dGVuc2lvblBhcnNlci5oIgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIApA
QCAtNDYsOCArNDYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50
RXh0ZW5zaW9ucyB7CiAKLW5hbWVzcGFjZSBFeHRlbnNpb25zTWFuYWdlciB7Ci0KIHN0YXRpYyBi
b29sIGxvYWRUcmlnZ2VyKEV4ZWNTdGF0ZSYgZXhlYywgSlNPYmplY3QmIHJ1bGVPYmplY3QsIFRy
aWdnZXImIHRyaWdnZXIpCiB7CiAgICAgSlNWYWx1ZSB0cmlnZ2VyT2JqZWN0ID0gcnVsZU9iamVj
dC5nZXQoJmV4ZWMsIElkZW50aWZpZXIoJmV4ZWMsICJ0cmlnZ2VyIikpOwpAQCAtMTcwLDcgKzE2
OCw3IEBAIHN0YXRpYyBWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+IGxvYWQKICAgICByZXR1
cm4gVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPigpOwogfQogCi1WZWN0b3I8Q29udGVudEV4
dGVuc2lvblJ1bGU+IGNyZWF0ZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYgcnVsZXMpCitWZWN0b3I8
Q29udGVudEV4dGVuc2lvblJ1bGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlcykK
IHsKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCiAgICAgZG91
YmxlIGxvYWRFeHRlbnNpb25TdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KTsKQEAgLTE5Niw3ICsxOTQsNiBAQCBWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+IGNyZWF0
ZVJ1bGVMCiAgICAgcmV0dXJuIHJ1bGVMaXN0OwogfQogCi19IC8vIG5hbWVzcGFjZSBFeHRlbnNp
b25zTWFuYWdlcgogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuaAkocmV2aXNpb24gMTgwOTg0KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc01h
bmFnZXIuaDoxODA5ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyX2gKKyNkZWZpbmUgQ29u
dGVudEV4dGVuc2lvbnNNYW5hZ2VyX2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitj
bGFzcyBDb250ZW50RXh0ZW5zaW9uUnVsZTsKKworLy8gVGhlIEV4dGVuc2lvbnNNYW5hZ2VyIGxv
YWRzIHNlcmlhbGl6ZWQgY29udGVudCBleHRlbnNpb24gcnVsZXMgZGlyZWN0bHkgaW50byBXZWJD
b3JlLgorbmFtZXNwYWNlIEV4dGVuc2lvbnNNYW5hZ2VyIHsKKworVmVjdG9yPENvbnRlbnRFeHRl
bnNpb25SdWxlPiBjcmVhdGVSdWxlTGlzdChjb25zdCBTdHJpbmcmIHJ1bGVzKTsKKworfSAvLyBu
YW1lc3BhY2UgRXh0ZW5zaW9uc01hbmFnZXIKKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVu
c2lvbnMKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXJfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25QYXJzZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw4ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXJfaAotI2RlZmluZSBDb250ZW50RXh0
ZW5zaW9uc01hbmFnZXJfaAorI2lmbmRlZiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyX2gKKyNkZWZp
bmUgQ29udGVudEV4dGVuc2lvblBhcnNlcl9oCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQogCkBAIC0zNywxNiArMzcsMTEgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsK
IAogY2xhc3MgQ29udGVudEV4dGVuc2lvblJ1bGU7CiAKLS8vIFRoZSBFeHRlbnNpb25zTWFuYWdl
ciBsb2FkcyBzZXJpYWxpemVkIGNvbnRlbnQgZXh0ZW5zaW9uIHJ1bGVzIGRpcmVjdGx5IGludG8g
V2ViQ29yZS4KLW5hbWVzcGFjZSBFeHRlbnNpb25zTWFuYWdlciB7Ci0KLVZlY3RvcjxDb250ZW50
RXh0ZW5zaW9uUnVsZT4gY3JlYXRlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlcyk7Ci0KLX0g
Ly8gbmFtZXNwYWNlIEV4dGVuc2lvbnNNYW5hZ2VyCitWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1
bGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlcyk7CiAKIH0gLy8gbmFtZXNwYWNl
IENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCi0jZW5kaWYgLy8gQ29udGVudEV4dGVuc2lvbnNN
YW5hZ2VyX2gKKyNlbmRpZiAvLyBDb250ZW50RXh0ZW5zaW9uUGFyc2VyX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2aXNpb24gMTgwOTg0KQorKysgU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTQzICsyOCwzNyBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKIAotI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCi0jaW5jbHVkZSAi
REZBQnl0ZWNvZGVDb21waWxlci5oIgorI2luY2x1ZGUgIkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bi5oIgogI2luY2x1ZGUgIkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJORkEu
aCIKLSNpbmNsdWRlICJORkFUb0RGQS5oIgogI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIlVS
TEZpbHRlclBhcnNlci5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFj
ZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAgICAgCi1WZWN0b3I8dW5zaWduZWQ+IENvbnRlbnRFeHRl
bnNpb25zQmFja2VuZDo6c2VyaWFsaXplQWN0aW9ucyhjb25zdCBWZWN0b3I8Q29udGVudEV4dGVu
c2lvblJ1bGU+JiBydWxlTGlzdCwgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYgYWN0aW9u
cykKLXsKLSAgICBBU1NFUlQoIWFjdGlvbnMuc2l6ZSgpKTsKLSAgICAKLSAgICBWZWN0b3I8dW5z
aWduZWQ+IGFjdGlvbkxvY2F0aW9uczsKLSAgICAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBydWxl
SW5kZXggPSAwOyBydWxlSW5kZXggPCBydWxlTGlzdC5zaXplKCk7ICsrcnVsZUluZGV4KSB7Ci0g
ICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxlJiBydWxlID0gcnVsZUxpc3RbcnVsZUlu
ZGV4XTsKLSAgICAgICAgYWN0aW9uTG9jYXRpb25zLmFwcGVuZChhY3Rpb25zLnNpemUoKSk7Ci0g
ICAgICAgIAotICAgICAgICBzd2l0Y2ggKHJ1bGUuYWN0aW9uKCkudHlwZSgpKSB7Ci0gICAgICAg
IGNhc2UgQWN0aW9uVHlwZTo6SW52YWxpZEFjdGlvbjoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICAgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0xvYWQ6
Ci0gICAgICAgIGNhc2UgQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzOgotICAgICAgICBjYXNlIEFj
dGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6Ci0gICAgICAgICAgICBhY3Rpb25zLmFwcGVu
ZChzdGF0aWNfY2FzdDxTZXJpYWxpemVkQWN0aW9uQnl0ZT4ocnVsZS5hY3Rpb24oKS50eXBlKCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmU6IHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IgPSBydWxlLmFj
dGlvbigpLmNzc1NlbGVjdG9yKCk7Ci0gICAgICAgICAgICAvLyBBcHBlbmQgYWN0aW9uIHR5cGUg
KDEgYnl0ZSkuCi0gICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDxTZXJpYWxp
emVkQWN0aW9uQnl0ZT4oQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmUpKTsKLSAgICAgICAgICAg
IC8vIEFwcGVuZCBTZWxlY3RvciBsZW5ndGggKDQgYnl0ZXMpLgotICAgICAgICAgICAgdW5zaWdu
ZWQgc2VsZWN0b3JMZW5ndGggPSBzZWxlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGFjdGlv
bnMucmVzaXplKGFjdGlvbnMuc2l6ZSgpICsgc2l6ZW9mKHVuc2lnbmVkKSk7Ci0gICAgICAgICAg
ICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KCZhY3Rpb25zW2FjdGlvbnMuc2l6ZSgpIC0g
c2l6ZW9mKHVuc2lnbmVkKV0pID0gc2VsZWN0b3JMZW5ndGg7Ci0gICAgICAgICAgICBib29sIHdp
ZGVDaGFyYWN0ZXJzID0gIXNlbGVjdG9yLmlzOEJpdCgpOwotICAgICAgICAgICAgYWN0aW9ucy5h
cHBlbmQod2lkZUNoYXJhY3RlcnMpOwotICAgICAgICAgICAgLy8gQXBwZW5kIFNlbGVjdG9yLgot
ICAgICAgICAgICAgaWYgKHdpZGVDaGFyYWN0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgYWN0aW9ucy5yZXNpemUoYWN0aW9ucy5zaXplKCkgKyBzaXplb2YoVUNoYXIpKTsKLSAg
ICAgICAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPigmYWN0aW9uc1thY3Rp
b25zLnNpemUoKSAtIHNpemVvZihVQ2hhcildKSA9IHNlbGVjdG9yW2ldOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNlbGVjdG9yTGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIGFj
dGlvbnMuYXBwZW5kKHNlbGVjdG9yW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGFjdGlvbkxvY2F0
aW9uczsKLX0KLQotdm9pZCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnNldFJ1bGVMaXN0KGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxl
PiYgcnVsZUxpc3QpCit2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWRkQ29udGVudEV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJlZlB0cjxDb21waWxlZENvbnRlbnRF
eHRlbnNpb24+IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikKIHsKICAgICBBU1NFUlQoIWlkZW50
aWZpZXIuaXNFbXB0eSgpKTsKICAgICBpZiAoaWRlbnRpZmllci5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChydWxlTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVtb3Zl
UnVsZUxpc3QoaWRlbnRpZmllcik7CisgICAgaWYgKCFjb21waWxlZENvbnRlbnRFeHRlbnNpb24p
IHsKKyAgICAgICAgcmVtb3ZlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBP
UlRJTkcKLSAgICBkb3VibGUgbmZhQnVpbGRUaW1lU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiBh
Y3Rpb25zOwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gYWN0aW9uTG9jYXRpb25zID0gc2VyaWFsaXpl
QWN0aW9ucyhydWxlTGlzdCwgYWN0aW9ucyk7Ci0KLSAgICBORkEgbmZhOwotICAgIFVSTEZpbHRl
clBhcnNlciB1cmxGaWx0ZXJQYXJzZXIobmZhKTsKLSAgICBmb3IgKHVuc2lnbmVkIHJ1bGVJbmRl
eCA9IDA7IHJ1bGVJbmRleCA8IHJ1bGVMaXN0LnNpemUoKTsgKytydWxlSW5kZXgpIHsKLSAgICAg
ICAgY29uc3QgQ29udGVudEV4dGVuc2lvblJ1bGUmIGNvbnRlbnRFeHRlbnNpb25SdWxlID0gcnVs
ZUxpc3RbcnVsZUluZGV4XTsKLSAgICAgICAgY29uc3QgVHJpZ2dlciYgdHJpZ2dlciA9IGNvbnRl
bnRFeHRlbnNpb25SdWxlLnRyaWdnZXIoKTsKLSAgICAgICAgQVNTRVJUKHRyaWdnZXIudXJsRmls
dGVyLmxlbmd0aCgpKTsKLQotICAgICAgICBTdHJpbmcgZXJyb3IgPSB1cmxGaWx0ZXJQYXJzZXIu
YWRkUGF0dGVybih0cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5z
aXRpdmUsIGFjdGlvbkxvY2F0aW9uc1tydWxlSW5kZXhdKTsKLQotICAgICAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nRigiRXJyb3Igd2hpbGUgcGFyc2luZyAl
czogJXNcbiIsIHRyaWdnZXIudXJsRmlsdGVyLnV0ZjgoKS5kYXRhKCksIGVycm9yLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBD
T05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCi0gICAgZG91YmxlIG5mYUJ1
aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotICAgIGRhdGFMb2dG
KCIgICAgVGltZSBzcGVudCBidWlsZGluZyB0aGUgTkZBOiAlZlxuIiwgKG5mYUJ1aWxkVGltZUVu
ZCAtIG5mYUJ1aWxkVGltZVN0YXJ0KSk7Ci0jZW5kaWYKLQotI2lmIENPTlRFTlRfRVhURU5TSU9O
U19TVEFURV9NQUNISU5FX0RFQlVHR0lORwotICAgIG5mYS5kZWJ1Z1ByaW50RG90KCk7Ci0jZW5k
aWYKLQotI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKLSAgICBk
b3VibGUgZGZhQnVpbGRUaW1lU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsK
LSNlbmRpZgotCi0gICAgY29uc3QgREZBIGRmYSA9IE5GQVRvREZBOjpjb252ZXJ0KG5mYSk7Ci0K
LSNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCi0gICAgZG91Ymxl
IGRmYUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotICAgIGRh
dGFMb2dGKCIgICAgVGltZSBzcGVudCBidWlsZGluZyB0aGUgREZBOiAlZlxuIiwgKGRmYUJ1aWxk
VGltZUVuZCAtIGRmYUJ1aWxkVGltZVN0YXJ0KSk7Ci0jZW5kaWYKLQotICAgIC8vIEZJWE1FOiBu
ZXZlciBhZGQgYSBERkEgdGhhdCBvbmx5IG1hdGNoZXMgdGhlIGVtcHR5IHNldC4KLQotI2lmIENP
TlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwotICAgIGRmYS5kZWJ1Z1By
aW50RG90KCk7Ci0jZW5kaWYKLQotICAgIFZlY3RvcjxERkFCeXRlY29kZT4gYnl0ZWNvZGU7Ci0g
ICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihkZmEsIGJ5dGVjb2RlKTsKLSAgICBjb21w
aWxlci5jb21waWxlKCk7Ci0gICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbiA9IHsgYnl0ZWNvZGUsIGFjdGlvbnMgfTsKLSAgICBtX3J1bGVMaXN0cy5z
ZXQoaWRlbnRpZmllciwgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKTsKKyAgICBtX2NvbnRlbnRF
eHRlbnNpb25zLnNldChpZGVudGlmaWVyLCBjb21waWxlZENvbnRlbnRFeHRlbnNpb24pOwogfQog
Ci12b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6cmVtb3ZlUnVsZUxpc3QoY29uc3QgU3Ry
aW5nJiBpZGVudGlmaWVyKQordm9pZCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnJlbW92ZUNv
bnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQogewotICAgIG1fcnVsZUxp
c3RzLnJlbW92ZShpZGVudGlmaWVyKTsKKyAgICBtX2NvbnRlbnRFeHRlbnNpb25zLnJlbW92ZShp
ZGVudGlmaWVyKTsKIH0KIAotdm9pZCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnJlbW92ZUFs
bFJ1bGVMaXN0cygpCit2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6cmVtb3ZlQWxsQ29u
dGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fcnVsZUxpc3RzLmNsZWFyKCk7CisgICAgbV9jb250
ZW50RXh0ZW5zaW9ucy5jbGVhcigpOwogfQogCiBWZWN0b3I8QWN0aW9uPiBDb250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQ6OmFjdGlvbnNGb3JVUkwoY29uc3QgVVJMJiB1cmwpCkBAIC0xNzQsOSArNjgs
OCBAQCBWZWN0b3I8QWN0aW9uPiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6CiAgICAgY29uc3Qg
Q1N0cmluZyYgdXJsQ1N0cmluZyA9IHVybFN0cmluZy51dGY4KCk7CiAKICAgICBWZWN0b3I8QWN0
aW9uPiBhY3Rpb25zOwotICAgIGZvciAoYXV0byYgcnVsZUxpc3RTbG90IDogbV9ydWxlTGlzdHMp
IHsKLSAgICAgICAgY29uc3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZENvbnRl
bnRFeHRlbnNpb24gPSBydWxlTGlzdFNsb3QudmFsdWU7Ci0gICAgICAgIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIgaW50ZXJwcmV0ZXIoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmJ5dGVjb2RlKTsK
KyAgICBmb3IgKGF1dG8mIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA6IG1fY29udGVudEV4dGVu
c2lvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnBy
ZXRlcihjb21waWxlZENvbnRlbnRFeHRlbnNpb24tPmJ5dGVjb2RlKCkpOwogICAgICAgICBERkFC
eXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIHRyaWdnZXJlZEFjdGlvbnMgPSBpbnRlcnByZXRl
ci5pbnRlcnByZXQodXJsQ1N0cmluZyk7CiAgICAgICAgIAogICAgICAgICBpZiAoIXRyaWdnZXJl
ZEFjdGlvbnMuaXNFbXB0eSgpKSB7CkBAIC0xODgsNyArODEsNyBAQCBWZWN0b3I8QWN0aW9uPiBD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEFk
ZCBhY3Rpb25zIGluIHJldmVyc2Ugb3JkZXIgdG8gcHJvcGVybHkgZGVhbCB3aXRoIElnbm9yZVBy
ZXZpb3VzUnVsZXMuCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhY3Rpb25Mb2NhdGlv
bnMuc2l6ZSgpOyBpOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBBY3Rpb24gYWN0aW9uID0gQWN0
aW9uOjpkZXNlcmlhbGl6ZShydWxlTGlzdFNsb3QudmFsdWUuYWN0aW9ucywgYWN0aW9uTG9jYXRp
b25zW2kgLSAxXSk7CisgICAgICAgICAgICAgICAgQWN0aW9uIGFjdGlvbiA9IEFjdGlvbjo6ZGVz
ZXJpYWxpemUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLT5hY3Rpb25zKCksIGFjdGlvbkxvY2F0
aW9uc1tpIC0gMV0pOwogICAgICAgICAgICAgICAgIGlmIChhY3Rpb24udHlwZSgpID09IEFjdGlv
blR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXMpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQuaAkocmV2aXNpb24gMTgwOTg0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDkgKzI5LDYgQEAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCiAjaW5jbHVkZSAi
Q29udGVudEV4dGVuc2lvblJ1bGUuaCIKLSNpbmNsdWRlICJERkEuaCIKLSNpbmNsdWRlICJERkFC
eXRlY29kZS5oIgotI2luY2x1ZGUgIlVzZXJDb250ZW50Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDIsNiArMzksOCBAQCBjbGFzcyBVUkw7CiAK
IG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKK2NsYXNzIENvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjsKKwogLy8gVGhlIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBpcyB0aGUgaW50ZXJu
YWwgbW9kZWwgb2YgYWxsIHRoZSBjb250ZW50IGV4dGVuc2lvbnMuCiAvLwogLy8gSXQgcHJvdmlk
ZXMgdHdvIHNlcnZpY2VzOgpAQCAtNTMsMjIgKzUyLDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIFNl
dCBhIGxpc3Qgb2YgcnVsZXMgZm9yIGEgZ2l2ZW4gbmFtZS4gSWYgdGhlcmUgd2VyZSBleGlzdGlu
ZyBydWxlcyBmb3IgdGhlIG5hbWUsIHRoZXkgYXJlIG92ZXJyaWRlbi4KICAgICAvLyBUaGUgaWRl
bnRpZmllciBjYW5ub3QgYmUgZW1wdHkuCi0gICAgdm9pZCBzZXRSdWxlTGlzdChjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4mKTsKLSAg
ICB2b2lkIHJlbW92ZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7Ci0gICAgdm9p
ZCByZW1vdmVBbGxSdWxlTGlzdHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENvbnRl
bnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZWZQdHI8Q29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uPik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVDb250ZW50RXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogCiAgICAgLy8gLSBJbnRlcm5hbCBXZWJD
b3JlIEludGVyZmFjZS4KLSAgICBWZWN0b3I8QWN0aW9uPiBhY3Rpb25zRm9yVVJMKGNvbnN0IFVS
TCYpOworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxBY3Rpb24+IGFjdGlvbnNGb3JVUkwoY29u
c3QgVVJMJik7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IENvbXBpbGVkQ29udGVudEV4dGVuc2lv
biB7Ci0gICAgICAgIFZlY3RvcjxERkFCeXRlY29kZT4gYnl0ZWNvZGU7Ci0gICAgICAgIFZlY3Rv
cjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4gYWN0aW9uczsKLSAgICB9OwotCi0gICAgVmVjdG9yPHVu
c2lnbmVkPiBzZXJpYWxpemVBY3Rpb25zKGNvbnN0IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVs
ZT4mIHJ1bGVMaXN0LCBWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiBhY3Rpb25zKTsKLQot
ICAgIEhhc2hNYXA8U3RyaW5nLCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IG1fcnVsZUxpc3Rz
OworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPj4g
bV9jb250ZW50RXh0ZW5zaW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNp
b25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uc01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAJKHJldmlzaW9uIDE4MDk4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zTWFuYWdl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmgiCi0K
LSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0jaW5jbHVkZSAiQ29udGVudEV4dGVu
c2lvblJ1bGUuaCIKLSNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCIKLSNpbmNs
dWRlICJDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0lkZW50aWZpZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNW
YWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT05PYmplY3QuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Vk0uaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1uYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewotCi1uYW1lc3BhY2UgRXh0ZW5zaW9u
c01hbmFnZXIgewotCi1zdGF0aWMgYm9vbCBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4ZWMsIEpT
T2JqZWN0JiBydWxlT2JqZWN0LCBUcmlnZ2VyJiB0cmlnZ2VyKQotewotICAgIEpTVmFsdWUgdHJp
Z2dlck9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAidHJp
Z2dlciIpKTsKLSAgICBpZiAoIXRyaWdnZXJPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8
fCAhdHJpZ2dlck9iamVjdC5pc09iamVjdCgpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW52
YWxpZCB0cmlnZ2VyIG9iamVjdC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIEpTVmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElk
ZW50aWZpZXIoJmV4ZWMsICJ1cmwtZmlsdGVyIikpOwotICAgIGlmICghdXJsRmlsdGVyT2JqZWN0
IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXVybEZpbHRlck9iamVjdC5pc1N0cmluZygpKSB7
Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCB1cmwtZmlsdGVyIG9iamVjdC4iKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFN0cmluZyB1cmxGaWx0ZXIgPSB1cmxG
aWx0ZXJPYmplY3QudG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgIGlmICh1cmxGaWx0ZXIuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCB1cmwtZmlsdGVyIG9iamVjdC4g
VGhlIHVybCBpcyBlbXB0eS4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB0
cmlnZ2VyLnVybEZpbHRlciA9IHVybEZpbHRlcjsKLQotICAgIEpTVmFsdWUgdXJsRmlsdGVyQ2Fz
ZU9iamVjdCA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAidXJs
LWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2ZSIpKTsKLSAgICBpZiAodXJsRmlsdGVyQ2FzZU9iamVj
dCAmJiAhZXhlYy5oYWRFeGNlcHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNlT2JqZWN0LmlzQm9vbGVh
bigpKQotICAgICAgICB0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSA9IHVybEZpbHRl
ckNhc2VPYmplY3QudG9Cb29sZWFuKCZleGVjKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1z
dGF0aWMgYm9vbCBsb2FkQWN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgSlNPYmplY3QmIHJ1bGVPYmpl
Y3QsIEFjdGlvbiYgYWN0aW9uKQotewotICAgIEpTVmFsdWUgYWN0aW9uT2JqZWN0ID0gcnVsZU9i
amVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXIoJmV4ZWMsICJhY3Rpb24iKSk7Ci0gICAgaWYgKCFh
Y3Rpb25PYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhYWN0aW9uT2JqZWN0LmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJJbnZhbGlkIGFjdGlvbiBvYmplY3QuIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlIHR5cGVPYmplY3Qg
PSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAidHlwZSIpKTsKLSAg
ICBpZiAoIXR5cGVPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5p
c1N0cmluZygpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCB1cmwtZmlsdGVyIG9i
amVjdC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFN0cmluZyBhY3Rp
b25UeXBlID0gdHlwZU9iamVjdC50b1dURlN0cmluZygmZXhlYyk7Ci0KLSAgICBpZiAoYWN0aW9u
VHlwZSA9PSAiYmxvY2siKQotICAgICAgICBhY3Rpb24gPSBBY3Rpb25UeXBlOjpCbG9ja0xvYWQ7
Ci0gICAgZWxzZSBpZiAoYWN0aW9uVHlwZSA9PSAiaWdub3JlLXByZXZpb3VzLXJ1bGVzIikKLSAg
ICAgICAgYWN0aW9uID0gQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczsKLSAgICBlbHNl
IGlmIChhY3Rpb25UeXBlID09ICJibG9jay1jb29raWVzIikKLSAgICAgICAgYWN0aW9uID0gQWN0
aW9uVHlwZTo6QmxvY2tDb29raWVzOwotICAgIGVsc2UgaWYgKGFjdGlvblR5cGUgPT0gImNzcy1k
aXNwbGF5LW5vbmUiKSB7Ci0gICAgICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3Qu
Z2V0KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAic2VsZWN0b3IiKSk7Ci0gICAgICAgIGlmICgh
c2VsZWN0b3IgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkg
ewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJjc3MtZGlzcGxheS1ub25lIGFjdGlvbiB0eXBl
IHJlcXVpcmVzIGEgc2VsZWN0b3IiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBhY3Rpb24gPSBBY3Rpb24oQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmUs
IHNlbGVjdG9yLnRvV1RGU3RyaW5nKCZleGVjKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJVbnJlY29nbml6ZWQgYWN0aW9uOiBcIiVzXCIiLCBhY3Rpb25UeXBlLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRSdWxlKEV4ZWNTdGF0ZSYgZXhlYywgSlNPYmplY3Qm
IHJ1bGVPYmplY3QsIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1bGVMaXN0KQotewot
ICAgIFRyaWdnZXIgdHJpZ2dlcjsKLSAgICBpZiAoIWxvYWRUcmlnZ2VyKGV4ZWMsIHJ1bGVPYmpl
Y3QsIHRyaWdnZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBY3Rpb24gYWN0aW9uOwotICAg
IGlmICghbG9hZEFjdGlvbihleGVjLCBydWxlT2JqZWN0LCBhY3Rpb24pKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBydWxlTGlzdC5hcHBlbmQoQ29udGVudEV4dGVuc2lvblJ1bGUodHJpZ2dlciwg
YWN0aW9uKSk7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+IGxvYWRF
bmNvZGVkUnVsZXMoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBTdHJpbmcmIHJ1bGVzKQotewotICAg
IEpTVmFsdWUgZGVjb2RlZFJ1bGVzID0gSlNPTlBhcnNlKCZleGVjLCBydWxlcyk7Ci0KLSAgICBp
ZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhZGVjb2RlZFJ1bGVzKSB7Ci0gICAgICAgIFdURkxv
Z0Fsd2F5cygiRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09OIHN0cmluZy4iKTsKLSAgICAgICAgcmV0
dXJuIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4oKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVj
b2RlZFJ1bGVzLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgSlNPYmplY3QqIHRvcExldmVsT2JqZWN0
ID0gZGVjb2RlZFJ1bGVzLnRvT2JqZWN0KCZleGVjKTsKLSAgICAgICAgaWYgKCF0b3BMZXZlbE9i
amVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMo
IkludmFsaWQgaW5wdXQsIHRoZSB0b3AgbGV2ZWwgc3RydWN0dXJlIGlzIG5vdCBhbiBvYmplY3Qu
Iik7Ci0gICAgICAgICAgICByZXR1cm4gVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpc0pTQXJyYXkodG9wTGV2ZWxPYmplY3QpKSB7Ci0g
ICAgICAgICAgICBXVEZMb2dBbHdheXMoIkludmFsaWQgaW5wdXQsIHRoZSB0b3AgbGV2ZWwgb2Jq
ZWN0IGlzIG5vdCBhbiBhcnJheS4iKTsKLSAgICAgICAgICAgIHJldHVybiBWZWN0b3I8Q29udGVu
dEV4dGVuc2lvblJ1bGU+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8Q29udGVudEV4
dGVuc2lvblJ1bGU+IHJ1bGVMaXN0OwotICAgICAgICBKU0FycmF5KiB0b3BMZXZlbEFycmF5ID0g
anNDYXN0PEpTQXJyYXkqPih0b3BMZXZlbE9iamVjdCk7Ci0KLSAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gdG9wTGV2ZWxBcnJheS0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRvcExl
dmVsQXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKLSAgICAgICAgICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpIHx8ICF2YWx1ZSkgewotICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiSW52
YWxpZCBvYmplY3QgaW4gdGhlIGFycmF5LiIpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU09iamVjdCogcnVsZU9iamVjdCA9IHZhbHVl
LnRvT2JqZWN0KCZleGVjKTsKLSAgICAgICAgICAgIGlmICghcnVsZU9iamVjdCB8fCBleGVjLmhh
ZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJJbnZhbGlkIHJ1
bGUiKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxvYWRSdWxlKGV4ZWMsICpydWxlT2JqZWN0LCBydWxlTGlzdCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHJ1bGVMaXN0OwotICAgIH0KLSAgICByZXR1cm4gVmVjdG9yPENvbnRlbnRF
eHRlbnNpb25SdWxlPigpOwotfQotCi1WZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+IGNyZWF0
ZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYgcnVsZXMpCi17Ci0jaWYgQ09OVEVOVF9FWFRFTlNJT05T
X1BFUkZPUk1BTkNFX1JFUE9SVElORwotICAgIGRvdWJsZSBsb2FkRXh0ZW5zaW9uU3RhcnRUaW1l
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0jZW5kaWYKLSAgICBSZWZQdHI8Vk0+
IHZtID0gVk06OmNyZWF0ZSgpOwotCi0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5nZXQoKSk7
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVh
dGUoKnZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp2bSwganNOdWxsKCkpKTsK
LQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAg
IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4gcnVsZUxpc3QgPSBsb2FkRW5jb2RlZFJ1bGVz
KCpleGVjLCBydWxlcyk7Ci0KLSAgICB2bS5jbGVhcigpOwotCi0gICAgaWYgKHJ1bGVMaXN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJFbXB0eSBleHRlbnNpb24uIik7Ci0KLSNp
ZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCi0gICAgZG91YmxlIGxv
YWRFeHRlbnNpb25FbmRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAg
ZGF0YUxvZ0YoIlRpbWUgc3BlbnQgbG9hZGluZyBleHRlbnNpb24gJXM6ICVmXG4iLCBpZGVudGlm
aWVyLnV0ZjgoKS5kYXRhKCksIChsb2FkRXh0ZW5zaW9uRW5kVGltZSAtIGxvYWRFeHRlbnNpb25T
dGFydFRpbWUpKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHJ1bGVMaXN0OwotfQotCi19IC8vIG5h
bWVzcGFjZSBFeHRlbnNpb25zTWFuYWdlcgotfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uc01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc01hbmFnZXIuaAkocmV2aXNpb24gMTgwOTg0KQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNNYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyX2gKLSNkZWZpbmUgQ29udGVudEV4dGVuc2lvbnNN
YW5hZ2VyX2gKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0KLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1uYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewotCi1jbGFzcyBDb250ZW50RXh0
ZW5zaW9uUnVsZTsKLQotLy8gVGhlIEV4dGVuc2lvbnNNYW5hZ2VyIGxvYWRzIHNlcmlhbGl6ZWQg
Y29udGVudCBleHRlbnNpb24gcnVsZXMgZGlyZWN0bHkgaW50byBXZWJDb3JlLgotbmFtZXNwYWNl
IEV4dGVuc2lvbnNNYW5hZ2VyIHsKLQotVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBjcmVh
dGVSdWxlTGlzdChjb25zdCBTdHJpbmcmIHJ1bGVzKTsKLQotfSAvLyBuYW1lc3BhY2UgRXh0ZW5z
aW9uc01hbmFnZXIKLQotfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0K
LSNlbmRpZiAvLyBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXJfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTgwOTg0KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw4ICszOCw4IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmgiCiAjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgiCi0jaW5jbHVkZSAiQ29udGVudEV4dGVuc2lv
bnNNYW5hZ2VyLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTg0LDcgKzE4
NCw3IEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGUKICAgICBpZiAo
IW1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQpCiAgICAgICAgIG1fY29udGVudEV4dGVuc2lvbkJh
Y2tlbmQgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQ+KCk7CiAgICAgCi0gICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC0+c2V0
UnVsZUxpc3QobmFtZSwgQ29udGVudEV4dGVuc2lvbnM6OkV4dGVuc2lvbnNNYW5hZ2VyOjpjcmVh
dGVSdWxlTGlzdChydWxlTGlzdCkpOworICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQtPmFk
ZENvbnRlbnRFeHRlbnNpb24obmFtZSwgQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlz
dChydWxlTGlzdCkpOwogfQogCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNl
ckNvbnRlbnRGaWx0ZXIoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMTkyLDcgKzE5Miw3IEBAIHZv
aWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ28KICAgICBpZiAoIW1fY29udGVu
dEV4dGVuc2lvbkJhY2tlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29udGVudEV4dGVu
c2lvbkJhY2tlbmQtPnJlbW92ZVJ1bGVMaXN0KG5hbWUpOworICAgIG1fY29udGVudEV4dGVuc2lv
bkJhY2tlbmQtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24obmFtZSk7CiB9CiAKIHZvaWQgVXNlckNv
bnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMoKQpAQCAtMjAwLDcg
KzIwMCw3IEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2UKICAgICBp
ZiAoIW1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
Y29udGVudEV4dGVuc2lvbkJhY2tlbmQtPnJlbW92ZUFsbFJ1bGVMaXN0cygpOworICAgIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQtPnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CiB9CiAK
IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBVc2VyQ29udGVudENvbnRyb2xsZXI6
OmFjdGlvbnNGb3JVUkwoY29uc3QgVVJMJiB1cmwpCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODA5ODkpCisrKyBUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxNS0wMy0wMyAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNd
IFNwbGl0IHBhcnNpbmcgYW5kIGNvbXBpbGluZyBvZiBjb250ZW50IGV4dGVuc2lvbnMgaW50byB0
aGVpciBvd24gZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MjI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBiYXNpYyB1bml0IHRlc3QgZm9yIHRoZSBjb250ZW50IGZpbHRlciBjb21waWxl
ci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250
ZW50RmlsdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6b3BlcmF0b3I8PCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb250ZW50RmlsdGVyVGVz
dDo6U2V0VXApOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAxNS0wMy0w
MyAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIENy
YXNoIGxvZ3MgY2FuJ3QgYmUgZm91bmQgb24gaW9zLXNpbXVsYXRvciBiZWNhdXNlIFdlYktpdFRl
c3RSdW5uZXIgcmV0dXJucyB0aGUgd3JvbmcgcHJvY2VzcyBuYW1lCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTgwOTg0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDYgKzYxLDcgQEAKIAkJN0M1NEE0QzExQUExMUNFNDAwMzgwRjc4IC8qIFdLQnVuZGxlRmlsZUhh
bmRsZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0M1NEE0QkYxQUExMUNFNDAwMzgwRjc4IC8qIFdLQnVuZGxlRmlsZUhhbmRsZV9CdW5k
bGUuY3BwICovOyB9OwogCQk3Qzg5RDJBQzFBNjlCODBEMDAzQTVGREUgLyogV0tQYWdlQ29uZmln
dXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qzg5RDJBQTFBNjlCODBEMDAzQTVGREUgLyogV0tQYWdlQ29uZmlndXJhdGlvbi5jcHAgKi87
IH07CiAJCTdDOUVEOThCMTdBMTlGNEIwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3RyaWtl
dGhyb3VnaC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDOUVEOThBMTdBMTlEMDYwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3Ry
aWtldGhyb3VnaC5odG1sICovOyB9OworCQk3Q0IxODRDNjFBQTNGMjEwMDA2NkVERkQgLyogQ29u
dGVudEZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0IxODRDNDFBQTNGMjEwMDA2NkVERkQgLyogQ29udGVudEZpbHRlci5jcHAgKi87IH07
CiAJCTdDQ0U3RUE0MUE0MTE5RjMwMDQ0N0M0QyAvKiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzA4NTg3RkYx
M0ZFQzNBNjAwMUVGNEU1IC8qIEluc3RhbmNlTWV0aG9kU3dpenpsZXIubW0gKi87IH07CiAJCTdD
Q0U3RUE1MUE0MTFBMDgwMDQ0N0M0QyAvKiBKYXZhU2NyaXB0VGVzdE1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwODEyMjQwMTNGQzE3MjQwMERD
MzlBRSAvKiBKYXZhU2NyaXB0VGVzdE1hYy5tbSAqLzsgfTsKIAkJN0NDRTdFQTYxQTQxMUEwRjAw
NDQ3QzRDIC8qIFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxMzE4ODQxMTcxMTRCNjAwQjY5NzI3IC8qIFBsYXRm
b3JtVXRpbGl0aWVzTWFjLm1tICovOyB9OwpAQCAtNTIzLDYgKzUyNCw3IEBACiAJCTdDODlEMkFB
MUE2OUI4MEQwMDNBNUZERSAvKiBXS1BhZ2VDb25maWd1cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLUGFnZUNvbmZpZ3VyYXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhEREFBOTE3MzVERTFEMDBFQTVBQzAgLyogQ2xvc2VU
aGVuVGVybWluYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsb3NlVGhlblRlcm1pbmF0ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOUVEOThBMTdBMTlEMDYwMEU0REMz
MyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3RyaWtldGhyb3VnaC5odG1sICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gYXR0cmli
dXRlZFN0cmluZ1N0cmlrZXRocm91Z2guaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0NCMTg0QzQxQUEzRjIxMDAwNjZFREZEIC8qIENvbnRlbnRGaWx0ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEZpbHRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkJBMDc2MTlCQjhBOTEwMEJCRjAyNSAvKiBPU09iamVj
dFB0ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU09iamVjdFB0
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQzNFMUZBMTk3RTIzNDEwMEJF
NjI1MiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBVc2VyQ29udGVudENvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDQ0U3RThDMUE0MTE0NEUwMDQ0N0M0QyAvKiBsaWJUZXN0V2ViS2l0
QVBJLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFy
Y2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYlRlc3RXZWJLaXRBUEkuYTsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTgyNiw2ICs4MjgsNyBAQAog
CQkJCTE0NDY0MDEyMTY3QTgzMDUwMDBCRDIxOCAvKiBMYXlvdXRVbml0LmNwcCAqLywKIAkJCQlD
REMyQzcxNDE3OTcwODlEMDBFNjI3RkIgLyogVGltZVJhbmdlcy5jcHAgKi8sCiAJCQkJNDQwQTFE
MzgxNEEwMTAzQTAwOEE2NkYyIC8qIFVSTC5jcHAgKi8sCisJCQkJN0NCMTg0QzQxQUEzRjIxMDAw
NjZFREZEIC8qIENvbnRlbnRGaWx0ZXIuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBXZWJDb3Jl
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0OTIsNiArMTQ5NSw3IEBACiAJCQkJ
N0NDRTdFQ0UxQTQxMUE3RTAwNDQ3QzRDIC8qIFN0b3BMb2FkaW5nRnJvbURpZEZpbmlzaExvYWRp
bmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VDRjFBNDExQTdFMDA0NDdDNEMgLyogU3Rv
cExvYWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdGNDQxQTQxMUI4RTAwNDQ3QzRDIC8qIFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJN0NCMTg0QzYxQUEzRjIxMDAwNjZFREZEIC8qIENvbnRlbnRGaWx0ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdFRDAxQTQxMUE3RTAwNDQ3QzRDIC8qIFN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGNDUx
QTQxMUI4RTAwNDQ3QzRDIC8qIFN0cmluZ0hhc2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
Q0NFN0Y0NjFBNDExQjhFMDA0NDdDNEMgLyogU3RyaW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RmlsdGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVu
dEZpbHRlci5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQ29udGVudEZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25z
IHsKK2lubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29u
c3QgQWN0aW9uVHlwZSYgYWN0aW9uKQoreworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2Fz
ZSBBY3Rpb25UeXBlOjpCbG9ja0xvYWQ6CisgICAgICAgIHJldHVybiBvcyA8PCAiQ29udGVudEZp
bHRlckFjdGlvbjo6QmxvY2tMb2FkIjsKKyAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2ll
czoKKyAgICAgICAgcmV0dXJuIG9zIDw8ICJDb250ZW50RmlsdGVyQWN0aW9uOjpCbG9ja0Nvb2tp
ZXMiOworICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmU6CisgICAgICAgIHJldHVy
biBvcyA8PCAiQ29udGVudEZpbHRlckFjdGlvbjo6Q1NTRGlzcGxheU5vbmUiOworICAgIGNhc2Ug
QWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczoKKyAgICAgICAgcmV0dXJuIG9zIDw8ICJD
b250ZW50RmlsdGVyQWN0aW9uOjpJZ25vcmVQcmV2aW91c1J1bGVzIjsKKyAgICBjYXNlIEFjdGlv
blR5cGU6OkludmFsaWRBY3Rpb246CisgICAgICAgIHJldHVybiBvcyA8PCAiQ29udGVudEZpbHRl
ckFjdGlvbjo6SW52YWxpZEFjdGlvbiI7CisgICAgfQorfQorfQorfQorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBDb250ZW50
RmlsdGVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgp
OworICAgICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICAgICAgUnVuTG9vcDo6
aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CisgICAgfQorfTsKKworY29uc3QgY2hhciogYmFzaWNG
aWx0ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIi4qd2Via2l0Lm9yZ1wifX1dIjsKKworVEVTVF9GKENvbnRlbnRGaWx0
ZXJUZXN0LCBCYXNpYykKK3sKKyAgICBSZWZQdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbj4gZXh0ZW5zaW9uID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVS
dWxlTGlzdChiYXNpY0ZpbHRlcik7CisKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7CisgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9u
KCJ0ZXN0RmlsdGVyIiwgZXh0ZW5zaW9uKTsKKyAgICAKKyAgICBhdXRvIGFjdGlvbnMgPSBiYWNr
ZW5kLmFjdGlvbnNGb3JVUkwoVVJMKFBhcnNlZFVSTFN0cmluZywgImh0dHA6Ly93ZWJraXQub3Jn
LyIpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIGFjdGlvbnMuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEo
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCwgYWN0aW9uc1swXS50eXBl
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="272750"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>