<?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>143154</bug_id>
          
          <creation_ts>2015-03-27 14:42:20 -0700</creation_ts>
          <short_desc>[WK2][NetworkCache] Use WTF::WorkQueue abstraction inside NetworkCacheStatistics</short_desc>
          <delta_ts>2015-03-27 16:50:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1080757</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-27 14:42:20 -0700</bug_when>
    <thetext>Use WTF::WorkQueue abstraction inside NetworkCacheStatistics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080758</commentid>
    <comment_count>1</comment_count>
      <attachid>249608</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-27 14:44:08 -0700</bug_when>
    <thetext>Created attachment 249608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080806</commentid>
    <comment_count>2</comment_count>
      <attachid>249608</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-27 16:50:00 -0700</bug_when>
    <thetext>Comment on attachment 249608
Patch

Clearing flags on attachment: 249608

Committed r182090: &lt;http://trac.webkit.org/changeset/182090&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080807</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-27 16:50:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249608</attachid>
            <date>2015-03-27 14:44:08 -0700</date>
            <delta_ts>2015-03-27 16:50:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143154-20150327144327.patch</filename>
            <type>text/plain</type>
            <size>51558</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyMDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzc2NjJiNDM4NTFjNTIz
MTQ1ZmY3MmVjZTVmYjM5ODI5M2JlYzcwNS4uMzdiMjdkNzczNzMwNDg2NjlmMzAzYzhjOWQ3NWRk
ZmM2NjQwY2M4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQxIEBACiAyMDE1LTAzLTI3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW1dLMl1bTmV0d29ya0NhY2hl
XSBVc2UgV1RGOjpXb3JrUXVldWUgYWJzdHJhY3Rpb24gaW5zaWRlIE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MzE1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVz
ZSBXVEY6OldvcmtRdWV1ZSBhYnN0cmFjdGlvbiBpbnNpZGUgTmV0d29ya0NhY2hlU3RhdGlzdGlj
cywgbGlrZSB3ZQorICAgICAgICBhbHJlYWR5IGRvIGluIE5ldHdvcmtDYWNoZVN0b3JhZ2UuCisK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpleGVjdXRlU1FMQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6ZXhl
Y3V0ZVNRTFN0YXRlbWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlz
dGljczo6b3Blbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlzdGljczo6
U3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlzdGljczo6
aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlzdGljczo6
Ym9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNo
ZTo6U3RhdGlzdGljczo6c2hyaW5rSWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OlN0YXRpc3RpY3M6OnJlY29yZFJldHJpZXZhbFJlcXVlc3QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OnJlY29yZE5vdENhY2hpbmdSZXNwb25zZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6cmV0cmlldmVEZWNpc2lvblRvRGlhZ25v
c3RpY0tleSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlzdGljczo6cmVj
b3JkTm90VXNpbmdDYWNoZUZvclJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fj
aGU6OnN0b3JlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OnJlY29yZFJldHJpZXZhbEZhaWx1cmUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OmNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlVG9EaWFnbm9zdGlj
S2V5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdGF0aXN0aWNzOjpyZWNvcmRS
ZXRyaWV2ZWRDYWNoZWRFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3Rh
dGlzdGljczo6bWFya0FzUmVxdWVzdGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hl
OjpTdGF0aXN0aWNzOjp3cml0ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OlN0YXRpc3RpY3M6OnF1ZXJ5V2FzRXZlclJlcXVlc3RlZCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYWNoZTo6U3RhdGlzdGljczo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OmFkZEhhc2hlc1RvRGF0YWJhc2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OmFkZFN0b3JlRGVjaXNpb25zVG9EYXRh
YmFzZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0YXRpc3RpY3M6OnNlcmlh
bEJhY2tncm91bmRJT1F1ZXVlKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisKKzIwMTUtMDMtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KwogICAgICAgICBbV0syXVtOZXR3b3JrQ2FjaGVdIFJlbmFtZSByZXF1ZXN0TmVlZHNSZXZhbGlk
YXRpb24oKSB0byByZXF1ZXN0UmVxdWlyZXNSZXZhbGlkYXRpb24oKQogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMTM3CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3Mu
Y3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJjODY0MjE1NzI5ZTkyMjU4MmIwOGVhNTYzYWVhMDcx
MDNmNGU5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCkBAIC0wLDAgKzEsNDM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oIgorCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZp
bGVTeXN0ZW1Qb3NpeC5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RpYWdu
b3N0aWNMb2dnaW5nUmVzdWx0VHlwZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1
ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZVRyYWNrZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRl
VHJhbnNhY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgeworCitzdGF0aWMgY29uc3QgY2hhciogU3Rh
dGlzdGljc0RhdGFiYXNlTmFtZSA9ICJXZWJLaXRDYWNoZVN0YXRpc3RpY3MuZGIiOworc3RhdGlj
IGNvbnN0IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgbWluaW51bVdyaXRlSW50ZXJ2YWwgPSBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwMDAwKTsKKworc3RhdGljIGJvb2wgZXhlY3V0ZVNR
TENvbW1hbmQoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IHNxbCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoV2Vi
Q29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CisgICAgQVNTRVJUKGRhdGFiYXNlLmlzT3BlbigpKTsKKworICAgIGJvb2wgcmVzdWx0ID0gZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoc3FsKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgTE9H
X0VSUk9SKCJOZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3M6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRl
bWVudCBcIiVzXCIgZXJyb3IgXCIlc1wiIiwgc3FsLnV0ZjgoKS5kYXRhKCksIGRhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sIGV4
ZWN1dGVTUUxTdGF0ZW1lbnQoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKFdlYkNvcmU6OlNR
TGl0ZURhdGFiYXNlVHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFT
U0VSVChzdGF0ZW1lbnQuZGF0YWJhc2UoKS5pc09wZW4oKSk7CisKKyAgICBpZiAoc3RhdGVtZW50
LnN0ZXAoKSAhPSBXZWJDb3JlOjpTUUxSZXN1bHREb25lKSB7CisgICAgICAgIExPR19FUlJPUigi
TmV0d29yayBjYWNoZSBzdGF0aXN0aWNzOiBmYWlsZWQgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQgXCIl
c1wiIGVycm9yIFwiJXNcIiIsIHN0YXRlbWVudC5xdWVyeSgpLnV0ZjgoKS5kYXRhKCksIHN0YXRl
bWVudC5kYXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8U3RhdGlzdGlj
cz4gU3RhdGlzdGljczo6b3Blbihjb25zdCBTdHJpbmcmIGNhY2hlUGF0aCkKK3sKKyAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IFdlYkNv
cmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZVBhdGgsIFN0YXRpc3RpY3NEYXRhYmFz
ZU5hbWUpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8U3RhdGlzdGljcz4obmV3IFN0YXRp
c3RpY3MoZGF0YWJhc2VQYXRoKSk7Cit9CisKK1N0YXRpc3RpY3M6OlN0YXRpc3RpY3MoY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZVBhdGgpCisgICAgOiBtX3NlcmlhbEJhY2tncm91bmRJT1F1ZXVlKFdv
cmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LkNhY2hlLlN0YXRpc3RpY3MuQmFja2dy
b3VuZCIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVldWU6OlFPUzo6QmFja2dyb3Vu
ZCkpCisgICAgLCBtX3dyaXRlVGltZXIoKnRoaXMsICZTdGF0aXN0aWNzOjp3cml0ZVRpbWVyRmly
ZWQpCit7CisgICAgaW5pdGlhbGl6ZShkYXRhYmFzZVBhdGgpOworfQorCit2b2lkIFN0YXRpc3Rp
Y3M6OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6bm93KCk7CisKKyAgICBTdHJpbmdDYXB0dXJlIGRhdGFiYXNlUGF0aENh
cHR1cmUoZGF0YWJhc2VQYXRoKTsKKyAgICBTdHJpbmdDYXB0dXJlIG5ldHdvcmtDYWNoZVBhdGhD
YXB0dXJlKHNpbmdsZXRvbigpLnN0b3JhZ2VQYXRoKCkpOworICAgIHNlcmlhbEJhY2tncm91bmRJ
T1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIGRhdGFiYXNlUGF0aENhcHR1cmUsIG5ldHdvcmtDYWNo
ZVBhdGhDYXB0dXJlLCBzdGFydFRpbWVdIHsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNh
Y3Rpb25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworCisgICAgICAg
IFN0cmluZyBkYXRhYmFzZVBhdGggPSBkYXRhYmFzZVBhdGhDYXB0dXJlLnN0cmluZygpOworICAg
ICAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhXZWJDb3JlOjpkaXJlY3RvcnlO
YW1lKGRhdGFiYXNlUGF0aCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIExPRyhO
ZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIE9wZW5pbmcgbmV0d29yayBjYWNoZSBzdGF0
aXN0aWNzIGRhdGFiYXNlIGF0ICVzLi4uIiwgZGF0YWJhc2VQYXRoLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VQYXRoKTsKKyAgICAgICAgbV9kYXRhYmFz
ZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7CisgICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJOZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3M6
IEZhaWxlZCB0byBvcGVuIC8gY3JlYXRlIHRoZSBuZXR3b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0
YWJhc2UiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGV4ZWN1
dGVTUUxDb21tYW5kKG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiQ1JFQVRFIFRBQkxFIElGIE5P
VCBFWElTVFMgQWxyZWFkeVJlcXVlc3RlZCAoaGFzaCBURVhUIFBSSU1BUlkgS0VZKSIpKTsKKyAg
ICAgICAgZXhlY3V0ZVNRTENvbW1hbmQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJDUkVBVEUg
VEFCTEUgSUYgTk9UIEVYSVNUUyBVbmNhY2hlZFJlYXNvbiAoaGFzaCBURVhUIFBSSU1BUlkgS0VZ
LCByZWFzb24gSU5URUdFUikiKSk7CisKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBjb3VudCgqKSBGUk9N
IEFscmVhZHlSZXF1ZXN0ZWQiKSk7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZUFuZFN0
ZXAoKSAhPSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
TmV0d29yayBjYWNoZSBzdGF0aXN0aWNzOiBGYWlsZWQgdG8gY291bnQgdGhlIG51bWJlciBvZiBy
b3dzIGluIEFscmVhZHlSZXF1ZXN0ZWQgdGFibGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fYXBwcm94aW1hdGVFbnRyeUNvdW50ID0gc3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKTsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICAgICAgYXV0byBlbGFwc2Vk
TVMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
PihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0YXJ0VGltZSkuY291bnQoKTsK
KyNlbmRpZgorICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBOZXR3
b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UgbG9hZCBjb21wbGV0ZSwgZW50cmllcz0lbHUg
dGltZT0lbGxkbXMiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94aW1hdGVFbnRyeUNvdW50
KSwgZWxhcHNlZE1TKTsKKworICAgICAgICBpZiAoIW1fYXBwcm94aW1hdGVFbnRyeUNvdW50KSB7
CisgICAgICAgICAgICBib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKG5ldHdvcmtDYWNoZVBhdGhD
YXB0dXJlLnN0cmluZygpKTsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgICAgICBlbGFwc2Vk
TVMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
PihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSAtIHN0YXJ0VGltZSkuY291bnQoKTsK
KyNlbmRpZgorICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykg
TmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNlIGJvb3RzdHJhcHBpbmcgY29tcGxldGUs
IGVudHJpZXM9JWx1IHRpbWU9JWxsZG1zIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGlt
YXRlRW50cnlDb3VudCksIGVsYXBzZWRNUyk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9p
ZCBTdGF0aXN0aWNzOjpib290c3RyYXBGcm9tTmV0d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0
d29ya0NhY2hlUGF0aCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIEJvb3RzdHJhcHBpbmcgdGhlIG5l
dHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBmcm9tIHRoZSBuZXR3b3JrIGNhY2hlLi4u
Iik7CisKKyAgICBWZWN0b3I8U3RyaW5nQ2FwdHVyZT4gaGFzaGVzOworICAgIHRyYXZlcnNlQ2Fj
aGVGaWxlcyhuZXR3b3JrQ2FjaGVQYXRoLCBbJmhhc2hlc10oY29uc3QgU3RyaW5nJiBoYXNoLCBj
b25zdCBTdHJpbmcmKSB7CisgICAgICAgIGhhc2hlcy5hcHBlbmQoaGFzaCk7CisgICAgfSk7CisK
KyAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFu
c2FjdGlvbkNvdW50ZXI7CisgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gd3JpdGVUcmFu
c2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB3cml0ZVRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAg
ICBhZGRIYXNoZXNUb0RhdGFiYXNlKGhhc2hlcyk7CisKKyAgICB3cml0ZVRyYW5zYWN0aW9uLmNv
bW1pdCgpOworfQorCit2b2lkIFN0YXRpc3RpY3M6OnNocmlua0lmTmVlZGVkKCkKK3sKKyAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGNvbnN0IHNpemVfdCBtYXhFbnRyaWVzID0g
MTAwMDAwOworCisgICAgaWYgKG1fYXBwcm94aW1hdGVFbnRyeUNvdW50IDwgbWF4RW50cmllcykK
KyAgICAgICAgcmV0dXJuOworCisgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgc2hyaW5raW5nIHN0YXRpc3RpY3MgY2FjaGUgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQ9JWx1
LCBtYXhFbnRyaWVzPSVsdSIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5
Q291bnQpLCBtYXhFbnRyaWVzKTsKKworICAgIGNsZWFyKCk7CisKKyAgICBTdHJpbmdDYXB0dXJl
IG5ldHdvcmtDYWNoZVBhdGhDYXB0dXJlKHNpbmdsZXRvbigpLnN0b3JhZ2VQYXRoKCkpOworICAg
IHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIG5ldHdvcmtDYWNoZVBh
dGhDYXB0dXJlXSB7CisgICAgICAgIGJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUobmV0d29ya0Nh
Y2hlUGF0aENhcHR1cmUuc3RyaW5nKCkpOworICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5l
dHdvcmtQcm9jZXNzKSBzdGF0aXN0aWNzIGNhY2hlIHNocmluayBjb21wbGV0ZWQgbV9hcHByb3hp
bWF0ZUVudHJ5Q291bnQ9JWx1Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlRW50
cnlDb3VudCkpOworICAgIH0pOworfQorCit2b2lkIFN0YXRpc3RpY3M6OnJlY29yZFJldHJpZXZh
bFJlcXVlc3QodWludDY0X3Qgd2ViUGFnZUlEKQoreworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5n
bGV0b24oKS5sb2dEaWFnbm9zdGljTWVzc2FnZSh3ZWJQYWdlSUQsIFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6bmV0d29ya0NhY2hlS2V5KCksIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dn
aW5nS2V5czo6cmV0cmlldmFsUmVxdWVzdEtleSgpLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Olll
cyk7Cit9CisKK3ZvaWQgU3RhdGlzdGljczo6cmVjb3JkTm90Q2FjaGluZ1Jlc3BvbnNlKGNvbnN0
IEtleSYga2V5LCBTdG9yZURlY2lzaW9uIHN0b3JlRGVjaXNpb24pCit7CisgICAgQVNTRVJUKHN0
b3JlRGVjaXNpb24gIT0gU3RvcmVEZWNpc2lvbjo6WWVzKTsKKworICAgIG1fc3RvcmVEZWNpc2lv
bnNUb0FkZC5zZXQoa2V5Lmhhc2hBc1N0cmluZygpLCBzdG9yZURlY2lzaW9uKTsKKyAgICBpZiAo
IW1fd3JpdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3dyaXRlVGltZXIuc3RhcnRPbmVT
aG90KG1pbmludW1Xcml0ZUludGVydmFsKTsKK30KKworc3RhdGljIFN0cmluZyByZXRyaWV2ZURl
Y2lzaW9uVG9EaWFnbm9zdGljS2V5KFJldHJpZXZlRGVjaXNpb24gcmV0cmlldmVEZWNpc2lvbikK
K3sKKyAgICBzd2l0Y2ggKHJldHJpZXZlRGVjaXNpb24pIHsKKyAgICBjYXNlIFJldHJpZXZlRGVj
aXNpb246Ok5vRHVlVG9IVFRQTWV0aG9kOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjp1bnN1cHBvcnRlZEhUVFBNZXRob2RLZXkoKTsKKyAgICBjYXNlIFJl
dHJpZXZlRGVjaXNpb246Ok5vRHVlVG9Db25kaXRpb25hbFJlcXVlc3Q6CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzQ29uZGl0aW9uYWxSZXF1ZXN0S2V5
KCk7CisgICAgY2FzZSBSZXRyaWV2ZURlY2lzaW9uOjpOb0R1ZVRvUmVsb2FkSWdub3JpbmdDYWNo
ZToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNSZWxv
YWRJZ25vcmluZ0NhY2hlRGF0YUtleSgpOworICAgIGNhc2UgUmV0cmlldmVEZWNpc2lvbjo6WWVz
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lkIFN0YXRpc3RpY3M6OnJlY29yZE5v
dFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgS2V5JiBrZXks
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmV0cmlldmVEZWNpc2lv
biByZXRyaWV2ZURlY2lzaW9uKQoreworICAgIEFTU0VSVChyZXRyaWV2ZURlY2lzaW9uICE9IFJl
dHJpZXZlRGVjaXNpb246Olllcyk7CisKKyAgICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNTdHJp
bmcoKTsKKyAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAg
cXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIE5lZWRVbmNhY2hlZFJlYXNvbjo6Tm8sIFt0aGlz
LCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSUQsIHJldHJpZXZlRGVjaXNpb25dKGJvb2wgd2Fz
RXZlclJlcXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8U3RvcmVEZWNpc2lvbj4mKSB7CisgICAgICAg
IGlmICh3YXNFdmVyUmVxdWVzdGVkKSB7CisgICAgICAgICAgICBTdHJpbmcgZGlhZ25vc3RpY0tl
eSA9IHJldHJpZXZlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXkocmV0cmlldmVEZWNpc2lvbik7Cisg
ICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB3ZWJQYWdlSUQg
JWxsdTogJXMgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGJ1dCB3ZSBhcmUgbm90IHVzaW5nIHRo
ZSBjYWNoZSwgcmVhc29uOiAlcyIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSwgZGlhZ25vc3RpY0tleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIE5l
dHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh3
ZWJQYWdlSUQsIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bmV0d29ya0NhY2hlS2V5
KCksIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkS2V5KCksIGRpYWdub3N0
aWNLZXksIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6WWVzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9zdGljTWVzc2Fn
ZVdpdGhWYWx1ZSh3ZWJQYWdlSUQsIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bmV0
d29ya0NhY2hlS2V5KCksIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVxdWVzdEtl
eSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldmVyU2VlbkJlZm9yZUtleSgp
LCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Olllcyk7CisgICAgICAgICAgICBtYXJrQXNSZXF1ZXN0
ZWQoaGFzaCk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworc3RhdGljIFN0cmluZyBzdG9yZURl
Y2lzaW9uVG9EaWFnbm9zdGljS2V5KFN0b3JlRGVjaXNpb24gc3RvcmVEZWNpc2lvbikKK3sKKyAg
ICBzd2l0Y2ggKHN0b3JlRGVjaXNpb24pIHsKKyAgICBjYXNlIFN0b3JlRGVjaXNpb246Ok5vRHVl
VG9Qcm90b2NvbDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5
czo6bm90SFRUUEZhbWlseUtleSgpOworICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9EdWVUb0hU
VFBNZXRob2Q6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnVuc3VwcG9ydGVkSFRUUE1ldGhvZEtleSgpOworICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9E
dWVUb0F0dGFjaG1lbnRSZXNwb25zZToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6aXNBdHRhY2htZW50S2V5KCk7CisgICAgY2FzZSBTdG9yZURlY2lzaW9u
OjpOb0R1ZVRvTm9TdG9yZVJlc3BvbnNlOgorICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9EdWVU
b05vU3RvcmVSZXF1ZXN0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dp
bmdLZXlzOjpjYWNoZUNvbnRyb2xOb1N0b3JlS2V5KCk7CisgICAgY2FzZSBTdG9yZURlY2lzaW9u
OjpOb0R1ZVRvSFRUUFN0YXR1c0NvZGU6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OnVuY2FjaGVhYmxlU3RhdHVzQ29kZUtleSgpOworICAgIGNhc2UgU3Rv
cmVEZWNpc2lvbjo6WWVzOgorICAgICAgICAvLyBJdCB3YXMgc3RvcmVkIGJ1dCBjb3VsZCBub3Qg
YmUgcmV0cmlldmVkIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHBydW5lZCBmcm9tIHRoZSBjYWNoZS4K
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9Mb25nZXJJ
bkNhY2hlS2V5KCk7CisgICAgfQorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBTdGF0
aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3Qg
S2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAg
ICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNTdHJpbmcoKTsKKyAgICBXZWJDb3JlOjpVUkwgcmVx
dWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gs
IE5lZWRVbmNhY2hlZFJlYXNvbjo6WWVzLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTCwgd2ViUGFn
ZUlEXShib29sIHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPFN0b3JlRGVj
aXNpb24+JiBzdG9yZURlY2lzaW9uKSB7CisgICAgICAgIGlmICh3YXNQcmV2aW91c2x5UmVxdWVz
dGVkKSB7CisgICAgICAgICAgICBTdHJpbmcgZGlhZ25vc3RpY0tleSA9IHN0b3JlRGVjaXNpb25U
b0RpYWdub3N0aWNLZXkoc3RvcmVEZWNpc2lvbi52YWx1ZSgpKTsKKyAgICAgICAgICAgIExPRyhO
ZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyB3YXMgcHJl
dmlvdXNseSByZXF1ZXN0IGJ1dCBpcyBub3QgaW4gdGhlIGNhY2hlLCByZWFzb246ICVzIiwgd2Vi
UGFnZUlELCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBkaWFnbm9zdGljS2V5
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigp
LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKHdlYlBhZ2VJRCwgV2ViQ29yZTo6RGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpuZXR3b3JrQ2FjaGVLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpub3RJbkNhY2hlS2V5KCksIGRpYWdub3N0aWNLZXksIFdlYkNvcmU6OlNob3Vs
ZFNhbXBsZTo6WWVzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5ldHdvcmtQcm9j
ZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh3ZWJQYWdlSUQs
IFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bmV0d29ya0NhY2hlS2V5KCksIFdlYkNv
cmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVxdWVzdEtleSgpLCBXZWJDb3JlOjpEaWFnbm9z
dGljTG9nZ2luZ0tleXM6Om5ldmVyU2VlbkJlZm9yZUtleSgpLCBXZWJDb3JlOjpTaG91bGRTYW1w
bGU6Olllcyk7CisgICAgICAgICAgICBtYXJrQXNSZXF1ZXN0ZWQoaGFzaCk7CisgICAgICAgIH0K
KyAgICB9KTsKK30KKworc3RhdGljIFN0cmluZyBjYWNoZWRFbnRyeVJldXNlRmFpbHVyZVRvRGlh
Z25vc3RpY0tleShVc2VEZWNpc2lvbiBkZWNpc2lvbikKK3sKKyAgICBzd2l0Y2ggKGRlY2lzaW9u
KSB7CisgICAgY2FzZSBVc2VEZWNpc2lvbjo6Tm9EdWVUb1ZhcnlpbmdIZWFkZXJNaXNtYXRjaDoK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dmFyeWluZ0hl
YWRlck1pc21hdGNoS2V5KCk7CisgICAgY2FzZSBVc2VEZWNpc2lvbjo6Tm9EdWVUb01pc3NpbmdW
YWxpZGF0b3JGaWVsZHM6CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2lu
Z0tleXM6Om1pc3NpbmdWYWxpZGF0b3JGaWVsZHNLZXkoKTsKKyAgICBjYXNlIFVzZURlY2lzaW9u
OjpOb0R1ZVRvRGVjb2RlRmFpbHVyZToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0
aWNMb2dnaW5nS2V5czo6b3RoZXJLZXkoKTsKKyAgICBjYXNlIFVzZURlY2lzaW9uOjpVc2U6Cisg
ICAgY2FzZSBVc2VEZWNpc2lvbjo6VmFsaWRhdGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9
CisKK3ZvaWQgU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkodWludDY0X3Qg
d2ViUGFnZUlELCBjb25zdCBLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBVc2VEZWNpc2lvbiBkZWNpc2lvbikKK3sKKyAgICBXZWJDb3JlOjpVUkwgcmVx
dWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAgaWYgKGRlY2lzaW9uID09IFVzZURlY2lzaW9u
OjpVc2UgfHwgZGVjaXNpb24gPT0gVXNlRGVjaXNpb246OlZhbGlkYXRlKSB7CisgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyBpcyBp
biB0aGUgY2FjaGUgYW5kIGlzIHVzZWQiLCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubG9n
RGlhZ25vc3RpY01lc3NhZ2VXaXRoUmVzdWx0KHdlYlBhZ2VJRCwgV2ViQ29yZTo6RGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpuZXR3b3JrQ2FjaGVLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dp
bmdLZXlzOjpyZXRyaWV2YWxLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRQ
YXNzLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Olllcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBTdHJpbmcgZGlhZ25vc3RpY0tleSA9IGNhY2hlZEVudHJ5UmV1c2VGYWlsdXJlVG9E
aWFnbm9zdGljS2V5KGRlY2lzaW9uKTsKKyAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQ
cm9jZXNzKSB3ZWJQYWdlSUQgJWxsdTogJXMgaXMgaW4gdGhlIGNhY2hlIGJ1dCB3YXNuJ3QgdXNl
ZCwgcmVhc29uOiAlcyIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSwgZGlhZ25vc3RpY0tleS51dGY4KCkuZGF0YSgpKTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6
c2luZ2xldG9uKCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUod2ViUGFnZUlELCBXZWJD
b3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldHdvcmtDYWNoZUtleSgpLCBXZWJDb3JlOjpE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNhYmxlQ2FjaGVkRW50cnlLZXkoKSwgZGlhZ25vc3Rp
Y0tleSwgV2ViQ29yZTo6U2hvdWxkU2FtcGxlOjpZZXMpOworfQorCit2b2lkIFN0YXRpc3RpY3M6
Om1hcmtBc1JlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gpCit7CisgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIG1faGFzaGVzVG9BZGQuYWRkKGhhc2gpOworICAgIGlmICgh
bV93cml0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fd3JpdGVUaW1lci5zdGFydE9uZVNo
b3QobWluaW51bVdyaXRlSW50ZXJ2YWwpOworfQorCit2b2lkIFN0YXRpc3RpY3M6OndyaXRlVGlt
ZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFZlY3Rv
cjxTdHJpbmdDYXB0dXJlPiBoYXNoZXNUb0FkZDsKKyAgICBjb3B5VG9WZWN0b3IobV9oYXNoZXNU
b0FkZCwgaGFzaGVzVG9BZGQpOworICAgIG1faGFzaGVzVG9BZGQuY2xlYXIoKTsKKworICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8U3RyaW5nQ2FwdHVyZSwgU3RvcmVEZWNpc2lvbj4+IHN0b3JlRGVjaXNp
b25zVG9BZGQ7CisgICAgY29weVRvVmVjdG9yKG1fc3RvcmVEZWNpc2lvbnNUb0FkZCwgc3RvcmVE
ZWNpc2lvbnNUb0FkZCk7CisgICAgbV9zdG9yZURlY2lzaW9uc1RvQWRkLmNsZWFyKCk7CisKKyAg
ICBzaHJpbmtJZk5lZWRlZCgpOworCisgICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNw
YXRjaChbdGhpcywgaGFzaGVzVG9BZGQsIHN0b3JlRGVjaXNpb25zVG9BZGRdIHsKKyAgICAgICAg
aWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gd3JpdGVUcmFu
c2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICAgICAgd3JpdGVUcmFuc2FjdGlvbi5iZWdpbigpOwor
CisgICAgICAgIGFkZEhhc2hlc1RvRGF0YWJhc2UoaGFzaGVzVG9BZGQpOworICAgICAgICBhZGRT
dG9yZURlY2lzaW9uc1RvRGF0YWJhc2Uoc3RvcmVEZWNpc2lvbnNUb0FkZCk7CisKKyAgICAgICAg
d3JpdGVUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICB9KTsKK30KKwordm9pZCBTdGF0aXN0aWNz
OjpxdWVyeVdhc0V2ZXJSZXF1ZXN0ZWQoY29uc3QgU3RyaW5nJiBoYXNoLCBOZWVkVW5jYWNoZWRS
ZWFzb24gbmVlZFVuY2FjaGVkUmVhc29uLCBjb25zdCBSZXF1ZXN0ZWRDb21wbGV0aW9uSGFuZGxl
ciYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIC8vIFF1ZXJ5IHBlbmRpbmcgd3JpdGVzIGZpcnN0LgorICAgIGJvb2wgd2FzQWxyZWFk
eVJlcXVlc3RlZCA9IG1faGFzaGVzVG9BZGQuY29udGFpbnMoaGFzaCk7CisgICAgaWYgKHdhc0Fs
cmVhZHlSZXF1ZXN0ZWQgJiYgbmVlZFVuY2FjaGVkUmVhc29uID09IE5lZWRVbmNhY2hlZFJlYXNv
bjo6Tm8pIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSwgTnVsbG9wdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG5lZWRVbmNhY2hlZFJlYXNvbiA9PSBOZWVkVW5j
YWNoZWRSZWFzb246OlllcyAmJiBtX3N0b3JlRGVjaXNpb25zVG9BZGQuY29udGFpbnMoaGFzaCkp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSwgbV9zdG9yZURlY2lzaW9uc1RvQWRk
LmdldChoYXNoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBRdWVyeSB0aGUg
ZGF0YWJhc2UuCisgICAgYXV0byBldmVyUmVxdWVzdGVkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVl
PEV2ZXJSZXF1ZXN0ZWRRdWVyeT4oRXZlclJlcXVlc3RlZFF1ZXJ5IHsgaGFzaCwgbmVlZFVuY2Fj
aGVkUmVhc29uID09IE5lZWRVbmNhY2hlZFJlYXNvbjo6WWVzLCBjb21wbGV0aW9uSGFuZGxlciB9
KTsKKyAgICBhdXRvJiBxdWVyeSA9ICpldmVyUmVxdWVzdGVkUXVlcnk7CisgICAgbV9hY3RpdmVR
dWVyaWVzLmFkZChXVEY6Om1vdmUoZXZlclJlcXVlc3RlZFF1ZXJ5KSk7CisgICAgc2VyaWFsQmFj
a2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgd2FzQWxyZWFkeVJlcXVlc3RlZCwgJnF1
ZXJ5XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb25JblBy
b2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworICAgICAgICBPcHRpb25hbDxT
dG9yZURlY2lzaW9uPiBzdG9yZURlY2lzaW9uOworICAgICAgICBpZiAobV9kYXRhYmFzZS5pc09w
ZW4oKSkgeworICAgICAgICAgICAgaWYgKCF3YXNBbHJlYWR5UmVxdWVzdGVkKSB7CisgICAgICAg
ICAgICAgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBB
U0NJSUxpdGVyYWwoIlNFTEVDVCBoYXNoIEZST00gQWxyZWFkeVJlcXVlc3RlZCBXSEVSRSBoYXNo
PT8iKSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gV2ViQ29y
ZTo6U1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIHF1ZXJ5Lmhhc2gpOworICAgICAgICAgICAgICAgICAgICB3YXNBbHJlYWR5UmVxdWVzdGVk
ID0gKHN0YXRlbWVudC5zdGVwKCkgPT0gV2ViQ29yZTo6U1FMUmVzdWx0Um93KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod2FzQWxyZWFkeVJlcXVl
c3RlZCAmJiBxdWVyeS5uZWVkVW5jYWNoZWRSZWFzb24pIHsKKyAgICAgICAgICAgICAgICBXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgi
U0VMRUNUIHJlYXNvbiBGUk9NIFVuY2FjaGVkUmVhc29uIFdIRVJFIGhhc2g9PyIpKTsKKyAgICAg
ICAgICAgICAgICBzdG9yZURlY2lzaW9uID0gU3RvcmVEZWNpc2lvbjo6WWVzOworICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFdlYkNvcmU6OlNRTFJlc3VsdE9rKSB7
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBxdWVyeS5oYXNoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gV2ViQ29yZTo6U1FM
UmVzdWx0Um93KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVEZWNpc2lvbiA9IHN0YXRp
Y19jYXN0PFN0b3JlRGVjaXNpb24+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3RoaXMsICZxdWVyeSwgd2FzQWxyZWFkeVJlcXVlc3RlZCwgc3RvcmVE
ZWNpc2lvbl0geworICAgICAgICAgICAgcXVlcnkuY29tcGxldGlvbkhhbmRsZXIod2FzQWxyZWFk
eVJlcXVlc3RlZCwgc3RvcmVEZWNpc2lvbik7CisgICAgICAgICAgICBtX2FjdGl2ZVF1ZXJpZXMu
cmVtb3ZlKCZxdWVyeSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFN0YXRpc3Rp
Y3M6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgc2Vy
aWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpc10geworICAgICAgICBpZiAobV9k
YXRhYmFzZS5pc09wZW4oKSkgeworICAgICAgICAgICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rp
b25JblByb2dyZXNzQXV0b0NvdW50ZXIgdHJhbnNhY3Rpb25Db3VudGVyOworICAgICAgICAgICAg
V2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24gZGVsZXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7
CisgICAgICAgICAgICBkZWxldGVUcmFuc2FjdGlvbi5iZWdpbigpOworICAgICAgICAgICAgZXhl
Y3V0ZVNRTENvbW1hbmQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBBbHJl
YWR5UmVxdWVzdGVkIikpOworICAgICAgICAgICAgZXhlY3V0ZVNRTENvbW1hbmQobV9kYXRhYmFz
ZSwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBVbmNhY2hlZFJlYXNvbiIpKTsKKyAgICAgICAg
ICAgIGRlbGV0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgICAgICAgICAgbV9hcHByb3hpbWF0
ZUVudHJ5Q291bnQgPSAwOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgU3RhdGlzdGlj
czo6YWRkSGFzaGVzVG9EYXRhYmFzZShjb25zdCBWZWN0b3I8U3RyaW5nQ2FwdHVyZT4mIGhhc2hl
cykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoV2ViQ29y
ZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOworCisgICAgV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBPUiBJR05P
UkUgSU5UTyBBbHJlYWR5UmVxdWVzdGVkIChoYXNoKSBWQUxVRVMgKD8pIikpOworICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFdlYkNvcmU6OlNRTFJlc3VsdE9rKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb3IgKGF1dG8mIGhhc2ggOiBoYXNoZXMpIHsKKyAgICAgICAgc3RhdGVtZW50
LmJpbmRUZXh0KDEsIGhhc2guc3RyaW5nKCkpOworICAgICAgICBpZiAoZXhlY3V0ZVNRTFN0YXRl
bWVudChzdGF0ZW1lbnQpKQorICAgICAgICAgICAgKyttX2FwcHJveGltYXRlRW50cnlDb3VudDsK
KyAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7CisgICAgfQorfQorCit2b2lkIFN0YXRpc3RpY3M6
OmFkZFN0b3JlRGVjaXNpb25zVG9EYXRhYmFzZShjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmlu
Z0NhcHR1cmUsIFN0b3JlRGVjaXNpb24+PiYgc3RvcmVEZWNpc2lvbnMpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNl
VHJhY2tlcjo6aGFzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VSVChtX2RhdGFi
YXNlLmlzT3BlbigpKTsKKworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIFVuY2FjaGVk
UmVhc29uIChoYXNoLCByZWFzb24pIFZBTFVFUyAoPywgPykiKSk7CisgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvciAoYXV0byYgcGFpciA6IHN0b3JlRGVjaXNpb25zKSB7CisgICAgICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBwYWlyLmZpcnN0LnN0cmluZygpKTsKKyAgICAgICAgc3RhdGVtZW50LmJp
bmRJbnQoMiwgc3RhdGljX2Nhc3Q8aW50PihwYWlyLnNlY29uZCkpOworICAgICAgICBleGVjdXRl
U1FMU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgICAgIHN0YXRlbWVudC5yZXNldCgpOworICAg
IH0KK30KKworfQorfQorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzLmgKaW5kZXggMGI2YTdmYjJmYzgxNzM2ZjcyNTI4N2Q4ZWYwMjE5NjEwYTU5
YjdjMi4uNDU4NjUwZGY2YzMxNWI3MzIxMjliMjUyOTJkZTVmYmM0NjBmODdjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0YXRpc3RpY3MuaApAQCAtMzAsOSArMzAsOSBAQAogCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCi0jaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CkBAIC01Niw2ICs1Niw4IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU3RhdGlzdGljcyhjb25zdCBTdHJpbmcm
IGRhdGFiYXNlUGF0aCk7CiAKKyAgICBXb3JrUXVldWUmIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVl
KCkgeyByZXR1cm4gbV9zZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKTsgfQorCiAgICAgdm9p
ZCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKICAgICB2b2lkIGJvb3Rz
dHJhcEZyb21OZXR3b3JrQ2FjaGUoY29uc3QgU3RyaW5nJiBuZXR3b3JrQ2FjaGVQYXRoKTsKICAg
ICB2b2lkIHNocmlua0lmTmVlZGVkKCk7CkBAIC03Nyw5ICs3OSw3IEBAIHByaXZhdGU6CiAKICAg
ICBzdGQ6OmF0b21pYzxzaXplX3Q+IG1fYXBwcm94aW1hdGVFbnRyeUNvdW50IHsgMCB9OwogCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbXV0YWJsZSBEaXNwYXRjaFB0cjxkaXNwYXRjaF9xdWV1
ZV90PiBtX2JhY2tncm91bmRJT1F1ZXVlOwotI2VuZGlmCisgICAgbXV0YWJsZSBSZWY8V29ya1F1
ZXVlPiBtX3NlcmlhbEJhY2tncm91bmRJT1F1ZXVlOwogICAgIG11dGFibGUgSGFzaFNldDxzdGQ6
OnVuaXF1ZV9wdHI8Y29uc3QgRXZlclJlcXVlc3RlZFF1ZXJ5Pj4gbV9hY3RpdmVRdWVyaWVzOwog
ICAgIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CiAgICAgSGFzaFNldDxTdHJp
bmc+IG1faGFzaGVzVG9BZGQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzOWZjOWVhMTFkYzY2NWM3ZTM5MTE5ZDI2Zjlm
ZDI0ZmM3OTY5NzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljc0NvY29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bVBvc2l4LmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xv
Z2dpbmdSZXN1bHRUeXBlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlVHJhY2tlci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2Fj
dGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
bmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBTdGF0aXN0aWNz
RGF0YWJhc2VOYW1lID0gIldlYktpdENhY2hlU3RhdGlzdGljcy5kYiI7Ci1zdGF0aWMgY29uc3Qg
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBtaW5pbnVtV3JpdGVJbnRlcnZhbCA9IHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMoMTAwMDApOwotCi1zdGF0aWMgYm9vbCBleGVjdXRlU1FMQ29tbWFu
ZChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgc3FsKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChXZWJDb3JlOjpT
UUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSAgICBB
U1NFUlQoZGF0YWJhc2UuaXNPcGVuKCkpOwotCi0gICAgYm9vbCByZXN1bHQgPSBkYXRhYmFzZS5l
eGVjdXRlQ29tbWFuZChzcWwpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBMT0dfRVJST1Io
Ik5ldHdvcmsgY2FjaGUgc3RhdGlzdGljczogZmFpbGVkIHRvIGV4ZWN1dGUgc3RhdGVtZW50IFwi
JXNcIiBlcnJvciBcIiVzXCIiLCBzcWwudXRmOCgpLmRhdGEoKSwgZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGJvb2wgZXhlY3V0ZVNR
TFN0YXRlbWVudChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCkKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgQVNTRVJUKHN0
YXRlbWVudC5kYXRhYmFzZSgpLmlzT3BlbigpKTsKLQotICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgp
ICE9IFdlYkNvcmU6OlNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJOZXR3b3Jr
IGNhY2hlIHN0YXRpc3RpY3M6IGZhaWxlZCB0byBleGVjdXRlIHN0YXRlbWVudCBcIiVzXCIgZXJy
b3IgXCIlc1wiIiwgc3RhdGVtZW50LnF1ZXJ5KCkudXRmOCgpLmRhdGEoKSwgc3RhdGVtZW50LmRh
dGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTdGF0aXN0aWNzPiBTdGF0
aXN0aWNzOjpvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKQotewotICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gV2ViQ29yZTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlUGF0aCwgU3RhdGlzdGljc0RhdGFiYXNlTmFtZSk7
Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTdGF0aXN0aWNzPihuZXcgU3RhdGlzdGljcyhk
YXRhYmFzZVBhdGgpKTsKLX0KLQotU3RhdGlzdGljczo6U3RhdGlzdGljcyhjb25zdCBTdHJpbmcm
IGRhdGFiYXNlUGF0aCkKLSAgICA6IG1fYmFja2dyb3VuZElPUXVldWUoYWRvcHREaXNwYXRjaChk
aXNwYXRjaF9xdWV1ZV9jcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuQ2FjaGUuU3RhdGlzdGljcy5C
YWNrZ3JvdW5kIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKSkpCi0gICAgLCBtX3dyaXRlVGltZXIo
KnRoaXMsICZTdGF0aXN0aWNzOjp3cml0ZVRpbWVyRmlyZWQpCi17Ci0gICAgZGlzcGF0Y2hfc2V0
X3RhcmdldF9xdWV1ZShtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpLCBkaXNwYXRjaF9nZXRfZ2xv
YmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0JBQ0tHUk9VTkQsIDApKTsKLQotICAg
IGluaXRpYWxpemUoZGF0YWJhc2VQYXRoKTsKLX0KLQotdm9pZCBTdGF0aXN0aWNzOjppbml0aWFs
aXplKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQotewotICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xv
Y2s6Om5vdygpOwotCi0gICAgU3RyaW5nQ2FwdHVyZSBkYXRhYmFzZVBhdGhDYXB0dXJlKGRhdGFi
YXNlUGF0aCk7Ci0gICAgU3RyaW5nQ2FwdHVyZSBuZXR3b3JrQ2FjaGVQYXRoQ2FwdHVyZShzaW5n
bGV0b24oKS5zdG9yYWdlUGF0aCgpKTsKLSAgICBkaXNwYXRjaF9hc3luYyhtX2JhY2tncm91bmRJ
T1F1ZXVlLmdldCgpLCBbdGhpcywgZGF0YWJhc2VQYXRoQ2FwdHVyZSwgbmV0d29ya0NhY2hlUGF0
aENhcHR1cmUsIHN0YXJ0VGltZV0gewotICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlv
bkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0KLSAgICAgICAgU3Ry
aW5nIGRhdGFiYXNlUGF0aCA9IGRhdGFiYXNlUGF0aENhcHR1cmUuc3RyaW5nKCk7Ci0gICAgICAg
IGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUo
ZGF0YWJhc2VQYXRoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgTE9HKE5ldHdv
cmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgT3BlbmluZyBuZXR3b3JrIGNhY2hlIHN0YXRpc3Rp
Y3MgZGF0YWJhc2UgYXQgJXMuLi4iLCBkYXRhYmFzZVBhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgIG1fZGF0YWJhc2Uub3BlbihkYXRhYmFzZVBhdGgpOwotICAgICAgICBtX2RhdGFiYXNlLmRp
c2FibGVUaHJlYWRpbmdDaGVja3MoKTsKLSAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIk5ldHdvcmsgY2FjaGUgc3RhdGlzdGljczogRmFp
bGVkIHRvIG9wZW4gLyBjcmVhdGUgdGhlIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFz
ZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhlY3V0ZVNR
TENvbW1hbmQobV9kYXRhYmFzZSwgQVNDSUlMaXRlcmFsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVY
SVNUUyBBbHJlYWR5UmVxdWVzdGVkIChoYXNoIFRFWFQgUFJJTUFSWSBLRVkpIikpOwotICAgICAg
ICBleGVjdXRlU1FMQ29tbWFuZChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIFVuY2FjaGVkUmVhc29uIChoYXNoIFRFWFQgUFJJTUFSWSBLRVksIHJl
YXNvbiBJTlRFR0VSKSIpKTsKLQotICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGNvdW50KCopIEZST00gQWxy
ZWFkeVJlcXVlc3RlZCIpKTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgp
ICE9IFdlYkNvcmU6OlNRTFJlc3VsdFJvdykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJOZXR3
b3JrIGNhY2hlIHN0YXRpc3RpY3M6IEZhaWxlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHJvd3Mg
aW4gQWxyZWFkeVJlcXVlc3RlZCB0YWJsZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDApOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgICAgICBhdXRvIGVsYXBzZWRNUyA9
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0
ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gc3RhcnRUaW1lKS5jb3VudCgpOwotI2Vu
ZGlmCi0gICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmsg
Y2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBsb2FkIGNvbXBsZXRlLCBlbnRyaWVzPSVsdSB0aW1l
PSVsbGRtcyIsIHN0YXRpY19jYXN0PHNpemVfdD4obV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpLCBl
bGFwc2VkTVMpOwotCi0gICAgICAgIGlmICghbV9hcHByb3hpbWF0ZUVudHJ5Q291bnQpIHsKLSAg
ICAgICAgICAgIGJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUobmV0d29ya0NhY2hlUGF0aENhcHR1
cmUuc3RyaW5nKCkpOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICAgICAgICAgIGVsYXBzZWRNUyA9
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0
ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC0gc3RhcnRUaW1lKS5jb3VudCgpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBOZXR3
b3JrIGNhY2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UgYm9vdHN0cmFwcGluZyBjb21wbGV0ZSwgZW50
cmllcz0lbHUgdGltZT0lbGxkbXMiLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYXBwcm94aW1hdGVF
bnRyeUNvdW50KSwgZWxhcHNlZE1TKTsKLSAgICAgICAgfQotICAgIH0pOwotfQotCi12b2lkIFN0
YXRpc3RpY3M6OmJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUoY29uc3QgU3RyaW5nJiBuZXR3b3Jr
Q2FjaGVQYXRoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgTE9H
KE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgQm9vdHN0cmFwcGluZyB0aGUgbmV0d29y
ayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNlIGZyb20gdGhlIG5ldHdvcmsgY2FjaGUuLi4iKTsK
LQotICAgIFZlY3RvcjxTdHJpbmdDYXB0dXJlPiBoYXNoZXM7Ci0gICAgdHJhdmVyc2VDYWNoZUZp
bGVzKG5ldHdvcmtDYWNoZVBhdGgsIFsmaGFzaGVzXShjb25zdCBTdHJpbmcmIGhhc2gsIGNvbnN0
IFN0cmluZyYpIHsKLSAgICAgICAgaGFzaGVzLmFwcGVuZChoYXNoKTsKLSAgICB9KTsKLQotICAg
IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc0F1dG9Db3VudGVyIHRyYW5zYWN0
aW9uQ291bnRlcjsKLSAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiB3cml0ZVRyYW5zYWN0
aW9uKG1fZGF0YWJhc2UpOwotICAgIHdyaXRlVHJhbnNhY3Rpb24uYmVnaW4oKTsKLQotICAgIGFk
ZEhhc2hlc1RvRGF0YWJhc2UoaGFzaGVzKTsKLQotICAgIHdyaXRlVHJhbnNhY3Rpb24uY29tbWl0
KCk7Ci19Ci0KLXZvaWQgU3RhdGlzdGljczo6c2hyaW5rSWZOZWVkZWQoKQotewotICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgY29uc3Qgc2l6ZV90IG1heEVudHJpZXMgPSAxMDAw
MDA7Ci0KLSAgICBpZiAobV9hcHByb3hpbWF0ZUVudHJ5Q291bnQgPCBtYXhFbnRyaWVzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBz
aHJpbmtpbmcgc3RhdGlzdGljcyBjYWNoZSBtX2FwcHJveGltYXRlRW50cnlDb3VudD0lbHUsIG1h
eEVudHJpZXM9JWx1Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRlRW50cnlDb3Vu
dCksIG1heEVudHJpZXMpOwotCi0gICAgY2xlYXIoKTsKLQotICAgIFN0cmluZ0NhcHR1cmUgbmV0
d29ya0NhY2hlUGF0aENhcHR1cmUoc2luZ2xldG9uKCkuc3RvcmFnZVBhdGgoKSk7Ci0gICAgZGlz
cGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKSwgW3RoaXMsIG5ldHdvcmtDYWNo
ZVBhdGhDYXB0dXJlXSB7Ci0gICAgICAgIGJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUobmV0d29y
a0NhY2hlUGF0aENhcHR1cmUuc3RyaW5nKCkpOwotICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAi
KE5ldHdvcmtQcm9jZXNzKSBzdGF0aXN0aWNzIGNhY2hlIHNocmluayBjb21wbGV0ZWQgbV9hcHBy
b3hpbWF0ZUVudHJ5Q291bnQ9JWx1Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FwcHJveGltYXRl
RW50cnlDb3VudCkpOwotICAgIH0pOwotfQotCi12b2lkIFN0YXRpc3RpY3M6OnJlY29yZFJldHJp
ZXZhbFJlcXVlc3QodWludDY0X3Qgd2ViUGFnZUlEKQotewotICAgIE5ldHdvcmtQcm9jZXNzOjpz
aW5nbGV0b24oKS5sb2dEaWFnbm9zdGljTWVzc2FnZSh3ZWJQYWdlSUQsIFdlYkNvcmU6OkRpYWdu
b3N0aWNMb2dnaW5nS2V5czo6bmV0d29ya0NhY2hlS2V5KCksIFdlYkNvcmU6OkRpYWdub3N0aWNM
b2dnaW5nS2V5czo6cmV0cmlldmFsUmVxdWVzdEtleSgpLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6
Olllcyk7Ci19Ci0KLXZvaWQgU3RhdGlzdGljczo6cmVjb3JkTm90Q2FjaGluZ1Jlc3BvbnNlKGNv
bnN0IEtleSYga2V5LCBTdG9yZURlY2lzaW9uIHN0b3JlRGVjaXNpb24pCi17Ci0gICAgQVNTRVJU
KHN0b3JlRGVjaXNpb24gIT0gU3RvcmVEZWNpc2lvbjo6WWVzKTsKLQotICAgIG1fc3RvcmVEZWNp
c2lvbnNUb0FkZC5zZXQoa2V5Lmhhc2hBc1N0cmluZygpLCBzdG9yZURlY2lzaW9uKTsKLSAgICBp
ZiAoIW1fd3JpdGVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3dyaXRlVGltZXIuc3RhcnRP
bmVTaG90KG1pbmludW1Xcml0ZUludGVydmFsKTsKLX0KLQotc3RhdGljIFN0cmluZyByZXRyaWV2
ZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KFJldHJpZXZlRGVjaXNpb24gcmV0cmlldmVEZWNpc2lv
bikKLXsKLSAgICBzd2l0Y2ggKHJldHJpZXZlRGVjaXNpb24pIHsKLSAgICBjYXNlIFJldHJpZXZl
RGVjaXNpb246Ok5vRHVlVG9IVFRQTWV0aG9kOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjp1bnN1cHBvcnRlZEhUVFBNZXRob2RLZXkoKTsKLSAgICBjYXNl
IFJldHJpZXZlRGVjaXNpb246Ok5vRHVlVG9Db25kaXRpb25hbFJlcXVlc3Q6Ci0gICAgICAgIHJl
dHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzQ29uZGl0aW9uYWxSZXF1ZXN0
S2V5KCk7Ci0gICAgY2FzZSBSZXRyaWV2ZURlY2lzaW9uOjpOb0R1ZVRvUmVsb2FkSWdub3JpbmdD
YWNoZToKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNS
ZWxvYWRJZ25vcmluZ0NhY2hlRGF0YUtleSgpOwotICAgIGNhc2UgUmV0cmlldmVEZWNpc2lvbjo6
WWVzOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotCi12b2lkIFN0YXRpc3RpY3M6OnJlY29y
ZE5vdFVzaW5nQ2FjaGVGb3JSZXF1ZXN0KHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29uc3QgS2V5JiBr
ZXksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmV0cmlldmVEZWNp
c2lvbiByZXRyaWV2ZURlY2lzaW9uKQotewotICAgIEFTU0VSVChyZXRyaWV2ZURlY2lzaW9uICE9
IFJldHJpZXZlRGVjaXNpb246Olllcyk7Ci0KLSAgICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNT
dHJpbmcoKTsKLSAgICBXZWJDb3JlOjpVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0g
ICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhhc2gsIE5lZWRVbmNhY2hlZFJlYXNvbjo6Tm8sIFt0
aGlzLCBoYXNoLCByZXF1ZXN0VVJMLCB3ZWJQYWdlSUQsIHJldHJpZXZlRGVjaXNpb25dKGJvb2wg
d2FzRXZlclJlcXVlc3RlZCwgY29uc3QgT3B0aW9uYWw8U3RvcmVEZWNpc2lvbj4mKSB7Ci0gICAg
ICAgIGlmICh3YXNFdmVyUmVxdWVzdGVkKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZGlhZ25vc3Rp
Y0tleSA9IHJldHJpZXZlRGVjaXNpb25Ub0RpYWdub3N0aWNLZXkocmV0cmlldmVEZWNpc2lvbik7
Ci0gICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSB3ZWJQYWdl
SUQgJWxsdTogJXMgd2FzIHByZXZpb3VzbHkgcmVxdWVzdGVkIGJ1dCB3ZSBhcmUgbm90IHVzaW5n
IHRoZSBjYWNoZSwgcmVhc29uOiAlcyIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSwgZGlhZ25vc3RpY0tleS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1
ZSh3ZWJQYWdlSUQsIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bmV0d29ya0NhY2hl
S2V5KCksIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dW51c2VkS2V5KCksIGRpYWdu
b3N0aWNLZXksIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6WWVzKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZSh3ZWJQYWdlSUQsIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6
bmV0d29ya0NhY2hlS2V5KCksIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVxdWVz
dEtleSgpLCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldmVyU2VlbkJlZm9yZUtl
eSgpLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Olllcyk7Ci0gICAgICAgICAgICBtYXJrQXNSZXF1
ZXN0ZWQoaGFzaCk7Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLQotc3RhdGljIFN0cmluZyBzdG9y
ZURlY2lzaW9uVG9EaWFnbm9zdGljS2V5KFN0b3JlRGVjaXNpb24gc3RvcmVEZWNpc2lvbikKLXsK
LSAgICBzd2l0Y2ggKHN0b3JlRGVjaXNpb24pIHsKLSAgICBjYXNlIFN0b3JlRGVjaXNpb246Ok5v
RHVlVG9Qcm90b2NvbDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5n
S2V5czo6bm90SFRUUEZhbWlseUtleSgpOwotICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9EdWVU
b0hUVFBNZXRob2Q6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnVuc3VwcG9ydGVkSFRUUE1ldGhvZEtleSgpOwotICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6
Tm9EdWVUb0F0dGFjaG1lbnRSZXNwb25zZToKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdu
b3N0aWNMb2dnaW5nS2V5czo6aXNBdHRhY2htZW50S2V5KCk7Ci0gICAgY2FzZSBTdG9yZURlY2lz
aW9uOjpOb0R1ZVRvTm9TdG9yZVJlc3BvbnNlOgotICAgIGNhc2UgU3RvcmVEZWNpc2lvbjo6Tm9E
dWVUb05vU3RvcmVSZXF1ZXN0OgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpjYWNoZUNvbnRyb2xOb1N0b3JlS2V5KCk7Ci0gICAgY2FzZSBTdG9yZURlY2lz
aW9uOjpOb0R1ZVRvSFRUUFN0YXR1c0NvZGU6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OnVuY2FjaGVhYmxlU3RhdHVzQ29kZUtleSgpOwotICAgIGNhc2Ug
U3RvcmVEZWNpc2lvbjo6WWVzOgotICAgICAgICAvLyBJdCB3YXMgc3RvcmVkIGJ1dCBjb3VsZCBu
b3QgYmUgcmV0cmlldmVkIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHBydW5lZCBmcm9tIHRoZSBjYWNo
ZS4KLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9Mb25n
ZXJJbkNhY2hlS2V5KCk7Ci0gICAgfQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBT
dGF0aXN0aWNzOjpyZWNvcmRSZXRyaWV2YWxGYWlsdXJlKHVpbnQ2NF90IHdlYlBhZ2VJRCwgY29u
c3QgS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsK
LSAgICBTdHJpbmcgaGFzaCA9IGtleS5oYXNoQXNTdHJpbmcoKTsKLSAgICBXZWJDb3JlOjpVUkwg
cmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgcXVlcnlXYXNFdmVyUmVxdWVzdGVkKGhh
c2gsIE5lZWRVbmNhY2hlZFJlYXNvbjo6WWVzLCBbdGhpcywgaGFzaCwgcmVxdWVzdFVSTCwgd2Vi
UGFnZUlEXShib29sIHdhc1ByZXZpb3VzbHlSZXF1ZXN0ZWQsIGNvbnN0IE9wdGlvbmFsPFN0b3Jl
RGVjaXNpb24+JiBzdG9yZURlY2lzaW9uKSB7Ci0gICAgICAgIGlmICh3YXNQcmV2aW91c2x5UmVx
dWVzdGVkKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZGlhZ25vc3RpY0tleSA9IHN0b3JlRGVjaXNp
b25Ub0RpYWdub3N0aWNLZXkoc3RvcmVEZWNpc2lvbi52YWx1ZSgpKTsKLSAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyB3YXMg
cHJldmlvdXNseSByZXF1ZXN0IGJ1dCBpcyBub3QgaW4gdGhlIGNhY2hlLCByZWFzb246ICVzIiwg
d2ViUGFnZUlELCByZXF1ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBkaWFnbm9zdGlj
S2V5LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRv
bigpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKHdlYlBhZ2VJRCwgV2ViQ29yZTo6RGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpuZXR3b3JrQ2FjaGVLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpub3RJbkNhY2hlS2V5KCksIGRpYWdub3N0aWNLZXksIFdlYkNvcmU6OlNo
b3VsZFNhbXBsZTo6WWVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE5ldHdvcmtQ
cm9jZXNzOjpzaW5nbGV0b24oKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh3ZWJQYWdl
SUQsIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6bmV0d29ya0NhY2hlS2V5KCksIFdl
YkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVxdWVzdEtleSgpLCBXZWJDb3JlOjpEaWFn
bm9zdGljTG9nZ2luZ0tleXM6Om5ldmVyU2VlbkJlZm9yZUtleSgpLCBXZWJDb3JlOjpTaG91bGRT
YW1wbGU6Olllcyk7Ci0gICAgICAgICAgICBtYXJrQXNSZXF1ZXN0ZWQoaGFzaCk7Ci0gICAgICAg
IH0KLSAgICB9KTsKLX0KLQotc3RhdGljIFN0cmluZyBjYWNoZWRFbnRyeVJldXNlRmFpbHVyZVRv
RGlhZ25vc3RpY0tleShVc2VEZWNpc2lvbiBkZWNpc2lvbikKLXsKLSAgICBzd2l0Y2ggKGRlY2lz
aW9uKSB7Ci0gICAgY2FzZSBVc2VEZWNpc2lvbjo6Tm9EdWVUb1ZhcnlpbmdIZWFkZXJNaXNtYXRj
aDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6dmFyeWlu
Z0hlYWRlck1pc21hdGNoS2V5KCk7Ci0gICAgY2FzZSBVc2VEZWNpc2lvbjo6Tm9EdWVUb01pc3Np
bmdWYWxpZGF0b3JGaWVsZHM6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpEaWFnbm9zdGljTG9n
Z2luZ0tleXM6Om1pc3NpbmdWYWxpZGF0b3JGaWVsZHNLZXkoKTsKLSAgICBjYXNlIFVzZURlY2lz
aW9uOjpOb0R1ZVRvRGVjb2RlRmFpbHVyZToKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRpYWdu
b3N0aWNMb2dnaW5nS2V5czo6b3RoZXJLZXkoKTsKLSAgICBjYXNlIFVzZURlY2lzaW9uOjpVc2U6
Ci0gICAgY2FzZSBVc2VEZWNpc2lvbjo6VmFsaWRhdGU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci19Ci0KLXZvaWQgU3RhdGlzdGljczo6cmVjb3JkUmV0cmlldmVkQ2FjaGVkRW50cnkodWludDY0
X3Qgd2ViUGFnZUlELCBjb25zdCBLZXkmIGtleSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBVc2VEZWNpc2lvbiBkZWNpc2lvbikKLXsKLSAgICBXZWJDb3JlOjpVUkwg
cmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgaWYgKGRlY2lzaW9uID09IFVzZURlY2lz
aW9uOjpVc2UgfHwgZGVjaXNpb24gPT0gVXNlRGVjaXNpb246OlZhbGlkYXRlKSB7Ci0gICAgICAg
IExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHdlYlBhZ2VJRCAlbGx1OiAlcyBp
cyBpbiB0aGUgY2FjaGUgYW5kIGlzIHVzZWQiLCB3ZWJQYWdlSUQsIHJlcXVlc3RVUkwuc3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCku
bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoUmVzdWx0KHdlYlBhZ2VJRCwgV2ViQ29yZTo6RGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpuZXR3b3JrQ2FjaGVLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpyZXRyaWV2YWxLZXkoKSwgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdSZXN1
bHRQYXNzLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Olllcyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBTdHJpbmcgZGlhZ25vc3RpY0tleSA9IGNhY2hlZEVudHJ5UmV1c2VGYWlsdXJl
VG9EaWFnbm9zdGljS2V5KGRlY2lzaW9uKTsKLSAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdv
cmtQcm9jZXNzKSB3ZWJQYWdlSUQgJWxsdTogJXMgaXMgaW4gdGhlIGNhY2hlIGJ1dCB3YXNuJ3Qg
dXNlZCwgcmVhc29uOiAlcyIsIHdlYlBhZ2VJRCwgcmVxdWVzdFVSTC5zdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSwgZGlhZ25vc3RpY0tleS51dGY4KCkuZGF0YSgpKTsKLSAgICBOZXR3b3JrUHJvY2Vz
czo6c2luZ2xldG9uKCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUod2ViUGFnZUlELCBX
ZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5ldHdvcmtDYWNoZUtleSgpLCBXZWJDb3Jl
OjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVudXNhYmxlQ2FjaGVkRW50cnlLZXkoKSwgZGlhZ25v
c3RpY0tleSwgV2ViQ29yZTo6U2hvdWxkU2FtcGxlOjpZZXMpOwotfQotCi12b2lkIFN0YXRpc3Rp
Y3M6Om1hcmtBc1JlcXVlc3RlZChjb25zdCBTdHJpbmcmIGhhc2gpCi17Ci0gICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1faGFzaGVzVG9BZGQuYWRkKGhhc2gpOwotICAgIGlm
ICghbV93cml0ZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fd3JpdGVUaW1lci5zdGFydE9u
ZVNob3QobWluaW51bVdyaXRlSW50ZXJ2YWwpOwotfQotCi12b2lkIFN0YXRpc3RpY3M6OndyaXRl
VGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFZl
Y3RvcjxTdHJpbmdDYXB0dXJlPiBoYXNoZXNUb0FkZDsKLSAgICBjb3B5VG9WZWN0b3IobV9oYXNo
ZXNUb0FkZCwgaGFzaGVzVG9BZGQpOwotICAgIG1faGFzaGVzVG9BZGQuY2xlYXIoKTsKLQotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nQ2FwdHVyZSwgU3RvcmVEZWNpc2lvbj4+IHN0b3JlRGVj
aXNpb25zVG9BZGQ7Ci0gICAgY29weVRvVmVjdG9yKG1fc3RvcmVEZWNpc2lvbnNUb0FkZCwgc3Rv
cmVEZWNpc2lvbnNUb0FkZCk7Ci0gICAgbV9zdG9yZURlY2lzaW9uc1RvQWRkLmNsZWFyKCk7Ci0K
LSAgICBzaHJpbmtJZk5lZWRlZCgpOwotCi0gICAgZGlzcGF0Y2hfYXN5bmMobV9iYWNrZ3JvdW5k
SU9RdWV1ZS5nZXQoKSwgW3RoaXMsIGhhc2hlc1RvQWRkLCBzdG9yZURlY2lzaW9uc1RvQWRkXSB7
Ci0gICAgICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRl
ciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAgIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9u
IHdyaXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Ci0gICAgICAgIHdyaXRlVHJhbnNhY3Rpb24u
YmVnaW4oKTsKLQotICAgICAgICBhZGRIYXNoZXNUb0RhdGFiYXNlKGhhc2hlc1RvQWRkKTsKLSAg
ICAgICAgYWRkU3RvcmVEZWNpc2lvbnNUb0RhdGFiYXNlKHN0b3JlRGVjaXNpb25zVG9BZGQpOwot
Ci0gICAgICAgIHdyaXRlVHJhbnNhY3Rpb24uY29tbWl0KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
U3RhdGlzdGljczo6cXVlcnlXYXNFdmVyUmVxdWVzdGVkKGNvbnN0IFN0cmluZyYgaGFzaCwgTmVl
ZFVuY2FjaGVkUmVhc29uIG5lZWRVbmNhY2hlZFJlYXNvbiwgY29uc3QgUmVxdWVzdGVkQ29tcGxl
dGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICAvLyBRdWVyeSBwZW5kaW5nIHdyaXRlcyBmaXJzdC4KLSAgICBib29s
IHdhc0FscmVhZHlSZXF1ZXN0ZWQgPSBtX2hhc2hlc1RvQWRkLmNvbnRhaW5zKGhhc2gpOwotICAg
IGlmICh3YXNBbHJlYWR5UmVxdWVzdGVkICYmIG5lZWRVbmNhY2hlZFJlYXNvbiA9PSBOZWVkVW5j
YWNoZWRSZWFzb246Ok5vKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUsIE51bGxv
cHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChuZWVkVW5jYWNoZWRSZWFzb24g
PT0gTmVlZFVuY2FjaGVkUmVhc29uOjpZZXMgJiYgbV9zdG9yZURlY2lzaW9uc1RvQWRkLmNvbnRh
aW5zKGhhc2gpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUsIG1fc3RvcmVEZWNp
c2lvbnNUb0FkZC5nZXQoaGFzaCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
UXVlcnkgdGhlIGRhdGFiYXNlLgotICAgIGF1dG8gZXZlclJlcXVlc3RlZFF1ZXJ5ID0gc3RkOjpt
YWtlX3VuaXF1ZTxFdmVyUmVxdWVzdGVkUXVlcnk+KEV2ZXJSZXF1ZXN0ZWRRdWVyeSB7IGhhc2gs
IG5lZWRVbmNhY2hlZFJlYXNvbiA9PSBOZWVkVW5jYWNoZWRSZWFzb246OlllcywgY29tcGxldGlv
bkhhbmRsZXIgfSk7Ci0gICAgYXV0byYgcXVlcnkgPSAqZXZlclJlcXVlc3RlZFF1ZXJ5OwotICAg
IG1fYWN0aXZlUXVlcmllcy5hZGQoV1RGOjptb3ZlKGV2ZXJSZXF1ZXN0ZWRRdWVyeSkpOwotICAg
IGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3VuZElPUXVldWUuZ2V0KCksIFt0aGlzLCB3YXNBbHJl
YWR5UmVxdWVzdGVkLCAmcXVlcnldICgpIG11dGFibGUgewotICAgICAgICBXZWJDb3JlOjpTUUxp
dGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRvQ291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0g
ICAgICAgIE9wdGlvbmFsPFN0b3JlRGVjaXNpb24+IHN0b3JlRGVjaXNpb247Ci0gICAgICAgIGlm
IChtX2RhdGFiYXNlLmlzT3BlbigpKSB7Ci0gICAgICAgICAgICBpZiAoIXdhc0FscmVhZHlSZXF1
ZXN0ZWQpIHsKLSAgICAgICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGhhc2ggRlJPTSBBbHJlYWR5UmVx
dWVzdGVkIFdIRVJFIGhhc2g9PyIpKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRPaykgewotICAgICAgICAgICAgICAgICAgICBz
dGF0ZW1lbnQuYmluZFRleHQoMSwgcXVlcnkuaGFzaCk7Ci0gICAgICAgICAgICAgICAgICAgIHdh
c0FscmVhZHlSZXF1ZXN0ZWQgPSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBXZWJDb3JlOjpTUUxSZXN1
bHRSb3cpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICh3YXNBbHJlYWR5UmVxdWVzdGVkICYmIHF1ZXJ5Lm5lZWRVbmNhY2hlZFJlYXNvbikgewotICAg
ICAgICAgICAgICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgcmVhc29uIEZST00gVW5jYWNoZWRSZWFzb24gV0hFUkUg
aGFzaD0/IikpOwotICAgICAgICAgICAgICAgIHN0b3JlRGVjaXNpb24gPSBTdG9yZURlY2lzaW9u
OjpZZXM7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gV2ViQ29y
ZTo6U1FMUmVzdWx0T2spIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0
KDEsIHF1ZXJ5Lmhhc2gpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAo
KSA9PSBXZWJDb3JlOjpTUUxSZXN1bHRSb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9y
ZURlY2lzaW9uID0gc3RhdGljX2Nhc3Q8U3RvcmVEZWNpc2lvbj4oc3RhdGVtZW50LmdldENvbHVt
bkludCgwKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFt0aGlzLCAm
cXVlcnksIHdhc0FscmVhZHlSZXF1ZXN0ZWQsIHN0b3JlRGVjaXNpb25dIHsKLSAgICAgICAgICAg
IHF1ZXJ5LmNvbXBsZXRpb25IYW5kbGVyKHdhc0FscmVhZHlSZXF1ZXN0ZWQsIHN0b3JlRGVjaXNp
b24pOwotICAgICAgICAgICAgbV9hY3RpdmVRdWVyaWVzLnJlbW92ZSgmcXVlcnkpOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBTdGF0aXN0aWNzOjpjbGVhcigpCi17Ci0gICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGRpc3BhdGNoX2FzeW5jKG1fYmFja2dyb3Vu
ZElPUXVldWUuZ2V0KCksIFt0aGlzXSB7Ci0gICAgICAgIGlmIChtX2RhdGFiYXNlLmlzT3Blbigp
KSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NBdXRv
Q291bnRlciB0cmFuc2FjdGlvbkNvdW50ZXI7Ci0gICAgICAgICAgICBXZWJDb3JlOjpTUUxpdGVU
cmFuc2FjdGlvbiBkZWxldGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKLSAgICAgICAgICAgIGRl
bGV0ZVRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0gICAgICAgICAgICBleGVjdXRlU1FMQ29tbWFuZCht
X2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIEFscmVhZHlSZXF1ZXN0ZWQiKSk7
Ci0gICAgICAgICAgICBleGVjdXRlU1FMQ29tbWFuZChtX2RhdGFiYXNlLCBBU0NJSUxpdGVyYWwo
IkRFTEVURSBGUk9NIFVuY2FjaGVkUmVhc29uIikpOwotICAgICAgICAgICAgZGVsZXRlVHJhbnNh
Y3Rpb24uY29tbWl0KCk7Ci0gICAgICAgICAgICBtX2FwcHJveGltYXRlRW50cnlDb3VudCA9IDA7
Ci0gICAgICAgIH0KLSAgICB9KTsKLX0KLQotdm9pZCBTdGF0aXN0aWNzOjphZGRIYXNoZXNUb0Rh
dGFiYXNlKGNvbnN0IFZlY3RvcjxTdHJpbmdDYXB0dXJlPiYgaGFzaGVzKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKLSAgICBBU1NFUlQobV9kYXRh
YmFzZS5pc09wZW4oKSk7Ci0KLSAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIEFscmVhZHlS
ZXF1ZXN0ZWQgKGhhc2gpIFZBTFVFUyAoPykiKSk7Ci0gICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gV2ViQ29yZTo6U1FMUmVzdWx0T2spCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAo
YXV0byYgaGFzaCA6IGhhc2hlcykgewotICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgaGFz
aC5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChleGVjdXRlU1FMU3RhdGVtZW50KHN0YXRlbWVudCkp
Ci0gICAgICAgICAgICArK21fYXBwcm94aW1hdGVFbnRyeUNvdW50OwotICAgICAgICBzdGF0ZW1l
bnQucmVzZXQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RhdGlzdGljczo6YWRkU3RvcmVEZWNpc2lv
bnNUb0RhdGFiYXNlKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nQ2FwdHVyZSwgU3RvcmVE
ZWNpc2lvbj4+JiBzdG9yZURlY2lzaW9ucykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBBU1NFUlQoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFu
c2FjdGlvbkluUHJvZ3Jlc3MoKSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwot
Ci0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBBU0NJ
SUxpdGVyYWwoIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gVW5jYWNoZWRSZWFzb24gKGhhc2gsIHJl
YXNvbikgVkFMVUVTICg/LCA/KSIpKTsKLSAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBX
ZWJDb3JlOjpTUUxSZXN1bHRPaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiBw
YWlyIDogc3RvcmVEZWNpc2lvbnMpIHsKLSAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHBh
aXIuZmlyc3Quc3RyaW5nKCkpOwotICAgICAgICBzdGF0ZW1lbnQuYmluZEludCgyLCBzdGF0aWNf
Y2FzdDxpbnQ+KHBhaXIuc2Vjb25kKSk7Ci0gICAgICAgIGV4ZWN1dGVTUUxTdGF0ZW1lbnQoc3Rh
dGVtZW50KTsKLSAgICAgICAgc3RhdGVtZW50LnJlc2V0KCk7Ci0gICAgfQotfQotCi19Ci19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQUNIRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3YjE2MDM3OTM4NGVhZDA4YWJj
YTFhNWRkMTM5NmViYTcxOGEzMTRjLi43MGQ0NmM3ZjVjNDA3ZjQ1MzFmZmMxZTdjODZiMzY1YTQy
NDIyMTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMTc2LDcgKzExNzYsNiBAQAogCQk3RUM0RjBGQjE4RTRBQ0JCMDA4MDU2
QUYgLyogTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tICovOyB9OwogCQk4MzRCMjUwRjFBODMxQThEMDBDRkIxNTAgLyogTmV0d29y
a0NhY2hlRmlsZVN5c3RlbVBvc2l4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4MzRCMjUwRTFBODMxQThEMDBDRkIxNTAgLyogTmV0d29ya0NhY2hlRmls
ZVN5c3RlbVBvc2l4LmggKi87IH07CiAJCTgzNEIyNTEyMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5oICovOyB9OwotCQk4MzRCMjUxMzFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hl
U3RhdGlzdGljc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODM0QjI1MTExQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3NDb2NvYS5tbSAqLzsgfTsKIAkJODM3MkRCMjUxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFnZURp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4MzcyREIyNDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk4MzcyREIyODFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQuY3BwICovOyB9OwogCQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFn
ZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CkBAIC0xMTg1LDYgKzExODQsNyBAQAogCQk4Mzg5
MUI2OTFBNjhCRUJDMDAzMEYzODYgLyogX1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM4OTFCNjgxQTY4
QkVCQzAwMzBGMzg2IC8qIF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Mzg5MUI2QzFBNjhDMzBC
MDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzODkxQjZBMUE2OEMzMEIwMDMwRjM4NiAvKiBE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyB9OwogCQk4Mzg5MUI2RDFBNjhDMzBCMDAzMEYz
ODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Mzg5MUI2QjFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQubW0gKi87IH07CisJCTgzQkRDQ0I5MUFDNUZEQjYwMDNGNjQ0MSAv
KiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzQkRDQ0I4MUFDNUZEQjYwMDNGNjQ0MSAvKiBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzLmNwcCAqLzsgfTsKIAkJODQ0Nzc4NTMxNzZGQ0MwODAwQ0RDN0JCIC8qIElu
amVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQ0Nzc4NTExNzZGQ0FDMTAwQ0RDN0JCIC8qIElu
amVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZS5oICovOyB9OwogCQk4NjgxNjBEMDE4
NzY0NTU3MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODE2MENGMTg3NjQ1MzcwMDIxRTc5
RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tICovOyB9OwogCQk4NkU2N0EyNTE5MTBCOUQx
MDAwMDRBQjcgLyogUHJvY2Vzc1Rocm90dGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFNjdBMjExOTBGNDExODAwMDA0QUI3IC8qIFByb2Nlc3NU
aHJvdHRsZXIuaCAqLzsgfTsKQEAgLTMzODMsNyArMzM4Myw2IEBACiAJCTdFQzRGMEY5MThFNEE5
NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDb2NvYS5tbTsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTgzNEIyNTBFMUE4MzFBOEQwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVGaWxl
U3lzdGVtUG9zaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0Nh
Y2hlRmlsZVN5c3RlbVBvc2l4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNEIy
NTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODM0QjI1MTExQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdv
cmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFnZURpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUGFn
ZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3
MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzOTIsNiArMzM5MSw3
IEBACiAJCTgzODkxQjY4MUE2OEJFQkMwMDMwRjM4NiAvKiBfV0tEaWFnbm9zdGljTG9nZ2luZ0Rl
bGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0RpYWdub3N0aWNM
b2dnaW5nRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFCNkEx
QTY4QzMwQjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjZCMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4M0JEQ0NCODFBQzVGREI2MDAzRjY0NDEgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ0Nzc4NTExNzZGQ0FD
MTAwQ0RDN0JCIC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHRN
ZWRpYVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4MTYwQ0QxODc2M0Q0
QjAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lu
ZG93U2VydmVyQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Njgx
NjBDRjE4NzY0NTM3MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC03NDgxLDggKzc0ODEsOCBAQAogCQkJCUU0MkUwNjBEMUFBNzUwRTUw
MEIxMTY5OSAvKiBOZXR3b3JrQ2FjaGVJT0NoYW5uZWxDb2NvYS5tbSAqLywKIAkJCQlFNDQzNkVD
MDFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCAqLywKIAkJCQlFNDQzNkVD
MTFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmggKi8sCisJCQkJODNCRENDQjgx
QUM1RkRCNjAwM0Y2NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwICovLAogCQkJCTgz
NEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggKi8sCi0J
CQkJODM0QjI1MTExQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3NDb2Nv
YS5tbSAqLywKIAkJCQlFNDQzNkVDMzFBMENGREIyMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3Rv
cmFnZS5jcHAgKi8sCiAJCQkJRTQ0MzZFQzIxQTBDRkRCMjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNo
ZVN0b3JhZ2UuaCAqLywKIAkJCSk7CkBAIC05NzA4LDYgKzk3MDgsNyBAQAogCQkJCTUxMkUzNTJF
MTMwQjU1QUYwMEFCRDE5QSAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTJFMzU2QTEzMEI1N0YwMDBBQkQxOUEgLyogV2ViQXBwbGljYXRpb25D
YWNoZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyRTM1
MjQxMzBCNTUwNjAwQUJEMTlBIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJODNCRENDQjkxQUM1RkRCNjAwM0Y2NDQxIC8qIE5ldHdvcmtD
YWNoZVN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyRTM1RjgxMzBCNjQyRTAw
QUJEMTlBIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3MkJBMUQxMUU2NDkwNzAwMUVCNEVBIC8qIFdlYkJh
Y2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MThEMkNBRDEyRDUxNTNCMDAz
QkI5M0IgLyogV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEw
MDE1LDcgKzEwMDE2LDYgQEAKIAkJCQkxQzhFMjkzQTEyNzYxRTVCMDBCQzdCRDAgLyogV0tJbnNw
ZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQzcyNUMxOTZGNjA1MjAwQUVERDBDIC8q
IFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1NDI5M0E1
MTk1QTQzREQwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXpl
ci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTgzNEIyNTEzMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUE5RTEwQTEz
MTVDRDE4MDA5RTcwMzEgLyogV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTMzRDNBM0I1MTMzOTYwMEIwMDcwOUJFNCAvKiBXS01lZGlhQ2FjaGVNYW5hZ2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NUZEMTI0RkYwMjcwMDY4RjIwQSAvKiBXS011
dGFibGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>