<?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>216656</bug_id>
          
          <creation_ts>2020-09-17 11:20:54 -0700</creation_ts>
          <short_desc>Selection API: Introduce LiveRangeSelectionEnabled, off by default</short_desc>
          <delta_ts>2020-09-28 15:31:55 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=189164</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>216325</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1689526</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-17 11:20:54 -0700</bug_when>
    <thetext>Selection API as documented in https://www.w3.org/TR/selection-api/ calls for behavior where the range returned is a live range that both reflects changes to the selection and can be modified to change the selection. This is a significant first step in implementing that, with a few loose ends remaining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689656</commentid>
    <comment_count>1</comment_count>
      <attachid>409090</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-17 17:01:11 -0700</bug_when>
    <thetext>Created attachment 409090
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689657</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-17 17:02:02 -0700</bug_when>
    <thetext>There are a few small changes from the patch that Sam reviewed in bug 216325, including things that addressed his feedback and Alex’s as well, and some other small tweaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689662</commentid>
    <comment_count>3</comment_count>
      <attachid>409093</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-17 17:35:45 -0700</bug_when>
    <thetext>Created attachment 409093
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689685</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-17 18:45:06 -0700</bug_when>
    <thetext>Committed r267220: &lt;https://trac.webkit.org/changeset/267220&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689687</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-17 18:46:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/69111988&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689700</commentid>
    <comment_count>6</comment_count>
      <attachid>409093</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-09-17 19:21:49 -0700</bug_when>
    <thetext>Comment on attachment 409093
Patch

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

&gt; Source/WebCore/editing/FrameSelection.cpp:1522
&gt; +LayoutUnit FrameSelection::lineDirectionPointForBlockDirectionNavigation(PositionType type)

Can we convert PositionType to enum class?

&gt; Source/WebCore/editing/FrameSelection.cpp:2795
&gt; +        }

Need a FIXME here to keep the JS wrapper of this range alive here too.

&gt; Source/WebCore/editing/FrameSelection.cpp:2812
&gt; +    updateFromAssociatedLiveRange();

Ditto.

&gt; Source/WebCore/editing/FrameSelection.cpp:2829
&gt; +        disassociateLiveRange();

Like I commented in the other bug, I think it would be useful to leave a comment here explaining when this case will be hit.

&gt; Source/WebCore/editing/FrameSelection.h:52
&gt; +enum EUserTriggered : bool { NotUserTriggered, UserTriggered };
&gt; +enum RevealExtentOption : bool { RevealExtent, DoNotRevealExtent };

Can we use enum class for these?

&gt; Source/WebCore/editing/FrameSelection.h:313
&gt; +    WeakPtr&lt;Document&gt; m_document;

Nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689803</commentid>
    <comment_count>7</comment_count>
      <attachid>409093</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-18 08:58:27 -0700</bug_when>
    <thetext>Comment on attachment 409093
Patch

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

&gt;&gt; Source/WebCore/editing/FrameSelection.cpp:1522
&gt;&gt; +LayoutUnit FrameSelection::lineDirectionPointForBlockDirectionNavigation(PositionType type)
&gt; 
&gt; Can we convert PositionType to enum class?

OK, I will do that in a follow-up.

&gt;&gt; Source/WebCore/editing/FrameSelection.cpp:2795
&gt;&gt; +        }
&gt; 
&gt; Need a FIXME here to keep the JS wrapper of this range alive here too.

I think we only need one FIXME, in associateLiveRange. Not three in three different functions. Not sure why I put it in disassociateLiveRange!

In any case, I am mostly done with the patch that resolves the problem now, so figuring out how many FIXMEs we want and where is a very short term issue.

&gt;&gt; Source/WebCore/editing/FrameSelection.cpp:2829
&gt;&gt; +        disassociateLiveRange();
&gt; 
&gt; Like I commented in the other bug, I think it would be useful to leave a comment here explaining when this case will be hit.

Yes, sorry, I forgot. Will add a comment.

&gt;&gt; Source/WebCore/editing/FrameSelection.h:52
&gt;&gt; +enum RevealExtentOption : bool { RevealExtent, DoNotRevealExtent };
&gt; 
&gt; Can we use enum class for these?

OK. Will do. Also rename EUserTriggered to remove the E.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409090</attachid>
            <date>2020-09-17 17:01:11 -0700</date>
            <delta_ts>2020-09-17 17:33:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216656-20200917170110.patch</filename>
            <type>text/plain</type>
            <size>89424</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc5Y2RmYTQ3ZjdhMWE2
YzFlY2VmNWNmYzg2NDYxYjUyZTU3YWJjMS4uZTg2YmZjZTExZTYxYjc2YWRhNWQzOWYxZjgzMWEz
MjZkZDNmNjRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NyBAQAorMjAyMC0wOS0xNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2VsZWN0aW9uIEFQSTogSW50
cm9kdWNlIExpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQsIG9mZiBieSBkZWZhdWx0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIEZvciBpbnRlcm9wZXJhYmlsaXR5
LCB0aGUgU2VsZWN0aW9uIEFQSSByZXF1aXJlcyBiZWhhdmlvciB0aGF0IGlzIHF1aXRlIGRpZmZl
cmVudAorICAgICAgICBmcm9tIGhvdyBvdXIgU2VsZWN0aW9uIG9iamVjdCBoYXMgYmVoYXZlcyBo
aXN0b3JpY2FsbHkuIFNwZWNpZmljYWxseSwgdGhlIHJhbmdlCisgICAgICAgIHJldHVybmVkIGlz
IGEgbGl2ZSByYW5nZSB0aGF0IHVwZGF0ZSBhcyB0aGUgc2VsZWN0aW9uIHVwZGF0ZXMgYW5kIHRo
ZSBzZWxlY3Rpb24sCisgICAgICAgIGluIHR1cm4sIGlzIHVwZGF0ZWQgaWYgdGhlIHJldHVybmVk
IHJhbmdlIGlzIG1vZGlmaWVkLgorCisgICAgICAgIFRoaXMgc2lnbmlmaWNhbnQgY2hhbmdlIHdp
bGwgaGF2ZSBjb21wYXRpYmlsaXR5IGltcGFjdCBvbiB3ZWJzaXRlcyBhbmQgb3RoZXIKKyAgICAg
ICAgY29udGVudCB0aGF0IGFzc3VtZXMgdGhlIGxlZ2FjeSAgV2ViS2l0IGJlaGF2aW9yLCBzbyB3
ZSBhcmUgZGV2ZWxvcGluZyBpdCBiZWhpbmQKKyAgICAgICAgYSBmZWF0dXJlIGZsYWcsIExpdmVS
YW5nZVNlbGVjdGlvbkVuYWJsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRo
ZSBsaXZlIHJhbmdlIHNlbGVjdGlvbiBiZWhpbmQgdGhlIGZsYWcsIGJ1dCBsZWF2ZXMgb25lCisg
ICAgICAgIHNpZ25pZmljYW50IGFyZWEgdW5yZXNvbHZlZCwgY2hhbmdpbmcgc2VsZWN0aW9uIHRv
IGtlZXAgdHJhY2sgb2YgdGhlIG9yaWdpbmFsCisgICAgICAgIGVuZHBvaW50cyByYXRoZXIgdGhh
biBvbmx5IGNhbm9uaWNhbGl6ZWQgZW5kcG9pbnRzLCBhbmQgYSBjb3VwbGUgb2YgbG9vc2UgZW5k
cywKKyAgICAgICAgbGlmZXRpbWUgb2YgcmlkZS1hbG9uZyBwcm9wZXJ0aWVzIG9uIHRoZSBsaXZl
IHJhbmdlIG9iamVjdCwgYW5kIHVwZGF0aW5nIHRlc3QKKyAgICAgICAgZXhwZWN0YXRpb25zIGZv
ciB0aGUgbmV3IGJlaGF2aW9yLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YSk6IEZpeGVkIHRpbWluZyBv
ZiBjYWxsIHRvIERvY3VtZW50Ojp0ZXh0UmVtb3ZlZAorICAgICAgICBieSBsZXR0aW5nIHNldERh
dGFBbmRVcGRhdGUgZG8gaXQ7IG90aGVyd2lzZSBpdCBjYW4gYmUgY2FsbGVkIGFmdGVyIHRoZSBz
ZWxlY3Rpb24KKyAgICAgICAgaGFzIGJlZW4gdXBkYXRlZCwgYW5kIHRoZSByYW5nZSBnZXRzIHVw
ZGF0ZWQgdHdpY2UuCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjphcHBlbmREYXRh
KTogUGFzcyBVcGRhdGVMaXZlUmFuZ2VzOjpObyB0byBzZXREYXRhQW5kVXBkYXRlLAorICAgICAg
ICB0byBwcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgImRvbid0IHVwZGF0ZSByYW5nZXMiIGJlaGF2aW9y
IGZvciBub3cgYXQgbGVhc3QuCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjppbnNl
cnREYXRhKTogRml4ZWQgdGltaW5nIG9mIGNhbGwgdG8gRG9jdW1lbnQ6OnRleHRJbnNlcnRlZAor
ICAgICAgICBieSBsZXR0aW5nIHNldERhdGFBbmRVcGRhdGUgZG8gaXQsIGZvciB0aGUgc2FtZSBy
ZWFzb24gYXMgYWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkZWxldGVE
YXRhKTogRGl0dG8sIGZvciB0ZXh0UmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rl
ckRhdGE6OnJlcGxhY2VEYXRhKTogRGl0dG8sIGZvciB0ZXh0UmVtb3ZlZCBhbmQgdGV4dEluc2Vy
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZSk6
IEFkZGVkIFVwZGF0ZUxpdmVSYW5nZXMgYXJndW1lbnQgYW5kCisgICAgICAgIGNhbGxzIHRvIHRl
eHRSZW1vdmVkIGFuZCB0ZXh0SW5zZXJ0ZWQsIGFmdGVyIHNldHRpbmcgZGF0YSwgYnV0IGJlZm9y
ZSBvdGhlciB1cGRhdGVzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDogTWFkZSBz
ZXREYXRhQW5kVXBkYXRlIHByb3RlY3RlZCBhbmQgYWRkZWQgVXBkYXRlTGl2ZVJhbmdlcy4KKwor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBBZGRlZCBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUg
Tm9kZTo6Y29udGFpbnMgZnVuY3Rpb24uIFdoZW4gdGhlCisgICAgICAgIG5vZGUgaW4gcXVlc3Rp
b24gaXMgdGhlIGRvY3VtZW50IHdlIGNhbiBqdXN0IGNoZWNrIHRyZWVTY29wZSBhbmQgaXNDb25u
ZWN0ZWQKKyAgICAgICAgcmF0aGVyIHRoYW4gd2Fsa2luZyB1cCB0aGUgdHJlZS4KKworICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRGVzY2VuZGFudE9m
IGNvbnN0KTogTW92ZWQgc3BlY2lhbCBjYXNlIGZvciBkb2N1bWVudCB0byB0aGUgdG9wCisgICAg
ICAgIG9mIHRoZSBmdW5jdGlvbjsgc2VlbXMgYSBtb3JlIGltcG9ydGFudCBzcGVjaWFsIGNhc2Ug
dGhhbiBkaXNjb25uZWN0ZWQgbm9kZXMgYW5kCisgICAgICAgIG5vZGVzIHdpdGggbm8gY2hpbGRy
ZW4uCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRh
bnRPZiBjb25zdCk6IFJld29yZGVkIHRoZSBGSVhNRSBmb3IgY2xhcml0eS4KKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbnRhaW5zIGNvbnN0KTogQ2hhbmdlZCB0aGlzIHRvIHRva2UgYSByZWZl
cmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisgICAgICAgIFRoZSBwb2ludGVyIGZsYXZvciBp
cyBub3cgaW5saW5lZCBpbiB0aGUgaGVhZGVyLgorCisgICAgICAgICogZG9tL05vZGUuaDogQWRk
ZWQgYW4gb3ZlcmxvYWQgb2YgY29udGFpbnMgdGhhdCB0YWtlcyBhIHJlZmVyZW5jZSwgYW5hbG9n
b3VzIHRvIHdoYXQKKyAgICAgICAgd2UgYWxyZWFkeSBoYXZlIGZvciBpc0Rlc2NlbmRhbnRPZi4K
KworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6UG9zaXRpb24pOiBSZW1vdmVkIHRvby1zdHJpY3QgYXNzZXJ0aW9ucy4gV2hlbiB3ZSBzdGFy
dCB1c2luZworICAgICAgICBwb3NpdGlvbnMgdG8gcmVwcmVzZW50IGFyYml0cmFyeSBET00gcG9z
aXRpb25zIGZvciB0aGluZ3Mgb3V0c2lkZSBlZGl0aW5nIHdlIHdvbid0CisgICAgICAgIHdhbnQg
dGhlc2UgYXNzZXJ0aW9ucyBhbnkgbW9yZSwgYW5kIHdlIGhpdCB0aGVtIHdoZW4gd2UgdXNlIFBv
c2l0aW9uIGluIGEgbW9yZQorICAgICAgICBzdHJhaWdodGZvcndhcmQgd2F5LCBsaWtlIHNvbWUg
Y2FzZXMgaW4gdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpwcmltYXJ5
RGlyZWN0aW9uIGNvbnN0KTogQWRkZWQgYSBtaXNzaW5nIG51bGwgY2hlY2suIFRoaXMgY2FzZQor
ICAgICAgICBpcyBoaXQgaW4gc29tZSB0ZXN0IGNhc2VzIGluIHRoZSBuZXcgbW9kZS4KKworICAg
ICAgICAqIGRvbS9SYW5nZS5jcHA6IFJlbW92ZWQgc29tZSwgYnV0IHByb2JhYmx5IG5vdCBhbGws
IG9mIHRoZSB1bm5lZWRlZCBoZWFkZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6On5SYW5n
ZSk6IEFkZGVkIGFuIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp1cGRhdGVB
c3NvY2lhdGVkU2VsZWN0aW9uKTogQWRkZWQuIFRlbGxzIEZyYW1lU2VsZWN0aW9uIHRvIHVwZGF0
ZQorICAgICAgICB0aGUgc2VsZWN0aW9uIHdoZW4gdGhpcyBpcyB0aGUgbGl2ZSByYW5nZSBhc3Nv
Y2lhdGVkIHdpdGggdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp1cGRh
dGVEb2N1bWVudCk6IEFkZGVkIGFuIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZXRTdGFydCk6IENhbGwgdXBkYXRlQXNzb2NpYXRlZFNlbGVjdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpzZXRFbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpj
b2xsYXBzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnByb2Nlc3NDb250ZW50
cyk6IENhbGwgY29sbGFwc2UgaGVyZSB0byBzaGFyZSBzbGlnaHRseSBtb3JlCisgICAgICAgIGNv
ZGUgc28gd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIHVwZGF0ZUFzc29jaWF0ZWRTZWxlY3Rpb24gaGVy
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjaGVja05vZGVPZmZzZXRQYWlyKTogTWFkZSB0
aGlzIGEgc3RhdGljIGZ1bmN0aW9uIHNvIGl0IGNhbgorICAgICAgICBiZSB1c2VkIG91dHNpZGUg
dGhlIFJhbmdlIGNsYXNzLiBBbHNvIGZpeGVkIGluZGVudGF0aW9uIG9mIHRoZSBzd2l0Y2ggc3Rh
dGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyk6IENh
bGwgdXBkYXRlQXNzb2NpYXRlZFNlbGVjdGlvbiBhbmQKKyAgICAgICAgdXBkYXRlRG9jdW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpzZXRCb3RoRW5kcG9pbnRzKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6dXBkYXRlRnJvbVNlbGVjdGlvbik6IEFkZGVkLiBVc2VzIHNldEJvdGhF
bmRwb2ludHMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVMaXZlUmFuZ2UpOiBSZWZhY3RvcmVk
IHRvIGNhbGwgc2V0Qm90aEVuZHBvaW50cy4KKworICAgICAgICAqIGRvbS9SYW5nZS5oOiBBZGRl
ZCBkaWRBc3NvY2lhdGVXaXRoU2VsZWN0aW9uLCBkaWREaXNhc3NvY2lhdGVGcm9tU2VsZWN0aW9u
LAorICAgICAgICB1cGRhdGVGcm9tU2VsZWN0aW9uLCB1cGRhdGVBc3NvY2lhdGVkU2VsZWN0aW9u
LCBhbmQgbV9pc0Fzc29jaWF0ZWRXaXRoU2VsZWN0aW9uLgorICAgICAgICBBbHNvIG1hZGUgY2hl
Y2tOb2RlT2Zmc2V0UGFpciBhIHB1YmxpYyBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uIGluc3RlYWQg
b2YgYQorICAgICAgICBwcml2YXRlIG5vbi1zdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAg
ICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6c2V0RGF0YUFuZFVw
ZGF0ZSk6IFVwZGF0ZSB0byBwYXNzIGFsb25nIFVwZGF0ZUxpdmVSYW5nZXMgYXJndW1lbnQuCisg
ICAgICAgICogZG9tL1RleHQuaDogRGl0dG8uIEFsc28gbWFkZSB0aGUgb3ZlcnJpZGUgb2Ygc2V0
RGF0YUFuZFVwZGF0ZSBwcml2YXRlLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0
aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6IENhbGwKKyAgICAgICAgdXBkYXRlQXNzb2NpYXRlZExp
dmVSYW5nZSBhZnRlciB1cGRhdGluZyB0aGUgc2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
Y29udGFpbnNFbmRwb2ludHMpOiBBZGRlZC4gVXNlZCB0byBjaGVjayBpZiBhIGxpdmUgcmFuZ2Ug
c3RpbGwgaGFzIHRoZQorICAgICAgICBkb2N1bWVudCBhcyBpdHMgcm9vdCBub2RlIHNvIGl0IGNh
biByZW1haW4gYXNzb2NpYXRlZCB0aGlzIHdpdGggdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjphc3NvY2lhdGVkTGl2ZVJhbmdlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGlzYXNzb2NpYXRlTGl2ZVJhbmdlKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YXNzb2NpYXRlTGl2ZVJhbmdl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlRnJvbUFz
c29jaWF0ZWRMaXZlUmFuZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjp1cGRhdGVBc3NvY2lhdGVkTGl2ZVJhbmdlKTogQWRkZWQuCisKKyAgICAgICAgKiBlZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IEFkZGVkIGFzc29jaWF0ZWRMaXZlUmFuZ2UsIGFzc29jaWF0
ZUxpdmVSYW5nZSwKKyAgICAgICAgZGlzYXNzb2NpYXRlTGl2ZVJhbmdlLCB1cGRhdGVGcm9tQXNz
b2NpYXRlZExpdmVSYW5nZSwgdXBkYXRlQXNzb2NpYXRlZExpdmVSYW5nZSwKKyAgICAgICAgYW5k
IG1fYXNzb2NpYXRlZExpdmVSYW5nZS4gQWxzbyBjaGFuZ2UgbV9kb2N1bWVudCB0byBhIFdlYWtQ
dHIgYW5kIGRvIHNvbWUKKyAgICAgICAgdGlkeWluZyB1cC4KKworICAgICAgICAqIHBhZ2UvRE9N
U2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvblNoYWRvd0FuY2VzdG9y
KTogQXNzZXJ0IHRoZSBsaXZlIHJhbmdlIHNldHRpbmcgaXMgZmFsc2UsCisgICAgICAgIHNpbmNl
IHRoaXMgY29kZSBpcyBub3QgdXNlZCBpbiB0aGF0IGNhc2UuIENoYW5nZWQgdGhlIHJldHVybiB0
eXBlIHRvIFJlZlB0ci4KKyAgICAgICAgQWRkcmVzcyB0aGUgRklYTUUgaGVyZSBieSBnZXR0aW5n
IHRoZSBkb2N1bWVudCBpbiBhIHNpbXBsZXIgd2F5LgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjpjcmVhdGUpOiBNb3ZlZCBoZXJlIGZyb20gdGhlIGhlYWRlci4KKyAgICAgICAgKFdl
YkNvcmU6OkRPTVNlbGVjdGlvbjo6ZnJhbWUgY29uc3QpOiBBZGRlZC4gUmV0dXJucyBhIFJlZlB0
ci4gVGhpcyBnZXRzIHJpZAorICAgICAgICBvZiB0aGUgbmVlZCBmb3IgdmFyaW91cyBpbnN0YW5j
ZXMgb2YgdGhlICJwcm90ZWN0b3IiIHBhdHRlcm4gaW4gdGhpcyBmaWxlLgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjpyYW5nZSBjb25zdCk6IEFkZGVkLiBSZXR1cm5zIHRoZSBzZWxl
Y3RlZCByYW5nZSwgYnV0CisgICAgICAgIGNoZWNrcyBmb3IgdGhlIHNoYWRvdyB0cmVlIGNhc2Ug
YW5kIHJldHVybnMgbnVsbCBpbiB0aGF0IGNhc2UuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxl
Y3Rpb246OmFuY2hvclBvc2l0aW9uIGNvbnN0KTogUmVkaWQgYXMgYSBtZW1iZXIgZnVuY3Rpb24u
CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmZvY3VzUG9zaXRpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YmFzZVBvc2l0aW9uIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmV4dGVudFBvc2l0aW9u
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFuY2hvck5v
ZGUgY29uc3QpOiBSZXdyb3RlIHRvIGJlIHNpbXBsZXIgdXNpbmcgdGhlCisgICAgICAgIGZ1bmN0
aW9ucyBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmZvY3VzTm9k
ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpmb2N1c09m
ZnNldCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpiYXNl
Tm9kZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpiYXNl
T2Zmc2V0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmV4
dGVudE5vZGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6
ZXh0ZW50T2Zmc2V0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rp
b246OmlzQ29sbGFwc2VkIGNvbnN0KTogUmV3cm90ZSB1c2luZyBET01TZWxlY3Rpb246OnJhbmdl
CisgICAgICAgIGFuZCBTaW1wbGVSYW5nZTo6Y29sbGFwc2VkLgorICAgICAgICAoV2ViQ29yZTo6
RE9NU2VsZWN0aW9uOjp0eXBlIGNvbnN0KTogVXBkYXRlZCBzaW5jZSBmcmFtZSByZXR1cm5zIFJl
ZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6cmFuZ2VDb3VudCBjb25zdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpjb2xsYXBzZSk6IEFkZGVk
IG5ldyBjb3JyZWN0ZWQgY2hlY2tpbmcgZm9yIHNwZWNpYWwKKyAgICAgICAgY2FzZXMsIGd1YXJk
ZWQgYnkgdGhlIHNldHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbGxh
cHNlVG9FbmQpOiBVcGRhdGVkIHNpbmNlIGZyYW1lIHJldHVybnMgUmVmUHRyLgorICAgICAgICB3
YXkgdG8gZG8gcHJvdGVjdGlvbi4gQWRkZWQgYSBjYWxsIHRvIGRpc2Fzc29jaWF0ZUxpdmVSYW5n
ZS4gTm8gbmVlZCB0byBwdXQKKyAgICAgICAgdW5kZXIgYSBzZXR0aW5nIGd1YXJkIHNpbmNlIGl0
IGRvZXMgbm90aGluZyBpZiBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRPTVNlbGVjdGlvbjo6ZW1wdHkpOiBDYWxsIHJlbW92ZUFsbFJhbmdlcyBzbyB3ZSBkb24n
dCBoYXZlIHR3bworICAgICAgICBjb3BpZXMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gdG8gbWFpbnRh
aW4uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnQpOiBV
c2UgbWFrZVJlZlB0ciwgYWRkZWQgY29ycmVjdGVkCisgICAgICAgIGNoZWNraW5nIGZvciBzcGVj
aWFsIGNhc2VzIGd1YXJkZWQgYnkgdGhlIHNldHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpET01T
ZWxlY3Rpb246OnNldFBvc2l0aW9uKTogQ2FsbCBjb2xsYXBzZSBzbyB3ZSBkb24ndCBoYXZlIHR3
bworICAgICAgICBjb3BpZXMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gdG8gbWFpbnRhaW4uCisgICAg
ICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Om1vZGlmeSk6IFVwZGF0ZWQgc2luY2UgZnJhbWUg
cmV0dXJucyBSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmV4dGVuZCk6
IERpdHRvLiBBbHNvIGFkZGVkIGNvcnJlY3RlZCBjaGVja2luZyBmb3IKKyAgICAgICAgc3BlY2lh
bCBjYXNlcyBndWFyZGVkIGJ5IHRoZSBzZXR0aW5nLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjpnZXRSYW5nZUF0KTogQWRkZWQgYSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gdGhh
dAorICAgICAgICBzaW1wbHkgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBsaXZlIHJhbmdlLCBjcmVh
dGluZyBvbmUgaWYgbmVlZGVkLCBndWFyZGVkCisgICAgICAgIGJ5IHRoZSBzZXR0aW5nLgorICAg
ICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMpOiBVcGRhdGVkIHNp
bmNlIGZyYW1lIHJldHVybnMgUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9u
OjphZGRSYW5nZSk6IEFkZGVkIGEgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHRoYXQKKyAgICAg
ICAgbWF0Y2hlcyB0aGUgc3BlY2lmaWNhdGlvbiwgZ3VhcmRlZCBieSB0aGUgc2V0dGluZy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6cmVtb3ZlUmFuZ2UpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogQWRkZWQgYSB2
ZXJzaW9uIG9mIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBzaW1wbHkgY2FsbHMgZGVsZXRl
Q29udGVudHMgb24gdGhlIGFzc29jaWF0ZWQgbGl2ZSByYW5nZSwKKyAgICAgICAgZ3VhcmRlZCBi
eSB0aGUgc2V0dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Y29udGFpbnNO
b2RlIGNvbnN0KTogUHV0IHRoZSB0ZXh0IG5vZGUgd29ya2Fyb3VuZAorICAgICAgICBpbnNpZGUg
YSBzZXR0aW5nIGNoZWNrLiBJIGFsc28gZmlndXJlZCBvdXQgd2h5IHdvcmthcm91bmQgd2FzIGFk
ZGVkOiBpdAorICAgICAgICB3b3JrcyBhcm91bmQgdW53YW50ZWQgcmFuZ2UgY2Fub25pY2FsaXph
dGlvbiBpbiB2YXJpb3VzIHRlc3RzLCBidXQgYWxzbworICAgICAgICBpbnRyb2R1Y2VzIGluY29y
cmVjdCBiZWhhdmlvci4gQWxzbyByZXdyb3RlIHRvIHVzZSBET01TZWxlY3Rpb246OnJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjp0b1N0cmluZyk6IFVzZSBET01TZWxlY3Rp
b246OnJhbmdlLCBndWFyZGVkIGJ5CisgICAgICAgIHRoZSBzZXR0aW5nLCBzbyB3ZSByZXR1cm4g
ZW1wdHkgc3RyaW5nIHdoZW4gc2VsZWN0aW9uIGlzIGluIHRoZSBzaGFkb3cgdHJlZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6c2hhZG93QWRqdXN0ZWROb2RlIGNvbnN0KTogV2hl
biB0aGUgbGl2ZSByYW5nZQorICAgICAgICBzZXR0aW5nIGlzIGVuYWJsZWQsIGFkanVzdCBieSBj
aGFuZ2luZyB0aGUgbm9kZSB0byBudWxscHRyLCBub3QgZmluZGluZyBhbgorICAgICAgICBhbmNl
c3RvciBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OnNo
YWRvd0FkanVzdGVkT2Zmc2V0IGNvbnN0KTogRGl0dG8sIGJ1dCBvZmZzZXQgMC4KKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6aXNWYWxpZEZvclBvc2l0aW9uIGNvbnN0KTogQXNzZXJ0
IHRoYXQgdGhlIGxpdmUgcmFuZ2UKKyAgICAgICAgc2VsZWN0aW9uIHNldHRpbmcgaXMgZGlzYWJs
ZWQsIGJlY2F1c2UgdGhpcyBpbmNvcnJlY3QgY2hlY2sgc2hvdWxkIG9ubHkgYmUKKyAgICAgICAg
dXNlZCB0byBwcmVzZXJ2ZSBsZWdhY3kgYmVoYXZpb3IgdW50aWwgd2UgYXJlIHJlYWR5IHRvIHR1
cm4gaXQgb24uCisKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5oOiBVcGRhdGVkIHNpbmNl
IHNldEJhc2VBbmRFeHRlbnQsIHNldFBvc2l0aW9uLCBhbmQKKyAgICAgICAgY29sbGFwc2UgY2Fu
IHJhaXNlIGV4Y2VwdGlvbnMsIGFsdGhvdWdoIHRoZXkgb25seSBkbyBzbyB3aGVuIHRoZSBsaXZl
IHJhbmdlCisgICAgICAgIHNlbGVjdGlvbiBzZXR0aW5nIGlzIG9uLiBBZGRlZCByZW1vdmVSYW5n
ZS4gTW92ZWQgdGhlIGNyZWF0ZSBmdW5jdGlvbgorICAgICAgICBvdXQgb2YgdGhlIGNsYXNzIGRl
ZmluaXRpb24gaW50byB0aGUgLmNwcCBmaWxlLiBNYWRlIHJldHVybiB2YWx1ZXMgb2YKKyAgICAg
ICAgYmFzZU5vZGUsIGV4dGVudE5vZGUsIGFuY2hvck5vZGUsIGZvY3VzTm9kZSwgYW5kIHNoYWRv
d0FkanVzdGVkTm9kZSBSZWZQdHIuCisgICAgICAgIE1hZGUgdG9TdHJpbmcgY29uc3QuIEFkZGVk
IGZyYW1lLCByYW5nZSwgYW5jaG9yUG9zaXRpb24sIGZvY3VzUG9zaXRpb24sCisgICAgICAgIGJh
c2VQb3NpdGlvbiwgYW5kIGV4dGVudFBvc2l0aW9uIHByaXZhdGUgZnVuY3Rpb25zLiBSZW1vdmVk
IHZpc2libGVTZWxlY3Rpb24uCisKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5pZGw6IFVw
ZGF0ZWQgZmlsZSB0byBtYXRjaCBhIHJlY2VudCBkcmFmdCBvZiB0aGUKKyAgICAgICAgU2VsZWN0
aW9uIHN0YW5kYXJkLCByZW9yZGVyaW5nIHRoaW5ncyB0byBtYXRjaCB0aGUgb3JkZXIgdGhleSBh
cHBlYXIgdGhlcmUuCisgICAgICAgIEFkZGVkIHJlbW92ZVJhbmdlLCBndWFyZGVkIGJ5IHRoZSBz
ZXR0aW5nLiBBbHNvIGdvdCByaWQgb2YgdGhlCisgICAgICAgIHVubmNlY2Vzc2FyeSAidW5kZWZp
bmVkIiBzdHJpbmcgZGVmYXVsdHMgZm9yIHRoZSBhcmd1bWVudHMgdG8gdGhlIG1vZGlmeQorICAg
ICAgICBtZXRob2Qgc2luY2UgdGhleSBoYXZlIG5vIGVmZmVjdCBvbiBvYnNlcnZlZCBiZWhhdmlv
ciBhbnl3YXkuCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLnlhbWw6IEFkZGVkIGxpdmVSYW5n
ZVNlbGVjdGlvbkVuYWJsZWQuCisKIDIwMjAtMDktMTcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2Fy
bHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBjYW5QbGF5VHlwZSgnYXVkaW8vbXBl
ZzsgY29kZWNzPSJtcDMiJykgcmV0dXJucyAiIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmMTEwMmQ0MzE4NjM2NWI4
NzE3Yzk3ZTlmMjAxM2M4ZWE3MjJiOTU3Li4wODIyYmRjNDk0MTVkMmNjOGFhOWVlZDQ0MmFjNjlm
NTEyNTA2NDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTA5LTE2ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTZWxlY3Rpb24gQVBJOiBJbnRyb2R1
Y2UgTGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCwgb2ZmIGJ5IGRlZmF1bHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjY1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNJ
bnRlcm5hbC55YW1sOiBBZGRlZCBMaXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkLgorCiAyMDIwLTA5
LTE3ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAg
IEVuYWJsZSBJVFAgaW4gV0tXZWJWaWV3cyBmb3IgYXBwcyB3aXRoIHRoZSBmdWxsIGJyb3dzZXIg
ZW50aXRsZW1lbnQgd2hvIGFyZSBub3QgbGlua2VkIHRvIGlPUyAxNC4wCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggMTMxMzlhMmE2MmQxMGE4NGU1ZTQ5OTBhZWFkYzVkOTVl
ZTRiNmE5My4uZjQ0YzEzZmYwNmVlNmFhZmM2NWVmN2MzYTE0ZjgzNWJiYzYwNDk3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAtNjMsNyArNjMsNiBAQCB2b2lkIENoYXJh
Y3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIFJlZjxDaGFyYWN0ZXJE
YXRhPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAogICAgIHNldERhdGFBbmRVcGRhdGUobm9uTnVs
bERhdGEsIDAsIG9sZExlbmd0aCwgbm9uTnVsbERhdGEubGVuZ3RoKCkpOwotICAgIGRvY3VtZW50
KCkudGV4dFJlbW92ZWQoKnRoaXMsIDAsIG9sZExlbmd0aCk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0
cmluZz4gQ2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGNvdW50KQpAQCAtMTE3LDEyICsxMTYsNyBAQCB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhOjpw
YXJzZXJBcHBlbmREYXRhKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsCiAK
IHZvaWQgQ2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGRhdGEpCiB7Ci0g
ICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKLSAgICBuZXdTdHIuYXBwZW5kKGRhdGEpOwotCi0g
ICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG1fZGF0YS5sZW5ndGgoKSwgMCwgZGF0YS5sZW5n
dGgoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNhbGwgdGV4dEluc2VydGVkIGhlcmU/
CisgICAgc2V0RGF0YUFuZFVwZGF0ZShtX2RhdGEgKyBkYXRhLCBtX2RhdGEubGVuZ3RoKCksIDAs
IGRhdGEubGVuZ3RoKCksIFVwZGF0ZUxpdmVSYW5nZXM6Ok5vKTsKIH0KIAogRXhjZXB0aW9uT3I8
dm9pZD4gQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0
cmluZyYgZGF0YSkKQEAgLTEzMCwxMiArMTI0LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFj
dGVyRGF0YTo6aW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkK
ICAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OwogCi0gICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKLSAgICBuZXdT
dHIuaW5zZXJ0KGRhdGEsIG9mZnNldCk7Ci0KLSAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwg
b2Zmc2V0LCAwLCBkYXRhLmxlbmd0aCgpKTsKLQotICAgIGRvY3VtZW50KCkudGV4dEluc2VydGVk
KCp0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOworICAgIFN0cmluZyBuZXdEYXRhID0gbV9k
YXRhOworICAgIG5ld0RhdGEuaW5zZXJ0KGRhdGEsIG9mZnNldCk7CisgICAgc2V0RGF0YUFuZFVw
ZGF0ZShuZXdEYXRhLCBvZmZzZXQsIDAsIGRhdGEubGVuZ3RoKCkpOwogCiAgICAgcmV0dXJuIHsg
fTsKIH0KQEAgLTE0NywxMiArMTM4LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0
YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogCiAgICAgY291
bnQgPSBzdGQ6Om1pbihjb3VudCwgbGVuZ3RoKCkgLSBvZmZzZXQpOwogCi0gICAgU3RyaW5nIG5l
d1N0ciA9IG1fZGF0YTsKLSAgICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgY291bnQpOwotCi0gICAg
c2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwotCi0gICAgZG9jdW1l
bnQoKS50ZXh0UmVtb3ZlZCgqdGhpcywgb2Zmc2V0LCBjb3VudCk7CisgICAgU3RyaW5nIG5ld0Rh
dGEgPSBtX2RhdGE7CisgICAgbmV3RGF0YS5yZW1vdmUob2Zmc2V0LCBjb3VudCk7CisgICAgc2V0
RGF0YUFuZFVwZGF0ZShuZXdEYXRhLCBvZmZzZXQsIGNvdW50LCAwKTsKIAogICAgIHJldHVybiB7
IH07CiB9CkBAIC0xNjQsMTUgKzE1MiwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDaGFyYWN0ZXJE
YXRhOjpyZXBsYWNlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjbwogCiAg
ICAgY291bnQgPSBzdGQ6Om1pbihjb3VudCwgbGVuZ3RoKCkgLSBvZmZzZXQpOwogCi0gICAgU3Ry
aW5nIG5ld1N0ciA9IG1fZGF0YTsKLSAgICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgY291bnQpOwot
ICAgIG5ld1N0ci5pbnNlcnQoZGF0YSwgb2Zmc2V0KTsKLQotICAgIHNldERhdGFBbmRVcGRhdGUo
bmV3U3RyLCBvZmZzZXQsIGNvdW50LCBkYXRhLmxlbmd0aCgpKTsKLQotICAgIC8vIHVwZGF0ZSB0
aGUgbWFya2VycyBmb3Igc3BlbGwgY2hlY2tpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcKLSAgICBk
b2N1bWVudCgpLnRleHRSZW1vdmVkKCp0aGlzLCBvZmZzZXQsIGNvdW50KTsKLSAgICBkb2N1bWVu
dCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBTdHJp
bmcgbmV3RGF0YSA9IG1fZGF0YTsKKyAgICBuZXdEYXRhLnJlbW92ZShvZmZzZXQsIGNvdW50KTsK
KyAgICBuZXdEYXRhLmluc2VydChkYXRhLCBvZmZzZXQpOworICAgIHNldERhdGFBbmRVcGRhdGUo
bmV3RGF0YSwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICByZXR1cm4geyB9
OwogfQpAQCAtMTg4LDExICsxNzEsMTYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0
YTo6c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgbm9kZVZhbHVlKQogICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZShjb25zdCBTdHJpbmcm
IG5ld0RhdGEsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBvbGRMZW5n
dGgsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3ZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVw
ZGF0ZShjb25zdCBTdHJpbmcmIG5ld0RhdGEsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRh
LCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCwgVXBkYXRlTGl2ZVJhbmdl
cyBzaG91bGRVcGRhdGVMaXZlUmFuZ2VzKQogewogICAgIFN0cmluZyBvbGREYXRhID0gbV9kYXRh
OwogICAgIG1fZGF0YSA9IG5ld0RhdGE7CiAKKyAgICBpZiAob2xkTGVuZ3RoICYmIHNob3VsZFVw
ZGF0ZUxpdmVSYW5nZXMgIT0gVXBkYXRlTGl2ZVJhbmdlczo6Tm8pCisgICAgICAgIGRvY3VtZW50
KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldE9mUmVwbGFjZWREYXRhLCBvbGRMZW5ndGgpOwor
ICAgIGlmIChuZXdMZW5ndGggJiYgc2hvdWxkVXBkYXRlTGl2ZVJhbmdlcyAhPSBVcGRhdGVMaXZl
UmFuZ2VzOjpObykKKyAgICAgICAgZG9jdW1lbnQoKS50ZXh0SW5zZXJ0ZWQoKnRoaXMsIG9mZnNl
dE9mUmVwbGFjZWREYXRhLCBuZXdMZW5ndGgpOworCiAgICAgQVNTRVJUKCFyZW5kZXJlcigpIHx8
IGlzPFRleHQ+KCp0aGlzKSk7CiAgICAgaWYgKGlzPFRleHQ+KCp0aGlzKSAmJiBwYXJlbnROb2Rl
KCkpCiAgICAgICAgIGRvd25jYXN0PFRleHQ+KCp0aGlzKS51cGRhdGVSZW5kZXJlckFmdGVyQ29u
dGVudENoYW5nZShvZmZzZXRPZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hhcmFjdGVyRGF0YS5oCmluZGV4IDEzZjE5MmQxMTc1MTI2ZjgxNjRlMmI0ODQxM2VmZWVmMzM0
ZGQ5NWEuLmE2NmYyYTQ3MTdjYzA4ZmE0NTYwMTgyMzdkMjFiYjQwM2MyNzJkYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NoYXJhY3RlckRhdGEuaApAQCAtMzMsNyArMzMsNiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBkYXRhTWVtb3J5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENoYXJhY3RlckRhdGEsIG1fZGF0YSk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
RGF0YShjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YUFuZFVwZGF0ZShj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgb2xk
TGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5sZW5ndGgoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPFN0cmluZz4gc3Vic3RyaW5nRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3RyaW5nJik7CkBA
IC02MCw2ICs1OSw5IEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgdm9pZCBkaXNwYXRjaE1vZGlm
aWVkRXZlbnQoY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSk7CiAKKyAgICBlbnVtIGNsYXNzIFVwZGF0
ZUxpdmVSYW5nZXMgOiBib29sIHsgTm8sIFllcyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXREYXRh
QW5kVXBkYXRlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1
bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCwgVXBkYXRlTGl2ZVJhbmdlcyA9
IFVwZGF0ZUxpdmVSYW5nZXM6Olllcyk7CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG5vZGVWYWx1
ZSgpIGNvbnN0IGZpbmFsOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldE5vZGVWYWx1ZShjb25z
dCBTdHJpbmcmKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNWFiYzI0ZWJiOTgxZTU2
NGYwN2FkZWI4ZTVmYzExNTgxMzFjNTM1NS4uODQ3NzFlYzVlMmIyODc0ZGU2OGIyNTI4ZGJjZTA2
ZWE0MjE2MjIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTE1OTEsNiArMTU5MSw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIGZpbmFsIHsgfTsKICAg
ICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJikgZmluYWw7CiAKKyAgICBib29sIGNv
bnRhaW5zKGNvbnN0IE5vZGUmIG5vZGUpIGNvbnN0IHsgcmV0dXJuIHRoaXMgPT0gJm5vZGUudHJl
ZVNjb3BlKCkgJiYgbm9kZS5pc0Nvbm5lY3RlZCgpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25z
dCBOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBub2RlICYmIGNvbnRhaW5zKCpub2RlKTsgfQor
CiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0g
MSwgTm9uUmVuZGVyZWRQbGFjZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIFdFQkNPUkVfRVhQT1JU
IERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgRG9jdW1lbnRDbGFzc0ZsYWdzID0gRGVmYXVs
dERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKaW5kZXggZDFhYjgyOGJhYWQ2MGE2YjNkYzBjNTVlZWE5OWQxNjAwMTg4ZGU5Mi4uODY2
OTk5NjE4ZmQyMGRjYTQ2NjkyYTQ5YmMwZWY0MmVjYWEwMGRiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApA
QCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CiAgKgpAQCAtMTAyMCwxMiArMTAyMCwxMiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBOb2RlOjpjaGVj
a1NldFByZWZpeChjb25zdCBBdG9tU3RyaW5nJiBwcmVmaXgpCiAKIGJvb2wgTm9kZTo6aXNEZXNj
ZW5kYW50T2YoY29uc3QgTm9kZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgLy8gUmV0dXJuIHRydWUg
aWYgb3RoZXIgaXMgYW4gYW5jZXN0b3Igb2YgdGhpcywgb3RoZXJ3aXNlIGZhbHNlCisgICAgLy8g
UmV0dXJuIHRydWUgaWYgb3RoZXIgaXMgYW4gYW5jZXN0b3Igb2YgdGhpcy4KKyAgICBpZiAob3Ro
ZXIuaXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuICZ0cmVlU2NvcGUoKS5yb290Tm9k
ZSgpID09ICZvdGhlciAmJiAhaXNEb2N1bWVudE5vZGUoKSAmJiBpc0Nvbm5lY3RlZCgpOwogICAg
IGlmICghb3RoZXIuaGFzQ2hpbGROb2RlcygpIHx8IGlzQ29ubmVjdGVkKCkgIT0gb3RoZXIuaXND
b25uZWN0ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChvdGhlci5pc0RvY3Vt
ZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gJmRvY3VtZW50KCkgPT0gJm90aGVyICYmICFpc0Rv
Y3VtZW50Tm9kZSgpICYmIGlzQ29ubmVjdGVkKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvKiBhbmNl
c3RvciA9IHBhcmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVu
dE5vZGUoKSkgeworICAgIGZvciAoYXV0byBhbmNlc3RvciA9IHBhcmVudE5vZGUoKTsgYW5jZXN0
b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoYW5j
ZXN0b3IgPT0gJm90aGVyKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTAz
NCwxNSArMTAzNCwxMyBAQCBib29sIE5vZGU6OmlzRGVzY2VuZGFudE9mKGNvbnN0IE5vZGUmIG90
aGVyKSBjb25zdAogCiBib29sIE5vZGU6OmlzRGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9m
KGNvbnN0IE5vZGUqIG90aGVyKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBUaGlzIGVsZW1lbnQn
cyBzaGFkb3cgdHJlZSdzIGhvc3QgY291bGQgYmUgaW5zaWRlIGFub3RoZXIgc2hhZG93IHRyZWUu
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhbmRsZSB0aGF0IGNhc2UgY29ycmVjdGx5
LiBNYXliZSBzaGFyZSBjb2RlIHdpdGgKLSAgICAvLyB0aGUgY29udGFpbnNJbmNsdWRpbmdTaGFk
b3dET00gZnVuY3Rpb24/CisgICAgLy8gRklYTUU6IENvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2Ug
d2hlcmUgdGhlIHNoYWRvdyBob3N0IGlzIGl0c2VsZiBpbiBhIHNoYWRvdyB0cmVlLgogICAgIHJl
dHVybiBvdGhlciAmJiAoaXNEZXNjZW5kYW50T2YoKm90aGVyKSB8fCBvdGhlci0+Y29udGFpbnMo
c2hhZG93SG9zdCgpKSk7CiB9CiAKLWJvb2wgTm9kZTo6Y29udGFpbnMoY29uc3QgTm9kZSogbm9k
ZSkgY29uc3QKK2Jvb2wgTm9kZTo6Y29udGFpbnMoY29uc3QgTm9kZSYgbm9kZSkgY29uc3QKIHsK
LSAgICByZXR1cm4gdGhpcyA9PSBub2RlIHx8IChub2RlICYmIG5vZGUtPmlzRGVzY2VuZGFudE9m
KCp0aGlzKSk7CisgICAgcmV0dXJuIHRoaXMgPT0gJm5vZGUgfHwgbm9kZS5pc0Rlc2NlbmRhbnRP
ZigqdGhpcyk7CiB9CiAKIGJvb2wgTm9kZTo6Y29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00oY29u
c3QgTm9kZSogbm9kZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGFlYjJmNmNlMzVlNDZhMzc2Njk5
NWQwODI4MDdiZGNmYmJjNWY0ZTYuLjFkZTQ5NDRmYTBmNWJmZGVjMjIxMDhlNWIxNmQ2ZGZjMmI5
OGMwZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzcxLDkgKzM3MSwxMCBAQCBwdWJsaWM6
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRGVzY2VuZGFudE9mKGNvbnN0IE5vZGUmKSBj
b25zdDsKICAgICBib29sIGlzRGVzY2VuZGFudE9mKGNvbnN0IE5vZGUqIG90aGVyKSBjb25zdCB7
IHJldHVybiBvdGhlciAmJiBpc0Rlc2NlbmRhbnRPZigqb3RoZXIpOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBOb2RlJikgY29uc3Q7CisgICAgYm9vbCBjb250YWlu
cyhjb25zdCBOb2RlKiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIgJiYgY29udGFpbnMoKm90
aGVyKTsgfQogCiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRhbnRPZihjb25z
dCBOb2RlKikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBO
b2RlKikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWluc0luY2x1ZGluZ1No
YWRvd0RPTShjb25zdCBOb2RlKikgY29uc3Q7CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCBhIHNl
bGVjdGlvbiBjYW4gYmUgc3RhcnRlZCBpbiB0aGlzIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAKaW5kZXggMmEzNDIxNWQ0MzFmMTg0N2UzNTNiYjg5YzczYTQ5NDc1MzMwMjE1MC4uMjc0MWJi
YjQwYmU1NjBjMzI3ZjQwMDk5NmE2ODY2OTQ1OWM5ZDI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCkBAIC0xMzAsOCArMTMwLDYgQEAgUG9zaXRpb246OlBvc2l0aW9uKE5vZGUqIGFuY2hvck5v
ZGUsIHVuc2lnbmVkIG9mZnNldCwgQW5jaG9yVHlwZSBhbmNob3JUeXBlKQogICAgICwgbV9hbmNo
b3JUeXBlKGFuY2hvclR5cGUpCiAgICAgLCBtX2lzTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGZhbHNl
KQogewotICAgIEFTU0VSVCghbV9hbmNob3JOb2RlIHx8ICFlZGl0aW5nSWdub3Jlc0NvbnRlbnQo
Km1fYW5jaG9yTm9kZSkpOwotICAgIEFTU0VSVCghbV9hbmNob3JOb2RlIHx8ICFtX2FuY2hvck5v
ZGUtPmlzUHNldWRvRWxlbWVudCgpKTsKICAgICBBU1NFUlQoYW5jaG9yVHlwZSA9PSBQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpOwogfQogCkBAIC0xMzYyLDcgKzEzNjAsNyBAQCBJbmxpbmVCb3hB
bmRPZmZzZXQgUG9zaXRpb246OmlubGluZUJveEFuZE9mZnNldChBZmZpbml0eSBhZmZpbml0eSwg
VGV4dERpcmVjdGlvbgogCiBUZXh0RGlyZWN0aW9uIFBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9u
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fYW5jaG9yTm9kZS0+cmVuZGVyZXIoKSkKKyAgICBpZiAo
IW1fYW5jaG9yTm9kZSB8fCAhbV9hbmNob3JOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1
cm4gVGV4dERpcmVjdGlvbjo6TFRSOwogICAgIGlmIChhdXRvKiBibG9ja0Zsb3cgPSBsaW5lYWdl
T2ZUeXBlPFJlbmRlckJsb2NrRmxvdz4oKm1fYW5jaG9yTm9kZS0+cmVuZGVyZXIoKSkuZmlyc3Qo
KSkKICAgICAgICAgcmV0dXJuIGJsb2NrRmxvdy0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuY3BwCmluZGV4IGJlZWUzNGVmOWMxMmFlOTNiOThmMGZhOGMyMWMwYmNjYzg4M2I2MDQu
LjFmYjgyMzJlN2M2MDYyNjM5ODY3NzVmNjMzYmEwNzI5YWIyYTUxN2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcApAQCAtMyw3ICszLDcgQEAKICAqIChDKSAyMDAwIEd1bm5zdGVpbiBMeWUgKGd1bm5zdGVp
bkBuZXRjb20ubm8pCiAgKiAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xs
amVuQGhpZy5ubykKICAqIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDExIE1vdG9yb2xhIE1vYmlsaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTI5LDI1ICsyOSwxOSBAQAogI2luY2x1ZGUgIkRPTVJlY3QuaCIKICNpbmNsdWRlICJET01S
ZWN0TGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJFZGl0
aW5nLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJOb2Rl
V2l0aEluZGV4LmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAi
U2NvcGVkRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUg
IlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUg
Im1hcmt1cC5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC01NSwxMCArNDksNiBAQAogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIlNlbGVjdGlvblJlY3Qu
aCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CkBAIC05MCw2ICs4MCw4IEBAIFJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVu
dCYgb3duZXJEb2N1bWVudCkKIAogUmFuZ2U6On5SYW5nZSgpCiB7CisgICAgQVNTRVJUKCFtX2lz
QXNzb2NpYXRlZFdpdGhTZWxlY3Rpb24pOworCiAgICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hS
YW5nZSgqdGhpcyk7CiAKICNpZm5kZWYgTkRFQlVHCkBAIC05NywxMSArODksMTggQEAgUmFuZ2U6
On5SYW5nZSgpCiAjZW5kaWYKIH0KIAordm9pZCBSYW5nZTo6dXBkYXRlQXNzb2NpYXRlZFNlbGVj
dGlvbigpCit7CisgICAgaWYgKG1faXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbikKKyAgICAgICAg
bV9vd25lckRvY3VtZW50LT5zZWxlY3Rpb24oKS51cGRhdGVGcm9tQXNzb2NpYXRlZExpdmVSYW5n
ZSgpOworfQorCiB2b2lkIFJhbmdlOjp1cGRhdGVEb2N1bWVudCgpCiB7CiAgICAgYXV0byYgZG9j
dW1lbnQgPSBzdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCk7CiAgICAgaWYgKG1fb3duZXJEb2N1
bWVudC5wdHIoKSA9PSAmZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1f
aXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbik7CiAgICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hS
YW5nZSgqdGhpcyk7CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7CiAgICAgbV9vd25l
ckRvY3VtZW50LT5hdHRhY2hSYW5nZSgqdGhpcyk7CkBAIC0xMTYsNiArMTE1LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWdu
ZWQgb2Zmc2V0KQogICAgIG1fc3RhcnQuc2V0KFdURk1vdmUoY29udGFpbmVyKSwgb2Zmc2V0LCBj
aGlsZE5vZGUucmVsZWFzZVJldHVyblZhbHVlKCkpOwogICAgIGlmICghaXNfbHRlcShkb2N1bWVu
dE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KG1fc3RhcnQpLCBtYWtlQm91bmRhcnlQb2ludChtX2Vu
ZCkpKSkKICAgICAgICAgbV9lbmQgPSBtX3N0YXJ0OworICAgIHVwZGF0ZUFzc29jaWF0ZWRTZWxl
Y3Rpb24oKTsKICAgICB1cGRhdGVEb2N1bWVudCgpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0x
MjksNiArMTI5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZChSZWY8Tm9kZT4m
JiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKICAgICBtX2VuZC5zZXQoV1RGTW92ZShjb250
YWluZXIpLCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiAgICAgaWYg
KCFpc19sdGVxKGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VC
b3VuZGFyeVBvaW50KG1fZW5kKSkpKQogICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CisgICAgdXBk
YXRlQXNzb2NpYXRlZFNlbGVjdGlvbigpOwogICAgIHVwZGF0ZURvY3VtZW50KCk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KQEAgLTEzOSw2ICsxNDAsNyBAQCB2b2lkIFJhbmdlOjpjb2xsYXBzZShib29s
IHRvU3RhcnQpCiAgICAgICAgIG1fZW5kID0gbV9zdGFydDsKICAgICBlbHNlCiAgICAgICAgIG1f
c3RhcnQgPSBtX2VuZDsKKyAgICB1cGRhdGVBc3NvY2lhdGVkU2VsZWN0aW9uKCk7CiB9CiAKIEV4
Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiBjb250YWluZXIsIHVu
c2lnbmVkIG9mZnNldCkKQEAgLTM2OCw3ICszNzAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4+IFJhbmdlOjpwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSBhY3Rpb24p
CiAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgICAgICB9Ci0gICAgICAgIG1f
ZW5kID0gbV9zdGFydDsKKyAgICAgICAgY29sbGFwc2UodHJ1ZSk7CiAgICAgfQogCiAgICAgLy8g
Tm93IGFkZCBsZWZ0Q29udGVudHMsIHN0dWZmIGluIGJldHdlZW4sIGFuZCByaWdodENvbnRlbnRz
IHRvIHRoZSBmcmFnbWVudApAQCAtNjk1LDI5ICs2OTcsMjggQEAgRXhjZXB0aW9uT3I8UmVmPERv
Y3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0
cmluZyYKICAgICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCplbGVt
ZW50LCBtYXJrdXAsIEFsbG93U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFy
dGVkKTsKIH0KIAotRXhjZXB0aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVja05vZGVPZmZzZXRQYWly
KE5vZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK0V4Y2VwdGlvbk9yPE5vZGUqPiBS
YW5nZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpcihOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7
CiAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlOjpET0NV
TUVOVF9UWVBFX05PREU6Ci0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5v
ZGVUeXBlRXJyb3IgfTsKLSAgICAgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6Ci0g
ICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgotICAgICAgICBjYXNlIE5vZGU6OlRFWFRf
Tk9ERToKLSAgICAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6Ci0g
ICAgICAgICAgICBpZiAob2Zmc2V0ID4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9y
IH07CisgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OworICAgIGNhc2UgTm9kZTo6Q0RBVEFf
U0VDVElPTl9OT0RFOgorICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgorICAgIGNhc2UgTm9k
ZTo6VEVYVF9OT0RFOgorICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RF
OgorICAgICAgICBpZiAob2Zmc2V0ID4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkubGVu
Z3RoKCkpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToK
KyAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgY2FzZSBOb2RlOjpE
T0NVTUVOVF9OT0RFOgorICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgorICAgICAgICBpZiAo
IW9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBjYXNlIE5vZGU6
OkFUVFJJQlVURV9OT0RFOgotICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05P
REU6Ci0gICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKLSAgICAgICAgY2FzZSBOb2Rl
OjpFTEVNRU5UX05PREU6IHsKLSAgICAgICAgICAgIGlmICghb2Zmc2V0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgTm9kZSogY2hpbGRCZWZvcmUgPSBub2Rl
LnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpOwotICAgICAgICAgICAgaWYgKCFjaGlsZEJl
Zm9yZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3Ig
fTsKLSAgICAgICAgICAgIHJldHVybiBjaGlsZEJlZm9yZTsKLSAgICAgICAgfQorICAgICAgICBh
dXRvIGNoaWxkQmVmb3JlID0gbm9kZS50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKTsKKyAg
ICAgICAgaWYgKCFjaGlsZEJlZm9yZSkKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OworICAgICAgICByZXR1cm4gY2hpbGRCZWZvcmU7CiAgICAgfQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9k
ZVR5cGVFcnJvciB9OwpAQCAtNzcxLDkgKzc3MiwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5n
ZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUuaXNEb2N1
bWVudFR5cGVOb2RlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5
cGVFcnJvciB9OwotCiAgICAgbV9zdGFydC5zZXRUb0JlZm9yZUNvbnRlbnRzKG5vZGUpOwogICAg
IG1fZW5kLnNldFRvQWZ0ZXJDb250ZW50cyhub2RlKTsKKyAgICB1cGRhdGVBc3NvY2lhdGVkU2Vs
ZWN0aW9uKCk7CisgICAgdXBkYXRlRG9jdW1lbnQoKTsKICAgICByZXR1cm4geyB9OwogfQogCkBA
IC0xMDMyLDYgKzEwMzQsMjIgQEAgUmVmPERPTVJlY3Q+IFJhbmdlOjpnZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKSBjb25zdAogICAgIHJldHVybiBET01SZWN0OjpjcmVhdGUodW5pb25SZWN0SWdub3Jp
bmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjpjbGllbnRCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNp
bXBsZVJhbmdlKCp0aGlzKSkpKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0Qm90aEVuZHBvaW50cyhS
YW5nZSYgcmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0YXJ0
Q29udGFpbmVyID0gdmFsdWUuc3RhcnQuY29udGFpbmVyOworICAgIHJhbmdlLnNldFN0YXJ0KFdU
Rk1vdmUoc3RhcnRDb250YWluZXIpLCB2YWx1ZS5zdGFydC5vZmZzZXQpOworICAgIGF1dG8gZW5k
Q29udGFpbmVyID0gdmFsdWUuZW5kLmNvbnRhaW5lcjsKKyAgICByYW5nZS5zZXRFbmQoV1RGTW92
ZShlbmRDb250YWluZXIpLCB2YWx1ZS5lbmQub2Zmc2V0KTsKK30KKwordm9pZCBSYW5nZTo6dXBk
YXRlRnJvbVNlbGVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgdmFsdWUpCit7CisgICAgQVNTRVJU
KG1faXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbik7CisgICAgbV9pc0Fzc29jaWF0ZWRXaXRoU2Vs
ZWN0aW9uID0gZmFsc2U7CisgICAgc2V0Qm90aEVuZHBvaW50cygqdGhpcywgdmFsdWUpOworICAg
IG1faXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbiA9IHRydWU7Cit9CisKIFNpbXBsZVJhbmdlIG1h
a2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIHsgeyByYW5n
ZS5zdGFydENvbnRhaW5lcigpLCByYW5nZS5zdGFydE9mZnNldCgpIH0sIHsgcmFuZ2UuZW5kQ29u
dGFpbmVyKCksIHJhbmdlLmVuZE9mZnNldCgpIH0gfTsKQEAgLTEwNTcsMTAgKzEwNzUsNyBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4m
IHJhbmdlKQogUmVmPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQogewogICAgIGF1dG8gcmVzdWx0ID0gUmFuZ2U6OmNyZWF0ZShyYW5nZS5zdGFydC5kb2N1
bWVudCgpKTsKLSAgICBhdXRvIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnQuY29udGFpbmVy
OwotICAgIHJlc3VsdC0+c2V0U3RhcnQoV1RGTW92ZShzdGFydENvbnRhaW5lciksIHJhbmdlLnN0
YXJ0Lm9mZnNldCk7Ci0gICAgYXV0byBlbmRDb250YWluZXIgPSByYW5nZS5lbmQuY29udGFpbmVy
OwotICAgIHJlc3VsdC0+c2V0RW5kKFdURk1vdmUoZW5kQ29udGFpbmVyKSwgcmFuZ2UuZW5kLm9m
ZnNldCk7CisgICAgc2V0Qm90aEVuZHBvaW50cyhyZXN1bHQsIHJhbmdlKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IDAwOTdiYmI5MWRjNmIyNzk2MzcxMDQyYTkz
OWQyNWJmN2MyMmJjNTYuLmRhNmY0M2U5YWE4YzRkMzM5NDFhYjZjYTgxZWQzNjlmYjAxNjU5Y2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5oCkBAIC05OSw2ICs5OSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXh0
Tm9kZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKICAg
ICB2b2lkIHRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7CiAKKyAgICB2b2lkIGRpZEFzc29j
aWF0ZVdpdGhTZWxlY3Rpb24oKSB7IG1faXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbiA9IHRydWU7
IH0KKyAgICB2b2lkIGRpZERpc2Fzc29jaWF0ZUZyb21TZWxlY3Rpb24oKSB7IG1faXNBc3NvY2lh
dGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOyB9CisgICAgdm9pZCB1cGRhdGVGcm9tU2VsZWN0aW9u
KGNvbnN0IFNpbXBsZVJhbmdlJik7CisKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8Tm9kZSo+IGNo
ZWNrTm9kZU9mZnNldFBhaXIoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCk7CisKICNpZiBFTkFCTEUo
VFJFRV9ERUJVR0dJTkcpCiAgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsKICNl
bmRpZgpAQCAtMTA5LDEyICsxMTUsMTMgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBSYW5nZShE
b2N1bWVudCYpOwogCiAgICAgdm9pZCB1cGRhdGVEb2N1bWVudCgpOwotICAgIEV4Y2VwdGlvbk9y
PE5vZGUqPiBjaGVja05vZGVPZmZzZXRQYWlyKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0
OworICAgIHZvaWQgdXBkYXRlQXNzb2NpYXRlZFNlbGVjdGlvbigpOwogICAgIEV4Y2VwdGlvbk9y
PFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gcHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwog
CiAgICAgUmVmPERvY3VtZW50PiBtX293bmVyRG9jdW1lbnQ7CiAgICAgUmFuZ2VCb3VuZGFyeVBv
aW50IG1fc3RhcnQ7CiAgICAgUmFuZ2VCb3VuZGFyeVBvaW50IG1fZW5kOworICAgIGJvb2wgbV9p
c0Fzc29jaWF0ZWRXaXRoU2VsZWN0aW9uIHsgZmFsc2UgfTsKIH07CiAKIFdFQkNPUkVfRVhQT1JU
IFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3Bw
CmluZGV4IDY1M2ZhYTFjMTA5MWU4NzU0ZjdlOTliMTkwNTNlNWNkMDQwNmI3YzkuLmY5MThkNDIw
M2E0ODQ2NGIwMDI2MTBhN2Y4ODNmYjVlMDI4ZTc3NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKQEAgLTI0
NSwxMSArMjQ1LDEyIEBAIFN0cmluZyBUZXh0OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKICAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi12b2lkIFRleHQ6OnNldERhdGFBbmRV
cGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0
YSwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpCit2b2lkIFRleHQ6OnNl
dERhdGFBbmRVcGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25lZCBvZmZzZXRPZlJl
cGxhY2VkRGF0YSwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgsIFVwZGF0
ZUxpdmVSYW5nZXMgdXBkYXRlTGl2ZVJhbmdlcykKIHsKICAgICBhdXRvIG9sZERhdGEgPSBkYXRh
KCk7Ci0gICAgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZShuZXdEYXRhLCBvZmZzZXRP
ZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoLCBuZXdMZW5ndGgpOworICAgIENoYXJhY3RlckRhdGE6
OnNldERhdGFBbmRVcGRhdGUobmV3RGF0YSwgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIG9sZExlbmd0
aCwgbmV3TGVuZ3RoLCB1cGRhdGVMaXZlUmFuZ2VzKTsKIAorICAgIC8vIEZJWE1FOiBEb2VzIG5v
dCBzZWVtIGNvcnJlY3QgdG8gZG8gdGhpcyBmb3IgMCBvZmZzZXQgb25seS4KICAgICBpZiAoIW9m
ZnNldE9mUmVwbGFjZWREYXRhKSB7CiAgICAgICAgIGF1dG8qIHRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyID0gZG9jdW1lbnQoKS50ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcklmRXhpc3RzKCk7
CiAgICAgICAgIGlmIChVTkxJS0VMWSh0ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciAmJiBvbGRE
YXRhICE9IG5ld0RhdGEpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgKaW5kZXggN2RhYjA0MWJiNWRkMjIyYTA1NzMyYTgx
ZmU1ZWJmZDI1ZDM2NjYyNi4uOTM1MzhlODliMmQ1NWZhYjZmZDY0NjIzNDA2M2QzMjk1NDdjNzI3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVGV4dC5oCkBAIC01Nyw4ICs1Nyw2IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBk
ZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHNldERhdGFBbmRVcGRh
dGUoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVk
IG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKSBmaW5hbDsKLQogcHJvdGVjdGVkOgogICAg
IFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEsIENvbnN0cnVjdGlv
blR5cGUgdHlwZSkKICAgICAgICAgOiBDaGFyYWN0ZXJEYXRhKGRvY3VtZW50LCBkYXRhLCB0eXBl
KQpAQCAtNzAsNiArNjgsNyBAQCBwcml2YXRlOgogICAgIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgUmVmPE5vZGU+IGNsb25lTm9kZUludGVybmFsKERvY3VtZW50Jiwg
Q2xvbmluZ09wZXJhdGlvbikgb3ZlcnJpZGU7CiAgICAgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5v
ZGVUeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldERhdGFBbmRVcGRhdGUoY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIG9sZExlbmd0
aCwgdW5zaWduZWQgbmV3TGVuZ3RoLCBVcGRhdGVMaXZlUmFuZ2VzKSBmaW5hbDsKIAogICAgIHZp
cnR1YWwgUmVmPFRleHQ+IHZpcnR1YWxDcmVhdGUoY29uc3QgU3RyaW5nJik7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA4MDUyNmRkZTQ3NGIzM2Nm
OWU3NDZhZDAyZGJhNTk0ZDZmYjQwYmYzLi4wMGNmMzRmZjZmYmZlNzc5YmRhNTZlMjM2OWJjMTA1
MTI2ZGI1ZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSw4ICsxNDksNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3Vt
ZW50KQogfQogCiBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3Vt
ZW50KQotICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1feFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCisgICAg
OiBtX2RvY3VtZW50KG1ha2VXZWFrUHRyKGRvY3VtZW50KSkKICAgICAsIG1fZ3JhbnVsYXJpdHko
VGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eSkKICNpZiBFTkFCTEUoVEVYVF9D
QVJFVCkKICAgICAsIG1fY2FyZXRCbGlua1RpbWVyKCp0aGlzLCAmRnJhbWVTZWxlY3Rpb246OmNh
cmV0QmxpbmtUaW1lckZpcmVkKQpAQCAtMTY5LDcgKzE2OCw3IEBAIEZyYW1lU2VsZWN0aW9uOjpG
cmFtZVNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgLCBtX2NhcmV0QmxpbmtzKHRy
dWUpCiAjZW5kaWYKIHsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rp
b24obV9kb2N1bWVudCkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0
aW9uKG1fZG9jdW1lbnQuZ2V0KCkpKQogICAgICAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlv
bmFsKHRydWUpOwogCiAgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0
aXZlKCk7CkBAIC0yNDgsNyArMjQ3LDcgQEAgdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpzZXRD
YXJldFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKG1f
cG9zaXRpb24uaXNOdWxsKCkgfHwgbV9wb3NpdGlvbi5pc09ycGhhbigpKQogICAgICAgICBjbGVh
ckNhcmV0UmVjdCgpOwogICAgIGVsc2UKLSAgICAgICAgdXBkYXRlQ2FyZXRSZWN0KGRvY3VtZW50
LCBtX3Bvc2l0aW9uKTsKKyAgICAgICAgdXBkYXRlQ2FyZXRSZWN0KG1fcG9zaXRpb24pOwogfQog
CiBzdGF0aWMgdm9pZCBhZGp1c3RFbmRwb2ludHNBdEJpZGlCb3VuZGFyeShWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVCYXNlLCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVFeHRlbnQpCkBAIC0yOTIs
NyArMjkxLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3VzZUlmRGlm
ZmVyZW50KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBFbmRQb2ludHNBZGp1c3Rt
ZW50TW9kZSBlbmRwb2ludHNBZGp1c3RtZW50TW9kZSkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IG5ld1NlbGVjdGlvbiA9IHBhc3NlZE5ld1NlbGVjdGlvbjsKLSAgICBib29sIGlzRGlyZWN0aW9u
YWwgPSBzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50KSB8fCBu
ZXdTZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpOworICAgIGJvb2wgaXNEaXJlY3Rpb25hbCA9IHNo
b3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9jdW1lbnQuZ2V0KCkpIHx8IG5l
d1NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gYmFzZSA9
IG1fb3JpZ2luYWxCYXNlLmlzTm90TnVsbCgpID8gbV9vcmlnaW5hbEJhc2UgOiBuZXdTZWxlY3Rp
b24udmlzaWJsZUJhc2UoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV3QmFzZSA9IGJhc2U7CkBA
IC0zMTQsNyArMzEzLDYgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uQnlNb3Vz
ZUlmRGlmZmVyZW50KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHBhc3MKICAgICBuZXdTZWxlY3Rp
b24uc2V0SXNEaXJlY3Rpb25hbChpc0RpcmVjdGlvbmFsKTsgLy8gQWRqdXN0aW5nIGJhc2UgYW5k
IGV4dGVudCB3aWxsIG1ha2UgbmV3U2VsZWN0aW9uIGFsd2F5cyBkaXJlY3Rpb25hbAogICAgIGlm
IChtX3NlbGVjdGlvbiA9PSBuZXdTZWxlY3Rpb24gfHwgIXNob3VsZENoYW5nZVNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm47Ci0KICAgICAKICAgICBBWFRleHRTdGF0ZUNo
YW5nZUludGVudCBpbnRlbnQ7CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlF
bmFibGVkKCkgJiYgbmV3U2VsZWN0aW9uLmlzQ2FyZXQoKSkKQEAgLTMzMCwxMSArMzI4LDEyIEBA
IGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFu
Y2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgYm9vbCBzaG91bGRDbGVhclR5cGluZ1N0eWxl
ID0gb3B0aW9ucy5jb250YWlucyhDbGVhclR5cGluZ1N0eWxlKTsKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gbmV3U2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uUG9zc2libHlXaXRob3V0RGlyZWN0aW9u
OwotICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2RvY3VtZW50
KSkKKyAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVu
dC5nZXQoKSkpCiAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwog
CiAgICAgaWYgKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5mcmFtZSgpKSB7CiAgICAgICAg
IG1fc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uOworICAgICAgICB1cGRhdGVBc3NvY2lhdGVkTGl2
ZVJhbmdlKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTM2OCw2ICszNjcs
NyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBl
YXJhbmNlKGNvbnN0IFZpc2libGVTZWxlY3RpbwogICAgICAgICBtX2RvY3VtZW50LT5lZGl0b3Io
KS5zZWxlY3Rpb25XaWxsQ2hhbmdlKCk7CiAKICAgICBtX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlv
bjsKKyAgICB1cGRhdGVBc3NvY2lhdGVkTGl2ZVJhbmdlKCk7CiAKICAgICAvLyBTZWxlY3Rpb24g
b2Zmc2V0cyBzaG91bGQgaW5jcmVhc2Ugd2hlbiBMRiBpcyBpbnNlcnRlZCBiZWZvcmUgdGhlIGNh
cmV0IGluIEluc2VydExpbmVCcmVha0NvbW1hbmQuIFNlZSA8aHR0cHM6Ly93ZWJraXQub3JnL2Iv
NTYwNjE+LgogICAgIGlmIChIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENvbnRyb2wg
PSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobmV3U2VsZWN0aW9uLnN0YXJ0KCkpKQpAQCAtMzkw
LDcgKzM5MCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRVcGRh
dGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAKICAgICAvLyBBbHdheXMgY2xl
YXIgdGhlIHggcG9zaXRpb24gdXNlZCBmb3IgdmVydGljYWwgYXJyb3cgbmF2aWdhdGlvbi4KICAg
ICAvLyBJdCB3aWxsIGJlIHJlc3RvcmVkIGJ5IHRoZSB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9u
IGNvZGUgaWYgbmVjZXNzYXJ5LgotICAgIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9u
ID0gTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oKTsKKyAgICBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbiA9IFdURjo6bnVsbG9wdDsKICAgICBzZWxlY3RGcmFtZUVsZW1l
bnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOwogICAgIG1fZG9jdW1lbnQtPmVkaXRvcigpLnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBvcHRpb25zKTsKICAgICAvLyBo
dHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0aW9uLWFwaS8jc2VsZWN0aW9uY2hhbmdlLWV2ZW50
CkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgT3B0aW9uU2V0PFMKIHsKICAgICBMT0df
V0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwgIkZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb24gIiA8PCBzZWxlY3Rpb24pOwogCi0gICAgUmVmUHRyPERvY3VtZW50PiBwcm90ZWN0b3Io
bV9kb2N1bWVudCk7CisgICAgYXV0byBwcm90ZWN0ZWREb2N1bWVudCA9IG1ha2VSZWZQdHIobV9k
b2N1bWVudC5nZXQoKSk7CiAgICAgaWYgKCFzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBl
YXJhbmNlKHNlbGVjdGlvbiwgb3B0aW9ucywgYWxpZ24sIGdyYW51bGFyaXR5KSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC00MTksMTcgKzQxOSwxNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8Uwog
ICAgIG1fc2VsZWN0aW9uUmV2ZWFsSW50ZW50ID0gaW50ZW50OwogICAgIG1fcGVuZGluZ1NlbGVj
dGlvblVwZGF0ZSA9IHRydWU7CiAKLSAgICBpZiAobV9kb2N1bWVudC0+aGFzUGVuZGluZ1N0eWxl
UmVjYWxjKCkpCisgICAgaWYgKHByb3RlY3RlZERvY3VtZW50LT5oYXNQZW5kaW5nU3R5bGVSZWNh
bGMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2Rv
Y3VtZW50LT52aWV3KCk7CisgICAgYXV0byBmcmFtZVZpZXcgPSBwcm90ZWN0ZWREb2N1bWVudC0+
dmlldygpOwogICAgIGlmIChmcmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5sYXlvdXRDb250ZXh0KCku
aXNMYXlvdXRQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVwZGF0ZUFuZFJldmVh
bFNlbGVjdGlvbihpbnRlbnQpOwogCiAgICAgaWYgKG9wdGlvbnMgJiBJc1VzZXJUcmlnZ2VyZWQp
IHsKLSAgICAgICAgaWYgKGF1dG8qIGNsaWVudCA9IG1fZG9jdW1lbnQtPmVkaXRvcigpLmNsaWVu
dCgpKQorICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gcHJvdGVjdGVkRG9jdW1lbnQtPmVkaXRv
cigpLmNsaWVudCgpKQogICAgICAgICAgICAgY2xpZW50LT5kaWRFbmRVc2VyVHJpZ2dlcmVkU2Vs
ZWN0aW9uQ2hhbmdlcygpOwogICAgIH0KIH0KQEAgLTgwNCwxMCArODA0LDEwIEBAIFZpc2libGVQ
b3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpCiAgICAgICAgIHBvcyA9IG5leHRTZW50ZW5jZVBvc2l0aW9uKHBvcyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpMaW5lR3JhbnVsYXJp
dHk6Ci0gICAgICAgIHBvcyA9IG5leHRMaW5lUG9zaXRpb24ocG9zLCBsaW5lRGlyZWN0aW9uUG9p
bnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oRVhURU5UKSk7CisgICAgICAgIHBvcyA9IG5l
eHRMaW5lUG9zaXRpb24ocG9zLCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5h
dmlnYXRpb24oRXh0ZW50KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEdyYW51bGFy
aXR5OjpQYXJhZ3JhcGhHcmFudWxhcml0eToKLSAgICAgICAgcG9zID0gbmV4dFBhcmFncmFwaFBv
c2l0aW9uKHBvcywgbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9u
KEVYVEVOVCkpOworICAgICAgICBwb3MgPSBuZXh0UGFyYWdyYXBoUG9zaXRpb24ocG9zLCBsaW5l
RGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oRXh0ZW50KSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpEb2N1bWVudEdyYW51bGFyaXR5
OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkxNywxMSArOTE3LDExIEBAIFZp
c2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nRm9yd2FyZChUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksCiAgICAgICAgIC8vIHRvIGxlYXZlIHRoZSBzZWxlY3Rpb24g
YXQgdGhhdCBsaW5lIHN0YXJ0IChubyBuZWVkIHRvIGNhbGwgbmV4dExpbmVQb3NpdGlvbiEpCiAg
ICAgICAgIHBvcyA9IGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgaWYgKCFpc1JhbmdlKCkgfHwg
IWlzU3RhcnRPZkxpbmUocG9zKSkKLSAgICAgICAgICAgIHBvcyA9IG5leHRMaW5lUG9zaXRpb24o
cG9zLCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oU1RBUlQp
KTsKKyAgICAgICAgICAgIHBvcyA9IG5leHRMaW5lUG9zaXRpb24ocG9zLCBsaW5lRGlyZWN0aW9u
UG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oU3RhcnQpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpQYXJhZ3JhcGhHcmFudWxhcml0eToK
LSAgICAgICAgcG9zID0gbmV4dFBhcmFncmFwaFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbiwgbGlu
ZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKFNUQVJUKSk7CisgICAg
ICAgIHBvcyA9IG5leHRQYXJhZ3JhcGhQb3NpdGlvbihjdXJyZW50UG9zaXRpb24sIGxpbmVEaXJl
Y3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihTdGFydCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6RG9jdW1lbnRHcmFudWxhcml0eToKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDI1LDEwICsxMDI1LDEwIEBAIFZpc2li
bGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQoVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyCiAgICAgICAgIHBvcyA9IHByZXZpb3VzU2VudGVuY2VQb3NpdGlv
bihwb3MpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUdy
YW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c0xpbmVQb3NpdGlvbihwb3MsIGxpbmVE
aXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihFWFRFTlQpKTsKKyAgICAg
ICAgcG9zID0gcHJldmlvdXNMaW5lUG9zaXRpb24ocG9zLCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JC
bG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oRXh0ZW50KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgVGV4dEdyYW51bGFyaXR5OjpQYXJhZ3JhcGhHcmFudWxhcml0eToKLSAgICAgICAgcG9zID0g
cHJldmlvdXNQYXJhZ3JhcGhQb3NpdGlvbihwb3MsIGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2Nr
RGlyZWN0aW9uTmF2aWdhdGlvbihFWFRFTlQpKTsKKyAgICAgICAgcG9zID0gcHJldmlvdXNQYXJh
Z3JhcGhQb3NpdGlvbihwb3MsIGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2
aWdhdGlvbihFeHRlbnQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJp
dHk6OlNlbnRlbmNlQm91bmRhcnk6CiAgICAgICAgIHBvcyA9IHN0YXJ0T2ZTZW50ZW5jZShzdGFy
dEZvclBsYXRmb3JtKCkpOwpAQCAtMTEzMywxMCArMTEzMywxMCBAQCBWaXNpYmxlUG9zaXRpb24g
RnJhbWVTZWxlY3Rpb246Om1vZGlmeU1vdmluZ0JhY2t3YXJkKFRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eQogICAgICAgICBwb3MgPSBwcmV2aW91c1NlbnRlbmNlUG9zaXRpb24oY3VycmVudFBv
c2l0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkxpbmVH
cmFudWxhcml0eToKLSAgICAgICAgcG9zID0gcHJldmlvdXNMaW5lUG9zaXRpb24oY3VycmVudFBv
c2l0aW9uLCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oU1RB
UlQpKTsKKyAgICAgICAgcG9zID0gcHJldmlvdXNMaW5lUG9zaXRpb24oY3VycmVudFBvc2l0aW9u
LCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oU3RhcnQpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51
bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c1BhcmFncmFwaFBvc2l0aW9uKGN1cnJlbnRQ
b3NpdGlvbiwgbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKFNU
QVJUKSk7CisgICAgICAgIHBvcyA9IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24oY3VycmVudFBv
c2l0aW9uLCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oU3Rh
cnQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlNlbnRlbmNl
Qm91bmRhcnk6CiAgICAgICAgIHBvcyA9IHN0YXJ0T2ZTZW50ZW5jZShjdXJyZW50UG9zaXRpb24p
OwpAQCAtMTM3OCwxMCArMTM3OCwxMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjptb2RpZnkoRUFs
dGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleAogCiAgICAg
Ly8gU29tZSBvZiB0aGUgYWJvdmUgb3BlcmF0aW9ucyBzZXQgYW4geFBvc0ZvclZlcnRpY2FsQXJy
b3dOYXZpZ2F0aW9uLgogICAgIC8vIFNldHRpbmcgYSBzZWxlY3Rpb24gd2lsbCBjbGVhciBpdCwg
c28gc2F2ZSBpdCB0byBwb3NzaWJseSByZXN0b3JlIGxhdGVyLgotICAgIC8vIE5vdGU6IHRoZSBT
VEFSVCBwb3NpdGlvbiB0eXBlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIHVudXNlZCwgaXQg
d291bGQgYmUKKyAgICAvLyBOb3RlOiB0aGUgU3RhcnQgcG9zaXRpb24gdHlwZSBpcyBhcmJpdHJh
cnkgYmVjYXVzZSBpdCBpcyB1bnVzZWQsIGl0IHdvdWxkIGJlCiAgICAgLy8gdGhlIHJlcXVlc3Rl
ZCBwb3NpdGlvbiB0eXBlIGlmIHRoZXJlIHdlcmUgbm8geFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZp
Z2F0aW9uIHNldC4KLSAgICBMYXlvdXRVbml0IHggPSBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9j
a0RpcmVjdGlvbk5hdmlnYXRpb24oU1RBUlQpOwotICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0
aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwg
YWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CisgICAgTGF5b3V0VW5pdCB4ID0gbGluZURpcmVj
dGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKFN0YXJ0KTsKKyAgICBtX3NlbGVj
dGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9u
KG1fZG9jdW1lbnQuZ2V0KCkpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOwogCiAgICAg
c3dpdGNoIChhbHRlcikgewogICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6CkBAIC0xNDU5LDEyICsx
NDU5LDEyIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwg
dW5zaWduZWQgdmVydGljYWxEaXN0YW5jZSwgVmVydGljCiAgICAgc3dpdGNoIChhbHRlcikgewog
ICAgIGNhc2UgQWx0ZXJhdGlvbk1vdmU6CiAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihk
aXJlY3Rpb24gPT0gRGlyZWN0aW9uVXAgPyBtX3NlbGVjdGlvbi5zdGFydCgpIDogbV9zZWxlY3Rp
b24uZW5kKCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAgICB4UG9zID0gbGluZURp
cmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKGRpcmVjdGlvbiA9PSBEaXJl
Y3Rpb25VcCA/IFNUQVJUIDogRU5EKTsKKyAgICAgICAgeFBvcyA9IGxpbmVEaXJlY3Rpb25Qb2lu
dEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihkaXJlY3Rpb24gPT0gRGlyZWN0aW9uVXAgPyBT
dGFydCA6IEVuZCk7CiAgICAgICAgIG1fc2VsZWN0aW9uLnNldEFmZmluaXR5KGRpcmVjdGlvbiA9
PSBEaXJlY3Rpb25VcCA/IEFmZmluaXR5OjpVcHN0cmVhbSA6IEFmZmluaXR5OjpEb3duc3RyZWFt
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHRlcmF0aW9uRXh0ZW5kOgogICAgICAgICBw
b3MgPSBWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFm
ZmluaXR5KCkpOwotICAgICAgICB4UG9zID0gbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJl
Y3Rpb25OYXZpZ2F0aW9uKEVYVEVOVCk7CisgICAgICAgIHhQb3MgPSBsaW5lRGlyZWN0aW9uUG9p
bnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oRXh0ZW50KTsKICAgICAgICAgbV9zZWxlY3Rp
b24uc2V0QWZmaW5pdHkoQWZmaW5pdHk6OkRvd25zdHJlYW0pOwogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC0xNTE0LDQ3ICsxNTE0LDQzIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1vZGlmeShF
QWx0ZXJhdGlvbiBhbHRlciwgdW5zaWduZWQgdmVydGljYWxEaXN0YW5jZSwgVmVydGljCiAgICAg
aWYgKHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCkKICAgICAgICAgbV9ncmFudWxhcml0
eSA9IFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHk7CiAKLSAgICBtX3NlbGVj
dGlvbi5zZXRJc0RpcmVjdGlvbmFsKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9u
KG1fZG9jdW1lbnQpIHx8IGFsdGVyID09IEFsdGVyYXRpb25FeHRlbmQpOworICAgIG1fc2VsZWN0
aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24o
bV9kb2N1bWVudC5nZXQoKSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotTGF5b3V0VW5pdCBGcmFtZVNlbGVjdGlvbjo6bGluZURpcmVjdGlv
blBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKEVQb3NpdGlvblR5cGUgdHlwZSkKK0xh
eW91dFVuaXQgRnJhbWVTZWxlY3Rpb246OmxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0
aW9uTmF2aWdhdGlvbihQb3NpdGlvblR5cGUgdHlwZSkKIHsKLSAgICBMYXlvdXRVbml0IHg7Ci0K
ICAgICBpZiAoaXNOb25lKCkpCi0gICAgICAgIHJldHVybiB4OworICAgICAgICByZXR1cm4gMDsK
IAotICAgIFBvc2l0aW9uIHBvczsKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHVzZSB2aXNpYmxlU3Rh
cnQvRW5kL0V4dGVudD8KKyAgICBQb3NpdGlvbiBwb3NpdGlvbjsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIFNUQVJUOgotICAgICAgICBwb3MgPSBtX3NlbGVjdGlvbi5zdGFydCgpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEVORDoKLSAgICAgICAgcG9zID0gbV9zZWxlY3Rpb24u
ZW5kKCk7CisgICAgY2FzZSBTdGFydDoKKyAgICAgICAgcG9zaXRpb24gPSBtX3NlbGVjdGlvbi5z
dGFydCgpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEJBU0U6Ci0gICAgICAgIHBvcyA9IG1f
c2VsZWN0aW9uLmJhc2UoKTsKKyAgICBjYXNlIEVuZDoKKyAgICAgICAgcG9zaXRpb24gPSBtX3Nl
bGVjdGlvbi5lbmQoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFWFRFTlQ6Ci0gICAgICAg
IHBvcyA9IG1fc2VsZWN0aW9uLmV4dGVudCgpOworICAgIGNhc2UgRXh0ZW50OgorICAgICAgICBw
b3NpdGlvbiA9IG1fc2VsZWN0aW9uLmV4dGVudCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
LSAgICBGcmFtZSogZnJhbWUgPSBwb3MuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7
Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgICAgIAotICAgIGlmICht
X3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9PSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbigpKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24o
cG9zLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKLSAgICAgICAgLy8gVmlzaWJsZVBvc2l0aW9u
IGNyZWF0aW9uIGNhbiBmYWlsIGhlcmUgaWYgYSBub2RlIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlv
biBiZWNvbWVzIHZpc2liaWxpdHk6aGlkZGVuCi0gICAgICAgIC8vIGFmdGVyIHRoZSBzZWxlY3Rp
b24gaXMgY3JlYXRlZCBhbmQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgotICAgICAg
ICB4ID0gdmlzaWJsZVBvc2l0aW9uLmlzTm90TnVsbCgpID8gdmlzaWJsZVBvc2l0aW9uLmxpbmVE
aXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbigpIDogMDsKLSAgICAgICAg
bV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24gPSB4OwotICAgIH0gZWxzZQotICAgICAg
ICB4ID0gbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247Ci0gICAgICAgIAorICAgIC8v
IEZJWE1FOiBXaHkgaXMgdGhpcyBjaGVjayBuZWVkZWQ/IFdoYXQncyB0aGUgaGFybSBpbiBkb2lu
ZyBhIGxpdHRsZSBtb3JlIHdvcmsgd2l0aG91dCBhIGZyYW1lPworICAgIGlmICghcG9zaXRpb24u
YW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgLy8gRklYTUU6IENhbiB3ZSBkbyB0aGlzIGJlZm9yZSBnZXR0aW5nIHRoZSBwb3NpdGlvbiBm
cm9tIHRoZSBzZWxlY3Rpb24/CisgICAgaWYgKG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0
aW9uKQorICAgICAgICByZXR1cm4gKm1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwor
CisgICAgLy8gVmlzaWJsZVBvc2l0aW9uIGNyZWF0aW9uIGNhbiBmYWlsIGhlcmUgaWYgYSBub2Rl
IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBiZWNvbWVzCisgICAgLy8gdmlzaWJpbGl0eTpoaWRk
ZW4gYWZ0ZXIgdGhlIHNlbGVjdGlvbiBpcyBjcmVhdGVkIGFuZCBiZWZvcmUgdGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQuCisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihwb3NpdGlv
biwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgYXV0byB4ID0gdmlzaWJsZVBvc2l0aW9u
LmlzTm90TnVsbCgpID8gdmlzaWJsZVBvc2l0aW9uLmxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2Nr
RGlyZWN0aW9uTmF2aWdhdGlvbigpIDogMDsKKyAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbiA9IHsgeCB9OwogICAgIHJldHVybiB4OwogfQogCkBAIC0xNjI2LDkgKzE2MjIsOSBA
QCB2b2lkIENhcmV0QmFzZTo6Y2xlYXJDYXJldFJlY3QoKQogICAgIG1fY2FyZXRMb2NhbFJlY3Qg
PSBMYXlvdXRSZWN0KCk7CiB9CiAKLWJvb2wgQ2FyZXRCYXNlOjp1cGRhdGVDYXJldFJlY3QoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGNhcmV0UG9zaXRpb24pCiti
b29sIENhcmV0QmFzZTo6dXBkYXRlQ2FyZXRSZWN0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgY2Fy
ZXRQb3NpdGlvbikKIHsKLSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CisgICAgY2FyZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIG1fY2FyZXRS
ZWN0TmVlZHNVcGRhdGUgPSBmYWxzZTsKICAgICBSZW5kZXJCbG9jayogcmVuZGVyZXI7CiAgICAg
bV9jYXJldExvY2FsUmVjdCA9IGxvY2FsQ2FyZXRSZWN0SW5SZW5kZXJlckZvckNhcmV0UGFpbnRp
bmcoY2FyZXRQb3NpdGlvbiwgcmVuZGVyZXIpOwpAQCAtMTY4Nyw3ICsxNjgzLDcgQEAgYm9vbCBG
cmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICAgICAgICAgIGNsZWFyQ2Fy
ZXRSZWN0KCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVTdGFydCA9IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgICAgICAgICAgaWYg
KHVwZGF0ZUNhcmV0UmVjdChtX2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAg
ICBpZiAodXBkYXRlQ2FyZXRSZWN0KHZpc2libGVTdGFydCkpIHsKICAgICAgICAgICAgICAgICBj
YXJldE5vZGUgPSB2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
OwogICAgICAgICAgICAgICAgIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSA9IHRydWU7CiAgICAgICAg
ICAgICB9CkBAIC0yMTI2LDcgKzIxMjIsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVB
cHBlYXJhbmNlKCkKIAogICAgIC8vIElmIHRoZSBjYXJldCBtb3ZlZCwgc3RvcCB0aGUgYmxpbmsg
dGltZXIgc28gd2UgY2FuIHJlc3RhcnQgd2l0aCBhCiAgICAgLy8gYmxhY2sgY2FyZXQgaW4gdGhl
IG5ldyBsb2NhdGlvbi4KLSAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hv
dWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZG9jdW1l
bnQpKQorICAgIGlmIChjYXJldFJlY3RDaGFuZ2VkT3JDbGVhcmVkIHx8ICFzaG91bGRCbGluayB8
fCBzaG91bGRTdG9wQmxpbmtpbmdEdWVUb1R5cGluZ0NvbW1hbmQobV9kb2N1bWVudC5nZXQoKSkp
CiAgICAgICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKIAogICAgIC8vIFN0YXJ0IGJsaW5r
aW5nIHdpdGggYSBibGFjayBjYXJldC4gQmUgc3VyZSBub3QgdG8gcmVzdGFydCBpZiB3ZSdyZQpA
QCAtMjc3NiwyMSArMjc3Miw3OCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldENvbG9y
KGNvbnN0IENvbG9yJiBjYXJldENvbG9yKQogICAgICAgICAgICAgaW52YWxpZGF0ZUNhcmV0UmVj
dCgpOwogICAgIH0KIH0KKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKK3N0YXRp
YyBib29sIGNvbnRhaW5zRW5kcG9pbnRzKGNvbnN0IFdlYWtQdHI8RG9jdW1lbnQ+JiBkb2N1bWVu
dCwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSkKK3sKKyAgICByZXR1cm4gZG9j
dW1lbnQgJiYgcmFuZ2UgJiYgZG9jdW1lbnQtPmNvbnRhaW5zKHJhbmdlLT5zdGFydC5jb250YWlu
ZXIpICYmIGRvY3VtZW50LT5jb250YWlucyhyYW5nZS0+ZW5kLmNvbnRhaW5lcik7Cit9CisKK3N0
YXRpYyBib29sIGNvbnRhaW5zRW5kcG9pbnRzKGNvbnN0IFdlYWtQdHI8RG9jdW1lbnQ+JiBkb2N1
bWVudCwgY29uc3QgUmFuZ2UmIGxpdmVSYW5nZSkKK3sKKyAgICAvLyBPbmx5IG5lZWQgdG8gY2hl
Y2sgdGhlIHN0YXJ0IGNvbnRhaW5lciBiZWNhdXNlIGxpdmUgcmFuZ2VzIGVuZm9yY2UgdGhlIGlu
dmFyaWFudCB0aGF0IHN0YXJ0IGFuZCBlbmQgaGF2ZSBhIGNvbW1vbiBhbmNlc3Rvci4KKyAgICBy
ZXR1cm4gZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmNvbnRhaW5zKGxpdmVSYW5nZS5zdGFydENvbnRh
aW5lcigpKTsKK30KKworUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6YXNzb2NpYXRlZExp
dmVSYW5nZSgpCit7CisgICAgaWYgKCFtX2Fzc29jaWF0ZWRMaXZlUmFuZ2UpIHsKKyAgICAgICAg
aWYgKGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCk7IGNvbnRhaW5zRW5kcG9p
bnRzKG1fZG9jdW1lbnQsIHJhbmdlKSkgeworICAgICAgICAgICAgbV9hc3NvY2lhdGVkTGl2ZVJh
bmdlID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSk7CisgICAgICAgICAgICBtX2Fzc29jaWF0ZWRM
aXZlUmFuZ2UtPmRpZEFzc29jaWF0ZVdpdGhTZWxlY3Rpb24oKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gbV9hc3NvY2lhdGVkTGl2ZVJhbmdlOworfQorCit2b2lkIEZyYW1lU2VsZWN0
aW9uOjpkaXNhc3NvY2lhdGVMaXZlUmFuZ2UoKQoreworICAgIGlmIChhdXRvIHByZXZpb3VzbHlB
c3NvY2lhdGVkTGl2ZVJhbmdlID0gc3RkOjpleGNoYW5nZShtX2Fzc29jaWF0ZWRMaXZlUmFuZ2Us
IG51bGxwdHIpKQorICAgICAgICBwcmV2aW91c2x5QXNzb2NpYXRlZExpdmVSYW5nZS0+ZGlkRGlz
YXNzb2NpYXRlRnJvbVNlbGVjdGlvbigpOworICAgIC8vIEZJWE1FOiBOZWVkIGFkZGl0aW9uYWwg
Y29kZSB0byBrZWVwIHRoZSBsaXZlIHJhbmdlIG9iamVjdCdzIHdyYXBwZXIgYWxpdmUgdG8gcHJl
c2VydmUgYW55IEphdmFTY3JpcHQgcHJvcGVydGllcyBvbiBpdC4KK30KKwordm9pZCBGcmFtZVNl
bGVjdGlvbjo6YXNzb2NpYXRlTGl2ZVJhbmdlKFJhbmdlJiBsaXZlUmFuZ2UpCit7CisgICAgZGlz
YXNzb2NpYXRlTGl2ZVJhbmdlKCk7CisgICAgbV9hc3NvY2lhdGVkTGl2ZVJhbmdlID0gJmxpdmVS
YW5nZTsKKyAgICBsaXZlUmFuZ2UuZGlkQXNzb2NpYXRlV2l0aFNlbGVjdGlvbigpOworICAgIHVw
ZGF0ZUZyb21Bc3NvY2lhdGVkTGl2ZVJhbmdlKCk7Cit9CisKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnVwZGF0ZUZyb21Bc3NvY2lhdGVkTGl2ZVJhbmdlKCkKK3sKKyAgICBBU1NFUlQobV9hc3NvY2lh
dGVkTGl2ZVJhbmdlKTsKKyAgICBpZiAoIWNvbnRhaW5zRW5kcG9pbnRzKG1fZG9jdW1lbnQsICpt
X2Fzc29jaWF0ZWRMaXZlUmFuZ2UpKQorICAgICAgICBkaXNhc3NvY2lhdGVMaXZlUmFuZ2UoKTsK
KyAgICBlbHNlCisgICAgICAgIHNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UoKm1fYXNzb2Np
YXRlZExpdmVSYW5nZSkpOworICAgIC8vIEZJWE1FOiBOb3JtYWxpemF0aW9uIGRvbmUgYnkgc2V0
U2VsZWN0aW9uIHdpbGwgYmUgdmlzaWJsZSBuZXh0IHRpbWUgdXBkYXRlQXNzb2NpYXRlZExpdmVS
YW5nZSBpcyBjYWxsZWQuIEluc3RlYWQgdGhlIFNlbGVjdGlvbiBBUEkgc3BlY2lmaWNhdGlvbiBj
YWxscyBmb3IgYWxsb3dpbmcgbm9uLW5vcm1hbGl6ZWQgc2VsZWN0aW9uIHJhbmdlcy4KK30KKwor
dm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXNzb2NpYXRlZExpdmVSYW5nZSgpCit7CisgICAg
YXV0byByYW5nZSA9IG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoIWNvbnRhaW5z
RW5kcG9pbnRzKG1fZG9jdW1lbnQsIHJhbmdlKSkKKyAgICAgICAgZGlzYXNzb2NpYXRlTGl2ZVJh
bmdlKCk7CisgICAgZWxzZSBpZiAobV9hc3NvY2lhdGVkTGl2ZVJhbmdlKQorICAgICAgICBtX2Fz
c29jaWF0ZWRMaXZlUmFuZ2UtPnVwZGF0ZUZyb21TZWxlY3Rpb24oKnJhbmdlKTsKK30KKwogfQog
CiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogCi12b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uJiBzZWwpCit2b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAgc2VsLnNob3dUcmVlRm9yVGhpcygpOwor
ICAgIHNlbGVjdGlvbi5zaG93VHJlZUZvclRoaXMoKTsKIH0KIAotdm9pZCBzaG93VHJlZShjb25z
dCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiogc2VsKQordm9pZCBzaG93VHJlZShjb25zdCBXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uKQogewotICAgIGlmIChzZWwpCi0gICAgICAg
IHNlbC0+c2hvd1RyZWVGb3JUaGlzKCk7CisgICAgaWYgKHNlbGVjdGlvbikKKyAgICAgICAgc2Vs
ZWN0aW9uLT5zaG93VHJlZUZvclRoaXMoKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggODhmZGZlNmQwYjY1NGFmNTcxOGY2MWJmNDEyYWYy
ZTc5Mzk1MzNiYy4uNmE4MmM2Yzk2N2ZjYjg5ZmI0NjhkNDFhNDc2MGU4ODVmMWM4OTkxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJFZGl0aW5nU3R5bGUuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgpAQCAtMzUsMTAgKzM2LDYgQEAKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
I2luY2x1ZGUgIkNvbG9yLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDaGFyYWN0ZXJEYXRhOwpAQCAtNTEsMTIgKzQ4LDggQEAgY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgUmVuZGVyVmlldzsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIAotZW51bSBFVXNlclRy
aWdnZXJlZCB7IE5vdFVzZXJUcmlnZ2VyZWQgPSAwLCBVc2VyVHJpZ2dlcmVkID0gMSB9OwotCi1l
bnVtIFJldmVhbEV4dGVudE9wdGlvbiB7Ci0gICAgUmV2ZWFsRXh0ZW50LAotICAgIERvTm90UmV2
ZWFsRXh0ZW50Ci19OworZW51bSBFVXNlclRyaWdnZXJlZCA6IGJvb2wgeyBOb3RVc2VyVHJpZ2dl
cmVkLCBVc2VyVHJpZ2dlcmVkIH07CitlbnVtIFJldmVhbEV4dGVudE9wdGlvbiA6IGJvb2wgeyBS
ZXZlYWxFeHRlbnQsIERvTm90UmV2ZWFsRXh0ZW50IH07CiAKIGNsYXNzIENhcmV0QmFzZSB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FyZXRCYXNlKTsKQEAgLTY5LDcgKzYyLDcgQEAgcHJv
dGVjdGVkOgogCiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FyZXRSZWN0KE5vZGUqLCBib29sIGNhcmV0
UmVjdENoYW5nZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBjbGVhckNhcmV0UmVjdCgpOwotICAgIGJv
b2wgdXBkYXRlQ2FyZXRSZWN0KERvY3VtZW50KiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjYXJl
dFBvc2l0aW9uKTsKKyAgICBib29sIHVwZGF0ZUNhcmV0UmVjdChjb25zdCBWaXNpYmxlUG9zaXRp
b24mIGNhcmV0UG9zaXRpb24pOwogICAgIGJvb2wgc2hvdWxkUmVwYWludENhcmV0KGNvbnN0IFJl
bmRlclZpZXcqLCBib29sIGlzQ29udGVudEVkaXRhYmxlKSBjb25zdDsKICAgICB2b2lkIHBhaW50
Q2FyZXQoY29uc3QgTm9kZSYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpIGNvbnN0OwogCkBAIC0xMTgsOCArMTExLDcgQEAg
Y2xhc3MgRnJhbWVTZWxlY3Rpb24gOiBwcml2YXRlIENhcmV0QmFzZSB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBFQWx0ZXJhdGlvbiB7IEFsdGVyYXRp
b25Nb3ZlLCBBbHRlcmF0aW9uRXh0ZW5kIH07Ci0gICAgZW51bSBDdXJzb3JBbGlnbk9uU2Nyb2xs
IHsgQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFsaWduQ3Vyc29yT25TY3JvbGxBbHdheXMgfTsKKyAgICBlbnVtIEN1cnNvckFsaWdu
T25TY3JvbGwgeyBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIEFsaWduQ3Vyc29yT25TY3Jv
bGxBbHdheXMgfTsKICAgICBlbnVtIFNldFNlbGVjdGlvbk9wdGlvbiB7CiAgICAgICAgIEZpcmVT
ZWxlY3RFdmVudCA9IDEgPDwgMCwKICAgICAgICAgQ2xvc2VUeXBpbmcgPSAxIDw8IDEsCkBAIC0x
MzEsMTMgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgUmV2ZWFsU2VsZWN0aW9uID0gMSA8PCA3
LAogICAgICAgICBSZXZlYWxTZWxlY3Rpb25VcFRvTWFpbkZyYW1lID0gMSA8PCA4LAogICAgIH07
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBPcHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9uPiBkZWZh
dWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkID0gTm90
VXNlclRyaWdnZXJlZCkKLSAgICB7Ci0gICAgICAgIE9wdGlvblNldDxTZXRTZWxlY3Rpb25PcHRp
b24+IG9wdGlvbnMgeyBDbG9zZVR5cGluZywgQ2xlYXJUeXBpbmdTdHlsZSB9OwotICAgICAgICBp
ZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQotICAgICAgICAgICAgb3B0aW9ucy5h
ZGQoeyBSZXZlYWxTZWxlY3Rpb24sIEZpcmVTZWxlY3RFdmVudCwgSXNVc2VyVHJpZ2dlcmVkIH0p
OwotICAgICAgICByZXR1cm4gb3B0aW9uczsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBP
cHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9uPiBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhF
VXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
ZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqID0gbnVsbHB0cik7CiAKQEAgLTE4MCwx
MCArMTY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEV4dGVudChjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIHZvaWQgc2V0
RXh0ZW50KGNvbnN0IFBvc2l0aW9uJiwgQWZmaW5pdHksIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNl
clRyaWdnZXJlZCk7CiAKLSAgICAvLyBSZXR1cm4gdGhlIHJlbmRlcmVyIHRoYXQgaXMgcmVzcG9u
c2libGUgZm9yIHBhaW50aW5nIHRoZSBjYXJldCAoaW4gdGhlIHNlbGVjdGlvbiBzdGFydCBub2Rl
KQorICAgIC8vIFJldHVybiB0aGUgcmVuZGVyZXIgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcGFp
bnRpbmcgdGhlIGNhcmV0IChpbiB0aGUgc2VsZWN0aW9uIHN0YXJ0IG5vZGUpLgogICAgIFJlbmRl
ckJsb2NrKiBjYXJldFJlbmRlcmVyV2l0aG91dFVwZGF0aW5nTGF5b3V0KCkgY29uc3Q7CiAKLSAg
ICAvLyBCb3VuZHMgb2YgKHBvc3NpYmx5IHRyYW5zZm9ybWVkKSBjYXJldCBpbiBhYnNvbHV0ZSBj
b29yZHMKKyAgICAvLyBCb3VuZHMgb2YgcG9zc2libHktdHJhbnNmb3JtZWQgY2FyZXQgaW4gYWJz
b2x1dGUgY29vcmRpbmF0ZXMuCiAgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUNh
cmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkID0gbnVsbHB0cik7CiAgICAgdm9pZCBzZXRDYXJl
dFJlY3ROZWVkc1VwZGF0ZSgpIHsgQ2FyZXRCYXNlOjpzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgp
OyB9CiAKQEAgLTIwNywxMyArMTkzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhcmV0Qmxp
bmtpbmdTdXNwZW5kZWQoYm9vbCBzdXNwZW5kZWQpIHsgbV9pc0NhcmV0QmxpbmtpbmdTdXNwZW5k
ZWQgPSBzdXNwZW5kZWQ7IH0KICAgICBib29sIGlzQ2FyZXRCbGlua2luZ1N1c3BlbmRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNDYXJldEJsaW5raW5nU3VzcGVuZGVkOyB9CiAKLSAgICAvLyBGb2N1
cwogICAgIHZvaWQgc2V0Rm9jdXNlZChib29sKTsKICAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9jdXNlZDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNGb2N1c2Vk
QW5kQWN0aXZlKCkgY29uc3Q7CiAgICAgdm9pZCBwYWdlQWN0aXZhdGlvbkNoYW5nZWQoKTsKIAot
ICAgIC8vIFBhaW50aW5nLgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlQXBwZWFyYW5j
ZSgpOwogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpAQCAtMjM5LDExICsyMjMsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV91cGRhdGVBcHBlYXJhbmNlRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0VXBkYXRlQXBwZWFy
YW5jZUVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fdXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQgPSBl
bmFibGVkOyB9CiAgICAgdm9pZCBzdXBwcmVzc1Njcm9sbGluZygpIHsgKyttX3Njcm9sbGluZ1N1
cHByZXNzQ291bnQ7IH0KLSAgICB2b2lkIHJlc3RvcmVTY3JvbGxpbmcoKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCk7Ci0gICAgICAgIC0tbV9zY3JvbGxp
bmdTdXBwcmVzc0NvdW50OwotICAgIH0KKyAgICB2b2lkIHJlc3RvcmVTY3JvbGxpbmcoKTsKICNl
bmRpZgogCiAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpIGNvbnN0OwpAQCAtMjcxLDkgKzI1MSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91
bGRTaG93QmxvY2tDdXJzb3IoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNob3dCbG9ja0N1cnNv
cjsgfQogICAgIHZvaWQgc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vyc29yKGJvb2wpOwogCi1wcml2YXRl
OgotICAgIGVudW0gRVBvc2l0aW9uVHlwZSB7IFNUQVJULCBFTkQsIEJBU0UsIEVYVEVOVCB9Owor
ICAgIFJlZlB0cjxSYW5nZT4gYXNzb2NpYXRlZExpdmVSYW5nZSgpOworICAgIHZvaWQgYXNzb2Np
YXRlTGl2ZVJhbmdlKFJhbmdlJik7CisgICAgdm9pZCBkaXNhc3NvY2lhdGVMaXZlUmFuZ2UoKTsK
KyAgICB2b2lkIHVwZGF0ZUZyb21Bc3NvY2lhdGVkTGl2ZVJhbmdlKCk7CiAKK3ByaXZhdGU6CiAg
ICAgdm9pZCB1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQmKTsKICAgICB2b2lkIHVwZGF0ZURhdGFEZXRlY3RvcnNGb3JTZWxlY3Rpb24oKTsKIApA
QCAtMjk3LDE0ICsyODAsMTEgQEAgcHJpdmF0ZToKICAgICBWaXNpYmxlUG9zaXRpb24gbW9kaWZ5
TW92aW5nTGVmdChUZXh0R3JhbnVsYXJpdHksIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxw
dHIpOwogICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlNb3ZpbmdCYWNrd2FyZChUZXh0R3JhbnVs
YXJpdHksIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpOwogCi0gICAgTGF5b3V0VW5p
dCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oRVBvc2l0aW9u
VHlwZSk7CisgICAgZW51bSBQb3NpdGlvblR5cGUgOiB1aW50OF90IHsgU3RhcnQsIEVuZCwgRXh0
ZW50IH07CisgICAgTGF5b3V0VW5pdCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlv
bk5hdmlnYXRpb24oUG9zaXRpb25UeXBlKTsKIAogICAgIEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50
IHRleHRTZWxlY3Rpb25JbnRlbnQoRUFsdGVyYXRpb24sIFNlbGVjdGlvbkRpcmVjdGlvbiwgVGV4
dEdyYW51bGFyaXR5KTsKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKICAgICB2b2lkIG5vdGlm
eUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQmKTsKLSNlbHNlCi0gICAgdm9pZCBub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9u
Q2hhbmdlKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JikgeyB9Ci0jZW5kaWYKIAogICAg
IHZvaWQgdXBkYXRlU2VsZWN0aW9uQ2FjaGVzSWZTZWxlY3Rpb25Jc0luc2lkZVRleHRGb3JtQ29u
dHJvbChFVXNlclRyaWdnZXJlZCk7CiAKQEAgLTMyOCwxMyArMzA4LDE0IEBAIHByaXZhdGU6CiAg
ICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24o
RUFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBEb2N1bWVudCog
bV9kb2N1bWVudDsKLQotICAgIExheW91dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb247CisgICAgdm9pZCB1cGRhdGVBc3NvY2lhdGVkTGl2ZVJhbmdlKCk7CiAKKyAgICBXZWFr
UHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworICAgIFJlZlB0cjxSYW5nZT4gbV9hc3NvY2lhdGVk
TGl2ZVJhbmdlOworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG1feFBvc0ZvclZlcnRpY2FsQXJy
b3dOYXZpZ2F0aW9uOwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIG1fb3JpZ2luYWxCYXNlOyAvLyBVc2VkIHRvIHN0b3JlIGJhc2UgYmVmb3Jl
IHRoZSBhZGp1c3RtZW50IGF0IGJpZGkgYm91bmRhcnkKLSAgICBUZXh0R3JhbnVsYXJpdHkgbV9n
cmFudWxhcml0eTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbV9vcmlnaW5hbEJhc2U7IC8vIFVzZWQg
dG8gc3RvcmUgYmFzZSBiZWZvcmUgdGhlIGFkanVzdG1lbnQgYXQgYmlkaSBib3VuZGFyeS4KKyAg
ICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eSB7IFRleHRHcmFudWxhcml0eTo6Q2hhcmFj
dGVyR3JhbnVsYXJpdHkgfTsKIAogICAgIFJlZlB0cjxOb2RlPiBtX3ByZXZpb3VzQ2FyZXROb2Rl
OyAvLyBUaGUgbGFzdCBub2RlIHdoaWNoIHBhaW50ZWQgdGhlIGNhcmV0LiBSZXRhaW5lZCBmb3Ig
Y2xlYXJpbmcgdGhlIG9sZCBjYXJldCB3aGVuIGl0IG1vdmVzLgogCkBAIC0zNjcsNiArMzQ4LDE0
IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKK2NvbnN0ZXhwciBhdXRvIEZyYW1lU2VsZWN0aW9u
OjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVk
KSAtPiBPcHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9uPgoreworICAgIE9wdGlvblNldDxTZXRT
ZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMgeyBDbG9zZVR5cGluZywgQ2xlYXJUeXBpbmdTdHlsZSB9
OworICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQpCisgICAgICAgIG9wdGlv
bnMuYWRkKHsgUmV2ZWFsU2VsZWN0aW9uLCBGaXJlU2VsZWN0RXZlbnQsIElzVXNlclRyaWdnZXJl
ZCB9KTsKKyAgICByZXR1cm4gb3B0aW9uczsKK30KKwogaW5saW5lIEVkaXRpbmdTdHlsZSogRnJh
bWVTZWxlY3Rpb246OnR5cGluZ1N0eWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV90eXBpbmdT
dHlsZS5nZXQoKTsKQEAgLTM3NywxOCArMzY2LDMwIEBAIGlubGluZSB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpjbGVhclR5cGluZ1N0eWxlKCkKICAgICBtX3R5cGluZ1N0eWxlID0gbnVsbHB0cjsKIH0K
IAotI2lmICEoUExBVEZPUk0oQ09DT0EpIHx8IFVTRShBVEspKQotI2lmIEVOQUJMRShBQ0NFU1NJ
QklMSVRZKQorI2lmICEoRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIChQTEFURk9STShDT0NPQSkg
fHwgVVNFKEFUSykpKQorCiBpbmxpbmUgdm9pZCBGcmFtZVNlbGVjdGlvbjo6bm90aWZ5QWNjZXNz
aWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYp
CiB7CiB9CisKICNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorCitpbmxpbmUgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6cmVzdG9yZVNjcm9sbGluZygpCit7CisgICAgQVNTRVJUKG1fc2Nyb2xsaW5n
U3VwcHJlc3NDb3VudCk7CisgICAgLS1tX3Njcm9sbGluZ1N1cHByZXNzQ291bnQ7Cit9CisKICNl
bmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJ
TkcpCisKIC8vIE91dHNpZGUgdGhlIFdlYkNvcmUgbmFtZXNwYWNlIGZvciBlYXNlIG9mIGludm9j
YXRpb24gZnJvbSB0aGUgZGVidWdnZXIuCiB2b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OkZy
YW1lU2VsZWN0aW9uJik7CiB2b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uKik7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxl
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IDE3
MmE1MWYxNzJjMjUzYmQ4ZTY4MWRhM2FiNjczM2QxMWI1OGFlY2UuLjI5OTcwMmU3MmEzZmE4ZmM4
NjY1YmY3NmEwZTdiM2I2OTMxYmU4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MzUsMTkgKzM1LDE4IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVj
dGlvbi5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgTm9k
ZSogc2VsZWN0aW9uU2hhZG93QW5jZXN0b3IoRnJhbWUmIGZyYW1lKQorc3RhdGljIFJlZlB0cjxO
b2RlPiBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihGcmFtZSYgZnJhbWUpCiB7CisgICAgQVNTRVJU
KCFmcmFtZS5zZXR0aW5ncygpLmxpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQoKSk7CiAgICAgYXV0
byogbm9kZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmJhc2UoKS5hbmNob3JOb2Rl
KCk7Ci0gICAgaWYgKCFub2RlKQorICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNJblNoYWRvd1Ry
ZWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFub2RlLT5pc0luU2hhZG93
VHJlZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAvLyBGSVhNRTogVW5jbGVhciBv
biB3aHkgdGhpcyBuZWVkcyB0byBiZSB0aGUgcG9zc2libHkgbnVsbCBmcmFtZS5kb2N1bWVudCgp
IGluc3RlYWQgb2YgdGhlIG5ldmVyIG51bGwgbm9kZS0+ZG9jdW1lbnQoKS4KLSAgICByZXR1cm4g
ZnJhbWUuZG9jdW1lbnQoKS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUobm9kZSk7CisgICAgcmV0
dXJuIG5vZGUtPmRvY3VtZW50KCkuYW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUobm9kZSk7CiB9CiAK
IERPTVNlbGVjdGlvbjo6RE9NU2VsZWN0aW9uKERPTVdpbmRvdyYgd2luZG93KQpAQCAtNTUsMTAx
ICs1NCwxMTMgQEAgRE9NU2VsZWN0aW9uOjpET01TZWxlY3Rpb24oRE9NV2luZG93JiB3aW5kb3cp
CiB7CiB9CiAKLWNvbnN0IFZpc2libGVTZWxlY3Rpb24mIERPTVNlbGVjdGlvbjo6dmlzaWJsZVNl
bGVjdGlvbigpIGNvbnN0CitSZWY8RE9NU2VsZWN0aW9uPiBET01TZWxlY3Rpb246OmNyZWF0ZShE
T01XaW5kb3cmIHdpbmRvdykKIHsKLSAgICBBU1NFUlQoZnJhbWUoKSk7Ci0gICAgcmV0dXJuIGZy
YW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IERPTVNlbGVjdGlvbih3aW5kb3cpKTsKIH0KIAotc3RhdGljIFBvc2l0aW9uIGFuY2hvclBvc2l0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK1JlZlB0cjxGcmFtZT4gRE9N
U2VsZWN0aW9uOjpmcmFtZSgpIGNvbnN0CiB7Ci0gICAgYXV0byBhbmNob3IgPSBzZWxlY3Rpb24u
aXNCYXNlRmlyc3QoKSA/IHNlbGVjdGlvbi5zdGFydCgpIDogc2VsZWN0aW9uLmVuZCgpOwotICAg
IHJldHVybiBhbmNob3IucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CisgICAgcmV0dXJuIERP
TVdpbmRvd1Byb3BlcnR5OjpmcmFtZSgpOwogfQogCi1zdGF0aWMgUG9zaXRpb24gZm9jdXNQb3Np
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCitPcHRpb25hbDxTaW1wbGVS
YW5nZT4gRE9NU2VsZWN0aW9uOjpyYW5nZSgpIGNvbnN0CiB7Ci0gICAgYXV0byBmb2N1cyA9IHNl
bGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8gc2VsZWN0aW9uLmVuZCgpIDogc2VsZWN0aW9uLnN0YXJ0
KCk7Ci0gICAgcmV0dXJuIGZvY3VzLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOworICAgIGF1
dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgYXV0byByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+c3RhcnQuY29u
dGFpbmVyLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIHJldHVybiByYW5nZTsKIH0KIAotc3RhdGljIFBvc2l0aW9uIGJhc2VQb3NpdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCitQb3NpdGlvbiBET01TZWxlY3Rpb246OmFu
Y2hvclBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uLmJhc2UoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKKyAgICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8mIHNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gKHNlbGVjdGlv
bi5pc0Jhc2VGaXJzdCgpID8gc2VsZWN0aW9uLnN0YXJ0KCkgOiBzZWxlY3Rpb24uZW5kKCkpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogfQogCi1zdGF0aWMgUG9zaXRpb24gZXh0ZW50UG9z
aXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQorUG9zaXRpb24gRE9NU2Vs
ZWN0aW9uOjpmb2N1c1Bvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2VsZWN0aW9uLmV4
dGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlz
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0
byYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIHJldHVy
biAoc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBzZWxlY3Rpb24uZW5kKCkgOiBzZWxlY3Rpb24u
c3RhcnQoKSkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiB9CiAKLU5vZGUqIERPTVNlbGVj
dGlvbjo6YW5jaG9yTm9kZSgpIGNvbnN0CitQb3NpdGlvbiBET01TZWxlY3Rpb246OmJhc2VQb3Np
dGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gc2hhZG93QWRqdXN0ZWROb2RlKGFuY2hvclBvc2l0aW9uKHZpc2libGVT
ZWxlY3Rpb24oKSkpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5iYXNlKCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Cit9CisKK1Bv
c2l0aW9uIERPTVNlbGVjdGlvbjo6ZXh0ZW50UG9zaXRpb24oKSBjb25zdAoreworICAgIGF1dG8g
ZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiB7
IH07CisgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5leHRlbnQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKK30KKworUmVmUHRyPE5vZGU+IERPTVNlbGVjdGlv
bjo6YW5jaG9yTm9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNoYWRvd0FkanVzdGVkTm9kZShh
bmNob3JQb3NpdGlvbigpKTsKIH0KIAogdW5zaWduZWQgRE9NU2VsZWN0aW9uOjphbmNob3JPZmZz
ZXQoKSBjb25zdAogewotICAgIGlmICghZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIHNoYWRvd0FkanVzdGVkT2Zmc2V0KGFuY2hvclBvc2l0aW9uKHZpc2libGVTZWxlY3Rp
b24oKSkpOworICAgIHJldHVybiBzaGFkb3dBZGp1c3RlZE9mZnNldChhbmNob3JQb3NpdGlvbigp
KTsKIH0KIAotTm9kZSogRE9NU2VsZWN0aW9uOjpmb2N1c05vZGUoKSBjb25zdAorUmVmUHRyPE5v
ZGU+IERPTVNlbGVjdGlvbjo6Zm9jdXNOb2RlKCkgY29uc3QKIHsKLSAgICBpZiAoIWZyYW1lKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBzaGFkb3dBZGp1c3RlZE5vZGUo
Zm9jdXNQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpKTsKKyAgICByZXR1cm4gc2hhZG93QWRq
dXN0ZWROb2RlKGZvY3VzUG9zaXRpb24oKSk7CiB9CiAKIHVuc2lnbmVkIERPTVNlbGVjdGlvbjo6
Zm9jdXNPZmZzZXQoKSBjb25zdAogewotICAgIGlmICghZnJhbWUoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIHNoYWRvd0FkanVzdGVkT2Zmc2V0KGZvY3VzUG9zaXRpb24odmlzaWJs
ZVNlbGVjdGlvbigpKSk7CisgICAgcmV0dXJuIHNoYWRvd0FkanVzdGVkT2Zmc2V0KGZvY3VzUG9z
aXRpb24oKSk7CiB9CiAKLU5vZGUqIERPTVNlbGVjdGlvbjo6YmFzZU5vZGUoKSBjb25zdAorUmVm
UHRyPE5vZGU+IERPTVNlbGVjdGlvbjo6YmFzZU5vZGUoKSBjb25zdAogewotICAgIGlmICghZnJh
bWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHNoYWRvd0FkanVzdGVk
Tm9kZShiYXNlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKSk7CisgICAgcmV0dXJuIHNoYWRv
d0FkanVzdGVkTm9kZShiYXNlUG9zaXRpb24oKSk7CiB9CiAKIHVuc2lnbmVkIERPTVNlbGVjdGlv
bjo6YmFzZU9mZnNldCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZSgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gc2hhZG93QWRqdXN0ZWRPZmZzZXQoYmFzZVBvc2l0aW9uKHZpc2li
bGVTZWxlY3Rpb24oKSkpOworICAgIHJldHVybiBzaGFkb3dBZGp1c3RlZE9mZnNldChiYXNlUG9z
aXRpb24oKSk7CiB9CiAKLU5vZGUqIERPTVNlbGVjdGlvbjo6ZXh0ZW50Tm9kZSgpIGNvbnN0CitS
ZWZQdHI8Tm9kZT4gRE9NU2VsZWN0aW9uOjpleHRlbnROb2RlKCkgY29uc3QKIHsKLSAgICBpZiAo
IWZyYW1lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBzaGFkb3dBZGp1
c3RlZE5vZGUoZXh0ZW50UG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKSk7CisgICAgcmV0dXJu
IHNoYWRvd0FkanVzdGVkTm9kZShleHRlbnRQb3NpdGlvbigpKTsKIH0KIAogdW5zaWduZWQgRE9N
U2VsZWN0aW9uOjpleHRlbnRPZmZzZXQoKSBjb25zdAogewotICAgIGlmICghZnJhbWUoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHNoYWRvd0FkanVzdGVkT2Zmc2V0KGV4dGVudFBv
c2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkpOworICAgIHJldHVybiBzaGFkb3dBZGp1c3RlZE9m
ZnNldChleHRlbnRQb3NpdGlvbigpKTsKIH0KIAogYm9vbCBET01TZWxlY3Rpb246OmlzQ29sbGFw
c2VkKCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSB8fCBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcigqZnJhbWUpKQorICAgIGF1dG8gZnJh
bWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiAhZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKTsKKyAgICBhdXRvIHJh
bmdlID0gdGhpcy0+cmFuZ2UoKTsKKyAgICByZXR1cm4gIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBz
ZWQoKTsKIH0KIAogU3RyaW5nIERPTVNlbGVjdGlvbjo6dHlwZSgpIGNvbnN0CiB7Ci0gICAgYXV0
byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgp
OwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAiTm9uZSJfczsKICAgICBhdXRvJiBz
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7CkBAIC0xNjIsNzkgKzE3Myw5OSBAQCBTdHJp
bmcgRE9NU2VsZWN0aW9uOjp0eXBlKCkgY29uc3QKIAogdW5zaWduZWQgRE9NU2VsZWN0aW9uOjpy
YW5nZUNvdW50KCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7Cisg
ICAgYXV0byBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgcmV0dXJuICFmcmFtZSB8fCBmcmFt
ZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgPyAwIDogMTsKIH0KIAotdm9pZCBET01TZWxlY3Rpb246
OmNvbGxhcHNlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPHZvaWQ+
IERPTVNlbGVjdGlvbjo6Y29sbGFwc2UoTm9kZSogbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogewot
ICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKG5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKCpmcmFtZSgpKTsKLSAgICBwcm90ZWN0ZWRGcmFt
ZS0+c2VsZWN0aW9uKCkubW92ZVRvKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBv
ZmZzZXQpLCBBZmZpbml0eTo6RG93bnN0cmVhbSk7CisgICAgYXV0byBmcmFtZSA9IHRoaXMtPmZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAoZnJh
bWUtPnNldHRpbmdzKCkubGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
ICghbm9kZSkgeworICAgICAgICAgICAgcmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gKmZyYW1lLT5k
b2N1bWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50LmNvbnRhaW5zKCpub2RlKSkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IFJhbmdlOjpjaGVj
a05vZGVPZmZzZXRQYWlyKCpub2RlLCBvZmZzZXQpOyByZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihub2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24o
KTsKKyAgICBzZWxlY3Rpb24uZGlzYXNzb2NpYXRlTGl2ZVJhbmdlKCk7CisgICAgc2VsZWN0aW9u
Lm1vdmVUbyhtYWtlQ29udGFpbmVyT2Zmc2V0UG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgQWZmaW5p
dHk6OkRvd25zdHJlYW0pOworICAgIHJldHVybiB7IH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+
IERPTVNlbGVjdGlvbjo6Y29sbGFwc2VUb0VuZCgpCiB7Ci0gICAgYXV0byogZnJhbWUgPSB0aGlz
LT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUtPnNl
bGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0
b3IoKmZyYW1lKTsKKyAgICBzZWxlY3Rpb24uZGlzYXNzb2NpYXRlTGl2ZVJhbmdlKCk7CiAgICAg
c2VsZWN0aW9uLm1vdmVUbyhzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCksIEFmZmluaXR5OjpE
b3duc3RyZWFtKTsKICAgICByZXR1cm4geyB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBET01T
ZWxlY3Rpb246OmNvbGxhcHNlVG9TdGFydCgpCiB7Ci0gICAgYXV0byogZnJhbWUgPSB0aGlzLT5m
cmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3Io
KmZyYW1lKTsKKyAgICBzZWxlY3Rpb24uZGlzYXNzb2NpYXRlTGl2ZVJhbmdlKCk7CiAgICAgc2Vs
ZWN0aW9uLm1vdmVUbyhzZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKSwgQWZmaW5pdHk6OkRv
d25zdHJlYW0pOwogICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjplbXB0
eSgpCiB7Ci0gICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKKyAgICBy
ZW1vdmVBbGxSYW5nZXMoKTsKIH0KIAotdm9pZCBET01TZWxlY3Rpb246OnNldEJhc2VBbmRFeHRl
bnQoTm9kZSogYmFzZU5vZGUsIHVuc2lnbmVkIGJhc2VPZmZzZXQsIE5vZGUqIGV4dGVudE5vZGUs
IHVuc2lnbmVkIGV4dGVudE9mZnNldCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6
c2V0QmFzZUFuZEV4dGVudChOb2RlKiBiYXNlTm9kZSwgdW5zaWduZWQgYmFzZU9mZnNldCwgTm9k
ZSogZXh0ZW50Tm9kZSwgdW5zaWduZWQgZXh0ZW50T2Zmc2V0KQogewotICAgIGlmICghaXNWYWxp
ZEZvclBvc2l0aW9uKGJhc2VOb2RlKSB8fCAhaXNWYWxpZEZvclBvc2l0aW9uKGV4dGVudE5vZGUp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKCpmcmFt
ZSgpKTsKLSAgICBwcm90ZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCkubW92ZVRvKGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihiYXNlTm9kZSwgYmFzZU9mZnNldCksIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihleHRlbnROb2RlLCBleHRlbnRPZmZzZXQpLCBBZmZpbml0eTo6RG93bnN0cmVh
bSk7CisgICAgYXV0byBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkubGl2ZVJhbmdlU2Vs
ZWN0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gdGhpcyBi
eSBtYWtpbmcgdGhlIGFyZ3VtZW50cyBub24tbnVsbGFibGUgaW4gdGhlIElETCBmaWxlLCBvbmNl
IGxpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQgaXMgYWx3YXlzIHRydWUuCisgICAgICAgIGlmICgh
YmFzZU5vZGUgfHwgIWV4dGVudE5vZGUpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
VHlwZUVycm9yIH07CisgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gKmZyYW1lLT5kb2N1bWVudCgp
OworICAgICAgICBpZiAoIWRvY3VtZW50LmNvbnRhaW5zKCpiYXNlTm9kZSkgfHwgIWRvY3VtZW50
LmNvbnRhaW5zKCpleHRlbnROb2RlKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IGlmIChhdXRvIHJlc3VsdCA9IFJhbmdlOjpjaGVja05vZGVPZmZzZXRQYWlyKCpiYXNlTm9kZSwg
YmFzZU9mZnNldCk7IHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBSYW5n
ZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpcigqZXh0ZW50Tm9kZSwgZXh0ZW50T2Zmc2V0KTsgcmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24oYmFz
ZU5vZGUpIHx8ICFpc1ZhbGlkRm9yUG9zaXRpb24oZXh0ZW50Tm9kZSkpCisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9u
KCk7CisgICAgc2VsZWN0aW9uLmRpc2Fzc29jaWF0ZUxpdmVSYW5nZSgpOworICAgIHNlbGVjdGlv
bi5tb3ZlVG8obWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKGJhc2VOb2RlLCBiYXNlT2Zmc2V0
KSwgbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKGV4dGVudE5vZGUsIGV4dGVudE9mZnNldCks
IEFmZmluaXR5OjpEb3duc3RyZWFtKTsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIERPTVNl
bGVjdGlvbjo6c2V0UG9zaXRpb24oTm9kZSogbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQorRXhjZXB0
aW9uT3I8dm9pZD4gRE9NU2VsZWN0aW9uOjpzZXRQb3NpdGlvbihOb2RlKiBub2RlLCB1bnNpZ25l
ZCBvZmZzZXQpCiB7Ci0gICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24obm9kZSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKmZyYW1lKCkpOwotICAg
IHByb3RlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKS5tb3ZlVG8oY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG5vZGUsIG9mZnNldCksIEFmZmluaXR5OjpEb3duc3RyZWFtKTsKKyAgICByZXR1cm4g
Y29sbGFwc2Uobm9kZSwgb2Zmc2V0KTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246Om1vZGlmeShj
b25zdCBTdHJpbmcmIGFsdGVyU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywg
Y29uc3QgU3RyaW5nJiBncmFudWxhcml0eVN0cmluZykKIHsKLSAgICBhdXRvKiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgRnJh
bWVTZWxlY3Rpb246OkVBbHRlcmF0aW9uIGFsdGVyOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShhbHRlclN0cmluZywgImV4dGVuZCIpKQogICAgICAgICBhbHRlciA9IEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kOwpAQCAtMjc3LDIwICszMDgsMjkgQEAgdm9p
ZCBET01TZWxlY3Rpb246Om1vZGlmeShjb25zdCBTdHJpbmcmIGFsdGVyU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGRpcmVjdGlvblN0cmkKICAgICBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
ZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlm
eShhbHRlciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgaWYgKGF1dG8gZnJhbWUgPSB0
aGlzLT5mcmFtZSgpKQorICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KGFsdGVyLCBk
aXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gRE9NU2VsZWN0
aW9uOjpleHRlbmQoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogewotICAgIGF1dG8gZnJh
bWUgPSBtYWtlUmVmUHRyKHRoaXMtPmZyYW1lKCkpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5m
cmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKG9m
ZnNldCA+IG5vZGUubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNp
emVFcnJvciB9OwotICAgIGlmICghaXNWYWxpZEZvclBvc2l0aW9uKCZub2RlKSkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0RXh0ZW50KGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgb2Zmc2V0KSwgQWZmaW5pdHk6OkRvd25zdHJlYW0pOwor
ICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKS5saXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkKCkpIHsK
KyAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKS0+Y29udGFpbnMobm9kZSkpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBSYW5nZTo6Y2hlY2tO
b2RlT2Zmc2V0UGFpcihub2RlLCBvZmZzZXQpOyByZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAob2Zmc2V0ID4gbm9kZS5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OworICAgICAgICBpZiAoIWlzVmFsaWRGb3JQb3Np
dGlvbigmbm9kZSkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBhdXRvJiBz
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgc2VsZWN0aW9uLmRpc2Fzc29jaWF0
ZUxpdmVSYW5nZSgpOworICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQobWFrZUNvbnRhaW5lck9mZnNl
dFBvc2l0aW9uKCZub2RlLCBvZmZzZXQpLCBBZmZpbml0eTo6RG93bnN0cmVhbSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIApAQCAtMjk4LDE1ICszMzgsMTcgQEAgRXhjZXB0aW9uT3I8UmVmPFJhbmdl
Pj4gRE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KHVuc2lnbmVkIGluZGV4KQogewogICAgIGlmIChp
bmRleCA+PSByYW5nZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNp
emVFcnJvciB9OwotICAgIGF1dG8mIGZyYW1lID0gKnRoaXMtPmZyYW1lKCk7CisgICAgYXV0byBm
cmFtZSA9IHRoaXMtPmZyYW1lKCkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoZnJhbWUtPnNl
dHRpbmdzKCkubGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZnJh
bWUtPnNlbGVjdGlvbigpLmFzc29jaWF0ZWRMaXZlUmFuZ2UoKS5yZWxlYXNlTm9uTnVsbCgpOwog
ICAgIGlmIChhdXRvIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3IoZnJh
bWUpKQogICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1ha2VTaW1wbGVSYW5nZSgqbWFr
ZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlKCpzaGFkb3dBbmNlc3RvcikpKTsKLSAgICByZXR1cm4g
Y3JlYXRlTGl2ZVJhbmdlKCpmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCkpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6cmVtb3ZlQWxs
UmFuZ2VzKCkKIHsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgYXV0byBm
cmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5jbGVhcigpOwpAQCAtMzE0LDUxICszNTYsNjAgQEAgdm9p
ZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCiAKIHZvaWQgRE9NU2VsZWN0aW9uOjph
ZGRSYW5nZShSYW5nZSYgbGl2ZVJhbmdlKQogewotICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRy
KHRoaXMtPmZyYW1lKCkpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlm
ICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2UobGl2ZVJhbmdlKTsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9u
KCk7Ci0KKyAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkubGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxl
ZCgpKSB7CisgICAgICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCisgICAgICAgICAgICBzZWxl
Y3Rpb24uYXNzb2NpYXRlTGl2ZVJhbmdlKGxpdmVSYW5nZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShsaXZlUmFuZ2UpOwogICAgIGlm
IChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkgewogICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+
Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSAmJiBpbnRlcnNlY3RzKCpzZWxlY3RlZFJhbmdlLCByYW5n
ZSkpCiAgICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKHVuaW9uUmFuZ2UoKnNlbGVj
dGVkUmFuZ2UsIHJhbmdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KICAgICBzZWxlY3Rp
b24uc2V0U2VsZWN0aW9uKHJhbmdlKTsKIH0KIAorRXhjZXB0aW9uT3I8dm9pZD4gRE9NU2VsZWN0
aW9uOjpyZW1vdmVSYW5nZShSYW5nZSYgbGl2ZVJhbmdlKQoreworICAgIGF1dG8gZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiB7IH07CisgICAg
QVNTRVJUKGZyYW1lLT5zZXR0aW5ncygpLmxpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQoKSk7Cisg
ICAgaWYgKCZsaXZlUmFuZ2UgIT0gZnJhbWUtPnNlbGVjdGlvbigpLmFzc29jaWF0ZWRMaXZlUmFu
Z2UoKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IgfTsKKyAgICBy
ZW1vdmVBbGxSYW5nZXMoKTsKKyAgICByZXR1cm4geyB9OworfQorCiB2b2lkIERPTVNlbGVjdGlv
bjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKIHsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cih0
aGlzLT5mcmFtZSgpKTsKKyAgICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm47Ci0KKyAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkubGl2
ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLmFzc29jaWF0ZWRMaXZlUmFuZ2UoKSkKKyAgICAgICAgICAgIHJhbmdl
LT5kZWxldGVDb250ZW50cygpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGF1dG8gc2Vs
ZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5zdGFydC5j
b250YWluZXItPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybjsKLQogICAg
IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmRlbGV0ZUNvbnRlbnRzKCk7CiAgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobWFrZVNpbXBsZVJhbmdlKHNlbGVj
dGVkUmFuZ2UtPnN0YXJ0KSwgQWZmaW5pdHk6OkRvd25zdHJlYW0sIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6Tm8pOwogfQogCiBib29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNO
b2RlKE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBUaGlzIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIHdoYXQgdGhlIHNlbGVjdGlvbiBBUEkgc3Rh
bmRhcmQgc3BlY2lmaWVzLgotICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkKKyAgICAvLyBGSVhN
RTogVGhpcyBpcyB3cm9uZywgYW5kIHdhcyBhZGRlZCB0byB3b3JrIGFyb3VuZCBhbm9tYWxpZXMg
Y2F1c2VkIHdoZW4gd2UgY2Fub25pY2FsaXplIHNlbGVjdGlvbiBlbmRwb2ludHMuIFdlIHNob3Vs
ZCBmaXggdGhhdCBhbmQgcmVtb3ZlIHRoaXMuCisgICAgaWYgKG5vZGUuaXNUZXh0Tm9kZSgpICYm
ICFub2RlLmRvY3VtZW50KCkuc2V0dGluZ3MoKS5saXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkKCkp
CiAgICAgICAgIGFsbG93UGFydGlhbCA9IHRydWU7Ci0KLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMt
PmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0
UmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+c3RhcnQu
Y29udGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gYWxsb3dQYXJ0aWFsID8gaW50ZXJzZWN0cygqc2VsZWN0ZWRSYW5nZSwg
bm9kZSkgOiBjb250YWlucygqc2VsZWN0ZWRSYW5nZSwgbm9kZSk7CisgICAgYXV0byByYW5nZSA9
IHRoaXMtPnJhbmdlKCk7CisgICAgcmV0dXJuIHJhbmdlICYmIChhbGxvd1BhcnRpYWwgPyBpbnRl
cnNlY3RzKCpyYW5nZSwgbm9kZSkgOiBjb250YWlucygqcmFuZ2UsIG5vZGUpKTsKIH0KIAogdm9p
ZCBET01TZWxlY3Rpb246OnNlbGVjdEFsbENoaWxkcmVuKE5vZGUmIG5vZGUpCkBAIC0zNjcsMjAg
KzQxOCwyOSBAQCB2b2lkIERPTVNlbGVjdGlvbjo6c2VsZWN0QWxsQ2hpbGRyZW4oTm9kZSYgbm9k
ZSkKICAgICBzZXRCYXNlQW5kRXh0ZW50KCZub2RlLCAwLCAmbm9kZSwgbm9kZS5jb3VudENoaWxk
Tm9kZXMoKSk7CiB9CiAKLVN0cmluZyBET01TZWxlY3Rpb246OnRvU3RyaW5nKCkKK1N0cmluZyBE
T01TZWxlY3Rpb246OnRvU3RyaW5nKCkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMt
PmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoZnJhbWUt
PnNldHRpbmdzKCkubGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8g
cmFuZ2UgPSB0aGlzLT5yYW5nZSgpOworICAgICAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHQo
KnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgfQorICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIHJldHVybiByYW5nZSA/
IHBsYWluVGV4dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAotTm9kZSogRE9NU2VsZWN0
aW9uOjpzaGFkb3dBZGp1c3RlZE5vZGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAor
UmVmUHRyPE5vZGU+IERPTVNlbGVjdGlvbjo6c2hhZG93QWRqdXN0ZWROb2RlKGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCisgICAgaWYgKGZyYW1lKCktPnNldHRpbmdzKCkubGl2ZVJh
bmdlU2VsZWN0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8gbm9kZSA9IHBvc2l0aW9uLmNv
bnRhaW5lck5vZGUoKTsKKyAgICAgICAgcmV0dXJuICFub2RlIHx8IG5vZGUtPmlzSW5TaGFkb3dU
cmVlKCkgPyBudWxscHRyIDogbm9kZTsKKyAgICB9CisKICAgICBhdXRvKiBjb250YWluZXJOb2Rl
ID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwogICAgIGF1dG8qIGFkanVzdGVkTm9kZSA9IGZy
YW1lKCktPmRvY3VtZW50KCktPmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKGNvbnRhaW5lck5vZGUp
OwogICAgIGlmICghYWRqdXN0ZWROb2RlKQpAQCAtMzk3LDYgKzQ1Nyw5IEBAIHVuc2lnbmVkIERP
TVNlbGVjdGlvbjo6c2hhZG93QWRqdXN0ZWRPZmZzZXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
KSBjb25zdAogICAgIGlmIChwb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
KyAgICBpZiAoZnJhbWUoKS0+c2V0dGluZ3MoKS5saXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkKCkp
CisgICAgICAgIHJldHVybiBzaGFkb3dBZGp1c3RlZE5vZGUocG9zaXRpb24pID8gcG9zaXRpb24u
Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpIDogMDsKKwogICAgIGF1dG8qIGNvbnRhaW5l
ck5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CiAgICAgYXV0byogYWRqdXN0ZWROb2Rl
ID0gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUoY29udGFpbmVy
Tm9kZSk7CiAgICAgaWYgKCFhZGp1c3RlZE5vZGUpCkBAIC00MTAsNyArNDczLDggQEAgdW5zaWdu
ZWQgRE9NU2VsZWN0aW9uOjpzaGFkb3dBZGp1c3RlZE9mZnNldChjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24pIGNvbnN0CiAKIGJvb2wgRE9NU2VsZWN0aW9uOjppc1ZhbGlkRm9yUG9zaXRpb24oTm9k
ZSogbm9kZSkgY29uc3QKIHsKLSAgICBhdXRvKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAg
YXV0byBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgQVNTRVJUKCFmcmFtZS0+c2V0dGluZ3Mo
KS5saXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkKCkpOwogICAgIHJldHVybiBmcmFtZSAmJiAoIW5v
ZGUgfHwgJm5vZGUtPmRvY3VtZW50KCkgPT0gZnJhbWUtPmRvY3VtZW50KCkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01TZWxlY3Rpb24uaAppbmRleCAxMThlOTRlZjAwNzQ3MmRmMWE1NGE2MmEwMDFk
NzcyOGYwZjAwZWI5Li4wMmQwMGY2ZGI1ODBmN2IyOGJkNTJlN2I2Njc1OTQxMjg0ZTNiZjJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNDIsNTAgKzQyLDU5IEBAIGNsYXNzIFBvc2l0aW9uOwogY2xhc3MgUmFu
Z2U7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CisKIGNs
YXNzIERPTVNlbGVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPERPTVNlbGVjdGlvbj4sIHB1Ymxp
YyBET01XaW5kb3dQcm9wZXJ0eSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxET01TZWxlY3Rp
b24+IGNyZWF0ZShET01XaW5kb3cmIHdpbmRvdykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01T
ZWxlY3Rpb24od2luZG93KSk7IH0KKyAgICBzdGF0aWMgUmVmPERPTVNlbGVjdGlvbj4gY3JlYXRl
KERPTVdpbmRvdyYpOwogCi0gICAgTm9kZSogYmFzZU5vZGUoKSBjb25zdDsKLSAgICBOb2RlKiBl
eHRlbnROb2RlKCkgY29uc3Q7CisgICAgUmVmUHRyPE5vZGU+IGJhc2VOb2RlKCkgY29uc3Q7Cisg
ICAgUmVmUHRyPE5vZGU+IGV4dGVudE5vZGUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBiYXNlT2Zm
c2V0KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgZXh0ZW50T2Zmc2V0KCkgY29uc3Q7CiAgICAgU3Ry
aW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldEJhc2VBbmRFeHRlbnQoTm9kZSogYmFzZU5v
ZGUsIHVuc2lnbmVkIGJhc2VPZmZzZXQsIE5vZGUqIGV4dGVudE5vZGUsIHVuc2lnbmVkIGV4dGVu
dE9mZnNldCk7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihOb2RlKiwgdW5zaWduZWQgb2Zmc2V0KTsK
KyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRCYXNlQW5kRXh0ZW50KE5vZGUqIGJhc2VOb2RlLCB1
bnNpZ25lZCBiYXNlT2Zmc2V0LCBOb2RlKiBleHRlbnROb2RlLCB1bnNpZ25lZCBleHRlbnRPZmZz
ZXQpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFBvc2l0aW9uKE5vZGUqLCB1bnNpZ25lZCBv
ZmZzZXQpOwogICAgIHZvaWQgbW9kaWZ5KGNvbnN0IFN0cmluZyYgYWx0ZXIsIGNvbnN0IFN0cmlu
ZyYgZGlyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGdyYW51bGFyaXR5KTsKIAogICAgIC8vIFRoZSBh
bmNob3IgYW5kIGZvY3VzIGFyZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCBh
bmQKICAgICAvLyByZWZsZWN0IHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggdGhlIHNlbGVjdGlvbiB3
YXMgbWFkZSBieSB0aGUgdXNlci4KICAgICAvLyBUaGUgYmFzZSBhbmQgZXh0ZW50IGFyZSBkaWZm
ZXJlbnQsIGJlY2F1c2UgdGhleSBkb24ndCByZWZsZWN0IGV4cGFuc2lvbi4KLSAgICBOb2RlKiBh
bmNob3JOb2RlKCkgY29uc3Q7CisgICAgUmVmUHRyPE5vZGU+IGFuY2hvck5vZGUoKSBjb25zdDsK
ICAgICB1bnNpZ25lZCBhbmNob3JPZmZzZXQoKSBjb25zdDsKLSAgICBOb2RlKiBmb2N1c05vZGUo
KSBjb25zdDsKKyAgICBSZWZQdHI8Tm9kZT4gZm9jdXNOb2RlKCkgY29uc3Q7CiAgICAgdW5zaWdu
ZWQgZm9jdXNPZmZzZXQoKSBjb25zdDsKICAgICBib29sIGlzQ29sbGFwc2VkKCkgY29uc3Q7CiAg
ICAgdW5zaWduZWQgcmFuZ2VDb3VudCgpIGNvbnN0OwotICAgIHZvaWQgY29sbGFwc2UoTm9kZSos
IHVuc2lnbmVkIG9mZnNldCk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gY29sbGFwc2UoTm9kZSos
IHVuc2lnbmVkIG9mZnNldCk7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gY29sbGFwc2VUb0VuZCgp
OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbGxhcHNlVG9TdGFydCgpOwogICAgIEV4Y2VwdGlv
bk9yPHZvaWQ+IGV4dGVuZChOb2RlJiwgdW5zaWduZWQgb2Zmc2V0KTsKICAgICBFeGNlcHRpb25P
cjxSZWY8UmFuZ2U+PiBnZXRSYW5nZUF0KHVuc2lnbmVkKTsKICAgICB2b2lkIHJlbW92ZUFsbFJh
bmdlcygpOwogICAgIHZvaWQgYWRkUmFuZ2UoUmFuZ2UmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lk
PiByZW1vdmVSYW5nZShSYW5nZSYpOwogICAgIHZvaWQgZGVsZXRlRnJvbURvY3VtZW50KCk7CiAg
ICAgYm9vbCBjb250YWluc05vZGUoTm9kZSYsIGJvb2wgcGFydGx5Q29udGFpbmVkKSBjb25zdDsK
ICAgICB2b2lkIHNlbGVjdEFsbENoaWxkcmVuKE5vZGUmKTsKIAotICAgIFN0cmluZyB0b1N0cmlu
ZygpOworICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogCiAgICAgdm9pZCBlbXB0eSgpOwog
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERPTVNlbGVjdGlvbihET01XaW5kb3cmKTsKIAotICAg
IC8vIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgYWNjZXNzb3JzLCBjYWxsZXIgbXVzdCBudWxsLWNo
ZWNrIGZyYW1lKCkuCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJsZVNlbGVjdGlv
bigpIGNvbnN0OworICAgIC8vIEZJWE1FOiBDaGFuZ2UgRE9NV2luZG93UHJvcGVydHk6OmZyYW1l
IHRvIHJldHVybiBSZWZQdHIgYW5kIHRoZW4gZGVsZXRlIHRoaXMuCisgICAgUmVmUHRyPEZyYW1l
PiBmcmFtZSgpIGNvbnN0OworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZSgpIGNvbnN0
OworCisgICAgUG9zaXRpb24gYW5jaG9yUG9zaXRpb24oKSBjb25zdDsKKyAgICBQb3NpdGlvbiBm
b2N1c1Bvc2l0aW9uKCkgY29uc3Q7CisgICAgUG9zaXRpb24gYmFzZVBvc2l0aW9uKCkgY29uc3Q7
CisgICAgUG9zaXRpb24gZXh0ZW50UG9zaXRpb24oKSBjb25zdDsKIAotICAgIE5vZGUqIHNoYWRv
d0FkanVzdGVkTm9kZShjb25zdCBQb3NpdGlvbiYpIGNvbnN0OworICAgIFJlZlB0cjxOb2RlPiBz
aGFkb3dBZGp1c3RlZE5vZGUoY29uc3QgUG9zaXRpb24mKSBjb25zdDsKICAgICB1bnNpZ25lZCBz
aGFkb3dBZGp1c3RlZE9mZnNldChjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogCiAgICAgYm9vbCBp
c1ZhbGlkRm9yUG9zaXRpb24oTm9kZSopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rp
b24uaWRsCmluZGV4IDkxZjE0MTgxYjdlYmU0MWVjZTRlYmRkYTU2NzcxYmFmMDAzNTZmY2QuLmU2
Y2YxMzQyMzc4MjlkNTM2YzM5ZGYwZTliY2JmYjJlOGJjZmM3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVNlbGVjdGlvbi5pZGwKQEAgLTQxLDM0ICs0MSwzNCBAQAogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBib29sZWFuIGlzQ29sbGFwc2VkOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIHJhbmdlQ291bnQ7CiAKLSAgICB1bmRlZmluZWQgY29sbGFwc2UoTm9kZT8gbm9kZSwg
b3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwKTsKLSAgICBbTWF5VGhyb3dFeGNlcHRp
b25dIHVuZGVmaW5lZCBjb2xsYXBzZVRvRW5kKCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSB1
bmRlZmluZWQgY29sbGFwc2VUb1N0YXJ0KCk7Ci0KLSAgICBbQ0VSZWFjdGlvbnNdIHVuZGVmaW5l
ZCBkZWxldGVGcm9tRG9jdW1lbnQoKTsKLSAgICBib29sZWFuIGNvbnRhaW5zTm9kZShOb2RlIG5v
ZGUsIG9wdGlvbmFsIGJvb2xlYW4gYWxsb3dQYXJ0aWFsID0gZmFsc2UpOwotICAgIHVuZGVmaW5l
ZCBzZWxlY3RBbGxDaGlsZHJlbihOb2RlIG5vZGUpOwotCi0gICAgW01heVRocm93RXhjZXB0aW9u
XSB1bmRlZmluZWQgZXh0ZW5kKE5vZGUgbm9kZSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZz
ZXQgPSAwKTsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CiAKICAgICBb
TWF5VGhyb3dFeGNlcHRpb25dIFJhbmdlIGdldFJhbmdlQXQodW5zaWduZWQgbG9uZyBpbmRleCk7
Ci0gICAgdW5kZWZpbmVkIHJlbW92ZUFsbFJhbmdlcygpOwogICAgIHVuZGVmaW5lZCBhZGRSYW5n
ZShSYW5nZSByYW5nZSk7CisgICAgW0VuYWJsZWRCeVNldHRpbmc9TGl2ZVJhbmdlU2VsZWN0aW9u
LCBNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIHJlbW92ZVJhbmdlKFJhbmdlIHJhbmdlKTsK
KyAgICB1bmRlZmluZWQgcmVtb3ZlQWxsUmFuZ2VzKCk7CiAKLSAgICBbTm90RW51bWVyYWJsZV0g
RE9NU3RyaW5nIHRvU3RyaW5nKCk7CisgICAgdW5kZWZpbmVkIGVtcHR5KCk7CiAKLSAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CisgICAgW01heVRocm93RXhjZXB0aW9uXSB1
bmRlZmluZWQgY29sbGFwc2UoTm9kZT8gbm9kZSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZz
ZXQgPSAwKTsKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBzZXRQb3NpdGlvbihO
b2RlPyBub2RlLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCA9IDApOworCisgICAgW01h
eVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgY29sbGFwc2VUb1N0YXJ0KCk7CisgICAgW01heVRo
cm93RXhjZXB0aW9uXSB1bmRlZmluZWQgY29sbGFwc2VUb0VuZCgpOwogCi0gICAgdW5kZWZpbmVk
IHNldEJhc2VBbmRFeHRlbnQoTm9kZT8gYmFzZU5vZGUsIHVuc2lnbmVkIGxvbmcgYmFzZU9mZnNl
dCwgTm9kZT8gZXh0ZW50Tm9kZSwgdW5zaWduZWQgbG9uZyBleHRlbnRPZmZzZXQpOwotICAgIHVu
ZGVmaW5lZCBzZXRQb3NpdGlvbihOb2RlPyBub2RlLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9m
ZnNldCA9IDApOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIGV4dGVuZChOb2Rl
IG5vZGUsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMCk7CiAKLSAgICB1bmRlZmlu
ZWQgZW1wdHkoKTsKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBzZXRCYXNlQW5k
RXh0ZW50KE5vZGU/IGJhc2VOb2RlLCB1bnNpZ25lZCBsb25nIGJhc2VPZmZzZXQsIE5vZGU/IGV4
dGVudE5vZGUsIHVuc2lnbmVkIGxvbmcgZXh0ZW50T2Zmc2V0KTsKKyAgICB1bmRlZmluZWQgc2Vs
ZWN0QWxsQ2hpbGRyZW4oTm9kZSBub2RlKTsKKworICAgIFtDRVJlYWN0aW9uc10gdW5kZWZpbmVk
IGRlbGV0ZUZyb21Eb2N1bWVudCgpOworICAgIGJvb2xlYW4gY29udGFpbnNOb2RlKE5vZGUgbm9k
ZSwgb3B0aW9uYWwgYm9vbGVhbiBhbGxvd1BhcnRpYWxDb250YWlubWVudCA9IGZhbHNlKTsKKwor
ICAgIFtOb3RFbnVtZXJhYmxlXSBET01TdHJpbmcgdG9TdHJpbmcoKTsKIAotICAgIC8vIEZJWE1F
OiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbiBzaG91bGQgYmUgaW1wbGVtZW50ZWQuCi0gICAgLy8g
dW5kZWZpbmVkIHJlbW92ZVJhbmdlKFJhbmdlIHJhbmdlKTsKKyAgICAvLyBOb24tc3RhbmRhcmQg
bWV0aG9kcyBhbmQgYXR0cmlidXRlcy4KIAotICAgIC8vIEZJWE1FOiBVc2luZyAidW5kZWZpbmVk
IiBhcyBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSBpcyB3cm9uZy4KLSAgICB1bmRlZmluZWQgbW9k
aWZ5KG9wdGlvbmFsIERPTVN0cmluZyBhbHRlciA9ICJ1bmRlZmluZWQiLCBvcHRpb25hbCBET01T
dHJpbmcgZGlyZWN0aW9uID0gInVuZGVmaW5lZCIsIG9wdGlvbmFsIERPTVN0cmluZyBncmFudWxh
cml0eSA9ICJ1bmRlZmluZWQiKTsKKyAgICB1bmRlZmluZWQgbW9kaWZ5KG9wdGlvbmFsIERPTVN0
cmluZyBhbHRlciwgb3B0aW9uYWwgRE9NU3RyaW5nIGRpcmVjdGlvbiwgb3B0aW9uYWwgRE9NU3Ry
aW5nIGdyYW51bGFyaXR5KTsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlPyBiYXNlTm9k
ZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBiYXNlT2Zmc2V0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy55YW1sCmluZGV4IGZiZjA4YzRmOTMyODMwZjQxODc2NGNkMjgyMmMw
NDNlZTVkY2RhNzcuLjE3ODk3ZWUzMDRhZWIyMmI1ODJmYmQ5M2I0YjkyNjE0MjAyNzNiNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFtbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwKQEAgLTEwNzIsNyArMTA3Miw2IEBAIGxlZ2FjeUVu
Y3J5cHRlZE1lZGlhQVBJRW5hYmxlZDoKIGxlZ2FjeUJlZm9yZUxvYWRFdmVudEVuYWJsZWQ6CiAg
IGluaXRpYWw6IGZhbHNlCiAKLQogaXNQb3N0TG9hZENQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVk
OgogICBpbml0aWFsOiBkZWZhdWx0UG9zdExvYWRDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZAog
CkBAIC0xMDg4LDYgKzEwODcsOSBAQCBpc1Bvc3RCYWNrZ3JvdW5kaW5nTWVtb3J5VXNhZ2VNZWFz
dXJlbWVudEVuYWJsZWQ6CiBpc1BlckFjdGl2aXR5U3RhdGVDUFVVc2FnZU1lYXN1cmVtZW50RW5h
YmxlZDoKICAgaW5pdGlhbDogZGVmYXVsdFBlckFjdGl2aXR5U3RhdGVDUFVVc2FnZU1lYXN1cmVt
ZW50RW5hYmxlZAogCitsaXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkOgorICBpbml0aWFsOiBmYWxz
ZQorCiAjIERlcHJlY2F0ZWQKIAogaWNlQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzSW50ZXJuYWwueWFtbCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzSW50ZXJuYWwueWFtbAppbmRleCBk
NWY2YzBlNDM4NjFkOTI5MGNlM2ZmMmI2YjhlOWJjYTI5MDJmNWUyLi43OWQyNTZiYTI4YjNkN2Ew
NmUzZGI2NDA5NjgxNDUwZjdlMzY2OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJQcmVmZXJlbmNlc0ludGVybmFsLnlhbWwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHJlZmVyZW5jZXNJbnRlcm5hbC55YW1sCkBAIC00MDAsMyArNDAwLDEwIEBAIFVzZUdQVVBy
b2Nlc3NGb3JNZWRpYToKICAgaHVtYW5SZWFkYWJsZU5hbWU6ICJNZWRpYSBpbiBHUFUgUHJvY2Vz
cyIKICAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRG8gYWxsIG1lZGlhIGxvYWRpbmcgYW5k
IHBsYXliYWNrIGluIHRoZSBHUFUgUHJvY2VzcyIKICAgd2ViY29yZU5hbWU6IHVzZUdQVVByb2Nl
c3NGb3JNZWRpYQorCitMaXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkOgorICB0eXBlOiBib29sCisg
IGRlZmF1bHRWYWx1ZTogZmFsc2UKKyAgaHVtYW5SZWFkYWJsZU5hbWU6ICJMaXZlIFJhbmdlcyBp
biBTZWxlY3Rpb24iCisgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkxpdmUgcmFuZ2UgYmVo
YXZpb3IgZm9yIHJhbmdlcyBpbiB0aGUgU2VsZWN0aW9uIG9iamVjdCIKKyAgY2F0ZWdvcnk6IGlu
dGVybmFsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggZjc2MWU1ZWExMWM5NDZiYzk1MjZmZjI0OGQxZThiMTE5ZjNlMTAwMi4u
NzhkOWI1YjUyYzY0ZWY5ZmUxN2ZhYTA1YzUyMTQyYmE5Yzc1ZGM1MyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIwIEBACisyMDIwLTA5LTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAg
ICAgICBTZWxlY3Rpb24gQVBJOiBJbnRyb2R1Y2UgTGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCwg
b2ZmIGJ5IGRlZmF1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNjY1NgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAg
ICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLXRvLWxpbmUtYm91bmRhcnktY2xlYXItc2VsZWN0
aW9uLmh0bWw6IEZpeCB0ZXN0IHRoYXQgYWNjaWRlbnRhbGx5CisgICAgICAgIHJlbGllZCBvbiBv
dXIgbm9uLXN0YW5kYXJkIGJlaGF2aW9yIG9mIGNsYW1waW5nIGEgdG9vLWhpZ2ggb2Zmc2V0IHRv
IGEgdmFsaWQgdmFsdWUuIFRoaXMKKyAgICAgICAgd2FzIG5vdCB3aGF0IHdlIHdlcmUgdHJ5aW5n
IHRvIHRlc3QuIFdpdGhvdXQgdGhpcyBjaGFuZ2UsIHRoZSB0ZXN0IGZhaWxzIGluIHRoZSBuZXcg
bW9kZS4KKyAgICAgICAgVGhlIG9mZnNldCB3YXMgIjUiLCB3aGljaCBzZWVtcyB0byBiZSBhIGNo
YXJhY3RlciBjb3VudCwgcmF0aGVyIHRoYW4gIjEiLCBtZWFuaW5nICJhZnRlcgorICAgICAgICB0
aGUgdGV4dCBub2RlIi4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi90b1N0cmluZy0xLmh0
bWw6IERpdHRvLiBUaGUgb2Zmc2V0IGhlcmUgd2FzIDMsIGJ1dCB0aGUgSFRNTCBlbGVtZW50Cisg
ICAgICAgIGhhcyBvbmx5IDIgY2hpbGRyZW4sIHRoZSBoZWFkIGFuZCB0aGUgYm9keS4KKyAgICAg
ICAgKiBlZGl0aW5nL3NlbGVjdGlvbi91c2VyLXNlbGVjdC1hbGwtc2VsZWN0aW9uLmh0bWw6IERp
dHRvLiBUaGUgY29kZSB3YXMgcGFzc2luZyB0aGUgd3JvbmcKKyAgICAgICAgY29udGFpbmVyIGJ5
IGFjY2NpZGVudCwgdGhlIHBhcmVudCBvZiB0aGUgdGV4dCBub2RlIHJhdGhlciB0aGFuIHRoZSB0
ZXh0IG5vZGUuCisKIDIwMjAtMDktMTcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBjYW5QbGF5VHlwZSgnYXVkaW8vbXBlZzsgY29kZWNz
PSJtcDMiJykgcmV0dXJucyAiIgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxl
Y3Rpb24vbW92ZS10by1saW5lLWJvdW5kYXJ5LWNsZWFyLXNlbGVjdGlvbi5odG1sIGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS10by1saW5lLWJvdW5kYXJ5LWNsZWFyLXNlbGVj
dGlvbi5odG1sCmluZGV4IDc4NDNiNDQzNzQzOTY0ZTYzYjkwNDFhM2FlNWVlMDgwZWQyYzkwNWEu
LjNkMjAwNmRmOTIxMmI1MTZlNWNkZjQxMWYxZThkY2JhMmNmMDE3ZmMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtdG8tbGluZS1ib3VuZGFyeS1jbGVhci1z
ZWxlY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLXRv
LWxpbmUtYm91bmRhcnktY2xlYXItc2VsZWN0aW9uLmh0bWwKQEAgLTE3LDcgKzE3LDcgQEAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQogICAgIHRlc3RSdW5uZXIuZXhlY0NvbW1hbmQoIk1vdmVUb0Vu
ZE9mTGluZSIpOwogc2hvdWxkQmUoJ2dldFNlbGVjdGlvbigpLnRvU3RyaW5nKCknLCAiJyciKTsK
IGdldFNlbGVjdGlvbigpLmVtcHR5KCk7Ci1nZXRTZWxlY3Rpb24oKS5zZXRQb3NpdGlvbihzcGFu
LCA1KTsKK2dldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKHNwYW4sIDEpOwogZ2V0U2VsZWN0aW9u
KCkubW9kaWZ5KCJleHRlbmQiLCAiYmFja3dhcmQiLCAibGluZSIpOwogaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQogICAgIHRlc3RSdW5uZXIuZXhlY0NvbW1hbmQoIk1vdmVUb0JlZ2lubmluZ09mTGlu
ZSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vdG9TdHJpbmct
MS5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vdG9TdHJpbmctMS5odG1sCmlu
ZGV4IGY5ZDFiYmY0NTYxYTI2Mzk5MTUzN2E2YzQ4ODI4Y2FiNjBjNGJlZjIuLjA0Mjg4ZmE5Mzg0
MDY1YjAxOGEzYTgyOWU3ODNmM2MwMWViOWVlMDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvc2VsZWN0aW9uL3RvU3RyaW5nLTEuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi90b1N0cmluZy0xLmh0bWwKQEAgLTIwLDcgKzIwLDcgQEAgZnVuY3Rpb24gcnVu
VGVzdCgpIHsKICAgICAgICAgdmFyIGh0bWxFbGVtZW50ID0gYm9keUVsZW1lbnQucGFyZW50Tm9k
ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudCkKLSAg
ICAgICAgICAgIHNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KGJvZHlFbGVtZW50LCAxLCBodG1s
RWxlbWVudCwgMyk7CisgICAgICAgICAgICBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudChib2R5
RWxlbWVudCwgMSwgaHRtbEVsZW1lbnQsIDIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0
aHJvdygiQ291bGRuJ3Qgc2V0IGEgc2VsZWN0aW9uLiIpOwogICAgICAgICAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3VzZXItc2VsZWN0LWFsbC1zZWxlY3Rpb24u
aHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3VzZXItc2VsZWN0LWFsbC1zZWxl
Y3Rpb24uaHRtbAppbmRleCAxMjdhZGVhNDE4ZWU0ZWY3NjczODEyZDI5MDljMTFkZjA1YTIwNmQ3
Li44NzQ0NGYxYTY3NjgyNTg5MThiNmM2ZDA2N2QzZmFmYWNiNWFkYjRhIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi91c2VyLXNlbGVjdC1hbGwtc2VsZWN0aW9uLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vdXNlci1zZWxlY3QtYWxsLXNl
bGVjdGlvbi5odG1sCkBAIC00OSw3ICs0OSw3IEBAIGZ1bmN0aW9uIHNlbGVjdGlvblNob3VsZEJl
UmVsYXRpdmVUb1VzZXJTZWxlY3RBbGxFbGVtZW50KHN0cikgewogCiBmdW5jdGlvbiBwbGFjZUNh
cmV0QmVmb3JlVXNlclNlbGVjdEFsbEVsZW1lbnQoKXsKICAgICB2YXIgdXNlclNlbGVjdEFsbEVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWxsQXJlYSIpOwotICAgIGV4ZWNTZXRT
ZWxlY3Rpb25Db21tYW5kKHVzZXJTZWxlY3RBbGxFbGVtZW50LnByZXZpb3VzU2libGluZy5maXJz
dENoaWxkLCB1c2VyU2VsZWN0QWxsRWxlbWVudC5wcmV2aW91c1NpYmxpbmcudGV4dENvbnRlbnQu
bGVuZ3RoLCB1c2VyU2VsZWN0QWxsRWxlbWVudC5wcmV2aW91c1NpYmxpbmcsIHVzZXJTZWxlY3RB
bGxFbGVtZW50LnByZXZpb3VzU2libGluZy50ZXh0Q29udGVudC5sZW5ndGgpOworICAgIGV4ZWNT
ZXRTZWxlY3Rpb25Db21tYW5kKHVzZXJTZWxlY3RBbGxFbGVtZW50LnByZXZpb3VzU2libGluZy5m
aXJzdENoaWxkLCB1c2VyU2VsZWN0QWxsRWxlbWVudC5wcmV2aW91c1NpYmxpbmcudGV4dENvbnRl
bnQubGVuZ3RoLCB1c2VyU2VsZWN0QWxsRWxlbWVudC5wcmV2aW91c1NpYmxpbmcuZmlyc3RDaGls
ZCwgdXNlclNlbGVjdEFsbEVsZW1lbnQucHJldmlvdXNTaWJsaW5nLnRleHRDb250ZW50Lmxlbmd0
aCk7CiB9CiAKIGZ1bmN0aW9uIG1vdXNlTW92ZUZyb21Ubyhmcm9tWCwgdG9YKXsK
</data>
<flag name="commit-queue"
          id="424680"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409093</attachid>
            <date>2020-09-17 17:35:45 -0700</date>
            <delta_ts>2020-09-17 17:35:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216656-20200917173545.patch</filename>
            <type>text/plain</type>
            <size>89452</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc5Y2RmYTQ3ZjdhMWE2
YzFlY2VmNWNmYzg2NDYxYjUyZTU3YWJjMS4uZTg2YmZjZTExZTYxYjc2YWRhNWQzOWYxZjgzMWEz
MjZkZDNmNjRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NyBAQAorMjAyMC0wOS0xNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2VsZWN0aW9uIEFQSTogSW50
cm9kdWNlIExpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQsIG9mZiBieSBkZWZhdWx0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIEZvciBpbnRlcm9wZXJhYmlsaXR5
LCB0aGUgU2VsZWN0aW9uIEFQSSByZXF1aXJlcyBiZWhhdmlvciB0aGF0IGlzIHF1aXRlIGRpZmZl
cmVudAorICAgICAgICBmcm9tIGhvdyBvdXIgU2VsZWN0aW9uIG9iamVjdCBoYXMgYmVoYXZlcyBo
aXN0b3JpY2FsbHkuIFNwZWNpZmljYWxseSwgdGhlIHJhbmdlCisgICAgICAgIHJldHVybmVkIGlz
IGEgbGl2ZSByYW5nZSB0aGF0IHVwZGF0ZSBhcyB0aGUgc2VsZWN0aW9uIHVwZGF0ZXMgYW5kIHRo
ZSBzZWxlY3Rpb24sCisgICAgICAgIGluIHR1cm4sIGlzIHVwZGF0ZWQgaWYgdGhlIHJldHVybmVk
IHJhbmdlIGlzIG1vZGlmaWVkLgorCisgICAgICAgIFRoaXMgc2lnbmlmaWNhbnQgY2hhbmdlIHdp
bGwgaGF2ZSBjb21wYXRpYmlsaXR5IGltcGFjdCBvbiB3ZWJzaXRlcyBhbmQgb3RoZXIKKyAgICAg
ICAgY29udGVudCB0aGF0IGFzc3VtZXMgdGhlIGxlZ2FjeSAgV2ViS2l0IGJlaGF2aW9yLCBzbyB3
ZSBhcmUgZGV2ZWxvcGluZyBpdCBiZWhpbmQKKyAgICAgICAgYSBmZWF0dXJlIGZsYWcsIExpdmVS
YW5nZVNlbGVjdGlvbkVuYWJsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRo
ZSBsaXZlIHJhbmdlIHNlbGVjdGlvbiBiZWhpbmQgdGhlIGZsYWcsIGJ1dCBsZWF2ZXMgb25lCisg
ICAgICAgIHNpZ25pZmljYW50IGFyZWEgdW5yZXNvbHZlZCwgY2hhbmdpbmcgc2VsZWN0aW9uIHRv
IGtlZXAgdHJhY2sgb2YgdGhlIG9yaWdpbmFsCisgICAgICAgIGVuZHBvaW50cyByYXRoZXIgdGhh
biBvbmx5IGNhbm9uaWNhbGl6ZWQgZW5kcG9pbnRzLCBhbmQgYSBjb3VwbGUgb2YgbG9vc2UgZW5k
cywKKyAgICAgICAgbGlmZXRpbWUgb2YgcmlkZS1hbG9uZyBwcm9wZXJ0aWVzIG9uIHRoZSBsaXZl
IHJhbmdlIG9iamVjdCwgYW5kIHVwZGF0aW5nIHRlc3QKKyAgICAgICAgZXhwZWN0YXRpb25zIGZv
ciB0aGUgbmV3IGJlaGF2aW9yLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YSk6IEZpeGVkIHRpbWluZyBv
ZiBjYWxsIHRvIERvY3VtZW50Ojp0ZXh0UmVtb3ZlZAorICAgICAgICBieSBsZXR0aW5nIHNldERh
dGFBbmRVcGRhdGUgZG8gaXQ7IG90aGVyd2lzZSBpdCBjYW4gYmUgY2FsbGVkIGFmdGVyIHRoZSBz
ZWxlY3Rpb24KKyAgICAgICAgaGFzIGJlZW4gdXBkYXRlZCwgYW5kIHRoZSByYW5nZSBnZXRzIHVw
ZGF0ZWQgdHdpY2UuCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjphcHBlbmREYXRh
KTogUGFzcyBVcGRhdGVMaXZlUmFuZ2VzOjpObyB0byBzZXREYXRhQW5kVXBkYXRlLAorICAgICAg
ICB0byBwcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgImRvbid0IHVwZGF0ZSByYW5nZXMiIGJlaGF2aW9y
IGZvciBub3cgYXQgbGVhc3QuCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjppbnNl
cnREYXRhKTogRml4ZWQgdGltaW5nIG9mIGNhbGwgdG8gRG9jdW1lbnQ6OnRleHRJbnNlcnRlZAor
ICAgICAgICBieSBsZXR0aW5nIHNldERhdGFBbmRVcGRhdGUgZG8gaXQsIGZvciB0aGUgc2FtZSBy
ZWFzb24gYXMgYWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkZWxldGVE
YXRhKTogRGl0dG8sIGZvciB0ZXh0UmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rl
ckRhdGE6OnJlcGxhY2VEYXRhKTogRGl0dG8sIGZvciB0ZXh0UmVtb3ZlZCBhbmQgdGV4dEluc2Vy
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZSk6
IEFkZGVkIFVwZGF0ZUxpdmVSYW5nZXMgYXJndW1lbnQgYW5kCisgICAgICAgIGNhbGxzIHRvIHRl
eHRSZW1vdmVkIGFuZCB0ZXh0SW5zZXJ0ZWQsIGFmdGVyIHNldHRpbmcgZGF0YSwgYnV0IGJlZm9y
ZSBvdGhlciB1cGRhdGVzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDogTWFkZSBz
ZXREYXRhQW5kVXBkYXRlIHByb3RlY3RlZCBhbmQgYWRkZWQgVXBkYXRlTGl2ZVJhbmdlcy4KKwor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBBZGRlZCBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUg
Tm9kZTo6Y29udGFpbnMgZnVuY3Rpb24uIFdoZW4gdGhlCisgICAgICAgIG5vZGUgaW4gcXVlc3Rp
b24gaXMgdGhlIGRvY3VtZW50IHdlIGNhbiBqdXN0IGNoZWNrIHRyZWVTY29wZSBhbmQgaXNDb25u
ZWN0ZWQKKyAgICAgICAgcmF0aGVyIHRoYW4gd2Fsa2luZyB1cCB0aGUgdHJlZS4KKworICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRGVzY2VuZGFudE9m
IGNvbnN0KTogTW92ZWQgc3BlY2lhbCBjYXNlIGZvciBkb2N1bWVudCB0byB0aGUgdG9wCisgICAg
ICAgIG9mIHRoZSBmdW5jdGlvbjsgc2VlbXMgYSBtb3JlIGltcG9ydGFudCBzcGVjaWFsIGNhc2Ug
dGhhbiBkaXNjb25uZWN0ZWQgbm9kZXMgYW5kCisgICAgICAgIG5vZGVzIHdpdGggbm8gY2hpbGRy
ZW4uCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRh
bnRPZiBjb25zdCk6IFJld29yZGVkIHRoZSBGSVhNRSBmb3IgY2xhcml0eS4KKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNvbnRhaW5zIGNvbnN0KTogQ2hhbmdlZCB0aGlzIHRvIHRva2UgYSByZWZl
cmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisgICAgICAgIFRoZSBwb2ludGVyIGZsYXZvciBp
cyBub3cgaW5saW5lZCBpbiB0aGUgaGVhZGVyLgorCisgICAgICAgICogZG9tL05vZGUuaDogQWRk
ZWQgYW4gb3ZlcmxvYWQgb2YgY29udGFpbnMgdGhhdCB0YWtlcyBhIHJlZmVyZW5jZSwgYW5hbG9n
b3VzIHRvIHdoYXQKKyAgICAgICAgd2UgYWxyZWFkeSBoYXZlIGZvciBpc0Rlc2NlbmRhbnRPZi4K
KworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6UG9zaXRpb24pOiBSZW1vdmVkIHRvby1zdHJpY3QgYXNzZXJ0aW9ucy4gV2hlbiB3ZSBzdGFy
dCB1c2luZworICAgICAgICBwb3NpdGlvbnMgdG8gcmVwcmVzZW50IGFyYml0cmFyeSBET00gcG9z
aXRpb25zIGZvciB0aGluZ3Mgb3V0c2lkZSBlZGl0aW5nIHdlIHdvbid0CisgICAgICAgIHdhbnQg
dGhlc2UgYXNzZXJ0aW9ucyBhbnkgbW9yZSwgYW5kIHdlIGhpdCB0aGVtIHdoZW4gd2UgdXNlIFBv
c2l0aW9uIGluIGEgbW9yZQorICAgICAgICBzdHJhaWdodGZvcndhcmQgd2F5LCBsaWtlIHNvbWUg
Y2FzZXMgaW4gdGhpcyBwYXRjaC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpwcmltYXJ5
RGlyZWN0aW9uIGNvbnN0KTogQWRkZWQgYSBtaXNzaW5nIG51bGwgY2hlY2suIFRoaXMgY2FzZQor
ICAgICAgICBpcyBoaXQgaW4gc29tZSB0ZXN0IGNhc2VzIGluIHRoZSBuZXcgbW9kZS4KKworICAg
ICAgICAqIGRvbS9SYW5nZS5jcHA6IFJlbW92ZWQgc29tZSwgYnV0IHByb2JhYmx5IG5vdCBhbGws
IG9mIHRoZSB1bm5lZWRlZCBoZWFkZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6On5SYW5n
ZSk6IEFkZGVkIGFuIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp1cGRhdGVB
c3NvY2lhdGVkU2VsZWN0aW9uKTogQWRkZWQuIFRlbGxzIEZyYW1lU2VsZWN0aW9uIHRvIHVwZGF0
ZQorICAgICAgICB0aGUgc2VsZWN0aW9uIHdoZW4gdGhpcyBpcyB0aGUgbGl2ZSByYW5nZSBhc3Nv
Y2lhdGVkIHdpdGggdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp1cGRh
dGVEb2N1bWVudCk6IEFkZGVkIGFuIGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdl
OjpzZXRTdGFydCk6IENhbGwgdXBkYXRlQXNzb2NpYXRlZFNlbGVjdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OlJhbmdlOjpzZXRFbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpj
b2xsYXBzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnByb2Nlc3NDb250ZW50
cyk6IENhbGwgY29sbGFwc2UgaGVyZSB0byBzaGFyZSBzbGlnaHRseSBtb3JlCisgICAgICAgIGNv
ZGUgc28gd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIHVwZGF0ZUFzc29jaWF0ZWRTZWxlY3Rpb24gaGVy
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjaGVja05vZGVPZmZzZXRQYWlyKTogTWFkZSB0
aGlzIGEgc3RhdGljIGZ1bmN0aW9uIHNvIGl0IGNhbgorICAgICAgICBiZSB1c2VkIG91dHNpZGUg
dGhlIFJhbmdlIGNsYXNzLiBBbHNvIGZpeGVkIGluZGVudGF0aW9uIG9mIHRoZSBzd2l0Y2ggc3Rh
dGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnNlbGVjdE5vZGVDb250ZW50cyk6IENh
bGwgdXBkYXRlQXNzb2NpYXRlZFNlbGVjdGlvbiBhbmQKKyAgICAgICAgdXBkYXRlRG9jdW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpzZXRCb3RoRW5kcG9pbnRzKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6dXBkYXRlRnJvbVNlbGVjdGlvbik6IEFkZGVkLiBVc2VzIHNldEJvdGhF
bmRwb2ludHMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVMaXZlUmFuZ2UpOiBSZWZhY3RvcmVk
IHRvIGNhbGwgc2V0Qm90aEVuZHBvaW50cy4KKworICAgICAgICAqIGRvbS9SYW5nZS5oOiBBZGRl
ZCBkaWRBc3NvY2lhdGVXaXRoU2VsZWN0aW9uLCBkaWREaXNhc3NvY2lhdGVGcm9tU2VsZWN0aW9u
LAorICAgICAgICB1cGRhdGVGcm9tU2VsZWN0aW9uLCB1cGRhdGVBc3NvY2lhdGVkU2VsZWN0aW9u
LCBhbmQgbV9pc0Fzc29jaWF0ZWRXaXRoU2VsZWN0aW9uLgorICAgICAgICBBbHNvIG1hZGUgY2hl
Y2tOb2RlT2Zmc2V0UGFpciBhIHB1YmxpYyBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uIGluc3RlYWQg
b2YgYQorICAgICAgICBwcml2YXRlIG5vbi1zdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAg
ICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6c2V0RGF0YUFuZFVw
ZGF0ZSk6IFVwZGF0ZSB0byBwYXNzIGFsb25nIFVwZGF0ZUxpdmVSYW5nZXMgYXJndW1lbnQuCisg
ICAgICAgICogZG9tL1RleHQuaDogRGl0dG8uIEFsc28gbWFkZSB0aGUgb3ZlcnJpZGUgb2Ygc2V0
RGF0YUFuZFVwZGF0ZSBwcml2YXRlLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0
aG91dFVwZGF0aW5nQXBwZWFyYW5jZSk6IENhbGwKKyAgICAgICAgdXBkYXRlQXNzb2NpYXRlZExp
dmVSYW5nZSBhZnRlciB1cGRhdGluZyB0aGUgc2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
Y29udGFpbnNFbmRwb2ludHMpOiBBZGRlZC4gVXNlZCB0byBjaGVjayBpZiBhIGxpdmUgcmFuZ2Ug
c3RpbGwgaGFzIHRoZQorICAgICAgICBkb2N1bWVudCBhcyBpdHMgcm9vdCBub2RlIHNvIGl0IGNh
biByZW1haW4gYXNzb2NpYXRlZCB0aGlzIHdpdGggdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lU2VsZWN0aW9uOjphc3NvY2lhdGVkTGl2ZVJhbmdlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6ZGlzYXNzb2NpYXRlTGl2ZVJhbmdlKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6YXNzb2NpYXRlTGl2ZVJhbmdl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlRnJvbUFz
c29jaWF0ZWRMaXZlUmFuZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjp1cGRhdGVBc3NvY2lhdGVkTGl2ZVJhbmdlKTogQWRkZWQuCisKKyAgICAgICAgKiBlZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IEFkZGVkIGFzc29jaWF0ZWRMaXZlUmFuZ2UsIGFzc29jaWF0
ZUxpdmVSYW5nZSwKKyAgICAgICAgZGlzYXNzb2NpYXRlTGl2ZVJhbmdlLCB1cGRhdGVGcm9tQXNz
b2NpYXRlZExpdmVSYW5nZSwgdXBkYXRlQXNzb2NpYXRlZExpdmVSYW5nZSwKKyAgICAgICAgYW5k
IG1fYXNzb2NpYXRlZExpdmVSYW5nZS4gQWxzbyBjaGFuZ2UgbV9kb2N1bWVudCB0byBhIFdlYWtQ
dHIgYW5kIGRvIHNvbWUKKyAgICAgICAgdGlkeWluZyB1cC4KKworICAgICAgICAqIHBhZ2UvRE9N
U2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvblNoYWRvd0FuY2VzdG9y
KTogQXNzZXJ0IHRoZSBsaXZlIHJhbmdlIHNldHRpbmcgaXMgZmFsc2UsCisgICAgICAgIHNpbmNl
IHRoaXMgY29kZSBpcyBub3QgdXNlZCBpbiB0aGF0IGNhc2UuIENoYW5nZWQgdGhlIHJldHVybiB0
eXBlIHRvIFJlZlB0ci4KKyAgICAgICAgQWRkcmVzcyB0aGUgRklYTUUgaGVyZSBieSBnZXR0aW5n
IHRoZSBkb2N1bWVudCBpbiBhIHNpbXBsZXIgd2F5LgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjpjcmVhdGUpOiBNb3ZlZCBoZXJlIGZyb20gdGhlIGhlYWRlci4KKyAgICAgICAgKFdl
YkNvcmU6OkRPTVNlbGVjdGlvbjo6ZnJhbWUgY29uc3QpOiBBZGRlZC4gUmV0dXJucyBhIFJlZlB0
ci4gVGhpcyBnZXRzIHJpZAorICAgICAgICBvZiB0aGUgbmVlZCBmb3IgdmFyaW91cyBpbnN0YW5j
ZXMgb2YgdGhlICJwcm90ZWN0b3IiIHBhdHRlcm4gaW4gdGhpcyBmaWxlLgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjpyYW5nZSBjb25zdCk6IEFkZGVkLiBSZXR1cm5zIHRoZSBzZWxl
Y3RlZCByYW5nZSwgYnV0CisgICAgICAgIGNoZWNrcyBmb3IgdGhlIHNoYWRvdyB0cmVlIGNhc2Ug
YW5kIHJldHVybnMgbnVsbCBpbiB0aGF0IGNhc2UuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxl
Y3Rpb246OmFuY2hvclBvc2l0aW9uIGNvbnN0KTogUmVkaWQgYXMgYSBtZW1iZXIgZnVuY3Rpb24u
CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmZvY3VzUG9zaXRpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YmFzZVBvc2l0aW9uIGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmV4dGVudFBvc2l0aW9u
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFuY2hvck5v
ZGUgY29uc3QpOiBSZXdyb3RlIHRvIGJlIHNpbXBsZXIgdXNpbmcgdGhlCisgICAgICAgIGZ1bmN0
aW9ucyBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmZvY3VzTm9k
ZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpmb2N1c09m
ZnNldCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpiYXNl
Tm9kZSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpiYXNl
T2Zmc2V0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmV4
dGVudE5vZGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6
ZXh0ZW50T2Zmc2V0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rp
b246OmlzQ29sbGFwc2VkIGNvbnN0KTogUmV3cm90ZSB1c2luZyBET01TZWxlY3Rpb246OnJhbmdl
CisgICAgICAgIGFuZCBTaW1wbGVSYW5nZTo6Y29sbGFwc2VkLgorICAgICAgICAoV2ViQ29yZTo6
RE9NU2VsZWN0aW9uOjp0eXBlIGNvbnN0KTogVXBkYXRlZCBzaW5jZSBmcmFtZSByZXR1cm5zIFJl
ZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6cmFuZ2VDb3VudCBjb25zdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpjb2xsYXBzZSk6IEFkZGVk
IG5ldyBjb3JyZWN0ZWQgY2hlY2tpbmcgZm9yIHNwZWNpYWwKKyAgICAgICAgY2FzZXMsIGd1YXJk
ZWQgYnkgdGhlIHNldHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbGxh
cHNlVG9FbmQpOiBVcGRhdGVkIHNpbmNlIGZyYW1lIHJldHVybnMgUmVmUHRyLgorICAgICAgICB3
YXkgdG8gZG8gcHJvdGVjdGlvbi4gQWRkZWQgYSBjYWxsIHRvIGRpc2Fzc29jaWF0ZUxpdmVSYW5n
ZS4gTm8gbmVlZCB0byBwdXQKKyAgICAgICAgdW5kZXIgYSBzZXR0aW5nIGd1YXJkIHNpbmNlIGl0
IGRvZXMgbm90aGluZyBpZiBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRPTVNlbGVjdGlvbjo6ZW1wdHkpOiBDYWxsIHJlbW92ZUFsbFJhbmdlcyBzbyB3ZSBkb24n
dCBoYXZlIHR3bworICAgICAgICBjb3BpZXMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gdG8gbWFpbnRh
aW4uCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnQpOiBV
c2UgbWFrZVJlZlB0ciwgYWRkZWQgY29ycmVjdGVkCisgICAgICAgIGNoZWNraW5nIGZvciBzcGVj
aWFsIGNhc2VzIGd1YXJkZWQgYnkgdGhlIHNldHRpbmcuCisgICAgICAgIChXZWJDb3JlOjpET01T
ZWxlY3Rpb246OnNldFBvc2l0aW9uKTogQ2FsbCBjb2xsYXBzZSBzbyB3ZSBkb24ndCBoYXZlIHR3
bworICAgICAgICBjb3BpZXMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gdG8gbWFpbnRhaW4uCisgICAg
ICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Om1vZGlmeSk6IFVwZGF0ZWQgc2luY2UgZnJhbWUg
cmV0dXJucyBSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmV4dGVuZCk6
IERpdHRvLiBBbHNvIGFkZGVkIGNvcnJlY3RlZCBjaGVja2luZyBmb3IKKyAgICAgICAgc3BlY2lh
bCBjYXNlcyBndWFyZGVkIGJ5IHRoZSBzZXR0aW5nLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjpnZXRSYW5nZUF0KTogQWRkZWQgYSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gdGhh
dAorICAgICAgICBzaW1wbHkgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBsaXZlIHJhbmdlLCBjcmVh
dGluZyBvbmUgaWYgbmVlZGVkLCBndWFyZGVkCisgICAgICAgIGJ5IHRoZSBzZXR0aW5nLgorICAg
ICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMpOiBVcGRhdGVkIHNp
bmNlIGZyYW1lIHJldHVybnMgUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9u
OjphZGRSYW5nZSk6IEFkZGVkIGEgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHRoYXQKKyAgICAg
ICAgbWF0Y2hlcyB0aGUgc3BlY2lmaWNhdGlvbiwgZ3VhcmRlZCBieSB0aGUgc2V0dGluZy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6cmVtb3ZlUmFuZ2UpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogQWRkZWQgYSB2
ZXJzaW9uIG9mIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBzaW1wbHkgY2FsbHMgZGVsZXRl
Q29udGVudHMgb24gdGhlIGFzc29jaWF0ZWQgbGl2ZSByYW5nZSwKKyAgICAgICAgZ3VhcmRlZCBi
eSB0aGUgc2V0dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Y29udGFpbnNO
b2RlIGNvbnN0KTogUHV0IHRoZSB0ZXh0IG5vZGUgd29ya2Fyb3VuZAorICAgICAgICBpbnNpZGUg
YSBzZXR0aW5nIGNoZWNrLiBJIGFsc28gZmlndXJlZCBvdXQgd2h5IHdvcmthcm91bmQgd2FzIGFk
ZGVkOiBpdAorICAgICAgICB3b3JrcyBhcm91bmQgdW53YW50ZWQgcmFuZ2UgY2Fub25pY2FsaXph
dGlvbiBpbiB2YXJpb3VzIHRlc3RzLCBidXQgYWxzbworICAgICAgICBpbnRyb2R1Y2VzIGluY29y
cmVjdCBiZWhhdmlvci4gQWxzbyByZXdyb3RlIHRvIHVzZSBET01TZWxlY3Rpb246OnJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjp0b1N0cmluZyk6IFVzZSBET01TZWxlY3Rp
b246OnJhbmdlLCBndWFyZGVkIGJ5CisgICAgICAgIHRoZSBzZXR0aW5nLCBzbyB3ZSByZXR1cm4g
ZW1wdHkgc3RyaW5nIHdoZW4gc2VsZWN0aW9uIGlzIGluIHRoZSBzaGFkb3cgdHJlZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6c2hhZG93QWRqdXN0ZWROb2RlIGNvbnN0KTogV2hl
biB0aGUgbGl2ZSByYW5nZQorICAgICAgICBzZXR0aW5nIGlzIGVuYWJsZWQsIGFkanVzdCBieSBj
aGFuZ2luZyB0aGUgbm9kZSB0byBudWxscHRyLCBub3QgZmluZGluZyBhbgorICAgICAgICBhbmNl
c3RvciBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OnNo
YWRvd0FkanVzdGVkT2Zmc2V0IGNvbnN0KTogRGl0dG8sIGJ1dCBvZmZzZXQgMC4KKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6aXNWYWxpZEZvclBvc2l0aW9uIGNvbnN0KTogQXNzZXJ0
IHRoYXQgdGhlIGxpdmUgcmFuZ2UKKyAgICAgICAgc2VsZWN0aW9uIHNldHRpbmcgaXMgZGlzYWJs
ZWQsIGJlY2F1c2UgdGhpcyBpbmNvcnJlY3QgY2hlY2sgc2hvdWxkIG9ubHkgYmUKKyAgICAgICAg
dXNlZCB0byBwcmVzZXJ2ZSBsZWdhY3kgYmVoYXZpb3IgdW50aWwgd2UgYXJlIHJlYWR5IHRvIHR1
cm4gaXQgb24uCisKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5oOiBVcGRhdGVkIHNpbmNl
IHNldEJhc2VBbmRFeHRlbnQsIHNldFBvc2l0aW9uLCBhbmQKKyAgICAgICAgY29sbGFwc2UgY2Fu
IHJhaXNlIGV4Y2VwdGlvbnMsIGFsdGhvdWdoIHRoZXkgb25seSBkbyBzbyB3aGVuIHRoZSBsaXZl
IHJhbmdlCisgICAgICAgIHNlbGVjdGlvbiBzZXR0aW5nIGlzIG9uLiBBZGRlZCByZW1vdmVSYW5n
ZS4gTW92ZWQgdGhlIGNyZWF0ZSBmdW5jdGlvbgorICAgICAgICBvdXQgb2YgdGhlIGNsYXNzIGRl
ZmluaXRpb24gaW50byB0aGUgLmNwcCBmaWxlLiBNYWRlIHJldHVybiB2YWx1ZXMgb2YKKyAgICAg
ICAgYmFzZU5vZGUsIGV4dGVudE5vZGUsIGFuY2hvck5vZGUsIGZvY3VzTm9kZSwgYW5kIHNoYWRv
d0FkanVzdGVkTm9kZSBSZWZQdHIuCisgICAgICAgIE1hZGUgdG9TdHJpbmcgY29uc3QuIEFkZGVk
IGZyYW1lLCByYW5nZSwgYW5jaG9yUG9zaXRpb24sIGZvY3VzUG9zaXRpb24sCisgICAgICAgIGJh
c2VQb3NpdGlvbiwgYW5kIGV4dGVudFBvc2l0aW9uIHByaXZhdGUgZnVuY3Rpb25zLiBSZW1vdmVk
IHZpc2libGVTZWxlY3Rpb24uCisKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5pZGw6IFVw
ZGF0ZWQgZmlsZSB0byBtYXRjaCBhIHJlY2VudCBkcmFmdCBvZiB0aGUKKyAgICAgICAgU2VsZWN0
aW9uIHN0YW5kYXJkLCByZW9yZGVyaW5nIHRoaW5ncyB0byBtYXRjaCB0aGUgb3JkZXIgdGhleSBh
cHBlYXIgdGhlcmUuCisgICAgICAgIEFkZGVkIHJlbW92ZVJhbmdlLCBndWFyZGVkIGJ5IHRoZSBz
ZXR0aW5nLiBBbHNvIGdvdCByaWQgb2YgdGhlCisgICAgICAgIHVubmNlY2Vzc2FyeSAidW5kZWZp
bmVkIiBzdHJpbmcgZGVmYXVsdHMgZm9yIHRoZSBhcmd1bWVudHMgdG8gdGhlIG1vZGlmeQorICAg
ICAgICBtZXRob2Qgc2luY2UgdGhleSBoYXZlIG5vIGVmZmVjdCBvbiBvYnNlcnZlZCBiZWhhdmlv
ciBhbnl3YXkuCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLnlhbWw6IEFkZGVkIGxpdmVSYW5n
ZVNlbGVjdGlvbkVuYWJsZWQuCisKIDIwMjAtMDktMTcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2Fy
bHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBjYW5QbGF5VHlwZSgnYXVkaW8vbXBl
ZzsgY29kZWNzPSJtcDMiJykgcmV0dXJucyAiIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmMTEwMmQ0MzE4NjM2NWI4
NzE3Yzk3ZTlmMjAxM2M4ZWE3MjJiOTU3Li4wODIyYmRjNDk0MTVkMmNjOGFhOWVlZDQ0MmFjNjlm
NTEyNTA2NDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTA5LTE2ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTZWxlY3Rpb24gQVBJOiBJbnRyb2R1
Y2UgTGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCwgb2ZmIGJ5IGRlZmF1bHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjY1NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNJ
bnRlcm5hbC55YW1sOiBBZGRlZCBMaXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkLgorCiAyMDIwLTA5
LTE3ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAg
IEVuYWJsZSBJVFAgaW4gV0tXZWJWaWV3cyBmb3IgYXBwcyB3aXRoIHRoZSBmdWxsIGJyb3dzZXIg
ZW50aXRsZW1lbnQgd2hvIGFyZSBub3QgbGlua2VkIHRvIGlPUyAxNC4wCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggMTMxMzlhMmE2MmQxMGE4NGU1ZTQ5OTBhZWFkYzVkOTVl
ZTRiNmE5My4uZjQ0YzEzZmYwNmVlNmFhZmM2NWVmN2MzYTE0ZjgzNWJiYzYwNDk3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApAQCAtNjMsNyArNjMsNiBAQCB2b2lkIENoYXJh
Y3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIFJlZjxDaGFyYWN0ZXJE
YXRhPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAogICAgIHNldERhdGFBbmRVcGRhdGUobm9uTnVs
bERhdGEsIDAsIG9sZExlbmd0aCwgbm9uTnVsbERhdGEubGVuZ3RoKCkpOwotICAgIGRvY3VtZW50
KCkudGV4dFJlbW92ZWQoKnRoaXMsIDAsIG9sZExlbmd0aCk7CiB9CiAKIEV4Y2VwdGlvbk9yPFN0
cmluZz4gQ2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGNvdW50KQpAQCAtMTE3LDEyICsxMTYsNyBAQCB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhOjpw
YXJzZXJBcHBlbmREYXRhKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsCiAK
IHZvaWQgQ2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGRhdGEpCiB7Ci0g
ICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKLSAgICBuZXdTdHIuYXBwZW5kKGRhdGEpOwotCi0g
ICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG1fZGF0YS5sZW5ndGgoKSwgMCwgZGF0YS5sZW5n
dGgoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNhbGwgdGV4dEluc2VydGVkIGhlcmU/
CisgICAgc2V0RGF0YUFuZFVwZGF0ZShtX2RhdGEgKyBkYXRhLCBtX2RhdGEubGVuZ3RoKCksIDAs
IGRhdGEubGVuZ3RoKCksIFVwZGF0ZUxpdmVSYW5nZXM6Ok5vKTsKIH0KIAogRXhjZXB0aW9uT3I8
dm9pZD4gQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0
cmluZyYgZGF0YSkKQEAgLTEzMCwxMiArMTI0LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFj
dGVyRGF0YTo6aW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkK
ICAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OwogCi0gICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKLSAgICBuZXdT
dHIuaW5zZXJ0KGRhdGEsIG9mZnNldCk7Ci0KLSAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwg
b2Zmc2V0LCAwLCBkYXRhLmxlbmd0aCgpKTsKLQotICAgIGRvY3VtZW50KCkudGV4dEluc2VydGVk
KCp0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOworICAgIFN0cmluZyBuZXdEYXRhID0gbV9k
YXRhOworICAgIG5ld0RhdGEuaW5zZXJ0KGRhdGEsIG9mZnNldCk7CisgICAgc2V0RGF0YUFuZFVw
ZGF0ZShuZXdEYXRhLCBvZmZzZXQsIDAsIGRhdGEubGVuZ3RoKCkpOwogCiAgICAgcmV0dXJuIHsg
fTsKIH0KQEAgLTE0NywxMiArMTM4LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0
YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogCiAgICAgY291
bnQgPSBzdGQ6Om1pbihjb3VudCwgbGVuZ3RoKCkgLSBvZmZzZXQpOwogCi0gICAgU3RyaW5nIG5l
d1N0ciA9IG1fZGF0YTsKLSAgICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgY291bnQpOwotCi0gICAg
c2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwotCi0gICAgZG9jdW1l
bnQoKS50ZXh0UmVtb3ZlZCgqdGhpcywgb2Zmc2V0LCBjb3VudCk7CisgICAgU3RyaW5nIG5ld0Rh
dGEgPSBtX2RhdGE7CisgICAgbmV3RGF0YS5yZW1vdmUob2Zmc2V0LCBjb3VudCk7CisgICAgc2V0
RGF0YUFuZFVwZGF0ZShuZXdEYXRhLCBvZmZzZXQsIGNvdW50LCAwKTsKIAogICAgIHJldHVybiB7
IH07CiB9CkBAIC0xNjQsMTUgKzE1MiwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDaGFyYWN0ZXJE
YXRhOjpyZXBsYWNlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjbwogCiAg
ICAgY291bnQgPSBzdGQ6Om1pbihjb3VudCwgbGVuZ3RoKCkgLSBvZmZzZXQpOwogCi0gICAgU3Ry
aW5nIG5ld1N0ciA9IG1fZGF0YTsKLSAgICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgY291bnQpOwot
ICAgIG5ld1N0ci5pbnNlcnQoZGF0YSwgb2Zmc2V0KTsKLQotICAgIHNldERhdGFBbmRVcGRhdGUo
bmV3U3RyLCBvZmZzZXQsIGNvdW50LCBkYXRhLmxlbmd0aCgpKTsKLQotICAgIC8vIHVwZGF0ZSB0
aGUgbWFya2VycyBmb3Igc3BlbGwgY2hlY2tpbmcgYW5kIGdyYW1tYXIgY2hlY2tpbmcKLSAgICBk
b2N1bWVudCgpLnRleHRSZW1vdmVkKCp0aGlzLCBvZmZzZXQsIGNvdW50KTsKLSAgICBkb2N1bWVu
dCgpLnRleHRJbnNlcnRlZCgqdGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBTdHJp
bmcgbmV3RGF0YSA9IG1fZGF0YTsKKyAgICBuZXdEYXRhLnJlbW92ZShvZmZzZXQsIGNvdW50KTsK
KyAgICBuZXdEYXRhLmluc2VydChkYXRhLCBvZmZzZXQpOworICAgIHNldERhdGFBbmRVcGRhdGUo
bmV3RGF0YSwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICByZXR1cm4geyB9
OwogfQpAQCAtMTg4LDExICsxNzEsMTYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2hhcmFjdGVyRGF0
YTo6c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgbm9kZVZhbHVlKQogICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZShjb25zdCBTdHJpbmcm
IG5ld0RhdGEsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBvbGRMZW5n
dGgsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3ZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVw
ZGF0ZShjb25zdCBTdHJpbmcmIG5ld0RhdGEsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRh
LCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCwgVXBkYXRlTGl2ZVJhbmdl
cyBzaG91bGRVcGRhdGVMaXZlUmFuZ2VzKQogewogICAgIFN0cmluZyBvbGREYXRhID0gbV9kYXRh
OwogICAgIG1fZGF0YSA9IG5ld0RhdGE7CiAKKyAgICBpZiAob2xkTGVuZ3RoICYmIHNob3VsZFVw
ZGF0ZUxpdmVSYW5nZXMgIT0gVXBkYXRlTGl2ZVJhbmdlczo6Tm8pCisgICAgICAgIGRvY3VtZW50
KCkudGV4dFJlbW92ZWQoKnRoaXMsIG9mZnNldE9mUmVwbGFjZWREYXRhLCBvbGRMZW5ndGgpOwor
ICAgIGlmIChuZXdMZW5ndGggJiYgc2hvdWxkVXBkYXRlTGl2ZVJhbmdlcyAhPSBVcGRhdGVMaXZl
UmFuZ2VzOjpObykKKyAgICAgICAgZG9jdW1lbnQoKS50ZXh0SW5zZXJ0ZWQoKnRoaXMsIG9mZnNl
dE9mUmVwbGFjZWREYXRhLCBuZXdMZW5ndGgpOworCiAgICAgQVNTRVJUKCFyZW5kZXJlcigpIHx8
IGlzPFRleHQ+KCp0aGlzKSk7CiAgICAgaWYgKGlzPFRleHQ+KCp0aGlzKSAmJiBwYXJlbnROb2Rl
KCkpCiAgICAgICAgIGRvd25jYXN0PFRleHQ+KCp0aGlzKS51cGRhdGVSZW5kZXJlckFmdGVyQ29u
dGVudENoYW5nZShvZmZzZXRPZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hhcmFjdGVyRGF0YS5oCmluZGV4IDEzZjE5MmQxMTc1MTI2ZjgxNjRlMmI0ODQxM2VmZWVmMzM0
ZGQ5NWEuLmE2NmYyYTQ3MTdjYzA4ZmE0NTYwMTgyMzdkMjFiYjQwM2MyNzJkYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NoYXJhY3RlckRhdGEuaApAQCAtMzMsNyArMzMsNiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBkYXRhTWVtb3J5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENoYXJhY3RlckRhdGEsIG1fZGF0YSk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
RGF0YShjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YUFuZFVwZGF0ZShj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgb2xk
TGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5sZW5ndGgoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlv
bk9yPFN0cmluZz4gc3Vic3RyaW5nRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3RyaW5nJik7CkBA
IC02MCw2ICs1OSw5IEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgdm9pZCBkaXNwYXRjaE1vZGlm
aWVkRXZlbnQoY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSk7CiAKKyAgICBlbnVtIGNsYXNzIFVwZGF0
ZUxpdmVSYW5nZXMgOiBib29sIHsgTm8sIFllcyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXREYXRh
QW5kVXBkYXRlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1
bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCwgVXBkYXRlTGl2ZVJhbmdlcyA9
IFVwZGF0ZUxpdmVSYW5nZXM6Olllcyk7CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG5vZGVWYWx1
ZSgpIGNvbnN0IGZpbmFsOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldE5vZGVWYWx1ZShjb25z
dCBTdHJpbmcmKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggNWFiYzI0ZWJiOTgxZTU2
NGYwN2FkZWI4ZTVmYzExNTgxMzFjNTM1NS4uODQ3NzFlYzVlMmIyODc0ZGU2OGIyNTI4ZGJjZTA2
ZWE0MjE2MjIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTE1OTEsNiArMTU5MSw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIGZpbmFsIHsgfTsKICAg
ICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJikgZmluYWw7CiAKKyAgICBib29sIGNv
bnRhaW5zKGNvbnN0IE5vZGUmIG5vZGUpIGNvbnN0IHsgcmV0dXJuIHRoaXMgPT0gJm5vZGUudHJl
ZVNjb3BlKCkgJiYgbm9kZS5pc0Nvbm5lY3RlZCgpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25z
dCBOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBub2RlICYmIGNvbnRhaW5zKCpub2RlKTsgfQor
CiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0g
MSwgTm9uUmVuZGVyZWRQbGFjZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIFdFQkNPUkVfRVhQT1JU
IERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgRG9jdW1lbnRDbGFzc0ZsYWdzID0gRGVmYXVs
dERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKaW5kZXggZDFhYjgyOGJhYWQ2MGE2YjNkYzBjNTVlZWE5OWQxNjAwMTg4ZGU5Mi4uODY2
OTk5NjE4ZmQyMGRjYTQ2NjkyYTQ5YmMwZWY0MmVjYWEwMGRiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApA
QCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8p
CiAgKgpAQCAtMTAyMCwxMiArMTAyMCwxMiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBOb2RlOjpjaGVj
a1NldFByZWZpeChjb25zdCBBdG9tU3RyaW5nJiBwcmVmaXgpCiAKIGJvb2wgTm9kZTo6aXNEZXNj
ZW5kYW50T2YoY29uc3QgTm9kZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgLy8gUmV0dXJuIHRydWUg
aWYgb3RoZXIgaXMgYW4gYW5jZXN0b3Igb2YgdGhpcywgb3RoZXJ3aXNlIGZhbHNlCisgICAgLy8g
UmV0dXJuIHRydWUgaWYgb3RoZXIgaXMgYW4gYW5jZXN0b3Igb2YgdGhpcy4KKyAgICBpZiAob3Ro
ZXIuaXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuICZ0cmVlU2NvcGUoKS5yb290Tm9k
ZSgpID09ICZvdGhlciAmJiAhaXNEb2N1bWVudE5vZGUoKSAmJiBpc0Nvbm5lY3RlZCgpOwogICAg
IGlmICghb3RoZXIuaGFzQ2hpbGROb2RlcygpIHx8IGlzQ29ubmVjdGVkKCkgIT0gb3RoZXIuaXND
b25uZWN0ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChvdGhlci5pc0RvY3Vt
ZW50Tm9kZSgpKQotICAgICAgICByZXR1cm4gJmRvY3VtZW50KCkgPT0gJm90aGVyICYmICFpc0Rv
Y3VtZW50Tm9kZSgpICYmIGlzQ29ubmVjdGVkKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvKiBhbmNl
c3RvciA9IHBhcmVudE5vZGUoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVu
dE5vZGUoKSkgeworICAgIGZvciAoYXV0byBhbmNlc3RvciA9IHBhcmVudE5vZGUoKTsgYW5jZXN0
b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoYW5j
ZXN0b3IgPT0gJm90aGVyKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTAz
NCwxNSArMTAzNCwxMyBAQCBib29sIE5vZGU6OmlzRGVzY2VuZGFudE9mKGNvbnN0IE5vZGUmIG90
aGVyKSBjb25zdAogCiBib29sIE5vZGU6OmlzRGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9m
KGNvbnN0IE5vZGUqIG90aGVyKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBUaGlzIGVsZW1lbnQn
cyBzaGFkb3cgdHJlZSdzIGhvc3QgY291bGQgYmUgaW5zaWRlIGFub3RoZXIgc2hhZG93IHRyZWUu
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhbmRsZSB0aGF0IGNhc2UgY29ycmVjdGx5
LiBNYXliZSBzaGFyZSBjb2RlIHdpdGgKLSAgICAvLyB0aGUgY29udGFpbnNJbmNsdWRpbmdTaGFk
b3dET00gZnVuY3Rpb24/CisgICAgLy8gRklYTUU6IENvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2Ug
d2hlcmUgdGhlIHNoYWRvdyBob3N0IGlzIGl0c2VsZiBpbiBhIHNoYWRvdyB0cmVlLgogICAgIHJl
dHVybiBvdGhlciAmJiAoaXNEZXNjZW5kYW50T2YoKm90aGVyKSB8fCBvdGhlci0+Y29udGFpbnMo
c2hhZG93SG9zdCgpKSk7CiB9CiAKLWJvb2wgTm9kZTo6Y29udGFpbnMoY29uc3QgTm9kZSogbm9k
ZSkgY29uc3QKK2Jvb2wgTm9kZTo6Y29udGFpbnMoY29uc3QgTm9kZSYgbm9kZSkgY29uc3QKIHsK
LSAgICByZXR1cm4gdGhpcyA9PSBub2RlIHx8IChub2RlICYmIG5vZGUtPmlzRGVzY2VuZGFudE9m
KCp0aGlzKSk7CisgICAgcmV0dXJuIHRoaXMgPT0gJm5vZGUgfHwgbm9kZS5pc0Rlc2NlbmRhbnRP
ZigqdGhpcyk7CiB9CiAKIGJvb2wgTm9kZTo6Y29udGFpbnNJbmNsdWRpbmdTaGFkb3dET00oY29u
c3QgTm9kZSogbm9kZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IGFlYjJmNmNlMzVlNDZhMzc2Njk5
NWQwODI4MDdiZGNmYmJjNWY0ZTYuLjFkZTQ5NDRmYTBmNWJmZGVjMjIxMDhlNWIxNmQ2ZGZjMmI5
OGMwZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzcxLDkgKzM3MSwxMCBAQCBwdWJsaWM6
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRGVzY2VuZGFudE9mKGNvbnN0IE5vZGUmKSBj
b25zdDsKICAgICBib29sIGlzRGVzY2VuZGFudE9mKGNvbnN0IE5vZGUqIG90aGVyKSBjb25zdCB7
IHJldHVybiBvdGhlciAmJiBpc0Rlc2NlbmRhbnRPZigqb3RoZXIpOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBOb2RlJikgY29uc3Q7CisgICAgYm9vbCBjb250YWlu
cyhjb25zdCBOb2RlKiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIgJiYgY29udGFpbnMoKm90
aGVyKTsgfQogCiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRhbnRPZihjb25z
dCBOb2RlKikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWlucyhjb25zdCBO
b2RlKikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjb250YWluc0luY2x1ZGluZ1No
YWRvd0RPTShjb25zdCBOb2RlKikgY29uc3Q7CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCBhIHNl
bGVjdGlvbiBjYW4gYmUgc3RhcnRlZCBpbiB0aGlzIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAKaW5kZXggMmEzNDIxNWQ0MzFmMTg0N2UzNTNiYjg5YzczYTQ5NDc1MzMwMjE1MC4uMjc0MWJi
YjQwYmU1NjBjMzI3ZjQwMDk5NmE2ODY2OTQ1OWM5ZDI0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCkBAIC0xMzAsOCArMTMwLDYgQEAgUG9zaXRpb246OlBvc2l0aW9uKE5vZGUqIGFuY2hvck5v
ZGUsIHVuc2lnbmVkIG9mZnNldCwgQW5jaG9yVHlwZSBhbmNob3JUeXBlKQogICAgICwgbV9hbmNo
b3JUeXBlKGFuY2hvclR5cGUpCiAgICAgLCBtX2lzTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGZhbHNl
KQogewotICAgIEFTU0VSVCghbV9hbmNob3JOb2RlIHx8ICFlZGl0aW5nSWdub3Jlc0NvbnRlbnQo
Km1fYW5jaG9yTm9kZSkpOwotICAgIEFTU0VSVCghbV9hbmNob3JOb2RlIHx8ICFtX2FuY2hvck5v
ZGUtPmlzUHNldWRvRWxlbWVudCgpKTsKICAgICBBU1NFUlQoYW5jaG9yVHlwZSA9PSBQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpOwogfQogCkBAIC0xMzYyLDcgKzEzNjAsNyBAQCBJbmxpbmVCb3hB
bmRPZmZzZXQgUG9zaXRpb246OmlubGluZUJveEFuZE9mZnNldChBZmZpbml0eSBhZmZpbml0eSwg
VGV4dERpcmVjdGlvbgogCiBUZXh0RGlyZWN0aW9uIFBvc2l0aW9uOjpwcmltYXJ5RGlyZWN0aW9u
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fYW5jaG9yTm9kZS0+cmVuZGVyZXIoKSkKKyAgICBpZiAo
IW1fYW5jaG9yTm9kZSB8fCAhbV9hbmNob3JOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1
cm4gVGV4dERpcmVjdGlvbjo6TFRSOwogICAgIGlmIChhdXRvKiBibG9ja0Zsb3cgPSBsaW5lYWdl
T2ZUeXBlPFJlbmRlckJsb2NrRmxvdz4oKm1fYW5jaG9yTm9kZS0+cmVuZGVyZXIoKSkuZmlyc3Qo
KSkKICAgICAgICAgcmV0dXJuIGJsb2NrRmxvdy0+c3R5bGUoKS5kaXJlY3Rpb24oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuY3BwCmluZGV4IGJlZWUzNGVmOWMxMmFlOTNiOThmMGZhOGMyMWMwYmNjYzg4M2I2MDQu
LjFmYjgyMzJlN2M2MDYyNjM5ODY3NzVmNjMzYmEwNzI5YWIyYTUxN2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcApAQCAtMyw3ICszLDcgQEAKICAqIChDKSAyMDAwIEd1bm5zdGVpbiBMeWUgKGd1bm5zdGVp
bkBuZXRjb20ubm8pCiAgKiAoQykgMjAwMCBGcmVkZXJpayBIb2xsamVuIChmcmVkZXJpay5ob2xs
amVuQGhpZy5ubykKICAqIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDExIE1vdG9yb2xhIE1vYmlsaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTI5LDI1ICsyOSwxOSBAQAogI2luY2x1ZGUgIkRPTVJlY3QuaCIKICNpbmNsdWRlICJET01S
ZWN0TGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJFZGl0
aW5nLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJOb2Rl
V2l0aEluZGV4LmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAi
U2NvcGVkRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUg
IlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUg
Im1hcmt1cC5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC01NSwxMCArNDksNiBAQAogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIlNlbGVjdGlvblJlY3Qu
aCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CkBAIC05MCw2ICs4MCw4IEBAIFJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVu
dCYgb3duZXJEb2N1bWVudCkKIAogUmFuZ2U6On5SYW5nZSgpCiB7CisgICAgQVNTRVJUKCFtX2lz
QXNzb2NpYXRlZFdpdGhTZWxlY3Rpb24pOworCiAgICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hS
YW5nZSgqdGhpcyk7CiAKICNpZm5kZWYgTkRFQlVHCkBAIC05NywxMSArODksMTggQEAgUmFuZ2U6
On5SYW5nZSgpCiAjZW5kaWYKIH0KIAordm9pZCBSYW5nZTo6dXBkYXRlQXNzb2NpYXRlZFNlbGVj
dGlvbigpCit7CisgICAgaWYgKG1faXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbikKKyAgICAgICAg
bV9vd25lckRvY3VtZW50LT5zZWxlY3Rpb24oKS51cGRhdGVGcm9tQXNzb2NpYXRlZExpdmVSYW5n
ZSgpOworfQorCiB2b2lkIFJhbmdlOjp1cGRhdGVEb2N1bWVudCgpCiB7CiAgICAgYXV0byYgZG9j
dW1lbnQgPSBzdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCk7CiAgICAgaWYgKG1fb3duZXJEb2N1
bWVudC5wdHIoKSA9PSAmZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1f
aXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbik7CiAgICAgbV9vd25lckRvY3VtZW50LT5kZXRhY2hS
YW5nZSgqdGhpcyk7CiAgICAgbV9vd25lckRvY3VtZW50ID0gZG9jdW1lbnQ7CiAgICAgbV9vd25l
ckRvY3VtZW50LT5hdHRhY2hSYW5nZSgqdGhpcyk7CkBAIC0xMTYsNiArMTE1LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gUmFuZ2U6OnNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWdu
ZWQgb2Zmc2V0KQogICAgIG1fc3RhcnQuc2V0KFdURk1vdmUoY29udGFpbmVyKSwgb2Zmc2V0LCBj
aGlsZE5vZGUucmVsZWFzZVJldHVyblZhbHVlKCkpOwogICAgIGlmICghaXNfbHRlcShkb2N1bWVu
dE9yZGVyKG1ha2VCb3VuZGFyeVBvaW50KG1fc3RhcnQpLCBtYWtlQm91bmRhcnlQb2ludChtX2Vu
ZCkpKSkKICAgICAgICAgbV9lbmQgPSBtX3N0YXJ0OworICAgIHVwZGF0ZUFzc29jaWF0ZWRTZWxl
Y3Rpb24oKTsKICAgICB1cGRhdGVEb2N1bWVudCgpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0x
MjksNiArMTI5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gUmFuZ2U6OnNldEVuZChSZWY8Tm9kZT4m
JiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKICAgICBtX2VuZC5zZXQoV1RGTW92ZShjb250
YWluZXIpLCBvZmZzZXQsIGNoaWxkTm9kZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7CiAgICAgaWYg
KCFpc19sdGVxKGRvY3VtZW50T3JkZXIobWFrZUJvdW5kYXJ5UG9pbnQobV9zdGFydCksIG1ha2VC
b3VuZGFyeVBvaW50KG1fZW5kKSkpKQogICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CisgICAgdXBk
YXRlQXNzb2NpYXRlZFNlbGVjdGlvbigpOwogICAgIHVwZGF0ZURvY3VtZW50KCk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KQEAgLTEzOSw2ICsxNDAsNyBAQCB2b2lkIFJhbmdlOjpjb2xsYXBzZShib29s
IHRvU3RhcnQpCiAgICAgICAgIG1fZW5kID0gbV9zdGFydDsKICAgICBlbHNlCiAgICAgICAgIG1f
c3RhcnQgPSBtX2VuZDsKKyAgICB1cGRhdGVBc3NvY2lhdGVkU2VsZWN0aW9uKCk7CiB9CiAKIEV4
Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiBjb250YWluZXIsIHVu
c2lnbmVkIG9mZnNldCkKQEAgLTM2OCw3ICszNzAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4+IFJhbmdlOjpwcm9jZXNzQ29udGVudHMoQWN0aW9uVHlwZSBhY3Rpb24p
CiAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgICAgICB9Ci0gICAgICAgIG1f
ZW5kID0gbV9zdGFydDsKKyAgICAgICAgY29sbGFwc2UodHJ1ZSk7CiAgICAgfQogCiAgICAgLy8g
Tm93IGFkZCBsZWZ0Q29udGVudHMsIHN0dWZmIGluIGJldHdlZW4sIGFuZCByaWdodENvbnRlbnRz
IHRvIHRoZSBmcmFnbWVudApAQCAtNjk1LDI5ICs2OTcsMjggQEAgRXhjZXB0aW9uT3I8UmVmPERv
Y3VtZW50RnJhZ21lbnQ+PiBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0
cmluZyYKICAgICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCplbGVt
ZW50LCBtYXJrdXAsIEFsbG93U2NyaXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFy
dGVkKTsKIH0KIAotRXhjZXB0aW9uT3I8Tm9kZSo+IFJhbmdlOjpjaGVja05vZGVPZmZzZXRQYWly
KE5vZGUmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK0V4Y2VwdGlvbk9yPE5vZGUqPiBS
YW5nZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpcihOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7
CiAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBOb2RlOjpET0NV
TUVOVF9UWVBFX05PREU6Ci0gICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5v
ZGVUeXBlRXJyb3IgfTsKLSAgICAgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6Ci0g
ICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgotICAgICAgICBjYXNlIE5vZGU6OlRFWFRf
Tk9ERToKLSAgICAgICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6Ci0g
ICAgICAgICAgICBpZiAob2Zmc2V0ID4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9y
IH07CisgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OworICAgIGNhc2UgTm9kZTo6Q0RBVEFf
U0VDVElPTl9OT0RFOgorICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgorICAgIGNhc2UgTm9k
ZTo6VEVYVF9OT0RFOgorICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RF
OgorICAgICAgICBpZiAob2Zmc2V0ID4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkubGVu
Z3RoKCkpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToK
KyAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CisgICAgY2FzZSBOb2RlOjpE
T0NVTUVOVF9OT0RFOgorICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgorICAgICAgICBpZiAo
IW9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBjYXNlIE5vZGU6
OkFUVFJJQlVURV9OT0RFOgotICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05P
REU6Ci0gICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKLSAgICAgICAgY2FzZSBOb2Rl
OjpFTEVNRU5UX05PREU6IHsKLSAgICAgICAgICAgIGlmICghb2Zmc2V0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgTm9kZSogY2hpbGRCZWZvcmUgPSBub2Rl
LnRyYXZlcnNlVG9DaGlsZEF0KG9mZnNldCAtIDEpOwotICAgICAgICAgICAgaWYgKCFjaGlsZEJl
Zm9yZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3Ig
fTsKLSAgICAgICAgICAgIHJldHVybiBjaGlsZEJlZm9yZTsKLSAgICAgICAgfQorICAgICAgICBh
dXRvIGNoaWxkQmVmb3JlID0gbm9kZS50cmF2ZXJzZVRvQ2hpbGRBdChvZmZzZXQgLSAxKTsKKyAg
ICAgICAgaWYgKCFjaGlsZEJlZm9yZSkKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OworICAgICAgICByZXR1cm4gY2hpbGRCZWZvcmU7CiAgICAgfQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9k
ZVR5cGVFcnJvciB9OwpAQCAtNzcxLDkgKzc3MiwxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5n
ZTo6c2VsZWN0Tm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUuaXNEb2N1
bWVudFR5cGVOb2RlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5
cGVFcnJvciB9OwotCiAgICAgbV9zdGFydC5zZXRUb0JlZm9yZUNvbnRlbnRzKG5vZGUpOwogICAg
IG1fZW5kLnNldFRvQWZ0ZXJDb250ZW50cyhub2RlKTsKKyAgICB1cGRhdGVBc3NvY2lhdGVkU2Vs
ZWN0aW9uKCk7CisgICAgdXBkYXRlRG9jdW1lbnQoKTsKICAgICByZXR1cm4geyB9OwogfQogCkBA
IC0xMDMyLDYgKzEwMzQsMjIgQEAgUmVmPERPTVJlY3Q+IFJhbmdlOjpnZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKSBjb25zdAogICAgIHJldHVybiBET01SZWN0OjpjcmVhdGUodW5pb25SZWN0SWdub3Jp
bmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjpjbGllbnRCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNp
bXBsZVJhbmdlKCp0aGlzKSkpKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0Qm90aEVuZHBvaW50cyhS
YW5nZSYgcmFuZ2UsIGNvbnN0IFNpbXBsZVJhbmdlJiB2YWx1ZSkKK3sKKyAgICBhdXRvIHN0YXJ0
Q29udGFpbmVyID0gdmFsdWUuc3RhcnQuY29udGFpbmVyOworICAgIHJhbmdlLnNldFN0YXJ0KFdU
Rk1vdmUoc3RhcnRDb250YWluZXIpLCB2YWx1ZS5zdGFydC5vZmZzZXQpOworICAgIGF1dG8gZW5k
Q29udGFpbmVyID0gdmFsdWUuZW5kLmNvbnRhaW5lcjsKKyAgICByYW5nZS5zZXRFbmQoV1RGTW92
ZShlbmRDb250YWluZXIpLCB2YWx1ZS5lbmQub2Zmc2V0KTsKK30KKwordm9pZCBSYW5nZTo6dXBk
YXRlRnJvbVNlbGVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgdmFsdWUpCit7CisgICAgQVNTRVJU
KG1faXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbik7CisgICAgbV9pc0Fzc29jaWF0ZWRXaXRoU2Vs
ZWN0aW9uID0gZmFsc2U7CisgICAgc2V0Qm90aEVuZHBvaW50cygqdGhpcywgdmFsdWUpOworICAg
IG1faXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbiA9IHRydWU7Cit9CisKIFNpbXBsZVJhbmdlIG1h
a2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCiB7CiAgICAgcmV0dXJuIHsgeyByYW5n
ZS5zdGFydENvbnRhaW5lcigpLCByYW5nZS5zdGFydE9mZnNldCgpIH0sIHsgcmFuZ2UuZW5kQ29u
dGFpbmVyKCksIHJhbmdlLmVuZE9mZnNldCgpIH0gfTsKQEAgLTEwNTcsMTAgKzEwNzUsNyBAQCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4m
IHJhbmdlKQogUmVmPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQogewogICAgIGF1dG8gcmVzdWx0ID0gUmFuZ2U6OmNyZWF0ZShyYW5nZS5zdGFydC5kb2N1
bWVudCgpKTsKLSAgICBhdXRvIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnQuY29udGFpbmVy
OwotICAgIHJlc3VsdC0+c2V0U3RhcnQoV1RGTW92ZShzdGFydENvbnRhaW5lciksIHJhbmdlLnN0
YXJ0Lm9mZnNldCk7Ci0gICAgYXV0byBlbmRDb250YWluZXIgPSByYW5nZS5lbmQuY29udGFpbmVy
OwotICAgIHJlc3VsdC0+c2V0RW5kKFdURk1vdmUoZW5kQ29udGFpbmVyKSwgcmFuZ2UuZW5kLm9m
ZnNldCk7CisgICAgc2V0Qm90aEVuZHBvaW50cyhyZXN1bHQsIHJhbmdlKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IDAwOTdiYmI5MWRjNmIyNzk2MzcxMDQyYTkz
OWQyNWJmN2MyMmJjNTYuLmRhNmY0M2U5YWE4YzRkMzM5NDFhYjZjYTgxZWQzNjlmYjAxNjU5Y2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5oCkBAIC05OSw2ICs5OSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXh0
Tm9kZXNNZXJnZWQoTm9kZVdpdGhJbmRleCYgb2xkTm9kZSwgdW5zaWduZWQgb2Zmc2V0KTsKICAg
ICB2b2lkIHRleHROb2RlU3BsaXQoVGV4dCYgb2xkTm9kZSk7CiAKKyAgICB2b2lkIGRpZEFzc29j
aWF0ZVdpdGhTZWxlY3Rpb24oKSB7IG1faXNBc3NvY2lhdGVkV2l0aFNlbGVjdGlvbiA9IHRydWU7
IH0KKyAgICB2b2lkIGRpZERpc2Fzc29jaWF0ZUZyb21TZWxlY3Rpb24oKSB7IG1faXNBc3NvY2lh
dGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOyB9CisgICAgdm9pZCB1cGRhdGVGcm9tU2VsZWN0aW9u
KGNvbnN0IFNpbXBsZVJhbmdlJik7CisKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8Tm9kZSo+IGNo
ZWNrTm9kZU9mZnNldFBhaXIoTm9kZSYsIHVuc2lnbmVkIG9mZnNldCk7CisKICNpZiBFTkFCTEUo
VFJFRV9ERUJVR0dJTkcpCiAgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsKICNl
bmRpZgpAQCAtMTA5LDEyICsxMTUsMTMgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBSYW5nZShE
b2N1bWVudCYpOwogCiAgICAgdm9pZCB1cGRhdGVEb2N1bWVudCgpOwotICAgIEV4Y2VwdGlvbk9y
PE5vZGUqPiBjaGVja05vZGVPZmZzZXRQYWlyKE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0
OworICAgIHZvaWQgdXBkYXRlQXNzb2NpYXRlZFNlbGVjdGlvbigpOwogICAgIEV4Y2VwdGlvbk9y
PFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gcHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwog
CiAgICAgUmVmPERvY3VtZW50PiBtX293bmVyRG9jdW1lbnQ7CiAgICAgUmFuZ2VCb3VuZGFyeVBv
aW50IG1fc3RhcnQ7CiAgICAgUmFuZ2VCb3VuZGFyeVBvaW50IG1fZW5kOworICAgIGJvb2wgbV9p
c0Fzc29jaWF0ZWRXaXRoU2VsZWN0aW9uIHsgZmFsc2UgfTsKIH07CiAKIFdFQkNPUkVfRVhQT1JU
IFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3Bw
CmluZGV4IDY1M2ZhYTFjMTA5MWU4NzU0ZjdlOTliMTkwNTNlNWNkMDQwNmI3YzkuLmY5MThkNDIw
M2E0ODQ2NGIwMDI2MTBhN2Y4ODNmYjVlMDI4ZTc3NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKQEAgLTI0
NSwxMSArMjQ1LDEyIEBAIFN0cmluZyBUZXh0OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKICAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi12b2lkIFRleHQ6OnNldERhdGFBbmRV
cGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0
YSwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpCit2b2lkIFRleHQ6OnNl
dERhdGFBbmRVcGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25lZCBvZmZzZXRPZlJl
cGxhY2VkRGF0YSwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgsIFVwZGF0
ZUxpdmVSYW5nZXMgdXBkYXRlTGl2ZVJhbmdlcykKIHsKICAgICBhdXRvIG9sZERhdGEgPSBkYXRh
KCk7Ci0gICAgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZShuZXdEYXRhLCBvZmZzZXRP
ZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoLCBuZXdMZW5ndGgpOworICAgIENoYXJhY3RlckRhdGE6
OnNldERhdGFBbmRVcGRhdGUobmV3RGF0YSwgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIG9sZExlbmd0
aCwgbmV3TGVuZ3RoLCB1cGRhdGVMaXZlUmFuZ2VzKTsKIAorICAgIC8vIEZJWE1FOiBEb2VzIG5v
dCBzZWVtIGNvcnJlY3QgdG8gZG8gdGhpcyBmb3IgMCBvZmZzZXQgb25seS4KICAgICBpZiAoIW9m
ZnNldE9mUmVwbGFjZWREYXRhKSB7CiAgICAgICAgIGF1dG8qIHRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyID0gZG9jdW1lbnQoKS50ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcklmRXhpc3RzKCk7
CiAgICAgICAgIGlmIChVTkxJS0VMWSh0ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciAmJiBvbGRE
YXRhICE9IG5ld0RhdGEpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgKaW5kZXggN2RhYjA0MWJiNWRkMjIyYTA1NzMyYTgx
ZmU1ZWJmZDI1ZDM2NjYyNi4uOTM1MzhlODliMmQ1NWZhYjZmZDY0NjIzNDA2M2QzMjk1NDdjNzI3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vVGV4dC5oCkBAIC01Nyw4ICs1Nyw2IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBk
ZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHNldERhdGFBbmRVcGRh
dGUoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVk
IG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKSBmaW5hbDsKLQogcHJvdGVjdGVkOgogICAg
IFRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEsIENvbnN0cnVjdGlv
blR5cGUgdHlwZSkKICAgICAgICAgOiBDaGFyYWN0ZXJEYXRhKGRvY3VtZW50LCBkYXRhLCB0eXBl
KQpAQCAtNzAsNiArNjgsNyBAQCBwcml2YXRlOgogICAgIE5vZGVUeXBlIG5vZGVUeXBlKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgUmVmPE5vZGU+IGNsb25lTm9kZUludGVybmFsKERvY3VtZW50Jiwg
Q2xvbmluZ09wZXJhdGlvbikgb3ZlcnJpZGU7CiAgICAgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5v
ZGVUeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldERhdGFBbmRVcGRhdGUoY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIG9sZExlbmd0
aCwgdW5zaWduZWQgbmV3TGVuZ3RoLCBVcGRhdGVMaXZlUmFuZ2VzKSBmaW5hbDsKIAogICAgIHZp
cnR1YWwgUmVmPFRleHQ+IHZpcnR1YWxDcmVhdGUoY29uc3QgU3RyaW5nJik7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA4MDUyNmRkZTQ3NGIzM2Nm
OWU3NDZhZDAyZGJhNTk0ZDZmYjQwYmYzLi5kZmM5YTNjOWJiMDMxMzljNzcyM2E3NTAxNGJlNTBk
MDFhMzUwYTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSw4ICsxNDksNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3Vt
ZW50KQogfQogCiBGcmFtZVNlbGVjdGlvbjo6RnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3Vt
ZW50KQotICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1feFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpCisgICAg
OiBtX2RvY3VtZW50KG1ha2VXZWFrUHRyKGRvY3VtZW50KSkKICAgICAsIG1fZ3JhbnVsYXJpdHko
VGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eSkKICNpZiBFTkFCTEUoVEVYVF9D
QVJFVCkKICAgICAsIG1fY2FyZXRCbGlua1RpbWVyKCp0aGlzLCAmRnJhbWVTZWxlY3Rpb246OmNh
cmV0QmxpbmtUaW1lckZpcmVkKQpAQCAtMTY5LDcgKzE2OCw3IEBAIEZyYW1lU2VsZWN0aW9uOjpG
cmFtZVNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgLCBtX2NhcmV0QmxpbmtzKHRy
dWUpCiAjZW5kaWYKIHsKLSAgICBpZiAoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rp
b24obV9kb2N1bWVudCkpCisgICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0
aW9uKG1fZG9jdW1lbnQuZ2V0KCkpKQogICAgICAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlv
bmFsKHRydWUpOwogCiAgICAgYm9vbCBhY3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0
aXZlKCk7CkBAIC0yNDgsNyArMjQ3LDcgQEAgdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpzZXRD
YXJldFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKG1f
cG9zaXRpb24uaXNOdWxsKCkgfHwgbV9wb3NpdGlvbi5pc09ycGhhbigpKQogICAgICAgICBjbGVh
ckNhcmV0UmVjdCgpOwogICAgIGVsc2UKLSAgICAgICAgdXBkYXRlQ2FyZXRSZWN0KGRvY3VtZW50
LCBtX3Bvc2l0aW9uKTsKKyAgICAgICAgdXBkYXRlQ2FyZXRSZWN0KCpkb2N1bWVudCwgbV9wb3Np
dGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkIGFkanVzdEVuZHBvaW50c0F0QmlkaUJvdW5kYXJ5KFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZUJhc2UsIFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZUV4dGVu
dCkKQEAgLTI5Miw3ICsyOTEsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25C
eU1vdXNlSWZEaWZmZXJlbnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcGFzcwogICAgIEVuZFBv
aW50c0FkanVzdG1lbnRNb2RlIGVuZHBvaW50c0FkanVzdG1lbnRNb2RlKQogewogICAgIFZpc2li
bGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gcGFzc2VkTmV3U2VsZWN0aW9uOwotICAgIGJvb2wg
aXNEaXJlY3Rpb25hbCA9IHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9uKG1fZG9j
dW1lbnQpIHx8IG5ld1NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCk7CisgICAgYm9vbCBpc0RpcmVj
dGlvbmFsID0gc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9uYWxTZWxlY3Rpb24obV9kb2N1bWVudC5n
ZXQoKSkgfHwgbmV3U2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKTsKIAogICAgIFZpc2libGVQb3Np
dGlvbiBiYXNlID0gbV9vcmlnaW5hbEJhc2UuaXNOb3ROdWxsKCkgPyBtX29yaWdpbmFsQmFzZSA6
IG5ld1NlbGVjdGlvbi52aXNpYmxlQmFzZSgpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXdCYXNl
ID0gYmFzZTsKQEAgLTMxNCw3ICszMTMsNiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxl
Y3Rpb25CeU1vdXNlSWZEaWZmZXJlbnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcGFzcwogICAg
IG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwpOyAvLyBBZGp1c3Rp
bmcgYmFzZSBhbmQgZXh0ZW50IHdpbGwgbWFrZSBuZXdTZWxlY3Rpb24gYWx3YXlzIGRpcmVjdGlv
bmFsCiAgICAgaWYgKG1fc2VsZWN0aW9uID09IG5ld1NlbGVjdGlvbiB8fCAhc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKLQogICAgIAogICAgIEFY
VGV4dFN0YXRlQ2hhbmdlSW50ZW50IGludGVudDsKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBuZXdTZWxlY3Rpb24uaXNDYXJldCgpKQpAQCAtMzMwLDEx
ICszMjgsMTIgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KICAgICBib29sIHNob3VsZENsZWFy
VHlwaW5nU3R5bGUgPSBvcHRpb25zLmNvbnRhaW5zKENsZWFyVHlwaW5nU3R5bGUpOwogCiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb25Qb3NzaWJseVdpdGhv
dXREaXJlY3Rpb247Ci0gICAgaWYgKHNob3VsZEFsd2F5c1VzZURpcmVjdGlvbmFsU2VsZWN0aW9u
KG1fZG9jdW1lbnQpKQorICAgIGlmIChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlv
bihtX2RvY3VtZW50LmdldCgpKSkKICAgICAgICAgbmV3U2VsZWN0aW9uLnNldElzRGlyZWN0aW9u
YWwodHJ1ZSk7CiAKICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmZyYW1lKCkp
IHsKICAgICAgICAgbV9zZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb247CisgICAgICAgIHVwZGF0ZUFz
c29jaWF0ZWRMaXZlUmFuZ2UoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAt
MzY4LDYgKzM2Nyw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbldpdGhvdXRV
cGRhdGluZ0FwcGVhcmFuY2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvCiAgICAgICAgIG1fZG9jdW1l
bnQtPmVkaXRvcigpLnNlbGVjdGlvbldpbGxDaGFuZ2UoKTsKIAogICAgIG1fc2VsZWN0aW9uID0g
bmV3U2VsZWN0aW9uOworICAgIHVwZGF0ZUFzc29jaWF0ZWRMaXZlUmFuZ2UoKTsKIAogICAgIC8v
IFNlbGVjdGlvbiBvZmZzZXRzIHNob3VsZCBpbmNyZWFzZSB3aGVuIExGIGlzIGluc2VydGVkIGJl
Zm9yZSB0aGUgY2FyZXQgaW4gSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC4gU2VlIDxodHRwczovL3dl
YmtpdC5vcmcvYi81NjA2MT4uCiAgICAgaWYgKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0
ZXh0Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChuZXdTZWxlY3Rpb24uc3RhcnQo
KSkpCkBAIC0zOTAsNyArMzkwLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9u
V2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShjb25zdCBWaXNpYmxlU2VsZWN0aW8KIAogICAgIC8v
IEFsd2F5cyBjbGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJvdyBuYXZp
Z2F0aW9uLgogICAgIC8vIEl0IHdpbGwgYmUgcmVzdG9yZWQgYnkgdGhlIHZlcnRpY2FsIGFycm93
IG5hdmlnYXRpb24gY29kZSBpZiBuZWNlc3NhcnkuCi0gICAgbV94UG9zRm9yVmVydGljYWxBcnJv
d05hdmlnYXRpb24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOworICAgIG1f
eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gV1RGOjpudWxsb3B0OwogICAgIHNlbGVj
dEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7CiAgICAgbV9kb2N1bWVudC0+
ZWRpdG9yKCkucmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIG9wdGlvbnMp
OwogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3Rpb24tYXBpLyNzZWxlY3Rpb25j
aGFuZ2UtZXZlbnQKQEAgLTQwNCw3ICs0MDQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBPcHRpb25TZXQ8Uwog
ewogICAgIExPR19XSVRIX1NUUkVBTShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiRnJhbWVTZWxlY3Rp
b246OnNldFNlbGVjdGlvbiAiIDw8IHNlbGVjdGlvbik7CiAKLSAgICBSZWZQdHI8RG9jdW1lbnQ+
IHByb3RlY3RvcihtX2RvY3VtZW50KTsKKyAgICBhdXRvIHByb3RlY3RlZERvY3VtZW50ID0gbWFr
ZVJlZlB0cihtX2RvY3VtZW50LmdldCgpKTsKICAgICBpZiAoIXNldFNlbGVjdGlvbldpdGhvdXRV
cGRhdGluZ0FwcGVhcmFuY2Uoc2VsZWN0aW9uLCBvcHRpb25zLCBhbGlnbiwgZ3JhbnVsYXJpdHkp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTQxOSwxNyArNDE5LDE3IEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE9w
dGlvblNldDxTCiAgICAgbV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBpbnRlbnQ7CiAgICAgbV9w
ZW5kaW5nU2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKIAotICAgIGlmIChtX2RvY3VtZW50LT5oYXNQ
ZW5kaW5nU3R5bGVSZWNhbGMoKSkKKyAgICBpZiAocHJvdGVjdGVkRG9jdW1lbnQtPmhhc1BlbmRp
bmdTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IG1fZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBhdXRvIGZyYW1lVmlldyA9IHByb3RlY3Rl
ZERvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmxheW91
dENvbnRleHQoKS5pc0xheW91dFBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdXBk
YXRlQW5kUmV2ZWFsU2VsZWN0aW9uKGludGVudCk7CiAKICAgICBpZiAob3B0aW9ucyAmIElzVXNl
clRyaWdnZXJlZCkgewotICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbV9kb2N1bWVudC0+ZWRp
dG9yKCkuY2xpZW50KCkpCisgICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBwcm90ZWN0ZWREb2N1
bWVudC0+ZWRpdG9yKCkuY2xpZW50KCkpCiAgICAgICAgICAgICBjbGllbnQtPmRpZEVuZFVzZXJU
cmlnZ2VyZWRTZWxlY3Rpb25DaGFuZ2VzKCk7CiAgICAgfQogfQpAQCAtODA0LDEwICs4MDQsMTAg
QEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdGb3J3YXJk
KFRleHRHcmFudWxhcml0eSBncmFudWxhcmkKICAgICAgICAgcG9zID0gbmV4dFNlbnRlbmNlUG9z
aXRpb24ocG9zKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6Okxp
bmVHcmFudWxhcml0eToKLSAgICAgICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihwb3MsIGxpbmVE
aXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihFWFRFTlQpKTsKKyAgICAg
ICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihwb3MsIGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2Nr
RGlyZWN0aW9uTmF2aWdhdGlvbihFeHRlbnQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBU
ZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBuZXh0
UGFyYWdyYXBoUG9zaXRpb24ocG9zLCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlv
bk5hdmlnYXRpb24oRVhURU5UKSk7CisgICAgICAgIHBvcyA9IG5leHRQYXJhZ3JhcGhQb3NpdGlv
bihwb3MsIGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihFeHRl
bnQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OkRvY3VtZW50
R3JhbnVsYXJpdHk6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTE3LDExICs5
MTcsMTEgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlNb3ZpbmdGb3J3
YXJkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwKICAgICAgICAgLy8gdG8gbGVhdmUgdGhl
IHNlbGVjdGlvbiBhdCB0aGF0IGxpbmUgc3RhcnQgKG5vIG5lZWQgdG8gY2FsbCBuZXh0TGluZVBv
c2l0aW9uISkKICAgICAgICAgcG9zID0gY3VycmVudFBvc2l0aW9uOwogICAgICAgICBpZiAoIWlz
UmFuZ2UoKSB8fCAhaXNTdGFydE9mTGluZShwb3MpKQotICAgICAgICAgICAgcG9zID0gbmV4dExp
bmVQb3NpdGlvbihwb3MsIGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdh
dGlvbihTVEFSVCkpOworICAgICAgICAgICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihwb3MsIGxp
bmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihTdGFydCkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdy
YW51bGFyaXR5OgotICAgICAgICBwb3MgPSBuZXh0UGFyYWdyYXBoUG9zaXRpb24oY3VycmVudFBv
c2l0aW9uLCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oU1RB
UlQpKTsKKyAgICAgICAgcG9zID0gbmV4dFBhcmFncmFwaFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlv
biwgbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKFN0YXJ0KSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpEb2N1bWVudEdyYW51
bGFyaXR5OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEwMjUsMTAgKzEwMjUs
MTAgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjptb2RpZnlFeHRlbmRpbmdCYWNr
d2FyZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXIKICAgICAgICAgcG9zID0gcHJldmlvdXNTZW50
ZW5jZVBvc2l0aW9uKHBvcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dEdyYW51bGFy
aXR5OjpMaW5lR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBvcyA9IHByZXZpb3VzTGluZVBvc2l0aW9u
KHBvcywgbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKEVYVEVO
VCkpOworICAgICAgICBwb3MgPSBwcmV2aW91c0xpbmVQb3NpdGlvbihwb3MsIGxpbmVEaXJlY3Rp
b25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihFeHRlbnQpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5OgotICAg
ICAgICBwb3MgPSBwcmV2aW91c1BhcmFncmFwaFBvc2l0aW9uKHBvcywgbGluZURpcmVjdGlvblBv
aW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKEVYVEVOVCkpOworICAgICAgICBwb3MgPSBw
cmV2aW91c1BhcmFncmFwaFBvc2l0aW9uKHBvcywgbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tE
aXJlY3Rpb25OYXZpZ2F0aW9uKEV4dGVudCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRl
eHRHcmFudWxhcml0eTo6U2VudGVuY2VCb3VuZGFyeToKICAgICAgICAgcG9zID0gc3RhcnRPZlNl
bnRlbmNlKHN0YXJ0Rm9yUGxhdGZvcm0oKSk7CkBAIC0xMTMzLDEwICsxMTMzLDEwIEBAIFZpc2li
bGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5TW92aW5nQmFja3dhcmQoVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5CiAgICAgICAgIHBvcyA9IHByZXZpb3VzU2VudGVuY2VQb3NpdGlv
bihjdXJyZW50UG9zaXRpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxh
cml0eTo6TGluZUdyYW51bGFyaXR5OgotICAgICAgICBwb3MgPSBwcmV2aW91c0xpbmVQb3NpdGlv
bihjdXJyZW50UG9zaXRpb24sIGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2
aWdhdGlvbihTVEFSVCkpOworICAgICAgICBwb3MgPSBwcmV2aW91c0xpbmVQb3NpdGlvbihjdXJy
ZW50UG9zaXRpb24sIGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlv
bihTdGFydCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6UGFy
YWdyYXBoR3JhbnVsYXJpdHk6Ci0gICAgICAgIHBvcyA9IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRp
b24oY3VycmVudFBvc2l0aW9uLCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5h
dmlnYXRpb24oU1RBUlQpKTsKKyAgICAgICAgcG9zID0gcHJldmlvdXNQYXJhZ3JhcGhQb3NpdGlv
bihjdXJyZW50UG9zaXRpb24sIGxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2
aWdhdGlvbihTdGFydCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRleHRHcmFudWxhcml0
eTo6U2VudGVuY2VCb3VuZGFyeToKICAgICAgICAgcG9zID0gc3RhcnRPZlNlbnRlbmNlKGN1cnJl
bnRQb3NpdGlvbik7CkBAIC0xMzc4LDEwICsxMzc4LDEwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246
Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4CiAKICAgICAvLyBTb21lIG9mIHRoZSBhYm92ZSBvcGVyYXRpb25zIHNldCBhbiB4UG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb24uCiAgICAgLy8gU2V0dGluZyBhIHNlbGVjdGlvbiB3aWxs
IGNsZWFyIGl0LCBzbyBzYXZlIGl0IHRvIHBvc3NpYmx5IHJlc3RvcmUgbGF0ZXIuCi0gICAgLy8g
Tm90ZTogdGhlIFNUQVJUIHBvc2l0aW9uIHR5cGUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMg
dW51c2VkLCBpdCB3b3VsZCBiZQorICAgIC8vIE5vdGU6IHRoZSBTdGFydCBwb3NpdGlvbiB0eXBl
IGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIHVudXNlZCwgaXQgd291bGQgYmUKICAgICAvLyB0
aGUgcmVxdWVzdGVkIHBvc2l0aW9uIHR5cGUgaWYgdGhlcmUgd2VyZSBubyB4UG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24gc2V0LgotICAgIExheW91dFVuaXQgeCA9IGxpbmVEaXJlY3Rpb25Q
b2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihTVEFSVCk7Ci0gICAgbV9zZWxlY3Rpb24u
c2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25hbFNlbGVjdGlvbihtX2Rv
Y3VtZW50KSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5kKTsKKyAgICBMYXlvdXRVbml0IHgg
PSBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oU3RhcnQpOwor
ICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9u
YWxTZWxlY3Rpb24obV9kb2N1bWVudC5nZXQoKSkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVu
ZCk7CiAKICAgICBzd2l0Y2ggKGFsdGVyKSB7CiAgICAgY2FzZSBBbHRlcmF0aW9uTW92ZToKQEAg
LTE0NTksMTIgKzE0NTksMTIgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6bW9kaWZ5KEVBbHRlcmF0
aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBWZXJ0aWMKICAgICBzd2l0Y2gg
KGFsdGVyKSB7CiAgICAgY2FzZSBBbHRlcmF0aW9uTW92ZToKICAgICAgICAgcG9zID0gVmlzaWJs
ZVBvc2l0aW9uKGRpcmVjdGlvbiA9PSBEaXJlY3Rpb25VcCA/IG1fc2VsZWN0aW9uLnN0YXJ0KCkg
OiBtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgIHhQ
b3MgPSBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oZGlyZWN0
aW9uID09IERpcmVjdGlvblVwID8gU1RBUlQgOiBFTkQpOworICAgICAgICB4UG9zID0gbGluZURp
cmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKGRpcmVjdGlvbiA9PSBEaXJl
Y3Rpb25VcCA/IFN0YXJ0IDogRW5kKTsKICAgICAgICAgbV9zZWxlY3Rpb24uc2V0QWZmaW5pdHko
ZGlyZWN0aW9uID09IERpcmVjdGlvblVwID8gQWZmaW5pdHk6OlVwc3RyZWFtIDogQWZmaW5pdHk6
OkRvd25zdHJlYW0pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVyYXRpb25FeHRlbmQ6
CiAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9z
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgIHhQb3MgPSBsaW5lRGlyZWN0aW9uUG9pbnRG
b3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oRVhURU5UKTsKKyAgICAgICAgeFBvcyA9IGxpbmVE
aXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbihFeHRlbnQpOwogICAgICAg
ICBtX3NlbGVjdGlvbi5zZXRBZmZpbml0eShBZmZpbml0eTo6RG93bnN0cmVhbSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTE1MTQsNDcgKzE1MTQsNDMgQEAgYm9vbCBGcmFtZVNlbGVjdGlv
bjo6bW9kaWZ5KEVBbHRlcmF0aW9uIGFsdGVyLCB1bnNpZ25lZCB2ZXJ0aWNhbERpc3RhbmNlLCBW
ZXJ0aWMKICAgICBpZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQogICAgICAgICBt
X2dyYW51bGFyaXR5ID0gVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXJHcmFudWxhcml0eTsKIAot
ICAgIG1fc2VsZWN0aW9uLnNldElzRGlyZWN0aW9uYWwoc2hvdWxkQWx3YXlzVXNlRGlyZWN0aW9u
YWxTZWxlY3Rpb24obV9kb2N1bWVudCkgfHwgYWx0ZXIgPT0gQWx0ZXJhdGlvbkV4dGVuZCk7Cisg
ICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChzaG91bGRBbHdheXNVc2VEaXJlY3Rpb25h
bFNlbGVjdGlvbihtX2RvY3VtZW50LmdldCgpKSB8fCBhbHRlciA9PSBBbHRlcmF0aW9uRXh0ZW5k
KTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1MYXlvdXRVbml0IEZyYW1lU2VsZWN0aW9uOjps
aW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oRVBvc2l0aW9uVHlw
ZSB0eXBlKQorTGF5b3V0VW5pdCBGcmFtZVNlbGVjdGlvbjo6bGluZURpcmVjdGlvblBvaW50Rm9y
QmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKFBvc2l0aW9uVHlwZSB0eXBlKQogewotICAgIExheW91
dFVuaXQgeDsKLQogICAgIGlmIChpc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIHg7CisgICAgICAg
IHJldHVybiAwOwogCi0gICAgUG9zaXRpb24gcG9zOworICAgIC8vIEZJWE1FOiBDYW4gd2UgdXNl
IHZpc2libGVTdGFydC9FbmQvRXh0ZW50PworICAgIFBvc2l0aW9uIHBvc2l0aW9uOwogICAgIHN3
aXRjaCAodHlwZSkgewotICAgIGNhc2UgU1RBUlQ6Ci0gICAgICAgIHBvcyA9IG1fc2VsZWN0aW9u
LnN0YXJ0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRU5EOgotICAgICAgICBwb3MgPSBt
X3NlbGVjdGlvbi5lbmQoKTsKKyAgICBjYXNlIFN0YXJ0OgorICAgICAgICBwb3NpdGlvbiA9IG1f
c2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkFTRToKLSAgICAg
ICAgcG9zID0gbV9zZWxlY3Rpb24uYmFzZSgpOworICAgIGNhc2UgRW5kOgorICAgICAgICBwb3Np
dGlvbiA9IG1fc2VsZWN0aW9uLmVuZCgpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEVYVEVO
VDoKLSAgICAgICAgcG9zID0gbV9zZWxlY3Rpb24uZXh0ZW50KCk7CisgICAgY2FzZSBFeHRlbnQ6
CisgICAgICAgIHBvc2l0aW9uID0gbV9zZWxlY3Rpb24uZXh0ZW50KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIEZyYW1lKiBmcmFtZSA9IHBvcy5hbmNob3JOb2RlKCktPmRvY3VtZW50
KCkuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4geDsKLSAgICAgICAg
Ci0gICAgaWYgKG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID09IE5vWFBvc0ZvclZl
cnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3NpdGlvbihwb3MsIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwotICAgICAgICAvLyBWaXNp
YmxlUG9zaXRpb24gY3JlYXRpb24gY2FuIGZhaWwgaGVyZSBpZiBhIG5vZGUgY29udGFpbmluZyB0
aGUgc2VsZWN0aW9uIGJlY29tZXMgdmlzaWJpbGl0eTpoaWRkZW4KLSAgICAgICAgLy8gYWZ0ZXIg
dGhlIHNlbGVjdGlvbiBpcyBjcmVhdGVkIGFuZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQuCi0gICAgICAgIHggPSB2aXNpYmxlUG9zaXRpb24uaXNOb3ROdWxsKCkgPyB2aXNpYmxlUG9z
aXRpb24ubGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKCkgOiAw
OwotICAgICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9IHg7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHggPSBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKLSAgICAg
ICAgCisgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGNoZWNrIG5lZWRlZD8gV2hhdCdzIHRoZSBo
YXJtIGluIGRvaW5nIGEgbGl0dGxlIG1vcmUgd29yayB3aXRob3V0IGEgZnJhbWU/CisgICAgaWYg
KCFwb3NpdGlvbi5hbmNob3JOb2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGRvIHRoaXMgYmVmb3JlIGdldHRpbmcgdGhl
IHBvc2l0aW9uIGZyb20gdGhlIHNlbGVjdGlvbj8KKyAgICBpZiAobV94UG9zRm9yVmVydGljYWxB
cnJvd05hdmlnYXRpb24pCisgICAgICAgIHJldHVybiAqbV94UG9zRm9yVmVydGljYWxBcnJvd05h
dmlnYXRpb247CisKKyAgICAvLyBWaXNpYmxlUG9zaXRpb24gY3JlYXRpb24gY2FuIGZhaWwgaGVy
ZSBpZiBhIG5vZGUgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGJlY29tZXMKKyAgICAvLyB2aXNp
YmlsaXR5OmhpZGRlbiBhZnRlciB0aGUgc2VsZWN0aW9uIGlzIGNyZWF0ZWQgYW5kIGJlZm9yZSB0
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0
aW9uKHBvc2l0aW9uLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBhdXRvIHggPSB2aXNp
YmxlUG9zaXRpb24uaXNOb3ROdWxsKCkgPyB2aXNpYmxlUG9zaXRpb24ubGluZURpcmVjdGlvblBv
aW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKCkgOiAwOworICAgIG1feFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uID0geyB4IH07CiAgICAgcmV0dXJuIHg7CiB9CiAKQEAgLTE2MjYs
OSArMTYyMiw5IEBAIHZvaWQgQ2FyZXRCYXNlOjpjbGVhckNhcmV0UmVjdCgpCiAgICAgbV9jYXJl
dExvY2FsUmVjdCA9IExheW91dFJlY3QoKTsKIH0KIAotYm9vbCBDYXJldEJhc2U6OnVwZGF0ZUNh
cmV0UmVjdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgY2FyZXRQ
b3NpdGlvbikKK2Jvb2wgQ2FyZXRCYXNlOjp1cGRhdGVDYXJldFJlY3QoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGNhcmV0UG9zaXRpb24pCiB7Ci0gICAgZG9jdW1l
bnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIGRvY3VtZW50
LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIG1fY2FyZXRSZWN0
TmVlZHNVcGRhdGUgPSBmYWxzZTsKICAgICBSZW5kZXJCbG9jayogcmVuZGVyZXI7CiAgICAgbV9j
YXJldExvY2FsUmVjdCA9IGxvY2FsQ2FyZXRSZWN0SW5SZW5kZXJlckZvckNhcmV0UGFpbnRpbmco
Y2FyZXRQb3NpdGlvbiwgcmVuZGVyZXIpOwpAQCAtMTY4Nyw3ICsxNjgzLDcgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KCkKICAgICAgICAgICAgIGNsZWFyQ2FyZXRS
ZWN0KCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVTdGFydCA9IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgICAgICAgICAgaWYgKHVw
ZGF0ZUNhcmV0UmVjdChtX2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CisgICAgICAgICAgICBp
ZiAodXBkYXRlQ2FyZXRSZWN0KCptX2RvY3VtZW50LCB2aXNpYmxlU3RhcnQpKSB7CiAgICAgICAg
ICAgICAgICAgY2FyZXROb2RlID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKTsKICAgICAgICAgICAgICAgICBtX2Fic0NhcmV0Qm91bmRzRGlydHkgPSB0cnVl
OwogICAgICAgICAgICAgfQpAQCAtMjEyNiw3ICsyMTIyLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0b3Ag
dGhlIGJsaW5rIHRpbWVyIHNvIHdlIGNhbiByZXN0YXJ0IHdpdGggYQogICAgIC8vIGJsYWNrIGNh
cmV0IGluIHRoZSBuZXcgbG9jYXRpb24uCi0gICAgaWYgKGNhcmV0UmVjdENoYW5nZWRPckNsZWFy
ZWQgfHwgIXNob3VsZEJsaW5rIHx8IHNob3VsZFN0b3BCbGlua2luZ0R1ZVRvVHlwaW5nQ29tbWFu
ZChtX2RvY3VtZW50KSkKKyAgICBpZiAoY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCB8fCAhc2hv
dWxkQmxpbmsgfHwgc2hvdWxkU3RvcEJsaW5raW5nRHVlVG9UeXBpbmdDb21tYW5kKG1fZG9jdW1l
bnQuZ2V0KCkpKQogICAgICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7CiAKICAgICAvLyBT
dGFydCBibGlua2luZyB3aXRoIGEgYmxhY2sgY2FyZXQuIEJlIHN1cmUgbm90IHRvIHJlc3RhcnQg
aWYgd2UncmUKQEAgLTI3NzYsMjEgKzI3NzIsNzggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
Q2FyZXRDb2xvcihjb25zdCBDb2xvciYgY2FyZXRDb2xvcikKICAgICAgICAgICAgIGludmFsaWRh
dGVDYXJldFJlY3QoKTsKICAgICB9CiB9CisKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZ
KQogCitzdGF0aWMgYm9vbCBjb250YWluc0VuZHBvaW50cyhjb25zdCBXZWFrUHRyPERvY3VtZW50
PiYgZG9jdW1lbnQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCit7CisgICAg
cmV0dXJuIGRvY3VtZW50ICYmIHJhbmdlICYmIGRvY3VtZW50LT5jb250YWlucyhyYW5nZS0+c3Rh
cnQuY29udGFpbmVyKSAmJiBkb2N1bWVudC0+Y29udGFpbnMocmFuZ2UtPmVuZC5jb250YWluZXIp
OworfQorCitzdGF0aWMgYm9vbCBjb250YWluc0VuZHBvaW50cyhjb25zdCBXZWFrUHRyPERvY3Vt
ZW50PiYgZG9jdW1lbnQsIGNvbnN0IFJhbmdlJiBsaXZlUmFuZ2UpCit7CisgICAgLy8gT25seSBu
ZWVkIHRvIGNoZWNrIHRoZSBzdGFydCBjb250YWluZXIgYmVjYXVzZSBsaXZlIHJhbmdlcyBlbmZv
cmNlIHRoZSBpbnZhcmlhbnQgdGhhdCBzdGFydCBhbmQgZW5kIGhhdmUgYSBjb21tb24gYW5jZXN0
b3IuCisgICAgcmV0dXJuIGRvY3VtZW50ICYmIGRvY3VtZW50LT5jb250YWlucyhsaXZlUmFuZ2Uu
c3RhcnRDb250YWluZXIoKSk7Cit9CisKK1JlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OmFz
c29jaWF0ZWRMaXZlUmFuZ2UoKQoreworICAgIGlmICghbV9hc3NvY2lhdGVkTGl2ZVJhbmdlKSB7
CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RSYW5nZSgpOyBjb250
YWluc0VuZHBvaW50cyhtX2RvY3VtZW50LCByYW5nZSkpIHsKKyAgICAgICAgICAgIG1fYXNzb2Np
YXRlZExpdmVSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpOworICAgICAgICAgICAgbV9h
c3NvY2lhdGVkTGl2ZVJhbmdlLT5kaWRBc3NvY2lhdGVXaXRoU2VsZWN0aW9uKCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIG1fYXNzb2NpYXRlZExpdmVSYW5nZTsKK30KKwordm9pZCBG
cmFtZVNlbGVjdGlvbjo6ZGlzYXNzb2NpYXRlTGl2ZVJhbmdlKCkKK3sKKyAgICBpZiAoYXV0byBw
cmV2aW91c2x5QXNzb2NpYXRlZExpdmVSYW5nZSA9IHN0ZDo6ZXhjaGFuZ2UobV9hc3NvY2lhdGVk
TGl2ZVJhbmdlLCBudWxscHRyKSkKKyAgICAgICAgcHJldmlvdXNseUFzc29jaWF0ZWRMaXZlUmFu
Z2UtPmRpZERpc2Fzc29jaWF0ZUZyb21TZWxlY3Rpb24oKTsKKyAgICAvLyBGSVhNRTogTmVlZCBh
ZGRpdGlvbmFsIGNvZGUgdG8ga2VlcCB0aGUgbGl2ZSByYW5nZSBvYmplY3QncyB3cmFwcGVyIGFs
aXZlIHRvIHByZXNlcnZlIGFueSBKYXZhU2NyaXB0IHByb3BlcnRpZXMgb24gaXQuCit9CisKK3Zv
aWQgRnJhbWVTZWxlY3Rpb246OmFzc29jaWF0ZUxpdmVSYW5nZShSYW5nZSYgbGl2ZVJhbmdlKQor
eworICAgIGRpc2Fzc29jaWF0ZUxpdmVSYW5nZSgpOworICAgIG1fYXNzb2NpYXRlZExpdmVSYW5n
ZSA9ICZsaXZlUmFuZ2U7CisgICAgbGl2ZVJhbmdlLmRpZEFzc29jaWF0ZVdpdGhTZWxlY3Rpb24o
KTsKKyAgICB1cGRhdGVGcm9tQXNzb2NpYXRlZExpdmVSYW5nZSgpOworfQorCit2b2lkIEZyYW1l
U2VsZWN0aW9uOjp1cGRhdGVGcm9tQXNzb2NpYXRlZExpdmVSYW5nZSgpCit7CisgICAgQVNTRVJU
KG1fYXNzb2NpYXRlZExpdmVSYW5nZSk7CisgICAgaWYgKCFjb250YWluc0VuZHBvaW50cyhtX2Rv
Y3VtZW50LCAqbV9hc3NvY2lhdGVkTGl2ZVJhbmdlKSkKKyAgICAgICAgZGlzYXNzb2NpYXRlTGl2
ZVJhbmdlKCk7CisgICAgZWxzZQorICAgICAgICBzZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdl
KCptX2Fzc29jaWF0ZWRMaXZlUmFuZ2UpKTsKKyAgICAvLyBGSVhNRTogTm9ybWFsaXphdGlvbiBk
b25lIGJ5IHNldFNlbGVjdGlvbiB3aWxsIGJlIHZpc2libGUgbmV4dCB0aW1lIHVwZGF0ZUFzc29j
aWF0ZWRMaXZlUmFuZ2UgaXMgY2FsbGVkLiBJbnN0ZWFkIHRoZSBTZWxlY3Rpb24gQVBJIHNwZWNp
ZmljYXRpb24gY2FsbHMgZm9yIGFsbG93aW5nIG5vbi1ub3JtYWxpemVkIHNlbGVjdGlvbiByYW5n
ZXMuCit9CisKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFzc29jaWF0ZWRMaXZlUmFuZ2Uo
KQoreworICAgIGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCk7CisgICAgaWYg
KCFjb250YWluc0VuZHBvaW50cyhtX2RvY3VtZW50LCByYW5nZSkpCisgICAgICAgIGRpc2Fzc29j
aWF0ZUxpdmVSYW5nZSgpOworICAgIGVsc2UgaWYgKG1fYXNzb2NpYXRlZExpdmVSYW5nZSkKKyAg
ICAgICAgbV9hc3NvY2lhdGVkTGl2ZVJhbmdlLT51cGRhdGVGcm9tU2VsZWN0aW9uKCpyYW5nZSk7
Cit9CisKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIAotdm9pZCBzaG93VHJlZShj
b25zdCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYgc2VsKQordm9pZCBzaG93VHJlZShjb25zdCBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewotICAgIHNlbC5zaG93VHJlZUZv
clRoaXMoKTsKKyAgICBzZWxlY3Rpb24uc2hvd1RyZWVGb3JUaGlzKCk7CiB9CiAKLXZvaWQgc2hv
d1RyZWUoY29uc3QgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIHNlbCkKK3ZvaWQgc2hvd1RyZWUo
Y29uc3QgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIHNlbGVjdGlvbikKIHsKLSAgICBpZiAoc2Vs
KQotICAgICAgICBzZWwtPnNob3dUcmVlRm9yVGhpcygpOworICAgIGlmIChzZWxlY3Rpb24pCisg
ICAgICAgIHNlbGVjdGlvbi0+c2hvd1RyZWVGb3JUaGlzKCk7CiB9CiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IDg4ZmRmZTZkMGI2NTRhZjU3MThm
NjFiZjQxMmFmMmU3OTM5NTMzYmMuLjNlMzJjZTEzODI3YTE1YTliNzUzZTZiNDVlNTEwMDA5OWJj
OGEyYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJBWFRleHRTdGF0ZUNoYW5nZUludGVudC5oIgorI2luY2x1ZGUgIkNvbG9yLmgi
CiAjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKQEAgLTM1LDEwICszNiw2IEBACiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVj
dGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSNpbmNsdWRlICJDb2xvci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ2hhcmFjdGVyRGF0YTsKQEAgLTUxLDEyICs0OCw4IEBAIGNsYXNzIFJlbmRl
ck9iamVjdDsKIGNsYXNzIFJlbmRlclZpZXc7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKLWVu
dW0gRVVzZXJUcmlnZ2VyZWQgeyBOb3RVc2VyVHJpZ2dlcmVkID0gMCwgVXNlclRyaWdnZXJlZCA9
IDEgfTsKLQotZW51bSBSZXZlYWxFeHRlbnRPcHRpb24gewotICAgIFJldmVhbEV4dGVudCwKLSAg
ICBEb05vdFJldmVhbEV4dGVudAotfTsKK2VudW0gRVVzZXJUcmlnZ2VyZWQgOiBib29sIHsgTm90
VXNlclRyaWdnZXJlZCwgVXNlclRyaWdnZXJlZCB9OworZW51bSBSZXZlYWxFeHRlbnRPcHRpb24g
OiBib29sIHsgUmV2ZWFsRXh0ZW50LCBEb05vdFJldmVhbEV4dGVudCB9OwogCiBjbGFzcyBDYXJl
dEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhcmV0QmFzZSk7CkBAIC02OSw3ICs2
Miw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgaW52YWxpZGF0ZUNhcmV0UmVjdChOb2RlKiwg
Ym9vbCBjYXJldFJlY3RDaGFuZ2VkID0gZmFsc2UpOwogICAgIHZvaWQgY2xlYXJDYXJldFJlY3Qo
KTsKLSAgICBib29sIHVwZGF0ZUNhcmV0UmVjdChEb2N1bWVudCosIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgY2FyZXRQb3NpdGlvbik7CisgICAgYm9vbCB1cGRhdGVDYXJldFJlY3QoRG9jdW1lbnQm
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGNhcmV0UG9zaXRpb24pOwogICAgIGJvb2wgc2hvdWxk
UmVwYWludENhcmV0KGNvbnN0IFJlbmRlclZpZXcqLCBib29sIGlzQ29udGVudEVkaXRhYmxlKSBj
b25zdDsKICAgICB2b2lkIHBhaW50Q2FyZXQoY29uc3QgTm9kZSYsIEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QpIGNvbnN0Owog
CkBAIC0xMTgsOCArMTExLDcgQEAgY2xhc3MgRnJhbWVTZWxlY3Rpb24gOiBwcml2YXRlIENhcmV0
QmFzZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBF
QWx0ZXJhdGlvbiB7IEFsdGVyYXRpb25Nb3ZlLCBBbHRlcmF0aW9uRXh0ZW5kIH07Ci0gICAgZW51
bSBDdXJzb3JBbGlnbk9uU2Nyb2xsIHsgQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsaWduQ3Vyc29yT25TY3JvbGxBbHdheXMgfTsK
KyAgICBlbnVtIEN1cnNvckFsaWduT25TY3JvbGwgeyBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVk
ZWQsIEFsaWduQ3Vyc29yT25TY3JvbGxBbHdheXMgfTsKICAgICBlbnVtIFNldFNlbGVjdGlvbk9w
dGlvbiB7CiAgICAgICAgIEZpcmVTZWxlY3RFdmVudCA9IDEgPDwgMCwKICAgICAgICAgQ2xvc2VU
eXBpbmcgPSAxIDw8IDEsCkBAIC0xMzEsMTMgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgUmV2
ZWFsU2VsZWN0aW9uID0gMSA8PCA3LAogICAgICAgICBSZXZlYWxTZWxlY3Rpb25VcFRvTWFpbkZy
YW1lID0gMSA8PCA4LAogICAgIH07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBPcHRpb25TZXQ8U2V0
U2VsZWN0aW9uT3B0aW9uPiBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhFVXNlclRyaWdnZXJl
ZCB1c2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCkKLSAgICB7Ci0gICAgICAgIE9wdGlv
blNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMgeyBDbG9zZVR5cGluZywgQ2xlYXJUeXBp
bmdTdHlsZSB9OwotICAgICAgICBpZiAodXNlclRyaWdnZXJlZCA9PSBVc2VyVHJpZ2dlcmVkKQot
ICAgICAgICAgICAgb3B0aW9ucy5hZGQoeyBSZXZlYWxTZWxlY3Rpb24sIEZpcmVTZWxlY3RFdmVu
dCwgSXNVc2VyVHJpZ2dlcmVkIH0pOwotICAgICAgICByZXR1cm4gb3B0aW9uczsKLSAgICB9Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBPcHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9uPiBkZWZhdWx0
U2V0U2VsZWN0aW9uT3B0aW9ucyhFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRG9jdW1lbnQqID0g
bnVsbHB0cik7CiAKQEAgLTE4MCwxMCArMTY2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEV4
dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmln
Z2VyZWQpOwogICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9uJiwgQWZmaW5pdHksIEVV
c2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAKLSAgICAvLyBSZXR1cm4gdGhlIHJl
bmRlcmVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoZSBjYXJldCAoaW4gdGhl
IHNlbGVjdGlvbiBzdGFydCBub2RlKQorICAgIC8vIFJldHVybiB0aGUgcmVuZGVyZXIgdGhhdCBp
cyByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0IChpbiB0aGUgc2VsZWN0aW9uIHN0
YXJ0IG5vZGUpLgogICAgIFJlbmRlckJsb2NrKiBjYXJldFJlbmRlcmVyV2l0aG91dFVwZGF0aW5n
TGF5b3V0KCkgY29uc3Q7CiAKLSAgICAvLyBCb3VuZHMgb2YgKHBvc3NpYmx5IHRyYW5zZm9ybWVk
KSBjYXJldCBpbiBhYnNvbHV0ZSBjb29yZHMKKyAgICAvLyBCb3VuZHMgb2YgcG9zc2libHktdHJh
bnNmb3JtZWQgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMuCiAgICAgV0VCQ09SRV9FWFBP
UlQgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkID0gbnVsbHB0
cik7CiAgICAgdm9pZCBzZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpIHsgQ2FyZXRCYXNlOjpzZXRD
YXJldFJlY3ROZWVkc1VwZGF0ZSgpOyB9CiAKQEAgLTIwNywxMyArMTkzLDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQoYm9vbCBzdXNwZW5kZWQpIHsgbV9p
c0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQgPSBzdXNwZW5kZWQ7IH0KICAgICBib29sIGlzQ2FyZXRC
bGlua2luZ1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDYXJldEJsaW5raW5nU3VzcGVu
ZGVkOyB9CiAKLSAgICAvLyBGb2N1cwogICAgIHZvaWQgc2V0Rm9jdXNlZChib29sKTsKICAgICBi
b29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZDsgfQogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaXNGb2N1c2VkQW5kQWN0aXZlKCkgY29uc3Q7CiAgICAgdm9pZCBwYWdlQWN0
aXZhdGlvbkNoYW5nZWQoKTsKIAotICAgIC8vIFBhaW50aW5nLgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdXBkYXRlQXBwZWFyYW5jZSgpOwogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpA
QCAtMjM5LDExICsyMjMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1VwZGF0ZUFwcGVhcmFuY2VF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV91cGRhdGVBcHBlYXJhbmNlRW5hYmxlZDsgfQogICAg
IHZvaWQgc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fdXBkYXRl
QXBwZWFyYW5jZUVuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgdm9pZCBzdXBwcmVzc1Njcm9sbGlu
ZygpIHsgKyttX3Njcm9sbGluZ1N1cHByZXNzQ291bnQ7IH0KLSAgICB2b2lkIHJlc3RvcmVTY3Jv
bGxpbmcoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCk7
Ci0gICAgICAgIC0tbV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50OwotICAgIH0KKyAgICB2b2lkIHJl
c3RvcmVTY3JvbGxpbmcoKTsKICNlbmRpZgogCiAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwpAQCAtMjcxLDkgKzI1MSwxMiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzaG91bGRTaG93QmxvY2tDdXJzb3IoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZFNob3dCbG9ja0N1cnNvcjsgfQogICAgIHZvaWQgc2V0U2hvdWxkU2hvd0Jsb2NrQ3Vy
c29yKGJvb2wpOwogCi1wcml2YXRlOgotICAgIGVudW0gRVBvc2l0aW9uVHlwZSB7IFNUQVJULCBF
TkQsIEJBU0UsIEVYVEVOVCB9OworICAgIFJlZlB0cjxSYW5nZT4gYXNzb2NpYXRlZExpdmVSYW5n
ZSgpOworICAgIHZvaWQgYXNzb2NpYXRlTGl2ZVJhbmdlKFJhbmdlJik7CisgICAgdm9pZCBkaXNh
c3NvY2lhdGVMaXZlUmFuZ2UoKTsKKyAgICB2b2lkIHVwZGF0ZUZyb21Bc3NvY2lhdGVkTGl2ZVJh
bmdlKCk7CiAKK3ByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29u
c3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmKTsKICAgICB2b2lkIHVwZGF0ZURhdGFEZXRlY3Rv
cnNGb3JTZWxlY3Rpb24oKTsKIApAQCAtMjk3LDE0ICsyODAsMTEgQEAgcHJpdmF0ZToKICAgICBW
aXNpYmxlUG9zaXRpb24gbW9kaWZ5TW92aW5nTGVmdChUZXh0R3JhbnVsYXJpdHksIGJvb2wqIHJl
YWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpOwogICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlNb3Zp
bmdCYWNrd2FyZChUZXh0R3JhbnVsYXJpdHksIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxw
dHIpOwogCi0gICAgTGF5b3V0VW5pdCBsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlv
bk5hdmlnYXRpb24oRVBvc2l0aW9uVHlwZSk7CisgICAgZW51bSBQb3NpdGlvblR5cGUgOiB1aW50
OF90IHsgU3RhcnQsIEVuZCwgRXh0ZW50IH07CisgICAgTGF5b3V0VW5pdCBsaW5lRGlyZWN0aW9u
UG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oUG9zaXRpb25UeXBlKTsKIAogICAgIEFY
VGV4dFN0YXRlQ2hhbmdlSW50ZW50IHRleHRTZWxlY3Rpb25JbnRlbnQoRUFsdGVyYXRpb24sIFNl
bGVjdGlvbkRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5KTsKLSNpZiBFTkFCTEUoQUNDRVNTSUJJ
TElUWSkKICAgICB2b2lkIG5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2UoY29u
c3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmKTsKLSNlbHNlCi0gICAgdm9pZCBub3RpZnlBY2Nl
c3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50
JikgeyB9Ci0jZW5kaWYKIAogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uQ2FjaGVzSWZTZWxlY3Rp
b25Jc0luc2lkZVRleHRGb3JtQ29udHJvbChFVXNlclRyaWdnZXJlZCk7CiAKQEAgLTMyOCwxMyAr
MzA4LDE0IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlBbHRl
cmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0OwogI2Vu
ZGlmCiAKLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLQotICAgIExheW91dFVuaXQgbV94UG9z
Rm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CisgICAgdm9pZCB1cGRhdGVBc3NvY2lhdGVkTGl2
ZVJhbmdlKCk7CiAKKyAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworICAgIFJlZlB0
cjxSYW5nZT4gbV9hc3NvY2lhdGVkTGl2ZVJhbmdlOworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+
IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwogICAgIFZpc2libGVTZWxlY3Rpb24g
bV9zZWxlY3Rpb247Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG1fb3JpZ2luYWxCYXNlOyAvLyBVc2Vk
IHRvIHN0b3JlIGJhc2UgYmVmb3JlIHRoZSBhZGp1c3RtZW50IGF0IGJpZGkgYm91bmRhcnkKLSAg
ICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbV9v
cmlnaW5hbEJhc2U7IC8vIFVzZWQgdG8gc3RvcmUgYmFzZSBiZWZvcmUgdGhlIGFkanVzdG1lbnQg
YXQgYmlkaSBib3VuZGFyeS4KKyAgICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eSB7IFRl
eHRHcmFudWxhcml0eTo6Q2hhcmFjdGVyR3JhbnVsYXJpdHkgfTsKIAogICAgIFJlZlB0cjxOb2Rl
PiBtX3ByZXZpb3VzQ2FyZXROb2RlOyAvLyBUaGUgbGFzdCBub2RlIHdoaWNoIHBhaW50ZWQgdGhl
IGNhcmV0LiBSZXRhaW5lZCBmb3IgY2xlYXJpbmcgdGhlIG9sZCBjYXJldCB3aGVuIGl0IG1vdmVz
LgogCkBAIC0zNjcsNiArMzQ4LDE0IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKK2NvbnN0ZXhw
ciBhdXRvIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhFVXNlclRy
aWdnZXJlZCB1c2VyVHJpZ2dlcmVkKSAtPiBPcHRpb25TZXQ8U2V0U2VsZWN0aW9uT3B0aW9uPgor
eworICAgIE9wdGlvblNldDxTZXRTZWxlY3Rpb25PcHRpb24+IG9wdGlvbnMgeyBDbG9zZVR5cGlu
ZywgQ2xlYXJUeXBpbmdTdHlsZSB9OworICAgIGlmICh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmln
Z2VyZWQpCisgICAgICAgIG9wdGlvbnMuYWRkKHsgUmV2ZWFsU2VsZWN0aW9uLCBGaXJlU2VsZWN0
RXZlbnQsIElzVXNlclRyaWdnZXJlZCB9KTsKKyAgICByZXR1cm4gb3B0aW9uczsKK30KKwogaW5s
aW5lIEVkaXRpbmdTdHlsZSogRnJhbWVTZWxlY3Rpb246OnR5cGluZ1N0eWxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV90eXBpbmdTdHlsZS5nZXQoKTsKQEAgLTM3NywxOCArMzY2LDMwIEBAIGlu
bGluZSB2b2lkIEZyYW1lU2VsZWN0aW9uOjpjbGVhclR5cGluZ1N0eWxlKCkKICAgICBtX3R5cGlu
Z1N0eWxlID0gbnVsbHB0cjsKIH0KIAotI2lmICEoUExBVEZPUk0oQ09DT0EpIHx8IFVTRShBVEsp
KQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKQorI2lmICEoRU5BQkxFKEFDQ0VTU0lCSUxJVFkp
ICYmIChQTEFURk9STShDT0NPQSkgfHwgVVNFKEFUSykpKQorCiBpbmxpbmUgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZShjb25zdCBBWFRl
eHRTdGF0ZUNoYW5nZUludGVudCYpCiB7CiB9CisKICNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKworaW5saW5lIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3RvcmVTY3JvbGxpbmco
KQoreworICAgIEFTU0VSVChtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQpOworICAgIC0tbV9zY3Jv
bGxpbmdTdXBwcmVzc0NvdW50OworfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQorCiAvLyBPdXRzaWRlIHRoZSBXZWJDb3Jl
IG5hbWVzcGFjZSBmb3IgZWFzZSBvZiBpbnZvY2F0aW9uIGZyb20gdGhlIGRlYnVnZ2VyLgogdm9p
ZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYpOwogdm9pZCBzaG93VHJl
ZShjb25zdCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiopOworCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCAxNzJhNTFmMTcyYzI1M2JkOGU2ODFkYTNhYjY3MzNk
MTFiNThhZWNlLi4yOTk3MDJlNzJhM2ZhOGZjODY2NWJmNzZhMGU3YjNiNjkzMWJlOGE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM1LDE5ICszNSwxOCBAQAogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJSYW5nZS5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIE5vZGUqIHNlbGVjdGlvblNoYWRvd0FuY2VzdG9yKEZy
YW1lJiBmcmFtZSkKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3Io
RnJhbWUmIGZyYW1lKQogeworICAgIEFTU0VSVCghZnJhbWUuc2V0dGluZ3MoKS5saXZlUmFuZ2VT
ZWxlY3Rpb25FbmFibGVkKCkpOwogICAgIGF1dG8qIG5vZGUgPSBmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5iYXNlKCkuYW5jaG9yTm9kZSgpOwotICAgIGlmICghbm9kZSkKKyAgICBpZiAo
IW5vZGUgfHwgIW5vZGUtPmlzSW5TaGFkb3dUcmVlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGlmICghbm9kZS0+aXNJblNoYWRvd1RyZWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgLy8gRklYTUU6IFVuY2xlYXIgb24gd2h5IHRoaXMgbmVlZHMgdG8gYmUgdGhlIHBv
c3NpYmx5IG51bGwgZnJhbWUuZG9jdW1lbnQoKSBpbnN0ZWFkIG9mIHRoZSBuZXZlciBudWxsIG5v
ZGUtPmRvY3VtZW50KCkuCi0gICAgcmV0dXJuIGZyYW1lLmRvY3VtZW50KCktPmFuY2VzdG9yTm9k
ZUluVGhpc1Njb3BlKG5vZGUpOworICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpLmFuY2VzdG9y
Tm9kZUluVGhpc1Njb3BlKG5vZGUpOwogfQogCiBET01TZWxlY3Rpb246OkRPTVNlbGVjdGlvbihE
T01XaW5kb3cmIHdpbmRvdykKQEAgLTU1LDEwMSArNTQsMTEzIEBAIERPTVNlbGVjdGlvbjo6RE9N
U2VsZWN0aW9uKERPTVdpbmRvdyYgd2luZG93KQogewogfQogCi1jb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBET01TZWxlY3Rpb246OnZpc2libGVTZWxlY3Rpb24oKSBjb25zdAorUmVmPERPTVNlbGVj
dGlvbj4gRE9NU2VsZWN0aW9uOjpjcmVhdGUoRE9NV2luZG93JiB3aW5kb3cpCiB7Ci0gICAgQVNT
RVJUKGZyYW1lKCkpOwotICAgIHJldHVybiBmcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01TZWxlY3Rpb24od2luZG93KSk7CiB9CiAK
LXN0YXRpYyBQb3NpdGlvbiBhbmNob3JQb3NpdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCitSZWZQdHI8RnJhbWU+IERPTVNlbGVjdGlvbjo6ZnJhbWUoKSBjb25zdAogewot
ICAgIGF1dG8gYW5jaG9yID0gc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBzZWxlY3Rpb24uc3Rh
cnQoKSA6IHNlbGVjdGlvbi5lbmQoKTsKLSAgICByZXR1cm4gYW5jaG9yLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOworICAgIHJldHVybiBET01XaW5kb3dQcm9wZXJ0eTo6ZnJhbWUoKTsKIH0K
IAotc3RhdGljIFBvc2l0aW9uIGZvY3VzUG9zaXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IERPTVNlbGVjdGlvbjo6cmFuZ2UoKSBj
b25zdAogewotICAgIGF1dG8gZm9jdXMgPSBzZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IHNlbGVj
dGlvbi5lbmQoKSA6IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIHJldHVybiBmb2N1cy5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKTsKKyAgICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gcmFu
Z2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGlm
ICghcmFuZ2UgfHwgcmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+aXNJblNoYWRvd1RyZWUoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmFuZ2U7CiB9CiAKLXN0YXRp
YyBQb3NpdGlvbiBiYXNlUG9zaXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQorUG9zaXRpb24gRE9NU2VsZWN0aW9uOjphbmNob3JQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHNlbGVjdGlvbi5iYXNlKCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CisgICAg
YXV0byBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgcmV0dXJuIChzZWxlY3Rpb24uaXNCYXNlRmlyc3QoKSA/IHNlbGVjdGlvbi5z
dGFydCgpIDogc2VsZWN0aW9uLmVuZCgpKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKIH0K
IAotc3RhdGljIFBvc2l0aW9uIGV4dGVudFBvc2l0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbikKK1Bvc2l0aW9uIERPTVNlbGVjdGlvbjo6Zm9jdXNQb3NpdGlvbigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbi5leHRlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKTsKKyAgICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gKHNlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8g
c2VsZWN0aW9uLmVuZCgpIDogc2VsZWN0aW9uLnN0YXJ0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpOwogfQogCi1Ob2RlKiBET01TZWxlY3Rpb246OmFuY2hvck5vZGUoKSBjb25zdAorUG9z
aXRpb24gRE9NU2VsZWN0aW9uOjpiYXNlUG9zaXRpb24oKSBjb25zdAogewotICAgIGlmICghZnJh
bWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHNoYWRvd0FkanVzdGVk
Tm9kZShhbmNob3JQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpKTsKKyAgICBhdXRvIGZyYW1l
ID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYmFzZSgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpOworfQorCitQb3NpdGlvbiBET01TZWxlY3Rpb246OmV4dGVudFBv
c2l0aW9uKCkgY29uc3QKK3sKKyAgICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZXh0ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Cit9
CisKK1JlZlB0cjxOb2RlPiBET01TZWxlY3Rpb246OmFuY2hvck5vZGUoKSBjb25zdAoreworICAg
IHJldHVybiBzaGFkb3dBZGp1c3RlZE5vZGUoYW5jaG9yUG9zaXRpb24oKSk7CiB9CiAKIHVuc2ln
bmVkIERPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0KCkgY29uc3QKIHsKLSAgICBpZiAoIWZyYW1l
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzaGFkb3dBZGp1c3RlZE9mZnNldChh
bmNob3JQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpKTsKKyAgICByZXR1cm4gc2hhZG93QWRq
dXN0ZWRPZmZzZXQoYW5jaG9yUG9zaXRpb24oKSk7CiB9CiAKLU5vZGUqIERPTVNlbGVjdGlvbjo6
Zm9jdXNOb2RlKCkgY29uc3QKK1JlZlB0cjxOb2RlPiBET01TZWxlY3Rpb246OmZvY3VzTm9kZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gc2hhZG93QWRqdXN0ZWROb2RlKGZvY3VzUG9zaXRpb24odmlzaWJsZVNlbGVjdGlv
bigpKSk7CisgICAgcmV0dXJuIHNoYWRvd0FkanVzdGVkTm9kZShmb2N1c1Bvc2l0aW9uKCkpOwog
fQogCiB1bnNpZ25lZCBET01TZWxlY3Rpb246OmZvY3VzT2Zmc2V0KCkgY29uc3QKIHsKLSAgICBp
ZiAoIWZyYW1lKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzaGFkb3dBZGp1c3Rl
ZE9mZnNldChmb2N1c1Bvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkpOworICAgIHJldHVybiBz
aGFkb3dBZGp1c3RlZE9mZnNldChmb2N1c1Bvc2l0aW9uKCkpOwogfQogCi1Ob2RlKiBET01TZWxl
Y3Rpb246OmJhc2VOb2RlKCkgY29uc3QKK1JlZlB0cjxOb2RlPiBET01TZWxlY3Rpb246OmJhc2VO
b2RlKCkgY29uc3QKIHsKLSAgICBpZiAoIWZyYW1lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBzaGFkb3dBZGp1c3RlZE5vZGUoYmFzZVBvc2l0aW9uKHZpc2libGVTZWxl
Y3Rpb24oKSkpOworICAgIHJldHVybiBzaGFkb3dBZGp1c3RlZE5vZGUoYmFzZVBvc2l0aW9uKCkp
OwogfQogCiB1bnNpZ25lZCBET01TZWxlY3Rpb246OmJhc2VPZmZzZXQoKSBjb25zdAogewotICAg
IGlmICghZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHNoYWRvd0FkanVz
dGVkT2Zmc2V0KGJhc2VQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpKTsKKyAgICByZXR1cm4g
c2hhZG93QWRqdXN0ZWRPZmZzZXQoYmFzZVBvc2l0aW9uKCkpOwogfQogCi1Ob2RlKiBET01TZWxl
Y3Rpb246OmV4dGVudE5vZGUoKSBjb25zdAorUmVmUHRyPE5vZGU+IERPTVNlbGVjdGlvbjo6ZXh0
ZW50Tm9kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gc2hhZG93QWRqdXN0ZWROb2RlKGV4dGVudFBvc2l0aW9uKHZpc2li
bGVTZWxlY3Rpb24oKSkpOworICAgIHJldHVybiBzaGFkb3dBZGp1c3RlZE5vZGUoZXh0ZW50UG9z
aXRpb24oKSk7CiB9CiAKIHVuc2lnbmVkIERPTVNlbGVjdGlvbjo6ZXh0ZW50T2Zmc2V0KCkgY29u
c3QKIHsKLSAgICBpZiAoIWZyYW1lKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBz
aGFkb3dBZGp1c3RlZE9mZnNldChleHRlbnRQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpKTsK
KyAgICByZXR1cm4gc2hhZG93QWRqdXN0ZWRPZmZzZXQoZXh0ZW50UG9zaXRpb24oKSk7CiB9CiAK
IGJvb2wgRE9NU2VsZWN0aW9uOjppc0NvbGxhcHNlZCgpIGNvbnN0CiB7Ci0gICAgYXV0byogZnJh
bWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUgfHwgc2VsZWN0aW9uU2hhZG93QW5j
ZXN0b3IoKmZyYW1lKSkKKyAgICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gIWZyYW1lLT5zZWxlY3Rp
b24oKS5pc1JhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHRoaXMtPnJhbmdlKCk7CisgICAgcmV0
dXJuICFyYW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKCk7CiB9CiAKIFN0cmluZyBET01TZWxlY3Rp
b246OnR5cGUoKSBjb25zdAogewotICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAg
ICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gIk5vbmUiX3M7CiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
OwpAQCAtMTYyLDc5ICsxNzMsOTkgQEAgU3RyaW5nIERPTVNlbGVjdGlvbjo6dHlwZSgpIGNvbnN0
CiAKIHVuc2lnbmVkIERPTVNlbGVjdGlvbjo6cmFuZ2VDb3VudCgpIGNvbnN0CiB7Ci0gICAgYXV0
byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgp
OwogICAgIHJldHVybiAhZnJhbWUgfHwgZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpID8gMCA6
IDE7CiB9CiAKLXZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZShOb2RlKiBub2RlLCB1bnNpZ25l
ZCBvZmZzZXQpCitFeGNlcHRpb25Pcjx2b2lkPiBET01TZWxlY3Rpb246OmNvbGxhcHNlKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihu
b2RlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZSgq
ZnJhbWUoKSk7Ci0gICAgcHJvdGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpLm1vdmVUbyhjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgQWZmaW5pdHk6OkRvd25zdHJlYW0p
OworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiB7IH07CisgICAgaWYgKGZyYW1lLT5zZXR0aW5ncygpLmxpdmVSYW5nZVNlbGVj
dGlvbkVuYWJsZWQoKSkgeworICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgIHJlbW92
ZUFsbFJhbmdlcygpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9ICpmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFkb2N1
bWVudC5jb250YWlucygqbm9kZSkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBSYW5nZTo6Y2hlY2tOb2RlT2Zmc2V0UGFpcigqbm9kZSwgb2Zmc2V0
KTsgcmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRm9yUG9z
aXRpb24obm9kZSkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBhdXRvJiBz
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgc2VsZWN0aW9uLmRpc2Fzc29jaWF0
ZUxpdmVSYW5nZSgpOworICAgIHNlbGVjdGlvbi5tb3ZlVG8obWFrZUNvbnRhaW5lck9mZnNldFBv
c2l0aW9uKG5vZGUsIG9mZnNldCksIEFmZmluaXR5OjpEb3duc3RyZWFtKTsKKyAgICByZXR1cm4g
eyB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBET01TZWxlY3Rpb246OmNvbGxhcHNlVG9FbmQo
KQogewotICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBhdXRvIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4geyB9OwogICAg
IGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9u
LmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Ig
fTsKLQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CisgICAgc2VsZWN0aW9uLmRp
c2Fzc29jaWF0ZUxpdmVSYW5nZSgpOwogICAgIHNlbGVjdGlvbi5tb3ZlVG8oc2VsZWN0aW9uLnNl
bGVjdGlvbigpLmVuZCgpLCBBZmZpbml0eTo6RG93bnN0cmVhbSk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvU3RhcnQoKQog
ewotICAgIGF1dG8qIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBhdXRvIGZyYW1lID0gdGhp
cy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4geyB9OwogICAgIGF1
dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlz
Tm9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsK
LQotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CisgICAgc2VsZWN0aW9uLmRpc2Fz
c29jaWF0ZUxpdmVSYW5nZSgpOwogICAgIHNlbGVjdGlvbi5tb3ZlVG8oc2VsZWN0aW9uLnNlbGVj
dGlvbigpLnN0YXJ0KCksIEFmZmluaXR5OjpEb3duc3RyZWFtKTsKICAgICByZXR1cm4geyB9Owog
fQogCiB2b2lkIERPTVNlbGVjdGlvbjo6ZW1wdHkoKQogewotICAgIGF1dG8qIGZyYW1lID0gdGhp
cy0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUt
PnNlbGVjdGlvbigpLmNsZWFyKCk7CisgICAgcmVtb3ZlQWxsUmFuZ2VzKCk7CiB9CiAKLXZvaWQg
RE9NU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50KE5vZGUqIGJhc2VOb2RlLCB1bnNpZ25lZCBi
YXNlT2Zmc2V0LCBOb2RlKiBleHRlbnROb2RlLCB1bnNpZ25lZCBleHRlbnRPZmZzZXQpCitFeGNl
cHRpb25Pcjx2b2lkPiBET01TZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnQoTm9kZSogYmFzZU5v
ZGUsIHVuc2lnbmVkIGJhc2VPZmZzZXQsIE5vZGUqIGV4dGVudE5vZGUsIHVuc2lnbmVkIGV4dGVu
dE9mZnNldCkKIHsKLSAgICBpZiAoIWlzVmFsaWRGb3JQb3NpdGlvbihiYXNlTm9kZSkgfHwgIWlz
VmFsaWRGb3JQb3NpdGlvbihleHRlbnROb2RlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVm
PEZyYW1lPiBwcm90ZWN0ZWRGcmFtZSgqZnJhbWUoKSk7Ci0gICAgcHJvdGVjdGVkRnJhbWUtPnNl
bGVjdGlvbigpLm1vdmVUbyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYmFzZU5vZGUsIGJh
c2VPZmZzZXQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZXh0ZW50Tm9kZSwgZXh0ZW50
T2Zmc2V0KSwgQWZmaW5pdHk6OkRvd25zdHJlYW0pOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKGZy
YW1lLT5zZXR0aW5ncygpLmxpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGRvIHRoaXMgYnkgbWFraW5nIHRoZSBhcmd1bWVudHMgbm9uLW51
bGxhYmxlIGluIHRoZSBJREwgZmlsZSwgb25jZSBsaXZlUmFuZ2VTZWxlY3Rpb25FbmFibGVkIGlz
IGFsd2F5cyB0cnVlLgorICAgICAgICBpZiAoIWJhc2VOb2RlIHx8ICFleHRlbnROb2RlKQorICAg
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OworICAgICAgICBhdXRvJiBk
b2N1bWVudCA9ICpmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFkb2N1bWVudC5jb250
YWlucygqYmFzZU5vZGUpIHx8ICFkb2N1bWVudC5jb250YWlucygqZXh0ZW50Tm9kZSkpCisgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBSYW5nZTo6Y2hl
Y2tOb2RlT2Zmc2V0UGFpcigqYmFzZU5vZGUsIGJhc2VPZmZzZXQpOyByZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gUmFuZ2U6OmNoZWNrTm9kZU9mZnNldFBhaXIoKmV4dGVu
dE5vZGUsIGV4dGVudE9mZnNldCk7IHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGlmICghaXNWYWxpZEZvclBvc2l0aW9uKGJhc2VOb2RlKSB8fCAhaXNWYWxpZEZvclBvc2l0aW9u
KGV4dGVudE5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgYXV0byYg
c2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOworICAgIHNlbGVjdGlvbi5kaXNhc3NvY2lh
dGVMaXZlUmFuZ2UoKTsKKyAgICBzZWxlY3Rpb24ubW92ZVRvKG1ha2VDb250YWluZXJPZmZzZXRQ
b3NpdGlvbihiYXNlTm9kZSwgYmFzZU9mZnNldCksIG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlv
bihleHRlbnROb2RlLCBleHRlbnRPZmZzZXQpLCBBZmZpbml0eTo6RG93bnN0cmVhbSk7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKE5vZGUqIG5v
ZGUsIHVuc2lnbmVkIG9mZnNldCkKK0V4Y2VwdGlvbk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6c2V0
UG9zaXRpb24oTm9kZSogbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQogewotICAgIGlmICghaXNWYWxp
ZEZvclBvc2l0aW9uKG5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWY8RnJhbWU+IHBy
b3RlY3RlZEZyYW1lKCpmcmFtZSgpKTsKLSAgICBwcm90ZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCku
bW92ZVRvKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBBZmZpbml0
eTo6RG93bnN0cmVhbSk7CisgICAgcmV0dXJuIGNvbGxhcHNlKG5vZGUsIG9mZnNldCk7CiB9CiAK
IHZvaWQgRE9NU2VsZWN0aW9uOjptb2RpZnkoY29uc3QgU3RyaW5nJiBhbHRlclN0cmluZywgY29u
c3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIGNvbnN0IFN0cmluZyYgZ3JhbnVsYXJpdHlTdHJp
bmcpCiB7Ci0gICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIEZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhdGlvbiBhbHRl
cjsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYWx0ZXJTdHJpbmcsICJl
eHRlbmQiKSkKICAgICAgICAgYWx0ZXIgPSBGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVu
ZDsKQEAgLTI3NywyMCArMzA4LDI5IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjptb2RpZnkoY29uc3Qg
U3RyaW5nJiBhbHRlclN0cmluZywgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpCiAgICAgZWxz
ZQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJhbWUpOwot
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoYWx0ZXIsIGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHkpOworICAgIGlmIChhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKKyAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLm1vZGlmeShhbHRlciwgZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CiB9CiAK
IEV4Y2VwdGlvbk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6ZXh0ZW5kKE5vZGUmIG5vZGUsIHVuc2ln
bmVkIG9mZnNldCkKIHsKLSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cih0aGlzLT5mcmFtZSgp
KTsKKyAgICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm4geyB9OwotICAgIGlmIChvZmZzZXQgPiBub2RlLmxlbmd0aCgpKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKLSAgICBpZiAoIWlzVmFsaWRG
b3JQb3NpdGlvbigmbm9kZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgZnJhbWUtPnNlbGVj
dGlvbigpLnNldEV4dGVudChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUsIG9mZnNl
dCksIEFmZmluaXR5OjpEb3duc3RyZWFtKTsKKyAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkubGl2
ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50
KCktPmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgaWYg
KGF1dG8gcmVzdWx0ID0gUmFuZ2U6OmNoZWNrTm9kZU9mZnNldFBhaXIobm9kZSwgb2Zmc2V0KTsg
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG9mZnNldCA+IG5vZGUubGVu
Z3RoKCkpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsK
KyAgICAgICAgaWYgKCFpc1ZhbGlkRm9yUG9zaXRpb24oJm5vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
OworICAgIHNlbGVjdGlvbi5kaXNhc3NvY2lhdGVMaXZlUmFuZ2UoKTsKKyAgICBzZWxlY3Rpb24u
c2V0RXh0ZW50KG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbigmbm9kZSwgb2Zmc2V0KSwgQWZm
aW5pdHk6OkRvd25zdHJlYW0pOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTI5OCwxNSArMzM4
LDE3IEBAIEV4Y2VwdGlvbk9yPFJlZjxSYW5nZT4+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCh1
bnNpZ25lZCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gcmFuZ2VDb3VudCgpKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKLSAgICBhdXRvJiBmcmFtZSA9
ICp0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpLnJlbGVhc2VO
b25OdWxsKCk7CisgICAgaWYgKGZyYW1lLT5zZXR0aW5ncygpLmxpdmVSYW5nZVNlbGVjdGlvbkVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5hc3NvY2lhdGVkTGl2
ZVJhbmdlKCkucmVsZWFzZU5vbk51bGwoKTsKICAgICBpZiAoYXV0byBzaGFkb3dBbmNlc3RvciA9
IHNlbGVjdGlvblNoYWRvd0FuY2VzdG9yKGZyYW1lKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZUxp
dmVSYW5nZShtYWtlU2ltcGxlUmFuZ2UoKm1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZSgqc2hh
ZG93QW5jZXN0b3IpKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJh
bmdlKCpmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKTsKIH0KIAog
dm9pZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCiB7Ci0gICAgYXV0byogZnJhbWUg
PSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlm
ICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuY2xlYXIo
KTsKQEAgLTMxNCw1MSArMzU2LDYwIEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5n
ZXMoKQogCiB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIGxpdmVSYW5nZSkKIHsK
LSAgICBhdXRvIGZyYW1lID0gbWFrZVJlZlB0cih0aGlzLT5mcmFtZSgpKTsKKyAgICBhdXRvIGZy
YW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGxpdmVSYW5nZSk7CiAgICAgYXV0byYg
c2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOwotCisgICAgaWYgKGZyYW1lLT5zZXR0aW5n
cygpLmxpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQoKSkgeworICAgICAgICBpZiAoc2VsZWN0aW9u
LmlzTm9uZSgpKQorICAgICAgICAgICAgc2VsZWN0aW9uLmFzc29jaWF0ZUxpdmVSYW5nZShsaXZl
UmFuZ2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UobGl2ZVJhbmdlKTsKICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0
aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKICAgICAgICAgaWYgKCFzZWxl
Y3RlZFJhbmdlLT5zdGFydC5jb250YWluZXItPmNvbnRhaW5pbmdTaGFkb3dSb290KCkgJiYgaW50
ZXJzZWN0cygqc2VsZWN0ZWRSYW5nZSwgcmFuZ2UpKQogICAgICAgICAgICAgc2VsZWN0aW9uLnNl
dFNlbGVjdGlvbih1bmlvblJhbmdlKCpzZWxlY3RlZFJhbmdlLCByYW5nZSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotCiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihyYW5nZSk7CiB9CiAK
K0V4Y2VwdGlvbk9yPHZvaWQ+IERPTVNlbGVjdGlvbjo6cmVtb3ZlUmFuZ2UoUmFuZ2UmIGxpdmVS
YW5nZSkKK3sKKyAgICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4geyB9OworICAgIEFTU0VSVChmcmFtZS0+c2V0dGluZ3MoKS5saXZl
UmFuZ2VTZWxlY3Rpb25FbmFibGVkKCkpOworICAgIGlmICgmbGl2ZVJhbmdlICE9IGZyYW1lLT5z
ZWxlY3Rpb24oKS5hc3NvY2lhdGVkTGl2ZVJhbmdlKCkpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBOb3RGb3VuZEVycm9yIH07CisgICAgcmVtb3ZlQWxsUmFuZ2VzKCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKwogdm9pZCBET01TZWxlY3Rpb246OmRlbGV0ZUZyb21Eb2N1bWVudCgpCiB7Ci0g
ICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIodGhpcy0+ZnJhbWUoKSk7CisgICAgYXV0byBmcmFt
ZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwotCisg
ICAgaWYgKGZyYW1lLT5zZXR0aW5ncygpLmxpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQoKSkgewor
ICAgICAgICBpZiAoYXV0byByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5hc3NvY2lhdGVkTGl2
ZVJhbmdlKCkpCisgICAgICAgICAgICByYW5nZS0+ZGVsZXRlQ29udGVudHMoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFu
Z2UgfHwgc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLT5jb250YWluaW5nU2hhZG93Um9v
dCgpKQogICAgICAgICByZXR1cm47Ci0KICAgICBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFu
Z2UpLT5kZWxldGVDb250ZW50cygpOwogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKG1ha2VTaW1wbGVSYW5nZShzZWxlY3RlZFJhbmdlLT5zdGFydCksIEFmZmluaXR5OjpE
b3duc3RyZWFtLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Ok5vKTsKIH0KIAog
Ym9vbCBET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZShOb2RlJiBub2RlLCBib29sIGFsbG93UGFy
dGlhbCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBiZWhhdmlvciBkb2VzIG5vdCBtYXRj
aCB3aGF0IHRoZSBzZWxlY3Rpb24gQVBJIHN0YW5kYXJkIHNwZWNpZmllcy4KLSAgICBpZiAobm9k
ZS5pc1RleHROb2RlKCkpCisgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcsIGFuZCB3YXMgYWRk
ZWQgdG8gd29yayBhcm91bmQgYW5vbWFsaWVzIGNhdXNlZCB3aGVuIHdlIGNhbm9uaWNhbGl6ZSBz
ZWxlY3Rpb24gZW5kcG9pbnRzLiBXZSBzaG91bGQgZml4IHRoYXQgYW5kIHJlbW92ZSB0aGlzLgor
ICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSAmJiAhbm9kZS5kb2N1bWVudCgpLnNldHRpbmdzKCku
bGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgpKQogICAgICAgICBhbGxvd1BhcnRpYWwgPSB0cnVl
OwotCi0gICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJh
bmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmluZ1NoYWRvd1Jv
b3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFsbG93UGFydGlhbCA/
IGludGVyc2VjdHMoKnNlbGVjdGVkUmFuZ2UsIG5vZGUpIDogY29udGFpbnMoKnNlbGVjdGVkUmFu
Z2UsIG5vZGUpOworICAgIGF1dG8gcmFuZ2UgPSB0aGlzLT5yYW5nZSgpOworICAgIHJldHVybiBy
YW5nZSAmJiAoYWxsb3dQYXJ0aWFsID8gaW50ZXJzZWN0cygqcmFuZ2UsIG5vZGUpIDogY29udGFp
bnMoKnJhbmdlLCBub2RlKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpzZWxlY3RBbGxDaGls
ZHJlbihOb2RlJiBub2RlKQpAQCAtMzY3LDIwICs0MTgsMjkgQEAgdm9pZCBET01TZWxlY3Rpb246
OnNlbGVjdEFsbENoaWxkcmVuKE5vZGUmIG5vZGUpCiAgICAgc2V0QmFzZUFuZEV4dGVudCgmbm9k
ZSwgMCwgJm5vZGUsIG5vZGUuY291bnRDaGlsZE5vZGVzKCkpOwogfQogCi1TdHJpbmcgRE9NU2Vs
ZWN0aW9uOjp0b1N0cmluZygpCitTdHJpbmcgRE9NU2VsZWN0aW9uOjp0b1N0cmluZygpIGNvbnN0
CiB7Ci0gICAgYXV0byogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICBhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgaWYgKGZyYW1lLT5zZXR0aW5ncygpLmxpdmVSYW5nZVNlbGVjdGlv
bkVuYWJsZWQoKSkgeworICAgICAgICBhdXRvIHJhbmdlID0gdGhpcy0+cmFuZ2UoKTsKKyAgICAg
ICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOworICAg
IH0KKyAgICBhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0
UmFuZ2UoKTsKICAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHQoKnJhbmdlKSA6IGVtcHR5U3Ry
aW5nKCk7CiB9CiAKLU5vZGUqIERPTVNlbGVjdGlvbjo6c2hhZG93QWRqdXN0ZWROb2RlKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKK1JlZlB0cjxOb2RlPiBET01TZWxlY3Rpb246OnNo
YWRvd0FkanVzdGVkTm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAg
aWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIGlm
IChmcmFtZSgpLT5zZXR0aW5ncygpLmxpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvIG5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgICAgIHJldHVy
biAhbm9kZSB8fCBub2RlLT5pc0luU2hhZG93VHJlZSgpID8gbnVsbHB0ciA6IG5vZGU7CisgICAg
fQorCiAgICAgYXV0byogY29udGFpbmVyTm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsK
ICAgICBhdXRvKiBhZGp1c3RlZE5vZGUgPSBmcmFtZSgpLT5kb2N1bWVudCgpLT5hbmNlc3Rvck5v
ZGVJblRoaXNTY29wZShjb250YWluZXJOb2RlKTsKICAgICBpZiAoIWFkanVzdGVkTm9kZSkKQEAg
LTM5Nyw2ICs0NTcsOSBAQCB1bnNpZ25lZCBET01TZWxlY3Rpb246OnNoYWRvd0FkanVzdGVkT2Zm
c2V0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKICAgICBpZiAocG9zaXRpb24uaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgaWYgKGZyYW1lKCktPnNldHRpbmdzKCku
bGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gc2hhZG93QWRqdXN0
ZWROb2RlKHBvc2l0aW9uKSA/IHBvc2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSA6IDA7CisKICAgICBhdXRvKiBjb250YWluZXJOb2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpOwogICAgIGF1dG8qIGFkanVzdGVkTm9kZSA9IGZyYW1lKCktPmRvY3VtZW50KCktPmFuY2Vz
dG9yTm9kZUluVGhpc1Njb3BlKGNvbnRhaW5lck5vZGUpOwogICAgIGlmICghYWRqdXN0ZWROb2Rl
KQpAQCAtNDEwLDcgKzQ3Myw4IEBAIHVuc2lnbmVkIERPTVNlbGVjdGlvbjo6c2hhZG93QWRqdXN0
ZWRPZmZzZXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogCiBib29sIERPTVNlbGVj
dGlvbjo6aXNWYWxpZEZvclBvc2l0aW9uKE5vZGUqIG5vZGUpIGNvbnN0CiB7Ci0gICAgYXV0byog
ZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwor
ICAgIEFTU0VSVCghZnJhbWUtPnNldHRpbmdzKCkubGl2ZVJhbmdlU2VsZWN0aW9uRW5hYmxlZCgp
KTsKICAgICByZXR1cm4gZnJhbWUgJiYgKCFub2RlIHx8ICZub2RlLT5kb2N1bWVudCgpID09IGZy
YW1lLT5kb2N1bWVudCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmgKaW5kZXgg
MTE4ZTk0ZWYwMDc0NzJkZjFhNTRhNjJhMDAxZDc3MjhmMGYwMGViOS4uMDJkMDBmNmRiNTgwZjdi
MjhiZDUyZTdiNjY3NTk0MTI4NGUzYmYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01TZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQyLDUwICs0Miw1OSBA
QCBjbGFzcyBQb3NpdGlvbjsKIGNsYXNzIFJhbmdlOwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsK
IAorc3RydWN0IFNpbXBsZVJhbmdlOworCiBjbGFzcyBET01TZWxlY3Rpb24gOiBwdWJsaWMgUmVm
Q291bnRlZDxET01TZWxlY3Rpb24+LCBwdWJsaWMgRE9NV2luZG93UHJvcGVydHkgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RE9NU2VsZWN0aW9uPiBjcmVhdGUoRE9NV2luZG93JiB3aW5kb3cp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NU2VsZWN0aW9uKHdpbmRvdykpOyB9CisgICAgc3Rh
dGljIFJlZjxET01TZWxlY3Rpb24+IGNyZWF0ZShET01XaW5kb3cmKTsKIAotICAgIE5vZGUqIGJh
c2VOb2RlKCkgY29uc3Q7Ci0gICAgTm9kZSogZXh0ZW50Tm9kZSgpIGNvbnN0OworICAgIFJlZlB0
cjxOb2RlPiBiYXNlTm9kZSgpIGNvbnN0OworICAgIFJlZlB0cjxOb2RlPiBleHRlbnROb2RlKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgYmFzZU9mZnNldCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGV4
dGVudE9mZnNldCgpIGNvbnN0OwogICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRCYXNlQW5kRXh0ZW50KE5vZGUqIGJhc2VOb2RlLCB1bnNpZ25lZCBiYXNlT2Zmc2V0LCBOb2Rl
KiBleHRlbnROb2RlLCB1bnNpZ25lZCBleHRlbnRPZmZzZXQpOwotICAgIHZvaWQgc2V0UG9zaXRp
b24oTm9kZSosIHVuc2lnbmVkIG9mZnNldCk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QmFz
ZUFuZEV4dGVudChOb2RlKiBiYXNlTm9kZSwgdW5zaWduZWQgYmFzZU9mZnNldCwgTm9kZSogZXh0
ZW50Tm9kZSwgdW5zaWduZWQgZXh0ZW50T2Zmc2V0KTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRQb3NpdGlvbihOb2RlKiwgdW5zaWduZWQgb2Zmc2V0KTsKICAgICB2b2lkIG1vZGlmeShjb25z
dCBTdHJpbmcmIGFsdGVyLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgY29uc3QgU3RyaW5nJiBn
cmFudWxhcml0eSk7CiAKICAgICAvLyBUaGUgYW5jaG9yIGFuZCBmb2N1cyBhcmUgdGhlIHN0YXJ0
IGFuZCBlbmQgb2YgdGhlIHNlbGVjdGlvbiwgYW5kCiAgICAgLy8gcmVmbGVjdCB0aGUgZGlyZWN0
aW9uIGluIHdoaWNoIHRoZSBzZWxlY3Rpb24gd2FzIG1hZGUgYnkgdGhlIHVzZXIuCiAgICAgLy8g
VGhlIGJhc2UgYW5kIGV4dGVudCBhcmUgZGlmZmVyZW50LCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmVm
bGVjdCBleHBhbnNpb24uCi0gICAgTm9kZSogYW5jaG9yTm9kZSgpIGNvbnN0OworICAgIFJlZlB0
cjxOb2RlPiBhbmNob3JOb2RlKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgYW5jaG9yT2Zmc2V0KCkg
Y29uc3Q7Ci0gICAgTm9kZSogZm9jdXNOb2RlKCkgY29uc3Q7CisgICAgUmVmUHRyPE5vZGU+IGZv
Y3VzTm9kZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGZvY3VzT2Zmc2V0KCkgY29uc3Q7CiAgICAg
Ym9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIHJhbmdlQ291bnQoKSBjb25z
dDsKLSAgICB2b2lkIGNvbGxhcHNlKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IGNvbGxhcHNlKE5vZGUqLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IGNvbGxhcHNlVG9FbmQoKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBjb2xs
YXBzZVRvU3RhcnQoKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBleHRlbmQoTm9kZSYsIHVuc2ln
bmVkIG9mZnNldCk7CiAgICAgRXhjZXB0aW9uT3I8UmVmPFJhbmdlPj4gZ2V0UmFuZ2VBdCh1bnNp
Z25lZCk7CiAgICAgdm9pZCByZW1vdmVBbGxSYW5nZXMoKTsKICAgICB2b2lkIGFkZFJhbmdlKFJh
bmdlJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVtb3ZlUmFuZ2UoUmFuZ2UmKTsKICAgICB2
b2lkIGRlbGV0ZUZyb21Eb2N1bWVudCgpOwogICAgIGJvb2wgY29udGFpbnNOb2RlKE5vZGUmLCBi
b29sIHBhcnRseUNvbnRhaW5lZCkgY29uc3Q7CiAgICAgdm9pZCBzZWxlY3RBbGxDaGlsZHJlbihO
b2RlJik7CiAKLSAgICBTdHJpbmcgdG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdDsKIAogICAgIHZvaWQgZW1wdHkoKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBET01T
ZWxlY3Rpb24oRE9NV2luZG93Jik7CiAKLSAgICAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGFj
Y2Vzc29ycywgY2FsbGVyIG11c3QgbnVsbC1jaGVjayBmcmFtZSgpLgotICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHZpc2libGVTZWxlY3Rpb24oKSBjb25zdDsKKyAgICAvLyBGSVhNRTogQ2hh
bmdlIERPTVdpbmRvd1Byb3BlcnR5OjpmcmFtZSB0byByZXR1cm4gUmVmUHRyIGFuZCB0aGVuIGRl
bGV0ZSB0aGlzLgorICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUoKSBjb25zdDsKKyAgICBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gcmFuZ2UoKSBjb25zdDsKKworICAgIFBvc2l0aW9uIGFuY2hvclBvc2l0
aW9uKCkgY29uc3Q7CisgICAgUG9zaXRpb24gZm9jdXNQb3NpdGlvbigpIGNvbnN0OworICAgIFBv
c2l0aW9uIGJhc2VQb3NpdGlvbigpIGNvbnN0OworICAgIFBvc2l0aW9uIGV4dGVudFBvc2l0aW9u
KCkgY29uc3Q7CiAKLSAgICBOb2RlKiBzaGFkb3dBZGp1c3RlZE5vZGUoY29uc3QgUG9zaXRpb24m
KSBjb25zdDsKKyAgICBSZWZQdHI8Tm9kZT4gc2hhZG93QWRqdXN0ZWROb2RlKGNvbnN0IFBvc2l0
aW9uJikgY29uc3Q7CiAgICAgdW5zaWduZWQgc2hhZG93QWRqdXN0ZWRPZmZzZXQoY29uc3QgUG9z
aXRpb24mKSBjb25zdDsKIAogICAgIGJvb2wgaXNWYWxpZEZvclBvc2l0aW9uKE5vZGUqKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbAppbmRleCA5MWYxNDE4MWI3ZWJlNDFl
Y2U0ZWJkZGE1Njc3MWJhZjAwMzU2ZmNkLi5lNmNmMTM0MjM3ODI5ZDUzNmMzOWRmMGU5YmNiZmIy
ZThiY2ZjNzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsCkBAIC00MSwzNCAr
NDEsMzQgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBpc0NvbGxhcHNlZDsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyByYW5nZUNvdW50OwogCi0gICAgdW5k
ZWZpbmVkIGNvbGxhcHNlKE5vZGU/IG5vZGUsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
ID0gMCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgY29sbGFwc2VUb0VuZCgp
OwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIGNvbGxhcHNlVG9TdGFydCgpOwot
Ci0gICAgW0NFUmVhY3Rpb25zXSB1bmRlZmluZWQgZGVsZXRlRnJvbURvY3VtZW50KCk7Ci0gICAg
Ym9vbGVhbiBjb250YWluc05vZGUoTm9kZSBub2RlLCBvcHRpb25hbCBib29sZWFuIGFsbG93UGFy
dGlhbCA9IGZhbHNlKTsKLSAgICB1bmRlZmluZWQgc2VsZWN0QWxsQ2hpbGRyZW4oTm9kZSBub2Rl
KTsKLQotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIGV4dGVuZChOb2RlIG5vZGUs
IG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMCk7CisgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyB0eXBlOwogCiAgICAgW01heVRocm93RXhjZXB0aW9uXSBSYW5nZSBnZXRS
YW5nZUF0KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIHVuZGVmaW5lZCByZW1vdmVBbGxSYW5n
ZXMoKTsKICAgICB1bmRlZmluZWQgYWRkUmFuZ2UoUmFuZ2UgcmFuZ2UpOworICAgIFtFbmFibGVk
QnlTZXR0aW5nPUxpdmVSYW5nZVNlbGVjdGlvbiwgTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5l
ZCByZW1vdmVSYW5nZShSYW5nZSByYW5nZSk7CisgICAgdW5kZWZpbmVkIHJlbW92ZUFsbFJhbmdl
cygpOwogCi0gICAgW05vdEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOworICAgIHVu
ZGVmaW5lZCBlbXB0eSgpOwogCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBl
OworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIGNvbGxhcHNlKE5vZGU/IG5vZGUs
IG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMCk7CisgICAgW01heVRocm93RXhjZXB0
aW9uXSB1bmRlZmluZWQgc2V0UG9zaXRpb24oTm9kZT8gbm9kZSwgb3B0aW9uYWwgdW5zaWduZWQg
bG9uZyBvZmZzZXQgPSAwKTsKKworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIGNv
bGxhcHNlVG9TdGFydCgpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIGNvbGxh
cHNlVG9FbmQoKTsKIAotICAgIHVuZGVmaW5lZCBzZXRCYXNlQW5kRXh0ZW50KE5vZGU/IGJhc2VO
b2RlLCB1bnNpZ25lZCBsb25nIGJhc2VPZmZzZXQsIE5vZGU/IGV4dGVudE5vZGUsIHVuc2lnbmVk
IGxvbmcgZXh0ZW50T2Zmc2V0KTsKLSAgICB1bmRlZmluZWQgc2V0UG9zaXRpb24oTm9kZT8gbm9k
ZSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwKTsKKyAgICBbTWF5VGhyb3dFeGNl
cHRpb25dIHVuZGVmaW5lZCBleHRlbmQoTm9kZSBub2RlLCBvcHRpb25hbCB1bnNpZ25lZCBsb25n
IG9mZnNldCA9IDApOwogCi0gICAgdW5kZWZpbmVkIGVtcHR5KCk7CisgICAgW01heVRocm93RXhj
ZXB0aW9uXSB1bmRlZmluZWQgc2V0QmFzZUFuZEV4dGVudChOb2RlPyBiYXNlTm9kZSwgdW5zaWdu
ZWQgbG9uZyBiYXNlT2Zmc2V0LCBOb2RlPyBleHRlbnROb2RlLCB1bnNpZ25lZCBsb25nIGV4dGVu
dE9mZnNldCk7CisgICAgdW5kZWZpbmVkIHNlbGVjdEFsbENoaWxkcmVuKE5vZGUgbm9kZSk7CisK
KyAgICBbQ0VSZWFjdGlvbnNdIHVuZGVmaW5lZCBkZWxldGVGcm9tRG9jdW1lbnQoKTsKKyAgICBi
b29sZWFuIGNvbnRhaW5zTm9kZShOb2RlIG5vZGUsIG9wdGlvbmFsIGJvb2xlYW4gYWxsb3dQYXJ0
aWFsQ29udGFpbm1lbnQgPSBmYWxzZSk7CisKKyAgICBbTm90RW51bWVyYWJsZV0gRE9NU3RyaW5n
IHRvU3RyaW5nKCk7CiAKLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBvcGVyYXRpb24gc2hv
dWxkIGJlIGltcGxlbWVudGVkLgotICAgIC8vIHVuZGVmaW5lZCByZW1vdmVSYW5nZShSYW5nZSBy
YW5nZSk7CisgICAgLy8gTm9uLXN0YW5kYXJkIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMuCiAKLSAg
ICAvLyBGSVhNRTogVXNpbmcgInVuZGVmaW5lZCIgYXMgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUg
aXMgd3JvbmcuCi0gICAgdW5kZWZpbmVkIG1vZGlmeShvcHRpb25hbCBET01TdHJpbmcgYWx0ZXIg
PSAidW5kZWZpbmVkIiwgb3B0aW9uYWwgRE9NU3RyaW5nIGRpcmVjdGlvbiA9ICJ1bmRlZmluZWQi
LCBvcHRpb25hbCBET01TdHJpbmcgZ3JhbnVsYXJpdHkgPSAidW5kZWZpbmVkIik7CisgICAgdW5k
ZWZpbmVkIG1vZGlmeShvcHRpb25hbCBET01TdHJpbmcgYWx0ZXIsIG9wdGlvbmFsIERPTVN0cmlu
ZyBkaXJlY3Rpb24sIG9wdGlvbmFsIERPTVN0cmluZyBncmFudWxhcml0eSk7CiAKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgTm9kZT8gYmFzZU5vZGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgYmFzZU9mZnNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MueWFtbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFtbAppbmRleCBm
YmYwOGM0ZjkzMjgzMGY0MTg3NjRjZDI4MjJjMDQzZWU1ZGNkYTc3Li4xNzg5N2VlMzA0YWViMjJi
NTgyZmJkOTNiNGI5MjYxNDIwMjczYjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1NldHRpbmdzLnlhbWwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCkBA
IC0xMDcyLDcgKzEwNzIsNiBAQCBsZWdhY3lFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQ6CiBsZWdh
Y3lCZWZvcmVMb2FkRXZlbnRFbmFibGVkOgogICBpbml0aWFsOiBmYWxzZQogCi0KIGlzUG9zdExv
YWRDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZDoKICAgaW5pdGlhbDogZGVmYXVsdFBvc3RMb2Fk
Q1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQKIApAQCAtMTA4OCw2ICsxMDg3LDkgQEAgaXNQb3N0
QmFja2dyb3VuZGluZ01lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkOgogaXNQZXJBY3Rpdml0
eVN0YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQ6CiAgIGluaXRpYWw6IGRlZmF1bHRQZXJB
Y3Rpdml0eVN0YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQKIAorbGl2ZVJhbmdlU2VsZWN0
aW9uRW5hYmxlZDoKKyAgaW5pdGlhbDogZmFsc2UKKwogIyBEZXByZWNhdGVkCiAKIGljZUNhbmRp
ZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJQcmVmZXJlbmNlc0ludGVybmFsLnlhbWwgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVm
ZXJlbmNlc0ludGVybmFsLnlhbWwKaW5kZXggZDVmNmMwZTQzODYxZDkyOTBjZTNmZjJiNmI4ZTli
Y2EyOTAyZjVlMi4uNzlkMjU2YmEyOGIzZDdhMDZlM2RiNjQwOTY4MTQ1MGY3ZTM2NjhkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNJbnRlcm5hbC55YW1s
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzSW50ZXJuYWwueWFtbApA
QCAtNDAwLDMgKzQwMCwxMCBAQCBVc2VHUFVQcm9jZXNzRm9yTWVkaWE6CiAgIGh1bWFuUmVhZGFi
bGVOYW1lOiAiTWVkaWEgaW4gR1BVIFByb2Nlc3MiCiAgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlv
bjogIkRvIGFsbCBtZWRpYSBsb2FkaW5nIGFuZCBwbGF5YmFjayBpbiB0aGUgR1BVIFByb2Nlc3Mi
CiAgIHdlYmNvcmVOYW1lOiB1c2VHUFVQcm9jZXNzRm9yTWVkaWEKKworTGl2ZVJhbmdlU2VsZWN0
aW9uRW5hYmxlZDoKKyAgdHlwZTogYm9vbAorICBkZWZhdWx0VmFsdWU6IGZhbHNlCisgIGh1bWFu
UmVhZGFibGVOYW1lOiAiTGl2ZSBSYW5nZXMgaW4gU2VsZWN0aW9uIgorICBodW1hblJlYWRhYmxl
RGVzY3JpcHRpb246ICJMaXZlIHJhbmdlIGJlaGF2aW9yIGZvciByYW5nZXMgaW4gdGhlIFNlbGVj
dGlvbiBvYmplY3QiCisgIGNhdGVnb3J5OiBpbnRlcm5hbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGY3NjFlNWVhMTFjOTQ2
YmM5NTI2ZmYyNDhkMWU4YjExOWYzZTEwMDIuLjc4ZDliNWI1MmM2NGVmOWZlMTdmYWEwNWM1MjE0
MmJhOWM3NWRjNTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0wOS0xNiAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2VsZWN0aW9uIEFQSTogSW50cm9kdWNl
IExpdmVSYW5nZVNlbGVjdGlvbkVuYWJsZWQsIG9mZiBieSBkZWZhdWx0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2NTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS10
by1saW5lLWJvdW5kYXJ5LWNsZWFyLXNlbGVjdGlvbi5odG1sOiBGaXggdGVzdCB0aGF0IGFjY2lk
ZW50YWxseQorICAgICAgICByZWxpZWQgb24gb3VyIG5vbi1zdGFuZGFyZCBiZWhhdmlvciBvZiBj
bGFtcGluZyBhIHRvby1oaWdoIG9mZnNldCB0byBhIHZhbGlkIHZhbHVlLiBUaGlzCisgICAgICAg
IHdhcyBub3Qgd2hhdCB3ZSB3ZXJlIHRyeWluZyB0byB0ZXN0LiBXaXRob3V0IHRoaXMgY2hhbmdl
LCB0aGUgdGVzdCBmYWlscyBpbiB0aGUgbmV3IG1vZGUuCisgICAgICAgIFRoZSBvZmZzZXQgd2Fz
ICI1Iiwgd2hpY2ggc2VlbXMgdG8gYmUgYSBjaGFyYWN0ZXIgY291bnQsIHJhdGhlciB0aGFuICIx
IiwgbWVhbmluZyAiYWZ0ZXIKKyAgICAgICAgdGhlIHRleHQgbm9kZSIuCisgICAgICAgICogZWRp
dGluZy9zZWxlY3Rpb24vdG9TdHJpbmctMS5odG1sOiBEaXR0by4gVGhlIG9mZnNldCBoZXJlIHdh
cyAzLCBidXQgdGhlIEhUTUwgZWxlbWVudAorICAgICAgICBoYXMgb25seSAyIGNoaWxkcmVuLCB0
aGUgaGVhZCBhbmQgdGhlIGJvZHkuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vdXNlci1z
ZWxlY3QtYWxsLXNlbGVjdGlvbi5odG1sOiBEaXR0by4gVGhlIGNvZGUgd2FzIHBhc3NpbmcgdGhl
IHdyb25nCisgICAgICAgIGNvbnRhaW5lciBieSBhY2NjaWRlbnQsIHRoZSBwYXJlbnQgb2YgdGhl
IHRleHQgbm9kZSByYXRoZXIgdGhhbiB0aGUgdGV4dCBub2RlLgorCiAyMDIwLTA5LTE3ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gY2Fu
UGxheVR5cGUoJ2F1ZGlvL21wZWc7IGNvZGVjcz0ibXAzIicpIHJldHVybnMgIiIKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtdG8tbGluZS1ib3VuZGFyeS1j
bGVhci1zZWxlY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUt
dG8tbGluZS1ib3VuZGFyeS1jbGVhci1zZWxlY3Rpb24uaHRtbAppbmRleCA3ODQzYjQ0Mzc0Mzk2
NGU2M2I5MDQxYTNhZTVlZTA4MGVkMmM5MDVhLi4zZDIwMDZkZjkyMTJiNTE2ZTVjZGY0MTFmMWU4
ZGNiYTJjZjAxN2ZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9t
b3ZlLXRvLWxpbmUtYm91bmRhcnktY2xlYXItc2VsZWN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS10by1saW5lLWJvdW5kYXJ5LWNsZWFyLXNlbGVjdGlv
bi5odG1sCkBAIC0xNyw3ICsxNyw3IEBAIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKICAgICB0ZXN0
UnVubmVyLmV4ZWNDb21tYW5kKCJNb3ZlVG9FbmRPZkxpbmUiKTsKIHNob3VsZEJlKCdnZXRTZWxl
Y3Rpb24oKS50b1N0cmluZygpJywgIicnIik7CiBnZXRTZWxlY3Rpb24oKS5lbXB0eSgpOwotZ2V0
U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24oc3BhbiwgNSk7CitnZXRTZWxlY3Rpb24oKS5zZXRQb3Np
dGlvbihzcGFuLCAxKTsKIGdldFNlbGVjdGlvbigpLm1vZGlmeSgiZXh0ZW5kIiwgImJhY2t3YXJk
IiwgImxpbmUiKTsKIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKICAgICB0ZXN0UnVubmVyLmV4ZWND
b21tYW5kKCJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2VkaXRpbmcvc2VsZWN0aW9uL3RvU3RyaW5nLTEuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcv
c2VsZWN0aW9uL3RvU3RyaW5nLTEuaHRtbAppbmRleCBmOWQxYmJmNDU2MWEyNjM5OTE1MzdhNmM0
ODgyOGNhYjYwYzRiZWYyLi4wNDI4OGZhOTM4NDA2NWIwMThhM2E4MjllNzgzZjNjMDFlYjllZTA2
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi90b1N0cmluZy0xLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vdG9TdHJpbmctMS5odG1sCkBA
IC0yMCw3ICsyMCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAgICAgICAgIHZhciBodG1sRWxl
bWVudCA9IGJvZHlFbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgIAogICAgICAgICBpZiAoc2Vs
ZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQpCi0gICAgICAgICAgICBzZWxlY3Rpb24uc2V0QmFzZUFu
ZEV4dGVudChib2R5RWxlbWVudCwgMSwgaHRtbEVsZW1lbnQsIDMpOworICAgICAgICAgICAgc2Vs
ZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoYm9keUVsZW1lbnQsIDEsIGh0bWxFbGVtZW50LCAyKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhyb3coIkNvdWxkbid0IHNldCBhIHNlbGVjdGlv
bi4iKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi91c2VyLXNlbGVjdC1hbGwtc2VsZWN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nl
bGVjdGlvbi91c2VyLXNlbGVjdC1hbGwtc2VsZWN0aW9uLmh0bWwKaW5kZXggMTI3YWRlYTQxOGVl
NGVmNzY3MzgxMmQyOTA5YzExZGYwNWEyMDZkNy4uODc0NDRmMWE2NzY4MjU4OTE4YjZjNmQwNjdk
M2ZhZmFjYjVhZGI0YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
dXNlci1zZWxlY3QtYWxsLXNlbGVjdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcv
c2VsZWN0aW9uL3VzZXItc2VsZWN0LWFsbC1zZWxlY3Rpb24uaHRtbApAQCAtNDksNyArNDksNyBA
QCBmdW5jdGlvbiBzZWxlY3Rpb25TaG91bGRCZVJlbGF0aXZlVG9Vc2VyU2VsZWN0QWxsRWxlbWVu
dChzdHIpIHsKIAogZnVuY3Rpb24gcGxhY2VDYXJldEJlZm9yZVVzZXJTZWxlY3RBbGxFbGVtZW50
KCl7CiAgICAgdmFyIHVzZXJTZWxlY3RBbGxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImFsbEFyZWEiKTsKLSAgICBleGVjU2V0U2VsZWN0aW9uQ29tbWFuZCh1c2VyU2VsZWN0QWxs
RWxlbWVudC5wcmV2aW91c1NpYmxpbmcuZmlyc3RDaGlsZCwgdXNlclNlbGVjdEFsbEVsZW1lbnQu
cHJldmlvdXNTaWJsaW5nLnRleHRDb250ZW50Lmxlbmd0aCwgdXNlclNlbGVjdEFsbEVsZW1lbnQu
cHJldmlvdXNTaWJsaW5nLCB1c2VyU2VsZWN0QWxsRWxlbWVudC5wcmV2aW91c1NpYmxpbmcudGV4
dENvbnRlbnQubGVuZ3RoKTsKKyAgICBleGVjU2V0U2VsZWN0aW9uQ29tbWFuZCh1c2VyU2VsZWN0
QWxsRWxlbWVudC5wcmV2aW91c1NpYmxpbmcuZmlyc3RDaGlsZCwgdXNlclNlbGVjdEFsbEVsZW1l
bnQucHJldmlvdXNTaWJsaW5nLnRleHRDb250ZW50Lmxlbmd0aCwgdXNlclNlbGVjdEFsbEVsZW1l
bnQucHJldmlvdXNTaWJsaW5nLmZpcnN0Q2hpbGQsIHVzZXJTZWxlY3RBbGxFbGVtZW50LnByZXZp
b3VzU2libGluZy50ZXh0Q29udGVudC5sZW5ndGgpOwogfQogCiBmdW5jdGlvbiBtb3VzZU1vdmVG
cm9tVG8oZnJvbVgsIHRvWCl7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>