<?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>220236</bug_id>
          
          <creation_ts>2021-01-04 03:20:39 -0800</creation_ts>
          <short_desc>WebKit IPC generator tests have duplicate receiver names, limiting the implementation</short_desc>
          <delta_ts>2021-01-05 16:46:16 -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>WebKit2</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>217211</blocked>
    
    <blocked>220318</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1717090</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-01-04 03:20:39 -0800</bug_when>
    <thetext>WebKit IPC generator tests have duplicate receiver names, limiting the implementation

This is a problem because in real world usage, all the receiver names need to be unique.

The in the test content, there is 3 different receivers receivers. They also share names of the messages.
These distinct messages get assigned the same message name, even though the messages themselves are distinct and have different receivers and maybe arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717101</commentid>
    <comment_count>1</comment_count>
      <attachid>416935</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-01-04 05:50:07 -0800</bug_when>
    <thetext>Created attachment 416935
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717427</commentid>
    <comment_count>2</comment_count>
      <attachid>416935</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-01-05 12:19:58 -0800</bug_when>
    <thetext>Comment on attachment 416935
Patch

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

r=me

&gt; Source/WebKit/Scripts/MessageNames.h:-31
&gt; -enum class ReceiverName : uint8_t {

Having WebPage 3 times in this enum indeed seemed bogus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717540</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-05 16:45:18 -0800</bug_when>
    <thetext>Committed r271183: &lt;https://trac.webkit.org/changeset/271183&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 416935.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717542</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-05 16:46:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/72834703&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416935</attachid>
            <date>2021-01-04 05:50:07 -0800</date>
            <delta_ts>2021-01-05 16:45:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220236-20210104155005.patch</filename>
            <type>text/plain</type>
            <size>263828</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMxYTQwZjkxNDQ3N2Y2N2Q3
YTEzNjY3OTEwODc0Mzk0N2I2MTZjNTMuLmY4Y2ZmMWM1ZjJhMDIyZWNjNzg2MTg0YzRhZjMxZDg0
ZGE4MzhkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUzIEBACisyMDIxLTAxLTA0ICBLaW1tbyBL
aW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0IElQQyBnZW5l
cmF0b3IgdGVzdHMgaGF2ZSBkdXBsaWNhdGUgcmVjZWl2ZXIgbmFtZXMsIGxpbWl0aW5nIHRoZSBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjIwMjM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSVBDIHRlc3QgbWVzc2FnZSByZWNlaXZlcnMgZGVmaW5lZCBtdWx0aXBsZSByZWNlaXZl
cnMgd2l0aCBzYW1lIG5hbWUuCisgICAgICAgIFJlbmFtZSB0aGUgdGVzdCBtZXNzYWdlIHJlY2Vp
dmVycyBiYXNlZCBvbiB3aGF0IGZlYXR1cmUgdGhleSB0ZXN0LiBObworICAgICAgICBjaGFuZ2Ug
aW4gdGhlIG5vbi10ZXN0IGNvZGUuCisKKyAgICAgICAgVGhlIElQQyB3b3JrcyB3aXRoIG1lc3Nh
Z2UgaWRlbnRpZmllciBkZWZpbmVkIGJ5IHRoZSBNZXNzYWdlTmFtZSB0eXBlLgorICAgICAgICBI
YXZpbmcgbXVsdGlwbGUgY2xhc2hpbmcgcmVjZWl2ZXIgbmFtZXMgaXMgcHJvYmxlbWF0aWMgYmVj
YXVzZSBhIE1lc3NhZ2VOYW1lCisgICAgICAgIGlzIGRlZmluZWQgYnkgcGFpciA8cmVjZWl2ZXIg
bmFtZSwgbWVzc2FnZSBuYW1lPi4gU2luY2UgZGlmZmVyZW50IHJlY2VpdmVycworICAgICAgICBt
aWdodCBoYXZlIGRpZmZlcmVudCBraW5kcyBvZiBtZXNzYWdlcyB3aXRoIHNhbWUgbWVzc2FnZSBu
YW1lLCB0aGVzZSBtaWdodCBlbmQKKyAgICAgICAgdXAgbWFwcGluZyB0byB0d28gY29uZmxpY3Rp
bmcgbWVzc2FnZSBraW5kcy4KKworICAgICAgICBUaGUgcmVuYW1lIG9mIHRlc3QgY2xhc3NlcyBt
YWtlcyB0aGUgdGVzdHMgY29uZm9ybSB0byB0aGUgYWxyZWFkeSB1c2VkIGNvbnRyYWN0CisgICAg
ICAgIHRoYXQgdGhlIE1lc3NhZ2VOYW1lIGlzIGdsb2JhbGx5IHVuaXF1ZSB0byBlYWNoIGluZGl2
aWR1YWwgY29uY2VwdHVhbCBtZXNzYWdlCisgICAgICAgIGJlY2F1c2UgdGhlIHJlY2VpdmVyIG5h
bWVzIGFyZSB1bmlxdWUuCisKKyAgICAgICAgVGhpcyBlbmFibGVzIGZ1cnRoZXIgaW1wbGVtZW50
YXRpb25zIHRoYXQgbWFrZSBkZWNpc2lvbnMgYmFzZWQgb24gdGhlCisgICAgICAgIG1lc3NhZ2Ug
bmFtZS4gRXhhbXBsZSBpcyB0byBkZWNpZGUgd2hldGhlciBhIG1lc3NhZ2UgaXMgc3luY2hyb25v
dXMgb3IKKyAgICAgICAgbm90LiBUaGlzIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBnZW5lcmFsbHkg
aWYgdGhlcmUgaXMgbXVsdGlwbGUgZGlmZmVyZW50IGtpbmRzIG9mCisgICAgICAgIG1lc3NhZ2Vz
IHdpdGggc2FtZSBuYW1lLgorCisgICAgICAgIFJlbmFtZSB0aGUgdGVzdCBtZXNzYWdlIHJlY2Vp
dmVyIGZpbGVzIGJhc2VkIG9uIHRoZSByZWNlaXZlciBuYW1lLiBUaGlzIGlzCisgICAgICAgIG1v
cmUgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBjb252ZW50aW9uIHVzZWQgaW4gdGhlIGFj
dHVhbCBjb2RlLgorCisgICAgICAgIE1vdmUgdGhlIHNjcmlwdCB0ZXN0IHJlc3VsdHMgZnJvbSB0
aGUgU2NyaXB0cy8gZGlyZWN0b3J5IHRvIGEgdGVzdHMvIHN1YmRpcmVjdG9yeQorICAgICAgICBv
ZiB0aGUgdG9vbC4gVGhpcyBpcyB0byBub3QgZmlsbCB0aGUgU2NyaXB0cy8gZGlyZWN0b3J5IHdp
dGggU2NyaXB0cy93ZWJraXQvIHJlbGF0ZWQKKyAgICAgICAgdGVzdCByZXN1bHQgZGF0YS4KKwor
ICAgICAgICBBZGRzIHByZXZpb3VzbHkgbWlzc2luZyB0ZXN0IHJlc3VsdCBmaWxlIE1lc3NhZ2VB
cmd1bWVudERlc2NyaXB0aW9ucy5jcHAsIHdoaWNoIHdhcyBub3QgYWRkZWQKKyAgICAgICAgd2hl
biB0aGUgZmVhdHVyZSB3YXMgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0
aW5nIHRlc3RzIGFuZCBuZXcgbW9kZWxfdW5pdHRlc3QucHkuCisKKyAgICAgICAgKiBTY3JpcHRz
L01ha2VmaWxlOiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvTWVzc2FnZU5hbWVzLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL01lc3NhZ2VOYW1lcy5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIFNjcmlwdHMvdGVzdC1sZWdhY3lNZXNzYWdlUmVjZWl2ZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvdGVzdE1lc3NhZ2VSZWNlaXZlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXNfdW5pdHRlc3QucHk6CisgICAgICAgIChQYXJzaW5nVGVzdC50
ZXN0X3JlY2VpdmVyKToKKyAgICAgICAgKEdlbmVyYXRlZEZpbGVDb250ZW50c1Rlc3QuYXNzZXJ0
R2VuZXJhdGVkRmlsZUNvbnRlbnRzRXF1YWwpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21v
ZGVsLnB5OgorICAgICAgICAoUGFyYW1ldGVyLmhhc19hdHRyaWJ1dGUpOgorICAgICAgICAoY2hl
Y2tfZ2xvYmFsX21vZGVsKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tb2RlbF91bml0dGVz
dC5weTogQWRkZWQuCisgICAgICAgIChNb2RlbENoZWNrVGVzdCk6CisgICAgICAgIChNb2RlbENo
ZWNrVGVzdC50ZXN0X2R1cGxpY2F0ZV9yZWNlaXZlcnMpOgorICAgICAgICAodGVzdF9taXNtYXRj
aF9tZXNzYWdlX2F0dHJpYnV0ZV9zeW5jKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0
cy9NYWtlZmlsZTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvTWVzc2Fn
ZUFyZ3VtZW50RGVzY3JpcHRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChJUEM6OmpzVmFsdWVG
b3JBcmd1bWVudHMpOgorICAgICAgICAoSVBDOjpqc1ZhbHVlRm9yUmVwbHlBcmd1bWVudHMpOgor
ICAgICAgICAoSVBDOjptZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMpOgorICAgICAgICAoSVBD
OjptZXNzYWdlUmVwbHlBcmd1bWVudERlc2NyaXB0aW9ucyk6CisgICAgICAgIChJUEM6Om1lc3Nh
Z2VJc1N5bmMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L3Rlc3RzL01lc3NhZ2VOYW1lcy5j
cHA6IEFkZGVkLgorICAgICAgICAoSVBDOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChJUEM6OnJl
Y2VpdmVyTmFtZSk6CisgICAgICAgIChJUEM6OmlzVmFsaWRNZXNzYWdlTmFtZSk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQvdGVzdHMvTWVzc2FnZU5hbWVzLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjppc1ZhbGlkRW51bSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdp
dGhMZWdhY3lSZWNlaXZlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvdGVzdC1sZWdhY3kubWVzc2FnZXMuaW4uCisgICAgICAgICogU2NyaXB0
cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhMZWdhY3lSZWNlaXZlck1lc3NhZ2VSZWNlaXZlci5jcHA6
IEFkZGVkLgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkdldFBs
dWdpblByb2Nlc3NDb25uZWN0aW9uOjpzZW5kKToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0
aExlZ2FjeVJlY2VpdmVyOjpUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOjpzZW5kKToKKyAgICAgICAg
KFdlYktpdDo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6ZGlkUmVjZWl2ZVRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXJNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6VGVzdFdpdGhMZWdhY3lSZWNlaXZl
cjo6ZGlkUmVjZWl2ZVN5bmNUZXN0V2l0aExlZ2FjeVJlY2VpdmVyTWVzc2FnZSk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhMZWdhY3lSZWNlaXZlck1lc3NhZ2VzLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvdGVzdC1sZWdhY3lNZXNzYWdlcy5o
LgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6Okxv
YWRVUkw6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6
OkxvYWRTb21ldGhpbmc6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXI6OlRvdWNoRXZlbnQ6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRo
TGVnYWN5UmVjZWl2ZXI6OkFkZEV2ZW50OjpuYW1lKToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0
V2l0aExlZ2FjeVJlY2VpdmVyOjpMb2FkU29tZXRoaW5nRWxzZTo6bmFtZSk6CisgICAgICAgIChN
ZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9u
OjpuYW1lKToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpDbG9z
ZTo6bmFtZSk6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6UHJl
ZmVyZW5jZXNEaWRDaGFuZ2U6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVn
YWN5UmVjZWl2ZXI6OlNlbmREb3VibGVBbmRGbG9hdDo6bmFtZSk6CisgICAgICAgIChNZXNzYWdl
czo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6U2VuZEludHM6Om5hbWUpOgorICAgICAgICAoTWVz
c2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkNyZWF0ZVBsdWdpbjo6bmFtZSk6CisgICAg
ICAgIChNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6UnVuSmF2YVNjcmlwdEFsZXJ0
OjpuYW1lKToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpHZXRQ
bHVnaW5zOjpuYW1lKToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVy
OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6bmFtZSk6CisgICAgICAgIChNZXNzYWdlczo6
VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6VGVzdE11bHRpcGxlQXR0cmlidXRlczo6bmFtZSk6Cisg
ICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6VGVzdFBhcmFtZXRlckF0
dHJpYnV0ZXM6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2
ZXI6OlRlbXBsYXRlVGVzdDo6bmFtZSk6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhMZWdh
Y3lSZWNlaXZlcjo6U2V0VmlkZW9MYXllcklEOjpuYW1lKToKKyAgICAgICAgKE1lc3NhZ2VzOjpU
ZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbjo6bmFt
ZSk6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6SW50ZXJwcmV0
S2V5RXZlbnQ6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2
ZXI6OkRlcHJlY2F0ZWRPcGVyYXRpb246Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RX
aXRoTGVnYWN5UmVjZWl2ZXI6OkV4cGVyaW1lbnRhbE9wZXJhdGlvbjo6bmFtZSk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhMZWdhY3lSZWNlaXZlck1lc3NhZ2VzUmVw
bGllcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9TY3JpcHRzL3Rlc3RNZXNzYWdlc1Jl
cGxpZXMuaC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aFN1cGVyY2xh
c3MubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0
L3Rlc3Qtc3VwZXJjbGFzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90
ZXN0cy9UZXN0V2l0aFN1cGVyY2xhc3NNZXNzYWdlUmVjZWl2ZXIuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9TY3JpcHRzL3Rlc3Qtc3VwZXJjbGFzc01lc3NhZ2VSZWNlaXZlci5jcHAu
CisgICAgICAgIChXZWJLaXQ6OlRlc3RXaXRoU3VwZXJjbGFzczo6ZGlkUmVjZWl2ZU1lc3NhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpUZXN0V2l0aFN1cGVyY2xhc3M6OmRpZFJlY2VpdmVTeW5jTWVz
c2FnZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTdXBlcmNsYXNz
TWVzc2FnZXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy90ZXN0LXN1cGVy
Y2xhc3NNZXNzYWdlcy5oLgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoU3VwZXJjbGFzczo6
bWVzc2FnZVJlY2VpdmVyTmFtZSk6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhTdXBlcmNs
YXNzOjpMb2FkVVJMOjpuYW1lKToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xh
c3M6OlRlc3RBc3luY01lc3NhZ2U6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRo
U3VwZXJjbGFzczo6VGVzdEFzeW5jTWVzc2FnZTo6YXN5bmNNZXNzYWdlUmVwbHlOYW1lKToKKyAg
ICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3luY01lc3NhZ2VXaXRo
Tm9Bcmd1bWVudHM6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoU3VwZXJjbGFz
czo6VGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50czo6YXN5bmNNZXNzYWdlUmVwbHlOYW1l
KToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3luY01lc3Nh
Z2VXaXRoTXVsdGlwbGVBcmd1bWVudHM6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RX
aXRoU3VwZXJjbGFzczo6VGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50czo6YXN5
bmNNZXNzYWdlUmVwbHlOYW1lKToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xh
c3M6OlRlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVjdGlvbjo6bmFtZSk6CisgICAgICAgIChNZXNz
YWdlczo6VGVzdFdpdGhTdXBlcmNsYXNzOjpUZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb246
OmFzeW5jTWVzc2FnZVJlcGx5TmFtZSk6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhTdXBl
cmNsYXNzOjpUZXN0U3luY01lc3NhZ2U6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RX
aXRoU3VwZXJjbGFzczo6VGVzdFN5bmNocm9ub3VzTWVzc2FnZTo6bmFtZSk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTdXBlcmNsYXNzTWVzc2FnZXNSZXBsaWVzLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvdGVzdC1zdXBlcmNsYXNzTWVzc2Fn
ZXNSZXBsaWVzLmguCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhvdXRB
dHRyaWJ1dGVzLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC90ZXN0Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L3Rlc3Rz
L1Rlc3RXaXRob3V0QXR0cmlidXRlc01lc3NhZ2VSZWNlaXZlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5l
Y3Rpb246OnNlbmQpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6
VGVzdE11bHRpcGxlQXR0cmlidXRlczo6c2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXaXRo
b3V0QXR0cmlidXRlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpUZXN0
V2l0aG91dEF0dHJpYnV0ZXM6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZSk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhvdXRBdHRyaWJ1dGVzTWVzc2FnZXMuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy90ZXN0TWVzc2FnZXMuaC4KKyAgICAgICAgKE1l
c3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6Om1lc3NhZ2VSZWNlaXZlck5hbWUpOgorICAg
ICAgICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6TG9hZFVSTDo6bmFtZSk6Cisg
ICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpMb2FkU29tZXRoaW5nOjpu
YW1lKToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlRvdWNoRXZl
bnQ6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6QWRk
RXZlbnQ6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6
TG9hZFNvbWV0aGluZ0Vsc2U6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0
QXR0cmlidXRlczo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uOjpuYW1lKToKKyAgICAgICAgKE1l
c3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OkNsb3NlOjpuYW1lKToKKyAgICAgICAgKE1l
c3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlByZWZlcmVuY2VzRGlkQ2hhbmdlOjpuYW1l
KToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlNlbmREb3VibGVB
bmRGbG9hdDo6bmFtZSk6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVz
OjpTZW5kSW50czo6bmFtZSk6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1
dGVzOjpDcmVhdGVQbHVnaW46Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0
QXR0cmlidXRlczo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpuYW1lKToKKyAgICAgICAgKE1lc3NhZ2Vz
OjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OkdldFBsdWdpbnM6Om5hbWUpOgorICAgICAgICAoTWVz
c2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246
Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6VGVzdE11
bHRpcGxlQXR0cmlidXRlczo6bmFtZSk6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhvdXRB
dHRyaWJ1dGVzOjpUZXN0UGFyYW1ldGVyQXR0cmlidXRlczo6bmFtZSk6CisgICAgICAgIChNZXNz
YWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpUZW1wbGF0ZVRlc3Q6Om5hbWUpOgorICAgICAg
ICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6U2V0VmlkZW9MYXllcklEOjpuYW1l
KToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OkRpZENyZWF0ZVdl
YlByb2Nlc3NDb25uZWN0aW9uOjpuYW1lKToKKyAgICAgICAgKE1lc3NhZ2VzOjpUZXN0V2l0aG91
dEF0dHJpYnV0ZXM6OkludGVycHJldEtleUV2ZW50OjpuYW1lKToKKyAgICAgICAgKE1lc3NhZ2Vz
OjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OkRlcHJlY2F0ZWRPcGVyYXRpb246Om5hbWUpOgorICAg
ICAgICAoTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6RXhwZXJpbWVudGFsT3BlcmF0
aW9uOjpuYW1lKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0
dHJpYnV0ZXNNZXNzYWdlc1JlcGxpZXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2Ny
aXB0cy90ZXN0LWxlZ2FjeU1lc3NhZ2VzUmVwbGllcy5oLgorCiAyMDIxLTAxLTAyICBSb2IgQnVp
cyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHNvbWUgRnJhbWVMb2FkZXI6
OmNoYW5nZUxvY2F0aW9uIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy9NYWtlZmlsZSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9NYWtlZmlsZQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOGUxZWFiY2M1OWI0MzI5M2Y4OWJmNjA3YjNhNjM3YThmNzU1
OTJjMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAK
LWFsbDoKLQlweXRob24gZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weSB3ZWJraXQgdGVzdC1z
dXBlcmNsYXNzIHRlc3QtbGVnYWN5IHRlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy9NZXNzYWdlTmFtZXMuY3BwIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL01lc3NhZ2VOYW1l
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NmZhMmFlMjM1MzFmYjczODlh
Y2Y0NTE4NmY0OWFkMDEzYTYzZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL01lc3NhZ2VOYW1lcy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAq
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJNZXNzYWdlTmFtZXMuaCIKLQotbmFtZXNwYWNlIElQQyB7Ci0K
LWNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKE1lc3NhZ2VOYW1lIG5hbWUpCi17Ci0gICAgc3dpdGNo
IChuYW1lKSB7Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9BZGRFdmVudDoKLSAgICAg
ICAgcmV0dXJuICJXZWJQYWdlX0FkZEV2ZW50IjsKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQ
YWdlX0Nsb3NlOgotICAgICAgICByZXR1cm4gIldlYlBhZ2VfQ2xvc2UiOwotICAgIGNhc2UgTWVz
c2FnZU5hbWU6OldlYlBhZ2VfQ3JlYXRlUGx1Z2luOgotICAgICAgICByZXR1cm4gIldlYlBhZ2Vf
Q3JlYXRlUGx1Z2luIjsKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX0RlcHJlY2F0ZWRP
cGVyYXRpb246Ci0gICAgICAgIHJldHVybiAiV2ViUGFnZV9EZXByZWNhdGVkT3BlcmF0aW9uIjsK
LSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX0RpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0
aW9uOgotICAgICAgICByZXR1cm4gIldlYlBhZ2VfRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rp
b24iOwotICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfRGlkUmVjZWl2ZVBvbGljeURlY2lz
aW9uOgotICAgICAgICByZXR1cm4gIldlYlBhZ2VfRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uIjsK
LSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX0V4cGVyaW1lbnRhbE9wZXJhdGlvbjoKLSAg
ICAgICAgcmV0dXJuICJXZWJQYWdlX0V4cGVyaW1lbnRhbE9wZXJhdGlvbiI7Ci0gICAgY2FzZSBN
ZXNzYWdlTmFtZTo6V2ViUGFnZV9HZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjoKLSAgICAgICAg
cmV0dXJuICJXZWJQYWdlX0dldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uIjsKLSAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpXZWJQYWdlX0dldFBsdWdpbnM6Ci0gICAgICAgIHJldHVybiAiV2ViUGFnZV9H
ZXRQbHVnaW5zIjsKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX0ludGVycHJldEtleUV2
ZW50OgotICAgICAgICByZXR1cm4gIldlYlBhZ2VfSW50ZXJwcmV0S2V5RXZlbnQiOwotICAgIGNh
c2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfTG9hZFNvbWV0aGluZzoKLSAgICAgICAgcmV0dXJuICJX
ZWJQYWdlX0xvYWRTb21ldGhpbmciOwotICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfTG9h
ZFNvbWV0aGluZ0Vsc2U6Ci0gICAgICAgIHJldHVybiAiV2ViUGFnZV9Mb2FkU29tZXRoaW5nRWxz
ZSI7Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9Mb2FkVVJMOgotICAgICAgICByZXR1
cm4gIldlYlBhZ2VfTG9hZFVSTCI7Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9QcmVm
ZXJlbmNlc0RpZENoYW5nZToKLSAgICAgICAgcmV0dXJuICJXZWJQYWdlX1ByZWZlcmVuY2VzRGlk
Q2hhbmdlIjsKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX1J1bkphdmFTY3JpcHRBbGVy
dDoKLSAgICAgICAgcmV0dXJuICJXZWJQYWdlX1J1bkphdmFTY3JpcHRBbGVydCI7Ci0gICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9TZW5kRG91YmxlQW5kRmxvYXQ6Ci0gICAgICAgIHJldHVy
biAiV2ViUGFnZV9TZW5kRG91YmxlQW5kRmxvYXQiOwotICAgIGNhc2UgTWVzc2FnZU5hbWU6Oldl
YlBhZ2VfU2VuZEludHM6Ci0gICAgICAgIHJldHVybiAiV2ViUGFnZV9TZW5kSW50cyI7Ci0gICAg
Y2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9TZXRWaWRlb0xheWVySUQ6Ci0gICAgICAgIHJldHVy
biAiV2ViUGFnZV9TZXRWaWRlb0xheWVySUQiOwotICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBh
Z2VfVGVtcGxhdGVUZXN0OgotICAgICAgICByZXR1cm4gIldlYlBhZ2VfVGVtcGxhdGVUZXN0IjsK
LSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2U6Ci0gICAgICAg
IHJldHVybiAiV2ViUGFnZV9UZXN0QXN5bmNNZXNzYWdlIjsKLSAgICBjYXNlIE1lc3NhZ2VOYW1l
OjpXZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VSZXBseToKLSAgICAgICAgcmV0dXJuICJXZWJQYWdl
X1Rlc3RBc3luY01lc3NhZ2VSZXBseSI7Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9U
ZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb246Ci0gICAgICAgIHJldHVybiAiV2ViUGFnZV9U
ZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb24iOwotICAgIGNhc2UgTWVzc2FnZU5hbWU6Oldl
YlBhZ2VfVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uUmVwbHk6Ci0gICAgICAgIHJldHVy
biAiV2ViUGFnZV9UZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb25SZXBseSI7Ci0gICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9UZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1l
bnRzOgotICAgICAgICByZXR1cm4gIldlYlBhZ2VfVGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBs
ZUFyZ3VtZW50cyI7Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9UZXN0QXN5bmNNZXNz
YWdlV2l0aE11bHRpcGxlQXJndW1lbnRzUmVwbHk6Ci0gICAgICAgIHJldHVybiAiV2ViUGFnZV9U
ZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzUmVwbHkiOwotICAgIGNhc2UgTWVz
c2FnZU5hbWU6OldlYlBhZ2VfVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50czoKLSAgICAg
ICAgcmV0dXJuICJXZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VXaXRoTm9Bcmd1bWVudHMiOwotICAg
IGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50
c1JlcGx5OgotICAgICAgICByZXR1cm4gIldlYlBhZ2VfVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0Fy
Z3VtZW50c1JlcGx5IjsKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RNdWx0aXBs
ZUF0dHJpYnV0ZXM6Ci0gICAgICAgIHJldHVybiAiV2ViUGFnZV9UZXN0TXVsdGlwbGVBdHRyaWJ1
dGVzIjsKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RQYXJhbWV0ZXJBdHRyaWJ1
dGVzOgotICAgICAgICByZXR1cm4gIldlYlBhZ2VfVGVzdFBhcmFtZXRlckF0dHJpYnV0ZXMiOwot
ICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdFN5bmNNZXNzYWdlOgotICAgICAgICBy
ZXR1cm4gIldlYlBhZ2VfVGVzdFN5bmNNZXNzYWdlIjsKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpX
ZWJQYWdlX1Rlc3RTeW5jaHJvbm91c01lc3NhZ2U6Ci0gICAgICAgIHJldHVybiAiV2ViUGFnZV9U
ZXN0U3luY2hyb25vdXNNZXNzYWdlIjsKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rv
dWNoRXZlbnQ6Ci0gICAgICAgIHJldHVybiAiV2ViUGFnZV9Ub3VjaEV2ZW50IjsKLSAgICBjYXNl
IE1lc3NhZ2VOYW1lOjpXcmFwcGVkQXN5bmNNZXNzYWdlRm9yVGVzdGluZzoKLSAgICAgICAgcmV0
dXJuICJJUEM6OldyYXBwZWRBc3luY01lc3NhZ2VGb3JUZXN0aW5nIjsKLSAgICBjYXNlIE1lc3Nh
Z2VOYW1lOjpTeW5jTWVzc2FnZVJlcGx5OgotICAgICAgICByZXR1cm4gIklQQzo6U3luY01lc3Nh
Z2VSZXBseSI7Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6SW5pdGlhbGl6ZUNvbm5lY3Rpb246Ci0g
ICAgICAgIHJldHVybiAiSVBDOjpJbml0aWFsaXplQ29ubmVjdGlvbiI7Ci0gICAgY2FzZSBNZXNz
YWdlTmFtZTo6TGVnYWN5U2Vzc2lvblN0YXRlOgotICAgICAgICByZXR1cm4gIklQQzo6TGVnYWN5
U2Vzc2lvblN0YXRlIjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuICI8aW52YWxpZCBtZXNzYWdlIG5hbWU+IjsKLX0KLQotUmVjZWl2ZXJOYW1lIHJlY2VpdmVy
TmFtZShNZXNzYWdlTmFtZSBtZXNzYWdlTmFtZSkKLXsKLSAgICBzd2l0Y2ggKG1lc3NhZ2VOYW1l
KSB7Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9BZGRFdmVudDoKLSAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpXZWJQYWdlX0Nsb3NlOgotICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2Vf
Q3JlYXRlUGx1Z2luOgotICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfRGVwcmVjYXRlZE9w
ZXJhdGlvbjoKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX0RpZENyZWF0ZVdlYlByb2Nl
c3NDb25uZWN0aW9uOgotICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfRGlkUmVjZWl2ZVBv
bGljeURlY2lzaW9uOgotICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfRXhwZXJpbWVudGFs
T3BlcmF0aW9uOgotICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfR2V0UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb246Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9HZXRQbHVnaW5zOgot
ICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfSW50ZXJwcmV0S2V5RXZlbnQ6Ci0gICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9Mb2FkU29tZXRoaW5nOgotICAgIGNhc2UgTWVzc2FnZU5h
bWU6OldlYlBhZ2VfTG9hZFNvbWV0aGluZ0Vsc2U6Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2Vi
UGFnZV9Mb2FkVVJMOgotICAgIGNhc2UgTWVzc2FnZU5hbWU6OldlYlBhZ2VfUHJlZmVyZW5jZXNE
aWRDaGFuZ2U6Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9SdW5KYXZhU2NyaXB0QWxl
cnQ6Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9TZW5kRG91YmxlQW5kRmxvYXQ6Ci0g
ICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9TZW5kSW50czoKLSAgICBjYXNlIE1lc3NhZ2VO
YW1lOjpXZWJQYWdlX1NldFZpZGVvTGF5ZXJJRDoKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQ
YWdlX1RlbXBsYXRlVGVzdDoKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RNdWx0
aXBsZUF0dHJpYnV0ZXM6Ci0gICAgY2FzZSBNZXNzYWdlTmFtZTo6V2ViUGFnZV9UZXN0UGFyYW1l
dGVyQXR0cmlidXRlczoKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX1RvdWNoRXZlbnQ6
Ci0gICAgICAgIHJldHVybiBSZWNlaXZlck5hbWU6OldlYlBhZ2U7Ci0gICAgY2FzZSBNZXNzYWdl
TmFtZTo6V2ViUGFnZV9UZXN0QXN5bmNNZXNzYWdlUmVwbHk6Ci0gICAgY2FzZSBNZXNzYWdlTmFt
ZTo6V2ViUGFnZV9UZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb25SZXBseToKLSAgICBjYXNl
IE1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVu
dHNSZXBseToKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VX
aXRoTm9Bcmd1bWVudHNSZXBseToKLSAgICAgICAgcmV0dXJuIFJlY2VpdmVyTmFtZTo6QXN5bmNS
ZXBseTsKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpXcmFwcGVkQXN5bmNNZXNzYWdlRm9yVGVzdGlu
ZzoKLSAgICBjYXNlIE1lc3NhZ2VOYW1lOjpTeW5jTWVzc2FnZVJlcGx5OgotICAgIGNhc2UgTWVz
c2FnZU5hbWU6OkluaXRpYWxpemVDb25uZWN0aW9uOgotICAgIGNhc2UgTWVzc2FnZU5hbWU6Okxl
Z2FjeVNlc3Npb25TdGF0ZToKLSAgICAgICAgcmV0dXJuIFJlY2VpdmVyTmFtZTo6SVBDOwotICAg
IH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gUmVjZWl2ZXJOYW1lOjpJ
bnZhbGlkOwotfQotCi1ib29sIGlzVmFsaWRNZXNzYWdlTmFtZShNZXNzYWdlTmFtZSBtZXNzYWdl
TmFtZSkKLXsKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFn
ZV9Mb2FkVVJMKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJF
KQotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RB
c3luY01lc3NhZ2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9
PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VSZXBseSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotICAgIGlm
IChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RBc3luY01lc3Nh
Z2VXaXRoTm9Bcmd1bWVudHMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtZXNzYWdl
TmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VXaXRoTm9B
cmd1bWVudHNSZXBseSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
VEVTVF9GRUFUVVJFKQotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpX
ZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHMpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQ
YWdlX1Rlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHNSZXBseSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotICAgIGlmICht
ZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VX
aXRoQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG1lc3NhZ2VOYW1l
ID09IElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0
aW9uUmVwbHkpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgaWYgKG1lc3NhZ2VO
YW1lID09IElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdFN5bmNNZXNzYWdlKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6
V2ViUGFnZV9UZXN0U3luY2hyb25vdXNNZXNzYWdlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9Mb2FkVVJMKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmICht
ZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0xvYWRTb21ldGhpbmcpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYm
IChORVNURURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElP
TikpCi0gICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVG91
Y2hFdmVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiAoRU5BQkxFKFRPVUNI
X0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NB
R0VfQ09ORElUSU9OKSkKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6
V2ViUGFnZV9BZGRFdmVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1l
OjpXZWJQYWdlX0xvYWRTb21ldGhpbmdFbHNlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRp
ZgotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0RpZFJl
Y2VpdmVQb2xpY3lEZWNpc2lvbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG1lc3Nh
Z2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfQ2xvc2UpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdl
X1ByZWZlcmVuY2VzRGlkQ2hhbmdlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobWVz
c2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9TZW5kRG91YmxlQW5kRmxvYXQp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3Nh
Z2VOYW1lOjpXZWJQYWdlX1NlbmRJbnRzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
bWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9DcmVhdGVQbHVnaW4pCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VO
YW1lOjpXZWJQYWdlX1J1bkphdmFTY3JpcHRBbGVydCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfR2V0UGx1Z2lu
cykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVz
c2FnZU5hbWU6OldlYlBhZ2VfR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQ
YWdlX1Rlc3RNdWx0aXBsZUF0dHJpYnV0ZXMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RQYXJhbWV0ZXJB
dHRyaWJ1dGVzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0g
SVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9UZW1wbGF0ZVRlc3QpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Nl
dFZpZGVvTGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0RpZENyZWF0
ZVdlYlByb2Nlc3NDb25uZWN0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6
V2ViUGFnZV9JbnRlcnByZXRLZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYK
LSNpZiBFTkFCTEUoREVQUkVDQVRFRF9GRUFUVVJFKQotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJ
UEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0RlcHJlY2F0ZWRPcGVyYXRpb24pCi0gICAgICAgIHJl
dHVybiB0cnVlOwotI2VuZGlmCi0jaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQotICAg
IGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0V4cGVyaW1lbnRh
bE9wZXJhdGlvbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICBpZiAobWVzc2Fn
ZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9Mb2FkVVJMKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChtZXNzYWdlTmFtZSA9
PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0xvYWRTb21ldGhpbmcpCi0gICAgICAgIHJldHVy
biB0cnVlOwotI2VuZGlmCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVT
U0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpCi0gICAgaWYg
KG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVG91Y2hFdmVudCkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYg
KE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9O
KSkKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9BZGRF
dmVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0xv
YWRTb21ldGhpbmdFbHNlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIGlmICht
ZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0RpZFJlY2VpdmVQb2xpY3lE
ZWNpc2lvbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG1lc3NhZ2VOYW1lID09IElQ
Qzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfQ2xvc2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1ByZWZlcmVuY2Vz
RGlkQ2hhbmdlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0g
SVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9TZW5kRG91YmxlQW5kRmxvYXQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQ
YWdlX1NlbmRJbnRzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobWVzc2FnZU5hbWUg
PT0gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9DcmVhdGVQbHVnaW4pCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdl
X1J1bkphdmFTY3JpcHRBbGVydCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG1lc3Nh
Z2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfR2V0UGx1Z2lucykKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6Oldl
YlBhZ2VfR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RNdWx0
aXBsZUF0dHJpYnV0ZXMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFt
ZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdl
TmFtZTo6V2ViUGFnZV9UZW1wbGF0ZVRlc3QpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1NldFZpZGVvTGF5ZXJJ
RCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChtZXNz
YWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0RpZENyZWF0ZVdlYlByb2Nlc3ND
b25uZWN0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9JbnRl
cnByZXRLZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
REVQUkVDQVRFRF9GRUFUVVJFKQotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VO
YW1lOjpXZWJQYWdlX0RlcHJlY2F0ZWRPcGVyYXRpb24pCi0gICAgICAgIHJldHVybiB0cnVlOwot
I2VuZGlmCi0jaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQotICAgIGlmIChtZXNzYWdl
TmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0V4cGVyaW1lbnRhbE9wZXJhdGlvbikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBD
OjpNZXNzYWdlTmFtZTo6V3JhcHBlZEFzeW5jTWVzc2FnZUZvclRlc3RpbmcpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpTeW5j
TWVzc2FnZVJlcGx5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobWVzc2FnZU5hbWUg
PT0gSVBDOjpNZXNzYWdlTmFtZTo6SW5pdGlhbGl6ZUNvbm5lY3Rpb24pCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpMZWdhY3lT
ZXNzaW9uU3RhdGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L01lc3NhZ2VOYW1lcy5oIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL01lc3NhZ2VOYW1lcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTcxODE0YjllMzA3Zjg3YTcwMjMzMWUyZDYx
ZGJkMmEzMDU0MGY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9NZXNzYWdlTmFtZXMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlIDx3dGYvRW51bVRyYWl0cy5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLQotZW51bSBjbGFzcyBS
ZWNlaXZlck5hbWUgOiB1aW50OF90IHsKLSAgICBXZWJQYWdlID0gMQotICAgICwgV2ViUGFnZSA9
IDIKLSAgICAsIFdlYlBhZ2UgPSAzCi0gICAgLCBJUEMgPSA0Ci0gICAgLCBBc3luY1JlcGx5ID0g
NQotICAgICwgSW52YWxpZCA9IDYKLX07Ci0KLWVudW0gY2xhc3MgTWVzc2FnZU5hbWUgOiB1aW50
MTZfdCB7Ci0gICAgV2ViUGFnZV9BZGRFdmVudAotICAgICwgV2ViUGFnZV9DbG9zZQotICAgICwg
V2ViUGFnZV9DcmVhdGVQbHVnaW4KLSAgICAsIFdlYlBhZ2VfRGVwcmVjYXRlZE9wZXJhdGlvbgot
ICAgICwgV2ViUGFnZV9EaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbgotICAgICwgV2ViUGFn
ZV9EaWRSZWNlaXZlUG9saWN5RGVjaXNpb24KLSAgICAsIFdlYlBhZ2VfRXhwZXJpbWVudGFsT3Bl
cmF0aW9uCi0gICAgLCBXZWJQYWdlX0dldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uCi0gICAgLCBX
ZWJQYWdlX0dldFBsdWdpbnMKLSAgICAsIFdlYlBhZ2VfSW50ZXJwcmV0S2V5RXZlbnQKLSAgICAs
IFdlYlBhZ2VfTG9hZFNvbWV0aGluZwotICAgICwgV2ViUGFnZV9Mb2FkU29tZXRoaW5nRWxzZQot
ICAgICwgV2ViUGFnZV9Mb2FkVVJMCi0gICAgLCBXZWJQYWdlX1ByZWZlcmVuY2VzRGlkQ2hhbmdl
Ci0gICAgLCBXZWJQYWdlX1J1bkphdmFTY3JpcHRBbGVydAotICAgICwgV2ViUGFnZV9TZW5kRG91
YmxlQW5kRmxvYXQKLSAgICAsIFdlYlBhZ2VfU2VuZEludHMKLSAgICAsIFdlYlBhZ2VfU2V0Vmlk
ZW9MYXllcklECi0gICAgLCBXZWJQYWdlX1RlbXBsYXRlVGVzdAotICAgICwgV2ViUGFnZV9UZXN0
QXN5bmNNZXNzYWdlCi0gICAgLCBXZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VSZXBseQotICAgICwg
V2ViUGFnZV9UZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb24KLSAgICAsIFdlYlBhZ2VfVGVz
dEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uUmVwbHkKLSAgICAsIFdlYlBhZ2VfVGVzdEFzeW5j
TWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50cwotICAgICwgV2ViUGFnZV9UZXN0QXN5bmNNZXNz
YWdlV2l0aE11bHRpcGxlQXJndW1lbnRzUmVwbHkKLSAgICAsIFdlYlBhZ2VfVGVzdEFzeW5jTWVz
c2FnZVdpdGhOb0FyZ3VtZW50cwotICAgICwgV2ViUGFnZV9UZXN0QXN5bmNNZXNzYWdlV2l0aE5v
QXJndW1lbnRzUmVwbHkKLSAgICAsIFdlYlBhZ2VfVGVzdE11bHRpcGxlQXR0cmlidXRlcwotICAg
ICwgV2ViUGFnZV9UZXN0UGFyYW1ldGVyQXR0cmlidXRlcwotICAgICwgV2ViUGFnZV9UZXN0U3lu
Y01lc3NhZ2UKLSAgICAsIFdlYlBhZ2VfVGVzdFN5bmNocm9ub3VzTWVzc2FnZQotICAgICwgV2Vi
UGFnZV9Ub3VjaEV2ZW50Ci0gICAgLCBXcmFwcGVkQXN5bmNNZXNzYWdlRm9yVGVzdGluZwotICAg
ICwgU3luY01lc3NhZ2VSZXBseQotICAgICwgSW5pdGlhbGl6ZUNvbm5lY3Rpb24KLSAgICAsIExl
Z2FjeVNlc3Npb25TdGF0ZQotICAgICwgTGFzdCA9IExlZ2FjeVNlc3Npb25TdGF0ZQotfTsKLQot
UmVjZWl2ZXJOYW1lIHJlY2VpdmVyTmFtZShNZXNzYWdlTmFtZSk7Ci1jb25zdCBjaGFyKiBkZXNj
cmlwdGlvbihNZXNzYWdlTmFtZSk7Ci1ib29sIGlzVmFsaWRNZXNzYWdlTmFtZShNZXNzYWdlTmFt
ZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIElQQwotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8
PgotY2xhc3MgSGFzQ3VzdG9tSXNWYWxpZEVudW08SVBDOjpNZXNzYWdlTmFtZT4gOiBwdWJsaWMg
c3RkOjp0cnVlX3R5cGUgeyB9OwotdGVtcGxhdGU8dHlwZW5hbWUgRSwgdHlwZW5hbWUgVCwgc3Rk
OjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjxFLCBJUEM6Ok1lc3NhZ2VOYW1lPj4qID0gbnVs
bHB0cj4KLWJvb2wgaXNWYWxpZEVudW0oVCBtZXNzYWdlTmFtZSkKLXsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihUKSA9PSBzaXplb2YoRSksICJpc1ZhbGlkRW51bTxJUEM6Ok1lc3NhZ2VOYW1l
PiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCAxNi1iaXQgdHlwZXMiKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlLCAiaXNWYWxpZEVudW08SVBDOjpNZXNz
YWdlTmFtZT4gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggdW5zaWduZWQgdHlwZXMiKTsKLSAg
ICBpZiAobWVzc2FnZU5hbWUgPiBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlwZTxJUEM6
Ok1lc3NhZ2VOYW1lPjo6dHlwZT4oSVBDOjpNZXNzYWdlTmFtZTo6TGFzdCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gSVBDOjppc1ZhbGlkTWVzc2FnZU5hbWUoc3RhdGljX2Nh
c3Q8RT4obWVzc2FnZU5hbWUpKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2UtcmVjZWl2ZXIucHkgYi9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weQppbmRleCBm
ODEyMjEwOGNjYjhmZGNjYjQ4Yzc4YzhlM2Q0OWYxZGUwYTk4YTM4Li5hMWJhYWNhMDVjNGQwMjBj
NmU5OTNhNmZiYWMxNjEwMTI1MGMwMjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weQpAQCAtMjcsNyArMjcsNyBAQCBpbXBvcnQg
c3lzCiAKIGltcG9ydCB3ZWJraXQubWVzc2FnZXMKIGltcG9ydCB3ZWJraXQucGFyc2VyCi0KK2lt
cG9ydCB3ZWJraXQubW9kZWwKIAogZGVmIG1haW4oYXJndik6CiAgICAgcmVjZWl2ZXJzID0gW10K
QEAgLTUwLDE2ICs1MCwyNiBAQCBkZWYgbWFpbihhcmd2KToKICAgICAgICAgd2l0aCBvcGVuKCcl
cy8lcy5tZXNzYWdlcy5pbicgJSAoYmFzZV9kaXIsIHBhcmFtZXRlcikpIGFzIHNvdXJjZV9maWxl
OgogICAgICAgICAgICAgcmVjZWl2ZXIgPSB3ZWJraXQucGFyc2VyLnBhcnNlKHNvdXJjZV9maWxl
KQogICAgICAgICByZWNlaXZlcnMuYXBwZW5kKHJlY2VpdmVyKQorICAgICAgICBpZiByZWNlaXZl
cl9uYW1lICE9IHJlY2VpdmVyLm5hbWU6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJF
cnJvcjogJXMgZGVmaW5lZCBpbiBmaWxlICVzLyVzLm1lc3NhZ2VzLmluIGluc3RlYWQgb2YgJXMu
bWVzc2FnZXMuaW5cbiIgJSAocmVjZWl2ZXIubmFtZSwgYmFzZV9kaXIsIHBhcmFtZXRlciwgcmVj
ZWl2ZXIubmFtZSkpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZXJyb3JzID0gd2Vi
a2l0Lm1vZGVsLmNoZWNrX2dsb2JhbF9tb2RlbChyZWNlaXZlcnMpCisgICAgaWYgZXJyb3JzOgor
ICAgICAgICBmb3IgZSBpbiBlcnJvcnM6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJF
cnJvcjogJXNcbiIgJSBlKQorICAgICAgICBzeXMuZXhpdCgxKQogCi0gICAgICAgIHdpdGggb3Bl
bignJXNNZXNzYWdlUmVjZWl2ZXIuY3BwJyAlIHJlY2VpdmVyX25hbWUsICJ3KyIpIGFzIGltcGxl
bWVudGF0aW9uX291dHB1dDoKKyAgICBmb3IgcmVjZWl2ZXIgaW4gcmVjZWl2ZXJzOgorICAgICAg
ICB3aXRoIG9wZW4oJyVzTWVzc2FnZVJlY2VpdmVyLmNwcCcgJSByZWNlaXZlci5uYW1lLCAidysi
KSBhcyBpbXBsZW1lbnRhdGlvbl9vdXRwdXQ6CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbl9v
dXRwdXQud3JpdGUod2Via2l0Lm1lc3NhZ2VzLmdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNl
aXZlcikpCiAKLSAgICAgICAgcmVjZWl2ZXJfbWVzc2FnZV9oZWFkZXIgPSAnJXNNZXNzYWdlcy5o
JyAlIHJlY2VpdmVyX25hbWUKKyAgICAgICAgcmVjZWl2ZXJfbWVzc2FnZV9oZWFkZXIgPSAnJXNN
ZXNzYWdlcy5oJyAlIHJlY2VpdmVyLm5hbWUKICAgICAgICAgcmVjZWl2ZXJfaGVhZGVyX2ZpbGVz
LmFwcGVuZChyZWNlaXZlcl9tZXNzYWdlX2hlYWRlcikKICAgICAgICAgd2l0aCBvcGVuKHJlY2Vp
dmVyX21lc3NhZ2VfaGVhZGVyLCAidysiKSBhcyBoZWFkZXJfb3V0cHV0OgogICAgICAgICAgICAg
aGVhZGVyX291dHB1dC53cml0ZSh3ZWJraXQubWVzc2FnZXMuZ2VuZXJhdGVfbWVzc2FnZXNfaGVh
ZGVyKHJlY2VpdmVyKSkKIAotICAgICAgICB3aXRoIG9wZW4oJyVzTWVzc2FnZXNSZXBsaWVzLmgn
ICUgcmVjZWl2ZXJfbmFtZSwgIncrIikgYXMgcmVwbHlfaGVhZGVyX291dHB1dDoKKyAgICAgICAg
d2l0aCBvcGVuKCclc01lc3NhZ2VzUmVwbGllcy5oJyAlIHJlY2VpdmVyLm5hbWUsICJ3KyIpIGFz
IHJlcGx5X2hlYWRlcl9vdXRwdXQ6CiAgICAgICAgICAgICByZXBseV9oZWFkZXJfb3V0cHV0Lndy
aXRlKHdlYmtpdC5tZXNzYWdlcy5nZW5lcmF0ZV9tZXNzYWdlc19yZXBseV9oZWFkZXIocmVjZWl2
ZXIpKQogCiAgICAgd2l0aCBvcGVuKCdNZXNzYWdlTmFtZXMuaCcsICJ3KyIpIGFzIG1lc3NhZ2Vf
bmFtZXNfaGVhZGVyX291dHB1dDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy90
ZXN0LWxlZ2FjeU1lc3NhZ2VSZWNlaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvdGVz
dC1sZWdhY3lNZXNzYWdlUmVjZWl2ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0NjM2ZTk2NDYwODM5NmVlMWY3MzVlZTA5MDNhMmFiMDc1MmQ5ZmI3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy90
ZXN0LWxlZ2FjeU1lc3NhZ2VSZWNlaXZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIChFTkFC
TEUoV0VCS0lUMikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBN
QVNURVJfQU5EKSkKLQotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLQotI2luY2x1ZGUgIkFyZ3VtZW50
Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkRlY29kZXIuaCIK
LSNpZiBFTkFCTEUoREVQUkVDQVRFRF9GRUFUVVJFKSB8fCBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZF
QVRVUkUpCi0jaW5jbHVkZSAiRHVtbXlUeXBlLmgiCi0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMp
Ci0jaW5jbHVkZSAiR2VzdHVyZVR5cGVzLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJIYW5kbGVNZXNz
YWdlLmgiCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIk1hY2hQb3J0LmgiCi0jZW5kaWYK
LSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
LSNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc1N0
b3JlLmgiCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05E
SVRJT04gJiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpIHx8IChFTkFCTEUoVE9VQ0hf
RVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FH
RV9DT05ESVRJT04pKQotI2luY2x1ZGUgIldlYlRvdWNoRXZlbnQuaCIKLSNlbmRpZgotI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRl
IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPFdlYkNvcmUvUGx1
Z2luRGF0YS5oPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgotI2VuZGlmCi0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgTWVzc2FnZXMgewotCi1uYW1lc3BhY2UgV2ViUGFnZSB7Ci0KLXZvaWQgR2V0
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OnNlbmQoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rl
cj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IElQQzo6Q29u
bmVjdGlvbjo6SGFuZGxlJiBjb25uZWN0aW9uSGFuZGxlKQotewotICAgICplbmNvZGVyIDw8IGNv
bm5lY3Rpb25IYW5kbGU7Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5j
b2RlcikpOwotfQotCi12b2lkIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6OnNlbmQoc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24pCi17Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJQYWdlCi0KLX0gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCi0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVXZWJQYWdlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMOjpuYW1lKCkp
IHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJM
PihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6bG9hZFVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFt
ZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkU29tZXRoaW5nOjpuYW1lKCkpIHsKLSAgICAg
ICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkU29tZXRoaW5nPihk
ZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6bG9hZFNvbWV0aGluZyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jZW5kaWYKLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNT
QUdFX0NPTkRJVElPTiB8fCBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKLSAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpUb3VjaEV2ZW50Ojpu
YW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpU
b3VjaEV2ZW50PihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dG91Y2hFdmVudCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5F
U1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkK
LSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpBZGRF
dmVudDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2Vi
UGFnZTo6QWRkRXZlbnQ+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjphZGRFdmVudCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21l
dGhpbmdFbHNlOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2Vz
OjpXZWJQYWdlOjpMb2FkU29tZXRoaW5nRWxzZT4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6Omxv
YWRTb21ldGhpbmdFbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlY2VpdmVQ
b2xpY3lEZWNpc2lvbjo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNz
YWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uPihkZWNvZGVyLCB0aGlzLCAm
V2ViUGFnZTo6ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpD
bG9zZTo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2Vi
UGFnZTo6Q2xvc2U+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpjbG9zZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6
V2ViUGFnZTo6UHJlZmVyZW5jZXNEaWRDaGFuZ2U6Om5hbWUoKSkgewotICAgICAgICBJUEM6Omhh
bmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlByZWZlcmVuY2VzRGlkQ2hhbmdlPihkZWNv
ZGVyLCB0aGlzLCAmV2ViUGFnZTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6Oldl
YlBhZ2U6OlNlbmREb3VibGVBbmRGbG9hdDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxl
TWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6U2VuZERvdWJsZUFuZEZsb2F0PihkZWNvZGVyLCB0
aGlzLCAmV2ViUGFnZTo6c2VuZERvdWJsZUFuZEZsb2F0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZW5kSW50czo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6
V2ViUGFnZTo6U2VuZEludHM+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpzZW5kSW50cyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBN
ZXNzYWdlczo6V2ViUGFnZTo6VGVzdFBhcmFtZXRlckF0dHJpYnV0ZXM6Om5hbWUoKSkgewotICAg
ICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OlRlc3RQYXJhbWV0ZXJB
dHRyaWJ1dGVzPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dGVzdFBhcmFtZXRlckF0dHJpYnV0
ZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1l
KCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlRlbXBsYXRlVGVzdDo6bmFtZSgpKSB7Ci0gICAgICAg
IElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6VGVtcGxhdGVUZXN0PihkZWNv
ZGVyLCB0aGlzLCAmV2ViUGFnZTo6dGVtcGxhdGVUZXN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRWaWRlb0xheWVySUQ6Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVz
c2FnZXM6OldlYlBhZ2U6OlNldFZpZGVvTGF5ZXJJRD4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6
OnNldFZpZGVvTGF5ZXJJRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6
OkRpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpo
YW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVj
dGlvbj4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmRpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0
aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShERVBSRUNB
VEVEX0ZFQVRVUkUpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6
V2ViUGFnZTo6RGVwcmVjYXRlZE9wZXJhdGlvbjo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFu
ZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6RGVwcmVjYXRlZE9wZXJhdGlvbj4oZGVjb2Rl
ciwgdGhpcywgJldlYlBhZ2U6OmRlcHJlY2F0ZWRPcGVyYXRpb24pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQotICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkV4cGVyaW1lbnRh
bE9wZXJhdGlvbjo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdl
czo6V2ViUGFnZTo6RXhwZXJpbWVudGFsT3BlcmF0aW9uPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFn
ZTo6ZXhwZXJpbWVudGFsT3BlcmF0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRp
ZgotICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGVjb2Rl
cik7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6ZGlkUmVj
ZWl2ZVN5bmNXZWJQYWdlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6
RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5j
b2RlcikKLXsKLSAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpDcmVhdGVQbHVn
aW46Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBh
Z2U6OkNyZWF0ZVBsdWdpbj4oZGVjb2RlciwgKnJlcGx5RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6
OmNyZWF0ZVBsdWdpbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIu
bWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6UnVuSmF2YVNjcmlwdEFsZXJ0Ojpu
YW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpS
dW5KYXZhU2NyaXB0QWxlcnQ+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdl
OjpydW5KYXZhU2NyaXB0QWxlcnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkdldFBsdWdpbnM6Om5h
bWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6Okdl
dFBsdWdpbnM+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjpnZXRQbHVn
aW5zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFt
ZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6bmFt
ZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZVN5bmNocm9ub3VzPE1lc3NhZ2VzOjpX
ZWJQYWdlOjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbj4oY29ubmVjdGlvbiwgZGVjb2Rlciwg
cmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkg
PT0gTWVzc2FnZXM6OldlYlBhZ2U6OlRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6Om5hbWUoKSkgewot
ICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VTeW5jaHJvbm91c1dhbnRzQ29ubmVjdGlvbjxNZXNz
YWdlczo6V2ViUGFnZTo6VGVzdE11bHRpcGxlQXR0cmlidXRlcz4oY29ubmVjdGlvbiwgZGVjb2Rl
ciwgcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dGVzdE11bHRpcGxlQXR0cmlidXRlcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkludGVycHJldEtleUV2ZW50
OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdl
OjpJbnRlcnByZXRLZXlFdmVudD4oZGVjb2RlciwgKnJlcGx5RW5jb2RlciwgdGhpcywgJldlYlBh
Z2U6OmludGVycHJldEtleUV2ZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
ICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7
Ci0gICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0KLSNlbmRpZiAvLyAoRU5BQkxFKFdF
QktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVS
X0FORCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvdGVzdC1sZWdhY3lNZXNz
YWdlcy5oIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3Rlc3QtbGVnYWN5TWVzc2FnZXMuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ5YjgxODRjZTRhOGEzZTQ0MGU1NmJmNjQ5YmQz
OWZjMzhmNzFlNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvdGVzdC1sZWdhY3lNZXNzYWdlcy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIChFTkFCTEUoV0VCS0lUMikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RF
Ul9PUiAmJiBNQVNURVJfQU5EKSkKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSAi
R2VzdHVyZVR5cGVzLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJNZXNzYWdlTmFtZXMuaCIKLSNpbmNs
dWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXlib2Fy
ZEV2ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+Ci0jaW5jbHVkZSA8dXRp
bGl0eT4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElQQyB7Ci1jbGFzcyBEdW1teVR5cGU7Ci1jbGFzcyBN
YWNoUG9ydDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJQcmVmZXJlbmNlc1N0
b3JlOwotY2xhc3MgV2ViVG91Y2hFdmVudDsKLX0KLQotbmFtZXNwYWNlIE1lc3NhZ2VzIHsKLW5h
bWVzcGFjZSBXZWJQYWdlIHsKLQotc3RhdGljIGlubGluZSBJUEM6OlJlY2VpdmVyTmFtZSBtZXNz
YWdlUmVjZWl2ZXJOYW1lKCkKLXsKLSAgICByZXR1cm4gSVBDOjpSZWNlaXZlck5hbWU6OldlYlBh
Z2U7Ci19Ci0KLWNsYXNzIExvYWRVUkwgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9
IHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFt
ZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9Mb2FkVVJMOyB9Ci0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBMb2Fk
VVJMKGNvbnN0IFN0cmluZyYgdXJsKQotICAgICAgICA6IG1fYXJndW1lbnRzKHVybCkKLSAgICB7
Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBcmd1
bWVudHMgbV9hcmd1bWVudHM7Ci19OwotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLWNsYXNz
IExvYWRTb21ldGhpbmcgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVw
bGU8Y29uc3QgU3RyaW5nJj47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkg
eyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9Mb2FkU29tZXRoaW5nOyB9Ci0gICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBMb2FkU29t
ZXRoaW5nKGNvbnN0IFN0cmluZyYgdXJsKQotICAgICAgICA6IG1fYXJndW1lbnRzKHVybCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBB
cmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiAoRU5BQkxFKFRPVUNIX0VW
RU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8fCBTT01FX09USEVSX01FU1NBR0Vf
Q09ORElUSU9OKSkKLWNsYXNzIFRvdWNoRXZlbnQgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3Vt
ZW50cyA9IHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50Jj47Ci0KLSAgICBz
dGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6
V2ViUGFnZV9Ub3VjaEV2ZW50OyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFs
c2U7Ci0KLSAgICBleHBsaWNpdCBUb3VjaEV2ZW50KGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVu
dCYgZXZlbnQpCi0gICAgICAgIDogbV9hcmd1bWVudHMoZXZlbnQpCi0gICAgewotICAgIH0KLQot
ICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJn
dW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNU
RURfTUVTU0FHRV9DT05ESVRJT04gJiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpCi1j
bGFzcyBBZGRFdmVudCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBs
ZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3Nh
Z2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0FkZEV2ZW50
OyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNp
dCBBZGRFdmVudChjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmIGV2ZW50KQotICAgICAgICA6
IG1fYXJndW1lbnRzKGV2ZW50KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmd1bWVudHMm
IGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1jbGFzcyBMb2FkU29tZXRoaW5nRWxzZSB7Ci1w
dWJsaWM6Ci0gICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPjsK
LQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3Nh
Z2VOYW1lOjpXZWJQYWdlX0xvYWRTb21ldGhpbmdFbHNlOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBMb2FkU29tZXRoaW5nRWxzZShjb25z
dCBTdHJpbmcmIHVybCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyh1cmwpCi0gICAgewotICAgIH0K
LQotICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1f
YXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi1jbGFzcyBEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24g
ewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8dWludDY0X3QsIHVp
bnQ2NF90LCB1aW50MzJfdD47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkg
eyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9EaWRSZWNlaXZlUG9saWN5RGVjaXNp
b247IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIERpZFJl
Y2VpdmVQb2xpY3lEZWNpc2lvbih1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBsaXN0ZW5lcklE
LCB1aW50MzJfdCBwb2xpY3lBY3Rpb24pCi0gICAgICAgIDogbV9hcmd1bWVudHMoZnJhbWVJRCwg
bGlzdGVuZXJJRCwgcG9saWN5QWN0aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmd1
bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07Ci0K
LWNsYXNzIENsb3NlIHsKLXB1YmxpYzoKLSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxl
PD47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpN
ZXNzYWdlTmFtZTo6V2ViUGFnZV9DbG9zZTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3lu
YyA9IGZhbHNlOwotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBB
cmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBQcmVmZXJlbmNlc0RpZENoYW5nZSB7
Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBXZWJLaXQ6
OldlYlByZWZlcmVuY2VzU3RvcmUmPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5h
bWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1ByZWZlcmVuY2VzRGlkQ2hh
bmdlOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBs
aWNpdCBQcmVmZXJlbmNlc0RpZENoYW5nZShjb25zdCBXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3Rv
cmUmIHN0b3JlKQotICAgICAgICA6IG1fYXJndW1lbnRzKHN0b3JlKQotICAgIHsKLSAgICB9Ci0K
LSAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2Fy
Z3VtZW50czsKLX07Ci0KLWNsYXNzIFNlbmREb3VibGVBbmRGbG9hdCB7Ci1wdWJsaWM6Ci0gICAg
dXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxkb3VibGUsIGZsb2F0PjsKLQotICAgIHN0YXRp
YyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQ
YWdlX1NlbmREb3VibGVBbmRGbG9hdDsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9
IGZhbHNlOwotCi0gICAgU2VuZERvdWJsZUFuZEZsb2F0KGRvdWJsZSBkLCBmbG9hdCBmKQotICAg
ICAgICA6IG1fYXJndW1lbnRzKGQsIGYpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFyZ3Vt
ZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50
czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwotfTsKLQot
Y2xhc3MgU2VuZEludHMgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVw
bGU8Y29uc3QgVmVjdG9yPHVpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+
PiY+OwotCi0gICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6
TWVzc2FnZU5hbWU6OldlYlBhZ2VfU2VuZEludHM7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c1N5bmMgPSBmYWxzZTsKLQotICAgIFNlbmRJbnRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGlu
dHMsIGNvbnN0IFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+PiYgaW50VmVjdG9ycykKLSAgICAgICAg
OiBtX2FyZ3VtZW50cyhpbnRzLCBpbnRWZWN0b3JzKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9h
cmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsK
LX07Ci0KLWNsYXNzIENyZWF0ZVBsdWdpbiB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQXJndW1lbnRz
ID0gc3RkOjp0dXBsZTx1aW50NjRfdCwgY29uc3QgV2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMm
PjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1l
c3NhZ2VOYW1lOjpXZWJQYWdlX0NyZWF0ZVBsdWdpbjsgfQotICAgIHN0YXRpYyBjb25zdCBib29s
IGlzU3luYyA9IHRydWU7Ci0KLSAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8Ym9vbCY+Owot
ICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3RkOjp0dXBsZTxib29sPjsKLSAgICBDcmVhdGVQ
bHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgY29uc3QgV2ViS2l0OjpQbHVnaW46OlBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCi0gICAgICAgIDogbV9hcmd1bWVudHMocGx1Z2luSW5zdGFu
Y2VJRCwgcGFyYW1ldGVycykKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBh
cmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBS
dW5KYXZhU2NyaXB0QWxlcnQgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6
dHVwbGU8dWludDY0X3QsIGNvbnN0IFN0cmluZyY+OwotCi0gICAgc3RhdGljIElQQzo6TWVzc2Fn
ZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfUnVuSmF2YVNj
cmlwdEFsZXJ0OyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKLQotICAg
IHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBsZTw+OwotICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0g
c3RkOjp0dXBsZTw+OwotICAgIFJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCi0gICAgICAgIDogbV9hcmd1bWVudHMoZnJhbWVJRCwgbWVz
c2FnZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBHZXRQbHVnaW5zIHsK
LXB1YmxpYzoKLSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGJvb2w+OwotCi0gICAg
c3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6
OldlYlBhZ2VfR2V0UGx1Z2luczsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRy
dWU7Ci0KLSAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8VmVjdG9yPFdlYkNvcmU6OlBsdWdp
bkluZm8+Jj47Ci0gICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFZlY3RvcjxX
ZWJDb3JlOjpQbHVnaW5JbmZvPj47Ci0gICAgZXhwbGljaXQgR2V0UGx1Z2lucyhib29sIHJlZnJl
c2gpCi0gICAgICAgIDogbV9hcmd1bWVudHMocmVmcmVzaCkKLSAgICB7Ci0gICAgfQotCi0gICAg
Y29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVu
dHM7Ci19OwotCi1jbGFzcyBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbiB7Ci1wdWJsaWM6Ci0g
ICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPjsKLQotICAgIHN0
YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpX
ZWJQYWdlX0dldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNTeW5jID0gdHJ1ZTsKLQotICAgIHVzaW5nIERlbGF5ZWRSZXBseSA9IEdldFBsdWdpblBy
b2Nlc3NDb25uZWN0aW9uRGVsYXllZFJlcGx5OwotICAgIHN0YXRpYyB2b2lkIHNlbmQoc3RkOjp1
bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgSVBDOjpD
b25uZWN0aW9uOjpIYW5kbGUmIGNvbm5lY3Rpb25IYW5kbGUpOwotICAgIHVzaW5nIFJlcGx5ID0g
c3RkOjp0dXBsZTxJUEM6OkNvbm5lY3Rpb246OkhhbmRsZSY+OwotICAgIHVzaW5nIFJlcGx5QXJn
dW1lbnRzID0gc3RkOjp0dXBsZTxJUEM6OkNvbm5lY3Rpb246OkhhbmRsZT47Ci0gICAgZXhwbGlj
aXQgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoKQot
ICAgICAgICA6IG1fYXJndW1lbnRzKHBsdWdpblBhdGgpCi0gICAgewotICAgIH0KLQotICAgIGNv
bnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1lbnRz
OwotfTsKLQotY2xhc3MgVGVzdE11bHRpcGxlQXR0cmlidXRlcyB7Ci1wdWJsaWM6Ci0gICAgdXNp
bmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTw+OwotCi0gICAgc3RhdGljIElQQzo6TWVzc2FnZU5h
bWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdE11bHRpcGxl
QXR0cmlidXRlczsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0KLSAg
ICB1c2luZyBEZWxheWVkUmVwbHkgPSBUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzRGVsYXllZFJlcGx5
OwotICAgIHN0YXRpYyB2b2lkIHNlbmQoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mJiwg
SVBDOjpDb25uZWN0aW9uJik7Ci0gICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPD47Ci0gICAg
dXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPD47Ci0gICAgY29uc3QgQXJndW1lbnRz
JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotCi1jbGFz
cyBUZXN0UGFyYW1ldGVyQXR0cmlidXRlcyB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQXJndW1lbnRz
ID0gc3RkOjp0dXBsZTx1aW50NjRfdCwgZG91YmxlLCBkb3VibGU+OwotCi0gICAgc3RhdGljIElQ
Qzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2Vf
VGVzdFBhcmFtZXRlckF0dHJpYnV0ZXM7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMg
PSBmYWxzZTsKLQotICAgIFRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzKHVpbnQ2NF90IGZvbywgZG91
YmxlIGJhciwgZG91YmxlIGJheikKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhmb28sIGJhciwgYmF6
KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIFRlbXBsYXRlVGVzdCB7Ci1w
dWJsaWM6Ci0gICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBIYXNoTWFwPFN0
cmluZywgc3RkOjpwYWlyPFN0cmluZywgdWludDY0X3Q+PiY+OwotCi0gICAgc3RhdGljIElQQzo6
TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVt
cGxhdGVUZXN0OyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAg
ICBleHBsaWNpdCBUZW1wbGF0ZVRlc3QoY29uc3QgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxT
dHJpbmcsIHVpbnQ2NF90Pj4mIGEpCi0gICAgICAgIDogbV9hcmd1bWVudHMoYSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBcmd1bWVu
dHMgbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBTZXRWaWRlb0xheWVySUQgewotcHVibGljOgot
ICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllcjo6UGxhdGZvcm1MYXllcklEJj47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBu
YW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9TZXRWaWRlb0xheWVySUQ7
IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0
IFNldFZpZGVvTGF5ZXJJRChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQmIHZpZGVvTGF5ZXJJRCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyh2aWRlb0xheWVySUQp
Ci0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwotfTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLWNsYXNz
IERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uIHsKLXB1YmxpYzoKLSAgICB1c2luZyBBcmd1
bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6TWFjaFBvcnQmLCBjb25zdCBPcHRpb25TZXQ8
V2ViS2l0OjpTZWxlY3Rpb25GbGFncz4mPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1l
IG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0RpZENyZWF0ZVdlYlBy
b2Nlc3NDb25uZWN0aW9uOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7
Ci0KLSAgICBEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbihjb25zdCBJUEM6Ok1hY2hQb3J0
JiBjb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgT3B0aW9uU2V0PFdlYktpdDo6U2VsZWN0aW9u
RmxhZ3M+JiBmbGFncykKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhjb25uZWN0aW9uSWRlbnRpZmll
ciwgZmxhZ3MpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRz
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oTUFDKQotY2xhc3MgSW50ZXJwcmV0S2V5RXZlbnQgewotcHVibGljOgotICAgIHVzaW5n
IEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8dWludDMyX3Q+OwotCi0gICAgc3RhdGljIElQQzo6TWVz
c2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfSW50ZXJw
cmV0S2V5RXZlbnQ7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0g
ICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1h
bmQ+Jj47Ci0gICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFZlY3RvcjxXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQ+PjsKLSAgICBleHBsaWNpdCBJbnRlcnByZXRLZXlFdmVudCh1
aW50MzJfdCB0eXBlKQotICAgICAgICA6IG1fYXJndW1lbnRzKHR5cGUpCi0gICAgewotICAgIH0K
LQotICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1f
YXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSkK
LWNsYXNzIERlcHJlY2F0ZWRPcGVyYXRpb24gewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50
cyA9IHN0ZDo6dHVwbGU8Y29uc3QgSVBDOjpEdW1teVR5cGUmPjsKLQotICAgIHN0YXRpYyBJUEM6
Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0Rl
cHJlY2F0ZWRPcGVyYXRpb247IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxz
ZTsKLQotICAgIGV4cGxpY2l0IERlcHJlY2F0ZWRPcGVyYXRpb24oY29uc3QgSVBDOjpEdW1teVR5
cGUmIGR1bW15KQotICAgICAgICA6IG1fYXJndW1lbnRzKGR1bW15KQotICAgIHsKLSAgICB9Ci0K
LSAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2Fy
Z3VtZW50czsKLX07Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShFWFBFUklNRU5UQUxfRkVBVFVSRSkK
LWNsYXNzIEV4cGVyaW1lbnRhbE9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQXJndW1l
bnRzID0gc3RkOjp0dXBsZTxjb25zdCBJUEM6OkR1bW15VHlwZSY+OwotCi0gICAgc3RhdGljIElQ
Qzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2Vf
RXhwZXJpbWVudGFsT3BlcmF0aW9uOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0g
ZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBFeHBlcmltZW50YWxPcGVyYXRpb24oY29uc3QgSVBDOjpE
dW1teVR5cGUmIGR1bW15KQotICAgICAgICA6IG1fYXJndW1lbnRzKGR1bW15KQotICAgIHsKLSAg
ICB9Ci0KLSAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50
cyBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViUGFnZQotfSAv
LyBuYW1lc3BhY2UgTWVzc2FnZXMKLQotI2VuZGlmIC8vIChFTkFCTEUoV0VCS0lUMikgJiYgKE5F
U1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNURVJfQU5EKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy90ZXN0LWxlZ2FjeU1lc3NhZ2VzUmVwbGllcy5o
IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3Rlc3QtbGVnYWN5TWVzc2FnZXNSZXBsaWVzLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MDllYTdmODNkOTA2Y2I2YTk5MjBjMWJmNWEx
YmE0MWQxYjhkMzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3Rlc3QtbGVnYWN5TWVzc2FnZXNSZXBsaWVzLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAot
ICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8
fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCi0KLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0j
aW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotCi1u
YW1lc3BhY2UgTWVzc2FnZXMgewotbmFtZXNwYWNlIFdlYlBhZ2UgewotCi11c2luZyBHZXRQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgSVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmIGNvbm5lY3Rpb25IYW5kbGUpPjsKLQotdXNp
bmcgVGVzdE11bHRpcGxlQXR0cmlidXRlc0RlbGF5ZWRSZXBseSA9IENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT47Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYlBhZ2UKLX0gLy8gbmFtZXNwYWNlIE1lc3Nh
Z2VzCi0KLSNlbmRpZiAvLyAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJ
VElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvdGVzdC1zdXBlcmNsYXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy90ZXN0LXN1cGVyY2xhc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWY2NGM1MDdhMjY4OWNjOGQ0MmUxMWYyZGMxNTVlNTIx
YWJmYjMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy90ZXN0LXN1cGVyY2xhc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
Ci0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0KLSNpbmNsdWRlICJBcmd1bWVu
dENvZGVycy5oIgotI2luY2x1ZGUgIkRlY29kZXIuaCIKLSNpbmNsdWRlICJIYW5kbGVNZXNzYWdl
LmgiCi0jaW5jbHVkZSAiVGVzdENsYXNzTmFtZS5oIgotI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUp
Ci0jaW5jbHVkZSAiVGVzdFR3b1N0YXRlRW51bS5oIgotI2VuZGlmCi0jaW5jbHVkZSAiV2ViUGFn
ZU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBNZXNzYWdlcyB7Ci0KLW5hbWVzcGFjZSBXZWJQ
YWdlIHsKLQotI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi0KLXZvaWQgVGVzdEFzeW5jTWVzc2Fn
ZTo6Y2FsbFJlcGx5KElQQzo6RGVjb2RlciYgZGVjb2RlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCh1aW50NjRfdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBPcHRpb25hbDx1aW50
NjRfdD4gcmVzdWx0OwotICAgIGRlY29kZXIgPj4gcmVzdWx0OwotICAgIGlmICghcmVzdWx0KSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBjYW5jZWxSZXBseShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZSgqcmVzdWx0KSk7Ci19Ci0KLXZvaWQgVGVzdEFzeW5jTWVz
c2FnZTo6Y2FuY2VsUmVwbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVw
bHlFcnJvcjx1aW50NjRfdD46OmNyZWF0ZSgpKTsKLX0KLQotdm9pZCBUZXN0QXN5bmNNZXNzYWdl
OjpzZW5kKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCByZXN1bHQpCi17Ci0gICAgKmVuY29kZXIgPDwg
cmVzdWx0OwotICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsK
LX0KLQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotCi12b2lkIFRlc3RBc3lu
Y01lc3NhZ2VXaXRoTm9Bcmd1bWVudHM6OmNhbGxSZXBseShJUEM6OkRlY29kZXImIGRlY29kZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwotfQotCi12b2lkIFRlc3RBc3luY01lc3NhZ2VXaXRoTm9Bcmd1
bWVudHM6OmNhbmNlbFJlcGx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotfQotCi12b2lkIFRlc3RBc3lu
Y01lc3NhZ2VXaXRoTm9Bcmd1bWVudHM6OnNlbmQoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rl
cj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVj
dGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShURVNUX0ZFQVRVUkUpCi0KLXZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBs
ZUFyZ3VtZW50czo6Y2FsbFJlcGx5KElQQzo6RGVjb2RlciYgZGVjb2RlciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sJiYsIHVpbnQ2NF90JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewot
ICAgIE9wdGlvbmFsPGJvb2w+IGZsYWc7Ci0gICAgZGVjb2RlciA+PiBmbGFnOwotICAgIGlmICgh
ZmxhZykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgY2FuY2VsUmVw
bHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIE9wdGlvbmFsPHVpbnQ2NF90PiB2YWx1ZTsKLSAgICBkZWNvZGVyID4+IHZhbHVlOwotICAg
IGlmICghdmFsdWUpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGNh
bmNlbFJlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKCpmbGFnKSwgV1RGTW92ZSgqdmFs
dWUpKTsKLX0KLQotdm9pZCBUZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzOjpj
YW5jZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJiwgdWludDY0X3QmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpBc3luY1Jl
cGx5RXJyb3I8Ym9vbD46OmNyZWF0ZSgpLCBJUEM6OkFzeW5jUmVwbHlFcnJvcjx1aW50NjRfdD46
OmNyZWF0ZSgpKTsKLX0KLQotdm9pZCBUZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1l
bnRzOjpzZW5kKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBib29sIGZsYWcsIHVpbnQ2NF90IHZhbHVlKQotewotICAg
ICplbmNvZGVyIDw8IGZsYWc7Ci0gICAgKmVuY29kZXIgPDwgdmFsdWU7Ci0gICAgY29ubmVjdGlv
bi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOwotfQotCi0jZW5kaWYKLQotI2lmIEVO
QUJMRShURVNUX0ZFQVRVUkUpCi0KLXZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9u
OjpjYWxsUmVwbHkoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgT3B0aW9uYWw8Ym9vbD4gZmxh
ZzsKLSAgICBkZWNvZGVyID4+IGZsYWc7Ci0gICAgaWYgKCFmbGFnKSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBjYW5jZWxSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZSgqZmxhZykpOwotfQotCi12b2lkIFRlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVjdGlv
bjo6Y2FuY2VsUmVwbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sJiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXN5bmNSZXBseUVycm9y
PGJvb2w+OjpjcmVhdGUoKSk7Ci19Ci0KLXZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0
aW9uOjpzZW5kKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBib29sIGZsYWcpCi17Ci0gICAgKmVuY29kZXIgPDwgZmxh
ZzsKLSAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92ZShlbmNvZGVyKSk7Ci19Ci0K
LSNlbmRpZgotCi12b2lkIFRlc3RTeW5jTWVzc2FnZTo6c2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDhf
dCByZXBseSkKLXsKLSAgICAqZW5jb2RlciA8PCByZXBseTsKLSAgICBjb25uZWN0aW9uLnNlbmRT
eW5jUmVwbHkoV1RGTW92ZShlbmNvZGVyKSk7Ci19Ci0KLXZvaWQgVGVzdFN5bmNocm9ub3VzTWVz
c2FnZTo6c2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgT3B0aW9uYWw8V2ViS2l0OjpUZXN0Q2xhc3NO
YW1lPiYgb3B0aW9uYWxSZXBseSkKLXsKLSAgICAqZW5jb2RlciA8PCBvcHRpb25hbFJlcGx5Owot
ICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViUGFnZQotCi19IC8vIG5hbWVzcGFjZSBNZXNzYWdlcwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBhdXRvIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFt
ZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMOjpuYW1lKCkpIHsKLSAgICAgICAgSVBD
OjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMPihkZWNvZGVyLCB0aGlz
LCAmV2ViUGFnZTo6bG9hZFVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYgRU5BQkxF
KFRFU1RfRkVBVFVSRSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2Vz
OjpXZWJQYWdlOjpUZXN0QXN5bmNNZXNzYWdlOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5k
bGVNZXNzYWdlQXN5bmM8TWVzc2FnZXM6OldlYlBhZ2U6OlRlc3RBc3luY01lc3NhZ2U+KGNvbm5l
Y3Rpb24sIGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjp0ZXN0QXN5bmNNZXNzYWdlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi0gICAg
aWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6VGVzdEFzeW5j
TWVzc2FnZVdpdGhOb0FyZ3VtZW50czo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVz
c2FnZUFzeW5jPE1lc3NhZ2VzOjpXZWJQYWdlOjpUZXN0QXN5bmNNZXNzYWdlV2l0aE5vQXJndW1l
bnRzPihjb25uZWN0aW9uLCBkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6dGVzdEFzeW5jTWVzc2Fn
ZVdpdGhOb0FyZ3VtZW50cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoVEVTVF9GRUFUVVJFKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVz
c2FnZXM6OldlYlBhZ2U6OlRlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHM6Om5h
bWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VBc3luYzxNZXNzYWdlczo6V2ViUGFn
ZTo6VGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50cz4oY29ubmVjdGlvbiwgZGVj
b2RlciwgdGhpcywgJldlYlBhZ2U6OnRlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVu
dHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKFRFU1RfRkVB
VFVSRSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdl
OjpUZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb246Om5hbWUoKSkgewotICAgICAgICBJUEM6
OmhhbmRsZU1lc3NhZ2VBc3luY1dhbnRzQ29ubmVjdGlvbjxNZXNzYWdlczo6V2ViUGFnZTo6VGVz
dEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uPihjb25uZWN0aW9uLCBkZWNvZGVyLCB0aGlzLCAm
V2ViUGFnZTo6dGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotICAgIFdlYlBhZ2VCYXNlOjpkaWRSZWNlaXZlTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0
ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCi17Ci0gICAgYXV0byBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5h
bWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6VGVzdFN5bmNNZXNzYWdlOjpuYW1lKCkpIHsKLSAg
ICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlU3luY2hyb25vdXM8TWVzc2FnZXM6OldlYlBhZ2U6OlRl
c3RTeW5jTWVzc2FnZT4oY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyLCB0aGlzLCAm
V2ViUGFnZTo6dGVzdFN5bmNNZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpUZXN0U3luY2hy
b25vdXNNZXNzYWdlOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlU3luY2hy
b25vdXM8TWVzc2FnZXM6OldlYlBhZ2U6OlRlc3RTeW5jaHJvbm91c01lc3NhZ2U+KGNvbm5lY3Rp
b24sIGRlY29kZXIsIHJlcGx5RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6OnRlc3RTeW5jaHJvbm91
c01lc3NhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFVOVVNFRF9QQVJBTShjb25u
ZWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7Ci0gICAgVU5VU0VEX1BBUkFNKHJl
cGx5RW5jb2Rlcik7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvdGVzdC1zdXBl
cmNsYXNzTWVzc2FnZXMuaCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy90ZXN0LXN1cGVyY2xhc3NN
ZXNzYWdlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmNmODBlOWVjOTExODVh
YzA3MzY0MjhmNzg1NzNkYzljMzg2ZjMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy90ZXN0LXN1cGVyY2xhc3NNZXNz
YWdlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgotI2luY2x1ZGUgIlRlc3RD
bGFzc05hbWUuaCIKLSNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1lbnVtIGNsYXNzIFRlc3RUd29TdGF0ZUVudW0gOiBi
b29sOwotfQotCi1uYW1lc3BhY2UgTWVzc2FnZXMgewotbmFtZXNwYWNlIFdlYlBhZ2UgewotCi1z
dGF0aWMgaW5saW5lIElQQzo6UmVjZWl2ZXJOYW1lIG1lc3NhZ2VSZWNlaXZlck5hbWUoKQotewot
ICAgIHJldHVybiBJUEM6OlJlY2VpdmVyTmFtZTo6V2ViUGFnZTsKLX0KLQotY2xhc3MgTG9hZFVS
TCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBTdHJp
bmcmPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6
Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0xvYWRVUkw7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c1N5bmMgPSBmYWxzZTsKLQotICAgIGV4cGxpY2l0IExvYWRVUkwoY29uc3QgU3RyaW5nJiB1cmwp
Ci0gICAgICAgIDogbV9hcmd1bWVudHModXJsKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBB
cmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07
Ci0KLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotY2xhc3MgVGVzdEFzeW5jTWVzc2FnZSB7Ci1w
dWJsaWM6Ci0gICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxXZWJLaXQ6OlRlc3RUd29T
dGF0ZUVudW0+OwotCi0gICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJu
IElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdEFzeW5jTWVzc2FnZTsgfQotICAgIHN0YXRp
YyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgc3RhdGljIHZvaWQgY2FsbFJlcGx5
KElQQzo6RGVjb2RlciYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3QmJik+JiYpOwot
ICAgIHN0YXRpYyB2b2lkIGNhbmNlbFJlcGx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0
X3QmJik+JiYpOwotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5
TmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdEFzeW5jTWVzc2Fn
ZVJlcGx5OyB9Ci0gICAgdXNpbmcgQXN5bmNSZXBseSA9IFRlc3RBc3luY01lc3NhZ2VBc3luY1Jl
cGx5OwotICAgIHN0YXRpYyB2b2lkIHNlbmQoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4m
JiwgSVBDOjpDb25uZWN0aW9uJiwgdWludDY0X3QgcmVzdWx0KTsKLSAgICB1c2luZyBSZXBseSA9
IHN0ZDo6dHVwbGU8dWludDY0X3QmPjsKLSAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6
dHVwbGU8dWludDY0X3Q+OwotICAgIGV4cGxpY2l0IFRlc3RBc3luY01lc3NhZ2UoV2ViS2l0OjpU
ZXN0VHdvU3RhdGVFbnVtIHR3b1N0YXRlRW51bSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyh0d29T
dGF0ZUVudW0pCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRz
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKFRFU1RfRkVBVFVSRSkKLWNsYXNzIFRlc3RBc3luY01lc3NhZ2VXaXRoTm9Bcmd1bWVudHMg
ewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKLQotICAgIHN0
YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpX
ZWJQYWdlX1Rlc3RBc3luY01lc3NhZ2VXaXRoTm9Bcmd1bWVudHM7IH0KLSAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIHN0YXRpYyB2b2lkIGNhbGxSZXBseShJUEM6
OkRlY29kZXImLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHN0YXRpYyB2b2lk
IGNhbmNlbFJlcGx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgc3RhdGljIElQ
Qzo6TWVzc2FnZU5hbWUgYXN5bmNNZXNzYWdlUmVwbHlOYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNz
YWdlTmFtZTo6V2ViUGFnZV9UZXN0QXN5bmNNZXNzYWdlV2l0aE5vQXJndW1lbnRzUmVwbHk7IH0K
LSAgICB1c2luZyBBc3luY1JlcGx5ID0gVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50c0Fz
eW5jUmVwbHk7Ci0gICAgc3RhdGljIHZvaWQgc2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mKTsKLSAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8
PjsKLSAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKLSAgICBjb25zdCBB
cmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi1jbGFzcyBUZXN0QXN5bmNNZXNz
YWdlV2l0aE11bHRpcGxlQXJndW1lbnRzIHsKLXB1YmxpYzoKLSAgICB1c2luZyBBcmd1bWVudHMg
PSBzdGQ6OnR1cGxlPD47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyBy
ZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9UZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRp
cGxlQXJndW1lbnRzOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgdm9pZCBjYWxsUmVwbHkoSVBDOjpEZWNvZGVyJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sJiYsIHVpbnQ2NF90JiYpPiYmKTsKLSAgICBzdGF0aWMgdm9pZCBjYW5jZWxS
ZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJiwgdWludDY0X3QmJik+JiYpOwotICAg
IHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJu
IElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFy
Z3VtZW50c1JlcGx5OyB9Ci0gICAgdXNpbmcgQXN5bmNSZXBseSA9IFRlc3RBc3luY01lc3NhZ2VX
aXRoTXVsdGlwbGVBcmd1bWVudHNBc3luY1JlcGx5OwotICAgIHN0YXRpYyB2b2lkIHNlbmQoc3Rk
Ojp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJiwgYm9vbCBmbGFn
LCB1aW50NjRfdCB2YWx1ZSk7Ci0gICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPGJvb2wmLCB1
aW50NjRfdCY+OwotICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3RkOjp0dXBsZTxib29sLCB1
aW50NjRfdD47Ci0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBcmd1
bWVudHMgbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJF
KQotY2xhc3MgVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uIHsKLXB1YmxpYzoKLSAgICB1
c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IGludCY+OwotCi0gICAgc3RhdGljIElQ
Qzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2Vf
VGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNTeW5jID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgdm9pZCBjYWxsUmVwbHkoSVBDOjpEZWNvZGVy
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sJiYpPiYmKTsKLSAgICBzdGF0aWMgdm9pZCBj
YW5jZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJik+JiYpOwotICAgIHN0YXRp
YyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJuIElQQzo6
TWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uUmVwbHk7
IH0KLSAgICB1c2luZyBBc3luY1JlcGx5ID0gVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9u
QXN5bmNSZXBseTsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVu
Y29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGJvb2wgZmxhZyk7Ci0gICAgdXNpbmcgUmVwbHkg
PSBzdGQ6OnR1cGxlPGJvb2wmPjsKLSAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVw
bGU8Ym9vbD47Ci0gICAgZXhwbGljaXQgVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uKGNv
bnN0IGludCYgdmFsdWUpCi0gICAgICAgIDogbV9hcmd1bWVudHModmFsdWUpCi0gICAgewotICAg
IH0KLQotICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRz
IG1fYXJndW1lbnRzOwotfTsKLSNlbmRpZgotCi1jbGFzcyBUZXN0U3luY01lc3NhZ2UgewotcHVi
bGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8dWludDMyX3Q+OwotCi0gICAg
c3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6
OldlYlBhZ2VfVGVzdFN5bmNNZXNzYWdlOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5j
ID0gdHJ1ZTsKLQotICAgIHVzaW5nIERlbGF5ZWRSZXBseSA9IFRlc3RTeW5jTWVzc2FnZURlbGF5
ZWRSZXBseTsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29k
ZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIHVpbnQ4X3QgcmVwbHkpOwotICAgIHVzaW5nIFJlcGx5
ID0gc3RkOjp0dXBsZTx1aW50OF90Jj47Ci0gICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6
OnR1cGxlPHVpbnQ4X3Q+OwotICAgIGV4cGxpY2l0IFRlc3RTeW5jTWVzc2FnZSh1aW50MzJfdCBw
YXJhbSkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhwYXJhbSkKLSAgICB7Ci0gICAgfQotCi0gICAg
Y29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVu
dHM7Ci19OwotCi1jbGFzcyBUZXN0U3luY2hyb25vdXNNZXNzYWdlIHsKLXB1YmxpYzoKLSAgICB1
c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGJvb2w+OwotCi0gICAgc3RhdGljIElQQzo6TWVz
c2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVGVzdFN5
bmNocm9ub3VzTWVzc2FnZTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7
Ci0KLSAgICB1c2luZyBEZWxheWVkUmVwbHkgPSBUZXN0U3luY2hyb25vdXNNZXNzYWdlRGVsYXll
ZFJlcGx5OwotICAgIHN0YXRpYyB2b2lkIHNlbmQoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rl
cj4mJiwgSVBDOjpDb25uZWN0aW9uJiwgY29uc3QgT3B0aW9uYWw8V2ViS2l0OjpUZXN0Q2xhc3NO
YW1lPiYgb3B0aW9uYWxSZXBseSk7Ci0gICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPE9wdGlv
bmFsPFdlYktpdDo6VGVzdENsYXNzTmFtZT4mPjsKLSAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9
IHN0ZDo6dHVwbGU8T3B0aW9uYWw8V2ViS2l0OjpUZXN0Q2xhc3NOYW1lPj47Ci0gICAgZXhwbGlj
aXQgVGVzdFN5bmNocm9ub3VzTWVzc2FnZShib29sIHZhbHVlKQotICAgICAgICA6IG1fYXJndW1l
bnRzKHZhbHVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50
cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYlBhZ2UKLX0gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvdGVzdC1zdXBlcmNsYXNzTWVzc2FnZXNSZXBsaWVzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvdGVzdC1zdXBlcmNsYXNzTWVzc2FnZXNSZXBsaWVzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJjNmUxZjJkM2NlZmRhZjI0YzhkNmJmNzVjMDQ1NGRhNWY1ZWVm
MTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9TY3JpcHRzL3Rlc3Qtc3VwZXJjbGFzc01lc3NhZ2VzUmVwbGllcy5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCi0jaW5jbHVkZSAiVGVzdENsYXNzTmFtZS5oIgot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0KLQot
bmFtZXNwYWNlIE1lc3NhZ2VzIHsKLW5hbWVzcGFjZSBXZWJQYWdlIHsKLQotI2lmIEVOQUJMRShU
RVNUX0ZFQVRVUkUpCi11c2luZyBUZXN0QXN5bmNNZXNzYWdlQXN5bmNSZXBseSA9IENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodWludDY0X3QgcmVzdWx0KT47Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShU
RVNUX0ZFQVRVUkUpCi11c2luZyBUZXN0QXN5bmNNZXNzYWdlV2l0aE5vQXJndW1lbnRzQXN5bmNS
ZXBseSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT47Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShU
RVNUX0ZFQVRVUkUpCi11c2luZyBUZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRz
QXN5bmNSZXBseSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBmbGFnLCB1aW50NjRfdCB2
YWx1ZSk+OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotdXNpbmcgVGVzdEFz
eW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uQXN5bmNSZXBseSA9IENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCBmbGFnKT47Ci0jZW5kaWYKLQotdXNpbmcgVGVzdFN5bmNNZXNzYWdlRGVsYXllZFJl
cGx5ID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50OF90IHJlcGx5KT47Ci0KLXVzaW5nIFRl
c3RTeW5jaHJvbm91c01lc3NhZ2VEZWxheWVkUmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IE9wdGlvbmFsPFdlYktpdDo6VGVzdENsYXNzTmFtZT4mIG9wdGlvbmFsUmVwbHkpPjsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViUGFnZQotfSAvLyBuYW1lc3BhY2UgTWVzc2FnZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy90ZXN0TWVzc2FnZVJlY2VpdmVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy90ZXN0TWVzc2FnZVJlY2VpdmVyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMmI2YzFiZGFjY2ZlY2FlOTVjYzY3ZjY1YTMxN2YxNjlkNTM2ZDZl
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvdGVzdE1lc3NhZ2VSZWNlaXZlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIChFTkFCTEUoV0VCS0lUMikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RF
Ul9PUiAmJiBNQVNURVJfQU5EKSkKLQotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLQotI2luY2x1ZGUg
IkFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkRl
Y29kZXIuaCIKLSNpZiBFTkFCTEUoREVQUkVDQVRFRF9GRUFUVVJFKSB8fCBFTkFCTEUoRVhQRVJJ
TUVOVEFMX0ZFQVRVUkUpCi0jaW5jbHVkZSAiRHVtbXlUeXBlLmgiCi0jZW5kaWYKLSNpZiBQTEFU
Rk9STShNQUMpCi0jaW5jbHVkZSAiR2VzdHVyZVR5cGVzLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJI
YW5kbGVNZXNzYWdlLmgiCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIk1hY2hQb3J0Lmgi
Ci0jZW5kaWYKLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQcmVm
ZXJlbmNlc1N0b3JlLmgiCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVT
U0FHRV9DT05ESVRJT04gJiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpIHx8IChFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RI
RVJfTUVTU0FHRV9DT05ESVRJT04pKQotI2luY2x1ZGUgIldlYlRvdWNoRXZlbnQuaCIKLSNlbmRp
ZgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2lmIFBMQVRGT1JNKE1BQykK
LSNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPFdl
YkNvcmUvUGx1Z2luRGF0YS5oPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgot
I2VuZGlmCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgTWVzc2FnZXMgewotCi1uYW1lc3BhY2UgV2ViUGFnZSB7Ci0K
LXZvaWQgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OnNlbmQoc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0
IElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJiBjb25uZWN0aW9uSGFuZGxlKQotewotICAgICplbmNv
ZGVyIDw8IGNvbm5lY3Rpb25IYW5kbGU7Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdU
Rk1vdmUoZW5jb2RlcikpOwotfQotCi12b2lkIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6OnNlbmQo
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlvbi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5j
b2RlcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJQYWdlCi0KLX0gLy8gbmFtZXNwYWNlIE1l
c3NhZ2VzCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVy
KQotewotICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOwotICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRVUkw6Om5hbWUo
KSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRV
Ukw+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpsb2FkVVJMKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VO
YW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmc6Om5hbWUoKSkgewotICAg
ICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmc+
KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjpsb2FkU29tZXRoaW5nKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01F
U1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQotICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnQ6
Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6
OlRvdWNoRXZlbnQ+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjp0b3VjaEV2ZW50KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAo
TkVTVEVEX01FU1NBR0VfQ09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04p
KQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OkFk
ZEV2ZW50OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpX
ZWJQYWdlOjpBZGRFdmVudD4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmFkZEV2ZW50KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0g
ICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFNv
bWV0aGluZ0Vsc2U6Om5hbWUoKSkgewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2Fn
ZXM6OldlYlBhZ2U6OkxvYWRTb21ldGhpbmdFbHNlPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6
bG9hZFNvbWV0aGluZ0Vsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAg
aWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2
ZVBvbGljeURlY2lzaW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1l
c3NhZ2VzOjpXZWJQYWdlOjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24+KGRlY29kZXIsIHRoaXMs
ICZXZWJQYWdlOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6
OkNsb3NlOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpX
ZWJQYWdlOjpDbG9zZT4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OmNsb3NlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2Vz
OjpXZWJQYWdlOjpQcmVmZXJlbmNlc0RpZENoYW5nZTo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6
aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6UHJlZmVyZW5jZXNEaWRDaGFuZ2U+KGRl
Y29kZXIsIHRoaXMsICZXZWJQYWdlOjpwcmVmZXJlbmNlc0RpZENoYW5nZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6
V2ViUGFnZTo6U2VuZERvdWJsZUFuZEZsb2F0OjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5k
bGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kRG91YmxlQW5kRmxvYXQ+KGRlY29kZXIs
IHRoaXMsICZXZWJQYWdlOjpzZW5kRG91YmxlQW5kRmxvYXQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6
OlNlbmRJbnRzOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZW5kSW50cz4oZGVjb2RlciwgdGhpcywgJldlYlBhZ2U6OnNlbmRJbnRzKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09
IE1lc3NhZ2VzOjpXZWJQYWdlOjpUZXN0UGFyYW1ldGVyQXR0cmlidXRlczo6bmFtZSgpKSB7Ci0g
ICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6VGVzdFBhcmFtZXRl
ckF0dHJpYnV0ZXM+KGRlY29kZXIsIHRoaXMsICZXZWJQYWdlOjp0ZXN0UGFyYW1ldGVyQXR0cmli
dXRlcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5h
bWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6VGVtcGxhdGVUZXN0OjpuYW1lKCkpIHsKLSAgICAg
ICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpUZW1wbGF0ZVRlc3Q+KGRl
Y29kZXIsIHRoaXMsICZXZWJQYWdlOjp0ZW1wbGF0ZVRlc3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6
OlNldFZpZGVvTGF5ZXJJRDo6bmFtZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxN
ZXNzYWdlczo6V2ViUGFnZTo6U2V0VmlkZW9MYXllcklEPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFn
ZTo6c2V0VmlkZW9MYXllcklEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFn
ZTo6RGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb246Om5hbWUoKSkgewotICAgICAgICBJUEM6
OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OldlYlBhZ2U6OkRpZENyZWF0ZVdlYlByb2Nlc3NDb25u
ZWN0aW9uPihkZWNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6ZGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgRU5BQkxFKERFUFJF
Q0FURURfRkVBVFVSRSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2Vz
OjpXZWJQYWdlOjpEZXByZWNhdGVkT3BlcmF0aW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpo
YW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpEZXByZWNhdGVkT3BlcmF0aW9uPihkZWNv
ZGVyLCB0aGlzLCAmV2ViUGFnZTo6ZGVwcmVjYXRlZE9wZXJhdGlvbik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCi0gICAg
aWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6RXhwZXJpbWVu
dGFsT3BlcmF0aW9uOjpuYW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3Nh
Z2VzOjpXZWJQYWdlOjpFeHBlcmltZW50YWxPcGVyYXRpb24+KGRlY29kZXIsIHRoaXMsICZXZWJQ
YWdlOjpleHBlcmltZW50YWxPcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0gICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwotICAgIFVOVVNFRF9QQVJBTShkZWNv
ZGVyKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29k
ZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIp
Ci17Ci0gICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7Ci0gICAgaWYgKGRl
Y29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUGFnZTo6Q3JlYXRlUGx1Z2luOjpu
YW1lKCkpIHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpD
cmVhdGVQbHVnaW4+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjpjcmVh
dGVQbHVnaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRBbGVydDo6bmFtZSgp
KSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6UnVuSmF2
YVNjcmlwdEFsZXJ0PihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6cnVu
SmF2YVNjcmlwdEFsZXJ0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQbHVnaW5zOjpuYW1lKCkp
IHsKLSAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRQbHVn
aW5zPihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmV2ViUGFnZTo6Z2V0UGx1Z2lucyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9
PSBNZXNzYWdlczo6V2ViUGFnZTo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246Om5hbWUoKSkg
ewotICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VTeW5jaHJvbm91czxNZXNzYWdlczo6V2ViUGFn
ZTo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24+KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1l
c3NhZ2VzOjpXZWJQYWdlOjpUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOjpuYW1lKCkpIHsKLSAgICAg
ICAgSVBDOjpoYW5kbGVNZXNzYWdlU3luY2hyb25vdXNXYW50c0Nvbm5lY3Rpb248TWVzc2FnZXM6
OldlYlBhZ2U6OlRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM+KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJl
cGx5RW5jb2RlciwgdGhpcywgJldlYlBhZ2U6OnRlc3RNdWx0aXBsZUF0dHJpYnV0ZXMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnRlcnByZXRLZXlFdmVudDo6bmFt
ZSgpKSB7Ci0gICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6V2ViUGFnZTo6SW50
ZXJwcmV0S2V5RXZlbnQ+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZXZWJQYWdlOjpp
bnRlcnByZXRLZXlFdmVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBV
TlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRlY29kZXIpOwotICAg
IFVOVVNFRF9QQVJBTShyZXBseUVuY29kZXIpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotCi0jZW5kaWYgLy8gKEVOQUJMRShXRUJLSVQy
KSAmJiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3Rlc3RNZXNzYWdlcy5oIGIvU291
cmNlL1dlYktpdC9TY3JpcHRzL3Rlc3RNZXNzYWdlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NDliODE4NGNlNGE4YTNlNDQwZTU2YmY2NDliZDM5ZmMzOGY3MWU0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy90ZXN0TWVzc2FnZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0g
KiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiAoRU5BQkxFKFdFQktJVDIpICYmIChO
RVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCi0KLSNp
bmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkdlc3R1cmVUeXBlcy5oIgotI2VuZGlmCi0j
aW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZU1lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvUGx1Z2luRGF0YS5oPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
UEMgewotY2xhc3MgRHVtbXlUeXBlOwotY2xhc3MgTWFjaFBvcnQ7Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotY2xhc3MgV2ViUHJlZmVyZW5jZXNTdG9yZTsKLWNsYXNzIFdlYlRvdWNoRXZlbnQ7
Ci19Ci0KLW5hbWVzcGFjZSBNZXNzYWdlcyB7Ci1uYW1lc3BhY2UgV2ViUGFnZSB7Ci0KLXN0YXRp
YyBpbmxpbmUgSVBDOjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSgpCi17Ci0gICAg
cmV0dXJuIElQQzo6UmVjZWl2ZXJOYW1lOjpXZWJQYWdlOwotfQotCi1jbGFzcyBMb2FkVVJMIHsK
LXB1YmxpYzoKLSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+
OwotCi0gICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVz
c2FnZU5hbWU6OldlYlBhZ2VfTG9hZFVSTDsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3lu
YyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTG9hZFVSTChjb25zdCBTdHJpbmcmIHVybCkKLSAg
ICAgICAgOiBtX2FyZ3VtZW50cyh1cmwpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFyZ3Vt
ZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50
czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwotfTsKLQot
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1jbGFzcyBMb2FkU29tZXRoaW5nIHsKLXB1YmxpYzoK
LSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+OwotCi0gICAg
c3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6
OldlYlBhZ2VfTG9hZFNvbWV0aGluZzsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9
IGZhbHNlOwotCi0gICAgZXhwbGljaXQgTG9hZFNvbWV0aGluZyhjb25zdCBTdHJpbmcmIHVybCkK
LSAgICAgICAgOiBtX2FyZ3VtZW50cyh1cmwpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFy
Z3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3Vt
ZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwotfTsK
LSNlbmRpZgotCi0jaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9D
T05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpCi1jbGFzcyBUb3VjaEV2
ZW50IHsKLXB1YmxpYzoKLSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFdl
YktpdDo6V2ViVG91Y2hFdmVudCY+OwotCi0gICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFt
ZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfVG91Y2hFdmVudDsgfQotICAg
IHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgVG91Y2hF
dmVudChjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmIGV2ZW50KQotICAgICAgICA6IG1fYXJn
dW1lbnRzKGV2ZW50KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3Vt
ZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQotI2lm
IChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OICYmIFNP
TUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQotY2xhc3MgQWRkRXZlbnQgewotcHVibGljOgot
ICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2
ZW50Jj47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBD
OjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9BZGRFdmVudDsgfQotICAgIHN0YXRpYyBjb25zdCBib29s
IGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgQWRkRXZlbnQoY29uc3QgV2ViS2l0OjpX
ZWJUb3VjaEV2ZW50JiBldmVudCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhldmVudCkKLSAgICB7
Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBcmd1
bWVudHMgbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQotY2xhc3MgTG9hZFNvbWV0aGluZ0Vsc2UgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50
cyA9IHN0ZDo6dHVwbGU8Y29uc3QgU3RyaW5nJj47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdl
TmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9Mb2FkU29tZXRo
aW5nRWxzZTsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAg
ZXhwbGljaXQgTG9hZFNvbWV0aGluZ0Vsc2UoY29uc3QgU3RyaW5nJiB1cmwpCi0gICAgICAgIDog
bV9hcmd1bWVudHModXJsKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmd1bWVudHMmIGFy
Z3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQot
Y2xhc3MgRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uIHsKLXB1YmxpYzoKLSAgICB1c2luZyBBcmd1
bWVudHMgPSBzdGQ6OnR1cGxlPHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDMyX3Q+OwotCi0gICAg
c3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6
OldlYlBhZ2VfRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24odWludDY0
X3QgZnJhbWVJRCwgdWludDY0X3QgbGlzdGVuZXJJRCwgdWludDMyX3QgcG9saWN5QWN0aW9uKQot
ICAgICAgICA6IG1fYXJndW1lbnRzKGZyYW1lSUQsIGxpc3RlbmVySUQsIHBvbGljeUFjdGlvbikK
LSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBDbG9zZSB7Ci1wdWJsaWM6Ci0g
ICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTw+OwotCi0gICAgc3RhdGljIElQQzo6TWVz
c2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OldlYlBhZ2VfQ2xvc2U7
IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIGNvbnN0IEFy
Z3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3Vt
ZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwotfTsK
LQotY2xhc3MgUHJlZmVyZW5jZXNEaWRDaGFuZ2UgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3Vt
ZW50cyA9IHN0ZDo6dHVwbGU8Y29uc3QgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlJj47Ci0K
LSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdl
TmFtZTo6V2ViUGFnZV9QcmVmZXJlbmNlc0RpZENoYW5nZTsgfQotICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgUHJlZmVyZW5jZXNEaWRDaGFuZ2Uo
Y29uc3QgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKLSAgICAgICAgOiBtX2Fy
Z3VtZW50cyhzdG9yZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1
bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBTZW5k
RG91YmxlQW5kRmxvYXQgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVw
bGU8ZG91YmxlLCBmbG9hdD47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkg
eyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9TZW5kRG91YmxlQW5kRmxvYXQ7IH0K
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKLQotICAgIFNlbmREb3VibGVB
bmRGbG9hdChkb3VibGUgZCwgZmxvYXQgZikKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhkLCBmKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIFNlbmRJbnRzIHsKLXB1YmxpYzoK
LSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4m
LCBjb25zdCBWZWN0b3I8VmVjdG9yPHVpbnQ2NF90Pj4mPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1l
c3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1NlbmRJ
bnRzOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBTZW5k
SW50cyhjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBpbnRzLCBjb25zdCBWZWN0b3I8VmVjdG9yPHVp
bnQ2NF90Pj4mIGludFZlY3RvcnMpCi0gICAgICAgIDogbV9hcmd1bWVudHMoaW50cywgaW50VmVj
dG9ycykKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotCi1jbGFzcyBDcmVhdGVQbHVnaW4g
ewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8dWludDY0X3QsIGNv
bnN0IFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzJj47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNz
YWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9DcmVhdGVQ
bHVnaW47IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0gICAgdXNp
bmcgUmVwbHkgPSBzdGQ6OnR1cGxlPGJvb2wmPjsKLSAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9
IHN0ZDo6dHVwbGU8Ym9vbD47Ci0gICAgQ3JlYXRlUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkluc3Rh
bmNlSUQsIGNvbnN0IFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotICAg
ICAgICA6IG1fYXJndW1lbnRzKHBsdWdpbkluc3RhbmNlSUQsIHBhcmFtZXRlcnMpCi0gICAgewot
ICAgIH0KLQotICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1l
bnRzIG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgUnVuSmF2YVNjcmlwdEFsZXJ0IHsKLXB1Ymxp
YzoKLSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBjb25zdCBTdHJp
bmcmPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6
Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1J1bkphdmFTY3JpcHRBbGVydDsgfQotICAgIHN0YXRpYyBj
b25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0KLSAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8
PjsKLSAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKLSAgICBSdW5KYXZh
U2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAg
ICAgICA6IG1fYXJndW1lbnRzKGZyYW1lSUQsIG1lc3NhZ2UpCi0gICAgewotICAgIH0KLQotICAg
IGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1l
bnRzOwotfTsKLQotY2xhc3MgR2V0UGx1Z2lucyB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQXJndW1l
bnRzID0gc3RkOjp0dXBsZTxib29sPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5h
bWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0dldFBsdWdpbnM7IH0KLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0gICAgdXNpbmcgUmVwbHkgPSBz
dGQ6OnR1cGxlPFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiY+OwotICAgIHVzaW5nIFJlcGx5
QXJndW1lbnRzID0gc3RkOjp0dXBsZTxWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4+OwotICAg
IGV4cGxpY2l0IEdldFBsdWdpbnMoYm9vbCByZWZyZXNoKQotICAgICAgICA6IG1fYXJndW1lbnRz
KHJlZnJlc2gpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRz
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgR2V0UGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb24gewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6
dHVwbGU8Y29uc3QgU3RyaW5nJj47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1l
KCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9HZXRQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbjsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7Ci0KLSAgICB1
c2luZyBEZWxheWVkUmVwbHkgPSBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBs
eTsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiYs
IElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0IElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJiBjb25uZWN0
aW9uSGFuZGxlKTsKLSAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8SVBDOjpDb25uZWN0aW9u
OjpIYW5kbGUmPjsKLSAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8SVBDOjpD
b25uZWN0aW9uOjpIYW5kbGU+OwotICAgIGV4cGxpY2l0IEdldFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCkKLSAgICAgICAgOiBtX2FyZ3VtZW50cyhwbHVn
aW5QYXRoKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIFRlc3RNdWx0aXBs
ZUF0dHJpYnV0ZXMgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8
PjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1l
c3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RNdWx0aXBsZUF0dHJpYnV0ZXM7IH0KLSAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOwotCi0gICAgdXNpbmcgRGVsYXllZFJlcGx5ID0gVGVz
dE11bHRpcGxlQXR0cmlidXRlc0RlbGF5ZWRSZXBseTsKLSAgICBzdGF0aWMgdm9pZCBzZW5kKHN0
ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYpOwotICAgIHVz
aW5nIFJlcGx5ID0gc3RkOjp0dXBsZTw+OwotICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3Rk
Ojp0dXBsZTw+OwotICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJn
dW1lbnRzIG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgVGVzdFBhcmFtZXRlckF0dHJpYnV0ZXMg
ewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8dWludDY0X3QsIGRv
dWJsZSwgZG91YmxlPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJl
dHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1Rlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzOyB9
Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBUZXN0UGFyYW1l
dGVyQXR0cmlidXRlcyh1aW50NjRfdCBmb28sIGRvdWJsZSBiYXIsIGRvdWJsZSBiYXopCi0gICAg
ICAgIDogbV9hcmd1bWVudHMoZm9vLCBiYXIsIGJheikKLSAgICB7Ci0gICAgfQotCi0gICAgY29u
c3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
YXJndW1lbnRzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7
Ci19OwotCi1jbGFzcyBUZW1wbGF0ZVRlc3QgewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50
cyA9IHN0ZDo6dHVwbGU8Y29uc3QgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVp
bnQ2NF90Pj4mPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVy
biBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX1RlbXBsYXRlVGVzdDsgfQotICAgIHN0YXRpYyBj
b25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgVGVtcGxhdGVUZXN0KGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRfdD4+JiBhKQotICAg
ICAgICA6IG1fYXJndW1lbnRzKGEpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFyZ3VtZW50
cyYgYXJndW1lbnRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwotfTsKLQotY2xh
c3MgU2V0VmlkZW9MYXllcklEIHsKLXB1YmxpYzoKLSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6
OnR1cGxlPGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCY+Owot
Ci0gICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2Fn
ZU5hbWU6OldlYlBhZ2VfU2V0VmlkZW9MYXllcklEOyB9Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBTZXRWaWRlb0xheWVySUQoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEJiB2aWRlb0xheWVySUQpCi0gICAg
ICAgIDogbV9hcmd1bWVudHModmlkZW9MYXllcklEKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9h
cmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsK
LX07Ci0KLSNpZiBQTEFURk9STShNQUMpCi1jbGFzcyBEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVj
dGlvbiB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBJ
UEM6Ok1hY2hQb3J0JiwgY29uc3QgT3B0aW9uU2V0PFdlYktpdDo6U2VsZWN0aW9uRmxhZ3M+Jj47
Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNz
YWdlTmFtZTo6V2ViUGFnZV9EaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbjsgfQotICAgIHN0
YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgRGlkQ3JlYXRlV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24oY29uc3QgSVBDOjpNYWNoUG9ydCYgY29ubmVjdGlvbklkZW50aWZpZXIsIGNv
bnN0IE9wdGlvblNldDxXZWJLaXQ6OlNlbGVjdGlvbkZsYWdzPiYgZmxhZ3MpCi0gICAgICAgIDog
bV9hcmd1bWVudHMoY29ubmVjdGlvbklkZW50aWZpZXIsIGZsYWdzKQotICAgIHsKLSAgICB9Ci0K
LSAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2Fy
Z3VtZW50czsKLX07Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLWNsYXNzIEludGVycHJl
dEtleUV2ZW50IHsKLXB1YmxpYzoKLSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPHVp
bnQzMl90PjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJ
UEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0ludGVycHJldEtleUV2ZW50OyB9Ci0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKLQotICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBs
ZTxWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiY+OwotICAgIHVzaW5nIFJlcGx5QXJn
dW1lbnRzID0gc3RkOjp0dXBsZTxWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPj47Ci0g
ICAgZXhwbGljaXQgSW50ZXJwcmV0S2V5RXZlbnQodWludDMyX3QgdHlwZSkKLSAgICAgICAgOiBt
X2FyZ3VtZW50cyh0eXBlKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBcmd1bWVudHMmIGFy
Z3VtZW50cygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKLX07Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShERVBSRUNBVEVEX0ZFQVRVUkUpCi1jbGFzcyBEZXByZWNhdGVkT3BlcmF0aW9u
IHsKLXB1YmxpYzoKLSAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6
RHVtbXlUeXBlJj47Ci0KLSAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1
cm4gSVBDOjpNZXNzYWdlTmFtZTo6V2ViUGFnZV9EZXByZWNhdGVkT3BlcmF0aW9uOyB9Ci0gICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7Ci0KLSAgICBleHBsaWNpdCBEZXByZWNh
dGVkT3BlcmF0aW9uKGNvbnN0IElQQzo6RHVtbXlUeXBlJiBkdW1teSkKLSAgICAgICAgOiBtX2Fy
Z3VtZW50cyhkdW1teSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRzJiBhcmd1
bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCi1jbGFzcyBFeHBlcmltZW50YWxPcGVyYXRp
b24gewotcHVibGljOgotICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Y29uc3QgSVBD
OjpEdW1teVR5cGUmPjsKLQotICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJl
dHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpXZWJQYWdlX0V4cGVyaW1lbnRhbE9wZXJhdGlvbjsgfQot
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOwotCi0gICAgZXhwbGljaXQgRXhw
ZXJpbWVudGFsT3BlcmF0aW9uKGNvbnN0IElQQzo6RHVtbXlUeXBlJiBkdW1teSkKLSAgICAgICAg
OiBtX2FyZ3VtZW50cyhkdW1teSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQXJndW1lbnRz
JiBhcmd1bWVudHMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Ci19OwotI2VuZGlm
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYlBhZ2UKLX0gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCi0KLSNl
bmRpZiAvLyAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBN
QVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvdGVzdE1lc3NhZ2VzUmVwbGllcy5oIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3Rlc3RNZXNz
YWdlc1JlcGxpZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQwOWVhN2Y4M2Q5
MDZjYjZhOTkyMGMxYmY1YTFiYTQxZDFiOGQzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvdGVzdE1lc3NhZ2VzUmVw
bGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9D
T05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQotCi0jaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgotI2luY2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0KLQotbmFtZXNwYWNlIE1lc3NhZ2VzIHsKLW5hbWVzcGFjZSBXZWJQYWdlIHsKLQotdXNp
bmcgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVkUmVwbHkgPSBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJiBjb25uZWN0aW9uSGFuZGxl
KT47Ci0KLXVzaW5nIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXNEZWxheWVkUmVwbHkgPSBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+OwotCi19IC8vIG5hbWVzcGFjZSBXZWJQYWdlCi19IC8vIG5hbWVz
cGFjZSBNZXNzYWdlcwotCi0jZW5kaWYgLy8gKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01B
U1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggMDdiMjlmMjE3ZTdmY2E5YmQ5M2E2ZmFj
MDBlZTI5ZGMwMzljZjAxNi4uNDM3MDM3NTZhNTZiMDg1ZGRjMTE5M2FiOWU2ZjcwNWExMjUzNjRm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQor
KysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNiwxNiAr
MjYsOCBAQCBpbXBvcnQgc3lzCiAKIGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAotV0FOVFNf
Q09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJwotV0FOVFNfRElTUEFUQ0hf
TUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnCi1XQU5UU19BU1lOQ19E
SVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0FzeW5jRGlzcGF0Y2hNZXNzYWdlJwot
TEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdMZWdhY3lSZWNlaXZlcicKLU5PVF9SRUZDT1VO
VEVEX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdOb3RSZWZDb3VudGVkJwotU1lOQ0hST05PVVNfQVRU
UklCVVRFID0gJ1N5bmNocm9ub3VzJwotQVNZTkNfQVRUUklCVVRFID0gJ0FzeW5jJwotCiBfbGlj
ZW5zZV9oZWFkZXIgPSAiIiIvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02MCw2ICs1MiwxMyBAQCBfbGljZW5zZV9oZWFkZXIgPSAiIiIvKgogCiAiIiIKIAorV0FO
VFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFU
Q0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnCitXQU5UU19BU1lO
Q19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0FzeW5jRGlzcGF0Y2hNZXNzYWdl
JworTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdMZWdhY3lSZWNlaXZlcicKK05PVF9SRUZD
T1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdOb3RSZWZDb3VudGVkJworU1lOQ0hST05PVVNf
QVRUUklCVVRFID0gJ1N5bmNocm9ub3VzJworQVNZTkNfQVRUUklCVVRFID0gJ0FzeW5jJwogCiBk
ZWYgbWVzc2FnZXNfaGVhZGVyX2ZpbGVuYW1lKHJlY2VpdmVyKToKICAgICByZXR1cm4gJyVzTWVz
c2FnZXMuaCcgJSByZWNlaXZlci5uYW1lCkBAIC03OTksMTAgKzc5OCw5IEBAIGRlZiBnZW5lcmF0
ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogCiAgICAgcmVzdWx0LmFwcGVuZChfbGljZW5z
ZV9oZWFkZXIpCiAgICAgcmVzdWx0LmFwcGVuZCgnI2luY2x1ZGUgImNvbmZpZy5oIlxuJykKLSAg
ICByZXN1bHQuYXBwZW5kKCdcbicpCiAKICAgICBpZiByZWNlaXZlci5jb25kaXRpb246Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyNpZiAlc1xuXG4nICUgcmVjZWl2ZXIuY29uZGl0aW9uKQorICAg
ICAgICByZXN1bHQuYXBwZW5kKCcjaWYgJXNcbicgJSByZWNlaXZlci5jb25kaXRpb24pCiAKICAg
ICByZXN1bHQuYXBwZW5kKCcjaW5jbHVkZSAiJXMuaCJcblxuJyAlIHJlY2VpdmVyLm5hbWUpCiAg
ICAgcmVzdWx0ICs9IGdlbmVyYXRlX2hlYWRlcl9pbmNsdWRlc19mcm9tX2NvbmRpdGlvbnMoaGVh
ZGVyX2NvbmRpdGlvbnMpCkBAIC04OTUsNyArODkzLDcgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2Vf
aGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ31cbicpCiAKLSAgICByZXN1
bHQuYXBwZW5kKCdcbn0gLy8gbmFtZXNwYWNlIFdlYktpdFxuXG4nKQorICAgIHJlc3VsdC5hcHBl
bmQoJ1xufSAvLyBuYW1lc3BhY2UgV2ViS2l0XG4nKQogCiAgICAgaWYgcmVjZWl2ZXIuY29uZGl0
aW9uOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbiNlbmRpZiAvLyAlc1xuJyAlIHJlY2VpdmVy
LmNvbmRpdGlvbikKQEAgLTExNzAsMTAgKzExNjgsNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9h
cmd1bWVudF9kZXNjcmlwdGlvbl9pbXBsZW1lbnRhdGlvbihyZWNlaXZlcnMsIHJlY2VpdmVyX2hl
YQogICAgIHJlc3VsdCArPSBnZW5lcmF0ZV9oZWFkZXJfaW5jbHVkZXNfZnJvbV9jb25kaXRpb25z
KGhlYWRlcl9jb25kaXRpb25zKQogICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKIAotICAgIGZvciBo
ZWFkZXIgaW4gcmVjZWl2ZXJfaGVhZGVyczoKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2luY2x1
ZGUgIiVzIlxuJyAlIChoZWFkZXIpKQotCi0gICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAgIHJl
c3VsdC5hcHBlbmQoJ25hbWVzcGFjZSBJUEMge1xuJykKICAgICByZXN1bHQuYXBwZW5kKCdcbicp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXNfdW5p
dHRlc3QucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzX3VuaXR0ZXN0
LnB5CmluZGV4IDAzMWE3N2ZlNjI1MmVlNDdlN2U0N2Q3ZGIwZjMwMWJlODMxOGVmOTIuLjBhYjUy
YWQ2YzZhNTI0YjcyMjdhYjcyMjNjZGY3MWIzNzc3NTM1ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXNfdW5pdHRlc3QucHkKKysrIGIvU291cmNlL1dl
YktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlc191bml0dGVzdC5weQpAQCAtMjAsNiArMjAsMTEg
QEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAorIyBFeGFtcGxlcyBv
ZiBob3cgdG8gcnVuOgorIyBweXRob24gU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlc191bml0dGVzdC5weSBbLXJdCisjIGNkIFNvdXJjZS9XZWJLaXQvU2NyaXB0cyAmJiBweXRo
b24gLW0gd2Via2l0Lm1lc3NhZ2VzX3VuaXR0ZXN0CisjIGNkIFNvdXJjZS9XZWJLaXQvU2NyaXB0
cyAmJiBweXRob24gLW0gdW5pdHRlc3QgZGlzY292ZXIgLXAgJypfdW5pdHRlc3QucHknCisKIGlt
cG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCkBAIC0zMCwzMyArMzUsMzQgQEAgaWYgc3lz
LnZlcnNpb25faW5mbyA+ICgzLCAwKToKIGVsc2U6CiAgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQg
U3RyaW5nSU8KIAotc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5h
bWUoX19maWxlX18pKSkKK21vZHVsZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0
aC5hYnNwYXRoKF9fZmlsZV9fKSkKKworc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguYWJzcGF0aChv
cy5wYXRoLmpvaW4obW9kdWxlX2RpcmVjdG9yeSwgb3MucGF0aC5wYXJkaXIpKSkKIGZyb20gd2Vi
a2l0IGltcG9ydCBtZXNzYWdlcwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCi1zY3JpcHRf
ZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQor
dGVzdHNfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKG1vZHVsZV9kaXJlY3RvcnksICd0ZXN0cycp
CiAKIHJlc2V0X3Jlc3VsdHMgPSBGYWxzZQogCi13aXRoIG9wZW4ob3MucGF0aC5qb2luKHNjcmlw
dF9kaXJlY3RvcnksICd0ZXN0Lm1lc3NhZ2VzLmluJykpIGFzIGluX2ZpbGU6Cit3aXRoIG9wZW4o
b3MucGF0aC5qb2luKHRlc3RzX2RpcmVjdG9yeSwgJ1Rlc3RXaXRob3V0QXR0cmlidXRlcy5tZXNz
YWdlcy5pbicpKSBhcyBpbl9maWxlOgogICAgIF9tZXNzYWdlc19maWxlX2NvbnRlbnRzID0gaW5f
ZmlsZS5yZWFkKCkKIAotd2l0aCBvcGVuKG9zLnBhdGguam9pbihzY3JpcHRfZGlyZWN0b3J5LCAn
dGVzdC1sZWdhY3kubWVzc2FnZXMuaW4nKSkgYXMgaW5fZmlsZToKK3dpdGggb3Blbihvcy5wYXRo
LmpvaW4odGVzdHNfZGlyZWN0b3J5LCAnVGVzdFdpdGhMZWdhY3lSZWNlaXZlci5tZXNzYWdlcy5p
bicpKSBhcyBpbl9maWxlOgogICAgIF9sZWdhY3lfbWVzc2FnZXNfZmlsZV9jb250ZW50cyA9IGlu
X2ZpbGUucmVhZCgpCiAKLXdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2NyaXB0X2RpcmVjdG9yeSwg
J3Rlc3Qtc3VwZXJjbGFzcy5tZXNzYWdlcy5pbicpKSBhcyBpbl9maWxlOgord2l0aCBvcGVuKG9z
LnBhdGguam9pbih0ZXN0c19kaXJlY3RvcnksICdUZXN0V2l0aFN1cGVyY2xhc3MubWVzc2FnZXMu
aW4nKSkgYXMgaW5fZmlsZToKICAgICBfc3VwZXJjbGFzc19tZXNzYWdlc19maWxlX2NvbnRlbnRz
ID0gaW5fZmlsZS5yZWFkKCkKIAotX2V4cGVjdGVkX3JlY2VpdmVyX2hlYWRlcl9maWxlX25hbWUg
PSAnLi4vdGVzdE1lc3NhZ2VzLmgnCi1fZXhwZWN0ZWRfbGVnYWN5X3JlY2VpdmVyX2hlYWRlcl9m
aWxlX25hbWUgPSAnLi4vdGVzdC1sZWdhY3lNZXNzYWdlcy5oJwotX2V4cGVjdGVkX3N1cGVyY2xh
c3NfcmVjZWl2ZXJfaGVhZGVyX2ZpbGVfbmFtZSA9ICcuLi90ZXN0LXN1cGVyY2xhc3NNZXNzYWdl
cy5oJworX2V4cGVjdGVkX3JlY2VpdmVyX2hlYWRlcl9maWxlX25hbWUgPSAnVGVzdFdpdGhvdXRB
dHRyaWJ1dGVzTWVzc2FnZXMuaCcKK19leHBlY3RlZF9sZWdhY3lfcmVjZWl2ZXJfaGVhZGVyX2Zp
bGVfbmFtZSA9ICdUZXN0V2l0aExlZ2FjeVJlY2VpdmVyTWVzc2FnZXMuaCcKK19leHBlY3RlZF9z
dXBlcmNsYXNzX3JlY2VpdmVyX2hlYWRlcl9maWxlX25hbWUgPSAnVGVzdFdpdGhTdXBlcmNsYXNz
TWVzc2FnZXMuaCcKIAotX2V4cGVjdGVkX3JlY2VpdmVyX2ltcGxlbWVudGF0aW9uX2ZpbGVfbmFt
ZSA9ICcuLi90ZXN0TWVzc2FnZVJlY2VpdmVyLmNwcCcKLV9leHBlY3RlZF9sZWdhY3lfcmVjZWl2
ZXJfaW1wbGVtZW50YXRpb25fZmlsZV9uYW1lID0gJy4uL3Rlc3QtbGVnYWN5TWVzc2FnZVJlY2Vp
dmVyLmNwcCcKLV9leHBlY3RlZF9zdXBlcmNsYXNzX3JlY2VpdmVyX2ltcGxlbWVudGF0aW9uX2Zp
bGVfbmFtZSA9ICcuLi90ZXN0LXN1cGVyY2xhc3NNZXNzYWdlUmVjZWl2ZXIuY3BwJworX2V4cGVj
dGVkX3JlY2VpdmVyX2ltcGxlbWVudGF0aW9uX2ZpbGVfbmFtZSA9ICdUZXN0V2l0aG91dEF0dHJp
YnV0ZXNNZXNzYWdlUmVjZWl2ZXIuY3BwJworX2V4cGVjdGVkX2xlZ2FjeV9yZWNlaXZlcl9pbXBs
ZW1lbnRhdGlvbl9maWxlX25hbWUgPSAnVGVzdFdpdGhMZWdhY3lSZWNlaXZlck1lc3NhZ2VSZWNl
aXZlci5jcHAnCitfZXhwZWN0ZWRfc3VwZXJjbGFzc19yZWNlaXZlcl9pbXBsZW1lbnRhdGlvbl9m
aWxlX25hbWUgPSAnVGVzdFdpdGhTdXBlcmNsYXNzTWVzc2FnZVJlY2VpdmVyLmNwcCcKIAotX2V4
cGVjdGVkX3Jlc3VsdHMgPSB7Ci0gICAgJ25hbWUnOiAnV2ViUGFnZScsCitfYmFzZV9leHBlY3Rl
ZF9yZXN1bHRzID0gewogICAgICdjb25kaXRpb25zJzogKCcoRU5BQkxFKFdFQktJVDIpICYmIChO
RVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpJyksCiAg
ICAgJ21lc3NhZ2VzJzogKAogICAgICAgICB7CkBAIC0yMzcsOCArMjQzLDEyIEBAIF9leHBlY3Rl
ZF9yZXN1bHRzID0gewogICAgICksCiB9CiAKK19leHBlY3RlZF9yZXN1bHRzID0gZGljdChfYmFz
ZV9leHBlY3RlZF9yZXN1bHRzLCBuYW1lPSdUZXN0V2l0aG91dEF0dHJpYnV0ZXMnKQorCitfZXhw
ZWN0ZWRfbGVnYWN5X3Jlc3VsdHMgPSBkaWN0KF9iYXNlX2V4cGVjdGVkX3Jlc3VsdHMsIG5hbWU9
J1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXInKQorCiBfZXhwZWN0ZWRfc3VwZXJjbGFzc19yZXN1bHRz
ID0gewotICAgICduYW1lJzogJ1dlYlBhZ2UnLAorICAgICduYW1lJzogJ1Rlc3RXaXRoU3VwZXJj
bGFzcycsCiAgICAgJ3N1cGVyY2xhc3MnOiAnV2ViUGFnZUJhc2UnLAogICAgICdjb25kaXRpb25z
JzogTm9uZSwKICAgICAnbWVzc2FnZXMnOiAoCkBAIC0zNDUsMTEgKzM1NSwxMSBAQCBjbGFzcyBQ
YXJzaW5nVGVzdChNZXNzYWdlc1Rlc3QpOgogICAgICAgICBmb3IgaW5kZXgsIG1lc3NhZ2UgaW4g
ZW51bWVyYXRlKHNlbGYucmVjZWl2ZXIubWVzc2FnZXMpOgogICAgICAgICAgICAgc2VsZi5jaGVj
a19tZXNzYWdlKG1lc3NhZ2UsIF9leHBlY3RlZF9yZXN1bHRzWydtZXNzYWdlcyddW2luZGV4XSkK
IAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmxlZ2FjeV9yZWNlaXZlci5uYW1lLCBf
ZXhwZWN0ZWRfcmVzdWx0c1snbmFtZSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxm
LmxlZ2FjeV9yZWNlaXZlci5jb25kaXRpb24sIF9leHBlY3RlZF9yZXN1bHRzWydjb25kaXRpb25z
J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzZWxmLmxlZ2FjeV9yZWNlaXZlci5t
ZXNzYWdlcyksIGxlbihfZXhwZWN0ZWRfcmVzdWx0c1snbWVzc2FnZXMnXSkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHNlbGYubGVnYWN5X3JlY2VpdmVyLm5hbWUsIF9leHBlY3RlZF9sZWdh
Y3lfcmVzdWx0c1snbmFtZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmxlZ2Fj
eV9yZWNlaXZlci5jb25kaXRpb24sIF9leHBlY3RlZF9sZWdhY3lfcmVzdWx0c1snY29uZGl0aW9u
cyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oc2VsZi5sZWdhY3lfcmVjZWl2ZXIu
bWVzc2FnZXMpLCBsZW4oX2V4cGVjdGVkX2xlZ2FjeV9yZXN1bHRzWydtZXNzYWdlcyddKSkKICAg
ICAgICAgZm9yIGluZGV4LCBtZXNzYWdlIGluIGVudW1lcmF0ZShzZWxmLmxlZ2FjeV9yZWNlaXZl
ci5tZXNzYWdlcyk6Ci0gICAgICAgICAgICBzZWxmLmNoZWNrX21lc3NhZ2UobWVzc2FnZSwgX2V4
cGVjdGVkX3Jlc3VsdHNbJ21lc3NhZ2VzJ11baW5kZXhdKQorICAgICAgICAgICAgc2VsZi5jaGVj
a19tZXNzYWdlKG1lc3NhZ2UsIF9leHBlY3RlZF9sZWdhY3lfcmVzdWx0c1snbWVzc2FnZXMnXVtp
bmRleF0pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zdXBlcmNsYXNzX3JlY2Vp
dmVyLm5hbWUsIF9leHBlY3RlZF9zdXBlcmNsYXNzX3Jlc3VsdHNbJ25hbWUnXSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zdXBlcmNsYXNzX3JlY2VpdmVyLnN1cGVyY2xhc3MsIF9l
eHBlY3RlZF9zdXBlcmNsYXNzX3Jlc3VsdHNbJ3N1cGVyY2xhc3MnXSkKQEAgLTM2MiwxMSArMzcy
LDExIEBAIGNsYXNzIEdlbmVyYXRlZEZpbGVDb250ZW50c1Rlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgIGRlZiBhc3NlcnRHZW5lcmF0ZWRGaWxlQ29udGVudHNFcXVhbChzZWxmLCBhY3R1YWxf
ZmlsZV9jb250ZW50cywgZXhwZWN0ZWRfZmlsZV9uYW1lKToKICAgICAgICAgdHJ5OgogICAgICAg
ICAgICAgaWYgcmVzZXRfcmVzdWx0czoKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0
aC5qb2luKHNjcmlwdF9kaXJlY3RvcnksIGV4cGVjdGVkX2ZpbGVfbmFtZSksIG1vZGU9J3cnKSBh
cyBvdXRfZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRlc3Rz
X2RpcmVjdG9yeSwgZXhwZWN0ZWRfZmlsZV9uYW1lKSwgbW9kZT0ndycpIGFzIG91dF9maWxlOgog
ICAgICAgICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShhY3R1YWxfZmlsZV9jb250ZW50cykK
ICAgICAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGgu
am9pbihzY3JpcHRfZGlyZWN0b3J5LCBleHBlY3RlZF9maWxlX25hbWUpLCBtb2RlPSdyJykgYXMg
aW5fZmlsZToKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGVzdHNfZGlyZWN0
b3J5LCBleHBlY3RlZF9maWxlX25hbWUpLCBtb2RlPSdyJykgYXMgaW5fZmlsZToKICAgICAgICAg
ICAgICAgICBleHBlY3RlZF9maWxlX2NvbnRlbnRzID0gaW5fZmlsZS5yZWFkKCkKICAgICAgICAg
ICAgIGFjdHVhbF9saW5lX2xpc3QgPSBhY3R1YWxfZmlsZV9jb250ZW50cy5zcGxpdGxpbmVzKEZh
bHNlKQogICAgICAgICAgICAgZXhwZWN0ZWRfbGluZV9saXN0ID0gZXhwZWN0ZWRfZmlsZV9jb250
ZW50cy5zcGxpdGxpbmVzKEZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tb2RlbC5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbW9kZWwucHkK
aW5kZXggZDA4MzA0NDBkZTk1ZWQwMmMwYjhjZGE0ZDJlYzUwODRmZWE3OTNmOC4uYzcwYzIyNjcx
NWQ1NjBlYmRlMDczMzE2MjljY2MyNmEzZWVkOTZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tb2RlbC5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21vZGVsLnB5CkBAIC0yMiw2ICsyMiw3IEBACiAKIGltcG9ydCBpdGVydG9vbHMKIAorZnJv
bSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgogCiBjbGFzcyBNZXNzYWdlUmVjZWl2ZXIob2Jq
ZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgc3VwZXJjbGFzcywgYXR0cmlidXRl
cywgbWVzc2FnZXMsIGNvbmRpdGlvbik6CkBAIC02MSwzICs2MiwxMyBAQCBjbGFzcyBQYXJhbWV0
ZXIob2JqZWN0KToKIAogICAgIGRlZiBoYXNfYXR0cmlidXRlKHNlbGYsIGF0dHJpYnV0ZSk6CiAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGUgaW4gc2VsZi5hdHRyaWJ1dGVzCisKKworZGVmIGNoZWNr
X2dsb2JhbF9tb2RlbChyZWNlaXZlcnMpOgorICAgIGVycm9ycyA9IFtdCisgICAgcmVjZWl2ZXJf
Y291bnRzID0gQ291bnRlcihbci5uYW1lIGZvciByIGluIHJlY2VpdmVyc10pCisgICAgcmVjZWl2
ZXJfZHVwbGljYXRlcyA9IFtuIGZvciBuLCBjIGluIHJlY2VpdmVyX2NvdW50cy5pdGVtcygpIGlm
IGMgPiAxXQorICAgIGlmIHJlY2VpdmVyX2R1cGxpY2F0ZXM6CisgICAgICAgIGVycm9ycy5hcHBl
bmQoJ0R1cGxpY2F0ZSBtZXNzYWdlIHJlY2VpdmVyIG5hbWVzOiAlcycgJSAoJywgJy5qb2luKHJl
Y2VpdmVyX2R1cGxpY2F0ZXMpKSkKKworICAgIHJldHVybiBlcnJvcnMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbW9kZWxfdW5pdHRlc3QucHkgYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21vZGVsX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxOGFiNmJk
MGMyMDJhMjIxOTg1NjY1ODNlOWZhZDRlZTUzMDJhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21vZGVsX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNjgg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBFeGFtcGxlcyBv
ZiBob3cgdG8gcnVuOgorIyBweXRob24gU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tb2Rl
bF91bml0dGVzdC5weQorIyBjZCBTb3VyY2UvV2ViS2l0L1NjcmlwdHMgJiYgcHl0aG9uIC1tIHdl
YmtpdC5tb2RlbF91bml0dGVzdAorIyBjZCBTb3VyY2UvV2ViS2l0L1NjcmlwdHMgJiYgcHl0aG9u
IC1tIHVuaXR0ZXN0IGRpc2NvdmVyIC1wICcqX3VuaXR0ZXN0LnB5JworCitpbXBvcnQgb3MKK2lt
cG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKToK
KyAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZWxzZToKKyAgICBmcm9tIFN0cmluZ0lPIGlt
cG9ydCBTdHJpbmdJTworbW9kdWxlX2RpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRo
LmFic3BhdGgoX19maWxlX18pKQorc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguYWJzcGF0aChvcy5w
YXRoLmpvaW4obW9kdWxlX2RpcmVjdG9yeSwgb3MucGF0aC5wYXJkaXIpKSkKK2Zyb20gd2Via2l0
IGltcG9ydCBtb2RlbCAgIyBub3FhOiBFNDAyCitmcm9tIHdlYmtpdCBpbXBvcnQgcGFyc2VyICAj
IG5vcWE6IEU0MDIKKworCitjbGFzcyBNb2RlbENoZWNrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfcmVjZWl2ZXJzKHNlbGYpOgorICAgICAgICBjb250
ZW50cyA9ICIiIgorbWVzc2FnZXMgLT4gV2ViUGFnZSB7CisgICAgTG9hZFVSTChTdHJpbmcgdXJs
KQorfSIiIgorICAgICAgICByZWNlaXZlciA9IHBhcnNlci5wYXJzZShTdHJpbmdJTyhjb250ZW50
cykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlY2VpdmVyLm5hbWUsICdXZWJQYWdlJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVjZWl2ZXIubWVzc2FnZXNbMF0ubmFtZSwgJ0xv
YWRVUkwnKQorCisgICAgICAgIG90aGVyX2NvbnRlbnRzID0gIiIiCisgICAgbWVzc2FnZXMgLT4g
V2ViUGFnZSB7CisgICAgICAgIExvYWRVUkwoU3RyaW5nIHVybCkKKyAgICAgICAgTG9hZFVSTDIo
U3RyaW5nIHVybCkKKyAgICB9IiIiCisKKyAgICAgICAgb3RoZXJfcmVjZWl2ZXIgPSBwYXJzZXIu
cGFyc2UoU3RyaW5nSU8ob3RoZXJfY29udGVudHMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhvdGhlcl9yZWNlaXZlci5uYW1lLCAnV2ViUGFnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKG90aGVyX3JlY2VpdmVyLm1lc3NhZ2VzWzBdLm5hbWUsICdMb2FkVVJMJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMob3RoZXJfcmVjZWl2ZXIubWVzc2FnZXNbMV0ubmFtZSwgJ0xvYWRV
UkwyJykKKyAgICAgICAgZXJyb3JzID0gbW9kZWwuY2hlY2tfZ2xvYmFsX21vZGVsKFtyZWNlaXZl
ciwgb3RoZXJfcmVjZWl2ZXJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oZXJyb3Jz
KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJEdXBsaWNhdGUiIGluIGVycm9yc1swXSkK
KworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0LWxlZ2FjeS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdC1sZWdhY3kubWVzc2FnZXMu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MTg4NzhlZDFlOGE5OGU1MDg2N2Mw
NGYxZWU1OTEyNWYyMmRlYzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0LWxlZ2FjeS5tZXNzYWdl
cy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIEVOQUJMRShXRUJLSVQyKQotI2lmIE5FU1RFRF9NQVNU
RVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNURVJfQU5ECi0KLW1lc3NhZ2VzIC0+IFdl
YlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewotICAgIExvYWRVUkwoU3RyaW5nIHVybCkKLSNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotICAgIExvYWRTb21ldGhpbmcoU3RyaW5nIHVybCkKLSNpZiBORVNU
RURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTgotICAg
IFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQotI2VuZGlmCi0jaWYgTkVT
VEVEX01FU1NBR0VfQ09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04KLSAg
ICBBZGRFdmVudChXZWJLaXQ6OldlYlRvdWNoRXZlbnQgZXZlbnQpCi0jZW5kaWYKLSAgICBMb2Fk
U29tZXRoaW5nRWxzZShTdHJpbmcgdXJsKQotI2VuZGlmCi0gICAgRGlkUmVjZWl2ZVBvbGljeURl
Y2lzaW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGxpc3RlbmVySUQsIHVpbnQzMl90IHBv
bGljeUFjdGlvbikKLSAgICBDbG9zZSgpCi0KLSAgICBQcmVmZXJlbmNlc0RpZENoYW5nZShXZWJL
aXQ6OldlYlByZWZlcmVuY2VzU3RvcmUgc3RvcmUpCi0gICAgU2VuZERvdWJsZUFuZEZsb2F0KGRv
dWJsZSBkLCBmbG9hdCBmKQotICAgIFNlbmRJbnRzKFZlY3Rvcjx1aW50NjRfdD4gaW50cywgVmVj
dG9yPFZlY3Rvcjx1aW50NjRfdD4+IGludFZlY3RvcnMpCi0KLSAgICBDcmVhdGVQbHVnaW4odWlu
dDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgV2ViS2l0OjpQbHVnaW46OlBhcmFtZXRlcnMgcGFyYW1l
dGVycykgLT4gKGJvb2wgcmVzdWx0KQotICAgIFJ1bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBm
cmFtZUlELCBTdHJpbmcgbWVzc2FnZSkgLT4gKCkKLSAgICBHZXRQbHVnaW5zKGJvb2wgcmVmcmVz
aCkgLT4gKFZlY3RvcjxXZWJDb3JlOjpQbHVnaW5JbmZvPiBwbHVnaW5zKQotICAgIEdldFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uKFN0cmluZyBwbHVnaW5QYXRoKSAtPiAoSVBDOjpDb25uZWN0aW9u
OjpIYW5kbGUgY29ubmVjdGlvbkhhbmRsZSkgU3luY2hyb25vdXMKLQotICAgIFRlc3RNdWx0aXBs
ZUF0dHJpYnV0ZXMoKSAtPiAoKSBXYW50c0Nvbm5lY3Rpb24gU3luY2hyb25vdXMKLQotICAgIFRl
c3RQYXJhbWV0ZXJBdHRyaWJ1dGVzKFtBdHRyaWJ1dGVPbmUgQXR0cmlidXRlVHdvXSB1aW50NjRf
dCBmb28sIGRvdWJsZSBiYXIsIFtBdHRyaWJ1dGVUaHJlZV0gZG91YmxlIGJheikKLQotICAgIFRl
bXBsYXRlVGVzdChIYXNoTWFwPFN0cmluZywgc3RkOjpwYWlyPFN0cmluZywgdWludDY0X3Q+PiBh
KQotCi0gICAgU2V0VmlkZW9MYXllcklEKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCB2aWRlb0xheWVySUQpCi0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgRGlkQ3JlYXRl
V2ViUHJvY2Vzc0Nvbm5lY3Rpb24oSVBDOjpNYWNoUG9ydCBjb25uZWN0aW9uSWRlbnRpZmllciwg
T3B0aW9uU2V0PFdlYktpdDo6U2VsZWN0aW9uRmxhZ3M+IGZsYWdzKQotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgIyBLZXlib2FyZCBzdXBwb3J0Ci0gICAgSW50ZXJwcmV0S2V5RXZl
bnQodWludDMyX3QgdHlwZSkgLT4gKFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+IGNv
bW1hbmROYW1lKQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREVQUkVDQVRFRF9GRUFUVVJFKQotICAg
IERlcHJlY2F0ZWRPcGVyYXRpb24oSVBDOjpEdW1teVR5cGUgZHVtbXkpCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShFWFBFUklNRU5UQUxfRkVBVFVSRSkKLSAgICBFeHBlcmltZW50YWxPcGVyYXRpb24o
SVBDOjpEdW1teVR5cGUgZHVtbXkpCi0jZW5kaWYKLX0KLQotI2VuZGlmCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdC1zdXBlcmNsYXNzLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0LXN1cGVyY2xhc3MubWVz
c2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMzEwMjAzMjU2NWI3MzRh
MGVkYWRmOGIxZDVkOTkzZWZlNzAzZWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0LXN1cGVyY2xh
c3MubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
Ci0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFdlYlBhZ2UgOiBXZWJQ
YWdlQmFzZSB7Ci0gICAgTG9hZFVSTChTdHJpbmcgdXJsKQotI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCi0gICAgVGVzdEFzeW5jTWVzc2FnZShlbnVtOmJvb2wgV2ViS2l0OjpUZXN0VHdvU3RhdGVF
bnVtIHR3b1N0YXRlRW51bSkgLT4gKHVpbnQ2NF90IHJlc3VsdCkgQXN5bmMKLSAgICBUZXN0QXN5
bmNNZXNzYWdlV2l0aE5vQXJndW1lbnRzKCkgLT4gKCkgQXN5bmMKLSAgICBUZXN0QXN5bmNNZXNz
YWdlV2l0aE11bHRpcGxlQXJndW1lbnRzKCkgLT4gKGJvb2wgZmxhZywgdWludDY0X3QgdmFsdWUp
IEFzeW5jCi0gICAgVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uKGludCB2YWx1ZSkgLT4g
KGJvb2wgZmxhZykgQXN5bmMgV2FudHNDb25uZWN0aW9uCi0jZW5kaWYKLSAgICBUZXN0U3luY01l
c3NhZ2UodWludDMyX3QgcGFyYW0pIC0+ICh1aW50OF90IHJlcGx5KSBTeW5jaHJvbm91cwotICAg
IFRlc3RTeW5jaHJvbm91c01lc3NhZ2UoYm9vbCB2YWx1ZSkgLT4gKE9wdGlvbmFsPFdlYktpdDo6
VGVzdENsYXNzTmFtZT4gb3B0aW9uYWxSZXBseSkgU3luY2hyb25vdXMKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdC5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjI0MjVmYWMzMWUwZmNkNjI4NDA4OWUxODRjNTI3YWI3ZWNiM2IzMi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L3Rlc3QubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4NCAr
MCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0j
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpZiBFTkFC
TEUoV0VCS0lUMikKLSNpZiBORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYg
TUFTVEVSX0FORAotCi0KLSMgVGhlIHBhcnNlciBzaG91bGQgdHJlYXQgYWxsIG9mIHRoZXNlIGFz
IGNvbW1lbnRzCi0jRmFrZUxvYWRVUkxBKFN0cmluZyB1cmwpCi0jIEZha2VMb2FkVVJMQihTdHJp
bmcgdXJsKQotICAgICNGYWtlTG9hZFVSTEMoU3RyaW5nIHVybCkKLSAgICAjIEZha2VMb2FkVVJM
RChTdHJpbmcgdXJsKQotCi1tZXNzYWdlcyAtPiBXZWJQYWdlIHsKLSAgICBMb2FkVVJMKFN0cmlu
ZyB1cmwpCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBMb2FkU29tZXRoaW5nKFN0cmlu
ZyB1cmwpCi0jaWYgTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FH
RV9DT05ESVRJT04KLSAgICBUb3VjaEV2ZW50KFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVudCkK
LSNlbmRpZgotI2lmIE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NB
R0VfQ09ORElUSU9OCi0gICAgQWRkRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQot
I2VuZGlmCi0gICAgTG9hZFNvbWV0aGluZ0Vsc2UoU3RyaW5nIHVybCkKLSNlbmRpZgotICAgIERp
ZFJlY2VpdmVQb2xpY3lEZWNpc2lvbih1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBsaXN0ZW5l
cklELCB1aW50MzJfdCBwb2xpY3lBY3Rpb24pCi0gICAgQ2xvc2UoKQotCi0gICAgUHJlZmVyZW5j
ZXNEaWRDaGFuZ2UoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlIHN0b3JlKQotICAgIFNlbmRE
b3VibGVBbmRGbG9hdChkb3VibGUgZCwgZmxvYXQgZikKLSAgICBTZW5kSW50cyhWZWN0b3I8dWlu
dDY0X3Q+IGludHMsIFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+PiBpbnRWZWN0b3JzKQotCi0gICAg
Q3JlYXRlUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkluc3RhbmNlSUQsIFdlYktpdDo6UGx1Z2luOjpQ
YXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChib29sIHJlc3VsdCkKLSAgICBSdW5KYXZhU2NyaXB0
QWxlcnQodWludDY0X3QgZnJhbWVJRCwgU3RyaW5nIG1lc3NhZ2UpIC0+ICgpCi0gICAgR2V0UGx1
Z2lucyhib29sIHJlZnJlc2gpIC0+IChWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4gcGx1Z2lu
cykKLSAgICBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihTdHJpbmcgcGx1Z2luUGF0aCkgLT4g
KElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlIGNvbm5lY3Rpb25IYW5kbGUpIFN5bmNocm9ub3VzCi0K
LSAgICBUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzKCkgLT4gKCkgV2FudHNDb25uZWN0aW9uIFN5bmNo
cm9ub3VzCi0KLSAgICBUZXN0UGFyYW1ldGVyQXR0cmlidXRlcyhbQXR0cmlidXRlT25lIEF0dHJp
YnV0ZVR3b10gdWludDY0X3QgZm9vLCBkb3VibGUgYmFyLCBbQXR0cmlidXRlVGhyZWVdIGRvdWJs
ZSBiYXopCi0KLSAgICBUZW1wbGF0ZVRlc3QoSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJp
bmcsIHVpbnQ2NF90Pj4gYSkKLQotICAgIFNldFZpZGVvTGF5ZXJJRChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyOjpQbGF0Zm9ybUxheWVySUQgdmlkZW9MYXllcklEKQotCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uKElQQzo6TWFjaFBvcnQgY29ubmVj
dGlvbklkZW50aWZpZXIsIE9wdGlvblNldDxXZWJLaXQ6OlNlbGVjdGlvbkZsYWdzPiBmbGFncykK
LSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICMgS2V5Ym9hcmQgc3VwcG9ydAotICAg
IEludGVycHJldEtleUV2ZW50KHVpbnQzMl90IHR5cGUpIC0+IChWZWN0b3I8V2ViQ29yZTo6S2V5
cHJlc3NDb21tYW5kPiBjb21tYW5kTmFtZSkKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERFUFJFQ0FU
RURfRkVBVFVSRSkKLSAgICBEZXByZWNhdGVkT3BlcmF0aW9uKElQQzo6RHVtbXlUeXBlIGR1bW15
KQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCi0gICAgRXhwZXJp
bWVudGFsT3BlcmF0aW9uKElQQzo6RHVtbXlUeXBlIGR1bW15KQotI2VuZGlmCi19Ci0KLSNlbmRp
ZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3Rz
L01ha2VmaWxlIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NYWtlZmlsZQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43YmEyNDE4YWMwM2VhMDMwYjZiN2IyNWM3YzkzMTEwMTJmYjM3NWYyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NYWtlZmls
ZQpAQCAtMCwwICsxLDIgQEAKK2FsbDoKKwlweXRob24gLi4vLi4vZ2VuZXJhdGUtbWVzc2FnZS1y
ZWNlaXZlci5weSAuIFRlc3RXaXRoU3VwZXJjbGFzcyBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyIFRl
c3RXaXRob3V0QXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dl
YmtpdC90ZXN0cy9NZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwIGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ5ODM3MzkxYzE3MTA5OTQ4OTM2MDRjMGIyOTIzNWYzMGI3OTI3MTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL01lc3NhZ2VB
cmd1bWVudERlc2NyaXB0aW9ucy5jcHAKQEAgLTAsMCArMSw1ODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVzc2FnZUFyZ3VtZW50RGVzY3Jp
cHRpb25zLmgiCisKKyNpZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorCisjaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaWYgRU5BQkxFKERFUFJF
Q0FURURfRkVBVFVSRSkgfHwgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQorI2luY2x1ZGUg
IkR1bW15VHlwZS5oIgorI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIkdlc3R1
cmVUeXBlcy5oIgorI2VuZGlmCisjaW5jbHVkZSAiSlNJUENCaW5kaW5nLmgiCisjaWYgUExBVEZP
Uk0oTUFDKQorI2luY2x1ZGUgIk1hY2hQb3J0LmgiCisjZW5kaWYKKyNpbmNsdWRlICJQbHVnaW4u
aCIKKyNpbmNsdWRlICJUZXN0Q2xhc3NOYW1lLmgiCisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkK
KyNpbmNsdWRlICJUZXN0VHdvU3RhdGVFbnVtLmgiCisjZW5kaWYKKyNpbmNsdWRlICJUZXN0V2l0
aExlZ2FjeVJlY2VpdmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJUZXN0V2l0aFN1cGVyY2xhc3NN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIlRlc3RXaXRob3V0QXR0cmlidXRlc01lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5j
ZXNTdG9yZS5oIgorI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0Vf
Q09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKSB8fCAoRU5BQkxFKFRP
VUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiB8fCBTT01FX09USEVSX01F
U1NBR0VfQ09ORElUSU9OKSkKKyNpbmNsdWRlICJXZWJUb3VjaEV2ZW50LmgiCisjZW5kaWYKKyNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpZiBQTEFURk9STShNQUMpCisjaW5j
bHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxXZWJDb3Jl
L1BsdWdpbkRhdGEuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNlbmRp
ZgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK09wdGlv
bmFsPEpTQzo6SlNWYWx1ZT4ganNWYWx1ZUZvckFyZ3VtZW50cyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIE1lc3NhZ2VOYW1lIG5hbWUsIERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgc3dpdGNoIChuYW1lKSB7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNs
YXNzX0xvYWRVUkw6CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxN
ZXNzYWdlczo6VGVzdFdpdGhTdXBlcmNsYXNzOjpMb2FkVVJMOjpBcmd1bWVudHM+KGdsb2JhbE9i
amVjdCwgZGVjb2Rlcik7CisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKKyAgICBjYXNlIE1lc3Nh
Z2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZToKKyAgICAgICAgcmV0
dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xh
c3M6OlRlc3RBc3luY01lc3NhZ2U6OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsK
KyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2Fn
ZVdpdGhOb0FyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1l
bnRzPE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3luY01lc3NhZ2VXaXRoTm9B
cmd1bWVudHM6OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBs
ZUFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1l
c3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVB
cmd1bWVudHM6OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0
aW9uOgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6
OlRlc3RXaXRoU3VwZXJjbGFzczo6VGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uOjpBcmd1
bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisjZW5kaWYKKyAgICBjYXNlIE1lc3NhZ2VO
YW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdFN5bmNNZXNzYWdlOgorICAgICAgICByZXR1cm4g
anNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRoU3VwZXJjbGFzczo6
VGVzdFN5bmNNZXNzYWdlOjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisgICAg
Y2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RTeW5jaHJvbm91c01lc3Nh
Z2U6CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6
VGVzdFdpdGhTdXBlcmNsYXNzOjpUZXN0U3luY2hyb25vdXNNZXNzYWdlOjpBcmd1bWVudHM+KGds
b2JhbE9iamVjdCwgZGVjb2Rlcik7CisjaWYgKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01B
U1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQorICAgIGNhc2UgTWVz
c2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfTG9hZFVSTDoKKyAgICAgICAgcmV0dXJu
IGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2Vp
dmVyOjpMb2FkVVJMOjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJl
Y2VpdmVyX0xvYWRTb21ldGhpbmc6CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFy
Z3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6TG9hZFNvbWV0aGluZzo6
QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIpOworI2VuZGlmCisjaWYgKEVOQUJMRShU
T1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9N
RVNTQUdFX0NPTkRJVElPTikpCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lS
ZWNlaXZlcl9Ub3VjaEV2ZW50OgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1
bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OlRvdWNoRXZlbnQ6OkFyZ3Vt
ZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsKKyNlbmRpZgorI2lmIChFTkFCTEUoVE9VQ0hf
RVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FH
RV9DT05ESVRJT04pKQorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2
ZXJfQWRkRXZlbnQ6CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxN
ZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6QWRkRXZlbnQ6OkFyZ3VtZW50cz4oZ2xv
YmFsT2JqZWN0LCBkZWNvZGVyKTsKKyNlbmRpZgorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisg
ICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9Mb2FkU29tZXRoaW5n
RWxzZToKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2Vz
OjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpMb2FkU29tZXRoaW5nRWxzZTo6QXJndW1lbnRzPihn
bG9iYWxPYmplY3QsIGRlY29kZXIpOworI2VuZGlmCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVz
dFdpdGhMZWdhY3lSZWNlaXZlcl9EaWRSZWNlaXZlUG9saWN5RGVjaXNpb246CisgICAgICAgIHJl
dHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lS
ZWNlaXZlcjo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uOjpBcmd1bWVudHM+KGdsb2JhbE9iamVj
dCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZl
cl9DbG9zZToKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3Nh
Z2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpDbG9zZTo6QXJndW1lbnRzPihnbG9iYWxPYmpl
Y3QsIGRlY29kZXIpOworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2
ZXJfUHJlZmVyZW5jZXNEaWRDaGFuZ2U6CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2Rl
ZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6UHJlZmVyZW5jZXNE
aWRDaGFuZ2U6OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1NlbmREb3VibGVBbmRGbG9hdDoKKyAg
ICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0
aExlZ2FjeVJlY2VpdmVyOjpTZW5kRG91YmxlQW5kRmxvYXQ6OkFyZ3VtZW50cz4oZ2xvYmFsT2Jq
ZWN0LCBkZWNvZGVyKTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2Vp
dmVyX1NlbmRJbnRzOgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8
TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OlNlbmRJbnRzOjpBcmd1bWVudHM+KGds
b2JhbE9iamVjdCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdh
Y3lSZWNlaXZlcl9DcmVhdGVQbHVnaW46CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2Rl
ZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6Q3JlYXRlUGx1Z2lu
OjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFt
ZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9SdW5KYXZhU2NyaXB0QWxlcnQ6CisgICAgICAgIHJl
dHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lS
ZWNlaXZlcjo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVj
b2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9HZXRQ
bHVnaW5zOgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2Fn
ZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkdldFBsdWdpbnM6OkFyZ3VtZW50cz4oZ2xvYmFs
T2JqZWN0LCBkZWNvZGVyKTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJl
Y2VpdmVyX0dldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOgorICAgICAgICByZXR1cm4ganNWYWx1
ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6Okdl
dFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rl
cik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9UZXN0TXVs
dGlwbGVBdHRyaWJ1dGVzOgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVu
dHM8TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OlRlc3RNdWx0aXBsZUF0dHJpYnV0
ZXM6OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsKKyAgICBjYXNlIE1lc3NhZ2VO
YW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Rlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzOgorICAg
ICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRo
TGVnYWN5UmVjZWl2ZXI6OlRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzOjpBcmd1bWVudHM+KGdsb2Jh
bE9iamVjdCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lS
ZWNlaXZlcl9UZW1wbGF0ZVRlc3Q6CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFy
Z3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6VGVtcGxhdGVUZXN0OjpB
cmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6
VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9TZXRWaWRlb0xheWVySUQ6CisgICAgICAgIHJldHVybiBq
c1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZl
cjo6U2V0VmlkZW9MYXllcklEOjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVj
ZWl2ZXJfRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb246CisgICAgICAgIHJldHVybiBqc1Zh
bHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6
RGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBk
ZWNvZGVyKTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0lu
dGVycHJldEtleUV2ZW50OgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVu
dHM8TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkludGVycHJldEtleUV2ZW50OjpB
cmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisjZW5kaWYKKyNpZiBFTkFCTEUoREVQ
UkVDQVRFRF9GRUFUVVJFKQorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVj
ZWl2ZXJfRGVwcmVjYXRlZE9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNv
ZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpEZXByZWNhdGVk
T3BlcmF0aW9uOjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVz
dFdpdGhMZWdhY3lSZWNlaXZlcl9FeHBlcmltZW50YWxPcGVyYXRpb246CisgICAgICAgIHJldHVy
biBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNl
aXZlcjo6RXhwZXJpbWVudGFsT3BlcmF0aW9uOjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVj
b2Rlcik7CisjZW5kaWYKKyNlbmRpZgorI2lmIChFTkFCTEUoV0VCS0lUMikgJiYgKE5FU1RFRF9N
QVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNURVJfQU5EKSkKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfTG9hZFVSTDoKKyAgICAgICAgcmV0dXJu
IGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0
ZXM6OkxvYWRVUkw6OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmli
dXRlc19Mb2FkU29tZXRoaW5nOgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1
bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6TG9hZFNvbWV0aGluZzo6QXJn
dW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIpOworI2VuZGlmCisjaWYgKEVOQUJMRShUT1VD
SF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNT
QUdFX0NPTkRJVElPTikpCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1
dGVzX1RvdWNoRXZlbnQ6CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50
czxNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpUb3VjaEV2ZW50OjpBcmd1bWVudHM+
KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisjZW5kaWYKKyNpZiAoRU5BQkxFKFRPVUNIX0VWRU5U
UykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09O
RElUSU9OKSkKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQWRk
RXZlbnQ6CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdl
czo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpBZGRFdmVudDo6QXJndW1lbnRzPihnbG9iYWxPYmpl
Y3QsIGRlY29kZXIpOworI2VuZGlmCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBjYXNl
IE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfTG9hZFNvbWV0aGluZ0Vsc2U6Cisg
ICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdp
dGhvdXRBdHRyaWJ1dGVzOjpMb2FkU29tZXRoaW5nRWxzZTo6QXJndW1lbnRzPihnbG9iYWxPYmpl
Y3QsIGRlY29kZXIpOworI2VuZGlmCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRB
dHRyaWJ1dGVzX0RpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbjoKKyAgICAgICAgcmV0dXJuIGpzVmFs
dWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OkRp
ZFJlY2VpdmVQb2xpY3lEZWNpc2lvbjo6QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIp
OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19DbG9zZToKKyAg
ICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0
aG91dEF0dHJpYnV0ZXM6OkNsb3NlOjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7
CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1ByZWZlcmVuY2Vz
RGlkQ2hhbmdlOgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVz
c2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6UHJlZmVyZW5jZXNEaWRDaGFuZ2U6OkFyZ3Vt
ZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0
V2l0aG91dEF0dHJpYnV0ZXNfU2VuZERvdWJsZUFuZEZsb2F0OgorICAgICAgICByZXR1cm4ganNW
YWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6
U2VuZERvdWJsZUFuZEZsb2F0OjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7Cisg
ICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1NlbmRJbnRzOgorICAg
ICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRo
b3V0QXR0cmlidXRlczo6U2VuZEludHM6OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVy
KTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQ3JlYXRlUGx1
Z2luOgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6
OlRlc3RXaXRob3V0QXR0cmlidXRlczo6Q3JlYXRlUGx1Z2luOjpBcmd1bWVudHM+KGdsb2JhbE9i
amVjdCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1
dGVzX1J1bkphdmFTY3JpcHRBbGVydDoKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVk
QXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlJ1bkphdmFTY3JpcHRB
bGVydDo6QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIpOworICAgIGNhc2UgTWVzc2Fn
ZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19HZXRQbHVnaW5zOgorICAgICAgICByZXR1cm4g
anNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRl
czo6R2V0UGx1Z2luczo6QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIpOworICAgIGNh
c2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19HZXRQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbjoKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3Nh
Z2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpB
cmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6
VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1Rlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6CisgICAgICAgIHJl
dHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRy
aWJ1dGVzOjpUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwg
ZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1Rl
c3RQYXJhbWV0ZXJBdHRyaWJ1dGVzOgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRB
cmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6VGVzdFBhcmFtZXRlckF0
dHJpYnV0ZXM6OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfVGVtcGxhdGVUZXN0OgorICAgICAgICBy
ZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0
cmlidXRlczo6VGVtcGxhdGVUZXN0OjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7
CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1NldFZpZGVvTGF5
ZXJJRDoKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2Vz
OjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlNldFZpZGVvTGF5ZXJJRDo6QXJndW1lbnRzPihnbG9i
YWxPYmplY3QsIGRlY29kZXIpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBjYXNlIE1lc3NhZ2VO
YW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb246
CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVz
dFdpdGhvdXRBdHRyaWJ1dGVzOjpEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbjo6QXJndW1l
bnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIpOworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RX
aXRob3V0QXR0cmlidXRlc19JbnRlcnByZXRLZXlFdmVudDoKKyAgICAgICAgcmV0dXJuIGpzVmFs
dWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6Oklu
dGVycHJldEtleUV2ZW50OjpBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisjZW5k
aWYKKyNpZiBFTkFCTEUoREVQUkVDQVRFRF9GRUFUVVJFKQorICAgIGNhc2UgTWVzc2FnZU5hbWU6
OlRlc3RXaXRob3V0QXR0cmlidXRlc19EZXByZWNhdGVkT3BlcmF0aW9uOgorICAgICAgICByZXR1
cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmli
dXRlczo6RGVwcmVjYXRlZE9wZXJhdGlvbjo6QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29k
ZXIpOworI2VuZGlmCisjaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQorICAgIGNhc2Ug
TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19FeHBlcmltZW50YWxPcGVyYXRpb246
CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVz
dFdpdGhvdXRBdHRyaWJ1dGVzOjpFeHBlcmltZW50YWxPcGVyYXRpb246OkFyZ3VtZW50cz4oZ2xv
YmFsT2JqZWN0LCBkZWNvZGVyKTsKKyNlbmRpZgorI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFs
PEpTQzo6SlNWYWx1ZT4ganNWYWx1ZUZvclJlcGx5QXJndW1lbnRzKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgTWVzc2FnZU5hbWUgbmFtZSwgRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBzd2l0Y2ggKG5hbWUpIHsKKyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorICAgIGNhc2Ug
TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlOgorICAgICAg
ICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRoU3Vw
ZXJjbGFzczo6VGVzdEFzeW5jTWVzc2FnZTo6UmVwbHlBcmd1bWVudHM+KGdsb2JhbE9iamVjdCwg
ZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RB
c3luY01lc3NhZ2VXaXRoTm9Bcmd1bWVudHM6CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVj
b2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhTdXBlcmNsYXNzOjpUZXN0QXN5bmNNZXNz
YWdlV2l0aE5vQXJndW1lbnRzOjpSZXBseUFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVy
KTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVz
c2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNv
ZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3luY01lc3Nh
Z2VXaXRoTXVsdGlwbGVBcmd1bWVudHM6OlJlcGx5QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRl
Y29kZXIpOworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5
bmNNZXNzYWdlV2l0aENvbm5lY3Rpb246CisgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2Rl
ZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhTdXBlcmNsYXNzOjpUZXN0QXN5bmNNZXNzYWdl
V2l0aENvbm5lY3Rpb246OlJlcGx5QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIpOwor
I2VuZGlmCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RTeW5j
TWVzc2FnZToKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3Nh
Z2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RTeW5jTWVzc2FnZTo6UmVwbHlBcmd1bWVudHM+
KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhT
dXBlcmNsYXNzX1Rlc3RTeW5jaHJvbm91c01lc3NhZ2U6CisgICAgICAgIHJldHVybiBqc1ZhbHVl
Rm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhTdXBlcmNsYXNzOjpUZXN0U3lu
Y2hyb25vdXNNZXNzYWdlOjpSZXBseUFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsK
KyNpZiAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNU
RVJfT1IgJiYgTUFTVEVSX0FORCkpCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdh
Y3lSZWNlaXZlcl9HZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjoKKyAgICAgICAgcmV0dXJuIGpz
VmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVy
OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6UmVwbHlBcmd1bWVudHM+KGdsb2JhbE9iamVj
dCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZl
cl9UZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOgorICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29k
ZWRBcmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OlRlc3RNdWx0aXBs
ZUF0dHJpYnV0ZXM6OlJlcGx5QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIpOworI2Vu
ZGlmCisjaWYgKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwg
TUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRo
b3V0QXR0cmlidXRlc19HZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjoKKyAgICAgICAgcmV0dXJu
IGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0
ZXM6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpSZXBseUFyZ3VtZW50cz4oZ2xvYmFsT2Jq
ZWN0LCBkZWNvZGVyKTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0
ZXNfVGVzdE11bHRpcGxlQXR0cmlidXRlczoKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNv
ZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlRlc3RNdWx0aXBs
ZUF0dHJpYnV0ZXM6OlJlcGx5QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIpOworI2Vu
ZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPj4gbWVz
c2FnZUFyZ3VtZW50RGVzY3JpcHRpb25zKE1lc3NhZ2VOYW1lIG5hbWUpCit7CisgICAgc3dpdGNo
IChuYW1lKSB7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX0xvYWRV
Ukw6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAg
ICAgICAgeyJ1cmwiLCAiU3RyaW5nIiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworI2lm
IEVOQUJMRShURVNUX0ZFQVRVUkUpCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBl
cmNsYXNzX1Rlc3RBc3luY01lc3NhZ2U6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnRE
ZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJ0d29TdGF0ZUVudW0iLCAiYm9vbCIsICJXZWJL
aXQ6OlRlc3RUd29TdGF0ZUVudW0iLCBmYWxzZX0sCisgICAgICAgIH07CisgICAgY2FzZSBNZXNz
YWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoTm9Bcmd1bWVu
dHM6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geyB9OworICAg
IGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlV2l0
aE11bHRpcGxlQXJndW1lbnRzOgorICAgICAgICByZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3Jp
cHRpb24+IHsgfTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVz
dEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uOgorICAgICAgICByZXR1cm4gVmVjdG9yPEFyZ3Vt
ZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsidmFsdWUiLCAiaW50IiwgbnVsbHB0ciwg
ZmFsc2V9LAorICAgICAgICB9OworI2VuZGlmCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdp
dGhTdXBlcmNsYXNzX1Rlc3RTeW5jTWVzc2FnZToKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1
bWVudERlc2NyaXB0aW9uPiB7CisgICAgICAgICAgICB7InBhcmFtIiwgInVpbnQzMl90IiwgbnVs
bHB0ciwgZmFsc2V9LAorICAgICAgICB9OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRo
U3VwZXJjbGFzc19UZXN0U3luY2hyb25vdXNNZXNzYWdlOgorICAgICAgICByZXR1cm4gVmVjdG9y
PEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsidmFsdWUiLCAiYm9vbCIsIG51
bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyNpZiAoRU5BQkxFKFdFQktJVDIpICYmIChORVNU
RURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCisgICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9Mb2FkVVJMOgorICAgICAgICBy
ZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsidXJsIiwg
IlN0cmluZyIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfTG9h
ZFNvbWV0aGluZzoKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7
CisgICAgICAgICAgICB7InVybCIsICJTdHJpbmciLCBudWxscHRyLCBmYWxzZX0sCisgICAgICAg
IH07CisjZW5kaWYKKyNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdF
X0NPTkRJVElPTiB8fCBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1RvdWNoRXZlbnQ6CisgICAgICAgIHJl
dHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJldmVudCIs
ICJXZWJLaXQ6OldlYlRvdWNoRXZlbnQiLCBudWxscHRyLCBmYWxzZX0sCisgICAgICAgIH07Cisj
ZW5kaWYKKyNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJ
VElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKKyAgICBjYXNlIE1lc3NhZ2VO
YW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0FkZEV2ZW50OgorICAgICAgICByZXR1cm4gVmVj
dG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsiZXZlbnQiLCAiV2ViS2l0
OjpXZWJUb3VjaEV2ZW50IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworI2VuZGlmCisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExl
Z2FjeVJlY2VpdmVyX0xvYWRTb21ldGhpbmdFbHNlOgorICAgICAgICByZXR1cm4gVmVjdG9yPEFy
Z3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsidXJsIiwgIlN0cmluZyIsIG51bGxw
dHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyNlbmRpZgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRl
c3RXaXRoTGVnYWN5UmVjZWl2ZXJfRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uOgorICAgICAgICBy
ZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsiZnJhbWVJ
RCIsICJ1aW50NjRfdCIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgICAgIHsibGlzdGVuZXJJ
RCIsICJ1aW50NjRfdCIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgICAgIHsicG9saWN5QWN0
aW9uIiwgInVpbnQzMl90IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworICAgIGNhc2Ug
TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfQ2xvc2U6CisgICAgICAgIHJldHVy
biBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geyB9OworICAgIGNhc2UgTWVzc2FnZU5hbWU6
OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfUHJlZmVyZW5jZXNEaWRDaGFuZ2U6CisgICAgICAgIHJl
dHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJzdG9yZSIs
ICJXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUiLCBudWxscHRyLCBmYWxzZX0sCisgICAgICAg
IH07CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9TZW5kRG91
YmxlQW5kRmxvYXQ6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4g
eworICAgICAgICAgICAgeyJkIiwgImRvdWJsZSIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAg
ICAgIHsiZiIsICJmbG9hdCIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyAgICBjYXNl
IE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1NlbmRJbnRzOgorICAgICAgICBy
ZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsiaW50cyIs
ICJWZWN0b3I8dWludDY0X3Q+IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICAgICAgeyJpbnRW
ZWN0b3JzIiwgIlZlY3RvcjxWZWN0b3I8dWludDY0X3Q+PiIsIG51bGxwdHIsIGZhbHNlfSwKKyAg
ICAgICAgfTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0Ny
ZWF0ZVBsdWdpbjoKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7
CisgICAgICAgICAgICB7InBsdWdpbkluc3RhbmNlSUQiLCAidWludDY0X3QiLCBudWxscHRyLCBm
YWxzZX0sCisgICAgICAgICAgICB7InBhcmFtZXRlcnMiLCAiV2ViS2l0OjpQbHVnaW46OlBhcmFt
ZXRlcnMiLCBudWxscHRyLCBmYWxzZX0sCisgICAgICAgIH07CisgICAgY2FzZSBNZXNzYWdlTmFt
ZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9SdW5KYXZhU2NyaXB0QWxlcnQ6CisgICAgICAgIHJl
dHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJmcmFtZUlE
IiwgInVpbnQ2NF90IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICAgICAgeyJtZXNzYWdlIiwg
IlN0cmluZyIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyAgICBjYXNlIE1lc3NhZ2VO
YW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0dldFBsdWdpbnM6CisgICAgICAgIHJldHVybiBW
ZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJyZWZyZXNoIiwgImJv
b2wiLCBudWxscHRyLCBmYWxzZX0sCisgICAgICAgIH07CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6
VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9HZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjoKKyAgICAg
ICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7CisgICAgICAgICAgICB7InBs
dWdpblBhdGgiLCAiU3RyaW5nIiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworICAgIGNh
c2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfVGVzdE11bHRpcGxlQXR0cmli
dXRlczoKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7IH07Cisg
ICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9UZXN0UGFyYW1ldGVy
QXR0cmlidXRlczoKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7
CisgICAgICAgICAgICB7ImZvbyIsICJ1aW50NjRfdCIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAg
ICAgICAgIHsiYmFyIiwgImRvdWJsZSIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgICAgIHsi
YmF6IiwgImRvdWJsZSIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1RlbXBsYXRlVGVzdDoKKyAgICAgICAg
cmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7CisgICAgICAgICAgICB7ImEiLCAi
SGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4iLCBudWxscHRyLCBm
YWxzZX0sCisgICAgICAgIH07CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lS
ZWNlaXZlcl9TZXRWaWRlb0xheWVySUQ6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnRE
ZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJ2aWRlb0xheWVySUQiLCAiV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyX0RpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uOgorICAgICAgICByZXR1cm4g
VmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsiY29ubmVjdGlvbklk
ZW50aWZpZXIiLCAiSVBDOjpNYWNoUG9ydCIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgICAg
IHsiZmxhZ3MiLCAiT3B0aW9uU2V0PFdlYktpdDo6U2VsZWN0aW9uRmxhZ3M+IiwgbnVsbHB0ciwg
ZmFsc2V9LAorICAgICAgICB9OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXJfSW50ZXJwcmV0S2V5RXZlbnQ6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1l
bnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJ0eXBlIiwgInVpbnQzMl90IiwgbnVsbHB0
ciwgZmFsc2V9LAorICAgICAgICB9OworI2VuZGlmCisjaWYgRU5BQkxFKERFUFJFQ0FURURfRkVB
VFVSRSkKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0RlcHJl
Y2F0ZWRPcGVyYXRpb246CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlv
bj4geworICAgICAgICAgICAgeyJkdW1teSIsICJJUEM6OkR1bW15VHlwZSIsIG51bGxwdHIsIGZh
bHNlfSwKKyAgICAgICAgfTsKKyNlbmRpZgorI2lmIEVOQUJMRShFWFBFUklNRU5UQUxfRkVBVFVS
RSkKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0V4cGVyaW1l
bnRhbE9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9u
PiB7CisgICAgICAgICAgICB7ImR1bW15IiwgIklQQzo6RHVtbXlUeXBlIiwgbnVsbHB0ciwgZmFs
c2V9LAorICAgICAgICB9OworI2VuZGlmCisjZW5kaWYKKyNpZiAoRU5BQkxFKFdFQktJVDIpICYm
IChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCisg
ICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0xvYWRVUkw6CisgICAg
ICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJ1
cmwiLCAiU3RyaW5nIiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVz
X0xvYWRTb21ldGhpbmc6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlv
bj4geworICAgICAgICAgICAgeyJ1cmwiLCAiU3RyaW5nIiwgbnVsbHB0ciwgZmFsc2V9LAorICAg
ICAgICB9OworI2VuZGlmCisjaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVT
U0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpCisgICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1RvdWNoRXZlbnQ6CisgICAgICAg
IHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJldmVu
dCIsICJXZWJLaXQ6OldlYlRvdWNoRXZlbnQiLCBudWxscHRyLCBmYWxzZX0sCisgICAgICAgIH07
CisjZW5kaWYKKyNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NP
TkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKKyAgICBjYXNlIE1lc3Nh
Z2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQWRkRXZlbnQ6CisgICAgICAgIHJldHVybiBW
ZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJldmVudCIsICJXZWJL
aXQ6OldlYlRvdWNoRXZlbnQiLCBudWxscHRyLCBmYWxzZX0sCisgICAgICAgIH07CisjZW5kaWYK
KyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRo
b3V0QXR0cmlidXRlc19Mb2FkU29tZXRoaW5nRWxzZToKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxB
cmd1bWVudERlc2NyaXB0aW9uPiB7CisgICAgICAgICAgICB7InVybCIsICJTdHJpbmciLCBudWxs
cHRyLCBmYWxzZX0sCisgICAgICAgIH07CisjZW5kaWYKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpU
ZXN0V2l0aG91dEF0dHJpYnV0ZXNfRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uOgorICAgICAgICBy
ZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsiZnJhbWVJ
RCIsICJ1aW50NjRfdCIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgICAgIHsibGlzdGVuZXJJ
RCIsICJ1aW50NjRfdCIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgICAgIHsicG9saWN5QWN0
aW9uIiwgInVpbnQzMl90IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworICAgIGNhc2Ug
TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19DbG9zZToKKyAgICAgICAgcmV0dXJu
IFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7IH07CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6
VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1ByZWZlcmVuY2VzRGlkQ2hhbmdlOgorICAgICAgICByZXR1
cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsic3RvcmUiLCAi
V2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlIiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9
OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19TZW5kRG91Ymxl
QW5kRmxvYXQ6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4gewor
ICAgICAgICAgICAgeyJkIiwgImRvdWJsZSIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgICAg
IHsiZiIsICJmbG9hdCIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfU2VuZEludHM6CisgICAgICAgIHJldHVy
biBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJpbnRzIiwgIlZl
Y3Rvcjx1aW50NjRfdD4iLCBudWxscHRyLCBmYWxzZX0sCisgICAgICAgICAgICB7ImludFZlY3Rv
cnMiLCAiVmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAg
ICB9OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19DcmVhdGVQ
bHVnaW46CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAg
ICAgICAgICAgeyJwbHVnaW5JbnN0YW5jZUlEIiwgInVpbnQ2NF90IiwgbnVsbHB0ciwgZmFsc2V9
LAorICAgICAgICAgICAgeyJwYXJhbWV0ZXJzIiwgIldlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJz
IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRl
c3RXaXRob3V0QXR0cmlidXRlc19SdW5KYXZhU2NyaXB0QWxlcnQ6CisgICAgICAgIHJldHVybiBW
ZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJmcmFtZUlEIiwgInVp
bnQ2NF90IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICAgICAgeyJtZXNzYWdlIiwgIlN0cmlu
ZyIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpU
ZXN0V2l0aG91dEF0dHJpYnV0ZXNfR2V0UGx1Z2luczoKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxB
cmd1bWVudERlc2NyaXB0aW9uPiB7CisgICAgICAgICAgICB7InJlZnJlc2giLCAiYm9vbCIsIG51
bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0
aG91dEF0dHJpYnV0ZXNfR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246CisgICAgICAgIHJldHVy
biBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJwbHVnaW5QYXRo
IiwgIlN0cmluZyIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyAgICBjYXNlIE1lc3Nh
Z2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfVGVzdE11bHRpcGxlQXR0cmlidXRlczoKKyAg
ICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7IH07CisgICAgY2FzZSBN
ZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1Rlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVz
OgorICAgICAgICByZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAg
ICAgIHsiZm9vIiwgInVpbnQ2NF90IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICAgICAgeyJi
YXIiLCAiZG91YmxlIiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICAgICAgeyJiYXoiLCAiZG91
YmxlIiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworICAgIGNhc2UgTWVzc2FnZU5hbWU6
OlRlc3RXaXRob3V0QXR0cmlidXRlc19UZW1wbGF0ZVRlc3Q6CisgICAgICAgIHJldHVybiBWZWN0
b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJhIiwgIkhhc2hNYXA8U3Ry
aW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRfdD4+IiwgbnVsbHB0ciwgZmFsc2V9LAorICAg
ICAgICB9OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19TZXRW
aWRlb0xheWVySUQ6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4g
eworICAgICAgICAgICAgeyJ2aWRlb0xheWVySUQiLCAiV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
UGxhdGZvcm1MYXllcklEIiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfRGlk
Q3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb246CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1l
bnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJjb25uZWN0aW9uSWRlbnRpZmllciIsICJJ
UEM6Ok1hY2hQb3J0IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICAgICAgeyJmbGFncyIsICJP
cHRpb25TZXQ8V2ViS2l0OjpTZWxlY3Rpb25GbGFncz4iLCBudWxscHRyLCBmYWxzZX0sCisgICAg
ICAgIH07CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0ludGVy
cHJldEtleUV2ZW50OgorICAgICAgICByZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+
IHsKKyAgICAgICAgICAgIHsidHlwZSIsICJ1aW50MzJfdCIsIG51bGxwdHIsIGZhbHNlfSwKKyAg
ICAgICAgfTsKKyNlbmRpZgorI2lmIEVOQUJMRShERVBSRUNBVEVEX0ZFQVRVUkUpCisgICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0RlcHJlY2F0ZWRPcGVyYXRpb246
CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAg
ICAgeyJkdW1teSIsICJJUEM6OkR1bW15VHlwZSIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAg
fTsKKyNlbmRpZgorI2lmIEVOQUJMRShFWFBFUklNRU5UQUxfRkVBVFVSRSkKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfRXhwZXJpbWVudGFsT3BlcmF0aW9uOgor
ICAgICAgICByZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAg
IHsiZHVtbXkiLCAiSVBDOjpEdW1teVR5cGUiLCBudWxscHRyLCBmYWxzZX0sCisgICAgICAgIH07
CisjZW5kaWYKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitPcHRpb25hbDxWZWN0b3I8QXJndW1lbnREZXNj
cmlwdGlvbj4+IG1lc3NhZ2VSZXBseUFyZ3VtZW50RGVzY3JpcHRpb25zKE1lc3NhZ2VOYW1lIG5h
bWUpCit7CisgICAgc3dpdGNoIChuYW1lKSB7CisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKKyAg
ICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZToK
KyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7CisgICAgICAgICAg
ICB7InJlc3VsdCIsICJ1aW50NjRfdCIsIG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyAg
ICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZVdp
dGhOb0FyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9u
PiB7IH07CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3lu
Y01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBWZWN0b3I8QXJn
dW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJmbGFnIiwgImJvb2wiLCBudWxscHRy
LCBmYWxzZX0sCisgICAgICAgICAgICB7InZhbHVlIiwgInVpbnQ2NF90IiwgbnVsbHB0ciwgZmFs
c2V9LAorICAgICAgICB9OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFz
c19UZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb246CisgICAgICAgIHJldHVybiBWZWN0b3I8
QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJmbGFnIiwgImJvb2wiLCBudWxs
cHRyLCBmYWxzZX0sCisgICAgICAgIH07CisjZW5kaWYKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpU
ZXN0V2l0aFN1cGVyY2xhc3NfVGVzdFN5bmNNZXNzYWdlOgorICAgICAgICByZXR1cm4gVmVjdG9y
PEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsicmVwbHkiLCAidWludDhfdCIs
IG51bGxwdHIsIGZhbHNlfSwKKyAgICAgICAgfTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0
V2l0aFN1cGVyY2xhc3NfVGVzdFN5bmNocm9ub3VzTWVzc2FnZToKKyAgICAgICAgcmV0dXJuIFZl
Y3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPiB7CisgICAgICAgICAgICB7Im9wdGlvbmFsUmVwbHki
LCAiV2ViS2l0OjpUZXN0Q2xhc3NOYW1lIiwgbnVsbHB0ciwgdHJ1ZX0sCisgICAgICAgIH07Cisj
aWYgKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVS
X09SICYmIE1BU1RFUl9BTkQpKQorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXJfR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246CisgICAgICAgIHJldHVybiBWZWN0
b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geworICAgICAgICAgICAgeyJjb25uZWN0aW9uSGFuZGxl
IiwgIklQQzo6Q29ubmVjdGlvbjo6SGFuZGxlIiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9
OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfVGVzdE11bHRp
cGxlQXR0cmlidXRlczoKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9u
PiB7IH07CisjZW5kaWYKKyNpZiAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NP
TkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCisgICAgY2FzZSBNZXNzYWdlTmFt
ZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0dldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOgorICAg
ICAgICByZXR1cm4gVmVjdG9yPEFyZ3VtZW50RGVzY3JpcHRpb24+IHsKKyAgICAgICAgICAgIHsi
Y29ubmVjdGlvbkhhbmRsZSIsICJJUEM6OkNvbm5lY3Rpb246OkhhbmRsZSIsIG51bGxwdHIsIGZh
bHNlfSwKKyAgICAgICAgfTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJp
YnV0ZXNfVGVzdE11bHRpcGxlQXR0cmlidXRlczoKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1
bWVudERlc2NyaXB0aW9uPiB7IH07CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworYm9vbCBtZXNzYWdlSXNT
eW5jKE1lc3NhZ2VOYW1lIG5hbWUpCit7CisgICAgc3dpdGNoIChuYW1lKSB7CisgICAgY2FzZSBN
ZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RTeW5jTWVzc2FnZToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rl
c3RTeW5jaHJvbm91c01lc3NhZ2U6CisgICAgICAgIHJldHVybiB0cnVlOworI2lmIChFTkFCTEUo
V0VCS0lUMikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9PUiAmJiBNQVNU
RVJfQU5EKSkKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0dl
dFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNl
IE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Rlc3RNdWx0aXBsZUF0dHJpYnV0
ZXM6CisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisjaWYgKEVOQUJMRShXRUJLSVQyKSAm
JiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQor
ICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19HZXRQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBNZXNzYWdlTmFt
ZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1Rlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6CisgICAgICAg
IHJldHVybiB0cnVlOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NZXNzYWdl
TmFtZXMuY3BwIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NZXNzYWdlTmFt
ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIxYmY5NjM0OTg4YWYyNzYzNmNkNTY5MmM3YTM1MTdmNjI5ODY3
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3Rz
L01lc3NhZ2VOYW1lcy5jcHAKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisKK25hbWVzcGFj
ZSBJUEMgeworCitjb25zdCBjaGFyKiBkZXNjcmlwdGlvbihNZXNzYWdlTmFtZSBuYW1lKQorewor
ICAgIHN3aXRjaCAobmFtZSkgeworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXJfQWRkRXZlbnQ6CisgICAgICAgIHJldHVybiAiVGVzdFdpdGhMZWdhY3lSZWNlaXZl
cl9BZGRFdmVudCI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZl
cl9DbG9zZToKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0Nsb3NlIjsK
KyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0NyZWF0ZVBsdWdp
bjoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0NyZWF0ZVBsdWdpbiI7
CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9EZXByZWNhdGVk
T3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gIlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfRGVwcmVj
YXRlZE9wZXJhdGlvbiI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNl
aXZlcl9EaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbjoKKyAgICAgICAgcmV0dXJuICJUZXN0
V2l0aExlZ2FjeVJlY2VpdmVyX0RpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uIjsKKyAgICBj
YXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0RpZFJlY2VpdmVQb2xpY3lE
ZWNpc2lvbjoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0RpZFJlY2Vp
dmVQb2xpY3lEZWNpc2lvbiI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lS
ZWNlaXZlcl9FeHBlcmltZW50YWxPcGVyYXRpb246CisgICAgICAgIHJldHVybiAiVGVzdFdpdGhM
ZWdhY3lSZWNlaXZlcl9FeHBlcmltZW50YWxPcGVyYXRpb24iOworICAgIGNhc2UgTWVzc2FnZU5h
bWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246Cisg
ICAgICAgIHJldHVybiAiVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9HZXRQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbiI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9H
ZXRQbHVnaW5zOgorICAgICAgICByZXR1cm4gIlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfR2V0UGx1
Z2lucyI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9JbnRl
cnByZXRLZXlFdmVudDoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0lu
dGVycHJldEtleUV2ZW50IjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJl
Y2VpdmVyX0xvYWRTb21ldGhpbmc6CisgICAgICAgIHJldHVybiAiVGVzdFdpdGhMZWdhY3lSZWNl
aXZlcl9Mb2FkU29tZXRoaW5nIjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyX0xvYWRTb21ldGhpbmdFbHNlOgorICAgICAgICByZXR1cm4gIlRlc3RXaXRoTGVn
YWN5UmVjZWl2ZXJfTG9hZFNvbWV0aGluZ0Vsc2UiOworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRl
c3RXaXRoTGVnYWN5UmVjZWl2ZXJfTG9hZFVSTDoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aExl
Z2FjeVJlY2VpdmVyX0xvYWRVUkwiOworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVn
YWN5UmVjZWl2ZXJfUHJlZmVyZW5jZXNEaWRDaGFuZ2U6CisgICAgICAgIHJldHVybiAiVGVzdFdp
dGhMZWdhY3lSZWNlaXZlcl9QcmVmZXJlbmNlc0RpZENoYW5nZSI7CisgICAgY2FzZSBNZXNzYWdl
TmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9SdW5KYXZhU2NyaXB0QWxlcnQ6CisgICAgICAg
IHJldHVybiAiVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9SdW5KYXZhU2NyaXB0QWxlcnQiOworICAg
IGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfU2VuZERvdWJsZUFuZEZs
b2F0OgorICAgICAgICByZXR1cm4gIlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfU2VuZERvdWJsZUFu
ZEZsb2F0IjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Nl
bmRJbnRzOgorICAgICAgICByZXR1cm4gIlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfU2VuZEludHMi
OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfU2V0VmlkZW9M
YXllcklEOgorICAgICAgICByZXR1cm4gIlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfU2V0VmlkZW9M
YXllcklEIjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Rl
bXBsYXRlVGVzdDoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1RlbXBs
YXRlVGVzdCI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9U
ZXN0TXVsdGlwbGVBdHRyaWJ1dGVzOgorICAgICAgICByZXR1cm4gIlRlc3RXaXRoTGVnYWN5UmVj
ZWl2ZXJfVGVzdE11bHRpcGxlQXR0cmlidXRlcyI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVz
dFdpdGhMZWdhY3lSZWNlaXZlcl9UZXN0UGFyYW1ldGVyQXR0cmlidXRlczoKKyAgICAgICAgcmV0
dXJuICJUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Rlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzIjsKKyAg
ICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1RvdWNoRXZlbnQ6Cisg
ICAgICAgIHJldHVybiAiVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9Ub3VjaEV2ZW50IjsKKyAgICBj
YXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfTG9hZFVSTDoKKyAgICAgICAgcmV0
dXJuICJUZXN0V2l0aFN1cGVyY2xhc3NfTG9hZFVSTCI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6
VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2U6CisgICAgICAgIHJldHVybiAiVGVz
dFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2UiOworICAgIGNhc2UgTWVzc2FnZU5hbWU6
OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlUmVwbHk6CisgICAgICAgIHJldHVy
biAiVGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VSZXBseSI7CisgICAgY2FzZSBN
ZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVj
dGlvbjoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2Fn
ZVdpdGhDb25uZWN0aW9uIjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xh
c3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uUmVwbHk6CisgICAgICAgIHJldHVybiAi
VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVjdGlvblJlcGx5IjsK
KyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2Fn
ZVdpdGhNdWx0aXBsZUFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aFN1cGVyY2xh
c3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50cyI7CisgICAgY2FzZSBNZXNz
YWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVB
cmd1bWVudHNSZXBseToKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFz
eW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50c1JlcGx5IjsKKyAgICBjYXNlIE1lc3NhZ2VO
YW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50czoK
KyAgICAgICAgcmV0dXJuICJUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhO
b0FyZ3VtZW50cyI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rl
c3RBc3luY01lc3NhZ2VXaXRoTm9Bcmd1bWVudHNSZXBseToKKyAgICAgICAgcmV0dXJuICJUZXN0
V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50c1JlcGx5IjsKKyAg
ICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdFN5bmNNZXNzYWdlOgor
ICAgICAgICByZXR1cm4gIlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0U3luY01lc3NhZ2UiOworICAg
IGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0U3luY2hyb25vdXNNZXNz
YWdlOgorICAgICAgICByZXR1cm4gIlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0U3luY2hyb25vdXNN
ZXNzYWdlIjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQWRk
RXZlbnQ6CisgICAgICAgIHJldHVybiAiVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0FkZEV2ZW50IjsK
KyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQ2xvc2U6CisgICAg
ICAgIHJldHVybiAiVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0Nsb3NlIjsKKyAgICBjYXNlIE1lc3Nh
Z2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQ3JlYXRlUGx1Z2luOgorICAgICAgICByZXR1
cm4gIlRlc3RXaXRob3V0QXR0cmlidXRlc19DcmVhdGVQbHVnaW4iOworICAgIGNhc2UgTWVzc2Fn
ZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19EZXByZWNhdGVkT3BlcmF0aW9uOgorICAgICAg
ICByZXR1cm4gIlRlc3RXaXRob3V0QXR0cmlidXRlc19EZXByZWNhdGVkT3BlcmF0aW9uIjsKKyAg
ICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfRGlkQ3JlYXRlV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb246CisgICAgICAgIHJldHVybiAiVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0Rp
ZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uIjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0
V2l0aG91dEF0dHJpYnV0ZXNfRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uOgorICAgICAgICByZXR1
cm4gIlRlc3RXaXRob3V0QXR0cmlidXRlc19EaWRSZWNlaXZlUG9saWN5RGVjaXNpb24iOworICAg
IGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19FeHBlcmltZW50YWxPcGVy
YXRpb246CisgICAgICAgIHJldHVybiAiVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0V4cGVyaW1lbnRh
bE9wZXJhdGlvbiI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVz
X0dldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOgorICAgICAgICByZXR1cm4gIlRlc3RXaXRob3V0
QXR0cmlidXRlc19HZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbiI7CisgICAgY2FzZSBNZXNzYWdl
TmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0dldFBsdWdpbnM6CisgICAgICAgIHJldHVybiAi
VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0dldFBsdWdpbnMiOworICAgIGNhc2UgTWVzc2FnZU5hbWU6
OlRlc3RXaXRob3V0QXR0cmlidXRlc19JbnRlcnByZXRLZXlFdmVudDoKKyAgICAgICAgcmV0dXJu
ICJUZXN0V2l0aG91dEF0dHJpYnV0ZXNfSW50ZXJwcmV0S2V5RXZlbnQiOworICAgIGNhc2UgTWVz
c2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19Mb2FkU29tZXRoaW5nOgorICAgICAgICBy
ZXR1cm4gIlRlc3RXaXRob3V0QXR0cmlidXRlc19Mb2FkU29tZXRoaW5nIjsKKyAgICBjYXNlIE1l
c3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfTG9hZFNvbWV0aGluZ0Vsc2U6CisgICAg
ICAgIHJldHVybiAiVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0xvYWRTb21ldGhpbmdFbHNlIjsKKyAg
ICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfTG9hZFVSTDoKKyAgICAg
ICAgcmV0dXJuICJUZXN0V2l0aG91dEF0dHJpYnV0ZXNfTG9hZFVSTCI7CisgICAgY2FzZSBNZXNz
YWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1ByZWZlcmVuY2VzRGlkQ2hhbmdlOgorICAg
ICAgICByZXR1cm4gIlRlc3RXaXRob3V0QXR0cmlidXRlc19QcmVmZXJlbmNlc0RpZENoYW5nZSI7
CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1J1bkphdmFTY3Jp
cHRBbGVydDoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aG91dEF0dHJpYnV0ZXNfUnVuSmF2YVNj
cmlwdEFsZXJ0IjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNf
U2VuZERvdWJsZUFuZEZsb2F0OgorICAgICAgICByZXR1cm4gIlRlc3RXaXRob3V0QXR0cmlidXRl
c19TZW5kRG91YmxlQW5kRmxvYXQiOworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0
QXR0cmlidXRlc19TZW5kSW50czoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aG91dEF0dHJpYnV0
ZXNfU2VuZEludHMiOworICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRl
c19TZXRWaWRlb0xheWVySUQ6CisgICAgICAgIHJldHVybiAiVGVzdFdpdGhvdXRBdHRyaWJ1dGVz
X1NldFZpZGVvTGF5ZXJJRCI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRy
aWJ1dGVzX1RlbXBsYXRlVGVzdDoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aG91dEF0dHJpYnV0
ZXNfVGVtcGxhdGVUZXN0IjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJp
YnV0ZXNfVGVzdE11bHRpcGxlQXR0cmlidXRlczoKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aG91
dEF0dHJpYnV0ZXNfVGVzdE11bHRpcGxlQXR0cmlidXRlcyI7CisgICAgY2FzZSBNZXNzYWdlTmFt
ZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1Rlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzOgorICAgICAg
ICByZXR1cm4gIlRlc3RXaXRob3V0QXR0cmlidXRlc19UZXN0UGFyYW1ldGVyQXR0cmlidXRlcyI7
CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1RvdWNoRXZlbnQ6
CisgICAgICAgIHJldHVybiAiVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1RvdWNoRXZlbnQiOworICAg
IGNhc2UgTWVzc2FnZU5hbWU6OldyYXBwZWRBc3luY01lc3NhZ2VGb3JUZXN0aW5nOgorICAgICAg
ICByZXR1cm4gIklQQzo6V3JhcHBlZEFzeW5jTWVzc2FnZUZvclRlc3RpbmciOworICAgIGNhc2Ug
TWVzc2FnZU5hbWU6OlN5bmNNZXNzYWdlUmVwbHk6CisgICAgICAgIHJldHVybiAiSVBDOjpTeW5j
TWVzc2FnZVJlcGx5IjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpJbml0aWFsaXplQ29ubmVjdGlv
bjoKKyAgICAgICAgcmV0dXJuICJJUEM6OkluaXRpYWxpemVDb25uZWN0aW9uIjsKKyAgICBjYXNl
IE1lc3NhZ2VOYW1lOjpMZWdhY3lTZXNzaW9uU3RhdGU6CisgICAgICAgIHJldHVybiAiSVBDOjpM
ZWdhY3lTZXNzaW9uU3RhdGUiOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gIjxpbnZhbGlkIG1lc3NhZ2UgbmFtZT4iOworfQorCitSZWNlaXZlck5hbWUgcmVj
ZWl2ZXJOYW1lKE1lc3NhZ2VOYW1lIG1lc3NhZ2VOYW1lKQoreworICAgIHN3aXRjaCAobWVzc2Fn
ZU5hbWUpIHsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfTG9hZFVS
TDoKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVz
c2FnZToKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5j
TWVzc2FnZVdpdGhDb25uZWN0aW9uOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoU3Vw
ZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzOgorICAgIGNhc2Ug
TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlV2l0aE5vQXJn
dW1lbnRzOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0U3lu
Y01lc3NhZ2U6CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RT
eW5jaHJvbm91c01lc3NhZ2U6CisgICAgICAgIHJldHVybiBSZWNlaXZlck5hbWU6OlRlc3RXaXRo
U3VwZXJjbGFzczsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVy
X0FkZEV2ZW50OgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJf
Q2xvc2U6CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9DcmVh
dGVQbHVnaW46CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9E
ZXByZWNhdGVkT3BlcmF0aW9uOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXJfRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb246CisgICAgY2FzZSBNZXNzYWdl
TmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9EaWRSZWNlaXZlUG9saWN5RGVjaXNpb246Cisg
ICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9FeHBlcmltZW50YWxP
cGVyYXRpb246CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9H
ZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjoKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0
aExlZ2FjeVJlY2VpdmVyX0dldFBsdWdpbnM6CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdp
dGhMZWdhY3lSZWNlaXZlcl9JbnRlcnByZXRLZXlFdmVudDoKKyAgICBjYXNlIE1lc3NhZ2VOYW1l
OjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0xvYWRTb21ldGhpbmc6CisgICAgY2FzZSBNZXNzYWdl
TmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9Mb2FkU29tZXRoaW5nRWxzZToKKyAgICBjYXNl
IE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0xvYWRVUkw6CisgICAgY2FzZSBN
ZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9QcmVmZXJlbmNlc0RpZENoYW5nZToK
KyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1J1bkphdmFTY3Jp
cHRBbGVydDoKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Nl
bmREb3VibGVBbmRGbG9hdDoKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJl
Y2VpdmVyX1NlbmRJbnRzOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVj
ZWl2ZXJfU2V0VmlkZW9MYXllcklEOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVn
YWN5UmVjZWl2ZXJfVGVtcGxhdGVUZXN0OgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRo
TGVnYWN5UmVjZWl2ZXJfVGVzdE11bHRpcGxlQXR0cmlidXRlczoKKyAgICBjYXNlIE1lc3NhZ2VO
YW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Rlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzOgorICAg
IGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfVG91Y2hFdmVudDoKKyAg
ICAgICAgcmV0dXJuIFJlY2VpdmVyTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjsKKyAgICBj
YXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQWRkRXZlbnQ6CisgICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0Nsb3NlOgorICAgIGNhc2UgTWVz
c2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19DcmVhdGVQbHVnaW46CisgICAgY2FzZSBN
ZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0RlcHJlY2F0ZWRPcGVyYXRpb246Cisg
ICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0RpZENyZWF0ZVdlYlBy
b2Nlc3NDb25uZWN0aW9uOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmli
dXRlc19EaWRSZWNlaXZlUG9saWN5RGVjaXNpb246CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVz
dFdpdGhvdXRBdHRyaWJ1dGVzX0V4cGVyaW1lbnRhbE9wZXJhdGlvbjoKKyAgICBjYXNlIE1lc3Nh
Z2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246
CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0dldFBsdWdpbnM6
CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0ludGVycHJldEtl
eUV2ZW50OgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19Mb2Fk
U29tZXRoaW5nOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19M
b2FkU29tZXRoaW5nRWxzZToKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJp
YnV0ZXNfTG9hZFVSTDoKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0
ZXNfUHJlZmVyZW5jZXNEaWRDaGFuZ2U6CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhv
dXRBdHRyaWJ1dGVzX1J1bkphdmFTY3JpcHRBbGVydDoKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpU
ZXN0V2l0aG91dEF0dHJpYnV0ZXNfU2VuZERvdWJsZUFuZEZsb2F0OgorICAgIGNhc2UgTWVzc2Fn
ZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19TZW5kSW50czoKKyAgICBjYXNlIE1lc3NhZ2VO
YW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfU2V0VmlkZW9MYXllcklEOgorICAgIGNhc2UgTWVz
c2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19UZW1wbGF0ZVRlc3Q6CisgICAgY2FzZSBN
ZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1Rlc3RNdWx0aXBsZUF0dHJpYnV0ZXM6
CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1Rlc3RQYXJhbWV0
ZXJBdHRyaWJ1dGVzOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRl
c19Ub3VjaEV2ZW50OgorICAgICAgICByZXR1cm4gUmVjZWl2ZXJOYW1lOjpUZXN0V2l0aG91dEF0
dHJpYnV0ZXM7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RB
c3luY01lc3NhZ2VSZXBseToKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xh
c3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uUmVwbHk6CisgICAgY2FzZSBNZXNzYWdl
TmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1
bWVudHNSZXBseToKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVz
dEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50c1JlcGx5OgorICAgICAgICByZXR1cm4gUmVjZWl2
ZXJOYW1lOjpBc3luY1JlcGx5OworICAgIGNhc2UgTWVzc2FnZU5hbWU6OldyYXBwZWRBc3luY01l
c3NhZ2VGb3JUZXN0aW5nOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlN5bmNNZXNzYWdlUmVwbHk6
CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6SW5pdGlhbGl6ZUNvbm5lY3Rpb246CisgICAgY2FzZSBN
ZXNzYWdlTmFtZTo6TGVnYWN5U2Vzc2lvblN0YXRlOgorICAgICAgICByZXR1cm4gUmVjZWl2ZXJO
YW1lOjpJUEM7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBS
ZWNlaXZlck5hbWU6OkludmFsaWQ7Cit9CisKK2Jvb2wgaXNWYWxpZE1lc3NhZ2VOYW1lKE1lc3Nh
Z2VOYW1lIG1lc3NhZ2VOYW1lKQoreworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3Nh
Z2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfTG9hZFVSTCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpN
ZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2UpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpU
ZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZVJlcGx5KQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyNlbmRpZgorI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCisgICAgaWYgKG1lc3NhZ2VO
YW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNz
YWdlV2l0aE5vQXJndW1lbnRzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWVzc2Fn
ZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01l
c3NhZ2VXaXRoTm9Bcmd1bWVudHNSZXBseSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYK
KyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1l
c3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBs
ZUFyZ3VtZW50cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09
IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlV2l0
aE11bHRpcGxlQXJndW1lbnRzUmVwbHkpCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisj
aWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNz
YWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVjdGlv
bikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVz
c2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rp
b25SZXBseSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICBpZiAobWVzc2FnZU5h
bWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RTeW5jTWVzc2Fn
ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVz
c2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0U3luY2hyb25vdXNNZXNzYWdlKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFt
ZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9Mb2FkVVJMKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1l
c3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0xvYWRTb21ldGhpbmcpCisgICAgICAg
IHJldHVybiB0cnVlOworI2VuZGlmCisjaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNU
RURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpCisg
ICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVj
ZWl2ZXJfVG91Y2hFdmVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyNpZiAoRU5B
QkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09U
SEVSX01FU1NBR0VfQ09ORElUSU9OKSkKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNz
YWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9BZGRFdmVudCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisjZW5kaWYKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGlmIChtZXNzYWdl
TmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0xvYWRTb21l
dGhpbmdFbHNlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgIGlmIChtZXNzYWdl
TmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0RpZFJlY2Vp
dmVQb2xpY3lEZWNpc2lvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1lc3NhZ2VO
YW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfQ2xvc2UpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VO
YW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1ByZWZlcmVuY2VzRGlkQ2hhbmdlKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6
VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9TZW5kRG91YmxlQW5kRmxvYXQpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0
aExlZ2FjeVJlY2VpdmVyX1NlbmRJbnRzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
bWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9D
cmVhdGVQbHVnaW4pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9
PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1J1bkphdmFTY3JpcHRB
bGVydCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6
TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfR2V0UGx1Z2lucykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRl
c3RXaXRoTGVnYWN5UmVjZWl2ZXJfR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpU
ZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Rlc3RNdWx0aXBsZUF0dHJpYnV0ZXMpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0
V2l0aExlZ2FjeVJlY2VpdmVyX1Rlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdp
dGhMZWdhY3lSZWNlaXZlcl9UZW1wbGF0ZVRlc3QpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2Vp
dmVyX1NldFZpZGVvTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExl
Z2FjeVJlY2VpdmVyX0RpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAobWVzc2FnZU5hbWUg
PT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9JbnRlcnByZXRLZXlF
dmVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyNpZiBFTkFCTEUoREVQUkVDQVRF
RF9GRUFUVVJFKQorICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0
V2l0aExlZ2FjeVJlY2VpdmVyX0RlcHJlY2F0ZWRPcGVyYXRpb24pCisgICAgICAgIHJldHVybiB0
cnVlOworI2VuZGlmCisjaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQorICAgIGlmICht
ZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0V4
cGVyaW1lbnRhbE9wZXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICBp
ZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVz
X0xvYWRVUkwpCisgICAgICAgIHJldHVybiB0cnVlOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisgICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0
cmlidXRlc19Mb2FkU29tZXRoaW5nKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorI2lm
IChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OIHx8IFNP
TUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQorICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6
Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfVG91Y2hFdmVudCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisjZW5kaWYKKyNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RF
RF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKKyAg
ICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1
dGVzX0FkZEV2ZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisgICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRl
c3RXaXRob3V0QXR0cmlidXRlc19Mb2FkU29tZXRoaW5nRWxzZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisjZW5kaWYKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVz
dFdpdGhvdXRBdHRyaWJ1dGVzX0RpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RX
aXRob3V0QXR0cmlidXRlc19DbG9zZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1l
c3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19QcmVm
ZXJlbmNlc0RpZENoYW5nZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1lc3NhZ2VO
YW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19TZW5kRG91Ymxl
QW5kRmxvYXQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJ
UEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfU2VuZEludHMpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpU
ZXN0V2l0aG91dEF0dHJpYnV0ZXNfQ3JlYXRlUGx1Z2luKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRy
aWJ1dGVzX1J1bkphdmFTY3JpcHRBbGVydCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19H
ZXRQbHVnaW5zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0g
SVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0dldFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0g
SVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1Rlc3RNdWx0aXBsZUF0dHJp
YnV0ZXMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6
Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfVGVzdFBhcmFtZXRlckF0dHJpYnV0
ZXMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1l
c3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfVGVtcGxhdGVUZXN0KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVz
dFdpdGhvdXRBdHRyaWJ1dGVzX1NldFZpZGVvTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VO
YW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24p
CisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlm
IChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNf
SW50ZXJwcmV0S2V5RXZlbnQpCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisjaWYgRU5B
QkxFKERFUFJFQ0FURURfRkVBVFVSRSkKKyAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNz
YWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0RlcHJlY2F0ZWRPcGVyYXRpb24pCisgICAg
ICAgIHJldHVybiB0cnVlOworI2VuZGlmCisjaWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJF
KQorICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0
dHJpYnV0ZXNfRXhwZXJpbWVudGFsT3BlcmF0aW9uKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNl
bmRpZgorICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpXcmFwcGVkQXN5
bmNNZXNzYWdlRm9yVGVzdGluZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1lc3Nh
Z2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlN5bmNNZXNzYWdlUmVwbHkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChtZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpJbml0
aWFsaXplQ29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1lc3NhZ2VO
YW1lID09IElQQzo6TWVzc2FnZU5hbWU6OkxlZ2FjeVNlc3Npb25TdGF0ZSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL01lc3NhZ2VOYW1l
cy5oIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NZXNzYWdlTmFtZXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mM2I5OWQ2N2VjZTY5OGE4YTg0ZjU5NTRkOWUyNjI0MDFmMjQ2YTg3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NZXNzYWdl
TmFtZXMuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAq
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2Vu
dW0gY2xhc3MgUmVjZWl2ZXJOYW1lIDogdWludDhfdCB7CisgICAgVGVzdFdpdGhTdXBlcmNsYXNz
ID0gMQorICAgICwgVGVzdFdpdGhMZWdhY3lSZWNlaXZlciA9IDIKKyAgICAsIFRlc3RXaXRob3V0
QXR0cmlidXRlcyA9IDMKKyAgICAsIElQQyA9IDQKKyAgICAsIEFzeW5jUmVwbHkgPSA1CisgICAg
LCBJbnZhbGlkID0gNgorfTsKKworZW51bSBjbGFzcyBNZXNzYWdlTmFtZSA6IHVpbnQxNl90IHsK
KyAgICBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0FkZEV2ZW50CisgICAgLCBUZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyX0Nsb3NlCisgICAgLCBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0NyZWF0ZVBsdWdp
bgorICAgICwgVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9EZXByZWNhdGVkT3BlcmF0aW9uCisgICAg
LCBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0RpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uCisg
ICAgLCBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0RpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbgorICAg
ICwgVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9FeHBlcmltZW50YWxPcGVyYXRpb24KKyAgICAsIFRl
c3RXaXRoTGVnYWN5UmVjZWl2ZXJfR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24KKyAgICAsIFRl
c3RXaXRoTGVnYWN5UmVjZWl2ZXJfR2V0UGx1Z2lucworICAgICwgVGVzdFdpdGhMZWdhY3lSZWNl
aXZlcl9JbnRlcnByZXRLZXlFdmVudAorICAgICwgVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9Mb2Fk
U29tZXRoaW5nCisgICAgLCBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0xvYWRTb21ldGhpbmdFbHNl
CisgICAgLCBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0xvYWRVUkwKKyAgICAsIFRlc3RXaXRoTGVn
YWN5UmVjZWl2ZXJfUHJlZmVyZW5jZXNEaWRDaGFuZ2UKKyAgICAsIFRlc3RXaXRoTGVnYWN5UmVj
ZWl2ZXJfUnVuSmF2YVNjcmlwdEFsZXJ0CisgICAgLCBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Nl
bmREb3VibGVBbmRGbG9hdAorICAgICwgVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9TZW5kSW50cwor
ICAgICwgVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9TZXRWaWRlb0xheWVySUQKKyAgICAsIFRlc3RX
aXRoTGVnYWN5UmVjZWl2ZXJfVGVtcGxhdGVUZXN0CisgICAgLCBUZXN0V2l0aExlZ2FjeVJlY2Vp
dmVyX1Rlc3RNdWx0aXBsZUF0dHJpYnV0ZXMKKyAgICAsIFRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJf
VGVzdFBhcmFtZXRlckF0dHJpYnV0ZXMKKyAgICAsIFRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfVG91
Y2hFdmVudAorICAgICwgVGVzdFdpdGhTdXBlcmNsYXNzX0xvYWRVUkwKKyAgICAsIFRlc3RXaXRo
U3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlCisgICAgLCBUZXN0V2l0aFN1cGVyY2xhc3NfVGVz
dEFzeW5jTWVzc2FnZVJlcGx5CisgICAgLCBUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVz
c2FnZVdpdGhDb25uZWN0aW9uCisgICAgLCBUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVz
c2FnZVdpdGhDb25uZWN0aW9uUmVwbHkKKyAgICAsIFRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5
bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzCisgICAgLCBUZXN0V2l0aFN1cGVyY2xhc3Nf
VGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50c1JlcGx5CisgICAgLCBUZXN0V2l0
aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50cworICAgICwgVGVzdFdp
dGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoTm9Bcmd1bWVudHNSZXBseQorICAgICwg
VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RTeW5jTWVzc2FnZQorICAgICwgVGVzdFdpdGhTdXBlcmNs
YXNzX1Rlc3RTeW5jaHJvbm91c01lc3NhZ2UKKyAgICAsIFRlc3RXaXRob3V0QXR0cmlidXRlc19B
ZGRFdmVudAorICAgICwgVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0Nsb3NlCisgICAgLCBUZXN0V2l0
aG91dEF0dHJpYnV0ZXNfQ3JlYXRlUGx1Z2luCisgICAgLCBUZXN0V2l0aG91dEF0dHJpYnV0ZXNf
RGVwcmVjYXRlZE9wZXJhdGlvbgorICAgICwgVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0RpZENyZWF0
ZVdlYlByb2Nlc3NDb25uZWN0aW9uCisgICAgLCBUZXN0V2l0aG91dEF0dHJpYnV0ZXNfRGlkUmVj
ZWl2ZVBvbGljeURlY2lzaW9uCisgICAgLCBUZXN0V2l0aG91dEF0dHJpYnV0ZXNfRXhwZXJpbWVu
dGFsT3BlcmF0aW9uCisgICAgLCBUZXN0V2l0aG91dEF0dHJpYnV0ZXNfR2V0UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb24KKyAgICAsIFRlc3RXaXRob3V0QXR0cmlidXRlc19HZXRQbHVnaW5zCisgICAg
LCBUZXN0V2l0aG91dEF0dHJpYnV0ZXNfSW50ZXJwcmV0S2V5RXZlbnQKKyAgICAsIFRlc3RXaXRo
b3V0QXR0cmlidXRlc19Mb2FkU29tZXRoaW5nCisgICAgLCBUZXN0V2l0aG91dEF0dHJpYnV0ZXNf
TG9hZFNvbWV0aGluZ0Vsc2UKKyAgICAsIFRlc3RXaXRob3V0QXR0cmlidXRlc19Mb2FkVVJMCisg
ICAgLCBUZXN0V2l0aG91dEF0dHJpYnV0ZXNfUHJlZmVyZW5jZXNEaWRDaGFuZ2UKKyAgICAsIFRl
c3RXaXRob3V0QXR0cmlidXRlc19SdW5KYXZhU2NyaXB0QWxlcnQKKyAgICAsIFRlc3RXaXRob3V0
QXR0cmlidXRlc19TZW5kRG91YmxlQW5kRmxvYXQKKyAgICAsIFRlc3RXaXRob3V0QXR0cmlidXRl
c19TZW5kSW50cworICAgICwgVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1NldFZpZGVvTGF5ZXJJRAor
ICAgICwgVGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1RlbXBsYXRlVGVzdAorICAgICwgVGVzdFdpdGhv
dXRBdHRyaWJ1dGVzX1Rlc3RNdWx0aXBsZUF0dHJpYnV0ZXMKKyAgICAsIFRlc3RXaXRob3V0QXR0
cmlidXRlc19UZXN0UGFyYW1ldGVyQXR0cmlidXRlcworICAgICwgVGVzdFdpdGhvdXRBdHRyaWJ1
dGVzX1RvdWNoRXZlbnQKKyAgICAsIFdyYXBwZWRBc3luY01lc3NhZ2VGb3JUZXN0aW5nCisgICAg
LCBTeW5jTWVzc2FnZVJlcGx5CisgICAgLCBJbml0aWFsaXplQ29ubmVjdGlvbgorICAgICwgTGVn
YWN5U2Vzc2lvblN0YXRlCisgICAgLCBMYXN0ID0gTGVnYWN5U2Vzc2lvblN0YXRlCit9OworCitS
ZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1lKE1lc3NhZ2VOYW1lKTsKK2NvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKE1lc3NhZ2VOYW1lKTsKK2Jvb2wgaXNWYWxpZE1lc3NhZ2VOYW1lKE1lc3NhZ2VOYW1l
KTsKKworfSAvLyBuYW1lc3BhY2UgSVBDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+
CitjbGFzcyBIYXNDdXN0b21Jc1ZhbGlkRW51bTxJUEM6Ok1lc3NhZ2VOYW1lPiA6IHB1YmxpYyBz
dGQ6OnRydWVfdHlwZSB7IH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFLCB0eXBlbmFtZSBULCBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PEUsIElQQzo6TWVzc2FnZU5hbWU+PiogPSBudWxs
cHRyPgorYm9vbCBpc1ZhbGlkRW51bShUIG1lc3NhZ2VOYW1lKQoreworICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKFQpID09IHNpemVvZihFKSwgImlzVmFsaWRFbnVtPElQQzo6TWVzc2FnZU5hbWU+
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIDE2LWJpdCB0eXBlcyIpOworICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUsICJpc1ZhbGlkRW51bTxJUEM6Ok1lc3Nh
Z2VOYW1lPiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCB1bnNpZ25lZCB0eXBlcyIpOworICAg
IGlmIChtZXNzYWdlTmFtZSA+IHN0YXRpY19jYXN0PHN0ZDo6dW5kZXJseWluZ190eXBlPElQQzo6
TWVzc2FnZU5hbWU+Ojp0eXBlPihJUEM6Ok1lc3NhZ2VOYW1lOjpMYXN0KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBJUEM6OmlzVmFsaWRNZXNzYWdlTmFtZShzdGF0aWNfY2Fz
dDxFPihtZXNzYWdlTmFtZSkpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVjZWl2
ZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RX
aXRoTGVnYWN5UmVjZWl2ZXIubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlmOTk3Y2UwMDZiY2Vm
ODBmM2ViNzdjMTE4NDhlZjZjOWU5NmIxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhMZWdhY3lSZWNlaXZlci5tZXNzYWdlcy5p
bgpAQCAtMCwwICsxLDc3IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpZiBFTkFCTEUoV0VCS0lUMikKKyNpZiBORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBN
QVNURVJfT1IgJiYgTUFTVEVSX0FORAorCittZXNzYWdlcyAtPiBUZXN0V2l0aExlZ2FjeVJlY2Vp
dmVyIExlZ2FjeVJlY2VpdmVyIHsKKyAgICBMb2FkVVJMKFN0cmluZyB1cmwpCisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKKyAgICBMb2FkU29tZXRoaW5nKFN0cmluZyB1cmwpCisjaWYgTkVTVEVE
X01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04KKyAgICBU
b3VjaEV2ZW50KFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVudCkKKyNlbmRpZgorI2lmIE5FU1RF
RF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OCisgICAg
QWRkRXZlbnQoV2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQorI2VuZGlmCisgICAgTG9hZFNv
bWV0aGluZ0Vsc2UoU3RyaW5nIHVybCkKKyNlbmRpZgorICAgIERpZFJlY2VpdmVQb2xpY3lEZWNp
c2lvbih1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBsaXN0ZW5lcklELCB1aW50MzJfdCBwb2xp
Y3lBY3Rpb24pCisgICAgQ2xvc2UoKQorCisgICAgUHJlZmVyZW5jZXNEaWRDaGFuZ2UoV2ViS2l0
OjpXZWJQcmVmZXJlbmNlc1N0b3JlIHN0b3JlKQorICAgIFNlbmREb3VibGVBbmRGbG9hdChkb3Vi
bGUgZCwgZmxvYXQgZikKKyAgICBTZW5kSW50cyhWZWN0b3I8dWludDY0X3Q+IGludHMsIFZlY3Rv
cjxWZWN0b3I8dWludDY0X3Q+PiBpbnRWZWN0b3JzKQorCisgICAgQ3JlYXRlUGx1Z2luKHVpbnQ2
NF90IHBsdWdpbkluc3RhbmNlSUQsIFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzIHBhcmFtZXRl
cnMpIC0+IChib29sIHJlc3VsdCkKKyAgICBSdW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJh
bWVJRCwgU3RyaW5nIG1lc3NhZ2UpIC0+ICgpCisgICAgR2V0UGx1Z2lucyhib29sIHJlZnJlc2gp
IC0+IChWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4gcGx1Z2lucykKKyAgICBHZXRQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbihTdHJpbmcgcGx1Z2luUGF0aCkgLT4gKElQQzo6Q29ubmVjdGlvbjo6
SGFuZGxlIGNvbm5lY3Rpb25IYW5kbGUpIFN5bmNocm9ub3VzCisKKyAgICBUZXN0TXVsdGlwbGVB
dHRyaWJ1dGVzKCkgLT4gKCkgV2FudHNDb25uZWN0aW9uIFN5bmNocm9ub3VzCisKKyAgICBUZXN0
UGFyYW1ldGVyQXR0cmlidXRlcyhbQXR0cmlidXRlT25lIEF0dHJpYnV0ZVR3b10gdWludDY0X3Qg
Zm9vLCBkb3VibGUgYmFyLCBbQXR0cmlidXRlVGhyZWVdIGRvdWJsZSBiYXopCisKKyAgICBUZW1w
bGF0ZVRlc3QoSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4gYSkK
KworICAgIFNldFZpZGVvTGF5ZXJJRChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQgdmlkZW9MYXllcklEKQorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIERpZENyZWF0ZVdl
YlByb2Nlc3NDb25uZWN0aW9uKElQQzo6TWFjaFBvcnQgY29ubmVjdGlvbklkZW50aWZpZXIsIE9w
dGlvblNldDxXZWJLaXQ6OlNlbGVjdGlvbkZsYWdzPiBmbGFncykKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oTUFDKQorICAgICMgS2V5Ym9hcmQgc3VwcG9ydAorICAgIEludGVycHJldEtleUV2ZW50
KHVpbnQzMl90IHR5cGUpIC0+IChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBjb21t
YW5kTmFtZSkKKyNlbmRpZgorCisjaWYgRU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSkKKyAgICBE
ZXByZWNhdGVkT3BlcmF0aW9uKElQQzo6RHVtbXlUeXBlIGR1bW15KQorI2VuZGlmCisKKyNpZiBF
TkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCisgICAgRXhwZXJpbWVudGFsT3BlcmF0aW9uKElQ
Qzo6RHVtbXlUeXBlIGR1bW15KQorI2VuZGlmCit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVj
ZWl2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90
ZXN0cy9UZXN0V2l0aExlZ2FjeVJlY2VpdmVyTWVzc2FnZVJlY2VpdmVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xYzhiZmFkNWVlM2ZmY2I4MmFjZjAxZTMzOWM1Y2IwNDAzN2Q1NmVmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aExlZ2FjeVJl
Y2VpdmVyTWVzc2FnZVJlY2VpdmVyLmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiAoRU5BQkxFKFdFQktJVDIpICYmIChORVNU
RURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCisjaW5jbHVk
ZSAiVGVzdFdpdGhMZWdhY3lSZWNlaXZlci5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMu
aCIKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2lmIEVO
QUJMRShERVBSRUNBVEVEX0ZFQVRVUkUpIHx8IEVOQUJMRShFWFBFUklNRU5UQUxfRkVBVFVSRSkK
KyNpbmNsdWRlICJEdW1teVR5cGUuaCIKKyNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNs
dWRlICJHZXN0dXJlVHlwZXMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkhhbmRsZU1lc3NhZ2UuaCIK
KyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiTWFjaFBvcnQuaCIKKyNlbmRpZgorI2luY2x1
ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgIlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYlByZWZl
cmVuY2VzU3RvcmUuaCIKKyNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNT
QUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkgfHwgKEVOQUJM
RShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhF
Ul9NRVNTQUdFX0NPTkRJVElPTikpCisjaW5jbHVkZSAiV2ViVG91Y2hFdmVudC5oIgorI2VuZGlm
CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaWYgUExBVEZPUk0oTUFDKQor
I2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgorI2VuZGlmCisjaW5jbHVkZSA8V2Vi
Q29yZS9QbHVnaW5EYXRhLmg+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+Cisj
ZW5kaWYKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBNZXNzYWdlcyB7CisKK25hbWVzcGFjZSBUZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyIHsKKwordm9pZCBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6c2VuZChzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgY29uc3QgSVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmIGNvbm5lY3Rpb25IYW5kbGUp
Cit7CisgICAgKmVuY29kZXIgPDwgY29ubmVjdGlvbkhhbmRsZTsKKyAgICBjb25uZWN0aW9uLnNl
bmRTeW5jUmVwbHkoV1RGTW92ZShlbmNvZGVyKSk7Cit9CisKK3ZvaWQgVGVzdE11bHRpcGxlQXR0
cmlidXRlczo6c2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVw
bHkoV1RGTW92ZShlbmNvZGVyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXIKKworfSAvLyBuYW1lc3BhY2UgTWVzc2FnZXMKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3ZvaWQgVGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6ZGlkUmVjZWl2ZVRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXJNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVy
JiBkZWNvZGVyKQoreworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOwor
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXI6OkxvYWRVUkw6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8
TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkxvYWRVUkw+KGRlY29kZXIsIHRoaXMs
ICZUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpsb2FkVVJMKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1l
KCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkxvYWRTb21ldGhpbmc6Om5h
bWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRoTGVn
YWN5UmVjZWl2ZXI6OkxvYWRTb21ldGhpbmc+KGRlY29kZXIsIHRoaXMsICZUZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyOjpsb2FkU29tZXRoaW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgorI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9O
IHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQorICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OlRvdWNoRXZlbnQ6
Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRo
TGVnYWN5UmVjZWl2ZXI6OlRvdWNoRXZlbnQ+KGRlY29kZXIsIHRoaXMsICZUZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyOjp0b3VjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
I2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OICYm
IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VO
YW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkFkZEV2ZW50OjpuYW1l
KCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyOjpBZGRFdmVudD4oZGVjb2RlciwgdGhpcywgJlRlc3RXaXRoTGVnYWN5UmVjZWl2
ZXI6OmFkZEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdl
czo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6TG9hZFNvbWV0aGluZ0Vsc2U6Om5hbWUoKSkgewor
ICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2
ZXI6OkxvYWRTb21ldGhpbmdFbHNlPihkZWNvZGVyLCB0aGlzLCAmVGVzdFdpdGhMZWdhY3lSZWNl
aXZlcjo6bG9hZFNvbWV0aGluZ0Vsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhMZWdh
Y3lSZWNlaXZlcjo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uOjpuYW1lKCkpIHsKKyAgICAgICAg
SVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpEaWRS
ZWNlaXZlUG9saWN5RGVjaXNpb24+KGRlY29kZXIsIHRoaXMsICZUZXN0V2l0aExlZ2FjeVJlY2Vp
dmVyOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24pOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXI6OkNsb3NlOjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1l
c3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpDbG9zZT4oZGVjb2RlciwgdGhpcywgJlRl
c3RXaXRoTGVnYWN5UmVjZWl2ZXI6OmNsb3NlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJl
Y2VpdmVyOjpQcmVmZXJlbmNlc0RpZENoYW5nZTo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFu
ZGxlTWVzc2FnZTxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6UHJlZmVyZW5jZXNE
aWRDaGFuZ2U+KGRlY29kZXIsIHRoaXMsICZUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpwcmVmZXJl
bmNlc0RpZENoYW5nZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGRlY29kZXIu
bWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6U2VuZERv
dWJsZUFuZEZsb2F0OjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3Nh
Z2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpTZW5kRG91YmxlQW5kRmxvYXQ+KGRlY29kZXIs
IHRoaXMsICZUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpzZW5kRG91YmxlQW5kRmxvYXQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVz
c2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OlNlbmRJbnRzOjpuYW1lKCkpIHsKKyAgICAg
ICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpT
ZW5kSW50cz4oZGVjb2RlciwgdGhpcywgJlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OnNlbmRJbnRz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgp
ID09IE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpUZXN0UGFyYW1ldGVyQXR0cmli
dXRlczo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6VGVz
dFdpdGhMZWdhY3lSZWNlaXZlcjo6VGVzdFBhcmFtZXRlckF0dHJpYnV0ZXM+KGRlY29kZXIsIHRo
aXMsICZUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjp0ZXN0UGFyYW1ldGVyQXR0cmlidXRlcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBN
ZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6VGVtcGxhdGVUZXN0OjpuYW1lKCkpIHsK
KyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2Vp
dmVyOjpUZW1wbGF0ZVRlc3Q+KGRlY29kZXIsIHRoaXMsICZUZXN0V2l0aExlZ2FjeVJlY2VpdmVy
Ojp0ZW1wbGF0ZVRlc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OlNldFZp
ZGVvTGF5ZXJJRDo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdl
czo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6U2V0VmlkZW9MYXllcklEPihkZWNvZGVyLCB0aGlz
LCAmVGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6c2V0VmlkZW9MYXllcklEKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5h
bWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6RGlkQ3JlYXRlV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb246Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVz
c2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkRpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0
aW9uPihkZWNvZGVyLCB0aGlzLCAmVGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6ZGlkQ3JlYXRlV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisjaWYg
RU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSkKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgp
ID09IE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpEZXByZWNhdGVkT3BlcmF0aW9u
OjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0
aExlZ2FjeVJlY2VpdmVyOjpEZXByZWNhdGVkT3BlcmF0aW9uPihkZWNvZGVyLCB0aGlzLCAmVGVz
dFdpdGhMZWdhY3lSZWNlaXZlcjo6ZGVwcmVjYXRlZE9wZXJhdGlvbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCisgICAg
aWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNl
aXZlcjo6RXhwZXJpbWVudGFsT3BlcmF0aW9uOjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5k
bGVNZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpFeHBlcmltZW50YWxP
cGVyYXRpb24+KGRlY29kZXIsIHRoaXMsICZUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpleHBlcmlt
ZW50YWxPcGVyYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgVU5V
U0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTsKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjpk
aWRSZWNlaXZlU3luY1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQoreworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpOworICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6
OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkNyZWF0ZVBsdWdpbjo6bmFtZSgpKSB7CisgICAgICAg
IElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6Q3Jl
YXRlUGx1Z2luPihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmVGVzdFdpdGhMZWdhY3lS
ZWNlaXZlcjo6Y3JlYXRlUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVy
OjpSdW5KYXZhU2NyaXB0QWxlcnQ6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3Nh
Z2U8TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OlJ1bkphdmFTY3JpcHRBbGVydD4o
ZGVjb2RlciwgKnJlcGx5RW5jb2RlciwgdGhpcywgJlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OnJ1
bkphdmFTY3JpcHRBbGVydCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGRlY29k
ZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6R2V0
UGx1Z2luczo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6
VGVzdFdpdGhMZWdhY3lSZWNlaXZlcjo6R2V0UGx1Z2lucz4oZGVjb2RlciwgKnJlcGx5RW5jb2Rl
ciwgdGhpcywgJlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OmdldFBsdWdpbnMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6
OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpuYW1l
KCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlU3luY2hyb25vdXM8TWVzc2FnZXM6OlRl
c3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uPihjb25uZWN0
aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIsIHRoaXMsICZUZXN0V2l0aExlZ2FjeVJlY2VpdmVy
OjpnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhMZWdhY3lS
ZWNlaXZlcjo6VGVzdE11bHRpcGxlQXR0cmlidXRlczo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6
aGFuZGxlTWVzc2FnZVN5bmNocm9ub3VzV2FudHNDb25uZWN0aW9uPE1lc3NhZ2VzOjpUZXN0V2l0
aExlZ2FjeVJlY2VpdmVyOjpUZXN0TXVsdGlwbGVBdHRyaWJ1dGVzPihjb25uZWN0aW9uLCBkZWNv
ZGVyLCByZXBseUVuY29kZXIsIHRoaXMsICZUZXN0V2l0aExlZ2FjeVJlY2VpdmVyOjp0ZXN0TXVs
dGlwbGVBdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBQTEFURk9STShN
QUMpCisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhM
ZWdhY3lSZWNlaXZlcjo6SW50ZXJwcmV0S2V5RXZlbnQ6Om5hbWUoKSkgeworICAgICAgICBJUEM6
OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXI6OkludGVycHJl
dEtleUV2ZW50PihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmVGVzdFdpdGhMZWdhY3lS
ZWNlaXZlcjo6aW50ZXJwcmV0S2V5RXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShkZWNv
ZGVyKTsKKyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTsKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyAoRU5BQkxF
KFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFT
VEVSX0FORCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3Rz
L1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlcy5oIGIvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC90ZXN0cy9UZXN0V2l0aExlZ2FjeVJlY2VpdmVyTWVzc2FnZXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lYjc2OTA1OWI1MThiMjJlZjM4YjkwZjEzNDEzYWJkMjc2ZTExMTU2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aExlZ2FjeVJl
Y2VpdmVyTWVzc2FnZXMuaApAQCAtMCwwICsxLDU1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9DT05E
SVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQorCisjaW5jbHVkZSAiQXJndW1lbnRD
b2RlcnMuaCIKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyNpbmNsdWRlICJHZXN0dXJlVHlwZXMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIk1lc3NhZ2VO
YW1lcy5oIgorI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgIlRlc3RXaXRoTGVnYWN5UmVj
ZWl2ZXJNZXNzYWdlc1JlcGxpZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BsdWdpbkRhdGEuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSVBD
IHsKK2NsYXNzIER1bW15VHlwZTsKK2NsYXNzIE1hY2hQb3J0OworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK2NsYXNzIFdlYlByZWZlcmVuY2VzU3RvcmU7CitjbGFzcyBXZWJUb3VjaEV2ZW50Owor
fQorCituYW1lc3BhY2UgTWVzc2FnZXMgeworbmFtZXNwYWNlIFRlc3RXaXRoTGVnYWN5UmVjZWl2
ZXIgeworCitzdGF0aWMgaW5saW5lIElQQzo6UmVjZWl2ZXJOYW1lIG1lc3NhZ2VSZWNlaXZlck5h
bWUoKQoreworICAgIHJldHVybiBJUEM6OlJlY2VpdmVyTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNl
aXZlcjsKK30KKworY2xhc3MgTG9hZFVSTCB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRz
ID0gc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPjsKKworICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VO
YW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2Vp
dmVyX0xvYWRVUkw7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKwor
ICAgIGV4cGxpY2l0IExvYWRVUkwoY29uc3QgU3RyaW5nJiB1cmwpCisgICAgICAgIDogbV9hcmd1
bWVudHModXJsKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitw
cml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307CisKKyNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQorY2xhc3MgTG9hZFNvbWV0aGluZyB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJn
dW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBTdHJpbmcmPjsKKworICAgIHN0YXRpYyBJUEM6Ok1l
c3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyX0xvYWRTb21ldGhpbmc7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMg
PSBmYWxzZTsKKworICAgIGV4cGxpY2l0IExvYWRTb21ldGhpbmcoY29uc3QgU3RyaW5nJiB1cmwp
CisgICAgICAgIDogbV9hcmd1bWVudHModXJsKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBB
cmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307
CisjZW5kaWYKKworI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0Vf
Q09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQorY2xhc3MgVG91Y2hF
dmVudCB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBX
ZWJLaXQ6OldlYlRvdWNoRXZlbnQmPjsKKworICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5h
bWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1Rv
dWNoRXZlbnQ7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAg
IGV4cGxpY2l0IFRvdWNoRXZlbnQoY29uc3QgV2ViS2l0OjpXZWJUb3VjaEV2ZW50JiBldmVudCkK
KyAgICAgICAgOiBtX2FyZ3VtZW50cyhldmVudCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qg
QXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJn
dW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9
OworI2VuZGlmCisKKyNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgKE5FU1RFRF9NRVNTQUdF
X0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OKSkKK2NsYXNzIEFkZEV2
ZW50IHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFdl
YktpdDo6V2ViVG91Y2hFdmVudCY+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFt
ZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfQWRk
RXZlbnQ7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4
cGxpY2l0IEFkZEV2ZW50KGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVudCYgZXZlbnQpCisgICAg
ICAgIDogbV9hcmd1bWVudHMoZXZlbnQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3Vt
ZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50
czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK2NsYXNzIExvYWRTb21ldGhpbmdFbHNl
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFN0cmlu
ZyY+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6
TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfTG9hZFNvbWV0aGluZ0Vsc2U7IH0K
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4cGxpY2l0IExv
YWRTb21ldGhpbmdFbHNlKGNvbnN0IFN0cmluZyYgdXJsKQorICAgICAgICA6IG1fYXJndW1lbnRz
KHVybCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9OworI2VuZGlmCisKK2NsYXNzIERpZFJl
Y2VpdmVQb2xpY3lEZWNpc2lvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3Rk
Ojp0dXBsZTx1aW50NjRfdCwgdWludDY0X3QsIHVpbnQzMl90PjsKKworICAgIHN0YXRpYyBJUEM6
Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExl
Z2FjeVJlY2VpdmVyX0RpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbjsgfQorICAgIHN0YXRpYyBjb25z
dCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGxpc3RlbmVySUQsIHVpbnQzMl90IHBvbGljeUFjdGlv
bikKKyAgICAgICAgOiBtX2FyZ3VtZW50cyhmcmFtZUlELCBsaXN0ZW5lcklELCBwb2xpY3lBY3Rp
b24pCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKworY2xhc3MgQ2xvc2UgeworcHVibGlj
OgorICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKKworICAgIHN0YXRpYyBJUEM6
Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aExl
Z2FjeVJlY2VpdmVyX0Nsb3NlOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFs
c2U7CisKKyAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50
cyBtX2FyZ3VtZW50czsKK307CisKK2NsYXNzIFByZWZlcmVuY2VzRGlkQ2hhbmdlIHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViUHJl
ZmVyZW5jZXNTdG9yZSY+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsg
cmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfUHJlZmVyZW5j
ZXNEaWRDaGFuZ2U7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKwor
ICAgIGV4cGxpY2l0IFByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYktpdDo6V2ViUHJlZmVy
ZW5jZXNTdG9yZSYgc3RvcmUpCisgICAgICAgIDogbV9hcmd1bWVudHMoc3RvcmUpCisgICAgewor
ICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1l
bnRzIG1fYXJndW1lbnRzOworfTsKKworY2xhc3MgU2VuZERvdWJsZUFuZEZsb2F0IHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGRvdWJsZSwgZmxvYXQ+OworCisg
ICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5h
bWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfU2VuZERvdWJsZUFuZEZsb2F0OyB9CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7CisKKyAgICBTZW5kRG91YmxlQW5kRmxvYXQo
ZG91YmxlIGQsIGZsb2F0IGYpCisgICAgICAgIDogbV9hcmd1bWVudHMoZCwgZikKKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcmd1bWVu
dHMgbV9hcmd1bWVudHM7Cit9OworCitjbGFzcyBTZW5kSW50cyB7CitwdWJsaWM6CisgICAgdXNp
bmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBWZWN0b3I8dWludDY0X3Q+JiwgY29uc3Qg
VmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+Jj47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFt
ZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZl
cl9TZW5kSW50czsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisg
ICAgU2VuZEludHMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgaW50cywgY29uc3QgVmVjdG9yPFZl
Y3Rvcjx1aW50NjRfdD4+JiBpbnRWZWN0b3JzKQorICAgICAgICA6IG1fYXJndW1lbnRzKGludHMs
IGludFZlY3RvcnMpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1l
bnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKworY2xhc3MgQ3JlYXRl
UGx1Z2luIHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPHVpbnQ2
NF90LCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1ldGVycyY+OworCisgICAgc3RhdGljIElQ
Qzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRo
TGVnYWN5UmVjZWl2ZXJfQ3JlYXRlUGx1Z2luOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNT
eW5jID0gdHJ1ZTsKKworICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBsZTxib29sJj47CisgICAg
dXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGJvb2w+OworICAgIENyZWF0ZVBsdWdp
bih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFyYW1l
dGVycyYgcGFyYW1ldGVycykKKyAgICAgICAgOiBtX2FyZ3VtZW50cyhwbHVnaW5JbnN0YW5jZUlE
LCBwYXJhbWV0ZXJzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3Vt
ZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQor
Citwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307CisKK2NsYXNzIFJ1bkph
dmFTY3JpcHRBbGVydCB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBs
ZTx1aW50NjRfdCwgY29uc3QgU3RyaW5nJj47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFt
ZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZl
cl9SdW5KYXZhU2NyaXB0QWxlcnQ7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0
cnVlOworCisgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPD47CisgICAgdXNpbmcgUmVwbHlB
cmd1bWVudHMgPSBzdGQ6OnR1cGxlPD47CisgICAgUnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90
IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICAgICAgOiBtX2FyZ3VtZW50cyhm
cmFtZUlELCBtZXNzYWdlKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmd1bWVudHMmIGFy
Z3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAg
fQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307CisKK2NsYXNzIEdl
dFBsdWdpbnMgeworcHVibGljOgorICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Ym9v
bD47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpN
ZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9HZXRQbHVnaW5zOyB9CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKKworICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0
dXBsZTxWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4mPjsKKyAgICB1c2luZyBSZXBseUFyZ3Vt
ZW50cyA9IHN0ZDo6dHVwbGU8VmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+PjsKKyAgICBleHBs
aWNpdCBHZXRQbHVnaW5zKGJvb2wgcmVmcmVzaCkKKyAgICAgICAgOiBtX2FyZ3VtZW50cyhyZWZy
ZXNoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRl
OgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307CisKK2NsYXNzIEdldFBsdWdpblByb2Nl
c3NDb25uZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxl
PGNvbnN0IFN0cmluZyY+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsg
cmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfR2V0UGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb247IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVl
OworCisgICAgdXNpbmcgRGVsYXllZFJlcGx5ID0gR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25E
ZWxheWVkUmVwbHk7CisgICAgc3RhdGljIHZvaWQgc2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mLCBjb25zdCBJUEM6OkNvbm5lY3Rpb246OkhhbmRs
ZSYgY29ubmVjdGlvbkhhbmRsZSk7CisgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPElQQzo6
Q29ubmVjdGlvbjo6SGFuZGxlJj47CisgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1
cGxlPElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlPjsKKyAgICBleHBsaWNpdCBHZXRQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgpCisgICAgICAgIDogbV9hcmd1
bWVudHMocGx1Z2luUGF0aCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJndW1lbnRzJiBh
cmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9OworCitjbGFzcyBU
ZXN0TXVsdGlwbGVBdHRyaWJ1dGVzIHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBz
dGQ6OnR1cGxlPD47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1
cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9UZXN0TXVsdGlwbGVB
dHRyaWJ1dGVzOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKKworICAg
IHVzaW5nIERlbGF5ZWRSZXBseSA9IFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXNEZWxheWVkUmVwbHk7
CisgICAgc3RhdGljIHZvaWQgc2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmLCBJ
UEM6OkNvbm5lY3Rpb24mKTsKKyAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8PjsKKyAgICB1
c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKKyAgICBjb25zdCBBcmd1bWVudHMm
IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307CisKK2NsYXNz
IFRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzIHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMg
PSBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBkb3VibGUsIGRvdWJsZT47CisKKyAgICBzdGF0aWMgSVBD
OjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhM
ZWdhY3lSZWNlaXZlcl9UZXN0UGFyYW1ldGVyQXR0cmlidXRlczsgfQorICAgIHN0YXRpYyBjb25z
dCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgVGVzdFBhcmFtZXRlckF0dHJpYnV0ZXModWlu
dDY0X3QgZm9vLCBkb3VibGUgYmFyLCBkb3VibGUgYmF6KQorICAgICAgICA6IG1fYXJndW1lbnRz
KGZvbywgYmFyLCBiYXopCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJn
dW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKworY2xhc3MgVGVt
cGxhdGVUZXN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNv
bnN0IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1aW50NjRfdD4+Jj47CisKKyAg
ICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFt
ZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9UZW1wbGF0ZVRlc3Q7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4cGxpY2l0IFRlbXBsYXRlVGVzdChjb25z
dCBIYXNoTWFwPFN0cmluZywgc3RkOjpwYWlyPFN0cmluZywgdWludDY0X3Q+PiYgYSkKKyAgICAg
ICAgOiBtX2FyZ3VtZW50cyhhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmd1bWVudHMm
IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307CisKK2NsYXNz
IFNldFZpZGVvTGF5ZXJJRCB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0
dXBsZTxjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQmPjsKKwor
ICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VO
YW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX1NldFZpZGVvTGF5ZXJJRDsgfQorICAgIHN0YXRp
YyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgZXhwbGljaXQgU2V0VmlkZW9MYXll
cklEKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCYgdmlkZW9M
YXllcklEKQorICAgICAgICA6IG1fYXJndW1lbnRzKHZpZGVvTGF5ZXJJRCkKKyAgICB7CisgICAg
fQorCisgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcmd1bWVudHMg
bV9hcmd1bWVudHM7Cit9OworCisjaWYgUExBVEZPUk0oTUFDKQorY2xhc3MgRGlkQ3JlYXRlV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb24geworcHVibGljOgorICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6
dHVwbGU8Y29uc3QgSVBDOjpNYWNoUG9ydCYsIGNvbnN0IE9wdGlvblNldDxXZWJLaXQ6OlNlbGVj
dGlvbkZsYWdzPiY+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0
dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfRGlkQ3JlYXRlV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb247IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxz
ZTsKKworICAgIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uKGNvbnN0IElQQzo6TWFjaFBv
cnQmIGNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBPcHRpb25TZXQ8V2ViS2l0OjpTZWxlY3Rp
b25GbGFncz4mIGZsYWdzKQorICAgICAgICA6IG1fYXJndW1lbnRzKGNvbm5lY3Rpb25JZGVudGlm
aWVyLCBmbGFncykKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVu
dHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9OworI2VuZGlmCisKKyNpZiBQ
TEFURk9STShNQUMpCitjbGFzcyBJbnRlcnByZXRLZXlFdmVudCB7CitwdWJsaWM6CisgICAgdXNp
bmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTx1aW50MzJfdD47CisKKyAgICBzdGF0aWMgSVBDOjpN
ZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdh
Y3lSZWNlaXZlcl9JbnRlcnByZXRLZXlFdmVudDsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIGlz
U3luYyA9IHRydWU7CisKKyAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8VmVjdG9yPFdlYkNv
cmU6OktleXByZXNzQ29tbWFuZD4mPjsKKyAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6
dHVwbGU8VmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4+OworICAgIGV4cGxpY2l0IElu
dGVycHJldEtleUV2ZW50KHVpbnQzMl90IHR5cGUpCisgICAgICAgIDogbV9hcmd1bWVudHModHlw
ZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9OworI2VuZGlmCisKKyNpZiBFTkFCTEUoREVQ
UkVDQVRFRF9GRUFUVVJFKQorY2xhc3MgRGVwcmVjYXRlZE9wZXJhdGlvbiB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBJUEM6OkR1bW15VHlwZSY+Owor
CisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2Fn
ZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfRGVwcmVjYXRlZE9wZXJhdGlvbjsgfQorICAg
IHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgZXhwbGljaXQgRGVwcmVj
YXRlZE9wZXJhdGlvbihjb25zdCBJUEM6OkR1bW15VHlwZSYgZHVtbXkpCisgICAgICAgIDogbV9h
cmd1bWVudHMoZHVtbXkpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJn
dW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKyNlbmRpZgorCisj
aWYgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQorY2xhc3MgRXhwZXJpbWVudGFsT3BlcmF0
aW9uIHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IElQ
Qzo6RHVtbXlUeXBlJj47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyBy
ZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9FeHBlcmltZW50
YWxPcGVyYXRpb247IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKwor
ICAgIGV4cGxpY2l0IEV4cGVyaW1lbnRhbE9wZXJhdGlvbihjb25zdCBJUEM6OkR1bW15VHlwZSYg
ZHVtbXkpCisgICAgICAgIDogbV9hcmd1bWVudHMoZHVtbXkpCisgICAgeworICAgIH0KKworICAg
IGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1l
bnRzOworfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2l0aExlZ2FjeVJlY2VpdmVy
Cit9IC8vIG5hbWVzcGFjZSBNZXNzYWdlcworCisjZW5kaWYgLy8gKEVOQUJMRShXRUJLSVQyKSAm
JiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aExl
Z2FjeVJlY2VpdmVyTWVzc2FnZXNSZXBsaWVzLmggYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L3Rlc3RzL1Rlc3RXaXRoTGVnYWN5UmVjZWl2ZXJNZXNzYWdlc1JlcGxpZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41NzM4ZWY3YWM0OWU4ZmQzNTkxMTQzY2ZhNTAyMTg0MzRhNDI4YjZhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aExlZ2Fj
eVJlY2VpdmVyTWVzc2FnZXNSZXBsaWVzLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01B
U1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQorCisjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKKworbmFtZXNwYWNlIE1lc3NhZ2VzIHsKK25hbWVzcGFjZSBUZXN0V2l0aExl
Z2FjeVJlY2VpdmVyIHsKKwordXNpbmcgR2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25EZWxheWVk
UmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IElQQzo6Q29ubmVjdGlvbjo6SGFu
ZGxlJiBjb25uZWN0aW9uSGFuZGxlKT47CisKK3VzaW5nIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXNE
ZWxheWVkUmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+OworCit9IC8vIG5hbWVzcGFj
ZSBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyCit9IC8vIG5hbWVzcGFjZSBNZXNzYWdlcworCisjZW5k
aWYgLy8gKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFT
VEVSX09SICYmIE1BU1RFUl9BTkQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC90ZXN0cy9UZXN0V2l0aFN1cGVyY2xhc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU3VwZXJjbGFzcy5tZXNzYWdlcy5pbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lYjE5N2RhOTllYjkzMjcyOGQwYjcyMjE0NTMyYmFlYWM0NzEyNmM1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0
aFN1cGVyY2xhc3MubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBUZXN0V2l0aFN1cGVyY2xhc3Mg
OiBXZWJQYWdlQmFzZSB7CisgICAgTG9hZFVSTChTdHJpbmcgdXJsKQorI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCisgICAgVGVzdEFzeW5jTWVzc2FnZShlbnVtOmJvb2wgV2ViS2l0OjpUZXN0VHdv
U3RhdGVFbnVtIHR3b1N0YXRlRW51bSkgLT4gKHVpbnQ2NF90IHJlc3VsdCkgQXN5bmMKKyAgICBU
ZXN0QXN5bmNNZXNzYWdlV2l0aE5vQXJndW1lbnRzKCkgLT4gKCkgQXN5bmMKKyAgICBUZXN0QXN5
bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzKCkgLT4gKGJvb2wgZmxhZywgdWludDY0X3Qg
dmFsdWUpIEFzeW5jCisgICAgVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uKGludCB2YWx1
ZSkgLT4gKGJvb2wgZmxhZykgQXN5bmMgV2FudHNDb25uZWN0aW9uCisjZW5kaWYKKyAgICBUZXN0
U3luY01lc3NhZ2UodWludDMyX3QgcGFyYW0pIC0+ICh1aW50OF90IHJlcGx5KSBTeW5jaHJvbm91
cworICAgIFRlc3RTeW5jaHJvbm91c01lc3NhZ2UoYm9vbCB2YWx1ZSkgLT4gKE9wdGlvbmFsPFdl
YktpdDo6VGVzdENsYXNzTmFtZT4gb3B0aW9uYWxSZXBseSkgU3luY2hyb25vdXMKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTdXBlcmNs
YXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVz
dHMvVGVzdFdpdGhTdXBlcmNsYXNzTWVzc2FnZVJlY2VpdmVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ODll
MWQ0MTAzYzBkNjA0MmQ0NDhhOTQ4ZjJlYTRmYTNmNzI3MWFlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aFN1cGVyY2xhc3NNZXNz
YWdlUmVjZWl2ZXIuY3BwCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RXaXRoU3VwZXJjbGFzcy5oIgorCisjaW5j
bHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAi
SGFuZGxlTWVzc2FnZS5oIgorI2luY2x1ZGUgIlRlc3RDbGFzc05hbWUuaCIKKyNpZiBFTkFCTEUo
VEVTVF9GRUFUVVJFKQorI2luY2x1ZGUgIlRlc3RUd29TdGF0ZUVudW0uaCIKKyNlbmRpZgorI2lu
Y2x1ZGUgIlRlc3RXaXRoU3VwZXJjbGFzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBNZXNz
YWdlcyB7CisKK25hbWVzcGFjZSBUZXN0V2l0aFN1cGVyY2xhc3MgeworCisjaWYgRU5BQkxFKFRF
U1RfRkVBVFVSRSkKKwordm9pZCBUZXN0QXN5bmNNZXNzYWdlOjpjYWxsUmVwbHkoSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiByZXN1bHQ7CisgICAgZGVj
b2RlciA+PiByZXN1bHQ7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGNhbmNlbFJlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KCpyZXN1bHQpKTsKK30KKwordm9pZCBUZXN0QXN5bmNNZXNzYWdlOjpjYW5jZWxSZXBseShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKElQQzo6QXN5bmNSZXBseUVycm9yPHVpbnQ2NF90Pjo6Y3Jl
YXRlKCkpOworfQorCit2b2lkIFRlc3RBc3luY01lc3NhZ2U6OnNlbmQoc3RkOjp1bmlxdWVfcHRy
PElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVp
bnQ2NF90IHJlc3VsdCkKK3sKKyAgICAqZW5jb2RlciA8PCByZXN1bHQ7CisgICAgY29ubmVjdGlv
bi5zZW5kU3luY1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOworfQorCisjZW5kaWYKKworI2lmIEVO
QUJMRShURVNUX0ZFQVRVUkUpCisKK3ZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50
czo6Y2FsbFJlcGx5KElQQzo6RGVjb2RlciYgZGVjb2RlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9
CisKK3ZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50czo6Y2FuY2VsUmVwbHkoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50
czo6c2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RG
TW92ZShlbmNvZGVyKSk7Cit9CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkK
Kwordm9pZCBUZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzOjpjYWxsUmVwbHko
SVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJiwgdWlu
dDY0X3QmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgT3B0aW9uYWw8Ym9vbD4gZmxh
ZzsKKyAgICBkZWNvZGVyID4+IGZsYWc7CisgICAgaWYgKCFmbGFnKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYW5jZWxSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgT3B0aW9uYWw8dWludDY0X3Q+
IHZhbHVlOworICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgaWYgKCF2YWx1ZSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FuY2VsUmVwbHkoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoKmZsYWcpLCBXVEZNb3ZlKCp2YWx1ZSkpOworfQorCit2b2lkIFRlc3RB
c3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHM6OmNhbmNlbFJlcGx5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCYmLCB1aW50NjRfdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihJUEM6OkFzeW5jUmVwbHlFcnJvcjxib29sPjo6Y3JlYXRl
KCksIElQQzo6QXN5bmNSZXBseUVycm9yPHVpbnQ2NF90Pjo6Y3JlYXRlKCkpOworfQorCit2b2lk
IFRlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHM6OnNlbmQoc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IGJvb2wgZmxhZywgdWludDY0X3QgdmFsdWUpCit7CisgICAgKmVuY29kZXIgPDwgZmxhZzsKKyAg
ICAqZW5jb2RlciA8PCB2YWx1ZTsKKyAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92
ZShlbmNvZGVyKSk7Cit9CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKKwor
dm9pZCBUZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb246OmNhbGxSZXBseShJUEM6OkRlY29k
ZXImIGRlY29kZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBPcHRpb25hbDxib29sPiBmbGFnOworICAgIGRlY29kZXIgPj4gZmxh
ZzsKKyAgICBpZiAoIWZsYWcpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGNhbmNlbFJlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKCpmbGFnKSk7Cit9CisK
K3ZvaWQgVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uOjpjYW5jZWxSZXBseShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgY29t
cGxldGlvbkhhbmRsZXIoSVBDOjpBc3luY1JlcGx5RXJyb3I8Ym9vbD46OmNyZWF0ZSgpKTsKK30K
Kwordm9pZCBUZXN0QXN5bmNNZXNzYWdlV2l0aENvbm5lY3Rpb246OnNlbmQoc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IGJvb2wgZmxhZykKK3sKKyAgICAqZW5jb2RlciA8PCBmbGFnOworICAgIGNvbm5lY3Rpb24uc2Vu
ZFN5bmNSZXBseShXVEZNb3ZlKGVuY29kZXIpKTsKK30KKworI2VuZGlmCisKK3ZvaWQgVGVzdFN5
bmNNZXNzYWdlOjpzZW5kKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiYgZW5jb2Rlciwg
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50OF90IHJlcGx5KQoreworICAgICplbmNv
ZGVyIDw8IHJlcGx5OworICAgIGNvbm5lY3Rpb24uc2VuZFN5bmNSZXBseShXVEZNb3ZlKGVuY29k
ZXIpKTsKK30KKwordm9pZCBUZXN0U3luY2hyb25vdXNNZXNzYWdlOjpzZW5kKHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+JiYgZW5jb2RlciwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBjb25zdCBPcHRpb25hbDxXZWJLaXQ6OlRlc3RDbGFzc05hbWU+JiBvcHRpb25hbFJlcGx5KQor
eworICAgICplbmNvZGVyIDw8IG9wdGlvbmFsUmVwbHk7CisgICAgY29ubmVjdGlvbi5zZW5kU3lu
Y1JlcGx5KFdURk1vdmUoZW5jb2RlcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2l0aFN1
cGVyY2xhc3MKKworfSAvLyBuYW1lc3BhY2UgTWVzc2FnZXMKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3ZvaWQgVGVzdFdpdGhTdXBlcmNsYXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBhdXRvIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFt
ZSgpID09IE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OkxvYWRVUkw6Om5hbWUoKSkgewor
ICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRoU3VwZXJjbGFzczo6
TG9hZFVSTD4oZGVjb2RlciwgdGhpcywgJlRlc3RXaXRoU3VwZXJjbGFzczo6bG9hZFVSTCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKKyAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRl
c3RBc3luY01lc3NhZ2U6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2VBc3lu
YzxNZXNzYWdlczo6VGVzdFdpdGhTdXBlcmNsYXNzOjpUZXN0QXN5bmNNZXNzYWdlPihjb25uZWN0
aW9uLCBkZWNvZGVyLCB0aGlzLCAmVGVzdFdpdGhTdXBlcmNsYXNzOjp0ZXN0QXN5bmNNZXNzYWdl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhT
dXBlcmNsYXNzOjpUZXN0QXN5bmNNZXNzYWdlV2l0aE5vQXJndW1lbnRzOjpuYW1lKCkpIHsKKyAg
ICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlQXN5bmM8TWVzc2FnZXM6OlRlc3RXaXRoU3VwZXJjbGFz
czo6VGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50cz4oY29ubmVjdGlvbiwgZGVjb2Rlciwg
dGhpcywgJlRlc3RXaXRoU3VwZXJjbGFzczo6dGVzdEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoVEVTVF9GRUFU
VVJFKQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRo
U3VwZXJjbGFzczo6VGVzdEFzeW5jTWVzc2FnZVdpdGhNdWx0aXBsZUFyZ3VtZW50czo6bmFtZSgp
KSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZUFzeW5jPE1lc3NhZ2VzOjpUZXN0V2l0aFN1
cGVyY2xhc3M6OlRlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHM+KGNvbm5lY3Rp
b24sIGRlY29kZXIsIHRoaXMsICZUZXN0V2l0aFN1cGVyY2xhc3M6OnRlc3RBc3luY01lc3NhZ2VX
aXRoTXVsdGlwbGVBcmd1bWVudHMpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisj
aWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09
IE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVj
dGlvbjo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZUFzeW5jV2FudHNDb25u
ZWN0aW9uPE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RBc3luY01lc3NhZ2VXaXRo
Q29ubmVjdGlvbj4oY29ubmVjdGlvbiwgZGVjb2RlciwgdGhpcywgJlRlc3RXaXRoU3VwZXJjbGFz
czo6dGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorICAgIFdlYlBhZ2VCYXNlOjpkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKTsKK30KKwordm9pZCBUZXN0V2l0aFN1cGVyY2xhc3M6OmRpZFJlY2VpdmVTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICBh
dXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKKyAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlTmFtZSgpID09IE1lc3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RTeW5jTWVzc2Fn
ZTo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZVN5bmNocm9ub3VzPE1lc3Nh
Z2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RTeW5jTWVzc2FnZT4oY29ubmVjdGlvbiwgZGVj
b2RlciwgcmVwbHlFbmNvZGVyLCB0aGlzLCAmVGVzdFdpdGhTdXBlcmNsYXNzOjp0ZXN0U3luY01l
c3NhZ2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VO
YW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRoU3VwZXJjbGFzczo6VGVzdFN5bmNocm9ub3VzTWVz
c2FnZTo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZVN5bmNocm9ub3VzPE1l
c3NhZ2VzOjpUZXN0V2l0aFN1cGVyY2xhc3M6OlRlc3RTeW5jaHJvbm91c01lc3NhZ2U+KGNvbm5l
Y3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlciwgdGhpcywgJlRlc3RXaXRoU3VwZXJjbGFzczo6
dGVzdFN5bmNocm9ub3VzTWVzc2FnZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVU5V
U0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTsKKyAgICBV
TlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU3VwZXJjbGFzc01lc3NhZ2VzLmggYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU3VwZXJjbGFzc01lc3NhZ2VzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGY2ZDUyNWY5MTE3ODlhZTI5ZTFmNjEwNmM2MmYyMjU2NTRmNDlmYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhT
dXBlcmNsYXNzTWVzc2FnZXMuaApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJD
b25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSAiVGVzdENs
YXNzTmFtZS5oIgorI2luY2x1ZGUgIlRlc3RXaXRoU3VwZXJjbGFzc01lc3NhZ2VzUmVwbGllcy5o
IgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworZW51bSBjbGFzcyBUZXN0VHdvU3Rh
dGVFbnVtIDogYm9vbDsKK30KKworbmFtZXNwYWNlIE1lc3NhZ2VzIHsKK25hbWVzcGFjZSBUZXN0
V2l0aFN1cGVyY2xhc3MgeworCitzdGF0aWMgaW5saW5lIElQQzo6UmVjZWl2ZXJOYW1lIG1lc3Nh
Z2VSZWNlaXZlck5hbWUoKQoreworICAgIHJldHVybiBJUEM6OlJlY2VpdmVyTmFtZTo6VGVzdFdp
dGhTdXBlcmNsYXNzOworfQorCitjbGFzcyBMb2FkVVJMIHsKK3B1YmxpYzoKKyAgICB1c2luZyBB
cmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+OworCisgICAgc3RhdGljIElQQzo6
TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3Vw
ZXJjbGFzc19Mb2FkVVJMOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7
CisKKyAgICBleHBsaWNpdCBMb2FkVVJMKGNvbnN0IFN0cmluZyYgdXJsKQorICAgICAgICA6IG1f
YXJndW1lbnRzKHVybCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1
bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9OworCisjaWYgRU5BQkxF
KFRFU1RfRkVBVFVSRSkKK2NsYXNzIFRlc3RBc3luY01lc3NhZ2UgeworcHVibGljOgorICAgIHVz
aW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8V2ViS2l0OjpUZXN0VHdvU3RhdGVFbnVtPjsKKwor
ICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VO
YW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdEFzeW5jTWVzc2FnZTsgfQorICAgIHN0YXRpYyBj
b25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgc3RhdGljIHZvaWQgY2FsbFJlcGx5KElQ
Qzo6RGVjb2RlciYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3QmJik+JiYpOworICAg
IHN0YXRpYyB2b2lkIGNhbmNlbFJlcGx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3Qm
Jik+JiYpOworICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFt
ZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5
bmNNZXNzYWdlUmVwbHk7IH0KKyAgICB1c2luZyBBc3luY1JlcGx5ID0gVGVzdEFzeW5jTWVzc2Fn
ZUFzeW5jUmVwbHk7CisgICAgc3RhdGljIHZvaWQgc2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mLCB1aW50NjRfdCByZXN1bHQpOworICAgIHVzaW5n
IFJlcGx5ID0gc3RkOjp0dXBsZTx1aW50NjRfdCY+OworICAgIHVzaW5nIFJlcGx5QXJndW1lbnRz
ID0gc3RkOjp0dXBsZTx1aW50NjRfdD47CisgICAgZXhwbGljaXQgVGVzdEFzeW5jTWVzc2FnZShX
ZWJLaXQ6OlRlc3RUd29TdGF0ZUVudW0gdHdvU3RhdGVFbnVtKQorICAgICAgICA6IG1fYXJndW1l
bnRzKHR3b1N0YXRlRW51bSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJndW1lbnRzJiBh
cmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9OworI2VuZGlmCisK
KyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorY2xhc3MgVGVzdEFzeW5jTWVzc2FnZVdpdGhOb0Fy
Z3VtZW50cyB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTw+Owor
CisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2Fn
ZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlV2l0aE5vQXJndW1lbnRz
OyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
dm9pZCBjYWxsUmVwbHkoSVBDOjpEZWNvZGVyJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKKyAgICBzdGF0aWMgdm9pZCBjYW5jZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOworICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgp
IHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNN
ZXNzYWdlV2l0aE5vQXJndW1lbnRzUmVwbHk7IH0KKyAgICB1c2luZyBBc3luY1JlcGx5ID0gVGVz
dEFzeW5jTWVzc2FnZVdpdGhOb0FyZ3VtZW50c0FzeW5jUmVwbHk7CisgICAgc3RhdGljIHZvaWQg
c2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mKTsK
KyAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8PjsKKyAgICB1c2luZyBSZXBseUFyZ3VtZW50
cyA9IHN0ZDo6dHVwbGU8PjsKKyAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307CisjZW5kaWYKKworI2lmIEVOQUJMRShURVNU
X0ZFQVRVUkUpCitjbGFzcyBUZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzIHsK
K3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPD47CisKKyAgICBzdGF0
aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVz
dFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVudHM7IH0K
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIHN0YXRpYyB2b2lk
IGNhbGxSZXBseShJUEM6OkRlY29kZXImLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJiwg
dWludDY0X3QmJik+JiYpOworICAgIHN0YXRpYyB2b2lkIGNhbmNlbFJlcGx5KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCYmLCB1aW50NjRfdCYmKT4mJik7CisgICAgc3RhdGljIElQQzo6TWVz
c2FnZU5hbWUgYXN5bmNNZXNzYWdlUmVwbHlOYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFt
ZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RBc3luY01lc3NhZ2VXaXRoTXVsdGlwbGVBcmd1bWVu
dHNSZXBseTsgfQorICAgIHVzaW5nIEFzeW5jUmVwbHkgPSBUZXN0QXN5bmNNZXNzYWdlV2l0aE11
bHRpcGxlQXJndW1lbnRzQXN5bmNSZXBseTsKKyAgICBzdGF0aWMgdm9pZCBzZW5kKHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGJvb2wgZmxhZywgdWlu
dDY0X3QgdmFsdWUpOworICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBsZTxib29sJiwgdWludDY0
X3QmPjsKKyAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Ym9vbCwgdWludDY0
X3Q+OworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRz
IG1fYXJndW1lbnRzOworfTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK2Ns
YXNzIFRlc3RBc3luY01lc3NhZ2VXaXRoQ29ubmVjdGlvbiB7CitwdWJsaWM6CisgICAgdXNpbmcg
QXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBpbnQmPjsKKworICAgIHN0YXRpYyBJUEM6Ok1l
c3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVy
Y2xhc3NfVGVzdEFzeW5jTWVzc2FnZVdpdGhDb25uZWN0aW9uOyB9CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNTeW5jID0gZmFsc2U7CisKKyAgICBzdGF0aWMgdm9pZCBjYWxsUmVwbHkoSVBDOjpE
ZWNvZGVyJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sJiYpPiYmKTsKKyAgICBzdGF0aWMg
dm9pZCBjYW5jZWxSZXBseShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wmJik+JiYpOworICAg
IHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJu
IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoU3VwZXJjbGFzc19UZXN0QXN5bmNNZXNzYWdlV2l0
aENvbm5lY3Rpb25SZXBseTsgfQorICAgIHVzaW5nIEFzeW5jUmVwbHkgPSBUZXN0QXN5bmNNZXNz
YWdlV2l0aENvbm5lY3Rpb25Bc3luY1JlcGx5OworICAgIHN0YXRpYyB2b2lkIHNlbmQoc3RkOjp1
bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJiwgYm9vbCBmbGFnKTsK
KyAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8Ym9vbCY+OworICAgIHVzaW5nIFJlcGx5QXJn
dW1lbnRzID0gc3RkOjp0dXBsZTxib29sPjsKKyAgICBleHBsaWNpdCBUZXN0QXN5bmNNZXNzYWdl
V2l0aENvbm5lY3Rpb24oY29uc3QgaW50JiB2YWx1ZSkKKyAgICAgICAgOiBtX2FyZ3VtZW50cyh2
YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9OworI2VuZGlmCisKK2NsYXNzIFRlc3RT
eW5jTWVzc2FnZSB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTx1
aW50MzJfdD47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4g
SVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhTdXBlcmNsYXNzX1Rlc3RTeW5jTWVzc2FnZTsgfQor
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7CisKKyAgICB1c2luZyBEZWxheWVk
UmVwbHkgPSBUZXN0U3luY01lc3NhZ2VEZWxheWVkUmVwbHk7CisgICAgc3RhdGljIHZvaWQgc2Vu
ZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmLCBJUEM6OkNvbm5lY3Rpb24mLCB1aW50
OF90IHJlcGx5KTsKKyAgICB1c2luZyBSZXBseSA9IHN0ZDo6dHVwbGU8dWludDhfdCY+OworICAg
IHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3RkOjp0dXBsZTx1aW50OF90PjsKKyAgICBleHBsaWNp
dCBUZXN0U3luY01lc3NhZ2UodWludDMyX3QgcGFyYW0pCisgICAgICAgIDogbV9hcmd1bWVudHMo
cGFyYW0pCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKworY2xhc3MgVGVzdFN5bmNocm9u
b3VzTWVzc2FnZSB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxi
b29sPjsKKworICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6
Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aFN1cGVyY2xhc3NfVGVzdFN5bmNocm9ub3VzTWVzc2FnZTsg
fQorICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IHRydWU7CisKKyAgICB1c2luZyBEZWxh
eWVkUmVwbHkgPSBUZXN0U3luY2hyb25vdXNNZXNzYWdlRGVsYXllZFJlcGx5OworICAgIHN0YXRp
YyB2b2lkIHNlbmQoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0
aW9uJiwgY29uc3QgT3B0aW9uYWw8V2ViS2l0OjpUZXN0Q2xhc3NOYW1lPiYgb3B0aW9uYWxSZXBs
eSk7CisgICAgdXNpbmcgUmVwbHkgPSBzdGQ6OnR1cGxlPE9wdGlvbmFsPFdlYktpdDo6VGVzdENs
YXNzTmFtZT4mPjsKKyAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8T3B0aW9u
YWw8V2ViS2l0OjpUZXN0Q2xhc3NOYW1lPj47CisgICAgZXhwbGljaXQgVGVzdFN5bmNocm9ub3Vz
TWVzc2FnZShib29sIHZhbHVlKQorICAgICAgICA6IG1fYXJndW1lbnRzKHZhbHVlKQorICAgIHsK
KyAgICB9CisKKyAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3Vt
ZW50cyBtX2FyZ3VtZW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXaXRoU3VwZXJjbGFz
cworfSAvLyBuYW1lc3BhY2UgTWVzc2FnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhTdXBlcmNsYXNzTWVzc2FnZXNSZXBsaWVzLmggYi9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoU3VwZXJjbGFzc01lc3Nh
Z2VzUmVwbGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4MjJlNmNkNmE5ZjVlYWZlZjAwMWVhMTE2NGJkZWFh
ZDZlMDIzODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0
L3Rlc3RzL1Rlc3RXaXRoU3VwZXJjbGFzc01lc3NhZ2VzUmVwbGllcy5oCkBAIC0wLDAgKzEsNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk1lc3NhZ2VO
YW1lcy5oIgorI2luY2x1ZGUgIlRlc3RDbGFzc05hbWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCisKK25hbWVzcGFjZSBNZXNzYWdlcyB7
CituYW1lc3BhY2UgVGVzdFdpdGhTdXBlcmNsYXNzIHsKKworI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCit1c2luZyBUZXN0QXN5bmNNZXNzYWdlQXN5bmNSZXBseSA9IENvbXBsZXRpb25IYW5kbGVy
PHZvaWQodWludDY0X3QgcmVzdWx0KT47CisjZW5kaWYKKworI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCit1c2luZyBUZXN0QXN5bmNNZXNzYWdlV2l0aE5vQXJndW1lbnRzQXN5bmNSZXBseSA9IENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT47CisjZW5kaWYKKworI2lmIEVOQUJMRShURVNUX0ZFQVRV
UkUpCit1c2luZyBUZXN0QXN5bmNNZXNzYWdlV2l0aE11bHRpcGxlQXJndW1lbnRzQXN5bmNSZXBs
eSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBmbGFnLCB1aW50NjRfdCB2YWx1ZSk+Owor
I2VuZGlmCisKKyNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQordXNpbmcgVGVzdEFzeW5jTWVzc2Fn
ZVdpdGhDb25uZWN0aW9uQXN5bmNSZXBseSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBm
bGFnKT47CisjZW5kaWYKKwordXNpbmcgVGVzdFN5bmNNZXNzYWdlRGVsYXllZFJlcGx5ID0gQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCh1aW50OF90IHJlcGx5KT47CisKK3VzaW5nIFRlc3RTeW5jaHJv
bm91c01lc3NhZ2VEZWxheWVkUmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE9w
dGlvbmFsPFdlYktpdDo6VGVzdENsYXNzTmFtZT4mIG9wdGlvbmFsUmVwbHkpPjsKKworfSAvLyBu
YW1lc3BhY2UgVGVzdFdpdGhTdXBlcmNsYXNzCit9IC8vIG5hbWVzcGFjZSBNZXNzYWdlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0
dHJpYnV0ZXMubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3Rz
L1Rlc3RXaXRob3V0QXR0cmlidXRlcy5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZjVkNGYwNWM1
N2E4MzVmM2M0N2E1NWEzMzUzOTZlN2VjMWUwOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0dHJpYnV0ZXMubWVzc2Fn
ZXMuaW4KQEAgLTAsMCArMSw4NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
IyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisjaWYgRU5BQkxFKFdFQktJVDIpCisjaWYgTkVTVEVEX01BU1RFUl9DT05ESVRJT04g
fHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQKKworCisjIFRoZSBwYXJzZXIgc2hvdWxkIHRyZWF0
IGFsbCBvZiB0aGVzZSBhcyBjb21tZW50cworI0Zha2VMb2FkVVJMQShTdHJpbmcgdXJsKQorIyBG
YWtlTG9hZFVSTEIoU3RyaW5nIHVybCkKKyAgICAjRmFrZUxvYWRVUkxDKFN0cmluZyB1cmwpCisg
ICAgIyBGYWtlTG9hZFVSTEQoU3RyaW5nIHVybCkKKworbWVzc2FnZXMgLT4gVGVzdFdpdGhvdXRB
dHRyaWJ1dGVzIHsKKyAgICBMb2FkVVJMKFN0cmluZyB1cmwpCisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKKyAgICBMb2FkU29tZXRoaW5nKFN0cmluZyB1cmwpCisjaWYgTkVTVEVEX01FU1NBR0Vf
Q09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04KKyAgICBUb3VjaEV2ZW50
KFdlYktpdDo6V2ViVG91Y2hFdmVudCBldmVudCkKKyNlbmRpZgorI2lmIE5FU1RFRF9NRVNTQUdF
X0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElUSU9OCisgICAgQWRkRXZlbnQo
V2ViS2l0OjpXZWJUb3VjaEV2ZW50IGV2ZW50KQorI2VuZGlmCisgICAgTG9hZFNvbWV0aGluZ0Vs
c2UoU3RyaW5nIHVybCkKKyNlbmRpZgorICAgIERpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbih1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBsaXN0ZW5lcklELCB1aW50MzJfdCBwb2xpY3lBY3Rpb24p
CisgICAgQ2xvc2UoKQorCisgICAgUHJlZmVyZW5jZXNEaWRDaGFuZ2UoV2ViS2l0OjpXZWJQcmVm
ZXJlbmNlc1N0b3JlIHN0b3JlKQorICAgIFNlbmREb3VibGVBbmRGbG9hdChkb3VibGUgZCwgZmxv
YXQgZikKKyAgICBTZW5kSW50cyhWZWN0b3I8dWludDY0X3Q+IGludHMsIFZlY3RvcjxWZWN0b3I8
dWludDY0X3Q+PiBpbnRWZWN0b3JzKQorCisgICAgQ3JlYXRlUGx1Z2luKHVpbnQ2NF90IHBsdWdp
bkluc3RhbmNlSUQsIFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIC0+IChi
b29sIHJlc3VsdCkKKyAgICBSdW5KYXZhU2NyaXB0QWxlcnQodWludDY0X3QgZnJhbWVJRCwgU3Ry
aW5nIG1lc3NhZ2UpIC0+ICgpCisgICAgR2V0UGx1Z2lucyhib29sIHJlZnJlc2gpIC0+IChWZWN0
b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4gcGx1Z2lucykKKyAgICBHZXRQbHVnaW5Qcm9jZXNzQ29u
bmVjdGlvbihTdHJpbmcgcGx1Z2luUGF0aCkgLT4gKElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlIGNv
bm5lY3Rpb25IYW5kbGUpIFN5bmNocm9ub3VzCisKKyAgICBUZXN0TXVsdGlwbGVBdHRyaWJ1dGVz
KCkgLT4gKCkgV2FudHNDb25uZWN0aW9uIFN5bmNocm9ub3VzCisKKyAgICBUZXN0UGFyYW1ldGVy
QXR0cmlidXRlcyhbQXR0cmlidXRlT25lIEF0dHJpYnV0ZVR3b10gdWludDY0X3QgZm9vLCBkb3Vi
bGUgYmFyLCBbQXR0cmlidXRlVGhyZWVdIGRvdWJsZSBiYXopCisKKyAgICBUZW1wbGF0ZVRlc3Qo
SGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxTdHJpbmcsIHVpbnQ2NF90Pj4gYSkKKworICAgIFNl
dFZpZGVvTGF5ZXJJRChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgdmlk
ZW9MYXllcklEKQorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIERpZENyZWF0ZVdlYlByb2Nlc3ND
b25uZWN0aW9uKElQQzo6TWFjaFBvcnQgY29ubmVjdGlvbklkZW50aWZpZXIsIE9wdGlvblNldDxX
ZWJLaXQ6OlNlbGVjdGlvbkZsYWdzPiBmbGFncykKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFD
KQorICAgICMgS2V5Ym9hcmQgc3VwcG9ydAorICAgIEludGVycHJldEtleUV2ZW50KHVpbnQzMl90
IHR5cGUpIC0+IChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBjb21tYW5kTmFtZSkK
KyNlbmRpZgorCisjaWYgRU5BQkxFKERFUFJFQ0FURURfRkVBVFVSRSkKKyAgICBEZXByZWNhdGVk
T3BlcmF0aW9uKElQQzo6RHVtbXlUeXBlIGR1bW15KQorI2VuZGlmCisKKyNpZiBFTkFCTEUoRVhQ
RVJJTUVOVEFMX0ZFQVRVUkUpCisgICAgRXhwZXJpbWVudGFsT3BlcmF0aW9uKElQQzo6RHVtbXlU
eXBlIGR1bW15KQorI2VuZGlmCit9CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRob3V0QXR0cmlidXRlc01lc3Nh
Z2VSZWNlaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RX
aXRob3V0QXR0cmlidXRlc01lc3NhZ2VSZWNlaXZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JlNDEyZmM5
OTlmNTcyNDI4NzQyZWYxOGYyZDNjOTUyMDJlNTU1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhvdXRBdHRyaWJ1dGVzTWVzc2Fn
ZVJlY2VpdmVyLmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpZiAoRU5BQkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NP
TkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCisjaW5jbHVkZSAiVGVzdFdpdGhv
dXRBdHRyaWJ1dGVzLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUg
IkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaWYgRU5BQkxFKERFUFJFQ0FU
RURfRkVBVFVSRSkgfHwgRU5BQkxFKEVYUEVSSU1FTlRBTF9GRUFUVVJFKQorI2luY2x1ZGUgIkR1
bW15VHlwZS5oIgorI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIkdlc3R1cmVU
eXBlcy5oIgorI2VuZGlmCisjaW5jbHVkZSAiSGFuZGxlTWVzc2FnZS5oIgorI2lmIFBMQVRGT1JN
KE1BQykKKyNpbmNsdWRlICJNYWNoUG9ydC5oIgorI2VuZGlmCisjaW5jbHVkZSAiUGx1Z2luLmgi
CisjaW5jbHVkZSAiVGVzdFdpdGhvdXRBdHRyaWJ1dGVzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgi
CisjaWYgKEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04g
JiYgU09NRV9PVEhFUl9NRVNTQUdFX0NPTkRJVElPTikpIHx8IChFTkFCTEUoVE9VQ0hfRVZFTlRT
KSAmJiAoTkVTVEVEX01FU1NBR0VfQ09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05E
SVRJT04pKQorI2luY2x1ZGUgIldlYlRvdWNoRXZlbnQuaCIKKyNlbmRpZgorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxXZWJD
b3JlL0tleWJvYXJkRXZlbnQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0
YS5oPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpZiBQ
TEFURk9STShNQUMpCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2VuZGlmCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgTWVzc2FnZXMgeworCituYW1lc3BhY2UgVGVzdFdpdGhvdXRBdHRyaWJ1dGVzIHsKKwor
dm9pZCBHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6c2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3Qg
SVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmIGNvbm5lY3Rpb25IYW5kbGUpCit7CisgICAgKmVuY29k
ZXIgPDwgY29ubmVjdGlvbkhhbmRsZTsKKyAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RG
TW92ZShlbmNvZGVyKSk7Cit9CisKK3ZvaWQgVGVzdE11bHRpcGxlQXR0cmlidXRlczo6c2VuZChz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbikKK3sKKyAgICBjb25uZWN0aW9uLnNlbmRTeW5jUmVwbHkoV1RGTW92ZShlbmNv
ZGVyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXaXRob3V0QXR0cmlidXRlcworCit9IC8v
IG5hbWVzcGFjZSBNZXNzYWdlcworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBUZXN0V2l0
aG91dEF0dHJpYnV0ZXM6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpOworICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2Fn
ZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6TG9hZFVSTDo6bmFtZSgpKSB7CisgICAgICAgIElQ
Qzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpMb2FkVVJM
PihkZWNvZGVyLCB0aGlzLCAmVGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpsb2FkVVJMKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6TG9h
ZFNvbWV0aGluZzo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdl
czo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpMb2FkU29tZXRoaW5nPihkZWNvZGVyLCB0aGlzLCAm
VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpsb2FkU29tZXRoaW5nKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NB
R0VfQ09ORElUSU9OIHx8IFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQorICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6
VG91Y2hFdmVudDo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdl
czo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpUb3VjaEV2ZW50PihkZWNvZGVyLCB0aGlzLCAmVGVz
dFdpdGhvdXRBdHRyaWJ1dGVzOjp0b3VjaEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorI2lmIChFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoTkVTVEVEX01FU1NBR0VfQ09O
RElUSU9OICYmIFNPTUVfT1RIRVJfTUVTU0FHRV9DT05ESVRJT04pKQorICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6QWRkRXZl
bnQ6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RX
aXRob3V0QXR0cmlidXRlczo6QWRkRXZlbnQ+KGRlY29kZXIsIHRoaXMsICZUZXN0V2l0aG91dEF0
dHJpYnV0ZXM6OmFkZEV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBN
ZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpMb2FkU29tZXRoaW5nRWxzZTo6bmFtZSgp
KSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRy
aWJ1dGVzOjpMb2FkU29tZXRoaW5nRWxzZT4oZGVjb2RlciwgdGhpcywgJlRlc3RXaXRob3V0QXR0
cmlidXRlczo6bG9hZFNvbWV0aGluZ0Vsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhv
dXRBdHRyaWJ1dGVzOjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb246Om5hbWUoKSkgeworICAgICAg
ICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6RGlk
UmVjZWl2ZVBvbGljeURlY2lzaW9uPihkZWNvZGVyLCB0aGlzLCAmVGVzdFdpdGhvdXRBdHRyaWJ1
dGVzOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24pOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0
cmlidXRlczo6Q2xvc2U6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVz
c2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6Q2xvc2U+KGRlY29kZXIsIHRoaXMsICZUZXN0
V2l0aG91dEF0dHJpYnV0ZXM6OmNsb3NlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0
ZXM6OlByZWZlcmVuY2VzRGlkQ2hhbmdlOjpuYW1lKCkpIHsKKyAgICAgICAgSVBDOjpoYW5kbGVN
ZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlByZWZlcmVuY2VzRGlkQ2hh
bmdlPihkZWNvZGVyLCB0aGlzLCAmVGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpwcmVmZXJlbmNlc0Rp
ZENoYW5nZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpTZW5kRG91YmxlQW5k
RmxvYXQ6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRl
c3RXaXRob3V0QXR0cmlidXRlczo6U2VuZERvdWJsZUFuZEZsb2F0PihkZWNvZGVyLCB0aGlzLCAm
VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpzZW5kRG91YmxlQW5kRmxvYXQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRl
c3RXaXRob3V0QXR0cmlidXRlczo6U2VuZEludHM6Om5hbWUoKSkgeworICAgICAgICBJUEM6Omhh
bmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6U2VuZEludHM+KGRl
Y29kZXIsIHRoaXMsICZUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OnNlbmRJbnRzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2Vz
OjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OlRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzOjpuYW1lKCkp
IHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJp
YnV0ZXM6OlRlc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzPihkZWNvZGVyLCB0aGlzLCAmVGVzdFdpdGhv
dXRBdHRyaWJ1dGVzOjp0ZXN0UGFyYW1ldGVyQXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdp
dGhvdXRBdHRyaWJ1dGVzOjpUZW1wbGF0ZVRlc3Q6Om5hbWUoKSkgeworICAgICAgICBJUEM6Omhh
bmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6VGVtcGxhdGVUZXN0
PihkZWNvZGVyLCB0aGlzLCAmVGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjp0ZW1wbGF0ZVRlc3QpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0g
TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6U2V0VmlkZW9MYXllcklEOjpuYW1lKCkp
IHsKKyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJp
YnV0ZXM6OlNldFZpZGVvTGF5ZXJJRD4oZGVjb2RlciwgdGhpcywgJlRlc3RXaXRob3V0QXR0cmli
dXRlczo6c2V0VmlkZW9MYXllcklEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVz
dFdpdGhvdXRBdHRyaWJ1dGVzOjpEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbjo6bmFtZSgp
KSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRy
aWJ1dGVzOjpEaWRDcmVhdGVXZWJQcm9jZXNzQ29ubmVjdGlvbj4oZGVjb2RlciwgdGhpcywgJlRl
c3RXaXRob3V0QXR0cmlidXRlczo6ZGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24pOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKERFUFJFQ0FURURfRkVBVFVS
RSkKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpUZXN0V2l0aG91
dEF0dHJpYnV0ZXM6OkRlcHJlY2F0ZWRPcGVyYXRpb246Om5hbWUoKSkgeworICAgICAgICBJUEM6
OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6RGVwcmVjYXRl
ZE9wZXJhdGlvbj4oZGVjb2RlciwgdGhpcywgJlRlc3RXaXRob3V0QXR0cmlidXRlczo6ZGVwcmVj
YXRlZE9wZXJhdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFC
TEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkUpCisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9
PSBNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpFeHBlcmltZW50YWxPcGVyYXRpb246
Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRo
b3V0QXR0cmlidXRlczo6RXhwZXJpbWVudGFsT3BlcmF0aW9uPihkZWNvZGVyLCB0aGlzLCAmVGVz
dFdpdGhvdXRBdHRyaWJ1dGVzOjpleHBlcmltZW50YWxPcGVyYXRpb24pOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOworICAgIFVO
VVNFRF9QQVJBTShkZWNvZGVyKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRy
PElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICBhdXRvIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKTsKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3Nh
Z2VzOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OkNyZWF0ZVBsdWdpbjo6bmFtZSgpKSB7CisgICAg
ICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpD
cmVhdGVQbHVnaW4+KGRlY29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZUZXN0V2l0aG91dEF0
dHJpYnV0ZXM6OmNyZWF0ZVBsdWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVz
OjpSdW5KYXZhU2NyaXB0QWxlcnQ6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3Nh
Z2U8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6UnVuSmF2YVNjcmlwdEFsZXJ0Pihk
ZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmVGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpydW5K
YXZhU2NyaXB0QWxlcnQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6R2V0UGx1
Z2luczo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVzc2FnZTxNZXNzYWdlczo6VGVz
dFdpdGhvdXRBdHRyaWJ1dGVzOjpHZXRQbHVnaW5zPihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0
aGlzLCAmVGVzdFdpdGhvdXRBdHRyaWJ1dGVzOjpnZXRQbHVnaW5zKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2VzOjpUZXN0
V2l0aG91dEF0dHJpYnV0ZXM6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpuYW1lKCkpIHsK
KyAgICAgICAgSVBDOjpoYW5kbGVNZXNzYWdlU3luY2hyb25vdXM8TWVzc2FnZXM6OlRlc3RXaXRo
b3V0QXR0cmlidXRlczo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24+KGNvbm5lY3Rpb24sIGRl
Y29kZXIsIHJlcGx5RW5jb2RlciwgdGhpcywgJlRlc3RXaXRob3V0QXR0cmlidXRlczo6Z2V0UGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6
VGVzdE11bHRpcGxlQXR0cmlidXRlczo6bmFtZSgpKSB7CisgICAgICAgIElQQzo6aGFuZGxlTWVz
c2FnZVN5bmNocm9ub3VzV2FudHNDb25uZWN0aW9uPE1lc3NhZ2VzOjpUZXN0V2l0aG91dEF0dHJp
YnV0ZXM6OlRlc3RNdWx0aXBsZUF0dHJpYnV0ZXM+KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
RW5jb2RlciwgdGhpcywgJlRlc3RXaXRob3V0QXR0cmlidXRlczo6dGVzdE11bHRpcGxlQXR0cmli
dXRlcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRl
czo6SW50ZXJwcmV0S2V5RXZlbnQ6Om5hbWUoKSkgeworICAgICAgICBJUEM6OmhhbmRsZU1lc3Nh
Z2U8TWVzc2FnZXM6OlRlc3RXaXRob3V0QXR0cmlidXRlczo6SW50ZXJwcmV0S2V5RXZlbnQ+KGRl
Y29kZXIsICpyZXBseUVuY29kZXIsIHRoaXMsICZUZXN0V2l0aG91dEF0dHJpYnV0ZXM6OmludGVy
cHJldEtleUV2ZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIFVOVVNF
RF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7CisgICAgVU5V
U0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gKEVOQUJMRShXRUJLSVQyKSAmJiAo
TkVTVEVEX01BU1RFUl9DT05ESVRJT04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0
dHJpYnV0ZXNNZXNzYWdlcy5oIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9U
ZXN0V2l0aG91dEF0dHJpYnV0ZXNNZXNzYWdlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmMTVlOGEyOGVjZDli
ZjQ5YmFhYjE4ZjExMDE5YjAxM2Q2ZTI1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRob3V0QXR0cmlidXRlc01lc3NhZ2VzLmgK
QEAgLTAsMCArMSw1NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
ICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IChFTkFCTEUoV0VCS0lUMikgJiYgKE5FU1RFRF9NQVNURVJfQ09ORElUSU9OIHx8IE1BU1RFUl9P
UiAmJiBNQVNURVJfQU5EKSkKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSAiR2Vz
dHVyZVR5cGVzLmgiCisjZW5kaWYKKyNpbmNsdWRlICJNZXNzYWdlTmFtZXMuaCIKKyNpbmNsdWRl
ICJQbHVnaW4uaCIKKyNpbmNsdWRlICJUZXN0V2l0aG91dEF0dHJpYnV0ZXNNZXNzYWdlc1JlcGxp
ZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0tleWJvYXJkRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNp
bmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIER1bW15VHlw
ZTsKK2NsYXNzIE1hY2hQb3J0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBy
ZWZlcmVuY2VzU3RvcmU7CitjbGFzcyBXZWJUb3VjaEV2ZW50OworfQorCituYW1lc3BhY2UgTWVz
c2FnZXMgeworbmFtZXNwYWNlIFRlc3RXaXRob3V0QXR0cmlidXRlcyB7CisKK3N0YXRpYyBpbmxp
bmUgSVBDOjpSZWNlaXZlck5hbWUgbWVzc2FnZVJlY2VpdmVyTmFtZSgpCit7CisgICAgcmV0dXJu
IElQQzo6UmVjZWl2ZXJOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXM7Cit9CisKK2NsYXNzIExv
YWRVUkwgeworcHVibGljOgorICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Y29uc3Qg
U3RyaW5nJj47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4g
SVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0xvYWRVUkw7IH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4cGxpY2l0IExvYWRVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpCisgICAgICAgIDogbV9hcmd1bWVudHModXJsKQorICAgIHsKKyAg
ICB9CisKKyAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50
cyBtX2FyZ3VtZW50czsKK307CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorY2xhc3MgTG9h
ZFNvbWV0aGluZyB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxj
b25zdCBTdHJpbmcmPjsKKworICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJl
dHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfTG9hZFNvbWV0aGlu
ZzsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgZXhwbGlj
aXQgTG9hZFNvbWV0aGluZyhjb25zdCBTdHJpbmcmIHVybCkKKyAgICAgICAgOiBtX2FyZ3VtZW50
cyh1cmwpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKyNlbmRpZgorCisjaWYgKEVOQUJM
RShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04gfHwgU09NRV9PVEhF
Ul9NRVNTQUdFX0NPTkRJVElPTikpCitjbGFzcyBUb3VjaEV2ZW50IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViVG91Y2hFdmVudCY+
OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVz
c2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19Ub3VjaEV2ZW50OyB9CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7CisKKyAgICBleHBsaWNpdCBUb3VjaEV2ZW50KGNv
bnN0IFdlYktpdDo6V2ViVG91Y2hFdmVudCYgZXZlbnQpCisgICAgICAgIDogbV9hcmd1bWVudHMo
ZXZlbnQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKyNlbmRpZgorCisjaWYgKEVOQUJM
RShUT1VDSF9FVkVOVFMpICYmIChORVNURURfTUVTU0FHRV9DT05ESVRJT04gJiYgU09NRV9PVEhF
Ul9NRVNTQUdFX0NPTkRJVElPTikpCitjbGFzcyBBZGRFdmVudCB7CitwdWJsaWM6CisgICAgdXNp
bmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTxjb25zdCBXZWJLaXQ6OldlYlRvdWNoRXZlbnQmPjsK
KworICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3Nh
Z2VOYW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfQWRkRXZlbnQ7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4cGxpY2l0IEFkZEV2ZW50KGNvbnN0IFdl
YktpdDo6V2ViVG91Y2hFdmVudCYgZXZlbnQpCisgICAgICAgIDogbV9hcmd1bWVudHMoZXZlbnQp
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKK2NsYXNzIExvYWRTb21ldGhpbmdFbHNlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBB
cmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+OworCisgICAgc3RhdGljIElQQzo6
TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0
QXR0cmlidXRlc19Mb2FkU29tZXRoaW5nRWxzZTsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIGlz
U3luYyA9IGZhbHNlOworCisgICAgZXhwbGljaXQgTG9hZFNvbWV0aGluZ0Vsc2UoY29uc3QgU3Ry
aW5nJiB1cmwpCisgICAgICAgIDogbV9hcmd1bWVudHModXJsKQorICAgIHsKKyAgICB9CisKKyAg
ICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3Vt
ZW50czsKK307CisjZW5kaWYKKworY2xhc3MgRGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uIHsKK3B1
YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPHVpbnQ2NF90LCB1aW50NjRf
dCwgdWludDMyX3Q+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0
dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19EaWRSZWNlaXZlUG9s
aWN5RGVjaXNpb247IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKwor
ICAgIERpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbih1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBs
aXN0ZW5lcklELCB1aW50MzJfdCBwb2xpY3lBY3Rpb24pCisgICAgICAgIDogbV9hcmd1bWVudHMo
ZnJhbWVJRCwgbGlzdGVuZXJJRCwgcG9saWN5QWN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBj
b25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50
czsKK307CisKK2NsYXNzIENsb3NlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBz
dGQ6OnR1cGxlPD47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1
cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0Nsb3NlOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gZmFsc2U7CisKKyAgICBjb25zdCBBcmd1bWVudHMm
IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307CisKK2NsYXNz
IFByZWZlcmVuY2VzRGlkQ2hhbmdlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBz
dGQ6OnR1cGxlPGNvbnN0IFdlYktpdDo6V2ViUHJlZmVyZW5jZXNTdG9yZSY+OworCisgICAgc3Rh
dGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRl
c3RXaXRob3V0QXR0cmlidXRlc19QcmVmZXJlbmNlc0RpZENoYW5nZTsgfQorICAgIHN0YXRpYyBj
b25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgZXhwbGljaXQgUHJlZmVyZW5jZXNEaWRD
aGFuZ2UoY29uc3QgV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKKyAgICAgICAg
OiBtX2FyZ3VtZW50cyhzdG9yZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgQXJndW1lbnRz
JiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9OworCitjbGFz
cyBTZW5kRG91YmxlQW5kRmxvYXQgeworcHVibGljOgorICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0
ZDo6dHVwbGU8ZG91YmxlLCBmbG9hdD47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBu
YW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1Nl
bmREb3VibGVBbmRGbG9hdDsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNl
OworCisgICAgU2VuZERvdWJsZUFuZEZsb2F0KGRvdWJsZSBkLCBmbG9hdCBmKQorICAgICAgICA6
IG1fYXJndW1lbnRzKGQsIGYpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYg
YXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKworY2xhc3Mg
U2VuZEludHMgeworcHVibGljOgorICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8Y29u
c3QgVmVjdG9yPHVpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8dWludDY0X3Q+PiY+Owor
CisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2Fn
ZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19TZW5kSW50czsgfQorICAgIHN0YXRpYyBjb25z
dCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgU2VuZEludHMoY29uc3QgVmVjdG9yPHVpbnQ2
NF90PiYgaW50cywgY29uc3QgVmVjdG9yPFZlY3Rvcjx1aW50NjRfdD4+JiBpbnRWZWN0b3JzKQor
ICAgICAgICA6IG1fYXJndW1lbnRzKGludHMsIGludFZlY3RvcnMpCisgICAgeworICAgIH0KKwor
ICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJn
dW1lbnRzOworfTsKKworY2xhc3MgQ3JlYXRlUGx1Z2luIHsKK3B1YmxpYzoKKyAgICB1c2luZyBB
cmd1bWVudHMgPSBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlBsdWdpbjo6UGFy
YW1ldGVycyY+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJu
IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19DcmVhdGVQbHVnaW47IH0K
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOworCisgICAgdXNpbmcgUmVwbHkg
PSBzdGQ6OnR1cGxlPGJvb2wmPjsKKyAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVw
bGU8Ym9vbD47CisgICAgQ3JlYXRlUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkluc3RhbmNlSUQsIGNv
bnN0IFdlYktpdDo6UGx1Z2luOjpQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgICAgICA6IG1f
YXJndW1lbnRzKHBsdWdpbkluc3RhbmNlSUQsIHBhcmFtZXRlcnMpCisgICAgeworICAgIH0KKwor
ICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJn
dW1lbnRzOworfTsKKworY2xhc3MgUnVuSmF2YVNjcmlwdEFsZXJ0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmPjsKKwor
ICAgIHN0YXRpYyBJUEM6Ok1lc3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VO
YW1lOjpUZXN0V2l0aG91dEF0dHJpYnV0ZXNfUnVuSmF2YVNjcmlwdEFsZXJ0OyB9CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKKworICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0
dXBsZTw+OworICAgIHVzaW5nIFJlcGx5QXJndW1lbnRzID0gc3RkOjp0dXBsZTw+OworICAgIFJ1
bkphdmFTY3JpcHRBbGVydCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CisgICAgICAgIDogbV9hcmd1bWVudHMoZnJhbWVJRCwgbWVzc2FnZSkKKyAgICB7CisgICAgfQor
CisgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcmd1bWVudHMgbV9h
cmd1bWVudHM7Cit9OworCitjbGFzcyBHZXRQbHVnaW5zIHsKK3B1YmxpYzoKKyAgICB1c2luZyBB
cmd1bWVudHMgPSBzdGQ6OnR1cGxlPGJvb2w+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5h
bWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRl
c19HZXRQbHVnaW5zOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKKwor
ICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0dXBsZTxWZWN0b3I8V2ViQ29yZTo6UGx1Z2luSW5mbz4m
PjsKKyAgICB1c2luZyBSZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8VmVjdG9yPFdlYkNvcmU6
OlBsdWdpbkluZm8+PjsKKyAgICBleHBsaWNpdCBHZXRQbHVnaW5zKGJvb2wgcmVmcmVzaCkKKyAg
ICAgICAgOiBtX2FyZ3VtZW50cyhyZWZyZXNoKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBB
cmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307
CisKK2NsYXNzIEdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFN0cmluZyY+OworCisgICAgc3RhdGljIElQ
Qzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRo
b3V0QXR0cmlidXRlc19HZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjsgfQorICAgIHN0YXRpYyBj
b25zdCBib29sIGlzU3luYyA9IHRydWU7CisKKyAgICB1c2luZyBEZWxheWVkUmVwbHkgPSBHZXRQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbkRlbGF5ZWRSZXBseTsKKyAgICBzdGF0aWMgdm9pZCBzZW5k
KHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiYsIElQQzo6Q29ubmVjdGlvbiYsIGNvbnN0
IElQQzo6Q29ubmVjdGlvbjo6SGFuZGxlJiBjb25uZWN0aW9uSGFuZGxlKTsKKyAgICB1c2luZyBS
ZXBseSA9IHN0ZDo6dHVwbGU8SVBDOjpDb25uZWN0aW9uOjpIYW5kbGUmPjsKKyAgICB1c2luZyBS
ZXBseUFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8SVBDOjpDb25uZWN0aW9uOjpIYW5kbGU+OworICAg
IGV4cGxpY2l0IEdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKGNvbnN0IFN0cmluZyYgcGx1Z2lu
UGF0aCkKKyAgICAgICAgOiBtX2FyZ3VtZW50cyhwbHVnaW5QYXRoKQorICAgIHsKKyAgICB9CisK
KyAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2Fy
Z3VtZW50czsKK307CisKK2NsYXNzIFRlc3RNdWx0aXBsZUF0dHJpYnV0ZXMgeworcHVibGljOgor
ICAgIHVzaW5nIEFyZ3VtZW50cyA9IHN0ZDo6dHVwbGU8PjsKKworICAgIHN0YXRpYyBJUEM6Ok1l
c3NhZ2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0
dHJpYnV0ZXNfVGVzdE11bHRpcGxlQXR0cmlidXRlczsgfQorICAgIHN0YXRpYyBjb25zdCBib29s
IGlzU3luYyA9IHRydWU7CisKKyAgICB1c2luZyBEZWxheWVkUmVwbHkgPSBUZXN0TXVsdGlwbGVB
dHRyaWJ1dGVzRGVsYXllZFJlcGx5OworICAgIHN0YXRpYyB2b2lkIHNlbmQoc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJik7CisgICAgdXNpbmcgUmVwbHkg
PSBzdGQ6OnR1cGxlPD47CisgICAgdXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPD47
CisgICAgY29uc3QgQXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYXJndW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcmd1bWVudHMgbV9h
cmd1bWVudHM7Cit9OworCitjbGFzcyBUZXN0UGFyYW1ldGVyQXR0cmlidXRlcyB7CitwdWJsaWM6
CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTx1aW50NjRfdCwgZG91YmxlLCBkb3Vi
bGU+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6
TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19UZXN0UGFyYW1ldGVyQXR0cmlidXRl
czsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgVGVzdFBh
cmFtZXRlckF0dHJpYnV0ZXModWludDY0X3QgZm9vLCBkb3VibGUgYmFyLCBkb3VibGUgYmF6KQor
ICAgICAgICA6IG1fYXJndW1lbnRzKGZvbywgYmFyLCBiYXopCisgICAgeworICAgIH0KKworICAg
IGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1l
bnRzOworfTsKKworY2xhc3MgVGVtcGxhdGVUZXN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1
bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5n
LCB1aW50NjRfdD4+Jj47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyBy
ZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX1RlbXBsYXRlVGVz
dDsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAgZXhwbGlj
aXQgVGVtcGxhdGVUZXN0KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8U3RyaW5nLCB1
aW50NjRfdD4+JiBhKQorICAgICAgICA6IG1fYXJndW1lbnRzKGEpCisgICAgeworICAgIH0KKwor
ICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJn
dW1lbnRzOworfTsKKworY2xhc3MgU2V0VmlkZW9MYXllcklEIHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBs
YXRmb3JtTGF5ZXJJRCY+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgpIHsg
cmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmlidXRlc19TZXRWaWRlb0xh
eWVySUQ7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIGV4
cGxpY2l0IFNldFZpZGVvTGF5ZXJJRChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQmIHZpZGVvTGF5ZXJJRCkKKyAgICAgICAgOiBtX2FyZ3VtZW50cyh2aWRlb0xh
eWVySUQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOworfTsKKworI2lmIFBMQVRGT1JNKE1BQykK
K2NsYXNzIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9uIHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IElQQzo6TWFjaFBvcnQmLCBjb25zdCBPcHRp
b25TZXQ8V2ViS2l0OjpTZWxlY3Rpb25GbGFncz4mPjsKKworICAgIHN0YXRpYyBJUEM6Ok1lc3Nh
Z2VOYW1lIG5hbWUoKSB7IHJldHVybiBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aG91dEF0dHJp
YnV0ZXNfRGlkQ3JlYXRlV2ViUHJvY2Vzc0Nvbm5lY3Rpb247IH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAgIERpZENyZWF0ZVdlYlByb2Nlc3NDb25uZWN0aW9u
KGNvbnN0IElQQzo6TWFjaFBvcnQmIGNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25zdCBPcHRpb25T
ZXQ8V2ViS2l0OjpTZWxlY3Rpb25GbGFncz4mIGZsYWdzKQorICAgICAgICA6IG1fYXJndW1lbnRz
KGNvbm5lY3Rpb25JZGVudGlmaWVyLCBmbGFncykKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qg
QXJndW1lbnRzJiBhcmd1bWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJn
dW1lbnRzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcmd1bWVudHMgbV9hcmd1bWVudHM7Cit9
OworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCitjbGFzcyBJbnRlcnByZXRLZXlFdmVudCB7
CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3RkOjp0dXBsZTx1aW50MzJfdD47CisK
KyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdl
TmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0ludGVycHJldEtleUV2ZW50OyB9CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNTeW5jID0gdHJ1ZTsKKworICAgIHVzaW5nIFJlcGx5ID0gc3RkOjp0
dXBsZTxWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiY+OworICAgIHVzaW5nIFJlcGx5
QXJndW1lbnRzID0gc3RkOjp0dXBsZTxWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPj47
CisgICAgZXhwbGljaXQgSW50ZXJwcmV0S2V5RXZlbnQodWludDMyX3QgdHlwZSkKKyAgICAgICAg
OiBtX2FyZ3VtZW50cyh0eXBlKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBBcmd1bWVudHMm
IGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmd1bWVudHM7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsKK307CisjZW5kaWYK
KworI2lmIEVOQUJMRShERVBSRUNBVEVEX0ZFQVRVUkUpCitjbGFzcyBEZXByZWNhdGVkT3BlcmF0
aW9uIHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IElQ
Qzo6RHVtbXlUeXBlJj47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBuYW1lKCkgeyBy
ZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhvdXRBdHRyaWJ1dGVzX0RlcHJlY2F0ZWRP
cGVyYXRpb247IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSBmYWxzZTsKKworICAg
IGV4cGxpY2l0IERlcHJlY2F0ZWRPcGVyYXRpb24oY29uc3QgSVBDOjpEdW1teVR5cGUmIGR1bW15
KQorICAgICAgICA6IG1fYXJndW1lbnRzKGR1bW15KQorICAgIHsKKyAgICB9CisKKyAgICBjb25z
dCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9h
cmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50cyBtX2FyZ3VtZW50czsK
K307CisjZW5kaWYKKworI2lmIEVOQUJMRShFWFBFUklNRU5UQUxfRkVBVFVSRSkKK2NsYXNzIEV4
cGVyaW1lbnRhbE9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1lbnRzID0gc3Rk
Ojp0dXBsZTxjb25zdCBJUEM6OkR1bW15VHlwZSY+OworCisgICAgc3RhdGljIElQQzo6TWVzc2Fn
ZU5hbWUgbmFtZSgpIHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRob3V0QXR0cmli
dXRlc19FeHBlcmltZW50YWxPcGVyYXRpb247IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5
bmMgPSBmYWxzZTsKKworICAgIGV4cGxpY2l0IEV4cGVyaW1lbnRhbE9wZXJhdGlvbihjb25zdCBJ
UEM6OkR1bW15VHlwZSYgZHVtbXkpCisgICAgICAgIDogbV9hcmd1bWVudHMoZHVtbXkpCisgICAg
eworICAgIH0KKworICAgIGNvbnN0IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJn
dW1lbnRzIG1fYXJndW1lbnRzOworfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2l0
aG91dEF0dHJpYnV0ZXMKK30gLy8gbmFtZXNwYWNlIE1lc3NhZ2VzCisKKyNlbmRpZiAvLyAoRU5B
QkxFKFdFQktJVDIpICYmIChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYg
TUFTVEVSX0FORCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rl
c3RzL1Rlc3RXaXRob3V0QXR0cmlidXRlc01lc3NhZ2VzUmVwbGllcy5oIGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aG91dEF0dHJpYnV0ZXNNZXNzYWdlc1JlcGxp
ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kOGNhYjY4NzIzOWVlMTIzNzZjMDE0ODllNWJiNzA0OGIzMWIwZGUw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9U
ZXN0V2l0aG91dEF0dHJpYnV0ZXNNZXNzYWdlc1JlcGxpZXMuaApAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorICog
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiAoRU5BQkxFKFdFQktJVDIpICYm
IChORVNURURfTUFTVEVSX0NPTkRJVElPTiB8fCBNQVNURVJfT1IgJiYgTUFTVEVSX0FORCkpCisK
KyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKworCituYW1lc3BhY2UgTWVzc2FnZXMgeworbmFtZXNwYWNl
IFRlc3RXaXRob3V0QXR0cmlidXRlcyB7CisKK3VzaW5nIEdldFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uRGVsYXllZFJlcGx5ID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBJUEM6OkNvbm5l
Y3Rpb246OkhhbmRsZSYgY29ubmVjdGlvbkhhbmRsZSk+OworCit1c2luZyBUZXN0TXVsdGlwbGVB
dHRyaWJ1dGVzRGVsYXllZFJlcGx5ID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPjsKKworfSAv
LyBuYW1lc3BhY2UgVGVzdFdpdGhvdXRBdHRyaWJ1dGVzCit9IC8vIG5hbWVzcGFjZSBNZXNzYWdl
cworCisjZW5kaWYgLy8gKEVOQUJMRShXRUJLSVQyKSAmJiAoTkVTVEVEX01BU1RFUl9DT05ESVRJ
T04gfHwgTUFTVEVSX09SICYmIE1BU1RFUl9BTkQpKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>