<?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>225108</bug_id>
          
          <creation_ts>2021-04-27 09:04:41 -0700</creation_ts>
          <short_desc>Copy-on-write semantics should be an internal implementation detail of StorageMap</short_desc>
          <delta_ts>2021-04-27 13:56:22 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225065</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>ggaren</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1754627</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 09:04:41 -0700</bug_when>
    <thetext>Copy-on-write semantics should be an internal implementation details of StorageMap, instead of requiring the client to replace its storageMap explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754646</commentid>
    <comment_count>1</comment_count>
      <attachid>427157</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 09:39:25 -0700</bug_when>
    <thetext>Created attachment 427157
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754731</commentid>
    <comment_count>2</comment_count>
      <attachid>427157</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-04-27 11:58:52 -0700</bug_when>
    <thetext>Comment on attachment 427157
Patch

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

&gt; Source/WebKit/ChangeLog:17
&gt; +        Instead of making the StorageMap RefCounted and requiring the client to potentially
&gt; +        replace its StorageMap whenever it calls functions that modify the StorageMap, the
&gt; +        copy-on-write semantics in now an internal implementation detail of StorageMap.
&gt; +
&gt; +        To achieve this, the following changes were made:
&gt; +        - StorageMap is no longer RefCounted. Instead, it has an internal Impl data member 
&gt; +          that is RefCounted.
&gt; +        - The internal Impl data member is the one that gets copied on write.
&gt; +        - Functions that modify the StorageMap no longer need to return a StorageMap.
&gt; +        - Add a clear() function for convenience.

These seem to belong to WebCore/ChangeLog

&gt; Source/WebKitLegacy/ChangeLog:17
&gt; +        Instead of making the StorageMap RefCounted and requiring the client to potentially
&gt; +        replace its StorageMap whenever it calls functions that modify the StorageMap, the
&gt; +        copy-on-write semantics in now an internal implementation detail of StorageMap.
&gt; +
&gt; +        To achieve this, the following changes were made:
&gt; +        - StorageMap is no longer RefCounted. Instead, it has an internal Impl data member 
&gt; +          that is RefCounted.
&gt; +        - The internal Impl data member is the one that gets copied on write.
&gt; +        - Functions that modify the StorageMap no longer need to return a StorageMap.
&gt; +        - Add a clear() function for convenience.

Ditto

&gt; Source/WebCore/storage/StorageMap.h:57
&gt; +    bool isShared() const { return !m_impl-&gt;hasOneRef(); }

(Maybe a silly question) Is this possible to return true with current implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754732</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 12:02:17 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #2)
&gt; Comment on attachment 427157 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427157&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:17
&gt; &gt; +        Instead of making the StorageMap RefCounted and requiring the client to potentially
&gt; &gt; +        replace its StorageMap whenever it calls functions that modify the StorageMap, the
&gt; &gt; +        copy-on-write semantics in now an internal implementation detail of StorageMap.
&gt; &gt; +
&gt; &gt; +        To achieve this, the following changes were made:
&gt; &gt; +        - StorageMap is no longer RefCounted. Instead, it has an internal Impl data member 
&gt; &gt; +          that is RefCounted.
&gt; &gt; +        - The internal Impl data member is the one that gets copied on write.
&gt; &gt; +        - Functions that modify the StorageMap no longer need to return a StorageMap.
&gt; &gt; +        - Add a clear() function for convenience.
&gt; 
&gt; These seem to belong to WebCore/ChangeLog
&gt; 
&gt; &gt; Source/WebKitLegacy/ChangeLog:17
&gt; &gt; +        Instead of making the StorageMap RefCounted and requiring the client to potentially
&gt; &gt; +        replace its StorageMap whenever it calls functions that modify the StorageMap, the
&gt; &gt; +        copy-on-write semantics in now an internal implementation detail of StorageMap.
&gt; &gt; +
&gt; &gt; +        To achieve this, the following changes were made:
&gt; &gt; +        - StorageMap is no longer RefCounted. Instead, it has an internal Impl data member 
&gt; &gt; +          that is RefCounted.
&gt; &gt; +        - The internal Impl data member is the one that gets copied on write.
&gt; &gt; +        - Functions that modify the StorageMap no longer need to return a StorageMap.
&gt; &gt; +        - Add a clear() function for convenience.
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; Source/WebCore/storage/StorageMap.h:57
&gt; &gt; +    bool isShared() const { return !m_impl-&gt;hasOneRef(); }
&gt; 
&gt; (Maybe a silly question) Is this possible to return true with current
&gt; implementation?

Sure. See SessionStorageNamespace::cloneTo() and StorageArea::clone(). There are cases where we clone the session data (window.open() &amp; link with target=_blank iirc). In such cases, we initially share the same HashMap to save memory. If one of the 2 pages start modifying the HashMap though, we copy-on-write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754742</commentid>
    <comment_count>4</comment_count>
      <attachid>427182</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 12:28:29 -0700</bug_when>
    <thetext>Created attachment 427182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754774</commentid>
    <comment_count>5</comment_count>
      <attachid>427182</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 13:55:11 -0700</bug_when>
    <thetext>Comment on attachment 427182
Patch

Clearing flags on attachment: 427182

Committed r276659 (237086@main): &lt;https://commits.webkit.org/237086@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754775</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-27 13:55:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1754776</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-27 13:56:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/77228667&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427157</attachid>
            <date>2021-04-27 09:39:25 -0700</date>
            <delta_ts>2021-04-27 12:28:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225108-20210427093924.patch</filename>
            <type>text/plain</type>
            <size>30655</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMyYzhiMTJjZjIxN2Iy
NzhlMWE4YmFmYmRkYmNjYjZmMmE3N2M2Ny4uNTY5OWViZjMzMWNjMTMwNmEwYWY4Yjg1ZTQyZDAx
MDFhODIzZTgxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIxLTA0LTI3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ29weS1vbi13cml0ZSBzZW1h
bnRpY3Mgc2hvdWxkIGJlIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBTdG9y
YWdlTWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjUxMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bnN0ZWFkIG9mIG1ha2luZyB0aGUgU3RvcmFnZU1hcCBSZWZDb3VudGVkIGFuZCByZXF1aXJpbmcg
dGhlIGNsaWVudCB0byBwb3RlbnRpYWxseQorICAgICAgICByZXBsYWNlIGl0cyBTdG9yYWdlTWFw
IHdoZW5ldmVyIGl0IGNhbGxzIGZ1bmN0aW9ucyB0aGF0IG1vZGlmeSB0aGUgU3RvcmFnZU1hcCwg
dGhlCisgICAgICAgIGNvcHktb24td3JpdGUgc2VtYW50aWNzIGluIG5vdyBhbiBpbnRlcm5hbCBp
bXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgU3RvcmFnZU1hcC4KKworICAgICAgICBUbyBhY2hpZXZl
IHRoaXMsIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB3ZXJlIG1hZGU6CisgICAgICAgIC0gU3RvcmFn
ZU1hcCBpcyBubyBsb25nZXIgUmVmQ291bnRlZC4gSW5zdGVhZCwgaXQgaGFzIGFuIGludGVybmFs
IEltcGwgZGF0YSBtZW1iZXIKKyAgICAgICAgICB0aGF0IGlzIFJlZkNvdW50ZWQuCisgICAgICAg
IC0gVGhlIGludGVybmFsIEltcGwgZGF0YSBtZW1iZXIgaXMgdGhlIG9uZSB0aGF0IGdldHMgY29w
aWVkIG9uIHdyaXRlLgorICAgICAgICAtIEZ1bmN0aW9ucyB0aGF0IG1vZGlmeSB0aGUgU3RvcmFn
ZU1hcCBubyBsb25nZXIgbmVlZCB0byByZXR1cm4gYSBTdG9yYWdlTWFwLgorICAgICAgICAtIEFk
ZCBhIGNsZWFyKCkgZnVuY3Rpb24gZm9yIGNvbnZlbmllbmNlLgorCisgICAgICAgICogc3RvcmFn
ZS9TdG9yYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OlN0b3JhZ2VN
YXApOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6aW52YWxpZGF0ZUl0ZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnNldEl0ZXJhdG9yVG9JbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlTWFwOjpsZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZU1hcDo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmdldEl0
ZW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6c2V0SXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlTWFwOjpzZXRJdGVtSWdub3JpbmdRdW90YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlTWFwOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VNYXA6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmNvbnRhaW5z
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OmltcG9ydEl0ZW1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OkltcGw6OmNvcHkgY29uc3QpOgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6aXRl
bXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6SW1wbDo6Y3JlYXRlKToK
KwogMjAyMS0wNC0yNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBDb3JyZWN0bHkgc3BlY2lmeSBpbnRlcnBvbGF0aW9uIG9mIHBhZ2UtYnJlYWstKiBwcm9w
ZXJ0aWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IDkzMDVhZDZiZDEyMDIwODU1YzY0OTU1MzA5N2JlNzg0M2M2ODVh
ZDcuLjY0NWEwMmVmYWQ4MmEyM2E0ODdhNjJlZTExMmViY2M0MjdlOGZjMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMjEtMDQtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KKworICAgICAgICBDb3B5LW9uLXdyaXRlIHNlbWFudGljcyBzaG91bGQgYmUgYW4gaW50ZXJu
YWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIFN0b3JhZ2VNYXAKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTEwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc3RlYWQgb2YgbWFraW5nIHRoZSBTdG9y
YWdlTWFwIFJlZkNvdW50ZWQgYW5kIHJlcXVpcmluZyB0aGUgY2xpZW50IHRvIHBvdGVudGlhbGx5
CisgICAgICAgIHJlcGxhY2UgaXRzIFN0b3JhZ2VNYXAgd2hlbmV2ZXIgaXQgY2FsbHMgZnVuY3Rp
b25zIHRoYXQgbW9kaWZ5IHRoZSBTdG9yYWdlTWFwLCB0aGUKKyAgICAgICAgY29weS1vbi13cml0
ZSBzZW1hbnRpY3MgaW4gbm93IGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBT
dG9yYWdlTWFwLgorCisgICAgICAgIFRvIGFjaGlldmUgdGhpcywgdGhlIGZvbGxvd2luZyBjaGFu
Z2VzIHdlcmUgbWFkZToKKyAgICAgICAgLSBTdG9yYWdlTWFwIGlzIG5vIGxvbmdlciBSZWZDb3Vu
dGVkLiBJbnN0ZWFkLCBpdCBoYXMgYW4gaW50ZXJuYWwgSW1wbCBkYXRhIG1lbWJlciAKKyAgICAg
ICAgICB0aGF0IGlzIFJlZkNvdW50ZWQuCisgICAgICAgIC0gVGhlIGludGVybmFsIEltcGwgZGF0
YSBtZW1iZXIgaXMgdGhlIG9uZSB0aGF0IGdldHMgY29waWVkIG9uIHdyaXRlLgorICAgICAgICAt
IEZ1bmN0aW9ucyB0aGF0IG1vZGlmeSB0aGUgU3RvcmFnZU1hcCBubyBsb25nZXIgbmVlZCB0byBy
ZXR1cm4gYSBTdG9yYWdlTWFwLgorICAgICAgICAtIEFkZCBhIGNsZWFyKCkgZnVuY3Rpb24gZm9y
IGNvbnZlbmllbmNlLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9y
YWdlQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYSk6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJl
YTo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6aXRlbXMgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6b3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJ
Zk5lZWRlZCBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9y
YWdlQXJlYS5oOgorCiAyMDIxLTA0LTI3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbRmxhdHBhayBTREtdIERpcmVjdCBBVklGIGxvYWRpbmcgZG9l
cyBub3Qgd29yay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggYzgyMWYxNjE0NzY4NzQ2MzYyMWQw
MTZlMmQzNWRhNjlmZWQ0ZTg5Yy4uM2ZlMzZhYjQ2MTc3MTY3MGU5NDA5OWZkNWIyNWRmZDg1Yjg3
NzJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAyMS0wNC0yNyAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENvcHktb24td3JpdGUg
c2VtYW50aWNzIHNob3VsZCBiZSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2Yg
U3RvcmFnZU1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI1MTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW5zdGVhZCBvZiBtYWtpbmcgdGhlIFN0b3JhZ2VNYXAgUmVmQ291bnRlZCBhbmQgcmVxdWly
aW5nIHRoZSBjbGllbnQgdG8gcG90ZW50aWFsbHkKKyAgICAgICAgcmVwbGFjZSBpdHMgU3RvcmFn
ZU1hcCB3aGVuZXZlciBpdCBjYWxscyBmdW5jdGlvbnMgdGhhdCBtb2RpZnkgdGhlIFN0b3JhZ2VN
YXAsIHRoZQorICAgICAgICBjb3B5LW9uLXdyaXRlIHNlbWFudGljcyBpbiBub3cgYW4gaW50ZXJu
YWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIFN0b3JhZ2VNYXAuCisKKyAgICAgICAgVG8gYWNo
aWV2ZSB0aGlzLCB0aGUgZm9sbG93aW5nIGNoYW5nZXMgd2VyZSBtYWRlOgorICAgICAgICAtIFN0
b3JhZ2VNYXAgaXMgbm8gbG9uZ2VyIFJlZkNvdW50ZWQuIEluc3RlYWQsIGl0IGhhcyBhbiBpbnRl
cm5hbCBJbXBsIGRhdGEgbWVtYmVyIAorICAgICAgICAgIHRoYXQgaXMgUmVmQ291bnRlZC4KKyAg
ICAgICAgLSBUaGUgaW50ZXJuYWwgSW1wbCBkYXRhIG1lbWJlciBpcyB0aGUgb25lIHRoYXQgZ2V0
cyBjb3BpZWQgb24gd3JpdGUuCisgICAgICAgIC0gRnVuY3Rpb25zIHRoYXQgbW9kaWZ5IHRoZSBT
dG9yYWdlTWFwIG5vIGxvbmdlciBuZWVkIHRvIHJldHVybiBhIFN0b3JhZ2VNYXAuCisgICAgICAg
IC0gQWRkIGEgY2xlYXIoKSBmdW5jdGlvbiBmb3IgY29udmVuaWVuY2UuCisKKyAgICAgICAgKiBT
dG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
SW1wbDo6U3RvcmFnZUFyZWFJbXBsKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFJbXBs
OjpsZW5ndGgpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OmtleSk6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6aXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1w
bDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OmNvbnRhaW5zKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZUFyZWFJbXBsOjppbXBvcnRJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6
OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXJGb3JPcmlnaW5EZWxldGlvbik6CisgICAgICAgIChXZWJL
aXQ6OlN0b3JhZ2VBcmVhSW1wbDo6c2Vzc2lvbkNoYW5nZWQpOgorICAgICAgICAqIFN0b3JhZ2Uv
U3RvcmFnZUFyZWFJbXBsLmg6CisKIDIwMjEtMDQtMjYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVcGRhdGUgTWFjLXNwZWNpZmljIENNYWtl
IGZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAppbmRleCBkNDdjNzJiMDZl
ZmZhZTRjMjc2OWI3NjI3NmIzMTQxZmJkNmZkYjc2Li43MmExMTE5ZGZlZGNkMTVhY2E4MTA3NDNh
ODAxYzc1ZmUxNTQ0NmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
MjkgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFN0b3JhZ2VNYXA+IFN0
b3JhZ2VNYXA6OmNyZWF0ZSh1bnNpZ25lZCBxdW90YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTdG9yYWdlTWFwKHF1b3RhKSk7Ci19Ci0KIFN0b3JhZ2VNYXA6OlN0b3JhZ2VNYXAodW5z
aWduZWQgcXVvdGEpCi0gICAgOiBtX2l0ZXJhdG9yKG1fbWFwLmVuZCgpKQotICAgICwgbV9xdW90
YVNpemUocXVvdGEpICAvLyBxdW90YSBtZWFzdXJlZCBpbiBieXRlcwotewotfQotCi1SZWY8U3Rv
cmFnZU1hcD4gU3RvcmFnZU1hcDo6Y29weSgpCisgICAgOiBtX2ltcGwoSW1wbDo6Y3JlYXRlKCkp
CisgICAgLCBtX3F1b3RhU2l6ZShxdW90YSkgLy8gcXVvdGEgbWVhc3VyZWQgaW4gYnl0ZXMKIHsK
LSAgICBSZWY8U3RvcmFnZU1hcD4gbmV3TWFwID0gY3JlYXRlKG1fcXVvdGFTaXplKTsKLSAgICBu
ZXdNYXAtPm1fbWFwID0gbV9tYXA7Ci0gICAgbmV3TWFwLT5tX2N1cnJlbnRMZW5ndGggPSBtX2N1
cnJlbnRMZW5ndGg7Ci0gICAgcmV0dXJuIG5ld01hcDsKIH0KIAogdm9pZCBTdG9yYWdlTWFwOjpp
bnZhbGlkYXRlSXRlcmF0b3IoKQogewotICAgIG1faXRlcmF0b3IgPSBtX21hcC5lbmQoKTsKLSAg
ICBtX2l0ZXJhdG9ySW5kZXggPSBVSU5UX01BWDsKKyAgICBtX2ltcGwtPml0ZXJhdG9yID0gbV9p
bXBsLT5tYXAuZW5kKCk7CisgICAgbV9pbXBsLT5pdGVyYXRvckluZGV4ID0gVUlOVF9NQVg7CiB9
CiAKIHZvaWQgU3RvcmFnZU1hcDo6c2V0SXRlcmF0b3JUb0luZGV4KHVuc2lnbmVkIGluZGV4KQpA
QCAtNjIsMjUgKzQ5LDI1IEBAIHZvaWQgU3RvcmFnZU1hcDo6c2V0SXRlcmF0b3JUb0luZGV4KHVu
c2lnbmVkIGluZGV4KQogICAgIC8vIGNhbiB0YWtlIHRoZSBzaG9ydGVzdCByb3V0ZS4KICAgICAv
LyBVbnRpbCB0aGF0IG1lY2hhbmlzbSBpcyBhdmFpbGFibGUsIHdlJ2xsIGFsd2F5cyBpbmNyZW1l
bnQgb3VyIGl0ZXJhdG9yIGZyb20gYmVnaW4oKSBvciBjdXJyZW50LgogCi0gICAgaWYgKG1faXRl
cmF0b3JJbmRleCA9PSBpbmRleCkKKyAgICBpZiAobV9pbXBsLT5pdGVyYXRvckluZGV4ID09IGlu
ZGV4KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaW5kZXggPCBtX2l0ZXJhdG9ySW5kZXgp
IHsKLSAgICAgICAgbV9pdGVyYXRvckluZGV4ID0gMDsKLSAgICAgICAgbV9pdGVyYXRvciA9IG1f
bWFwLmJlZ2luKCk7Ci0gICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yICE9IG1fbWFwLmVuZCgpKTsK
KyAgICBpZiAoaW5kZXggPCBtX2ltcGwtPml0ZXJhdG9ySW5kZXgpIHsKKyAgICAgICAgbV9pbXBs
LT5pdGVyYXRvckluZGV4ID0gMDsKKyAgICAgICAgbV9pbXBsLT5pdGVyYXRvciA9IG1faW1wbC0+
bWFwLmJlZ2luKCk7CisgICAgICAgIEFTU0VSVChtX2ltcGwtPml0ZXJhdG9yICE9IG1faW1wbC0+
bWFwLmVuZCgpKTsKICAgICB9CiAKLSAgICB3aGlsZSAobV9pdGVyYXRvckluZGV4IDwgaW5kZXgp
IHsKLSAgICAgICAgKyttX2l0ZXJhdG9ySW5kZXg7Ci0gICAgICAgICsrbV9pdGVyYXRvcjsKLSAg
ICAgICAgQVNTRVJUKG1faXRlcmF0b3IgIT0gbV9tYXAuZW5kKCkpOworICAgIHdoaWxlIChtX2lt
cGwtPml0ZXJhdG9ySW5kZXggPCBpbmRleCkgeworICAgICAgICArK21faW1wbC0+aXRlcmF0b3JJ
bmRleDsKKyAgICAgICAgKyttX2ltcGwtPml0ZXJhdG9yOworICAgICAgICBBU1NFUlQobV9pbXBs
LT5pdGVyYXRvciAhPSBtX2ltcGwtPm1hcC5lbmQoKSk7CiAgICAgfQogfQogCiB1bnNpZ25lZCBT
dG9yYWdlTWFwOjpsZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiBtX21hcC5zaXplKCk7Cisg
ICAgcmV0dXJuIG1faW1wbC0+bWFwLnNpemUoKTsKIH0KIAogU3RyaW5nIFN0b3JhZ2VNYXA6Omtl
eSh1bnNpZ25lZCBpbmRleCkKQEAgLTg5LDMzICs3NiwyOSBAQCBTdHJpbmcgU3RvcmFnZU1hcDo6
a2V5KHVuc2lnbmVkIGluZGV4KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBzZXRJ
dGVyYXRvclRvSW5kZXgoaW5kZXgpOwotICAgIHJldHVybiBtX2l0ZXJhdG9yLT5rZXk7CisgICAg
cmV0dXJuIG1faW1wbC0+aXRlcmF0b3ItPmtleTsKIH0KIAogU3RyaW5nIFN0b3JhZ2VNYXA6Omdl
dEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWFwLmdldChr
ZXkpOworICAgIHJldHVybiBtX2ltcGwtPm1hcC5nZXQoa2V5KTsKIH0KIAotUmVmUHRyPFN0b3Jh
Z2VNYXA+IFN0b3JhZ2VNYXA6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIFN0cmluZyYgb2xkVmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKQordm9pZCBT
dG9yYWdlTWFwOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBTdHJpbmcmIG9sZFZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKIHsKICAgICBBU1NFUlQo
IXZhbHVlLmlzTnVsbCgpKTsKICAgICBxdW90YUV4Y2VwdGlvbiA9IGZhbHNlOwogCi0gICAgLy8g
SW1wbGVtZW50IGNvcHktb24td3JpdGUgc2VtYW50aWNzIGhlcmUuICBXZSdyZSBndWFyYW50ZWVk
IHRoYXQgdGhlIG9ubHkgcmVmcyBvZiBTdG9yYWdlTWFwcyBiZWxvbmcgdG8gU3RvcmFnZSBvYmpl
Y3RzCi0gICAgLy8gc28gaWYgbW9yZSB0aGFuIG9uZSBTdG9yYWdlIG9iamVjdCByZWZzIHRoaXMg
bWFwLCBjb3B5IGl0IGJlZm9yZSBtdXRhdGluZyBpdC4KLSAgICBpZiAocmVmQ291bnQoKSA+IDEp
IHsKLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld1N0b3JhZ2VNYXAgPSBjb3B5KCk7Ci0g
ICAgICAgIG5ld1N0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3Rh
RXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIG5ld1N0b3JhZ2VNYXA7Ci0gICAgfQorICAgIC8v
IEltcGxlbWVudCBjb3B5LW9uLXdyaXRlIHNlbWFudGljcy4KKyAgICBpZiAobV9pbXBsLT5yZWZD
b3VudCgpID4gMSkKKyAgICAgICAgbV9pbXBsID0gbV9pbXBsLT5jb3B5KCk7CiAKICAgICAvLyBR
dW90YSB0cmFja2luZy4gIFRoaXMgaXMgZG9uZSBpbiBhIGNvdXBsZSBvZiBzdGVwcyB0byBrZWVw
IHRoZSBvdmVyZmxvdyB0cmFja2luZyBzaW1wbGUuCi0gICAgdW5zaWduZWQgbmV3TGVuZ3RoID0g
bV9jdXJyZW50TGVuZ3RoOworICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IG1faW1wbC0+Y3VycmVu
dExlbmd0aDsKICAgICBib29sIG92ZXJmbG93ID0gbmV3TGVuZ3RoICsgdmFsdWUubGVuZ3RoKCkg
PCBuZXdMZW5ndGg7CiAgICAgbmV3TGVuZ3RoICs9IHZhbHVlLmxlbmd0aCgpOwogCi0gICAgb2xk
VmFsdWUgPSBtX21hcC5nZXQoa2V5KTsKKyAgICBvbGRWYWx1ZSA9IG1faW1wbC0+bWFwLmdldChr
ZXkpOwogICAgIG92ZXJmbG93IHw9IG5ld0xlbmd0aCAtIG9sZFZhbHVlLmxlbmd0aCgpID4gbmV3
TGVuZ3RoOwogICAgIG5ld0xlbmd0aCAtPSBvbGRWYWx1ZS5sZW5ndGgoKTsKIApAQCAtMTI3LDY3
ICsxMTAsNjYgQEAgUmVmUHRyPFN0b3JhZ2VNYXA+IFN0b3JhZ2VNYXA6OnNldEl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFMKICAgICBib29sIG92ZXJRdW90YSA9
IG5ld0xlbmd0aCA+IG1fcXVvdGFTaXplIC8gc2l6ZW9mKFVDaGFyKTsKICAgICBpZiAobV9xdW90
YVNpemUgIT0gbm9RdW90YSAmJiAob3ZlcmZsb3cgfHwgb3ZlclF1b3RhKSkgewogICAgICAgICBx
dW90YUV4Y2VwdGlvbiA9IHRydWU7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIG1fY3VycmVudExlbmd0aCA9IG5ld0xlbmd0aDsKKyAgICBtX2lt
cGwtPmN1cnJlbnRMZW5ndGggPSBuZXdMZW5ndGg7CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fbWFwLmFkZChrZXksIHZhbHVlKTsKKyAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1faW1wbC0+bWFw
LmFkZChrZXksIHZhbHVlKTsKICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQogICAgICAg
ICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdmFsdWU7CiAKICAgICBpbnZhbGlkYXRlSXRl
cmF0b3IoKTsKLQotICAgIHJldHVybiBudWxscHRyOwogfQogCi1SZWZQdHI8U3RvcmFnZU1hcD4g
U3RvcmFnZU1hcDo6c2V0SXRlbUlnbm9yaW5nUXVvdGEoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUpCit2b2lkIFN0b3JhZ2VNYXA6OnNldEl0ZW1JZ25vcmluZ1F1b3RhKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIFNldEZvclNjb3Bl
PHVuc2lnbmVkPiBxdW90YVNpemVDaGFuZ2UobV9xdW90YVNpemUsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihub1F1b3RhKSk7CiAKICAgICBTdHJpbmcgb2xkVmFsdWU7CiAgICAgYm9vbCBxdW90YUV4
Y2VwdGlvbjsKLQotICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBtYXAgPSBzZXRJdGVtKGtleSwgdmFs
dWUsIG9sZFZhbHVlLCBxdW90YUV4Y2VwdGlvbik7CisgICAgc2V0SXRlbShrZXksIHZhbHVlLCBv
bGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwogICAgIEFTU0VSVCghcXVvdGFFeGNlcHRpb24pOwot
Ci0gICAgcmV0dXJuIG1hcDsKIH0KIAotUmVmUHRyPFN0b3JhZ2VNYXA+IFN0b3JhZ2VNYXA6OnJl
bW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgb2xkVmFsdWUpCit2b2lkIFN0b3Jh
Z2VNYXA6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgb2xkVmFsdWUpCiB7
Ci0gICAgLy8gSW1wbGVtZW50IGNvcHktb24td3JpdGUgc2VtYW50aWNzIGhlcmUuICBXZSdyZSBn
dWFyYW50ZWVkIHRoYXQgdGhlIG9ubHkgcmVmcyBvZiBTdG9yYWdlTWFwcyBiZWxvbmcgdG8gU3Rv
cmFnZSBvYmplY3RzCi0gICAgLy8gc28gaWYgbW9yZSB0aGFuIG9uZSBTdG9yYWdlIG9iamVjdCBy
ZWZzIHRoaXMgbWFwLCBjb3B5IGl0IGJlZm9yZSBtdXRhdGluZyBpdC4KLSAgICBpZiAocmVmQ291
bnQoKSA+IDEpIHsKLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VNYXA+IG5ld1N0b3JhZ2UgPSBjb3B5
KCk7Ci0gICAgICAgIG5ld1N0b3JhZ2UtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBuZXdTdG9yYWdlOwotICAgIH0KKyAgICAvLyBJbXBsZW1lbnQgY29weS1vbi13
cml0ZSBzZW1hbnRpY3MuCisgICAgaWYgKG1faW1wbC0+cmVmQ291bnQoKSA+IDEpCisgICAgICAg
IG1faW1wbCA9IG1faW1wbC0+Y29weSgpOwogCi0gICAgb2xkVmFsdWUgPSBtX21hcC50YWtlKGtl
eSk7CisgICAgb2xkVmFsdWUgPSBtX2ltcGwtPm1hcC50YWtlKGtleSk7CiAgICAgaWYgKCFvbGRW
YWx1ZS5pc051bGwoKSkgewogICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3IoKTsKLSAgICAgICAg
QVNTRVJUKG1fY3VycmVudExlbmd0aCAtIGtleS5sZW5ndGgoKSA8PSBtX2N1cnJlbnRMZW5ndGgp
OwotICAgICAgICBtX2N1cnJlbnRMZW5ndGggLT0ga2V5Lmxlbmd0aCgpOworICAgICAgICBBU1NF
UlQobV9pbXBsLT5jdXJyZW50TGVuZ3RoIC0ga2V5Lmxlbmd0aCgpIDw9IG1faW1wbC0+Y3VycmVu
dExlbmd0aCk7CisgICAgICAgIG1faW1wbC0+Y3VycmVudExlbmd0aCAtPSBrZXkubGVuZ3RoKCk7
CiAgICAgfQotICAgIEFTU0VSVChtX2N1cnJlbnRMZW5ndGggLSBvbGRWYWx1ZS5sZW5ndGgoKSA8
PSBtX2N1cnJlbnRMZW5ndGgpOwotICAgIG1fY3VycmVudExlbmd0aCAtPSBvbGRWYWx1ZS5sZW5n
dGgoKTsKKyAgICBBU1NFUlQobV9pbXBsLT5jdXJyZW50TGVuZ3RoIC0gb2xkVmFsdWUubGVuZ3Ro
KCkgPD0gbV9pbXBsLT5jdXJyZW50TGVuZ3RoKTsKKyAgICBtX2ltcGwtPmN1cnJlbnRMZW5ndGgg
LT0gb2xkVmFsdWUubGVuZ3RoKCk7Cit9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKK3ZvaWQgU3Rv
cmFnZU1hcDo6Y2xlYXIoKQoreworICAgIGlmIChtX2ltcGwtPnJlZkNvdW50KCkgPiAxICYmIGxl
bmd0aCgpKSB7CisgICAgICAgIG1faW1wbCA9IEltcGw6OmNyZWF0ZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIG1faW1wbC0+bWFwLmNsZWFyKCk7CisgICAgbV9pbXBsLT5jdXJyZW50
TGVuZ3RoID0gMDsKIH0KIAogYm9vbCBTdG9yYWdlTWFwOjpjb250YWlucyhjb25zdCBTdHJpbmcm
IGtleSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tYXAuY29udGFpbnMoa2V5KTsKKyAgICByZXR1
cm4gbV9pbXBsLT5tYXAuY29udGFpbnMoa2V5KTsKIH0KIAogdm9pZCBTdG9yYWdlTWFwOjppbXBv
cnRJdGVtcyhIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGl0ZW1zKQogewotICAgIGlmIChtX21h
cC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9pbXBsLT5tYXAuaXNFbXB0eSgpKSB7CiAgICAgICAg
IC8vIEZhc3QgcGF0aC4KLSAgICAgICAgbV9tYXAgPSBXVEZNb3ZlKGl0ZW1zKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBwYWlyIDogbV9tYXApIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRM
ZW5ndGggKyBwYWlyLmtleS5sZW5ndGgoKSArIHBhaXIudmFsdWUubGVuZ3RoKCkgPj0gbV9jdXJy
ZW50TGVuZ3RoKTsKLSAgICAgICAgICAgIG1fY3VycmVudExlbmd0aCArPSAocGFpci5rZXkubGVu
Z3RoKCkgKyBwYWlyLnZhbHVlLmxlbmd0aCgpKTsKKyAgICAgICAgbV9pbXBsLT5tYXAgPSBXVEZN
b3ZlKGl0ZW1zKTsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbXBsLT5tYXApIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2ltcGwtPmN1cnJlbnRMZW5ndGggKyBwYWlyLmtleS5sZW5ndGgo
KSArIHBhaXIudmFsdWUubGVuZ3RoKCkgPj0gbV9pbXBsLT5jdXJyZW50TGVuZ3RoKTsKKyAgICAg
ICAgICAgIG1faW1wbC0+Y3VycmVudExlbmd0aCArPSAocGFpci5rZXkubGVuZ3RoKCkgKyBwYWly
LnZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTk2LDEyICsxNzgsMjAgQEAgdm9pZCBTdG9yYWdlTWFwOjppbXBvcnRJdGVtcyhIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYmIGl0ZW1zKQogICAgICAgICBhdXRvJiBrZXkgPSBpdGVtLmtleTsKICAg
ICAgICAgYXV0byYgdmFsdWUgPSBpdGVtLnZhbHVlOwogCi0gICAgICAgIEFTU0VSVChtX2N1cnJl
bnRMZW5ndGggKyBrZXkubGVuZ3RoKCkgKyB2YWx1ZS5sZW5ndGgoKSA+PSBtX2N1cnJlbnRMZW5n
dGgpOwotICAgICAgICBtX2N1cnJlbnRMZW5ndGggKz0gKGtleS5sZW5ndGgoKSArIHZhbHVlLmxl
bmd0aCgpKTsKKyAgICAgICAgQVNTRVJUKG1faW1wbC0+Y3VycmVudExlbmd0aCArIGtleS5sZW5n
dGgoKSArIHZhbHVlLmxlbmd0aCgpID49IG1faW1wbC0+Y3VycmVudExlbmd0aCk7CisgICAgICAg
IG1faW1wbC0+Y3VycmVudExlbmd0aCArPSAoa2V5Lmxlbmd0aCgpICsgdmFsdWUubGVuZ3RoKCkp
OwogICAgICAgICAKLSAgICAgICAgYXV0byByZXN1bHQgPSBtX21hcC5hZGQoV1RGTW92ZShrZXkp
LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pbXBsLT5tYXAuYWRk
KFdURk1vdmUoa2V5KSwgV1RGTW92ZSh2YWx1ZSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOyAvLyBUcnVlIGlmIHRoZSBrZXkgZGlkbid0IGV4aXN0
IHByZXZpb3VzbHkuCiAgICAgfQogfQogCitSZWY8U3RvcmFnZU1hcDo6SW1wbD4gU3RvcmFnZU1h
cDo6SW1wbDo6Y29weSgpIGNvbnN0Cit7CisgICAgYXV0byBjb3B5ID0gSW1wbDo6Y3JlYXRlKCk7
CisgICAgY29weS0+bWFwID0gbWFwOworICAgIGNvcHktPmN1cnJlbnRMZW5ndGggPSBjdXJyZW50
TGVuZ3RoOworICAgIHJldHVybiBjb3B5OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZU1hcC5oCmluZGV4IDRlYTllNzg5NmNhZmE3Njk5MGU1OTBjOGI5NWQzNzE0NzMyMGIxOWMuLjYz
NjVkMDY0YWJiMmM4Nzk5MjRlMDQxYTlkODA4NTk3NTEwMzM5MDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU1hcC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMyLDQwICszMiw1MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFN0b3JhZ2VNYXAgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlTWFwPiB7CisvLyBU
aGlzIGNsYXNzIHVzZXMgY29weS1vbi13cml0ZSBzZW1hbnRpY3MuCitjbGFzcyBTdG9yYWdlTWFw
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICAvLyBRdW90YSBz
aXplIG1lYXN1cmVkIGluIGJ5dGVzLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U3Rv
cmFnZU1hcD4gY3JlYXRlKHVuc2lnbmVkIHF1b3RhU2l6ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
ZXhwbGljaXQgU3RvcmFnZU1hcCh1bnNpZ25lZCBxdW90YVNpemUpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGtleSh1bnNpZ25lZCBpbmRleCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGdldEl0ZW0o
Y29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFN0b3JhZ2VN
YXA+IHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFN0cmlu
ZyYgb2xkVmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8U3RvcmFnZU1hcD4gc2V0SXRlbUlnbm9yaW5nUXVvdGEoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdl
TWFwPiByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYsIFN0cmluZyYgb2xkVmFsdWUpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0SXRlbUlnbm9yaW5nUXVvdGEoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlSXRl
bShjb25zdCBTdHJpbmcmLCBTdHJpbmcmIG9sZFZhbHVlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsZWFyKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0IFN0
cmluZyYga2V5KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW1wb3J0SXRlbXMo
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJik7Ci0gICAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9tYXA7IH0KKyAgICBjb25zdCBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1hcDsgfQog
CiAgICAgdW5zaWduZWQgcXVvdGEoKSBjb25zdCB7IHJldHVybiBtX3F1b3RhU2l6ZTsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgUmVmPFN0b3JhZ2VNYXA+IGNvcHkoKTsKKyAgICBib29sIGlzU2hh
cmVkKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbC0+aGFzT25lUmVmKCk7IH0KIAotICAgIHN0YXRp
YyBjb25zdCBjb25zdGV4cHIgdW5zaWduZWQgbm9RdW90YSA9IFVJTlRfTUFYOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbm9RdW90YSA9IFVJTlRfTUFYOwogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IFN0b3JhZ2VNYXAodW5zaWduZWQgcXVvdGEpOwogICAgIHZvaWQgaW52YWxpZGF0
ZUl0ZXJhdG9yKCk7CiAgICAgdm9pZCBzZXRJdGVyYXRvclRvSW5kZXgodW5zaWduZWQpOwogCi0g
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9tYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46Oml0ZXJhdG9yIG1faXRlcmF0b3I7Ci0gICAgdW5zaWduZWQgbV9pdGVyYXRvckluZGV4
IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgc3RydWN0IElt
cGwgOiBwdWJsaWMgUmVmQ291bnRlZDxJbXBsPiB7CisgICAgICAgIHN0YXRpYyBSZWY8SW1wbD4g
Y3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1w
bCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIG1fcXVvdGFTaXplOyAvLyBNZWFzdXJlZCBp
biBieXRlcy4KLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRMZW5ndGggeyAwIH07IC8vIE1lYXN1cmVk
IGluIFVDaGFycy4KKyAgICAgICAgUmVmPEltcGw+IGNvcHkoKSBjb25zdDsKKworICAgICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXA7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+OjppdGVyYXRvciBpdGVyYXRvciB7IG1hcC5lbmQoKSB9OworICAgICAgICB1bnNpZ25lZCBp
dGVyYXRvckluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07Cisg
ICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggeyAwIH07IC8vIE1lYXN1cmVkIGluIFVDaGFy
cy4KKyAgICB9OworCisgICAgUmVmPEltcGw+IG1faW1wbDsKKyAgICB1bnNpZ25lZCBtX3F1b3Rh
U2l6ZSB7IG5vUXVvdGEgfTsgLy8gTWVhc3VyZWQgaW4gYnl0ZXMuCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAppbmRleCA2YTc2ZDc3MDk2Y2IyYTM0YWU5OGQ3Zjcw
MzFjMDI5ZjhjODI4OGQxLi5jOTcyZWI3NTFhYTIxZTE2NGM5YWUxYTg3YTYyOTA1OTFjYjk1OWZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlQXJlYS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiU3RvcmFnZU1hbmFnZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQwLDcgKzM5LDcgQEAgU3RvcmFnZUFyZWE6OlN0
b3JhZ2VBcmVhKExvY2FsU3RvcmFnZU5hbWVzcGFjZSogbG9jYWxTdG9yYWdlTmFtZXNwYWNlLCBj
b25zdCBTZWMKICAgICA6IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlKG1ha2VXZWFrUHRyKGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZSkpCiAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2lu
KQogICAgICwgbV9xdW90YUluQnl0ZXMocXVvdGFJbkJ5dGVzKQotICAgICwgbV9zdG9yYWdlTWFw
KFN0b3JhZ2VNYXA6OmNyZWF0ZShtX3F1b3RhSW5CeXRlcykpCisgICAgLCBtX3N0b3JhZ2VNYXAo
bV9xdW90YUluQnl0ZXMpCiAgICAgLCBtX2lkZW50aWZpZXIoSWRlbnRpZmllcjo6Z2VuZXJhdGUo
KSkKICAgICAsIG1fcXVldWUoV1RGTW92ZShxdWV1ZSkpCiB7CkBAIC0xMDQsMTEgKzEwMyw3IEBA
IHZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3Vy
Y2VDb25uZWN0aW9uLCBTdG9yYWdlQXJlCiAgICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJ
Zk5lZWRlZCgpOwogCiAgICAgU3RyaW5nIG9sZFZhbHVlOwotCi0gICAgYXV0byBuZXdTdG9yYWdl
TWFwID0gbV9zdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4
Y2VwdGlvbik7Ci0gICAgaWYgKG5ld1N0b3JhZ2VNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9
IFdURk1vdmUobmV3U3RvcmFnZU1hcCk7Ci0KKyAgICBtX3N0b3JhZ2VNYXAuc2V0SXRlbShrZXks
IHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwogICAgIGlmIChxdW90YUV4Y2VwdGlv
bikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjQsMTAgKzExOSw3IEBAIHZvaWQgU3RvcmFnZUFy
ZWE6OnJlbW92ZUl0ZW0oSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25uZWN0aW9u
LCBTdG9yYWdlCiAgICAgb3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOwogCiAg
ICAgU3RyaW5nIG9sZFZhbHVlOwotICAgIGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1h
cC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKLSAgICBpZiAobmV3U3RvcmFnZU1hcCkKLSAg
ICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKLQorICAgIG1fc3Rv
cmFnZU1hcC5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwogICAgIGlmIChvbGRWYWx1ZS5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNDIsMTAgKzEzNCwxMCBAQCB2b2lkIFN0b3Jh
Z2VBcmVhOjpjbGVhcihJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24s
IFN0b3JhZ2VBcmVhSQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIG9wZW5E
YXRhYmFzZUFuZEltcG9ydEl0ZW1zSWZOZWVkZWQoKTsKIAotICAgIGlmICghbV9zdG9yYWdlTWFw
LT5sZW5ndGgoKSkKKyAgICBpZiAoIW1fc3RvcmFnZU1hcC5sZW5ndGgoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5
dGVzKTsKKyAgICBtX3N0b3JhZ2VNYXAuY2xlYXIoKTsKIAogICAgIGlmIChtX2xvY2FsU3RvcmFn
ZURhdGFiYXNlKQogICAgICAgICBtX2xvY2FsU3RvcmFnZURhdGFiYXNlLT5jbGVhcigpOwpAQCAt
MTU4LDEzICsxNTAsMTMgQEAgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIFN0b3JhZ2VB
cmVhOjppdGVtcygpIGNvbnN0CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
b3BlbkRhdGFiYXNlQW5kSW1wb3J0SXRlbXNJZk5lZWRlZCgpOwogCi0gICAgcmV0dXJuIG1fc3Rv
cmFnZU1hcC0+aXRlbXMoKTsKKyAgICByZXR1cm4gbV9zdG9yYWdlTWFwLml0ZW1zKCk7CiB9CiAK
IHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0
ZXMpOworICAgIG1fc3RvcmFnZU1hcC5jbGVhcigpOwogCiAgICAgaWYgKG1fbG9jYWxTdG9yYWdl
RGF0YWJhc2UpIHsKICAgICAgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+Y2xvc2UoKTsKQEAg
LTE5Myw3ICsxODUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpvcGVuRGF0YWJhc2VBbmRJbXBvcnRJ
dGVtc0lmTmVlZGVkKCkgY29uc3QKICAgICBpZiAobV9kaWRJbXBvcnRJdGVtc0Zyb21EYXRhYmFz
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+aW1wb3J0
SXRlbXMoKm1fc3RvcmFnZU1hcCk7CisgICAgbV9sb2NhbFN0b3JhZ2VEYXRhYmFzZS0+aW1wb3J0
SXRlbXMobV9zdG9yYWdlTWFwKTsKICAgICBtX2RpZEltcG9ydEl0ZW1zRnJvbURhdGFiYXNlID0g
dHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0
b3JhZ2UvU3RvcmFnZUFyZWEuaAppbmRleCAyMWQ0ODU5OWNlZGRmMTRjNjQ2NjgzYjgzNGRjNTEw
YTIyYzZhMmNlLi45MDQ1NGVkZTkzMTYyNjlkYTQ4MTJlZTM3MDU2MWJjZjQ3ZjQxYTU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFn
ZUFyZWEuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
IApAQCAtODQsNyArODUsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
RGF0YSBtX3NlY3VyaXR5T3JpZ2luOwogICAgIHVuc2lnbmVkIG1fcXVvdGFJbkJ5dGVzIHsgMCB9
OwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VNYXA+IG1fc3RvcmFnZU1hcDsKKyAgICBt
dXRhYmxlIFdlYkNvcmU6OlN0b3JhZ2VNYXAgbV9zdG9yYWdlTWFwOwogICAgIEhhc2hTZXQ8SVBD
OjpDb25uZWN0aW9uOjpVbmlxdWVJRD4gbV9ldmVudExpc3RlbmVyczsKIAogICAgIElkZW50aWZp
ZXIgbV9pZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCmluZGV4IDJlYzNkYzhiYjE2NWRlNTJhY2Q1Y2Uy
MjVlYWNmMzk1ZjBlNzM0YTguLmVhMGZkYzFkNTI2NzVhYmEyNjBlNjk2MjBlN2YxN2M4NjhhNGQ0
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VBcmVhTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlQXJlYU1hcC5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgU3RyaW5nIFN0b3JhZ2VBcmVhTWFw
OjppdGVtKGNvbnN0IFN0cmluZyYga2V5KQogdm9pZCBTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbShG
cmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKQogewog
ICAgIGF1dG8mIG1hcCA9IGVuc3VyZU1hcCgpOwotICAgIEFTU0VSVChtYXAuaGFzT25lUmVmKCkp
OworICAgIEFTU0VSVCghbWFwLmlzU2hhcmVkKCkpOwogCiAgICAgU3RyaW5nIG9sZFZhbHVlOwog
ICAgIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBTdG9y
YWdlQXJlYU1hcDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCog
c291cmNlQXJlYSwgY28KIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnJlbW92ZUl0ZW0oV2ViQ29yZTo6
RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvbnN0IFN0
cmluZyYga2V5KQogewogICAgIGF1dG8mIG1hcCA9IGVuc3VyZU1hcCgpOwotICAgIEFTU0VSVCht
YXAuaGFzT25lUmVmKCkpOworICAgIEFTU0VSVCghbWFwLmlzU2hhcmVkKCkpOwogCiAgICAgU3Ry
aW5nIG9sZFZhbHVlOwogICAgIG1hcC5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwpAQCAtMTI2
LDcgKzEyNiw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFyKFdlYkNvcmU6OkZyYW1lKiBz
b3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBCiAgICAgcmVzZXRWYWx1ZXMoKTsK
IAogICAgIG1faGFzUGVuZGluZ0NsZWFyID0gdHJ1ZTsKLSAgICBtX21hcCA9IFN0b3JhZ2VNYXA6
OmNyZWF0ZShtX3F1b3RhSW5CeXRlcyk7CisgICAgbV9tYXAgPSBtYWtlVW5pcXVlPFN0b3JhZ2VN
YXA+KG1fcXVvdGFJbkJ5dGVzKTsKIAogICAgIGlmIChtX21hcElEKQogICAgICAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0
aW9uKCkuc2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXJTZXQ6OkNsZWFyKCptX21hcElELCBz
b3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIG1fY3VycmVudFNlZWQsIHNvdXJjZUZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIDApOwpAQCAtMTUzLDcgKzE1Myw3IEBAIFN0b3JhZ2VN
YXAmIFN0b3JhZ2VBcmVhTWFwOjplbnN1cmVNYXAoKQogICAgIGNvbm5lY3QoKTsKIAogICAgIGlm
ICghbV9tYXApIHsKLSAgICAgICAgbV9tYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUlu
Qnl0ZXMpOworICAgICAgICBtX21hcCA9IG1ha2VVbmlxdWU8U3RvcmFnZU1hcD4obV9xdW90YUlu
Qnl0ZXMpOwogCiAgICAgICAgIGlmIChtX21hcElEKSB7CiAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIHVzZSBhIElQQzo6VW5ib3VuZGVkU3luY2hyb25vdXNJUENTY29wZSB0byBwcmV2ZW50IFVJ
UHJvY2VzcyBoYW5ncyBpbiBjYXNlIHdlIHJlY2VpdmUgYSBzeW5jaHJvbm91cyBJUEMgZnJvbSB0
aGUgVUlQcm9jZXNzIHdoaWxlIHdlJ3JlIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UKQEAgLTIxOCw3
ICsyMTgsNyBAQCBib29sIFN0b3JhZ2VBcmVhTWFwOjpzaG91bGRBcHBseUNoYW5nZUZvcktleShj
b25zdCBTdHJpbmcmIGtleSkgY29uc3QKIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6YXBwbHlDaGFu
Z2UoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUpCiB7Ci0gICAgQVNT
RVJUKCFtX21hcCB8fCBtX21hcC0+aGFzT25lUmVmKCkpOworICAgIEFTU0VSVCghbV9tYXAgfHwg
IW1fbWFwLT5pc1NoYXJlZCgpKTsKIAogICAgIC8vIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjbGVh
ciBwZW5kaW5nIHdlIGRvbid0IHdhbnQgdG8gYXBwbHkgYW55IGNoYW5nZXMgdW50aWwgd2UgZ2V0
IHRoZSBjb3JyZXNwb25kaW5nIERpZENsZWFyIG1lc3NhZ2VzLgogICAgIGlmIChtX2hhc1BlbmRp
bmdDbGVhcikKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjphcHBseUNo
YW5nZShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSkKIAogICAgIGlm
ICgha2V5KSB7CiAgICAgICAgIC8vIEEgbnVsbCBrZXkgbWVhbnMgY2xlYXIuCi0gICAgICAgIGF1
dG8gbmV3TWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKKyAgICAgICAg
YXV0byBuZXdNYXAgPSBtYWtlVW5pcXVlPFN0b3JhZ2VNYXA+KG1fcXVvdGFJbkJ5dGVzKTsKIAog
ICAgICAgICAvLyBBbnkgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBsb2NhbGx5IGFmdGVyIHRoZSBj
bGVhciBtdXN0IHN0aWxsIGJlIGtlcHQgYXJvdW5kIGluIHRoZSBuZXcgbWFwLgogICAgICAgICBm
b3IgKGF1dG8mIGNoYW5nZSA6IG1fcGVuZGluZ1ZhbHVlQ2hhbmdlcykgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmgKaW5kZXgg
N2U2OWIyODRmMTA0ZTYzYWNiMGZlZGJjYjRiYWY4ZjM3MGQ4ZTI5ZC4uOWY0N2E4ZmU0NTE1MDM0
NDcyODQ4YmE2YWYyOGJkNzA5ZTZhYjFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5oCkBAIC05NCw3ICs5NCw3IEBAIHBy
aXZhdGU6CiAKICAgICBTdG9yYWdlTmFtZXNwYWNlSW1wbCYgbV9uYW1lc3BhY2U7CiAgICAgUmVm
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpTdG9yYWdlTWFwPiBtX21hcDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U3RvcmFnZU1hcD4gbV9tYXA7CiAgICAgT3B0aW9uYWw8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBt
X21hcElEOwogICAgIEhhc2hDb3VudGVkU2V0PFN0cmluZz4gbV9wZW5kaW5nVmFsdWVDaGFuZ2Vz
OwogICAgIHVpbnQ2NF90IG1fY3VycmVudFNlZWQgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCmluZGV4IDAwNTdkY2NlOGU0ZjQ3ZjBl
YzdhYWM3MzUyOGI5MDI4Yzk4NTBhYmQuLjBjMTYzNWVlNjMwN2FmNDRkMzQ0NjZiNDRmMWY3ZmE3
NzcyOTVhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJl
YUltcGwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2lu
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3Jh
Z2VNYXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VUeXBlLmg+CiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KIApAQCAtNDgsMTMgKzQ3LDEyIEBAIFN0b3JhZ2VBcmVhSW1wbDo6flN0
b3JhZ2VBcmVhSW1wbCgpCiBpbmxpbmUgU3RvcmFnZUFyZWFJbXBsOjpTdG9yYWdlQXJlYUltcGwo
U3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2lu
LCBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiYmIHN5bmNNYW5hZ2VyLCB1bnNpZ25lZCBxdW90
YSkKICAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCiAgICAgLCBtX3NlY3VyaXR5T3Jp
Z2luKG9yaWdpbikKLSAgICAsIG1fc3RvcmFnZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUocXVvdGEp
KQorICAgICwgbV9zdG9yYWdlTWFwKHF1b3RhKQogICAgICwgbV9zdG9yYWdlU3luY01hbmFnZXIo
V1RGTW92ZShzeW5jTWFuYWdlcikpCiAgICAgLCBtX2FjY2Vzc0NvdW50KDApCiAgICAgLCBtX2Ns
b3NlRGF0YWJhc2VUaW1lcigqdGhpcywgJlN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2VEYXRhYmFzZVRp
bWVyRmlyZWQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9z
dG9yYWdlTWFwKTsKICAgICAKICAgICAvLyBBY2Nlc3NpbmcgdGhlIHNoYXJlZCBnbG9iYWwgU3Rv
cmFnZVRyYWNrZXIgd2hlbiBhIFN0b3JhZ2VBcmVhIGlzIGNyZWF0ZWQgCiAgICAgLy8gZW5zdXJl
cyB0aGF0IHRoZSB0cmFja2VyIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnlvbmUg
YWN0dWFsbHkgbmVlZHMgdG8gdXNlIGl0LgpAQCAtOTEsNyArODksNiBAQCBTdG9yYWdlQXJlYUlt
cGw6OlN0b3JhZ2VBcmVhSW1wbChjb25zdCBTdG9yYWdlQXJlYUltcGwmIGFyZWEpCiAgICAgLCBt
X2Nsb3NlRGF0YWJhc2VUaW1lcigqdGhpcywgJlN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2VEYXRhYmFz
ZVRpbWVyRmlyZWQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
bV9zdG9yYWdlTWFwKTsKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiB9CiAKQEAgLTEwNSw3
ICsxMDIsNyBAQCB1bnNpZ25lZCBTdG9yYWdlQXJlYUltcGw6Omxlbmd0aCgpCiAgICAgQVNTRVJU
KCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogCi0gICAg
cmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC5s
ZW5ndGgoKTsKIH0KIAogU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6a2V5KHVuc2lnbmVkIGluZGV4
KQpAQCAtMTEzLDcgKzExMCw3IEBAIFN0cmluZyBTdG9yYWdlQXJlYUltcGw6OmtleSh1bnNpZ25l
ZCBpbmRleCkKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCk7CiAKLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5rZXkoaW5kZXgpOworICAg
IHJldHVybiBtX3N0b3JhZ2VNYXAua2V5KGluZGV4KTsKIH0KIAogU3RyaW5nIFN0b3JhZ2VBcmVh
SW1wbDo6aXRlbShjb25zdCBTdHJpbmcmIGtleSkKQEAgLTEyMSw3ICsxMTgsNyBAQCBTdHJpbmcg
U3RvcmFnZUFyZWFJbXBsOjppdGVtKGNvbnN0IFN0cmluZyYga2V5KQogICAgIEFTU0VSVCghbV9p
c1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKIAotICAgIHJldHVy
biBtX3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKKyAgICByZXR1cm4gbV9zdG9yYWdlTWFwLmdl
dEl0ZW0oa2V5KTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oRnJhbWUqIHNv
dXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCYg
cXVvdGFFeGNlcHRpb24pCkBAIC0xMzEsMTAgKzEyOCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBs
OjpzZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluCiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKICAgICBTdHJpbmcgb2xkVmFs
dWU7Ci0gICAgYXV0byBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnNldEl0ZW0oa2V5LCB2YWx1ZSwg
b2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKLSAgICBpZiAobmV3TWFwKQotICAgICAgICBtX3N0
b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld01hcCk7Ci0KKyAgICBtX3N0b3JhZ2VNYXAuc2V0SXRlbShr
ZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOwogICAgIGlmIChxdW90YUV4Y2Vw
dGlvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNTMsMTAgKzE0Nyw3IEBAIHZvaWQgU3RvcmFn
ZUFyZWFJbXBsOjpyZW1vdmVJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXkpCiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKICAgICBTdHJpbmcgb2xkVmFs
dWU7Ci0gICAgYXV0byBuZXdNYXAgPSBtX3N0b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRW
YWx1ZSk7Ci0gICAgaWYgKG5ld01hcCkKLSAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShu
ZXdNYXApOwotCisgICAgbV9zdG9yYWdlTWFwLnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CiAg
ICAgaWYgKG9sZFZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTE3MSwxMSAr
MTYyLDEwIEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihGcmFtZSogc291cmNlRnJhbWUp
CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpOwogCi0gICAgaWYgKCFtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpKQorICAgIGlmICghbV9zdG9y
YWdlTWFwLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBxdW90YSA9
IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpj
cmVhdGUocXVvdGEpOworICAgIG1fc3RvcmFnZU1hcC5jbGVhcigpOwogCiAgICAgaWYgKG1fc3Rv
cmFnZUFyZWFTeW5jKQogICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigp
OwpAQCAtMTg4LDcgKzE3OCw3IEBAIGJvb2wgU3RvcmFnZUFyZWFJbXBsOjpjb250YWlucyhjb25z
dCBTdHJpbmcmIGtleSkKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCk7CiAKLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5jb250YWlucyhr
ZXkpOworICAgIHJldHVybiBtX3N0b3JhZ2VNYXAuY29udGFpbnMoa2V5KTsKIH0KIAogdm9pZCBT
dG9yYWdlQXJlYUltcGw6OmltcG9ydEl0ZW1zKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaXRl
bXMpCkBAIC0xOTYsNyArMTg2LDcgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmltcG9ydEl0ZW1z
KEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaXRlbXMpCiAgICAgQVNTRVJUKCFtX2lzU2h1dGRv
d24pOwogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgbV9zdG9yYWdlTWFwLT5p
bXBvcnRJdGVtcyhXVEZNb3ZlKGl0ZW1zKSk7CisgICAgbV9zdG9yYWdlTWFwLmltcG9ydEl0ZW1z
KFdURk1vdmUoaXRlbXMpKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsb3NlKCkKQEAg
LTIxNCwxMCArMjA0LDcgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyRm9yT3JpZ2luRGVs
ZXRpb24oKQogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0
Q29tcGxldGUoKTsKICAgICAKLSAgICBpZiAobV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkgewotICAg
ICAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+cXVvdGEoKTsKLSAgICAgICAgbV9z
dG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3RhKTsKLSAgICB9CisgICAgbV9zdG9y
YWdlTWFwLmNsZWFyKCk7CiAKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpIHsKICAgICAgICAg
bV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlQ2xlYXIoKTsKQEAgLTI5Nyw4ICsyODQsNyBAQCB2
b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2Vzc2lvbkNoYW5nZWQoYm9vbCBpc05ld1Nlc3Npb25QZXJz
aXN0ZW50KQogICAgIC8vIElmIGltcG9ydCBpcyBub3QgY29tcGxldGVkLCBiYWNrZ3JvdW5kIHN0
b3JhZ2UgdGhyZWFkIG1heSBiZSBtb2RpZnlpbmcgbV9zdG9yYWdlTWFwLgogICAgIGJsb2NrVW50
aWxJbXBvcnRDb21wbGV0ZSgpOwogCi0gICAgdW5zaWduZWQgcXVvdGEgPSBtX3N0b3JhZ2VNYXAt
PnF1b3RhKCk7Ci0gICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKHF1b3RhKTsK
KyAgICBtX3N0b3JhZ2VNYXAuY2xlYXIoKTsKIAogICAgIGlmIChpc05ld1Nlc3Npb25QZXJzaXN0
ZW50ICYmICFtX3N0b3JhZ2VBcmVhU3luYyAmJiBtX3N0b3JhZ2VTeW5jTWFuYWdlcikgewogICAg
ICAgICBtX3N0b3JhZ2VBcmVhU3luYyA9IFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRlKG1fc3RvcmFn
ZVN5bmNNYW5hZ2VyLmdldCgpLCAqdGhpcywgbV9zZWN1cml0eU9yaWdpbi5kYXRhYmFzZUlkZW50
aWZpZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmgKaW5kZXggNzQ4MDNhN2FhOWE4OTQ0OTUwZjVkZDVhZWJlYjc2MzI4MzgxZTJkNy4uM2FiM2Jj
NTU2NTQ0N2YzNjBjYWUwZWQ3OTQ5ODZmNGM0MWY4NTRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5j
bHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N0
b3JhZ2VBcmVhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlTWFwLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgpAQCAtODUsNyArODYsNyBAQCBwcml2YXRlOgogCiAgICAgV2ViQ29yZTo6U3Rv
cmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKICAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEg
bV9zZWN1cml0eU9yaWdpbjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZU1hcD4gbV9zdG9y
YWdlTWFwOworICAgIFdlYkNvcmU6OlN0b3JhZ2VNYXAgbV9zdG9yYWdlTWFwOwogCiAgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhU3luYz4gbV9zdG9yYWdlQXJlYVN5bmM7CiAgICAgUmVmUHRyPFdlYkNv
cmU6OlN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9zdG9yYWdlU3luY01hbmFnZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427182</attachid>
            <date>2021-04-27 12:28:29 -0700</date>
            <delta_ts>2021-04-27 13:55:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225108-20210427122828.patch</filename>
            <type>text/plain</type>
            <size>30540</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NjUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNkMjg3NGNlZjE1ZmU2
N2JiY2E0OGYxNWJjZTQ4Nzc3NzMzYTIxYy4uZDU3NDIyNGEyNzI1ZmU2OTE5MjI0NmJmZjU0MDMx
MzhlMWQ4OWQzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIxLTA0LTI3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ29weS1vbi13cml0ZSBzZW1h
bnRpY3Mgc2hvdWxkIGJlIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBTdG9y
YWdlTWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjUxMDgKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAg
IEluc3RlYWQgb2YgbWFraW5nIHRoZSBTdG9yYWdlTWFwIFJlZkNvdW50ZWQgYW5kIHJlcXVpcmlu
ZyB0aGUgY2xpZW50IHRvIHBvdGVudGlhbGx5CisgICAgICAgIHJlcGxhY2UgaXRzIFN0b3JhZ2VN
YXAgd2hlbmV2ZXIgaXQgY2FsbHMgZnVuY3Rpb25zIHRoYXQgbW9kaWZ5IHRoZSBTdG9yYWdlTWFw
LCB0aGUKKyAgICAgICAgY29weS1vbi13cml0ZSBzZW1hbnRpY3MgaW4gbm93IGFuIGludGVybmFs
IGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBTdG9yYWdlTWFwLgorCisgICAgICAgIFRvIGFjaGll
dmUgdGhpcywgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHdlcmUgbWFkZToKKyAgICAgICAgLSBTdG9y
YWdlTWFwIGlzIG5vIGxvbmdlciBSZWZDb3VudGVkLiBJbnN0ZWFkLCBpdCBoYXMgYW4gaW50ZXJu
YWwgSW1wbCBkYXRhIG1lbWJlcgorICAgICAgICAgIHRoYXQgaXMgUmVmQ291bnRlZC4KKyAgICAg
ICAgLSBUaGUgaW50ZXJuYWwgSW1wbCBkYXRhIG1lbWJlciBpcyB0aGUgb25lIHRoYXQgZ2V0cyBj
b3BpZWQgb24gd3JpdGUuCisgICAgICAgIC0gRnVuY3Rpb25zIHRoYXQgbW9kaWZ5IHRoZSBTdG9y
YWdlTWFwIG5vIGxvbmdlciBuZWVkIHRvIHJldHVybiBhIFN0b3JhZ2VNYXAuCisgICAgICAgIC0g
QWRkIGEgY2xlYXIoKSBmdW5jdGlvbiBmb3IgY29udmVuaWVuY2UuCisKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6U3RvcmFn
ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTWFwOjppbnZhbGlkYXRlSXRlcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6c2V0SXRlcmF0b3JUb0luZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlTWFwOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6Z2V0
SXRlbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTWFwOjpzZXRJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnNldEl0ZW1JZ25vcmluZ1F1b3RhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VNYXA6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZU1hcDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6Y29udGFp
bnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6aW1wb3J0SXRlbXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZU1hcDo6SW1wbDo6Y29weSBjb25zdCk6CisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTWFwOjpp
dGVtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlTWFwOjpJbXBsOjpjcmVhdGUp
OgorCiAyMDIxLTA0LTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAg
ICAgRG9uJ3Qga2VlcCBsb2NhbCBzdG9yYWdlIGRhdGEgaW4gbWVtb3J5IGluIHRoZSBOZXR3b3Jr
UHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCA5NTVjOGM3MWNmN2IxZDQxZGIxMmY3MWNhOGZiZDBlNWYyODRj
NTFlLi44Y2VjMTExMDA1ODg4YTIyNDcxZjM1N2VhMTE5ZTZjMTFjNGEwOWM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIxIEBACisyMDIxLTA0LTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CisKKyAgICAgICAgQ29weS1vbi13cml0ZSBzZW1hbnRpY3Mgc2hvdWxkIGJlIGFuIGludGVy
bmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBTdG9yYWdlTWFwCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUxMDgKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIFVwZGF0ZSBTdG9yYWdlQXJlYSBkdWUg
dG8gU3RvcmFnZU1hcCBBUEkgY2hhbmdlcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6
U3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYTo6c2V0SXRlbSk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktp
dDo6U3RvcmFnZUFyZWE6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6Oml0
ZW1zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWE6Om9wZW5EYXRhYmFzZUFu
ZEltcG9ydEl0ZW1zSWZOZWVkZWQgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWEuaDoKKwogMjAyMS0wNC0yNyAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERvbid0IGtlZXAgbG9jYWwgc3RvcmFnZSBkYXRhIGlu
IG1lbW9yeSBpbiB0aGUgTmV0d29ya1Byb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggYWY3
M2I4ZjA5YWE0YWFjZjViYTc5MjhmN2M5YjZiOTY0MWIyNGFiNC4uODBmYTU3ZGQ3OWIwZGZiMWUy
NTliZTkwOWMyMGEzZDc2NGYxOTZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NiBAQAorMjAyMS0wNC0yNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIENvcHktb24td3JpdGUgc2VtYW50aWNzIHNob3VsZCBiZSBhbiBpbnRlcm5hbCBpbXBsZW1l
bnRhdGlvbiBkZXRhaWwgb2YgU3RvcmFnZU1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBD
aHJpc3RlbnNlbi4KKworICAgICAgICBVcGRhdGUgU3RvcmFnZUFyZWFJbXBsIGR1ZSB0byBTdG9y
YWdlTWFwIEFQSSBjaGFuZ2VzLgorCisgICAgICAgICogU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbCk6
CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YktpdDo6U3RvcmFnZUFyZWFJbXBsOjprZXkpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJl
YUltcGw6Oml0ZW0pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OnJlbW92ZUl0ZW0pOgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZUFyZWFJbXBsOjpjb250YWlucyk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1w
bDo6aW1wb3J0SXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OmNsZWFy
Rm9yT3JpZ2luRGVsZXRpb24pOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OnNl
c3Npb25DaGFuZ2VkKToKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorCiAy
MDIxLTA0LTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRG9u
J3Qga2VlcCBsb2NhbCBzdG9yYWdlIGRhdGEgaW4gbWVtb3J5IGluIHRoZSBOZXR3b3JrUHJvY2Vz
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAKaW5kZXggYTg0MTQ5ZTBmMTM3ZDE5
NWVmNTk0ZmE2YzkyZDBlMGExZjhkMzQ3My4uNzJhMTExOWRmZWRjZDE1YWNhODEwNzQzYTgwMWM3
NWZlMTU0NDZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDI5ICsz
MCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTdG9yYWdlTWFwPiBTdG9yYWdl
TWFwOjpjcmVhdGUodW5zaWduZWQgcXVvdGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3RvcmFnZU1hcChxdW90YSkpOwotfQotCiBTdG9yYWdlTWFwOjpTdG9yYWdlTWFwKHVuc2lnbmVk
IHF1b3RhKQotICAgIDogbV9pdGVyYXRvcihtX21hcC5lbmQoKSkKLSAgICAsIG1fcXVvdGFTaXpl
KHF1b3RhKSAgLy8gcXVvdGEgbWVhc3VyZWQgaW4gYnl0ZXMKKyAgICA6IG1faW1wbChJbXBsOjpj
cmVhdGUoKSkKKyAgICAsIG1fcXVvdGFTaXplKHF1b3RhKSAvLyBxdW90YSBtZWFzdXJlZCBpbiBi
eXRlcwogewogfQogCi1SZWY8U3RvcmFnZU1hcD4gU3RvcmFnZU1hcDo6Y29weSgpCi17Ci0gICAg
UmVmPFN0b3JhZ2VNYXA+IG5ld01hcCA9IGNyZWF0ZShtX3F1b3RhU2l6ZSk7Ci0gICAgbmV3TWFw
LT5tX21hcCA9IG1fbWFwOwotICAgIG5ld01hcC0+bV9jdXJyZW50TGVuZ3RoID0gbV9jdXJyZW50
TGVuZ3RoOwotICAgIHJldHVybiBuZXdNYXA7Ci19Ci0KIHZvaWQgU3RvcmFnZU1hcDo6aW52YWxp
ZGF0ZUl0ZXJhdG9yKCkKIHsKLSAgICBtX2l0ZXJhdG9yID0gbV9tYXAuZW5kKCk7Ci0gICAgbV9p
dGVyYXRvckluZGV4ID0gVUlOVF9NQVg7CisgICAgbV9pbXBsLT5pdGVyYXRvciA9IG1faW1wbC0+
bWFwLmVuZCgpOworICAgIG1faW1wbC0+aXRlcmF0b3JJbmRleCA9IFVJTlRfTUFYOwogfQogCiB2
b2lkIFN0b3JhZ2VNYXA6OnNldEl0ZXJhdG9yVG9JbmRleCh1bnNpZ25lZCBpbmRleCkKQEAgLTYy
LDI1ICs0OSwyNSBAQCB2b2lkIFN0b3JhZ2VNYXA6OnNldEl0ZXJhdG9yVG9JbmRleCh1bnNpZ25l
ZCBpbmRleCkKICAgICAvLyBjYW4gdGFrZSB0aGUgc2hvcnRlc3Qgcm91dGUuCiAgICAgLy8gVW50
aWwgdGhhdCBtZWNoYW5pc20gaXMgYXZhaWxhYmxlLCB3ZSdsbCBhbHdheXMgaW5jcmVtZW50IG91
ciBpdGVyYXRvciBmcm9tIGJlZ2luKCkgb3IgY3VycmVudC4KIAotICAgIGlmIChtX2l0ZXJhdG9y
SW5kZXggPT0gaW5kZXgpCisgICAgaWYgKG1faW1wbC0+aXRlcmF0b3JJbmRleCA9PSBpbmRleCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGluZGV4IDwgbV9pdGVyYXRvckluZGV4KSB7Ci0g
ICAgICAgIG1faXRlcmF0b3JJbmRleCA9IDA7Ci0gICAgICAgIG1faXRlcmF0b3IgPSBtX21hcC5i
ZWdpbigpOwotICAgICAgICBBU1NFUlQobV9pdGVyYXRvciAhPSBtX21hcC5lbmQoKSk7CisgICAg
aWYgKGluZGV4IDwgbV9pbXBsLT5pdGVyYXRvckluZGV4KSB7CisgICAgICAgIG1faW1wbC0+aXRl
cmF0b3JJbmRleCA9IDA7CisgICAgICAgIG1faW1wbC0+aXRlcmF0b3IgPSBtX2ltcGwtPm1hcC5i
ZWdpbigpOworICAgICAgICBBU1NFUlQobV9pbXBsLT5pdGVyYXRvciAhPSBtX2ltcGwtPm1hcC5l
bmQoKSk7CiAgICAgfQogCi0gICAgd2hpbGUgKG1faXRlcmF0b3JJbmRleCA8IGluZGV4KSB7Ci0g
ICAgICAgICsrbV9pdGVyYXRvckluZGV4OwotICAgICAgICArK21faXRlcmF0b3I7Ci0gICAgICAg
IEFTU0VSVChtX2l0ZXJhdG9yICE9IG1fbWFwLmVuZCgpKTsKKyAgICB3aGlsZSAobV9pbXBsLT5p
dGVyYXRvckluZGV4IDwgaW5kZXgpIHsKKyAgICAgICAgKyttX2ltcGwtPml0ZXJhdG9ySW5kZXg7
CisgICAgICAgICsrbV9pbXBsLT5pdGVyYXRvcjsKKyAgICAgICAgQVNTRVJUKG1faW1wbC0+aXRl
cmF0b3IgIT0gbV9pbXBsLT5tYXAuZW5kKCkpOwogICAgIH0KIH0KIAogdW5zaWduZWQgU3RvcmFn
ZU1hcDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tYXAuc2l6ZSgpOworICAgIHJl
dHVybiBtX2ltcGwtPm1hcC5zaXplKCk7CiB9CiAKIFN0cmluZyBTdG9yYWdlTWFwOjprZXkodW5z
aWduZWQgaW5kZXgpCkBAIC04OSwzMyArNzYsMjkgQEAgU3RyaW5nIFN0b3JhZ2VNYXA6OmtleSh1
bnNpZ25lZCBpbmRleCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgc2V0SXRlcmF0
b3JUb0luZGV4KGluZGV4KTsKLSAgICByZXR1cm4gbV9pdGVyYXRvci0+a2V5OworICAgIHJldHVy
biBtX2ltcGwtPml0ZXJhdG9yLT5rZXk7CiB9CiAKIFN0cmluZyBTdG9yYWdlTWFwOjpnZXRJdGVt
KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogewotICAgIHJldHVybiBtX21hcC5nZXQoa2V5KTsK
KyAgICByZXR1cm4gbV9pbXBsLT5tYXAuZ2V0KGtleSk7CiB9CiAKLVJlZlB0cjxTdG9yYWdlTWFw
PiBTdG9yYWdlTWFwOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBTdHJpbmcmIG9sZFZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKK3ZvaWQgU3RvcmFn
ZU1hcDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgU3Ry
aW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCF2YWx1
ZS5pc051bGwoKSk7CiAgICAgcXVvdGFFeGNlcHRpb24gPSBmYWxzZTsKIAotICAgIC8vIEltcGxl
bWVudCBjb3B5LW9uLXdyaXRlIHNlbWFudGljcyBoZXJlLiAgV2UncmUgZ3VhcmFudGVlZCB0aGF0
IHRoZSBvbmx5IHJlZnMgb2YgU3RvcmFnZU1hcHMgYmVsb25nIHRvIFN0b3JhZ2Ugb2JqZWN0cwot
ICAgIC8vIHNvIGlmIG1vcmUgdGhhbiBvbmUgU3RvcmFnZSBvYmplY3QgcmVmcyB0aGlzIG1hcCwg
Y29weSBpdCBiZWZvcmUgbXV0YXRpbmcgaXQuCi0gICAgaWYgKHJlZkNvdW50KCkgPiAxKSB7Ci0g
ICAgICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBuZXdTdG9yYWdlTWFwID0gY29weSgpOwotICAgICAg
ICBuZXdTdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90YUV4Y2Vw
dGlvbik7Ci0gICAgICAgIHJldHVybiBuZXdTdG9yYWdlTWFwOwotICAgIH0KKyAgICAvLyBJbXBs
ZW1lbnQgY29weS1vbi13cml0ZSBzZW1hbnRpY3MuCisgICAgaWYgKG1faW1wbC0+cmVmQ291bnQo
KSA+IDEpCisgICAgICAgIG1faW1wbCA9IG1faW1wbC0+Y29weSgpOwogCiAgICAgLy8gUXVvdGEg
dHJhY2tpbmcuICBUaGlzIGlzIGRvbmUgaW4gYSBjb3VwbGUgb2Ygc3RlcHMgdG8ga2VlcCB0aGUg
b3ZlcmZsb3cgdHJhY2tpbmcgc2ltcGxlLgotICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IG1fY3Vy
cmVudExlbmd0aDsKKyAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSBtX2ltcGwtPmN1cnJlbnRMZW5n
dGg7CiAgICAgYm9vbCBvdmVyZmxvdyA9IG5ld0xlbmd0aCArIHZhbHVlLmxlbmd0aCgpIDwgbmV3
TGVuZ3RoOwogICAgIG5ld0xlbmd0aCArPSB2YWx1ZS5sZW5ndGgoKTsKIAotICAgIG9sZFZhbHVl
ID0gbV9tYXAuZ2V0KGtleSk7CisgICAgb2xkVmFsdWUgPSBtX2ltcGwtPm1hcC5nZXQoa2V5KTsK
ICAgICBvdmVyZmxvdyB8PSBuZXdMZW5ndGggLSBvbGRWYWx1ZS5sZW5ndGgoKSA+IG5ld0xlbmd0
aDsKICAgICBuZXdMZW5ndGggLT0gb2xkVmFsdWUubGVuZ3RoKCk7CiAKQEAgLTEyNyw3OSArMTEw
LDY2IEBAIFJlZlB0cjxTdG9yYWdlTWFwPiBTdG9yYWdlTWFwOjpzZXRJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBTCiAgICAgYm9vbCBvdmVyUXVvdGEgPSBuZXdM
ZW5ndGggPiBtX3F1b3RhU2l6ZSAvIHNpemVvZihVQ2hhcik7CiAgICAgaWYgKG1fcXVvdGFTaXpl
ICE9IG5vUXVvdGEgJiYgKG92ZXJmbG93IHx8IG92ZXJRdW90YSkpIHsKICAgICAgICAgcXVvdGFF
eGNlcHRpb24gPSB0cnVlOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBtX2N1cnJlbnRMZW5ndGggPSBuZXdMZW5ndGg7CisgICAgbV9pbXBsLT5j
dXJyZW50TGVuZ3RoID0gbmV3TGVuZ3RoOwogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46
OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX21hcC5hZGQoa2V5LCB2YWx1ZSk7CisgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz46OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2ltcGwtPm1hcC5hZGQo
a2V5LCB2YWx1ZSk7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHZhbHVlOwogCiAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
KCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmUHRyPFN0b3JhZ2VNYXA+IFN0b3Jh
Z2VNYXA6OnNldEl0ZW1JZ25vcmluZ1F1b3RhKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordm9pZCBTdG9yYWdlTWFwOjpzZXRJdGVtSWdub3JpbmdRdW90YShjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBTZXRGb3JTY29wZTx1bnNp
Z25lZD4gcXVvdGFTaXplQ2hhbmdlKG1fcXVvdGFTaXplLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bm9RdW90YSkpOwogCiAgICAgU3RyaW5nIG9sZFZhbHVlOwogICAgIGJvb2wgcXVvdGFFeGNlcHRp
b247Ci0KLSAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbWFwID0gc2V0SXRlbShrZXksIHZhbHVlLCBv
bGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24pOworICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFs
dWUsIHF1b3RhRXhjZXB0aW9uKTsKICAgICBBU1NFUlQoIXF1b3RhRXhjZXB0aW9uKTsKLQotICAg
IHJldHVybiBtYXA7CiB9CiAKLVJlZlB0cjxTdG9yYWdlTWFwPiBTdG9yYWdlTWFwOjpyZW1vdmVJ
dGVtKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIG9sZFZhbHVlKQordm9pZCBTdG9yYWdlTWFw
OjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIG9sZFZhbHVlKQogewotICAg
IC8vIEltcGxlbWVudCBjb3B5LW9uLXdyaXRlIHNlbWFudGljcyBoZXJlLiAgV2UncmUgZ3VhcmFu
dGVlZCB0aGF0IHRoZSBvbmx5IHJlZnMgb2YgU3RvcmFnZU1hcHMgYmVsb25nIHRvIFN0b3JhZ2Ug
b2JqZWN0cwotICAgIC8vIHNvIGlmIG1vcmUgdGhhbiBvbmUgU3RvcmFnZSBvYmplY3QgcmVmcyB0
aGlzIG1hcCwgY29weSBpdCBiZWZvcmUgbXV0YXRpbmcgaXQuCi0gICAgaWYgKHJlZkNvdW50KCkg
PiAxKSB7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBuZXdTdG9yYWdlID0gY29weSgpOwot
ICAgICAgICBuZXdTdG9yYWdlLT5yZW1vdmVJdGVtKGtleSwgb2xkVmFsdWUpOwotICAgICAgICBy
ZXR1cm4gbmV3U3RvcmFnZTsKLSAgICB9CisgICAgLy8gSW1wbGVtZW50IGNvcHktb24td3JpdGUg
c2VtYW50aWNzLgorICAgIGlmIChtX2ltcGwtPnJlZkNvdW50KCkgPiAxKQorICAgICAgICBtX2lt
cGwgPSBtX2ltcGwtPmNvcHkoKTsKIAotICAgIG9sZFZhbHVlID0gbV9tYXAudGFrZShrZXkpOwor
ICAgIG9sZFZhbHVlID0gbV9pbXBsLT5tYXAudGFrZShrZXkpOwogICAgIGlmICghb2xkVmFsdWUu
aXNOdWxsKCkpIHsKICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9yKCk7Ci0gICAgICAgIEFTU0VS
VChtX2N1cnJlbnRMZW5ndGggLSBrZXkubGVuZ3RoKCkgPD0gbV9jdXJyZW50TGVuZ3RoKTsKLSAg
ICAgICAgbV9jdXJyZW50TGVuZ3RoIC09IGtleS5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKG1f
aW1wbC0+Y3VycmVudExlbmd0aCAtIGtleS5sZW5ndGgoKSA8PSBtX2ltcGwtPmN1cnJlbnRMZW5n
dGgpOworICAgICAgICBtX2ltcGwtPmN1cnJlbnRMZW5ndGggLT0ga2V5Lmxlbmd0aCgpOwogICAg
IH0KLSAgICBBU1NFUlQobV9jdXJyZW50TGVuZ3RoIC0gb2xkVmFsdWUubGVuZ3RoKCkgPD0gbV9j
dXJyZW50TGVuZ3RoKTsKLSAgICBtX2N1cnJlbnRMZW5ndGggLT0gb2xkVmFsdWUubGVuZ3RoKCk7
Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBBU1NFUlQobV9pbXBsLT5jdXJyZW50TGVuZ3Ro
IC0gb2xkVmFsdWUubGVuZ3RoKCkgPD0gbV9pbXBsLT5jdXJyZW50TGVuZ3RoKTsKKyAgICBtX2lt
cGwtPmN1cnJlbnRMZW5ndGggLT0gb2xkVmFsdWUubGVuZ3RoKCk7CiB9CiAKLVJlZlB0cjxTdG9y
YWdlTWFwPiBTdG9yYWdlTWFwOjpjbGVhcigpCit2b2lkIFN0b3JhZ2VNYXA6OmNsZWFyKCkKIHsK
LSAgICAvLyBJbXBsZW1lbnQgY29weS1vbi13cml0ZSBzZW1hbnRpY3MgaGVyZS4gV2UncmUgZ3Vh
cmFudGVlZCB0aGF0IHRoZSBvbmx5IHJlZnMgb2YgU3RvcmFnZU1hcHMgYmVsb25nIHRvIFN0b3Jh
Z2Ugb2JqZWN0cwotICAgIC8vIHNvIGlmIG1vcmUgdGhhbiBvbmUgU3RvcmFnZSBvYmplY3QgcmVm
cyB0aGlzIG1hcCwgY29weSBpdCBiZWZvcmUgbXV0YXRpbmcgaXQuCi0gICAgaWYgKHJlZkNvdW50
KCkgPiAxICYmICFtX21hcC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdG9yYWdlTWFwOjpj
cmVhdGUobV9xdW90YVNpemUpOwotCi0gICAgbV9tYXAuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRM
ZW5ndGggPSAwOwotICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChtX2ltcGwtPnJlZkNvdW50
KCkgPiAxICYmIGxlbmd0aCgpKSB7CisgICAgICAgIG1faW1wbCA9IEltcGw6OmNyZWF0ZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW1wbC0+bWFwLmNsZWFyKCk7CisgICAgbV9p
bXBsLT5jdXJyZW50TGVuZ3RoID0gMDsKIH0KIAogYm9vbCBTdG9yYWdlTWFwOjpjb250YWlucyhj
b25zdCBTdHJpbmcmIGtleSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tYXAuY29udGFpbnMoa2V5
KTsKKyAgICByZXR1cm4gbV9pbXBsLT5tYXAuY29udGFpbnMoa2V5KTsKIH0KIAogdm9pZCBTdG9y
YWdlTWFwOjppbXBvcnRJdGVtcyhIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGl0ZW1zKQogewot
ICAgIGlmIChtX21hcC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9pbXBsLT5tYXAuaXNFbXB0eSgp
KSB7CiAgICAgICAgIC8vIEZhc3QgcGF0aC4KLSAgICAgICAgbV9tYXAgPSBXVEZNb3ZlKGl0ZW1z
KTsKLSAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9tYXApIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX2N1cnJlbnRMZW5ndGggKyBwYWlyLmtleS5sZW5ndGgoKSArIHBhaXIudmFsdWUubGVuZ3Ro
KCkgPj0gbV9jdXJyZW50TGVuZ3RoKTsKLSAgICAgICAgICAgIG1fY3VycmVudExlbmd0aCArPSAo
cGFpci5rZXkubGVuZ3RoKCkgKyBwYWlyLnZhbHVlLmxlbmd0aCgpKTsKKyAgICAgICAgbV9pbXBs
LT5tYXAgPSBXVEZNb3ZlKGl0ZW1zKTsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbXBs
LT5tYXApIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2ltcGwtPmN1cnJlbnRMZW5ndGggKyBwYWly
LmtleS5sZW5ndGgoKSArIHBhaXIudmFsdWUubGVuZ3RoKCkgPj0gbV9pbXBsLT5jdXJyZW50TGVu
Z3RoKTsKKyAgICAgICAgICAgIG1faW1wbC0+Y3VycmVudExlbmd0aCArPSAocGFpci5rZXkubGVu
Z3RoKCkgKyBwYWlyLnZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMjA4LDEyICsxNzgsMjAgQEAgdm9pZCBTdG9yYWdlTWFwOjppbXBvcnRJdGVt
cyhIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGl0ZW1zKQogICAgICAgICBhdXRvJiBrZXkgPSBp
dGVtLmtleTsKICAgICAgICAgYXV0byYgdmFsdWUgPSBpdGVtLnZhbHVlOwogCi0gICAgICAgIEFT
U0VSVChtX2N1cnJlbnRMZW5ndGggKyBrZXkubGVuZ3RoKCkgKyB2YWx1ZS5sZW5ndGgoKSA+PSBt
X2N1cnJlbnRMZW5ndGgpOwotICAgICAgICBtX2N1cnJlbnRMZW5ndGggKz0gKGtleS5sZW5ndGgo
KSArIHZhbHVlLmxlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJUKG1faW1wbC0+Y3VycmVudExlbmd0
aCArIGtleS5sZW5ndGgoKSArIHZhbHVlLmxlbmd0aCgpID49IG1faW1wbC0+Y3VycmVudExlbmd0
aCk7CisgICAgICAgIG1faW1wbC0+Y3VycmVudExlbmd0aCArPSAoa2V5Lmxlbmd0aCgpICsgdmFs
dWUubGVuZ3RoKCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byByZXN1bHQgPSBtX21hcC5hZGQo
V1RGTW92ZShrZXkpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9p
bXBsLT5tYXAuYWRkKFdURk1vdmUoa2V5KSwgV1RGTW92ZSh2YWx1ZSkpOwogICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOyAvLyBUcnVlIGlmIHRoZSBrZXkg
ZGlkbid0IGV4aXN0IHByZXZpb3VzbHkuCiAgICAgfQogfQogCitSZWY8U3RvcmFnZU1hcDo6SW1w
bD4gU3RvcmFnZU1hcDo6SW1wbDo6Y29weSgpIGNvbnN0Cit7CisgICAgYXV0byBjb3B5ID0gSW1w
bDo6Y3JlYXRlKCk7CisgICAgY29weS0+bWFwID0gbWFwOworICAgIGNvcHktPmN1cnJlbnRMZW5n
dGggPSBjdXJyZW50TGVuZ3RoOworICAgIHJldHVybiBjb3B5OworfQorCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZU1hcC5oCmluZGV4IDIyZTk3NWI5Y2ZkZjRlZWY3NjVmOTEyNzRlMTNkZmUw
OTZlMjgxOTguLjYzNjVkMDY0YWJiMmM4Nzk5MjRlMDQxYTlkODA4NTk3NTEwMzM5MDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDQxICszMiw1MiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFN0b3JhZ2VNYXAgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdl
TWFwPiB7CisvLyBUaGlzIGNsYXNzIHVzZXMgY29weS1vbi13cml0ZSBzZW1hbnRpY3MuCitjbGFz
cyBTdG9yYWdlTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICAvLyBRdW90YSBzaXplIG1lYXN1cmVkIGluIGJ5dGVzLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWY8U3RvcmFnZU1hcD4gY3JlYXRlKHVuc2lnbmVkIHF1b3RhU2l6ZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgZXhwbGljaXQgU3RvcmFnZU1hcCh1bnNpZ25lZCBxdW90YVNpemUpOwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIGdldEl0ZW0oY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPFN0b3JhZ2VNYXA+IHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUsIFN0cmluZyYgb2xkVmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8U3RvcmFnZU1hcD4gc2V0SXRlbUlnbm9yaW5nUXVvdGEoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxTdG9yYWdlTWFwPiByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYsIFN0cmluZyYgb2xkVmFs
dWUpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTdG9yYWdlTWFwPiBjbGVhcigpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgU3RyaW5nJiBvbGRWYWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXRlbUlnbm9yaW5nUXVvdGEoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3Zl
SXRlbShjb25zdCBTdHJpbmcmLCBTdHJpbmcmIG9sZFZhbHVlKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNsZWFyKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zKGNvbnN0
IFN0cmluZyYga2V5KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW1wb3J0SXRl
bXMoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJik7Ci0gICAgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4mIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9tYXA7IH0KKyAgICBjb25zdCBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1hcDsg
fQogCiAgICAgdW5zaWduZWQgcXVvdGEoKSBjb25zdCB7IHJldHVybiBtX3F1b3RhU2l6ZTsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmPFN0b3JhZ2VNYXA+IGNvcHkoKTsKKyAgICBib29sIGlz
U2hhcmVkKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbC0+aGFzT25lUmVmKCk7IH0KIAotICAgIHN0
YXRpYyBjb25zdCBjb25zdGV4cHIgdW5zaWduZWQgbm9RdW90YSA9IFVJTlRfTUFYOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbm9RdW90YSA9IFVJTlRfTUFYOwogCiBwcml2YXRlOgot
ICAgIGV4cGxpY2l0IFN0b3JhZ2VNYXAodW5zaWduZWQgcXVvdGEpOwogICAgIHZvaWQgaW52YWxp
ZGF0ZUl0ZXJhdG9yKCk7CiAgICAgdm9pZCBzZXRJdGVyYXRvclRvSW5kZXgodW5zaWduZWQpOwog
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9tYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46Oml0ZXJhdG9yIG1faXRlcmF0b3I7Ci0gICAgdW5zaWduZWQgbV9pdGVyYXRvcklu
ZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07CisgICAgc3RydWN0
IEltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxJbXBsPiB7CisgICAgICAgIHN0YXRpYyBSZWY8SW1w
bD4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SW1wbCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIG1fcXVvdGFTaXplOyAvLyBNZWFzdXJl
ZCBpbiBieXRlcy4KLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRMZW5ndGggeyAwIH07IC8vIE1lYXN1
cmVkIGluIFVDaGFycy4KKyAgICAgICAgUmVmPEltcGw+IGNvcHkoKSBjb25zdDsKKworICAgICAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXA7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+OjppdGVyYXRvciBpdGVyYXRvciB7IG1hcC5lbmQoKSB9OworICAgICAgICB1bnNpZ25l
ZCBpdGVyYXRvckluZGV4IHsgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07
CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggeyAwIH07IC8vIE1lYXN1cmVkIGluIFVD
aGFycy4KKyAgICB9OworCisgICAgUmVmPEltcGw+IG1faW1wbDsKKyAgICB1bnNpZ25lZCBtX3F1
b3RhU2l6ZSB7IG5vUXVvdGEgfTsgLy8gTWVhc3VyZWQgaW4gYnl0ZXMuCiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAppbmRleCBhOTQxNmI1MTNlMWIwMTYyYTk4N2Fk
NTlhYmYyMWE1NTg5MDJlODZjLi5iNzNmMTQzNGZiZmMxZDhhZGY1MzViZTk5M2NlMDM3MmQ1Y2M4
OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlQXJlYS5jcHAKQEAgLTMwLDggKzMwLDYgQEAKICNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZU1hbmFnZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ2
LDcgKzQ0LDcgQEAgU3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKExvY2FsU3RvcmFnZU5hbWVzcGFj
ZSogbG9jYWxTdG9yYWdlTmFtZXNwYWNlLCBjb25zdCBTZWMKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBpZiAoaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgbV9zdG9yYWdl
TWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKKyAgICAgICAgbV9zZXNz
aW9uU3RvcmFnZU1hcCA9IG1ha2VVbmlxdWU8U3RvcmFnZU1hcD4obV9xdW90YUluQnl0ZXMpOwog
fQogCiBTdG9yYWdlQXJlYTo6flN0b3JhZ2VBcmVhKCkKQEAgLTkyLDcgKzkwLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPFN0b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y2xvbmUoKSBjb25zdAogICAgIEFT
U0VSVCghbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2UpOwogCiAgICAgYXV0byBzdG9yYWdlQXJlYSA9
IG1ha2VVbmlxdWU8U3RvcmFnZUFyZWE+KG51bGxwdHIsIG1fc2VjdXJpdHlPcmlnaW4sIG1fcXVv
dGFJbkJ5dGVzLCBtX3F1ZXVlLmNvcHlSZWYoKSk7Ci0gICAgc3RvcmFnZUFyZWEtPm1fc3RvcmFn
ZU1hcCA9IG1fc3RvcmFnZU1hcDsKKyAgICAqc3RvcmFnZUFyZWEtPm1fc2Vzc2lvblN0b3JhZ2VN
YXAgPSAqbV9zZXNzaW9uU3RvcmFnZU1hcDsKIAogICAgIHJldHVybiBzdG9yYWdlQXJlYTsKIH0K
QEAgLTEwMiwxMSArMTAwLDkgQEAgdm9pZCBTdG9yYWdlQXJlYTo6c2V0SXRlbShJUEM6OkNvbm5l
Y3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2VBcmUKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICBpZiAoaXNF
cGhlbWVyYWwoKSkgewotICAgICAgICBhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAt
PnNldEl0ZW0oa2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKLSAgICAgICAg
aWYgKG5ld1N0b3JhZ2VNYXApCi0gICAgICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5l
d1N0b3JhZ2VNYXApOwotICAgIH0gZWxzZQorICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAg
ICBtX3Nlc3Npb25TdG9yYWdlTWFwLT5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90
YUV4Y2VwdGlvbik7CisgICAgZWxzZQogICAgICAgICBlbnN1cmVEYXRhYmFzZSgpLnNldEl0ZW0o
a2V5LCB2YWx1ZSwgb2xkVmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKIAogICAgIGlmIChxdW90YUV4
Y2VwdGlvbikKQEAgLTEyMCwxMSArMTE2LDkgQEAgdm9pZCBTdG9yYWdlQXJlYTo6cmVtb3ZlSXRl
bShJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEIHNvdXJjZUNvbm5lY3Rpb24sIFN0b3JhZ2UKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAg
ICBpZiAoaXNFcGhlbWVyYWwoKSkgewotICAgICAgICBhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0
b3JhZ2VNYXAtPnJlbW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7Ci0gICAgICAgIGlmIChuZXdTdG9y
YWdlTWFwKQotICAgICAgICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFw
KTsKLSAgICB9IGVsc2UKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgbV9zZXNzaW9u
U3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKKyAgICBlbHNlCiAgICAgICAg
IGVuc3VyZURhdGFiYXNlKCkucmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKICAgICBpZiAob2xk
VmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzNywxMCArMTMxLDkgQEAgdm9p
ZCBTdG9yYWdlQXJlYTo6Y2xlYXIoSVBDOjpDb25uZWN0aW9uOjpVbmlxdWVJRCBzb3VyY2VDb25u
ZWN0aW9uLCBTdG9yYWdlQXJlYUkKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIGlmIChpc0VwaGVtZXJhbCgpKSB7Ci0gICAgICAgIGlmICghbV9zdG9yYWdlTWFwLT5sZW5n
dGgoKSkKKyAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlTWFwLT5sZW5ndGgoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFn
ZU1hcC0+Y2xlYXIoKSkKLSAgICAgICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3Rv
cmFnZU1hcCk7CisgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYXAtPmNsZWFyKCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKCFlbnN1cmVEYXRhYmFzZSgpLmNsZWFyKCkpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xNTMsNyArMTQ2LDcgQEAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU3Rv
cmFnZUFyZWE6Oml0ZW1zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKICAgICBpZiAoaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+
aXRlbXMoKTsKKyAgICAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2VNYXAtPml0ZW1zKCk7CiAK
ICAgICByZXR1cm4gZW5zdXJlRGF0YWJhc2UoKS5pdGVtcygpOwogfQpAQCAtMTYxLDEwICsxNTQs
OSBAQCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBTdG9yYWdlQXJlYTo6aXRlbXMoKSBjb25zdAog
dm9pZCBTdG9yYWdlQXJlYTo6Y2xlYXIoKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIGlmIChpc0VwaGVtZXJhbCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIG5ld1N0b3Jh
Z2VNYXAgPSBtX3N0b3JhZ2VNYXAtPmNsZWFyKCkpCi0gICAgICAgICAgICBtX3N0b3JhZ2VNYXAg
PSBXVEZNb3ZlKG5ld1N0b3JhZ2VNYXApOwotICAgIH0gZWxzZSB7CisgICAgaWYgKGlzRXBoZW1l
cmFsKCkpCisgICAgICAgIG1fc2Vzc2lvblN0b3JhZ2VNYXAtPmNsZWFyKCk7CisgICAgZWxzZSB7
CiAgICAgICAgIGlmIChtX2xvY2FsU3RvcmFnZURhdGFiYXNlKSB7CiAgICAgICAgICAgICBtX2xv
Y2FsU3RvcmFnZURhdGFiYXNlLT5jbG9zZSgpOwogICAgICAgICAgICAgbV9sb2NhbFN0b3JhZ2VE
YXRhYmFzZSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYS5oCmluZGV4IDg4MjE2OGU3YjQ1ZDFmYzliMzE0ZWQx
MzI0MDY3OGFlMGYyZWE4ZjAuLmI5Y2NhZTM0ODE1Nzg1MTBlZjhiNGFiZGY5NWI0ZTA1MWI4OGI4
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlQXJlYS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
dG9yYWdlTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgogCkBAIC04NCw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhIG1fc2VjdXJpdHlPcmlnaW47CiAgICAgdW5zaWduZWQgbV9xdW90YUluQnl0
ZXMgeyAwIH07CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZU1hcD4gbV9zdG9yYWdlTWFw
OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VNYXA+IG1fc2Vz
c2lvblN0b3JhZ2VNYXA7CiAgICAgSGFzaFNldDxJUEM6OkNvbm5lY3Rpb246OlVuaXF1ZUlEPiBt
X2V2ZW50TGlzdGVuZXJzOwogCiAgICAgSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5j
cHAKaW5kZXggMmVjM2RjOGJiMTY1ZGU1MmFjZDVjZTIyNWVhY2YzOTVmMGU3MzRhOC4uZWEwZmRj
MWQ1MjY3NWFiYTI2MGU2OTYyMGU3ZjE3Yzg2OGE0ZDRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcApAQCAtODEs
NyArODEsNyBAQCBTdHJpbmcgU3RvcmFnZUFyZWFNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkp
CiB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFn
ZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pCiB7CiAgICAgYXV0byYgbWFwID0gZW5zdXJlTWFw
KCk7Ci0gICAgQVNTRVJUKG1hcC5oYXNPbmVSZWYoKSk7CisgICAgQVNTRVJUKCFtYXAuaXNTaGFy
ZWQoKSk7CiAKICAgICBTdHJpbmcgb2xkVmFsdWU7CiAgICAgcXVvdGFFeGNlcHRpb24gPSBmYWxz
ZTsKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKEZyYW1l
KiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjbwogdm9pZCBTdG9y
YWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3Jh
Z2VBcmVhSW1wbCogc291cmNlQXJlYSwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgYXV0byYg
bWFwID0gZW5zdXJlTWFwKCk7Ci0gICAgQVNTRVJUKG1hcC5oYXNPbmVSZWYoKSk7CisgICAgQVNT
RVJUKCFtYXAuaXNTaGFyZWQoKSk7CiAKICAgICBTdHJpbmcgb2xkVmFsdWU7CiAgICAgbWFwLnJl
bW92ZUl0ZW0oa2V5LCBvbGRWYWx1ZSk7CkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBTdG9yYWdl
QXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUlt
cGwqIHNvdXJjZUEKICAgICByZXNldFZhbHVlcygpOwogCiAgICAgbV9oYXNQZW5kaW5nQ2xlYXIg
PSB0cnVlOwotICAgIG1fbWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsK
KyAgICBtX21hcCA9IG1ha2VVbmlxdWU8U3RvcmFnZU1hcD4obV9xdW90YUluQnl0ZXMpOwogCiAg
ICAgaWYgKG1fbWFwSUQpCiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpTdG9y
YWdlTWFuYWdlclNldDo6Q2xlYXIoKm1fbWFwSUQsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwg
bV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwg
MCk7CkBAIC0xNTMsNyArMTUzLDcgQEAgU3RvcmFnZU1hcCYgU3RvcmFnZUFyZWFNYXA6OmVuc3Vy
ZU1hcCgpCiAgICAgY29ubmVjdCgpOwogCiAgICAgaWYgKCFtX21hcCkgewotICAgICAgICBtX21h
cCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZShtX3F1b3RhSW5CeXRlcyk7CisgICAgICAgIG1fbWFwID0g
bWFrZVVuaXF1ZTxTdG9yYWdlTWFwPihtX3F1b3RhSW5CeXRlcyk7CiAKICAgICAgICAgaWYgKG1f
bWFwSUQpIHsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gdXNlIGEgSVBDOjpVbmJvdW5kZWRT
eW5jaHJvbm91c0lQQ1Njb3BlIHRvIHByZXZlbnQgVUlQcm9jZXNzIGhhbmdzIGluIGNhc2Ugd2Ug
cmVjZWl2ZSBhIHN5bmNocm9ub3VzIElQQyBmcm9tIHRoZSBVSVByb2Nlc3Mgd2hpbGUgd2UncmUg
d2FpdGluZyBmb3IgYSByZXNwb25zZQpAQCAtMjE4LDcgKzIxOCw3IEBAIGJvb2wgU3RvcmFnZUFy
ZWFNYXA6OnNob3VsZEFwcGx5Q2hhbmdlRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAog
CiB2b2lkIFN0b3JhZ2VBcmVhTWFwOjphcHBseUNoYW5nZShjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiBuZXdWYWx1ZSkKIHsKLSAgICBBU1NFUlQoIW1fbWFwIHx8IG1fbWFwLT5oYXNP
bmVSZWYoKSk7CisgICAgQVNTRVJUKCFtX21hcCB8fCAhbV9tYXAtPmlzU2hhcmVkKCkpOwogCiAg
ICAgLy8gVGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNsZWFyIHBlbmRpbmcgd2UgZG9uJ3Qgd2FudCB0
byBhcHBseSBhbnkgY2hhbmdlcyB1bnRpbCB3ZSBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgRGlkQ2xl
YXIgbWVzc2FnZXMuCiAgICAgaWYgKG1faGFzUGVuZGluZ0NsZWFyKQpAQCAtMjI2LDcgKzIyNiw3
IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmFwcGx5Q2hhbmdlKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlKQogCiAgICAgaWYgKCFrZXkpIHsKICAgICAgICAgLy8gQSBu
dWxsIGtleSBtZWFucyBjbGVhci4KLSAgICAgICAgYXV0byBuZXdNYXAgPSBTdG9yYWdlTWFwOjpj
cmVhdGUobV9xdW90YUluQnl0ZXMpOworICAgICAgICBhdXRvIG5ld01hcCA9IG1ha2VVbmlxdWU8
U3RvcmFnZU1hcD4obV9xdW90YUluQnl0ZXMpOwogCiAgICAgICAgIC8vIEFueSBjaGFuZ2VzIHRo
YXQgd2VyZSBtYWRlIGxvY2FsbHkgYWZ0ZXIgdGhlIGNsZWFyIG11c3Qgc3RpbGwgYmUga2VwdCBh
cm91bmQgaW4gdGhlIG5ldyBtYXAuCiAgICAgICAgIGZvciAoYXV0byYgY2hhbmdlIDogbV9wZW5k
aW5nVmFsdWVDaGFuZ2VzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuaAppbmRleCA3ZTY5YjI4NGYxMDRlNjNhY2IwZmVkYmNi
NGJhZjhmMzcwZDhlMjlkLi45ZjQ3YThmZTQ1MTUwMzQ0NzI4NDhiYTZhZjI4YmQ3MDllNmFiMWQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
QXJlYU1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VBcmVhTWFwLmgKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0b3JhZ2VOYW1l
c3BhY2VJbXBsJiBtX25hbWVzcGFjZTsKICAgICBSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+
IG1fc2VjdXJpdHlPcmlnaW47Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VNYXA+IG1fbWFw
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTdG9yYWdlTWFwPiBtX21hcDsKICAgICBP
cHRpb25hbDxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IG1fbWFwSUQ7CiAgICAgSGFzaENvdW50ZWRT
ZXQ8U3RyaW5nPiBtX3BlbmRpbmdWYWx1ZUNoYW5nZXM7CiAgICAgdWludDY0X3QgbV9jdXJyZW50
U2VlZCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVh
SW1wbC5jcHAKaW5kZXggOTZmOGZkMDZlNzFhMDg5MjMzNWNjZDEzMDI1NDZjYjY0MWFkZDg5YS4u
MGMxNjM1ZWU2MzA3YWY0NGQzNDQ2NmI0NGYxZjdmYTc3NzI5NWE4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNiBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nl
Y3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZU1hcC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU3RvcmFnZVR5cGUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC00OCwx
MyArNDcsMTIgQEAgU3RvcmFnZUFyZWFJbXBsOjp+U3RvcmFnZUFyZWFJbXBsKCkKIGlubGluZSBT
dG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwg
Y29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4sIFJlZlB0cjxTdG9yYWdlU3luY01hbmFn
ZXI+JiYgc3luY01hbmFnZXIsIHVuc2lnbmVkIHF1b3RhKQogICAgIDogbV9zdG9yYWdlVHlwZShz
dG9yYWdlVHlwZSkKICAgICAsIG1fc2VjdXJpdHlPcmlnaW4ob3JpZ2luKQotICAgICwgbV9zdG9y
YWdlTWFwKFN0b3JhZ2VNYXA6OmNyZWF0ZShxdW90YSkpCisgICAgLCBtX3N0b3JhZ2VNYXAocXVv
dGEpCiAgICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihXVEZNb3ZlKHN5bmNNYW5hZ2VyKSkKICAg
ICAsIG1fYWNjZXNzQ291bnQoMCkKICAgICAsIG1fY2xvc2VEYXRhYmFzZVRpbWVyKCp0aGlzLCAm
U3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOwogICAgIAogICAgIC8v
IEFjY2Vzc2luZyB0aGUgc2hhcmVkIGdsb2JhbCBTdG9yYWdlVHJhY2tlciB3aGVuIGEgU3RvcmFn
ZUFyZWEgaXMgY3JlYXRlZCAKICAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIHRyYWNrZXIgaXMgcHJv
cGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueW9uZSBhY3R1YWxseSBuZWVkcyB0byB1c2UgaXQu
CkBAIC05MSw3ICs4OSw2IEBAIFN0b3JhZ2VBcmVhSW1wbDo6U3RvcmFnZUFyZWFJbXBsKGNvbnN0
IFN0b3JhZ2VBcmVhSW1wbCYgYXJlYSkKICAgICAsIG1fY2xvc2VEYXRhYmFzZVRpbWVyKCp0aGlz
LCAmU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURhdGFiYXNlVGltZXJGaXJlZCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3N0b3JhZ2VNYXApOwogICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKIH0KIApAQCAtMTA1LDcgKzEwMiw3IEBAIHVuc2lnbmVkIFN0b3Jh
Z2VBcmVhSW1wbDo6bGVuZ3RoKCkKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKLSAgICByZXR1cm4gbV9zdG9yYWdlTWFwLT5sZW5n
dGgoKTsKKyAgICByZXR1cm4gbV9zdG9yYWdlTWFwLmxlbmd0aCgpOwogfQogCiBTdHJpbmcgU3Rv
cmFnZUFyZWFJbXBsOjprZXkodW5zaWduZWQgaW5kZXgpCkBAIC0xMTMsNyArMTEwLDcgQEAgU3Ry
aW5nIFN0b3JhZ2VBcmVhSW1wbDo6a2V5KHVuc2lnbmVkIGluZGV4KQogICAgIEFTU0VSVCghbV9p
c1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKIAotICAgIHJldHVy
biBtX3N0b3JhZ2VNYXAtPmtleShpbmRleCk7CisgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC5rZXko
aW5kZXgpOwogfQogCiBTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjppdGVtKGNvbnN0IFN0cmluZyYg
a2V5KQpAQCAtMTIxLDcgKzExOCw3IEBAIFN0cmluZyBTdG9yYWdlQXJlYUltcGw6Oml0ZW0oY29u
c3QgU3RyaW5nJiBrZXkpCiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50
aWxJbXBvcnRDb21wbGV0ZSgpOwogCi0gICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+Z2V0SXRlbShr
ZXkpOworICAgIHJldHVybiBtX3N0b3JhZ2VNYXAuZ2V0SXRlbShrZXkpOwogfQogCiB2b2lkIFN0
b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKQEAgLTEzMSwx
MCArMTI4LDcgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oRnJhbWUqIHNvdXJjZUZy
YW1lLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW4KICAgICBibG9ja1VudGlsSW1wb3J0
Q29tcGxldGUoKTsKIAogICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICBhdXRvIG5ld01hcCA9IG1f
c3RvcmFnZU1hcC0+c2V0SXRlbShrZXksIHZhbHVlLCBvbGRWYWx1ZSwgcXVvdGFFeGNlcHRpb24p
OwotICAgIGlmIChuZXdNYXApCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3TWFw
KTsKLQorICAgIG1fc3RvcmFnZU1hcC5zZXRJdGVtKGtleSwgdmFsdWUsIG9sZFZhbHVlLCBxdW90
YUV4Y2VwdGlvbik7CiAgICAgaWYgKHF1b3RhRXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAK
QEAgLTE1MywxMCArMTQ3LDcgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OnJlbW92ZUl0ZW0oRnJh
bWUqIHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSkKICAgICBibG9ja1VudGlsSW1wb3J0
Q29tcGxldGUoKTsKIAogICAgIFN0cmluZyBvbGRWYWx1ZTsKLSAgICBhdXRvIG5ld01hcCA9IG1f
c3RvcmFnZU1hcC0+cmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKLSAgICBpZiAobmV3TWFwKQot
ICAgICAgICBtX3N0b3JhZ2VNYXAgPSBXVEZNb3ZlKG5ld01hcCk7Ci0KKyAgICBtX3N0b3JhZ2VN
YXAucmVtb3ZlSXRlbShrZXksIG9sZFZhbHVlKTsKICAgICBpZiAob2xkVmFsdWUuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTcxLDExICsxNjIsMTAgQEAgdm9pZCBTdG9yYWdlQXJl
YUltcGw6OmNsZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSkKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93
bik7CiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKLSAgICBpZiAoIW1fc3RvcmFn
ZU1hcC0+bGVuZ3RoKCkpCisgICAgaWYgKCFtX3N0b3JhZ2VNYXAubGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChhdXRvIG5ld1N0b3JhZ2VNYXAgPSBtX3N0b3JhZ2VNYXAtPmNs
ZWFyKCkpCi0gICAgICAgIG1fc3RvcmFnZU1hcCA9IFdURk1vdmUobmV3U3RvcmFnZU1hcCk7Cisg
ICAgbV9zdG9yYWdlTWFwLmNsZWFyKCk7CiAKICAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCiAg
ICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7CkBAIC0xODgsNyArMTc4
LDcgQEAgYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KQog
ICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KTsKIAotICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmNvbnRhaW5zKGtleSk7CisgICAgcmV0dXJu
IG1fc3RvcmFnZU1hcC5jb250YWlucyhrZXkpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6
aW1wb3J0SXRlbXMoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBpdGVtcykKQEAgLTE5Niw3ICsx
ODYsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6aW1wb3J0SXRlbXMoSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4mJiBpdGVtcykKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAKLSAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW1zKFdURk1v
dmUoaXRlbXMpKTsKKyAgICBtX3N0b3JhZ2VNYXAuaW1wb3J0SXRlbXMoV1RGTW92ZShpdGVtcykp
OwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xvc2UoKQpAQCAtMjE0LDggKzIwNCw3IEBA
IHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhckZvck9yaWdpbkRlbGV0aW9uKCkKICAgICBBU1NF
UlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAgICAg
Ci0gICAgaWYgKGF1dG8gbmV3U3RvcmFnZU1hcCA9IG1fc3RvcmFnZU1hcC0+Y2xlYXIoKSkKLSAg
ICAgICAgbV9zdG9yYWdlTWFwID0gV1RGTW92ZShuZXdTdG9yYWdlTWFwKTsKKyAgICBtX3N0b3Jh
Z2VNYXAuY2xlYXIoKTsKIAogICAgIGlmIChtX3N0b3JhZ2VBcmVhU3luYykgewogICAgICAgICBt
X3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVDbGVhcigpOwpAQCAtMjk1LDggKzI4NCw3IEBAIHZv
aWQgU3RvcmFnZUFyZWFJbXBsOjpzZXNzaW9uQ2hhbmdlZChib29sIGlzTmV3U2Vzc2lvblBlcnNp
c3RlbnQpCiAgICAgLy8gSWYgaW1wb3J0IGlzIG5vdCBjb21wbGV0ZWQsIGJhY2tncm91bmQgc3Rv
cmFnZSB0aHJlYWQgbWF5IGJlIG1vZGlmeWluZyBtX3N0b3JhZ2VNYXAuCiAgICAgYmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCk7CiAKLSAgICB1bnNpZ25lZCBxdW90YSA9IG1fc3RvcmFnZU1hcC0+
cXVvdGEoKTsKLSAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUocXVvdGEpOwor
ICAgIG1fc3RvcmFnZU1hcC5jbGVhcigpOwogCiAgICAgaWYgKGlzTmV3U2Vzc2lvblBlcnNpc3Rl
bnQgJiYgIW1fc3RvcmFnZUFyZWFTeW5jICYmIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKSB7CiAgICAg
ICAgIG1fc3RvcmFnZUFyZWFTeW5jID0gU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUobV9zdG9yYWdl
U3luY01hbmFnZXIuZ2V0KCksICp0aGlzLCBtX3NlY3VyaXR5T3JpZ2luLmRhdGFiYXNlSWRlbnRp
ZmllcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwu
aAppbmRleCA3NDgwM2E3YWE5YTg5NDQ5NTBmNWRkNWFlYmViNzYzMjgzODFlMmQ3Li4zYWIzYmM1
NTY1NDQ3ZjM2MGNhZTBlZDc5NDk4NmY0YzQxZjg1NGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNs
dWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3Rv
cmFnZUFyZWEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VNYXAuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CkBAIC04NSw3ICs4Niw3IEBAIHByaXZhdGU6CiAKICAgICBXZWJDb3JlOjpTdG9y
YWdlVHlwZSBtX3N0b3JhZ2VUeXBlOwogICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBt
X3NlY3VyaXR5T3JpZ2luOwotICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlTWFwPiBtX3N0b3Jh
Z2VNYXA7CisgICAgV2ViQ29yZTo6U3RvcmFnZU1hcCBtX3N0b3JhZ2VNYXA7CiAKICAgICBSZWZQ
dHI8U3RvcmFnZUFyZWFTeW5jPiBtX3N0b3JhZ2VBcmVhU3luYzsKICAgICBSZWZQdHI8V2ViQ29y
ZTo6U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3JhZ2VTeW5jTWFuYWdlcjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>