<?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>236985</bug_id>
          
          <creation_ts>2022-02-21 10:56:56 -0800</creation_ts>
          <short_desc>Avoid having to iterate the whole frame tree(s) every time we need to dispatch storage events</short_desc>
          <delta_ts>2022-02-22 08:10:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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=237040</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>
          <dependson>236871</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>hi</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>pangle</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1844278</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-21 10:56:56 -0800</bug_when>
    <thetext>Avoid having to iterate the whole frame tree(s) every time we need to dispatch storage events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844283</commentid>
    <comment_count>1</comment_count>
      <attachid>452748</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-21 11:03:44 -0800</bug_when>
    <thetext>Created attachment 452748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844495</commentid>
    <comment_count>2</comment_count>
      <attachid>452748</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-21 18:14:54 -0800</bug_when>
    <thetext>Comment on attachment 452748
Patch

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

&gt; Source/WebCore/page/DOMWindow.cpp:168
&gt; +    for (auto&amp; window : windowsInterestedInStorageEvents())
&gt; +        apply(window);

Maybe the use of Vector&lt;Ref&lt;DOMWindow&gt; should be inside this function rather than in the functions that call it. I suppose that’s less efficient since we will create an extra vector, but it seems dangerous to have a function that’s so easy to use unsafely.

&gt; Source/WebCore/page/DOMWindow.cpp:458
&gt; +    windowsInterestedInStorageEvents().remove(*this);

How important is it to do this explicitly in a WeakHashSet? If we have this code, it seems to make it safe to use HashSet instead.

&gt; Source/WebCore/storage/StorageEventDispatcher.cpp:43
&gt; +static void dispatchSessionStorageEventsToWindows(Page&amp; page, const Vector&lt;Ref&lt;DOMWindow&gt;&gt;&amp; windows, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, const SecurityOrigin&amp; securityOrigin)

Can we factor these two functions so they share almost all the code? There are only two differences here, StorageType and what function we use to get the storage object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844499</commentid>
    <comment_count>3</comment_count>
      <attachid>452748</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-21 18:21:43 -0800</bug_when>
    <thetext>Comment on attachment 452748
Patch

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

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:168
&gt;&gt; +        apply(window);
&gt; 
&gt; Maybe the use of Vector&lt;Ref&lt;DOMWindow&gt; should be inside this function rather than in the functions that call it. I suppose that’s less efficient since we will create an extra vector, but it seems dangerous to have a function that’s so easy to use unsafely.

So a copyToVector() here and loop over that to protect against the apply function modifying the container?

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:458
&gt;&gt; +    windowsInterestedInStorageEvents().remove(*this);
&gt; 
&gt; How important is it to do this explicitly in a WeakHashSet? If we have this code, it seems to make it safe to use HashSet instead.

We are supposed to remove entries from WeakHashSet as far as I know, in order to recover capacity (shrink only happens for some operations). Could totally use a HashSet of raw pointers but it would make Ryosuke angry :) I was told we should avoid containers of raw pointers due to security bugs. So we use WeakHashSet and use it like a regular HashSet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844501</commentid>
    <comment_count>4</comment_count>
      <attachid>452748</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-21 18:25:48 -0800</bug_when>
    <thetext>Comment on attachment 452748
Patch

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

&gt;&gt;&gt; Source/WebCore/page/DOMWindow.cpp:168
&gt;&gt;&gt; +        apply(window);
&gt;&gt; 
&gt;&gt; Maybe the use of Vector&lt;Ref&lt;DOMWindow&gt; should be inside this function rather than in the functions that call it. I suppose that’s less efficient since we will create an extra vector, but it seems dangerous to have a function that’s so easy to use unsafely.
&gt; 
&gt; So a copyToVector() here and loop over that to protect against the apply function modifying the container?

Yes. It’s wasteful given how we are currently using this, but safer. As you probably already know, we do that in Page::forEachDocument, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844531</commentid>
    <comment_count>5</comment_count>
      <attachid>452819</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-21 20:11:51 -0800</bug_when>
    <thetext>Created attachment 452819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844605</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-22 01:49:01 -0800</bug_when>
    <thetext>Committed r290295 (247618@main): &lt;https://commits.webkit.org/247618@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 452819.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844606</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-22 01:50:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/89282659&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844684</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 07:15:12 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 452748 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452748&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/DOMWindow.cpp:168
&gt; &gt; +    for (auto&amp; window : windowsInterestedInStorageEvents())
&gt; &gt; +        apply(window);
&gt; 
&gt; Maybe the use of Vector&lt;Ref&lt;DOMWindow&gt; should be inside this function rather
&gt; than in the functions that call it. I suppose that’s less efficient since we
&gt; will create an extra vector, but it seems dangerous to have a function
&gt; that’s so easy to use unsafely.
&gt; 
&gt; &gt; Source/WebCore/page/DOMWindow.cpp:458
&gt; &gt; +    windowsInterestedInStorageEvents().remove(*this);
&gt; 
&gt; How important is it to do this explicitly in a WeakHashSet? If we have this
&gt; code, it seems to make it safe to use HashSet instead.
&gt; 
&gt; &gt; Source/WebCore/storage/StorageEventDispatcher.cpp:43
&gt; &gt; +static void dispatchSessionStorageEventsToWindows(Page&amp; page, const Vector&lt;Ref&lt;DOMWindow&gt;&gt;&amp; windows, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, const SecurityOrigin&amp; securityOrigin)
&gt; 
&gt; Can we factor these two functions so they share almost all the code? There
&gt; are only two differences here, StorageType and what function we use to get
&gt; the storage object.

Oh, I missed this comment. I&apos;ll look into it today.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452748</attachid>
            <date>2022-02-21 11:03:44 -0800</date>
            <delta_ts>2022-02-21 20:11:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236985-20220221110343.patch</filename>
            <type>text/plain</type>
            <size>38025</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTRhMzc3MmNkM2E2MjI1
MDZkMTY5NzY0Y2VjNDNjZjJhZjE3Yzc4Yi4uYTY0ZjNlMzY4ZmI3MGFkOTcwZDgyMjI2ODljMTE5
MDkwYTk3NWRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIyLTAyLTIxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgaGF2aW5nIHRvIGl0
ZXJhdGUgdGhlIHdob2xlIGZyYW1lIHRyZWUocykgZXZlcnkgdGltZSB3ZSBuZWVkIHRvIGRpc3Bh
dGNoIHN0b3JhZ2UgZXZlbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzY5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBdm9pZCBoYXZpbmcgdG8gaXRlcmF0ZSB0aGUgd2hvbGUgZnJhbWUgdHJlZShz
KSBldmVyeSB0aW1lIHdlIG5lZWQgdG8gZGlzcGF0Y2ggc3RvcmFnZSBldmVudHMsCisgICAgICAg
IGJ5IGtlZXBpbmcgdHJhY2sgb2Ygd2luZG93IG9iamVjdHMgaW50ZXJlc3RlZCBpbiBzdG9yYWdl
IGV2ZW50cy4gQSBXaW5kb3cgb2JqZWN0IGlzIGludGVyZXN0ZWQKKyAgICAgICAgaW4gc3RvcmFn
ZSBldmVudHMgaWYgYm90aCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKKyAg
ICAgICAgMS4gSXQgaGFzIGEgU3RvcmFnZSBvYmplY3QgKGVpdGhlciBsb2NhbFN0b3JhZ2Ugb3Ig
c2Vzc2lvblN0b3JhZ2UpCisgICAgICAgIDIuIEl0IGhhcyBhIHN0b3JhZ2UgZXZlbnQgbGlzdGVu
ZXIgcmVnaXN0ZXJlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzIHRoZSBj
b2RlIHNvIHRoYXQgd2Ugc2hhcmUgbW9yZSBsb2dpYyBiZXR3ZWVuIFdlYktpdDEgYW5kIFdlYktp
dDIuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERP
TVN0b3JhZ2VJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyk6CisgICAgICAgICogbG9hZGVyL0Vt
cHR5Q2xpZW50cy5jcHA6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6d2luZG93c0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV2luZG93Ojpmb3JFYWNoV2luZG93SW50ZXJlc3RlZEluU3RvcmFnZUV2ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6On5ET01XaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV2luZG93Ojp3aWxsRGV0YWNoRG9jdW1lbnRGcm9tRnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NV2luZG93OjpldmVudExpc3RlbmVyc0RpZENoYW5nZSk6CisgICAgICAgICog
cGFnZS9ET01XaW5kb3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvd1Byb3BlcnR5Lmg6Cisg
ICAgICAgICogc3RvcmFnZS9TdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6
OnNldEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZTo6cmVtb3ZlSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlOjpjbGVhcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdl
QXJlYS5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzVG9XaW5kb3dzKToK
KyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9XaW5kb3dzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2Vzc2lv
blN0b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50c1RvRnJhbWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0b3Jh
Z2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oOgorCiAyMDIyLTAyLTIxICBBbGFuIEJ1anRhcyAg
PHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbSUZDXVtJbnRlZ3JhdGlvbl0gVGFrZSB2ZXJ0
aWNhbC1ybCB3cml0aW5nIG1vZGUgdmFsdWUgaW50byBhY2NvdW50IHdoZW4gY29udmVydGluZyB2
aXN1YWwgbWFyZ2luL2JvcmRlci9wYWRkaW5nIHZhbHVlIHRvIGxvZ2ljYWwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
MTk1OTNhNTc3ZTRlYmU3MGY4NDY0MWJjY2M0ZGEzOWRjZjJkMTI4Zi4uNTBjNDUxNjg2MDYyNTFh
NjBjN2Y4OWRhOTkwNWM4ODhiZDRlZWRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAy
Mi0wMi0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEF2b2lk
IGhhdmluZyB0byBpdGVyYXRlIHRoZSB3aG9sZSBmcmFtZSB0cmVlKHMpIGV2ZXJ5IHRpbWUgd2Ug
bmVlZCB0byBkaXNwYXRjaCBzdG9yYWdlIGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgaGF2aW5nIHRvIGl0ZXJhdGUgdGhlIHdob2xl
IGZyYW1lIHRyZWUocykgZXZlcnkgdGltZSB3ZSBuZWVkIHRvIGRpc3BhdGNoIHN0b3JhZ2UgZXZl
bnRzLAorICAgICAgICBieSBrZWVwaW5nIHRyYWNrIG9mIHdpbmRvdyBvYmplY3RzIGludGVyZXN0
ZWQgaW4gc3RvcmFnZSBldmVudHMuIEEgV2luZG93IG9iamVjdCBpcyBpbnRlcmVzdGVkCisgICAg
ICAgIGluIHN0b3JhZ2UgZXZlbnRzIGlmIGJvdGggb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGlzIHRydWU6CisgICAgICAgIDEuIEl0IGhhcyBhIFN0b3JhZ2Ugb2JqZWN0IChlaXRoZXIgbG9j
YWxTdG9yYWdlIG9yIHNlc3Npb25TdG9yYWdlKQorICAgICAgICAyLiBJdCBoYXMgYSBzdG9yYWdl
IGV2ZW50IGxpc3RlbmVyIHJlZ2lzdGVyZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJl
ZmFjdG9ycyB0aGUgY29kZSBzbyB0aGF0IHdlIHNoYXJlIG1vcmUgbG9naWMgYmV0d2VlbiBXZWJL
aXQxIGFuZCBXZWJLaXQyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VBcmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRl
bSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbSk6CisgICAg
ICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJl
YU1hcDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmNsZWFyKToKKyAgICAgICAg
KFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpkaXNwYXRjaExvY2FsU3RvcmFnZUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6ZnJhbWVzRm9yRXZlbnREaXNwYXRjaGluZyk6IERlbGV0ZWQu
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmg6CisKIDIw
MjItMDItMjEgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgRmV0
Y2hpbmcgd2Vic2l0ZSBkYXRhIG1heSBnZXQgd3JvbmcgcmVjb3JkIGFmdGVyIG1pZ3JhdGluZyBk
YXRhIHRvIGdlbmVyYWwgc3RvcmFnZSBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXgg
ZDZhN2ZkYjdmOWM4YTllNGJiMjA4YWFjYjE2OWE1OWFiNTg4NmU0NS4uNTJkZWYyYWMyYmJiZmFk
NjBjZmU3NGIxYzA1YjNjODg5YWM5ZGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNSBAQAorMjAyMi0wMi0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisg
ICAgICAgIEF2b2lkIGhhdmluZyB0byBpdGVyYXRlIHRoZSB3aG9sZSBmcmFtZSB0cmVlKHMpIGV2
ZXJ5IHRpbWUgd2UgbmVlZCB0byBkaXNwYXRjaCBzdG9yYWdlIGV2ZW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2OTg1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgaGF2aW5nIHRvIGl0ZXJh
dGUgdGhlIHdob2xlIGZyYW1lIHRyZWUocykgZXZlcnkgdGltZSB3ZSBuZWVkIHRvIGRpc3BhdGNo
IHN0b3JhZ2UgZXZlbnRzLAorICAgICAgICBieSBrZWVwaW5nIHRyYWNrIG9mIHdpbmRvdyBvYmpl
Y3RzIGludGVyZXN0ZWQgaW4gc3RvcmFnZSBldmVudHMuIEEgV2luZG93IG9iamVjdCBpcyBpbnRl
cmVzdGVkCisgICAgICAgIGluIHN0b3JhZ2UgZXZlbnRzIGlmIGJvdGggb2YgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGlzIHRydWU6CisgICAgICAgIDEuIEl0IGhhcyBhIFN0b3JhZ2Ugb2JqZWN0
IChlaXRoZXIgbG9jYWxTdG9yYWdlIG9yIHNlc3Npb25TdG9yYWdlKQorICAgICAgICAyLiBJdCBo
YXMgYSBzdG9yYWdlIGV2ZW50IGxpc3RlbmVyIHJlZ2lzdGVyZWQuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIHJlZmFjdG9ycyB0aGUgY29kZSBzbyB0aGF0IHdlIHNoYXJlIG1vcmUgbG9naWMg
YmV0d2VlbiBXZWJLaXQxIGFuZCBXZWJLaXQyLgorCisgICAgICAgICogU3RvcmFnZS9TdG9yYWdl
QXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OnJlbW92ZUl0ZW0pOgorICAgICAg
ICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U3Rv
cmFnZUFyZWFJbXBsOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCk6CisgICAgICAgICogU3RvcmFnZS9T
dG9yYWdlQXJlYUltcGwuaDoKKwogMjAyMi0wMi0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIE9wdGltaXplIERPTSBzdG9yYWdlIGV2ZW50IGRpc3BhdGNoCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXggNDFkM2UxNWU5MTk2N2JjNzdkMDAxYzM1NWI4OWMz
MWQ4NTM5MGRhMy4uMTNmYzBiODFlZjg3NmI1OWU5MThmMTlkZDk4Njk5YzQ1ZmY2MzAyMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0
ZW0oUmVmPEpTCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBib29sIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7Ci0gICAgc3RvcmFnZUFyZWEtPnNldEl0
ZW0oZnJhbWUsIGtleSwgdmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKKyAgICBzdG9yYWdlQXJlYS0+
c2V0SXRlbSgqZnJhbWUsIGtleSwgdmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKICAgICBpZiAocXVv
dGFFeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChET01FeGNlcHRpb246
Om5hbWUoUXVvdGFFeGNlZWRlZEVycm9yKSk7CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92ZURP
TVN0b3JhZ2VJdGVtKFJlZgogICAgIGlmICghc3RvcmFnZUFyZWEpCiAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRl
bShmcmFtZSwga2V5KTsKKyAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbSgqZnJhbWUsIGtleSk7
CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTU1LDcgKzE1NSw3IEBAIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJET01TdG9yYWdl
SXRlbXMoUmVmCiAgICAgaWYgKCFzdG9yYWdlQXJlYSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIHN0b3JhZ2VBcmVhLT5jbGVhcihmcmFtZSk7Cisg
ICAgc3RvcmFnZUFyZWEtPmNsZWFyKCpmcmFtZSk7CiAKICAgICByZXR1cm4geyB9OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAppbmRleCA0NjIyNTQ3MWZkZDBhNzk3ZGNj
Y2Q4MTVkNGFjMzE1ZjliMGE1NzkzLi5hZDcyZDllZjExYWVmYzcwOTA0NjhhNWMyNzU3MDk5MGQ5
ZDZlZjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcApAQCAtNDg0LDkg
KzQ4NCw5IEBAIGNsYXNzIEVtcHR5U3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyIGZpbmFsIDogcHVi
bGljIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGZpbmFsIHsgcmV0dXJuIDA7IH0KICAgICAgICAgU3RyaW5nIGtleSh1bnNpZ25lZCkgZmluYWwg
eyByZXR1cm4geyB9OyB9CiAgICAgICAgIFN0cmluZyBpdGVtKGNvbnN0IFN0cmluZyYpIGZpbmFs
IHsgcmV0dXJuIHsgfTsgfQotICAgICAgICB2b2lkIHNldEl0ZW0oRnJhbWUqLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBib29sJikgZmluYWwgeyB9Ci0gICAgICAgIHZvaWQgcmVtb3Zl
SXRlbShGcmFtZSosIGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgfQotICAgICAgICB2b2lkIGNsZWFy
KEZyYW1lKikgZmluYWwgeyB9CisgICAgICAgIHZvaWQgc2V0SXRlbShGcmFtZSYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wmKSBmaW5hbCB7IH0KKyAgICAgICAgdm9pZCByZW1v
dmVJdGVtKEZyYW1lJiwgY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CisgICAgICAgIHZvaWQgY2xl
YXIoRnJhbWUmKSBmaW5hbCB7IH0KICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcm
KSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICBTdG9yYWdlVHlwZSBzdG9yYWdlVHlw
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0b3JhZ2VUeXBlOjpMb2NhbDsgfQogICAgICAgICBz
aXplX3QgbWVtb3J5Qnl0ZXNVc2VkQnlDYWNoZSgpIGZpbmFsIHsgcmV0dXJuIDA7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCA5OWQ0MmMxZDViODJhNzJlZjc3ZjIwM2FhNTAyZDg2
MGQ3NTc3ZmJkLi5hYzExY2FkY2FkNDBkOWZhZTFkNmRhZWI0NjNmNmE2YzE1NzYzZGNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0xNTYsNiArMTU2LDE4IEBAIHVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CiAKIHN0YXRpYyBjb25zdCBTZWNvbmRzIGRlZmF1bHRUcmFuc2llbnRB
Y3RpdmF0aW9uRHVyYXRpb24geyAyX3MgfTsKIAorc3RhdGljIFdlYWtIYXNoU2V0PERPTVdpbmRv
dz4mIHdpbmRvd3NJbnRlcmVzdGVkSW5TdG9yYWdlRXZlbnRzKCkKK3sKKyAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPFdlYWtIYXNoU2V0PERPTVdpbmRvdz4+IHNldDsKKyAgICBy
ZXR1cm4gc2V0OworfQorCit2b2lkIERPTVdpbmRvdzo6Zm9yRWFjaFdpbmRvd0ludGVyZXN0ZWRJ
blN0b3JhZ2VFdmVudHMoY29uc3QgRnVuY3Rpb248dm9pZChET01XaW5kb3cmKT4mIGFwcGx5KQor
eworICAgIGZvciAoYXV0byYgd2luZG93IDogd2luZG93c0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVu
dHMoKSkKKyAgICAgICAgYXBwbHkod2luZG93KTsKK30KKwogc3RhdGljIHN0ZDo6b3B0aW9uYWw8
U2Vjb25kcz4mIHRyYW5zaWVudEFjdGl2YXRpb25EdXJhdGlvbk92ZXJyaWRlRm9yVGVzdGluZygp
CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4+IG92
ZXJyaWRlRm9yVGVzdGluZzsKQEAgLTQ0Miw2ICs0NTQsOCBAQCBET01XaW5kb3c6On5ET01XaW5k
b3coKQogI2VuZGlmCiAKICAgICByZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2VydmVyKHRoaXMpOwor
CisgICAgd2luZG93c0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVudHMoKS5yZW1vdmUoKnRoaXMpOwog
fQogCiBSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+IERPTVdpbmRvdzo6bWF0Y2hNZWRpYShjb25zdCBT
dHJpbmcmIG1lZGlhKQpAQCAtNDk5LDYgKzUxMyw4IEBAIHZvaWQgRE9NV2luZG93Ojp3aWxsRGV0
YWNoRG9jdW1lbnRGcm9tRnJhbWUoKQogICAgIGlmIChtX3BlcmZvcm1hbmNlKQogICAgICAgICBt
X3BlcmZvcm1hbmNlLT5jbGVhclJlc291cmNlVGltaW5ncygpOwogCisgICAgd2luZG93c0ludGVy
ZXN0ZWRJblN0b3JhZ2VFdmVudHMoKS5yZW1vdmUoKnRoaXMpOworCiAgICAgSlNET01XaW5kb3dC
YXNlOjpmaXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3codGhpcyk7CiAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVdpbmRvd0Rpc2NhcmRlZCgqZnJhbWUoKSwgdGhp
cyk7CiB9CkBAIC04MzIsNiArODQ4LDggQEAgRXhjZXB0aW9uT3I8U3RvcmFnZSo+IERPTVdpbmRv
dzo6c2Vzc2lvblN0b3JhZ2UoKQogCiAgICAgYXV0byBzdG9yYWdlQXJlYSA9IHBhZ2UtPnNlc3Np
b25TdG9yYWdlKCktPnN0b3JhZ2VBcmVhKGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKICAg
ICBtX3Nlc3Npb25TdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHN0b3Jh
Z2VBcmVhKSk7CisgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5zdG9yYWdl
RXZlbnQpKQorICAgICAgICB3aW5kb3dzSW50ZXJlc3RlZEluU3RvcmFnZUV2ZW50cygpLmFkZCgq
dGhpcyk7CiAgICAgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0KCk7CiB9CiAKQEAgLTg2Niw2
ICs4ODQsOCBAQCBFeGNlcHRpb25PcjxTdG9yYWdlKj4gRE9NV2luZG93Ojpsb2NhbFN0b3JhZ2Uo
KQogCiAgICAgYXV0byBzdG9yYWdlQXJlYSA9IHBhZ2UtPnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
cigpLmxvY2FsU3RvcmFnZUFyZWEoKmRvY3VtZW50KTsKICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0
b3JhZ2U6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzdG9yYWdlQXJlYSkpOworICAgIGlmIChoYXNF
dmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50KSkKKyAgICAgICAgd2luZG93
c0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVudHMoKS5hZGQoKnRoaXMpOwogICAgIHJldHVybiBtX2xv
Y2FsU3RvcmFnZS5nZXQoKTsKIH0KIApAQCAtMjY5Nyw0ICsyNzE3LDE0IEBAIEZyYW1lKiBET01X
aW5kb3c6OmZyYW1lKCkgY29uc3QKICAgICByZXR1cm4gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJh
bWUoKSA6IG51bGxwdHI7CiB9CiAKK3ZvaWQgRE9NV2luZG93OjpldmVudExpc3RlbmVyc0RpZENo
YW5nZSgpCit7CisgICAgaWYgKG1fbG9jYWxTdG9yYWdlIHx8IG1fc2Vzc2lvblN0b3JhZ2UpIHsK
KyAgICAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQp
KQorICAgICAgICAgICAgd2luZG93c0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVudHMoKS5hZGQoKnRo
aXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3aW5kb3dzSW50ZXJlc3RlZEluU3RvcmFn
ZUV2ZW50cygpLnJlbW92ZSgqdGhpcyk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAppbmRleCBjNWRhYmExNzNjOTNhNGFjYzMyZDhjMmI0
MjM2MDRhMzNiNzk4MDc3Li5mZTFjYTAwMTcxMjIwZDJmZTc2NzU2NTVjYmMxYjE5NjhlZDBlZmJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKQEAgLTQxMCw2ICs0MTAsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRNYXlSZXVzZUZvck5hdmlnYXRpb24oYm9vbCBtYXlSZXVzZUZvck5hdmlnYXRp
b24pIHsgbV9tYXlSZXVzZUZvck5hdmlnYXRpb24gPSBtYXlSZXVzZUZvck5hdmlnYXRpb247IH0K
ICAgICBib29sIG1heVJldXNlRm9yTmF2aWdhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF5UmV1
c2VGb3JOYXZpZ2F0aW9uOyB9CiAKKyAgICBQYWdlKiBwYWdlKCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgZm9yRWFjaFdpbmRvd0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVu
dHMoY29uc3QgRnVuY3Rpb248dm9pZChET01XaW5kb3cmKT4mKTsKKwogcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBET01XaW5kb3coRG9jdW1lbnQmKTsKIApAQCAtNDE3LDggKzQyMCw4IEBAIHByaXZh
dGU6CiAKICAgICBib29sIGlzTG9jYWxET01XaW5kb3coKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CiAgICAgYm9vbCBpc1JlbW90ZURPTVdpbmRvdygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdm9pZCBldmVudExpc3RlbmVyc0RpZENoYW5nZSgpIGZpbmFsOwogCi0g
ICAgUGFnZSogcGFnZSgpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dlZFRvQ2hhbmdlV2luZG93R2Vv
bWV0cnkoKSBjb25zdDsKIAogICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWZQdHI8RnJhbWU+PiBj
cmVhdGVXaW5kb3coY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGZy
YW1lTmFtZSwgY29uc3QgV2luZG93RmVhdHVyZXMmLCBET01XaW5kb3cmIGFjdGl2ZVdpbmRvdywg
RnJhbWUmIGZpcnN0RnJhbWUsIEZyYW1lJiBvcGVuZXJGcmFtZSwgY29uc3QgRnVuY3Rpb248dm9p
ZChET01XaW5kb3cmKT4mIHByZXBhcmVEaWFsb2dGdW5jdGlvbiA9IG51bGxwdHIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQcm9wZXJ0eS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3dQcm9wZXJ0eS5oCmluZGV4IDBhYWFmYjNkM2Y3Y2I1ZmMxZTUz
ZmIzZWZlMjJhMTgzOTA2OTMwYmMuLjNmZThiMGNiMDdjNTQ1M2IzZWQ4Mjc3N2ExNzkwOWU3NzYx
YzJlYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93UHJvcGVydHku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvd1Byb3BlcnR5LmgKQEAgLTM0LDcg
KzM0LDcgQEAgY2xhc3MgRnJhbWU7CiAKIGNsYXNzIERPTVdpbmRvd1Byb3BlcnR5IHsKIHB1Ymxp
YzoKLSAgICBGcmFtZSogZnJhbWUoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZSog
ZnJhbWUoKSBjb25zdDsKICAgICBET01XaW5kb3cqIHdpbmRvdygpIGNvbnN0OwogCiBwcm90ZWN0
ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAppbmRleCA2YzkzOWFmMzRhOTc4OTNiNmNh
NTZlZGU1OTlhYTJlNzBhZjg3NDg2Li4yYmY3MTY0ZmU1ODQ2YTU3OGYyOWZjYzllNzMwODYyOGI4
ZTE3ZTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAKQEAgLTgxLDcgKzgxLDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gU3RvcmFnZTo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCiAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbiA9IGZhbHNlOwotICAgIG1fc3Rv
cmFnZUFyZWEtPnNldEl0ZW0oZnJhbWUsIGtleSwgdmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKKyAg
ICBtX3N0b3JhZ2VBcmVhLT5zZXRJdGVtKCpmcmFtZSwga2V5LCB2YWx1ZSwgcXVvdGFFeGNlcHRp
b24pOwogICAgIGlmIChxdW90YUV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFF1b3RhRXhjZWVkZWRFcnJvciB9OwogICAgIHJldHVybiB7IH07CkBAIC05Myw3ICs5Myw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IFN0b3JhZ2U6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXkp
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nl
c3NFcnJvciB9OwogCi0gICAgbV9zdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShmcmFtZSwga2V5KTsK
KyAgICBtX3N0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKCpmcmFtZSwga2V5KTsKICAgICByZXR1cm4g
eyB9OwogfQogCkBAIC0xMDMsNyArMTAzLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gU3RvcmFnZTo6
Y2xlYXIoKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIG1fc3RvcmFnZUFyZWEtPmNsZWFyKGZyYW1lKTsKKyAg
ICBtX3N0b3JhZ2VBcmVhLT5jbGVhcigqZnJhbWUpOwogICAgIHJldHVybiB7IH07CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAppbmRleCA3NzQ2MTQwZjc4NDA4MWIwNzg2YTE1
ZDYwMWZlZmNhMmM5MWMxMGE2Li44ZjFjODIzYjY5M2I2MmE2MmRiOWEzMzdmMjk5YjljNjBjNjRj
N2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCkBAIC00Niw5ICs0Niw5IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpID0gMDsKICAgICB2aXJ0dWFs
IFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBpdGVt
KGNvbnN0IFN0cmluZyYga2V5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oRnJhbWUq
IHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9v
bCYgcXVvdGFFeGNlcHRpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShGcmFt
ZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGNsZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVt
KEZyYW1lJiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0
ZW0oRnJhbWUmIHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhcihGcmFtZSYgc291cmNlRnJhbWUpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKIAogICAgIHZpcnR1YWwgU3RvcmFnZVR5
cGUgc3RvcmFnZVR5cGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCAxMzc1YzBkOWVhOThhYjY5YzgzNjU1
NGU2ODk0YWJmNmJlZDBiNTY0Li5hYjRkZTY5Y2FiMjg4MTQ5N2Y5ZGU0MjBkNjM2Njc0YTRjZDJm
MzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3Bh
dGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlci5jcHAKQEAgLTQwLDY5ICs0MCw2OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50cyhj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBGcmFtZSogc291
cmNlRnJhbWUpCi17Ci0gICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7Ci0gICAg
aWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UmVmPEZyYW1lPj4gZnJh
bWVzOwotCi0gICAgLy8gU2VuZCBldmVudHMgb25seSB0byBvdXIgcGFnZS4KLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoYXV0byogd2luZG93ID0gZnJhbWUt
PndpbmRvdygpOyAhd2luZG93IHx8ICF3aW5kb3ctPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFt
ZXMoKS5zdG9yYWdlRXZlbnQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChz
b3VyY2VGcmFtZSAhPSBmcmFtZSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS5lcXVhbCgmc2VjdXJpdHlPcmlnaW4pKQotICAgICAgICAgICAgZnJhbWVzLmFwcGVuZCgqZnJh
bWUpOwotICAgIH0KLQotICAgIGRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHNUb0ZyYW1lcygq
cGFnZSwgZnJhbWVzLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpLnN0cmluZygpLCBzZWN1cml0eU9yaWdpbik7Ci19Ci0KLXZvaWQgU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNv
bnN0IFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqIHNvdXJjZUZyYW1lKQot
ewotICAgIFBhZ2UqIHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFJlZjxGcmFtZT4+IGZyYW1lczsKLQotICAg
IC8vIFNlbmQgZXZlbnRzIHRvIGV2ZXJ5IHBhZ2UuCi0gICAgZm9yIChhdXRvJiBwYWdlSW5Hcm91
cCA6IHBhZ2UtPmdyb3VwKCkucGFnZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIGZyYW1lID0g
JnBhZ2VJbkdyb3VwLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogd2luZG93ID0gZnJhbWUtPndp
bmRvdygpOyAhd2luZG93IHx8ICF3aW5kb3ctPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMo
KS5zdG9yYWdlRXZlbnQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKHNvdXJjZUZyYW1lICE9IGZyYW1lICYmIGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLmVxdWFsKCZzZWN1cml0eU9yaWdpbikpCi0gICAgICAgICAgICAgICAgZnJhbWVzLmFw
cGVuZCgqZnJhbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZGlzcGF0Y2hMb2NhbFN0b3Jh
Z2VFdmVudHNUb0ZyYW1lcyhwYWdlLT5ncm91cCgpLCBmcmFtZXMsIGtleSwgb2xkVmFsdWUsIG5l
d1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIHNlY3VyaXR5
T3JpZ2luKTsKLX0KLQotdm9pZCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNlc3Np
b25TdG9yYWdlRXZlbnRzVG9GcmFtZXMoUGFnZSYgcGFnZSwgY29uc3QgVmVjdG9yPFJlZjxGcmFt
ZT4+JiBmcmFtZXMsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU2VjdXJpdHlP
cmlnaW4mIHNlY3VyaXR5T3JpZ2luKQorc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXNzaW9uU3RvcmFn
ZUV2ZW50c1RvV2luZG93cyhQYWdlJiBwYWdlLCBjb25zdCBWZWN0b3I8UmVmPERPTVdpbmRvdz4+
JiB3aW5kb3dzLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFNlY3VyaXR5T3Jp
Z2luJiBzZWN1cml0eU9yaWdpbikKIHsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZERpc3BhdGNoRE9NU3RvcmFnZUV2ZW50KHBhZ2UsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBT
dG9yYWdlVHlwZTo6U2Vzc2lvbiwgc2VjdXJpdHlPcmlnaW4pOwogCi0gICAgZm9yIChhdXRvJiBm
cmFtZSA6IGZyYW1lcykgewotICAgICAgICBSZWZQdHIgZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBkb2N1bWVudC0+ZG9tV2luZG93KCktPnNlc3Np
b25TdG9yYWdlKCk7CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiB3aW5kb3dzKSB7CisgICAgICAg
IFJlZlB0ciBkb2N1bWVudCA9IHdpbmRvdy0+ZG9jdW1lbnQoKTsKKyAgICAgICAgYXV0byByZXN1
bHQgPSB3aW5kb3ctPnNlc3Npb25TdG9yYWdlKCk7CiAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKSAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJz
dG9yYWdlLmh0bWwjdGhlLXN0b3JhZ2UtZXZlbnQ6ZXZlbnQtc3RvcmFnZQogICAgICAgICAgICAg
ZG9jdW1lbnQtPnF1ZXVlVGFza1RvRGlzcGF0Y2hFdmVudE9uV2luZG93KFRhc2tTb3VyY2U6OkRP
TU1hbmlwdWxhdGlvbiwgU3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VF
dmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybCwgcmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpKSk7CiAgICAgfQogfQogCi12b2lkIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFtZXMoUGFnZUdyb3VwJiBwYWdlR3JvdXAsIGNvbnN0
IFZlY3RvcjxSZWY8RnJhbWU+PiYgZnJhbWVzLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikKK3N0YXRpYyB2b2lkIGRpc3Bh
dGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9XaW5kb3dzKFBhZ2VHcm91cCYgcGFnZUdyb3VwLCBjb25z
dCBWZWN0b3I8UmVmPERPTVdpbmRvdz4+JiB3aW5kb3dzLCBjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikKIHsKICAgICBmb3Ig
KGF1dG8mIHBhZ2UgOiBwYWdlR3JvdXAucGFnZXMoKSkKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChwYWdlLCBrZXksIG9sZFZhbHVl
LCBuZXdWYWx1ZSwgU3RvcmFnZVR5cGU6OkxvY2FsLCBzZWN1cml0eU9yaWdpbik7CiAKLSAgICBm
b3IgKGF1dG8mIGZyYW1lIDogZnJhbWVzKSB7Ci0gICAgICAgIFJlZlB0ciBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IGRvY3VtZW50LT5kb21XaW5k
b3coKS0+bG9jYWxTdG9yYWdlKCk7CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiB3aW5kb3dzKSB7
CisgICAgICAgIFJlZlB0ciBkb2N1bWVudCA9IHdpbmRvdy0+ZG9jdW1lbnQoKTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSB3aW5kb3ctPmxvY2FsU3RvcmFnZSgpOwogICAgICAgICBpZiAoIXJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2Uvd2Vic3RvcmFnZS5odG1sI3RoZS1zdG9yYWdlLWV2ZW50OmV2ZW50LXN0b3JhZ2UKICAgICAg
ICAgICAgIGRvY3VtZW50LT5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnRPbldpbmRvdyhUYXNrU291
cmNlOjpET01NYW5pcHVsYXRpb24sIFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5z
dG9yYWdlRXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmwsIHJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSkpOwogICAgIH0KIH0KIAordm9pZCBTdG9yYWdlRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBQYWdlJiBwYWdlLCBjb25z
dCBTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBGdW5jdGlvbjxib29sKFN0b3JhZ2UmKT4mIGlzU291cmNlU3RvcmFnZSkKK3sKKyAgICBWZWN0
b3I8UmVmPERPTVdpbmRvdz4+IHdpbmRvd3M7CisgICAgRE9NV2luZG93Ojpmb3JFYWNoV2luZG93
SW50ZXJlc3RlZEluU3RvcmFnZUV2ZW50cyhbJl0oYXV0byYgd2luZG93KSB7CisgICAgICAgIGlm
ICghd2luZG93Lm9wdGlvbmFsU2Vzc2lvblN0b3JhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgLy8gU2VuZCBldmVudHMgb25seSB0byBvdXIgcGFnZS4KKyAgICAgICAgaWYgKHdp
bmRvdy5wYWdlKCkgIT0gJnBhZ2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChp
c1NvdXJjZVN0b3JhZ2UoKndpbmRvdy5vcHRpb25hbFNlc3Npb25TdG9yYWdlKCkpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXNlY3VyaXR5T3JpZ2luLmVxdWFsKHdpbmRvdy5z
ZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2luZG93cy5h
cHBlbmQod2luZG93KTsKKyAgICB9KTsKKworICAgIGRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVu
dHNUb1dpbmRvd3MocGFnZSwgd2luZG93cywga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybCwg
c2VjdXJpdHlPcmlnaW4pOworfQorCit2b2lkIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoTG9jYWxTdG9yYWdlRXZlbnRzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9s
ZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBQYWdlR3JvdXAmIHBhZ2VHcm91cCwgY29u
c3QgU2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgRnVuY3Rpb248Ym9vbChTdG9yYWdlJik+JiBpc1NvdXJjZVN0b3JhZ2UpCit7CisgICAgYXV0
byYgcGFnZXNJbkdyb3VwID0gcGFnZUdyb3VwLnBhZ2VzKCk7CisgICAgVmVjdG9yPFJlZjxET01X
aW5kb3c+PiB3aW5kb3dzOworICAgIERPTVdpbmRvdzo6Zm9yRWFjaFdpbmRvd0ludGVyZXN0ZWRJ
blN0b3JhZ2VFdmVudHMoWyZdKGF1dG8mIHdpbmRvdykgeworICAgICAgICBpZiAoIXdpbmRvdy5v
cHRpb25hbExvY2FsU3RvcmFnZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBT
ZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlIGluIHRoZSBncm91cC4KKyAgICAgICAgaWYgKCF3aW5k
b3cucGFnZSgpIHx8ICFwYWdlc0luR3JvdXAuY29udGFpbnMoKndpbmRvdy5wYWdlKCkpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoaXNTb3VyY2VTdG9yYWdlKCp3aW5kb3cub3B0
aW9uYWxMb2NhbFN0b3JhZ2UoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgh
c2VjdXJpdHlPcmlnaW4uZXF1YWwod2luZG93LnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB3aW5kb3dzLmFwcGVuZCh3aW5kb3cpOworICAgIH0pOworCisg
ICAgZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHNUb1dpbmRvd3MocGFnZUdyb3VwLCB3aW5kb3dz
LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsLCBzZWN1cml0eU9yaWdpbik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
RXZlbnREaXNwYXRjaGVyLmgKaW5kZXggNTkyZDY3MzYwZDhjYWQ1MmYzM2Y4M2Y4NmRkOTE4ODY5
MzVmNDhlNy4uMWVmMTg1Zjc2MjlmYjgwMGUzNWRhMjRlNWEzZmMzYWM1ZTRhOTg5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmgKQEAgLTMz
LDIxICszMywxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYW1lOwogY2xh
c3MgUGFnZTsKIGNsYXNzIFBhZ2VHcm91cDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3Mg
U3RvcmFnZTsKIAotY2xhc3MgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50cyhj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mLCBGcmFtZSogc291cmNlRnJhbWUpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5l
d1ZhbHVlLCBjb25zdCBTZWN1cml0eU9yaWdpbiYsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRz
VG9GcmFtZXMoUGFnZSYsIGNvbnN0IFZlY3RvcjxSZWY8RnJhbWU+PiYgZnJhbWVzLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHNUb0ZyYW1lcyhQ
YWdlR3JvdXAmLCBjb25zdCBWZWN0b3I8UmVmPEZyYW1lPj4mIGZyYW1lcywgY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBTZWN1cml0eU9yaWdpbiYpOwotcHJpdmF0ZToKLSAgICAv
LyBEbyBub3QgaW5zdGFudGlhdGUuCi0gICAgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcigpOwotfTsK
K25hbWVzcGFjZSBTdG9yYWdlRXZlbnREaXNwYXRjaGVyIHsKK1dFQkNPUkVfRVhQT1JUIHZvaWQg
ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50cyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgUGFnZSYsIGNvbnN0IFNlY3Vy
aXR5T3JpZ2luJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3RvcmFn
ZSYpPiYgaXNTb3VyY2VTdG9yYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgZGlzcGF0Y2hMb2Nh
bFN0b3JhZ2VFdmVudHMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUs
IGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIFBhZ2VHcm91cCYsIGNvbnN0IFNlY3VyaXR5T3JpZ2lu
JiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEZ1bmN0aW9uPGJvb2woU3RvcmFnZSYpPiYgaXNT
b3VyY2VTdG9yYWdlKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAK
aW5kZXggMWY5YjQyY2IxMjdkNmRjMDI4YTY4MDU5ZTI3MTAxZmM3OTY5NDQ2YS4uZjJkNzQ0OGFk
NzY4OGU1MGE1OTFlNjlmNTI5ODMwYWZlNDFmODI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCkBAIC03MCw3
ICs3MCw3IEBAIFN0cmluZyBTdG9yYWdlQXJlYUltcGw6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkp
CiAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWFNYXAgPyBtX3N0b3JhZ2VBcmVhTWFwLT5pdGVtKGtl
eSkgOiBudWxsU3RyaW5nKCk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKEZy
YW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGJvb2wmIHF1b3RhRXhjZXB0aW9uKQordm9pZCBTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oRnJh
bWUmIHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Ym9vbCYgcXVvdGFFeGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7CiAK
QEAgLTc4LDEzICs3OCwxMyBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShGcmFtZSog
c291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbgogICAgICAgICBtX3N0
b3JhZ2VBcmVhTWFwLT5zZXRJdGVtKHNvdXJjZUZyYW1lLCB0aGlzLCBrZXksIHZhbHVlLCBxdW90
YUV4Y2VwdGlvbik7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKEZyYW1l
KiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXkpCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6
cmVtb3ZlSXRlbShGcmFtZSYgc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5KQogewogICAg
IGlmIChtX3N0b3JhZ2VBcmVhTWFwKQogICAgICAgICBtX3N0b3JhZ2VBcmVhTWFwLT5yZW1vdmVJ
dGVtKHNvdXJjZUZyYW1lLCB0aGlzLCBrZXkpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6
Y2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKQordm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyKEZy
YW1lJiBzb3VyY2VGcmFtZSkKIHsKICAgICBpZiAobV9zdG9yYWdlQXJlYU1hcCkKICAgICAgICAg
bV9zdG9yYWdlQXJlYU1hcC0+Y2xlYXIoc291cmNlRnJhbWUsIHRoaXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAppbmRl
eCBhMzVkNjY3OTI1MDVmMGMwM2U1OTA4NzAwMWUwY2E0ZmRhN2E2Y2RhLi45Y2VhMGQ5MGEyOWVh
MThjZWE3NzU3OTZmMTc2NmUxNzA5ZTUyMWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaApAQCAtNTUsOSArNTUsOSBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIG92ZXJyaWRlOwogICAgIFN0cmluZyBr
ZXkodW5zaWduZWQgaW5kZXgpIG92ZXJyaWRlOwogICAgIFN0cmluZyBpdGVtKGNvbnN0IFN0cmlu
ZyYga2V5KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEl0ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJj
ZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCYgcXVv
dGFFeGNlcHRpb24pIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFt
ZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
ZWFyKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRJ
dGVtKFdlYkNvcmU6OkZyYW1lJiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKSBvdmVycmlkZTsKKyAgICB2b2lk
IHJlbW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUmIHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtl
eSkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhcihXZWJDb3JlOjpGcmFtZSYgc291cmNlRnJhbWUp
IG92ZXJyaWRlOwogICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRl
OwogICAgIFdlYkNvcmU6OlN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgc2l6ZV90IG1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNw
cAppbmRleCBlODkyZjJlNjMyMzBiOGZmMmVjNzljMmExODg5M2I0ZjZiNGI3Y2IzLi5jOWQ1YmIw
NzE2MjM2ZTRhMzYxNDBiYTY2ZTM5MDgwNjgwYzI4MGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCkBAIC04Miw3
ICs4Miw3IEBAIFN0cmluZyBTdG9yYWdlQXJlYU1hcDo6aXRlbShjb25zdCBTdHJpbmcmIGtleSkK
ICAgICByZXR1cm4gZW5zdXJlTWFwKCkuZ2V0SXRlbShrZXkpOwogfQogCi12b2lkIFN0b3JhZ2VB
cmVhTWFwOjpzZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3Vy
Y2VBcmVhLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCYgcXVv
dGFFeGNlcHRpb24pCit2b2lkIFN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKEZyYW1lJiBzb3VyY2VG
cmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pCiB7CiAgICAgYXV0byYgbWFw
ID0gZW5zdXJlTWFwKCk7CiAgICAgQVNTRVJUKCFtYXAuaXNTaGFyZWQoKSk7CkBAIC0xMDgsMTAg
KzEwOCwxMCBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFt
ZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjbwogICAgICAgICAgICAgd2Vha1RoaXMt
PmRpZFNldEl0ZW0oc2VlZCwga2V5LCBoYXNRdW90YUV4Y2VwdGlvbik7CiAgICAgfTsKICAgICBh
dXRvJiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOwotICAgIGNvbm5lY3Rpb24uc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OlNldEl0ZW0oKm1fcmVt
b3RlQXJlYUlkZW50aWZpZXIsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwga2V5LCB2YWx1ZSwg
c291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgV1RGTW92ZShjYWxsYmFj
aykpOworICAgIGNvbm5lY3Rpb24uc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3Jr
U3RvcmFnZU1hbmFnZXI6OlNldEl0ZW0oKm1fcmVtb3RlQXJlYUlkZW50aWZpZXIsIHNvdXJjZUFy
ZWEtPmlkZW50aWZpZXIoKSwga2V5LCB2YWx1ZSwgc291cmNlRnJhbWUuZG9jdW1lbnQoKS0+dXJs
KCkuc3RyaW5nKCkpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFN
YXA6OnJlbW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUlt
cGwqIHNvdXJjZUFyZWEsIGNvbnN0IFN0cmluZyYga2V5KQordm9pZCBTdG9yYWdlQXJlYU1hcDo6
cmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFtZSYgc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCog
c291cmNlQXJlYSwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgYXV0byYgbWFwID0gZW5zdXJl
TWFwKCk7CiAgICAgQVNTRVJUKCFtYXAuaXNTaGFyZWQoKSk7CkBAIC0xMzMsMTAgKzEzMywxMCBA
QCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VG
cmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzbwogICAgICAgICBpZiAod2Vha1RoaXMpCiAgICAgICAg
ICAgICB3ZWFrVGhpcy0+ZGlkUmVtb3ZlSXRlbShzZWVkLCBrZXkpOwogICAgIH07Ci0gICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5h
Z2VyOjpSZW1vdmVJdGVtKCptX3JlbW90ZUFyZWFJZGVudGlmaWVyLCBzb3VyY2VBcmVhLT5pZGVu
dGlmaWVyKCksIGtleSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwg
V1RGTW92ZShjYWxsYmFjaykpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdlcjo6UmVtb3ZlSXRlbSgqbV9yZW1vdGVBcmVh
SWRlbnRpZmllciwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBrZXksIHNvdXJjZUZyYW1lLmRv
Y3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lk
IFN0b3JhZ2VBcmVhTWFwOjpjbGVhcihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3Jh
Z2VBcmVhSW1wbCogc291cmNlQXJlYSkKK3ZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFyKFdlYkNv
cmU6OkZyYW1lJiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhKQogewog
ICAgIGNvbm5lY3RTeW5jKCk7CiAgICAgcmVzZXRWYWx1ZXMoKTsKQEAgLTE1Myw3ICsxNTMsNyBA
QCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjbGVhcihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUs
IFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQQogICAgICAgICBpZiAod2Vha1RoaXMpCiAgICAgICAg
ICAgICB3ZWFrVGhpcy0+ZGlkQ2xlYXIoc2VlZCk7CiAgICAgfTsKLSAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OkNsZWFy
KCptX3JlbW90ZUFyZWFJZGVudGlmaWVyLCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIHNvdXJj
ZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIFdURk1vdmUoY2FsbGJhY2spKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5jb25uZWN0aW9uKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrU3Rv
cmFnZU1hbmFnZXI6OkNsZWFyKCptX3JlbW90ZUFyZWFJZGVudGlmaWVyLCBzb3VyY2VBcmVhLT5p
ZGVudGlmaWVyKCksIHNvdXJjZUZyYW1lLmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKSwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQogCiBib29sIFN0b3JhZ2VBcmVhTWFwOjpjb250YWlucyhjb25z
dCBTdHJpbmcmIGtleSkKQEAgLTI5Niw0MyArMjk2LDYgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6
Y2xlYXJDYWNoZSh1aW50NjRfdCBtZXNzYWdlSWRlbnRpZmllcikKICAgICByZXNldFZhbHVlcygp
OwogfQogCi1zdGF0aWMgVmVjdG9yPFJlZjxGcmFtZT4+IGZyYW1lc0ZvckV2ZW50RGlzcGF0Y2hp
bmcoUGFnZSYgcGFnZSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgU3RvcmFnZVR5cGUg
c3RvcmFnZVR5cGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmll
cj4mIHN0b3JhZ2VBcmVhSW1wbElEKQotewotICAgIFZlY3RvcjxSZWY8RnJhbWU+PiBmcmFtZXM7
Ci0gICAgcGFnZS5mb3JFYWNoRG9jdW1lbnQoWyZdKGF1dG8mIGRvY3VtZW50KSB7Ci0gICAgICAg
IGlmICghZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKS5lcXVhbCgmb3JpZ2luKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBhdXRvKiB3aW5kb3cgPSBkb2N1bWVudC5kb21XaW5kb3co
KTsKLSAgICAgICAgaWYgKCF3aW5kb3cgfHwgIXdpbmRvdy0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZl
bnROYW1lcygpLnN0b3JhZ2VFdmVudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICBTdG9yYWdlKiBzdG9yYWdlID0gbnVsbHB0cjsKLSAgICAgICAgc3dpdGNoIChzdG9y
YWdlVHlwZSkgewotICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpTZXNzaW9uOgotICAgICAgICAg
ICAgc3RvcmFnZSA9IHdpbmRvdy0+b3B0aW9uYWxTZXNzaW9uU3RvcmFnZSgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RvcmFnZVR5cGU6OkxvY2FsOgotICAgICAgICBjYXNl
IFN0b3JhZ2VUeXBlOjpUcmFuc2llbnRMb2NhbDoKLSAgICAgICAgICAgIHN0b3JhZ2UgPSB3aW5k
b3ctPm9wdGlvbmFsTG9jYWxTdG9yYWdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghc3RvcmFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIGF1dG8mIHN0b3JhZ2VBcmVhID0gc3RhdGljX2Nhc3Q8U3RvcmFnZUFyZWFJbXBs
Jj4oc3RvcmFnZS0+YXJlYSgpKTsKLSAgICAgICAgaWYgKHN0b3JhZ2VBcmVhLmlkZW50aWZpZXIo
KSA9PSBzdG9yYWdlQXJlYUltcGxJRCkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3Rv
cmFnZSBhcmVhIHRoYXQgY2F1c2VkIHRoZSBldmVudCB0byBiZSBkaXNwYXRjaGVkLgotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgCi0gICAgICAgIGlmIChhdXRvKiBmcmFt
ZSA9IGRvY3VtZW50LmZyYW1lKCkpIAotICAgICAgICAgICAgZnJhbWVzLmFwcGVuZCgqZnJhbWUp
OwotICAgIH0pOwotICAgIHJldHVybiBmcmFtZXM7Ci19Ci0KIHZvaWQgU3RvcmFnZUFyZWFNYXA6
OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudChjb25zdCBzdGQ6Om9wdGlvbmFsPFN0b3JhZ2VB
cmVhSW1wbElkZW50aWZpZXI+JiBzdG9yYWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQogewogICAgIC8vIE5hbWVzcGFjZSBJRHMgZm9yIHNlc3Npb24gc3Rv
cmFnZSBuYW1lc3BhY2VzIGFyZSBlcXVpdmFsZW50IHRvIHdlYiBwYWdlIElEcwpAQCAtMzQ1LDIy
ICszMDgsMjAgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2
ZW50KGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3RvcmFnZUFyZWEKICAgICBpZiAoIXBhZ2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGF1dG8gZnJhbWVzID0gZnJhbWVzRm9yRXZlbnREaXNwYXRjaGlu
ZygqcGFnZSwgbV9zZWN1cml0eU9yaWdpbiwgU3RvcmFnZVR5cGU6OlNlc3Npb24sIHN0b3JhZ2VB
cmVhSW1wbElEKTsKLSAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNlc3Npb25T
dG9yYWdlRXZlbnRzVG9GcmFtZXMoKnBhZ2UsIGZyYW1lcywga2V5LCBvbGRWYWx1ZSwgbmV3VmFs
dWUsIHVybFN0cmluZywgbV9zZWN1cml0eU9yaWdpbik7CisgICAgU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50cyhrZXksIG9sZFZhbHVlLCBuZXdWYWx1
ZSwgKnBhZ2UsIG1fc2VjdXJpdHlPcmlnaW4sIHVybFN0cmluZywgW3N0b3JhZ2VBcmVhSW1wbElE
XShhdXRvJiBzdG9yYWdlKSB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdG9yYWdlQXJl
YUltcGwmPihzdG9yYWdlLmFyZWEoKSkuaWRlbnRpZmllcigpID09IHN0b3JhZ2VBcmVhSW1wbElE
OworICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaXNwYXRjaExvY2FsU3RvcmFn
ZUV2ZW50KGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllcj4mIHN0
b3JhZ2VBcmVhSW1wbElELCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1
ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCiB7CiAg
ICAgQVNTRVJUKGlzTG9jYWxTdG9yYWdlKHR5cGUoKSkpOwogCi0gICAgVmVjdG9yPFJlZjxGcmFt
ZT4+IGZyYW1lczsKLQogICAgIC8vIE5hbWVzcGFjZSBJRHMgZm9yIGxvY2FsIHN0b3JhZ2UgbmFt
ZXNwYWNlcyBhcmUgY3VycmVudGx5IGVxdWl2YWxlbnQgdG8gd2ViIHBhZ2UgZ3JvdXAgSURzLgog
ICAgIGF1dG8mIHBhZ2VHcm91cCA9ICpXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlR3Jv
dXAobV9uYW1lc3BhY2UucGFnZUdyb3VwSUQoKSktPmNvcmVQYWdlR3JvdXAoKTsKLSAgICBmb3Ig
KGF1dG8mIHBhZ2UgOiBwYWdlR3JvdXAucGFnZXMoKSkKLSAgICAgICAgZnJhbWVzLmFwcGVuZFZl
Y3RvcihmcmFtZXNGb3JFdmVudERpc3BhdGNoaW5nKHBhZ2UsIG1fc2VjdXJpdHlPcmlnaW4sIFN0
b3JhZ2VUeXBlOjpMb2NhbCwgc3RvcmFnZUFyZWFJbXBsSUQpKTsKLQotICAgIFN0b3JhZ2VFdmVu
dERpc3BhdGNoZXI6OmRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFtZXMocGFnZUdyb3Vw
LCBmcmFtZXMsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmxTdHJpbmcsIG1fc2VjdXJpdHlP
cmlnaW4pOworICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoTG9jYWxTdG9yYWdl
RXZlbnRzKGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBwYWdlR3JvdXAsIG1fc2VjdXJpdHlPcmln
aW4sIHVybFN0cmluZywgW3N0b3JhZ2VBcmVhSW1wbElEXShhdXRvJiBzdG9yYWdlKSB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdG9yYWdlQXJlYUltcGwmPihzdG9yYWdlLmFyZWEoKSku
aWRlbnRpZmllcigpID09IHN0b3JhZ2VBcmVhSW1wbElEOworICAgIH0pOwogfQogCiB2b2lkIFN0
b3JhZ2VBcmVhTWFwOjpzZW5kQ29ubmVjdE1lc3NhZ2UoU2VuZE1vZGUgbW9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5oCmlu
ZGV4IDUxM2U0MGQ5MDA5YmU1N2UzMjdlYTBkYjUwYjUyYTNiYzgxYmJkN2IuLjI0ZDcwZThhMTAw
MzY2N2Q5NWUzYjZhMmYyOGNlYjcyMTZmNjNkYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuaApAQCAtNTgsOSArNTgsOSBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGVuZ3RoKCk7CiAgICAgU3RyaW5nIGtleSh1bnNpZ25l
ZCBpbmRleCk7CiAgICAgU3RyaW5nIGl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpOwotICAgIHZvaWQg
c2V0SXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291
cmNlQXJlYSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1
b3RhRXhjZXB0aW9uKTsKLSAgICB2b2lkIHJlbW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJj
ZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvbnN0IFN0cmluZyYga2V5KTsK
LSAgICB2b2lkIGNsZWFyKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJ
bXBsKiBzb3VyY2VBcmVhKTsKKyAgICB2b2lkIHNldEl0ZW0oV2ViQ29yZTo6RnJhbWUmIHNvdXJj
ZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbik7CisgICAgdm9pZCByZW1v
dmVJdGVtKFdlYkNvcmU6OkZyYW1lJiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3Vy
Y2VBcmVhLCBjb25zdCBTdHJpbmcmIGtleSk7CisgICAgdm9pZCBjbGVhcihXZWJDb3JlOjpGcmFt
ZSYgc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSk7CiAgICAgYm9vbCBj
b250YWlucyhjb25zdCBTdHJpbmcmIGtleSk7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcApp
bmRleCBiZmFjZDQ3YTZmNDcxMzM2MDUzZTk3MDViZDNkYWMyMTk0OGY5YTJjLi41NjdlYWZlZGVh
ZTA1MjhiOGY5NTFmZWI4MjI0MmNkOWUzYWY0ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcApAQCAtMjgsOSArMjgsMTIgQEAKICNpbmNs
dWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKICNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIK
ICNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NV2luZG93
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1NlY3VyaXR5T3JpZ2luRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU3RvcmFnZVR5cGUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMTIxLDcg
KzEyNCw3IEBAIFN0cmluZyBTdG9yYWdlQXJlYUltcGw6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkp
CiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC5nZXRJdGVtKGtleSk7CiB9CiAKLXZvaWQgU3RvcmFn
ZUFyZWFJbXBsOjpzZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKQordm9pZCBTdG9yYWdl
QXJlYUltcGw6OnNldEl0ZW0oRnJhbWUmIHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pCiB7CiAgICAgQVNTRVJU
KCFtX2lzU2h1dGRvd24pOwogICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwpAQCAtMTQxLDcg
KzE0NCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluCiAgICAgZGlzcGF0Y2hTdG9yYWdlRXZl
bnQoa2V5LCBvbGRWYWx1ZSwgdmFsdWUsIHNvdXJjZUZyYW1lKTsKIH0KIAotdm9pZCBTdG9yYWdl
QXJlYUltcGw6OnJlbW92ZUl0ZW0oRnJhbWUqIHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtl
eSkKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKEZyYW1lJiBzb3VyY2VGcmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJs
b2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwpAQCAtMTU3LDcgKzE2MCw3IEBAIHZvaWQgU3RvcmFn
ZUFyZWFJbXBsOjpyZW1vdmVJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXkpCiAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIHNv
dXJjZUZyYW1lKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyKEZyYW1lKiBzb3Vy
Y2VGcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihGcmFtZSYgc291cmNlRnJhbWUp
CiB7CiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpOwpAQCAtMjY5LDEyICsyNzIsMTkgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsb3Nl
RGF0YWJhc2VJZklkbGUoKQogICAgIH0KIH0KIAotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmRpc3Bh
dGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVl
LCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCit2b2lkIFN0b3Jh
Z2VBcmVhSW1wbDo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lJiBzb3VyY2VG
cmFtZSkKIHsKKyAgICBhdXRvKiBwYWdlID0gc291cmNlRnJhbWUucGFnZSgpOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBpc1NvdXJjZVN0b3JhZ2UgPSBbJnNv
dXJjZUZyYW1lXShTdG9yYWdlJiBzdG9yYWdlKSB7CisgICAgICAgIHJldHVybiBzdG9yYWdlLmZy
YW1lKCkgPT0gJnNvdXJjZUZyYW1lOworICAgIH07CiAgICAgaWYgKGlzTG9jYWxTdG9yYWdlKG1f
c3RvcmFnZVR5cGUpKQotICAgICAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaExv
Y2FsU3RvcmFnZUV2ZW50cyhrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgbV9zZWN1cml0eU9yaWdp
biwgc291cmNlRnJhbWUpOworICAgICAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aExvY2FsU3RvcmFnZUV2ZW50cyhrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgcGFnZS0+Z3JvdXAo
KSwgbV9zZWN1cml0eU9yaWdpbiwgc291cmNlRnJhbWUuZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCksIFdURk1vdmUoaXNTb3VyY2VTdG9yYWdlKSk7CiAgICAgZWxzZQotICAgICAgICBTdG9yYWdl
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzKGtleSwgb2xkVmFs
dWUsIG5ld1ZhbHVlLCBtX3NlY3VyaXR5T3JpZ2luLCBzb3VyY2VGcmFtZSk7CisgICAgICAgIFN0
b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMoa2V5LCBv
bGRWYWx1ZSwgbmV3VmFsdWUsICpwYWdlLCBtX3NlY3VyaXR5T3JpZ2luLCBzb3VyY2VGcmFtZS5k
b2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgV1RGTW92ZShpc1NvdXJjZVN0b3JhZ2UpKTsKIH0K
IAogdm9pZCBTdG9yYWdlQXJlYUltcGw6OnNlc3Npb25DaGFuZ2VkKGJvb2wgaXNOZXdTZXNzaW9u
UGVyc2lzdGVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9y
YWdlQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYUlt
cGwuaAppbmRleCA1NTIyMDg0YTc4Mzk3YzI0NjE4OTBlNGMzMTAyYTg2OWE4M2EyODU3Li41ZDU0
OWU4ZTIxZmI4Njg4MzI3YzUzZGU2MmI2ZmY0YTJjNTNjZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCkBAIC00OSw5ICs0OSw5IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBvdmVycmlkZTsKICAgICBTdHJpbmcga2V5KHVuc2ln
bmVkIGluZGV4KSBvdmVycmlkZTsKICAgICBTdHJpbmcgaXRlbShjb25zdCBTdHJpbmcmIGtleSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRJdGVtKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0
aW9uKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJj
ZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhcihXZWJD
b3JlOjpGcmFtZSogc291cmNlRnJhbWUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0SXRlbShXZWJD
b3JlOjpGcmFtZSYgc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVJ
dGVtKFdlYkNvcmU6OkZyYW1lJiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJy
aWRlOworICAgIHZvaWQgY2xlYXIoV2ViQ29yZTo6RnJhbWUmIHNvdXJjZUZyYW1lKSBvdmVycmlk
ZTsKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKIAogICAg
IFdlYkNvcmU6OlN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04
Miw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KSBjb25zdDsKICAgICB2b2lkIGNsb3NlRGF0YWJhc2VUaW1lckZpcmVkKCk7CiAKLSAgICB2b2lk
IGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9s
ZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBXZWJDb3JlOjpGcmFtZSogc291cmNlRnJh
bWUpOworICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIFdlYkNvcmU6OkZy
YW1lJiBzb3VyY2VGcmFtZSk7CiAKICAgICBXZWJDb3JlOjpTdG9yYWdlVHlwZSBtX3N0b3JhZ2VU
eXBlOwogICAgIFJlZjxjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9y
aWdpbjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452819</attachid>
            <date>2022-02-21 20:11:51 -0800</date>
            <delta_ts>2022-02-22 01:49:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236985-20220221201150.patch</filename>
            <type>text/plain</type>
            <size>37966</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhkOTM2YTVkMzEzNmRl
MmRhMGRlYjRjOTVkZDAxMzY3ZGU4MDUyMy4uNjI5NTNhNWRkNDMyODdmNDBkMmNmNzI2YzVkNWZh
NDdhOWZhNDBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIyLTAyLTIxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgaGF2aW5nIHRvIGl0
ZXJhdGUgdGhlIHdob2xlIGZyYW1lIHRyZWUocykgZXZlcnkgdGltZSB3ZSBuZWVkIHRvIGRpc3Bh
dGNoIHN0b3JhZ2UgZXZlbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzY5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKwor
ICAgICAgICBBdm9pZCBoYXZpbmcgdG8gaXRlcmF0ZSB0aGUgd2hvbGUgZnJhbWUgdHJlZShzKSBl
dmVyeSB0aW1lIHdlIG5lZWQgdG8gZGlzcGF0Y2ggc3RvcmFnZSBldmVudHMsCisgICAgICAgIGJ5
IGtlZXBpbmcgdHJhY2sgb2Ygd2luZG93IG9iamVjdHMgaW50ZXJlc3RlZCBpbiBzdG9yYWdlIGV2
ZW50cy4gQSBXaW5kb3cgb2JqZWN0IGlzIGludGVyZXN0ZWQKKyAgICAgICAgaW4gc3RvcmFnZSBl
dmVudHMgaWYgYm90aCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKKyAgICAg
ICAgMS4gSXQgaGFzIGEgU3RvcmFnZSBvYmplY3QgKGVpdGhlciBsb2NhbFN0b3JhZ2Ugb3Igc2Vz
c2lvblN0b3JhZ2UpCisgICAgICAgIDIuIEl0IGhhcyBhIHN0b3JhZ2UgZXZlbnQgbGlzdGVuZXIg
cmVnaXN0ZXJlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzIHRoZSBjb2Rl
IHNvIHRoYXQgd2Ugc2hhcmUgbW9yZSBsb2dpYyBiZXR3ZWVuIFdlYktpdDEgYW5kIFdlYktpdDIu
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0
b3JhZ2VJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
cmVtb3ZlRE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyk6CisgICAgICAgICogbG9hZGVyL0VtcHR5
Q2xpZW50cy5jcHA6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6d2luZG93c0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93Ojpmb3JFYWNoV2luZG93SW50ZXJlc3RlZEluU3RvcmFnZUV2ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6On5ET01XaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93Ojp3aWxsRGV0YWNoRG9jdW1lbnRGcm9tRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV2luZG93OjpldmVudExpc3RlbmVyc0RpZENoYW5nZSk6CisgICAgICAgICogcGFn
ZS9ET01XaW5kb3cuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvd1Byb3BlcnR5Lmg6CisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OnNl
dEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZTo6cmVtb3ZlSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlOjpjbGVhcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJl
YS5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzVG9XaW5kb3dzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9XaW5kb3dzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2Vzc2lvblN0
b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50c1RvRnJhbWVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
TG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oOgorCiAyMDIyLTAyLTIxICBCcmFuZG9uIFN0ZXdhcnQg
IDxicmFuZG9uc3Rld2FydEBhcHBsZS5jb20+CiAKICAgICAgICAgRW5zdXJlIGxheWVyIGhhcyBi
YWNraW5nIGR1cmluZyB0cmF2ZXJzYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYjgwNDgwNjlkODU1OGQ3NzExNzgy
MDYyMDAxODI4Yjc5OGI3OTZmYS4uZDdmYjkwOTI5YzA0MDFhMGRlZmVjYjQ4MWExODEwOWY1ZDEw
ZmZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMi0wMi0yMSAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEF2b2lkIGhhdmluZyB0byBpdGVyYXRlIHRo
ZSB3aG9sZSBmcmFtZSB0cmVlKHMpIGV2ZXJ5IHRpbWUgd2UgbmVlZCB0byBkaXNwYXRjaCBzdG9y
YWdlIGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM2OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAg
QXZvaWQgaGF2aW5nIHRvIGl0ZXJhdGUgdGhlIHdob2xlIGZyYW1lIHRyZWUocykgZXZlcnkgdGlt
ZSB3ZSBuZWVkIHRvIGRpc3BhdGNoIHN0b3JhZ2UgZXZlbnRzLAorICAgICAgICBieSBrZWVwaW5n
IHRyYWNrIG9mIHdpbmRvdyBvYmplY3RzIGludGVyZXN0ZWQgaW4gc3RvcmFnZSBldmVudHMuIEEg
V2luZG93IG9iamVjdCBpcyBpbnRlcmVzdGVkCisgICAgICAgIGluIHN0b3JhZ2UgZXZlbnRzIGlm
IGJvdGggb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6CisgICAgICAgIDEuIEl0
IGhhcyBhIFN0b3JhZ2Ugb2JqZWN0IChlaXRoZXIgbG9jYWxTdG9yYWdlIG9yIHNlc3Npb25TdG9y
YWdlKQorICAgICAgICAyLiBJdCBoYXMgYSBzdG9yYWdlIGV2ZW50IGxpc3RlbmVyIHJlZ2lzdGVy
ZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlZmFjdG9ycyB0aGUgY29kZSBzbyB0aGF0
IHdlIHNoYXJlIG1vcmUgbG9naWMgYmV0d2VlbiBXZWJLaXQxIGFuZCBXZWJLaXQyLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVh
SW1wbDo6Y2xlYXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJl
YUltcGwuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbSk6CisgICAgICAg
IChXZWJLaXQ6OlN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6
U3RvcmFnZUFyZWFNYXA6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZUFyZWFNYXA6
OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VB
cmVhTWFwOjpkaXNwYXRjaExvY2FsU3RvcmFnZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6ZnJh
bWVzRm9yRXZlbnREaXNwYXRjaGluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmg6CisKIDIwMjItMDItMjEgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gQWRqdXN0IHNvbWUgYmVo
YXZpb3JzIGFyb3VuZCB0aGUgIk1hcmt1cCBJbWFnZSIgYWN0aW9uIGluIHRoZSBjYWxsb3V0IGJh
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCBkNmE3ZmRiN2Y5YzhhOWU0YmIyMDhhYWNiMTY5YTU5
YWI1ODg2ZTQ1Li44MzhhZWI0ZGI5NDVkOWIyOTU2YjBkOWY3OGU5ZWMzMTMxYmYyYzQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIyLTAyLTIxICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgaGF2aW5nIHRvIGl0ZXJhdGUg
dGhlIHdob2xlIGZyYW1lIHRyZWUocykgZXZlcnkgdGltZSB3ZSBuZWVkIHRvIGRpc3BhdGNoIHN0
b3JhZ2UgZXZlbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzY5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBBdm9pZCBoYXZpbmcgdG8gaXRlcmF0ZSB0aGUgd2hvbGUgZnJhbWUgdHJlZShzKSBldmVyeSB0
aW1lIHdlIG5lZWQgdG8gZGlzcGF0Y2ggc3RvcmFnZSBldmVudHMsCisgICAgICAgIGJ5IGtlZXBp
bmcgdHJhY2sgb2Ygd2luZG93IG9iamVjdHMgaW50ZXJlc3RlZCBpbiBzdG9yYWdlIGV2ZW50cy4g
QSBXaW5kb3cgb2JqZWN0IGlzIGludGVyZXN0ZWQKKyAgICAgICAgaW4gc3RvcmFnZSBldmVudHMg
aWYgYm90aCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKKyAgICAgICAgMS4g
SXQgaGFzIGEgU3RvcmFnZSBvYmplY3QgKGVpdGhlciBsb2NhbFN0b3JhZ2Ugb3Igc2Vzc2lvblN0
b3JhZ2UpCisgICAgICAgIDIuIEl0IGhhcyBhIHN0b3JhZ2UgZXZlbnQgbGlzdGVuZXIgcmVnaXN0
ZXJlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzIHRoZSBjb2RlIHNvIHRo
YXQgd2Ugc2hhcmUgbW9yZSBsb2dpYyBiZXR3ZWVuIFdlYktpdDEgYW5kIFdlYktpdDIuCisKKyAg
ICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0
b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1w
bDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIp
OgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlQXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50
KToKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oOgorCiAyMDIyLTAyLTE5ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgT3B0aW1pemUgRE9NIHN0
b3JhZ2UgZXZlbnQgZGlzcGF0Y2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCA0MWQzZTE1
ZTkxOTY3YmM3N2QwMDFjMzU1Yjg5YzMxZDg1MzkwZGEzLi4xM2ZjMGI4MWVmODc2YjU5ZTkxOGYx
OWRkOTg2OTljNDVmZjYzMDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC0xMjUsNyAr
MTI1LDcgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpzZXRET01TdG9yYWdlSXRlbShSZWY8SlMKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGJvb2wgcXVvdGFFeGNlcHRpb24gPSBmYWxzZTsK
LSAgICBzdG9yYWdlQXJlYS0+c2V0SXRlbShmcmFtZSwga2V5LCB2YWx1ZSwgcXVvdGFFeGNlcHRp
b24pOworICAgIHN0b3JhZ2VBcmVhLT5zZXRJdGVtKCpmcmFtZSwga2V5LCB2YWx1ZSwgcXVvdGFF
eGNlcHRpb24pOwogICAgIGlmIChxdW90YUV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKERPTUV4Y2VwdGlvbjo6bmFtZShRdW90YUV4Y2VlZGVkRXJyb3IpKTsKIApAQCAt
MTQxLDcgKzE0MSw3IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oUmVmCiAgICAgaWYgKCFzdG9yYWdl
QXJlYSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAg
IHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGZyYW1lLCBrZXkpOworICAgIHN0b3JhZ2VBcmVhLT5y
ZW1vdmVJdGVtKCpmcmFtZSwga2V5KTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xNTUsNyAr
MTU1LDcgQEAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyhSZWYKICAgICBpZiAoIXN0b3JhZ2VBcmVhKQog
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3RvcmFn
ZUFyZWEtPmNsZWFyKGZyYW1lKTsKKyAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoKmZyYW1lKTsKIAog
ICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1w
dHlDbGllbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCmlu
ZGV4IDQ2MjI1NDcxZmRkMGE3OTdkY2NjZDgxNWQ0YWMzMTVmOWIwYTU3OTMuLmFkNzJkOWVmMTFh
ZWZjNzA5MDQ2OGE1YzI3NTcwOTkwZDlkNmVmODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuY3BwCkBAIC00ODQsOSArNDg0LDkgQEAgY2xhc3MgRW1wdHlTdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXIgZmluYWwgOiBwdWJsaWMgU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyIHsKICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgZmluYWwgeyByZXR1cm4gMDsgfQogICAgICAgICBTdHJp
bmcga2V5KHVuc2lnbmVkKSBmaW5hbCB7IHJldHVybiB7IH07IH0KICAgICAgICAgU3RyaW5nIGl0
ZW0oY29uc3QgU3RyaW5nJikgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgICAgIHZvaWQgc2V0
SXRlbShGcmFtZSosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wmKSBmaW5hbCB7
IH0KLSAgICAgICAgdm9pZCByZW1vdmVJdGVtKEZyYW1lKiwgY29uc3QgU3RyaW5nJikgZmluYWwg
eyB9Ci0gICAgICAgIHZvaWQgY2xlYXIoRnJhbWUqKSBmaW5hbCB7IH0KKyAgICAgICAgdm9pZCBz
ZXRJdGVtKEZyYW1lJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCYpIGZpbmFs
IHsgfQorICAgICAgICB2b2lkIHJlbW92ZUl0ZW0oRnJhbWUmLCBjb25zdCBTdHJpbmcmKSBmaW5h
bCB7IH0KKyAgICAgICAgdm9pZCBjbGVhcihGcmFtZSYpIGZpbmFsIHsgfQogICAgICAgICBib29s
IGNvbnRhaW5zKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAg
IFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RvcmFnZVR5
cGU6OkxvY2FsOyB9CiAgICAgICAgIHNpemVfdCBtZW1vcnlCeXRlc1VzZWRCeUNhY2hlKCkgZmlu
YWwgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDk5ZDQyYzFk
NWI4MmE3MmVmNzdmMjAzYWE1MDJkODYwZDc1NzdmYmQuLjUxNDc1MDdkNmEwNGJmY2IyYjU4ZmE3
YTY5ZWZmMGNlNzI0YzkxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTE1Niw2
ICsxNTYsMTggQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogc3RhdGljIGNvbnN0IFNl
Y29uZHMgZGVmYXVsdFRyYW5zaWVudEFjdGl2YXRpb25EdXJhdGlvbiB7IDJfcyB9OwogCitzdGF0
aWMgV2Vha0hhc2hTZXQ8RE9NV2luZG93PiYgd2luZG93c0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVu
dHMoKQoreworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8V2Vha0hhc2hTZXQ8
RE9NV2luZG93Pj4gc2V0OworICAgIHJldHVybiBzZXQ7Cit9CisKK3ZvaWQgRE9NV2luZG93Ojpm
b3JFYWNoV2luZG93SW50ZXJlc3RlZEluU3RvcmFnZUV2ZW50cyhjb25zdCBGdW5jdGlvbjx2b2lk
KERPTVdpbmRvdyYpPiYgYXBwbHkpCit7CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiBjb3B5VG9W
ZWN0b3JPZjxSZWY8RE9NV2luZG93Pj4od2luZG93c0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVudHMo
KSkpCisgICAgICAgIGFwcGx5KHdpbmRvdyk7Cit9CisKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNl
Y29uZHM+JiB0cmFuc2llbnRBY3RpdmF0aW9uRHVyYXRpb25PdmVycmlkZUZvclRlc3RpbmcoKQog
ewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6Om9wdGlvbmFsPFNlY29uZHM+PiBvdmVy
cmlkZUZvclRlc3Rpbmc7CkBAIC00NDIsNiArNDU0LDggQEAgRE9NV2luZG93Ojp+RE9NV2luZG93
KCkKICNlbmRpZgogCiAgICAgcmVtb3ZlTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlcih0aGlzKTsKKwor
ICAgIHdpbmRvd3NJbnRlcmVzdGVkSW5TdG9yYWdlRXZlbnRzKCkucmVtb3ZlKCp0aGlzKTsKIH0K
IAogUmVmUHRyPE1lZGlhUXVlcnlMaXN0PiBET01XaW5kb3c6Om1hdGNoTWVkaWEoY29uc3QgU3Ry
aW5nJiBtZWRpYSkKQEAgLTQ5OSw2ICs1MTMsOCBAQCB2b2lkIERPTVdpbmRvdzo6d2lsbERldGFj
aERvY3VtZW50RnJvbUZyYW1lKCkKICAgICBpZiAobV9wZXJmb3JtYW5jZSkKICAgICAgICAgbV9w
ZXJmb3JtYW5jZS0+Y2xlYXJSZXNvdXJjZVRpbWluZ3MoKTsKIAorICAgIHdpbmRvd3NJbnRlcmVz
dGVkSW5TdG9yYWdlRXZlbnRzKCkucmVtb3ZlKCp0aGlzKTsKKwogICAgIEpTRE9NV2luZG93QmFz
ZTo6ZmlyZUZyYW1lQ2xlYXJlZFdhdGNocG9pbnRzRm9yV2luZG93KHRoaXMpOwogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVXaW5kb3dEaXNjYXJkZWQoKmZyYW1lKCksIHRoaXMp
OwogfQpAQCAtODMyLDYgKzg0OCw4IEBAIEV4Y2VwdGlvbk9yPFN0b3JhZ2UqPiBET01XaW5kb3c6
OnNlc3Npb25TdG9yYWdlKCkKIAogICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBwYWdlLT5zZXNzaW9u
U3RvcmFnZSgpLT5zdG9yYWdlQXJlYShkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAg
bV9zZXNzaW9uU3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzdG9yYWdl
QXJlYSkpOworICAgIGlmIChoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuc3RvcmFnZUV2
ZW50KSkKKyAgICAgICAgd2luZG93c0ludGVyZXN0ZWRJblN0b3JhZ2VFdmVudHMoKS5hZGQoKnRo
aXMpOwogICAgIHJldHVybiBtX3Nlc3Npb25TdG9yYWdlLmdldCgpOwogfQogCkBAIC04NjYsNiAr
ODg0LDggQEAgRXhjZXB0aW9uT3I8U3RvcmFnZSo+IERPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKCkK
IAogICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBwYWdlLT5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIo
KS5sb2NhbFN0b3JhZ2VBcmVhKCpkb2N1bWVudCk7CiAgICAgbV9sb2NhbFN0b3JhZ2UgPSBTdG9y
YWdlOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc3RvcmFnZUFyZWEpKTsKKyAgICBpZiAoaGFzRXZl
bnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCkpCisgICAgICAgIHdpbmRvd3NJ
bnRlcmVzdGVkSW5TdG9yYWdlRXZlbnRzKCkuYWRkKCp0aGlzKTsKICAgICByZXR1cm4gbV9sb2Nh
bFN0b3JhZ2UuZ2V0KCk7CiB9CiAKQEAgLTI2OTcsNCArMjcxNywxNCBAQCBGcmFtZSogRE9NV2lu
ZG93OjpmcmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIGRvY3VtZW50ID8gZG9jdW1lbnQtPmZyYW1l
KCkgOiBudWxscHRyOwogfQogCit2b2lkIERPTVdpbmRvdzo6ZXZlbnRMaXN0ZW5lcnNEaWRDaGFu
Z2UoKQoreworICAgIGlmIChtX2xvY2FsU3RvcmFnZSB8fCBtX3Nlc3Npb25TdG9yYWdlKSB7Cisg
ICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50KSkK
KyAgICAgICAgICAgIHdpbmRvd3NJbnRlcmVzdGVkSW5TdG9yYWdlRXZlbnRzKCkuYWRkKCp0aGlz
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgd2luZG93c0ludGVyZXN0ZWRJblN0b3JhZ2VF
dmVudHMoKS5yZW1vdmUoKnRoaXMpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKaW5kZXggYzVkYWJhMTczYzkzYTRhY2MzMmQ4YzJiNDIz
NjA0YTMzYjc5ODA3Ny4uZmUxY2EwMDE3MTIyMGQyZmU3Njc1NjU1Y2JjMWIxOTY4ZWQwZWZiYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCkBAIC00MTAsNiArNDEwLDkgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0TWF5UmV1c2VGb3JOYXZpZ2F0aW9uKGJvb2wgbWF5UmV1c2VGb3JOYXZpZ2F0aW9u
KSB7IG1fbWF5UmV1c2VGb3JOYXZpZ2F0aW9uID0gbWF5UmV1c2VGb3JOYXZpZ2F0aW9uOyB9CiAg
ICAgYm9vbCBtYXlSZXVzZUZvck5hdmlnYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21heVJldXNl
Rm9yTmF2aWdhdGlvbjsgfQogCisgICAgUGFnZSogcGFnZSgpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIGZvckVhY2hXaW5kb3dJbnRlcmVzdGVkSW5TdG9yYWdlRXZlbnRz
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoRE9NV2luZG93Jik+Jik7CisKIHByaXZhdGU6CiAgICAgZXhw
bGljaXQgRE9NV2luZG93KERvY3VtZW50Jik7CiAKQEAgLTQxNyw4ICs0MjAsOCBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBpc0xvY2FsRE9NV2luZG93KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIGJvb2wgaXNSZW1vdGVET01XaW5kb3coKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZvaWQgZXZlbnRMaXN0ZW5lcnNEaWRDaGFuZ2UoKSBmaW5hbDsKIAotICAg
IFBhZ2UqIHBhZ2UoKSBjb25zdDsKICAgICBib29sIGFsbG93ZWRUb0NoYW5nZVdpbmRvd0dlb21l
dHJ5KCkgY29uc3Q7CiAKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmUHRyPEZyYW1lPj4gY3Jl
YXRlV2luZG93KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBBdG9tU3RyaW5nJiBmcmFt
ZU5hbWUsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiwgRE9NV2luZG93JiBhY3RpdmVXaW5kb3csIEZy
YW1lJiBmaXJzdEZyYW1lLCBGcmFtZSYgb3BlbmVyRnJhbWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
RE9NV2luZG93Jik+JiBwcmVwYXJlRGlhbG9nRnVuY3Rpb24gPSBudWxscHRyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93UHJvcGVydHkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93UHJvcGVydHkuaAppbmRleCAwYWFhZmIzZDNmN2NiNWZjMWU1M2Zi
M2VmZTIyYTE4MzkwNjkzMGJjLi4zZmU4YjBjYjA3YzU0NTNiM2VkODI3NzdhMTc5MDllNzc2MWMy
ZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvd1Byb3BlcnR5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dQcm9wZXJ0eS5oCkBAIC0zNCw3ICsz
NCw3IEBAIGNsYXNzIEZyYW1lOwogCiBjbGFzcyBET01XaW5kb3dQcm9wZXJ0eSB7CiBwdWJsaWM6
Ci0gICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRnJhbWUqIGZy
YW1lKCkgY29uc3Q7CiAgICAgRE9NV2luZG93KiB3aW5kb3coKSBjb25zdDsKIAogcHJvdGVjdGVk
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAKaW5kZXggNmM5MzlhZjM0YTk3ODkzYjZjYTU2
ZWRlNTk5YWEyZTcwYWY4NzQ4Ni4uMmJmNzE2NGZlNTg0NmE1NzhmMjlmY2M5ZTczMDg2MjhiOGUx
N2UwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwCkBAIC04MSw3ICs4MSw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFN0b3JhZ2U6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKIAogICAgIGJvb2wgcXVvdGFFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBtX3N0b3Jh
Z2VBcmVhLT5zZXRJdGVtKGZyYW1lLCBrZXksIHZhbHVlLCBxdW90YUV4Y2VwdGlvbik7CisgICAg
bV9zdG9yYWdlQXJlYS0+c2V0SXRlbSgqZnJhbWUsIGtleSwgdmFsdWUsIHF1b3RhRXhjZXB0aW9u
KTsKICAgICBpZiAocXVvdGFFeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBR
dW90YUV4Y2VlZGVkRXJyb3IgfTsKICAgICByZXR1cm4geyB9OwpAQCAtOTMsNyArOTMsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBTdG9yYWdlOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5KQog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKIAotICAgIG1fc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0oZnJhbWUsIGtleSk7Cisg
ICAgbV9zdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbSgqZnJhbWUsIGtleSk7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIApAQCAtMTAzLDcgKzEwMyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFN0b3JhZ2U6OmNs
ZWFyKCkKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAKLSAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcihmcmFtZSk7CisgICAg
bV9zdG9yYWdlQXJlYS0+Y2xlYXIoKmZyYW1lKTsKICAgICByZXR1cm4geyB9OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKaW5kZXggNzc0NjE0MGY3ODQwODFiMDc4NmExNWQ2
MDFmZWZjYTJjOTFjMTBhNi4uOGYxYzgyM2I2OTNiNjJhNjJkYjlhMzM3ZjI5OWI5YzYwYzY0Yzdm
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaApAQCAtNDYsOSArNDYsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSA9IDA7CiAgICAgdmlydHVhbCBT
dHJpbmcga2V5KHVuc2lnbmVkIGluZGV4KSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgaXRlbShj
b25zdCBTdHJpbmcmIGtleSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKEZyYW1lKiBz
b3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wm
IHF1b3RhRXhjZXB0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oRnJhbWUq
IHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBj
bGVhcihGcmFtZSogc291cmNlRnJhbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShG
cmFtZSYgc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBib29sJiBxdW90YUV4Y2VwdGlvbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJdGVt
KEZyYW1lJiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXIoRnJhbWUmIHNvdXJjZUZyYW1lKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNv
bnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSA9IDA7CiAKICAgICB2aXJ0dWFsIFN0b3JhZ2VUeXBl
IHN0b3JhZ2VUeXBlKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggMTM3NWMwZDllYTk4YWI2OWM4MzY1NTRl
Njg5NGFiZjZiZWQwYjU2NC4uYWI0ZGU2OWNhYjI4ODE0OTdmOWRlNDIwZDYzNjY3NGE0Y2QyZjM5
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRj
aGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNo
ZXIuY3BwCkBAIC00MCw2OSArNDAsNjggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqIHNvdXJj
ZUZyYW1lKQotewotICAgIFBhZ2UqIHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFnZSgpOwotICAgIGlm
ICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFJlZjxGcmFtZT4+IGZyYW1l
czsKLQotICAgIC8vIFNlbmQgZXZlbnRzIG9ubHkgdG8gb3VyIHBhZ2UuCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHdpbmRvdyA9IGZyYW1lLT53
aW5kb3coKTsgIXdpbmRvdyB8fCAhd2luZG93LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVz
KCkuc3RvcmFnZUV2ZW50KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc291
cmNlRnJhbWUgIT0gZnJhbWUgJiYgZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCku
ZXF1YWwoJnNlY3VyaXR5T3JpZ2luKSkKLSAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoKmZyYW1l
KTsKLSAgICB9Ci0KLSAgICBkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzVG9GcmFtZXMoKnBh
Z2UsIGZyYW1lcywga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVu
dCgpLT51cmwoKS5zdHJpbmcoKSwgc2VjdXJpdHlPcmlnaW4pOwotfQotCi12b2lkIFN0b3JhZ2VF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25z
dCBTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsK
LSAgICBQYWdlKiBwYWdlID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxSZWY8RnJhbWU+PiBmcmFtZXM7Ci0KLSAgICAv
LyBTZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlLgotICAgIGZvciAoYXV0byYgcGFnZUluR3JvdXAg
OiBwYWdlLT5ncm91cCgpLnBhZ2VzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvKiBmcmFtZSA9ICZw
YWdlSW5Hcm91cC5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIHdpbmRvdyA9IGZyYW1lLT53aW5k
b3coKTsgIXdpbmRvdyB8fCAhd2luZG93LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCku
c3RvcmFnZUV2ZW50KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlm
IChzb3VyY2VGcmFtZSAhPSBmcmFtZSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKS5lcXVhbCgmc2VjdXJpdHlPcmlnaW4pKQotICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBl
bmQoKmZyYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRpc3BhdGNoTG9jYWxTdG9yYWdl
RXZlbnRzVG9GcmFtZXMocGFnZS0+Z3JvdXAoKSwgZnJhbWVzLCBrZXksIG9sZFZhbHVlLCBuZXdW
YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBzZWN1cml0eU9y
aWdpbik7Ci19Ci0KLXZvaWQgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTZXNzaW9u
U3RvcmFnZUV2ZW50c1RvRnJhbWVzKFBhZ2UmIHBhZ2UsIGNvbnN0IFZlY3RvcjxSZWY8RnJhbWU+
PiYgZnJhbWVzLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29u
c3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFNlY3VyaXR5T3Jp
Z2luJiBzZWN1cml0eU9yaWdpbikKK3N0YXRpYyB2b2lkIGRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VF
dmVudHNUb1dpbmRvd3MoUGFnZSYgcGFnZSwgY29uc3QgVmVjdG9yPFJlZjxET01XaW5kb3c+PiYg
d2luZG93cywgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0
IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTZWN1cml0eU9yaWdp
biYgc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRE
aXNwYXRjaERPTVN0b3JhZ2VFdmVudChwYWdlLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgU3Rv
cmFnZVR5cGU6OlNlc3Npb24sIHNlY3VyaXR5T3JpZ2luKTsKIAotICAgIGZvciAoYXV0byYgZnJh
bWUgOiBmcmFtZXMpIHsKLSAgICAgICAgUmVmUHRyIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZG9jdW1lbnQtPmRvbVdpbmRvdygpLT5zZXNzaW9u
U3RvcmFnZSgpOworICAgIGZvciAoYXV0byYgd2luZG93IDogd2luZG93cykgeworICAgICAgICBS
ZWZQdHIgZG9jdW1lbnQgPSB3aW5kb3ctPmRvY3VtZW50KCk7CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gd2luZG93LT5zZXNzaW9uU3RvcmFnZSgpOwogICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNl
cHRpb24oKSkgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2Vic3Rv
cmFnZS5odG1sI3RoZS1zdG9yYWdlLWV2ZW50OmV2ZW50LXN0b3JhZ2UKICAgICAgICAgICAgIGRv
Y3VtZW50LT5xdWV1ZVRhc2tUb0Rpc3BhdGNoRXZlbnRPbldpbmRvdyhUYXNrU291cmNlOjpET01N
YW5pcHVsYXRpb24sIFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZl
bnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmwsIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKSkpOwogICAgIH0KIH0KIAotdm9pZCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aExvY2FsU3RvcmFnZUV2ZW50c1RvRnJhbWVzKFBhZ2VHcm91cCYgcGFnZUdyb3VwLCBjb25zdCBW
ZWN0b3I8UmVmPEZyYW1lPj4mIGZyYW1lcywgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCitzdGF0aWMgdm9pZCBkaXNwYXRj
aExvY2FsU3RvcmFnZUV2ZW50c1RvV2luZG93cyhQYWdlR3JvdXAmIHBhZ2VHcm91cCwgY29uc3Qg
VmVjdG9yPFJlZjxET01XaW5kb3c+PiYgd2luZG93cywgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCiB7CiAgICAgZm9yIChh
dXRvJiBwYWdlIDogcGFnZUdyb3VwLnBhZ2VzKCkpCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQocGFnZSwga2V5LCBvbGRWYWx1ZSwg
bmV3VmFsdWUsIFN0b3JhZ2VUeXBlOjpMb2NhbCwgc2VjdXJpdHlPcmlnaW4pOwogCi0gICAgZm9y
IChhdXRvJiBmcmFtZSA6IGZyYW1lcykgewotICAgICAgICBSZWZQdHIgZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBkb2N1bWVudC0+ZG9tV2luZG93
KCktPmxvY2FsU3RvcmFnZSgpOworICAgIGZvciAoYXV0byYgd2luZG93IDogd2luZG93cykgewor
ICAgICAgICBSZWZQdHIgZG9jdW1lbnQgPSB3aW5kb3ctPmRvY3VtZW50KCk7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gd2luZG93LT5sb2NhbFN0b3JhZ2UoKTsKICAgICAgICAgaWYgKCFyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdl
L3dlYnN0b3JhZ2UuaHRtbCN0aGUtc3RvcmFnZS1ldmVudDpldmVudC1zdG9yYWdlCiAgICAgICAg
ICAgICBkb2N1bWVudC0+cXVldWVUYXNrVG9EaXNwYXRjaEV2ZW50T25XaW5kb3coVGFza1NvdXJj
ZTo6RE9NTWFuaXB1bGF0aW9uLCBTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3Rv
cmFnZUV2ZW50LCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsLCByZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkpKTsKICAgICB9CiB9CiAKK3ZvaWQgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50cyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgUGFnZSYgcGFnZSwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
RnVuY3Rpb248Ym9vbChTdG9yYWdlJik+JiBpc1NvdXJjZVN0b3JhZ2UpCit7CisgICAgVmVjdG9y
PFJlZjxET01XaW5kb3c+PiB3aW5kb3dzOworICAgIERPTVdpbmRvdzo6Zm9yRWFjaFdpbmRvd0lu
dGVyZXN0ZWRJblN0b3JhZ2VFdmVudHMoWyZdKGF1dG8mIHdpbmRvdykgeworICAgICAgICBpZiAo
IXdpbmRvdy5vcHRpb25hbFNlc3Npb25TdG9yYWdlKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIC8vIFNlbmQgZXZlbnRzIG9ubHkgdG8gb3VyIHBhZ2UuCisgICAgICAgIGlmICh3aW5k
b3cucGFnZSgpICE9ICZwYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoaXNT
b3VyY2VTdG9yYWdlKCp3aW5kb3cub3B0aW9uYWxTZXNzaW9uU3RvcmFnZSgpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFzZWN1cml0eU9yaWdpbi5lcXVhbCh3aW5kb3cuc2Vj
dXJpdHlPcmlnaW4oKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdpbmRvd3MuYXBw
ZW5kKHdpbmRvdyk7CisgICAgfSk7CisKKyAgICBkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRz
VG9XaW5kb3dzKHBhZ2UsIHdpbmRvd3MsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmwsIHNl
Y3VyaXR5T3JpZ2luKTsKK30KKwordm9pZCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aExvY2FsU3RvcmFnZUV2ZW50cyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRW
YWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgUGFnZUdyb3VwJiBwYWdlR3JvdXAsIGNvbnN0
IFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IEZ1bmN0aW9uPGJvb2woU3RvcmFnZSYpPiYgaXNTb3VyY2VTdG9yYWdlKQoreworICAgIGF1dG8m
IHBhZ2VzSW5Hcm91cCA9IHBhZ2VHcm91cC5wYWdlcygpOworICAgIFZlY3RvcjxSZWY8RE9NV2lu
ZG93Pj4gd2luZG93czsKKyAgICBET01XaW5kb3c6OmZvckVhY2hXaW5kb3dJbnRlcmVzdGVkSW5T
dG9yYWdlRXZlbnRzKFsmXShhdXRvJiB3aW5kb3cpIHsKKyAgICAgICAgaWYgKCF3aW5kb3cub3B0
aW9uYWxMb2NhbFN0b3JhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gU2Vu
ZCBldmVudHMgdG8gZXZlcnkgcGFnZSBpbiB0aGUgZ3JvdXAuCisgICAgICAgIGlmICghd2luZG93
LnBhZ2UoKSB8fCAhcGFnZXNJbkdyb3VwLmNvbnRhaW5zKCp3aW5kb3cucGFnZSgpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGlzU291cmNlU3RvcmFnZSgqd2luZG93Lm9wdGlv
bmFsTG9jYWxTdG9yYWdlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXNl
Y3VyaXR5T3JpZ2luLmVxdWFsKHdpbmRvdy5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgd2luZG93cy5hcHBlbmQod2luZG93KTsKKyAgICB9KTsKKworICAg
IGRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9XaW5kb3dzKHBhZ2VHcm91cCwgd2luZG93cywg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHVybCwgc2VjdXJpdHlPcmlnaW4pOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VFdmVudERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlci5oCmluZGV4IDU5MmQ2NzM2MGQ4Y2FkNTJmMzNmODNmODZkZDkxODg2OTM1
ZjQ4ZTcuLjFlZjE4NWY3NjI5ZmI4MDBlMzVkYTI0ZTVhM2ZjM2FjNWU0YTk4OTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oCkBAIC0zMywy
MSArMzMsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcmFtZTsKIGNsYXNz
IFBhZ2U7CiBjbGFzcyBQYWdlR3JvdXA7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFN0
b3JhZ2U7CiAKLWNsYXNzIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIgewotcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBkaXNwYXRjaExvY2FsU3RvcmFnZUV2ZW50cyhjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdW
YWx1ZSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mLCBGcmFtZSogc291cmNlRnJhbWUpOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50c1Rv
RnJhbWVzKFBhZ2UmLCBjb25zdCBWZWN0b3I8UmVmPEZyYW1lPj4mIGZyYW1lcywgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTZWN1cml0eU9yaWdpbiYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIGRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFtZXMoUGFn
ZUdyb3VwJiwgY29uc3QgVmVjdG9yPFJlZjxGcmFtZT4+JiBmcmFtZXMsIGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU2VjdXJpdHlPcmlnaW4mKTsKLXByaXZhdGU6Ci0gICAgLy8g
RG8gbm90IGluc3RhbnRpYXRlLgotICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIoKTsKLX07Citu
YW1lc3BhY2UgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlciB7CitXRUJDT1JFX0VYUE9SVCB2b2lkIGRp
c3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIFBhZ2UmLCBjb25zdCBTZWN1cml0
eU9yaWdpbiYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBGdW5jdGlvbjxib29sKFN0b3JhZ2Um
KT4mIGlzU291cmNlU3RvcmFnZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIGRpc3BhdGNoTG9jYWxT
dG9yYWdlRXZlbnRzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBQYWdlR3JvdXAmLCBjb25zdCBTZWN1cml0eU9yaWdpbiYs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBGdW5jdGlvbjxib29sKFN0b3JhZ2UmKT4mIGlzU291
cmNlU3RvcmFnZSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCmlu
ZGV4IDFmOWI0MmNiMTI3ZDZkYzAyOGE2ODA1OWUyNzEwMWZjNzk2OTQ0NmEuLmYyZDc0NDhhZDc2
ODhlNTBhNTkxZTY5ZjUyOTgzMGFmZTQxZjgyOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcApAQCAtNzAsNyAr
NzAsNyBAQCBTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjppdGVtKGNvbnN0IFN0cmluZyYga2V5KQog
ICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhTWFwID8gbV9zdG9yYWdlQXJlYU1hcC0+aXRlbShrZXkp
IDogbnVsbFN0cmluZygpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShGcmFt
ZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sJiBxdW90YUV4Y2VwdGlvbikKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKEZyYW1l
JiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wmIHF1b3RhRXhjZXB0aW9uKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwogCkBA
IC03OCwxMyArNzgsMTMgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oRnJhbWUqIHNv
dXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW4KICAgICAgICAgbV9zdG9y
YWdlQXJlYU1hcC0+c2V0SXRlbShzb3VyY2VGcmFtZSwgdGhpcywga2V5LCB2YWx1ZSwgcXVvdGFF
eGNlcHRpb24pOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShGcmFtZSog
c291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5KQordm9pZCBTdG9yYWdlQXJlYUltcGw6OnJl
bW92ZUl0ZW0oRnJhbWUmIHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBp
ZiAobV9zdG9yYWdlQXJlYU1hcCkKICAgICAgICAgbV9zdG9yYWdlQXJlYU1hcC0+cmVtb3ZlSXRl
bShzb3VyY2VGcmFtZSwgdGhpcywga2V5KTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNs
ZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihGcmFt
ZSYgc291cmNlRnJhbWUpCiB7CiAgICAgaWYgKG1fc3RvcmFnZUFyZWFNYXApCiAgICAgICAgIG1f
c3RvcmFnZUFyZWFNYXAtPmNsZWFyKHNvdXJjZUZyYW1lLCB0aGlzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKaW5kZXgg
YTM1ZDY2NzkyNTA1ZjBjMDNlNTkwODcwMDFlMGNhNGZkYTdhNmNkYS4uOWNlYTBkOTBhMjllYTE4
Y2VhNzc1Nzk2ZjE3NjZlMTcwOWU1MjFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKQEAgLTU1LDkgKzU1LDkgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBvdmVycmlkZTsKICAgICBTdHJpbmcga2V5
KHVuc2lnbmVkIGluZGV4KSBvdmVycmlkZTsKICAgICBTdHJpbmcgaXRlbShjb25zdCBTdHJpbmcm
IGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRJdGVtKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VG
cmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3Rh
RXhjZXB0aW9uKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUq
IHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVh
cihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0SXRl
bShXZWJDb3JlOjpGcmFtZSYgc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBy
ZW1vdmVJdGVtKFdlYkNvcmU6OkZyYW1lJiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXkp
IG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXIoV2ViQ29yZTo6RnJhbWUmIHNvdXJjZUZyYW1lKSBv
dmVycmlkZTsKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsK
ICAgICBXZWJDb3JlOjpTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHNpemVfdCBtZW1vcnlCeXRlc1VzZWRCeUNhY2hlKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAK
aW5kZXggZTg5MmYyZTYzMjMwYjhmZjJlYzc5YzJhMTg4OTNiNGY2YjRiN2NiMy4uYzlkNWJiMDcx
NjIzNmU0YTM2MTQwYmE2NmUzOTA4MDY4MGMyODBlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcApAQCAtODIsNyAr
ODIsNyBAQCBTdHJpbmcgU3RvcmFnZUFyZWFNYXA6Oml0ZW0oY29uc3QgU3RyaW5nJiBrZXkpCiAg
ICAgcmV0dXJuIGVuc3VyZU1hcCgpLmdldEl0ZW0oa2V5KTsKIH0KIAotdm9pZCBTdG9yYWdlQXJl
YU1hcDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNl
QXJlYSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3Rh
RXhjZXB0aW9uKQordm9pZCBTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbShGcmFtZSYgc291cmNlRnJh
bWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKQogewogICAgIGF1dG8mIG1hcCA9
IGVuc3VyZU1hcCgpOwogICAgIEFTU0VSVCghbWFwLmlzU2hhcmVkKCkpOwpAQCAtMTA4LDEwICsx
MDgsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUs
IFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSwgY28KICAgICAgICAgICAgIHdlYWtUaGlzLT5k
aWRTZXRJdGVtKHNlZWQsIGtleSwgaGFzUXVvdGFFeGNlcHRpb24pOwogICAgIH07CiAgICAgYXV0
byYgY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKLSAgICBjb25uZWN0aW9uLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpTZXRJdGVtKCptX3JlbW90
ZUFyZWFJZGVudGlmaWVyLCBzb3VyY2VBcmVhLT5pZGVudGlmaWVyKCksIGtleSwgdmFsdWUsIHNv
dXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIFdURk1vdmUoY2FsbGJhY2sp
KTsKKyAgICBjb25uZWN0aW9uLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1N0
b3JhZ2VNYW5hZ2VyOjpTZXRJdGVtKCptX3JlbW90ZUFyZWFJZGVudGlmaWVyLCBzb3VyY2VBcmVh
LT5pZGVudGlmaWVyKCksIGtleSwgdmFsdWUsIHNvdXJjZUZyYW1lLmRvY3VtZW50KCktPnVybCgp
LnN0cmluZygpKSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhTWFw
OjpyZW1vdmVJdGVtKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBs
KiBzb3VyY2VBcmVhLCBjb25zdCBTdHJpbmcmIGtleSkKK3ZvaWQgU3RvcmFnZUFyZWFNYXA6OnJl
bW92ZUl0ZW0oV2ViQ29yZTo6RnJhbWUmIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNv
dXJjZUFyZWEsIGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIGF1dG8mIG1hcCA9IGVuc3VyZU1h
cCgpOwogICAgIEFTU0VSVCghbWFwLmlzU2hhcmVkKCkpOwpAQCAtMTMzLDEwICsxMzMsMTAgQEAg
dm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNlRnJh
bWUsIFN0b3JhZ2VBcmVhSW1wbCogc28KICAgICAgICAgaWYgKHdlYWtUaGlzKQogICAgICAgICAg
ICAgd2Vha1RoaXMtPmRpZFJlbW92ZUl0ZW0oc2VlZCwga2V5KTsKICAgICB9OwotICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtTdG9yYWdlTWFuYWdl
cjo6UmVtb3ZlSXRlbSgqbV9yZW1vdGVBcmVhSWRlbnRpZmllciwgc291cmNlQXJlYS0+aWRlbnRp
ZmllcigpLCBrZXksIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIFdU
Rk1vdmUoY2FsbGJhY2spKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpOZXR3b3JrU3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0oKm1fcmVtb3RlQXJlYUlk
ZW50aWZpZXIsIHNvdXJjZUFyZWEtPmlkZW50aWZpZXIoKSwga2V5LCBzb3VyY2VGcmFtZS5kb2N1
bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBT
dG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdl
QXJlYUltcGwqIHNvdXJjZUFyZWEpCit2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjbGVhcihXZWJDb3Jl
OjpGcmFtZSYgc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSkKIHsKICAg
ICBjb25uZWN0U3luYygpOwogICAgIHJlc2V0VmFsdWVzKCk7CkBAIC0xNTMsNyArMTUzLDcgQEAg
dm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBT
dG9yYWdlQXJlYUltcGwqIHNvdXJjZUEKICAgICAgICAgaWYgKHdlYWtUaGlzKQogICAgICAgICAg
ICAgd2Vha1RoaXMtPmRpZENsZWFyKHNlZWQpOwogICAgIH07Ci0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1N0b3JhZ2VNYW5hZ2VyOjpDbGVhcigq
bV9yZW1vdGVBcmVhSWRlbnRpZmllciwgc291cmNlQXJlYS0+aWRlbnRpZmllcigpLCBzb3VyY2VG
cmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1N0b3Jh
Z2VNYW5hZ2VyOjpDbGVhcigqbV9yZW1vdGVBcmVhSWRlbnRpZmllciwgc291cmNlQXJlYS0+aWRl
bnRpZmllcigpLCBzb3VyY2VGcmFtZS5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSksIFdURk1v
dmUoY2FsbGJhY2spKTsKIH0KIAogYm9vbCBTdG9yYWdlQXJlYU1hcDo6Y29udGFpbnMoY29uc3Qg
U3RyaW5nJiBrZXkpCkBAIC0yOTYsNDMgKzI5Niw2IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNs
ZWFyQ2FjaGUodWludDY0X3QgbWVzc2FnZUlkZW50aWZpZXIpCiAgICAgcmVzZXRWYWx1ZXMoKTsK
IH0KIAotc3RhdGljIFZlY3RvcjxSZWY8RnJhbWU+PiBmcmFtZXNGb3JFdmVudERpc3BhdGNoaW5n
KFBhZ2UmIHBhZ2UsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFN0b3JhZ2VUeXBlIHN0
b3JhZ2VUeXBlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXI+
JiBzdG9yYWdlQXJlYUltcGxJRCkKLXsKLSAgICBWZWN0b3I8UmVmPEZyYW1lPj4gZnJhbWVzOwot
ICAgIHBhZ2UuZm9yRWFjaERvY3VtZW50KFsmXShhdXRvJiBkb2N1bWVudCkgewotICAgICAgICBp
ZiAoIWRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCkuZXF1YWwoJm9yaWdpbikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgYXV0byogd2luZG93ID0gZG9jdW1lbnQuZG9tV2luZG93KCk7
Ci0gICAgICAgIGlmICghd2luZG93IHx8ICF3aW5kb3ctPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50
TmFtZXMoKS5zdG9yYWdlRXZlbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICAgICAgU3RvcmFnZSogc3RvcmFnZSA9IG51bGxwdHI7Ci0gICAgICAgIHN3aXRjaCAoc3RvcmFn
ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBTdG9yYWdlVHlwZTo6U2Vzc2lvbjoKLSAgICAgICAgICAg
IHN0b3JhZ2UgPSB3aW5kb3ctPm9wdGlvbmFsU2Vzc2lvblN0b3JhZ2UoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFN0b3JhZ2VUeXBlOjpMb2NhbDoKLSAgICAgICAgY2FzZSBT
dG9yYWdlVHlwZTo6VHJhbnNpZW50TG9jYWw6Ci0gICAgICAgICAgICBzdG9yYWdlID0gd2luZG93
LT5vcHRpb25hbExvY2FsU3RvcmFnZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIXN0b3JhZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICBhdXRvJiBzdG9yYWdlQXJlYSA9IHN0YXRpY19jYXN0PFN0b3JhZ2VBcmVhSW1wbCY+
KHN0b3JhZ2UtPmFyZWEoKSk7Ci0gICAgICAgIGlmIChzdG9yYWdlQXJlYS5pZGVudGlmaWVyKCkg
PT0gc3RvcmFnZUFyZWFJbXBsSUQpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0b3Jh
Z2UgYXJlYSB0aGF0IGNhdXNlZCB0aGUgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZC4KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgIAotICAgICAgICBpZiAoYXV0byogZnJhbWUg
PSBkb2N1bWVudC5mcmFtZSgpKSAKLSAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoKmZyYW1lKTsK
LSAgICB9KTsKLSAgICByZXR1cm4gZnJhbWVzOwotfQotCiB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpk
aXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnQoY29uc3Qgc3RkOjpvcHRpb25hbDxTdG9yYWdlQXJl
YUltcGxJZGVudGlmaWVyPiYgc3RvcmFnZUFyZWFJbXBsSUQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJp
bmcmIHVybFN0cmluZykKIHsKICAgICAvLyBOYW1lc3BhY2UgSURzIGZvciBzZXNzaW9uIHN0b3Jh
Z2UgbmFtZXNwYWNlcyBhcmUgZXF1aXZhbGVudCB0byB3ZWIgcGFnZSBJRHMKQEAgLTM0NSwyMiAr
MzA4LDIwIEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVu
dChjb25zdCBzdGQ6Om9wdGlvbmFsPFN0b3JhZ2VBcmVhCiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGZyYW1lcyA9IGZyYW1lc0ZvckV2ZW50RGlzcGF0Y2hpbmco
KnBhZ2UsIG1fc2VjdXJpdHlPcmlnaW4sIFN0b3JhZ2VUeXBlOjpTZXNzaW9uLCBzdG9yYWdlQXJl
YUltcGxJRCk7Ci0gICAgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTZXNzaW9uU3Rv
cmFnZUV2ZW50c1RvRnJhbWVzKCpwYWdlLCBmcmFtZXMsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVl
LCB1cmxTdHJpbmcsIG1fc2VjdXJpdHlPcmlnaW4pOworICAgIFN0b3JhZ2VFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUs
ICpwYWdlLCBtX3NlY3VyaXR5T3JpZ2luLCB1cmxTdHJpbmcsIFtzdG9yYWdlQXJlYUltcGxJRF0o
YXV0byYgc3RvcmFnZSkgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RvcmFnZUFyZWFJ
bXBsJj4oc3RvcmFnZS5hcmVhKCkpLmlkZW50aWZpZXIoKSA9PSBzdG9yYWdlQXJlYUltcGxJRDsK
KyAgICB9KTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VF
dmVudChjb25zdCBzdGQ6Om9wdGlvbmFsPFN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXI+JiBzdG9y
YWdlQXJlYUltcGxJRCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUs
IGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewogICAg
IEFTU0VSVChpc0xvY2FsU3RvcmFnZSh0eXBlKCkpKTsKIAotICAgIFZlY3RvcjxSZWY8RnJhbWU+
PiBmcmFtZXM7Ci0KICAgICAvLyBOYW1lc3BhY2UgSURzIGZvciBsb2NhbCBzdG9yYWdlIG5hbWVz
cGFjZXMgYXJlIGN1cnJlbnRseSBlcXVpdmFsZW50IHRvIHdlYiBwYWdlIGdyb3VwIElEcy4KICAg
ICBhdXRvJiBwYWdlR3JvdXAgPSAqV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUGFnZUdyb3Vw
KG1fbmFtZXNwYWNlLnBhZ2VHcm91cElEKCkpLT5jb3JlUGFnZUdyb3VwKCk7Ci0gICAgZm9yIChh
dXRvJiBwYWdlIDogcGFnZUdyb3VwLnBhZ2VzKCkpCi0gICAgICAgIGZyYW1lcy5hcHBlbmRWZWN0
b3IoZnJhbWVzRm9yRXZlbnREaXNwYXRjaGluZyhwYWdlLCBtX3NlY3VyaXR5T3JpZ2luLCBTdG9y
YWdlVHlwZTo6TG9jYWwsIHN0b3JhZ2VBcmVhSW1wbElEKSk7Ci0KLSAgICBTdG9yYWdlRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaExvY2FsU3RvcmFnZUV2ZW50c1RvRnJhbWVzKHBhZ2VHcm91cCwg
ZnJhbWVzLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsU3RyaW5nLCBtX3NlY3VyaXR5T3Jp
Z2luKTsKKyAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaExvY2FsU3RvcmFnZUV2
ZW50cyhrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgcGFnZUdyb3VwLCBtX3NlY3VyaXR5T3JpZ2lu
LCB1cmxTdHJpbmcsIFtzdG9yYWdlQXJlYUltcGxJRF0oYXV0byYgc3RvcmFnZSkgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RvcmFnZUFyZWFJbXBsJj4oc3RvcmFnZS5hcmVhKCkpLmlk
ZW50aWZpZXIoKSA9PSBzdG9yYWdlQXJlYUltcGxJRDsKKyAgICB9KTsKIH0KIAogdm9pZCBTdG9y
YWdlQXJlYU1hcDo6c2VuZENvbm5lY3RNZXNzYWdlKFNlbmRNb2RlIG1vZGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuaAppbmRl
eCA1MTNlNDBkOTAwOWJlNTdlMzI3ZWEwZGI1MGI1MmEzYmM4MWJiZDdiLi4yNGQ3MGU4YTEwMDM2
NjdkOTVlM2I2YTJmMjhjZWI3MjE2ZjYzZGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmgKQEAgLTU4LDkgKzU4LDkgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpOwogICAgIFN0cmluZyBrZXkodW5zaWduZWQg
aW5kZXgpOwogICAgIFN0cmluZyBpdGVtKGNvbnN0IFN0cmluZyYga2V5KTsKLSAgICB2b2lkIHNl
dEl0ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJj
ZUFyZWEsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90
YUV4Y2VwdGlvbik7Ci0gICAgdm9pZCByZW1vdmVJdGVtKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VG
cmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjb25zdCBTdHJpbmcmIGtleSk7Ci0g
ICAgdm9pZCBjbGVhcihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1w
bCogc291cmNlQXJlYSk7CisgICAgdm9pZCBzZXRJdGVtKFdlYkNvcmU6OkZyYW1lJiBzb3VyY2VG
cmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pOworICAgIHZvaWQgcmVtb3Zl
SXRlbShXZWJDb3JlOjpGcmFtZSYgc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNl
QXJlYSwgY29uc3QgU3RyaW5nJiBrZXkpOworICAgIHZvaWQgY2xlYXIoV2ViQ29yZTo6RnJhbWUm
IHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEpOwogICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwu
Y3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKaW5k
ZXggYmZhY2Q0N2E2ZjQ3MTMzNjA1M2U5NzA1YmQzZGFjMjE5NDhmOWEyYy4uNTY3ZWFmZWRlYWUw
NTI4YjhmOTUxZmViODIyNDJjZDllM2FmNDg4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKQEAgLTI4LDkgKzI4LDEyIEBACiAjaW5jbHVk
ZSAiU3RvcmFnZUFyZWFTeW5jLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RPTVdpbmRvdy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9T
ZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1N0b3JhZ2VUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTEyMSw3ICsx
MjQsNyBAQCBTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjppdGVtKGNvbnN0IFN0cmluZyYga2V5KQog
ICAgIHJldHVybiBtX3N0b3JhZ2VNYXAuZ2V0SXRlbShrZXkpOwogfQogCi12b2lkIFN0b3JhZ2VB
cmVhSW1wbDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlvbikKK3ZvaWQgU3RvcmFnZUFy
ZWFJbXBsOjpzZXRJdGVtKEZyYW1lJiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGJvb2wmIHF1b3RhRXhjZXB0aW9uKQogewogICAgIEFTU0VSVCgh
bV9pc1NodXRkb3duKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKQEAgLTE0MSw3ICsx
NDQsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbgogICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50
KGtleSwgb2xkVmFsdWUsIHZhbHVlLCBzb3VyY2VGcmFtZSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFy
ZWFJbXBsOjpyZW1vdmVJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgU3RyaW5nJiBrZXkp
Cit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShGcmFtZSYgc291cmNlRnJhbWUsIGNv
bnN0IFN0cmluZyYga2V5KQogewogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9j
a1VudGlsSW1wb3J0Q29tcGxldGUoKTsKQEAgLTE1Nyw3ICsxNjAsNyBAQCB2b2lkIFN0b3JhZ2VB
cmVhSW1wbDo6cmVtb3ZlSXRlbShGcmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5
KQogICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBzb3Vy
Y2VGcmFtZSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihGcmFtZSogc291cmNl
RnJhbWUpCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoRnJhbWUmIHNvdXJjZUZyYW1lKQog
ewogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxl
dGUoKTsKQEAgLTI2OSwxMiArMjcyLDE5IEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbG9zZURh
dGFiYXNlSWZJZGxlKCkKICAgICB9CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpkaXNwYXRj
aFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwg
Y29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQordm9pZCBTdG9yYWdl
QXJlYUltcGw6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSYgc291cmNlRnJh
bWUpCiB7CisgICAgYXV0byogcGFnZSA9IHNvdXJjZUZyYW1lLnBhZ2UoKTsKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gaXNTb3VyY2VTdG9yYWdlID0gWyZzb3Vy
Y2VGcmFtZV0oU3RvcmFnZSYgc3RvcmFnZSkgeworICAgICAgICByZXR1cm4gc3RvcmFnZS5mcmFt
ZSgpID09ICZzb3VyY2VGcmFtZTsKKyAgICB9OwogICAgIGlmIChpc0xvY2FsU3RvcmFnZShtX3N0
b3JhZ2VUeXBlKSkKLSAgICAgICAgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2Nh
bFN0b3JhZ2VFdmVudHMoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIG1fc2VjdXJpdHlPcmlnaW4s
IHNvdXJjZUZyYW1lKTsKKyAgICAgICAgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hM
b2NhbFN0b3JhZ2VFdmVudHMoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHBhZ2UtPmdyb3VwKCks
IG1fc2VjdXJpdHlPcmlnaW4sIHNvdXJjZUZyYW1lLmRvY3VtZW50KCktPnVybCgpLnN0cmluZygp
LCBXVEZNb3ZlKGlzU291cmNlU3RvcmFnZSkpOwogICAgIGVsc2UKLSAgICAgICAgU3RvcmFnZUV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50cyhrZXksIG9sZFZhbHVl
LCBuZXdWYWx1ZSwgbV9zZWN1cml0eU9yaWdpbiwgc291cmNlRnJhbWUpOworICAgICAgICBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzKGtleSwgb2xk
VmFsdWUsIG5ld1ZhbHVlLCAqcGFnZSwgbV9zZWN1cml0eU9yaWdpbiwgc291cmNlRnJhbWUuZG9j
dW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFdURk1vdmUoaXNTb3VyY2VTdG9yYWdlKSk7CiB9CiAK
IHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpzZXNzaW9uQ2hhbmdlZChib29sIGlzTmV3U2Vzc2lvblBl
cnNpc3RlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFn
ZUFyZWFJbXBsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBs
LmgKaW5kZXggNTUyMjA4NGE3ODM5N2MyNDYxODkwZTRjMzEwMmE4NjlhODNhMjg1Ny4uNWQ1NDll
OGUyMWZiODY4ODMyN2M1M2RlNjJiNmZmNGEyYzUzY2RhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9TdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvU3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaApAQCAtNDksOSArNDksOSBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIGtleSh1bnNpZ25l
ZCBpbmRleCkgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIGl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0SXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sJiBxdW90YUV4Y2VwdGlv
bikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVJdGVtKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VG
cmFtZSwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXIoV2ViQ29y
ZTo6RnJhbWUqIHNvdXJjZUZyYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldEl0ZW0oV2ViQ29y
ZTo6RnJhbWUmIHNvdXJjZUZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCYgcXVvdGFFeGNlcHRpb24pIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlSXRl
bShXZWJDb3JlOjpGcmFtZSYgc291cmNlRnJhbWUsIGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlk
ZTsKKyAgICB2b2lkIGNsZWFyKFdlYkNvcmU6OkZyYW1lJiBzb3VyY2VGcmFtZSkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKICAgICBX
ZWJDb3JlOjpTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtODIs
NyArODIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkg
Y29uc3Q7CiAgICAgdm9pZCBjbG9zZURhdGFiYXNlVGltZXJGaXJlZCgpOwogCi0gICAgdm9pZCBk
aXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRW
YWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1l
KTsKKyAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBXZWJDb3JlOjpGcmFt
ZSYgc291cmNlRnJhbWUpOwogCiAgICAgV2ViQ29yZTo6U3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlw
ZTsKICAgICBSZWY8Y29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJpdHlPcmln
aW47Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>