<?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>163645</bug_id>
          
          <creation_ts>2016-10-18 20:02:39 -0700</creation_ts>
          <short_desc>Move many miscellaneous classes from ExceptionCode to Exception</short_desc>
          <delta_ts>2016-10-19 00:02: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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>japhet</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1241786</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-18 20:02:39 -0700</bug_when>
    <thetext>Move many miscellaneous classes from ExceptionCode to Exception</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241820</commentid>
    <comment_count>1</comment_count>
      <attachid>292039</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-18 21:59:56 -0700</bug_when>
    <thetext>Created attachment 292039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241840</commentid>
    <comment_count>2</comment_count>
      <attachid>292039</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-10-18 22:26:41 -0700</bug_when>
    <thetext>Comment on attachment 292039
Patch

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

&gt; Source/WebCore/page/Performance.h:98
&gt; -    unsigned m_resourceTimingBufferSize;
&gt; +    unsigned m_resourceTimingBufferSize { 150 };

We might wanna add a hyperlink to https://w3c.github.io/resource-timing/#extensions-performance-interface indicating where the source of the number 150.

&gt; Source/WebCore/page/PerformanceUserTiming.cpp:50
&gt; +        { ASCIILiteral { &quot;navigationStart&quot; }, &amp;PerformanceTiming::navigationStart },

I think ASCIILiteral(~) was more readable than ASCIILiteral { ~ } especially because we&apos;re nesting curly brackets here.

&gt; Source/WebCore/page/PerformanceUserTiming.cpp:129
&gt; +        double value = static_cast&lt;double&gt;((m_performance.timing().*(function))());

Jeez, this is some crazy member function call. I&apos;m sure we can do better with lambdas &amp; std::function but I guess that&apos;s for another time.

&gt; Source/WebCore/page/PerformanceUserTiming.cpp:175
&gt; +    Vector&lt;RefPtr&lt;PerformanceEntry&gt;&gt; entries;
&gt;      for (auto&amp; entry : performanceEntryMap.values())
&gt;          entries.appendVector(entry);

Can&apos;t we just call copyValuesToVector instead?
In fact, this entire function seems to be redundant given copyValuesToVector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241847</commentid>
    <comment_count>3</comment_count>
      <attachid>292039</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-18 22:53:28 -0700</bug_when>
    <thetext>Comment on attachment 292039
Patch

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

&gt;&gt; Source/WebCore/page/Performance.h:98
&gt;&gt; +    unsigned m_resourceTimingBufferSize { 150 };
&gt; 
&gt; We might wanna add a hyperlink to https://w3c.github.io/resource-timing/#extensions-performance-interface indicating where the source of the number 150.

OK, will do.

&gt;&gt; Source/WebCore/page/PerformanceUserTiming.cpp:50
&gt;&gt; +        { ASCIILiteral { &quot;navigationStart&quot; }, &amp;PerformanceTiming::navigationStart },
&gt; 
&gt; I think ASCIILiteral(~) was more readable than ASCIILiteral { ~ } especially because we&apos;re nesting curly brackets here.

Not sure what to say. I prefer it the new way, but really don’t care too much about this strange source file so I guess I will do it your way.

&gt;&gt; Source/WebCore/page/PerformanceUserTiming.cpp:175
&gt;&gt;          entries.appendVector(entry);
&gt; 
&gt; Can&apos;t we just call copyValuesToVector instead?
&gt; In fact, this entire function seems to be redundant given copyValuesToVector.

No, we can’t. The values in this case are all vectors, and the result is the a single vector with all their contents appended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241860</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-19 00:02:55 -0700</bug_when>
    <thetext>Committed r207522: &lt;http://trac.webkit.org/changeset/207522&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292039</attachid>
            <date>2016-10-18 21:59:56 -0700</date>
            <delta_ts>2016-10-18 22:26:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163645-20161018215621.patch</filename>
            <type>text/plain</type>
            <size>112761</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmIxMmY3ZWIyMjVmZDQw
OWI4ZDhhZGEzNGVkYTZhZTA1NGE1NDE1OS4uYmY5ZDE4ZGU3OGI3YTc4ZmExNGNmYzI4MGZjMGEy
NGQ2ZDdkOGYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxNi0xMC0xOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBtYW55IG1pc2NlbGxh
bmVvdXMgY2xhc3NlcyBmcm9tIEV4Y2VwdGlvbkNvZGUgdG8gRXhjZXB0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM2NDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5
cHRvQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvOjpnZXRSYW5kb21WYWx1
ZXMpOiBVc2UgcHJvcGFnYXRlRXhjZXB0aW9uLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVBvc3RNZXNzYWdlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2V0VGltZW91dCk6IFVzZSB0
b0pTTnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNldEludGVydmFsKTog
RGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6bmFtZUdldHRlcik6IFVzZSBwcm9wYWdhdGVFeGNlcHRp
b24uCisgICAgICAgIChXZWJDb3JlOjpKU1N0b3JhZ2U6OmRlbGV0ZVByb3BlcnR5KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6cHV0RGVsZWdhdGUpOiBEaXR0by4KKwor
ICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnVwZGF0ZSk6IFVzZSBFeGNlcHRpb25P
ci4KKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZSk6IERp
dHRvLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmg6IFVw
ZGF0ZSBmb3IgYWJvdmUgY2hhbmdlcy4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvRE9NQXBw
bGljYXRpb25DYWNoZS5pZGw6IFVzZSBub24tbGVnYWN5IGV4Y2VwdGlvbnMuCisKKyAgICAgICAg
KiBwYWdlL0NyeXB0by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG86OmdldFJhbmRvbVZh
bHVlcyk6IFVzZSBFeGNlcHRpb25Pci4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0bzo6d2Via2l0
U3VidGxlKTogRGl0dG8uCisgICAgICAgICogcGFnZS9DcnlwdG8uaDogVXBkYXRlZCBmb3IgYWJv
dmUgY2hhbmdlcy4KKyAgICAgICAgKiBwYWdlL0NyeXB0by5pZGw6IFVzZSBub24tbGVnYWN5IGV4
Y2VwdGlvbnMuCisKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01XaW5kb3c6OkRPTVdpbmRvdyk6IEluaXRpYWxpemUgbWFueSBkYXRhIG1lbWJlcnMg
aW4KKyAgICAgICAgdGhlIGNsYXNzIGRlZmluaXRpb24gaW5zdGVhZCBvZiBoZXJlLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93OjpwYWdlKTogVXNlIG51bGxwdHIuCisgICAgICAgIChXZWJD
b3JlOjpET01XaW5kb3c6OnNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NV2lu
ZG93OjpjcnlwdG8pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6bG9jYXRp
b25iYXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6bWVudWJhcik6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpwZXJzb25hbGJhcik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpzY3JvbGxiYXJzKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpET01XaW5kb3c6OnN0YXR1c2Jhcik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93Ojp0b29sYmFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01XaW5k
b3c6OmFwcGxpY2F0aW9uQ2FjaGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRv
dzo6c2Vzc2lvblN0b3JhZ2UpOiBVc2UgRXhjZXB0aW9uT3IuCisgICAgICAgIChXZWJDb3JlOjpE
T01XaW5kb3c6OmxvY2FsU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NV2lu
ZG93Ojpwb3N0TWVzc2FnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpm
cmFtZUVsZW1lbnQpOiBVc2UgbnVsbHB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6
c2VsZik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpvcGVuZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6cGFyZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpET01XaW5kb3c6OnRvcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9N
V2luZG93OjpnZXRDb21wdXRlZFN0eWxlKTogVXNlIFJlZi4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVdpbmRvdzo6c2V0VGltZW91dCk6IFVzZSBFeGNlcHRpb25Pci4KKyAgICAgICAgKFdlYkNvcmU6
OkRPTVdpbmRvdzo6c2V0SW50ZXJ2YWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRpZEFk
ZFN0b3JhZ2VFdmVudExpc3RlbmVyKTogVXNlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYQorICAg
ICAgICBwb2ludGVyLCBhbmQgaWdub3JlIHJldHVybiB2YWx1ZSBpbnN0ZWFkIG9mIHVzaW5nIElH
Tk9SRV9FWENFUFRJT04uCisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmFkZEV2ZW50TGlz
dGVuZXIpOiBQYXNzIHJlZmVyZW5jZSB0byBmdW5jdGlvbiBhYm92ZS4KKyAgICAgICAgKFdlYkNv
cmU6OkRPTVdpbmRvdzo6ZGlzcGF0Y2hFdmVudCk6IFVzZSBlbnVtIGNsYXNzIHZlcnNpb24gb2Yg
UGFnZVN0YXR1cy4KKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5oOiBVcGRhdGVkIGZvciBjaGFu
Z2VzIGFib3ZlLiBBbHNvIGNoYW5nZWQgaW5kZW50YXRhdGlvbi4KKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5pZGw6IFVzZSBub24tbGVnYWN5IGV4Y2VwdGlvbnMuCisKKyAgICAgICAgKiBwYWdl
L0V2ZW50U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpjcmVhdGUp
OiBVc2UgRXhjZXB0aW9uT3IuCisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5oOiBVcGRhdGVk
IGZvciBjaGFuZ2UgYWJvdmUuCisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5pZGw6IFVzZSBu
b24tbGVnYWN5IGV4Y2VwdGlvbi4KKworICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYXRpb246OnNldFByb3RvY29sKTogVXNlIEV4Y2VwdGlvbk9yLgor
ICAgICAgICAqIHBhZ2UvTG9jYXRpb24uaDogVXBkYXRlZCBmb3IgY2hhbmdlIGFib3ZlLgorICAg
ICAgICAqIHBhZ2UvTG9jYXRpb24uaWRsOiBVc2Ugbm9uLWxlZ2FjeSBleGNlcHRpb24uCisKKyAg
ICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlcmZvcm1h
bmNlOjpQZXJmb3JtYW5jZSk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiBvZgor
ICAgICAgICBzbWFydCBwb2ludGVyIHRvIG51bGwsIGFuZCBtb3ZlZCBpbml0aWFsaXphdGlvbiBv
ZiBtX3Jlc291cmNlVGltaW5nQnVmZmVyU2l6ZQorICAgICAgICB0byB0aGUgaGVhZGVyLgorICAg
ICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2U6Om5hdmlnYXRpb24pOiBNYWRlIG5vbi1jb25zdCBh
bmQgcmV0dXJuIGEgcmVmZXJlbmNlLgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2U6OnRp
bWluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2U6OmFkZFJlc291cmNl
VGltaW5nKTogQ2hhbmdlIExvYWRUaW1pbmcgYXJndW1lbnQgdG8gdXNlCisgICAgICAgIGEgY29u
c3QmIGluc3RlYWQgb2YgcGFzc2luZyBpbiBhIGNvcHkuCisgICAgICAgIChXZWJDb3JlOjpQZXJm
b3JtYW5jZTo6d2Via2l0TWFyayk6IFVzZSBFeGNlcHRpb25PciBhbmQgbWFrZV91bmlxdWUuCisg
ICAgICAgIChXZWJDb3JlOjpQZXJmb3JtYW5jZTo6d2Via2l0Q2xlYXJNYXJrcyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2U6OndlYmtpdE1lYXN1cmUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlBlcmZvcm1hbmNlOjp3ZWJraXRDbGVhck1lYXN1cmVzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpQZXJmb3JtYW5jZTo6cmVkdWNlVGltZVJlc29sdXRpb24pOiBV
c2Ugc3RkOjpmbG9vci4KKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlLmg6IFVwZGF0ZWQgZm9y
IGFib3ZlIGNoYW5nZXMuIFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMuCisgICAgICAgIE1hZGUg
bW9yZSB0aGluZ3MgcHJpdmF0ZS4gUmVtb3ZlZCB1bm5lZWRlZCByZWZlcmVuY2UgY291bnRpbmcg
b2YgVXNlclRpbWluZy4KKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlLmlkbDogVXNlIG5vbi1s
ZWdhY3kgZXhjZXB0aW9ucy4KKworICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc3RyaWN0ZWRNYXJrRnVuY3Rpb24pOiBSZW1vdmVk
IHVubmVlZGVkIGNsYXNzIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpVc2VyVGltaW5nOjpVc2Vy
VGltaW5nKTogVGFrZSBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGEgcG9pbnRlci4KKyAgICAgICAg
KFdlYkNvcmU6OlVzZXJUaW1pbmc6Om1hcmspOiBVc2UgRXhjZXB0aW9uT3IuCisgICAgICAgIChX
ZWJDb3JlOjpVc2VyVGltaW5nOjpmaW5kRXhpc3RpbmdNYXJrU3RhcnRUaW1lKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpVc2VyVGltaW5nOjptZWFzdXJlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpnZXRFbnRyeVNlcXVlbmNlQnlOYW1lKTogU2ltcGxpZmllZCBjb2RlIHVzaW5nIEhh
c2hNYXA6OmdldC4KKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5oOiBVcGRh
dGVkIGZvciBhYm92ZSBjaGFuZ2VzLiBSZW1vdmVkIHJlZmVyZW5jZQorICAgICAgICBjb3VudGlu
ZyBzaW5jZSB0aGlzIGlzIGEgc2luZ2xlLW93bmVyIG9iamVjdC4KKworICAgICAgICAqIHBhZ2Uv
VXNlck1lc3NhZ2VIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFu
ZGxlcjo6cG9zdE1lc3NhZ2UpOiBVc2UgRXhjZXB0aW9uT3IuCisgICAgICAgICogcGFnZS9Vc2Vy
TWVzc2FnZUhhbmRsZXIuaDogVXBkYXRlZCBmb3IgYWJvdmUgY2hhbmdlLgorICAgICAgICAqIHBh
Z2UvVXNlck1lc3NhZ2VIYW5kbGVyLmlkbDogVXNlIG5vbi1sZWdhY3kgZXhjZXB0aW9uLgorCisg
ICAgICAgICogc3RvcmFnZS9TdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6
Omxlbmd0aCk6IFVzZSBFeGNlcHRpb25Pci4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6Omtl
eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZTo6Z2V0SXRlbSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZTo6c2V0SXRlbSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZTo6cmVtb3ZlSXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZTo6Y2xlYXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OmNvbnRhaW5z
KTogRGl0dG8uCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlLmg6IFVwZGF0ZWQgZm9yIGFib3Zl
IGNoYW5nZS4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2UuaWRsOiBVc2Ugbm9uLWxlZ2FjeSBl
eGNlcHRpb25zLgorCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2Vz
c2lvblN0b3JhZ2VFdmVudHNUb0ZyYW1lcyk6CisgICAgICAgIFVwZGF0ZWQgZm9yIEV4Y2VwdGlv
bk9yLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hM
b2NhbFN0b3JhZ2VFdmVudHNUb0ZyYW1lcyk6IERpdHRvLgorCiAyMDE2LTEwLTE4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYiBJRExdIERyb3Agd2Via2l0
LXNwZWNpZmljIGV4dGVuZGVkIGF0dHJpYnV0ZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHVzZWZ1bApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCmluZGV4IDQ4
ZjcwYjYwNmY1YWFhOGQ1ZWRkM2U1YzQwMDNiYjcwZjJlOGI4ZjAuLmYyYjFjNzFlOTI0ZWU5YWM5
YzI2YjFjZDU4NmI1OGY5N2UxMDlkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NyeXB0b0N1c3RvbS5jcHAKQEAgLTQ1LDE3ICs0NSwxMSBAQCBKU1ZhbHVlIEpTQ3J5cHRv
OjpnZXRSYW5kb21WYWx1ZXMoRXhlY1N0YXRlJiBzdGF0ZSkKICAgICAgICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZz
dGF0ZSkpOwogCiAgICAgSlNWYWx1ZSBidWZmZXIgPSBzdGF0ZS5hcmd1bWVudCgwKTsKLSAgICBS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmll
dyhidWZmZXIpOworICAgIGF1dG8gYXJyYXlCdWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXco
YnVmZmVyKTsKICAgICBpZiAoIWFycmF5QnVmZmVyVmlldykKICAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgd3JhcHBlZCgpLmdldFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcuZ2V0KCksIGVjKTsK
LQotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBlYyk7Ci0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICBwcm9wYWdhdGVFeGNlcHRp
b24oc3RhdGUsIHNjb3BlLCB3cmFwcGVkKCkuZ2V0UmFuZG9tVmFsdWVzKCphcnJheUJ1ZmZlclZp
ZXcpKTsKIAogICAgIHJldHVybiBidWZmZXI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKaW5kZXggMTJhNmFjZTI0MjI5ZjBmMGIxN2Vi
NDMwZjU5Y2Y2OGY2ZjE1MGRjYS4uN2IzNmVhZTBiYTU0ZDFjNzlmYTFiOWNkYjNjODY1Nzc0MjZk
NmZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcApAQCAtNTI2LDE1ICs1MjYsMTIgQEAgc3RhdGljIEpTVmFsdWUgaGFuZGxlUG9zdE1l
c3NhZ2UoRE9NV2luZG93JiBpbXBsLCBFeGVjU3RhdGUmIHN0YXRlKQogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBhdXRvIG1lc3NhZ2UgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCks
IG1lc3NhZ2VQb3J0cywgV1RGTW92ZShhcnJheUJ1ZmZlcnMpKTsKLQogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CiAKICAgICBTdHJpbmcgdGFyZ2V0T3JpZ2luID0g
dmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KHRhcmdldE9yaWdpbkFyZ0luZGV4KSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGltcGwucG9zdE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShtZXNzYWdlUG9y
dHMpLCB0YXJnZXRPcmlnaW4sIGNhbGxlckRPTVdpbmRvdygmc3RhdGUpLCBlYyk7Ci0gICAgc2V0
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOworICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwg
c2NvcGUsIGltcGwucG9zdE1lc3NhZ2UobWVzc2FnZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3Zl
KG1lc3NhZ2VQb3J0cyksIHRhcmdldE9yaWdpbiwgY2FsbGVyRE9NV2luZG93KCZzdGF0ZSkpKTsK
IAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpAQCAtNTUyLDIwICs1NDksMTQgQEAgSlNW
YWx1ZSBKU0RPTVdpbmRvdzo6c2V0VGltZW91dChFeGVjU3RhdGUmIHN0YXRlKQogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZz
dGF0ZSkpOwogCi0gICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSB3cmFwcGVkKCkuZG9jdW1lbnQoKSA/IHdyYXBwZWQoKS5kb2N1bWVudCgpLT5jb250ZW50
U2VjdXJpdHlQb2xpY3koKSA6IG51bGxwdHI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxl
ZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKKyAgICBhdXRvKiBjb250
ZW50U2VjdXJpdHlQb2xpY3kgPSB3cmFwcGVkKCkuZG9jdW1lbnQoKSA/IHdyYXBwZWQoKS5kb2N1
bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSA6IG51bGxwdHI7CisgICAgYXV0byBhY3Rp
b24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3Js
ZCgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3kpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTVmFsdWUoKSk7Ci0KICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKDApOwogCiAgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1lbnQoMSkudG9JbnQzMigmc3Rh
dGUpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50IHJlc3VsdCA9IHdyYXBw
ZWQoKS5zZXRUaW1lb3V0KFdURk1vdmUoYWN0aW9uKSwgZGVsYXksIGVjKTsKLSAgICBzZXRET01F
eGNlcHRpb24oJnN0YXRlLCBlYyk7Ci0KLSAgICByZXR1cm4ganNOdW1iZXIocmVzdWx0KTsKKyAg
ICByZXR1cm4gdG9KU051bWJlcihzdGF0ZSwgc2NvcGUsIHdyYXBwZWQoKS5zZXRUaW1lb3V0KFdU
Rk1vdmUoYWN0aW9uKSwgZGVsYXkpKTsKIH0KIAogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50
ZXJ2YWwoRXhlY1N0YXRlJiBzdGF0ZSkKQEAgLTU3NiwxOSArNTY3LDE0IEBAIEpTVmFsdWUgSlNE
T01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGF0ZSYgc3RhdGUpCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7
CiAKLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRlbnRTZWN1cml0eVBvbGljeSA9IHdy
YXBwZWQoKS5kb2N1bWVudCgpID8gd3JhcHBlZCgpLmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0
eVBvbGljeSgpIDogbnVsbHB0cjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9u
PiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LT53b3JsZCgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3kpOworICAgIGF1dG8qIGNvbnRlbnRTZWN1
cml0eVBvbGljeSA9IHdyYXBwZWQoKS5kb2N1bWVudCgpID8gd3JhcHBlZCgpLmRvY3VtZW50KCkt
PmNvbnRlbnRTZWN1cml0eVBvbGljeSgpIDogbnVsbHB0cjsKKyAgICBhdXRvIGFjdGlvbiA9IFNj
aGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNv
bnRlbnRTZWN1cml0eVBvbGljeSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNW
YWx1ZSgpKTsKLSAgICBpbnQgZGVsYXkgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0ludDMyKCZzdGF0
ZSk7Ci0KICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwogCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW50IHJlc3VsdCA9IHdyYXBwZWQoKS5zZXRJ
bnRlcnZhbChXVEZNb3ZlKGFjdGlvbiksIGRlbGF5LCBlYyk7Ci0gICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwotCi0gICAgcmV0dXJuIGpzTnVtYmVyKHJlc3VsdCk7CisgICAgaW50IGRl
bGF5ID0gc3RhdGUuYXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOworICAgIHJldHVybiB0b0pT
TnVtYmVyKHN0YXRlLCBzY29wZSwgd3JhcHBlZCgpLnNldEludGVydmFsKFdURk1vdmUoYWN0aW9u
KSwgZGVsYXkpKTsKIH0KIAogRE9NV2luZG93KiBKU0RPTVdpbmRvdzo6dG9XcmFwcGVkKEpTVmFs
dWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3Jh
Z2VDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcAppbmRleCAxZjhmZTE3MzU4MjkxYTFiZjJiNmJjYWIxYjBiNjFiODkwNjYzODE0Li44MmUz
YzI4MDRmYzFhZDg1ZjFlNmQwZGM0YTVkOGM4MDZjMjg4ZWNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKQEAgLTM1LDQwICszNSw0MiBAQCB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgSlNTdG9y
YWdlOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSYgdmFsdWUpCitib29sIEpTU3RvcmFnZTo6bmFtZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBpZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyBpdGVtID0gd3JhcHBlZCgpLmdl
dEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgZWMpOwotICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgYXV0byBpdGVtID0gd3JhcHBlZCgpLmdldEl0ZW0o
cHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAgaWYgKGl0ZW0uaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIGl0ZW0ucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKIAotICAgIGlmIChpdGVtLmlzTnVsbCgpKQorICAgIGF1dG8gc3RyaW5n
ID0gaXRlbS5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICB2YWx1ZSA9IGpzU3RyaW5nV2l0aENhY2hlKGV4
ZWMsIGl0ZW0pOworICAgIHZhbHVlID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIHN0cmluZyk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
K2Jvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
c3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNTdG9yYWdlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTU3RvcmFnZSo+KGNlbGwpOworICAgIGF1dG8mIHRoaXNPYmplY3Qg
PSAqanNDYXN0PEpTU3RvcmFnZSo+KGNlbGwpOworCiAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBj
dXN0b20gZGVsZXRlIGlmIHRoZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3BlcnR5
IGJ5IHRoaXMgbmFtZS4KICAgICAvLyBTaW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1cCBj
YWxsaW5nIGNhbkdldEl0ZW1zRm9yTmFtZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8gY2hl
Y2sKICAgICAvLyB0aGUgbmF0aXZlIHByb3BlcnR5IHNsb3RzIG1hbnVhbGx5LgotICAgIFByb3Bl
cnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXRPd25Qcm9wZXJ0eSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoJnRoaXNPYmplY3QsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAKLSAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOwotICAg
IGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICAgICAgcmV0dXJuIEJhc2U6
OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LmdldFByb3RvdHlwZURpcmVjdCgpOworICAgIGlm
IChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0
eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiBCYXNlOjpk
ZWxldGVQcm9wZXJ0eSgmdGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSk7CiAKICAgICBp
ZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBCYXNlOjpkZWxldGVQ
cm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4g
QmFzZTo6ZGVsZXRlUHJvcGVydHkoJnRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUpOwog
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnJl
bW92ZUl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgZWMpOwotICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbigqc3RhdGUsIHNjb3BlLCB0aGlzT2JqZWN0LndyYXBwZWQoKS5yZW1vdmVJdGVtKHByb3Bl
cnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtNzcsMjggKzc5LDMzIEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByCiAgICAgcmV0dXJuIGRl
bGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlO
YW1lKSk7CiB9CiAKLXZvaWQgSlNTdG9yYWdlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNTdG9yYWdlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTU3RvcmFnZSo+KG9iamVjdCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aChlYyk7Ci0g
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworICAgIGF1dG8mIHRoaXNPYmplY3QgPSAqanNDYXN0PEpTU3RvcmFnZSo+
KG9iamVjdCk7CisgICAgYXV0byBsZW5ndGhSZXN1bHQgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5s
ZW5ndGgoKTsKKyAgICBpZiAobGVuZ3RoUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CisgICAgICAg
IHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHNjb3BlLCBsZW5ndGhSZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBsZW5ndGhSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdGhpc09iamVjdC0+d3JhcHBlZCgpLmtleShpLCBlYykp
KTsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgYXV0byBrZXlSZXN1bHQgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKS5rZXkoaSk7CisgICAgICAgIGlmIChrZXlSZXN1bHQuaGFzRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHNjb3BlLCBs
ZW5ndGhSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHN0YXRlLCBrZXlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpKTsKICAgICB9CiAgICAgICAg
IAotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcygmdGhpc09iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTU3RvcmFnZTo6cHV0
RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpCitib29sIEpTU3Rv
cmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KQog
ewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gT25seSBw
ZXJmb3JtIHRoZSBjdXN0b20gcHV0IGlmIHRoZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZl
IHByb3BlcnR5IGJ5IHRoaXMgbmFtZS4KQEAgLTEwNywxMyArMTE0LDEzIEBAIGJvb2wgSlNTdG9y
YWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwogCiAgICAgSlNWYWx1ZSBwcm90b3R5
cGUgPSB0aGlzLT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKLSAgICBpZiAocHJvdG90eXBlLmlzT2Jq
ZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpCisgICAgaWYgKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0
KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0g
dmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRl
cyB3aGV0aGVyIHB1dERlbGVnYXRlKCkgc2hvdWxkIGhhbmRsZSB0aGUgcHV0IG9wZXJhdGlvbiAo
d2hpY2gKICAgICAgICAgLy8gaWYgdHJ1ZSwgdGVsbHMgdGhlIGNhbGxlciBub3QgdG8gZXhlY3V0
ZSB0aGUgZ2VuZXJpYyBwdXQpLiBJdCBkb2VzIG5vdCBpbmRpY2F0ZSB3aGV0aGVyCkBAIC0xMjMs
MTAgKzEzMCw5IEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgd3JhcHBlZCgpLnNldEl0
ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgc3RyaW5nVmFsdWUsIGVjKTsK
LSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHB1dFJlc3VsdCA9ICFlYzsKKyAg
ICBhdXRvIHNldEl0ZW1SZXN1bHQgPSB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0
cmluZyhwcm9wZXJ0eU5hbWUpLCBzdHJpbmdWYWx1ZSk7CisgICAgcHV0UmVzdWx0ID0gIXNldEl0
ZW1SZXN1bHQuaGFzRXhjZXB0aW9uKCk7CisgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwg
c2NvcGUsIFdURk1vdmUoc2V0SXRlbVJlc3VsdCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25D
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25D
YWNoZS5jcHAKaW5kZXggYTdjMDc3NzljYTdjNzI5YzkzNDMwOTY4ZGEzNmRiNzYwMzYxYTY0Mi4u
NGQwZWVmMjI0YzBhYmQxODkxNWIzNjNlMTUxZTAwMDQ1ZDA5ODkxYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcApA
QCAtODIsMTggKzgyLDIwIEBAIHVuc2lnbmVkIHNob3J0IERPTUFwcGxpY2F0aW9uQ2FjaGU6OnN0
YXR1cygpIGNvbnN0CiAgICAgcmV0dXJuIGNhY2hlSG9zdC0+c3RhdHVzKCk7CiB9CiAKLXZvaWQg
RE9NQXBwbGljYXRpb25DYWNoZTo6dXBkYXRlKEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9u
T3I8dm9pZD4gRE9NQXBwbGljYXRpb25DYWNoZTo6dXBkYXRlKCkKIHsKLSAgICBBcHBsaWNhdGlv
bkNhY2hlSG9zdCogY2FjaGVIb3N0ID0gYXBwbGljYXRpb25DYWNoZUhvc3QoKTsKKyAgICBhdXRv
KiBjYWNoZUhvc3QgPSBhcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwogICAgIGlmICghY2FjaGVIb3N0
IHx8ICFjYWNoZUhvc3QtPnVwZGF0ZSgpKQotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZShFeGNl
cHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IERPTUFwcGxpY2F0aW9uQ2FjaGU6OnN3
YXBDYWNoZSgpCiB7Ci0gICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hlSG9zdCA9IGFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KCk7CisgICAgYXV0byogY2FjaGVIb3N0ID0gYXBwbGljYXRpb25DYWNo
ZUhvc3QoKTsKICAgICBpZiAoIWNhY2hlSG9zdCB8fCAhY2FjaGVIb3N0LT5zd2FwQ2FjaGUoKSkK
LSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IElOVkFMSURfU1RBVEVfRVJSIH07CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBET01B
cHBsaWNhdGlvbkNhY2hlOjphYm9ydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAppbmRleCAzMGU2YWUyNTcwYWMyY2M5YTNh
NmYxZjJjOWU4ZGE1NGQ3ODQxOWI4Li4zZjIwZDhjMmI3NTE5NzMyZmFhMWY3ZDBlZTBmOTA0YTk3
ODUwMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBw
bGljYXRpb25DYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01B
cHBsaWNhdGlvbkNhY2hlLmgKQEAgLTIzLDE2ICsyMywxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAg
Ki8KIAotI2lmbmRlZiBET01BcHBsaWNhdGlvbkNhY2hlX2gKLSNkZWZpbmUgRE9NQXBwbGljYXRp
b25DYWNoZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVIb3N0
LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93UHJvcGVydHkuaCIKICNpbmNsdWRlICJFdmVudFRhcmdl
dC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxl
LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3Ry
aW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCw4ICs0OCw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHdpbGxEZXN0cm95R2xvYmFsT2JqZWN0SW5GcmFtZSgpIG92ZXJyaWRlOwog
CiAgICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGUoRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBF
eGNlcHRpb25Pcjx2b2lkPiB1cGRhdGUoKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzd2FwQ2Fj
aGUoKTsKICAgICB2b2lkIGFib3J0KCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPERPTUFwcGxp
Y2F0aW9uQ2FjaGU+OjpyZWY7CkBAIC03Miw1ICs3MCwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBET01BcHBsaWNhdGlvbkNhY2hlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNh
Y2hlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNh
Y2hlLmlkbAppbmRleCA3MTZlYmEwODJiMzdiZGY0MGMzZmU3MWNkZjgxMGZlZGJmNjIyYzEzLi4x
Nzk5ZjJlMzgyYTBhZmNkODhhNWJhNzM2YmJlYzM4Y2VmZDA0MzBiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsCkBA
IC0zNyw4ICszNyw4IEBACiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgT0JTT0xFVEUgPSA1Owog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAKLSAgICBbTWF5
VGhyb3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgdXBkYXRlKCk7Ci0gICAgW01heVRocm93TGVnYWN5
RXhjZXB0aW9uXSB2b2lkIHN3YXBDYWNoZSgpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9p
ZCB1cGRhdGUoKTsKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc3dhcENhY2hlKCk7CiAg
ICAgdm9pZCBhYm9ydCgpOwogCiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmNoZWNraW5n
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9DcnlwdG8uY3BwCmluZGV4IDI1YTZkOTJhYzI3NTY0YzJhYTZlYjI4ZTcyNjZi
Nzc4NGE0NGU5NjMuLmJlMzg3MmYzMGYxMGY1NWQ2OTBmZWIzMDk1YTU5NGVhZWQ5ZmI2M2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5cHRvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0NyeXB0by5jcHAKQEAgLTUyLDM3ICs1MiwzNCBAQCBDcnlwdG86On5DcnlwdG8o
KQogewogfQogCi12b2lkIENyeXB0bzo6Z2V0UmFuZG9tVmFsdWVzKEFycmF5QnVmZmVyVmlldyog
YXJyYXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gQ3J5cHRvOjpnZXRS
YW5kb21WYWx1ZXMoQXJyYXlCdWZmZXJWaWV3JiBhcnJheSkKIHsKLSAgICBpZiAoIWFycmF5IHx8
ICFKU0M6OmlzSW50KGFycmF5LT5nZXRUeXBlKCkpKSB7Ci0gICAgICAgIGVjID0gVFlQRV9NSVNN
QVRDSF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGFycmF5LT5ieXRlTGVu
Z3RoKCkgPiA2NTUzNikgewotICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhhcnJh
eS0+YmFzZUFkZHJlc3MoKSwgYXJyYXktPmJ5dGVMZW5ndGgoKSk7CisgICAgaWYgKCFpc0ludChh
cnJheS5nZXRUeXBlKCkpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVFlQRV9NSVNNQVRD
SF9FUlIgfTsKKyAgICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCgpID4gNjU1MzYpCisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBRVU9UQV9FWENFRURFRF9FUlIgfTsKKyAgICBjcnlwdG9ncmFwaGlj
YWxseVJhbmRvbVZhbHVlcyhhcnJheS5iYXNlQWRkcmVzcygpLCBhcnJheS5ieXRlTGVuZ3RoKCkp
OworICAgIHJldHVybiB7IH07CiB9CiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKwogU3Vi
dGxlQ3J5cHRvJiBDcnlwdG86OnN1YnRsZSgpCiB7CiAgICAgcmV0dXJuIG1fc3VidGxlOwogfQog
Ci1XZWJLaXRTdWJ0bGVDcnlwdG8qIENyeXB0bzo6d2Via2l0U3VidGxlKEV4Y2VwdGlvbkNvZGUm
IGVjKQorRXhjZXB0aW9uT3I8V2ViS2l0U3VidGxlQ3J5cHRvKj4gQ3J5cHRvOjp3ZWJraXRTdWJ0
bGUoKQogewotICAgIGlmICghaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQ
UE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlmICghaXNNYWluVGhy
ZWFkKCkpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOT1RfU1VQUE9SVEVEX0VSUiB9Owog
CiAgICAgaWYgKCFtX3dlYmtpdFN1YnRsZSkKICAgICAgICAgbV93ZWJraXRTdWJ0bGUgPSBXZWJL
aXRTdWJ0bGVDcnlwdG86OmNyZWF0ZSgqZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkpOwogCiAgICAgcmV0dXJuIG1fd2Via2l0U3VidGxlLmdldCgpOwogfQorCiAj
ZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ3J5cHRvLmgKaW5kZXggZDY0YWU0YjZlYWUxMzM5YzkxNTgzZDNj
YTYwZTMxMWRlYzYxZmExNC4uOTAzNGU2MTg3ZGI5MDM1MDAwNmU5YjBhYTRmZDYzZDg4ZTY4ZGM5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0NyeXB0by5oCkBAIC0yNywxMyArMjcsMTAgQEAKICAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBDcnlwdG9faAotI2RlZmluZSBDcnlwdG9faAorI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgotI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBBcnJheUJ1ZmZlclZpZXc7CkBAIC00MSwyNCArMzgsMjEgQEAgY2xhc3MgQXJyYXlCdWZmZXJW
aWV3OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
Ci0KLWNsYXNzIERvY3VtZW50OwotY2xhc3MgV2ViS2l0U3VidGxlQ3J5cHRvOwogY2xhc3MgU3Vi
dGxlQ3J5cHRvOworY2xhc3MgV2ViS2l0U3VidGxlQ3J5cHRvOwogCiBjbGFzcyBDcnlwdG8gOiBw
dWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIsIHB1YmxpYyBSZWZDb3VudGVkPENyeXB0
bz4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q3J5cHRvPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBDcnlwdG8oY29udGV4
dCkpOyB9CiAgICAgdmlydHVhbCB+Q3J5cHRvKCk7CiAKLSAgICB2b2lkIGdldFJhbmRvbVZhbHVl
cyhKU0M6OkFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBFeGNlcHRpb25P
cjx2b2lkPiBnZXRSYW5kb21WYWx1ZXMoSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKIAogI2lmIEVO
QUJMRShTVUJUTEVfQ1JZUFRPKQogICAgIFN1YnRsZUNyeXB0byYgc3VidGxlKCk7CiAKICAgICAv
LyBXaWxsIGJlIGRlcHJlY2F0ZWQuCi0gICAgV2ViS2l0U3VidGxlQ3J5cHRvKiB3ZWJraXRTdWJ0
bGUoRXhjZXB0aW9uQ29kZSYpOworICAgIEV4Y2VwdGlvbk9yPFdlYktpdFN1YnRsZUNyeXB0byo+
IHdlYmtpdFN1YnRsZSgpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC03Myw1ICs2NywzIEBAIHBy
aXZhdGU6CiB9OwogCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DcnlwdG8uaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uaWRsCmluZGV4IDBkMzM1
OTY2ZmVjNTNmNzRkYWMyMzVkMTVhYzUwN2YyYjAwMWJiZGUuLjI0ZmI1Y2JhOGI5MTE0MGQ3ZDk5
NTA1OGM1ZTUyYWI4ZTA4ODUzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5
cHRvLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5pZGwKQEAgLTMyLDggKzMy
LDggQEAKICAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGxTY3JpcHRFeGVjdXRpb25Db250ZXh0
LAogXSBpbnRlcmZhY2UgQ3J5cHRvIHsKICAgICBbQ29uZGl0aW9uYWw9U1VCVExFX0NSWVBUT10g
cmVhZG9ubHkgYXR0cmlidXRlIFN1YnRsZUNyeXB0byBzdWJ0bGU7Ci0gICAgW0N1c3RvbSwgTWF5
VGhyb3dMZWdhY3lFeGNlcHRpb25dIEFycmF5QnVmZmVyVmlldyBnZXRSYW5kb21WYWx1ZXMoQXJy
YXlCdWZmZXJWaWV3IGFycmF5KTsKKyAgICBbQ3VzdG9tLCBNYXlUaHJvd0V4Y2VwdGlvbl0gQXJy
YXlCdWZmZXJWaWV3IGdldFJhbmRvbVZhbHVlcyhBcnJheUJ1ZmZlclZpZXcgYXJyYXkpOwogCiAg
ICAgLy8gV2lsbCBiZSBkZXByZWNhdGVkLgotICAgIFtDb25kaXRpb25hbD1TVUJUTEVfQ1JZUFRP
LCBHZXR0ZXJNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gcmVhZG9ubHkgYXR0cmlidXRlIFdlYktp
dFN1YnRsZUNyeXB0byB3ZWJraXRTdWJ0bGU7CisgICAgW0NvbmRpdGlvbmFsPVNVQlRMRV9DUllQ
VE8sIEdldHRlck1heVRocm93RXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUgV2ViS2l0U3Vi
dGxlQ3J5cHRvIHdlYmtpdFN1YnRsZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5k
ZXggZTFlMDg4MDhiNDBhZTlmYWM5Y2E5MzQ1ZDg2ZGUwODM3ZWFmMWFjNy4uNzIwNjI5MmEzNjRi
NjE5MzcxYTI4YWY0OWI2YzcxOTgzODcxZmViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cApAQCAtNDA2LDE5ICs0MDYsNyBAQCB2b2lkIERPTVdpbmRvdzo6c2V0Q2FuU2hvd01vZGFsRGlh
bG9nT3ZlcnJpZGUoYm9vbCBhbGxvdykKIERPTVdpbmRvdzo6RE9NV2luZG93KERvY3VtZW50KiBk
b2N1bWVudCkKICAgICA6IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKGRvY3VtZW50KQogICAg
ICwgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKGRvY3VtZW50LT5mcmFtZSgpKQotICAgICwgbV9z
aG91bGRQcmludFdoZW5GaW5pc2hlZExvYWRpbmcoZmFsc2UpCi0gICAgLCBtX3N1c3BlbmRlZEZv
ckRvY3VtZW50U3VzcGVuc2lvbihmYWxzZSkKLSAgICAsIG1fbGFzdFBhZ2VTdGF0dXMoUGFnZVN0
YXR1c05vbmUpCiAgICAgLCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCi0jaWYgUExBVEZPUk0oSU9T
KQotICAgICwgbV9zY3JvbGxFdmVudExpc3RlbmVyQ291bnQoMCkKLSNlbmRpZgotI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKSB8fCBFTkFCTEUoSU9TX0dFU1RVUkVfRVZFTlRTKQotICAgICwg
bV90b3VjaEV2ZW50TGlzdGVuZXJDb3VudCgwKQotI2VuZGlmCi0jaWYgRU5BQkxFKEdBTUVQQUQp
Ci0gICAgLCBtX2dhbWVwYWRFdmVudExpc3RlbmVyQ291bnQoMCkKLSNlbmRpZgogewogICAgIEFT
U0VSVChmcmFtZSgpKTsKICAgICBBU1NFUlQoRE9NV2luZG93Ojpkb2N1bWVudCgpKTsKQEAgLTQ4
OCw3ICs0NzYsNyBAQCBSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+IERPTVdpbmRvdzo6bWF0Y2hNZWRp
YShjb25zdCBTdHJpbmcmIG1lZGlhKQogCiBQYWdlKiBET01XaW5kb3c6OnBhZ2UoKQogewotICAg
IHJldHVybiBmcmFtZSgpID8gZnJhbWUoKS0+cGFnZSgpIDogMDsKKyAgICByZXR1cm4gZnJhbWUo
KSA/IGZyYW1lKCktPnBhZ2UoKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpmcmFt
ZURlc3Ryb3llZCgpCkBAIC01MzcsNiArNTI1LDcgQEAgdm9pZCBET01XaW5kb3c6OndpbGxEZXRh
Y2hEb2N1bWVudEZyb21GcmFtZSgpCiB9CiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKKwogdm9pZCBE
T01XaW5kb3c6OmluY3JlbWVudEdhbWVwYWRFdmVudExpc3RlbmVyQ291bnQoKQogewogICAgIGlm
ICgrK21fZ2FtZXBhZEV2ZW50TGlzdGVuZXJDb3VudCA9PSAxKQpAQCAtNTUwLDYgKzUzOSw3IEBA
IHZvaWQgRE9NV2luZG93OjpkZWNyZW1lbnRHYW1lcGFkRXZlbnRMaXN0ZW5lckNvdW50KCkKICAg
ICBpZiAoIS0tbV9nYW1lcGFkRXZlbnRMaXN0ZW5lckNvdW50KQogICAgICAgICBHYW1lcGFkTWFu
YWdlcjo6c2luZ2xldG9uKCkudW5yZWdpc3RlckRPTVdpbmRvdyh0aGlzKTsKIH0KKwogI2VuZGlm
CiAKIHZvaWQgRE9NV2luZG93OjpyZWdpc3RlclByb3BlcnR5KERPTVdpbmRvd1Byb3BlcnR5KiBw
cm9wZXJ0eSkKQEAgLTYzNSwxNSArNjI1LDE4IEBAIGJvb2wgRE9NV2luZG93Ojppc0N1cnJlbnRs
eURpc3BsYXllZEluRnJhbWUoKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5U
UykKKwogQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JiBET01XaW5kb3c6OmVuc3VyZUN1c3RvbUVsZW1l
bnRSZWdpc3RyeSgpCiB7CiAgICAgaWYgKCFtX2N1c3RvbUVsZW1lbnRSZWdpc3RyeSkKICAgICAg
ICAgbV9jdXN0b21FbGVtZW50UmVnaXN0cnkgPSBDdXN0b21FbGVtZW50UmVnaXN0cnk6OmNyZWF0
ZSgqdGhpcyk7CiAgICAgcmV0dXJuICptX2N1c3RvbUVsZW1lbnRSZWdpc3RyeTsKIH0KKwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQorCiBpbnQgRE9NV2luZG93Ojpv
cmllbnRhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQpAQCAtNjUxLDEyICs2NDQs
MTMgQEAgaW50IERPTVdpbmRvdzo6b3JpZW50YXRpb24oKSBjb25zdAogCiAgICAgcmV0dXJuIG1f
ZnJhbWUtPm9yaWVudGF0aW9uKCk7CiB9CisKICNlbmRpZgogCiBTY3JlZW4qIERPTVdpbmRvdzo6
c2NyZWVuKCkgY29uc3QKIHsKICAgICBpZiAoIWlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgp
KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFt
X3NjcmVlbikKICAgICAgICAgbV9zY3JlZW4gPSBTY3JlZW46OmNyZWF0ZShtX2ZyYW1lKTsKICAg
ICByZXR1cm4gbV9zY3JlZW4uZ2V0KCk7CkBAIC02NzUsNyArNjY5LDcgQEAgQ3J5cHRvKiBET01X
aW5kb3c6OmNyeXB0bygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFdoeSBpcyBjcnlwdG8gbm90
IGF2YWlsYWJsZSB3aGVuIHRoZSB3aW5kb3cgaXMgbm90IGN1cnJlbnRseSBkaXNwbGF5ZWQgaW4g
YSBmcmFtZT8KICAgICBpZiAoIWlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgpKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFtX2NyeXB0bykK
ICAgICAgICAgbV9jcnlwdG8gPSBDcnlwdG86OmNyZWF0ZSgqZG9jdW1lbnQoKSk7CiAgICAgcmV0
dXJuIG1fY3J5cHRvLmdldCgpOwpAQCAtNjg0LDcgKzY3OCw3IEBAIENyeXB0byogRE9NV2luZG93
OjpjcnlwdG8oKSBjb25zdAogQmFyUHJvcCogRE9NV2luZG93Ojpsb2NhdGlvbmJhcigpIGNvbnN0
CiB7CiAgICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghbV9sb2NhdGlvbmJhcikK
ICAgICAgICAgbV9sb2NhdGlvbmJhciA9IEJhclByb3A6OmNyZWF0ZShtX2ZyYW1lLCBCYXJQcm9w
OjpMb2NhdGlvbmJhcik7CiAgICAgcmV0dXJuIG1fbG9jYXRpb25iYXIuZ2V0KCk7CkBAIC02OTMs
NyArNjg3LDcgQEAgQmFyUHJvcCogRE9NV2luZG93Ojpsb2NhdGlvbmJhcigpIGNvbnN0CiBCYXJQ
cm9wKiBET01XaW5kb3c6Om1lbnViYXIoKSBjb25zdAogewogICAgIGlmICghaXNDdXJyZW50bHlE
aXNwbGF5ZWRJbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBpZiAoIW1fbWVudWJhcikKICAgICAgICAgbV9tZW51YmFyID0gQmFyUHJvcDo6
Y3JlYXRlKG1fZnJhbWUsIEJhclByb3A6Ok1lbnViYXIpOwogICAgIHJldHVybiBtX21lbnViYXIu
Z2V0KCk7CkBAIC03MDIsNyArNjk2LDcgQEAgQmFyUHJvcCogRE9NV2luZG93OjptZW51YmFyKCkg
Y29uc3QKIEJhclByb3AqIERPTVdpbmRvdzo6cGVyc29uYWxiYXIoKSBjb25zdAogewogICAgIGlm
ICghaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIW1fcGVyc29uYWxiYXIpCiAgICAgICAgIG1f
cGVyc29uYWxiYXIgPSBCYXJQcm9wOjpjcmVhdGUobV9mcmFtZSwgQmFyUHJvcDo6UGVyc29uYWxi
YXIpOwogICAgIHJldHVybiBtX3BlcnNvbmFsYmFyLmdldCgpOwpAQCAtNzExLDcgKzcwNSw3IEBA
IEJhclByb3AqIERPTVdpbmRvdzo6cGVyc29uYWxiYXIoKSBjb25zdAogQmFyUHJvcCogRE9NV2lu
ZG93OjpzY3JvbGxiYXJzKCkgY29uc3QKIHsKICAgICBpZiAoIWlzQ3VycmVudGx5RGlzcGxheWVk
SW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgaWYgKCFtX3Njcm9sbGJhcnMpCiAgICAgICAgIG1fc2Nyb2xsYmFycyA9IEJhclByb3A6OmNy
ZWF0ZShtX2ZyYW1lLCBCYXJQcm9wOjpTY3JvbGxiYXJzKTsKICAgICByZXR1cm4gbV9zY3JvbGxi
YXJzLmdldCgpOwpAQCAtNzIwLDcgKzcxNCw3IEBAIEJhclByb3AqIERPTVdpbmRvdzo6c2Nyb2xs
YmFycygpIGNvbnN0CiBCYXJQcm9wKiBET01XaW5kb3c6OnN0YXR1c2JhcigpIGNvbnN0CiB7CiAg
ICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghbV9zdGF0dXNiYXIpCiAgICAgICAg
IG1fc3RhdHVzYmFyID0gQmFyUHJvcDo6Y3JlYXRlKG1fZnJhbWUsIEJhclByb3A6OlN0YXR1c2Jh
cik7CiAgICAgcmV0dXJuIG1fc3RhdHVzYmFyLmdldCgpOwpAQCAtNzI5LDcgKzcyMyw3IEBAIEJh
clByb3AqIERPTVdpbmRvdzo6c3RhdHVzYmFyKCkgY29uc3QKIEJhclByb3AqIERPTVdpbmRvdzo6
dG9vbGJhcigpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUo
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICgh
bV90b29sYmFyKQogICAgICAgICBtX3Rvb2xiYXIgPSBCYXJQcm9wOjpjcmVhdGUobV9mcmFtZSwg
QmFyUHJvcDo6VG9vbGJhcik7CiAgICAgcmV0dXJuIG1fdG9vbGJhci5nZXQoKTsKQEAgLTc0NSw3
ICs3MzksNyBAQCBQYWdlQ29uc29sZUNsaWVudCogRE9NV2luZG93Ojpjb25zb2xlKCkgY29uc3QK
IERPTUFwcGxpY2F0aW9uQ2FjaGUqIERPTVdpbmRvdzo6YXBwbGljYXRpb25DYWNoZSgpIGNvbnN0
CiB7CiAgICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghbV9hcHBsaWNhdGlvbkNh
Y2hlKQogICAgICAgICBtX2FwcGxpY2F0aW9uQ2FjaGUgPSBET01BcHBsaWNhdGlvbkNhY2hlOjpj
cmVhdGUobV9mcmFtZSk7CiAgICAgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZS5nZXQoKTsKQEAg
LTc2MSw2ICs3NTUsNyBAQCBOYXZpZ2F0b3IqIERPTVdpbmRvdzo6bmF2aWdhdG9yKCkgY29uc3QK
IH0KIAogI2lmIEVOQUJMRShXRUJfVElNSU5HKQorCiBQZXJmb3JtYW5jZSogRE9NV2luZG93Ojpw
ZXJmb3JtYW5jZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJh
bWUoKSkKQEAgLTc2OSw2ICs3NjQsNyBAQCBQZXJmb3JtYW5jZSogRE9NV2luZG93OjpwZXJmb3Jt
YW5jZSgpIGNvbnN0CiAgICAgICAgIG1fcGVyZm9ybWFuY2UgPSBQZXJmb3JtYW5jZTo6Y3JlYXRl
KCptX2ZyYW1lKTsKICAgICByZXR1cm4gbV9wZXJmb3JtYW5jZS5nZXQoKTsKIH0KKwogI2VuZGlm
CiAKIGRvdWJsZSBET01XaW5kb3c6Om5vd1RpbWVzdGFtcCgpIGNvbnN0CkBAIC03OTAsNiArNzg2
LDcgQEAgTG9jYXRpb24qIERPTVdpbmRvdzo6bG9jYXRpb24oKSBjb25zdAogfQogCiAjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKwogYm9vbCBET01XaW5kb3c6OnNob3VsZEhhdmVX
ZWJLaXROYW1lc3BhY2VGb3JXb3JsZChET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewogICAgIGlm
ICghbV9mcmFtZSkKQEAgLTgyMSw2NyArODE4LDU4IEBAIFdlYktpdE5hbWVzcGFjZSogRE9NV2lu
ZG93Ojp3ZWJraXROYW1lc3BhY2UoKSBjb25zdAogICAgICAgICBtX3dlYmtpdE5hbWVzcGFjZSA9
IFdlYktpdE5hbWVzcGFjZTo6Y3JlYXRlKCptX2ZyYW1lLCBwYWdlLT51c2VyQ29udGVudFByb3Zp
ZGVyKCkpOwogICAgIHJldHVybiBtX3dlYmtpdE5hbWVzcGFjZS5nZXQoKTsKIH0KKwogI2VuZGlm
CiAKLVN0b3JhZ2UqIERPTVdpbmRvdzo6c2Vzc2lvblN0b3JhZ2UoRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0CitFeGNlcHRpb25PcjxTdG9yYWdlKj4gRE9NV2luZG93OjpzZXNzaW9uU3RvcmFnZSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKKyAgICBhdXRvKiBkb2N1bWVudCA9IHRoaXMtPmRv
Y3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKCFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+
Y2FuQWNjZXNzU2Vzc2lvblN0b3JhZ2UoZG9jdW1lbnQtPnRvcE9yaWdpbigpKSkgewotICAgICAg
ICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlmICgh
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc1Nlc3Npb25TdG9yYWdlKGRvY3Vt
ZW50LT50b3BPcmlnaW4oKSkpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9F
UlIgfTsKIAogICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlKSB7Ci0gICAgICAgIGlmICghbV9zZXNz
aW9uU3RvcmFnZS0+YXJlYSgpLmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpIHsKLSAgICAgICAg
ICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKCFtX3Nlc3Npb25TdG9yYWdlLT5hcmVhKCkuY2FuQWNjZXNzU3RvcmFnZSht
X2ZyYW1lKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OwogICAg
ICAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFnZS5nZXQoKTsKICAgICB9CiAKLSAgICBQYWdlKiBw
YWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKKyAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBwYWdlLT5zZXNzaW9uU3RvcmFnZSgpLT5z
dG9yYWdlQXJlYShkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgaWYgKCFzdG9yYWdl
QXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZ
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlmICghc3RvcmFnZUFyZWEtPmNh
bkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNV
UklUWV9FUlIgfTsKIAogICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBTdG9yYWdlOjpjcmVhdGUobV9m
cmFtZSwgV1RGTW92ZShzdG9yYWdlQXJlYSkpOwogICAgIHJldHVybiBtX3Nlc3Npb25TdG9yYWdl
LmdldCgpOwogfQogCi1TdG9yYWdlKiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZShFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKK0V4Y2VwdGlvbk9yPFN0b3JhZ2UqPiBET01XaW5kb3c6OmxvY2FsU3Rv
cmFnZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlz
LT5kb2N1bWVudCgpOworICAgIGF1dG8qIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKICAg
ICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0xvY2FsU3RvcmFnZShudWxscHRyKSkg
ewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQorICAgIGlmICghZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0xvY2Fs
U3RvcmFnZShudWxscHRyKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VS
UiB9OwogCi0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CisgICAgYXV0byogcGFn
ZSA9IGRvY3VtZW50LT5wYWdlKCk7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBz
dXBwb3J0aW5nIGFjY2Vzcy9tb2RpZmljYXRpb24gdG8gbG9jYWwgc3RvcmFnZQogICAgIC8vIGFm
dGVyIGNhbGxpbmcgd2luZG93LmNsb3NlKCkuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNTMzMD4uCiAgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5pc0Nsb3Np
bmcoKSkgewogICAgICAgICBpZiAobV9sb2NhbFN0b3JhZ2UpIHsKLSAgICAgICAgICAgIGlmICgh
bV9sb2NhbFN0b3JhZ2UtPmFyZWEoKS5jYW5BY2Nlc3NTdG9yYWdlKG1fZnJhbWUpKSB7Ci0gICAg
ICAgICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1fbG9jYWxTdG9yYWdlLT5h
cmVhKCkuY2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CiAgICAgICAgICAgICByZXR1cm4gbV9sb2NhbFN0
b3JhZ2UuZ2V0KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC04OTcsMTkgKzg4NSwxNyBAQCBTdG9y
YWdlKiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIAog
ICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBwYWdlLT5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoKS5s
b2NhbFN0b3JhZ2VBcmVhKCpkb2N1bWVudCk7CiAKLSAgICBpZiAoIXN0b3JhZ2VBcmVhLT5jYW5B
Y2Nlc3NTdG9yYWdlKG1fZnJhbWUpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgaWYgKCFzdG9yYWdlQXJlYS0+Y2FuQWNj
ZXNzU3RvcmFnZShtX2ZyYW1lKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZ
X0VSUiB9OwogCiAgICAgbV9sb2NhbFN0b3JhZ2UgPSBTdG9yYWdlOjpjcmVhdGUobV9mcmFtZSwg
V1RGTW92ZShzdG9yYWdlQXJlYSkpOwogICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZS5nZXQoKTsK
IH0KIAotdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBtZXNzYWdlLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mJiBwb3J0cywg
Y29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyYgc291cmNlLCBFeGNlcHRpb25D
b2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoUmVmPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBtZXNzYWdlLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0
Pj4mJiBwb3J0cywgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyYgc291cmNl
KQogewogICAgIGlmICghaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIERvY3VtZW50KiBzb3VyY2VEb2N1bWVu
dCA9IHNvdXJjZS5kb2N1bWVudCgpOwogCkBAIC05MTgsMjcgKzkwNCwyNiBAQCB2b2lkIERPTVdp
bmRvdzo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3Nh
Z2UsIFZlY3RvcjxSZQogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gdGFyZ2V0OwogICAgIGlm
ICh0YXJnZXRPcmlnaW4gPT0gIi8iKSB7CiAgICAgICAgIGlmICghc291cmNlRG9jdW1lbnQpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB0YXJn
ZXQgPSBzb3VyY2VEb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKICAgICB9IGVsc2UgaWYgKHRh
cmdldE9yaWdpbiAhPSAiKiIpIHsKICAgICAgICAgdGFyZ2V0ID0gU2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZUZyb21TdHJpbmcodGFyZ2V0T3JpZ2luKTsKICAgICAgICAgLy8gSXQgZG9lc24ndCBtYWtl
IHNlbnNlIHRhcmdldCBhIHBvc3RNZXNzYWdlIGF0IGEgdW5pcXVlIG9yaWdpbgogICAgICAgICAv
LyBiZWNhdXNlIHRoZXJlJ3Mgbm8gd2F5IHRvIHJlcHJlc2VudCBhIHVuaXF1ZSBvcmlnaW4gaW4g
YSBzdHJpbmcuCi0gICAgICAgIGlmICh0YXJnZXQtPmlzVW5pcXVlKCkpIHsKLSAgICAgICAgICAg
IGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAg
ICBpZiAodGFyZ2V0LT5pc1VuaXF1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFNZTlRBWF9FUlIgfTsKICAgICB9CiAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBh
dXRvIGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMoV1RGTW92ZShwb3J0
cyksIGVjKTsKICAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IGVjIH07CiAKICAgICAvLyBDYXB0dXJlIHRoZSBzb3VyY2Ugb2YgdGhlIG1lc3Nh
Z2UuICBXZSBuZWVkIHRvIGRvIHRoaXMgc3luY2hyb25vdXNseQogICAgIC8vIGluIG9yZGVyIHRv
IGNhcHR1cmUgdGhlIHNvdXJjZSBvZiB0aGUgbWVzc2FnZSBjb3JyZWN0bHkuCiAgICAgaWYgKCFz
b3VyY2VEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0cmluZyBzb3VyY2VPcmlnaW4g
PSBzb3VyY2VEb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICBhdXRvIHNvdXJjZU9yaWdpbiA9IHNvdXJjZURvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpLT50b1N0cmluZygpOwogCiAgICAgLy8gQ2FwdHVyZSBzdGFjayB0cmFjZSBv
bmx5IHdoZW4gaW5zcGVjdG9yIGZyb250LWVuZCBpcyBsb2FkZWQgYXMgaXQgbWF5IGJlIHRpbWUg
Y29uc3VtaW5nLgogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrVHJhY2U7CkBAIC05
NDYsOCArOTMxLDEwIEBAIHZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgVmVjdG9yPFJlCiAgICAgICAgIHN0YWNrVHJh
Y2UgPSBjcmVhdGVTY3JpcHRDYWxsU3RhY2soSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjdXJyZW50
U3RhdGUoKSwgU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKTsKIAog
ICAgIC8vIFNjaGVkdWxlIHRoZSBtZXNzYWdlLgotICAgIFBvc3RNZXNzYWdlVGltZXIqIHRpbWVy
ID0gbmV3IFBvc3RNZXNzYWdlVGltZXIoKnRoaXMsIG1lc3NhZ2UsIHNvdXJjZU9yaWdpbiwgc291
cmNlLCBXVEZNb3ZlKGNoYW5uZWxzKSwgV1RGTW92ZSh0YXJnZXQpLCBXVEZNb3ZlKHN0YWNrVHJh
Y2UpKTsKKyAgICBhdXRvKiB0aW1lciA9IG5ldyBQb3N0TWVzc2FnZVRpbWVyKCp0aGlzLCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4geyBXVEZNb3ZlKG1lc3NhZ2UpIH0sIHNvdXJj
ZU9yaWdpbiwgc291cmNlLCBXVEZNb3ZlKGNoYW5uZWxzKSwgV1RGTW92ZSh0YXJnZXQpLCBXVEZN
b3ZlKHN0YWNrVHJhY2UpKTsKICAgICB0aW1lci0+c3RhcnRPbmVTaG90KDApOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJGaXJlZChQb3N0
TWVzc2FnZVRpbWVyJiB0aW1lcikKQEAgLTk4Niw3ICs5NzMsNyBAQCBET01TZWxlY3Rpb24qIERP
TVdpbmRvdzo6Z2V0U2VsZWN0aW9uKCkKIEVsZW1lbnQqIERPTVdpbmRvdzo6ZnJhbWVFbGVtZW50
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBtX2ZyYW1lLT5vd25lckVsZW1lbnQoKTsK
IH0KQEAgLTEzNjEsNyArMTM0OCw3IEBAIHZvaWQgRE9NV2luZG93OjpzZXREZWZhdWx0U3RhdHVz
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogRE9NV2luZG93KiBET01XaW5kb3c6OnNlbGYoKSBjb25z
dAogewogICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygp
OwogfQpAQCAtMTM2OSwxMSArMTM1NiwxMSBAQCBET01XaW5kb3cqIERPTVdpbmRvdzo6c2VsZigp
IGNvbnN0CiBET01XaW5kb3cqIERPTVdpbmRvdzo6b3BlbmVyKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fZnJhbWUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIEZyYW1lKiBvcGVuZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS5vcGVuZXIoKTsKICAgICBpZiAo
IW9wZW5lcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgcmV0dXJuIG9wZW5lci0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCk7CiB9CkBAIC0xMzgxLDcg
KzEzNjgsNyBAQCBET01XaW5kb3cqIERPTVdpbmRvdzo6b3BlbmVyKCkgY29uc3QKIERPTVdpbmRv
dyogRE9NV2luZG93OjpwYXJlbnQoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRnJhbWUqIHBhcmVu
dCA9IG1fZnJhbWUtPnRyZWUoKS5wYXJlbnQoKTsKICAgICBpZiAocGFyZW50KQpAQCAtMTM5Mywx
MSArMTM4MCwxMSBAQCBET01XaW5kb3cqIERPTVdpbmRvdzo6cGFyZW50KCkgY29uc3QKIERPTVdp
bmRvdyogRE9NV2luZG93Ojp0b3AoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUGFnZSogcGFnZSA9
IG1fZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBtX2ZyYW1lLT50cmVlKCkudG9wKCku
ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCk7CiB9CkBAIC0xNDE3LDEzICsxNDA0LDEzIEBAIFJlZlB0
cjxTdHlsZU1lZGlhPiBET01XaW5kb3c6OnN0eWxlTWVkaWEoKSBjb25zdAogICAgIHJldHVybiBt
X21lZGlhOwogfQogCi1SZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gRE9NV2luZG93OjpnZXRD
b21wdXRlZFN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvRWx0KSBj
b25zdAorUmVmPENTU1N0eWxlRGVjbGFyYXRpb24+IERPTVdpbmRvdzo6Z2V0Q29tcHV0ZWRTdHls
ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0VsdCkgY29uc3QKIHsKICAg
ICByZXR1cm4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCwgZmFs
c2UsIHBzZXVkb0VsdCk7CiB9CiAKIC8vIEZJWE1FOiBEcm9wIHRoaXMgb3ZlcmxvYWQgb25jZSA8
cmRhcjovL3Byb2JsZW0vMjgwMTY3Nzg+IGhhcyBiZWVuIGZpeGVkLgotUmVmUHRyPENTU1N0eWxl
RGVjbGFyYXRpb24+IERPTVdpbmRvdzo6Z2V0Q29tcHV0ZWRTdHlsZShEb2N1bWVudCYsIGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8UmVmUHRyPENTU1N0eWxl
RGVjbGFyYXRpb24+PiBET01XaW5kb3c6OmdldENvbXB1dGVkU3R5bGUoRG9jdW1lbnQmLCBjb25z
dCBTdHJpbmcmKQogewogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoTWFjQXBwbGljYXRpb246
OmlzQXBwU3RvcmUoKSkgewpAQCAtMTQzMSw4ICsxNDE4LDcgQEAgUmVmUHRyPENTU1N0eWxlRGVj
bGFyYXRpb24+IERPTVdpbmRvdzo6Z2V0Q29tcHV0ZWRTdHlsZShEb2N1bWVudCYsIGNvbnN0IFN0
cmluZyYKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogI2VuZGlmCi0gICAgZWMgPSBU
eXBlRXJyb3I7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5
cGVFcnJvciB9OwogfQogCiBSZWZQdHI8Q1NTUnVsZUxpc3Q+IERPTVdpbmRvdzo6Z2V0TWF0Y2hl
ZENTU1J1bGVzKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvRWxlbWVudCwg
Ym9vbCBhdXRob3JPbmx5KSBjb25zdApAQCAtMTYzMSwxMyArMTYxNywxMSBAQCB2b2lkIERPTVdp
bmRvdzo6cmVzaXplVG8oZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgY29uc3QKICAgICBwYWdl
LT5jaHJvbWUoKS5zZXRXaW5kb3dSZWN0KGFkanVzdFdpbmRvd1JlY3QocGFnZSwgdXBkYXRlKSk7
CiB9CiAKLWludCBET01XaW5kb3c6OnNldFRpbWVvdXQoc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxl
ZEFjdGlvbj4gYWN0aW9uLCBpbnQgdGltZW91dCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRp
b25PcjxpbnQ+IERPTVdpbmRvdzo6c2V0VGltZW91dChzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVk
QWN0aW9uPiBhY3Rpb24sIGludCB0aW1lb3V0KQogewotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0
KSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwotICAgICAgICByZXR1cm4gLTE7
Ci0gICAgfQorICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uQ29kZSB7IElOVkFMSURf
QUNDRVNTX0VSUiB9OwogICAgIHJldHVybiBET01UaW1lcjo6aW5zdGFsbCgqY29udGV4dCwgV1RG
TW92ZShhY3Rpb24pLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKHRpbWVvdXQpLCB0cnVlKTsK
IH0KIApAQCAtMTY2NSwxMyArMTY0OSwxMSBAQCB2b2lkIERPTVdpbmRvdzo6Y2xlYXJUaW1lb3V0
KGludCB0aW1lb3V0SWQpCiAgICAgRE9NVGltZXI6OnJlbW92ZUJ5SWQoKmNvbnRleHQsIHRpbWVv
dXRJZCk7CiB9CiAKLWludCBET01XaW5kb3c6OnNldEludGVydmFsKHN0ZDo6dW5pcXVlX3B0cjxT
Y2hlZHVsZWRBY3Rpb24+IGFjdGlvbiwgaW50IHRpbWVvdXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
RXhjZXB0aW9uT3I8aW50PiBET01XaW5kb3c6OnNldEludGVydmFsKHN0ZDo6dW5pcXVlX3B0cjxT
Y2hlZHVsZWRBY3Rpb24+IGFjdGlvbiwgaW50IHRpbWVvdXQpCiB7Ci0gICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAo
IWNvbnRleHQpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgIHJl
dHVybiAtMTsKLSAgICB9CisgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb25Db2RlIHsg
SU5WQUxJRF9BQ0NFU1NfRVJSIH07CiAgICAgcmV0dXJuIERPTVRpbWVyOjppbnN0YWxsKCpjb250
ZXh0LCBXVEZNb3ZlKGFjdGlvbiksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHModGltZW91dCks
IGZhbHNlKTsKIH0KIApAQCAtMTY4NCw2ICsxNjY2LDcgQEAgdm9pZCBET01XaW5kb3c6OmNsZWFy
SW50ZXJ2YWwoaW50IHRpbWVvdXRJZCkKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkKKwogaW50IERPTVdpbmRvdzo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKFBhc3NSZWZQ
dHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IGNhbGxiYWNrKQogewogICAgIGNhbGxi
YWNrLT5tX3VzZUxlZ2FjeVRpbWVCYXNlID0gZmFsc2U7CkBAIC0xNzA1LDE2ICsxNjg4LDE3IEBA
IHZvaWQgRE9NV2luZG93OjpjYW5jZWxBbmltYXRpb25GcmFtZShpbnQgaWQpCiAgICAgaWYgKERv
Y3VtZW50KiBkID0gZG9jdW1lbnQoKSkKICAgICAgICAgZC0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUo
aWQpOwogfQorCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZGlkQWRkU3RvcmFnZUV2ZW50TGlzdGVu
ZXIoRE9NV2luZG93KiB3aW5kb3cpCitzdGF0aWMgdm9pZCBkaWRBZGRTdG9yYWdlRXZlbnRMaXN0
ZW5lcihET01XaW5kb3cmIHdpbmRvdykKIHsKICAgICAvLyBDcmVhdGluZyB0aGVzZSBXZWJDb3Jl
OjpTdG9yYWdlIG9iamVjdHMgaW5mb3JtcyB0aGUgc3lzdGVtIHRoYXQgd2UnZCBsaWtlIHRvIHJl
Y2VpdmUKICAgICAvLyBub3RpZmljYXRpb25zIGFib3V0IHN0b3JhZ2UgZXZlbnRzIHRoYXQgbWln
aHQgYmUgdHJpZ2dlcmVkIGluIG90aGVyIHByb2Nlc3Nlcy4gUmF0aGVyCiAgICAgLy8gdGhhbiBz
dWJzY3JpYmUgdG8gdGhlc2Ugbm90aWZpY2F0aW9ucyBleHBsaWNpdGx5LCB3ZSBzdWJzY3JpYmUg
dG8gdGhlbSBpbXBsaWNpdGx5IHRvCiAgICAgLy8gc2ltcGxpZnkgdGhlIHdvcmsgZG9uZSBieSB0
aGUgc3lzdGVtLiAKLSAgICB3aW5kb3ctPmxvY2FsU3RvcmFnZShJR05PUkVfRVhDRVBUSU9OKTsK
LSAgICB3aW5kb3ctPnNlc3Npb25TdG9yYWdlKElHTk9SRV9FWENFUFRJT04pOworICAgIHdpbmRv
dy5sb2NhbFN0b3JhZ2UoKTsKKyAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UoKTsKIH0KIAogYm9v
bCBET01XaW5kb3c6OmlzU2FtZVNlY3VyaXR5T3JpZ2luQXNNYWluRnJhbWUoKSBjb25zdApAQCAt
MTc0NSw3ICsxNzI5LDcgQEAgYm9vbCBET01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZjxFdmVudExpc3RlbmUKICAgICAgICAgZWxzZSBp
ZiAoZXZlbnROYW1lcygpLmlzVG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKICAgICAgICAgICAg
IGRvY3VtZW50LT5kaWRBZGRUb3VjaEV2ZW50SGFuZGxlcigqZG9jdW1lbnQpOwogICAgICAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCkKLSAgICAgICAg
ICAgIGRpZEFkZFN0b3JhZ2VFdmVudExpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgZGlkQWRk
U3RvcmFnZUV2ZW50TGlzdGVuZXIoKnRoaXMpOwogICAgIH0KIAogICAgIGlmIChldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KQpAQCAtMTgwNiw2ICsxNzkwLDcgQEAgYm9vbCBE
T01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IFJlZjxFdmVudExpc3RlbmUKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKKwogdm9pZCBET01XaW5k
b3c6OmluY3JlbWVudFNjcm9sbEV2ZW50TGlzdGVuZXJzQ291bnQoKQogewogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7CkBAIC0xODI1LDYgKzE4MTAsNyBAQCB2b2lk
IERPTVdpbmRvdzo6ZGVjcmVtZW50U2Nyb2xsRXZlbnRMaXN0ZW5lcnNDb3VudCgpCiAgICAgICAg
ICAgICBmcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5zZXROZWVkc1Njcm9sbE5vdGlm
aWNhdGlvbnMoZnJhbWUsIGZhbHNlKTsKICAgICB9CiB9CisKICNlbmRpZgogCiB2b2lkIERPTVdp
bmRvdzo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKQpAQCAtMTkzOCwxMyArMTkyNCwx
MyBAQCBib29sIERPTVdpbmRvdzo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQsIEV2ZW50VGFy
Z2V0KiB0YXJnZXQpCiAgICAgLy8gPGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBw
cy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2hpc3RvcnkuaHRtbCNldmVudC1wYWdlc2hvdz4uCiAg
ICAgaWYgKGV2ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gUGFnZVRyYW5zaXRpb25FdmVudEludGVy
ZmFjZVR5cGUpIHsKICAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucGFn
ZXNob3dFdmVudCkgewotICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFnZVN0
YXR1c1Nob3duKQorICAgICAgICAgICAgaWYgKG1fbGFzdFBhZ2VTdGF0dXMgPT0gUGFnZVN0YXR1
czo6U2hvd24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEV2ZW50IHdhcyBwcmV2
aW91c2x5IGRpc3BhdGNoZWQ7IGRvIG5vdCBmaXJlIGEgZHVwbGljYXRlIGV2ZW50LgotICAgICAg
ICAgICAgbV9sYXN0UGFnZVN0YXR1cyA9IFBhZ2VTdGF0dXNTaG93bjsKKyAgICAgICAgICAgIG1f
bGFzdFBhZ2VTdGF0dXMgPSBQYWdlU3RhdHVzOjpTaG93bjsKICAgICAgICAgfSBlbHNlIGlmIChl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQpIHsKLSAgICAgICAgICAg
IGlmIChtX2xhc3RQYWdlU3RhdHVzID09IFBhZ2VTdGF0dXNIaWRkZW4pCisgICAgICAgICAgICBp
ZiAobV9sYXN0UGFnZVN0YXR1cyA9PSBQYWdlU3RhdHVzOjpIaWRkZW4pCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIEV2ZW50IHdhcyBwcmV2aW91c2x5IGRpc3BhdGNoZWQ7IGRvIG5v
dCBmaXJlIGEgZHVwbGljYXRlIGV2ZW50LgotICAgICAgICAgICAgbV9sYXN0UGFnZVN0YXR1cyA9
IFBhZ2VTdGF0dXNIaWRkZW47CisgICAgICAgICAgICBtX2xhc3RQYWdlU3RhdHVzID0gUGFnZVN0
YXR1czo6SGlkZGVuOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApp
bmRleCBjZGIyMzI5NTEwNWU4Y2JiN2IyZWY1YmQ2ODNlNDc2MzNmMWU3NGY5Li42Yjk2NWRmNjdh
MThjYmJhODgwZTdkODJkY2MzODI1YzJlN2Y4NjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJCYXNlNjRVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKICNpbmNsdWRlICJGcmFtZURlc3RydWN0aW9uT2Jz
ZXJ2ZXIuaCIKICNpbmNsdWRlICJTY3JvbGxUb09wdGlvbnMuaCIKICNpbmNsdWRlICJTdXBwbGVt
ZW50YWJsZS5oIgpAQCAtNDUsMzk3ICs0NiwzOTEgQEAgY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBCYXJQcm9wOwotICAgIGNsYXNzIENT
U1J1bGVMaXN0OwotICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247Ci0gICAgY2xhc3MgQ3J5
cHRvOwotICAgIGNsYXNzIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTsKLSAgICBjbGFzcyBET01BcHBs
aWNhdGlvbkNhY2hlOwotICAgIGNsYXNzIERPTVNlbGVjdGlvbjsKLSAgICBjbGFzcyBET01VUkw7
Ci0gICAgY2xhc3MgRE9NV2luZG93UHJvcGVydHk7Ci0gICAgY2xhc3MgRE9NV3JhcHBlcldvcmxk
OwotICAgIGNsYXNzIERhdGFiYXNlOwotICAgIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7Ci0gICAg
Y2xhc3MgRG9jdW1lbnQ7Ci0gICAgY2xhc3MgRWxlbWVudDsKLSAgICBjbGFzcyBFdmVudExpc3Rl
bmVyOwotICAgIGNsYXNzIEZsb2F0UmVjdDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBI
aXN0b3J5OwotICAgIGNsYXNzIElEQkZhY3Rvcnk7Ci0gICAgY2xhc3MgTG9jYXRpb247Ci0gICAg
Y2xhc3MgTWVkaWFRdWVyeUxpc3Q7Ci0gICAgY2xhc3MgTWVzc2FnZUV2ZW50OwotICAgIGNsYXNz
IE5hdmlnYXRvcjsKLSAgICBjbGFzcyBOb2RlOwotICAgIGNsYXNzIFBhZ2U7Ci0gICAgY2xhc3Mg
UGFnZUNvbnNvbGVDbGllbnQ7Ci0gICAgY2xhc3MgUGVyZm9ybWFuY2U7Ci0gICAgY2xhc3MgUG9z
dE1lc3NhZ2VUaW1lcjsKLSAgICBjbGFzcyBTY2hlZHVsZWRBY3Rpb247Ci0gICAgY2xhc3MgU2Ny
ZWVuOwotICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwotICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTsKLSAgICBjbGFzcyBTdG9yYWdlOwotICAgIGNsYXNzIFN0eWxlTWVkaWE7Ci0gICAg
Y2xhc3MgV2ViS2l0TmFtZXNwYWNlOwotICAgIGNsYXNzIFdlYktpdFBvaW50OworY2xhc3MgQmFy
UHJvcDsKK2NsYXNzIENTU1J1bGVMaXN0OworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2Ns
YXNzIENyeXB0bzsKK2NsYXNzIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTsKK2NsYXNzIERPTUFwcGxp
Y2F0aW9uQ2FjaGU7CitjbGFzcyBET01TZWxlY3Rpb247CitjbGFzcyBET01VUkw7CitjbGFzcyBE
T01XaW5kb3dQcm9wZXJ0eTsKK2NsYXNzIERPTVdyYXBwZXJXb3JsZDsKK2NsYXNzIERhdGFiYXNl
OworY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRWxlbWVu
dDsKK2NsYXNzIEV2ZW50TGlzdGVuZXI7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGcmFtZTsK
K2NsYXNzIEhpc3Rvcnk7CitjbGFzcyBJREJGYWN0b3J5OworY2xhc3MgTG9jYXRpb247CitjbGFz
cyBNZWRpYVF1ZXJ5TGlzdDsKK2NsYXNzIE1lc3NhZ2VFdmVudDsKK2NsYXNzIE5hdmlnYXRvcjsK
K2NsYXNzIE5vZGU7CitjbGFzcyBQYWdlOworY2xhc3MgUGFnZUNvbnNvbGVDbGllbnQ7CitjbGFz
cyBQZXJmb3JtYW5jZTsKK2NsYXNzIFBvc3RNZXNzYWdlVGltZXI7CitjbGFzcyBSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVDYWxsYmFjazsKK2NsYXNzIFNjaGVkdWxlZEFjdGlvbjsKK2NsYXNzIFNjcmVl
bjsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwor
Y2xhc3MgU3RvcmFnZTsKK2NsYXNzIFN0eWxlTWVkaWE7CitjbGFzcyBXZWJLaXROYW1lc3BhY2U7
CitjbGFzcyBXZWJLaXRQb2ludDsKKworc3RydWN0IFdpbmRvd0ZlYXR1cmVzOworCitlbnVtIFNl
dExvY2F0aW9uTG9ja2luZyB7IExvY2tIaXN0b3J5QmFzZWRPbkdlc3R1cmVTdGF0ZSwgTG9ja0hp
c3RvcnlBbmRCYWNrRm9yd2FyZExpc3QgfTsKKworLy8gRklYTUU6IERPTVdpbmRvdyBzaG91bGRu
J3Qgc3ViY2xhc3MgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyIGFuZCBpbnN0ZWFkIHNob3VsZCBn
ZXQgdG8gRnJhbWUgdmlhIGl0cyBEb2N1bWVudC4KK2NsYXNzIERPTVdpbmRvdyBmaW5hbAorICAg
IDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV2luZG93PgorICAgICwgcHVibGljIEV2ZW50VGFyZ2V0
V2l0aElubGluZURhdGEKKyAgICAsIHB1YmxpYyBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcgor
ICAgICwgcHVibGljIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcgorICAgICwgcHVibGljIEJhc2U2
NFV0aWxpdGllcworICAgICwgcHVibGljIFN1cHBsZW1lbnRhYmxlPERPTVdpbmRvdz4geworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8RE9NV2luZG93PiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IERPTVdpbmRvdyhkb2N1bWVudCkpOyB9CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+RE9NV2luZG93KCk7CisKKyAgICAvLyBJbiBzb21lIHJhcmUg
Y2FzZXMsIHdlJ2xsIHJldXNlIGEgRE9NV2luZG93IGZvciBhIG5ldyBEb2N1bWVudC4gRm9yIGV4
YW1wbGUsCisgICAgLy8gd2hlbiBhIHNjcmlwdCBjYWxscyB3aW5kb3cub3BlbigiLi4uIiksIHRo
ZSBicm93c2VyIGdpdmVzIEphdmFTY3JpcHQgYSB3aW5kb3cKKyAgICAvLyBzeW5jaHJvbm91c2x5
IGJ1dCBraWNrcyBvZmYgdGhlIGxvYWQgaW4gdGhlIHdpbmRvdyBhc3luY2hyb25vdXNseS4gV2Vi
IHNpdGVzCisgICAgLy8gZXhwZWN0IHRoYXQgbW9kaWZpY2F0aW9ucyB0aGF0IHRoZXkgbWFrZSB0
byB0aGUgd2luZG93IG9iamVjdCBzeW5jaHJvbm91c2x5CisgICAgLy8gd29uJ3QgYmUgYmxvd24g
YXdheSB3aGVuIHRoZSBuZXR3b3JrIGxvYWQgY29tbWl0cy4gVG8gbWFrZSB0aGF0IGhhcHBlbiwg
d2UKKyAgICAvLyAic2VjdXJlbHkgdHJhbnNpdGlvbiIgdGhlIGV4aXN0aW5nIERPTVdpbmRvdyB0
byB0aGUgRG9jdW1lbnQgdGhhdCByZXN1bHRzIGZyb20KKyAgICAvLyB0aGUgbmV0d29yayBsb2Fk
LiBTZWUgYWxzbyBTZWN1cml0eUNvbnRleHQ6OmlzU2VjdXJlVHJhbnNpdGlvblRvLgorICAgIHZv
aWQgZGlkU2VjdXJlVHJhbnNpdGlvblRvKERvY3VtZW50Kik7CisKKyAgICBFdmVudFRhcmdldElu
dGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIERP
TVdpbmRvd0V2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBD
b250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CisK
KyAgICBET01XaW5kb3cqIHRvRE9NV2luZG93KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlZ2lz
dGVyUHJvcGVydHkoRE9NV2luZG93UHJvcGVydHkqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJQcm9w
ZXJ0eShET01XaW5kb3dQcm9wZXJ0eSopOworCisgICAgdm9pZCByZXNldFVubGVzc1N1c3BlbmRl
ZEZvckRvY3VtZW50U3VzcGVuc2lvbigpOworICAgIHZvaWQgc3VzcGVuZEZvckRvY3VtZW50U3Vz
cGVuc2lvbigpOworICAgIHZvaWQgcmVzdW1lRnJvbURvY3VtZW50U3VzcGVuc2lvbigpOworCisg
ICAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0PiBtYXRjaE1lZGlhKGNvbnN0IFN0cmluZyYpOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgcGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJzKCkg
Y29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkaXNwYXRjaEFsbFBlbmRp
bmdCZWZvcmVVbmxvYWRFdmVudHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBk
aXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMoKTsKKworICAgIHN0YXRpYyBGbG9hdFJlY3Qg
YWRqdXN0V2luZG93UmVjdChQYWdlKiwgY29uc3QgRmxvYXRSZWN0JiBwZW5kaW5nQ2hhbmdlcyk7
CisKKyAgICBib29sIGFsbG93UG9wVXAoKTsgLy8gQ2FsbCBvbiBmaXJzdCB3aW5kb3csIG5vdCB0
YXJnZXQgd2luZG93LgorICAgIHN0YXRpYyBib29sIGFsbG93UG9wVXAoRnJhbWUqIGZpcnN0RnJh
bWUpOworICAgIHN0YXRpYyBib29sIGNhblNob3dNb2RhbERpYWxvZyhjb25zdCBGcmFtZSopOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2FuU2hvd01vZGFsRGlhbG9nT3ZlcnJpZGUoYm9v
bCk7CisKKyAgICBTY3JlZW4qIHNjcmVlbigpIGNvbnN0OworICAgIEhpc3RvcnkqIGhpc3Rvcnko
KSBjb25zdDsKKyAgICBDcnlwdG8qIGNyeXB0bygpIGNvbnN0OworICAgIEJhclByb3AqIGxvY2F0
aW9uYmFyKCkgY29uc3Q7CisgICAgQmFyUHJvcCogbWVudWJhcigpIGNvbnN0OworICAgIEJhclBy
b3AqIHBlcnNvbmFsYmFyKCkgY29uc3Q7CisgICAgQmFyUHJvcCogc2Nyb2xsYmFycygpIGNvbnN0
OworICAgIEJhclByb3AqIHN0YXR1c2JhcigpIGNvbnN0OworICAgIEJhclByb3AqIHRvb2xiYXIo
KSBjb25zdDsKKyAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIGNvbnN0OworICAgIE5hdmlnYXRv
ciogY2xpZW50SW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBuYXZpZ2F0b3IoKTsgfQorCisg
ICAgTG9jYXRpb24qIGxvY2F0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMb2NhdGlvbihET01X
aW5kb3cmIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93JiBmaXJzdFdpbmRvdywgY29uc3QgU3RyaW5n
JiBsb2NhdGlvbiwgU2V0TG9jYXRpb25Mb2NraW5nID0gTG9ja0hpc3RvcnlCYXNlZE9uR2VzdHVy
ZVN0YXRlKTsKKworICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCk7CisKKyAgICBFbGVt
ZW50KiBmcmFtZUVsZW1lbnQoKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZm9j
dXMoYm9vbCBhbGxvd0ZvY3VzID0gZmFsc2UpOworICAgIHZvaWQgZm9jdXMoRE9NV2luZG93JiBj
YWxsZXJXaW5kb3cpOworICAgIHZvaWQgYmx1cigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xvc2UoKTsKKyAgICB2b2lkIGNsb3NlKERvY3VtZW50Jik7CisgICAgdm9pZCBwcmludCgpOwor
ICAgIHZvaWQgc3RvcCgpOwogCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQot
ICAgIGNsYXNzIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOwotI2VuZGlmCi0KLSAgICBz
dHJ1Y3QgV2luZG93RmVhdHVyZXM7Ci0KLSAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwot
Ci0gICAgZW51bSBTZXRMb2NhdGlvbkxvY2tpbmcgeyBMb2NrSGlzdG9yeUJhc2VkT25HZXN0dXJl
U3RhdGUsIExvY2tIaXN0b3J5QW5kQmFja0ZvcndhcmRMaXN0IH07Ci0KLSAgICAvLyBGSVhNRTog
RE9NV2luZG93IHNob3VsZG4ndCBzdWJjbGFzcyBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIgYW5k
IGluc3RlYWQgc2hvdWxkIGdldCB0byBGcmFtZSB2aWEgaXRzIERvY3VtZW50LgotICAgIGNsYXNz
IERPTVdpbmRvdyBmaW5hbAotICAgICAgICA6IHB1YmxpYyBSZWZDb3VudGVkPERPTVdpbmRvdz4K
LSAgICAgICAgLCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YQotICAgICAgICAsIHB1
YmxpYyBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcgotICAgICAgICAsIHB1YmxpYyBGcmFtZURl
c3RydWN0aW9uT2JzZXJ2ZXIKLSAgICAgICAgLCBwdWJsaWMgQmFzZTY0VXRpbGl0aWVzCi0gICAg
ICAgICwgcHVibGljIFN1cHBsZW1lbnRhYmxlPERPTVdpbmRvdz4gewotICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFJlZjxET01XaW5kb3c+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NV2luZG93KGRvY3VtZW50KSk7IH0KLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+RE9NV2luZG93KCk7Ci0KLSAgICAgICAgLy8gSW4gc29tZSBy
YXJlIGNhc2VzLCB3ZSdsbCByZS11c2VkIGEgRE9NV2luZG93IGZvciBhIG5ldyBEb2N1bWVudC4g
Rm9yIGV4YW1wbGUsCi0gICAgICAgIC8vIHdoZW4gYSBzY3JpcHQgY2FsbHMgd2luZG93Lm9wZW4o
Ii4uLiIpLCB0aGUgYnJvd3NlciBnaXZlcyBKYXZhU2NyaXB0IGEgd2luZG93Ci0gICAgICAgIC8v
IHN5bmNocm9ub3VzbHkgYnV0IGtpY2tzIG9mZiB0aGUgbG9hZCBpbiB0aGUgd2luZG93IGFzeW5j
aHJvbm91c2x5LiBXZWIgc2l0ZXMKLSAgICAgICAgLy8gZXhwZWN0IHRoYXQgbW9kaWZpY2F0aW9u
cyB0aGF0IHRoZXkgbWFrZSB0byB0aGUgd2luZG93IG9iamVjdCBzeW5jaHJvbm91c2x5Ci0gICAg
ICAgIC8vIHdvbid0IGJlIGJsb3duIGF3YXkgd2hlbiB0aGUgbmV0d29yayBsb2FkIGNvbW1pdHMu
IFRvIG1ha2UgdGhhdCBoYXBwZW4sIHdlCi0gICAgICAgIC8vICJzZWN1cmVseSB0cmFuc2l0aW9u
IiB0aGUgZXhpc3RpbmcgRE9NV2luZG93IHRvIHRoZSBEb2N1bWVudCB0aGF0IHJlc3VsdHMgZnJv
bQotICAgICAgICAvLyB0aGUgbmV0d29yayBsb2FkLiBTZWUgYWxzbyBTZWN1cml0eUNvbnRleHQ6
OmlzU2VjdXJlVHJhbnNpdGlvblRvLgotICAgICAgICB2b2lkIGRpZFNlY3VyZVRyYW5zaXRpb25U
byhEb2N1bWVudCopOwotCi0gICAgICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRE9NV2luZG93RXZlbnRUYXJnZXRJ
bnRlcmZhY2VUeXBlOyB9Ci0gICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb250ZXh0RGVzdHJ1Y3Rp
b25PYnNlcnZlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9Ci0KLSAgICAgICAgRE9NV2lu
ZG93KiB0b0RPTVdpbmRvdygpIG92ZXJyaWRlOwotCi0gICAgICAgIHZvaWQgcmVnaXN0ZXJQcm9w
ZXJ0eShET01XaW5kb3dQcm9wZXJ0eSopOwotICAgICAgICB2b2lkIHVucmVnaXN0ZXJQcm9wZXJ0
eShET01XaW5kb3dQcm9wZXJ0eSopOwotCi0gICAgICAgIHZvaWQgcmVzZXRVbmxlc3NTdXNwZW5k
ZWRGb3JEb2N1bWVudFN1c3BlbnNpb24oKTsKLSAgICAgICAgdm9pZCBzdXNwZW5kRm9yRG9jdW1l
bnRTdXNwZW5zaW9uKCk7Ci0gICAgICAgIHZvaWQgcmVzdW1lRnJvbURvY3VtZW50U3VzcGVuc2lv
bigpOwotCi0gICAgICAgIFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdD4gbWF0Y2hNZWRpYShjb25zdCBT
dHJpbmcmKTsKLQotICAgICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBwZW5kaW5nVW5sb2Fk
RXZlbnRMaXN0ZW5lcnMoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8RE9NV2lu
ZG93PiBvcGVuKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGZy
YW1lTmFtZSwgY29uc3QgU3RyaW5nJiB3aW5kb3dGZWF0dXJlc1N0cmluZywgRE9NV2luZG93JiBh
Y3RpdmVXaW5kb3csIERPTVdpbmRvdyYgZmlyc3RXaW5kb3cpOwogCi0gICAgICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBib29sIGRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cygp
OwotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBkaXNwYXRjaEFsbFBlbmRpbmdV
bmxvYWRFdmVudHMoKTsKKyAgICB2b2lkIHNob3dNb2RhbERpYWxvZyhjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgY29uc3QgU3RyaW5nJiBkaWFsb2dGZWF0dXJlc1N0cmluZywgRE9NV2luZG93JiBh
Y3RpdmVXaW5kb3csIERPTVdpbmRvdyYgZmlyc3RXaW5kb3csIHN0ZDo6ZnVuY3Rpb248dm9pZChE
T01XaW5kb3cmKT4gcHJlcGFyZURpYWxvZ0Z1bmN0aW9uKTsKIAotICAgICAgICBzdGF0aWMgRmxv
YXRSZWN0IGFkanVzdFdpbmRvd1JlY3QoUGFnZSosIGNvbnN0IEZsb2F0UmVjdCYgcGVuZGluZ0No
YW5nZXMpOworICAgIHZvaWQgYWxlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlID0gZW1wdHlTdHJp
bmcoKSk7CisgICAgYm9vbCBjb25maXJtKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgU3Ry
aW5nIHByb21wdChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZh
bHVlKTsKIAotICAgICAgICBib29sIGFsbG93UG9wVXAoKTsgLy8gQ2FsbCBvbiBmaXJzdCB3aW5k
b3csIG5vdCB0YXJnZXQgd2luZG93LgotICAgICAgICBzdGF0aWMgYm9vbCBhbGxvd1BvcFVwKEZy
YW1lKiBmaXJzdEZyYW1lKTsKLSAgICAgICAgc3RhdGljIGJvb2wgY2FuU2hvd01vZGFsRGlhbG9n
KGNvbnN0IEZyYW1lKik7Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2FuU2hvd01v
ZGFsRGlhbG9nT3ZlcnJpZGUoYm9vbCk7CisgICAgYm9vbCBmaW5kKGNvbnN0IFN0cmluZyYsIGJv
b2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBiYWNrd2FyZHMsIGJvb2wgd3JhcCwgYm9vbCB3aG9sZVdv
cmQsIGJvb2wgc2VhcmNoSW5GcmFtZXMsIGJvb2wgc2hvd0RpYWxvZykgY29uc3Q7CiAKLSAgICAg
ICAgU2NyZWVuKiBzY3JlZW4oKSBjb25zdDsKLSAgICAgICAgSGlzdG9yeSogaGlzdG9yeSgpIGNv
bnN0OwotICAgICAgICBDcnlwdG8qIGNyeXB0bygpIGNvbnN0OwotICAgICAgICBCYXJQcm9wKiBs
b2NhdGlvbmJhcigpIGNvbnN0OwotICAgICAgICBCYXJQcm9wKiBtZW51YmFyKCkgY29uc3Q7Ci0g
ICAgICAgIEJhclByb3AqIHBlcnNvbmFsYmFyKCkgY29uc3Q7Ci0gICAgICAgIEJhclByb3AqIHNj
cm9sbGJhcnMoKSBjb25zdDsKLSAgICAgICAgQmFyUHJvcCogc3RhdHVzYmFyKCkgY29uc3Q7Ci0g
ICAgICAgIEJhclByb3AqIHRvb2xiYXIoKSBjb25zdDsKLSAgICAgICAgTmF2aWdhdG9yKiBuYXZp
Z2F0b3IoKSBjb25zdDsKLSAgICAgICAgTmF2aWdhdG9yKiBjbGllbnRJbmZvcm1hdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG5hdmlnYXRvcigpOyB9CisgICAgYm9vbCBvZmZzY3JlZW5CdWZmZXJpbmco
KSBjb25zdDsKIAotICAgICAgICBMb2NhdGlvbiogbG9jYXRpb24oKSBjb25zdDsKLSAgICAgICAg
dm9pZCBzZXRMb2NhdGlvbihET01XaW5kb3cmIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93JiBmaXJz
dFdpbmRvdywgY29uc3QgU3RyaW5nJiBsb2NhdGlvbiwKLSAgICAgICAgICAgIFNldExvY2F0aW9u
TG9ja2luZyA9IExvY2tIaXN0b3J5QmFzZWRPbkdlc3R1cmVTdGF0ZSk7CisgICAgaW50IG91dGVy
SGVpZ2h0KCkgY29uc3Q7CisgICAgaW50IG91dGVyV2lkdGgoKSBjb25zdDsKKyAgICBpbnQgaW5u
ZXJIZWlnaHQoKSBjb25zdDsKKyAgICBpbnQgaW5uZXJXaWR0aCgpIGNvbnN0OworICAgIGludCBz
Y3JlZW5YKCkgY29uc3Q7CisgICAgaW50IHNjcmVlblkoKSBjb25zdDsKKyAgICBpbnQgc2NyZWVu
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIHNjcmVlblgoKTsgfQorICAgIGludCBzY3JlZW5Ub3AoKSBj
b25zdCB7IHJldHVybiBzY3JlZW5ZKCk7IH0KKyAgICBpbnQgc2Nyb2xsWCgpIGNvbnN0OworICAg
IGludCBzY3JvbGxZKCkgY29uc3Q7CiAKLSAgICAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rp
b24oKTsKKyAgICBib29sIGNsb3NlZCgpIGNvbnN0OwogCi0gICAgICAgIEVsZW1lbnQqIGZyYW1l
RWxlbWVudCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogCi0gICAgICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZm9jdXMoYm9vbCBhbGxvd0ZvY3VzID0gZmFsc2UpOwotICAg
ICAgICB2b2lkIGZvY3VzKERPTVdpbmRvdyYgY2FsbGVyV2luZG93KTsKLSAgICAgICAgdm9pZCBi
bHVyKCk7Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2UoKTsKLSAgICAgICAgdm9p
ZCBjbG9zZShEb2N1bWVudCYpOwotICAgICAgICB2b2lkIHByaW50KCk7Ci0gICAgICAgIHZvaWQg
c3RvcCgpOworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0
IFN0cmluZyYpOwogCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxET01XaW5kb3c+IG9w
ZW4oY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1l
LCBjb25zdCBTdHJpbmcmIHdpbmRvd0ZlYXR1cmVzU3RyaW5nLAotICAgICAgICAgICAgRE9NV2lu
ZG93JiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyYgZmlyc3RXaW5kb3cpOworICAgIFN0cmluZyBz
dGF0dXMoKSBjb25zdDsKKyAgICB2b2lkIHNldFN0YXR1cyhjb25zdCBTdHJpbmcmKTsKKyAgICBT
dHJpbmcgZGVmYXVsdFN0YXR1cygpIGNvbnN0OworICAgIHZvaWQgc2V0RGVmYXVsdFN0YXR1cyhj
b25zdCBTdHJpbmcmKTsKIAotICAgICAgICB2b2lkIHNob3dNb2RhbERpYWxvZyhjb25zdCBTdHJp
bmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiBkaWFsb2dGZWF0dXJlc1N0cmluZywgRE9NV2lu
ZG93JiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyYgZmlyc3RXaW5kb3csIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoRE9NV2luZG93Jik+IHByZXBhcmVEaWFsb2dGdW5jdGlvbik7CisgICAgLy8gU2VsZi1y
ZWZlcmVudGlhbCBhdHRyaWJ1dGVzCiAKLSAgICAgICAgdm9pZCBhbGVydChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UgPSBlbXB0eVN0cmluZygpKTsKLSAgICAgICAgYm9vbCBjb25maXJtKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7Ci0gICAgICAgIFN0cmluZyBwcm9tcHQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSk7CisgICAgRE9NV2luZG93KiBzZWxmKCkg
Y29uc3Q7CisgICAgRE9NV2luZG93KiB3aW5kb3coKSBjb25zdCB7IHJldHVybiBzZWxmKCk7IH0K
KyAgICBET01XaW5kb3cqIGZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIHNlbGYoKTsgfQogCi0gICAg
ICAgIGJvb2wgZmluZChjb25zdCBTdHJpbmcmLCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgYmFj
a3dhcmRzLCBib29sIHdyYXAsIGJvb2wgd2hvbGVXb3JkLCBib29sIHNlYXJjaEluRnJhbWVzLCBi
b29sIHNob3dEaWFsb2cpIGNvbnN0OworICAgIERPTVdpbmRvdyogb3BlbmVyKCkgY29uc3Q7Cisg
ICAgRE9NV2luZG93KiBwYXJlbnQoKSBjb25zdDsKKyAgICBET01XaW5kb3cqIHRvcCgpIGNvbnN0
OwogCi0gICAgICAgIGJvb2wgb2Zmc2NyZWVuQnVmZmVyaW5nKCkgY29uc3Q7CisgICAgLy8gRE9N
IExldmVsIDIgQWJzdHJhY3RWaWV3IEludGVyZmFjZQogCi0gICAgICAgIGludCBvdXRlckhlaWdo
dCgpIGNvbnN0OwotICAgICAgICBpbnQgb3V0ZXJXaWR0aCgpIGNvbnN0OwotICAgICAgICBpbnQg
aW5uZXJIZWlnaHQoKSBjb25zdDsKLSAgICAgICAgaW50IGlubmVyV2lkdGgoKSBjb25zdDsKLSAg
ICAgICAgaW50IHNjcmVlblgoKSBjb25zdDsKLSAgICAgICAgaW50IHNjcmVlblkoKSBjb25zdDsK
LSAgICAgICAgaW50IHNjcmVlbkxlZnQoKSBjb25zdCB7IHJldHVybiBzY3JlZW5YKCk7IH0KLSAg
ICAgICAgaW50IHNjcmVlblRvcCgpIGNvbnN0IHsgcmV0dXJuIHNjcmVlblkoKTsgfQotICAgICAg
ICBpbnQgc2Nyb2xsWCgpIGNvbnN0OwotICAgICAgICBpbnQgc2Nyb2xsWSgpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwogCi0gICAgICAgIGJv
b2wgY2xvc2VkKCkgY29uc3Q7CisgICAgLy8gQ1NTT00gVmlldyBNb2R1bGUKIAotICAgICAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBSZWZQdHI8U3R5bGVNZWRpYT4gc3R5bGVNZWRp
YSgpIGNvbnN0OwogCi0gICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
c2V0TmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICAvLyBET00gTGV2ZWwgMiBTdHlsZSBJbnRlcmZh
Y2UKIAotICAgICAgICBTdHJpbmcgc3RhdHVzKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0U3Rh
dHVzKGNvbnN0IFN0cmluZyYpOwotICAgICAgICBTdHJpbmcgZGVmYXVsdFN0YXR1cygpIGNvbnN0
OwotICAgICAgICB2b2lkIHNldERlZmF1bHRTdGF0dXMoY29uc3QgU3RyaW5nJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgUmVmPENTU1N0eWxlRGVjbGFyYXRpb24+IGdldENvbXB1dGVkU3R5bGUoRWxl
bWVudCYsIGNvbnN0IFN0cmluZyYgcHNldWRvRWx0KSBjb25zdDsKKyAgICBFeGNlcHRpb25PcjxS
ZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4+IGdldENvbXB1dGVkU3R5bGUoRG9jdW1lbnQmLCBj
b25zdCBTdHJpbmcmIHBzZXVkb0VsdCk7CiAKLSAgICAgICAgLy8gU2VsZi1yZWZlcmVudGlhbCBh
dHRyaWJ1dGVzCisgICAgLy8gV2ViS2l0IGV4dGVuc2lvbnMKIAotICAgICAgICBET01XaW5kb3cq
IHNlbGYoKSBjb25zdDsKLSAgICAgICAgRE9NV2luZG93KiB3aW5kb3coKSBjb25zdCB7IHJldHVy
biBzZWxmKCk7IH0KLSAgICAgICAgRE9NV2luZG93KiBmcmFtZXMoKSBjb25zdCB7IHJldHVybiBz
ZWxmKCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGdldE1hdGNo
ZWRDU1NSdWxlcyhFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9FbHQsIGJvb2wgYXV0aG9y
T25seSA9IHRydWUpIGNvbnN0OworICAgIGRvdWJsZSBkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3Q7
CiAKLSAgICAgICAgRE9NV2luZG93KiBvcGVuZXIoKSBjb25zdDsKLSAgICAgICAgRE9NV2luZG93
KiBwYXJlbnQoKSBjb25zdDsKLSAgICAgICAgRE9NV2luZG93KiB0b3AoKSBjb25zdDsKKyAgICBS
ZWZQdHI8V2ViS2l0UG9pbnQ+IHdlYmtpdENvbnZlcnRQb2ludEZyb21QYWdlVG9Ob2RlKE5vZGUq
LCBjb25zdCBXZWJLaXRQb2ludCopIGNvbnN0OworICAgIFJlZlB0cjxXZWJLaXRQb2ludD4gd2Vi
a2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2UoTm9kZSosIGNvbnN0IFdlYktpdFBvaW50Kikg
Y29uc3Q7CiAKLSAgICAgICAgLy8gRE9NIExldmVsIDIgQWJzdHJhY3RWaWV3IEludGVyZmFjZQor
ICAgIFBhZ2VDb25zb2xlQ2xpZW50KiBjb25zb2xlKCkgY29uc3Q7CiAKLSAgICAgICAgV0VCQ09S
RV9FWFBPUlQgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisgICAgdm9pZCBwcmludEVycm9y
TWVzc2FnZShjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgY3Jvc3NEb21haW5BY2Nlc3NFcnJv
ck1lc3NhZ2UoY29uc3QgRE9NV2luZG93JiBhY3RpdmVXaW5kb3cpOwogCi0gICAgICAgIC8vIENT
U09NIFZpZXcgTW9kdWxlCisgICAgRXhjZXB0aW9uT3I8dm9pZD4gcG9zdE1lc3NhZ2UoUmVmPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBtZXNzYWdlLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0
Pj4mJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyYgc291cmNlKTsKKyAg
ICB2b2lkIHBvc3RNZXNzYWdlVGltZXJGaXJlZChQb3N0TWVzc2FnZVRpbWVyJik7CisgICAgdm9p
ZCBkaXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmlnaW5DaGVjayhTZWN1cml0eU9yaWdpbiogaW50
ZW5kZWRUYXJnZXRPcmlnaW4sIEV2ZW50JiwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENh
bGxTdGFjaz4pOwogCi0gICAgICAgIFJlZlB0cjxTdHlsZU1lZGlhPiBzdHlsZU1lZGlhKCkgY29u
c3Q7CisgICAgdm9pZCBsYW5ndWFnZXNDaGFuZ2VkKCk7CiAKLSAgICAgICAgLy8gRE9NIExldmVs
IDIgU3R5bGUgSW50ZXJmYWNlCisgICAgdm9pZCBzY3JvbGxCeShjb25zdCBTY3JvbGxUb09wdGlv
bnMmKSBjb25zdDsKKyAgICB2b2lkIHNjcm9sbEJ5KGRvdWJsZSB4LCBkb3VibGUgeSkgY29uc3Q7
CisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxUb09wdGlvbnMmKSBjb25zdDsKKyAgICB2
b2lkIHNjcm9sbFRvKGRvdWJsZSB4LCBkb3VibGUgeSkgY29uc3Q7CiAKLSAgICAgICAgV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IGdldENvbXB1dGVkU3R5bGUoRWxl
bWVudCYsIGNvbnN0IFN0cmluZyYgcHNldWRvRWx0KSBjb25zdDsKLSAgICAgICAgUmVmUHRyPENT
U1N0eWxlRGVjbGFyYXRpb24+IGdldENvbXB1dGVkU3R5bGUoRG9jdW1lbnQmLCBjb25zdCBTdHJp
bmcmIHBzZXVkb0VsdCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgbW92ZUJ5KGZsb2F0IHgs
IGZsb2F0IHkpIGNvbnN0OworICAgIHZvaWQgbW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0
OwogCi0gICAgICAgIC8vIFdlYktpdCBleHRlbnNpb25zCisgICAgdm9pZCByZXNpemVCeShmbG9h
dCB4LCBmbG9hdCB5KSBjb25zdDsKKyAgICB2b2lkIHJlc2l6ZVRvKGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQpIGNvbnN0OwogCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxDU1NSdWxl
TGlzdD4gZ2V0TWF0Y2hlZENTU1J1bGVzKEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHBzZXVkb0Vs
dCwgYm9vbCBhdXRob3JPbmx5ID0gdHJ1ZSkgY29uc3Q7Ci0gICAgICAgIGRvdWJsZSBkZXZpY2VQ
aXhlbFJhdGlvKCkgY29uc3Q7CisgICAgLy8gVGltZXJzCisgICAgRXhjZXB0aW9uT3I8aW50PiBz
ZXRUaW1lb3V0KHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+LCBpbnQgdGltZW91dCk7
CisgICAgdm9pZCBjbGVhclRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CisgICAgRXhjZXB0aW9uT3I8
aW50PiBzZXRJbnRlcnZhbChzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiwgaW50IHRp
bWVvdXQpOworICAgIHZvaWQgY2xlYXJJbnRlcnZhbChpbnQgdGltZW91dElkKTsKIAotICAgICAg
ICBSZWZQdHI8V2ViS2l0UG9pbnQ+IHdlYmtpdENvbnZlcnRQb2ludEZyb21QYWdlVG9Ob2RlKE5v
ZGUqLCBjb25zdCBXZWJLaXRQb2ludCopIGNvbnN0OwotICAgICAgICBSZWZQdHI8V2ViS2l0UG9p
bnQ+IHdlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlKE5vZGUqLCBjb25zdCBXZWJLaXRQ
b2ludCopIGNvbnN0OwotCi0gICAgICAgIFBhZ2VDb25zb2xlQ2xpZW50KiBjb25zb2xlKCkgY29u
c3Q7Ci0KLSAgICAgICAgdm9pZCBwcmludEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmKTsKLSAg
ICAgICAgU3RyaW5nIGNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGNvbnN0IERPTVdpbmRv
dyYgYWN0aXZlV2luZG93KTsKLQotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0
Pj4mJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyYgc291cmNlLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VUaW1lckZpcmVkKFBvc3RNZXNz
YWdlVGltZXImKTsKLSAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VFdmVudFdpdGhPcmlnaW5D
aGVjayhTZWN1cml0eU9yaWdpbiogaW50ZW5kZWRUYXJnZXRPcmlnaW4sIEV2ZW50JiwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjaz4pOwotCi0gICAgICAgIHZvaWQgbGFuZ3Vh
Z2VzQ2hhbmdlZCgpOwotCi0gICAgICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgU2Nyb2xsVG9PcHRp
b25zJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2Nyb2xsQnkoZG91YmxlIHgsIGRvdWJsZSB5KSBj
b25zdDsKLSAgICAgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxUb09wdGlvbnMmKSBjb25z
dDsKLSAgICAgICAgdm9pZCBzY3JvbGxUbyhkb3VibGUgeCwgZG91YmxlIHkpIGNvbnN0OwotCi0g
ICAgICAgIHZvaWQgbW92ZUJ5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0OwotICAgICAgICB2b2lk
IG1vdmVUbyhmbG9hdCB4LCBmbG9hdCB5KSBjb25zdDsKLQotICAgICAgICB2b2lkIHJlc2l6ZUJ5
KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0OwotICAgICAgICB2b2lkIHJlc2l6ZVRvKGZsb2F0IHdp
ZHRoLCBmbG9hdCBoZWlnaHQpIGNvbnN0OwotCi0gICAgICAgIC8vIFRpbWVycwotICAgICAgICBp
bnQgc2V0VGltZW91dChzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiwgaW50IHRpbWVv
dXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgdm9pZCBjbGVhclRpbWVvdXQoaW50IHRpbWVv
dXRJZCk7Ci0gICAgICAgIGludCBzZXRJbnRlcnZhbChzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVk
QWN0aW9uPiwgaW50IHRpbWVvdXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgdm9pZCBjbGVh
ckludGVydmFsKGludCB0aW1lb3V0SWQpOwotCi0gICAgICAgIC8vIFdlYktpdCBhbmltYXRpb24g
ZXh0ZW5zaW9ucworICAgIC8vIFdlYktpdCBhbmltYXRpb24gZXh0ZW5zaW9ucwogI2lmIEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICAgICAgaW50IHJlcXVlc3RBbmltYXRpb25G
cmFtZShQYXNzUmVmUHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPik7Ci0gICAgICAg
IGludCB3ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUGFzc1JlZlB0cjxSZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFjaz4pOwotICAgICAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlu
dCBpZCk7CisgICAgaW50IHJlcXVlc3RBbmltYXRpb25GcmFtZShQYXNzUmVmUHRyPFJlcXVlc3RB
bmltYXRpb25GcmFtZUNhbGxiYWNrPik7CisgICAgaW50IHdlYmtpdFJlcXVlc3RBbmltYXRpb25G
cmFtZShQYXNzUmVmUHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPik7CisgICAgdm9p
ZCBjYW5jZWxBbmltYXRpb25GcmFtZShpbnQgaWQpOwogI2VuZGlmCiAKLSAgICAgICAgLy8gRXZl
bnRzCi0gICAgICAgIC8vIEV2ZW50VGFyZ2V0IEFQSQotICAgICAgICBib29sIGFkZEV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZjxFdmVudExpc3RlbmVyPiYm
LCBjb25zdCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgICAgICBib29s
IHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50
TGlzdGVuZXImLCBjb25zdCBMaXN0ZW5lck9wdGlvbnMmKSBvdmVycmlkZTsKLSAgICAgICAgdm9p
ZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpIG92ZXJyaWRlOworICAgIC8vIEV2ZW50cworICAg
IC8vIEV2ZW50VGFyZ2V0IEFQSQorICAgIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGlzdGVuZXI+JiYsIGNvbnN0IEFkZEV2ZW50
TGlzdGVuZXJPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgYm9vbCByZW1vdmVFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiwgY29uc3QgTGlz
dGVuZXJPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVy
cygpIG92ZXJyaWRlOwogCi0gICAgICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50
OwotICAgICAgICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmLCBFdmVudFRhcmdldCopOworICAg
IHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OworICAgIGJvb2wgZGlzcGF0Y2hFdmVu
dChFdmVudCYsIEV2ZW50VGFyZ2V0Kik7CiAKLSAgICAgICAgdm9pZCBkaXNwYXRjaExvYWRFdmVu
dCgpOworICAgIHZvaWQgZGlzcGF0Y2hMb2FkRXZlbnQoKTsKIAotICAgICAgICB2b2lkIGNhcHR1
cmVFdmVudHMoKTsKLSAgICAgICAgdm9pZCByZWxlYXNlRXZlbnRzKCk7CisgICAgdm9pZCBjYXB0
dXJlRXZlbnRzKCk7CisgICAgdm9pZCByZWxlYXNlRXZlbnRzKCk7CiAKLSAgICAgICAgdm9pZCBm
aW5pc2hlZExvYWRpbmcoKTsKKyAgICB2b2lkIGZpbmlzaGVkTG9hZGluZygpOwogCi0gICAgICAg
IHVzaW5nIFJlZkNvdW50ZWQ8RE9NV2luZG93Pjo6cmVmOwotICAgICAgICB1c2luZyBSZWZDb3Vu
dGVkPERPTVdpbmRvdz46OmRlcmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8RE9NV2luZG93Pjo6
cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8RE9NV2luZG93Pjo6ZGVyZWY7CiAKLSAgICAgICAg
Ly8gSFRNTCA1IGtleS92YWx1ZSBzdG9yYWdlCi0gICAgICAgIFN0b3JhZ2UqIHNlc3Npb25TdG9y
YWdlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICAgICAgU3RvcmFnZSogbG9jYWxTdG9yYWdl
KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICAgICAgU3RvcmFnZSogb3B0aW9uYWxTZXNzaW9u
U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAg
ICAgU3RvcmFnZSogb3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xvY2Fs
U3RvcmFnZS5nZXQoKTsgfQorICAgIC8vIEhUTUwgNSBrZXkvdmFsdWUgc3RvcmFnZQorICAgIEV4
Y2VwdGlvbk9yPFN0b3JhZ2UqPiBzZXNzaW9uU3RvcmFnZSgpIGNvbnN0OworICAgIEV4Y2VwdGlv
bk9yPFN0b3JhZ2UqPiBsb2NhbFN0b3JhZ2UoKSBjb25zdDsKKyAgICBTdG9yYWdlKiBvcHRpb25h
bFNlc3Npb25TdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uU3RvcmFnZS5nZXQoKTsg
fQorICAgIFN0b3JhZ2UqIG9wdGlvbmFsTG9jYWxTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbFN0b3JhZ2UuZ2V0KCk7IH0KIAotICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBs
aWNhdGlvbkNhY2hlKCkgY29uc3Q7Ci0gICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIG9wdGlv
bmFsQXBwbGljYXRpb25DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZS5n
ZXQoKTsgfQorICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uQ2FjaGUoKSBjb25z
dDsKKyAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBvcHRpb25hbEFwcGxpY2F0aW9uQ2FjaGUoKSBj
b25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2FjaGUuZ2V0KCk7IH0KIAogI2lmIEVOQUJMRShD
VVNUT01fRUxFTUVOVFMpCi0gICAgICAgIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSogY3VzdG9tRWxl
bWVudFJlZ2lzdHJ5KCkgeyByZXR1cm4gbV9jdXN0b21FbGVtZW50UmVnaXN0cnkuZ2V0KCk7IH0K
LSAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JiBlbnN1cmVDdXN0b21FbGVtZW50UmVnaXN0
cnkoKTsKKyAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkqIGN1c3RvbUVsZW1lbnRSZWdpc3RyeSgp
IHsgcmV0dXJuIG1fY3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmdldCgpOyB9CisgICAgQ3VzdG9tRWxl
bWVudFJlZ2lzdHJ5JiBlbnN1cmVDdXN0b21FbGVtZW50UmVnaXN0cnkoKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgaW50
ZXJmYWNlIG9yaWVudGF0aW9uIGluIGRlZ3JlZXMuIFNvbWUgZXhhbXBsZXMgYXJlOgotICAgICAg
ICAvLyAgMCBpcyBzdHJhaWdodCB1cDsgLTkwIGlzIHdoZW4gdGhlIGRldmljZSBpcyByb3RhdGVk
IDkwIGNsb2Nrd2lzZTsKLSAgICAgICAgLy8gIDkwIGlzIHdoZW4gcm90YXRlZCBjb3VudGVyIGNs
b2Nrd2lzZS4KLSAgICAgICAgaW50IG9yaWVudGF0aW9uKCkgY29uc3Q7CisgICAgLy8gVGhpcyBp
cyB0aGUgaW50ZXJmYWNlIG9yaWVudGF0aW9uIGluIGRlZ3JlZXMuIFNvbWUgZXhhbXBsZXMgYXJl
OgorICAgIC8vICAwIGlzIHN0cmFpZ2h0IHVwOyAtOTAgaXMgd2hlbiB0aGUgZGV2aWNlIGlzIHJv
dGF0ZWQgOTAgY2xvY2t3aXNlOworICAgIC8vICA5MCBpcyB3aGVuIHJvdGF0ZWQgY291bnRlciBj
bG9ja3dpc2UuCisgICAgaW50IG9yaWVudGF0aW9uKCkgY29uc3Q7CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShXRUJfVElNSU5HKQotICAgICAgICBQZXJmb3JtYW5jZSogcGVyZm9ybWFuY2UoKSBjb25z
dDsKKyAgICBQZXJmb3JtYW5jZSogcGVyZm9ybWFuY2UoKSBjb25zdDsKICNlbmRpZgotICAgICAg
ICBkb3VibGUgbm93VGltZXN0YW1wKCkgY29uc3Q7CisgICAgZG91YmxlIG5vd1RpbWVzdGFtcCgp
IGNvbnN0OwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICB2b2lkIGluY3JlbWVudFNjcm9s
bEV2ZW50TGlzdGVuZXJzQ291bnQoKTsKLSAgICAgICAgdm9pZCBkZWNyZW1lbnRTY3JvbGxFdmVu
dExpc3RlbmVyc0NvdW50KCk7Ci0gICAgICAgIHVuc2lnbmVkIHNjcm9sbEV2ZW50TGlzdGVuZXJD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsRXZlbnRMaXN0ZW5lckNvdW50OyB9CisgICAg
dm9pZCBpbmNyZW1lbnRTY3JvbGxFdmVudExpc3RlbmVyc0NvdW50KCk7CisgICAgdm9pZCBkZWNy
ZW1lbnRTY3JvbGxFdmVudExpc3RlbmVyc0NvdW50KCk7CisgICAgdW5zaWduZWQgc2Nyb2xsRXZl
bnRMaXN0ZW5lckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxFdmVudExpc3RlbmVyQ291
bnQ7IH0KICNlbmRpZgogCi0gICAgICAgIHZvaWQgcmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Np
b24oKTsKKyAgICB2b2lkIHJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9uKCk7CiAKICNpZiBF
TkFCTEUoSU9TX1RPVUNIX0VWRU5UUykgfHwgRU5BQkxFKElPU19HRVNUVVJFX0VWRU5UUykKLSAg
ICAgICAgYm9vbCBoYXNUb3VjaEV2ZW50TGlzdGVuZXJzKCkgY29uc3QgeyByZXR1cm4gbV90b3Vj
aEV2ZW50TGlzdGVuZXJDb3VudCA+IDA7IH0KKyAgICBib29sIGhhc1RvdWNoRXZlbnRMaXN0ZW5l
cnMoKSBjb25zdCB7IHJldHVybiBtX3RvdWNoRXZlbnRMaXN0ZW5lckNvdW50ID4gMDsgfQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQotICAgICAgICBib29sIHNo
b3VsZEhhdmVXZWJLaXROYW1lc3BhY2VGb3JXb3JsZChET01XcmFwcGVyV29ybGQmKTsKLSAgICAg
ICAgV2ViS2l0TmFtZXNwYWNlKiB3ZWJraXROYW1lc3BhY2UoKSBjb25zdDsKKyAgICBib29sIHNo
b3VsZEhhdmVXZWJLaXROYW1lc3BhY2VGb3JXb3JsZChET01XcmFwcGVyV29ybGQmKTsKKyAgICBX
ZWJLaXROYW1lc3BhY2UqIHdlYmtpdE5hbWVzcGFjZSgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICAg
ICAgLy8gRklYTUU6IFdoZW4gdGhpcyBET01XaW5kb3cgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmUg
RE9NV2luZG93IChpLmUuLAotICAgICAgICAvLyB3aGVuIGl0cyBkb2N1bWVudCBpcyBubyBsb25n
ZXIgdGhlIGRvY3VtZW50IHRoYXQgaXMgZGlzcGxheWVkIGluIGl0cwotICAgICAgICAvLyBmcmFt
ZSksIHdlIHdvdWxkIGxpa2UgdG8gemVybyBvdXQgbV9mcmFtZSB0byBhdm9pZCBiZWluZyBjb25m
dXNlZAotICAgICAgICAvLyBieSB0aGUgZG9jdW1lbnQgdGhhdCBpcyBjdXJyZW50bHkgYWN0aXZl
IGluIG1fZnJhbWUuCi0gICAgICAgIGJvb2wgaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkg
Y29uc3Q7CisgICAgLy8gRklYTUU6IFdoZW4gdGhpcyBET01XaW5kb3cgaXMgbm8gbG9uZ2VyIHRo
ZSBhY3RpdmUgRE9NV2luZG93IChpLmUuLAorICAgIC8vIHdoZW4gaXRzIGRvY3VtZW50IGlzIG5v
IGxvbmdlciB0aGUgZG9jdW1lbnQgdGhhdCBpcyBkaXNwbGF5ZWQgaW4gaXRzCisgICAgLy8gZnJh
bWUpLCB3ZSB3b3VsZCBsaWtlIHRvIHplcm8gb3V0IG1fZnJhbWUgdG8gYXZvaWQgYmVpbmcgY29u
ZnVzZWQKKyAgICAvLyBieSB0aGUgZG9jdW1lbnQgdGhhdCBpcyBjdXJyZW50bHkgYWN0aXZlIGlu
IG1fZnJhbWUuCisgICAgYm9vbCBpc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSBjb25zdDsK
IAotICAgICAgICB2b2lkIHdpbGxEZXRhY2hEb2N1bWVudEZyb21GcmFtZSgpOwotICAgICAgICB2
b2lkIHdpbGxEZXN0cm95Q2FjaGVkRnJhbWUoKTsKKyAgICB2b2lkIHdpbGxEZXRhY2hEb2N1bWVu
dEZyb21GcmFtZSgpOworICAgIHZvaWQgd2lsbERlc3Ryb3lDYWNoZWRGcmFtZSgpOwogCi0gICAg
ICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKLSAgICAgICAgdm9pZCBkaXNhYmxl
U3VkZGVuVGVybWluYXRpb24oKTsKKyAgICB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7
CisgICAgdm9pZCBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKIAotICAgICAgICBXZWFrUHRy
PERPTVdpbmRvdz4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3Jl
YXRlV2Vha1B0cigpOyB9CisgICAgV2Vha1B0cjxET01XaW5kb3c+IGNyZWF0ZVdlYWtQdHIoKSB7
IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgZXhwbGljaXQgRE9NV2luZG93KERvY3VtZW50Kik7Citwcml2YXRlOgorICAg
IGV4cGxpY2l0IERPTVdpbmRvdyhEb2N1bWVudCopOwogCi0gICAgICAgIFBhZ2UqIHBhZ2UoKTsK
LSAgICAgICAgYm9vbCBhbGxvd2VkVG9DaGFuZ2VXaW5kb3dHZW9tZXRyeSgpIGNvbnN0OworICAg
IFBhZ2UqIHBhZ2UoKTsKKyAgICBib29sIGFsbG93ZWRUb0NoYW5nZVdpbmRvd0dlb21ldHJ5KCkg
Y29uc3Q7CiAKLSAgICAgICAgdm9pZCBmcmFtZURlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAgICAg
ICB2b2lkIHdpbGxEZXRhY2hQYWdlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmcmFtZURlc3Ryb3ll
ZCgpIG92ZXJyaWRlOworICAgIHZvaWQgd2lsbERldGFjaFBhZ2UoKSBvdmVycmlkZTsKIAotICAg
ICAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQotICAgICAgICB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7IGRlcmVmKCk7IH0KKyAgICB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQorICAgIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQogCi0gICAgICAgIHN0YXRpYyBSZWZQdHI8RnJh
bWU+IGNyZWF0ZVdpbmRvdyhjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgQXRvbWljU3Ry
aW5nJiBmcmFtZU5hbWUsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiwgRE9NV2luZG93JiBhY3RpdmVX
aW5kb3csIEZyYW1lJiBmaXJzdEZyYW1lLCBGcmFtZSYgb3BlbmVyRnJhbWUsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoRE9NV2luZG93Jik+IHByZXBhcmVEaWFsb2dGdW5jdGlvbiA9IG51bGxwdHIpOwot
ICAgICAgICBib29sIGlzSW5zZWN1cmVTY3JpcHRBY2Nlc3MoRE9NV2luZG93JiBhY3RpdmVXaW5k
b3csIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKKyAgICBzdGF0aWMgUmVmUHRyPEZyYW1lPiBj
cmVhdGVXaW5kb3coY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZnJhbWVOYW1lLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYsIERPTVdpbmRvdyYgYWN0aXZlV2luZG93
LCBGcmFtZSYgZmlyc3RGcmFtZSwgRnJhbWUmIG9wZW5lckZyYW1lLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoRE9NV2luZG93Jik+IHByZXBhcmVEaWFsb2dGdW5jdGlvbiA9IG51bGxwdHIpOworICAgIGJv
b2wgaXNJbnNlY3VyZVNjcmlwdEFjY2VzcyhET01XaW5kb3cmIGFjdGl2ZVdpbmRvdywgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpOwogCi0gICAgICAgIHZvaWQgcmVzZXRET01XaW5kb3dQcm9wZXJ0
aWVzKCk7Ci0gICAgICAgIHZvaWQgZGlzY29ubmVjdERPTVdpbmRvd1Byb3BlcnRpZXMoKTsKLSAg
ICAgICAgdm9pZCByZWNvbm5lY3RET01XaW5kb3dQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHZvaWQg
d2lsbERlc3Ryb3lEb2N1bWVudEluRnJhbWUoKTsKKyAgICB2b2lkIHJlc2V0RE9NV2luZG93UHJv
cGVydGllcygpOworICAgIHZvaWQgZGlzY29ubmVjdERPTVdpbmRvd1Byb3BlcnRpZXMoKTsKKyAg
ICB2b2lkIHJlY29ubmVjdERPTVdpbmRvd1Byb3BlcnRpZXMoKTsKKyAgICB2b2lkIHdpbGxEZXN0
cm95RG9jdW1lbnRJbkZyYW1lKCk7CiAKLSAgICAgICAgYm9vbCBpc1NhbWVTZWN1cml0eU9yaWdp
bkFzTWFpbkZyYW1lKCkgY29uc3Q7CisgICAgYm9vbCBpc1NhbWVTZWN1cml0eU9yaWdpbkFzTWFp
bkZyYW1lKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKLSAgICAgICAgdm9pZCBpbmNy
ZW1lbnRHYW1lcGFkRXZlbnRMaXN0ZW5lckNvdW50KCk7Ci0gICAgICAgIHZvaWQgZGVjcmVtZW50
R2FtZXBhZEV2ZW50TGlzdGVuZXJDb3VudCgpOworICAgIHZvaWQgaW5jcmVtZW50R2FtZXBhZEV2
ZW50TGlzdGVuZXJDb3VudCgpOworICAgIHZvaWQgZGVjcmVtZW50R2FtZXBhZEV2ZW50TGlzdGVu
ZXJDb3VudCgpOwogI2VuZGlmCiAKLSAgICAgICAgYm9vbCBtX3Nob3VsZFByaW50V2hlbkZpbmlz
aGVkTG9hZGluZzsKLSAgICAgICAgYm9vbCBtX3N1c3BlbmRlZEZvckRvY3VtZW50U3VzcGVuc2lv
bjsKLSAgICAgICAgT3B0aW9uYWw8Ym9vbD4gbV9jYW5TaG93TW9kYWxEaWFsb2dPdmVycmlkZTsK
KyAgICBib29sIG1fc2hvdWxkUHJpbnRXaGVuRmluaXNoZWRMb2FkaW5nIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fc3VzcGVuZGVkRm9yRG9jdW1lbnRTdXNwZW5zaW9uIHsgZmFsc2UgfTsKKyAgICBP
cHRpb25hbDxib29sPiBtX2NhblNob3dNb2RhbERpYWxvZ092ZXJyaWRlOwogCi0gICAgICAgIEhh
c2hTZXQ8RE9NV2luZG93UHJvcGVydHkqPiBtX3Byb3BlcnRpZXM7CisgICAgSGFzaFNldDxET01X
aW5kb3dQcm9wZXJ0eSo+IG1fcHJvcGVydGllczsKIAotICAgICAgICBtdXRhYmxlIFJlZlB0cjxD
cnlwdG8+IG1fY3J5cHRvOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxIaXN0b3J5PiBtX2hpc3Rv
cnk7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPEJhclByb3A+IG1fbG9jYXRpb25iYXI7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFN0eWxlTWVkaWE+IG1fbWVkaWE7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPEJhclByb3A+IG1fbWVudWJhcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8TmF2aWdh
dG9yPiBtX25hdmlnYXRvcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8QmFyUHJvcD4gbV9wZXJz
b25hbGJhcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U2NyZWVuPiBtX3NjcmVlbjsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8QmFyUHJvcD4gbV9zY3JvbGxiYXJzOwotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxET01TZWxlY3Rpb24+IG1fc2VsZWN0aW9uOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxCYXJQcm9wPiBtX3N0YXR1c2JhcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8QmFyUHJvcD4g
bV90b29sYmFyOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxMb2NhdGlvbj4gbV9sb2NhdGlvbjsK
KyAgICBtdXRhYmxlIFJlZlB0cjxDcnlwdG8+IG1fY3J5cHRvOworICAgIG11dGFibGUgUmVmUHRy
PEhpc3Rvcnk+IG1faGlzdG9yeTsKKyAgICBtdXRhYmxlIFJlZlB0cjxCYXJQcm9wPiBtX2xvY2F0
aW9uYmFyOworICAgIG11dGFibGUgUmVmUHRyPFN0eWxlTWVkaWE+IG1fbWVkaWE7CisgICAgbXV0
YWJsZSBSZWZQdHI8QmFyUHJvcD4gbV9tZW51YmFyOworICAgIG11dGFibGUgUmVmUHRyPE5hdmln
YXRvcj4gbV9uYXZpZ2F0b3I7CisgICAgbXV0YWJsZSBSZWZQdHI8QmFyUHJvcD4gbV9wZXJzb25h
bGJhcjsKKyAgICBtdXRhYmxlIFJlZlB0cjxTY3JlZW4+IG1fc2NyZWVuOworICAgIG11dGFibGUg
UmVmUHRyPEJhclByb3A+IG1fc2Nyb2xsYmFyczsKKyAgICBtdXRhYmxlIFJlZlB0cjxET01TZWxl
Y3Rpb24+IG1fc2VsZWN0aW9uOworICAgIG11dGFibGUgUmVmUHRyPEJhclByb3A+IG1fc3RhdHVz
YmFyOworICAgIG11dGFibGUgUmVmUHRyPEJhclByb3A+IG1fdG9vbGJhcjsKKyAgICBtdXRhYmxl
IFJlZlB0cjxMb2NhdGlvbj4gbV9sb2NhdGlvbjsKIAotICAgICAgICBTdHJpbmcgbV9zdGF0dXM7
Ci0gICAgICAgIFN0cmluZyBtX2RlZmF1bHRTdGF0dXM7CisgICAgU3RyaW5nIG1fc3RhdHVzOwor
ICAgIFN0cmluZyBtX2RlZmF1bHRTdGF0dXM7CiAKLSAgICAgICAgZW51bSBQYWdlU3RhdHVzIHsg
UGFnZVN0YXR1c05vbmUsIFBhZ2VTdGF0dXNTaG93biwgUGFnZVN0YXR1c0hpZGRlbiB9OwotICAg
ICAgICBQYWdlU3RhdHVzIG1fbGFzdFBhZ2VTdGF0dXM7CisgICAgZW51bSBjbGFzcyBQYWdlU3Rh
dHVzIHsgTm9uZSwgU2hvd24sIEhpZGRlbiB9OworICAgIFBhZ2VTdGF0dXMgbV9sYXN0UGFnZVN0
YXR1cyB7IFBhZ2VTdGF0dXM6Ok5vbmUgfTsKIAotICAgICAgICBXZWFrUHRyRmFjdG9yeTxET01X
aW5kb3c+IG1fd2Vha1B0ckZhY3Rvcnk7CisgICAgV2Vha1B0ckZhY3Rvcnk8RE9NV2luZG93PiBt
X3dlYWtQdHJGYWN0b3J5OwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICB1bnNpZ25lZCBt
X3Njcm9sbEV2ZW50TGlzdGVuZXJDb3VudDsKKyAgICB1bnNpZ25lZCBtX3Njcm9sbEV2ZW50TGlz
dGVuZXJDb3VudCB7IDAgfTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
IHx8IEVOQUJMRShJT1NfR0VTVFVSRV9FVkVOVFMpCi0gICAgICAgIHVuc2lnbmVkIG1fdG91Y2hF
dmVudExpc3RlbmVyQ291bnQ7CisgICAgdW5zaWduZWQgbV90b3VjaEV2ZW50TGlzdGVuZXJDb3Vu
dCB7IDAgfTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCi0gICAgICAgIHVuc2lnbmVk
IG1fZ2FtZXBhZEV2ZW50TGlzdGVuZXJDb3VudDsKKyAgICB1bnNpZ25lZCBtX2dhbWVwYWRFdmVu
dExpc3RlbmVyQ291bnQgeyAwIH07CiAjZW5kaWYKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U3Rv
cmFnZT4gbV9zZXNzaW9uU3RvcmFnZTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U3RvcmFnZT4g
bV9sb2NhbFN0b3JhZ2U7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPERPTUFwcGxpY2F0aW9uQ2Fj
aGU+IG1fYXBwbGljYXRpb25DYWNoZTsKKworICAgIG11dGFibGUgUmVmUHRyPFN0b3JhZ2U+IG1f
c2Vzc2lvblN0b3JhZ2U7CisgICAgbXV0YWJsZSBSZWZQdHI8U3RvcmFnZT4gbV9sb2NhbFN0b3Jh
Z2U7CisgICAgbXV0YWJsZSBSZWZQdHI8RE9NQXBwbGljYXRpb25DYWNoZT4gbV9hcHBsaWNhdGlv
bkNhY2hlOwogCiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKLSAgICAgICAgUmVmUHRyPEN1
c3RvbUVsZW1lbnRSZWdpc3RyeT4gbV9jdXN0b21FbGVtZW50UmVnaXN0cnk7CisgICAgUmVmUHRy
PEN1c3RvbUVsZW1lbnRSZWdpc3RyeT4gbV9jdXN0b21FbGVtZW50UmVnaXN0cnk7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgICAgICBtdXRhYmxlIFJlZlB0cjxQZXJmb3Jt
YW5jZT4gbV9wZXJmb3JtYW5jZTsKKyAgICBtdXRhYmxlIFJlZlB0cjxQZXJmb3JtYW5jZT4gbV9w
ZXJmb3JtYW5jZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8V2ViS2l0TmFtZXNwYWNlPiBtX3dlYmtpdE5hbWVzcGFj
ZTsKKyAgICBtdXRhYmxlIFJlZlB0cjxXZWJLaXROYW1lc3BhY2U+IG1fd2Via2l0TmFtZXNwYWNl
OwogI2VuZGlmCi0gICAgfTsKK307CiAKLSAgICBpbmxpbmUgU3RyaW5nIERPTVdpbmRvdzo6c3Rh
dHVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YXR1czsKLSAgICB9Citpbmxp
bmUgU3RyaW5nIERPTVdpbmRvdzo6c3RhdHVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0
dXM7Cit9CiAKLSAgICBpbmxpbmUgU3RyaW5nIERPTVdpbmRvdzo6ZGVmYXVsdFN0YXR1cygpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9kZWZhdWx0U3RhdHVzOwotICAgIH0KK2lubGlu
ZSBTdHJpbmcgRE9NV2luZG93OjpkZWZhdWx0U3RhdHVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kZWZhdWx0U3RhdHVzOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5pZGwKaW5kZXggY2E5OGY2MTBiODNlZDQ0NTZjOTRiMGFmZjE5YzE3ZWI5MzBk
OTM4Yi4uZWEwODU5YTM4MThhZmJiNmI1MDJhYzdhYmNiZDFlYmM0ZTc0MWFiMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmlkbApAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgW05ld09iamVjdF0g
Q1NTU3R5bGVEZWNsYXJhdGlvbiBnZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQgZWxlbWVudCwgb3B0
aW9uYWwgRE9NU3RyaW5nPyBwc2V1ZG9FbGVtZW50ID0gbnVsbCk7CiAKICAgICAvLyBGSVhNRTog
RHJvcCB0aGUgZm9sbG93aW5nIG92ZXJsb2FkIG9mIGdldENvbXB1dGVkU3R5bGUgb25jZSA8cmRh
cjovL3Byb2JsZW0vMjgwMjA2ODE+IGhhcyBiZWVuIGZpeGVkLgotICAgIFtOZXdPYmplY3QsIE1h
eVRocm93TGVnYWN5RXhjZXB0aW9uXSBDU1NTdHlsZURlY2xhcmF0aW9uIGdldENvbXB1dGVkU3R5
bGUoRG9jdW1lbnQgZG9jdW1lbnQsIG9wdGlvbmFsIERPTVN0cmluZz8gcHNldWRvRWxlbWVudCA9
IG51bGwpOworICAgIFtOZXdPYmplY3QsIE1heVRocm93RXhjZXB0aW9uXSBDU1NTdHlsZURlY2xh
cmF0aW9uPyBnZXRDb21wdXRlZFN0eWxlKERvY3VtZW50IGRvY3VtZW50LCBvcHRpb25hbCBET01T
dHJpbmc/IHBzZXVkb0VsZW1lbnQgPSBudWxsKTsKIAogICAgIENTU1J1bGVMaXN0IGdldE1hdGNo
ZWRDU1NSdWxlcyhvcHRpb25hbCBFbGVtZW50PyBlbGVtZW50ID0gbnVsbCwgb3B0aW9uYWwgRE9N
U3RyaW5nPyBwc2V1ZG9FbGVtZW50ID0gbnVsbCk7CiAKQEAgLTE0NCwxNCArMTQ0LDE0IEBACiAK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NQXBwbGljYXRpb25DYWNoZSBhcHBsaWNhdGlvbkNh
Y2hlOwogCi0gICAgW0dldHRlck1heVRocm93TGVnYWN5RXhjZXB0aW9uXSByZWFkb25seSBhdHRy
aWJ1dGUgU3RvcmFnZSBzZXNzaW9uU3RvcmFnZTsKLSAgICBbR2V0dGVyTWF5VGhyb3dMZWdhY3lF
eGNlcHRpb25dIHJlYWRvbmx5IGF0dHJpYnV0ZSBTdG9yYWdlIGxvY2FsU3RvcmFnZTsKKyAgICBb
R2V0dGVyTWF5VGhyb3dFeGNlcHRpb25dIHJlYWRvbmx5IGF0dHJpYnV0ZSBTdG9yYWdlIHNlc3Np
b25TdG9yYWdlOworICAgIFtHZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbl0gcmVhZG9ubHkgYXR0cmli
dXRlIFN0b3JhZ2UgbG9jYWxTdG9yYWdlOwogCiAgICAgLy8gVGhpcyBpcyB0aGUgaW50ZXJmYWNl
IG9yaWVudGF0aW9uIGluIGRlZ3JlZXMuIFNvbWUgZXhhbXBsZXM6CiAgICAgLy8gMCB3aGVuIHN0
cmFpZ2h0IHVwOyAtOTAgd2hlbiByb3RhdGVkIDkwIGRlZ3JlZXMgY2xvY2t3aXNlOyA5MCBjb3Vu
dGVyIGNsb2Nrd2lzZS4KICAgICBbQ29uZGl0aW9uYWw9T1JJRU5UQVRJT05fRVZFTlRTXSByZWFk
b25seSBhdHRyaWJ1dGUgbG9uZyBvcmllbnRhdGlvbjsKIAotICAgIFtEb05vdENoZWNrU2VjdXJp
dHksIEN1c3RvbSwgTWF5VGhyb3dMZWdhY3lFeGNlcHRpb24sIEZvcndhcmREZWNsYXJlSW5IZWFk
ZXJdIHZvaWQgcG9zdE1lc3NhZ2UoU2VyaWFsaXplZFNjcmlwdFZhbHVlIG1lc3NhZ2UsIFVTVlN0
cmluZyB0YXJnZXRPcmlnaW4sIG9wdGlvbmFsIEFycmF5IG1lc3NhZ2VQb3J0cyk7CisgICAgW0Rv
Tm90Q2hlY2tTZWN1cml0eSwgQ3VzdG9tLCBNYXlUaHJvd0V4Y2VwdGlvbiwgRm9yd2FyZERlY2xh
cmVJbkhlYWRlcl0gdm9pZCBwb3N0TWVzc2FnZShTZXJpYWxpemVkU2NyaXB0VmFsdWUgbWVzc2Fn
ZSwgVVNWU3RyaW5nIHRhcmdldE9yaWdpbiwgb3B0aW9uYWwgQXJyYXkgbWVzc2FnZVBvcnRzKTsK
IAogICAgIFtDb25kaXRpb25hbD1XRUJfVElNSU5HLCBSZXBsYWNlYWJsZV0gcmVhZG9ubHkgYXR0
cmlidXRlIFBlcmZvcm1hbmNlIHBlcmZvcm1hbmNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3Vy
Y2UuY3BwCmluZGV4IGY3MDJhYTc1MDY2YzQxNWM3OTQ0NmU3OWNlOTBjODUxZTU0NzBhMjAuLjQ3
NDIyODgwNzJjZTVhNWExZWI3YTkwNGY1MjE1MzNmNWU1MjQ1YzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRTb3VyY2UuY3BwCkBAIC01OCwyNCArNTgsMTkgQEAgaW5saW5lIEV2ZW50U291cmNlOjpF
dmVudFNvdXJjZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBVUkwmIHVy
bCwKIHsKIH0KIAotUmVmUHRyPEV2ZW50U291cmNlPiBFdmVudFNvdXJjZTo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBJbml0
JiBldmVudFNvdXJjZUluaXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8UmVmPEV2
ZW50U291cmNlPj4gRXZlbnRTb3VyY2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgSW5pdCYgZXZlbnRTb3VyY2VJbml0KQog
ewotICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OwogCiAgICAgVVJMIGZ1bGxVUkwg
PSBjb250ZXh0LmNvbXBsZXRlVVJMKHVybCk7Ci0gICAgaWYgKCFmdWxsVVJMLmlzVmFsaWQoKSkg
ewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KKyAgICBpZiAoIWZ1bGxVUkwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU1lOVEFYX0VSUiB9OwogCi0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBjaGVjayB0
aGUgaXNvbGF0ZWQgd29ybGQncyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBvbmNlIHdlYmtpdC5v
cmcvYi8xMDQ1MjAgaXMgc29sdmVkLgorICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gY2hl
Y2sgdGhlIGlzb2xhdGVkIHdvcmxkJ3MgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgb25jZSB3ZWJr
aXQub3JnL2IvMTA0NTIwIGlzIHJlc29sdmVkLgogICAgIGlmICghY29udGV4dC5zaG91bGRCeXBh
c3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koKSAmJiAhY29udGV4dC5jb250ZW50U2Vj
dXJpdHlQb2xpY3koKS0+YWxsb3dDb25uZWN0VG9Tb3VyY2UoZnVsbFVSTCkpIHsKICAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCB0aGlzIGJlIHRocm93aW5nIGFuIGV4Y2VwdGlvbj8KLSAgICAgICAg
ZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07CiAgICAgfQogCiAgICAgYXV0byBzb3VyY2Ug
PSBhZG9wdFJlZigqbmV3IEV2ZW50U291cmNlKGNvbnRleHQsIGZ1bGxVUkwsIGV2ZW50U291cmNl
SW5pdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCmluZGV4IDk2YTBkZWQxMGU0NWM5MjA4
MDE3NGUzMTlhMmI5NDRhODkzZjVjMzUuLjAzYWVjMmJiMzFiOGFhZTUyOTRiNmY3OTk4NDY4ZGRi
OTE2YTk4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKQEAgLTMzLDYgKzMzLDcgQEAK
IAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTUwLDEzICs1
MSwxMyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IEluaXQgewogICAgICAgICBib29sIHdpdGhDcmVk
ZW50aWFsczsKICAgICB9OwotICAgIHN0YXRpYyBSZWZQdHI8RXZlbnRTb3VyY2U+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IEluaXQmLCBF
eGNlcHRpb25Db2RlJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxFdmVudFNvdXJjZT4+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IEluaXQmKTsKICAgICB2aXJ0dWFsIH5FdmVudFNvdXJjZSgpOwogCiAgICAgY29uc3QgU3RyaW5n
JiB1cmwoKSBjb25zdDsKICAgICBib29sIHdpdGhDcmVkZW50aWFscygpIGNvbnN0OwogCi0gICAg
dHlwZWRlZiBzaG9ydCBTdGF0ZTsKKyAgICB1c2luZyBTdGF0ZSA9IHNob3J0OwogICAgIHN0YXRp
YyBjb25zdCBTdGF0ZSBDT05ORUNUSU5HID0gMDsKICAgICBzdGF0aWMgY29uc3QgU3RhdGUgT1BF
TiA9IDE7CiAgICAgc3RhdGljIGNvbnN0IFN0YXRlIENMT1NFRCA9IDI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRTb3VyY2UuaWRsCmluZGV4IDMyNGUyYmNjNjg0ZWM3YTQ5OTMwNjkwODgyNmNmMWYwZmU4
YzIwZTkuLjk2MjQzNjA5YWRjOTBlN2U4MTE0NDBiZmExNDQwNDI4ZjE3MDM4YmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRTb3VyY2UuaWRsCkBAIC0zNCw3ICszNCw3IEBACiAgICAgQWN0aXZlRE9N
T2JqZWN0LAogICAgIENvbnN0cnVjdG9yKFVTVlN0cmluZyB1cmwsIG9wdGlvbmFsIEV2ZW50U291
cmNlSW5pdCBldmVudFNvdXJjZUluaXREaWN0KSwKICAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsCi0gICAgQ29uc3RydWN0b3JNYXlUaHJvd0xlZ2FjeUV4Y2Vw
dGlvbiwKKyAgICBDb25zdHJ1Y3Rvck1heVRocm93RXhjZXB0aW9uLAogXSBpbnRlcmZhY2UgRXZl
bnRTb3VyY2UgOiBFdmVudFRhcmdldCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFVTVlN0cmlu
ZyBVUkw7IC8vIExvd2VyY2FzZWQgLnVybCBpcyB0aGUgb25lIGluIHRoZSBzcGVjLCBidXQgbGVh
dmluZyAuVVJMIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFVTVlN0cmluZyB1cmw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCmluZGV4IDAwZThiZWI0
MDFmNDcxYjEwYzNhNDc5MjcxMjJmYzc3MWNiOTE0NDcuLjM5ZjgyZWJiMjg4NDQxMzFlN2JlZjM2
NzIwNWQ4OGI1YzhkNzg0MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCkBAIC0xNTgsMTYg
KzE1OCwxNSBAQCB2b2lkIExvY2F0aW9uOjpzZXRIcmVmKERPTVdpbmRvdyYgYWN0aXZlV2luZG93
LCBET01XaW5kb3cmIGZpcnN0V2luZG93LCBjb25zdCBTdAogICAgIHNldExvY2F0aW9uKGFjdGl2
ZVdpbmRvdywgZmlyc3RXaW5kb3csIHVybCk7CiB9CiAKLXZvaWQgTG9jYXRpb246OnNldFByb3Rv
Y29sKERPTVdpbmRvdyYgYWN0aXZlV2luZG93LCBET01XaW5kb3cmIGZpcnN0V2luZG93LCBjb25z
dCBTdHJpbmcmIHByb3RvY29sLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+
IExvY2F0aW9uOjpzZXRQcm90b2NvbChET01XaW5kb3cmIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93
JiBmaXJzdFdpbmRvdywgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKIHsKICAgICBpZiAoIW1fZnJh
bWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBVUkwgdXJsID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCk7Ci0gICAgaWYgKCF1cmwuc2V0UHJvdG9jb2wocHJv
dG9jb2wpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoIXVybC5zZXRQcm90b2NvbChwcm90b2NvbCkpCisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTWU5UQVhfRVJSIH07CiAgICAgc2V0TG9jYXRpb24oYWN0aXZlV2luZG93LCBm
aXJzdFdpbmRvdywgdXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIExv
Y2F0aW9uOjpzZXRIb3N0KERPTVdpbmRvdyYgYWN0aXZlV2luZG93LCBET01XaW5kb3cmIGZpcnN0
V2luZG93LCBjb25zdCBTdHJpbmcmIGhvc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0xvY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmgKaW5kZXggZDhi
NTNlYjRhMDU4YjcxNjA3MjgxMjFiYTljYjE2MWViMDk2Njg1Mi4uMzRhZDk1ZGFlNDU2YjY1NzI4
OWQ1MDZhNGEyNThlMDUwMzkzZDM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9M
b2NhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uaApAQCAtMjYsMTQg
KzI2LDEyIEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgTG9jYXRpb25faAotI2RlZmlu
ZSBMb2NhdGlvbl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIK
ICNpbmNsdWRlICJET01XaW5kb3dQcm9wZXJ0eS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgi
CiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC01NCw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcGxhY2UoRE9NV2luZG93
JiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyYgZmlyc3RXaW5kb3csIGNvbnN0IFN0cmluZyYpOwog
ICAgIHZvaWQgcmVsb2FkKERPTVdpbmRvdyYgYWN0aXZlV2luZG93KTsKIAotICAgIHZvaWQgc2V0
UHJvdG9jb2woRE9NV2luZG93JiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyYgZmlyc3RXaW5kb3cs
IGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRQcm90b2NvbChET01XaW5kb3cmIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93JiBmaXJzdFdpbmRv
dywgY29uc3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIHByb3RvY29sKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRIb3N0KERPTVdpbmRvdyYgYWN0aXZlV2luZG93LCBET01XaW5kb3cmIGZpcnN0V2luZG93
LCBjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgaG9zdCgpIGNvbnN0OwpAQCAtODMsNSArODEs
MyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
TG9jYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAppbmRleCAwNTJjOGJjY2FkODhmYzE4
ZmQ3NzE2OTAwNjZlZmQ3ZGNlMTNlOGE4Li5lNDM1ZWViMTVmMjM4YTdmMmVkZmUxODA1YTMyYTgz
MGQwNTcyMzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbApAQCAtNDgsNyArNDgsNyBAQAog
ICAgIFtDYWxsV2l0aD1BY3RpdmVXaW5kb3csIEZvcndhcmREZWNsYXJlSW5IZWFkZXJdIHZvaWQg
cmVsb2FkKCk7CiAKICAgICAvLyBVUkkgZGVjb21wb3NpdGlvbiBhdHRyaWJ1dGVzCi0gICAgW1Nl
dHRlckNhbGxXaXRoPUFjdGl2ZVdpbmRvdyZGaXJzdFdpbmRvdywgU2V0dGVyTWF5VGhyb3dMZWdh
Y3lFeGNlcHRpb25dIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgcHJvdG9jb2w7CisgICAgW1NldHRlckNh
bGxXaXRoPUFjdGl2ZVdpbmRvdyZGaXJzdFdpbmRvdywgU2V0dGVyTWF5VGhyb3dFeGNlcHRpb25d
IGF0dHJpYnV0ZSBVU1ZTdHJpbmcgcHJvdG9jb2w7CiAgICAgW1NldHRlckNhbGxXaXRoPUFjdGl2
ZVdpbmRvdyZGaXJzdFdpbmRvd10gYXR0cmlidXRlIFVTVlN0cmluZyBob3N0OwogICAgIFtTZXR0
ZXJDYWxsV2l0aD1BY3RpdmVXaW5kb3cmRmlyc3RXaW5kb3ddIGF0dHJpYnV0ZSBVU1ZTdHJpbmcg
aG9zdG5hbWU7CiAgICAgW1NldHRlckNhbGxXaXRoPUFjdGl2ZVdpbmRvdyZGaXJzdFdpbmRvd10g
YXR0cmlidXRlIFVTVlN0cmluZyBwb3J0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QZXJmb3JtYW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmNwcApp
bmRleCAxMWI4NjQ3MDgxYzJhMTUyMDQwNjBmZDE2NzA1OTM2YWQ1ZmEwYzE5Li5iODg0OWE4ZmQ4
MmU3YzY5OGM2MTBlYmIyY2QwZGE4YmIyYTk0ZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlLmNwcApAQCAtMzEsOSArMzEsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQZXJmb3JtYW5jZS5oIgogCiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0jaW5jbHVk
ZSAiUGVyZm9ybWFuY2UuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKQEAgLTQ5LDE1ICs0OSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIGNvbnN0IHNpemVfdCBkZWZhdWx0UmVzb3VyY2VUaW1pbmdCdWZmZXJTaXplID0g
MTUwOwotCiBQZXJmb3JtYW5jZTo6UGVyZm9ybWFuY2UoRnJhbWUmIGZyYW1lKQogICAgIDogRE9N
V2luZG93UHJvcGVydHkoJmZyYW1lKQotICAgICwgbV9yZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUo
ZGVmYXVsdFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZSkKICAgICAsIG1fcmVmZXJlbmNlVGltZShm
cmFtZS5kb2N1bWVudCgpLT5sb2FkZXIoKSA/IGZyYW1lLmRvY3VtZW50KCktPmxvYWRlcigpLT50
aW1pbmcoKS5yZWZlcmVuY2VNb25vdG9uaWNUaW1lKCkgOiBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKSkKLSNpZiBFTkFCTEUoVVNFUl9USU1JTkcpCi0gICAgLCBtX3VzZXJUaW1pbmcobnVs
bHB0cikKLSNlbmRpZiAvLyBFTkFCTEUoVVNFUl9USU1JTkcpCiB7CiAgICAgQVNTRVJUKG1fcmVm
ZXJlbmNlVGltZSk7CiB9CkBAIC03MywyMCArNjcsMTggQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogUGVyZm9ybWFuY2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogICAgIHJldHVy
biBmcmFtZSgpLT5kb2N1bWVudCgpOwogfQogCi1QZXJmb3JtYW5jZU5hdmlnYXRpb24qIFBlcmZv
cm1hbmNlOjpuYXZpZ2F0aW9uKCkgY29uc3QKK1BlcmZvcm1hbmNlTmF2aWdhdGlvbiYgUGVyZm9y
bWFuY2U6Om5hdmlnYXRpb24oKQogewogICAgIGlmICghbV9uYXZpZ2F0aW9uKQogICAgICAgICBt
X25hdmlnYXRpb24gPSBQZXJmb3JtYW5jZU5hdmlnYXRpb246OmNyZWF0ZShtX2ZyYW1lKTsKLQot
ICAgIHJldHVybiBtX25hdmlnYXRpb24uZ2V0KCk7CisgICAgcmV0dXJuICptX25hdmlnYXRpb247
CiB9CiAKLVBlcmZvcm1hbmNlVGltaW5nKiBQZXJmb3JtYW5jZTo6dGltaW5nKCkgY29uc3QKK1Bl
cmZvcm1hbmNlVGltaW5nJiBQZXJmb3JtYW5jZTo6dGltaW5nKCkKIHsKICAgICBpZiAoIW1fdGlt
aW5nKQogICAgICAgICBtX3RpbWluZyA9IFBlcmZvcm1hbmNlVGltaW5nOjpjcmVhdGUobV9mcmFt
ZSk7Ci0KLSAgICByZXR1cm4gbV90aW1pbmcuZ2V0KCk7CisgICAgcmV0dXJuICptX3RpbWluZzsK
IH0KIAogVmVjdG9yPFJlZlB0cjxQZXJmb3JtYW5jZUVudHJ5Pj4gUGVyZm9ybWFuY2U6OmdldEVu
dHJpZXMoKSBjb25zdApAQCAtMTY0LDcgKzE1Niw3IEBAIHZvaWQgUGVyZm9ybWFuY2U6OnNldFJl
c291cmNlVGltaW5nQnVmZmVyU2l6ZSh1bnNpZ25lZCBzaXplKQogICAgICAgICBkaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlc291cmNldGltaW5nYnVmZmVyZnVsbEV2
ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAotdm9pZCBQZXJmb3JtYW5jZTo6YWRkUmVzb3VyY2VU
aW1pbmcoY29uc3QgU3RyaW5nJiBpbml0aWF0b3JOYW1lLCBEb2N1bWVudCogaW5pdGlhdG9yRG9j
dW1lbnQsIGNvbnN0IFVSTCYgb3JpZ2luYWxVUkwsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBMb2FkVGltaW5nIGxvYWRUaW1pbmcpCit2b2lkIFBlcmZvcm1hbmNlOjphZGRSZXNv
dXJjZVRpbWluZyhjb25zdCBTdHJpbmcmIGluaXRpYXRvck5hbWUsIERvY3VtZW50KiBpbml0aWF0
b3JEb2N1bWVudCwgY29uc3QgVVJMJiBvcmlnaW5hbFVSTCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIGNvbnN0IExvYWRUaW1pbmcmIGxvYWRUaW1pbmcpCiB7CiAgICAgaWYgKGlz
UmVzb3VyY2VUaW1pbmdCdWZmZXJGdWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4MywzMyAr
MTc1LDMyIEBAIGJvb2wgUGVyZm9ybWFuY2U6OmlzUmVzb3VyY2VUaW1pbmdCdWZmZXJGdWxsKCkK
IH0KIAogI2lmIEVOQUJMRShVU0VSX1RJTUlORykKLXZvaWQgUGVyZm9ybWFuY2U6OndlYmtpdE1h
cmsoY29uc3QgU3RyaW5nJiBtYXJrTmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCisKK0V4Y2VwdGlv
bk9yPHZvaWQ+IFBlcmZvcm1hbmNlOjp3ZWJraXRNYXJrKGNvbnN0IFN0cmluZyYgbWFya05hbWUp
CiB7Ci0gICAgZWMgPSAwOwogICAgIGlmICghbV91c2VyVGltaW5nKQotICAgICAgICBtX3VzZXJU
aW1pbmcgPSBVc2VyVGltaW5nOjpjcmVhdGUodGhpcyk7Ci0gICAgbV91c2VyVGltaW5nLT5tYXJr
KG1hcmtOYW1lLCBlYyk7CisgICAgICAgIG1fdXNlclRpbWluZyA9IHN0ZDo6bWFrZV91bmlxdWU8
VXNlclRpbWluZz4oKnRoaXMpOworICAgIHJldHVybiBtX3VzZXJUaW1pbmctPm1hcmsobWFya05h
bWUpOwogfQogCiB2b2lkIFBlcmZvcm1hbmNlOjp3ZWJraXRDbGVhck1hcmtzKGNvbnN0IFN0cmlu
ZyYgbWFya05hbWUpCiB7CiAgICAgaWYgKCFtX3VzZXJUaW1pbmcpCi0gICAgICAgIG1fdXNlclRp
bWluZyA9IFVzZXJUaW1pbmc6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgbV91c2VyVGltaW5nID0g
c3RkOjptYWtlX3VuaXF1ZTxVc2VyVGltaW5nPigqdGhpcyk7CiAgICAgbV91c2VyVGltaW5nLT5j
bGVhck1hcmtzKG1hcmtOYW1lKTsKIH0KIAotdm9pZCBQZXJmb3JtYW5jZTo6d2Via2l0TWVhc3Vy
ZShjb25zdCBTdHJpbmcmIG1lYXN1cmVOYW1lLCBjb25zdCBTdHJpbmcmIHN0YXJ0TWFyaywgY29u
c3QgU3RyaW5nJiBlbmRNYXJrLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+
IFBlcmZvcm1hbmNlOjp3ZWJraXRNZWFzdXJlKGNvbnN0IFN0cmluZyYgbWVhc3VyZU5hbWUsIGNv
bnN0IFN0cmluZyYgc3RhcnRNYXJrLCBjb25zdCBTdHJpbmcmIGVuZE1hcmspCiB7Ci0gICAgZWMg
PSAwOwogICAgIGlmICghbV91c2VyVGltaW5nKQotICAgICAgICBtX3VzZXJUaW1pbmcgPSBVc2Vy
VGltaW5nOjpjcmVhdGUodGhpcyk7Ci0gICAgbV91c2VyVGltaW5nLT5tZWFzdXJlKG1lYXN1cmVO
YW1lLCBzdGFydE1hcmssIGVuZE1hcmssIGVjKTsKKyAgICAgICAgbV91c2VyVGltaW5nID0gc3Rk
OjptYWtlX3VuaXF1ZTxVc2VyVGltaW5nPigqdGhpcyk7CisgICAgcmV0dXJuIG1fdXNlclRpbWlu
Zy0+bWVhc3VyZShtZWFzdXJlTmFtZSwgc3RhcnRNYXJrLCBlbmRNYXJrKTsKIH0KIAogdm9pZCBQ
ZXJmb3JtYW5jZTo6d2Via2l0Q2xlYXJNZWFzdXJlcyhjb25zdCBTdHJpbmcmIG1lYXN1cmVOYW1l
KQogewogICAgIGlmICghbV91c2VyVGltaW5nKQotICAgICAgICBtX3VzZXJUaW1pbmcgPSBVc2Vy
VGltaW5nOjpjcmVhdGUodGhpcyk7CisgICAgICAgIG1fdXNlclRpbWluZyA9IHN0ZDo6bWFrZV91
bmlxdWU8VXNlclRpbWluZz4oKnRoaXMpOwogICAgIG1fdXNlclRpbWluZy0+Y2xlYXJNZWFzdXJl
cyhtZWFzdXJlTmFtZSk7CiB9CiAKQEAgLTIyNCw3ICsyMTUsNyBAQCBkb3VibGUgUGVyZm9ybWFu
Y2U6Om5vdygpIGNvbnN0CiBkb3VibGUgUGVyZm9ybWFuY2U6OnJlZHVjZVRpbWVSZXNvbHV0aW9u
KGRvdWJsZSBzZWNvbmRzKQogewogICAgIGNvbnN0IGRvdWJsZSByZXNvbHV0aW9uU2Vjb25kcyA9
IDAuMDAwMDA1OwotICAgIHJldHVybiBmbG9vcihzZWNvbmRzIC8gcmVzb2x1dGlvblNlY29uZHMp
ICogcmVzb2x1dGlvblNlY29uZHM7CisgICAgcmV0dXJuIHN0ZDo6Zmxvb3Ioc2Vjb25kcyAvIHJl
c29sdXRpb25TZWNvbmRzKSAqIHJlc29sdXRpb25TZWNvbmRzOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmgKaW5kZXggOWRhOTU0ZDA1MDRjOWVi
NDU0YTNmM2FiMjhjNTA2NWM1YTg0ZmE5ZS4uZTc4MTZiYTYyZGEyNjg0ZGQ1NDcxNWVjMDNkZjk1
YTQ0OTU0NDQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuaApAQCAtMzYsMzMgKzM2LDI2
IEBACiAKICNpbmNsdWRlICJET01XaW5kb3dQcm9wZXJ0eS5oIgogI2luY2x1ZGUgIkV2ZW50VGFy
Z2V0LmgiCi0jaW5jbHVkZSAiUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiUGVy
Zm9ybWFuY2VUaW1pbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgTG9hZFRpbWluZzsKIGNsYXNz
IFBlcmZvcm1hbmNlRW50cnk7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBQZXJmb3Jt
YW5jZU5hdmlnYXRpb247CitjbGFzcyBQZXJmb3JtYW5jZVRpbWluZzsKIGNsYXNzIFJlc291cmNl
UmVzcG9uc2U7Ci1jbGFzcyBVc2VyVGltaW5nOwogY2xhc3MgVVJMOworY2xhc3MgVXNlclRpbWlu
ZzsKIAogY2xhc3MgUGVyZm9ybWFuY2UgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZXJmb3Jt
YW5jZT4sIHB1YmxpYyBET01XaW5kb3dQcm9wZXJ0eSwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElu
bGluZURhdGEgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8UGVyZm9ybWFuY2U+IGNyZWF0ZShG
cmFtZSYgZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGVyZm9ybWFuY2UoZnJhbWUpKTsg
fQogICAgIH5QZXJmb3JtYW5jZSgpOwogCi0gICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQZXJmb3JtYW5jZUV2ZW50
VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFBlcmZvcm1hbmNlTmF2
aWdhdGlvbiogbmF2aWdhdGlvbigpIGNvbnN0OwotICAgIFBlcmZvcm1hbmNlVGltaW5nKiB0aW1p
bmcoKSBjb25zdDsKKyAgICBQZXJmb3JtYW5jZU5hdmlnYXRpb24mIG5hdmlnYXRpb24oKTsKKyAg
ICBQZXJmb3JtYW5jZVRpbWluZyYgdGltaW5nKCk7CiAgICAgZG91YmxlIG5vdygpIGNvbnN0Owog
CiAgICAgVmVjdG9yPFJlZlB0cjxQZXJmb3JtYW5jZUVudHJ5Pj4gZ2V0RW50cmllcygpIGNvbnN0
OwpAQCAtNzIsMzkgKzY1LDQzIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VUaW1p
bmdzKCk7CiAgICAgdm9pZCBzZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUodW5zaWduZWQpOwog
Ci0gICAgdm9pZCBhZGRSZXNvdXJjZVRpbWluZyhjb25zdCBTdHJpbmcmIGluaXRpYXRvck5hbWUs
IERvY3VtZW50KiwgY29uc3QgVVJMJiBvcmlnaW5hbFVSTCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYsIExvYWRUaW1pbmcpOworICAgIHZvaWQgYWRkUmVzb3VyY2VUaW1pbmcoY29uc3QgU3RyaW5n
JiBpbml0aWF0b3JOYW1lLCBEb2N1bWVudCosIGNvbnN0IFVSTCYgb3JpZ2luYWxVUkwsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBMb2FkVGltaW5nJik7CiAKLSAgICB1c2luZyBSZWZD
b3VudGVkPFBlcmZvcm1hbmNlPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8UGVyZm9ybWFu
Y2U+OjpkZXJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkOjpyZWY7CisgICAgdXNpbmcgUmVmQ291
bnRlZDo6ZGVyZWY7CiAKICNpZiBFTkFCTEUoVVNFUl9USU1JTkcpCi0gICAgdm9pZCB3ZWJraXRN
YXJrKGNvbnN0IFN0cmluZyYgbWFya05hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBFeGNlcHRp
b25Pcjx2b2lkPiB3ZWJraXRNYXJrKGNvbnN0IFN0cmluZyYgbWFya05hbWUpOwogICAgIHZvaWQg
d2Via2l0Q2xlYXJNYXJrcyhjb25zdCBTdHJpbmcmIG1hcmtOYW1lKTsKIAotICAgIHZvaWQgd2Vi
a2l0TWVhc3VyZShjb25zdCBTdHJpbmcmIG1lYXN1cmVOYW1lLCBjb25zdCBTdHJpbmcmIHN0YXJ0
TWFyaywgY29uc3QgU3RyaW5nJiBlbmRNYXJrLCBFeGNlcHRpb25Db2RlJik7CisgICAgRXhjZXB0
aW9uT3I8dm9pZD4gd2Via2l0TWVhc3VyZShjb25zdCBTdHJpbmcmIG1lYXN1cmVOYW1lLCBjb25z
dCBTdHJpbmcmIHN0YXJ0TWFyaywgY29uc3QgU3RyaW5nJiBlbmRNYXJrKTsKICAgICB2b2lkIHdl
YmtpdENsZWFyTWVhc3VyZXMoY29uc3QgU3RyaW5nJiBtZWFzdXJlTmFtZSk7Ci0jZW5kaWYgLy8g
RU5BQkxFKFVTRVJfVElNSU5HKQorI2VuZGlmCiAKICAgICBzdGF0aWMgZG91YmxlIHJlZHVjZVRp
bWVSZXNvbHV0aW9uKGRvdWJsZSBzZWNvbmRzKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQ
ZXJmb3JtYW5jZShGcmFtZSYpOwogCi0gICAgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRl
IHsgcmVmKCk7IH0KLSAgICB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7IGRlcmVm
KCk7IH0KKyAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIFBlcmZvcm1hbmNlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9
CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0IGZpbmFsOworCisgICAgdm9pZCByZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgcmVmKCk7IH0K
KyAgICB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IGRlcmVmKCk7IH0KKwogICAgIGJv
b2wgaXNSZXNvdXJjZVRpbWluZ0J1ZmZlckZ1bGwoKTsKIAogICAgIG11dGFibGUgUmVmUHRyPFBl
cmZvcm1hbmNlTmF2aWdhdGlvbj4gbV9uYXZpZ2F0aW9uOwogICAgIG11dGFibGUgUmVmUHRyPFBl
cmZvcm1hbmNlVGltaW5nPiBtX3RpbWluZzsKIAogICAgIFZlY3RvcjxSZWZQdHI8UGVyZm9ybWFu
Y2VFbnRyeT4+IG1fcmVzb3VyY2VUaW1pbmdCdWZmZXI7Ci0gICAgdW5zaWduZWQgbV9yZXNvdXJj
ZVRpbWluZ0J1ZmZlclNpemU7CisgICAgdW5zaWduZWQgbV9yZXNvdXJjZVRpbWluZ0J1ZmZlclNp
emUgeyAxNTAgfTsKIAogICAgIGRvdWJsZSBtX3JlZmVyZW5jZVRpbWU7CiAKICNpZiBFTkFCTEUo
VVNFUl9USU1JTkcpCi0gICAgUmVmUHRyPFVzZXJUaW1pbmc+IG1fdXNlclRpbWluZzsKLSNlbmRp
ZiAvLyBFTkFCTEUoVVNFUl9USU1JTkcpCisgICAgc3RkOjp1bmlxdWVfcHRyPFVzZXJUaW1pbmc+
IG1fdXNlclRpbWluZzsKKyNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QZXJmb3JtYW5jZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
LmlkbAppbmRleCA5OThiMWUwMDYzOTkxOTViMzUxZGIyOTEwYzg5MDhjMzcyNGE1M2Y2Li41ZGQw
ZDAxNzdhOGQwZGZkZmIxMjc4MzY4NmM2ZGFiNTYxNjEwZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bl
cmZvcm1hbmNlLmlkbApAQCAtNDEsNyArNDEsNiBAQAogICAgIFtFbmFibGVkQXRSdW50aW1lPVJl
c291cmNlVGltaW5nXSBQZXJmb3JtYW5jZUVudHJ5TGlzdCBnZXRFbnRyaWVzQnlUeXBlKERPTVN0
cmluZyBlbnRyeVR5cGUpOwogICAgIFtFbmFibGVkQXRSdW50aW1lPVJlc291cmNlVGltaW5nXSBQ
ZXJmb3JtYW5jZUVudHJ5TGlzdCBnZXRFbnRyaWVzQnlOYW1lKERPTVN0cmluZyBuYW1lLCBvcHRp
b25hbCBET01TdHJpbmcgZW50cnlUeXBlKTsKIAotCiAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9UmVz
b3VyY2VUaW1pbmddIHZvaWQgY2xlYXJSZXNvdXJjZVRpbWluZ3MoKTsKICAgICBbRW5hYmxlZEF0
UnVudGltZT1SZXNvdXJjZVRpbWluZ10gdm9pZCBzZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUo
dW5zaWduZWQgbG9uZyBtYXhTaXplKTsKIApAQCAtNDksMTAgKzQ4LDEwIEBACiAKICAgICAvLyBT
ZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9DUi11c2VyLXRpbWluZy0yMDEyMDcyNi8KICNp
ZiBkZWZpbmVkKEVOQUJMRV9VU0VSX1RJTUlORykgJiYgRU5BQkxFX1VTRVJfVElNSU5HCi0gICAg
W01heVRocm93TGVnYWN5RXhjZXB0aW9uXSB2b2lkIHdlYmtpdE1hcmsoRE9NU3RyaW5nIG1hcmtO
YW1lKTsKLSAgICB2b2lkIHdlYmtpdENsZWFyTWFya3Mob3B0aW9uYWwgIERPTVN0cmluZyBtYXJr
TmFtZSk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIHdlYmtpdE1hcmsoRE9NU3RyaW5n
IG1hcmtOYW1lKTsKKyAgICB2b2lkIHdlYmtpdENsZWFyTWFya3Mob3B0aW9uYWwgRE9NU3RyaW5n
IG1hcmtOYW1lKTsKIAotICAgIFtNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gdm9pZCB3ZWJraXRN
ZWFzdXJlKERPTVN0cmluZyBtZWFzdXJlTmFtZSwgb3B0aW9uYWwgRE9NU3RyaW5nIHN0YXJ0TWFy
aywgb3B0aW9uYWwgRE9NU3RyaW5nIGVuZE1hcmspOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0g
dm9pZCB3ZWJraXRNZWFzdXJlKERPTVN0cmluZyBtZWFzdXJlTmFtZSwgb3B0aW9uYWwgRE9NU3Ry
aW5nIHN0YXJ0TWFyaywgb3B0aW9uYWwgRE9NU3RyaW5nIGVuZE1hcmspOwogICAgIHZvaWQgd2Vi
a2l0Q2xlYXJNZWFzdXJlcyhvcHRpb25hbCBET01TdHJpbmcgbWVhc3VyZU5hbWUpOwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmNwcAppbmRl
eCA1Yzg1ZmQxM2U1NjZjM2I5M2NlYWQ0NjIyYWI3ODhhZDA2NjkwZDI1Li4wMGQ2OTc0MzA5MzUw
ZTU2MmE5NzY1NTdlNTg3MTA0YWU2MTk0NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZVVzZXJUaW1pbmcuY3BwCkBAIC0yOCw0MiArMjgsNDYgQEAKIAogI2lmIEVOQUJM
RShVU0VSX1RJTUlORykKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQ
ZXJmb3JtYW5jZS5oIgorI2luY2x1ZGUgIlBlcmZvcm1hbmNlRW50cnkuaCIKICNpbmNsdWRlICJQ
ZXJmb3JtYW5jZU1hcmsuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5jZU1lYXN1cmUuaCIKKyNpbmNs
dWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3
dGYvZHRvYS91dGlscy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIChQZXJmb3JtYW5jZVRpbWluZzo6Kk5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbikoKSBjb25z
dDsKKwogc3RhdGljIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbiByZXN0cmljdGVkTWFya0Z1bmN0
aW9uKGNvbnN0IFN0cmluZyYgbWFya05hbWUpCiB7CiAgICAgdXNpbmcgTWFwUGFpciA9IHN0ZDo6
cGFpcjxBU0NJSUxpdGVyYWwsIE5hdmlnYXRpb25UaW1pbmdGdW5jdGlvbj47CiAgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6YXJyYXk8TWFwUGFpciwgMjE+IHBhaXJzID0geyB7Ci0gICAgICAgIE1hcFBh
aXJ7IEFTQ0lJTGl0ZXJhbCgibmF2aWdhdGlvblN0YXJ0IiksICZQZXJmb3JtYW5jZVRpbWluZzo6
bmF2aWdhdGlvblN0YXJ0IH0sCi0gICAgICAgIE1hcFBhaXJ7IEFTQ0lJTGl0ZXJhbCgidW5sb2Fk
RXZlbnRTdGFydCIpLCAmUGVyZm9ybWFuY2VUaW1pbmc6OnVubG9hZEV2ZW50U3RhcnQgfSwKLSAg
ICAgICAgTWFwUGFpcnsgQVNDSUlMaXRlcmFsKCJ1bmxvYWRFdmVudEVuZCIpLCAmUGVyZm9ybWFu
Y2VUaW1pbmc6OnVubG9hZEV2ZW50RW5kIH0sCi0gICAgICAgIE1hcFBhaXJ7IEFTQ0lJTGl0ZXJh
bCgicmVkaXJlY3RTdGFydCIpLCAmUGVyZm9ybWFuY2VUaW1pbmc6OnJlZGlyZWN0U3RhcnQgfSwK
LSAgICAgICAgTWFwUGFpcnsgQVNDSUlMaXRlcmFsKCJyZWRpcmVjdEVuZCIpLCAmUGVyZm9ybWFu
Y2VUaW1pbmc6OnJlZGlyZWN0RW5kIH0sCi0gICAgICAgIE1hcFBhaXJ7IEFTQ0lJTGl0ZXJhbCgi
ZmV0Y2hTdGFydCIpLCAmUGVyZm9ybWFuY2VUaW1pbmc6OmZldGNoU3RhcnQgfSwKLSAgICAgICAg
TWFwUGFpcnsgQVNDSUlMaXRlcmFsKCJkb21haW5Mb29rdXBTdGFydCIpLCAmUGVyZm9ybWFuY2VU
aW1pbmc6OmRvbWFpbkxvb2t1cFN0YXJ0IH0sCi0gICAgICAgIE1hcFBhaXJ7IEFTQ0lJTGl0ZXJh
bCgiZG9tYWluTG9va3VwRW5kIiksICZQZXJmb3JtYW5jZVRpbWluZzo6ZG9tYWluTG9va3VwRW5k
IH0sCi0gICAgICAgIE1hcFBhaXJ7IEFTQ0lJTGl0ZXJhbCgiY29ubmVjdFN0YXJ0IiksICZQZXJm
b3JtYW5jZVRpbWluZzo6Y29ubmVjdFN0YXJ0IH0sCi0gICAgICAgIE1hcFBhaXJ7IEFTQ0lJTGl0
ZXJhbCgiY29ubmVjdEVuZCIpLCAmUGVyZm9ybWFuY2VUaW1pbmc6OmNvbm5lY3RFbmQgfSwKLSAg
ICAgICAgTWFwUGFpcnsgQVNDSUlMaXRlcmFsKCJzZWN1cmVDb25uZWN0aW9uU3RhcnQiKSwgJlBl
cmZvcm1hbmNlVGltaW5nOjpzZWN1cmVDb25uZWN0aW9uU3RhcnQgfSwKLSAgICAgICAgTWFwUGFp
cnsgQVNDSUlMaXRlcmFsKCJyZXF1ZXN0U3RhcnQiKSwgJlBlcmZvcm1hbmNlVGltaW5nOjpyZXF1
ZXN0U3RhcnQgfSwKLSAgICAgICAgTWFwUGFpcnsgQVNDSUlMaXRlcmFsKCJyZXNwb25zZVN0YXJ0
IiksICZQZXJmb3JtYW5jZVRpbWluZzo6cmVzcG9uc2VTdGFydCB9LAotICAgICAgICBNYXBQYWly
eyBBU0NJSUxpdGVyYWwoInJlc3BvbnNlRW5kIiksICZQZXJmb3JtYW5jZVRpbWluZzo6cmVzcG9u
c2VFbmQgfSwKLSAgICAgICAgTWFwUGFpcnsgQVNDSUlMaXRlcmFsKCJkb21Mb2FkaW5nIiksICZQ
ZXJmb3JtYW5jZVRpbWluZzo6ZG9tTG9hZGluZyB9LAotICAgICAgICBNYXBQYWlyeyBBU0NJSUxp
dGVyYWwoImRvbUludGVyYWN0aXZlIiksICZQZXJmb3JtYW5jZVRpbWluZzo6ZG9tSW50ZXJhY3Rp
dmUgfSwKLSAgICAgICAgTWFwUGFpcnsgQVNDSUlMaXRlcmFsKCJkb21Db250ZW50TG9hZGVkRXZl
bnRTdGFydCIpLCAmUGVyZm9ybWFuY2VUaW1pbmc6OmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0
IH0sCi0gICAgICAgIE1hcFBhaXJ7IEFTQ0lJTGl0ZXJhbCgiZG9tQ29udGVudExvYWRlZEV2ZW50
RW5kIiksICZQZXJmb3JtYW5jZVRpbWluZzo6ZG9tQ29udGVudExvYWRlZEV2ZW50RW5kIH0sCi0g
ICAgICAgIE1hcFBhaXJ7IEFTQ0lJTGl0ZXJhbCgiZG9tQ29tcGxldGUiKSwgJlBlcmZvcm1hbmNl
VGltaW5nOjpkb21Db21wbGV0ZSB9LAotICAgICAgICBNYXBQYWlyeyBBU0NJSUxpdGVyYWwoImxv
YWRFdmVudFN0YXJ0IiksICZQZXJmb3JtYW5jZVRpbWluZzo6bG9hZEV2ZW50U3RhcnQgfSwKLSAg
ICAgICAgTWFwUGFpcnsgQVNDSUlMaXRlcmFsKCJsb2FkRXZlbnRFbmQiKSwgJlBlcmZvcm1hbmNl
VGltaW5nOjpsb2FkRXZlbnRFbmQgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwgeyAibmF2aWdh
dGlvblN0YXJ0IiB9LCAmUGVyZm9ybWFuY2VUaW1pbmc6Om5hdmlnYXRpb25TdGFydCB9LAorICAg
ICAgICB7IEFTQ0lJTGl0ZXJhbCB7ICJ1bmxvYWRFdmVudFN0YXJ0IiB9LCAmUGVyZm9ybWFuY2VU
aW1pbmc6OnVubG9hZEV2ZW50U3RhcnQgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwgeyAidW5s
b2FkRXZlbnRFbmQiIH0sICZQZXJmb3JtYW5jZVRpbWluZzo6dW5sb2FkRXZlbnRFbmQgfSwKKyAg
ICAgICAgeyBBU0NJSUxpdGVyYWwgeyAicmVkaXJlY3RTdGFydCIgfSwgJlBlcmZvcm1hbmNlVGlt
aW5nOjpyZWRpcmVjdFN0YXJ0IH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsIHsgInJlZGlyZWN0
RW5kIiB9LCAmUGVyZm9ybWFuY2VUaW1pbmc6OnJlZGlyZWN0RW5kIH0sCisgICAgICAgIHsgQVND
SUlMaXRlcmFsIHsgImZldGNoU3RhcnQiIH0sICZQZXJmb3JtYW5jZVRpbWluZzo6ZmV0Y2hTdGFy
dCB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCB7ICJkb21haW5Mb29rdXBTdGFydCIgfSwgJlBl
cmZvcm1hbmNlVGltaW5nOjpkb21haW5Mb29rdXBTdGFydCB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCB7ICJkb21haW5Mb29rdXBFbmQiIH0sICZQZXJmb3JtYW5jZVRpbWluZzo6ZG9tYWluTG9v
a3VwRW5kIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsIHsgImNvbm5lY3RTdGFydCIgfSwgJlBl
cmZvcm1hbmNlVGltaW5nOjpjb25uZWN0U3RhcnQgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwg
eyAiY29ubmVjdEVuZCIgfSwgJlBlcmZvcm1hbmNlVGltaW5nOjpjb25uZWN0RW5kIH0sCisgICAg
ICAgIHsgQVNDSUlMaXRlcmFsIHsgInNlY3VyZUNvbm5lY3Rpb25TdGFydCIgfSwgJlBlcmZvcm1h
bmNlVGltaW5nOjpzZWN1cmVDb25uZWN0aW9uU3RhcnQgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVy
YWwgeyAicmVxdWVzdFN0YXJ0IiB9LCAmUGVyZm9ybWFuY2VUaW1pbmc6OnJlcXVlc3RTdGFydCB9
LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCB7ICJyZXNwb25zZVN0YXJ0IiB9LCAmUGVyZm9ybWFu
Y2VUaW1pbmc6OnJlc3BvbnNlU3RhcnQgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwgeyAicmVz
cG9uc2VFbmQiIH0sICZQZXJmb3JtYW5jZVRpbWluZzo6cmVzcG9uc2VFbmQgfSwKKyAgICAgICAg
eyBBU0NJSUxpdGVyYWwgeyAiZG9tTG9hZGluZyIgfSwgJlBlcmZvcm1hbmNlVGltaW5nOjpkb21M
b2FkaW5nIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsIHsgImRvbUludGVyYWN0aXZlIiB9LCAm
UGVyZm9ybWFuY2VUaW1pbmc6OmRvbUludGVyYWN0aXZlIH0sCisgICAgICAgIHsgQVNDSUlMaXRl
cmFsIHsgImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiB9LCAmUGVyZm9ybWFuY2VUaW1pbmc6
OmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsIHsg
ImRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCIgfSwgJlBlcmZvcm1hbmNlVGltaW5nOjpkb21Db250
ZW50TG9hZGVkRXZlbnRFbmQgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwgeyAiZG9tQ29tcGxl
dGUiIH0sICZQZXJmb3JtYW5jZVRpbWluZzo6ZG9tQ29tcGxldGUgfSwKKyAgICAgICAgeyBBU0NJ
SUxpdGVyYWwgeyAibG9hZEV2ZW50U3RhcnQiIH0sICZQZXJmb3JtYW5jZVRpbWluZzo6bG9hZEV2
ZW50U3RhcnQgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwgeyAibG9hZEV2ZW50RW5kIiB9LCAm
UGVyZm9ybWFuY2VUaW1pbmc6OmxvYWRFdmVudEVuZCB9LAogICAgIH0gfTsKIAogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9u
Pj4gbWFwOwpAQCAtNzcsNyArODEsNyBAQCBzdGF0aWMgTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9u
IHJlc3RyaWN0ZWRNYXJrRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBtYXJrTmFtZSkKIAogfSAvLyBu
YW1lc3BhY2UgYW5vbnltb3VzCiAKLVVzZXJUaW1pbmc6OlVzZXJUaW1pbmcoUGVyZm9ybWFuY2Uq
IHBlcmZvcm1hbmNlKQorVXNlclRpbWluZzo6VXNlclRpbWluZyhQZXJmb3JtYW5jZSYgcGVyZm9y
bWFuY2UpCiAgICAgOiBtX3BlcmZvcm1hbmNlKHBlcmZvcm1hbmNlKQogewogfQpAQCAtMTAyLDE2
ICsxMDYsMTMgQEAgc3RhdGljIHZvaWQgY2xlYXJQZWZvcm1hbmNlRW50cmllcyhQZXJmb3JtYW5j
ZUVudHJ5TWFwJiBwZXJmb3JtYW5jZUVudHJ5TWFwLCBjb24KICAgICBwZXJmb3JtYW5jZUVudHJ5
TWFwLnJlbW92ZShuYW1lKTsKIH0KIAotdm9pZCBVc2VyVGltaW5nOjptYXJrKGNvbnN0IFN0cmlu
ZyYgbWFya05hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gVXNlclRp
bWluZzo6bWFyayhjb25zdCBTdHJpbmcmIG1hcmtOYW1lKQogewotICAgIGVjID0gMDsKLSAgICBp
ZiAocmVzdHJpY3RlZE1hcmtGdW5jdGlvbihtYXJrTmFtZSkpIHsKLSAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXN0cmljdGVkTWFya0Z1
bmN0aW9uKG1hcmtOYW1lKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIg
fTsKIAotICAgIGRvdWJsZSBzdGFydFRpbWUgPSBtX3BlcmZvcm1hbmNlLT5ub3coKTsKLSAgICBp
bnNlcnRQZXJmb3JtYW5jZUVudHJ5KG1fbWFya3NNYXAsIFBlcmZvcm1hbmNlTWFyazo6Y3JlYXRl
KG1hcmtOYW1lLCBzdGFydFRpbWUpKTsKKyAgICBpbnNlcnRQZXJmb3JtYW5jZUVudHJ5KG1fbWFy
a3NNYXAsIFBlcmZvcm1hbmNlTWFyazo6Y3JlYXRlKG1hcmtOYW1lLCBtX3BlcmZvcm1hbmNlLm5v
dygpKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBVc2VyVGltaW5nOjpjbGVhck1hcmtz
KGNvbnN0IFN0cmluZyYgbWFya05hbWUpCkBAIC0xMTksNDggKzEyMCw0NyBAQCB2b2lkIFVzZXJU
aW1pbmc6OmNsZWFyTWFya3MoY29uc3QgU3RyaW5nJiBtYXJrTmFtZSkKICAgICBjbGVhclBlZm9y
bWFuY2VFbnRyaWVzKG1fbWFya3NNYXAsIG1hcmtOYW1lKTsKIH0KIAotZG91YmxlIFVzZXJUaW1p
bmc6OmZpbmRFeGlzdGluZ01hcmtTdGFydFRpbWUoY29uc3QgU3RyaW5nJiBtYXJrTmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjxkb3VibGU+IFVzZXJUaW1pbmc6OmZpbmRFeGlz
dGluZ01hcmtTdGFydFRpbWUoY29uc3QgU3RyaW5nJiBtYXJrTmFtZSkKIHsKLSAgICBlYyA9IDA7
Ci0KICAgICBpZiAobV9tYXJrc01hcC5jb250YWlucyhtYXJrTmFtZSkpCiAgICAgICAgIHJldHVy
biBtX21hcmtzTWFwLmdldChtYXJrTmFtZSkubGFzdCgpLT5zdGFydFRpbWUoKTsKIAogICAgIGlm
IChhdXRvIGZ1bmN0aW9uID0gcmVzdHJpY3RlZE1hcmtGdW5jdGlvbihtYXJrTmFtZSkpIHsKLSAg
ICAgICAgZG91YmxlIHZhbHVlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPigobV9wZXJmb3JtYW5jZS0+
dGltaW5nKCktPiooZnVuY3Rpb24pKSgpKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkgewotICAgICAg
ICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7Ci0gICAgICAgICAgICByZXR1cm4gMC4wOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZSAtIG1fcGVyZm9ybWFuY2UtPnRpbWluZygp
LT5uYXZpZ2F0aW9uU3RhcnQoKTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gc3RhdGljX2Nhc3Q8
ZG91YmxlPigobV9wZXJmb3JtYW5jZS50aW1pbmcoKS4qKGZ1bmN0aW9uKSkoKSk7CisgICAgICAg
IGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NF
U1NfRVJSIH07CisgICAgICAgIHJldHVybiB2YWx1ZSAtIG1fcGVyZm9ybWFuY2UudGltaW5nKCku
bmF2aWdhdGlvblN0YXJ0KCk7CiAgICAgfQogCi0gICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIHJl
dHVybiAwLjA7CisgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKIH0KIAotdm9p
ZCBVc2VyVGltaW5nOjptZWFzdXJlKGNvbnN0IFN0cmluZyYgbWVhc3VyZU5hbWUsIGNvbnN0IFN0
cmluZyYgc3RhcnRNYXJrLCBjb25zdCBTdHJpbmcmIGVuZE1hcmssIEV4Y2VwdGlvbkNvZGUmIGVj
KQorRXhjZXB0aW9uT3I8dm9pZD4gVXNlclRpbWluZzo6bWVhc3VyZShjb25zdCBTdHJpbmcmIG1l
YXN1cmVOYW1lLCBjb25zdCBTdHJpbmcmIHN0YXJ0TWFyaywgY29uc3QgU3RyaW5nJiBlbmRNYXJr
KQogewogICAgIGRvdWJsZSBzdGFydFRpbWUgPSAwLjA7CiAgICAgZG91YmxlIGVuZFRpbWUgPSAw
LjA7CiAKICAgICBpZiAoc3RhcnRNYXJrLmlzTnVsbCgpKQotICAgICAgICBlbmRUaW1lID0gbV9w
ZXJmb3JtYW5jZS0+bm93KCk7CisgICAgICAgIGVuZFRpbWUgPSBtX3BlcmZvcm1hbmNlLm5vdygp
OwogICAgIGVsc2UgaWYgKGVuZE1hcmsuaXNOdWxsKCkpIHsKLSAgICAgICAgZW5kVGltZSA9IG1f
cGVyZm9ybWFuY2UtPm5vdygpOwotICAgICAgICBzdGFydFRpbWUgPSBmaW5kRXhpc3RpbmdNYXJr
U3RhcnRUaW1lKHN0YXJ0TWFyaywgZWMpOwotICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGVuZFRpbWUgPSBtX3BlcmZvcm1hbmNlLm5vdygpOworICAgICAgICBh
dXRvIHN0YXJ0TWFya1Jlc3VsdCA9IGZpbmRFeGlzdGluZ01hcmtTdGFydFRpbWUoc3RhcnRNYXJr
KTsKKyAgICAgICAgaWYgKHN0YXJ0TWFya1Jlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGFydE1hcmtSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICBl
bmRUaW1lID0gc3RhcnRNYXJrUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVuZFRpbWUgPSBmaW5kRXhpc3RpbmdNYXJrU3RhcnRUaW1lKGVuZE1hcmss
IGVjKTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGFy
dFRpbWUgPSBmaW5kRXhpc3RpbmdNYXJrU3RhcnRUaW1lKHN0YXJ0TWFyaywgZWMpOwotICAgICAg
ICBpZiAoZWMpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gZW5kTWFya1Jlc3Vs
dCA9IGZpbmRFeGlzdGluZ01hcmtTdGFydFRpbWUoZW5kTWFyayk7CisgICAgICAgIGlmIChlbmRN
YXJrUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGVuZE1hcmtSZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICBhdXRvIHN0YXJ0TWFya1Jlc3VsdCA9IGZp
bmRFeGlzdGluZ01hcmtTdGFydFRpbWUoc3RhcnRNYXJrKTsKKyAgICAgICAgaWYgKHN0YXJ0TWFy
a1Jlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBzdGFydE1hcmtSZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICBzdGFydFRpbWUgPSBzdGFydE1hcmtSZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CisgICAgICAgIGVuZFRpbWUgPSBlbmRNYXJrUmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgIH0KIAogICAgIGluc2VydFBlcmZvcm1hbmNlRW50
cnkobV9tZWFzdXJlc01hcCwgUGVyZm9ybWFuY2VNZWFzdXJlOjpjcmVhdGUobWVhc3VyZU5hbWUs
IHN0YXJ0VGltZSwgZW5kVGltZSkpOworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgVXNlclRp
bWluZzo6Y2xlYXJNZWFzdXJlcyhjb25zdCBTdHJpbmcmIG1lYXN1cmVOYW1lKQpAQCAtMTY4LDQz
ICsxNjgsMzUgQEAgdm9pZCBVc2VyVGltaW5nOjpjbGVhck1lYXN1cmVzKGNvbnN0IFN0cmluZyYg
bWVhc3VyZU5hbWUpCiAgICAgY2xlYXJQZWZvcm1hbmNlRW50cmllcyhtX21lYXN1cmVzTWFwLCBt
ZWFzdXJlTmFtZSk7CiB9CiAKLXN0YXRpYyBWZWN0b3I8UmVmUHRyPFBlcmZvcm1hbmNlRW50cnk+
ID4gY29udmVydFRvRW50cnlTZXF1ZW5jZShjb25zdCBQZXJmb3JtYW5jZUVudHJ5TWFwJiBwZXJm
b3JtYW5jZUVudHJ5TWFwKQorc3RhdGljIFZlY3RvcjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRyeT4+
IGNvbnZlcnRUb0VudHJ5U2VxdWVuY2UoY29uc3QgUGVyZm9ybWFuY2VFbnRyeU1hcCYgcGVyZm9y
bWFuY2VFbnRyeU1hcCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFBlcmZvcm1hbmNlRW50cnk+ID4g
ZW50cmllczsKLQorICAgIFZlY3RvcjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRyeT4+IGVudHJpZXM7
CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHBlcmZvcm1hbmNlRW50cnlNYXAudmFsdWVzKCkpCiAg
ICAgICAgIGVudHJpZXMuYXBwZW5kVmVjdG9yKGVudHJ5KTsKLQogICAgIHJldHVybiBlbnRyaWVz
OwogfQogCi1zdGF0aWMgVmVjdG9yPFJlZlB0cjxQZXJmb3JtYW5jZUVudHJ5PiA+IGdldEVudHJ5
U2VxdWVuY2VCeU5hbWUoY29uc3QgUGVyZm9ybWFuY2VFbnRyeU1hcCYgcGVyZm9ybWFuY2VFbnRy
eU1hcCwgY29uc3QgU3RyaW5nJiBuYW1lKQorc3RhdGljIFZlY3RvcjxSZWZQdHI8UGVyZm9ybWFu
Y2VFbnRyeT4+IGdldEVudHJ5U2VxdWVuY2VCeU5hbWUoY29uc3QgUGVyZm9ybWFuY2VFbnRyeU1h
cCYgcGVyZm9ybWFuY2VFbnRyeU1hcCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIFZlY3Rv
cjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRyeT4gPiBlbnRyaWVzOwotCi0gICAgUGVyZm9ybWFuY2VF
bnRyeU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwZXJmb3JtYW5jZUVudHJ5TWFwLmZpbmQobmFt
ZSk7Ci0gICAgaWYgKGl0ICE9IHBlcmZvcm1hbmNlRW50cnlNYXAuZW5kKCkpCi0gICAgICAgIGVu
dHJpZXMuYXBwZW5kVmVjdG9yKGl0LT52YWx1ZSk7Ci0KLSAgICByZXR1cm4gZW50cmllczsKKyAg
ICByZXR1cm4gcGVyZm9ybWFuY2VFbnRyeU1hcC5nZXQobmFtZSk7CiB9CiAKLVZlY3RvcjxSZWZQ
dHI8UGVyZm9ybWFuY2VFbnRyeT4gPiBVc2VyVGltaW5nOjpnZXRNYXJrcygpIGNvbnN0CitWZWN0
b3I8UmVmUHRyPFBlcmZvcm1hbmNlRW50cnk+PiBVc2VyVGltaW5nOjpnZXRNYXJrcygpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNvbnZlcnRUb0VudHJ5U2VxdWVuY2UobV9tYXJrc01hcCk7CiB9CiAK
LVZlY3RvcjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRyeT4gPiBVc2VyVGltaW5nOjpnZXRNYXJrcyhj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CitWZWN0b3I8UmVmUHRyPFBlcmZvcm1hbmNlRW50cnk+
PiBVc2VyVGltaW5nOjpnZXRNYXJrcyhjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGdldEVudHJ5U2VxdWVuY2VCeU5hbWUobV9tYXJrc01hcCwgbmFtZSk7CiB9CiAKLVZl
Y3RvcjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRyeT4gPiBVc2VyVGltaW5nOjpnZXRNZWFzdXJlcygp
IGNvbnN0CitWZWN0b3I8UmVmUHRyPFBlcmZvcm1hbmNlRW50cnk+PiBVc2VyVGltaW5nOjpnZXRN
ZWFzdXJlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbnZlcnRUb0VudHJ5U2VxdWVuY2UobV9t
ZWFzdXJlc01hcCk7CiB9CiAKLVZlY3RvcjxSZWZQdHI8UGVyZm9ybWFuY2VFbnRyeT4gPiBVc2Vy
VGltaW5nOjpnZXRNZWFzdXJlcyhjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CitWZWN0b3I8UmVm
UHRyPFBlcmZvcm1hbmNlRW50cnk+PiBVc2VyVGltaW5nOjpnZXRNZWFzdXJlcyhjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEVudHJ5U2VxdWVuY2VCeU5hbWUobV9t
ZWFzdXJlc01hcCwgbmFtZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bl
cmZvcm1hbmNlVXNlclRpbWluZy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZVVz
ZXJUaW1pbmcuaAppbmRleCA4MjQ3ZWVmNmVlNjk4YzljYWYyNGFhMDNhZjFhZDdlZTY3YmE1OTAx
Li40ZTU0ZWFiNWMyMjk4NWY1ZjE2NzEwNTVmNTEzYWQ1ZTZiYTMwYjhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlVXNlclRpbWluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VVc2VyVGltaW5nLmgKQEAgLTIzLDQ4ICsyMyw0MSBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFBlcmZvcm1hbmNlVXNlclRpbWluZ19oCi0j
ZGVmaW5lIFBlcmZvcm1hbmNlVXNlclRpbWluZ19oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJM
RShVU0VSX1RJTUlORykKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJQ
ZXJmb3JtYW5jZS5oIgotI2luY2x1ZGUgIlBlcmZvcm1hbmNlVGltaW5nLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uT3IuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBl
cmZvcm1hbmNlOwogY2xhc3MgUGVyZm9ybWFuY2VFbnRyeTsKIAotdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgKFBlcmZvcm1hbmNlVGltaW5nOjoqTmF2aWdhdGlvblRpbWluZ0Z1bmN0aW9uKSgp
IGNvbnN0OwotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZlB0cjxQZXJmb3JtYW5j
ZUVudHJ5PiA+ID4gUGVyZm9ybWFuY2VFbnRyeU1hcDsKK3VzaW5nIFBlcmZvcm1hbmNlRW50cnlN
YXAgPSBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZlB0cjxQZXJmb3JtYW5jZUVudHJ5Pj4+Owog
Ci1jbGFzcyBVc2VyVGltaW5nIDogcHVibGljIFJlZkNvdW50ZWQ8VXNlclRpbWluZz4geworY2xh
c3MgVXNlclRpbWluZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxVc2VyVGltaW5nPiBjcmVh
dGUoUGVyZm9ybWFuY2UqIHBlcmZvcm1hbmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJU
aW1pbmcocGVyZm9ybWFuY2UpKTsgfQorICAgIGV4cGxpY2l0IFVzZXJUaW1pbmcoUGVyZm9ybWFu
Y2UmKTsKIAotICAgIHZvaWQgbWFyayhjb25zdCBTdHJpbmcmIG1hcmtOYW1lLCBFeGNlcHRpb25D
b2RlJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gbWFyayhjb25zdCBTdHJpbmcmIG1hcmtOYW1l
KTsKICAgICB2b2lkIGNsZWFyTWFya3MoY29uc3QgU3RyaW5nJiBtYXJrTmFtZSk7CiAKLSAgICB2
b2lkIG1lYXN1cmUoY29uc3QgU3RyaW5nJiBtZWFzdXJlTmFtZSwgY29uc3QgU3RyaW5nJiBzdGFy
dE1hcmssIGNvbnN0IFN0cmluZyYgZW5kTWFyaywgRXhjZXB0aW9uQ29kZSYpOworICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IG1lYXN1cmUoY29uc3QgU3RyaW5nJiBtZWFzdXJlTmFtZSwgY29uc3QgU3Ry
aW5nJiBzdGFydE1hcmssIGNvbnN0IFN0cmluZyYgZW5kTWFyayk7CiAgICAgdm9pZCBjbGVhck1l
YXN1cmVzKGNvbnN0IFN0cmluZyYgbWVhc3VyZU5hbWUpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxQ
ZXJmb3JtYW5jZUVudHJ5PiA+IGdldE1hcmtzKCkgY29uc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxQ
ZXJmb3JtYW5jZUVudHJ5PiA+IGdldE1lYXN1cmVzKCkgY29uc3Q7CisgICAgVmVjdG9yPFJlZlB0
cjxQZXJmb3JtYW5jZUVudHJ5Pj4gZ2V0TWFya3MoKSBjb25zdDsKKyAgICBWZWN0b3I8UmVmUHRy
PFBlcmZvcm1hbmNlRW50cnk+PiBnZXRNZWFzdXJlcygpIGNvbnN0OwogCi0gICAgVmVjdG9yPFJl
ZlB0cjxQZXJmb3JtYW5jZUVudHJ5PiA+IGdldE1hcmtzKGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxQZXJmb3JtYW5jZUVudHJ5PiA+IGdldE1lYXN1cmVzKGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxQZXJmb3JtYW5jZUVu
dHJ5Pj4gZ2V0TWFya3MoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBWZWN0b3I8UmVm
UHRyPFBlcmZvcm1hbmNlRW50cnk+PiBnZXRNZWFzdXJlcyhjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFVzZXJUaW1pbmcoUGVyZm9ybWFuY2UqKTsK
KyAgICBFeGNlcHRpb25Pcjxkb3VibGU+IGZpbmRFeGlzdGluZ01hcmtTdGFydFRpbWUoY29uc3Qg
U3RyaW5nJiBtYXJrTmFtZSk7CiAKLSAgICBkb3VibGUgZmluZEV4aXN0aW5nTWFya1N0YXJ0VGlt
ZShjb25zdCBTdHJpbmcmIG1hcmtOYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGVyZm9ybWFu
Y2UqIG1fcGVyZm9ybWFuY2U7CisgICAgUGVyZm9ybWFuY2UmIG1fcGVyZm9ybWFuY2U7CiAgICAg
UGVyZm9ybWFuY2VFbnRyeU1hcCBtX21hcmtzTWFwOwogICAgIFBlcmZvcm1hbmNlRW50cnlNYXAg
bV9tZWFzdXJlc01hcDsKIH07CkBAIC03Miw1ICs2NSwzIEBAIHByaXZhdGU6CiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoVVNFUl9USU1JTkcpCi0KLSNlbmRpZiAvLyAhZGVmaW5lZChQZXJmb3JtYW5j
ZVVzZXJUaW1pbmdfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3Nh
Z2VIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyLmNw
cAppbmRleCA5YTUyZDYwMTM2NjY3MzYyMGVlYjhkOWFjZmY3MDg0MDdhYzY3ODU2Li4wZmY3MGUy
NjY3MWVkN2RkZDFiMzFlNTM2NDdiN2Q4ODJjZTQyMWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Vc2VyTWVzc2FnZUhhbmRsZXIuY3BwCkBAIC00NCwxNiArNDQsMTUgQEAgVXNlck1lc3NhZ2VI
YW5kbGVyOjp+VXNlck1lc3NhZ2VIYW5kbGVyKCkKIHsKIH0KIAotdm9pZCBVc2VyTWVzc2FnZUhh
bmRsZXI6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBVc2VyTWVzc2FnZUhhbmRs
ZXI6OnBvc3RNZXNzYWdlKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgdmFsdWUpCiB7
CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBkZXNjcmlwdG9yIGhhcyBiZWVuIHJlbW92ZWQu
IFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgaG9zdCBhcHBsaWNhdGlvbiBoYXMKICAgICAvLyByZW1v
dmVkIHRoZSBuYW1lZCBtZXNzYWdlIGhhbmRsZXIgYXQgdGhlIFdlYktpdDIgQVBJIGxldmVsLgot
ICAgIGlmICghbV9kZXNjcmlwdG9yKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJS
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9kZXNjcmlwdG9yKQorICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07CiAKICAgICBtX2Rlc2Ny
aXB0b3ItPmRpZFBvc3RNZXNzYWdlKCp0aGlzLCB2YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIHsg
fTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1l
c3NhZ2VIYW5kbGVyLmgKaW5kZXggNTEyYTExNGU5OGI5MTQ4N2MzNGM0NGFiYTQ0ODkxNGIxOWU4
NDY3Ni4uOTRhZmZiNTBjOWMwYjU1YjUzY2NmOTkxZmFiMGM0NzhkNWQ4Zjc1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlci5oCkBAIC0yMywxOCArMjMsMTYgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFVzZXJNZXNz
YWdlSGFuZGxlcl9oCi0jZGVmaW5lIFVzZXJNZXNzYWdlSGFuZGxlcl9oCisjcHJhZ21hIG9uY2UK
IAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCiAKKyNpbmNsdWRlICJFeGNlcHRp
b25Pci5oIgogI2luY2x1ZGUgIkZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgogI2luY2x1ZGUg
IlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCiBjbGFzcyBVc2VyTWVzc2FnZUhhbmRsZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxVc2VyTWVzc2FnZUhhbmRsZXI+LCBwdWJsaWMgRnJhbWVEZXN0
cnVjdGlvbk9ic2VydmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFVzZXJNZXNzYWdlSGFu
ZGxlcj4gY3JlYXRlKEZyYW1lJiBmcmFtZSwgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKQEAgLTQzLDcgKzQxLDcgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFs
IH5Vc2VyTWVzc2FnZUhhbmRsZXIoKTsKIAotICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBFeGNlcHRpb25Db2RlJik7CisgICAgRXhjZXB0aW9u
T3I8dm9pZD4gcG9zdE1lc3NhZ2UoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJik7CiAK
ICAgICBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKiBkZXNjcmlwdG9yKCkgeyByZXR1cm4g
bV9kZXNjcmlwdG9yLmdldCgpOyB9CiAgICAgdm9pZCBpbnZhbGlkYXRlRGVzY3JpcHRvcigpIHsg
bV9kZXNjcmlwdG9yID0gbnVsbHB0cjsgfQpAQCAtNTcsNCArNTUsMyBAQCBwcml2YXRlOgogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5E
TEVSUykKLSNlbmRpZiAvLyBVc2VyTWVzc2FnZUhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Vc2VyTWVzc2FnZUhhbmRsZXIuaWRsCmluZGV4IGNmOGMzMzVjYmQ0ZDc3YjQ0ZWQzMWExOGYz
ZDRlZTlmZjUwMDM4Y2QuLjc3NmMxODI0YjZhNzYwNmVlYTcyZTRlZGE0ODk4MjgwZWE1NjMzMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlci5pZGwKQEAgLTI2LDUg
KzI2LDUgQEAKIFsKICAgICBDb25kaXRpb25hbD1VU0VSX01FU1NBR0VfSEFORExFUlMKIF0gaW50
ZXJmYWNlIFVzZXJNZXNzYWdlSGFuZGxlciB7Ci0gICAgW01heVRocm93TGVnYWN5RXhjZXB0aW9u
XSB2b2lkIHBvc3RNZXNzYWdlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBtZXNzYWdlKTsKKyAgICBb
TWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoU2VyaWFsaXplZFNjcmlwdFZhbHVl
IG1lc3NhZ2UpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwCmluZGV4IDVlYmRmMzhk
MGY2MjRkZDA0ODMzMGRiYTEzOGUzZGFlNzBkODViOGMuLmI4NmY2OWM3YTI4NThjNDBhOGYxMzY0
NGI5YTJiZTYwZjFhZGRkODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcApAQCAtNTcs
MTMgKzU3LDEwIEBAIFN0b3JhZ2U6On5TdG9yYWdlKCkKICAgICBtX3N0b3JhZ2VBcmVhLT5kZWNy
ZW1lbnRBY2Nlc3NDb3VudCgpOwogfQogCi11bnNpZ25lZCBTdG9yYWdlOjpsZW5ndGgoRXhjZXB0
aW9uQ29kZSYgZWMpIGNvbnN0CitFeGNlcHRpb25Pcjx1bnNpZ25lZD4gU3RvcmFnZTo6bGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5BY2Nl
c3NTdG9yYWdlKG1fZnJhbWUpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9CisgICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5BY2Nlc3NTdG9y
YWdlKG1fZnJhbWUpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU0VDVVJJVFlfRVJSIH07
CiAKICAgICBpZiAoaXNEaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nKCkpCiAgICAgICAgIHJldHVy
biAwOwpAQCAtNzEsMTIgKzY4LDEwIEBAIHVuc2lnbmVkIFN0b3JhZ2U6Omxlbmd0aChFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKICAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+bGVuZ3RoKCk7CiB9
CiAKLVN0cmluZyBTdG9yYWdlOjprZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAorRXhjZXB0aW9uT3I8U3RyaW5nPiBTdG9yYWdlOjprZXkodW5zaWduZWQgaW5kZXgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5BY2Nlc3NTdG9yYWdlKG1fZnJh
bWUpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgfQorICAgIGlmICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2Zy
YW1lKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OwogCiAgICAg
aWYgKGlzRGlzYWJsZWRCeVByaXZhdGVCcm93c2luZygpKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CkBAIC04NCwxMiArNzksMTAgQEAgU3RyaW5nIFN0b3JhZ2U6OmtleSh1bnNpZ25lZCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmtl
eShpbmRleCk7CiB9CiAKLVN0cmluZyBTdG9yYWdlOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK0V4Y2VwdGlvbk9yPFN0cmluZz4gU3RvcmFnZTo6
Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKIHsKLSAgICBpZiAoIW1fc3RvcmFnZUFy
ZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9F
UlI7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9CisgICAgaWYgKCFtX3N0b3JhZ2VB
cmVhLT5jYW5BY2Nlc3NTdG9yYWdlKG1fZnJhbWUpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU0VDVVJJVFlfRVJSIH07CiAKICAgICBpZiAoaXNEaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5n
KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTk3LDU3ICs5MCw0OSBAQCBTdHJpbmcg
U3RvcmFnZTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPml0ZW0oa2V5KTsKIH0KIAotdm9pZCBTdG9y
YWdlOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IFN0b3JhZ2U6OnNldEl0ZW0oY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFtX3N0b3JhZ2VB
cmVhLT5jYW5BY2Nlc3NTdG9yYWdlKG1fZnJhbWUpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9zdG9yYWdlQXJlYS0+Y2Fu
QWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VS
SVRZX0VSUiB9OwogCi0gICAgaWYgKGlzRGlzYWJsZWRCeVByaXZhdGVCcm93c2luZygpKSB7Ci0g
ICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJvd3NpbmcoKSkKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFFVT1RBX0VYQ0VFREVEX0VSUiB9OwogCiAgICAgYm9vbCBxdW90YUV4Y2VwdGlv
biA9IGZhbHNlOwogICAgIG1fc3RvcmFnZUFyZWEtPnNldEl0ZW0obV9mcmFtZSwga2V5LCB2YWx1
ZSwgcXVvdGFFeGNlcHRpb24pOwotCiAgICAgaWYgKHF1b3RhRXhjZXB0aW9uKQotICAgICAgICBl
YyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFFVT1RB
X0VYQ0VFREVEX0VSUiB9OworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgU3RvcmFnZTo6cmVt
b3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25P
cjx2b2lkPiBTdG9yYWdlOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5KQogewotICAgIGlm
ICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkgewotICAgICAgICBl
YyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fc3Rv
cmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTRUNVUklUWV9FUlIgfTsKIAogICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJv
d3NpbmcoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9z
dG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShtX2ZyYW1lLCBrZXkpOworICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgU3RvcmFnZTo6Y2xlYXIoRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2
b2lkPiBTdG9yYWdlOjpjbGVhcigpCiB7Ci0gICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5BY2Nl
c3NTdG9yYWdlKG1fZnJhbWUpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFn
ZShtX2ZyYW1lKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9Owog
CiAgICAgaWYgKGlzRGlzYWJsZWRCeVByaXZhdGVCcm93c2luZygpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcihtX2ZyYW1l
KTsKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIFN0b3JhZ2U6OmNvbnRhaW5zKGNvbnN0IFN0
cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK0V4Y2VwdGlvbk9yPGJvb2w+IFN0
b3JhZ2U6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAogewotICAgIGlmICghbV9z
dG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkgewotICAgICAgICBlYyA9IFNF
Q1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIW1fc3Rv
cmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpCisgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTRUNVUklUWV9FUlIgfTsKIAogICAgIGlmIChpc0Rpc2FibGVkQnlQcml2YXRlQnJv
d3NpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaApp
bmRleCA0NmYwMjY3NDEzY2EwMTZkYTY3OTIzYWVlMDNhN2FiYzgxODE0YzFjLi41ZGYzYWU5YThi
ODRlZDViYjcxZjY4OTFmMmNmYjAzOWI2ODE4OTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2Uu
aApAQCAtMjMsMzQgKzIzLDI5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU3Rv
cmFnZV9oCi0jZGVmaW5lIFN0b3JhZ2VfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJET01X
aW5kb3dQcm9wZXJ0eS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGcmFtZTsKIGNsYXNzIFN0b3JhZ2VBcmVhOwogCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCiBjbGFzcyBTdG9yYWdlIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwg
cHVibGljIFJlZkNvdW50ZWQ8U3RvcmFnZT4sIHB1YmxpYyBET01XaW5kb3dQcm9wZXJ0eSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxTdG9yYWdlPiBjcmVhdGUoRnJhbWUqLCBSZWZQdHI8U3Rv
cmFnZUFyZWE+JiYpOwogICAgIH5TdG9yYWdlKCk7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKSBjb25zdDsKLSAgICBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwg
RXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVtb3Zl
SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgY2xlYXIo
RXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXksIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gbGVuZ3RoKCkg
Y29uc3Q7CisgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiBrZXkodW5zaWduZWQgaW5kZXgpIGNvbnN0
OworICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29u
c3Q7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVtb3ZlSXRlbShjb25z
dCBTdHJpbmcmIGtleSk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gY2xlYXIoKTsKKyAgICBFeGNl
cHRpb25Pcjxib29sPiBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CiAKICAgICBT
dG9yYWdlQXJlYSYgYXJlYSgpIGNvbnN0IHsgcmV0dXJuICptX3N0b3JhZ2VBcmVhOyB9CiAKQEAg
LTYzLDUgKzU4LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFN0b3JhZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5pZGwKaW5kZXggYjA4
NGY3ZDE1MmE0MjM0OTRjZDQxMDAyZTc2Y2Y2NzgyYWU5OWNhZS4uM2Q0YWE1NmUxZTcwNzZiOTA1
MjQ3NmRkMzg0N2EwOWI5YTRmZWVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaWRsCkBA
IC0zMCwxMSArMzAsMTEgQEAKICAgICBDdXN0b21OYW1lZFNldHRlciwKICAgICBTa2lwVlRhYmxl
VmFsaWRhdGlvbiwKIF0gaW50ZXJmYWNlIFN0b3JhZ2UgewotICAgIFtHZXR0ZXJNYXlUaHJvd0xl
Z2FjeUV4Y2VwdGlvbl0gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwot
ICAgIFtNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gRE9NU3RyaW5nPyBrZXkodW5zaWduZWQgbG9u
ZyBpbmRleCk7Ci0gICAgW01heVRocm93TGVnYWN5RXhjZXB0aW9uXSBnZXR0ZXIgRE9NU3RyaW5n
PyBnZXRJdGVtKERPTVN0cmluZyBrZXkpOwotICAgIFtNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0g
dm9pZCBzZXRJdGVtKERPTVN0cmluZyBrZXksIERPTVN0cmluZyBkYXRhKTsKLSAgICBbTWF5VGhy
b3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgcmVtb3ZlSXRlbShET01TdHJpbmcga2V5KTsKLSAgICBb
TWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgY2xlYXIoKTsKKyAgICBbR2V0dGVyTWF5VGhy
b3dFeGNlcHRpb25dIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAg
ICBbTWF5VGhyb3dFeGNlcHRpb25dIERPTVN0cmluZz8ga2V5KHVuc2lnbmVkIGxvbmcgaW5kZXgp
OworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gZ2V0dGVyIERPTVN0cmluZz8gZ2V0SXRlbShET01T
dHJpbmcga2V5KTsKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0SXRlbShET01TdHJp
bmcga2V5LCBET01TdHJpbmcgZGF0YSk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIHJl
bW92ZUl0ZW0oRE9NU3RyaW5nIGtleSk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIGNs
ZWFyKCk7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VF
dmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmNwcAppbmRleCA3Y2I0MmE3ODg5NDg1M2I1NzE4MmMwYzc2MWUxZDgwMTU5MDEx
ODFkLi5lYzUwMWZlNzUwNzg3Mjg1NTAzZWVmOTQyNDI4YTAzNjE0ZmJmZDM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTc5
LDEwICs3OSw5IEBAIHZvaWQgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hTZXNzaW9u
U3RvcmFnZUV2ZW50c1RvRnJhbWVzKFBhZ2UmIHBhZ2UsIGNvCiAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBuZXdW
YWx1ZSwgU2Vzc2lvblN0b3JhZ2UsIHNlY3VyaXR5T3JpZ2luLCAmcGFnZSk7CiAKICAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVzKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICBTdG9yYWdlKiBzdG9yYWdlID0gZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygp
LT5zZXNzaW9uU3RvcmFnZShlYyk7Ci0gICAgICAgIGlmICghZWMpCi0gICAgICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+ZW5xdWV1ZVdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCB1cmwsIHN0
b3JhZ2UpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2lu
ZG93KCktPnNlc3Npb25TdG9yYWdlKCk7CisgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKQorICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmVucXVldWVXaW5kb3dFdmVudChT
dG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgdXJsLCByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpKTsKICAgICB9
CiB9CiAKQEAgLTkyLDEwICs5MSw5IEBAIHZvaWQgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHNUb0ZyYW1lcyhQYWdlR3JvdXAmIHBhZ2VHCiAgICAgICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoa2V5
LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIExvY2FsU3RvcmFnZSwgc2VjdXJpdHlPcmlnaW4sIHBhZ2Up
OwogCiAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lcykgewotICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICAgICAgU3RvcmFnZSogc3RvcmFnZSA9IGZyYW1lLT5kb2N1bWVudCgp
LT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKGVjKTsKLSAgICAgICAgaWYgKCFlYykKLSAgICAg
ICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5lbnF1ZXVlV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFs
dWUsIHVybCwgc3RvcmFnZSkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGZyYW1lLT5kb2N1bWVu
dCgpLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKCk7CisgICAgICAgIGlmICghcmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQorICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmVucXVldWVXaW5k
b3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBr
ZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgdXJsLCByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkp
KTsKICAgICB9CiB9CiAK
</data>
<flag name="review"
          id="315144"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>