<?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>271949</bug_id>
          
          <creation_ts>2024-03-31 12:43:38 -0700</creation_ts>
          <short_desc>AX: Introduce reference versions of AXObjectCache::get and AXObjectCache::getOrCreate</short_desc>
          <delta_ts>2024-04-02 00:06:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tyler Wilcock">tyler_w</reporter>
          <assigned_to name="Tyler Wilcock">tyler_w</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>jcraig</cc>
    
    <cc>joepeck</cc>
    
    <cc>pangle</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2025016</commentid>
    <comment_count>0</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-03-31 12:43:38 -0700</bug_when>
    <thetext>At most callsites of AXObjectCache::get and AXObjectCache::getOrCreate, we already know the Node* / RenderObject* / Widget* is not null, but we still perform an extra null check in these methods anyways, which is a waste. And looking at the assembly generated by clang, it&apos;s not smart enough to optimize the null checks away itself in any of these contexts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2025017</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2024-03-31 12:43:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/125689037&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2025022</commentid>
    <comment_count>2</comment_count>
      <attachid>470689</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-03-31 13:05:41 -0700</bug_when>
    <thetext>Created attachment 470689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2025266</commentid>
    <comment_count>3</comment_count>
      <attachid>470689</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2024-04-01 16:58:27 -0700</bug_when>
    <thetext>Comment on attachment 470689
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.h:301
&gt; +    AccessibilityObject* get(Node* node) const

does it make sense to make these inline?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2025288</commentid>
    <comment_count>4</comment_count>
      <attachid>470712</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-04-01 17:47:10 -0700</bug_when>
    <thetext>Created attachment 470712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2025289</commentid>
    <comment_count>5</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-04-01 17:47:27 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #3)
&gt; Comment on attachment 470689 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=470689&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AXObjectCache.h:301
&gt; &gt; +    AccessibilityObject* get(Node* node) const
&gt; 
&gt; does it make sense to make these inline?
Yeah I think so, done in latest patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2025318</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-04-02 00:05:58 -0700</bug_when>
    <thetext>Committed 276927@main (c608d5842016): &lt;https://commits.webkit.org/276927@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 470712.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>470689</attachid>
            <date>2024-03-31 13:05:41 -0700</date>
            <delta_ts>2024-04-01 17:47:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-271949-20240331130540.patch</filename>
            <type>text/plain</type>
            <size>72962</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSAyZjBjMmMyYWRkYWE3MDlmZmU3MTFiNmI4YzcwNjlkYWU0ODkyMGMxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU3VuLCAzMSBNYXIgMjAyNCAxMjo1MTo0MiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFYOiBJ
bnRyb2R1Y2UgcmVmZXJlbmNlIHZlcnNpb25zIG9mIEFYT2JqZWN0Q2FjaGU6OmdldCBhbmQKIEFY
T2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzE5NDkKIHJkYXI6Ly9wcm9ibGVtLzEyNTY4OTAzNwoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgpBdCBtb3N0IGNhbGxzaXRlcyBvZiBBWE9iamVjdENhY2hlOjpnZXQgYW5k
IEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlLCB3ZSBhbHJlYWR5IGtub3cgdGhlIE5vZGUqIC8g
UmVuZGVyT2JqZWN0KiAvIFdpZGdldCoKaXMgbm90IG51bGwsIGJ1dCB3ZSBzdGlsbCBwZXJmb3Jt
IGFuIGV4dHJhIG51bGwgY2hlY2sgaW4gdGhlc2UgbWV0aG9kcyBhbnl3YXlzLCB3aGljaCBpcyBh
IHdhc3RlLiBBbmQgbG9va2luZyBhdCB0aGUKYXNzZW1ibHkgZ2VuZXJhdGVkIGJ5IGNsYW5nLCBp
dCdzIG5vdCBzbWFydCBlbm91Z2ggdG8gb3B0aW1pemUgdGhlIG51bGwgY2hlY2tzIGF3YXkgaXRz
ZWxmIGluIGFueSBvZiB0aGVzZSBjb250ZXh0cy4KClRoaXMgcGF0Y2ggYWRkcyB2ZXJzaW9ucyBv
ZiB0aGVzZSBtZXRob2RzIHRoYXQgdGFrZSByZWZlcmVuY2VzLCBhbmQgYWRkcyBkZXJlZmVyZW5j
ZXMgYXQgY2FsbHNpdGVzIHRoYXQgaGF2ZSBhbHJlYWR5CmNoZWNrZWQgZm9yIGEgbnVsbCB2YWx1
ZS4gVGhpcyBzYXZlcyBvdmVyIDE2IG1pbGxpb24gbnVsbCBjaGVja3Mgc2ltcGx5IGxvYWRpbmcg
Z21haWwuY29tLCB3aXRob3V0IGFueSBvdGhlciBuYXZpZ2F0aW9uIG9yIGFjdGlvbi4KCiogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6Om1vZGFsRWxlbWVudEhhc0FjY2Vzc2libGVDb250ZW50KToKKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmlzTm9kZVZpc2libGUgY29uc3QpOgooV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6Zm9jdXNlZEltYWdlTWFwVUlFbGVtZW50KToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6
OmdldCBjb25zdCk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CihXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVNZW51T3BlbmVkKToKKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmNoaWxkcmVuQ2hhbmdlZCk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0Tm90
aWZpY2F0aW9uKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZU1lbnVJdGVtU2VsZWN0
ZWQpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UpOgoo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbik6
CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9u
KToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRp
b25Gb3JUZXh0Q29udHJvbCk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdF
dmVudE5vdGlmaWNhdGlvbik6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmb2N1c0N1cnJlbnRN
b2RhbCk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hh
bmdlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnNob3VsZFByb2Nlc3NBdHRyaWJ1dGVDaGFu
Z2UpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKToKKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZyb21WaXNpYmxlUG9zaXRpb24p
OgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJr
ZXJEYXRhKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVJc1RleHRDb250cm9sKToKKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKToKKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OmRlZmVyVGV4dENoYW5nZWRJZk5lZWRlZCk6CihXZWJDb3JlOjpp
c05vZGVBcmlhVmlzaWJsZSk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphZGRSZWxhdGlvbik6
CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphZGRMYWJlbEZvclJlbGF0aW9uKToKKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmlzRGVzY2VuZGFudE9mUmVsYXRlZE5vZGUpOgooV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6Z2V0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlMaXN0Qm94T3B0aW9uLmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0
aW9uOjplbGVtZW50UmVjdCBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbjo6cGFyZW50T2JqZWN0IGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlN
YXRoTUxFbGVtZW50OjptYXRoUHJlc2NyaXB0cyk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWF0
aE1MRWxlbWVudDo6bWF0aFBvc3RzY3JpcHRzKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlNZW51TGlzdFBvcHVwOjptZW51TGlzdE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QgY29uc3Qp
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmZpcnN0Q2hpbGQgY29uc3Qp
OgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omxhc3RDaGlsZCBjb25zdCk6CihX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cHJldmlvdXNTaWJsaW5nIGNvbnN0KToK
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpuZXh0U2libGluZyBjb25zdCk6CihX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2JqZWN0IGNvbnN0KToKKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGVja2JveE9yUmFkaW9SZWN0IGNvbnN0
KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZHJlbik6CihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bWVudUJ1dHRvbkZvck1lbnUgY29uc3QpOgoo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhcHRpb25Gb3JGaWd1cmUgY29uc3Qp
OgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhlbHBUZXh0IGNvbnN0KToKKFdl
YkNvcmU6OmFjY2Vzc2libGVOYW1lRm9yTm9kZSk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yQ2hpbGRyZW4gY29uc3QpOgoqIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkaXNwbGF5Q29udGVudHNQYXJlbnQgY29uc3QpOgoo
V2ViQ29yZTo6YXBwZW5kQWNjZXNzaWJpbGl0eU9iamVjdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3Rlcik6CihXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjphbmNob3JFbGVtZW50Rm9yTm9kZSk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjpoZWFkaW5nRWxlbWVudEZvck5vZGUpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6c3VwcG9ydHNQcmVzc0FjdGlvbiBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjplbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QgY29uc3QpOgoqIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcDoK
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcjo6dmFsdWVEZXNjcmlwdGlv
biBjb25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0
Q2hpbGQgY29uc3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGFzdENo
aWxkIGNvbnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnByZXZpb3Vz
U2libGluZyBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0
U2libGluZyBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpwYXJl
bnRPYmplY3QgY29uc3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5j
aG9yRWxlbWVudCBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpo
ZWxwVGV4dCBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRs
ZVVJRWxlbWVudCBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpk
b2N1bWVudExpbmtzKToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om5vZGVJ
c1RleHRDb250cm9sIGNvbnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmFjY2Vzc2liaWxpdHlIaXRUZXN0IGNvbnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6Om9ic2VydmFibGVPYmplY3QgY29uc3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6cmVtb3RlU1ZHUm9vdEVsZW1lbnQgY29uc3QpOgooV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQXR0YWNobWVudENoaWxkcmVuKToKKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZE5vZGVPbmx5Q2hpbGRyZW4pOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkTGlzdEl0ZW1NYXJrZXIpOgoqIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwOgooV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQ6OnRhcmdldEZvclVzZUVsZW1lbnQgY29uc3Qp
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcu
Y3BwOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmFkZENoaWxkU2Nyb2xsYmFy
KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Ojp3ZWJBcmVhT2JqZWN0IGNvbnN0
KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjpwYXJlbnRPYmplY3QgY29uc3Qp
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoK
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUgY29uc3QpOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJlbik6CiogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlUYWJsZUNlbGw6OnRpdGxlVUlFbGVtZW50IGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tOgooV2ViQ29yZTo6YXR0
cmlidXRlU3RyaW5nU2V0TGFuZ3VhZ2UpOgooV2ViQ29yZTo6YXR0cmlidXRlU3RyaW5nU2V0U3R5
bGUpOgooV2ViQ29yZTo6YXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9uQXR0cmlidXRlcyk6
CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW06CigtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3Np
YmlsaXR5UGFyZW50Rm9yU3VidmlldzpdKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tOgooV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Z1NldEJsb2NrcXVvdGVMZXZlbCk6CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nU2V0RXhwYW5k
ZWRUZXh0KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
X2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3Ol0pOgoqIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgooV2ViQ29yZTo6YWNj
ZXNzaWJpbGl0eU9iamVjdEZvck5vZGUpOgoqIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcDoKKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50
VGl0bGUpOgoqIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwOgooV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNz
aWJpbGl0eVByb3BlcnRpZXMpOgoqIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cDoKKFdlYkNvcmU6OkludGVybmFsczo6YXhPYmplY3RGb3JFbGVtZW50IGNvbnN0KToKLS0tCiAu
Li4vV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCAyMDkgKysrKysr
KystLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
aCAgfCAgNDAgKysrLQogLi4uL0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCAgICAgICAg
ICAgIHwgICA0ICstCiAuLi4vQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwICAgICAgICAg
ICAgfCAgIDQgKy0KIC4uLi9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAgICAgICAgICAg
ICB8ICAgMiArLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
IHwgIDI1ICsrLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgICAg
IHwgIDIyICstCiAuLi4vQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcCAgICAgICAg
fCAgIDIgKy0KIC4uLi9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCAgICAgICAgICAgICB8
ICA2NCArKystLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNw
cCB8ICAgMiArLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3Bw
IHwgICA2ICstCiAuLi4vYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwICAgICAg
fCAgIDYgKy0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwICB8
ICAgNCArLQogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tICAgICAgICAgICAgIHwg
ICA2ICstCiAuLi4vaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tICAgfCAg
IDIgKy0KIC4uLi9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbSAgICAgICAgICAgICB8ICAg
NCArLQogLi4uL21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSAgIHwgICAy
ICstCiAuLi4vSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCAgICAgfCAgIDIg
Ky0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCB8ICAgMiAr
LQogLi4uL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwICAgIHwgICAyICst
CiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgICAgICAgICAgfCAgIDIgKy0K
IDIxIGZpbGVzIGNoYW5nZWQsIDIwOCBpbnNlcnRpb25zKCspLCAyMDQgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXgg
NTAyMDBmMTIwMzcyLi5iZDgxZmZjYmM5ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMzc3LDcgKzM3Nyw3IEBAIGJvb2wgQVhPYmpl
Y3RDYWNoZTo6bW9kYWxFbGVtZW50SGFzQWNjZXNzaWJsZUNvbnRlbnQoRWxlbWVudCYgZWxlbWVu
dCkKICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVTdGFjayA9IHsgZWxlbWVudC5maXJzdENoaWxkKCkg
fTsKICAgICB3aGlsZSAoIW5vZGVTdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChhdXRv
KiBub2RlID0gbm9kZVN0YWNrLnRha2VMYXN0KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogYXhPYmplY3QgPSBnZXRPckNyZWF0ZShu
b2RlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGF4T2JqZWN0ID0gZ2V0T3JDcmVhdGUoKm5v
ZGUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFheE9iamVjdC0+Y29tcHV0ZUFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTQ4
MCw3ICs0ODAsNyBAQCBib29sIEFYT2JqZWN0Q2FjaGU6OmlzTm9kZVZpc2libGUoTm9kZSogbm9k
ZSkgY29uc3QKICAgICB9CiAKICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgYXJpYSBo
aWRkZW4gc3RhdHVzLgotICAgIGlmICghaXNOb2RlQXJpYVZpc2libGUobm9kZSkpCisgICAgaWYg
KCFpc05vZGVBcmlhVmlzaWJsZSgqbm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHJldHVybiB0cnVlOwpAQCAtNTE1LDggKzUxNSw4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmZvY3VzZWRJbWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqIGFy
CiAgICAgUmVmUHRyIGltYWdlRWxlbWVudCA9IGFyZWFFbGVtZW50LT5pbWFnZUVsZW1lbnQoKTsK
ICAgICBpZiAoIWltYWdlRWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0g
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhSZW5kZXJJbWFnZSA9IGFyZWFFbGVtZW50LT5wcm90
ZWN0ZWREb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGltYWdlRWxlbWVu
dC5nZXQoKSk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheFJlbmRlckltYWdlID0gYXJl
YUVsZW1lbnQtPnByb3RlY3RlZERvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUoKmltYWdlRWxlbWVudCk7CiAgICAgaWYgKCFheFJlbmRlckltYWdlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKQEAgLTU3OSwzNCArNTc5LDI1IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6c2V0SXNvbGF0ZWRUcmVlRm9jdXNlZE9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmb2N1
cykKIH0KICNlbmRpZgogCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQo
V2lkZ2V0KiB3aWRnZXQpCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQo
V2lkZ2V0JiB3aWRnZXQpIGNvbnN0CiB7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCiAgICAgQVhJRCBheElEID0gbV93aWRnZXRPYmplY3RNYXBwaW5nLmdldCh3
aWRnZXQpOwogICAgIEFTU0VSVCghYXhJRC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKTsKIAog
ICAgIHJldHVybiBheElEID8gbV9vYmplY3RzLmdldChheElEKSA6IG51bGxwdHI7CiB9CiAKLUFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQorQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KFJlbmRlck9iamVj
dCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KICAgICBBWElEIGF4SUQgPSBtX3JlbmRlck9iamVjdE1hcHBpbmcuZ2V0KHJl
bmRlcmVyKTsKICAgICBBU1NFUlQoIWF4SUQuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSk7CiAK
ICAgICByZXR1cm4gYXhJRCA/IG1fb2JqZWN0cy5nZXQoYXhJRCkgOiBudWxscHRyOwogfQogCi1B
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoTm9kZSogbm9kZSkKK0FjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldChOb2RlJiBub2RlKSBjb25zdAogewot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBub2RlLnJlbmRl
cmVyKCk7CiAgICAgQVhJRCByZW5kZXJJRCA9IHJlbmRlcmVyID8gbV9yZW5kZXJPYmplY3RNYXBw
aW5nLmdldChyZW5kZXJlcikgOiBBWElEKCk7CiAgICAgQVNTRVJUKCFyZW5kZXJJRC5pc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpKTsKICAgICBpZiAocmVuZGVySUQuaXNWYWxpZCgpKQpAQCAtNzIy
LDYgKzcxMyw3IEBAIHN0YXRpYyBib29sIGlzQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbChOb2Rl
KiBub2RlKQogICAgIHJldHVybiBub2RlSGFzQ2VsbFJvbGUobm9kZSk7CiB9CiAKKy8vIEZJWE1F
OiBUaGlzIGNhbiB0YWtlIGEgcmVmZXJlbmNlLCBhbmQgdGhlcmVmb3JlIGFsbCAqOjpjcmVhdGUg
bWV0aG9kcyB3aXRoaW4gY2FuIHRvby4KIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBWE9iamVj
dENhY2hlOjpjcmVhdGVPYmplY3RGcm9tUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
IHsKICAgICAvLyBGSVhNRTogSG93IGNvdWxkIHJlbmRlcmVyLT5ub2RlKCkgZXZlciBub3QgYmUg
YW4gRWxlbWVudD8KQEAgLTg0OSw3MyArODQxLDY1IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6Y2Fj
aGVBbmRJbml0aWFsaXplV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBuZXdPYmplY3QsIERP
CiAgICAgYXR0YWNoV3JhcHBlcihuZXdPYmplY3QpOwogfQogCi1BY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShXaWRnZXQqIHdpZGdldCkKK0FjY2Vzc2liaWxp
dHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFdpZGdldCYgd2lkZ2V0KQogewot
ICAgIGlmICghd2lkZ2V0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byog
b2JqZWN0ID0gZ2V0KHdpZGdldCkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CiAKLSAgICBpZiAo
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gZ2V0KHdpZGdldCkpCi0gICAgICAgIHJldHVybiBv
Ymo7Ci0gICAgCi0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG5ld09iajsKLSAgICBp
ZiAoYXV0byogc2Nyb2xsVmlldyA9IGR5bmFtaWNEb3duY2FzdDxTY3JvbGxWaWV3Pigqd2lkZ2V0
KSkKLSAgICAgICAgbmV3T2JqID0gQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmNyZWF0ZShzY3Jv
bGxWaWV3KTsKLSAgICBlbHNlIGlmIChhdXRvKiBzY3JvbGxiYXIgPSBkeW5hbWljRG93bmNhc3Q8
U2Nyb2xsYmFyPigqd2lkZ2V0KSkKLSAgICAgICAgbmV3T2JqID0gQWNjZXNzaWJpbGl0eVNjcm9s
bGJhcjo6Y3JlYXRlKHNjcm9sbGJhcik7CisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
IG5ld09iamVjdDsKKyAgICBpZiAoYXV0byogc2Nyb2xsVmlldyA9IGR5bmFtaWNEb3duY2FzdDxT
Y3JvbGxWaWV3Pih3aWRnZXQpKQorICAgICAgICBuZXdPYmplY3QgPSBBY2Nlc3NpYmlsaXR5U2Ny
b2xsVmlldzo6Y3JlYXRlKHNjcm9sbFZpZXcpOworICAgIGVsc2UgaWYgKGF1dG8qIHNjcm9sbGJh
ciA9IGR5bmFtaWNEb3duY2FzdDxTY3JvbGxiYXI+KHdpZGdldCkpCisgICAgICAgIG5ld09iamVj
dCA9IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZShzY3JvbGxiYXIpOwogCiAgICAgLy8g
V2lsbCBjcmFzaCBsYXRlciBpZiB3ZSBoYXZlIHR3byBvYmplY3RzIGZvciB0aGUgc2FtZSB3aWRn
ZXQuCiAgICAgQVNTRVJUKCFnZXQod2lkZ2V0KSk7CiAKICAgICAvLyBFbnN1cmUgd2Ugd2VyZW4n
dCBnaXZlbiBhbiB1bnN1cHBvcnRlZCB3aWRnZXQgdHlwZS4KLSAgICBBU1NFUlQobmV3T2JqKTsK
LSAgICBpZiAoIW5ld09iaikKKyAgICBBU1NFUlQobmV3T2JqZWN0KTsKKyAgICBpZiAoIW5ld09i
amVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBjYWNoZUFuZEluaXRpYWxpemVX
cmFwcGVyKG5ld09iai5nZXQoKSwgd2lkZ2V0KTsKLSAgICByZXR1cm4gbmV3T2JqLmdldCgpOwor
ICAgIGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIobmV3T2JqZWN0LmdldCgpLCAmd2lkZ2V0KTsK
KyAgICByZXR1cm4gbmV3T2JqZWN0LmdldCgpOwogfQogCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
WE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShOb2RlKiBub2RlLCBJc1BhcnRPZlJlbGF0aW9uIGlz
UGFydE9mUmVsYXRpb24pCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRP
ckNyZWF0ZShOb2RlJiBub2RlLCBJc1BhcnRPZlJlbGF0aW9uIGlzUGFydE9mUmVsYXRpb24pCiB7
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIGlmIChhdXRv
KiBvYmplY3QgPSBnZXQobm9kZSkpCiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKLSAgICBpZiAo
bm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUtPnJlbmRl
cmVyKCkpOwotCi0gICAgUmVmIHByb3RlY3RlZE5vZGUgeyAqbm9kZSB9OworICAgIGlmIChhdXRv
KiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRl
KCpyZW5kZXJlcik7CiAKLSAgICBpZiAoIW5vZGUtPnBhcmVudEVsZW1lbnQoKSkKKyAgICBpZiAo
IW5vZGUucGFyZW50RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1
dG8qIG9wdGlvbkVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpu
b2RlKTsKLSAgICBhdXRvKiBvcHRHcm91cEVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8SFRNTE9w
dEdyb3VwRWxlbWVudD4oKm5vZGUpOworICAgIFJlZiBwcm90ZWN0ZWROb2RlIHsgbm9kZSB9Owor
CisgICAgYXV0byogb3B0aW9uRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4obm9kZSk7CisgICAgYXV0byogb3B0R3JvdXBFbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0
PEhUTUxPcHRHcm91cEVsZW1lbnQ+KG5vZGUpOwogICAgIGlmIChvcHRpb25FbGVtZW50IHx8IG9w
dEdyb3VwRWxlbWVudCkgewotICAgICAgICBhdXRvIHNlbGVjdCA9IG9wdGlvbkVsZW1lbnQKKyAg
ICAgICAgYXV0byogc2VsZWN0ID0gb3B0aW9uRWxlbWVudAogICAgICAgICAgICAgPyBvcHRpb25F
bGVtZW50LT5vd25lclNlbGVjdEVsZW1lbnQoKQogICAgICAgICAgICAgOiBvcHRHcm91cEVsZW1l
bnQtPm93bmVyU2VsZWN0RWxlbWVudCgpOwogICAgICAgICBpZiAoIXNlbGVjdCkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4g
b2JqZWN0OwogICAgICAgICBpZiAoc2VsZWN0LT51c2VzTWVudUxpc3QoKSkgewotICAgICAgICAg
ICAgaWYgKCFvcHRpb25FbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgaWYgKCFzZWxlY3QtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBpZiAoIW9w
dGlvbkVsZW1lbnQgfHwgIXNlbGVjdC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgICAgIG9iamVjdCA9IEFjY2Vzc2liaWxpdHlNZW51TGlzdE9w
dGlvbjo6Y3JlYXRlKCpvcHRpb25FbGVtZW50KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBvYmplY3QgPSBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6Y3JlYXRlKGRvd25jYXN0PEhU
TUxFbGVtZW50Pigqbm9kZSkpOwotICAgICAgICBjYWNoZUFuZEluaXRpYWxpemVXcmFwcGVyKG9i
amVjdC5nZXQoKSwgbm9kZSk7CisgICAgICAgICAgICBvYmplY3QgPSBBY2Nlc3NpYmlsaXR5TGlz
dEJveE9wdGlvbjo6Y3JlYXRlKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKSk7CisgICAgICAg
IGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIob2JqZWN0LmdldCgpLCAmbm9kZSk7CiAgICAgICAg
IHJldHVybiBvYmplY3QuZ2V0KCk7CiAgICAgfQogCi0gICAgYm9vbCBpbkNhbnZhc1N1YnRyZWUg
PSBsaW5lYWdlT2ZUeXBlPEhUTUxDYW52YXNFbGVtZW50Pigqbm9kZS0+cGFyZW50RWxlbWVudCgp
KS5maXJzdCgpOworICAgIGJvb2wgaW5DYW52YXNTdWJ0cmVlID0gbGluZWFnZU9mVHlwZTxIVE1M
Q2FudmFzRWxlbWVudD4oKm5vZGUucGFyZW50RWxlbWVudCgpKS5maXJzdCgpOwogICAgIC8vIElm
IG5vZGUgaXMgdGhlIHRhcmdldCBvZiBhIHJlbGF0aW9uc2hpcCBvciBhIGRlc2NlbmRhbnQgb2Yg
b25lLCBjcmVhdGUgYW4gQVggb2JqZWN0IHVuY29uZGl0aW9uYWxseS4KLSAgICBpZiAoaXNQYXJ0
T2ZSZWxhdGlvbiA9PSBJc1BhcnRPZlJlbGF0aW9uOjpObyAmJiAhaXNEZXNjZW5kYW50T2ZSZWxh
dGVkTm9kZSgqbm9kZSkpIHsKLSAgICAgICAgYm9vbCBpbnNpZGVNZXRlckVsZW1lbnQgPSBpczxI
VE1MTWV0ZXJFbGVtZW50Pigqbm9kZS0+cGFyZW50RWxlbWVudCgpKTsKKyAgICBpZiAoaXNQYXJ0
T2ZSZWxhdGlvbiA9PSBJc1BhcnRPZlJlbGF0aW9uOjpObyAmJiAhaXNEZXNjZW5kYW50T2ZSZWxh
dGVkTm9kZShub2RlKSkgeworICAgICAgICBib29sIGluc2lkZU1ldGVyRWxlbWVudCA9IGlzPEhU
TUxNZXRlckVsZW1lbnQ+KCpub2RlLnBhcmVudEVsZW1lbnQoKSk7CiAgICAgICAgIGF1dG8qIGVs
ZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgICAgIGJvb2wgaGFz
RGlzcGxheUNvbnRlbnRzID0gZWxlbWVudCAmJiBlbGVtZW50LT5oYXNEaXNwbGF5Q29udGVudHMo
KTsKICAgICAgICAgYm9vbCBpc1BvcG92ZXIgPSBlbGVtZW50ICYmIGVsZW1lbnQtPmhhc0F0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocG9wb3ZlckF0dHIpOwpAQCAtOTIzLDIwICs5MDcs
MjAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUoTm9k
ZSogbm9kZSwgSXNQYXJ0T2ZSZWxhdGlvbiBpc1AKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIC8vIFRoZSBvYmplY3QgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0
ZWQgZHVyaW5nIHJlbGF0aW9ucyB1cGRhdGUKKyAgICAvLyBUaGUgb2JqZWN0IG1heSBoYXZlIGFs
cmVhZHkgYmVlbiBjcmVhdGVkIGR1cmluZyByZWxhdGlvbnMgdXBkYXRlLgogICAgIGlmIChhdXRv
KiBvYmplY3QgPSBnZXQobm9kZSkpCiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKICAgICAvLyBG
YWxsYmFjayBjb250ZW50IGlzIG9ubHkgZm9jdXNhYmxlIGFzIGxvbmcgYXMgdGhlIGNhbnZhcyBp
cyBkaXNwbGF5ZWQgYW5kIHZpc2libGUuCiAgICAgLy8gVXBkYXRlIHRoZSBzdHlsZSBiZWZvcmUg
RWxlbWVudDo6aXNGb2N1c2FibGUoKSBnZXRzIGNhbGxlZC4KICAgICBpZiAoaW5DYW52YXNTdWJ0
cmVlKQotICAgICAgICBub2RlLT5wcm90ZWN0ZWREb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVl
ZGVkKCk7CisgICAgICAgIG5vZGUucHJvdGVjdGVkRG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5l
ZWRlZCgpOwogCi0gICAgUmVmUHRyIG5ld09iamVjdCA9IGNyZWF0ZUZyb21Ob2RlKCpub2RlKTsK
KyAgICBSZWZQdHIgbmV3T2JqZWN0ID0gY3JlYXRlRnJvbU5vZGUobm9kZSk7CiAKICAgICAvLyBX
aWxsIGNyYXNoIGxhdGVyIGlmIHdlIGhhdmUgdHdvIG9iamVjdHMgZm9yIHRoZSBzYW1lIG5vZGUu
CiAgICAgQVNTRVJUKCFnZXQobm9kZSkpOwotICAgIGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIo
bmV3T2JqZWN0LmdldCgpLCBub2RlKTsKKyAgICBjYWNoZUFuZEluaXRpYWxpemVXcmFwcGVyKG5l
d09iamVjdC5nZXQoKSwgJm5vZGUpOwogICAgIC8vIENvbXB1dGUgdGhlIG9iamVjdCdzIGluaXRp
YWwgaWdub3JlZCBzdGF0dXMuCiAgICAgbmV3T2JqZWN0LT5yZWNvbXB1dGVJc0lnbm9yZWQoKTsK
ICAgICAvLyBTb21ldGltZXMgYXNraW5nIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSB3aWxsIGNh
dXNlIHRoZSBuZXdPYmplY3QgdG8gYmUgZGVhbGxvY2F0ZWQsIGFuZCB0aGVuCkBAIC05NDYsMjQg
KzkzMCwyMSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0
ZShOb2RlKiBub2RlLCBJc1BhcnRPZlJlbGF0aW9uIGlzUAogICAgIHJldHVybiBuZXdPYmplY3Qu
Z2V0KCk7CiB9CiAKLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3Jl
YXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVj
dENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIGlmICgh
cmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgaWYgKGF1dG8qIG9iamVj
dCA9IGdldChyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKICAgICAvLyBEb24n
dCBjcmVhdGUgYW4gb2JqZWN0IGZvciB0aGlzIHJlbmRlcmVyIGlmIGl0J3MgYmVpbmcgZGVzdHJv
eWVkLgotICAgIGlmIChyZW5kZXJlci0+YmVpbmdEZXN0cm95ZWQoKSkKKyAgICBpZiAocmVuZGVy
ZXIuYmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQ
dHIgb2JqZWN0ID0gY3JlYXRlT2JqZWN0RnJvbVJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICBSZWYg
b2JqZWN0ID0gY3JlYXRlT2JqZWN0RnJvbVJlbmRlcmVyKCZyZW5kZXJlcik7CiAKICAgICAvLyBX
aWxsIGNyYXNoIGxhdGVyIGlmIHdlIGhhdmUgdHdvIG9iamVjdHMgZm9yIHRoZSBzYW1lIHJlbmRl
cmVyLgogICAgIEFTU0VSVCghZ2V0KHJlbmRlcmVyKSk7CiAKLSAgICBjYWNoZUFuZEluaXRpYWxp
emVXcmFwcGVyKG9iamVjdC5nZXQoKSwgcmVuZGVyZXIpOworICAgIGNhY2hlQW5kSW5pdGlhbGl6
ZVdyYXBwZXIob2JqZWN0LnB0cigpLCAmcmVuZGVyZXIpOwogICAgIC8vIENvbXB1dGUgdGhlIG9i
amVjdCdzIGluaXRpYWwgaWdub3JlZCBzdGF0dXMuCiAgICAgb2JqZWN0LT5yZWNvbXB1dGVJc0ln
bm9yZWQoKTsKICAgICAvLyBTb21ldGltZXMgYXNraW5nIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSB3aWxsIGNhdXNlIHRoZSBuZXdPYmplY3QgdG8gYmUgZGVhbGxvY2F0ZWQsIGFuZCB0aGVuCkBA
IC05NzEsNyArOTUyLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0
T3JDcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBpZiAob2JqZWN0LT5pc0RldGFj
aGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG9iamVjdC5nZXQo
KTsKKyAgICByZXR1cm4gb2JqZWN0LnB0cigpOwogfQogCiBBWENvcmVPYmplY3QqIEFYT2JqZWN0
Q2FjaGU6OnJvb3RPYmplY3QoKQpAQCAtMTQyMyw4ICsxNDA0LDggQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpoYW5kbGVNZW51T3BlbmVkKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5yZW5kZXJlcigpIHx8ICFub2RlSGFzUm9sZShub2RlLCAibWVudSJfcykpCiAgICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBwb3N0Tm90aWZpY2F0aW9uKGdldE9yQ3JlYXRlKG5vZGUpLCBw
cm90ZWN0ZWREb2N1bWVudCgpLnB0cigpLCBBWE1lbnVPcGVuZWQpOworCisgICAgcG9zdE5vdGlm
aWNhdGlvbihnZXRPckNyZWF0ZSgqbm9kZSksIHByb3RlY3RlZERvY3VtZW50KCkucHRyKCksIEFY
TWVudU9wZW5lZCk7CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlTGl2ZVJlZ2lvbkNy
ZWF0ZWQoTm9kZSogbm9kZSkKQEAgLTE0NzEsNyArMTQ1Miw3IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6Y2hpbGRyZW5DaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlck9iamVjdCog
Y2hhbmdlCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hpbGRy
ZW5DaGFuZ2VkKGdldChyZW5kZXJlcikpOworICAgIGNoaWxkcmVuQ2hhbmdlZChnZXQoKnJlbmRl
cmVyKSk7CiAgICAgaWYgKGNoYW5nZWRDaGlsZCkKICAgICAgICAgZGVmZXJOb2RlQWRkZWRPclJl
bW92ZWQoY2hhbmdlZENoaWxkLT5ub2RlKCkpOwogfQpAQCAtMTU4NSwxMCArMTU2NiwxMCBAQCB2
b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgQVhOb3RpZmljYXRpb24gbm90aQogCiAgICAgLy8gR2V0IGFuIGFjY2Vzc2liaWxpdHkgb2Jq
ZWN0IHRoYXQgYWxyZWFkeSBleGlzdHMuIE9uZSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgaGVyZQog
ICAgIC8vIGJlY2F1c2UgYSByZW5kZXIgdXBkYXRlIG1heSBiZSBpbiBwcm9ncmVzcyBhbmQgY3Jl
YXRpbmcgYW4gQVggb2JqZWN0IGNhbiByZS10cmlnZ2VyIGEgbGF5b3V0Ci0gICAgUmVmUHRyPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IGdldChyZW5kZXJlcik7CisgICAgUmVmUHRyPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IGdldCgqcmVuZGVyZXIpOwogICAgIHdoaWxlICgh
b2JqZWN0ICYmIHJlbmRlcmVyKSB7CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVu
dCgpOwotICAgICAgICBvYmplY3QgPSBnZXQocmVuZGVyZXIpOyAKKyAgICAgICAgb2JqZWN0ID0g
Z2V0KHJlbmRlcmVyKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE2MDYs
NyArMTU4Nyw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvbihOb2RlKiBu
b2RlLCBBWE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24sIFBvCiAKICAgICAvLyBHZXQgYW4gYWNj
ZXNzaWJpbGl0eSBvYmplY3QgdGhhdCBhbHJlYWR5IGV4aXN0cy4gT25lIHNob3VsZCBub3QgYmUg
Y3JlYXRlZCBoZXJlCiAgICAgLy8gYmVjYXVzZSBhIHJlbmRlciB1cGRhdGUgbWF5IGJlIGluIHBy
b2dyZXNzIGFuZCBjcmVhdGluZyBhbiBBWCBvYmplY3QgY2FuIHJlLXRyaWdnZXIgYSBsYXlvdXQK
LSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqZWN0ID0gZ2V0KG5vZGUpOworICAg
IFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmplY3QgPSBnZXQoKm5vZGUpOwogICAgIHdo
aWxlICghb2JqZWN0ICYmIG5vZGUpIHsKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKICAgICAgICAgb2JqZWN0ID0gZ2V0KG5vZGUpOwpAQCAtMTY3NSw3ICsxNjU2LDcgQEAgdm9p
ZCBBWE9iamVjdENhY2hlOjpoYW5kbGVNZW51SXRlbVNlbGVjdGVkKE5vZGUqIG5vZGUpCiAgICAg
aWYgKCFlbGVtZW50LT5mb2N1c2VkKCkgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYV9zZWxlY3RlZEF0
dHIpLCAidHJ1ZSJfcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBvc3ROb3RpZmljYXRpb24o
Z2V0T3JDcmVhdGUobm9kZSksIHByb3RlY3RlZERvY3VtZW50KCkucHRyKCksIEFYTWVudUxpc3RJ
dGVtU2VsZWN0ZWQpOworICAgIHBvc3ROb3RpZmljYXRpb24oZ2V0T3JDcmVhdGUoKm5vZGUpLCBw
cm90ZWN0ZWREb2N1bWVudCgpLnB0cigpLCBBWE1lbnVMaXN0SXRlbVNlbGVjdGVkKTsKIH0KIAog
Ly8gRklYTUU6IENvbnNpZGVyIGFsc28gaGFuZGxpbmcgdXBkYXRpbmcgU2VsZWN0ZWRDaGlsZHJl
biBvZiBUYWJMaXN0cyAodGhpcyBzaG91bGQgaGFwcGVuIGZvciB0aGUgb2xkTm9kZSwgbmV3Tm9k
ZSwgYW5kL29yIHRoZSBwYXJlbnQgb2YgYSB0YWIpCkBAIC0xODk0LDcgKzE4NzUsNyBAQCB2b2lk
IEFYT2JqZWN0Q2FjaGU6Om9uVmFsaWRpdHlDaGFuZ2UoRWxlbWVudCYgZWxlbWVudCkKIHZvaWQg
QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYgbm9kZSwgQ29tcG9z
aXRpb25TdGF0ZSBjb21wb3NpdGlvblN0YXRlLCBib29sIHZhbHVlQ2hhbmdlZCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBzaXplX3QgcG9zaXRpb24sIGJvb2wgaGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0
ZSkKIHsKICNpZiBIQVZFKElOTElORV9QUkVESUNUSU9OUykKLSAgICBhdXRvKiBvYmplY3QgPSBn
ZXRPckNyZWF0ZSgmbm9kZSk7CisgICAgYXV0byogb2JqZWN0ID0gZ2V0T3JDcmVhdGUobm9kZSk7
CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjA3NSw3ICsyMDU2LDcg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5v
ZGUqIG5vZGUsIGNvbnN0IEFYVGV4dFN0YXQKICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKEFU
U1BJKQogICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CiAKLSAgICBw
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGdldE9yQ3JlYXRlKG5vZGUpLCBpbnRlbnQs
IHNlbGVjdGlvbik7CisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihnZXRPckNy
ZWF0ZSgqbm9kZSksIGludGVudCwgc2VsZWN0aW9uKTsKICNlbHNlCiAgICAgcG9zdE5vdGlmaWNh
dGlvbihub2RlLT5yZW5kZXJlcigpLCBBWFNlbGVjdGVkVGV4dENoYW5nZWQsIFBvc3RUYXJnZXQ6
Ok9ic2VydmFibGVQYXJlbnQpOwogICAgIFVOVVNFRF9QQVJBTShpbnRlbnQpOwpAQCAtMjA5Miw3
ICsyMDczLDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZp
Y2F0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY28KICAgICBzdG9wQ2FjaGluZ0NvbXB1
dGVkT2JqZWN0QXR0cmlidXRlcygpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShBVFNQ
SSkKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBnZXRPckNyZWF0ZShub2RlLmdl
dCgpKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBnZXRPckNyZWF0ZSgqbm9k
ZSk7CiAgICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkg
ewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBpZiAocG9zaXRpb24uYXRMYXN0RWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZSgpKSB7CkBAIC0yMTk5LDcgKzIxODAsNyBAQCB2b2lkIEFYT2JqZWN0
Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb24oTm9kZSogbm9kZSwgQVhUZXh0
RWRpdFR5cGUgZAogCiAgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsK
IAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKG5vZGUpOwor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKCpub2RlKTsKICNp
ZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKEFUU1BJKQogICAgIGlmIChvYmplY3QpIHsKICAgICAg
ICAgaWYgKGVucXVldWVQYXNzd29yZFZhbHVlQ2hhbmdlTm90aWZpY2F0aW9uKG9iamVjdCkpCkBA
IC0yMjE4LDcgKzIxOTksNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1l
bnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChIVE1MVGV4dEZvcm1DbwogewogICAgIHN0b3BD
YWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QgPSBnZXRPckNyZWF0ZSgmdGV4dENvbnRyb2wpOworICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKHRleHRDb250cm9sKTsKICNpZiBQTEFURk9S
TShDT0NPQSkgfHwgVVNFKEFUU1BJKQogICAgIGlmIChvYmplY3QpIHsKICAgICAgICAgaWYgKGVu
cXVldWVQYXNzd29yZFZhbHVlQ2hhbmdlTm90aWZpY2F0aW9uKG9iamVjdCkpCkBAIC0yMjYzLDEy
ICsyMjQ0LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdFdmVudE5vdGlmaWNh
dGlvbihMb2NhbEZyYW1lKiBmcmFtZSwgQVhMb2FkaW5nRXYKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRGVsZWdhdGUgb24gdGhlIHJpZ2h0IHBsYXRmb3JtCi0gICAgUmVuZGVyVmlldyogY29u
dGVudFJlbmRlcmVyID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICghY29udGVu
dFJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmogPSBnZXRPckNyZWF0ZShjb250ZW50UmVuZGVyZXIpOwotICAgIGZyYW1lTG9hZGluZ0V2ZW50
UGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqLCBsb2FkaW5nRXZlbnQpOworICAgIGZyYW1lTG9hZGlu
Z0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oZ2V0T3JDcmVhdGUoZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpKSwgbG9hZGluZ0V2ZW50KTsKIH0KIAogdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0TGl2
ZVJlZ2lvbkNoYW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCkBA
IC0yMzI1LDggKzIzMDEsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmZvY3VzQ3VycmVudE1vZGFs
KCkKICAgICAvLyB0aGUgZGlhbG9nLgogICAgIGlmIChtX2N1cnJlbnRNb2RhbEVsZW1lbnQtPmNv
bnRhaW5zKGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjdXJyZW50TW9kYWxOb2RlT2JqZWN0ID0g
Z2V0T3JDcmVhdGUobV9jdXJyZW50TW9kYWxFbGVtZW50LmdldCgpKSkgeworCisgICAgaWYgKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGN1cnJlbnRNb2RhbE5vZGVPYmplY3QgPSBnZXRPckNyZWF0ZSgq
bV9jdXJyZW50TW9kYWxFbGVtZW50KSkgewogICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVj
dCogZm9jdXNhYmxlID0gZmlyc3RGb2N1c2FibGVDaGlsZChjdXJyZW50TW9kYWxOb2RlT2JqZWN0
KSkKICAgICAgICAgICAgIGZvY3VzYWJsZS0+c2V0Rm9jdXNlZCh0cnVlKTsKICAgICB9CkBAIC0y
MzgxLDcgKzIzNTcsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFjdGl2ZURlc2NlbmRh
bnRDaGFuZ2UoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cgogICAgIGlmICghZWxlbWVu
dC5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHIgb2JqZWN0ID0gZ2V0T3JDcmVhdGUoJmVsZW1l
bnQpOworICAgIFJlZlB0ciBvYmplY3QgPSBnZXRPckNyZWF0ZShlbGVtZW50KTsKICAgICBpZiAo
IW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTQxLDcgKzI1MTcsNyBAQCBib29sIEFY
T2JqZWN0Q2FjaGU6OnNob3VsZFByb2Nlc3NBdHRyaWJ1dGVDaGFuZ2UoRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgUXVhbGlmaQogCiAgICAgLy8gSWYgYW4gQVhPYmplY3QgaGFzIHlldCB0byBiZSBj
cmVhdGVkLCB0aGVuIHRoZXJlJ3Mgbm8gbmVlZCB0byBwcm9jZXNzIGF0dHJpYnV0ZSBjaGFuZ2Vz
LgogICAgIC8vIFNvbWUgb2YgdGhlc2Ugbm90aWZpY2F0aW9ucyBhcmUgcHJvY2Vzc2VkIG9uIHRo
ZSBwYXJlbnQsIHNvIGFsbG93IHRoYXQgdG8gcHJvY2VlZCBhcyB3ZWxsCi0gICAgcmV0dXJuIGdl
dChlbGVtZW50KSB8fCBnZXQoZWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gZ2V0
KCplbGVtZW50KSB8fCBnZXQoZWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKIH0KIAogdm9pZCBBWE9i
amVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIG9sZFZhbHVlLCBjb25z
dCBBdG9tU3RyaW5nJiBuZXdWYWx1ZSkKQEAgLTI1NzksOSArMjU1NSw5IEBAIHZvaWQgQVhPYmpl
Y3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1
YWxpZmllZE5hbWUmCiAgICAgaWYgKGF0dHJOYW1lID09IHJvbGVBdHRyKQogICAgICAgICBoYW5k
bGVSb2xlQ2hhbmdlZChlbGVtZW50LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IGFsdEF0dHIgfHwgYXR0ck5hbWUgPT0gdGl0bGVBdHRyKQotICAgICAgICBo
YW5kbGVUZXh0Q2hhbmdlZChnZXRPckNyZWF0ZShlbGVtZW50KSk7CisgICAgICAgIGhhbmRsZVRl
eHRDaGFuZ2VkKGdldE9yQ3JlYXRlKCplbGVtZW50KSk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gY29udGVudGVkaXRhYmxlQXR0cikgewotICAgICAgICBpZiAoYXV0byogYXhPYmplY3QgPSBn
ZXQoZWxlbWVudCkpCisgICAgICAgIGlmIChhdXRvKiBheE9iamVjdCA9IGdldCgqZWxlbWVudCkp
CiAgICAgICAgICAgICBheE9iamVjdC0+dXBkYXRlUm9sZSgpOwogICAgICAgICBwb3N0Tm90aWZp
Y2F0aW9uKGVsZW1lbnQsIEFYQ29udGVudEVkaXRhYmxlQXR0cmlidXRlQ2hhbmdlZCk7CiAgICAg
fQpAQCAtMjYwMiwyNyArMjU3OCwyNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUF0dHJp
YnV0ZUNoYW5nZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJgogICAgIH0K
ICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IGhlYWRlcnNBdHRyKQotICAgICAgICB1cGRhdGVJc29sYXRlZFRyZWUoZ2V0KGVs
ZW1lbnQpLCBBWFRhYmxlSGVhZGVyc0NoYW5nZWQpOworICAgICAgICB1cGRhdGVJc29sYXRlZFRy
ZWUoZ2V0KCplbGVtZW50KSwgQVhUYWJsZUhlYWRlcnNDaGFuZ2VkKTsKICAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBsYW5nQXR0cikKLSAgICAgICAgdXBkYXRlSXNvbGF0ZWRUcmVlKGdldChlbGVt
ZW50KSwgQVhMYW5ndWFnZUNoYW5nZWQpOworICAgICAgICB1cGRhdGVJc29sYXRlZFRyZWUoZ2V0
KCplbGVtZW50KSwgQVhMYW5ndWFnZUNoYW5nZWQpOwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IG5hbWVBdHRyKQotICAgICAgICBwb3N0Tm90aWZpY2F0aW9uKGdldChlbGVtZW50KSwgQVhOYW1l
Q2hhbmdlZCk7CisgICAgICAgIHBvc3ROb3RpZmljYXRpb24oZ2V0KCplbGVtZW50KSwgQVhOYW1l
Q2hhbmdlZCk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gcGxhY2Vob2xkZXJBdHRyKQogICAg
ICAgICBwb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQsIEFYUGxhY2Vob2xkZXJDaGFuZ2VkKTsKICAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBocmVmQXR0ciB8fCBhdHRyTmFtZSA9PSBzcmNBdHRyKQog
ICAgICAgICBwb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQsIEFYVVJMQ2hhbmdlZCk7CiAgICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyKSB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgICAgICB1
cGRhdGVJc29sYXRlZFRyZWUoZ2V0KGVsZW1lbnQpLCBBWElkQXR0cmlidXRlQ2hhbmdlZCk7Cisg
ICAgICAgIHVwZGF0ZUlzb2xhdGVkVHJlZShnZXQoKmVsZW1lbnQpLCBBWElkQXR0cmlidXRlQ2hh
bmdlZCk7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGFjY2Vzc2tleUF0dHIp
Ci0gICAgICAgIHVwZGF0ZUlzb2xhdGVkVHJlZShnZXQoZWxlbWVudCksIEFYQWNjZXNzS2V5Q2hh
bmdlZCk7CisgICAgICAgIHVwZGF0ZUlzb2xhdGVkVHJlZShnZXQoKmVsZW1lbnQpLCBBWEFjY2Vz
c0tleUNoYW5nZWQpOwogI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RS
RUUpCiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gb3BlbkF0dHIgJiYgaXM8SFRNTERpYWxvZ0Vs
ZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICBkZWZlck1vZGFsQ2hhbmdlKGVsZW1lbnQpOwog
ICAgICAgICByZWNvbXB1dGVJc0lnbm9yZWQoZWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKICAgICB9
IGVsc2UgaWYgKGF0dHJOYW1lID09IHJvd3NwYW5BdHRyKSB7Ci0gICAgICAgIGRlZmVyUm93c3Bh
bkNoYW5nZShnZXQoZWxlbWVudCkpOworICAgICAgICBkZWZlclJvd3NwYW5DaGFuZ2UoZ2V0KCpl
bGVtZW50KSk7CiAgICAgICAgIHJlY29tcHV0ZVBhcmVudFRhYmxlUHJvcGVydGllcyhlbGVtZW50
LCBUYWJsZVByb3BlcnR5OjpDZWxsU2xvdHMpOwogICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0g
Y29sc3BhbkF0dHIpIHsKICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihlbGVtZW50LCBBWENvbHVt
blNwYW5DaGFuZ2VkKTsKQEAgLTI2NDksNyArMjYyNSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6
aGFuZGxlQXR0cmlidXRlQ2hhbmdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5h
bWUmCiAgICAgICAgIC8vIFdoZW4gYXJpYS1sYWJlbCBjaGFuZ2VzIG9uIGFuIDxodG1sPiBlbGVt
ZW50LCBpdCdzIHRoZSB3ZWIgYXJlYSB3aG8gbmVlZHMgdG8gcmUtY29tcHV0ZSBpdHMgYWNjZXNz
aWJpbGl0eSB0ZXh0LgogICAgICAgICBoYW5kbGVUZXh0Q2hhbmdlZChnZXQoZWxlbWVudC0+cHJv
dGVjdGVkRG9jdW1lbnQoKS5wdHIoKSkpOwogICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJp
YV9sYWJlbEF0dHIgfHwgYXR0ck5hbWUgPT0gYXJpYV9sYWJlbGVkYnlBdHRyIHx8IGF0dHJOYW1l
ID09IGFyaWFfbGFiZWxsZWRieUF0dHIpIHsKLSAgICAgICAgUmVmUHRyIGF4T2JqZWN0ID0gZ2V0
KGVsZW1lbnQpOworICAgICAgICBSZWZQdHIgYXhPYmplY3QgPSBnZXQoKmVsZW1lbnQpOwogICAg
ICAgICBpZiAoIWF4T2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzAwLDcgKzI2
NzYsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZShFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJgogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IGFyaWFfdmFsdWVtaW5BdHRyKQogICAgICAgICBwb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQsIEFY
TWluaW11bVZhbHVlQ2hhbmdlZCk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9tdWx0
aWxpbmVBdHRyKSB7Ci0gICAgICAgIGlmIChhdXRvKiBheE9iamVjdCA9IGdldChlbGVtZW50KSkg
eworICAgICAgICBpZiAoYXV0byogYXhPYmplY3QgPSBnZXQoKmVsZW1lbnQpKSB7CiAgICAgICAg
ICAgICAvLyBUaGUgcm9sZSBvZiB0ZXh0YXJlYSBhbmQgdGV4dGZpZWxkIG9iamVjdHMgaXMgZGVw
ZW5kZW50IG9uIHdoZXRoZXIgdGhleSBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcywgc28gcmVjb21w
dXRlIGl0IGhlcmUuCiAgICAgICAgICAgICBpZiAoYXhPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFj
Y2Vzc2liaWxpdHlSb2xlOjpUZXh0QXJlYSB8fCBheE9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OlRleHRGaWVsZCkKICAgICAgICAgICAgICAgICBheE9iamVjdC0+dXBk
YXRlUm9sZSgpOwpAQCAtMjc0OCwxNiArMjcyNCwxNiBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Omhh
bmRsZUF0dHJpYnV0ZUNoYW5nZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JgogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGFyaWFfcm9sZWRlc2NyaXB0aW9uQXR0cikKICAg
ICAgICAgaGFuZGxlUm9sZURlc2NyaXB0aW9uQ2hhbmdlZChlbGVtZW50KTsKICAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBhcmlhX3Jvd2NvdW50QXR0cikKLSAgICAgICAgaGFuZGxlUm93Q291bnRD
aGFuZ2VkKGdldChlbGVtZW50KSwgZWxlbWVudCA/IGVsZW1lbnQtPnByb3RlY3RlZERvY3VtZW50
KCkucHRyKCkgOiBudWxscHRyKTsKKyAgICAgICAgaGFuZGxlUm93Q291bnRDaGFuZ2VkKGdldCgq
ZWxlbWVudCksIGVsZW1lbnQtPnByb3RlY3RlZERvY3VtZW50KCkucHRyKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IGFyaWFfcm93c3BhbkF0dHIpIHsKLSAgICAgICAgZGVmZXJSb3dzcGFu
Q2hhbmdlKGdldChlbGVtZW50KSk7CisgICAgICAgIGRlZmVyUm93c3BhbkNoYW5nZShnZXQoKmVs
ZW1lbnQpKTsKICAgICAgICAgcmVjb21wdXRlUGFyZW50VGFibGVQcm9wZXJ0aWVzKGVsZW1lbnQs
IHsgVGFibGVQcm9wZXJ0eTo6Q2VsbFNsb3RzLCBUYWJsZVByb3BlcnR5OjpFeHBvc2VkIH0pOwog
ICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9zb3J0QXR0cikKICAgICAgICAgcG9zdE5v
dGlmaWNhdGlvbihlbGVtZW50LCBBWFNvcnREaXJlY3Rpb25DaGFuZ2VkKTsKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGFy
aWFfb3duc0F0dHIpIHsKICAgICAgICAgaWYgKG9sZFZhbHVlLmlzRW1wdHkoKSB8fCBuZXdWYWx1
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICB1cGRhdGVJc29sYXRlZFRyZWUoZ2V0KGVsZW1lbnQp
LCBBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNBUklBT3ducyk7CisgICAgICAgICAgICB1cGRhdGVJ
c29sYXRlZFRyZWUoZ2V0KCplbGVtZW50KSwgQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQU93
bnMpOwogICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9icmFpbGxlbGFiZWxBdHRyKQog
ICAgICAgICBwb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQsIEFYQnJhaWxsZUxhYmVsQ2hhbmdlZCk7
CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9icmFpbGxlcm9sZWRlc2NyaXB0aW9uQXR0
cikKQEAgLTMzNjYsNyArMzM0Miw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpj
aGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQCiAgICAgaWYg
KG5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9P
ZmZzZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUuZ2V0KCkpLCBkZWVwUG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwog
ICAgIAotICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSB0aGlzLT5nZXRPckNy
ZWF0ZShub2RlLnB0cigpKTsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0g
dGhpcy0+Z2V0T3JDcmVhdGUobm9kZS5nZXQoKSk7CiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJl
dHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKICAgICAKQEAgLTM0MTIsOCArMzM4OCw4IEBAIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0
TWFya2VyRGF0YShUZXh0TWFyCiAgICAgUmVmUHRyIGRvbU5vZGUgPSB0ZXh0TWFya2VyRGF0YS5u
b2RlOwogICAgIGlmICghaXNOb2RlSW5Vc2UoKmRvbU5vZGUpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKLSAgICByZXR1cm4gdGhpcy0+Z2V0T3JDcmVhdGUoZG9tTm9kZS5nZXQoKSk7
CisKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGUoKmRvbU5vZGUpOwogfQogCiBzdGQ6Om9wdGlvbmFs
PFRleHRNYXJrZXJEYXRhPiBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKQEAgLTQwOTks
MTAgKzQwNzUsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnByZXBhcmVGb3JEb2N1bWVudERlc3Ry
dWN0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKICAgICAKIGJvb2wgQVhPYmplY3RDYWNo
ZTo6bm9kZUlzVGV4dENvbnRyb2woY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGF4T2JqZWN0ID0gZ2V0T3JDcmVhdGUoY29uc3RfY2FzdDxOb2RlKj4obm9kZSkpOworICAgIGNv
bnN0IGF1dG8qIGF4T2JqZWN0ID0gZ2V0T3JDcmVhdGUoY29uc3RfY2FzdDxOb2RlKj4obm9kZSkp
OwogICAgIHJldHVybiBheE9iamVjdCAmJiBheE9iamVjdC0+aXNUZXh0Q29udHJvbCgpOwogfQog
CkBAIC00MTgyLDcgKzQxNTUsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJl
ZENhY2hlVXBkYXRlKEZvcmNlTGF5b3V0IGZvcmNlTGF5b3V0KQogCiAgICAgICAgICAgICBpZiAo
UmVmUHRyIGxhYmVsID0gZHluYW1pY0Rvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KG5vZGUuZ2V0
KCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQSBsYWJlbCB3YXMgYWRkZWQgb3IgcmVtb3ZlZC4g
VXBkYXRlIGl0cyBMYWJlbEZvciByZWxhdGlvbnNoaXBzLgotICAgICAgICAgICAgICAgIGhhbmRs
ZUxhYmVsQ2hhbmdlZChnZXRPckNyZWF0ZShsYWJlbC5nZXQoKSkpOworICAgICAgICAgICAgICAg
IGhhbmRsZUxhYmVsQ2hhbmdlZChnZXRPckNyZWF0ZSgqbGFiZWwpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTQyMDksNyArNDE4Miw3IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoRm9yY2VMYXlvdXQgZm9yY2VMYXlvdXQpCiAg
ICAgYXV0byB0ZXh0Q2hhbmdlZExpc3QgPSBjb3B5VG9WZWN0b3IobV9kZWZlcnJlZFRleHRDaGFu
Z2VkTGlzdCk7CiAgICAgZm9yIChhdXRvJiB3ZWFrTm9kZSA6IHRleHRDaGFuZ2VkTGlzdCkgewog
ICAgICAgICBpZiAoUmVmUHRyIG5vZGUgPSB3ZWFrTm9kZS5nZXQoKSkKLSAgICAgICAgICAgIGhh
bmRsZVRleHRDaGFuZ2VkKGdldE9yQ3JlYXRlKG5vZGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGhh
bmRsZVRleHRDaGFuZ2VkKGdldE9yQ3JlYXRlKCpub2RlKSk7CiAgICAgfQogICAgIG1fZGVmZXJy
ZWRUZXh0Q2hhbmdlZExpc3QuY2xlYXIoKTsKIApAQCAtNDY3Nyw3ICs0NjUwLDcgQEAgdm9pZCBB
WE9iamVjdENhY2hlOjpkZWZlclRleHRDaGFuZ2VkSWZOZWVkZWQoTm9kZSogbm9kZSkKICAgICAg
ICAgbV9kZWZlcnJlZFRleHRDaGFuZ2VkTGlzdC5hZGQoKm5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGhhbmRsZVRleHRDaGFuZ2VkKGdldE9yQ3JlYXRlKG5vZGUpKTsKKyAgICBo
YW5kbGVUZXh0Q2hhbmdlZChnZXRPckNyZWF0ZSgqbm9kZSkpOwogfQogCiB2b2lkIEFYT2JqZWN0
Q2FjaGU6OmRlZmVyU2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWRJZk5lZWRlZChFbGVtZW50JiBzZWxl
Y3RFbGVtZW50KQpAQCAtNDcwNCwxMSArNDY3NywxMyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRl
ZmVyVGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRNTFRleHRGb3Jt
QwogCiBib29sIGlzTm9kZUFyaWFWaXNpYmxlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG5vZGUgPyBpc05vZGVBcmlhVmlz
aWJsZSgqbm9kZSkgOiBmYWxzZTsKK30KIAorYm9vbCBpc05vZGVBcmlhVmlzaWJsZShOb2RlJiBu
b2RlKQorewogICAgIC8vIElmIGFuIGVsZW1lbnQgaXMgZm9jdXNlZCwgaXQgc2hvdWxkIG5vdCBi
ZSBoaWRkZW4uCi0gICAgaWYgKFJlZlB0ciBlbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKTsgZWxlbWVudCAmJiBlbGVtZW50LT5mb2N1c2VkKCkpCisgICAgaWYgKFJlZlB0
ciBlbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOyBlbGVtZW50ICYmIGVs
ZW1lbnQtPmZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBBUklBIE5v
ZGUgdmlzaWJpbGl0eSBpcyBjb250cm9sbGVkIGJ5IGFyaWEtaGlkZGVuCkBAIC00NzE3LDkgKzQ2
OTIsOSBAQCBib29sIGlzTm9kZUFyaWFWaXNpYmxlKE5vZGUqIG5vZGUpCiAgICAgLy8gIDMpIGlm
IGFyaWEtaGlkZGVuPWZhbHNlLCBhbmQgdGhlIG9iamVjdCBpcyBOT1QgcmVuZGVyZWQsIHRoZW4g
aXQgbXVzdCBoYXZlCiAgICAgLy8gICAgIGFyaWEtaGlkZGVuPWZhbHNlIG9uIGVhY2ggcGFyZW50
IHVudGlsIGl0IGdldHMgdG8gYSByZW5kZXJlZCBvYmplY3QKICAgICAvLyAgM2IpIGEgdGV4dCBu
b2RlIGluaGVyaXRzIGEgcGFyZW50cyBhcmlhLWhpZGRlbiB2YWx1ZQotICAgIGJvb2wgcmVxdWly
ZXNBcmlhSGlkZGVuRmFsc2UgPSAhbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBib29sIHJlcXVpcmVz
QXJpYUhpZGRlbkZhbHNlID0gIW5vZGUucmVuZGVyZXIoKTsKICAgICBib29sIGFyaWFIaWRkZW5G
YWxzZVByZXNlbnQgPSBmYWxzZTsKLSAgICBmb3IgKE5vZGUqIHRlc3ROb2RlID0gbm9kZTsgdGVz
dE5vZGU7IHRlc3ROb2RlID0gdGVzdE5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAoYXV0
byogdGVzdE5vZGUgPSAmbm9kZTsgdGVzdE5vZGU7IHRlc3ROb2RlID0gdGVzdE5vZGUtPnBhcmVu
dE5vZGUoKSkgewogICAgICAgICBpZiAoUmVmUHRyIGVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8
RWxlbWVudD4oKnRlc3ROb2RlKSkgewogICAgICAgICAgICAgY29uc3QgYXV0byYgYXJpYUhpZGRl
blZhbHVlID0gZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhX2hp
ZGRlbkF0dHIpOwogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGFyaWFIaWRkZW5WYWx1ZSwgInRydWUiX3MpKQpAQCAtNDg4OSw3ICs0ODY0LDcgQEAgYm9vbCBB
WE9iamVjdENhY2hlOjphZGRSZWxhdGlvbihFbGVtZW50KiBvcmlnaW4sIEVsZW1lbnQqIHRhcmdl
dCwgQVhSZWxhdGlvblR5cGUKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICByZXR1cm4gYWRkUmVsYXRpb24oZ2V0T3JDcmVhdGUob3JpZ2luLCBJc1BhcnRPZlJlbGF0aW9u
OjpZZXMpLCBnZXRPckNyZWF0ZSh0YXJnZXQsIElzUGFydE9mUmVsYXRpb246OlllcyksIHJlbGF0
aW9uVHlwZSk7CisgICAgcmV0dXJuIGFkZFJlbGF0aW9uKGdldE9yQ3JlYXRlKCpvcmlnaW4sIElz
UGFydE9mUmVsYXRpb246OlllcyksIGdldE9yQ3JlYXRlKCp0YXJnZXQsIElzUGFydE9mUmVsYXRp
b246OlllcyksIHJlbGF0aW9uVHlwZSk7CiB9CiAKIHN0YXRpYyBib29sIGNhbkhhdmVSZWxhdGlv
bnMoRWxlbWVudCYgZWxlbWVudCkKQEAgLTUxMzQsNyArNTEwOSw3IEBAIHZvaWQgQVhPYmplY3RD
YWNoZTo6YWRkTGFiZWxGb3JSZWxhdGlvbihFbGVtZW50JiBvcmlnaW4pCiAgICAgfSBlbHNlIGlm
IChvcmlnaW4uaGFzVGFnTmFtZShmaWdjYXB0aW9uVGFnKSkgewogICAgICAgICBSZWZQdHIgcGFy
ZW50ID0gb3JpZ2luLnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQt
Pmhhc1RhZ05hbWUoZmlndXJlVGFnKSkKLSAgICAgICAgICAgIGFkZGVkUmVsYXRpb24gPSBhZGRS
ZWxhdGlvbihnZXRPckNyZWF0ZSgmb3JpZ2luKSwgZ2V0T3JDcmVhdGUocGFyZW50LmdldCgpKSwg
QVhSZWxhdGlvblR5cGU6OkxhYmVsRm9yKTsKKyAgICAgICAgICAgIGFkZGVkUmVsYXRpb24gPSBh
ZGRSZWxhdGlvbihnZXRPckNyZWF0ZShvcmlnaW4pLCBnZXRPckNyZWF0ZSgqcGFyZW50KSwgQVhS
ZWxhdGlvblR5cGU6OkxhYmVsRm9yKTsKICAgICB9CiAKICAgICBpZiAoYWRkZWRSZWxhdGlvbikK
QEAgLTUxODUsNyArNTE2MCw3IEBAIGJvb2wgQVhPYmplY3RDYWNoZTo6aXNEZXNjZW5kYW50T2ZS
ZWxhdGVkTm9kZShOb2RlJiBub2RlKQogewogICAgIGF1dG8mIHRhcmdldElEcyA9IHJlbGF0aW9u
VGFyZ2V0SURzKCk7CiAgICAgZm9yIChhdXRvKiBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsg
cGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBhdXRvKiBv
YmplY3QgPSBnZXQocGFyZW50KTsKKyAgICAgICAgYXV0byogb2JqZWN0ID0gZ2V0KCpwYXJlbnQp
OwogICAgICAgICBpZiAob2JqZWN0ICYmIChtX3JlbGF0aW9ucy5jb250YWlucyhvYmplY3QtPm9i
amVjdElEKCkpIHx8IHRhcmdldElEcy5jb250YWlucyhvYmplY3QtPm9iamVjdElEKCkpKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggMjdiNzdhYjc1ZmYwLi4zNzkzMTBkZTdhZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC0yNjcs
MTggKzI2Nyw0MiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgQWNjZXNzaWJpbGl0eU9i
amVjdCogcm9vdE9iamVjdEZvckZyYW1lKExvY2FsRnJhbWUqKTsKIAogICAgIC8vIENyZWF0aW9u
L3JldHJpZXZhbCBvZiBBWCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCBhIERPTSBvciBSZW5kZXJU
cmVlIG9iamVjdC4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShSZW5kZXJP
YmplY3QqKTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShXaWRnZXQqKTsK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyID8gZ2V0T3JDcmVhdGUoKnJlbmRl
cmVyKSA6IG51bGxwdHI7CisgICAgfQorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3Jl
YXRlKFJlbmRlck9iamVjdCYpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRl
KFdpZGdldCogd2lkZ2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpZGdldCA/IGdldE9yQ3Jl
YXRlKCp3aWRnZXQpIDogbnVsbHB0cjsKKyAgICB9CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
Z2V0T3JDcmVhdGUoV2lkZ2V0Jik7CiAgICAgZW51bSBjbGFzcyBJc1BhcnRPZlJlbGF0aW9uIDog
Ym9vbCB7IE5vLCBZZXMgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBnZXRPckNyZWF0ZShOb2RlKiwgSXNQYXJ0T2ZSZWxhdGlvbiA9IElzUGFydE9mUmVsYXRpb246
Ok5vKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShOb2RlKiBub2RlLCBJ
c1BhcnRPZlJlbGF0aW9uIGlzUGFydE9mUmVsYXRpb24gPSBJc1BhcnRPZlJlbGF0aW9uOjpObykK
KyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gZ2V0T3JDcmVhdGUoKm5vZGUsIGlzUGFydE9m
UmVsYXRpb24pIDogbnVsbHB0cjsKKyAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgQWNjZXNzaWJp
bGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoTm9kZSYsIElzUGFydE9mUmVsYXRpb24gPSBJc1BhcnRP
ZlJlbGF0aW9uOjpObyk7CiAKICAgICAvLyB1c2VkIGZvciBvYmplY3RzIHdpdGhvdXQgYmFja2lu
ZyBlbGVtZW50cwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNyZWF0ZShBY2Nlc3NpYmlsaXR5
Um9sZSk7CiAgICAgCi0gICAgLy8gd2lsbCBvbmx5IHJldHVybiB0aGUgQWNjZXNzaWJpbGl0eU9i
amVjdCBpZiBpdCBhbHJlYWR5IGV4aXN0cwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldChS
ZW5kZXJPYmplY3QqKTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQoV2lkZ2V0Kik7Ci0g
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0KE5vZGUqKTsKKyAgICAvLyBXaWxsIG9ubHkgcmV0
dXJuIHRoZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IGlmIGl0IGFscmVhZHkgZXhpc3RzLgorICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGdldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyID8gZ2V0KCpyZW5kZXJlcikgOiBudWxscHRyOworICAgIH0K
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQoUmVuZGVyT2JqZWN0JikgY29uc3Q7CisgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0KFdpZGdldCogd2lkZ2V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHdpZGdldCA/IGdldCgqd2lkZ2V0KSA6IG51bGxwdHI7CisgICAgfQorICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldChXaWRnZXQmKSBjb25zdDsKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBnZXQoTm9kZSogbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBu
b2RlID8gZ2V0KCpub2RlKSA6IG51bGxwdHI7CisgICAgfQorICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGdldChOb2RlJikgY29uc3Q7CiAKICAgICB2b2lkIHJlbW92ZShSZW5kZXJPYmplY3QqKTsK
ICAgICB2b2lkIHJlbW92ZShOb2RlJik7CkBAIC04MzEsNyArODU1LDkgQEAgcHJpdmF0ZToKIGJv
b2wgbm9kZUhhc1JvbGUoTm9kZSosIFN0cmluZ1ZpZXcgcm9sZSk7CiBib29sIG5vZGVIYXNDZWxs
Um9sZShOb2RlKik7CiBib29sIG5vZGVIYXNUYWJsZVJvbGUoTm9kZSopOworCiAvLyBUaGlzIHdp
bGwgbGV0IHlvdSBrbm93IGlmIGFyaWEtaGlkZGVuIHdhcyBleHBsaWNpdGx5IHNldCB0byBmYWxz
ZS4KK2Jvb2wgaXNOb2RlQXJpYVZpc2libGUoTm9kZSYpOwogYm9vbCBpc05vZGVBcmlhVmlzaWJs
ZShOb2RlKik7CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBBWE9iamVjdENhY2hlOjpBWE5vdGlmaWNhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCmlu
ZGV4IGFjYTk5ZTYxMzc5OC4uYWI5OWUwNjA0ZTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcApA
QCAtOTEsNyArOTEsNyBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjpl
bGVtZW50UmVjdCgpIGNvbnN0CiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBXZWFrUHRyIGNh
Y2hlID0gbGlzdEJveFJlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKTsKLSAgICBS
ZWZQdHIgbGlzdGJveCA9IGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKGxpc3RCb3hSZW5kZXJl
cikgOiBudWxscHRyOworICAgIFJlZlB0ciBsaXN0Ym94ID0gY2FjaGUgPyBjYWNoZS0+Z2V0T3JD
cmVhdGUoKmxpc3RCb3hSZW5kZXJlcikgOiBudWxscHRyOwogICAgIGlmICghbGlzdGJveCkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTYzLDcgKzE2Myw3IEBAIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjpwYXJlbnRPYmplY3QoKSBjb25zdAogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8qIGNhY2hlID0gbV9ub2RlLT5kb2N1bWVu
dCgpLmF4T2JqZWN0Q2FjaGUoKTsKLSAgICByZXR1cm4gY2FjaGUgPyBjYWNoZS0+Z2V0T3JDcmVh
dGUocGFyZW50Tm9kZSkgOiBudWxscHRyOworICAgIHJldHVybiBjYWNoZSA/IGNhY2hlLT5nZXRP
ckNyZWF0ZSgqcGFyZW50Tm9kZSkgOiBudWxscHRyOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uOjpzZXRTZWxlY3RlZChib29sIHNlbGVjdGVkKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50
LmNwcAppbmRleCAwNDc5OWEyZDM0NjYuLmE2MThkODI5NzgxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVu
dC5jcHAKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50
OjptYXRoUHJlc2NyaXB0cyhBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcgogICAgIHN0
ZDo6cGFpcjxBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQWNjZXNzaWJpbGl0eU9iamVjdCo+IHByZXNj
cmlwdFBhaXI7CiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoZm91bmRQ
cmVzY3JpcHQpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4Q2hpbGQgPSBh
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKTsKKyAgICAgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGF4Q2hpbGQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCpjaGls
ZCk7CiAgICAgICAgICAgICBpZiAoYXhDaGlsZCAmJiBheENoaWxkLT5pc01hdGhFbGVtZW50KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoIXByZXNjcmlwdFBhaXIuZmlyc3QpCiAgICAgICAgICAg
ICAgICAgICAgIHByZXNjcmlwdFBhaXIuZmlyc3QgPSBheENoaWxkOwpAQCAtNDE3LDcgKzQxNyw3
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Om1hdGhQb3N0c2NyaXB0cyhBY2Nl
c3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpCiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFt
ZShNYXRoTUxOYW1lczo6bXByZXNjcmlwdHNUYWcpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhDaGlsZCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0
T3JDcmVhdGUoY2hpbGQpOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheENoaWxkID0g
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgqY2hpbGQpOwogICAgICAgICBpZiAoYXhDaGls
ZCAmJiBheENoaWxkLT5pc01hdGhFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmICghZm91bmRC
YXNlRWxlbWVudCkKICAgICAgICAgICAgICAgICBmb3VuZEJhc2VFbGVtZW50ID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVM
aXN0UG9wdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3RQb3B1cC5jcHAKaW5kZXggZDZlMmI2MTVmZDk5Li4yMGJhZTI5NTg1MTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0
UG9wdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU1lbnVMaXN0UG9wdXAuY3BwCkBAIC05MCw3ICs5MCw3IEBAIEFjY2Vzc2liaWxpdHlNZW51TGlz
dE9wdGlvbiogQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXA6Om1lbnVMaXN0T3B0aW9uQWNjZXNz
aWJpCiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pblJlbmRlcmVkRG9jdW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PEFj
Y2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbj4oZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5n
ZXRPckNyZWF0ZShlbGVtZW50KSk7CisgICAgcmV0dXJuIGR5bmFtaWNEb3duY2FzdDxBY2Nlc3Np
YmlsaXR5TWVudUxpc3RPcHRpb24+KGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUoKmVsZW1lbnQpKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6
cHJlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCAwZTZlOTQzOTNjMDEuLjNjYTE5ZGZjNjQ3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHAKQEAgLTEzOCw3ICsxMzgsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgaWYgKCFj
YWNoZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvKiBheEN1cnJlbnRDaGls
ZCA9IGNhY2hlLT5nZXRPckNyZWF0ZShjdXJyZW50Q2hpbGQpOworICAgIGF1dG8qIGF4Q3VycmVu
dENoaWxkID0gY2FjaGUtPmdldE9yQ3JlYXRlKCpjdXJyZW50Q2hpbGQpOwogICAgIHdoaWxlICgh
YXhDdXJyZW50Q2hpbGQgJiYgY3VycmVudENoaWxkKSB7CiAgICAgICAgIGN1cnJlbnRDaGlsZCA9
IGN1cnJlbnRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgYXhDdXJyZW50Q2hpbGQgPSBj
YWNoZS0+Z2V0T3JDcmVhdGUoY3VycmVudENoaWxkKTsKQEAgLTE1Niw3ICsxNTYsNyBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKCkgY29u
c3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIG9iamVjdENhY2hlID0gYXhP
YmplY3RDYWNoZSgpOwotICAgIHJldHVybiBvYmplY3RDYWNoZSA/IG9iamVjdENhY2hlLT5nZXRP
ckNyZWF0ZShsYXN0Q2hpbGQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gb2JqZWN0Q2FjaGUgPyBv
YmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUoKmxhc3RDaGlsZCkgOiBudWxscHRyOwogfQogCiBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cHJldmlvdXNTaWJsaW5n
KCkgY29uc3QKQEAgLTE2OSw3ICsxNjksNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBhdXRvIG9iamVjdENhY2hlID0gYXhPYmplY3RDYWNoZSgpOwotICAg
IHJldHVybiBvYmplY3RDYWNoZSA/IG9iamVjdENhY2hlLT5nZXRPckNyZWF0ZShwcmV2aW91c1Np
YmxpbmcpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gb2JqZWN0Q2FjaGUgPyBvYmplY3RDYWNoZS0+
Z2V0T3JDcmVhdGUoKnByZXZpb3VzU2libGluZykgOiBudWxscHRyOwogfQogCiBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bmV4dFNpYmxpbmcoKSBjb25zdApA
QCAtMTgyLDcgKzE4Miw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgYXV0byBvYmplY3RDYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKLSAgICByZXR1cm4gb2JqZWN0
Q2FjaGUgPyBvYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUobmV4dFNpYmxpbmcpIDogbnVsbHB0cjsK
KyAgICByZXR1cm4gb2JqZWN0Q2FjaGUgPyBvYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUoKm5leHRT
aWJsaW5nKSA6IG51bGxwdHI7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4aXN0cygpIGNvbnN0CkBAIC0yMTAsNyArMjEw
LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnBhcmVu
dE9iamVjdCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKQotICAgICAgICByZXR1cm4gY2FjaGUt
PmdldE9yQ3JlYXRlKHBhcmVudE9iaik7CisgICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVh
dGUoKnBhcmVudE9iaik7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTIyOSw3ICsyMjks
NyBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGVja2JveE9yUmFkaW9S
ZWN0KCkgY29uc3QKICAgICBhdXRvIHNlbGZSZWN0ID0gYm91bmRpbmdCb3hSZWN0KCk7CiAgICAg
Zm9yIChhdXRvJiBsYWJlbCA6IGxhYmVscykgewogICAgICAgICBpZiAobGFiZWwtPnJlbmRlcmVy
KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBheExhYmVsID0gY2FjaGUtPmdldE9yQ3JlYXRl
KGxhYmVsLnB0cigpKSkKKyAgICAgICAgICAgIGlmIChhdXRvKiBheExhYmVsID0gY2FjaGUtPmdl
dE9yQ3JlYXRlKGxhYmVsLmdldCgpKSkKICAgICAgICAgICAgICAgICBzZWxmUmVjdC51bml0ZShh
eExhYmVsLT5lbGVtZW50UmVjdCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU4NCw3ICs1ODQs
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZHJlbigpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGZvciAoYXV0byogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBhZGRDaGlsZChvYmpl
Y3RDYWNoZS0+Z2V0T3JDcmVhdGUoY2hpbGQpKTsKKyAgICAgICAgYWRkQ2hpbGQob2JqZWN0Q2Fj
aGUtPmdldE9yQ3JlYXRlKCpjaGlsZCkpOwogCiAgICAgdXBkYXRlT3duZWRDaGlsZHJlbigpOwog
fQpAQCAtMTY2OSw3ICsxNjY5LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6Om1lbnVCdXR0b25Gb3JNZW51KCkgY29uc3QKIAogICAgIGlmIChtZW51SXRl
bSkgewogICAgICAgICAvLyBBUklBIGp1c3QgaGFzIGdlbmVyaWMgbWVudSBpdGVtcy4gQXBwS2l0
IG5lZWRzIHRvIGtub3cgaWYgdGhpcyBpcyBhIHRvcCBsZXZlbCBpdGVtcyBsaWtlIE1lbnVCYXJC
dXR0b24gb3IgTWVudUJhckl0ZW0KLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWVudUl0
ZW1BWCA9IGNhY2hlLT5nZXRPckNyZWF0ZShtZW51SXRlbSk7CisgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG1lbnVJdGVtQVggPSBjYWNoZS0+Z2V0T3JDcmVhdGUoKm1lbnVJdGVtKTsKICAg
ICAgICAgaWYgKG1lbnVJdGVtQVggJiYgbWVudUl0ZW1BWC0+aXNNZW51QnV0dG9uKCkpCiAgICAg
ICAgICAgICByZXR1cm4gbWVudUl0ZW1BWDsKICAgICB9CkBAIC0xNjg4LDcgKzE2ODgsNyBAQCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FwdGlvbkZvckZp
Z3VyZSgpIGNvbnN0CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKICAgICBmb3IgKE5v
ZGUqIGNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoZmlnY2FwdGlvblRh
ZykpCi0gICAgICAgICAgICByZXR1cm4gY2FjaGUtPmdldE9yQ3JlYXRlKGNoaWxkKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUoKmNoaWxkKTsKICAgICB9CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CkBAIC0yMTI1LDcgKzIxMjUsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmhlbHBUZXh0KCkgY29uc3QKIAogICAgICAgICAvLyBPbmx5IHRha2UgaGVs
cCB0ZXh0IGZyb20gYW4gYW5jZXN0b3IgZWxlbWVudCBpZiBpdHMgYSBncm91cCBvciBhbiB1bmtu
b3duIHJvbGUuIElmIGhlbHAgd2FzCiAgICAgICAgIC8vIGFkZGVkIHRvIHRob3NlIGtpbmRzIG9m
IGVsZW1lbnRzLCBpdCBpcyBsaWtlbHkgaXQgd2FzIG1lYW50IGZvciBhIGNoaWxkIGVsZW1lbnQu
Ci0gICAgICAgIGlmIChhdXRvKiBheEFuY2VzdG9yID0gY2FjaGUtPmdldE9yQ3JlYXRlKGFuY2Vz
dG9yKSkgeworICAgICAgICBpZiAoYXV0byogYXhBbmNlc3RvciA9IGNhY2hlLT5nZXRPckNyZWF0
ZSgqYW5jZXN0b3IpKSB7CiAgICAgICAgICAgICBpZiAoIWF4QW5jZXN0b3ItPmlzR3JvdXAoKSAm
JiBheEFuY2VzdG9yLT5yb2xlVmFsdWUoKSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6VW5rbm93bikK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjUwMyw2ICsyNTAzLDcgQEAg
U1JHQkE8dWludDhfdD4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUoKSBjb25z
dAogLy8gQVJJQSBJbXBsZW1lbnRlcidzIEd1aWRlLgogc3RhdGljIFN0cmluZyBhY2Nlc3NpYmxl
TmFtZUZvck5vZGUoTm9kZSogbm9kZSwgTm9kZSogbGFiZWxsZWRieU5vZGUpCiB7CisgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBqdXN0IGNoYW5nZSB0aGlzIGZ1bmN0aW9uIHRvIGp1c3QgdGFrZSBh
IHJlZmVyZW5jZSBzaW5jZSB3ZSBBU1NFUlQobm9kZSkgYW5kIGRlcmVmIHdpdGhvdXQgYSBudWxs
cHRyIGNoZWNrLgogICAgIEFTU0VSVChub2RlKTsKIAogICAgIGF1dG8qIGVsZW1lbnQgPSBkeW5h
bWljRG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CkBAIC0yNTE3LDcgKzI1MTgsNyBAQCBzdGF0aWMg
U3RyaW5nIGFjY2Vzc2libGVOYW1lRm9yTm9kZShOb2RlKiBub2RlLCBOb2RlKiBsYWJlbGxlZGJ5
Tm9kZSkKICAgICAvLyBJZiB0aGUgbm9kZSBjYW4gYmUgdHVybmVkIGludG8gYW4gQVggb2JqZWN0
LCB3ZSBjYW4gdXNlIHN0YW5kYXJkIG5hbWUgY29tcHV0YXRpb24gcnVsZXMuCiAgICAgLy8gSWYg
aG93ZXZlciwgdGhlIG5vZGUgY2Fubm90IChiZWNhdXNlIHRoZXJlJ3Mgbm8gcmVuZGVyZXIgZS5n
LikgZmFsbGJhY2sgdG8gdXNpbmcgdGhlIGJhc2ljIHRleHQgdW5kZXJuZWF0aC4KICAgICBhdXRv
KiBjYWNoZSA9IG5vZGUtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpOwotICAgIFJlZlB0ciBh
eE9iamVjdCA9IGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUpIDogbnVsbHB0cjsKKyAg
ICBSZWZQdHIgYXhPYmplY3QgPSBjYWNoZSA/IGNhY2hlLT5nZXRPckNyZWF0ZSgqbm9kZSkgOiBu
dWxscHRyOwogICAgIGlmIChheE9iamVjdCkgewogICAgICAgICBTdHJpbmcgdmFsdWVEZXNjcmlw
dGlvbiA9IGF4T2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7CiAgICAgICAgIGlmICghdmFsdWVE
ZXNjcmlwdGlvbi5pc0VtcHR5KCkpCkBAIC0yNjA1LDcgKzI2MDYsNyBAQCBTdHJpbmcgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbkZvckNoaWxkcmVuKCkg
Y29uc3QKICAgICAgICAgaWYgKCFpczxFbGVtZW50PihjaGlsZCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBjYWNo
ZS0+Z2V0T3JDcmVhdGUoY2hpbGQpKSB7CisgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBheE9iamVjdCA9IGNhY2hlLT5nZXRPckNyZWF0ZSgqY2hpbGQpKSB7CiAgICAgICAgICAgICBT
dHJpbmcgZGVzY3JpcHRpb24gPSBheE9iamVjdC0+YXJpYUxhYmVsZWRCeUF0dHJpYnV0ZSgpOwog
ICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBk
ZXNjcmlwdGlvbiA9IGFjY2Vzc2libGVOYW1lRm9yTm9kZShjaGlsZCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBj
NjIxZTEyMWIxZGUuLmQ0MjgyNzU5NTY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC00ODksMTEgKzQ4OSwxMSBA
QCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJlbnRPYmplY3RV
bmlnbm9yZWQoKSBjb25zdAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVj
dDo6ZGlzcGxheUNvbnRlbnRzUGFyZW50KCkgY29uc3QKIHsKICAgICBhdXRvKiBwYXJlbnROb2Rl
ID0gbm9kZSgpID8gbm9kZSgpLT5wYXJlbnROb2RlKCkgOiBudWxscHRyOwotICAgIGlmIChSZWZQ
dHIgZWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihwYXJlbnROb2RlKTsgIWVsZW1l
bnQgfHwgIWVsZW1lbnQtPmhhc0Rpc3BsYXlDb250ZW50cygpKQorICAgIGlmIChSZWZQdHIgcGFy
ZW50RWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxFbGVtZW50PihwYXJlbnROb2RlKTsgIXBhcmVu
dEVsZW1lbnQgfHwgIXBhcmVudEVsZW1lbnQtPmhhc0Rpc3BsYXlDb250ZW50cygpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8qIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpOwot
ICAgIHJldHVybiBjYWNoZSA/IGNhY2hlLT5nZXRPckNyZWF0ZShwYXJlbnROb2RlKSA6IG51bGxw
dHI7CisgICAgcmV0dXJuIGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKCpwYXJlbnROb2RlKSA6
IG51bGxwdHI7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnByZXZpb3VzU2libGluZ1VuaWdub3JlZChpbnQgbGltaXQpIGNvbnN0CkBAIC02MDYsOCArNjA2
LDggQEAgc3RhdGljIHZvaWQgYXBwZW5kQWNjZXNzaWJpbGl0eU9iamVjdChSZWZQdHI8QVhDb3Jl
T2JqZWN0PiBvYmplY3QsIEFjY2Vzc2liaWxpdHkKICAgICAgICAgYXV0byogZG9jdW1lbnQgPSBm
cmFtZVZpZXctPmZyYW1lKCkuZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKCFkb2N1bWVudCB8fCAh
ZG9jdW1lbnQtPmhhc0xpdmluZ1JlbmRlclRyZWUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIG9iamVjdCA9IG9iamVjdC0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNy
ZWF0ZShkb2N1bWVudCk7CisKKyAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5heE9iamVjdENhY2hl
KCktPmdldE9yQ3JlYXRlKCpkb2N1bWVudCk7CiAgICAgfQogCiAgICAgaWYgKG9iamVjdCkKQEAg
LTE3MDMsNyArMTcwMyw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZWROb2Rl
TmVlZHNDaGFyYWN0ZXIoTm9kZSogcmVwbGFjZWROb2RlKQogCiAgICAgLy8gY3JlYXRlIGFuIEFY
IG9iamVjdCwgYnV0IHNraXAgaXQgaWYgaXQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHNlZW4KICAg
ICBpZiAoYXV0byogY2FjaGUgPSByZXBsYWNlZE5vZGUtPnJlbmRlcmVyKCktPmRvY3VtZW50KCku
YXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBheE9iamVjdCA9IGNhY2hlLT5n
ZXRPckNyZWF0ZShyZXBsYWNlZE5vZGUpKQorICAgICAgICBpZiAoYXV0byogYXhPYmplY3QgPSBj
YWNoZS0+Z2V0T3JDcmVhdGUoKnJlcGxhY2VkTm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gIWF4
T2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7CiAgICAgfQogCkBAIC0yMjAyLDggKzIy
MDIsOCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphbmNob3JF
bGVtZW50Rm9yTm9kZShOb2RlKiBub2RlKQogICAgIFJlbmRlck9iamVjdCogb2JqID0gbm9kZS0+
cmVuZGVyZXIoKTsKICAgICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGF4T2JqID0gb2JqLT5kb2N1bWVudCgp
LmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUob2JqKTsKKworICAgIFJlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBheE9iaiA9IG9iai0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKCpvYmopOwogICAgIEVsZW1lbnQqIGFuY2hvciA9IGF4T2JqLT5hbmNob3JFbGVt
ZW50KCk7CiAgICAgaWYgKCFhbmNob3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjIx
Miw3ICsyMjEyLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6
YW5jaG9yRWxlbWVudEZvck5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoIWFuY2hvclJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gYW5jaG9yUmVuZGVy
ZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShhbmNob3JSZW5kZXJl
cik7CisgICAgcmV0dXJuIGFuY2hvclJlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUo
KS0+Z2V0T3JDcmVhdGUoKmFuY2hvclJlbmRlcmVyKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eU9iamVjdDo6aGVhZGluZ0VsZW1lbnRGb3JOb2RlKE5vZGUqIG5vZGUp
CkBAIC0yMjI0LDcgKzIyMjQsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpoZWFkaW5nRWxlbWVudEZvck5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoIXJlbmRl
ck9iamVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBheE9iamVjdCA9IHJlbmRlck9iamVjdC0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKHJlbmRlck9iamVjdCk7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhP
YmplY3QgPSByZW5kZXJPYmplY3QtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNy
ZWF0ZSgqcmVuZGVyT2JqZWN0KTsKIAogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5j
ZXN0b3I8QWNjZXNzaWJpbGl0eU9iamVjdD4oKmF4T2JqZWN0LCB0cnVlLCBbXSAoY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3Qucm9sZVZh
bHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkhlYWRpbmc7CkBAIC0yOTY5LDcgKzI5NjksNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzUHJlc3NBY3Rpb24oKSBjb25zdAog
ICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYXV0byogYXhPYmpl
Y3QgPSBhY3Rpb25FbGVtZW50ICE9IGVsZW1lbnQoKSA/IGNhY2hlLT5nZXRPckNyZWF0ZShhY3Rp
b25FbGVtZW50LmdldCgpKSA6IG51bGxwdHI7CisgICAgYXV0byogYXhPYmplY3QgPSBhY3Rpb25F
bGVtZW50ICE9IGVsZW1lbnQoKSA/IGNhY2hlLT5nZXRPckNyZWF0ZSgqYWN0aW9uRWxlbWVudCkg
OiBudWxscHRyOwogICAgIGlmICghYXhPYmplY3QpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBA
IC0zMjEwLDcgKzMyMTAsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjplbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UAogICAgICAgICAvLyBO
b3JtYWxpemUgdGhlIHBvaW50IGZvciB0aGUgd2lkZ2V0J3MgYm91bmRzLgogICAgICAgICBpZiAo
d2lkZ2V0ICYmIHdpZGdldC0+aXNMb2NhbEZyYW1lVmlldygpKSB7CiAgICAgICAgICAgICBpZiAo
QVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9iamVjdENhY2hlKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0ZSh3aWRnZXQpLT5hY2Nlc3NpYmlsaXR5SGl0VGVzdChJ
bnRQb2ludChwb2ludCAtIHdpZGdldC0+ZnJhbWVSZWN0KCkubG9jYXRpb24oKSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUoKndpZGdldCktPmFjY2Vzc2liaWxp
dHlIaXRUZXN0KEludFBvaW50KHBvaW50IC0gd2lkZ2V0LT5mcmFtZVJlY3QoKS5sb2NhdGlvbigp
KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAK
aW5kZXggM2ZlYTRlYjgzZTY2Li42MGY3YTcwY2U1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGlj
YXRvci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0lu
ZGljYXRvcjo6dmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0CiAKICAgICAvLyBUaGUgSFRNTCBzcGVj
IGVuY291cmFnZXMgYXV0aG9ycyB0byBpbmNsdWRlIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgbWV0ZXIncyBzdGF0ZSBpbgogICAgIC8vIHRoZSBlbGVtZW50J3MgY29udGVudHMuIFdl
J2xsIGZhbGwgYmFjayBvbiB0aGF0IGlmIHRoZXJlIGlzIG5vdCBhIG1vcmUgYWNjZXNzaWJsZSBh
bHRlcm5hdGl2ZS4KLSAgICBpZiAoYXV0byogbm9kZU9iamVjdCA9IGR5bmFtaWNEb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdD4oYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShtZXRl
ci5nZXQoKSkpKQorICAgIGlmIChhdXRvKiBub2RlT2JqZWN0ID0gZHluYW1pY0Rvd25jYXN0PEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0PihheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCptZXRl
cikpKQogICAgICAgICBkZXNjcmlwdGlvbiA9IG5vZGVPYmplY3QtPmFjY2Vzc2liaWxpdHlEZXNj
cmlwdGlvbkZvckNoaWxkcmVuKCk7CiAKICAgICBpZiAoZGVzY3JpcHRpb24uaXNFbXB0eSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKaW5kZXggZGNkMjAyYjBjZGNkLi4wOTIwYTg1NDc2M2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcApAQCAtMjI5LDE3ICsyMjksMTkgQEAgQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Zmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgaWYg
KCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmZp
cnN0Q2hpbGQoKTsKICAgICAKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBmaXJzdENo
aWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oKm1fcmVuZGVyZXIpOworICAgIGlmIChhdXRvKiBm
aXJzdENoaWxkID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKCptX3JlbmRlcmVy
KSkgeworICAgICAgICBhdXRvKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgcmV0
dXJuIGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKCpmaXJzdENoaWxkKSA6IG51bGxwdHI7Cisg
ICAgfQogCiAgICAgLy8gSWYgYW4gb2JqZWN0IGNhbid0IGhhdmUgY2hpbGRyZW4sIHRoZW4gaXQg
aXMgdXNpbmcgdGhpcyBtZXRob2QgdG8gaGVscAogICAgIC8vIGNhbGN1bGF0ZSBzb21lIGludGVy
bmFsIHByb3BlcnR5IChsaWtlIGl0cyBkZXNjcmlwdGlvbikuCiAgICAgLy8gSW4gdGhpcyBjYXNl
LCBpdCBzaG91bGQgY2hlY2sgdGhlIE5vZGUgbGV2ZWwgZm9yIGNoaWxkcmVuIGluIGNhc2UgdGhl
eSdyZQogICAgIC8vIG5vdCByZW5kZXJlZCAobGlrZSBhIDxtZXRlcj4gZWxlbWVudCkuCi0gICAg
aWYgKCFmaXJzdENoaWxkICYmICFjYW5IYXZlQ2hpbGRyZW4oKSkKKyAgICBpZiAoIWNhbkhhdmVD
aGlsZHJlbigpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmZpcnN0
Q2hpbGQoKTsKIAotICAgIGF1dG8gb2JqZWN0Q2FjaGUgPSBheE9iamVjdENhY2hlKCk7Ci0gICAg
cmV0dXJuIG9iamVjdENhY2hlID8gb2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKGZpcnN0Q2hpbGQp
IDogbnVsbHB0cjsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGFzdENoaWxkKCkgY29uc3QKQEAgLTI0Nywx
MyArMjQ5LDE1IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6Omxhc3RDaGlsZCgpIGNvbnN0CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omxhc3RDaGlsZCgpOwogCi0gICAgUmVuZGVyT2Jq
ZWN0KiBsYXN0Q2hpbGQgPSBsYXN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbigqbV9yZW5k
ZXJlcik7CisgICAgaWYgKGF1dG8qIGxhc3RDaGlsZCA9IGxhc3RDaGlsZENvbnNpZGVyaW5nQ29u
dGludWF0aW9uKCptX3JlbmRlcmVyKSkgeworICAgICAgICBhdXRvKiBjYWNoZSA9IGF4T2JqZWN0
Q2FjaGUoKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKGxhc3RD
aGlsZCkgOiBudWxscHRyOworICAgIH0KIAotICAgIGlmICghbGFzdENoaWxkICYmICFjYW5IYXZl
Q2hpbGRyZW4oKSkKKyAgICBpZiAoIWNhbkhhdmVDaGlsZHJlbigpKQogICAgICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omxhc3RDaGlsZCgpOwogCi0gICAgYXV0byBvYmplY3RD
YWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKLSAgICByZXR1cm4gb2JqZWN0Q2FjaGUgPyBvYmplY3RD
YWNoZS0+Z2V0T3JDcmVhdGUobGFzdENoaWxkKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgUmVuZGVySW5saW5lKiBzdGFydE9mQ29udGludWF0aW9u
cyhSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQpAQCAtMzU1LDEwICszNTksOCBAQCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBj
b25zdAogICAgIGlmICghcHJldmlvdXNTaWJsaW5nKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGlmIChhdXRvKiBvYmplY3RDYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkKLSAgICAgICAg
cmV0dXJuIG9iamVjdENhY2hlLT5nZXRPckNyZWF0ZShwcmV2aW91c1NpYmxpbmcpOwotCi0gICAg
cmV0dXJuIG51bGxwdHI7CisgICAgYXV0byogY2FjaGUgPSBheE9iamVjdENhY2hlKCk7CisgICAg
cmV0dXJuIGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKCpwcmV2aW91c1NpYmxpbmcpIDogbnVs
bHB0cjsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGxhc3RDaGlsZEhhc0NvbnRpbnVhdGlvbihS
ZW5kZXJFbGVtZW50JiByZW5kZXJlcikKQEAgLTQyNiwxMSArNDI4LDExIEBAIEFjY2Vzc2liaWxp
dHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om5leHRTaWJsaW5nKCkgY29uc3QK
ICAgICAvLyBBZnRlciBjYXNlIDQsIHRoZXJlIGFyZSBjaGFuY2VzIHRoYXQgbmV4dFNpYmxpbmcg
aGFzIHRoZSBzYW1lIG5vZGUgYXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIsCiAgICAgLy8gd2hpY2gg
bWlnaHQgbGVhZCB0byBhZGRpbmcgdGhlIHNhbWUgY2hpbGQgcmVwZWF0ZWRseS4KICAgICBpZiAo
bmV4dFNpYmxpbmctPm5vZGUoKSAmJiBuZXh0U2libGluZy0+bm9kZSgpID09IG1fcmVuZGVyZXIt
Pm5vZGUoKSkgewotICAgICAgICBpZiAoYXV0byogbmV4dE9iamVjdCA9IG9iamVjdENhY2hlLT5n
ZXRPckNyZWF0ZShuZXh0U2libGluZykpCisgICAgICAgIGlmIChhdXRvKiBuZXh0T2JqZWN0ID0g
b2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKCpuZXh0U2libGluZykpCiAgICAgICAgICAgICByZXR1
cm4gbmV4dE9iamVjdC0+bmV4dFNpYmxpbmcoKTsKICAgICB9CiAKLSAgICBhdXRvKiBuZXh0T2Jq
ZWN0ID0gb2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKG5leHRTaWJsaW5nKTsKKyAgICBhdXRvKiBu
ZXh0T2JqZWN0ID0gb2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKCpuZXh0U2libGluZyk7CiAgICAg
YXV0byogbmV4dE9iamVjdFBhcmVudCA9IG5leHRPYmplY3QgPyBuZXh0T2JqZWN0LT5wYXJlbnRP
YmplY3QoKSA6IG51bGxwdHI7CiAgICAgYXV0byogdGhpc1BhcmVudCA9IHBhcmVudE9iamVjdCgp
OwogICAgIC8vIE1ha2Ugc3VyZSBuZXh0IHNpYmxpbmcgaGFzIHRoZSBzYW1lIHBhcmVudC4KQEAg
LTU0Nyw3ICs1NDksNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpwYXJlbnRPYmplY3QoKSBjb25zdAogICAgIC8vIEV4cG9zZSBtYXJrZXJzIHRoYXQg
YXJlIG5vdCBkaXJlY3QgY2hpbGRyZW4gb2YgYSBsaXN0IGl0ZW0gdG9vLgogICAgIGlmIChtX3Jl
bmRlcmVyLT5pc1JlbmRlckxpc3RNYXJrZXIoKSkgewogICAgICAgICBpZiAoYXV0byogbGlzdEl0
ZW0gPSBhbmNlc3RvcnNPZlR5cGU8UmVuZGVyTGlzdEl0ZW0+KCptX3JlbmRlcmVyKS5maXJzdCgp
KSB7Ci0gICAgICAgICAgICBhdXRvKiBwYXJlbnQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKGxpc3RJdGVtKTsKKyAgICAgICAgICAgIGF1dG8qIHBhcmVudCA9IGF4T2JqZWN0Q2FjaGUo
KS0+Z2V0T3JDcmVhdGUoKmxpc3RJdGVtKTsKICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgdW5j
aGVja2VkRG93bmNhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4oKnBhcmVudCkubWFya2Vy
UmVuZGVyZXIoKSA9PSBtX3JlbmRlcmVyKQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7
CiAgICAgICAgIH0KQEAgLTU1NSwxMSArNTU3LDExIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnBhcmVudE9iamVjdCgpIGNvbnN0CiAjZW5kaWYKIAog
ICAgIGlmIChhdXRvKiBwYXJlbnRPYmplY3QgPSByZW5kZXJQYXJlbnRPYmplY3QoKSkKLSAgICAg
ICAgcmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0ZShwYXJlbnRPYmplY3QpOworICAgICAgICByZXR1
cm4gY2FjaGUtPmdldE9yQ3JlYXRlKCpwYXJlbnRPYmplY3QpOwogCiAgICAgLy8gV2ViQXJlYSdz
IHBhcmVudCBzaG91bGQgYmUgdGhlIHNjcm9sbCB2aWV3IGNvbnRhaW5pbmcgaXQuCiAgICAgaWYg
KGlzV2ViQXJlYSgpKQotICAgICAgICByZXR1cm4gY2FjaGUtPmdldE9yQ3JlYXRlKCZtX3JlbmRl
cmVyLT52aWV3KCkuZnJhbWVWaWV3KCkpOworICAgICAgICByZXR1cm4gY2FjaGUtPmdldE9yQ3Jl
YXRlKG1fcmVuZGVyZXItPnZpZXcoKS5mcmFtZVZpZXcoKSk7CiAKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KQEAgLTYwNCw3ICs2MDYsNyBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphbmNob3JFbGVtZW50KCkgY29uc3QKICAgICBmb3IgKGN1cnJlbnRSZW5kZXJlciA9IHJl
bmRlcmVyKCk7IGN1cnJlbnRSZW5kZXJlciAmJiAhY3VycmVudFJlbmRlcmVyLT5ub2RlKCk7IGN1
cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlci0+cGFyZW50KCkpIHsKICAgICAgICAgaWYg
KGN1cnJlbnRSZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9jaygpKSB7CiAgICAgICAgICAgICBpZiAo
YXV0byogY29udGludWF0aW9uID0gdW5jaGVja2VkRG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjdXJy
ZW50UmVuZGVyZXIpLmNvbnRpbnVhdGlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBjYWNo
ZS0+Z2V0T3JDcmVhdGUoY29udGludWF0aW9uKS0+YW5jaG9yRWxlbWVudCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUoKmNvbnRpbnVhdGlvbiktPmFuY2hvckVs
ZW1lbnQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjU0LDcgKzY1Niw3IEBAIFN0cmluZyBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpoZWxwVGV4dCgpIGNvbnN0CiAKICAgICAgICAgLy8g
T25seSB0YWtlIGhlbHAgdGV4dCBmcm9tIGFuIGFuY2VzdG9yIGVsZW1lbnQgaWYgaXRzIGEgZ3Jv
dXAgb3IgYW4gdW5rbm93biByb2xlLiBJZiBoZWxwIHdhcyAKICAgICAgICAgLy8gYWRkZWQgdG8g
dGhvc2Uga2luZHMgb2YgZWxlbWVudHMsIGl0IGlzIGxpa2VseSBpdCB3YXMgbWVhbnQgZm9yIGEg
Y2hpbGQgZWxlbWVudC4KLSAgICAgICAgaWYgKGF1dG8qIGF4QW5jZXN0b3IgPSBheE9iamVjdENh
Y2hlKCktPmdldE9yQ3JlYXRlKGFuY2VzdG9yKSkgeworICAgICAgICBpZiAoYXV0byogYXhBbmNl
c3RvciA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoKmFuY2VzdG9yKSkgewogICAgICAg
ICAgICAgaWYgKCFheEFuY2VzdG9yLT5pc0dyb3VwKCkgJiYgYXhBbmNlc3Rvci0+cm9sZVZhbHVl
KCkgIT0gQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd24pCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTEwMjcsNyArMTAyOSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6bGFiZWxUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRPcmRlcikK
IEFYQ29yZU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGl0bGVVSUVsZW1lbnQo
KSBjb25zdAogewogICAgIGlmIChtX3JlbmRlcmVyICYmIGlzRmllbGRzZXQoKSkKLSAgICAgICAg
cmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoZHluYW1pY0Rvd25jYXN0PFJlbmRl
ckJsb2NrPihtX3JlbmRlcmVyLmdldCgpKS0+ZmluZEZpZWxkc2V0TGVnZW5kKFJlbmRlckJsb2Nr
OjpGaWVsZHNldEluY2x1ZGVGbG9hdGluZ09yT3V0T2ZGbG93KSk7CisgICAgICAgIHJldHVybiBh
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGR5bmFtaWNEb3duY2FzdDxSZW5kZXJCbG9jaz4o
Km1fcmVuZGVyZXIpLT5maW5kRmllbGRzZXRMZWdlbmQoUmVuZGVyQmxvY2s6OkZpZWxkc2V0SW5j
bHVkZUZsb2F0aW5nT3JPdXRPZkZsb3cpKTsKICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OnRpdGxlVUlFbGVtZW50KCk7CiB9CiAgICAgCkBAIC0xNjU3LDcgKzE2NTksNyBAQCBB
WENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudExpbgogICAgIFJlZjxIVE1MQ29sbGVjdGlvbj4gbGlua3MgPSBk
b2N1bWVudC5saW5rcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGF1dG8qIGN1cnJlbnQg
PSBsaW5rcy0+aXRlbShpKTsgKytpKSB7CiAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGN1
cnJlbnQtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0PiBheE9iamVjdCA9IGRvY3VtZW50LmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVu
ZGVyZXIpOworICAgICAgICAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGF4T2JqZWN0
ID0gZG9jdW1lbnQuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgqcmVuZGVyZXIpOwogICAg
ICAgICAgICAgQVNTRVJUKGF4T2JqZWN0KTsKICAgICAgICAgICAgIGlmICghYXhPYmplY3QtPmFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKSAmJiBheE9iamVjdC0+aXNMaW5rKCkpCiAgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChheE9iamVjdCk7CkBAIC0xNzU0LDcgKzE3NTYsNyBAQCBib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om5vZGVJc1RleHRDb250cm9sKGNvbnN0IE5vZGUq
IG5vZGUpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkgewotICAgICAgICBpZiAoQWNjZXNzaWJpbGl0
eU9iamVjdCogYXhPYmplY3RGb3JOb2RlID0gY2FjaGUtPmdldE9yQ3JlYXRlKGNvbnN0X2Nhc3Q8
Tm9kZSo+KG5vZGUpKSkKKyAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0
Rm9yTm9kZSA9IGNhY2hlLT5nZXRPckNyZWF0ZShjb25zdF9jYXN0PE5vZGUmPigqbm9kZSkpKQog
ICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0Rm9yTm9kZS0+aXNUZXh0Q29udHJvbCgpOwogICAg
IH0KIApAQCAtMjAzNiw3ICsyMDM4LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG8KIAogICAg
IGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBhdXRvKiBjYWNoZSA9IHJl
bmRlcmVyID8gcmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpIDogbnVsbHB0cjsK
LSAgICBSZWZQdHIgcmVzdWx0ID0gY2FjaGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIp
IDogbnVsbHB0cjsKKyAgICBSZWZQdHIgcmVzdWx0ID0gY2FjaGUgPyBjYWNoZS0+Z2V0T3JDcmVh
dGUoKnJlbmRlcmVyKSA6IG51bGxwdHI7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCkBAIC0yMDgyLDcgKzIwODQsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpvYnNlcnZhYmxlT2JqZWN0KCkgY29uc3QKICAgICBm
b3IgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOyByZW5kZXJlciAm
JiByZW5kZXJlci0+bm9kZSgpOyByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKSkgewogICAg
ICAgICBpZiAocmVuZGVyT2JqZWN0SXNPYnNlcnZhYmxlKCpyZW5kZXJlcikpIHsKICAgICAgICAg
ICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY2FjaGUtPmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY2FjaGUtPmdldE9yQ3JlYXRlKCpyZW5kZXJlcik7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTIzNTIsNyArMjM1NCw3IEBAIEFjY2Vzc2liaWxpdHlTVkdSb290KiBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpyZW1vdGVTVkdSb290RWxlbWVudChDcmVhdGlvbkNoCiAgICAg
aWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvKiByb290U1ZH
T2JqZWN0ID0gY3JlYXRlSWZOZWNlc3NhcnkgPT0gQ3JlYXRlID8gY2FjaGUtPmdldE9yQ3JlYXRl
KHJlbmRlcmVyUm9vdCkgOiBjYWNoZS0+Z2V0KHJlbmRlcmVyUm9vdCk7CisgICAgYXV0byogcm9v
dFNWR09iamVjdCA9IGNyZWF0ZUlmTmVjZXNzYXJ5ID09IENyZWF0ZSA/IGNhY2hlLT5nZXRPckNy
ZWF0ZSgqcmVuZGVyZXJSb290KSA6IGNhY2hlLT5nZXQocmVuZGVyZXJSb290KTsKICAgICBBU1NF
UlQoIWNyZWF0ZUlmTmVjZXNzYXJ5IHx8IHJvb3RTVkdPYmplY3QpOwogICAgIHJldHVybiBkeW5h
bWljRG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNWR1Jvb3Q+KHJvb3RTVkdPYmplY3QpOwogfQpAQCAt
MjM5Miw4ICsyMzk0LDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRBdHRh
Y2htZW50Q2hpbGRyZW4oKQogICAgIFdpZGdldCogd2lkZ2V0ID0gd2lkZ2V0Rm9yQXR0YWNobWVu
dFZpZXcoKTsKICAgICBpZiAoIXdpZGdldCB8fCAhKHdpZGdldC0+aXNMb2NhbEZyYW1lVmlldygp
IHx8IHdpZGdldC0+aXNSZW1vdGVGcmFtZVZpZXcoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBhZGRDaGlsZChheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHdpZGdldCkpOworCisg
ICAgYWRkQ2hpbGQoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgqd2lkZ2V0KSk7CiB9CiAK
ICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTI0MzMsNyArMjQzNSw3IEBAIHZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWRkTm9kZU9ubHlDaGlsZHJlbigpCiAgICAgICAgIGlmIChjaGls
ZC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChub2Rl
SGFzRGlzcGxheUNvbnRlbnRzKCpjaGlsZCkgfHwgaXNOb2RlQXJpYVZpc2libGUoY2hpbGQpKSB7
CisgICAgICAgIGlmIChub2RlSGFzRGlzcGxheUNvbnRlbnRzKCpjaGlsZCkgfHwgaXNOb2RlQXJp
YVZpc2libGUoKmNoaWxkKSkgewogICAgICAgICAgICAgaGFzTm9kZU9ubHlDaGlsZHJlbiA9IHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjQ2NSwxNCArMjQ2NywxNCBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZE5vZGVPbmx5Q2hpbGRyZW4oKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW5vZGVIYXNE
aXNwbGF5Q29udGVudHMoKmNoaWxkKSAmJiAhaXNOb2RlQXJpYVZpc2libGUoY2hpbGQpKQorICAg
ICAgICBpZiAoIW5vZGVIYXNEaXNwbGF5Q29udGVudHMoKmNoaWxkKSAmJiAhaXNOb2RlQXJpYVZp
c2libGUoKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHVuc2lnbmVk
IHByZXZpb3VzU2l6ZSA9IG1fY2hpbGRyZW4uc2l6ZSgpOwogICAgICAgICBpZiAoaW5zZXJ0aW9u
SW5kZXggPiBwcmV2aW91c1NpemUpCiAgICAgICAgICAgICBpbnNlcnRpb25JbmRleCA9IHByZXZp
b3VzU2l6ZTsKIAotICAgICAgICBpbnNlcnRDaGlsZChjYWNoZS0+Z2V0T3JDcmVhdGUoY2hpbGQp
LCBpbnNlcnRpb25JbmRleCk7CisgICAgICAgIGluc2VydENoaWxkKGNhY2hlLT5nZXRPckNyZWF0
ZSgqY2hpbGQpLCBpbnNlcnRpb25JbmRleCk7CiAgICAgICAgIGluc2VydGlvbkluZGV4ICs9ICht
X2NoaWxkcmVuLnNpemUoKSAtIHByZXZpb3VzU2l6ZSk7CiAgICAgfQogfQpAQCAtMjQ4OSw3ICsy
NDkxLDcgQEAgUmVuZGVyT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXJrZXJS
ZW5kZXJlcigpIGNvbnN0CiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZExpc3RJ
dGVtTWFya2VyKCkKIHsKICAgICBpZiAoYXV0byogbWFya2VyID0gbWFya2VyUmVuZGVyZXIoKSkK
LSAgICAgICAgaW5zZXJ0Q2hpbGQoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShtYXJrZXIp
LCAwKTsKKyAgICAgICAgaW5zZXJ0Q2hpbGQoYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgq
bWFya2VyKSwgMCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcAppbmRleCBmMDczMjZjNTkx
YzEuLjEyZjY4ODZjZDlhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQ6OnRhcmdldEZvclVzZUVs
ZW1lbnQoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChhdXRvKiBj
YWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0
ZSh0YXJnZXQuZWxlbWVudC5nZXQoKSk7CisgICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVh
dGUoKnRhcmdldC5lbGVtZW50KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3
LmNwcAppbmRleCA1MjEyMjJhZjYwMDMuLmRjY2M1ZWQ1ODhhMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAK
QEAgLTE4MCw3ICsxODAsNyBAQCBBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKiBBY2Nlc3NpYmlsaXR5
U2Nyb2xsVmlldzo6YWRkQ2hpbGRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzYwogICAgIGlmICghY2Fj
aGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byYgc2Nyb2xsQmFyT2JqZWN0
ID0gdW5jaGVja2VkRG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbGJhcj4oKmNhY2hlLT5nZXRP
ckNyZWF0ZShzY3JvbGxiYXIpKTsKKyAgICBhdXRvJiBzY3JvbGxCYXJPYmplY3QgPSB1bmNoZWNr
ZWREb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyPigqY2FjaGUtPmdldE9yQ3JlYXRlKCpz
Y3JvbGxiYXIpKTsKICAgICBzY3JvbGxCYXJPYmplY3Quc2V0UGFyZW50KHRoaXMpOwogICAgIGFk
ZENoaWxkKCZzY3JvbGxCYXJPYmplY3QpOwogICAgIHJldHVybiAmc2Nyb2xsQmFyT2JqZWN0OwpA
QCAtMjU1LDcgKzI1NSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3Ojp3ZWJBcmVhT2JqZWN0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBpZiAoYXV0byogY2FjaGUgPSBheE9iamVjdENhY2hlKCkpCi0gICAgICAgIHJldHVybiBj
YWNoZS0+Z2V0T3JDcmVhdGUoZG9jdW1lbnQpOworICAgICAgICByZXR1cm4gY2FjaGUtPmdldE9y
Q3JlYXRlKCpkb2N1bWVudCk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTMxNyw3ICsz
MTcsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldzo6cGFy
ZW50T2JqZWN0KCkgY29uc3QKICAgICAgICAgb3duZXIgPSByZW1vdGVGcmFtZVZpZXctPmZyYW1l
KCkub3duZXJFbGVtZW50KCk7CiAKICAgICBpZiAob3duZXIgJiYgb3duZXItPnJlbmRlcmVyKCkp
Ci0gICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUob3duZXIuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gY2FjaGUtPmdldE9yQ3JlYXRlKCpvd25lcik7CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlLmNwcAppbmRleCBlNDkxY2U0OTFlY2IuLjczNWE5ODQyODZmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcApAQCAt
MTg2LDcgKzE4Niw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSgpIGNv
bnN0CiAgICAgICAgIGRpZFRvcFNlY3Rpb25DaGVjayA9IHRydWU7CiAKICAgICAgICAgLy8gSWYg
dGhlIHRvcCBzZWN0aW9uIGhhcyBhbnkgbm9uLWdyb3VwIHJvbGUsIHRoZW4gZG9uJ3QgbWFrZSB0
aGlzIGEgZGF0YSB0YWJsZS4gVGhlIGF1dGhvciBwcm9iYWJseSB3YW50cyB0byB1c2UgdGhlIHJv
bGUgb24gdGhlIHNlY3Rpb24uCi0gICAgICAgIGlmIChhdXRvKiBheFRhYmxlU2VjdGlvbiA9IGNh
Y2hlLT5nZXRPckNyZWF0ZSh0YWJsZVNlY3Rpb25FbGVtZW50KSkgeworICAgICAgICBpZiAoYXV0
byogYXhUYWJsZVNlY3Rpb24gPSBjYWNoZS0+Z2V0T3JDcmVhdGUoKnRhYmxlU2VjdGlvbkVsZW1l
bnQpKSB7CiAgICAgICAgICAgICBhdXRvIHJvbGUgPSBheFRhYmxlU2VjdGlvbi0+cm9sZVZhbHVl
KCk7CiAgICAgICAgICAgICBpZiAoIWF4VGFibGVTZWN0aW9uLT5pc0dyb3VwKCkgJiYgcm9sZSAh
PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VW5rbm93biAmJiByb2xlICE9IEFjY2Vzc2liaWxpdHlSb2xl
OjpJZ25vcmVkKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjQ0LDEwICs2NDQs
MTAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKICAgICAgICAgLy8g
aW4gdHJlZSBvcmRlciwgcnVuIHRoZSBhbGdvcml0aG0gZm9yIHByb2Nlc3Npbmcgcm93cy4KICAg
ICAgICAgaWYgKFJlZlB0ciB0YWJsZVNlY3Rpb24gPSBkeW5hbWljRG93bmNhc3Q8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQ+KHNlY3Rpb25FbGVtZW50KSkgewogICAgICAgICAgICAgZm9yIChhdXRv
JiByb3cgOiBjaGlsZHJlbk9mVHlwZTxIVE1MVGFibGVSb3dFbGVtZW50PigqdGFibGVTZWN0aW9u
KSkgewotICAgICAgICAgICAgICAgIFJlZlB0ciB0YWJsZVJvdyA9IGR5bmFtaWNEb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGVSb3c+KGNhY2hlLT5nZXRPckNyZWF0ZSgmcm93KSk7CisgICAgICAg
ICAgICAgICAgUmVmUHRyIHRhYmxlUm93ID0gZHluYW1pY0Rvd25jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZVJvdz4oY2FjaGUtPmdldE9yQ3JlYXRlKHJvdykpOwogICAgICAgICAgICAgICAgIHByb2Nl
c3NSb3codGFibGVSb3cuZ2V0KCkpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KFJlZlB0ciBzZWN0aW9uQXhPYmplY3QgPSBjYWNoZS0+Z2V0T3JDcmVhdGUoJnNlY3Rpb25FbGVt
ZW50KSkgeworICAgICAgICB9IGVsc2UgaWYgKFJlZlB0ciBzZWN0aW9uQXhPYmplY3QgPSBjYWNo
ZS0+Z2V0T3JDcmVhdGUoc2VjdGlvbkVsZW1lbnQpKSB7CiAgICAgICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKG5vZGVIYXNSb2xlKCZzZWN0aW9uRWxlbWVudCwgInJvd2dyb3VwIl9zKSwgInBy
b2Nlc3NSb3dHcm91cCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBuYXRpdmUgdGFibGUgc2Vj
dGlvbiBlbGVtZW50cywgb3Igcm9sZT1yb3dncm91cCBlbGVtZW50cyIpOwogICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IHNlY3Rpb25BeE9iamVjdC0+Y2hpbGRyZW4oKSkKICAg
ICAgICAgICAgICAgICBwcm9jZXNzUm93RGVzY2VuZGluZ0lmTmVlZGVkKGNoaWxkLmdldCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlU
YWJsZUNlbGwuY3BwCmluZGV4IDcwMTY5ZTA5YmRjNS4uNDgxMzFjM2Y5NzhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bC5jcHAKQEAgLTQwMyw4ICs0MDMsOCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmls
aXR5VGFibGVDZWxsOjp0aXRsZVVJRWxlbWVudCgpIGNvbnN0CiAKICAgICBpZiAoIWhlYWRlckNl
bGwtPmVsZW1lbnQoKSB8fCAhaGVhZGVyQ2VsbC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKHRoVGFn
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGF4T2JqZWN0Q2Fj
aGUoKS0+Z2V0T3JDcmVhdGUoaGVhZGVyQ2VsbCk7CisKKyAgICByZXR1cm4gYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZSgqaGVhZGVyQ2VsbCk7CiB9CiAgICAgCiBpbnQgQWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbDo6YXhDb2x1bW5JbmRleCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbQppbmRl
eCBlYjJmZDdmNDZiYTAuLmU2MWJlMzliYzU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdElPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCkBAIC0x
NzcsNyArMTc3LDcgQEAgc3RhdGljIHZvaWQgYXR0cmlidXRlU3RyaW5nU2V0TGFuZ3VhZ2UoTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZywgUmUKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHIgb2JqZWN0ID0gcmVuZGVyZXItPmRvY3Vt
ZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJlcik7CisgICAgUmVmUHRy
IG9iamVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUoKnJlbmRlcmVyKTsKICAgICBOU1N0cmluZyAqbGFuZ3VhZ2UgPSBvYmplY3QtPmxhbmd1YWdl
KCk7CiAgICAgaWYgKGxhbmd1YWdlLmxlbmd0aCkKICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0
cmlidXRlOkFjY2Vzc2liaWxpdHlUb2tlbkxhbmd1YWdlIHZhbHVlOmxhbmd1YWdlIHJhbmdlOnJh
bmdlXTsKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBhdHRyaWJ1dGVTdHJpbmdTZXRT
dHlsZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nLCBSZW5kZQogICAgICAg
ICBhdHRyaWJ1dGVkU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIEFjY2Vzc2liaWxpdHlUb2tl
blVuZGVybGluZSwgQFlFUywgcmFuZ2UpOwogCiAgICAgLy8gQWRkIGNvZGUgY29udGV4dCBpZiB0
aGlzIG5vZGUgaXMgd2l0aGluIGEgPGNvZGU+IGJsb2NrLgotICAgIFJlZlB0ciBvYmplY3QgPSBy
ZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVy
KTsKKyAgICBSZWZQdHIgb2JqZWN0ID0gcmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZSgqcmVuZGVyZXIpOwogICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKGNv
bnN0IGF1dG8mIGF4T2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBheE9iamVjdC5pc0NvZGUoKTsK
ICAgICB9OwpAQCAtMjM5LDcgKzIzOSw3IEBAIHN0YXRpYyB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdT
ZXRDb21wb3NpdGlvbkF0dHJpYnV0ZXMoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqCiAgICAg
aWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyIG9iamVjdCA9IHJl
bmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIp
OworICAgIFJlZlB0ciBvYmplY3QgPSByZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hl
KCktPmdldE9yQ3JlYXRlKCpyZW5kZXJlcik7CiAKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCAyMWFi
MjhlZTlkM2EuLjE3YTZiY2YyNDMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0KQEAgLTIwNTEsNyArMjA1MSw3IEBAIC0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFyZW50
Rm9yU3VidmlldzooaWQpc3VidmlldwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gcmVuZGVyZXItPmRv
Y3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJlcik7CisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqID0gcmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZSgqcmVuZGVyZXIpOwogICAgIGlmIChvYmopCiAgICAgICAgIHJldHVy
biBvYmotPnBhcmVudE9iamVjdFVuaWdub3JlZCgpLT53cmFwcGVyKCk7CiAgICAgcmV0dXJuIG5p
bDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2li
aWxpdHlPYmplY3RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nl
c3NpYmlsaXR5T2JqZWN0TWFjLm1tCmluZGV4IDczMjhiNTdiYWQzNC4uZGM1NjVjYmFmOTBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vz
c2liaWxpdHlPYmplY3RNYWMubW0KQEAgLTYwNCw3ICs2MDQsNyBAQCBzdGF0aWMgdm9pZCBhdHRy
aWJ1dGVkU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJTdAogICAgIGlmICghcmVuZGVyZXIgfHwgIWF0dHJpYnV0ZWRTdHJpbmdDb250YWluc1Jh
bmdlKGF0dHJTdHJpbmcsIHJhbmdlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyIG9i
amVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
cmVuZGVyZXIpOworICAgIFJlZlB0ciBvYmplY3QgPSByZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9i
amVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCpyZW5kZXJlcik7CiAgICAgaWYgKCFvYmplY3QpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNjE4LDcgKzYxOCw3IEBAIHN0YXRpYyB2b2lkIGF0dHJpYnV0
ZWRTdHJpbmdTZXRFeHBhbmRlZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0
cmluCiAgICAgaWYgKCFyZW5kZXJlciB8fCAhYXR0cmlidXRlZFN0cmluZ0NvbnRhaW5zUmFuZ2Uo
YXR0clN0cmluZywgcmFuZ2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHIgb2JqZWN0
ID0gcmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5k
ZXJlcik7CisgICAgUmVmUHRyIG9iamVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0
Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoKnJlbmRlcmVyKTsKICAgICBpZiAob2JqZWN0LT5zdXBwb3J0
c0V4cGFuZGVkVGV4dFZhbHVlKCkpCiAgICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpO
U0FjY2Vzc2liaWxpdHlFeHBhbmRlZFRleHRWYWx1ZUF0dHJpYnV0ZSB2YWx1ZTpvYmplY3QtPmV4
cGFuZGVkVGV4dFZhbHVlKCkgcmFuZ2U6cmFuZ2VdOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQppbmRleCAwNTg2OWQwYzQ0NjYuLjJjZGRmMWY0ZmMzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTI5MTgsNyArMjkxOCw3IEBA
IC0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3VidmlldzooTlNWaWV3KilzdWJ2aWV3CiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmogPSByZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBy
ZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCpyZW5kZXJl
cik7CiAgICAgaWYgKG9iaikKICAgICAgICAgcmV0dXJuIG9iai0+cGFyZW50T2JqZWN0VW5pZ25v
cmVkKCktPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcAppbmRleCAwZmI2NzMzZjc5YmMuLmI5MTJkYjg5NTJmYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0QWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGFjY2Vzc2liaWxpdHlPYmplY3RGb3JOb2RlKE5vZGUmIG5vZGUpCiAgICAgICAgIEFYT2JqZWN0
Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlKiBh
eE9iamVjdENhY2hlID0gbm9kZS5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKSkKLSAgICAgICAg
cmV0dXJuIGF4T2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKCZub2RlKTsKKyAgICAgICAgcmV0dXJu
IGF4T2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5k
ZXggZTJlOGNlMDU2OWVhLi5kODFjMGI0MzE4ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTEyMDYsNyArMTIwNiw3IEBAIFBhdGggSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IE5vZGUmIG5vZGUsIGNvCiAKICAgICBTdHJpbmcgZWxlbWVudFJvbGU7CiAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUgPSBub2RlLmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBheE9iamVjdCA9IGF4T2JqZWN0Q2FjaGUtPmdldE9yQ3Jl
YXRlKCZub2RlKTsgYXhPYmplY3QgJiYgIWF4T2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkpCisgICAgICAgIGlmIChhdXRvKiBheE9iamVjdCA9IGF4T2JqZWN0Q2FjaGUtPmdldE9yQ3Jl
YXRlKG5vZGUpOyBheE9iamVjdCAmJiAhYXhPYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSkKICAgICAgICAgICAgIGVsZW1lbnRSb2xlID0gYXhPYmplY3QtPmNvbXB1dGVkUm9sZVN0cmlu
ZygpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBkMzEzMWNiY2ZhYmQuLmMxMWRlNDc3ZWQyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTIyMjMsNyArMjIyMyw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
CiAgICAgdW5zaWduZWQgbGV2ZWwgPSAwOwogCiAgICAgaWYgKGF1dG8qIGF4T2JqZWN0Q2FjaGUg
PSBub2RlLmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBh
eE9iamVjdCA9IGF4T2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKCZub2RlKSkgeworICAgICAgICBp
ZiAoYXV0byogYXhPYmplY3QgPSBheE9iamVjdENhY2hlLT5nZXRPckNyZWF0ZShub2RlKSkgewog
CiAgICAgICAgICAgICBpZiAoQVhDb3JlT2JqZWN0KiBhY3RpdmVEZXNjZW5kYW50ID0gYXhPYmpl
Y3QtPmFjdGl2ZURlc2NlbmRhbnQoKSkKICAgICAgICAgICAgICAgICBhY3RpdmVEZXNjZW5kYW50
Tm9kZSA9IGFjdGl2ZURlc2NlbmRhbnQtPm5vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAppbmRleCA3ODgwZTFkOThlYzUuLmJkZmFjYzdjOGVmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNzM0OSw3ICs3MzQ5LDcgQEAgQWNjZXNzaWJpbGl0eU9i
amVjdCogSW50ZXJuYWxzOjpheE9iamVjdEZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkgY29u
c3QKICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7CiAK
ICAgICBhdXRvKiBjYWNoZSA9IGRvY3VtZW50LT5heE9iamVjdENhY2hlKCk7Ci0gICAgcmV0dXJu
IGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKCZlbGVtZW50KSA6IG51bGxwdHI7CisgICAgcmV0
dXJuIGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKGVsZW1lbnQpIDogbnVsbHB0cjsKIH0KIAog
U3RyaW5nIEludGVybmFsczo6Z2V0Q29tcHV0ZWRMYWJlbChFbGVtZW50JiBlbGVtZW50KSBjb25z
dAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>470712</attachid>
            <date>2024-04-01 17:47:10 -0700</date>
            <delta_ts>2024-04-02 00:05:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-271949-20240401174709.patch</filename>
            <type>text/plain</type>
            <size>73012</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSBiOWRhZTcxMWVjMDkxZTU3MDU5OTBmMmVlODIyZWExNTA5ZDMwODU1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU3VuLCAzMSBNYXIgMjAyNCAxMjo1MTo0MiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFYOiBJ
bnRyb2R1Y2UgcmVmZXJlbmNlIHZlcnNpb25zIG9mIEFYT2JqZWN0Q2FjaGU6OmdldCBhbmQKIEFY
T2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNzE5NDkKIHJkYXI6Ly9wcm9ibGVtLzEyNTY4OTAzNwoKUmV2aWV3ZWQgYnkgQ2hy
aXMgRmxlaXphY2guCgpBdCBtb3N0IGNhbGxzaXRlcyBvZiBBWE9iamVjdENhY2hlOjpnZXQgYW5k
IEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlLCB3ZSBhbHJlYWR5IGtub3cgdGhlIE5vZGUqIC8g
UmVuZGVyT2JqZWN0KiAvIFdpZGdldCoKaXMgbm90IG51bGwsIGJ1dCB3ZSBzdGlsbCBwZXJmb3Jt
IGFuIGV4dHJhIG51bGwgY2hlY2sgaW4gdGhlc2UgbWV0aG9kcyBhbnl3YXlzLCB3aGljaCBpcyBh
IHdhc3RlLiBBbmQgbG9va2luZyBhdCB0aGUKYXNzZW1ibHkgZ2VuZXJhdGVkIGJ5IGNsYW5nLCBp
dCdzIG5vdCBzbWFydCBlbm91Z2ggdG8gb3B0aW1pemUgdGhlIG51bGwgY2hlY2tzIGF3YXkgaXRz
ZWxmIGluIGFueSBvZiB0aGVzZSBjb250ZXh0cy4KClRoaXMgcGF0Y2ggYWRkcyB2ZXJzaW9ucyBv
ZiB0aGVzZSBtZXRob2RzIHRoYXQgdGFrZSByZWZlcmVuY2VzLCBhbmQgYWRkcyBkZXJlZmVyZW5j
ZXMgYXQgY2FsbHNpdGVzIHRoYXQgaGF2ZSBhbHJlYWR5CmNoZWNrZWQgZm9yIGEgbnVsbCB2YWx1
ZS4gVGhpcyBzYXZlcyBvdmVyIDE2IG1pbGxpb24gbnVsbCBjaGVja3Mgc2ltcGx5IGxvYWRpbmcg
Z21haWwuY29tLCB3aXRob3V0IGFueSBvdGhlciBuYXZpZ2F0aW9uIG9yIGFjdGlvbi4KCiogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6Om1vZGFsRWxlbWVudEhhc0FjY2Vzc2libGVDb250ZW50KToKKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmlzTm9kZVZpc2libGUgY29uc3QpOgooV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6Zm9jdXNlZEltYWdlTWFwVUlFbGVtZW50KToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6
OmdldCBjb25zdCk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CihXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVNZW51T3BlbmVkKToKKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmNoaWxkcmVuQ2hhbmdlZCk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0Tm90
aWZpY2F0aW9uKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZU1lbnVJdGVtU2VsZWN0
ZWQpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UpOgoo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbik6
CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0VGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9u
KToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRp
b25Gb3JUZXh0Q29udHJvbCk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdF
dmVudE5vdGlmaWNhdGlvbik6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmb2N1c0N1cnJlbnRN
b2RhbCk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hh
bmdlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnNob3VsZFByb2Nlc3NBdHRyaWJ1dGVDaGFu
Z2UpOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKToKKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZyb21WaXNpYmxlUG9zaXRpb24p
OgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJr
ZXJEYXRhKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVJc1RleHRDb250cm9sKToKKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKToKKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OmRlZmVyVGV4dENoYW5nZWRJZk5lZWRlZCk6CihXZWJDb3JlOjpp
c05vZGVBcmlhVmlzaWJsZSk6CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphZGRSZWxhdGlvbik6
CihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphZGRMYWJlbEZvclJlbGF0aW9uKToKKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmlzRGVzY2VuZGFudE9mUmVsYXRlZE5vZGUpOgooV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6Z2V0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlMaXN0Qm94T3B0aW9uLmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0
aW9uOjplbGVtZW50UmVjdCBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbjo6cGFyZW50T2JqZWN0IGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlN
YXRoTUxFbGVtZW50OjptYXRoUHJlc2NyaXB0cyk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWF0
aE1MRWxlbWVudDo6bWF0aFBvc3RzY3JpcHRzKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlNZW51TGlzdFBvcHVwOjptZW51TGlzdE9wdGlvbkFjY2Vzc2liaWxpdHlPYmplY3QgY29uc3Qp
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmZpcnN0Q2hpbGQgY29uc3Qp
OgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omxhc3RDaGlsZCBjb25zdCk6CihX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cHJldmlvdXNTaWJsaW5nIGNvbnN0KToK
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpuZXh0U2libGluZyBjb25zdCk6CihX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2JqZWN0IGNvbnN0KToKKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGVja2JveE9yUmFkaW9SZWN0IGNvbnN0
KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZHJlbik6CihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bWVudUJ1dHRvbkZvck1lbnUgY29uc3QpOgoo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhcHRpb25Gb3JGaWd1cmUgY29uc3Qp
OgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhlbHBUZXh0IGNvbnN0KToKKFdl
YkNvcmU6OmFjY2Vzc2libGVOYW1lRm9yTm9kZSk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yQ2hpbGRyZW4gY29uc3QpOgoqIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkaXNwbGF5Q29udGVudHNQYXJlbnQgY29uc3QpOgoo
V2ViQ29yZTo6YXBwZW5kQWNjZXNzaWJpbGl0eU9iamVjdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3Rlcik6CihXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjphbmNob3JFbGVtZW50Rm9yTm9kZSk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjpoZWFkaW5nRWxlbWVudEZvck5vZGUpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6c3VwcG9ydHNQcmVzc0FjdGlvbiBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0OjplbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QgY29uc3QpOgoqIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcDoK
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcjo6dmFsdWVEZXNjcmlwdGlv
biBjb25zdCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0
Q2hpbGQgY29uc3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGFzdENo
aWxkIGNvbnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnByZXZpb3Vz
U2libGluZyBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpuZXh0
U2libGluZyBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpwYXJl
bnRPYmplY3QgY29uc3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5j
aG9yRWxlbWVudCBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpo
ZWxwVGV4dCBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRs
ZVVJRWxlbWVudCBjb25zdCk6CihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpk
b2N1bWVudExpbmtzKToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om5vZGVJ
c1RleHRDb250cm9sIGNvbnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmFjY2Vzc2liaWxpdHlIaXRUZXN0IGNvbnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6Om9ic2VydmFibGVPYmplY3QgY29uc3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6cmVtb3RlU1ZHUm9vdEVsZW1lbnQgY29uc3QpOgooV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQXR0YWNobWVudENoaWxkcmVuKToKKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZE5vZGVPbmx5Q2hpbGRyZW4pOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkTGlzdEl0ZW1NYXJrZXIpOgoqIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwOgooV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQ6OnRhcmdldEZvclVzZUVsZW1lbnQgY29uc3Qp
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcu
Y3BwOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmFkZENoaWxkU2Nyb2xsYmFy
KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Ojp3ZWJBcmVhT2JqZWN0IGNvbnN0
KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjpwYXJlbnRPYmplY3QgY29uc3Qp
OgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoK
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUgY29uc3QpOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJlbik6CiogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlUYWJsZUNlbGw6OnRpdGxlVUlFbGVtZW50IGNvbnN0KToKKiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tOgooV2ViQ29yZTo6YXR0
cmlidXRlU3RyaW5nU2V0TGFuZ3VhZ2UpOgooV2ViQ29yZTo6YXR0cmlidXRlU3RyaW5nU2V0U3R5
bGUpOgooV2ViQ29yZTo6YXR0cmlidXRlZFN0cmluZ1NldENvbXBvc2l0aW9uQXR0cmlidXRlcyk6
CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW06CigtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3Np
YmlsaXR5UGFyZW50Rm9yU3VidmlldzpdKToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0TWFjLm1tOgooV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Z1NldEJsb2NrcXVvdGVMZXZlbCk6CihXZWJDb3JlOjphdHRyaWJ1dGVkU3RyaW5nU2V0RXhwYW5k
ZWRUZXh0KToKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
X2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3Ol0pOgoqIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgooV2ViQ29yZTo6YWNj
ZXNzaWJpbGl0eU9iamVjdEZvck5vZGUpOgoqIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcDoKKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50
VGl0bGUpOgoqIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwOgooV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNz
aWJpbGl0eVByb3BlcnRpZXMpOgoqIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cDoKKFdlYkNvcmU6OkludGVybmFsczo6YXhPYmplY3RGb3JFbGVtZW50IGNvbnN0KToKLS0tCiAu
Li4vV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCAyMDkgKysrKysr
KystLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
aCAgfCAgNDQgKysrLQogLi4uL0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCAgICAgICAg
ICAgIHwgICA0ICstCiAuLi4vQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwICAgICAgICAg
ICAgfCAgIDQgKy0KIC4uLi9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAgICAgICAgICAg
ICB8ICAgMiArLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
IHwgIDI1ICsrLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgICAg
IHwgIDIyICstCiAuLi4vQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcCAgICAgICAg
fCAgIDIgKy0KIC4uLi9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCAgICAgICAgICAgICB8
ICA2NCArKystLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNw
cCB8ICAgMiArLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3Bw
IHwgICA2ICstCiAuLi4vYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwICAgICAg
fCAgIDYgKy0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwICB8
ICAgNCArLQogLi4uL2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tICAgICAgICAgICAgIHwg
ICA2ICstCiAuLi4vaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tICAgfCAg
IDIgKy0KIC4uLi9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdE1hYy5tbSAgICAgICAgICAgICB8ICAg
NCArLQogLi4uL21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSAgIHwgICAy
ICstCiAuLi4vSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCAgICAgfCAgIDIg
Ky0KIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCB8ICAgMiAr
LQogLi4uL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwICAgIHwgICAyICst
CiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgICAgICAgICAgfCAgIDIgKy0K
IDIxIGZpbGVzIGNoYW5nZWQsIDIxMiBpbnNlcnRpb25zKCspLCAyMDQgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXgg
NTAyMDBmMTIwMzcyLi5iZDgxZmZjYmM5ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMzc3LDcgKzM3Nyw3IEBAIGJvb2wgQVhPYmpl
Y3RDYWNoZTo6bW9kYWxFbGVtZW50SGFzQWNjZXNzaWJsZUNvbnRlbnQoRWxlbWVudCYgZWxlbWVu
dCkKICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVTdGFjayA9IHsgZWxlbWVudC5maXJzdENoaWxkKCkg
fTsKICAgICB3aGlsZSAoIW5vZGVTdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChhdXRv
KiBub2RlID0gbm9kZVN0YWNrLnRha2VMYXN0KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogYXhPYmplY3QgPSBnZXRPckNyZWF0ZShu
b2RlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGF4T2JqZWN0ID0gZ2V0T3JDcmVhdGUoKm5v
ZGUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFheE9iamVjdC0+Y29tcHV0ZUFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTQ4
MCw3ICs0ODAsNyBAQCBib29sIEFYT2JqZWN0Q2FjaGU6OmlzTm9kZVZpc2libGUoTm9kZSogbm9k
ZSkgY29uc3QKICAgICB9CiAKICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgYXJpYSBo
aWRkZW4gc3RhdHVzLgotICAgIGlmICghaXNOb2RlQXJpYVZpc2libGUobm9kZSkpCisgICAgaWYg
KCFpc05vZGVBcmlhVmlzaWJsZSgqbm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHJldHVybiB0cnVlOwpAQCAtNTE1LDggKzUxNSw4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmZvY3VzZWRJbWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqIGFy
CiAgICAgUmVmUHRyIGltYWdlRWxlbWVudCA9IGFyZWFFbGVtZW50LT5pbWFnZUVsZW1lbnQoKTsK
ICAgICBpZiAoIWltYWdlRWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0g
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhSZW5kZXJJbWFnZSA9IGFyZWFFbGVtZW50LT5wcm90
ZWN0ZWREb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGltYWdlRWxlbWVu
dC5nZXQoKSk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheFJlbmRlckltYWdlID0gYXJl
YUVsZW1lbnQtPnByb3RlY3RlZERvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUoKmltYWdlRWxlbWVudCk7CiAgICAgaWYgKCFheFJlbmRlckltYWdlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKQEAgLTU3OSwzNCArNTc5LDI1IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6c2V0SXNvbGF0ZWRUcmVlRm9jdXNlZE9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmb2N1
cykKIH0KICNlbmRpZgogCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQo
V2lkZ2V0KiB3aWRnZXQpCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQo
V2lkZ2V0JiB3aWRnZXQpIGNvbnN0CiB7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCiAgICAgQVhJRCBheElEID0gbV93aWRnZXRPYmplY3RNYXBwaW5nLmdldCh3
aWRnZXQpOwogICAgIEFTU0VSVCghYXhJRC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKTsKIAog
ICAgIHJldHVybiBheElEID8gbV9vYmplY3RzLmdldChheElEKSA6IG51bGxwdHI7CiB9CiAKLUFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQorQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KFJlbmRlck9iamVj
dCYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KICAgICBBWElEIGF4SUQgPSBtX3JlbmRlck9iamVjdE1hcHBpbmcuZ2V0KHJl
bmRlcmVyKTsKICAgICBBU1NFUlQoIWF4SUQuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSk7CiAK
ICAgICByZXR1cm4gYXhJRCA/IG1fb2JqZWN0cy5nZXQoYXhJRCkgOiBudWxscHRyOwogfQogCi1B
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoTm9kZSogbm9kZSkKK0FjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldChOb2RlJiBub2RlKSBjb25zdAogewot
ICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBub2RlLnJlbmRl
cmVyKCk7CiAgICAgQVhJRCByZW5kZXJJRCA9IHJlbmRlcmVyID8gbV9yZW5kZXJPYmplY3RNYXBw
aW5nLmdldChyZW5kZXJlcikgOiBBWElEKCk7CiAgICAgQVNTRVJUKCFyZW5kZXJJRC5pc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpKTsKICAgICBpZiAocmVuZGVySUQuaXNWYWxpZCgpKQpAQCAtNzIy
LDYgKzcxMyw3IEBAIHN0YXRpYyBib29sIGlzQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbChOb2Rl
KiBub2RlKQogICAgIHJldHVybiBub2RlSGFzQ2VsbFJvbGUobm9kZSk7CiB9CiAKKy8vIEZJWE1F
OiBUaGlzIGNhbiB0YWtlIGEgcmVmZXJlbmNlLCBhbmQgdGhlcmVmb3JlIGFsbCAqOjpjcmVhdGUg
bWV0aG9kcyB3aXRoaW4gY2FuIHRvby4KIFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBWE9iamVj
dENhY2hlOjpjcmVhdGVPYmplY3RGcm9tUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
IHsKICAgICAvLyBGSVhNRTogSG93IGNvdWxkIHJlbmRlcmVyLT5ub2RlKCkgZXZlciBub3QgYmUg
YW4gRWxlbWVudD8KQEAgLTg0OSw3MyArODQxLDY1IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6Y2Fj
aGVBbmRJbml0aWFsaXplV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBuZXdPYmplY3QsIERP
CiAgICAgYXR0YWNoV3JhcHBlcihuZXdPYmplY3QpOwogfQogCi1BY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShXaWRnZXQqIHdpZGdldCkKK0FjY2Vzc2liaWxp
dHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFdpZGdldCYgd2lkZ2V0KQogewot
ICAgIGlmICghd2lkZ2V0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byog
b2JqZWN0ID0gZ2V0KHdpZGdldCkpCisgICAgICAgIHJldHVybiBvYmplY3Q7CiAKLSAgICBpZiAo
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gZ2V0KHdpZGdldCkpCi0gICAgICAgIHJldHVybiBv
Ymo7Ci0gICAgCi0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG5ld09iajsKLSAgICBp
ZiAoYXV0byogc2Nyb2xsVmlldyA9IGR5bmFtaWNEb3duY2FzdDxTY3JvbGxWaWV3Pigqd2lkZ2V0
KSkKLSAgICAgICAgbmV3T2JqID0gQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6OmNyZWF0ZShzY3Jv
bGxWaWV3KTsKLSAgICBlbHNlIGlmIChhdXRvKiBzY3JvbGxiYXIgPSBkeW5hbWljRG93bmNhc3Q8
U2Nyb2xsYmFyPigqd2lkZ2V0KSkKLSAgICAgICAgbmV3T2JqID0gQWNjZXNzaWJpbGl0eVNjcm9s
bGJhcjo6Y3JlYXRlKHNjcm9sbGJhcik7CisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
IG5ld09iamVjdDsKKyAgICBpZiAoYXV0byogc2Nyb2xsVmlldyA9IGR5bmFtaWNEb3duY2FzdDxT
Y3JvbGxWaWV3Pih3aWRnZXQpKQorICAgICAgICBuZXdPYmplY3QgPSBBY2Nlc3NpYmlsaXR5U2Ny
b2xsVmlldzo6Y3JlYXRlKHNjcm9sbFZpZXcpOworICAgIGVsc2UgaWYgKGF1dG8qIHNjcm9sbGJh
ciA9IGR5bmFtaWNEb3duY2FzdDxTY3JvbGxiYXI+KHdpZGdldCkpCisgICAgICAgIG5ld09iamVj
dCA9IEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OmNyZWF0ZShzY3JvbGxiYXIpOwogCiAgICAgLy8g
V2lsbCBjcmFzaCBsYXRlciBpZiB3ZSBoYXZlIHR3byBvYmplY3RzIGZvciB0aGUgc2FtZSB3aWRn
ZXQuCiAgICAgQVNTRVJUKCFnZXQod2lkZ2V0KSk7CiAKICAgICAvLyBFbnN1cmUgd2Ugd2VyZW4n
dCBnaXZlbiBhbiB1bnN1cHBvcnRlZCB3aWRnZXQgdHlwZS4KLSAgICBBU1NFUlQobmV3T2JqKTsK
LSAgICBpZiAoIW5ld09iaikKKyAgICBBU1NFUlQobmV3T2JqZWN0KTsKKyAgICBpZiAoIW5ld09i
amVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBjYWNoZUFuZEluaXRpYWxpemVX
cmFwcGVyKG5ld09iai5nZXQoKSwgd2lkZ2V0KTsKLSAgICByZXR1cm4gbmV3T2JqLmdldCgpOwor
ICAgIGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIobmV3T2JqZWN0LmdldCgpLCAmd2lkZ2V0KTsK
KyAgICByZXR1cm4gbmV3T2JqZWN0LmdldCgpOwogfQogCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
WE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShOb2RlKiBub2RlLCBJc1BhcnRPZlJlbGF0aW9uIGlz
UGFydE9mUmVsYXRpb24pCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRP
ckNyZWF0ZShOb2RlJiBub2RlLCBJc1BhcnRPZlJlbGF0aW9uIGlzUGFydE9mUmVsYXRpb24pCiB7
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIGlmIChhdXRv
KiBvYmplY3QgPSBnZXQobm9kZSkpCiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKLSAgICBpZiAo
bm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUtPnJlbmRl
cmVyKCkpOwotCi0gICAgUmVmIHByb3RlY3RlZE5vZGUgeyAqbm9kZSB9OworICAgIGlmIChhdXRv
KiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRl
KCpyZW5kZXJlcik7CiAKLSAgICBpZiAoIW5vZGUtPnBhcmVudEVsZW1lbnQoKSkKKyAgICBpZiAo
IW5vZGUucGFyZW50RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1
dG8qIG9wdGlvbkVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpu
b2RlKTsKLSAgICBhdXRvKiBvcHRHcm91cEVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8SFRNTE9w
dEdyb3VwRWxlbWVudD4oKm5vZGUpOworICAgIFJlZiBwcm90ZWN0ZWROb2RlIHsgbm9kZSB9Owor
CisgICAgYXV0byogb3B0aW9uRWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4obm9kZSk7CisgICAgYXV0byogb3B0R3JvdXBFbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0
PEhUTUxPcHRHcm91cEVsZW1lbnQ+KG5vZGUpOwogICAgIGlmIChvcHRpb25FbGVtZW50IHx8IG9w
dEdyb3VwRWxlbWVudCkgewotICAgICAgICBhdXRvIHNlbGVjdCA9IG9wdGlvbkVsZW1lbnQKKyAg
ICAgICAgYXV0byogc2VsZWN0ID0gb3B0aW9uRWxlbWVudAogICAgICAgICAgICAgPyBvcHRpb25F
bGVtZW50LT5vd25lclNlbGVjdEVsZW1lbnQoKQogICAgICAgICAgICAgOiBvcHRHcm91cEVsZW1l
bnQtPm93bmVyU2VsZWN0RWxlbWVudCgpOwogICAgICAgICBpZiAoIXNlbGVjdCkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4g
b2JqZWN0OwogICAgICAgICBpZiAoc2VsZWN0LT51c2VzTWVudUxpc3QoKSkgewotICAgICAgICAg
ICAgaWYgKCFvcHRpb25FbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgaWYgKCFzZWxlY3QtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBpZiAoIW9w
dGlvbkVsZW1lbnQgfHwgIXNlbGVjdC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgICAgIG9iamVjdCA9IEFjY2Vzc2liaWxpdHlNZW51TGlzdE9w
dGlvbjo6Y3JlYXRlKCpvcHRpb25FbGVtZW50KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBvYmplY3QgPSBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6Y3JlYXRlKGRvd25jYXN0PEhU
TUxFbGVtZW50Pigqbm9kZSkpOwotICAgICAgICBjYWNoZUFuZEluaXRpYWxpemVXcmFwcGVyKG9i
amVjdC5nZXQoKSwgbm9kZSk7CisgICAgICAgICAgICBvYmplY3QgPSBBY2Nlc3NpYmlsaXR5TGlz
dEJveE9wdGlvbjo6Y3JlYXRlKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKSk7CisgICAgICAg
IGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIob2JqZWN0LmdldCgpLCAmbm9kZSk7CiAgICAgICAg
IHJldHVybiBvYmplY3QuZ2V0KCk7CiAgICAgfQogCi0gICAgYm9vbCBpbkNhbnZhc1N1YnRyZWUg
PSBsaW5lYWdlT2ZUeXBlPEhUTUxDYW52YXNFbGVtZW50Pigqbm9kZS0+cGFyZW50RWxlbWVudCgp
KS5maXJzdCgpOworICAgIGJvb2wgaW5DYW52YXNTdWJ0cmVlID0gbGluZWFnZU9mVHlwZTxIVE1M
Q2FudmFzRWxlbWVudD4oKm5vZGUucGFyZW50RWxlbWVudCgpKS5maXJzdCgpOwogICAgIC8vIElm
IG5vZGUgaXMgdGhlIHRhcmdldCBvZiBhIHJlbGF0aW9uc2hpcCBvciBhIGRlc2NlbmRhbnQgb2Yg
b25lLCBjcmVhdGUgYW4gQVggb2JqZWN0IHVuY29uZGl0aW9uYWxseS4KLSAgICBpZiAoaXNQYXJ0
T2ZSZWxhdGlvbiA9PSBJc1BhcnRPZlJlbGF0aW9uOjpObyAmJiAhaXNEZXNjZW5kYW50T2ZSZWxh
dGVkTm9kZSgqbm9kZSkpIHsKLSAgICAgICAgYm9vbCBpbnNpZGVNZXRlckVsZW1lbnQgPSBpczxI
VE1MTWV0ZXJFbGVtZW50Pigqbm9kZS0+cGFyZW50RWxlbWVudCgpKTsKKyAgICBpZiAoaXNQYXJ0
T2ZSZWxhdGlvbiA9PSBJc1BhcnRPZlJlbGF0aW9uOjpObyAmJiAhaXNEZXNjZW5kYW50T2ZSZWxh
dGVkTm9kZShub2RlKSkgeworICAgICAgICBib29sIGluc2lkZU1ldGVyRWxlbWVudCA9IGlzPEhU
TUxNZXRlckVsZW1lbnQ+KCpub2RlLnBhcmVudEVsZW1lbnQoKSk7CiAgICAgICAgIGF1dG8qIGVs
ZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgICAgIGJvb2wgaGFz
RGlzcGxheUNvbnRlbnRzID0gZWxlbWVudCAmJiBlbGVtZW50LT5oYXNEaXNwbGF5Q29udGVudHMo
KTsKICAgICAgICAgYm9vbCBpc1BvcG92ZXIgPSBlbGVtZW50ICYmIGVsZW1lbnQtPmhhc0F0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocG9wb3ZlckF0dHIpOwpAQCAtOTIzLDIwICs5MDcs
MjAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUoTm9k
ZSogbm9kZSwgSXNQYXJ0T2ZSZWxhdGlvbiBpc1AKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIC8vIFRoZSBvYmplY3QgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0
ZWQgZHVyaW5nIHJlbGF0aW9ucyB1cGRhdGUKKyAgICAvLyBUaGUgb2JqZWN0IG1heSBoYXZlIGFs
cmVhZHkgYmVlbiBjcmVhdGVkIGR1cmluZyByZWxhdGlvbnMgdXBkYXRlLgogICAgIGlmIChhdXRv
KiBvYmplY3QgPSBnZXQobm9kZSkpCiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKICAgICAvLyBG
YWxsYmFjayBjb250ZW50IGlzIG9ubHkgZm9jdXNhYmxlIGFzIGxvbmcgYXMgdGhlIGNhbnZhcyBp
cyBkaXNwbGF5ZWQgYW5kIHZpc2libGUuCiAgICAgLy8gVXBkYXRlIHRoZSBzdHlsZSBiZWZvcmUg
RWxlbWVudDo6aXNGb2N1c2FibGUoKSBnZXRzIGNhbGxlZC4KICAgICBpZiAoaW5DYW52YXNTdWJ0
cmVlKQotICAgICAgICBub2RlLT5wcm90ZWN0ZWREb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVl
ZGVkKCk7CisgICAgICAgIG5vZGUucHJvdGVjdGVkRG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5l
ZWRlZCgpOwogCi0gICAgUmVmUHRyIG5ld09iamVjdCA9IGNyZWF0ZUZyb21Ob2RlKCpub2RlKTsK
KyAgICBSZWZQdHIgbmV3T2JqZWN0ID0gY3JlYXRlRnJvbU5vZGUobm9kZSk7CiAKICAgICAvLyBX
aWxsIGNyYXNoIGxhdGVyIGlmIHdlIGhhdmUgdHdvIG9iamVjdHMgZm9yIHRoZSBzYW1lIG5vZGUu
CiAgICAgQVNTRVJUKCFnZXQobm9kZSkpOwotICAgIGNhY2hlQW5kSW5pdGlhbGl6ZVdyYXBwZXIo
bmV3T2JqZWN0LmdldCgpLCBub2RlKTsKKyAgICBjYWNoZUFuZEluaXRpYWxpemVXcmFwcGVyKG5l
d09iamVjdC5nZXQoKSwgJm5vZGUpOwogICAgIC8vIENvbXB1dGUgdGhlIG9iamVjdCdzIGluaXRp
YWwgaWdub3JlZCBzdGF0dXMuCiAgICAgbmV3T2JqZWN0LT5yZWNvbXB1dGVJc0lnbm9yZWQoKTsK
ICAgICAvLyBTb21ldGltZXMgYXNraW5nIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSB3aWxsIGNh
dXNlIHRoZSBuZXdPYmplY3QgdG8gYmUgZGVhbGxvY2F0ZWQsIGFuZCB0aGVuCkBAIC05NDYsMjQg
KzkzMCwyMSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0
ZShOb2RlKiBub2RlLCBJc1BhcnRPZlJlbGF0aW9uIGlzUAogICAgIHJldHVybiBuZXdPYmplY3Qu
Z2V0KCk7CiB9CiAKLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3Jl
YXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVj
dENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogewotICAgIGlmICgh
cmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgaWYgKGF1dG8qIG9iamVj
dCA9IGdldChyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAKICAgICAvLyBEb24n
dCBjcmVhdGUgYW4gb2JqZWN0IGZvciB0aGlzIHJlbmRlcmVyIGlmIGl0J3MgYmVpbmcgZGVzdHJv
eWVkLgotICAgIGlmIChyZW5kZXJlci0+YmVpbmdEZXN0cm95ZWQoKSkKKyAgICBpZiAocmVuZGVy
ZXIuYmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQ
dHIgb2JqZWN0ID0gY3JlYXRlT2JqZWN0RnJvbVJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICBSZWYg
b2JqZWN0ID0gY3JlYXRlT2JqZWN0RnJvbVJlbmRlcmVyKCZyZW5kZXJlcik7CiAKICAgICAvLyBX
aWxsIGNyYXNoIGxhdGVyIGlmIHdlIGhhdmUgdHdvIG9iamVjdHMgZm9yIHRoZSBzYW1lIHJlbmRl
cmVyLgogICAgIEFTU0VSVCghZ2V0KHJlbmRlcmVyKSk7CiAKLSAgICBjYWNoZUFuZEluaXRpYWxp
emVXcmFwcGVyKG9iamVjdC5nZXQoKSwgcmVuZGVyZXIpOworICAgIGNhY2hlQW5kSW5pdGlhbGl6
ZVdyYXBwZXIob2JqZWN0LnB0cigpLCAmcmVuZGVyZXIpOwogICAgIC8vIENvbXB1dGUgdGhlIG9i
amVjdCdzIGluaXRpYWwgaWdub3JlZCBzdGF0dXMuCiAgICAgb2JqZWN0LT5yZWNvbXB1dGVJc0ln
bm9yZWQoKTsKICAgICAvLyBTb21ldGltZXMgYXNraW5nIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSB3aWxsIGNhdXNlIHRoZSBuZXdPYmplY3QgdG8gYmUgZGVhbGxvY2F0ZWQsIGFuZCB0aGVuCkBA
IC05NzEsNyArOTUyLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0
T3JDcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICBpZiAob2JqZWN0LT5pc0RldGFj
aGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG9iamVjdC5nZXQo
KTsKKyAgICByZXR1cm4gb2JqZWN0LnB0cigpOwogfQogCiBBWENvcmVPYmplY3QqIEFYT2JqZWN0
Q2FjaGU6OnJvb3RPYmplY3QoKQpAQCAtMTQyMyw4ICsxNDA0LDggQEAgdm9pZCBBWE9iamVjdENh
Y2hlOjpoYW5kbGVNZW51T3BlbmVkKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5yZW5kZXJlcigpIHx8ICFub2RlSGFzUm9sZShub2RlLCAibWVudSJfcykpCiAgICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBwb3N0Tm90aWZpY2F0aW9uKGdldE9yQ3JlYXRlKG5vZGUpLCBw
cm90ZWN0ZWREb2N1bWVudCgpLnB0cigpLCBBWE1lbnVPcGVuZWQpOworCisgICAgcG9zdE5vdGlm
aWNhdGlvbihnZXRPckNyZWF0ZSgqbm9kZSksIHByb3RlY3RlZERvY3VtZW50KCkucHRyKCksIEFY
TWVudU9wZW5lZCk7CiB9CiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlTGl2ZVJlZ2lvbkNy
ZWF0ZWQoTm9kZSogbm9kZSkKQEAgLTE0NzEsNyArMTQ1Miw3IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6Y2hpbGRyZW5DaGFuZ2VkKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlck9iamVjdCog
Y2hhbmdlCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hpbGRy
ZW5DaGFuZ2VkKGdldChyZW5kZXJlcikpOworICAgIGNoaWxkcmVuQ2hhbmdlZChnZXQoKnJlbmRl
cmVyKSk7CiAgICAgaWYgKGNoYW5nZWRDaGlsZCkKICAgICAgICAgZGVmZXJOb2RlQWRkZWRPclJl
bW92ZWQoY2hhbmdlZENoaWxkLT5ub2RlKCkpOwogfQpAQCAtMTU4NSwxMCArMTU2NiwxMCBAQCB2
b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgQVhOb3RpZmljYXRpb24gbm90aQogCiAgICAgLy8gR2V0IGFuIGFjY2Vzc2liaWxpdHkgb2Jq
ZWN0IHRoYXQgYWxyZWFkeSBleGlzdHMuIE9uZSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgaGVyZQog
ICAgIC8vIGJlY2F1c2UgYSByZW5kZXIgdXBkYXRlIG1heSBiZSBpbiBwcm9ncmVzcyBhbmQgY3Jl
YXRpbmcgYW4gQVggb2JqZWN0IGNhbiByZS10cmlnZ2VyIGEgbGF5b3V0Ci0gICAgUmVmUHRyPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IGdldChyZW5kZXJlcik7CisgICAgUmVmUHRyPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IGdldCgqcmVuZGVyZXIpOwogICAgIHdoaWxlICgh
b2JqZWN0ICYmIHJlbmRlcmVyKSB7CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVu
dCgpOwotICAgICAgICBvYmplY3QgPSBnZXQocmVuZGVyZXIpOyAKKyAgICAgICAgb2JqZWN0ID0g
Z2V0KHJlbmRlcmVyKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE2MDYs
NyArMTU4Nyw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvbihOb2RlKiBu
b2RlLCBBWE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24sIFBvCiAKICAgICAvLyBHZXQgYW4gYWNj
ZXNzaWJpbGl0eSBvYmplY3QgdGhhdCBhbHJlYWR5IGV4aXN0cy4gT25lIHNob3VsZCBub3QgYmUg
Y3JlYXRlZCBoZXJlCiAgICAgLy8gYmVjYXVzZSBhIHJlbmRlciB1cGRhdGUgbWF5IGJlIGluIHBy
b2dyZXNzIGFuZCBjcmVhdGluZyBhbiBBWCBvYmplY3QgY2FuIHJlLXRyaWdnZXIgYSBsYXlvdXQK
LSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqZWN0ID0gZ2V0KG5vZGUpOworICAg
IFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmplY3QgPSBnZXQoKm5vZGUpOwogICAgIHdo
aWxlICghb2JqZWN0ICYmIG5vZGUpIHsKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKICAgICAgICAgb2JqZWN0ID0gZ2V0KG5vZGUpOwpAQCAtMTY3NSw3ICsxNjU2LDcgQEAgdm9p
ZCBBWE9iamVjdENhY2hlOjpoYW5kbGVNZW51SXRlbVNlbGVjdGVkKE5vZGUqIG5vZGUpCiAgICAg
aWYgKCFlbGVtZW50LT5mb2N1c2VkKCkgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYV9zZWxlY3RlZEF0
dHIpLCAidHJ1ZSJfcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBvc3ROb3RpZmljYXRpb24o
Z2V0T3JDcmVhdGUobm9kZSksIHByb3RlY3RlZERvY3VtZW50KCkucHRyKCksIEFYTWVudUxpc3RJ
dGVtU2VsZWN0ZWQpOworICAgIHBvc3ROb3RpZmljYXRpb24oZ2V0T3JDcmVhdGUoKm5vZGUpLCBw
cm90ZWN0ZWREb2N1bWVudCgpLnB0cigpLCBBWE1lbnVMaXN0SXRlbVNlbGVjdGVkKTsKIH0KIAog
Ly8gRklYTUU6IENvbnNpZGVyIGFsc28gaGFuZGxpbmcgdXBkYXRpbmcgU2VsZWN0ZWRDaGlsZHJl
biBvZiBUYWJMaXN0cyAodGhpcyBzaG91bGQgaGFwcGVuIGZvciB0aGUgb2xkTm9kZSwgbmV3Tm9k
ZSwgYW5kL29yIHRoZSBwYXJlbnQgb2YgYSB0YWIpCkBAIC0xODk0LDcgKzE4NzUsNyBAQCB2b2lk
IEFYT2JqZWN0Q2FjaGU6Om9uVmFsaWRpdHlDaGFuZ2UoRWxlbWVudCYgZWxlbWVudCkKIHZvaWQg
QVhPYmplY3RDYWNoZTo6b25UZXh0Q29tcG9zaXRpb25DaGFuZ2UoTm9kZSYgbm9kZSwgQ29tcG9z
aXRpb25TdGF0ZSBjb21wb3NpdGlvblN0YXRlLCBib29sIHZhbHVlQ2hhbmdlZCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBzaXplX3QgcG9zaXRpb24sIGJvb2wgaGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0
ZSkKIHsKICNpZiBIQVZFKElOTElORV9QUkVESUNUSU9OUykKLSAgICBhdXRvKiBvYmplY3QgPSBn
ZXRPckNyZWF0ZSgmbm9kZSk7CisgICAgYXV0byogb2JqZWN0ID0gZ2V0T3JDcmVhdGUobm9kZSk7
CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjA3NSw3ICsyMDU2LDcg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKE5v
ZGUqIG5vZGUsIGNvbnN0IEFYVGV4dFN0YXQKICNpZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKEFU
U1BJKQogICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CiAKLSAgICBw
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKGdldE9yQ3JlYXRlKG5vZGUpLCBpbnRlbnQs
IHNlbGVjdGlvbik7CisgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihnZXRPckNy
ZWF0ZSgqbm9kZSksIGludGVudCwgc2VsZWN0aW9uKTsKICNlbHNlCiAgICAgcG9zdE5vdGlmaWNh
dGlvbihub2RlLT5yZW5kZXJlcigpLCBBWFNlbGVjdGVkVGV4dENoYW5nZWQsIFBvc3RUYXJnZXQ6
Ok9ic2VydmFibGVQYXJlbnQpOwogICAgIFVOVVNFRF9QQVJBTShpbnRlbnQpOwpAQCAtMjA5Miw3
ICsyMDczLDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZp
Y2F0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY28KICAgICBzdG9wQ2FjaGluZ0NvbXB1
dGVkT2JqZWN0QXR0cmlidXRlcygpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShBVFNQ
SSkKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBnZXRPckNyZWF0ZShub2RlLmdl
dCgpKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSBnZXRPckNyZWF0ZSgqbm9k
ZSk7CiAgICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkg
ewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICBpZiAocG9zaXRpb24uYXRMYXN0RWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZSgpKSB7CkBAIC0yMTk5LDcgKzIxODAsNyBAQCB2b2lkIEFYT2JqZWN0
Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb24oTm9kZSogbm9kZSwgQVhUZXh0
RWRpdFR5cGUgZAogCiAgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsK
IAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKG5vZGUpOwor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKCpub2RlKTsKICNp
ZiBQTEFURk9STShDT0NPQSkgfHwgVVNFKEFUU1BJKQogICAgIGlmIChvYmplY3QpIHsKICAgICAg
ICAgaWYgKGVucXVldWVQYXNzd29yZFZhbHVlQ2hhbmdlTm90aWZpY2F0aW9uKG9iamVjdCkpCkBA
IC0yMjE4LDcgKzIxOTksNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1l
bnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChIVE1MVGV4dEZvcm1DbwogewogICAgIHN0b3BD
YWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QgPSBnZXRPckNyZWF0ZSgmdGV4dENvbnRyb2wpOworICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iamVjdCA9IGdldE9yQ3JlYXRlKHRleHRDb250cm9sKTsKICNpZiBQTEFURk9S
TShDT0NPQSkgfHwgVVNFKEFUU1BJKQogICAgIGlmIChvYmplY3QpIHsKICAgICAgICAgaWYgKGVu
cXVldWVQYXNzd29yZFZhbHVlQ2hhbmdlTm90aWZpY2F0aW9uKG9iamVjdCkpCkBAIC0yMjYzLDEy
ICsyMjQ0LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdFdmVudE5vdGlmaWNh
dGlvbihMb2NhbEZyYW1lKiBmcmFtZSwgQVhMb2FkaW5nRXYKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRGVsZWdhdGUgb24gdGhlIHJpZ2h0IHBsYXRmb3JtCi0gICAgUmVuZGVyVmlldyogY29u
dGVudFJlbmRlcmVyID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICghY29udGVu
dFJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmogPSBnZXRPckNyZWF0ZShjb250ZW50UmVuZGVyZXIpOwotICAgIGZyYW1lTG9hZGluZ0V2ZW50
UGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqLCBsb2FkaW5nRXZlbnQpOworICAgIGZyYW1lTG9hZGlu
Z0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oZ2V0T3JDcmVhdGUoZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpKSwgbG9hZGluZ0V2ZW50KTsKIH0KIAogdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0TGl2
ZVJlZ2lvbkNoYW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCkBA
IC0yMzI1LDggKzIzMDEsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmZvY3VzQ3VycmVudE1vZGFs
KCkKICAgICAvLyB0aGUgZGlhbG9nLgogICAgIGlmIChtX2N1cnJlbnRNb2RhbEVsZW1lbnQtPmNv
bnRhaW5zKGRvY3VtZW50LT5mb2N1c2VkRWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjdXJyZW50TW9kYWxOb2RlT2JqZWN0ID0g
Z2V0T3JDcmVhdGUobV9jdXJyZW50TW9kYWxFbGVtZW50LmdldCgpKSkgeworCisgICAgaWYgKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGN1cnJlbnRNb2RhbE5vZGVPYmplY3QgPSBnZXRPckNyZWF0ZSgq
bV9jdXJyZW50TW9kYWxFbGVtZW50KSkgewogICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVj
dCogZm9jdXNhYmxlID0gZmlyc3RGb2N1c2FibGVDaGlsZChjdXJyZW50TW9kYWxOb2RlT2JqZWN0
KSkKICAgICAgICAgICAgIGZvY3VzYWJsZS0+c2V0Rm9jdXNlZCh0cnVlKTsKICAgICB9CkBAIC0y
MzgxLDcgKzIzNTcsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFjdGl2ZURlc2NlbmRh
bnRDaGFuZ2UoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cgogICAgIGlmICghZWxlbWVu
dC5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHIgb2JqZWN0ID0gZ2V0T3JDcmVhdGUoJmVsZW1l
bnQpOworICAgIFJlZlB0ciBvYmplY3QgPSBnZXRPckNyZWF0ZShlbGVtZW50KTsKICAgICBpZiAo
IW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTQxLDcgKzI1MTcsNyBAQCBib29sIEFY
T2JqZWN0Q2FjaGU6OnNob3VsZFByb2Nlc3NBdHRyaWJ1dGVDaGFuZ2UoRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgUXVhbGlmaQogCiAgICAgLy8gSWYgYW4gQVhPYmplY3QgaGFzIHlldCB0byBiZSBj
cmVhdGVkLCB0aGVuIHRoZXJlJ3Mgbm8gbmVlZCB0byBwcm9jZXNzIGF0dHJpYnV0ZSBjaGFuZ2Vz
LgogICAgIC8vIFNvbWUgb2YgdGhlc2Ugbm90aWZpY2F0aW9ucyBhcmUgcHJvY2Vzc2VkIG9uIHRo
ZSBwYXJlbnQsIHNvIGFsbG93IHRoYXQgdG8gcHJvY2VlZCBhcyB3ZWxsCi0gICAgcmV0dXJuIGdl
dChlbGVtZW50KSB8fCBnZXQoZWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gZ2V0
KCplbGVtZW50KSB8fCBnZXQoZWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKIH0KIAogdm9pZCBBWE9i
amVjdENhY2hlOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIG9sZFZhbHVlLCBjb25z
dCBBdG9tU3RyaW5nJiBuZXdWYWx1ZSkKQEAgLTI1NzksOSArMjU1NSw5IEBAIHZvaWQgQVhPYmpl
Y3RDYWNoZTo6aGFuZGxlQXR0cmlidXRlQ2hhbmdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1
YWxpZmllZE5hbWUmCiAgICAgaWYgKGF0dHJOYW1lID09IHJvbGVBdHRyKQogICAgICAgICBoYW5k
bGVSb2xlQ2hhbmdlZChlbGVtZW50LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogICAgIGVsc2UgaWYg
KGF0dHJOYW1lID09IGFsdEF0dHIgfHwgYXR0ck5hbWUgPT0gdGl0bGVBdHRyKQotICAgICAgICBo
YW5kbGVUZXh0Q2hhbmdlZChnZXRPckNyZWF0ZShlbGVtZW50KSk7CisgICAgICAgIGhhbmRsZVRl
eHRDaGFuZ2VkKGdldE9yQ3JlYXRlKCplbGVtZW50KSk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUg
PT0gY29udGVudGVkaXRhYmxlQXR0cikgewotICAgICAgICBpZiAoYXV0byogYXhPYmplY3QgPSBn
ZXQoZWxlbWVudCkpCisgICAgICAgIGlmIChhdXRvKiBheE9iamVjdCA9IGdldCgqZWxlbWVudCkp
CiAgICAgICAgICAgICBheE9iamVjdC0+dXBkYXRlUm9sZSgpOwogICAgICAgICBwb3N0Tm90aWZp
Y2F0aW9uKGVsZW1lbnQsIEFYQ29udGVudEVkaXRhYmxlQXR0cmlidXRlQ2hhbmdlZCk7CiAgICAg
fQpAQCAtMjYwMiwyNyArMjU3OCwyNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUF0dHJp
YnV0ZUNoYW5nZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJgogICAgIH0K
ICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IGhlYWRlcnNBdHRyKQotICAgICAgICB1cGRhdGVJc29sYXRlZFRyZWUoZ2V0KGVs
ZW1lbnQpLCBBWFRhYmxlSGVhZGVyc0NoYW5nZWQpOworICAgICAgICB1cGRhdGVJc29sYXRlZFRy
ZWUoZ2V0KCplbGVtZW50KSwgQVhUYWJsZUhlYWRlcnNDaGFuZ2VkKTsKICAgICBlbHNlIGlmIChh
dHRyTmFtZSA9PSBsYW5nQXR0cikKLSAgICAgICAgdXBkYXRlSXNvbGF0ZWRUcmVlKGdldChlbGVt
ZW50KSwgQVhMYW5ndWFnZUNoYW5nZWQpOworICAgICAgICB1cGRhdGVJc29sYXRlZFRyZWUoZ2V0
KCplbGVtZW50KSwgQVhMYW5ndWFnZUNoYW5nZWQpOwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IG5hbWVBdHRyKQotICAgICAgICBwb3N0Tm90aWZpY2F0aW9uKGdldChlbGVtZW50KSwgQVhOYW1l
Q2hhbmdlZCk7CisgICAgICAgIHBvc3ROb3RpZmljYXRpb24oZ2V0KCplbGVtZW50KSwgQVhOYW1l
Q2hhbmdlZCk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gcGxhY2Vob2xkZXJBdHRyKQogICAg
ICAgICBwb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQsIEFYUGxhY2Vob2xkZXJDaGFuZ2VkKTsKICAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBocmVmQXR0ciB8fCBhdHRyTmFtZSA9PSBzcmNBdHRyKQog
ICAgICAgICBwb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQsIEFYVVJMQ2hhbmdlZCk7CiAgICAgZWxz
ZSBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyKSB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgICAgICB1
cGRhdGVJc29sYXRlZFRyZWUoZ2V0KGVsZW1lbnQpLCBBWElkQXR0cmlidXRlQ2hhbmdlZCk7Cisg
ICAgICAgIHVwZGF0ZUlzb2xhdGVkVHJlZShnZXQoKmVsZW1lbnQpLCBBWElkQXR0cmlidXRlQ2hh
bmdlZCk7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGFjY2Vzc2tleUF0dHIp
Ci0gICAgICAgIHVwZGF0ZUlzb2xhdGVkVHJlZShnZXQoZWxlbWVudCksIEFYQWNjZXNzS2V5Q2hh
bmdlZCk7CisgICAgICAgIHVwZGF0ZUlzb2xhdGVkVHJlZShnZXQoKmVsZW1lbnQpLCBBWEFjY2Vz
c0tleUNoYW5nZWQpOwogI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RS
RUUpCiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gb3BlbkF0dHIgJiYgaXM8SFRNTERpYWxvZ0Vs
ZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICBkZWZlck1vZGFsQ2hhbmdlKGVsZW1lbnQpOwog
ICAgICAgICByZWNvbXB1dGVJc0lnbm9yZWQoZWxlbWVudC0+cGFyZW50Tm9kZSgpKTsKICAgICB9
IGVsc2UgaWYgKGF0dHJOYW1lID09IHJvd3NwYW5BdHRyKSB7Ci0gICAgICAgIGRlZmVyUm93c3Bh
bkNoYW5nZShnZXQoZWxlbWVudCkpOworICAgICAgICBkZWZlclJvd3NwYW5DaGFuZ2UoZ2V0KCpl
bGVtZW50KSk7CiAgICAgICAgIHJlY29tcHV0ZVBhcmVudFRhYmxlUHJvcGVydGllcyhlbGVtZW50
LCBUYWJsZVByb3BlcnR5OjpDZWxsU2xvdHMpOwogICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0g
Y29sc3BhbkF0dHIpIHsKICAgICAgICAgcG9zdE5vdGlmaWNhdGlvbihlbGVtZW50LCBBWENvbHVt
blNwYW5DaGFuZ2VkKTsKQEAgLTI2NDksNyArMjYyNSw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6
aGFuZGxlQXR0cmlidXRlQ2hhbmdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5h
bWUmCiAgICAgICAgIC8vIFdoZW4gYXJpYS1sYWJlbCBjaGFuZ2VzIG9uIGFuIDxodG1sPiBlbGVt
ZW50LCBpdCdzIHRoZSB3ZWIgYXJlYSB3aG8gbmVlZHMgdG8gcmUtY29tcHV0ZSBpdHMgYWNjZXNz
aWJpbGl0eSB0ZXh0LgogICAgICAgICBoYW5kbGVUZXh0Q2hhbmdlZChnZXQoZWxlbWVudC0+cHJv
dGVjdGVkRG9jdW1lbnQoKS5wdHIoKSkpOwogICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJp
YV9sYWJlbEF0dHIgfHwgYXR0ck5hbWUgPT0gYXJpYV9sYWJlbGVkYnlBdHRyIHx8IGF0dHJOYW1l
ID09IGFyaWFfbGFiZWxsZWRieUF0dHIpIHsKLSAgICAgICAgUmVmUHRyIGF4T2JqZWN0ID0gZ2V0
KGVsZW1lbnQpOworICAgICAgICBSZWZQdHIgYXhPYmplY3QgPSBnZXQoKmVsZW1lbnQpOwogICAg
ICAgICBpZiAoIWF4T2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzAwLDcgKzI2
NzYsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUF0dHJpYnV0ZUNoYW5nZShFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJgogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09
IGFyaWFfdmFsdWVtaW5BdHRyKQogICAgICAgICBwb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQsIEFY
TWluaW11bVZhbHVlQ2hhbmdlZCk7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9tdWx0
aWxpbmVBdHRyKSB7Ci0gICAgICAgIGlmIChhdXRvKiBheE9iamVjdCA9IGdldChlbGVtZW50KSkg
eworICAgICAgICBpZiAoYXV0byogYXhPYmplY3QgPSBnZXQoKmVsZW1lbnQpKSB7CiAgICAgICAg
ICAgICAvLyBUaGUgcm9sZSBvZiB0ZXh0YXJlYSBhbmQgdGV4dGZpZWxkIG9iamVjdHMgaXMgZGVw
ZW5kZW50IG9uIHdoZXRoZXIgdGhleSBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcywgc28gcmVjb21w
dXRlIGl0IGhlcmUuCiAgICAgICAgICAgICBpZiAoYXhPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFj
Y2Vzc2liaWxpdHlSb2xlOjpUZXh0QXJlYSB8fCBheE9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OlRleHRGaWVsZCkKICAgICAgICAgICAgICAgICBheE9iamVjdC0+dXBk
YXRlUm9sZSgpOwpAQCAtMjc0OCwxNiArMjcyNCwxNiBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Omhh
bmRsZUF0dHJpYnV0ZUNoYW5nZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JgogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGFyaWFfcm9sZWRlc2NyaXB0aW9uQXR0cikKICAg
ICAgICAgaGFuZGxlUm9sZURlc2NyaXB0aW9uQ2hhbmdlZChlbGVtZW50KTsKICAgICBlbHNlIGlm
IChhdHRyTmFtZSA9PSBhcmlhX3Jvd2NvdW50QXR0cikKLSAgICAgICAgaGFuZGxlUm93Q291bnRD
aGFuZ2VkKGdldChlbGVtZW50KSwgZWxlbWVudCA/IGVsZW1lbnQtPnByb3RlY3RlZERvY3VtZW50
KCkucHRyKCkgOiBudWxscHRyKTsKKyAgICAgICAgaGFuZGxlUm93Q291bnRDaGFuZ2VkKGdldCgq
ZWxlbWVudCksIGVsZW1lbnQtPnByb3RlY3RlZERvY3VtZW50KCkucHRyKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IGFyaWFfcm93c3BhbkF0dHIpIHsKLSAgICAgICAgZGVmZXJSb3dzcGFu
Q2hhbmdlKGdldChlbGVtZW50KSk7CisgICAgICAgIGRlZmVyUm93c3BhbkNoYW5nZShnZXQoKmVs
ZW1lbnQpKTsKICAgICAgICAgcmVjb21wdXRlUGFyZW50VGFibGVQcm9wZXJ0aWVzKGVsZW1lbnQs
IHsgVGFibGVQcm9wZXJ0eTo6Q2VsbFNsb3RzLCBUYWJsZVByb3BlcnR5OjpFeHBvc2VkIH0pOwog
ICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9zb3J0QXR0cikKICAgICAgICAgcG9zdE5v
dGlmaWNhdGlvbihlbGVtZW50LCBBWFNvcnREaXJlY3Rpb25DaGFuZ2VkKTsKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IGFy
aWFfb3duc0F0dHIpIHsKICAgICAgICAgaWYgKG9sZFZhbHVlLmlzRW1wdHkoKSB8fCBuZXdWYWx1
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICB1cGRhdGVJc29sYXRlZFRyZWUoZ2V0KGVsZW1lbnQp
LCBBWFByb3BlcnR5TmFtZTo6U3VwcG9ydHNBUklBT3ducyk7CisgICAgICAgICAgICB1cGRhdGVJ
c29sYXRlZFRyZWUoZ2V0KCplbGVtZW50KSwgQVhQcm9wZXJ0eU5hbWU6OlN1cHBvcnRzQVJJQU93
bnMpOwogICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9icmFpbGxlbGFiZWxBdHRyKQog
ICAgICAgICBwb3N0Tm90aWZpY2F0aW9uKGVsZW1lbnQsIEFYQnJhaWxsZUxhYmVsQ2hhbmdlZCk7
CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gYXJpYV9icmFpbGxlcm9sZWRlc2NyaXB0aW9uQXR0
cikKQEAgLTMzNjYsNyArMzM0Miw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpj
aGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQCiAgICAgaWYg
KG5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9P
ZmZzZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUuZ2V0KCkpLCBkZWVwUG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwog
ICAgIAotICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSB0aGlzLT5nZXRPckNy
ZWF0ZShub2RlLnB0cigpKTsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0g
dGhpcy0+Z2V0T3JDcmVhdGUobm9kZS5nZXQoKSk7CiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJl
dHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKICAgICAKQEAgLTM0MTIsOCArMzM4OCw4IEBAIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0
TWFya2VyRGF0YShUZXh0TWFyCiAgICAgUmVmUHRyIGRvbU5vZGUgPSB0ZXh0TWFya2VyRGF0YS5u
b2RlOwogICAgIGlmICghaXNOb2RlSW5Vc2UoKmRvbU5vZGUpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKLSAgICByZXR1cm4gdGhpcy0+Z2V0T3JDcmVhdGUoZG9tTm9kZS5nZXQoKSk7
CisKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGUoKmRvbU5vZGUpOwogfQogCiBzdGQ6Om9wdGlvbmFs
PFRleHRNYXJrZXJEYXRhPiBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKQEAgLTQwOTks
MTAgKzQwNzUsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnByZXBhcmVGb3JEb2N1bWVudERlc3Ry
dWN0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKICAgICAKIGJvb2wgQVhPYmplY3RDYWNo
ZTo6bm9kZUlzVGV4dENvbnRyb2woY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGF4T2JqZWN0ID0gZ2V0T3JDcmVhdGUoY29uc3RfY2FzdDxOb2RlKj4obm9kZSkpOworICAgIGNv
bnN0IGF1dG8qIGF4T2JqZWN0ID0gZ2V0T3JDcmVhdGUoY29uc3RfY2FzdDxOb2RlKj4obm9kZSkp
OwogICAgIHJldHVybiBheE9iamVjdCAmJiBheE9iamVjdC0+aXNUZXh0Q29udHJvbCgpOwogfQog
CkBAIC00MTgyLDcgKzQxNTUsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJl
ZENhY2hlVXBkYXRlKEZvcmNlTGF5b3V0IGZvcmNlTGF5b3V0KQogCiAgICAgICAgICAgICBpZiAo
UmVmUHRyIGxhYmVsID0gZHluYW1pY0Rvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KG5vZGUuZ2V0
KCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQSBsYWJlbCB3YXMgYWRkZWQgb3IgcmVtb3ZlZC4g
VXBkYXRlIGl0cyBMYWJlbEZvciByZWxhdGlvbnNoaXBzLgotICAgICAgICAgICAgICAgIGhhbmRs
ZUxhYmVsQ2hhbmdlZChnZXRPckNyZWF0ZShsYWJlbC5nZXQoKSkpOworICAgICAgICAgICAgICAg
IGhhbmRsZUxhYmVsQ2hhbmdlZChnZXRPckNyZWF0ZSgqbGFiZWwpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTQyMDksNyArNDE4Miw3IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoRm9yY2VMYXlvdXQgZm9yY2VMYXlvdXQpCiAg
ICAgYXV0byB0ZXh0Q2hhbmdlZExpc3QgPSBjb3B5VG9WZWN0b3IobV9kZWZlcnJlZFRleHRDaGFu
Z2VkTGlzdCk7CiAgICAgZm9yIChhdXRvJiB3ZWFrTm9kZSA6IHRleHRDaGFuZ2VkTGlzdCkgewog
ICAgICAgICBpZiAoUmVmUHRyIG5vZGUgPSB3ZWFrTm9kZS5nZXQoKSkKLSAgICAgICAgICAgIGhh
bmRsZVRleHRDaGFuZ2VkKGdldE9yQ3JlYXRlKG5vZGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGhh
bmRsZVRleHRDaGFuZ2VkKGdldE9yQ3JlYXRlKCpub2RlKSk7CiAgICAgfQogICAgIG1fZGVmZXJy
ZWRUZXh0Q2hhbmdlZExpc3QuY2xlYXIoKTsKIApAQCAtNDY3Nyw3ICs0NjUwLDcgQEAgdm9pZCBB
WE9iamVjdENhY2hlOjpkZWZlclRleHRDaGFuZ2VkSWZOZWVkZWQoTm9kZSogbm9kZSkKICAgICAg
ICAgbV9kZWZlcnJlZFRleHRDaGFuZ2VkTGlzdC5hZGQoKm5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGhhbmRsZVRleHRDaGFuZ2VkKGdldE9yQ3JlYXRlKG5vZGUpKTsKKyAgICBo
YW5kbGVUZXh0Q2hhbmdlZChnZXRPckNyZWF0ZSgqbm9kZSkpOwogfQogCiB2b2lkIEFYT2JqZWN0
Q2FjaGU6OmRlZmVyU2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWRJZk5lZWRlZChFbGVtZW50JiBzZWxl
Y3RFbGVtZW50KQpAQCAtNDcwNCwxMSArNDY3NywxMyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRl
ZmVyVGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woSFRNTFRleHRGb3Jt
QwogCiBib29sIGlzTm9kZUFyaWFWaXNpYmxlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG5vZGUgPyBpc05vZGVBcmlhVmlz
aWJsZSgqbm9kZSkgOiBmYWxzZTsKK30KIAorYm9vbCBpc05vZGVBcmlhVmlzaWJsZShOb2RlJiBu
b2RlKQorewogICAgIC8vIElmIGFuIGVsZW1lbnQgaXMgZm9jdXNlZCwgaXQgc2hvdWxkIG5vdCBi
ZSBoaWRkZW4uCi0gICAgaWYgKFJlZlB0ciBlbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1l
bnQ+KCpub2RlKTsgZWxlbWVudCAmJiBlbGVtZW50LT5mb2N1c2VkKCkpCisgICAgaWYgKFJlZlB0
ciBlbGVtZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOyBlbGVtZW50ICYmIGVs
ZW1lbnQtPmZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBBUklBIE5v
ZGUgdmlzaWJpbGl0eSBpcyBjb250cm9sbGVkIGJ5IGFyaWEtaGlkZGVuCkBAIC00NzE3LDkgKzQ2
OTIsOSBAQCBib29sIGlzTm9kZUFyaWFWaXNpYmxlKE5vZGUqIG5vZGUpCiAgICAgLy8gIDMpIGlm
IGFyaWEtaGlkZGVuPWZhbHNlLCBhbmQgdGhlIG9iamVjdCBpcyBOT1QgcmVuZGVyZWQsIHRoZW4g
aXQgbXVzdCBoYXZlCiAgICAgLy8gICAgIGFyaWEtaGlkZGVuPWZhbHNlIG9uIGVhY2ggcGFyZW50
IHVudGlsIGl0IGdldHMgdG8gYSByZW5kZXJlZCBvYmplY3QKICAgICAvLyAgM2IpIGEgdGV4dCBu
b2RlIGluaGVyaXRzIGEgcGFyZW50cyBhcmlhLWhpZGRlbiB2YWx1ZQotICAgIGJvb2wgcmVxdWly
ZXNBcmlhSGlkZGVuRmFsc2UgPSAhbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBib29sIHJlcXVpcmVz
QXJpYUhpZGRlbkZhbHNlID0gIW5vZGUucmVuZGVyZXIoKTsKICAgICBib29sIGFyaWFIaWRkZW5G
YWxzZVByZXNlbnQgPSBmYWxzZTsKLSAgICBmb3IgKE5vZGUqIHRlc3ROb2RlID0gbm9kZTsgdGVz
dE5vZGU7IHRlc3ROb2RlID0gdGVzdE5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAoYXV0
byogdGVzdE5vZGUgPSAmbm9kZTsgdGVzdE5vZGU7IHRlc3ROb2RlID0gdGVzdE5vZGUtPnBhcmVu
dE5vZGUoKSkgewogICAgICAgICBpZiAoUmVmUHRyIGVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8
RWxlbWVudD4oKnRlc3ROb2RlKSkgewogICAgICAgICAgICAgY29uc3QgYXV0byYgYXJpYUhpZGRl
blZhbHVlID0gZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhX2hp
ZGRlbkF0dHIpOwogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGFyaWFIaWRkZW5WYWx1ZSwgInRydWUiX3MpKQpAQCAtNDg4OSw3ICs0ODY0LDcgQEAgYm9vbCBB
WE9iamVjdENhY2hlOjphZGRSZWxhdGlvbihFbGVtZW50KiBvcmlnaW4sIEVsZW1lbnQqIHRhcmdl
dCwgQVhSZWxhdGlvblR5cGUKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICByZXR1cm4gYWRkUmVsYXRpb24oZ2V0T3JDcmVhdGUob3JpZ2luLCBJc1BhcnRPZlJlbGF0aW9u
OjpZZXMpLCBnZXRPckNyZWF0ZSh0YXJnZXQsIElzUGFydE9mUmVsYXRpb246OlllcyksIHJlbGF0
aW9uVHlwZSk7CisgICAgcmV0dXJuIGFkZFJlbGF0aW9uKGdldE9yQ3JlYXRlKCpvcmlnaW4sIElz
UGFydE9mUmVsYXRpb246OlllcyksIGdldE9yQ3JlYXRlKCp0YXJnZXQsIElzUGFydE9mUmVsYXRp
b246OlllcyksIHJlbGF0aW9uVHlwZSk7CiB9CiAKIHN0YXRpYyBib29sIGNhbkhhdmVSZWxhdGlv
bnMoRWxlbWVudCYgZWxlbWVudCkKQEAgLTUxMzQsNyArNTEwOSw3IEBAIHZvaWQgQVhPYmplY3RD
YWNoZTo6YWRkTGFiZWxGb3JSZWxhdGlvbihFbGVtZW50JiBvcmlnaW4pCiAgICAgfSBlbHNlIGlm
IChvcmlnaW4uaGFzVGFnTmFtZShmaWdjYXB0aW9uVGFnKSkgewogICAgICAgICBSZWZQdHIgcGFy
ZW50ID0gb3JpZ2luLnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQt
Pmhhc1RhZ05hbWUoZmlndXJlVGFnKSkKLSAgICAgICAgICAgIGFkZGVkUmVsYXRpb24gPSBhZGRS
ZWxhdGlvbihnZXRPckNyZWF0ZSgmb3JpZ2luKSwgZ2V0T3JDcmVhdGUocGFyZW50LmdldCgpKSwg
QVhSZWxhdGlvblR5cGU6OkxhYmVsRm9yKTsKKyAgICAgICAgICAgIGFkZGVkUmVsYXRpb24gPSBh
ZGRSZWxhdGlvbihnZXRPckNyZWF0ZShvcmlnaW4pLCBnZXRPckNyZWF0ZSgqcGFyZW50KSwgQVhS
ZWxhdGlvblR5cGU6OkxhYmVsRm9yKTsKICAgICB9CiAKICAgICBpZiAoYWRkZWRSZWxhdGlvbikK
QEAgLTUxODUsNyArNTE2MCw3IEBAIGJvb2wgQVhPYmplY3RDYWNoZTo6aXNEZXNjZW5kYW50T2ZS
ZWxhdGVkTm9kZShOb2RlJiBub2RlKQogewogICAgIGF1dG8mIHRhcmdldElEcyA9IHJlbGF0aW9u
VGFyZ2V0SURzKCk7CiAgICAgZm9yIChhdXRvKiBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsg
cGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBhdXRvKiBv
YmplY3QgPSBnZXQocGFyZW50KTsKKyAgICAgICAgYXV0byogb2JqZWN0ID0gZ2V0KCpwYXJlbnQp
OwogICAgICAgICBpZiAob2JqZWN0ICYmIChtX3JlbGF0aW9ucy5jb250YWlucyhvYmplY3QtPm9i
amVjdElEKCkpIHx8IHRhcmdldElEcy5jb250YWlucyhvYmplY3QtPm9iamVjdElEKCkpKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggMjdiNzdhYjc1ZmYwLi42Nzk4OTUzZjA0MWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC0yNjcs
MTggKzI2Nyw0NiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgQWNjZXNzaWJpbGl0eU9i
amVjdCogcm9vdE9iamVjdEZvckZyYW1lKExvY2FsRnJhbWUqKTsKIAogICAgIC8vIENyZWF0aW9u
L3JldHJpZXZhbCBvZiBBWCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCBhIERPTSBvciBSZW5kZXJU
cmVlIG9iamVjdC4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShSZW5kZXJP
YmplY3QqKTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShXaWRnZXQqKTsK
KyAgICBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJlciA/IGdldE9yQ3JlYXRl
KCpyZW5kZXJlcikgOiBudWxscHRyOworICAgIH0KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBn
ZXRPckNyZWF0ZShSZW5kZXJPYmplY3QmKTsKKworICAgIGlubGluZSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBnZXRPckNyZWF0ZShXaWRnZXQqIHdpZGdldCkKKyAgICB7CisgICAgICAgIHJldHVybiB3
aWRnZXQgPyBnZXRPckNyZWF0ZSgqd2lkZ2V0KSA6IG51bGxwdHI7CisgICAgfQorICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFdpZGdldCYpOworCiAgICAgZW51bSBjbGFzcyBJ
c1BhcnRPZlJlbGF0aW9uIDogYm9vbCB7IE5vLCBZZXMgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShOb2RlKiwgSXNQYXJ0T2ZSZWxhdGlvbiA9
IElzUGFydE9mUmVsYXRpb246Ok5vKTsKKyAgICBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCog
Z2V0T3JDcmVhdGUoTm9kZSogbm9kZSwgSXNQYXJ0T2ZSZWxhdGlvbiBpc1BhcnRPZlJlbGF0aW9u
ID0gSXNQYXJ0T2ZSZWxhdGlvbjo6Tm8pCisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/IGdl
dE9yQ3JlYXRlKCpub2RlLCBpc1BhcnRPZlJlbGF0aW9uKSA6IG51bGxwdHI7CisgICAgfQorICAg
IFdFQkNPUkVfRVhQT1JUIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKE5vZGUmLCBJ
c1BhcnRPZlJlbGF0aW9uID0gSXNQYXJ0T2ZSZWxhdGlvbjo6Tm8pOwogCiAgICAgLy8gdXNlZCBm
b3Igb2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgZWxlbWVudHMKICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjcmVhdGUoQWNjZXNzaWJpbGl0eVJvbGUpOwogICAgIAotICAgIC8vIHdpbGwgb25seSBy
ZXR1cm4gdGhlIEFjY2Vzc2liaWxpdHlPYmplY3QgaWYgaXQgYWxyZWFkeSBleGlzdHMKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQoUmVuZGVyT2JqZWN0Kik7Ci0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogZ2V0KFdpZGdldCopOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldChOb2Rl
Kik7CisgICAgLy8gV2lsbCBvbmx5IHJldHVybiB0aGUgQWNjZXNzaWJpbGl0eU9iamVjdCBpZiBp
dCBhbHJlYWR5IGV4aXN0cy4KKyAgICBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0KFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gcmVuZGVyZXIgPyBn
ZXQoKnJlbmRlcmVyKSA6IG51bGxwdHI7CisgICAgfQorICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGdldChSZW5kZXJPYmplY3QmKSBjb25zdDsKKworICAgIGlubGluZSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBnZXQoV2lkZ2V0KiB3aWRnZXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gd2lk
Z2V0ID8gZ2V0KCp3aWRnZXQpIDogbnVsbHB0cjsKKyAgICB9CisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogZ2V0KFdpZGdldCYpIGNvbnN0OworCisgICAgaW5saW5lIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGdldChOb2RlKiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBn
ZXQoKm5vZGUpIDogbnVsbHB0cjsKKyAgICB9CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0
KE5vZGUmKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3ZlKFJlbmRlck9iamVjdCopOwogICAgIHZv
aWQgcmVtb3ZlKE5vZGUmKTsKQEAgLTgzMSw3ICs4NTksOSBAQCBwcml2YXRlOgogYm9vbCBub2Rl
SGFzUm9sZShOb2RlKiwgU3RyaW5nVmlldyByb2xlKTsKIGJvb2wgbm9kZUhhc0NlbGxSb2xlKE5v
ZGUqKTsKIGJvb2wgbm9kZUhhc1RhYmxlUm9sZShOb2RlKik7CisKIC8vIFRoaXMgd2lsbCBsZXQg
eW91IGtub3cgaWYgYXJpYS1oaWRkZW4gd2FzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLgorYm9v
bCBpc05vZGVBcmlhVmlzaWJsZShOb2RlJik7CiBib29sIGlzTm9kZUFyaWFWaXNpYmxlKE5vZGUq
KTsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFYT2Jq
ZWN0Q2FjaGU6OkFYTm90aWZpY2F0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAKaW5kZXggYWNh
OTllNjEzNzk4Li5hYjk5ZTA2MDRlNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCkBAIC05MSw3
ICs5MSw3IEBAIExheW91dFJlY3QgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmVsZW1lbnRS
ZWN0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFdlYWtQdHIgY2FjaGUgPSBs
aXN0Qm94UmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpOwotICAgIFJlZlB0ciBs
aXN0Ym94ID0gY2FjaGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUobGlzdEJveFJlbmRlcmVyKSA6IG51
bGxwdHI7CisgICAgUmVmUHRyIGxpc3Rib3ggPSBjYWNoZSA/IGNhY2hlLT5nZXRPckNyZWF0ZSgq
bGlzdEJveFJlbmRlcmVyKSA6IG51bGxwdHI7CiAgICAgaWYgKCFsaXN0Ym94KQogICAgICAgICBy
ZXR1cm4geyB9OwogCkBAIC0xNjMsNyArMTYzLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNj
ZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OnBhcmVudE9iamVjdCgpIGNvbnN0CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgYXV0byogY2FjaGUgPSBtX25vZGUtPmRvY3VtZW50KCkuYXhP
YmplY3RDYWNoZSgpOwotICAgIHJldHVybiBjYWNoZSA/IGNhY2hlLT5nZXRPckNyZWF0ZShwYXJl
bnROb2RlKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRl
KCpwYXJlbnROb2RlKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb246OnNldFNlbGVjdGVkKGJvb2wgc2VsZWN0ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwCmlu
ZGV4IDA0Nzk5YTJkMzQ2Ni4uYTYxOGQ4Mjk3ODFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmNwcApA
QCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Om1hdGhQ
cmVzY3JpcHRzKEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlyCiAgICAgc3RkOjpwYWly
PEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4gcHJlc2NyaXB0UGFp
cjsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gbm9kZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChmb3VuZFByZXNjcmlw
dCkgewotICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhDaGlsZCA9IGF4T2JqZWN0
Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoY2hpbGQpOworICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogYXhDaGlsZCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoKmNoaWxkKTsKICAg
ICAgICAgICAgIGlmIChheENoaWxkICYmIGF4Q2hpbGQtPmlzTWF0aEVsZW1lbnQoKSkgewogICAg
ICAgICAgICAgICAgIGlmICghcHJlc2NyaXB0UGFpci5maXJzdCkKICAgICAgICAgICAgICAgICAg
ICAgcHJlc2NyaXB0UGFpci5maXJzdCA9IGF4Q2hpbGQ7CkBAIC00MTcsNyArNDE3LDcgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aFBvc3RzY3JpcHRzKEFjY2Vzc2liaWxp
dHlNYXRoTXVsdGlzY3JpcHRQYWkKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKE1hdGhN
TE5hbWVzOjptcHJlc2NyaXB0c1RhZykpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBheENoaWxkID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShjaGlsZCk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4Q2hpbGQgPSBheE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKCpjaGlsZCk7CiAgICAgICAgIGlmIChheENoaWxkICYmIGF4
Q2hpbGQtPmlzTWF0aEVsZW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKCFmb3VuZEJhc2VFbGVt
ZW50KQogICAgICAgICAgICAgICAgIGZvdW5kQmFzZUVsZW1lbnQgPSB0cnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlz
dFBvcHVwLmNwcAppbmRleCBkNmUyYjYxNWZkOTkuLjIwYmFlMjk1ODUxNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxp
c3RQb3B1cC5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9u
KiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cDo6bWVudUxpc3RPcHRpb25BY2Nlc3NpYmkKICAg
ICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmluUmVuZGVyZWREb2N1bWVudCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBkeW5hbWljRG93bmNhc3Q8QWNjZXNzaWJp
bGl0eU1lbnVMaXN0T3B0aW9uPihkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKGVsZW1lbnQpKTsKKyAgICByZXR1cm4gZHluYW1pY0Rvd25jYXN0PEFjY2Vzc2liaWxpdHlN
ZW51TGlzdE9wdGlvbj4oZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgq
ZWxlbWVudCkpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwOjpwcmVzcygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCmluZGV4IDBlNmU5NDM5M2MwMS4uM2NhMTlkZmM2NDdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0LmNwcApAQCAtMTM4LDcgKzEzOCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpmaXJzdENoaWxkKCkgY29uc3QKICAgICBpZiAoIWNhY2hlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8qIGF4Q3VycmVudENoaWxkID0gY2Fj
aGUtPmdldE9yQ3JlYXRlKGN1cnJlbnRDaGlsZCk7CisgICAgYXV0byogYXhDdXJyZW50Q2hpbGQg
PSBjYWNoZS0+Z2V0T3JDcmVhdGUoKmN1cnJlbnRDaGlsZCk7CiAgICAgd2hpbGUgKCFheEN1cnJl
bnRDaGlsZCAmJiBjdXJyZW50Q2hpbGQpIHsKICAgICAgICAgY3VycmVudENoaWxkID0gY3VycmVu
dENoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICBheEN1cnJlbnRDaGlsZCA9IGNhY2hlLT5n
ZXRPckNyZWF0ZShjdXJyZW50Q2hpbGQpOwpAQCAtMTU2LDcgKzE1Niw3IEBAIEFjY2Vzc2liaWxp
dHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpsYXN0Q2hpbGQoKSBjb25zdAogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gb2JqZWN0Q2FjaGUgPSBheE9iamVjdENh
Y2hlKCk7Ci0gICAgcmV0dXJuIG9iamVjdENhY2hlID8gb2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRl
KGxhc3RDaGlsZCkgOiBudWxscHRyOworICAgIHJldHVybiBvYmplY3RDYWNoZSA/IG9iamVjdENh
Y2hlLT5nZXRPckNyZWF0ZSgqbGFzdENoaWxkKSA6IG51bGxwdHI7CiB9CiAKIEFjY2Vzc2liaWxp
dHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25z
dApAQCAtMTY5LDcgKzE2OSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIGF1dG8gb2JqZWN0Q2FjaGUgPSBheE9iamVjdENhY2hlKCk7Ci0gICAgcmV0dXJu
IG9iamVjdENhY2hlID8gb2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKHByZXZpb3VzU2libGluZykg
OiBudWxscHRyOworICAgIHJldHVybiBvYmplY3RDYWNoZSA/IG9iamVjdENhY2hlLT5nZXRPckNy
ZWF0ZSgqcHJldmlvdXNTaWJsaW5nKSA6IG51bGxwdHI7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0CkBAIC0xODIs
NyArMTgyLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
Om5leHRTaWJsaW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRv
IG9iamVjdENhY2hlID0gYXhPYmplY3RDYWNoZSgpOwotICAgIHJldHVybiBvYmplY3RDYWNoZSA/
IG9iamVjdENhY2hlLT5nZXRPckNyZWF0ZShuZXh0U2libGluZykgOiBudWxscHRyOworICAgIHJl
dHVybiBvYmplY3RDYWNoZSA/IG9iamVjdENhY2hlLT5nZXRPckNyZWF0ZSgqbmV4dFNpYmxpbmcp
IDogbnVsbHB0cjsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OnBhcmVudE9iamVjdElmRXhpc3RzKCkgY29uc3QKQEAgLTIxMCw3ICsyMTAsNyBAQCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2JqZWN0
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoQVhPYmplY3RDYWNo
ZSogY2FjaGUgPSBheE9iamVjdENhY2hlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JD
cmVhdGUocGFyZW50T2JqKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0ZSgqcGFy
ZW50T2JqKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMjI5LDcgKzIyOSw3IEBAIExh
eW91dFJlY3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1JlY3QoKSBj
b25zdAogICAgIGF1dG8gc2VsZlJlY3QgPSBib3VuZGluZ0JveFJlY3QoKTsKICAgICBmb3IgKGF1
dG8mIGxhYmVsIDogbGFiZWxzKSB7CiAgICAgICAgIGlmIChsYWJlbC0+cmVuZGVyZXIoKSkgewot
ICAgICAgICAgICAgaWYgKGF1dG8qIGF4TGFiZWwgPSBjYWNoZS0+Z2V0T3JDcmVhdGUobGFiZWwu
cHRyKCkpKQorICAgICAgICAgICAgaWYgKGF1dG8qIGF4TGFiZWwgPSBjYWNoZS0+Z2V0T3JDcmVh
dGUobGFiZWwuZ2V0KCkpKQogICAgICAgICAgICAgICAgIHNlbGZSZWN0LnVuaXRlKGF4TGFiZWwt
PmVsZW1lbnRSZWN0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTg0LDcgKzU4NCw3IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZm9yIChhdXRvKiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGFkZENoaWxkKG9iamVjdENhY2hl
LT5nZXRPckNyZWF0ZShjaGlsZCkpOworICAgICAgICBhZGRDaGlsZChvYmplY3RDYWNoZS0+Z2V0
T3JDcmVhdGUoKmNoaWxkKSk7CiAKICAgICB1cGRhdGVPd25lZENoaWxkcmVuKCk7CiB9CkBAIC0x
NjY5LDcgKzE2NjksNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6bWVudUJ1dHRvbkZvck1lbnUoKSBjb25zdAogCiAgICAgaWYgKG1lbnVJdGVtKSB7CiAg
ICAgICAgIC8vIEFSSUEganVzdCBoYXMgZ2VuZXJpYyBtZW51IGl0ZW1zLiBBcHBLaXQgbmVlZHMg
dG8ga25vdyBpZiB0aGlzIGlzIGEgdG9wIGxldmVsIGl0ZW1zIGxpa2UgTWVudUJhckJ1dHRvbiBv
ciBNZW51QmFySXRlbQotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtZW51SXRlbUFYID0g
Y2FjaGUtPmdldE9yQ3JlYXRlKG1lbnVJdGVtKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogbWVudUl0ZW1BWCA9IGNhY2hlLT5nZXRPckNyZWF0ZSgqbWVudUl0ZW0pOwogICAgICAgICBp
ZiAobWVudUl0ZW1BWCAmJiBtZW51SXRlbUFYLT5pc01lbnVCdXR0b24oKSkKICAgICAgICAgICAg
IHJldHVybiBtZW51SXRlbUFYOwogICAgIH0KQEAgLTE2ODgsNyArMTY4OCw3IEBAIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYXB0aW9uRm9yRmlndXJlKCkg
Y29uc3QKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwogICAgIGZvciAoTm9kZSogY2hp
bGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShmaWdjYXB0aW9uVGFnKSkKLSAg
ICAgICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUoY2hpbGQpOworICAgICAgICAgICAg
cmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0ZSgqY2hpbGQpOwogICAgIH0KICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KQEAgLTIxMjUsNyArMjEyNSw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aGVscFRleHQoKSBjb25zdAogCiAgICAgICAgIC8vIE9ubHkgdGFrZSBoZWxwIHRleHQg
ZnJvbSBhbiBhbmNlc3RvciBlbGVtZW50IGlmIGl0cyBhIGdyb3VwIG9yIGFuIHVua25vd24gcm9s
ZS4gSWYgaGVscCB3YXMKICAgICAgICAgLy8gYWRkZWQgdG8gdGhvc2Uga2luZHMgb2YgZWxlbWVu
dHMsIGl0IGlzIGxpa2VseSBpdCB3YXMgbWVhbnQgZm9yIGEgY2hpbGQgZWxlbWVudC4KLSAgICAg
ICAgaWYgKGF1dG8qIGF4QW5jZXN0b3IgPSBjYWNoZS0+Z2V0T3JDcmVhdGUoYW5jZXN0b3IpKSB7
CisgICAgICAgIGlmIChhdXRvKiBheEFuY2VzdG9yID0gY2FjaGUtPmdldE9yQ3JlYXRlKCphbmNl
c3RvcikpIHsKICAgICAgICAgICAgIGlmICghYXhBbmNlc3Rvci0+aXNHcm91cCgpICYmIGF4QW5j
ZXN0b3ItPnJvbGVWYWx1ZSgpICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpVbmtub3duKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNTAzLDYgKzI1MDMsNyBAQCBTUkdCQTx1
aW50OF90PiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29sb3JWYWx1ZSgpIGNvbnN0CiAvLyBB
UklBIEltcGxlbWVudGVyJ3MgR3VpZGUuCiBzdGF0aWMgU3RyaW5nIGFjY2Vzc2libGVOYW1lRm9y
Tm9kZShOb2RlKiBub2RlLCBOb2RlKiBsYWJlbGxlZGJ5Tm9kZSkKIHsKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGp1c3QgY2hhbmdlIHRoaXMgZnVuY3Rpb24gdG8ganVzdCB0YWtlIGEgcmVmZXJl
bmNlIHNpbmNlIHdlIEFTU0VSVChub2RlKSBhbmQgZGVyZWYgd2l0aG91dCBhIG51bGxwdHIgY2hl
Y2suCiAgICAgQVNTRVJUKG5vZGUpOwogCiAgICAgYXV0byogZWxlbWVudCA9IGR5bmFtaWNEb3du
Y2FzdDxFbGVtZW50Pihub2RlKTsKQEAgLTI1MTcsNyArMjUxOCw3IEBAIHN0YXRpYyBTdHJpbmcg
YWNjZXNzaWJsZU5hbWVGb3JOb2RlKE5vZGUqIG5vZGUsIE5vZGUqIGxhYmVsbGVkYnlOb2RlKQog
ICAgIC8vIElmIHRoZSBub2RlIGNhbiBiZSB0dXJuZWQgaW50byBhbiBBWCBvYmplY3QsIHdlIGNh
biB1c2Ugc3RhbmRhcmQgbmFtZSBjb21wdXRhdGlvbiBydWxlcy4KICAgICAvLyBJZiBob3dldmVy
LCB0aGUgbm9kZSBjYW5ub3QgKGJlY2F1c2UgdGhlcmUncyBubyByZW5kZXJlciBlLmcuKSBmYWxs
YmFjayB0byB1c2luZyB0aGUgYmFzaWMgdGV4dCB1bmRlcm5lYXRoLgogICAgIGF1dG8qIGNhY2hl
ID0gbm9kZS0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCk7Ci0gICAgUmVmUHRyIGF4T2JqZWN0
ID0gY2FjaGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUobm9kZSkgOiBudWxscHRyOworICAgIFJlZlB0
ciBheE9iamVjdCA9IGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKCpub2RlKSA6IG51bGxwdHI7
CiAgICAgaWYgKGF4T2JqZWN0KSB7CiAgICAgICAgIFN0cmluZyB2YWx1ZURlc2NyaXB0aW9uID0g
YXhPYmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKTsKICAgICAgICAgaWYgKCF2YWx1ZURlc2NyaXB0
aW9uLmlzRW1wdHkoKSkKQEAgLTI2MDUsNyArMjYwNiw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yQ2hpbGRyZW4oKSBjb25zdAog
ICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KGNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IGNhY2hlLT5nZXRP
ckNyZWF0ZShjaGlsZCkpIHsKKyAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2Jq
ZWN0ID0gY2FjaGUtPmdldE9yQ3JlYXRlKCpjaGlsZCkpIHsKICAgICAgICAgICAgIFN0cmluZyBk
ZXNjcmlwdGlvbiA9IGF4T2JqZWN0LT5hcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCk7CiAgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRpb24uaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGRlc2NyaXB0
aW9uID0gYWNjZXNzaWJsZU5hbWVGb3JOb2RlKGNoaWxkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IGM2MjFlMTIx
YjFkZS4uZDQyODI3NTk1NjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTQ4OSwxMSArNDg5LDExIEBAIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9iamVjdFVuaWdub3Jl
ZCgpIGNvbnN0CiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkaXNw
bGF5Q29udGVudHNQYXJlbnQoKSBjb25zdAogewogICAgIGF1dG8qIHBhcmVudE5vZGUgPSBub2Rl
KCkgPyBub2RlKCktPnBhcmVudE5vZGUoKSA6IG51bGxwdHI7Ci0gICAgaWYgKFJlZlB0ciBlbGVt
ZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUpOyAhZWxlbWVudCB8fCAh
ZWxlbWVudC0+aGFzRGlzcGxheUNvbnRlbnRzKCkpCisgICAgaWYgKFJlZlB0ciBwYXJlbnRFbGVt
ZW50ID0gZHluYW1pY0Rvd25jYXN0PEVsZW1lbnQ+KHBhcmVudE5vZGUpOyAhcGFyZW50RWxlbWVu
dCB8fCAhcGFyZW50RWxlbWVudC0+aGFzRGlzcGxheUNvbnRlbnRzKCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgYXV0byogY2FjaGUgPSBheE9iamVjdENhY2hlKCk7Ci0gICAgcmV0
dXJuIGNhY2hlID8gY2FjaGUtPmdldE9yQ3JlYXRlKHBhcmVudE5vZGUpIDogbnVsbHB0cjsKKyAg
ICByZXR1cm4gY2FjaGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUoKnBhcmVudE5vZGUpIDogbnVsbHB0
cjsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlv
dXNTaWJsaW5nVW5pZ25vcmVkKGludCBsaW1pdCkgY29uc3QKQEAgLTYwNiw4ICs2MDYsOCBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRBY2Nlc3NpYmlsaXR5T2JqZWN0KFJlZlB0cjxBWENvcmVPYmplY3Q+
IG9iamVjdCwgQWNjZXNzaWJpbGl0eQogICAgICAgICBhdXRvKiBkb2N1bWVudCA9IGZyYW1lVmll
dy0+ZnJhbWUoKS5kb2N1bWVudCgpOwogICAgICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVu
dC0+aGFzTGl2aW5nUmVuZGVyVHJlZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGRv
Y3VtZW50KTsKKworICAgICAgICBvYmplY3QgPSBvYmplY3QtPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0
T3JDcmVhdGUoKmRvY3VtZW50KTsKICAgICB9CiAKICAgICBpZiAob2JqZWN0KQpAQCAtMTcwMyw3
ICsxNzAzLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0No
YXJhY3RlcihOb2RlKiByZXBsYWNlZE5vZGUpCiAKICAgICAvLyBjcmVhdGUgYW4gQVggb2JqZWN0
LCBidXQgc2tpcCBpdCBpZiBpdCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgc2VlbgogICAgIGlmIChh
dXRvKiBjYWNoZSA9IHJlcGxhY2VkTm9kZS0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS5heE9iamVj
dENhY2hlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGF4T2JqZWN0ID0gY2FjaGUtPmdldE9yQ3Jl
YXRlKHJlcGxhY2VkTm9kZSkpCisgICAgICAgIGlmIChhdXRvKiBheE9iamVjdCA9IGNhY2hlLT5n
ZXRPckNyZWF0ZSgqcmVwbGFjZWROb2RlKSkKICAgICAgICAgICAgIHJldHVybiAhYXhPYmplY3Qt
PmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKICAgICB9CiAKQEAgLTIyMDIsOCArMjIwMiw4IEBA
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFuY2hvckVsZW1lbnRG
b3JOb2RlKE5vZGUqIG5vZGUpCiAgICAgUmVuZGVyT2JqZWN0KiBvYmogPSBub2RlLT5yZW5kZXJl
cigpOwogICAgIGlmICghb2JqKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhPYmogPSBvYmotPmRvY3VtZW50KCkuYXhPYmpl
Y3RDYWNoZSgpLT5nZXRPckNyZWF0ZShvYmopOworCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlP
YmplY3Q+IGF4T2JqID0gb2JqLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUoKm9iaik7CiAgICAgRWxlbWVudCogYW5jaG9yID0gYXhPYmotPmFuY2hvckVsZW1lbnQoKTsK
ICAgICBpZiAoIWFuY2hvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMjEyLDcgKzIy
MTIsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphbmNob3JF
bGVtZW50Rm9yTm9kZShOb2RlKiBub2RlKQogICAgIGlmICghYW5jaG9yUmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIHJldHVybiBhbmNob3JSZW5kZXJlci0+ZG9j
dW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGFuY2hvclJlbmRlcmVyKTsKKyAg
ICByZXR1cm4gYW5jaG9yUmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZSgqYW5jaG9yUmVuZGVyZXIpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoZWFkaW5nRWxlbWVudEZvck5vZGUoTm9kZSogbm9kZSkKQEAgLTIy
MjQsNyArMjIyNCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OmhlYWRpbmdFbGVtZW50Rm9yTm9kZShOb2RlKiBub2RlKQogICAgIGlmICghcmVuZGVyT2JqZWN0
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4
T2JqZWN0ID0gcmVuZGVyT2JqZWN0LT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUocmVuZGVyT2JqZWN0KTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9
IHJlbmRlck9iamVjdC0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCpy
ZW5kZXJPYmplY3QpOwogCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OmZpbmRBbmNlc3RvcjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PigqYXhPYmplY3QsIHRydWUsIFtdIChjb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0JiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC5yb2xlVmFsdWUoKSA9
PSBBY2Nlc3NpYmlsaXR5Um9sZTo6SGVhZGluZzsKQEAgLTI5NjksNyArMjk2OSw3IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNQcmVzc0FjdGlvbigpIGNvbnN0CiAgICAgaWYg
KCFjYWNoZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBhdXRvKiBheE9iamVjdCA9IGFj
dGlvbkVsZW1lbnQgIT0gZWxlbWVudCgpID8gY2FjaGUtPmdldE9yQ3JlYXRlKGFjdGlvbkVsZW1l
bnQuZ2V0KCkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBheE9iamVjdCA9IGFjdGlvbkVsZW1lbnQg
IT0gZWxlbWVudCgpID8gY2FjaGUtPmdldE9yQ3JlYXRlKCphY3Rpb25FbGVtZW50KSA6IG51bGxw
dHI7CiAgICAgaWYgKCFheE9iamVjdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTMyMTAs
NyArMzIxMCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVs
ZW1lbnRBY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQCiAgICAgICAgIC8vIE5vcm1hbGl6
ZSB0aGUgcG9pbnQgZm9yIHRoZSB3aWRnZXQncyBib3VuZHMuCiAgICAgICAgIGlmICh3aWRnZXQg
JiYgd2lkZ2V0LT5pc0xvY2FsRnJhbWVWaWV3KCkpIHsKICAgICAgICAgICAgIGlmIChBWE9iamVj
dENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y2FjaGUtPmdldE9yQ3JlYXRlKHdpZGdldCktPmFjY2Vzc2liaWxpdHlIaXRUZXN0KEludFBvaW50
KHBvaW50IC0gd2lkZ2V0LT5mcmFtZVJlY3QoKS5sb2NhdGlvbigpKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0ZSgqd2lkZ2V0KS0+YWNjZXNzaWJpbGl0eUhpdFRl
c3QoSW50UG9pbnQocG9pbnQgLSB3aWRnZXQtPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcAppbmRleCAz
ZmVhNGViODNlNjYuLjYwZjdhNzBjZTU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNw
cApAQCAtNjQsNyArNjQsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9y
Ojp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKIAogICAgIC8vIFRoZSBIVE1MIHNwZWMgZW5jb3Vy
YWdlcyBhdXRob3JzIHRvIGluY2x1ZGUgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBt
ZXRlcidzIHN0YXRlIGluCiAgICAgLy8gdGhlIGVsZW1lbnQncyBjb250ZW50cy4gV2UnbGwgZmFs
bCBiYWNrIG9uIHRoYXQgaWYgdGhlcmUgaXMgbm90IGEgbW9yZSBhY2Nlc3NpYmxlIGFsdGVybmF0
aXZlLgotICAgIGlmIChhdXRvKiBub2RlT2JqZWN0ID0gZHluYW1pY0Rvd25jYXN0PEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0PihheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKG1ldGVyLmdldCgp
KSkpCisgICAgaWYgKGF1dG8qIG5vZGVPYmplY3QgPSBkeW5hbWljRG93bmNhc3Q8QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q+KGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoKm1ldGVyKSkpCiAg
ICAgICAgIGRlc2NyaXB0aW9uID0gbm9kZU9iamVjdC0+YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9u
Rm9yQ2hpbGRyZW4oKTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi5pc0VtcHR5KCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAppbmRleCBkY2QyMDJiMGNkY2QuLjA5MjBhODU0NzYzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCkBAIC0yMjksMTcgKzIyOSwxOSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpmaXJzdENoaWxkKCkgY29uc3QKICAgICBpZiAoIW1fcmVu
ZGVyZXIpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGls
ZCgpOwogICAgIAotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGRDb25z
aWRlcmluZ0NvbnRpbnVhdGlvbigqbV9yZW5kZXJlcik7CisgICAgaWYgKGF1dG8qIGZpcnN0Q2hp
bGQgPSBmaXJzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oKm1fcmVuZGVyZXIpKSB7Cisg
ICAgICAgIGF1dG8qIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpOworICAgICAgICByZXR1cm4gY2Fj
aGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUoKmZpcnN0Q2hpbGQpIDogbnVsbHB0cjsKKyAgICB9CiAK
ICAgICAvLyBJZiBhbiBvYmplY3QgY2FuJ3QgaGF2ZSBjaGlsZHJlbiwgdGhlbiBpdCBpcyB1c2lu
ZyB0aGlzIG1ldGhvZCB0byBoZWxwCiAgICAgLy8gY2FsY3VsYXRlIHNvbWUgaW50ZXJuYWwgcHJv
cGVydHkgKGxpa2UgaXRzIGRlc2NyaXB0aW9uKS4KICAgICAvLyBJbiB0aGlzIGNhc2UsIGl0IHNo
b3VsZCBjaGVjayB0aGUgTm9kZSBsZXZlbCBmb3IgY2hpbGRyZW4gaW4gY2FzZSB0aGV5J3JlCiAg
ICAgLy8gbm90IHJlbmRlcmVkIChsaWtlIGEgPG1ldGVyPiBlbGVtZW50KS4KLSAgICBpZiAoIWZp
cnN0Q2hpbGQgJiYgIWNhbkhhdmVDaGlsZHJlbigpKQorICAgIGlmICghY2FuSGF2ZUNoaWxkcmVu
KCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGlsZCgp
OwogCi0gICAgYXV0byBvYmplY3RDYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKLSAgICByZXR1cm4g
b2JqZWN0Q2FjaGUgPyBvYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUoZmlyc3RDaGlsZCkgOiBudWxs
cHRyOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYXN0Q2hpbGQoKSBjb25zdApAQCAtMjQ3LDEzICsyNDks
MTUgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bGFz
dENoaWxkKCkgY29uc3QKICAgICBpZiAoIW1fcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKCk7CiAKLSAgICBSZW5kZXJPYmplY3QqIGxh
c3RDaGlsZCA9IGxhc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKCptX3JlbmRlcmVyKTsK
KyAgICBpZiAoYXV0byogbGFzdENoaWxkID0gbGFzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRp
b24oKm1fcmVuZGVyZXIpKSB7CisgICAgICAgIGF1dG8qIGNhY2hlID0gYXhPYmplY3RDYWNoZSgp
OworICAgICAgICByZXR1cm4gY2FjaGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUobGFzdENoaWxkKSA6
IG51bGxwdHI7CisgICAgfQogCi0gICAgaWYgKCFsYXN0Q2hpbGQgJiYgIWNhbkhhdmVDaGlsZHJl
bigpKQorICAgIGlmICghY2FuSGF2ZUNoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKCk7CiAKLSAgICBhdXRvIG9iamVjdENhY2hlID0g
YXhPYmplY3RDYWNoZSgpOwotICAgIHJldHVybiBvYmplY3RDYWNoZSA/IG9iamVjdENhY2hlLT5n
ZXRPckNyZWF0ZShsYXN0Q2hpbGQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAogc3RhdGljIGlubGluZSBSZW5kZXJJbmxpbmUqIHN0YXJ0T2ZDb250aW51YXRpb25zKFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIpCkBAIC0zNTUsMTAgKzM1OSw4IEBAIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnByZXZpb3VzU2libGluZygpIGNvbnN0CiAg
ICAgaWYgKCFwcmV2aW91c1NpYmxpbmcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
aWYgKGF1dG8qIG9iamVjdENhY2hlID0gYXhPYmplY3RDYWNoZSgpKQotICAgICAgICByZXR1cm4g
b2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKHByZXZpb3VzU2libGluZyk7Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBhdXRvKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICByZXR1cm4g
Y2FjaGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUoKnByZXZpb3VzU2libGluZykgOiBudWxscHRyOwog
fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbGFzdENoaWxkSGFzQ29udGludWF0aW9uKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyKQpAQCAtNDI2LDExICs0MjgsMTEgQEAgQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bmV4dFNpYmxpbmcoKSBjb25zdAogICAgIC8v
IEFmdGVyIGNhc2UgNCwgdGhlcmUgYXJlIGNoYW5jZXMgdGhhdCBuZXh0U2libGluZyBoYXMgdGhl
IHNhbWUgbm9kZSBhcyB0aGUgY3VycmVudCByZW5kZXJlciwKICAgICAvLyB3aGljaCBtaWdodCBs
ZWFkIHRvIGFkZGluZyB0aGUgc2FtZSBjaGlsZCByZXBlYXRlZGx5LgogICAgIGlmIChuZXh0U2li
bGluZy0+bm9kZSgpICYmIG5leHRTaWJsaW5nLT5ub2RlKCkgPT0gbV9yZW5kZXJlci0+bm9kZSgp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXh0T2JqZWN0ID0gb2JqZWN0Q2FjaGUtPmdldE9yQ3Jl
YXRlKG5leHRTaWJsaW5nKSkKKyAgICAgICAgaWYgKGF1dG8qIG5leHRPYmplY3QgPSBvYmplY3RD
YWNoZS0+Z2V0T3JDcmVhdGUoKm5leHRTaWJsaW5nKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0
T2JqZWN0LT5uZXh0U2libGluZygpOwogICAgIH0KIAotICAgIGF1dG8qIG5leHRPYmplY3QgPSBv
YmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUobmV4dFNpYmxpbmcpOworICAgIGF1dG8qIG5leHRPYmpl
Y3QgPSBvYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUoKm5leHRTaWJsaW5nKTsKICAgICBhdXRvKiBu
ZXh0T2JqZWN0UGFyZW50ID0gbmV4dE9iamVjdCA/IG5leHRPYmplY3QtPnBhcmVudE9iamVjdCgp
IDogbnVsbHB0cjsKICAgICBhdXRvKiB0aGlzUGFyZW50ID0gcGFyZW50T2JqZWN0KCk7CiAgICAg
Ly8gTWFrZSBzdXJlIG5leHQgc2libGluZyBoYXMgdGhlIHNhbWUgcGFyZW50LgpAQCAtNTQ3LDcg
KzU0OSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnBhcmVudE9iamVjdCgpIGNvbnN0CiAgICAgLy8gRXhwb3NlIG1hcmtlcnMgdGhhdCBhcmUgbm90
IGRpcmVjdCBjaGlsZHJlbiBvZiBhIGxpc3QgaXRlbSB0b28uCiAgICAgaWYgKG1fcmVuZGVyZXIt
PmlzUmVuZGVyTGlzdE1hcmtlcigpKSB7CiAgICAgICAgIGlmIChhdXRvKiBsaXN0SXRlbSA9IGFu
Y2VzdG9yc09mVHlwZTxSZW5kZXJMaXN0SXRlbT4oKm1fcmVuZGVyZXIpLmZpcnN0KCkpIHsKLSAg
ICAgICAgICAgIGF1dG8qIHBhcmVudCA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobGlz
dEl0ZW0pOworICAgICAgICAgICAgYXV0byogcGFyZW50ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZSgqbGlzdEl0ZW0pOwogICAgICAgICAgICAgaWYgKHBhcmVudCAmJiB1bmNoZWNrZWRE
b3duY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0PigqcGFyZW50KS5tYXJrZXJSZW5kZXJl
cigpID09IG1fcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDsKICAgICAg
ICAgfQpAQCAtNTU1LDExICs1NTcsMTEgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6cGFyZW50T2JqZWN0KCkgY29uc3QKICNlbmRpZgogCiAgICAgaWYg
KGF1dG8qIHBhcmVudE9iamVjdCA9IHJlbmRlclBhcmVudE9iamVjdCgpKQotICAgICAgICByZXR1
cm4gY2FjaGUtPmdldE9yQ3JlYXRlKHBhcmVudE9iamVjdCk7CisgICAgICAgIHJldHVybiBjYWNo
ZS0+Z2V0T3JDcmVhdGUoKnBhcmVudE9iamVjdCk7CiAKICAgICAvLyBXZWJBcmVhJ3MgcGFyZW50
IHNob3VsZCBiZSB0aGUgc2Nyb2xsIHZpZXcgY29udGFpbmluZyBpdC4KICAgICBpZiAoaXNXZWJB
cmVhKCkpCi0gICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUoJm1fcmVuZGVyZXItPnZp
ZXcoKS5mcmFtZVZpZXcoKSk7CisgICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUobV9y
ZW5kZXJlci0+dmlldygpLmZyYW1lVmlldygpKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpA
QCAtNjA0LDcgKzYwNiw3IEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFu
Y2hvckVsZW1lbnQoKSBjb25zdAogICAgIGZvciAoY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXIo
KTsgY3VycmVudFJlbmRlcmVyICYmICFjdXJyZW50UmVuZGVyZXItPm5vZGUoKTsgY3VycmVudFJl
bmRlcmVyID0gY3VycmVudFJlbmRlcmVyLT5wYXJlbnQoKSkgewogICAgICAgICBpZiAoY3VycmVu
dFJlbmRlcmVyLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiBj
b250aW51YXRpb24gPSB1bmNoZWNrZWREb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnJlbnRSZW5k
ZXJlcikuY29udGludWF0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlLT5nZXRP
ckNyZWF0ZShjb250aW51YXRpb24pLT5hbmNob3JFbGVtZW50KCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0ZSgqY29udGludWF0aW9uKS0+YW5jaG9yRWxlbWVudCgp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC02NTQsNyArNjU2LDcgQEAgU3RyaW5nIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmhlbHBUZXh0KCkgY29uc3QKIAogICAgICAgICAvLyBPbmx5IHRh
a2UgaGVscCB0ZXh0IGZyb20gYW4gYW5jZXN0b3IgZWxlbWVudCBpZiBpdHMgYSBncm91cCBvciBh
biB1bmtub3duIHJvbGUuIElmIGhlbHAgd2FzIAogICAgICAgICAvLyBhZGRlZCB0byB0aG9zZSBr
aW5kcyBvZiBlbGVtZW50cywgaXQgaXMgbGlrZWx5IGl0IHdhcyBtZWFudCBmb3IgYSBjaGlsZCBl
bGVtZW50LgotICAgICAgICBpZiAoYXV0byogYXhBbmNlc3RvciA9IGF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUoYW5jZXN0b3IpKSB7CisgICAgICAgIGlmIChhdXRvKiBheEFuY2VzdG9yID0g
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgqYW5jZXN0b3IpKSB7CiAgICAgICAgICAgICBp
ZiAoIWF4QW5jZXN0b3ItPmlzR3JvdXAoKSAmJiBheEFuY2VzdG9yLT5yb2xlVmFsdWUoKSAhPSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6VW5rbm93bikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtMTAyNyw3ICsxMDI5LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpsYWJlbFRleHQoVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZGVyKQogQVhDb3Jl
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0aXRsZVVJRWxlbWVudCgpIGNvbnN0
CiB7CiAgICAgaWYgKG1fcmVuZGVyZXIgJiYgaXNGaWVsZHNldCgpKQotICAgICAgICByZXR1cm4g
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShkeW5hbWljRG93bmNhc3Q8UmVuZGVyQmxvY2s+
KG1fcmVuZGVyZXIuZ2V0KCkpLT5maW5kRmllbGRzZXRMZWdlbmQoUmVuZGVyQmxvY2s6OkZpZWxk
c2V0SW5jbHVkZUZsb2F0aW5nT3JPdXRPZkZsb3cpKTsKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0
Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoZHluYW1pY0Rvd25jYXN0PFJlbmRlckJsb2NrPigqbV9yZW5k
ZXJlciktPmZpbmRGaWVsZHNldExlZ2VuZChSZW5kZXJCbG9jazo6RmllbGRzZXRJbmNsdWRlRmxv
YXRpbmdPck91dE9mRmxvdykpOwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
dGl0bGVVSUVsZW1lbnQoKTsKIH0KICAgICAKQEAgLTE2NTcsNyArMTY1OSw3IEBAIEFYQ29yZU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmRvY3VtZW50TGluCiAgICAgUmVmPEhUTUxDb2xsZWN0aW9uPiBsaW5rcyA9IGRvY3VtZW50
LmxpbmtzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgYXV0byogY3VycmVudCA9IGxpbmtz
LT5pdGVtKGkpOyArK2kpIHsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gY3VycmVudC0+
cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGF4
T2JqZWN0ID0gZG9jdW1lbnQuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJlcik7
CisgICAgICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhPYmplY3QgPSBkb2N1
bWVudC5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCpyZW5kZXJlcik7CiAgICAgICAgICAg
ICBBU1NFUlQoYXhPYmplY3QpOwogICAgICAgICAgICAgaWYgKCFheE9iamVjdC0+YWNjZXNzaWJp
bGl0eUlzSWdub3JlZCgpICYmIGF4T2JqZWN0LT5pc0xpbmsoKSkKICAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGF4T2JqZWN0KTsKQEAgLTE3NTQsNyArMTc1Niw3IEBAIGJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6bm9kZUlzVGV4dENvbnRyb2woY29uc3QgTm9kZSogbm9kZSkg
Y29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNh
Y2hlID0gYXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBheE9iamVjdEZvck5vZGUgPSBjYWNoZS0+Z2V0T3JDcmVhdGUoY29uc3RfY2FzdDxOb2RlKj4o
bm9kZSkpKQorICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3RGb3JOb2Rl
ID0gY2FjaGUtPmdldE9yQ3JlYXRlKGNvbnN0X2Nhc3Q8Tm9kZSY+KCpub2RlKSkpCiAgICAgICAg
ICAgICByZXR1cm4gYXhPYmplY3RGb3JOb2RlLT5pc1RleHRDb250cm9sKCk7CiAgICAgfQogCkBA
IC0yMDM2LDcgKzIwMzgsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQbwogCiAgICAgYXV0byog
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGF1dG8qIGNhY2hlID0gcmVuZGVyZXIg
PyByZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCkgOiBudWxscHRyOwotICAgIFJl
ZlB0ciByZXN1bHQgPSBjYWNoZSA/IGNhY2hlLT5nZXRPckNyZWF0ZShyZW5kZXJlcikgOiBudWxs
cHRyOworICAgIFJlZlB0ciByZXN1bHQgPSBjYWNoZSA/IGNhY2hlLT5nZXRPckNyZWF0ZSgqcmVu
ZGVyZXIpIDogbnVsbHB0cjsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTIwODIsNyArMjA4NCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6Om9ic2VydmFibGVPYmplY3QoKSBjb25zdAogICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7IHJlbmRlcmVyICYmIHJlbmRl
cmVyLT5ub2RlKCk7IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpKSB7CiAgICAgICAgIGlm
IChyZW5kZXJPYmplY3RJc09ic2VydmFibGUoKnJlbmRlcmVyKSkgewogICAgICAgICAgICAgaWYg
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUoKnJlbmRlcmVyKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMjM1Miw3ICsyMzU0LDcgQEAgQWNjZXNzaWJpbGl0eVNWR1Jvb3QqIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnJlbW90ZVNWR1Jvb3RFbGVtZW50KENyZWF0aW9uQ2gKICAgICBpZiAoIWNh
Y2hlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8qIHJvb3RTVkdPYmplY3Qg
PSBjcmVhdGVJZk5lY2Vzc2FyeSA9PSBDcmVhdGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUocmVuZGVy
ZXJSb290KSA6IGNhY2hlLT5nZXQocmVuZGVyZXJSb290KTsKKyAgICBhdXRvKiByb290U1ZHT2Jq
ZWN0ID0gY3JlYXRlSWZOZWNlc3NhcnkgPT0gQ3JlYXRlID8gY2FjaGUtPmdldE9yQ3JlYXRlKCpy
ZW5kZXJlclJvb3QpIDogY2FjaGUtPmdldChyZW5kZXJlclJvb3QpOwogICAgIEFTU0VSVCghY3Jl
YXRlSWZOZWNlc3NhcnkgfHwgcm9vdFNWR09iamVjdCk7CiAgICAgcmV0dXJuIGR5bmFtaWNEb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5U1ZHUm9vdD4ocm9vdFNWR09iamVjdCk7CiB9CkBAIC0yMzkyLDgg
KzIzOTQsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZEF0dGFjaG1lbnRD
aGlsZHJlbigpCiAgICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JBdHRhY2htZW50Vmlldygp
OwogICAgIGlmICghd2lkZ2V0IHx8ICEod2lkZ2V0LT5pc0xvY2FsRnJhbWVWaWV3KCkgfHwgd2lk
Z2V0LT5pc1JlbW90ZUZyYW1lVmlldygpKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGFk
ZENoaWxkKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUod2lkZ2V0KSk7CisKKyAgICBhZGRD
aGlsZChheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCp3aWRnZXQpKTsKIH0KIAogI2lmIFBM
QVRGT1JNKENPQ09BKQpAQCAtMjQzMyw3ICsyNDM1LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphZGROb2RlT25seUNoaWxkcmVuKCkKICAgICAgICAgaWYgKGNoaWxkLT5yZW5k
ZXJlcigpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKG5vZGVIYXNEaXNw
bGF5Q29udGVudHMoKmNoaWxkKSB8fCBpc05vZGVBcmlhVmlzaWJsZShjaGlsZCkpIHsKKyAgICAg
ICAgaWYgKG5vZGVIYXNEaXNwbGF5Q29udGVudHMoKmNoaWxkKSB8fCBpc05vZGVBcmlhVmlzaWJs
ZSgqY2hpbGQpKSB7CiAgICAgICAgICAgICBoYXNOb2RlT25seUNoaWxkcmVuID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNDY1LDE0ICsyNDY3LDE0IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkTm9kZU9ubHlDaGlsZHJlbigpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbm9kZUhhc0Rpc3BsYXlD
b250ZW50cygqY2hpbGQpICYmICFpc05vZGVBcmlhVmlzaWJsZShjaGlsZCkpCisgICAgICAgIGlm
ICghbm9kZUhhc0Rpc3BsYXlDb250ZW50cygqY2hpbGQpICYmICFpc05vZGVBcmlhVmlzaWJsZSgq
Y2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgdW5zaWduZWQgcHJldmlv
dXNTaXplID0gbV9jaGlsZHJlbi5zaXplKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25JbmRleCA+
IHByZXZpb3VzU2l6ZSkKICAgICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gcHJldmlvdXNTaXpl
OwogCi0gICAgICAgIGluc2VydENoaWxkKGNhY2hlLT5nZXRPckNyZWF0ZShjaGlsZCksIGluc2Vy
dGlvbkluZGV4KTsKKyAgICAgICAgaW5zZXJ0Q2hpbGQoY2FjaGUtPmdldE9yQ3JlYXRlKCpjaGls
ZCksIGluc2VydGlvbkluZGV4KTsKICAgICAgICAgaW5zZXJ0aW9uSW5kZXggKz0gKG1fY2hpbGRy
ZW4uc2l6ZSgpIC0gcHJldmlvdXNTaXplKTsKICAgICB9CiB9CkBAIC0yNDg5LDcgKzI0OTEsNyBA
QCBSZW5kZXJPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hcmtlclJlbmRlcmVy
KCkgY29uc3QKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkTGlzdEl0ZW1NYXJr
ZXIoKQogewogICAgIGlmIChhdXRvKiBtYXJrZXIgPSBtYXJrZXJSZW5kZXJlcigpKQotICAgICAg
ICBpbnNlcnRDaGlsZChheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKG1hcmtlciksIDApOwor
ICAgICAgICBpbnNlcnRDaGlsZChheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKCptYXJrZXIp
LCAwKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwCmluZGV4IGYwNzMyNmM1OTFjMS4uMTJm
Njg4NmNkOWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlTVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcApAQCAtNzQsNyArNzQsNyBAQCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudDo6dGFyZ2V0Rm9yVXNlRWxlbWVudCgp
IGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGF1dG8qIGNhY2hlID0g
YXhPYmplY3RDYWNoZSgpKQotICAgICAgICByZXR1cm4gY2FjaGUtPmdldE9yQ3JlYXRlKHRhcmdl
dC5lbGVtZW50LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0ZSgqdGFy
Z2V0LmVsZW1lbnQpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwCmlu
ZGV4IDUyMTIyMmFmNjAwMy4uZGNjYzVlZDU4OGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxWaWV3LmNwcApAQCAtMTgw
LDcgKzE4MCw3IEBAIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIqIEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3OjphZGRDaGlsZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjCiAgICAgaWYgKCFjYWNoZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvJiBzY3JvbGxCYXJPYmplY3QgPSB1bmNo
ZWNrZWREb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyPigqY2FjaGUtPmdldE9yQ3JlYXRl
KHNjcm9sbGJhcikpOworICAgIGF1dG8mIHNjcm9sbEJhck9iamVjdCA9IHVuY2hlY2tlZERvd25j
YXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI+KCpjYWNoZS0+Z2V0T3JDcmVhdGUoKnNjcm9sbGJh
cikpOwogICAgIHNjcm9sbEJhck9iamVjdC5zZXRQYXJlbnQodGhpcyk7CiAgICAgYWRkQ2hpbGQo
JnNjcm9sbEJhck9iamVjdCk7CiAgICAgcmV0dXJuICZzY3JvbGxCYXJPYmplY3Q7CkBAIC0yNTUs
NyArMjU1LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc6
OndlYkFyZWFPYmplY3QoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlm
IChhdXRvKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlLT5n
ZXRPckNyZWF0ZShkb2N1bWVudCk7CisgICAgICAgIHJldHVybiBjYWNoZS0+Z2V0T3JDcmVhdGUo
KmRvY3VtZW50KTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMzE3LDcgKzMxNyw3IEBA
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3OjpwYXJlbnRPYmpl
Y3QoKSBjb25zdAogICAgICAgICBvd25lciA9IHJlbW90ZUZyYW1lVmlldy0+ZnJhbWUoKS5vd25l
ckVsZW1lbnQoKTsKIAogICAgIGlmIChvd25lciAmJiBvd25lci0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGNhY2hlLT5nZXRPckNyZWF0ZShvd25lci5nZXQoKSk7CisgICAgICAgIHJldHVy
biBjYWNoZS0+Z2V0T3JDcmVhdGUoKm93bmVyKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUu
Y3BwCmluZGV4IGU0OTFjZTQ5MWVjYi4uNzM1YTk4NDI4NmY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCkBAIC0xODYsNyAr
MTg2LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKCkgY29uc3QKICAg
ICAgICAgZGlkVG9wU2VjdGlvbkNoZWNrID0gdHJ1ZTsKIAogICAgICAgICAvLyBJZiB0aGUgdG9w
IHNlY3Rpb24gaGFzIGFueSBub24tZ3JvdXAgcm9sZSwgdGhlbiBkb24ndCBtYWtlIHRoaXMgYSBk
YXRhIHRhYmxlLiBUaGUgYXV0aG9yIHByb2JhYmx5IHdhbnRzIHRvIHVzZSB0aGUgcm9sZSBvbiB0
aGUgc2VjdGlvbi4KLSAgICAgICAgaWYgKGF1dG8qIGF4VGFibGVTZWN0aW9uID0gY2FjaGUtPmdl
dE9yQ3JlYXRlKHRhYmxlU2VjdGlvbkVsZW1lbnQpKSB7CisgICAgICAgIGlmIChhdXRvKiBheFRh
YmxlU2VjdGlvbiA9IGNhY2hlLT5nZXRPckNyZWF0ZSgqdGFibGVTZWN0aW9uRWxlbWVudCkpIHsK
ICAgICAgICAgICAgIGF1dG8gcm9sZSA9IGF4VGFibGVTZWN0aW9uLT5yb2xlVmFsdWUoKTsKICAg
ICAgICAgICAgIGlmICghYXhUYWJsZVNlY3Rpb24tPmlzR3JvdXAoKSAmJiByb2xlICE9IEFjY2Vz
c2liaWxpdHlSb2xlOjpVbmtub3duICYmIHJvbGUgIT0gQWNjZXNzaWJpbGl0eVJvbGU6Oklnbm9y
ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02NDQsMTAgKzY0NCwxMCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6YWRkQ2hpbGRyZW4oKQogICAgICAgICAvLyBpbiB0cmVl
IG9yZGVyLCBydW4gdGhlIGFsZ29yaXRobSBmb3IgcHJvY2Vzc2luZyByb3dzLgogICAgICAgICBp
ZiAoUmVmUHRyIHRhYmxlU2VjdGlvbiA9IGR5bmFtaWNEb3duY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudD4oc2VjdGlvbkVsZW1lbnQpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJvdyA6
IGNoaWxkcmVuT2ZUeXBlPEhUTUxUYWJsZVJvd0VsZW1lbnQ+KCp0YWJsZVNlY3Rpb24pKSB7Ci0g
ICAgICAgICAgICAgICAgUmVmUHRyIHRhYmxlUm93ID0gZHluYW1pY0Rvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZVJvdz4oY2FjaGUtPmdldE9yQ3JlYXRlKCZyb3cpKTsKKyAgICAgICAgICAgICAg
ICBSZWZQdHIgdGFibGVSb3cgPSBkeW5hbWljRG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlUm93
PihjYWNoZS0+Z2V0T3JDcmVhdGUocm93KSk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc1Jvdyh0
YWJsZVJvdy5nZXQoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoUmVmUHRy
IHNlY3Rpb25BeE9iamVjdCA9IGNhY2hlLT5nZXRPckNyZWF0ZSgmc2VjdGlvbkVsZW1lbnQpKSB7
CisgICAgICAgIH0gZWxzZSBpZiAoUmVmUHRyIHNlY3Rpb25BeE9iamVjdCA9IGNhY2hlLT5nZXRP
ckNyZWF0ZShzZWN0aW9uRWxlbWVudCkpIHsKICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0Uobm9kZUhhc1JvbGUoJnNlY3Rpb25FbGVtZW50LCAicm93Z3JvdXAiX3MpLCAicHJvY2Vzc1Jv
d0dyb3VwIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIG5hdGl2ZSB0YWJsZSBzZWN0aW9uIGVs
ZW1lbnRzLCBvciByb2xlPXJvd2dyb3VwIGVsZW1lbnRzIik7CiAgICAgICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGNoaWxkIDogc2VjdGlvbkF4T2JqZWN0LT5jaGlsZHJlbigpKQogICAgICAgICAg
ICAgICAgIHByb2Nlc3NSb3dEZXNjZW5kaW5nSWZOZWVkZWQoY2hpbGQuZ2V0KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bC5jcHAKaW5kZXggNzAxNjllMDliZGM1Li40ODEzMWMzZjk3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcApA
QCAtNDAzLDggKzQwMyw4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJs
ZUNlbGw6OnRpdGxlVUlFbGVtZW50KCkgY29uc3QKIAogICAgIGlmICghaGVhZGVyQ2VsbC0+ZWxl
bWVudCgpIHx8ICFoZWFkZXJDZWxsLT5lbGVtZW50KCktPmhhc1RhZ05hbWUodGhUYWcpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5n
ZXRPckNyZWF0ZShoZWFkZXJDZWxsKTsKKworICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKCpoZWFkZXJDZWxsKTsKIH0KICAgICAKIGludCBBY2Nlc3NpYmlsaXR5VGFibGVD
ZWxsOjpheENvbHVtbkluZGV4KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCmluZGV4IGViMmZk
N2Y0NmJhMC4uZTYxYmUzOWJjNTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0KQEAgLTE3Nyw3ICsx
NzcsNyBAQCBzdGF0aWMgdm9pZCBhdHRyaWJ1dGVTdHJpbmdTZXRMYW5ndWFnZShOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nLCBSZQogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZlB0ciBvYmplY3QgPSByZW5kZXJlci0+ZG9jdW1lbnQoKS5h
eE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsKKyAgICBSZWZQdHIgb2JqZWN0
ID0gcmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSgqcmVu
ZGVyZXIpOwogICAgIE5TU3RyaW5nICpsYW5ndWFnZSA9IG9iamVjdC0+bGFuZ3VhZ2UoKTsKICAg
ICBpZiAobGFuZ3VhZ2UubGVuZ3RoKQogICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6
QWNjZXNzaWJpbGl0eVRva2VuTGFuZ3VhZ2UgdmFsdWU6bGFuZ3VhZ2UgcmFuZ2U6cmFuZ2VdOwpA
QCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGF0dHJpYnV0ZVN0cmluZ1NldFN0eWxlKE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIFJlbmRlCiAgICAgICAgIGF0dHJp
YnV0ZWRTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgQWNjZXNzaWJpbGl0eVRva2VuVW5kZXJs
aW5lLCBAWUVTLCByYW5nZSk7CiAKICAgICAvLyBBZGQgY29kZSBjb250ZXh0IGlmIHRoaXMgbm9k
ZSBpcyB3aXRoaW4gYSA8Y29kZT4gYmxvY2suCi0gICAgUmVmUHRyIG9iamVjdCA9IHJlbmRlcmVy
LT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUocmVuZGVyZXIpOworICAg
IFJlZlB0ciBvYmplY3QgPSByZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKCpyZW5kZXJlcik7CiAgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoY29uc3QgYXV0
byYgYXhPYmplY3QpIHsKICAgICAgICAgcmV0dXJuIGF4T2JqZWN0LmlzQ29kZSgpOwogICAgIH07
CkBAIC0yMzksNyArMjM5LDcgQEAgc3RhdGljIHZvaWQgYXR0cmlidXRlZFN0cmluZ1NldENvbXBv
c2l0aW9uQXR0cmlidXRlcyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICoKICAgICBpZiAoIXJl
bmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHIgb2JqZWN0ID0gcmVuZGVyZXIt
PmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJlcik7CisgICAg
UmVmUHRyIG9iamVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0
T3JDcmVhdGUoKnJlbmRlcmVyKTsKIAogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IDIxYWIyOGVlOWQz
YS4uMTdhNmJjZjI0MzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bQpAQCAtMjA1MSw3ICsyMDUxLDcgQEAgLSAoaWQpX2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2
aWV3OihpZClzdWJ2aWV3CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSByZW5kZXJlci0+ZG9jdW1lbnQo
KS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmogPSByZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKCpyZW5kZXJlcik7CiAgICAgaWYgKG9iaikKICAgICAgICAgcmV0dXJuIG9iai0+
cGFyZW50T2JqZWN0VW5pZ25vcmVkKCktPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9i
amVjdE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxp
dHlPYmplY3RNYWMubW0KaW5kZXggNzMyOGI1N2JhZDM0Li5kYzU2NWNiYWY5MGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0
eU9iamVjdE1hYy5tbQpAQCAtNjA0LDcgKzYwNCw3IEBAIHN0YXRpYyB2b2lkIGF0dHJpYnV0ZWRT
dHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0
CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhYXR0cmlidXRlZFN0cmluZ0NvbnRhaW5zUmFuZ2UoYXR0
clN0cmluZywgcmFuZ2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHIgb2JqZWN0ID0g
cmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJl
cik7CisgICAgUmVmUHRyIG9iamVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2Fj
aGUoKS0+Z2V0T3JDcmVhdGUoKnJlbmRlcmVyKTsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC02MTgsNyArNjE4LDcgQEAgc3RhdGljIHZvaWQgYXR0cmlidXRlZFN0cmlu
Z1NldEV4cGFuZGVkVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW4KICAg
ICBpZiAoIXJlbmRlcmVyIHx8ICFhdHRyaWJ1dGVkU3RyaW5nQ29udGFpbnNSYW5nZShhdHRyU3Ry
aW5nLCByYW5nZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0ciBvYmplY3QgPSByZW5k
ZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlcmVyKTsK
KyAgICBSZWZQdHIgb2JqZWN0ID0gcmVuZGVyZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgp
LT5nZXRPckNyZWF0ZSgqcmVuZGVyZXIpOwogICAgIGlmIChvYmplY3QtPnN1cHBvcnRzRXhwYW5k
ZWRUZXh0VmFsdWUoKSkKICAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOk5TQWNjZXNz
aWJpbGl0eUV4cGFuZGVkVGV4dFZhbHVlQXR0cmlidXRlIHZhbHVlOm9iamVjdC0+ZXhwYW5kZWRU
ZXh0VmFsdWUoKSByYW5nZTpyYW5nZV07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tCmluZGV4IDA1ODY5ZDBjNDQ2Ni4uMmNkZGYxZjRmYzNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtMjkxOCw3ICsyOTE4LDcgQEAgLSAoaWQp
X2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcqKXN1YnZpZXcKICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iaiA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUocmVuZGVyZXIpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IHJlbmRlcmVy
LT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoKnJlbmRlcmVyKTsKICAg
ICBpZiAob2JqKQogICAgICAgICByZXR1cm4gb2JqLT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKS0+
d3JhcHBlcigpOwogICAgIHJldHVybiBuaWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmlu
ZGV4IDBmYjY3MzNmNzliYy4uYjkxMmRiODk1MmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcApAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNz
aWJpbGl0eU9iamVjdEZvck5vZGUoTm9kZSYgbm9kZSkKICAgICAgICAgQVhPYmplY3RDYWNoZTo6
ZW5hYmxlQWNjZXNzaWJpbGl0eSgpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0
Q2FjaGUgPSBub2RlLmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKQotICAgICAgICByZXR1cm4g
YXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUoJm5vZGUpOworICAgICAgICByZXR1cm4gYXhPYmpl
Y3RDYWNoZS0+Z2V0T3JDcmVhdGUobm9kZSk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCBlMmU4
Y2UwNTY5ZWEuLmQ4MWMwYjQzMThlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMTIwNiw3ICsxMjA2LDcgQEAgUGF0aCBJbnNwZWN0b3JP
dmVybGF5OjpkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSYg
bm9kZSwgY28KIAogICAgIFN0cmluZyBlbGVtZW50Um9sZTsKICAgICBpZiAoQVhPYmplY3RDYWNo
ZSogYXhPYmplY3RDYWNoZSA9IG5vZGUuZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUoJm5v
ZGUpOyBheE9iamVjdCAmJiAhYXhPYmplY3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAg
ICAgICAgaWYgKGF1dG8qIGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUobm9k
ZSk7IGF4T2JqZWN0ICYmICFheE9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQogICAg
ICAgICAgICAgZWxlbWVudFJvbGUgPSBheE9iamVjdC0+Y29tcHV0ZWRSb2xlU3RyaW5nKCk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCmluZGV4IGQzMTMxY2JjZmFiZC4uYzExZGU0NzdlZDJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtMjIyMyw3ICsyMjIzLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE8KICAgICB1
bnNpZ25lZCBsZXZlbCA9IDA7CiAKICAgICBpZiAoYXV0byogYXhPYmplY3RDYWNoZSA9IG5vZGUu
ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGF4T2JqZWN0
ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUoJm5vZGUpKSB7CisgICAgICAgIGlmIChhdXRv
KiBheE9iamVjdCA9IGF4T2JqZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUpKSB7CiAKICAgICAg
ICAgICAgIGlmIChBWENvcmVPYmplY3QqIGFjdGl2ZURlc2NlbmRhbnQgPSBheE9iamVjdC0+YWN0
aXZlRGVzY2VuZGFudCgpKQogICAgICAgICAgICAgICAgIGFjdGl2ZURlc2NlbmRhbnROb2RlID0g
YWN0aXZlRGVzY2VuZGFudC0+bm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CmluZGV4IDc4ODBlMWQ5OGVjNS4uYmRmYWNjN2M4ZWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCkBAIC03MzQ5LDcgKzczNDksNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBJ
bnRlcm5hbHM6OmF4T2JqZWN0Rm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KSBjb25zdAogICAg
IFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKIAogICAgIGF1
dG8qIGNhY2hlID0gZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICByZXR1cm4gY2FjaGUg
PyBjYWNoZS0+Z2V0T3JDcmVhdGUoJmVsZW1lbnQpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gY2Fj
aGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUoZWxlbWVudCkgOiBudWxscHRyOwogfQogCiBTdHJpbmcg
SW50ZXJuYWxzOjpnZXRDb21wdXRlZExhYmVsKEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>