<?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>229835</bug_id>
          
          <creation_ts>2021-09-02 15:32:47 -0700</creation_ts>
          <short_desc>Move PrivateClickMeasurementManager and PrivateClickMeasurementNetworkLoader into PrivateClickMeasurement directory</short_desc>
          <delta_ts>2021-09-02 16:03:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1789934</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-09-02 15:32:47 -0700</bug_when>
    <thetext>Move PrivateClickMeasurementManager and PrivateClickMeasurementNetworkLoader into PrivateClickMeasurement directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789936</commentid>
    <comment_count>1</comment_count>
      <attachid>437203</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-09-02 15:33:26 -0700</bug_when>
    <thetext>Created attachment 437203
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789950</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-09-02 16:03:44 -0700</bug_when>
    <thetext>r281961</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437203</attachid>
            <date>2021-09-02 15:33:26 -0700</date>
            <delta_ts>2021-09-02 16:01:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229835-20210902153326.patch</filename>
            <type>text/plain</type>
            <size>93848</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxOTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ2MzJhNDkyNzk3OWIyY2Uz
NzE2OWJiMTVjYTE2NDUyMmYyN2FjM2EuLjNhYWFmNTM5MDY4MmFiOTVlMjk0YmRjZGNlOTYxY2U0
YzdjNWY2YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDktMDIgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIFByaXZh
dGVDbGlja01lYXN1cmVtZW50TWFuYWdlciBhbmQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3
b3JrTG9hZGVyIGludG8gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgZGlyZWN0b3J5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk4MzUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlj
a01lYXN1cmVtZW50TWFuYWdlci5jcHAuCisgICAgICAgIChXZWJLaXQ6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50TWFuYWdlcjo6ZmlyZUNvbnZlcnNpb25SZXF1ZXN0SW1wbCk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQvUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRNYW5hZ2VyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5oLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29y
a0xvYWRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1By
aXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlci5jcHAuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRO
ZXR3b3JrTG9hZGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlci5oLgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAy
MDIxLTA5LTAyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgSW50cm9kdWNlIFBDTTo6Q2xpZW50IGZvciBQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dE1hbmFnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQvUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZmFjNzIxMmUxMDkxMDc5
N2Q1YTQ4NDlhYjAzMzZmMzk2ZGRhZTYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC9Qcml2YXRlQ2xpY2tNZWFz
dXJlbWVudE1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNTY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5o
IgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisj
aW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREZWJ1Z0luZm8uaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZldGNoT3B0
aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9ybURhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUVFBIZWFkZXJWYWx1ZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+Cisj
aW5jbHVkZSA8cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRv
Z3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit1c2luZyBTb3VyY2VTaXRlID0gUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNpdGU7Cit1c2luZyBBdHRyaWJ1dGlvbkRlc3Rp
bmF0aW9uU2l0ZSA9IFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0
aW9uU2l0ZTsKK3VzaW5nIEF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgPSBQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25UcmlnZ2VyRGF0YTsKK3VzaW5nIEVwaGVtZXJhbFNvdXJjZU5v
bmNlID0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkVwaGVtZXJhbFNvdXJjZU5vbmNlOworCitj
b25zdGV4cHIgU2Vjb25kcyBkZWJ1Z01vZGVTZWNvbmRzVW50aWxTZW5kIHsgMTBfcyB9OworCitQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OlByaXZhdGVDbGlja01lYXN1cmVtZW50TWFu
YWdlcihVbmlxdWVSZWY8UENNOjpDbGllbnQ+JiYgY2xpZW50LCBjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VEaXJlY3RvcnkpCisgICAgOiBtX2ZpcmVQZW5kaW5nQXR0cmlidXRpb25SZXF1ZXN0c1RpbWVy
KCp0aGlzLCAmUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpmaXJlUGVuZGluZ0F0dHJp
YnV0aW9uUmVxdWVzdHMpCisgICAgLCBtX3N0b3JhZ2VEaXJlY3Rvcnkoc3RvcmFnZURpcmVjdG9y
eSkKKyAgICAsIG1fY2xpZW50KFdURk1vdmUoY2xpZW50KSkKK3sKKyAgICAvLyBXZSBzaG91bGQg
c2VuZCBhbnkgcGVuZGluZyBhdHRyaWJ1dGlvbnMgb24gc2Vzc2lvbi1zdGFydCBpbiBjYXNlIHRo
ZWlyCisgICAgLy8gc2VuZCBkZWxheSBoYXMgZXhwaXJlZCB3aGlsZSB0aGUgc2Vzc2lvbiB3YXMg
Y2xvc2VkLiBXYWl0aW5nIDUgc2Vjb25kcyBhY2NvdW50cyBmb3IgdGhlCisgICAgLy8gZGVsYXkg
aW4gZGF0YWJhc2Ugc3RhcnR1cC4KKyAgICBzdGFydFRpbWVyKDVfcyk7Cit9CisKK3ZvaWQgUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpzdG9yZVVuYXR0cmlidXRlZChQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCYmIG1lYXN1cmVtZW50KQoreworICAgIGlmICghZmVhdHVyZUVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJFeHBpcmVkKCk7CisKKyAgICBpZiAobWVh
c3VyZW1lbnQuZXBoZW1lcmFsU291cmNlTm9uY2UoKSkgeworICAgICAgICBhdXRvIG1lYXN1cmVt
ZW50Q29weSA9IG1lYXN1cmVtZW50OworICAgICAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8g
YmUgY2xvc2UgaW4gdGltZSB0byB0aGUgbmF2aWdhdGlvbmFsIGNsaWNrIHdoaWNoIG1ha2VzIGl0
IGxpa2VseSB0byBiZSBwZXJzb25hbGx5IGlkZW50aWZpYWJsZS4KKyAgICAgICAgZ2V0VG9rZW5Q
dWJsaWNLZXkoV1RGTW92ZShtZWFzdXJlbWVudENvcHkpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludDo6U291cmNlLCBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudDo6UGNtRGF0YUNhcnJpZWQ6OlBlcnNvbmFsbHlJZGVudGlmaWFibGUsIFt3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgdGhpc10gKFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYgbWVh
c3VyZW1lbnQsIGNvbnN0IFN0cmluZyYgcHVibGljS2V5QmFzZTY0VVJMKSB7CisgICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
aWYgKHB1YmxpY0tleUJhc2U2NFVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBpZiAobV9mcmF1ZFByZXZlbnRpb25WYWx1ZXNGb3JUZXN0aW5nKQor
ICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50LnNldFNvdXJjZVVubGlua2FibGVUb2tlblZhbHVl
KG1fZnJhdWRQcmV2ZW50aW9uVmFsdWVzRm9yVGVzdGluZy0+dW5saW5rYWJsZVRva2VuKTsKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlm
IChhdXRvIGVycm9yTWVzc2FnZSA9IG1lYXN1cmVtZW50LmNhbGN1bGF0ZUFuZFVwZGF0ZVNvdXJj
ZVVubGlua2FibGVUb2tlbihwdWJsaWNLZXlCYXNlNjRVUkwpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgdGhlIGZv
bGxvd2luZyBlcnJvciBpbiBjYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VVbmxpbmthYmxlVG9rZW4o
KTogJyV7cHVibGljfXMiLCBlcnJvck1lc3NhZ2UtPnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxldmVs
OjpFcnJvciwgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdICJfcywgKmVy
cm9yTWVzc2FnZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgIGdldFNpZ25lZFVubGlu
a2FibGVUb2tlbihXVEZNb3ZlKG1lYXN1cmVtZW50KSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0pOworICAgIH0KKworICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlTGV2ZWw6OkxvZywgIltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSBTdG9yaW5n
IGEgY2xpY2suIl9zKTsKKworICAgIGluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFdURk1v
dmUobWVhc3VyZW1lbnQpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6
VW5hdHRyaWJ1dGVkKTsKK30KKworc3RhdGljIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBnZW5lcmF0
ZU5ldHdvcmtMb2FkUGFyYW1ldGVycyhVUkwmJiB1cmwsIGNvbnN0IFN0cmluZyYgaHR0cE1ldGhv
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBqc29uUGF5bG9hZCwgUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQ6OlBjbURhdGFDYXJyaWVkIGRhdGFUeXBlQ2FycmllZCwgYm9vbCBpc0RlYnVnTW9kZUVu
YWJsZWQpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgeyBXVEZNb3ZlKHVybCkgfTsK
KyAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoaHR0cE1ldGhvZCk7CisgICAgcmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNhY2hlQ29udHJvbCwgV2ViQ29yZTo6SFRU
UEhlYWRlclZhbHVlczo6bWF4QWdlMCgpKTsKKyAgICBpZiAoanNvblBheWxvYWQpIHsKKyAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQQ29udGVudFR5cGUoV2ViQ29yZTo6SFRUUEhlYWRlclZhbHVlczo6
YXBwbGljYXRpb25KU09OQ29udGVudFR5cGUoKSk7CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUEJv
ZHkoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZShqc29uUGF5bG9hZC0+dG9KU09OU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSkpOworICAgIH0KKworICAgIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBsb2Fk
UGFyYW1ldGVyczsKKyAgICBsb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICBs
b2FkUGFyYW1ldGVycy5wYXJlbnRQSUQgPSBwcmVzZW50aW5nQXBwbGljYXRpb25QSUQoKTsKKyAg
ICBsb2FkUGFyYW1ldGVycy5zdG9yZWRDcmVkZW50aWFsc1BvbGljeSA9IFN0b3JlZENyZWRlbnRp
YWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3M7CisgICAgbG9hZFBhcmFtZXRlcnMuc2hvdWxk
Q2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IHRydWU7CisgICAgbG9hZFBhcmFt
ZXRlcnMucGNtRGF0YUNhcnJpZWQgPSBVTkxJS0VMWShpc0RlYnVnTW9kZUVuYWJsZWQpID8gUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlBjbURhdGFDYXJyaWVkOjpQZXJzb25hbGx5SWRlbnRpZmlh
YmxlIDogZGF0YVR5cGVDYXJyaWVkOworCisgICAgcmV0dXJuIGxvYWRQYXJhbWV0ZXJzOworfQor
CitzdGF0aWMgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIGdlbmVyYXRlTmV0d29ya0xvYWRQYXJhbWV0
ZXJzRm9ySHR0cFBvc3QoVVJMJiYgdXJsLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGpzb25QYXlsb2Fk
LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UGNtRGF0YUNhcnJpZWQgZGF0YVR5cGVDYXJyaWVk
LCBib29sIGlzRGVidWdNb2RlRW5hYmxlZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVOZXR3b3Jr
TG9hZFBhcmFtZXRlcnMoV1RGTW92ZSh1cmwpLCAiUE9TVCJfcywgV1RGTW92ZShqc29uUGF5bG9h
ZCksIGRhdGFUeXBlQ2FycmllZCwgaXNEZWJ1Z01vZGVFbmFibGVkKTsKK30KKworc3RhdGljIE5l
dHdvcmtMb2FkUGFyYW1ldGVycyBnZW5lcmF0ZU5ldHdvcmtMb2FkUGFyYW1ldGVyc0Zvckh0dHBH
ZXQoVVJMJiYgdXJsLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UGNtRGF0YUNhcnJpZWQgZGF0
YVR5cGVDYXJyaWVkLCBib29sIGlzRGVidWdNb2RlRW5hYmxlZCkKK3sKKyAgICByZXR1cm4gZ2Vu
ZXJhdGVOZXR3b3JrTG9hZFBhcmFtZXRlcnMoV1RGTW92ZSh1cmwpLCAiR0VUIl9zLCBudWxscHRy
LCBkYXRhVHlwZUNhcnJpZWQsIGlzRGVidWdNb2RlRW5hYmxlZCk7Cit9CisKK3ZvaWQgUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpnZXRUb2tlblB1YmxpY0tleShQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCYmIGF0dHJpYnV0aW9uLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmli
dXRpb25SZXBvcnRFbmRwb2ludCBhdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50LCBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6UGNtRGF0YUNhcnJpZWQgcGNtRGF0YUNhcnJpZWQsIEZ1bmN0aW9uPHZv
aWQoUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmJiBhdHRyaWJ1dGlvbiwgY29uc3QgU3RyaW5nJiBw
dWJsaWNLZXlCYXNlNjRVUkwpPiYmIGNhbGxiYWNrKQoreworICAgIGlmICghZmVhdHVyZUVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0b2tlblB1YmxpY0tleVVSTCA9IGF0
dHJpYnV0aW9uLnRva2VuUHVibGljS2V5VVJMKCk7CisgICAgaWYgKG1fdG9rZW5QdWJsaWNLZXlV
UkxGb3JUZXN0aW5nKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50ID09
IFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50OjpEZXN0
aW5hdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdG9rZW5QdWJsaWNLZXlVUkwg
PSAqbV90b2tlblB1YmxpY0tleVVSTEZvclRlc3Rpbmc7CisgICAgICAgIC8vIEZJWE1FKDIyNTM2
NCkKKyAgICAgICAgcGNtRGF0YUNhcnJpZWQgPSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UGNt
RGF0YUNhcnJpZWQ6Ok5vblBlcnNvbmFsbHlJZGVudGlmaWFibGU7CisgICAgfQorCisgICAgaWYg
KHRva2VuUHVibGljS2V5VVJMLmlzRW1wdHkoKSB8fCAhdG9rZW5QdWJsaWNLZXlVUkwuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxvYWRQYXJhbWV0ZXJzID0gZ2VuZXJh
dGVOZXR3b3JrTG9hZFBhcmFtZXRlcnNGb3JIdHRwR2V0KFdURk1vdmUodG9rZW5QdWJsaWNLZXlV
UkwpLCBwY21EYXRhQ2FycmllZCwgZGVidWdNb2RlRW5hYmxlZCgpKTsKKworICAgIFJFTEVBU0Vf
TE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJBYm91dCB0byBmaXJlIGEgdG9rZW4g
cHVibGljIGtleSByZXF1ZXN0LiIpOworICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVz
c2FnZShNZXNzYWdlTGV2ZWw6OkxvZywgIltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSBBYm91
dCB0byBmaXJlIGEgdG9rZW4gcHVibGljIGtleSByZXF1ZXN0LiJfcyk7CisKKyAgICBtX2NsaWVu
dC0+bG9hZEZyb21OZXR3b3JrKFdURk1vdmUobG9hZFBhcmFtZXRlcnMpLCBbd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHRoaXMsIGF0dHJpYnV0aW9uID0gV1RGTW92ZShhdHRyaWJ1dGlv
biksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChhdXRvJiBlcnJvciwgYXV0byYgcmVz
cG9uc2UsIGF1dG8mIGpzb25PYmplY3QpIG11dGFibGUgeworICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsK
KyAgICAgICAgICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlTGV2
ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gUmVjZWl2
ZWQgZXJyb3I6ICciX3MsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCksICInIGZvciB0b2tl
biBwdWJsaWMga2V5IHJlcXVlc3QuIl9zKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIWpzb25PYmplY3QpIHsKKyAgICAgICAgICAgIG1fY2xpZW50LT5i
cm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJb
UHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gSlNPTiByZXNwb25zZSBpcyBlbXB0eSBmb3IgdG9r
ZW4gcHVibGljIGtleSByZXF1ZXN0LiJfcykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgbV9jbGllbnQtPmJyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VM
ZXZlbDo6TG9nLCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IEpT
T04gcmVzcG9uc2UgZm9yIHRva2VuIHB1YmxpYyBrZXkgcmVxdWVzdC4iX3MpKTsKKworICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKGF0dHJpYnV0aW9uKSwganNvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0
b2tlbl9wdWJsaWNfa2V5Il9zKSk7CisgICAgfSk7CisKK30KKwordm9pZCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudE1hbmFnZXI6OmdldFNpZ25lZFVubGlua2FibGVUb2tlbihQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCYmIG1lYXN1cmVtZW50KQoreworICAgIGlmICghZmVhdHVyZUVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGNsb3Nl
IGluIHRpbWUgdG8gdGhlIG5hdmlnYXRpb25hbCBjbGljayB3aGljaCBtYWtlcyBpdCBsaWtlbHkg
dG8gYmUgcGVyc29uYWxseSBpZGVudGlmaWFibGUuCisgICAgYXV0byBwY21EYXRhQ2FycmllZCA9
IFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpQY21EYXRhQ2FycmllZDo6UGVyc29uYWxseUlkZW50
aWZpYWJsZTsKKyAgICBhdXRvIHRva2VuU2lnbmF0dXJlVVJMID0gbWVhc3VyZW1lbnQudG9rZW5T
aWduYXR1cmVVUkwoKTsKKyAgICBpZiAobV90b2tlblNpZ25hdHVyZVVSTEZvclRlc3RpbmcpIHsK
KyAgICAgICAgdG9rZW5TaWduYXR1cmVVUkwgPSAqbV90b2tlblNpZ25hdHVyZVVSTEZvclRlc3Rp
bmc7CisgICAgICAgIC8vIEZJWE1FKDIyNTM2NCkKKyAgICAgICAgcGNtRGF0YUNhcnJpZWQgPSBQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UGNtRGF0YUNhcnJpZWQ6Ok5vblBlcnNvbmFsbHlJZGVu
dGlmaWFibGU7CisgICAgfQorCisgICAgaWYgKHRva2VuU2lnbmF0dXJlVVJMLmlzRW1wdHkoKSB8
fCAhdG9rZW5TaWduYXR1cmVVUkwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvIGxvYWRQYXJhbWV0ZXJzID0gZ2VuZXJhdGVOZXR3b3JrTG9hZFBhcmFtZXRlcnNGb3JIdHRw
UG9zdChXVEZNb3ZlKHRva2VuU2lnbmF0dXJlVVJMKSwgbWVhc3VyZW1lbnQudG9rZW5TaWduYXR1
cmVKU09OKCksIHBjbURhdGFDYXJyaWVkLCBkZWJ1Z01vZGVFbmFibGVkKCkpOworCisgICAgUkVM
RUFTRV9MT0dfSU5GTyhQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgIkFib3V0IHRvIGZpcmUgYSB1
bmxpbmthYmxlIHRva2VuIHNpZ25pbmcgcmVxdWVzdC4iKTsKKyAgICBtX2NsaWVudC0+YnJvYWRj
YXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxldmVsOjpMb2csICJbUHJpdmF0ZSBDbGljayBNZWFz
dXJlbWVudF0gQWJvdXQgdG8gZmlyZSBhIHVubGlua2FibGUgdG9rZW4gc2lnbmluZyByZXF1ZXN0
LiJfcyk7CisKKyAgICBtX2NsaWVudC0+bG9hZEZyb21OZXR3b3JrKFdURk1vdmUobG9hZFBhcmFt
ZXRlcnMpLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHRoaXMsIG1lYXN1cmVtZW50
ID0gV1RGTW92ZShtZWFzdXJlbWVudCldIChhdXRvJiBlcnJvciwgYXV0byYgcmVzcG9uc2UsIGF1
dG8mIGpzb25PYmplY3QpIG11dGFibGUgeworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAg
ICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlTGV2ZWw6OkVycm9y
LCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gUmVjZWl2ZWQgZXJyb3I6
ICciX3MsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCksICInIGZvciBzZWNyZXQgdG9rZW4g
c2lnbmluZyByZXF1ZXN0LiJfcykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFqc29uT2JqZWN0KSB7CisgICAgICAgICAgICBtX2NsaWVudC0+YnJvYWRj
YXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiW1ByaXZh
dGUgQ2xpY2sgTWVhc3VyZW1lbnRdIEpTT04gcmVzcG9uc2UgaXMgZW1wdHkgZm9yIHRva2VuIHNp
Z25pbmcgcmVxdWVzdC4iX3MpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gc2lnbmF0dXJlQmFzZTY0VVJMID0ganNvbk9iamVjdC0+Z2V0U3RyaW5nKCJ1
bmxpbmthYmxlX3Rva2VuIl9zKTsKKyAgICAgICAgaWYgKHNpZ25hdHVyZUJhc2U2NFVSTC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVzc2FnZShN
ZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVu
dF0gSlNPTiByZXNwb25zZSBkb2Vzbid0IGhhdmUgdGhlIGtleSAndW5saW5rYWJsZV90b2tlbicg
Zm9yIHRva2VuIHNpZ25pbmcgcmVxdWVzdC4iX3MpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAvLyBGSVggTk9XIQorICAgICAgICBpZiAobV9mcmF1ZFByZXZlbnRp
b25WYWx1ZXNGb3JUZXN0aW5nKQorICAgICAgICAgICAgbWVhc3VyZW1lbnQuc2V0U291cmNlU2Vj
cmV0VG9rZW4oeyBtX2ZyYXVkUHJldmVudGlvblZhbHVlc0ZvclRlc3RpbmctPnNlY3JldFRva2Vu
LCBtX2ZyYXVkUHJldmVudGlvblZhbHVlc0ZvclRlc3RpbmctPnNpZ25hdHVyZSwgbV9mcmF1ZFBy
ZXZlbnRpb25WYWx1ZXNGb3JUZXN0aW5nLT5rZXlJRCB9KTsKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byBlcnJvck1lc3NhZ2UgPSBtZWFz
dXJlbWVudC5jYWxjdWxhdGVBbmRVcGRhdGVTb3VyY2VTZWNyZXRUb2tlbihzaWduYXR1cmVCYXNl
NjRVUkwpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCwgIkdvdCB0aGUgZm9sbG93aW5nIGVycm9yIGluIGNhbGN1bGF0ZUFuZFVwZGF0
ZVNvdXJjZVNlY3JldFRva2VuKCk6ICcle3B1YmxpY31zIiwgZXJyb3JNZXNzYWdlLT51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3Nh
Z2UoTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3Vy
ZW1lbnRdICJfcywgKmVycm9yTWVzc2FnZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgbV9jbGllbnQtPmJyb2Fk
Y2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VMZXZlbDo6TG9nLCAiW1ByaXZhdGUgQ2xpY2sgTWVh
c3VyZW1lbnRdIFN0b3JpbmcgYSBzZWNyZXQgdG9rZW4uIl9zKTsKKworICAgICAgICBpbnNlcnRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKG1lYXN1cmVtZW50KSwgUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OlVuYXR0cmlidXRlZCk7CisgICAgfSk7CisKK30K
Kwordm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6Omluc2VydFByaXZhdGVDbGlj
a01lYXN1cmVtZW50KFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYgbWVhc3VyZW1lbnQsIFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlIHR5cGUpCit7CisgICAgaWYgKG1faXNS
dW5uaW5nRXBoZW1lcmFsTWVhc3VyZW1lbnRUZXN0KQorICAgICAgICBtZWFzdXJlbWVudC5zZXRF
cGhlbWVyYWwoUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbkVwaGVtZXJhbDo6WWVz
KTsKKyAgICBpZiAobWVhc3VyZW1lbnQuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICBtX2VwaGVt
ZXJhbE1lYXN1cmVtZW50ID0gV1RGTW92ZShtZWFzdXJlbWVudCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgc3RvcmUoKS5pbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3Zl
KG1lYXN1cmVtZW50KSwgdHlwZSk7Cit9CisKK3ZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRN
YW5hZ2VyOjpoYW5kbGVBdHRyaWJ1dGlvbihBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYgYXR0cmli
dXRpb25UcmlnZ2VyRGF0YSwgY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlZGlyZWN0UmVxdWVzdCkKK3sKKyAgICBpZiAoIWZlYXR1cmVFbmFi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZGlyZWN0
RG9tYWluIHsgcmVkaXJlY3RSZXF1ZXN0LnVybCgpIH07CisgICAgYXV0byYgZmlyc3RQYXJ0eVVS
TCA9IHJlZGlyZWN0UmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpOworCisgICAgaWYgKCFy
ZWRpcmVjdERvbWFpbi5tYXRjaGVzKHJlcXVlc3RVUkwpKSB7CisgICAgICAgIG1fY2xpZW50LT5i
cm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsICJbUHJpdmF0ZSBD
bGljayBNZWFzdXJlbWVudF0gVHJpZ2dlcmluZyBldmVudCB3YXMgbm90IGFjY2VwdGVkIGJlY2F1
c2UgdGhlIEhUVFAgcmVkaXJlY3Qgd2FzIG5vdCBzYW1lLXNpdGUuIl9zKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChyZWRpcmVjdERvbWFpbi5tYXRjaGVzKGZpcnN0UGFydHlV
UkwpKSB7CisgICAgICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
TGV2ZWw6Oldhcm5pbmcsICJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gVHJpZ2dlcmluZyBl
dmVudCB3YXMgbm90IGFjY2VwdGVkIGJlY2F1c2UgaXQgd2FzIHJlcXVlc3RlZCBpbiBhbiBIVFRQ
IHJlZGlyZWN0IHRoYXQgaXMgc2FtZS1zaXRlIGFzIHRoZSBmaXJzdC1wYXJ0eS4iX3MpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jbGllbnQtPmJyb2FkY2FzdENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VMZXZlbDo6TG9nLCAiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIFRyaWdn
ZXJpbmcgZXZlbnQgYWNjZXB0ZWQuIl9zKTsKKworICAgIGF0dHJpYnV0ZShTb3VyY2VTaXRlIHsg
V1RGTW92ZShyZWRpcmVjdERvbWFpbikgfSwgQXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUgeyBm
aXJzdFBhcnR5VVJMIH0sIFdURk1vdmUoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkpOworfQorCit2
b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6c3RhcnRUaW1lcihTZWNvbmRzIHNl
Y29uZHMpCit7CisgICAgbV9maXJlUGVuZGluZ0F0dHJpYnV0aW9uUmVxdWVzdHNUaW1lci5zdGFy
dE9uZVNob3QobV9pc1J1bm5pbmdUZXN0ID8gMF9zIDogc2Vjb25kcyk7Cit9CisKK3ZvaWQgUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjphdHRyaWJ1dGUoY29uc3QgU291cmNlU2l0ZSYg
c291cmNlU2l0ZSwgY29uc3QgQXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUmIGRlc3RpbmF0aW9u
U2l0ZSwgQXR0cmlidXRpb25UcmlnZ2VyRGF0YSYmIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpCit7
CisgICAgaWYgKCFmZWF0dXJlRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9lcGhlbWVyYWxNZWFzdXJlbWVudCkgeworICAgICAgICAvLyBFcGhlbWVyYWwgbWVhc3VyZW1l
bnQgY2FuIG9ubHkgaGF2ZSBvbmUgcGVuZGluZyBjbGljay4KKyAgICAgICAgaWYgKG1fZXBoZW1l
cmFsTWVhc3VyZW1lbnQtPnNvdXJjZVNpdGUoKSAhPSBzb3VyY2VTaXRlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAobV9lcGhlbWVyYWxNZWFzdXJlbWVudC0+ZGVzdGluYXRpb25T
aXRlKCkgIT0gZGVzdGluYXRpb25TaXRlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAgICAgCisgICAgc3RvcmUoKS5hdHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChzb3Vy
Y2VTaXRlLCBkZXN0aW5hdGlvblNpdGUsIFdURk1vdmUoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSks
IHN0ZDo6ZXhjaGFuZ2UobV9lcGhlbWVyYWxNZWFzdXJlbWVudCwgc3RkOjpudWxsb3B0KSwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSAoYXV0byBhdHRyaWJ1dGlvblNlY29u
ZHNVbnRpbFNlbmREYXRhLCBhdXRvIGRlYnVnSW5mbykgeworICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGlv
blNlY29uZHNVbnRpbFNlbmREYXRhKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IG1lc3NhZ2UgOiBkZWJ1Z0luZm8ubWVzc2FnZXMpCisgICAgICAgICAgICAgICAgbV9jbGllbnQt
PmJyb2FkY2FzdENvbnNvbGVNZXNzYWdlKG1lc3NhZ2UubWVzc2FnZUxldmVsLCBtZXNzYWdlLm1l
c3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF0dHJpYnV0aW9uU2Vjb25kc1VudGls
U2VuZERhdGEudmFsdWUoKS5oYXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkgeworICAg
ICAgICAgICAgYXV0byBtaW5TZWNvbmRzVW50aWxTZW5kID0gYXR0cmlidXRpb25TZWNvbmRzVW50
aWxTZW5kRGF0YS52YWx1ZSgpLm1pblNlY29uZHNVbnRpbFNlbmQoKTsKKworICAgICAgICAgICAg
QVNTRVJUKG1pblNlY29uZHNVbnRpbFNlbmQpOworICAgICAgICAgICAgaWYgKCFtaW5TZWNvbmRz
VW50aWxTZW5kKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKG1f
ZmlyZVBlbmRpbmdBdHRyaWJ1dGlvblJlcXVlc3RzVGltZXIuaXNBY3RpdmUoKSAmJiBtX2ZpcmVQ
ZW5kaW5nQXR0cmlidXRpb25SZXF1ZXN0c1RpbWVyLm5leHRGaXJlSW50ZXJ2YWwoKSA8ICptaW5T
ZWNvbmRzVW50aWxTZW5kKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2Ns
aWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxldmVsOjpMb2csIG1ha2VTdHJp
bmcoIltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSBTZXR0aW5nIHRpbWVyIGZvciBmaXJpbmcg
YXR0cmlidXRpb24gcmVxdWVzdCB0byB0aGUgZGVidWcgbW9kZSB0aW1lb3V0IG9mICJfcywgZGVi
dWdNb2RlU2Vjb25kc1VudGlsU2VuZC5zZWNvbmRzKCksICIgc2Vjb25kcyB3aGVyZSB0aGUgcmVn
dWxhciB0aW1lb3V0IHdvdWxkIGhhdmUgYmVlbiAiX3MsIG1pblNlY29uZHNVbnRpbFNlbmQudmFs
dWUoKS5zZWNvbmRzKCksICIgc2Vjb25kcy4iX3MpKTsKKyAgICAgICAgICAgICAgICBtaW5TZWNv
bmRzVW50aWxTZW5kID0gZGVidWdNb2RlU2Vjb25kc1VudGlsU2VuZDsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVzc2FnZShN
ZXNzYWdlTGV2ZWw6OkxvZywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRd
IFNldHRpbmcgdGltZXIgZm9yIGZpcmluZyBhdHRyaWJ1dGlvbiByZXF1ZXN0IHRvIHRoZSB0aW1l
b3V0IG9mICJfcywgbWluU2Vjb25kc1VudGlsU2VuZC52YWx1ZSgpLnNlY29uZHMoKSwgIiBzZWNv
bmRzLiJfcykpOworCisgICAgICAgICAgICBzdGFydFRpbWVyKCptaW5TZWNvbmRzVW50aWxTZW5k
KTsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50
TWFuYWdlcjo6ZmlyZUNvbnZlcnNpb25SZXF1ZXN0KGNvbnN0IFByaXZhdGVDbGlja01lYXN1cmVt
ZW50JiBhdHRyaWJ1dGlvbiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uUmVw
b3J0RW5kcG9pbnQgYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCkKK3sKKyAgICBpZiAoIWZlYXR1
cmVFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghYXR0cmlidXRpb24uc291
cmNlVW5saW5rYWJsZVRva2VuKCkpIHsKKyAgICAgICAgZmlyZUNvbnZlcnNpb25SZXF1ZXN0SW1w
bChhdHRyaWJ1dGlvbiwgYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBhdXRvIGF0dHJpYnV0aW9uQ29weSA9IGF0dHJpYnV0aW9uOworICAg
IC8vIFRoaXMgaGFwcGVucyBvdXQgb2Ygd2VicGFnZSBjb250ZXh0IGFuZCB3aXRoIGEgbG9uZyBk
ZWxheSBhbmQgaXMgdGh1cyB1bmxpa2VseSB0byBiZSBwZXJzb25hbGx5IGlkZW50aWZpYWJsZS4K
KyAgICBnZXRUb2tlblB1YmxpY0tleShXVEZNb3ZlKGF0dHJpYnV0aW9uQ29weSksIGF0dHJpYnV0
aW9uUmVwb3J0RW5kcG9pbnQsIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpQY21EYXRhQ2Fycmll
ZDo6Tm9uUGVyc29uYWxseUlkZW50aWZpYWJsZSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpLCB0aGlzLCBhdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50XSAoUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQmJiBhdHRyaWJ1dGlvbiwgY29uc3QgU3RyaW5nJiBwdWJsaWNLZXlCYXNlNjRVUkwpIHsK
KyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBh
dXRvIHB1YmxpY0tleURhdGEgPSBiYXNlNjRVUkxEZWNvZGUocHVibGljS2V5QmFzZTY0VVJMKTsK
KyAgICAgICAgaWYgKCFwdWJsaWNLZXlEYXRhKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGF1dG8gY3J5cHRvID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0Rp
Z2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKKyAgICAgICAgY3J5cHRvLT5hZGRCeXRlcyhwdWJs
aWNLZXlEYXRhLT5kYXRhKCksIHB1YmxpY0tleURhdGEtPnNpemUoKSk7CisgICAgICAgIGF1dG8g
cHVibGljS2V5RGF0YUhhc2ggPSBjcnlwdG8tPmNvbXB1dGVIYXNoKCk7CisKKyAgICAgICAgYXV0
byBrZXlJRCA9IGJhc2U2NFVSTEVuY29kZVRvU3RyaW5nKHB1YmxpY0tleURhdGFIYXNoLmRhdGEo
KSwgcHVibGljS2V5RGF0YUhhc2guc2l6ZSgpKTsKKyAgICAgICAgaWYgKGtleUlEICE9IGF0dHJp
YnV0aW9uLnNvdXJjZVVubGlua2FibGVUb2tlbigpLT5rZXlJREJhc2U2NFVSTCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBmaXJlQ29udmVyc2lvblJlcXVlc3RJbXBsKGF0dHJpYnV0
aW9uLCBhdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KTsKKyAgICB9KTsKK30KKwordm9pZCBQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmZpcmVDb252ZXJzaW9uUmVxdWVzdEltcGwoY29u
c3QgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmIGF0dHJpYnV0aW9uLCBQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCBhdHRyaWJ1dGlvblJlcG9ydEVuZHBv
aW50KQoreworICAgIFVSTCBhdHRyaWJ1dGlvblVSTDsKKyAgICBzd2l0Y2ggKGF0dHJpYnV0aW9u
UmVwb3J0RW5kcG9pbnQpIHsKKyAgICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRy
aWJ1dGlvblJlcG9ydEVuZHBvaW50OjpTb3VyY2U6CisgICAgICAgIGF0dHJpYnV0aW9uVVJMID0g
bV9hdHRyaWJ1dGlvblJlcG9ydFRlc3RDb25maWcgPyBtX2F0dHJpYnV0aW9uUmVwb3J0VGVzdENv
bmZpZy0+YXR0cmlidXRpb25SZXBvcnRTb3VyY2VVUkwgOiBhdHRyaWJ1dGlvbi5hdHRyaWJ1dGlv
blJlcG9ydFNvdXJjZVVSTCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFByaXZhdGVDbGlj
a01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50OjpEZXN0aW5hdGlvbjoKKyAg
ICAgICAgYXR0cmlidXRpb25VUkwgPSBtX2F0dHJpYnV0aW9uUmVwb3J0VGVzdENvbmZpZyA/IG1f
YXR0cmlidXRpb25SZXBvcnRUZXN0Q29uZmlnLT5hdHRyaWJ1dGlvblJlcG9ydEF0dHJpYnV0ZU9u
VVJMIDogYXR0cmlidXRpb24uYXR0cmlidXRpb25SZXBvcnRBdHRyaWJ1dGVPblVSTCgpOworICAg
IH0KKworICAgIGlmIChhdHRyaWJ1dGlvblVSTC5pc0VtcHR5KCkgfHwgIWF0dHJpYnV0aW9uVVJM
LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBsb2FkUGFyYW1ldGVycyA9
IGdlbmVyYXRlTmV0d29ya0xvYWRQYXJhbWV0ZXJzRm9ySHR0cFBvc3QoV1RGTW92ZShhdHRyaWJ1
dGlvblVSTCksIGF0dHJpYnV0aW9uLmF0dHJpYnV0aW9uUmVwb3J0SlNPTigpLCBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6UGNtRGF0YUNhcnJpZWQ6Ok5vblBlcnNvbmFsbHlJZGVudGlmaWFibGUs
IGRlYnVnTW9kZUVuYWJsZWQoKSk7CisKKyAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlj
a01lYXN1cmVtZW50LCAiQWJvdXQgdG8gZmlyZSBhbiBhdHRyaWJ1dGlvbiByZXF1ZXN0LiIpOwor
ICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlTGV2ZWw6OkxvZywg
IltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSBBYm91dCB0byBmaXJlIGFuIGF0dHJpYnV0aW9u
IHJlcXVlc3QuIl9zKTsKKworICAgIG1fY2xpZW50LT5sb2FkRnJvbU5ldHdvcmsoV1RGTW92ZShs
b2FkUGFyYW1ldGVycyksIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgdGhpc10oYXV0
byYgZXJyb3IsIGF1dG8mIHJlc3BvbnNlLCBhdXRvJikgeworICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisg
ICAgICAgICAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxldmVs
OjpFcnJvciwgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIFJlY2VpdmVk
IGVycm9yOiAnIl9zLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLCAiJyBmb3IgYWQgY2xp
Y2sgYXR0cmlidXRpb24gcmVxdWVzdC4iX3MpKTsKKyAgICB9KTsKK30KKwordm9pZCBQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmNsZWFyU2VudEF0dHJpYnV0aW9uKFByaXZhdGVDbGlj
a01lYXN1cmVtZW50JiYgc2VudENvbnZlcnNpb24sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpB
dHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50IGF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpCit7Cisg
ICAgaWYgKCFmZWF0dXJlRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdG9yZSgp
LmNsZWFyU2VudEF0dHJpYnV0aW9uKFdURk1vdmUoc2VudENvbnZlcnNpb24pLCBhdHRyaWJ1dGlv
blJlcG9ydEVuZHBvaW50KTsKK30KKwordm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFn
ZXI6OmZpcmVQZW5kaW5nQXR0cmlidXRpb25SZXF1ZXN0cygpCit7CisgICAgaWYgKCFmZWF0dXJl
RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdG9yZSgpLmFsbEF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyldIChhdXRvJiYgYXR0cmlidXRpb25zKSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gbmV4dFRpbWVUb0ZpcmUgPSBTZWNvbmRzOjpp
bmZpbml0eSgpOworICAgICAgICBib29sIGhhc1NlbnRBdHRyaWJ1dGlvbiA9IGZhbHNlOworCisg
ICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRpb24gOiBhdHRyaWJ1dGlvbnMpIHsKKyAgICAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IGVhcmxpZXN0VGltZVRvU2VuZCA9IGF0dHJpYnV0
aW9uLnRpbWVzVG9TZW5kKCkuZWFybGllc3RUaW1lVG9TZW5kKCk7CisgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJl
cG9ydEVuZHBvaW50PiBhdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50ID0gYXR0cmlidXRpb24udGlt
ZXNUb1NlbmQoKS5hdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KCk7CisKKyAgICAgICAgICAgIGlm
ICghZWFybGllc3RUaW1lVG9TZW5kIHx8ICFhdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gbm93ID0gV2FsbFRpbWU6
Om5vdygpOworICAgICAgICAgICAgaWYgKCplYXJsaWVzdFRpbWVUb1NlbmQgPD0gbm93IHx8IG1f
aXNSdW5uaW5nVGVzdCB8fCBkZWJ1Z01vZGVFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaGFzU2VudEF0dHJpYnV0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFs
cmVhZHkgc2VudCBhbiBhdHRyaWJ1dGlvbiB0aGlzIHJvdW5kLiBXZSBzaG91bGQgc2VuZCBhZGRp
dGlvbmFsIG92ZXJkdWUgYXR0cmlidXRpb25zIGF0CisgICAgICAgICAgICAgICAgICAgIC8vIGEg
cmFuZG9tIHRpbWUgYmV0d2VlbiAxNSBhbmQgMzAgbWludXRlcyB0byBhdm9pZCBhIGJ1cnN0IG9m
IHNpbXVsdGFuZW91cyBhdHRyaWJ1dGlvbnMuIElmIGRlYnVnCisgICAgICAgICAgICAgICAgICAg
IC8vIG1vZGUgaXMgZW5hYmxlZCwgdGhpcyBzaG91bGQgYmUgbXVjaCBzaG9ydGVyIGZvciBlYXN5
IHRlc3RpbmcuCisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW50ZXJ2YWwgPSBkZWJ1Z01vZGVF
bmFibGVkKCkgPyBkZWJ1Z01vZGVTZWNvbmRzVW50aWxTZW5kIDogMTVfbWluICsgU2Vjb25kcyhj
cnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpICUgOTAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhcnRUaW1lcihpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdXRvIGxhdGVyVGltZVRvU2VuZCA9
IGF0dHJpYnV0aW9uLnRpbWVzVG9TZW5kKCkubGF0ZXN0VGltZVRvU2VuZCgpOworICAgICAgICAg
ICAgICAgIGZpcmVDb252ZXJzaW9uUmVxdWVzdChhdHRyaWJ1dGlvbiwgKmF0dHJpYnV0aW9uUmVw
b3J0RW5kcG9pbnQpOworICAgICAgICAgICAgICAgIGNsZWFyU2VudEF0dHJpYnV0aW9uKFdURk1v
dmUoYXR0cmlidXRpb24pLCAqYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCk7CisgICAgICAgICAg
ICAgICAgaGFzU2VudEF0dHJpYnV0aW9uID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIC8vIFVw
ZGF0ZSBuZXh0VGltZVRvRmlyZSBpbiBjYXNlIHRoZSBsYXRlciByZXBvcnQgdGltZSBmb3IgdGhp
cyBhdHRyaWJ1dGlvbiBpcyBzb29uZXIgdGhhbiB0aGUgc2NoZWR1bGVkIG5leHQgdGltZSB0byBm
aXJlLgorICAgICAgICAgICAgICAgIC8vIE9yLCBpZiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWQsIHdl
IHNob3VsZCBzZW5kIHRoZSBzZWNvbmQgcmVwb3J0IG9uIGEgbXVjaCBzaG9ydGVyIGRlbGF5IGZv
ciBlYXN5IHRlc3RpbmcuCisgICAgICAgICAgICAgICAgaWYgKGxhdGVyVGltZVRvU2VuZCkKKyAg
ICAgICAgICAgICAgICAgICAgbmV4dFRpbWVUb0ZpcmUgPSBkZWJ1Z01vZGVFbmFibGVkKCkgPyBk
ZWJ1Z01vZGVTZWNvbmRzVW50aWxTZW5kIDogc3RkOjptaW4obmV4dFRpbWVUb0ZpcmUsIGxhdGVy
VGltZVRvU2VuZC52YWx1ZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkpOworCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gc2Vjb25kcyA9
ICplYXJsaWVzdFRpbWVUb1NlbmQgLSBub3c7CisgICAgICAgICAgICBuZXh0VGltZVRvRmlyZSA9
IHN0ZDo6bWluKG5leHRUaW1lVG9GaXJlLCBzZWNvbmRzKTsKKworICAgICAgICAgICAgLy8gQXR0
cmlidXRpb25zIGFyZSBzb3J0ZWQgYnkgZWFybGllc3RUaW1lVG9TZW5kLCBzbyB0aGUgZmlyc3Qg
dGltZSB3ZSBoaXQgdGhpcyB0aGVyZSBjYW4gYmUgbm8gZnVydGhlciBhdHRyaWJ1dGlvbnMKKyAg
ICAgICAgICAgIC8vIGR1ZSBmb3IgcmVwb3J0aW5nLCBhbmQgbmV4dFRpbWVUb0ZpcmUgaXMgdGhl
IG1pbmltdW0gZWFybGllc3RUaW1lVG9TZW5kIHZhbHVlIGZvciBhbnkgcGVuZGluZyBhdHRyaWJ1
dGlvbi4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5leHRU
aW1lVG9GaXJlIDwgU2Vjb25kczo6aW5maW5pdHkoKSkKKyAgICAgICAgICAgIHN0YXJ0VGltZXIo
bmV4dFRpbWVUb0ZpcmUpOworICAgIH0pOworfQorCit2b2lkIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50TWFuYWdlcjo6Y2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIG1fZmlyZVBlbmRpbmdBdHRyaWJ1dGlvblJlcXVlc3RzVGltZXIuc3Rv
cCgpOworICAgIG1fZXBoZW1lcmFsTWVhc3VyZW1lbnQgPSBzdGQ6Om51bGxvcHQ7CisgICAgbV9p
c1J1bm5pbmdFcGhlbWVyYWxNZWFzdXJlbWVudFRlc3QgPSBmYWxzZTsKKworICAgIGlmICghZmVh
dHVyZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7CisKKyAg
ICBzdG9yZSgpLmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworfQorCit2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6Y2xl
YXJGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYg
KCFmZWF0dXJlRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsK
KworICAgIHN0b3JlKCkuY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZvclJlZ2lzdHJhYmxl
RG9tYWluKGRvbWFpbiwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6Y2xlYXJFeHBpcmVkKCkKK3sKKyAgICBpZiAo
IWZlYXR1cmVFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0b3JlKCkuY2xlYXJF
eHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoKTsKK30KKwordm9pZCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudE1hbmFnZXI6OnRvU3RyaW5nRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0cmluZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0Cit7CisgICAgaWYgKCFmZWF0
dXJlRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoIlxuTm8gc3Rv
cmVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgZGF0YS5cbiJfcyk7CisKKyAgICBzdG9yZSgp
LnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmdGb3JUZXN0aW5nKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6
OnNldFRva2VuUHVibGljS2V5VVJMRm9yVGVzdGluZyhVUkwmJiB0ZXN0VVJMKQoreworICAgIGlm
ICh0ZXN0VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdG9rZW5QdWJsaWNL
ZXlVUkxGb3JUZXN0aW5nID0gV1RGTW92ZSh0ZXN0VVJMKTsKK30KKwordm9pZCBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE1hbmFnZXI6OnNldFRva2VuU2lnbmF0dXJlVVJMRm9yVGVzdGluZyhVUkwm
JiB0ZXN0VVJMKQoreworICAgIGlmICh0ZXN0VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgbV90b2tl
blNpZ25hdHVyZVVSTEZvclRlc3RpbmcgPSB7IH07CisgICAgZWxzZQorICAgICAgICBtX3Rva2Vu
U2lnbmF0dXJlVVJMRm9yVGVzdGluZyA9IFdURk1vdmUodGVzdFVSTCk7Cit9CisKK3ZvaWQgUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpzZXRBdHRyaWJ1dGlvblJlcG9ydFVSTHNGb3JU
ZXN0aW5nKFVSTCYmIHNvdXJjZVVSTCwgVVJMJiYgZGVzdGluYXRpb25VUkwpCit7CisgICAgaWYg
KHNvdXJjZVVSTC5pc0VtcHR5KCkgfHwgZGVzdGluYXRpb25VUkwuaXNFbXB0eSgpKQorICAgICAg
ICBtX2F0dHJpYnV0aW9uUmVwb3J0VGVzdENvbmZpZyA9IHN0ZDo6bnVsbG9wdDsKKyAgICBlbHNl
CisgICAgICAgIG1fYXR0cmlidXRpb25SZXBvcnRUZXN0Q29uZmlnID0gQXR0cmlidXRpb25SZXBv
cnRUZXN0Q29uZmlnIHsgV1RGTW92ZShzb3VyY2VVUkwpLCBXVEZNb3ZlKGRlc3RpbmF0aW9uVVJM
KSB9OworfQorCit2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6bWFya0FsbFVu
YXR0cmlidXRlZEFzRXhwaXJlZEZvclRlc3RpbmcoKQoreworICAgIGlmICghZmVhdHVyZUVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcmUoKS5tYXJrQWxsVW5hdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5nKCk7Cit9CisKK3ZvaWQg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpzZXRQQ01GcmF1ZFByZXZlbnRpb25WYWx1
ZXNGb3JUZXN0aW5nKFN0cmluZyYmIHVubGlua2FibGVUb2tlbiwgU3RyaW5nJiYgc2VjcmV0VG9r
ZW4sIFN0cmluZyYmIHNpZ25hdHVyZSwgU3RyaW5nJiYga2V5SUQpCit7CisgICAgaWYgKHVubGlu
a2FibGVUb2tlbi5pc0VtcHR5KCkgfHwgc2VjcmV0VG9rZW4uaXNFbXB0eSgpIHx8IHNpZ25hdHVy
ZS5pc0VtcHR5KCkgfHwga2V5SUQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9m
cmF1ZFByZXZlbnRpb25WYWx1ZXNGb3JUZXN0aW5nID0gVGVzdGluZ0ZyYXVkUHJldmVudGlvblZh
bHVlcyB7IFdURk1vdmUodW5saW5rYWJsZVRva2VuKSwgV1RGTW92ZShzZWNyZXRUb2tlbiksIFdU
Rk1vdmUoc2lnbmF0dXJlKSwgV1RGTW92ZShrZXlJRCkgfTsKK30KKworYm9vbCBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE1hbmFnZXI6OmZlYXR1cmVFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9jbGllbnQtPmZlYXR1cmVFbmFibGVkKCk7Cit9CisKK2Jvb2wgUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRNYW5hZ2VyOjpkZWJ1Z01vZGVFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jbGllbnQtPmRlYnVnTW9kZUVuYWJsZWQoKTsKK30KKwordm9pZCBQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudE1hbmFnZXI6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNF
eHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgaWYgKCFmZWF0dXJlRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoKTsKKworICAgIHN0b3JlKCkubWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKK30KKworUENNOjpTdG9yZSYgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpz
dG9yZSgpCit7CisgICAgaWYgKCFtX3N0b3JlKQorICAgICAgICBtX3N0b3JlID0gUENNOjpTdG9y
ZTo6Y3JlYXRlKG1fc3RvcmFnZURpcmVjdG9yeSk7CisgICAgcmV0dXJuICptX3N0b3JlOworfQor
Citjb25zdCBQQ006OlN0b3JlJiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OnN0b3Jl
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc3RvcmUpCisgICAgICAgIG1fc3RvcmUgPSBQQ006OlN0
b3JlOjpjcmVhdGUobV9zdG9yYWdlRGlyZWN0b3J5KTsKKyAgICByZXR1cm4gKm1fc3RvcmU7Cit9
CisKK3ZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpkZXN0cm95U3RvcmVGb3JU
ZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBpZiAoIW1fc3RvcmUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwor
ICAgIG1fc3RvcmUtPmNsb3NlKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgIHdlYWtUaGlzLT5tX3N0b3JlID0gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JhNzc4
M2QxNzg3YmU0MzY0MWU1MzIyMWQyNzIyYTJjZDBiOWZmMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQvUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIgorI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRDbGllbnQuaCIKKyNpbmNsdWRlICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0b3JlLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJy
b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPHd0
Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gY2xhc3MgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRB
dHRyaWJ1dGlvblR5cGUgOiBib29sIHsgVW5hdHRyaWJ1dGVkLCBBdHRyaWJ1dGVkIH07CisKK2Ns
YXNzIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKworICAgIHVzaW5nIEF0dHJpYnV0aW9uRGVzdGluYXRpb25TaXRl
ID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uRGVzdGluYXRp
b25TaXRlOworICAgIHVzaW5nIEF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgPSBXZWJDb3JlOjpQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25UcmlnZ2VyRGF0YTsKKyAgICB1c2luZyBQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50
OworICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW47CisgICAgdXNpbmcgU291cmNlU2l0ZSA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpTb3VyY2VTaXRlOworICAgIGV4cGxpY2l0IFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFu
YWdlcihVbmlxdWVSZWY8UENNOjpDbGllbnQ+JiYsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVj
dG9yeSk7CisKKyAgICB2b2lkIHN0b3JlVW5hdHRyaWJ1dGVkKFByaXZhdGVDbGlja01lYXN1cmVt
ZW50JiYpOworICAgIHZvaWQgaGFuZGxlQXR0cmlidXRpb24oQXR0cmlidXRpb25UcmlnZ2VyRGF0
YSYmLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVkaXJlY3RSZXF1ZXN0KTsKKyAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CisgICAgdm9pZCBjbGVhckZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHRv
U3RyaW5nRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYpIGNvbnN0
OworICAgIHZvaWQgc2V0T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX2lz
UnVubmluZ1Rlc3QgPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0VG9rZW5QdWJsaWNLZXlVUkxGb3JU
ZXN0aW5nKFVSTCYmKTsKKyAgICB2b2lkIHNldFRva2VuU2lnbmF0dXJlVVJMRm9yVGVzdGluZyhV
UkwmJik7CisgICAgdm9pZCBzZXRBdHRyaWJ1dGlvblJlcG9ydFVSTHNGb3JUZXN0aW5nKFVSTCYm
IHNvdXJjZVVSTCwgVVJMJiYgZGVzdGluYXRpb25VUkwpOworICAgIHZvaWQgbWFya0FsbFVuYXR0
cmlidXRlZEFzRXhwaXJlZEZvclRlc3RpbmcoKTsKKyAgICB2b2lkIG1hcmtBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2V0RXBoZW1lcmFsTWVhc3VyZW1lbnRGb3JUZXN0aW5n
KGJvb2wgdmFsdWUpIHsgbV9pc1J1bm5pbmdFcGhlbWVyYWxNZWFzdXJlbWVudFRlc3QgPSB2YWx1
ZTsgfQorICAgIHZvaWQgc2V0UENNRnJhdWRQcmV2ZW50aW9uVmFsdWVzRm9yVGVzdGluZyhTdHJp
bmcmJiB1bmxpbmthYmxlVG9rZW4sIFN0cmluZyYmIHNlY3JldFRva2VuLCBTdHJpbmcmJiBzaWdu
YXR1cmUsIFN0cmluZyYmIGtleUlEKTsKKyAgICB2b2lkIHN0YXJ0VGltZXIoU2Vjb25kcyk7CisK
KyAgICB2b2lkIGRlc3Ryb3lTdG9yZUZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKworICAgIFBDTTo6U3RvcmUmIHN0b3JlKCk7CisgICAgY29uc3QgUENNOjpTdG9yZSYg
c3RvcmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGdldFRva2VuUHVibGljS2V5KFBy
aXZhdGVDbGlja01lYXN1cmVtZW50JiYsIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1
dGlvblJlcG9ydEVuZHBvaW50LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UGNtRGF0YUNhcnJp
ZWQsIEZ1bmN0aW9uPHZvaWQoUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmJiBhdHRyaWJ1dGlvbiwg
Y29uc3QgU3RyaW5nJiBwdWJsaWNLZXlCYXNlNjRVUkwpPiYmKTsKKyAgICB2b2lkIGdldFNpZ25l
ZFVubGlua2FibGVUb2tlbihQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmKTsKKyAgICB2b2lkIGlu
c2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYsIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKTsKKyAgICB2b2lkIGNsZWFyU2Vu
dEF0dHJpYnV0aW9uKFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYsIFByaXZhdGVDbGlja01lYXN1
cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KTsKKyAgICB2b2lkIGF0dHJpYnV0ZShj
b25zdCBTb3VyY2VTaXRlJiwgY29uc3QgQXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUmLCBBdHRy
aWJ1dGlvblRyaWdnZXJEYXRhJiYpOworICAgIHZvaWQgZmlyZUNvbnZlcnNpb25SZXF1ZXN0KGNv
bnN0IFByaXZhdGVDbGlja01lYXN1cmVtZW50JiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0
dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpOworICAgIHZvaWQgZmlyZUNvbnZlcnNpb25SZXF1ZXN0
SW1wbChjb25zdCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYsIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KTsKKyAgICB2b2lkIGZpcmVQZW5kaW5nQXR0
cmlidXRpb25SZXF1ZXN0cygpOworICAgIHZvaWQgY2xlYXJFeHBpcmVkKCk7CisgICAgYm9vbCBm
ZWF0dXJlRW5hYmxlZCgpIGNvbnN0OworICAgIGJvb2wgZGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0
OworCisgICAgc3RkOjpvcHRpb25hbDxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gbV9lcGhlbWVy
YWxNZWFzdXJlbWVudDsKKyAgICBXZWJDb3JlOjpUaW1lciBtX2ZpcmVQZW5kaW5nQXR0cmlidXRp
b25SZXF1ZXN0c1RpbWVyOworICAgIGJvb2wgbV9pc1J1bm5pbmdUZXN0IHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faXNSdW5uaW5nRXBoZW1lcmFsTWVhc3VyZW1lbnRUZXN0IHsgZmFsc2UgfTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFVSTD4gbV90b2tlblB1YmxpY0tleVVSTEZvclRlc3Rpbmc7CisgICAg
c3RkOjpvcHRpb25hbDxVUkw+IG1fdG9rZW5TaWduYXR1cmVVUkxGb3JUZXN0aW5nOworICAgIG11
dGFibGUgUmVmUHRyPFBDTTo6U3RvcmU+IG1fc3RvcmU7CisgICAgU3RyaW5nIG1fc3RvcmFnZURp
cmVjdG9yeTsKKyAgICBVbmlxdWVSZWY8UENNOjpDbGllbnQ+IG1fY2xpZW50OworCisgICAgc3Ry
dWN0IEF0dHJpYnV0aW9uUmVwb3J0VGVzdENvbmZpZyB7CisgICAgICAgIFVSTCBhdHRyaWJ1dGlv
blJlcG9ydFNvdXJjZVVSTDsKKyAgICAgICAgVVJMIGF0dHJpYnV0aW9uUmVwb3J0QXR0cmlidXRl
T25VUkw7CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRpb25SZXBvcnRUZXN0
Q29uZmlnPiBtX2F0dHJpYnV0aW9uUmVwb3J0VGVzdENvbmZpZzsKKworICAgIHN0cnVjdCBUZXN0
aW5nRnJhdWRQcmV2ZW50aW9uVmFsdWVzIHsKKyAgICAgICAgU3RyaW5nIHVubGlua2FibGVUb2tl
bjsKKyAgICAgICAgU3RyaW5nIHNlY3JldFRva2VuOworICAgICAgICBTdHJpbmcgc2lnbmF0dXJl
OworICAgICAgICBTdHJpbmcga2V5SUQ7CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8VGVz
dGluZ0ZyYXVkUHJldmVudGlvblZhbHVlcz4gbV9mcmF1ZFByZXZlbnRpb25WYWx1ZXNGb3JUZXN0
aW5nOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC9Qcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdv
cmtMb2FkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjYmI0ZTJkMDg4NzQ1NmM0ZDE5ZTQyMzAzYWRiZjc1
NmJhYjVlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xv
YWRlci5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyLmgiCisK
KyNpbmNsdWRlICJOZXR3b3JrTG9hZC5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9U
ZXh0UmVzb3VyY2VEZWNvZGVyLmg+CisKKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3ZvaWQgUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyOjpzdGFydChOZXR3b3JrU2Vzc2lvbiYg
c2Vzc2lvbiwgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgQ2FsbGJhY2smJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIGxvYWRlciA9IHN0ZDo6dW5pcXVlX3B0cjxQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXI+KG5ldyBQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudE5ldHdvcmtMb2FkZXIoc2Vzc2lvbiwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKKyAgICBzZXNzaW9uLmFkZFByaXZhdGVDbGlja01lYXN1
cmVtZW50TmV0d29ya0xvYWRlcihXVEZNb3ZlKGxvYWRlcikpOworfQorCitQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudE5ldHdvcmtMb2FkZXI6OlByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xv
YWRlcihOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJiYgcGFy
YW1ldGVycywgQ2FsbGJhY2smJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICA6IG1fc2Vzc2lvbiht
YWtlV2Vha1B0cihzZXNzaW9uKSkKKyAgICAsIG1fY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpCit7CisgICAgbV9uZXR3b3JrTG9hZCA9IG1ha2VVbmlxdWU8TmV0
d29ya0xvYWQ+KCp0aGlzLCBudWxscHRyLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCAqbV9zZXNzaW9u
KTsKKyAgICBtX25ldHdvcmtMb2FkLT5zdGFydCgpOworfQorCitQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudE5ldHdvcmtMb2FkZXI6On5Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXIo
KQoreworICAgIGNhbmNlbCgpOworfQorCit2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0
d29ya0xvYWRlcjo6ZmFpbChSZXNvdXJjZUVycm9yJiYgZXJyb3IpCit7CisgICAgaWYgKCFtX2Nv
bXBsZXRpb25IYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUoZXJyb3IpLCB7IH0sIG51bGxwdHIpOworICAgIGRpZENvbXBsZXRlKCk7Cit9
CisKK3ZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyOjpjYW5jZWwoKQor
eworICAgIGZhaWwoUmVzb3VyY2VFcnJvciB7IFJlc291cmNlRXJyb3I6OlR5cGU6OkNhbmNlbGxh
dGlvbiB9KTsKK30KKwordm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXI6
OndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYsIFJlc291cmNlUmVx
dWVzdCYmLCBSZXNvdXJjZVJlc3BvbnNlJiYpCit7CisgICAgY2FuY2VsKCk7Cit9CisKK3ZvaWQg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlLCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyJiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEpTT05NSU1FVHlwZShyZXNwb25zZS5taW1lVHlwZSgpKSkgeworICAgICAgICBmYWlsKHsg
ZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgcmVzcG9uc2UudXJsKCksICJNSU1FIFR5cGUg
aXMgbm90IGEgSlNPTiBNSU1FIHR5cGUiX3MgfSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFBvbGljeUFjdGlvbjo6SWdub3JlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
cmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xp
Y3lBY3Rpb246OlVzZSk7Cit9CisKK3ZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3Jr
TG9hZGVyOjpkaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyLCBpbnQg
cmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAg
ICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNhdGlvbi9q
c29uIl9zLCBtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKS5pc0VtcHR5KCkgPyBXZWJDb3Jl
OjpUZXh0RW5jb2RpbmcoIlVURi04IikgOiBXZWJDb3JlOjpUZXh0RW5jb2RpbmcobV9yZXNwb25z
ZS50ZXh0RW5jb2RpbmdOYW1lKCkpKTsKKworICAgIGlmIChhdXRvIHNpemUgPSBidWZmZXItPnNp
emUoKSkKKyAgICAgICAgbV9qc29uU3RyaW5nLmFwcGVuZChtX2RlY29kZXItPmRlY29kZShidWZm
ZXItPmRhdGEoKSwgc2l6ZSkpOworfQorCit2b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0
d29ya0xvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhjb25zdCBXZWJDb3JlOjpOZXR3b3JrTG9hZE1l
dHJpY3MmKQoreworICAgIGlmIChtX2RlY29kZXIpCisgICAgICAgIG1fanNvblN0cmluZy5hcHBl
bmQobV9kZWNvZGVyLT5mbHVzaCgpKTsKKworICAgIGlmIChhdXRvIGpzb25WYWx1ZSA9IEpTT046
OlZhbHVlOjpwYXJzZUpTT04obV9qc29uU3RyaW5nLnRvU3RyaW5nKCkpKQorICAgICAgICBtX2Nv
bXBsZXRpb25IYW5kbGVyKHsgfSwgbV9yZXNwb25zZSwganNvblZhbHVlLT5hc09iamVjdCgpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fY29tcGxldGlvbkhhbmRsZXIoeyB9LCBtX3Jlc3BvbnNlLCBu
dWxscHRyKTsKKworICAgIGRpZENvbXBsZXRlKCk7Cit9CisKK3ZvaWQgUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnROZXR3b3JrTG9hZGVyOjpkaWRGYWlsTG9hZGluZyhjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKK3sKKyAgICBmYWlsKFJlc291cmNlRXJyb3IoZXJyb3IpKTsKK30KKwordm9pZCBQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXI6OmRpZENvbXBsZXRlKCkKK3sKKyAg
ICBtX25ldHdvcmtMb2FkID0gbnVsbHB0cjsKKyAgICBpZiAobV9zZXNzaW9uKQorICAgICAgICBt
X3Nlc3Npb24tPnJlbW92ZVByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlcih0aGlz
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50L1ByaXZhdGVDbGlja01lYXN1
cmVtZW50TmV0d29ya0xvYWRlci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudC9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jOWZlOTBhYmEyYzY0MDY2ZjllNzdhM2I4Mzk0NDk3ZTg1NmM5N2ExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudC9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXIuaApAQCAt
MCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJOZXR3
b3JrTG9hZC5oIgorI2luY2x1ZGUgIk5ldHdvcmtMb2FkQ2xpZW50LmgiCisjaW5jbHVkZSAiTmV0
d29ya0xvYWRQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0UmVzb3VyY2VEZWNv
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtTZXNzaW9u
OworCitjbGFzcyBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXIgZmluYWwgOiBw
dWJsaWMgTmV0d29ya0xvYWRDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHVzaW5nIENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYsIGNvbnN0IFJlZlB0cjxKU09OOjpPYmplY3Q+Jik+OworICAgIHN0YXRpYyB2b2lkIHN0YXJ0
KE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJiYsIENhbGxiYWNrJiYpOwor
CisgICAgflByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlcigpOworCitwcml2YXRl
OgorICAgIFByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlcihOZXR3b3JrU2Vzc2lv
biYsIE5ldHdvcmtMb2FkUGFyYW1ldGVycyYmLCBDYWxsYmFjayYmKTsKKworICAgIC8vIE5ldHdv
cmtMb2FkQ2xpZW50LgorICAgIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgZmluYWwgeyB9
CisgICAgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGlzQWxsb3dlZFRvQXNrVXNlckZvckNyZWRlbnRpYWxzKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlZGly
ZWN0UmVxdWVzdCwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2Up
IGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVCdWZmZXIoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwgaW50IHJlcG9ydGVk
RW5jb2RlZERhdGFMZW5ndGgpIGZpbmFsOworICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyhjb25z
dCBXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJpY3MmKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZhaWxM
b2FkaW5nKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBmaW5hbDsKKworICAgIHZvaWQg
ZmFpbChXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiYpOworICAgIHZvaWQgY2FuY2VsKCk7CisgICAg
dm9pZCBkaWRDb21wbGV0ZSgpOworCisgICAgV2Vha1B0cjxOZXR3b3JrU2Vzc2lvbj4gbV9zZXNz
aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrTG9hZD4gbV9uZXR3b3JrTG9hZDsKKyAg
ICBDYWxsYmFjayBtX2NvbXBsZXRpb25IYW5kbGVyOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0UmVzb3VyY2VEZWNv
ZGVyPiBtX2RlY29kZXI7CisgICAgU3RyaW5nQnVpbGRlciBtX2pzb25TdHJpbmc7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI3MjUzYTY1ZjdmZjEwMDgxYzFhOGUwMmJiMDdjMjQ2
NWRkYmI2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIu
aCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgot
I2luY2x1ZGUgIlByaXZhdGVDbGlja01lYXN1cmVtZW50RGVidWdJbmZvLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5cGVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GZXRjaE9w
dGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zvcm1EYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9IVFRQSGVhZGVyVmFsdWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVzcG9uc2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oPgot
I2luY2x1ZGUgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0NyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdXNpbmcgU291cmNlU2l0ZSA9IFBy
aXZhdGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlOwotdXNpbmcgQXR0cmlidXRpb25EZXN0
aW5hdGlvblNpdGUgPSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5h
dGlvblNpdGU7Ci11c2luZyBBdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGE7Ci11c2luZyBFcGhlbWVyYWxTb3VyY2VO
b25jZSA9IFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpFcGhlbWVyYWxTb3VyY2VOb25jZTsKLQot
Y29uc3RleHByIFNlY29uZHMgZGVidWdNb2RlU2Vjb25kc1VudGlsU2VuZCB7IDEwX3MgfTsKLQot
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1h
bmFnZXIoVW5pcXVlUmVmPFBDTTo6Q2xpZW50PiYmIGNsaWVudCwgY29uc3QgU3RyaW5nJiBzdG9y
YWdlRGlyZWN0b3J5KQotICAgIDogbV9maXJlUGVuZGluZ0F0dHJpYnV0aW9uUmVxdWVzdHNUaW1l
cigqdGhpcywgJlByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmlyZVBlbmRpbmdBdHRy
aWJ1dGlvblJlcXVlc3RzKQotICAgICwgbV9zdG9yYWdlRGlyZWN0b3J5KHN0b3JhZ2VEaXJlY3Rv
cnkpCi0gICAgLCBtX2NsaWVudChXVEZNb3ZlKGNsaWVudCkpCi17Ci0gICAgLy8gV2Ugc2hvdWxk
IHNlbmQgYW55IHBlbmRpbmcgYXR0cmlidXRpb25zIG9uIHNlc3Npb24tc3RhcnQgaW4gY2FzZSB0
aGVpcgotICAgIC8vIHNlbmQgZGVsYXkgaGFzIGV4cGlyZWQgd2hpbGUgdGhlIHNlc3Npb24gd2Fz
IGNsb3NlZC4gV2FpdGluZyA1IHNlY29uZHMgYWNjb3VudHMgZm9yIHRoZQotICAgIC8vIGRlbGF5
IGluIGRhdGFiYXNlIHN0YXJ0dXAuCi0gICAgc3RhcnRUaW1lcig1X3MpOwotfQotCi12b2lkIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6c3RvcmVVbmF0dHJpYnV0ZWQoUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQmJiBtZWFzdXJlbWVudCkKLXsKLSAgICBpZiAoIWZlYXR1cmVFbmFibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFyRXhwaXJlZCgpOwotCi0gICAgaWYgKG1l
YXN1cmVtZW50LmVwaGVtZXJhbFNvdXJjZU5vbmNlKCkpIHsKLSAgICAgICAgYXV0byBtZWFzdXJl
bWVudENvcHkgPSBtZWFzdXJlbWVudDsKLSAgICAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRv
IGJlIGNsb3NlIGluIHRpbWUgdG8gdGhlIG5hdmlnYXRpb25hbCBjbGljayB3aGljaCBtYWtlcyBp
dCBsaWtlbHkgdG8gYmUgcGVyc29uYWxseSBpZGVudGlmaWFibGUuCi0gICAgICAgIGdldFRva2Vu
UHVibGljS2V5KFdURk1vdmUobWVhc3VyZW1lbnRDb3B5KSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQ6OkF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQ6OlNvdXJjZSwgUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQ6OlBjbURhdGFDYXJyaWVkOjpQZXJzb25hbGx5SWRlbnRpZmlhYmxlLCBbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHRoaXNdIChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIG1l
YXN1cmVtZW50LCBjb25zdCBTdHJpbmcmIHB1YmxpY0tleUJhc2U2NFVSTCkgewotICAgICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IGlmIChwdWJsaWNLZXlCYXNlNjRVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgaWYgKG1fZnJhdWRQcmV2ZW50aW9uVmFsdWVzRm9yVGVzdGluZykK
LSAgICAgICAgICAgICAgICBtZWFzdXJlbWVudC5zZXRTb3VyY2VVbmxpbmthYmxlVG9rZW5WYWx1
ZShtX2ZyYXVkUHJldmVudGlvblZhbHVlc0ZvclRlc3RpbmctPnVubGlua2FibGVUb2tlbik7Ci0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoYXV0byBlcnJvck1lc3NhZ2UgPSBtZWFzdXJlbWVudC5jYWxjdWxhdGVBbmRVcGRhdGVTb3Vy
Y2VVbmxpbmthYmxlVG9rZW4ocHVibGljS2V5QmFzZTY0VVJMKSkgewotICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiR290IHRoZSBm
b2xsb3dpbmcgZXJyb3IgaW4gY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlVW5saW5rYWJsZVRva2Vu
KCk6ICcle3B1YmxpY31zIiwgZXJyb3JNZXNzYWdlLT51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9jbGllbnQtPmJyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VMZXZl
bDo6RXJyb3IsIG1ha2VTdHJpbmcoIltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSAiX3MsICpl
cnJvck1lc3NhZ2UpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgICAgICBnZXRTaWduZWRVbmxp
bmthYmxlVG9rZW4oV1RGTW92ZShtZWFzdXJlbWVudCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3Nh
Z2UoTWVzc2FnZUxldmVsOjpMb2csICJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gU3Rvcmlu
ZyBhIGNsaWNrLiJfcyk7Ci0KLSAgICBpbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZN
b3ZlKG1lYXN1cmVtZW50KSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6
OlVuYXR0cmlidXRlZCk7Ci19Ci0KLXN0YXRpYyBOZXR3b3JrTG9hZFBhcmFtZXRlcnMgZ2VuZXJh
dGVOZXR3b3JrTG9hZFBhcmFtZXRlcnMoVVJMJiYgdXJsLCBjb25zdCBTdHJpbmcmIGh0dHBNZXRo
b2QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYganNvblBheWxvYWQsIFByaXZhdGVDbGlja01lYXN1
cmVtZW50OjpQY21EYXRhQ2FycmllZCBkYXRhVHlwZUNhcnJpZWQsIGJvb2wgaXNEZWJ1Z01vZGVF
bmFibGVkKQotewotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0IHsgV1RGTW92ZSh1cmwpIH07
Ci0gICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKGh0dHBNZXRob2QpOwotICAgIHJlcXVlc3Quc2V0
SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDYWNoZUNvbnRyb2wsIFdlYkNvcmU6OkhU
VFBIZWFkZXJWYWx1ZXM6Om1heEFnZTAoKSk7Ci0gICAgaWYgKGpzb25QYXlsb2FkKSB7Ci0gICAg
ICAgIHJlcXVlc3Quc2V0SFRUUENvbnRlbnRUeXBlKFdlYkNvcmU6OkhUVFBIZWFkZXJWYWx1ZXM6
OmFwcGxpY2F0aW9uSlNPTkNvbnRlbnRUeXBlKCkpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBC
b2R5KFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUoanNvblBheWxvYWQtPnRvSlNPTlN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICB9Ci0KLSAgICBOZXR3b3JrTG9hZFBhcmFtZXRlcnMgbG9h
ZFBhcmFtZXRlcnM7Ci0gICAgbG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAg
bG9hZFBhcmFtZXRlcnMucGFyZW50UElEID0gcHJlc2VudGluZ0FwcGxpY2F0aW9uUElEKCk7Ci0g
ICAgbG9hZFBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgPSBTdG9yZWRDcmVkZW50
aWFsc1BvbGljeTo6RXBoZW1lcmFsU3RhdGVsZXNzOwotICAgIGxvYWRQYXJhbWV0ZXJzLnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSB0cnVlOwotICAgIGxvYWRQYXJh
bWV0ZXJzLnBjbURhdGFDYXJyaWVkID0gVU5MSUtFTFkoaXNEZWJ1Z01vZGVFbmFibGVkKSA/IFBy
aXZhdGVDbGlja01lYXN1cmVtZW50OjpQY21EYXRhQ2FycmllZDo6UGVyc29uYWxseUlkZW50aWZp
YWJsZSA6IGRhdGFUeXBlQ2FycmllZDsKLQotICAgIHJldHVybiBsb2FkUGFyYW1ldGVyczsKLX0K
LQotc3RhdGljIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBnZW5lcmF0ZU5ldHdvcmtMb2FkUGFyYW1l
dGVyc0Zvckh0dHBQb3N0KFVSTCYmIHVybCwgUmVmPEpTT046Ok9iamVjdD4mJiBqc29uUGF5bG9h
ZCwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlBjbURhdGFDYXJyaWVkIGRhdGFUeXBlQ2Fycmll
ZCwgYm9vbCBpc0RlYnVnTW9kZUVuYWJsZWQpCi17Ci0gICAgcmV0dXJuIGdlbmVyYXRlTmV0d29y
a0xvYWRQYXJhbWV0ZXJzKFdURk1vdmUodXJsKSwgIlBPU1QiX3MsIFdURk1vdmUoanNvblBheWxv
YWQpLCBkYXRhVHlwZUNhcnJpZWQsIGlzRGVidWdNb2RlRW5hYmxlZCk7Ci19Ci0KLXN0YXRpYyBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMgZ2VuZXJhdGVOZXR3b3JrTG9hZFBhcmFtZXRlcnNGb3JIdHRw
R2V0KFVSTCYmIHVybCwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlBjbURhdGFDYXJyaWVkIGRh
dGFUeXBlQ2FycmllZCwgYm9vbCBpc0RlYnVnTW9kZUVuYWJsZWQpCi17Ci0gICAgcmV0dXJuIGdl
bmVyYXRlTmV0d29ya0xvYWRQYXJhbWV0ZXJzKFdURk1vdmUodXJsKSwgIkdFVCJfcywgbnVsbHB0
ciwgZGF0YVR5cGVDYXJyaWVkLCBpc0RlYnVnTW9kZUVuYWJsZWQpOwotfQotCi12b2lkIFByaXZh
dGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6Z2V0VG9rZW5QdWJsaWNLZXkoUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQmJiBhdHRyaWJ1dGlvbiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJp
YnV0aW9uUmVwb3J0RW5kcG9pbnQgYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCwgUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ6OlBjbURhdGFDYXJyaWVkIHBjbURhdGFDYXJyaWVkLCBGdW5jdGlvbjx2
b2lkKFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYgYXR0cmlidXRpb24sIGNvbnN0IFN0cmluZyYg
cHVibGljS2V5QmFzZTY0VVJMKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpZiAoIWZlYXR1cmVFbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gdG9rZW5QdWJsaWNLZXlVUkwgPSBh
dHRyaWJ1dGlvbi50b2tlblB1YmxpY0tleVVSTCgpOwotICAgIGlmIChtX3Rva2VuUHVibGljS2V5
VVJMRm9yVGVzdGluZykgewotICAgICAgICBpZiAoYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCA9
PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludDo6RGVz
dGluYXRpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRva2VuUHVibGljS2V5VVJM
ID0gKm1fdG9rZW5QdWJsaWNLZXlVUkxGb3JUZXN0aW5nOwotICAgICAgICAvLyBGSVhNRSgyMjUz
NjQpCi0gICAgICAgIHBjbURhdGFDYXJyaWVkID0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlBj
bURhdGFDYXJyaWVkOjpOb25QZXJzb25hbGx5SWRlbnRpZmlhYmxlOwotICAgIH0KLQotICAgIGlm
ICh0b2tlblB1YmxpY0tleVVSTC5pc0VtcHR5KCkgfHwgIXRva2VuUHVibGljS2V5VVJMLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsb2FkUGFyYW1ldGVycyA9IGdlbmVy
YXRlTmV0d29ya0xvYWRQYXJhbWV0ZXJzRm9ySHR0cEdldChXVEZNb3ZlKHRva2VuUHVibGljS2V5
VVJMKSwgcGNtRGF0YUNhcnJpZWQsIGRlYnVnTW9kZUVuYWJsZWQoKSk7Ci0KLSAgICBSRUxFQVNF
X0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiQWJvdXQgdG8gZmlyZSBhIHRva2Vu
IHB1YmxpYyBrZXkgcmVxdWVzdC4iKTsKLSAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1l
c3NhZ2UoTWVzc2FnZUxldmVsOjpMb2csICJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gQWJv
dXQgdG8gZmlyZSBhIHRva2VuIHB1YmxpYyBrZXkgcmVxdWVzdC4iX3MpOwotCi0gICAgbV9jbGll
bnQtPmxvYWRGcm9tTmV0d29yayhXVEZNb3ZlKGxvYWRQYXJhbWV0ZXJzKSwgW3dlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCB0aGlzLCBhdHRyaWJ1dGlvbiA9IFdURk1vdmUoYXR0cmlidXRp
b24pLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoYXV0byYgZXJyb3IsIGF1dG8mIHJl
c3BvbnNlLCBhdXRvJiBqc29uT2JqZWN0KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhp
cykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxl
dmVsOjpFcnJvciwgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIFJlY2Vp
dmVkIGVycm9yOiAnIl9zLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLCAiJyBmb3IgdG9r
ZW4gcHVibGljIGtleSByZXF1ZXN0LiJfcykpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCFqc29uT2JqZWN0KSB7Ci0gICAgICAgICAgICBtX2NsaWVudC0+
YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygi
W1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIEpTT04gcmVzcG9uc2UgaXMgZW1wdHkgZm9yIHRv
a2VuIHB1YmxpYyBrZXkgcmVxdWVzdC4iX3MpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
TGV2ZWw6OkxvZywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIEdvdCBK
U09OIHJlc3BvbnNlIGZvciB0b2tlbiBwdWJsaWMga2V5IHJlcXVlc3QuIl9zKSk7Ci0KLSAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShhdHRyaWJ1dGlvbiksIGpzb25PYmplY3QtPmdldFN0cmluZygi
dG9rZW5fcHVibGljX2tleSJfcykpOwotICAgIH0pOwotCi19Ci0KLXZvaWQgUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRNYW5hZ2VyOjpnZXRTaWduZWRVbmxpbmthYmxlVG9rZW4oUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQmJiBtZWFzdXJlbWVudCkKLXsKLSAgICBpZiAoIWZlYXR1cmVFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSBjbG9z
ZSBpbiB0aW1lIHRvIHRoZSBuYXZpZ2F0aW9uYWwgY2xpY2sgd2hpY2ggbWFrZXMgaXQgbGlrZWx5
IHRvIGJlIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlLgotICAgIGF1dG8gcGNtRGF0YUNhcnJpZWQg
PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UGNtRGF0YUNhcnJpZWQ6OlBlcnNvbmFsbHlJZGVu
dGlmaWFibGU7Ci0gICAgYXV0byB0b2tlblNpZ25hdHVyZVVSTCA9IG1lYXN1cmVtZW50LnRva2Vu
U2lnbmF0dXJlVVJMKCk7Ci0gICAgaWYgKG1fdG9rZW5TaWduYXR1cmVVUkxGb3JUZXN0aW5nKSB7
Ci0gICAgICAgIHRva2VuU2lnbmF0dXJlVVJMID0gKm1fdG9rZW5TaWduYXR1cmVVUkxGb3JUZXN0
aW5nOwotICAgICAgICAvLyBGSVhNRSgyMjUzNjQpCi0gICAgICAgIHBjbURhdGFDYXJyaWVkID0g
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlBjbURhdGFDYXJyaWVkOjpOb25QZXJzb25hbGx5SWRl
bnRpZmlhYmxlOwotICAgIH0KLQotICAgIGlmICh0b2tlblNpZ25hdHVyZVVSTC5pc0VtcHR5KCkg
fHwgIXRva2VuU2lnbmF0dXJlVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBsb2FkUGFyYW1ldGVycyA9IGdlbmVyYXRlTmV0d29ya0xvYWRQYXJhbWV0ZXJzRm9ySHR0
cFBvc3QoV1RGTW92ZSh0b2tlblNpZ25hdHVyZVVSTCksIG1lYXN1cmVtZW50LnRva2VuU2lnbmF0
dXJlSlNPTigpLCBwY21EYXRhQ2FycmllZCwgZGVidWdNb2RlRW5hYmxlZCgpKTsKLQotICAgIFJF
TEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJBYm91dCB0byBmaXJlIGEg
dW5saW5rYWJsZSB0b2tlbiBzaWduaW5nIHJlcXVlc3QuIik7Ci0gICAgbV9jbGllbnQtPmJyb2Fk
Y2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VMZXZlbDo6TG9nLCAiW1ByaXZhdGUgQ2xpY2sgTWVh
c3VyZW1lbnRdIEFib3V0IHRvIGZpcmUgYSB1bmxpbmthYmxlIHRva2VuIHNpZ25pbmcgcmVxdWVz
dC4iX3MpOwotCi0gICAgbV9jbGllbnQtPmxvYWRGcm9tTmV0d29yayhXVEZNb3ZlKGxvYWRQYXJh
bWV0ZXJzKSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0aGlzLCBtZWFzdXJlbWVu
dCA9IFdURk1vdmUobWVhc3VyZW1lbnQpXSAoYXV0byYgZXJyb3IsIGF1dG8mIHJlc3BvbnNlLCBh
dXRvJiBqc29uT2JqZWN0KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxldmVsOjpFcnJv
ciwgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIFJlY2VpdmVkIGVycm9y
OiAnIl9zLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLCAiJyBmb3Igc2VjcmV0IHRva2Vu
IHNpZ25pbmcgcmVxdWVzdC4iX3MpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghanNvbk9iamVjdCkgewotICAgICAgICAgICAgbV9jbGllbnQtPmJyb2Fk
Y2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIltQcml2
YXRlIENsaWNrIE1lYXN1cmVtZW50XSBKU09OIHJlc3BvbnNlIGlzIGVtcHR5IGZvciB0b2tlbiBz
aWduaW5nIHJlcXVlc3QuIl9zKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBhdXRvIHNpZ25hdHVyZUJhc2U2NFVSTCA9IGpzb25PYmplY3QtPmdldFN0cmluZygi
dW5saW5rYWJsZV90b2tlbiJfcyk7Ci0gICAgICAgIGlmIChzaWduYXR1cmVCYXNlNjRVUkwuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2Uo
TWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1l
bnRdIEpTT04gcmVzcG9uc2UgZG9lc24ndCBoYXZlIHRoZSBrZXkgJ3VubGlua2FibGVfdG9rZW4n
IGZvciB0b2tlbiBzaWduaW5nIHJlcXVlc3QuIl9zKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gRklYIE5PVyEKLSAgICAgICAgaWYgKG1fZnJhdWRQcmV2ZW50
aW9uVmFsdWVzRm9yVGVzdGluZykKLSAgICAgICAgICAgIG1lYXN1cmVtZW50LnNldFNvdXJjZVNl
Y3JldFRva2VuKHsgbV9mcmF1ZFByZXZlbnRpb25WYWx1ZXNGb3JUZXN0aW5nLT5zZWNyZXRUb2tl
biwgbV9mcmF1ZFByZXZlbnRpb25WYWx1ZXNGb3JUZXN0aW5nLT5zaWduYXR1cmUsIG1fZnJhdWRQ
cmV2ZW50aW9uVmFsdWVzRm9yVGVzdGluZy0+a2V5SUQgfSk7Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGF1dG8gZXJyb3JNZXNzYWdlID0gbWVh
c3VyZW1lbnQuY2FsY3VsYXRlQW5kVXBkYXRlU291cmNlU2VjcmV0VG9rZW4oc2lnbmF0dXJlQmFz
ZTY0VVJMKSkgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQsICJHb3QgdGhlIGZvbGxvd2luZyBlcnJvciBpbiBjYWxjdWxhdGVBbmRVcGRh
dGVTb3VyY2VTZWNyZXRUb2tlbigpOiAnJXtwdWJsaWN9cyIsIGVycm9yTWVzc2FnZS0+dXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmJyb2FkY2FzdENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIltQcml2YXRlIENsaWNrIE1lYXN1
cmVtZW50XSAiX3MsICplcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIG1fY2xpZW50LT5icm9h
ZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlTGV2ZWw6OkxvZywgIltQcml2YXRlIENsaWNrIE1l
YXN1cmVtZW50XSBTdG9yaW5nIGEgc2VjcmV0IHRva2VuLiJfcyk7Ci0KLSAgICAgICAgaW5zZXJ0
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV1RGTW92ZShtZWFzdXJlbWVudCksIFByaXZhdGVDbGlj
a01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpVbmF0dHJpYnV0ZWQpOwotICAgIH0pOwotCi19
Ci0KLXZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjppbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIG1lYXN1cmVtZW50LCBQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSB0eXBlKQotewotICAgIGlmIChtX2lz
UnVubmluZ0VwaGVtZXJhbE1lYXN1cmVtZW50VGVzdCkKLSAgICAgICAgbWVhc3VyZW1lbnQuc2V0
RXBoZW1lcmFsKFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25FcGhlbWVyYWw6Olll
cyk7Ci0gICAgaWYgKG1lYXN1cmVtZW50LmlzRXBoZW1lcmFsKCkpIHsKLSAgICAgICAgbV9lcGhl
bWVyYWxNZWFzdXJlbWVudCA9IFdURk1vdmUobWVhc3VyZW1lbnQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIHN0b3JlKCkuaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV1RGTW92
ZShtZWFzdXJlbWVudCksIHR5cGUpOwotfQotCi12b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50
TWFuYWdlcjo6aGFuZGxlQXR0cmlidXRpb24oQXR0cmlidXRpb25UcmlnZ2VyRGF0YSYmIGF0dHJp
YnV0aW9uVHJpZ2dlckRhdGEsIGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZWRpcmVjdFJlcXVlc3QpCi17Ci0gICAgaWYgKCFmZWF0dXJlRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWdpc3RyYWJsZURvbWFpbiByZWRpcmVj
dERvbWFpbiB7IHJlZGlyZWN0UmVxdWVzdC51cmwoKSB9OwotICAgIGF1dG8mIGZpcnN0UGFydHlV
UkwgPSByZWRpcmVjdFJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKTsKLQotICAgIGlmICgh
cmVkaXJlY3REb21haW4ubWF0Y2hlcyhyZXF1ZXN0VVJMKSkgewotICAgICAgICBtX2NsaWVudC0+
YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxldmVsOjpXYXJuaW5nLCAiW1ByaXZhdGUg
Q2xpY2sgTWVhc3VyZW1lbnRdIFRyaWdnZXJpbmcgZXZlbnQgd2FzIG5vdCBhY2NlcHRlZCBiZWNh
dXNlIHRoZSBIVFRQIHJlZGlyZWN0IHdhcyBub3Qgc2FtZS1zaXRlLiJfcyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAocmVkaXJlY3REb21haW4ubWF0Y2hlcyhmaXJzdFBhcnR5
VVJMKSkgewotICAgICAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2Fn
ZUxldmVsOjpXYXJuaW5nLCAiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIFRyaWdnZXJpbmcg
ZXZlbnQgd2FzIG5vdCBhY2NlcHRlZCBiZWNhdXNlIGl0IHdhcyByZXF1ZXN0ZWQgaW4gYW4gSFRU
UCByZWRpcmVjdCB0aGF0IGlzIHNhbWUtc2l0ZSBhcyB0aGUgZmlyc3QtcGFydHkuIl9zKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2xpZW50LT5icm9hZGNhc3RDb25zb2xlTWVz
c2FnZShNZXNzYWdlTGV2ZWw6OkxvZywgIltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSBUcmln
Z2VyaW5nIGV2ZW50IGFjY2VwdGVkLiJfcyk7Ci0KLSAgICBhdHRyaWJ1dGUoU291cmNlU2l0ZSB7
IFdURk1vdmUocmVkaXJlY3REb21haW4pIH0sIEF0dHJpYnV0aW9uRGVzdGluYXRpb25TaXRlIHsg
Zmlyc3RQYXJ0eVVSTCB9LCBXVEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpKTsKLX0KLQot
dm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OnN0YXJ0VGltZXIoU2Vjb25kcyBz
ZWNvbmRzKQotewotICAgIG1fZmlyZVBlbmRpbmdBdHRyaWJ1dGlvblJlcXVlc3RzVGltZXIuc3Rh
cnRPbmVTaG90KG1faXNSdW5uaW5nVGVzdCA/IDBfcyA6IHNlY29uZHMpOwotfQotCi12b2lkIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6YXR0cmlidXRlKGNvbnN0IFNvdXJjZVNpdGUm
IHNvdXJjZVNpdGUsIGNvbnN0IEF0dHJpYnV0aW9uRGVzdGluYXRpb25TaXRlJiBkZXN0aW5hdGlv
blNpdGUsIEF0dHJpYnV0aW9uVHJpZ2dlckRhdGEmJiBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKQot
ewotICAgIGlmICghZmVhdHVyZUVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fZXBoZW1lcmFsTWVhc3VyZW1lbnQpIHsKLSAgICAgICAgLy8gRXBoZW1lcmFsIG1lYXN1cmVt
ZW50IGNhbiBvbmx5IGhhdmUgb25lIHBlbmRpbmcgY2xpY2suCi0gICAgICAgIGlmIChtX2VwaGVt
ZXJhbE1lYXN1cmVtZW50LT5zb3VyY2VTaXRlKCkgIT0gc291cmNlU2l0ZSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKG1fZXBoZW1lcmFsTWVhc3VyZW1lbnQtPmRlc3RpbmF0aW9u
U2l0ZSgpICE9IGRlc3RpbmF0aW9uU2l0ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgICAgIAotICAgIHN0b3JlKCkuYXR0cmlidXRlUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc291
cmNlU2l0ZSwgZGVzdGluYXRpb25TaXRlLCBXVEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEp
LCBzdGQ6OmV4Y2hhbmdlKG1fZXBoZW1lcmFsTWVhc3VyZW1lbnQsIHN0ZDo6bnVsbG9wdCksIFt0
aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gKGF1dG8gYXR0cmlidXRpb25TZWNv
bmRzVW50aWxTZW5kRGF0YSwgYXV0byBkZWJ1Z0luZm8pIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhp
cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmICghYXR0cmlidXRp
b25TZWNvbmRzVW50aWxTZW5kRGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBp
ZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgZm9yIChhdXRv
JiBtZXNzYWdlIDogZGVidWdJbmZvLm1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIG1fY2xpZW50
LT5icm9hZGNhc3RDb25zb2xlTWVzc2FnZShtZXNzYWdlLm1lc3NhZ2VMZXZlbCwgbWVzc2FnZS5t
ZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdHRyaWJ1dGlvblNlY29uZHNVbnRp
bFNlbmREYXRhLnZhbHVlKCkuaGFzVmFsaWRTZWNvbmRzVW50aWxTZW5kVmFsdWVzKCkpIHsKLSAg
ICAgICAgICAgIGF1dG8gbWluU2Vjb25kc1VudGlsU2VuZCA9IGF0dHJpYnV0aW9uU2Vjb25kc1Vu
dGlsU2VuZERhdGEudmFsdWUoKS5taW5TZWNvbmRzVW50aWxTZW5kKCk7Ci0KLSAgICAgICAgICAg
IEFTU0VSVChtaW5TZWNvbmRzVW50aWxTZW5kKTsKLSAgICAgICAgICAgIGlmICghbWluU2Vjb25k
c1VudGlsU2VuZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICht
X2ZpcmVQZW5kaW5nQXR0cmlidXRpb25SZXF1ZXN0c1RpbWVyLmlzQWN0aXZlKCkgJiYgbV9maXJl
UGVuZGluZ0F0dHJpYnV0aW9uUmVxdWVzdHNUaW1lci5uZXh0RmlyZUludGVydmFsKCkgPCAqbWlu
U2Vjb25kc1VudGlsU2VuZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9j
bGllbnQtPmJyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VMZXZlbDo6TG9nLCBtYWtlU3Ry
aW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gU2V0dGluZyB0aW1lciBmb3IgZmlyaW5n
IGF0dHJpYnV0aW9uIHJlcXVlc3QgdG8gdGhlIGRlYnVnIG1vZGUgdGltZW91dCBvZiAiX3MsIGRl
YnVnTW9kZVNlY29uZHNVbnRpbFNlbmQuc2Vjb25kcygpLCAiIHNlY29uZHMgd2hlcmUgdGhlIHJl
Z3VsYXIgdGltZW91dCB3b3VsZCBoYXZlIGJlZW4gIl9zLCBtaW5TZWNvbmRzVW50aWxTZW5kLnZh
bHVlKCkuc2Vjb25kcygpLCAiIHNlY29uZHMuIl9zKSk7Ci0gICAgICAgICAgICAgICAgbWluU2Vj
b25kc1VudGlsU2VuZCA9IGRlYnVnTW9kZVNlY29uZHNVbnRpbFNlbmQ7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2Uo
TWVzc2FnZUxldmVsOjpMb2csIG1ha2VTdHJpbmcoIltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50
XSBTZXR0aW5nIHRpbWVyIGZvciBmaXJpbmcgYXR0cmlidXRpb24gcmVxdWVzdCB0byB0aGUgdGlt
ZW91dCBvZiAiX3MsIG1pblNlY29uZHNVbnRpbFNlbmQudmFsdWUoKS5zZWNvbmRzKCksICIgc2Vj
b25kcy4iX3MpKTsKLQotICAgICAgICAgICAgc3RhcnRUaW1lcigqbWluU2Vjb25kc1VudGlsU2Vu
ZCk7Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLQotdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dE1hbmFnZXI6OmZpcmVDb252ZXJzaW9uUmVxdWVzdChjb25zdCBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCYgYXR0cmlidXRpb24sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJl
cG9ydEVuZHBvaW50IGF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpCi17Ci0gICAgaWYgKCFmZWF0
dXJlRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWF0dHJpYnV0aW9uLnNv
dXJjZVVubGlua2FibGVUb2tlbigpKSB7Ci0gICAgICAgIGZpcmVDb252ZXJzaW9uUmVxdWVzdElt
cGwoYXR0cmlidXRpb24sIGF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYXV0byBhdHRyaWJ1dGlvbkNvcHkgPSBhdHRyaWJ1dGlvbjsKLSAg
ICAvLyBUaGlzIGhhcHBlbnMgb3V0IG9mIHdlYnBhZ2UgY29udGV4dCBhbmQgd2l0aCBhIGxvbmcg
ZGVsYXkgYW5kIGlzIHRodXMgdW5saWtlbHkgdG8gYmUgcGVyc29uYWxseSBpZGVudGlmaWFibGUu
Ci0gICAgZ2V0VG9rZW5QdWJsaWNLZXkoV1RGTW92ZShhdHRyaWJ1dGlvbkNvcHkpLCBhdHRyaWJ1
dGlvblJlcG9ydEVuZHBvaW50LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UGNtRGF0YUNhcnJp
ZWQ6Ok5vblBlcnNvbmFsbHlJZGVudGlmaWFibGUsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgdGhpcywgYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludF0gKFByaXZhdGVDbGlja01lYXN1
cmVtZW50JiYgYXR0cmlidXRpb24sIGNvbnN0IFN0cmluZyYgcHVibGljS2V5QmFzZTY0VVJMKSB7
Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
YXV0byBwdWJsaWNLZXlEYXRhID0gYmFzZTY0VVJMRGVjb2RlKHB1YmxpY0tleUJhc2U2NFVSTCk7
Ci0gICAgICAgIGlmICghcHVibGljS2V5RGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBhdXRvIGNyeXB0byA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoUEFMOjpDcnlwdG9E
aWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7Ci0gICAgICAgIGNyeXB0by0+YWRkQnl0ZXMocHVi
bGljS2V5RGF0YS0+ZGF0YSgpLCBwdWJsaWNLZXlEYXRhLT5zaXplKCkpOwotICAgICAgICBhdXRv
IHB1YmxpY0tleURhdGFIYXNoID0gY3J5cHRvLT5jb21wdXRlSGFzaCgpOwotCi0gICAgICAgIGF1
dG8ga2V5SUQgPSBiYXNlNjRVUkxFbmNvZGVUb1N0cmluZyhwdWJsaWNLZXlEYXRhSGFzaC5kYXRh
KCksIHB1YmxpY0tleURhdGFIYXNoLnNpemUoKSk7Ci0gICAgICAgIGlmIChrZXlJRCAhPSBhdHRy
aWJ1dGlvbi5zb3VyY2VVbmxpbmthYmxlVG9rZW4oKS0+a2V5SURCYXNlNjRVUkwpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgZmlyZUNvbnZlcnNpb25SZXF1ZXN0SW1wbChhdHRyaWJ1
dGlvbiwgYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpmaXJlQ29udmVyc2lvblJlcXVlc3RJbXBsKGNv
bnN0IFByaXZhdGVDbGlja01lYXN1cmVtZW50JiBhdHRyaWJ1dGlvbiwgUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ6OkF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQgYXR0cmlidXRpb25SZXBvcnRFbmRw
b2ludCkKLXsKLSAgICBVUkwgYXR0cmlidXRpb25VUkw7Ci0gICAgc3dpdGNoIChhdHRyaWJ1dGlv
blJlcG9ydEVuZHBvaW50KSB7Ci0gICAgY2FzZSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0
cmlidXRpb25SZXBvcnRFbmRwb2ludDo6U291cmNlOgotICAgICAgICBhdHRyaWJ1dGlvblVSTCA9
IG1fYXR0cmlidXRpb25SZXBvcnRUZXN0Q29uZmlnID8gbV9hdHRyaWJ1dGlvblJlcG9ydFRlc3RD
b25maWctPmF0dHJpYnV0aW9uUmVwb3J0U291cmNlVVJMIDogYXR0cmlidXRpb24uYXR0cmlidXRp
b25SZXBvcnRTb3VyY2VVUkwoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludDo6RGVzdGluYXRpb246Ci0g
ICAgICAgIGF0dHJpYnV0aW9uVVJMID0gbV9hdHRyaWJ1dGlvblJlcG9ydFRlc3RDb25maWcgPyBt
X2F0dHJpYnV0aW9uUmVwb3J0VGVzdENvbmZpZy0+YXR0cmlidXRpb25SZXBvcnRBdHRyaWJ1dGVP
blVSTCA6IGF0dHJpYnV0aW9uLmF0dHJpYnV0aW9uUmVwb3J0QXR0cmlidXRlT25VUkwoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoYXR0cmlidXRpb25VUkwuaXNFbXB0eSgpIHx8ICFhdHRyaWJ1dGlvblVS
TC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbG9hZFBhcmFtZXRlcnMg
PSBnZW5lcmF0ZU5ldHdvcmtMb2FkUGFyYW1ldGVyc0Zvckh0dHBQb3N0KFdURk1vdmUoYXR0cmli
dXRpb25VUkwpLCBhdHRyaWJ1dGlvbi5hdHRyaWJ1dGlvblJlcG9ydEpTT04oKSwgUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ6OlBjbURhdGFDYXJyaWVkOjpOb25QZXJzb25hbGx5SWRlbnRpZmlhYmxl
LCBkZWJ1Z01vZGVFbmFibGVkKCkpOwotCi0gICAgUkVMRUFTRV9MT0dfSU5GTyhQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCwgIkFib3V0IHRvIGZpcmUgYW4gYXR0cmlidXRpb24gcmVxdWVzdC4iKTsK
LSAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxldmVsOjpMb2cs
ICJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gQWJvdXQgdG8gZmlyZSBhbiBhdHRyaWJ1dGlv
biByZXF1ZXN0LiJfcyk7Ci0KLSAgICBtX2NsaWVudC0+bG9hZEZyb21OZXR3b3JrKFdURk1vdmUo
bG9hZFBhcmFtZXRlcnMpLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHRoaXNdKGF1
dG8mIGVycm9yLCBhdXRvJiByZXNwb25zZSwgYXV0byYpIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhp
cykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICBtX2NsaWVudC0+YnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZUxl
dmVsOjpFcnJvciwgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIFJlY2Vp
dmVkIGVycm9yOiAnIl9zLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLCAiJyBmb3IgYWQg
Y2xpY2sgYXR0cmlidXRpb24gcmVxdWVzdC4iX3MpKTsKLSAgICAgICAgfQotICAgIH0pOwotfQot
Ci12b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6Y2xlYXJTZW50QXR0cmlidXRp
b24oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmJiBzZW50Q29udmVyc2lvbiwgUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQgYXR0cmlidXRpb25SZXBvcnRF
bmRwb2ludCkKLXsKLSAgICBpZiAoIWZlYXR1cmVFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHN0b3JlKCkuY2xlYXJTZW50QXR0cmlidXRpb24oV1RGTW92ZShzZW50Q29udmVyc2lv
biksIGF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpOwotfQotCi12b2lkIFByaXZhdGVDbGlja01l
YXN1cmVtZW50TWFuYWdlcjo6ZmlyZVBlbmRpbmdBdHRyaWJ1dGlvblJlcXVlc3RzKCkKLXsKLSAg
ICBpZiAoIWZlYXR1cmVFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0b3JlKCku
YWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKV0gKGF1dG8mJiBhdHRyaWJ1dGlvbnMpIHsKLSAgICAgICAgaWYgKCF3
ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byBuZXh0VGltZVRvRmly
ZSA9IFNlY29uZHM6OmluZmluaXR5KCk7Ci0gICAgICAgIGJvb2wgaGFzU2VudEF0dHJpYnV0aW9u
ID0gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGlvbiA6IGF0dHJpYnV0aW9u
cykgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gZWFybGllc3RUaW1lVG9T
ZW5kID0gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5lYXJsaWVzdFRpbWVUb1NlbmQoKTsKLSAg
ICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6
OkF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQ+IGF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQgPSBh
dHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLmF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQoKTsKLQot
ICAgICAgICAgICAgaWYgKCFlYXJsaWVzdFRpbWVUb1NlbmQgfHwgIWF0dHJpYnV0aW9uUmVwb3J0
RW5kcG9pbnQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXV0byBu
b3cgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgICAgICAgICBpZiAoKmVhcmxpZXN0VGltZVRvU2Vu
ZCA8PSBub3cgfHwgbV9pc1J1bm5pbmdUZXN0IHx8IGRlYnVnTW9kZUVuYWJsZWQoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChoYXNTZW50QXR0cmlidXRpb24pIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gV2UndmUgYWxyZWFkeSBzZW50IGFuIGF0dHJpYnV0aW9uIHRoaXMgcm91bmQuIFdlIHNo
b3VsZCBzZW5kIGFkZGl0aW9uYWwgb3ZlcmR1ZSBhdHRyaWJ1dGlvbnMgYXQKLSAgICAgICAgICAg
ICAgICAgICAgLy8gYSByYW5kb20gdGltZSBiZXR3ZWVuIDE1IGFuZCAzMCBtaW51dGVzIHRvIGF2
b2lkIGEgYnVyc3Qgb2Ygc2ltdWx0YW5lb3VzIGF0dHJpYnV0aW9ucy4gSWYgZGVidWcKLSAgICAg
ICAgICAgICAgICAgICAgLy8gbW9kZSBpcyBlbmFibGVkLCB0aGlzIHNob3VsZCBiZSBtdWNoIHNo
b3J0ZXIgZm9yIGVhc3kgdGVzdGluZy4KLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbnRlcnZh
bCA9IGRlYnVnTW9kZUVuYWJsZWQoKSA/IGRlYnVnTW9kZVNlY29uZHNVbnRpbFNlbmQgOiAxNV9t
aW4gKyBTZWNvbmRzKGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkgJSA5MDApOwotICAg
ICAgICAgICAgICAgICAgICBzdGFydFRpbWVyKGludGVydmFsKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGF1dG8gbGF0
ZXJUaW1lVG9TZW5kID0gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5sYXRlc3RUaW1lVG9TZW5k
KCk7Ci0gICAgICAgICAgICAgICAgZmlyZUNvbnZlcnNpb25SZXF1ZXN0KGF0dHJpYnV0aW9uLCAq
YXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCk7Ci0gICAgICAgICAgICAgICAgY2xlYXJTZW50QXR0
cmlidXRpb24oV1RGTW92ZShhdHRyaWJ1dGlvbiksICphdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50
KTsKLSAgICAgICAgICAgICAgICBoYXNTZW50QXR0cmlidXRpb24gPSB0cnVlOwotCi0gICAgICAg
ICAgICAgICAgLy8gVXBkYXRlIG5leHRUaW1lVG9GaXJlIGluIGNhc2UgdGhlIGxhdGVyIHJlcG9y
dCB0aW1lIGZvciB0aGlzIGF0dHJpYnV0aW9uIGlzIHNvb25lciB0aGFuIHRoZSBzY2hlZHVsZWQg
bmV4dCB0aW1lIHRvIGZpcmUuCi0gICAgICAgICAgICAgICAgLy8gT3IsIGlmIGRlYnVnIG1vZGUg
aXMgZW5hYmxlZCwgd2Ugc2hvdWxkIHNlbmQgdGhlIHNlY29uZCByZXBvcnQgb24gYSBtdWNoIHNo
b3J0ZXIgZGVsYXkgZm9yIGVhc3kgdGVzdGluZy4KLSAgICAgICAgICAgICAgICBpZiAobGF0ZXJU
aW1lVG9TZW5kKQotICAgICAgICAgICAgICAgICAgICBuZXh0VGltZVRvRmlyZSA9IGRlYnVnTW9k
ZUVuYWJsZWQoKSA/IGRlYnVnTW9kZVNlY29uZHNVbnRpbFNlbmQgOiBzdGQ6Om1pbihuZXh0VGlt
ZVRvRmlyZSwgbGF0ZXJUaW1lVG9TZW5kLnZhbHVlKCkuc2Vjb25kc1NpbmNlRXBvY2goKSk7Ci0K
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
YXV0byBzZWNvbmRzID0gKmVhcmxpZXN0VGltZVRvU2VuZCAtIG5vdzsKLSAgICAgICAgICAgIG5l
eHRUaW1lVG9GaXJlID0gc3RkOjptaW4obmV4dFRpbWVUb0ZpcmUsIHNlY29uZHMpOwotCi0gICAg
ICAgICAgICAvLyBBdHRyaWJ1dGlvbnMgYXJlIHNvcnRlZCBieSBlYXJsaWVzdFRpbWVUb1NlbmQs
IHNvIHRoZSBmaXJzdCB0aW1lIHdlIGhpdCB0aGlzIHRoZXJlIGNhbiBiZSBubyBmdXJ0aGVyIGF0
dHJpYnV0aW9ucwotICAgICAgICAgICAgLy8gZHVlIGZvciByZXBvcnRpbmcsIGFuZCBuZXh0VGlt
ZVRvRmlyZSBpcyB0aGUgbWluaW11bSBlYXJsaWVzdFRpbWVUb1NlbmQgdmFsdWUgZm9yIGFueSBw
ZW5kaW5nIGF0dHJpYnV0aW9uLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobmV4dFRpbWVUb0ZpcmUgPCBTZWNvbmRzOjppbmZpbml0eSgpKQotICAgICAgICAg
ICAgc3RhcnRUaW1lcihuZXh0VGltZVRvRmlyZSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgbV9maXJlUGVuZGluZ0F0dHJpYnV0aW9uUmVx
dWVzdHNUaW1lci5zdG9wKCk7Ci0gICAgbV9lcGhlbWVyYWxNZWFzdXJlbWVudCA9IHN0ZDo6bnVs
bG9wdDsKLSAgICBtX2lzUnVubmluZ0VwaGVtZXJhbE1lYXN1cmVtZW50VGVzdCA9IGZhbHNlOwot
Ci0gICAgaWYgKCFmZWF0dXJlRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoKTsKLQotICAgIHN0b3JlKCkuY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRNYW5hZ2VyOjpjbGVhckZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKLXsKLSAgICBpZiAoIWZlYXR1cmVFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcigpOwotCi0gICAgc3RvcmUoKS5jbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50
Rm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
Ci19Ci0KLXZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpjbGVhckV4cGlyZWQo
KQotewotICAgIGlmICghZmVhdHVyZUVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RvcmUoKS5jbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpOwotfQotCi12b2lk
IFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6dG9TdHJpbmdGb3JUZXN0aW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKLXsK
LSAgICBpZiAoIWZlYXR1cmVFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcigiXG5ObyBzdG9yZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBkYXRhLlxuIl9zKTsK
LQotICAgIHN0b3JlKCkucHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZ0ZvclRlc3Rpbmco
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwotfQotCi12b2lkIFByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlcjo6c2V0VG9rZW5QdWJsaWNLZXlVUkxGb3JUZXN0aW5nKFVSTCYmIHRlc3RV
UkwpCi17Ci0gICAgaWYgKHRlc3RVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV90b2tlblB1YmxpY0tleVVSTEZvclRlc3RpbmcgPSBXVEZNb3ZlKHRlc3RVUkwpOwotfQotCi12
b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6c2V0VG9rZW5TaWduYXR1cmVVUkxG
b3JUZXN0aW5nKFVSTCYmIHRlc3RVUkwpCi17Ci0gICAgaWYgKHRlc3RVUkwuaXNFbXB0eSgpKQot
ICAgICAgICBtX3Rva2VuU2lnbmF0dXJlVVJMRm9yVGVzdGluZyA9IHsgfTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fdG9rZW5TaWduYXR1cmVVUkxGb3JUZXN0aW5nID0gV1RGTW92ZSh0ZXN0VVJMKTsK
LX0KLQotdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OnNldEF0dHJpYnV0aW9u
UmVwb3J0VVJMc0ZvclRlc3RpbmcoVVJMJiYgc291cmNlVVJMLCBVUkwmJiBkZXN0aW5hdGlvblVS
TCkKLXsKLSAgICBpZiAoc291cmNlVVJMLmlzRW1wdHkoKSB8fCBkZXN0aW5hdGlvblVSTC5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fYXR0cmlidXRpb25SZXBvcnRUZXN0Q29uZmlnID0gc3RkOjpudWxs
b3B0OwotICAgIGVsc2UKLSAgICAgICAgbV9hdHRyaWJ1dGlvblJlcG9ydFRlc3RDb25maWcgPSBB
dHRyaWJ1dGlvblJlcG9ydFRlc3RDb25maWcgeyBXVEZNb3ZlKHNvdXJjZVVSTCksIFdURk1vdmUo
ZGVzdGluYXRpb25VUkwpIH07Ci19Ci0KLXZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5h
Z2VyOjptYXJrQWxsVW5hdHRyaWJ1dGVkQXNFeHBpcmVkRm9yVGVzdGluZygpCi17Ci0gICAgaWYg
KCFmZWF0dXJlRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdG9yZSgpLm1hcmtB
bGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3Rpbmco
KTsKLX0KLQotdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OnNldFBDTUZyYXVk
UHJldmVudGlvblZhbHVlc0ZvclRlc3RpbmcoU3RyaW5nJiYgdW5saW5rYWJsZVRva2VuLCBTdHJp
bmcmJiBzZWNyZXRUb2tlbiwgU3RyaW5nJiYgc2lnbmF0dXJlLCBTdHJpbmcmJiBrZXlJRCkKLXsK
LSAgICBpZiAodW5saW5rYWJsZVRva2VuLmlzRW1wdHkoKSB8fCBzZWNyZXRUb2tlbi5pc0VtcHR5
KCkgfHwgc2lnbmF0dXJlLmlzRW1wdHkoKSB8fCBrZXlJRC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2ZyYXVkUHJldmVudGlvblZhbHVlc0ZvclRlc3RpbmcgPSBUZXN0aW5nRnJh
dWRQcmV2ZW50aW9uVmFsdWVzIHsgV1RGTW92ZSh1bmxpbmthYmxlVG9rZW4pLCBXVEZNb3ZlKHNl
Y3JldFRva2VuKSwgV1RGTW92ZShzaWduYXR1cmUpLCBXVEZNb3ZlKGtleUlEKSB9OwotfQotCi1i
b29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmVhdHVyZUVuYWJsZWQoKSBjb25z
dAotewotICAgIHJldHVybiBtX2NsaWVudC0+ZmVhdHVyZUVuYWJsZWQoKTsKLX0KLQotYm9vbCBQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmRlYnVnTW9kZUVuYWJsZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2NsaWVudC0+ZGVidWdNb2RlRW5hYmxlZCgpOwotfQotCi12b2lkIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIWZlYXR1cmVFbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwotCi0gICAgc3RvcmUoKS5tYXJrQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwotfQotCi1QQ006OlN0b3JlJiBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudE1hbmFnZXI6OnN0b3JlKCkKLXsKLSAgICBpZiAoIW1fc3RvcmUpCi0gICAgICAgIG1fc3Rv
cmUgPSBQQ006OlN0b3JlOjpjcmVhdGUobV9zdG9yYWdlRGlyZWN0b3J5KTsKLSAgICByZXR1cm4g
Km1fc3RvcmU7Ci19Ci0KLWNvbnN0IFBDTTo6U3RvcmUmIFByaXZhdGVDbGlja01lYXN1cmVtZW50
TWFuYWdlcjo6c3RvcmUoKSBjb25zdAotewotICAgIGlmICghbV9zdG9yZSkKLSAgICAgICAgbV9z
dG9yZSA9IFBDTTo6U3RvcmU6OmNyZWF0ZShtX3N0b3JhZ2VEaXJlY3RvcnkpOwotICAgIHJldHVy
biAqbV9zdG9yZTsKLX0KLQotdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI6OmRl
c3Ryb3lTdG9yZUZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIGlmICghbV9zdG9yZSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgbV9zdG9yZS0+Y2xvc2UoW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKHdlYWtUaGlzKQotICAgICAgICAgICAgd2Vha1RoaXMt
Pm1fc3RvcmUgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsK
LSAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFn
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JhNzc4M2QxNzg3YmU0MzY0MWU1
MzIyMWQyNzIyYTJjZDBiOWZmMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIk5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIgot
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCi0jaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRDbGllbnQuaCIKLSNpbmNsdWRlICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0b3JlLmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
RXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgotI2luY2x1ZGUg
PHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWVudW0gY2xhc3MgUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRBdHRyaWJ1dGlvblR5cGUgOiBib29sIHsgVW5hdHRyaWJ1dGVkLCBBdHRyaWJ1dGVkIH07Ci0K
LWNsYXNzIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlciA6IHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXI+IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLQotICAgIHVzaW5nIEF0dHJpYnV0aW9uRGVzdGluYXRpb25T
aXRlID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uRGVzdGlu
YXRpb25TaXRlOwotICAgIHVzaW5nIEF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgPSBXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25UcmlnZ2VyRGF0YTsKLSAgICB1c2lu
ZyBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVt
ZW50OwotICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW47Ci0gICAgdXNpbmcgU291cmNlU2l0ZSA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1
cmVtZW50OjpTb3VyY2VTaXRlOwotICAgIGV4cGxpY2l0IFByaXZhdGVDbGlja01lYXN1cmVtZW50
TWFuYWdlcihVbmlxdWVSZWY8UENNOjpDbGllbnQ+JiYsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURp
cmVjdG9yeSk7Ci0KLSAgICB2b2lkIHN0b3JlVW5hdHRyaWJ1dGVkKFByaXZhdGVDbGlja01lYXN1
cmVtZW50JiYpOwotICAgIHZvaWQgaGFuZGxlQXR0cmlidXRpb24oQXR0cmlidXRpb25UcmlnZ2Vy
RGF0YSYmLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVkaXJlY3RSZXF1ZXN0KTsKLSAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7Ci0gICAgdm9pZCBjbGVhckZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lk
IHRvU3RyaW5nRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYpIGNv
bnN0OwotICAgIHZvaWQgc2V0T3ZlcnJpZGVUaW1lckZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBt
X2lzUnVubmluZ1Rlc3QgPSB2YWx1ZTsgfQotICAgIHZvaWQgc2V0VG9rZW5QdWJsaWNLZXlVUkxG
b3JUZXN0aW5nKFVSTCYmKTsKLSAgICB2b2lkIHNldFRva2VuU2lnbmF0dXJlVVJMRm9yVGVzdGlu
ZyhVUkwmJik7Ci0gICAgdm9pZCBzZXRBdHRyaWJ1dGlvblJlcG9ydFVSTHNGb3JUZXN0aW5nKFVS
TCYmIHNvdXJjZVVSTCwgVVJMJiYgZGVzdGluYXRpb25VUkwpOwotICAgIHZvaWQgbWFya0FsbFVu
YXR0cmlidXRlZEFzRXhwaXJlZEZvclRlc3RpbmcoKTsKLSAgICB2b2lkIG1hcmtBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2V0RXBoZW1lcmFsTWVhc3VyZW1lbnRGb3JUZXN0
aW5nKGJvb2wgdmFsdWUpIHsgbV9pc1J1bm5pbmdFcGhlbWVyYWxNZWFzdXJlbWVudFRlc3QgPSB2
YWx1ZTsgfQotICAgIHZvaWQgc2V0UENNRnJhdWRQcmV2ZW50aW9uVmFsdWVzRm9yVGVzdGluZyhT
dHJpbmcmJiB1bmxpbmthYmxlVG9rZW4sIFN0cmluZyYmIHNlY3JldFRva2VuLCBTdHJpbmcmJiBz
aWduYXR1cmUsIFN0cmluZyYmIGtleUlEKTsKLSAgICB2b2lkIHN0YXJ0VGltZXIoU2Vjb25kcyk7
Ci0KLSAgICB2b2lkIGRlc3Ryb3lTdG9yZUZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKLQotICAgIFBDTTo6U3RvcmUmIHN0b3JlKCk7Ci0gICAgY29uc3QgUENNOjpTdG9y
ZSYgc3RvcmUoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGdldFRva2VuUHVibGljS2V5
KFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYsIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRy
aWJ1dGlvblJlcG9ydEVuZHBvaW50LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UGNtRGF0YUNh
cnJpZWQsIEZ1bmN0aW9uPHZvaWQoUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmJiBhdHRyaWJ1dGlv
biwgY29uc3QgU3RyaW5nJiBwdWJsaWNLZXlCYXNlNjRVUkwpPiYmKTsKLSAgICB2b2lkIGdldFNp
Z25lZFVubGlua2FibGVUb2tlbihQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmKTsKLSAgICB2b2lk
IGluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYs
IFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKTsKLSAgICB2b2lkIGNsZWFy
U2VudEF0dHJpYnV0aW9uKFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYsIFByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KTsKLSAgICB2b2lkIGF0dHJpYnV0
ZShjb25zdCBTb3VyY2VTaXRlJiwgY29uc3QgQXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUmLCBB
dHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYpOwotICAgIHZvaWQgZmlyZUNvbnZlcnNpb25SZXF1ZXN0
KGNvbnN0IFByaXZhdGVDbGlja01lYXN1cmVtZW50JiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6
OkF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpOwotICAgIHZvaWQgZmlyZUNvbnZlcnNpb25SZXF1
ZXN0SW1wbChjb25zdCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYsIFByaXZhdGVDbGlja01lYXN1
cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KTsKLSAgICB2b2lkIGZpcmVQZW5kaW5n
QXR0cmlidXRpb25SZXF1ZXN0cygpOwotICAgIHZvaWQgY2xlYXJFeHBpcmVkKCk7Ci0gICAgYm9v
bCBmZWF0dXJlRW5hYmxlZCgpIGNvbnN0OwotICAgIGJvb2wgZGVidWdNb2RlRW5hYmxlZCgpIGNv
bnN0OwotCi0gICAgc3RkOjpvcHRpb25hbDxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gbV9lcGhl
bWVyYWxNZWFzdXJlbWVudDsKLSAgICBXZWJDb3JlOjpUaW1lciBtX2ZpcmVQZW5kaW5nQXR0cmli
dXRpb25SZXF1ZXN0c1RpbWVyOwotICAgIGJvb2wgbV9pc1J1bm5pbmdUZXN0IHsgZmFsc2UgfTsK
LSAgICBib29sIG1faXNSdW5uaW5nRXBoZW1lcmFsTWVhc3VyZW1lbnRUZXN0IHsgZmFsc2UgfTsK
LSAgICBzdGQ6Om9wdGlvbmFsPFVSTD4gbV90b2tlblB1YmxpY0tleVVSTEZvclRlc3Rpbmc7Ci0g
ICAgc3RkOjpvcHRpb25hbDxVUkw+IG1fdG9rZW5TaWduYXR1cmVVUkxGb3JUZXN0aW5nOwotICAg
IG11dGFibGUgUmVmUHRyPFBDTTo6U3RvcmU+IG1fc3RvcmU7Ci0gICAgU3RyaW5nIG1fc3RvcmFn
ZURpcmVjdG9yeTsKLSAgICBVbmlxdWVSZWY8UENNOjpDbGllbnQ+IG1fY2xpZW50OwotCi0gICAg
c3RydWN0IEF0dHJpYnV0aW9uUmVwb3J0VGVzdENvbmZpZyB7Ci0gICAgICAgIFVSTCBhdHRyaWJ1
dGlvblJlcG9ydFNvdXJjZVVSTDsKLSAgICAgICAgVVJMIGF0dHJpYnV0aW9uUmVwb3J0QXR0cmli
dXRlT25VUkw7Ci0gICAgfTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRpb25SZXBvcnRU
ZXN0Q29uZmlnPiBtX2F0dHJpYnV0aW9uUmVwb3J0VGVzdENvbmZpZzsKLQotICAgIHN0cnVjdCBU
ZXN0aW5nRnJhdWRQcmV2ZW50aW9uVmFsdWVzIHsKLSAgICAgICAgU3RyaW5nIHVubGlua2FibGVU
b2tlbjsKLSAgICAgICAgU3RyaW5nIHNlY3JldFRva2VuOwotICAgICAgICBTdHJpbmcgc2lnbmF0
dXJlOwotICAgICAgICBTdHJpbmcga2V5SUQ7Ci0gICAgfTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
VGVzdGluZ0ZyYXVkUHJldmVudGlvblZhbHVlcz4gbV9mcmF1ZFByZXZlbnRpb25WYWx1ZXNGb3JU
ZXN0aW5nOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtM
b2FkZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFz
dXJlbWVudE5ldHdvcmtMb2FkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
Y2JiNGUyZDA4ODc0NTZjNGQxOWU0MjMwM2FkYmY3NTZiYWI1ZTY2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlci5oIgotCi0jaW5jbHVk
ZSAiTmV0d29ya0xvYWQuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dFJlc291
cmNlRGVjb2Rlci5oPgotCi0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIFByaXZhdGVDbGlj
a01lYXN1cmVtZW50TmV0d29ya0xvYWRlcjo6c3RhcnQoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24s
IE5ldHdvcmtMb2FkUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMsIENhbGxiYWNrJiYgY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgYXV0byBsb2FkZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyPihuZXcgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRO
ZXR3b3JrTG9hZGVyKHNlc3Npb24sIFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKSk7Ci0gICAgc2Vzc2lvbi5hZGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5l
dHdvcmtMb2FkZXIoV1RGTW92ZShsb2FkZXIpKTsKLX0KLQotUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnROZXR3b3JrTG9hZGVyOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXIoTmV0
d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtMb2FkUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMs
IENhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIpCi0gICAgOiBtX3Nlc3Npb24obWFrZVdlYWtQ
dHIoc2Vzc2lvbikpCi0gICAgLCBtX2NvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKQotewotICAgIG1fbmV0d29ya0xvYWQgPSBtYWtlVW5pcXVlPE5ldHdvcmtMb2Fk
PigqdGhpcywgbnVsbHB0ciwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgKm1fc2Vzc2lvbik7Ci0gICAg
bV9uZXR3b3JrTG9hZC0+c3RhcnQoKTsKLX0KLQotUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3
b3JrTG9hZGVyOjp+UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyKCkKLXsKLSAg
ICBjYW5jZWwoKTsKLX0KLQotdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2Fk
ZXI6OmZhaWwoUmVzb3VyY2VFcnJvciYmIGVycm9yKQotewotICAgIGlmICghbV9jb21wbGV0aW9u
SGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb21wbGV0aW9uSGFuZGxlcihXVEZN
b3ZlKGVycm9yKSwgeyB9LCBudWxscHRyKTsKLSAgICBkaWRDb21wbGV0ZSgpOwotfQotCi12b2lk
IFByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlcjo6Y2FuY2VsKCkKLXsKLSAgICBm
YWlsKFJlc291cmNlRXJyb3IgeyBSZXNvdXJjZUVycm9yOjpUeXBlOjpDYW5jZWxsYXRpb24gfSk7
Ci19Ci0KLXZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyOjp3aWxsU2Vu
ZFJlZGlyZWN0ZWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmLCBSZXNvdXJjZVJlcXVlc3QmJiwg
UmVzb3VyY2VSZXNwb25zZSYmKQotewotICAgIGNhbmNlbCgpOwotfQotCi12b2lkIFByaXZhdGVD
bGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNl
UmVzcG9uc2UmJiByZXNwb25zZSwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIGlmICghTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKU09O
TUlNRVR5cGUocmVzcG9uc2UubWltZVR5cGUoKSkpIHsKLSAgICAgICAgZmFpbCh7IGVycm9yRG9t
YWluV2ViS2l0SW50ZXJuYWwsIDAsIHJlc3BvbnNlLnVybCgpLCAiTUlNRSBUeXBlIGlzIG5vdCBh
IEpTT04gTUlNRSB0eXBlIl9zIH0pOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lB
Y3Rpb246Oklnbm9yZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Jlc3BvbnNl
ID0gV1RGTW92ZShyZXNwb25zZSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoUG9saWN5QWN0aW9u
OjpVc2UpOwotfQotCi12b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlcjo6
ZGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlciwgaW50IHJlcG9ydGVk
RW5jb2RlZERhdGFMZW5ndGgpCi17Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAgICAgIG1fZGVj
b2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgiYXBwbGljYXRpb24vanNvbiJfcywg
bV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCkuaXNFbXB0eSgpID8gV2ViQ29yZTo6VGV4dEVu
Y29kaW5nKCJVVEYtOCIpIDogV2ViQ29yZTo6VGV4dEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVu
Y29kaW5nTmFtZSgpKSk7Ci0KLSAgICBpZiAoYXV0byBzaXplID0gYnVmZmVyLT5zaXplKCkpCi0g
ICAgICAgIG1fanNvblN0cmluZy5hcHBlbmQobV9kZWNvZGVyLT5kZWNvZGUoYnVmZmVyLT5kYXRh
KCksIHNpemUpKTsKLX0KLQotdm9pZCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2Fk
ZXI6OmRpZEZpbmlzaExvYWRpbmcoY29uc3QgV2ViQ29yZTo6TmV0d29ya0xvYWRNZXRyaWNzJikK
LXsKLSAgICBpZiAobV9kZWNvZGVyKQotICAgICAgICBtX2pzb25TdHJpbmcuYXBwZW5kKG1fZGVj
b2Rlci0+Zmx1c2goKSk7Ci0KLSAgICBpZiAoYXV0byBqc29uVmFsdWUgPSBKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKG1fanNvblN0cmluZy50b1N0cmluZygpKSkKLSAgICAgICAgbV9jb21wbGV0aW9u
SGFuZGxlcih7IH0sIG1fcmVzcG9uc2UsIGpzb25WYWx1ZS0+YXNPYmplY3QoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2NvbXBsZXRpb25IYW5kbGVyKHsgfSwgbV9yZXNwb25zZSwgbnVsbHB0cik7
Ci0KLSAgICBkaWRDb21wbGV0ZSgpOwotfQotCi12b2lkIFByaXZhdGVDbGlja01lYXN1cmVtZW50
TmV0d29ya0xvYWRlcjo6ZGlkRmFpbExvYWRpbmcoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
Ci17Ci0gICAgZmFpbChSZXNvdXJjZUVycm9yKGVycm9yKSk7Ci19Ci0KLXZvaWQgUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyOjpkaWRDb21wbGV0ZSgpCi17Ci0gICAgbV9uZXR3
b3JrTG9hZCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fc2Vzc2lvbikKLSAgICAgICAgbV9zZXNzaW9u
LT5yZW1vdmVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXIodGhpcyk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ZmU5MGFiYTJjNjQwNjZmOWU3N2Ez
YjgzOTQ0OTdlODU2Yzk3YTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJl
bWVudE5ldHdvcmtMb2FkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCi0jaW5jbHVk
ZSAiTmV0d29ya0xvYWRDbGllbnQuaCIKLSNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRSZXNvdXJjZURlY29kZXIuaD4KLSNpbmNsdWRlIDx3
dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTmV0d29ya1Nlc3Npb247Ci0KLWNsYXNzIFByaXZhdGVD
bGlja01lYXN1cmVtZW50TmV0d29ya0xvYWRlciBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrTG9hZENs
aWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdXNpbmcg
Q2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgUmVmUHRyPEpT
T046Ok9iamVjdD4mKT47Ci0gICAgc3RhdGljIHZvaWQgc3RhcnQoTmV0d29ya1Nlc3Npb24mLCBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMmJiwgQ2FsbGJhY2smJik7Ci0KLSAgICB+UHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0xvYWRQYXJh
bWV0ZXJzJiYsIENhbGxiYWNrJiYpOwotCi0gICAgLy8gTmV0d29ya0xvYWRDbGllbnQuCi0gICAg
dm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBmaW5hbCB7IH0KLSAgICBib29sIGlzU3luY2hy
b25vdXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgaXNBbGxvd2Vk
VG9Bc2tVc2VyRm9yQ3JlZGVudGlhbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZvaWQgd2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVkaXJlY3RSZXF1ZXN0LCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZSkgZmluYWw7Ci0gICAgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBSZXNwb25zZUNv
bXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOwotICAgIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZlcihSZWY8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkg
ZmluYWw7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtM
b2FkTWV0cmljcyYpIGZpbmFsOwotICAgIHZvaWQgZGlkRmFpbExvYWRpbmcoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYpIGZpbmFsOwotCi0gICAgdm9pZCBmYWlsKFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImJik7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICB2b2lkIGRpZENvbXBsZXRlKCk7
Ci0KLSAgICBXZWFrUHRyPE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPE5ldHdvcmtMb2FkPiBtX25ldHdvcmtMb2FkOwotICAgIENhbGxiYWNrIG1fY29tcGxl
dGlvbkhhbmRsZXI7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKLSAg
ICBTdHJpbmdCdWlsZGVyIG1fanNvblN0cmluZzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKaW5kZXggMTljZjk0ZDBkNTljNjJmOTA5NGU4Zjk4YTIwMDczNjdjOWRmOTMx
My4uMTE3MzY5NzZhNGMzZTk0MDhjYTAxYmE3YWU4NzlmNjI0NWJiYzVkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CkBAIC01OCw4ICs1OCw2IEBAIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllci5jcHAKIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllck1hbmFnZXIuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0RhdGFiYXNlVXRpbGl0aWVzLmNw
cAotTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcAotTmV0
d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyLmNwcAogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtCcm9hZGNhc3RDaGFubmVsUmVnaXN0cnkuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q09SU1ByZWZsaWdodENoZWNrZXIuY3BwCkBAIC0xMDIsNiArMTAwLDggQEAgTmV0d29ya1Byb2Nl
c3MvSW5kZXhlZERCL1dlYklEQlNlcnZlci5jcHAKIE5ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlj
a01lYXN1cmVtZW50L1ByaXZhdGVDbGlja01lYXN1cmVtZW50Q2xpZW50SW1wbC5jcHAKIE5ldHdv
cmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50L1ByaXZhdGVDbGlja01lYXN1cmVtZW50
RGF0YWJhc2UuY3BwCiBOZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudERlYnVnSW5mby5jcHAKK05ldHdvcmtQcm9jZXNzL1ByaXZhdGVD
bGlja01lYXN1cmVtZW50L1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAKK05ldHdv
cmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50L1ByaXZhdGVDbGlja01lYXN1cmVtZW50
TmV0d29ya0xvYWRlci5jcHAKIE5ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50
L1ByaXZhdGVDbGlja01lYXN1cmVtZW50U3RvcmUuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL1NlcnZp
Y2VXb3JrZXIvU2VydmljZVdvcmtlckZldGNoVGFzay5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0YzRmYmI4YWQx
M2VjYmMwYTJiMzhhOTI1OGMzYjM5NmQ2Nzc5NDNkLi41ZGVhODgxN2VhODBhYmM1MGI2MDU2YmI2
ZDhlMGZhMmQzODk3ODgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEwNzQsOCArMTA3NCw2IEBACiAJCTUxN0NGMEUzMTYzQTQ4NkMw
MEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3Q0YwRTExNjNB
NDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHAgKi87IH07CiAJCTUxN0NGMEUzMTYzQTQ4NkMwMEMyOTUwRiAvKiBDYWNoZVN0b3JhZ2VFbmdp
bmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRiAvKiBDYWNoZVN0
b3JhZ2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTE3Q0Yw
RTQxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdDRjBFMjE2
M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsg
fTsKLQkJNTE4MzI0N0MyNjE2OEM2MjAwM0YyMzlFIC8qIE5ldHdvcmtVUkxTY2hlbWVIYW5kbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzMjQ3
NTI2MTU5OUNDMDAzRjIzOUUgLyogTmV0d29ya1VSTFNjaGVtZUhhbmRsZXIuaCAqLzsgfTsKLQkJ
NTE4MzI0N0QyNjE2OEZGNzAwM0YyMzlFIC8qIE5ldHdvcmtVUkxTY2hlbWVUYXNrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzMjQ3QTI2MTY4Njc1
MDAzRjIzOUUgLyogTmV0d29ya1VSTFNjaGVtZVRhc2suaCAqLzsgfTsKIAkJNTE4MzcyMjIyM0NF
OTc0MTAwMDNDRjgzIC8qIEFQSUNvbnRlbnRXb3JsZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4MzcyMjAyM0NFOTczQTAwMDNDRjgzIC8qIEFQSUNv
bnRlbnRXb3JsZC5oICovOyB9OwogCQk1MTg3MUI1QzEyN0NCODlEMDBGNzYyMzIgLyogV2ViQ29u
dGV4dE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxODcxQjVBMTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5oICovOyB9OwogCQk1
MThBQ0FFQTEyQUVFNkJCMDBCMDRCODMgLyogV0tQcm90ZWN0aW9uU3BhY2VUeXBlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4QUNBRTkxMkFFRTZC
QjAwQjA0QjgzIC8qIFdLUHJvdGVjdGlvblNwYWNlVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDExMiwxMiArNDExMCw4IEBACiAJCTUx
N0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdl
UmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTE3Q0YwRTExNjNBNDg2QzAw
QzI5NTBGIC8qIENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FjaGVTdG9yYWdlRW5naW5l
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJL
aXQyL0NhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MTdDRjBFMjE2M0E0ODZDMDBDMjk1
MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaDsgcGF0
aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJNTE4MzI0NzUyNjE1
OTlDQzAwM0YyMzlFIC8qIE5ldHdvcmtVUkxTY2hlbWVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtVUkxTY2hlbWVIYW5kbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUxODMyNDc2MjYxNTk5Q0MwMDNGMjM5RSAvKiBOZXR3b3JrVVJM
U2NoZW1lSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBO
ZXR3b3JrVVJMU2NoZW1lSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxODMyNDc4MjYxNUIwMEQwMDNGMjM5RSAvKiBOZXR3b3JrU2NoZW1lVVJMUHJvdG9jb2wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1NjaGVtZVVSTFByb3RvY29s
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODMyNDc5MjYxNUIwMEQwMDNGMjM5
RSAvKiBOZXR3b3JrU2NoZW1lVVJMUHJvdG9jb2wubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrU2NoZW1lVVJMUHJvdG9jb2wubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUxODMyNDdBMjYxNjg2NzUwMDNGMjM5RSAvKiBOZXR3b3JrVVJM
U2NoZW1lVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrVVJM
U2NoZW1lVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTgzMjQ3QjI2MTY4
Njc1MDAzRjIzOUUgLyogTmV0d29ya1VSTFNjaGVtZVRhc2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya1VSTFNjaGVtZVRhc2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTgzNzIyMDIzQ0U5NzNBMDAwM0NGODMgLyogQVBJQ29udGVu
dFdvcmxkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUNvbnRlbnRXb3Js
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTgzNzIyMTIzQ0U5NzNBMDAwM0NG
ODMgLyogQVBJQ29udGVudFdvcmxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEFQSUNvbnRlbnRXb3JsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxODNCMzkzMTM3OUY4NUMwMEU4NzU0RSAvKiBTaGltLnhjY29uZmlnICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54Y2NvbmZpZzsgcGF0aCA9IFNoaW0ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04NzQ3LDE4ICs4NzQxLDEwIEBACiAJCQkJNUMwQjE3N0UxRTdDODg2NzAwRTkxMjND
IC8qIE5ldHdvcmtTb2NrZXRTdHJlYW0uaCAqLywKIAkJCQk1QzBCMTc3RjFFN0M4ODY3MDBFOTEy
M0MgLyogTmV0d29ya1NvY2tldFN0cmVhbS5tZXNzYWdlcy5pbiAqLywKIAkJCQk1QzlFRjJFNzIx
RjA1OEY5MDAzQkRDNTYgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCAqLywKLQkJ
CQk1MTgzMjQ3NjI2MTU5OUNDMDAzRjIzOUUgLyogTmV0d29ya1VSTFNjaGVtZUhhbmRsZXIuY3Bw
ICovLAotCQkJCTUxODMyNDc1MjYxNTk5Q0MwMDNGMjM5RSAvKiBOZXR3b3JrVVJMU2NoZW1lSGFu
ZGxlci5oICovLAotCQkJCTUxODMyNDdCMjYxNjg2NzUwMDNGMjM5RSAvKiBOZXR3b3JrVVJMU2No
ZW1lVGFzay5jcHAgKi8sCi0JCQkJNTE4MzI0N0EyNjE2ODY3NTAwM0YyMzlFIC8qIE5ldHdvcmtV
UkxTY2hlbWVUYXNrLmggKi8sCiAJCQkJNDYyMTA3RDcxRjM4REJEMzAwREQ3ODEwIC8qIFBpbmdM
b2FkLmNwcCAqLywKIAkJCQk1Q0U4NUIxRjFDODhFNjQzMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCAq
LywKIAkJCQk4M0EwRUQzMzFGNzQ3Q0M3MDAzMjk5RUIgLyogUHJlY29ubmVjdFRhc2suY3BwICov
LAogCQkJCTgzQTBFRDMyMUY3NDdDQzYwMDMyOTlFQiAvKiBQcmVjb25uZWN0VGFzay5oICovLAot
CQkJCTZCRDA1ODY0MjIwQ0U4QzIwMDBCRUQ1QyAvKiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1h
bmFnZXIuY3BwICovLAotCQkJCTZCRDA1ODYzMjIwQ0U4QzIwMDBCRUQ1QyAvKiBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudE1hbmFnZXIuaCAqLywKLQkJCQk1N0ZFNjg4QjI2MEFCQjNEMDBCRjQ1RTQg
LyogUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9hZGVyLmNwcCAqLywKLQkJCQk1N0ZF
Njg4QTI2MEFCQjNEMDBCRjQ1RTQgLyogUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnROZXR3b3JrTG9h
ZGVyLmggKi8sCiAJCQkJRTFCNzg0NzAxNjNGMjQ2OTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0LmggKi8sCiAJCQkJNDEyODdENEQyMjVDMTYxRjAwOUEzRTI2IC8qIFdlYlNvY2tl
dFRhc2suaCAqLywKIAkJCSk7CkBAIC05MjcyLDYgKzkyNTgsMTAgQEAKIAkJCQk1QzgyNkQ2OTI2
RDQ4MkVBMDA4QUVDOTEgLyogUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhYmFzZS5oICovLAog
CQkJCTVDQkU5MDkwMjZEN0ZCN0MwMDVBMkU5NSAvKiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudERl
YnVnSW5mby5jcHAgKi8sCiAJCQkJNUNCRTkwOEYyNkQ3RkI2MjAwNUEyRTk1IC8qIFByaXZhdGVD
bGlja01lYXN1cmVtZW50RGVidWdJbmZvLmggKi8sCisJCQkJNkJEMDU4NjQyMjBDRThDMjAwMEJF
RDVDIC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAgKi8sCisJCQkJNkJEMDU4
NjMyMjBDRThDMjAwMEJFRDVDIC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5oICov
LAorCQkJCTU3RkU2ODhCMjYwQUJCM0QwMEJGNDVFNCAvKiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dE5ldHdvcmtMb2FkZXIuY3BwICovLAorCQkJCTU3RkU2ODhBMjYwQUJCM0QwMEJGNDVFNCAvKiBQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudE5ldHdvcmtMb2FkZXIuaCAqLywKIAkJCQk1QzgyNkQ2NzI2
RDQ2QjQzMDA4QUVDOTEgLyogUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdG9yZS5jcHAgKi8sCiAJ
CQkJNUM4MjZENjgyNkQ0NkI0NDAwOEFFQzkxIC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50U3Rv
cmUuaCAqLywKIAkJCSk7CkBAIC0xMjI3NSw4ICsxMjI2NSw2IEBACiAJCQkJNUMyMENCQTAxQkIx
RUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzIx
NTk1NTFEQkFFNzI5MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDE3OTE1QjkyMjU3MDQ2RjAwRDZGOTdFIC8qIE5ldHdvcmtTb2NrZXRDaGFubmVs
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTgzMjQ3QzI2MTY4QzYyMDAzRjIzOUUgLyogTmV0d29y
a1VSTFNjaGVtZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxODMyNDdEMjYxNjhGRjcw
MDNGMjM5RSAvKiBOZXR3b3JrVVJMU2NoZW1lVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcw
REFBQzIyMzAzNzMwMzAwRThGQzA0IC8qIE5mY0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTU3MERBQUFFMjMwMjZGNUMwMEU4RkMwNCAvKiBOZmNTZXJ2aWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMUEyRUM1NjE0ODk5QzA5MDA4MTBENzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAo=
</data>
<flag name="review"
          id="460338"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>