<?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>32839</bug_id>
          
          <creation_ts>2009-12-21 13:30:27 -0800</creation_ts>
          <short_desc>REGRESSION (r52446) - Crash starting an OutlivePage load</short_desc>
          <delta_ts>2010-01-25 09:26:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>174069</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-21 13:30:27 -0800</bug_when>
    <thetext>After updating past http://trac.webkit.org/changeset/52446 (the fix for https://bugs.webkit.org/show_bug.cgi?id=30457), I&apos;ve seen a crash twice with one of these outlive page loads.  The crash is a null-deref.

I do not know exactly steps to reproduce yet (haven&apos;t tried) but it&apos;s easy to see the cause.

#0	0x10258fa9a in WebCore::ResourceRequestBase::updateResourceRequest at ResourceRequestBase.cpp:386
#1	0x10258fbb3 in WebCore::ResourceRequestBase::cachePolicy at ResourceRequestBase.cpp:132
#2	0x102629d58 in WebCore::SubresourceLoader::create at SubresourceLoader.cpp:97
#3	0x1023cd027 in WebCore::Loader::Host::servePendingRequests at loader.cpp:359
#4	0x1023cd217 in WebCore::Loader::Host::servePendingRequests at loader.cpp:313
#5	0x1023ce2b8 in WebCore::Loader::servePendingRequests at loader.cpp:191
#6	0x1023ce36c in WebCore::Loader::requestTimerFired at loader.cpp:170
#7	0x1023cfc05 in WebCore::Timer&lt;WebCore::Loader&gt;::fired at Timer.h:98
#8	0x102757744 in WebCore::ThreadTimers::sharedTimerFiredInternal at ThreadTimers.cpp:112
#9	0x102757889 in WebCore::ThreadTimers::sharedTimerFired at ThreadTimers.cpp:90
#10	0x1025ea6d2 in WebCore::timerFired at SharedTimerMac.mm:86
#11	0x7fff86677a58 in __CFRunLoopRun
#12	0x7fff86675c2f in CFRunLoopRunSpecific
#13	0x7fff83370a4e in RunCurrentEventLoopInMode
#14	0x7fff83370853 in ReceiveNextEventCommon
#15	0x7fff8337070c in BlockUntilNextEventMatchingListInMode
...


The interesting point of the crash is in frame #2 in SubresourceLoader::create at SubresourceLoader.cpp:97
        newRequest.setCachePolicy(fl-&gt;originalRequest().cachePolicy());

The Frame is valid, kept alive past the lifetime of the Document.
The FrameLoader is valid, attached to the Frame.
But inside FrameLoader::originalRequest() is a call to FrameLoader::activeDocumentLoader(), and the Frame has been detached so the active DocumentLoader is null.

Therefore the ResourceRequest returned is bogus.

This crash is probably a specific manifestation of a more general problem with r52446 - I think there are loads of callsites to FrameLoader::activeDocumentLoader() that don&apos;t null check the result.  That is because until now there has been an underlying assumption that FrameLoaders *ALWAYS* have an active DocumentLoader, and this change changes that very fundamental fact.  I think we&apos;ll be seeing more of these...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174075</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-21 13:39:15 -0800</bug_when>
    <thetext>Should clarify:

Multiple callers to both FrameLoader::activeDocumentLoader() and FrameLoader::documentLoader() that don&apos;t null check, because neither were ever null before now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174081</commentid>
    <comment_count>2</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-21 13:45:27 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Should clarify:
&gt; 
&gt; Multiple callers to both FrameLoader::activeDocumentLoader() and
&gt; FrameLoader::documentLoader() that don&apos;t null check, because neither were ever
&gt; null before now.

Should I revert r52446 while a solution gets worked out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174083</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-21 13:49:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Should I revert r52446 while a solution gets worked out?

Probably, unless we can come up with a quick solution in the next few hours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174087</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-21 13:58:23 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Should I revert r52446 while a solution gets worked out?
&gt; 
&gt; Probably, unless we can come up with a quick solution in the next few hours.

I&apos;m assuming just keeping the document loader alive the same way r52446 keeps the frame alive doesn&apos;t count as a solution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174090</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-21 13:59:52 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m assuming just keeping the document loader alive the same way r52446 keeps
&gt; the frame alive doesn&apos;t count as a solution?

It counts if it works.

Normally document loaders are closely tied to a document, so having a document loader around after the document is gone seems like it’s probably not a good thing. It might be better to have some sort of dummy document and a loader that goes along with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174092</commentid>
    <comment_count>6</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-21 14:03:53 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; I&apos;m assuming just keeping the document loader alive the same way r52446 keeps
&gt; &gt; the frame alive doesn&apos;t count as a solution?
&gt; 
&gt; It counts if it works.
&gt; 
&gt; Normally document loaders are closely tied to a document, so having a document
&gt; loader around after the document is gone seems like it’s probably not a good
&gt; thing. It might be better to have some sort of dummy document and a loader that
&gt; goes along with that.

That was my assumption, but I&apos;m new enough to the loader that I wasn&apos;t sure.

I guess I&apos;ll go ahead and revert for now, since I&apos;m off on vacation starting tomorrow and I&apos;m not confident I can get a (good) fix in by end of day today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174097</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-12-21 14:13:16 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; I&apos;m assuming just keeping the document loader alive the same way r52446 keeps
&gt; &gt; the frame alive doesn&apos;t count as a solution?
&gt; 
&gt; It counts if it works.
&gt; 
&gt; Normally document loaders are closely tied to a document, so having a document
&gt; loader around after the document is gone seems like it’s probably not a good
&gt; thing. It might be better to have some sort of dummy document and a loader that
&gt; goes along with that.

I think the Document-&gt;DocumentLoader relationship is pretty much as set-in-stone as the Frame-&gt;FrameLoader relationship, and we should keep it that way.

It seems like we&apos;ll be opening the door for more of these &quot;ping&quot; type loads in the future, and it would be best to keep them as lightweight as possible.  So I like this dummy Document/DocumentLoader idea going forward, as it would contain the ping loads inside one lightweight context instead of spreading them out over many heavyweight contexts (like keeping each full-blown DocumentLoader alive)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174098</commentid>
    <comment_count>8</comment_count>
      <attachid>45349</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-21 14:19:11 -0800</bug_when>
    <thetext>Created attachment 45349
Revert r52446</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174099</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-21 14:20:04 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45349 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174101</commentid>
    <comment_count>10</comment_count>
      <attachid>45349</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-21 14:28:39 -0800</bug_when>
    <thetext>Comment on attachment 45349
Revert r52446

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174102</commentid>
    <comment_count>11</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-12-21 14:44:15 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 45349 [details])
&gt; rs=me

Reverted: http://trac.webkit.org/changeset/52456.

I&apos;m going to leave this bug opened and assigned to me for fixing the crash and re-landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175454</commentid>
    <comment_count>12</comment_count>
      <attachid>45349</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-28 23:44:47 -0800</bug_when>
    <thetext>Comment on attachment 45349
Revert r52446

Clearing Darin Adler&apos;s r+ on this obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177840</commentid>
    <comment_count>13</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-06 16:12:01 -0800</bug_when>
    <thetext>Did you ever find a consistent repro case for this crash?  I&apos;ve got something that might be a fix, but I&apos;ve yet to find a good way to verify it.

(In reply to comment #0)
&gt; After updating past http://trac.webkit.org/changeset/52446 (the fix for
&gt; https://bugs.webkit.org/show_bug.cgi?id=30457), I&apos;ve seen a crash twice with
&gt; one of these outlive page loads.  The crash is a null-deref.
&gt; 
&gt; I do not know exactly steps to reproduce yet (haven&apos;t tried) but it&apos;s easy to
&gt; see the cause.
&gt; 
&gt; #0    0x10258fa9a in WebCore::ResourceRequestBase::updateResourceRequest at
&gt; ResourceRequestBase.cpp:386
&gt; #1    0x10258fbb3 in WebCore::ResourceRequestBase::cachePolicy at
&gt; ResourceRequestBase.cpp:132
&gt; #2    0x102629d58 in WebCore::SubresourceLoader::create at
&gt; SubresourceLoader.cpp:97
&gt; #3    0x1023cd027 in WebCore::Loader::Host::servePendingRequests at
&gt; loader.cpp:359
&gt; #4    0x1023cd217 in WebCore::Loader::Host::servePendingRequests at
&gt; loader.cpp:313
&gt; #5    0x1023ce2b8 in WebCore::Loader::servePendingRequests at loader.cpp:191
&gt; #6    0x1023ce36c in WebCore::Loader::requestTimerFired at loader.cpp:170
&gt; #7    0x1023cfc05 in WebCore::Timer&lt;WebCore::Loader&gt;::fired at Timer.h:98
&gt; #8    0x102757744 in WebCore::ThreadTimers::sharedTimerFiredInternal at
&gt; ThreadTimers.cpp:112
&gt; #9    0x102757889 in WebCore::ThreadTimers::sharedTimerFired at
&gt; ThreadTimers.cpp:90
&gt; #10    0x1025ea6d2 in WebCore::timerFired at SharedTimerMac.mm:86
&gt; #11    0x7fff86677a58 in __CFRunLoopRun
&gt; #12    0x7fff86675c2f in CFRunLoopRunSpecific
&gt; #13    0x7fff83370a4e in RunCurrentEventLoopInMode
&gt; #14    0x7fff83370853 in ReceiveNextEventCommon
&gt; #15    0x7fff8337070c in BlockUntilNextEventMatchingListInMode
&gt; ...
&gt; 
&gt; 
&gt; The interesting point of the crash is in frame #2 in SubresourceLoader::create
&gt; at SubresourceLoader.cpp:97
&gt;         newRequest.setCachePolicy(fl-&gt;originalRequest().cachePolicy());
&gt; 
&gt; The Frame is valid, kept alive past the lifetime of the Document.
&gt; The FrameLoader is valid, attached to the Frame.
&gt; But inside FrameLoader::originalRequest() is a call to
&gt; FrameLoader::activeDocumentLoader(), and the Frame has been detached so the
&gt; active DocumentLoader is null.
&gt; 
&gt; Therefore the ResourceRequest returned is bogus.
&gt; 
&gt; This crash is probably a specific manifestation of a more general problem with
&gt; r52446 - I think there are loads of callsites to
&gt; FrameLoader::activeDocumentLoader() that don&apos;t null check the result.  That is
&gt; because until now there has been an underlying assumption that FrameLoaders
&gt; *ALWAYS* have an active DocumentLoader, and this change changes that very
&gt; fundamental fact.  I think we&apos;ll be seeing more of these...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178430</commentid>
    <comment_count>14</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-07 16:07:04 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Did you ever find a consistent repro case for this crash?  I&apos;ve got something
&gt; that might be a fix, but I&apos;ve yet to find a good way to verify it.

For future reference, I eventually found http://www.travelsupermarket.com/flights.aspx consistently crashed with my initial checkin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178789</commentid>
    <comment_count>15</comment_count>
      <attachid>46158</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-08 13:56:25 -0800</bug_when>
    <thetext>Created attachment 46158
Patch minus the crashing

The additions to http://trac.webkit.org/changeset/52446 can be summarize as such:
Request.h/cpp : In addition to the Frame, maintain RefPtrs to the Document and DocumentLoader in the case of a request that can outlive the page.
DocumentLoader.cpp / ResourceLoader.cpp : Allow for the possibility that Frame::page() and Frame::settings() may be null (as can now be the case if the unload event is triggered by closing rather than navigating).
FrameLoader.h/cpp : Keep a count of the number of requests that may outlive the page that refer to this FrameLoader, and don&apos;t allow m_documentLoader to be nulled if that count is non-zero.

I&apos;m not sure that this is a good solution, but it does appear to stop the crashing.  It seems to me, though, that I&apos;ve allowed the possibility that, when an OutlivePage Request is executed, FrameLoader::m_documentLoader will not be the DocumentLoader that originally associated with the Request.  Is that a Bad Thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178792</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-08 14:03:53 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 46158 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184292</commentid>
    <comment_count>17</comment_count>
      <attachid>46158</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-25 09:24:06 -0800</bug_when>
    <thetext>Comment on attachment 46158
Patch minus the crashing

I think this should&apos;ve been posted on https://bugs.webkit.org/show_bug.cgi?id=30457</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184294</commentid>
    <comment_count>18</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-25 09:26:52 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 46158 [details])
&gt; I think this should&apos;ve been posted on
&gt; https://bugs.webkit.org/show_bug.cgi?id=30457

Closing this issue since the regression was reverted and the new patch is up on the original bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45349</attachid>
            <date>2009-12-21 14:19:11 -0800</date>
            <delta_ts>2009-12-28 23:44:47 -0800</delta_ts>
            <desc>Revert r52446</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23207</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMTItMjEgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZXZlcnQgcjUyNDQ2IGR1ZSB0byBjcmFzaGluZXNzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjgzOQorCisgICAgICAgICogbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6bG9hZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
bG9hZFdpdGhEb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVl
TG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6cGFnZUhpZGRlbik6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lKToKKyAgICAg
ICAgKiBsb2FkZXIvUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0OjpSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6On5SZXF1ZXN0KToKKyAgICAgICAgKiBs
b2FkZXIvUmVxdWVzdC5oOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKToKKyAgICAgICAg
KiBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkZXI6OmNhbmNlbFJlcXVlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6SG9zdDo6
c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0Ojpj
YW5jZWxQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0Ojpj
YW5jZWxSZXF1ZXN0cyk6CisKIDIwMDktMTItMTkgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDggKzE4MCw3IEBACiAgICAgLCBtX2lzRXhl
Y3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24oZmFsc2UpCiAgICAgLCBtX2RpZENhbGxJbXBsaWNp
dENsb3NlKGZhbHNlKQogICAgICwgbV93YXNVbmxvYWRFdmVudEVtaXR0ZWQoZmFsc2UpCi0gICAg
LCBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRFdmVudChmYWxzZSkKLSAgICAsIG1faXNEaXNw
YXRjaGluZ1VubG9hZEV2ZW50KGZhbHNlKQorICAgICwgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0
Y2hlZChmYWxzZSkKICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKICAgICAsIG1faXNMb2FkaW5n
TWFpblJlc291cmNlKGZhbHNlKQogICAgICwgbV9uZWVkc0NsZWFyKGZhbHNlKQpAQCAtNTE4LDE2
ICs1MTcsMTQgQEAKICAgICAgICAgICAgICAgICBOb2RlKiBjdXJyZW50Rm9jdXNlZE5vZGUgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOwogICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50Rm9jdXNlZE5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb2N1c2VkTm9k
ZS0+YWJvdXRUb1VubG9hZCgpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNo
aW5nVW5sb2FkRXZlbnQpOwotICAgICAgICAgICAgICAgIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2
ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9tV2luZG93KCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHVubG9hZEV2ZW50UG9saWN5ID09IFVubG9hZEV2ZW50UG9s
aWN5VW5sb2FkQW5kUGFnZUhpZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5k
b21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChQYWdlVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIG1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hl
KCkpLCBtX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2Zy
YW1lLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZS0+ZG9tV2luZG93KCktPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkudW5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSksIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5k
b2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1f
aXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50KTsKLSAgICAgICAgICAgICAgICBtX2lzRGlzcGF0Y2hp
bmdVbmxvYWRFdmVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1fdW5sb2FkRXZlbnRCZWlu
Z0Rpc3BhdGNoZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1l
bnQoKSkKICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5
bGVJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIG1fd2FzVW5sb2FkRXZlbnRFbWl0dGVkID0g
dHJ1ZTsKQEAgLTE5MTEsNyArMTkwOCw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpCisgICAgaWYgKG1fdW5sb2FkRXZlbnRC
ZWluZ0Rpc3BhdGNoZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5hdmlnYXRpb25BY3Rpb24g
YWN0aW9uKG5ld1VSTCwgbmV3TG9hZFR5cGUsIGlzRm9ybVN1Ym1pc3Npb24sIGV2ZW50KTsKQEAg
LTIwMzcsNyArMjAzNCw3IEBACiAKICAgICBBU1NFUlQobV9mcmFtZS0+dmlldygpKTsKIAotICAg
IGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCkKKyAgICBpZiAobV91bmxvYWRFdmVudEJl
aW5nRGlzcGF0Y2hlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcG9saWN5Q2hlY2tlcigpLT5z
ZXRMb2FkVHlwZSh0eXBlKTsKQEAgLTIyNzksNyArMjI3Niw3IEBACiB2b2lkIEZyYW1lTG9hZGVy
OjpzdG9wQWxsTG9hZGVycyhEYXRhYmFzZVBvbGljeSBkYXRhYmFzZVBvbGljeSkKIHsKICAgICBB
U1NFUlQoIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFn
ZUNhY2hlKCkpOwotICAgIGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCkKKyAgICBpZiAo
bV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
SWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoaXMgbWV0aG9kLCBpbmZpbml0
ZSByZWN1cnNpb24gY2FuIG9jY3VyICgzNDQyMjE4KS4gQXZvaWQgdGhpcy4KQEAgLTM0MzYsMTEg
KzM0MzMsNyBAQAogICAgIC8vICAgICAgIGlzIHRoZSB1c2VyIHJlc3BvbmRpbmcgQ2FuY2VsIHRv
IHRoZSBmb3JtIHJlcG9zdCBuYWcgc2hlZXQuCiAgICAgLy8gICAgMikgVXNlciByZXNwb25kZWQg
Q2FuY2VsIHRvIGFuIGFsZXJ0IHBvcHBlZCB1cCBieSB0aGUgYmVmb3JlIHVubG9hZCBldmVudCBo
YW5kbGVyLgogICAgIC8vIFRoZSAiYmVmb3JlIHVubG9hZCIgZXZlbnQgaGFuZGxlciBydW5zIG9u
bHkgZm9yIHRoZSBtYWluIGZyYW1lLgotICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNoaW5nQmVmb3Jl
VW5sb2FkRXZlbnQpOwotICAgIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50ID0gdHJ1
ZTsKICAgICBib29sIGNhbkNvbnRpbnVlID0gc2hvdWxkQ29udGludWUgJiYgKCFpc0xvYWRpbmdN
YWluRnJhbWUoKSB8fCBtX2ZyYW1lLT5zaG91bGRDbG9zZSgpKTsKLSAgICBBU1NFUlQobV9pc0Rp
c3BhdGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQpOwotICAgIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVu
bG9hZEV2ZW50ID0gZmFsc2U7CiAKICAgICBpZiAoIWNhbkNvbnRpbnVlKSB7CiAgICAgICAgIC8v
IElmIHdlIHdlcmUgd2FpdGluZyBmb3IgYSBxdWljayByZWRpcmVjdCwgYnV0IHRoZSBwb2xpY3kg
ZGVsZWdhdGUgZGVjaWRlZCB0byBpZ25vcmUgaXQsIHRoZW4gd2UgCkBAIC0zNjM0LDEyICszNjI3
LDEwIEBACiAKIHZvaWQgRnJhbWVMb2FkZXI6OnBhZ2VIaWRkZW4oKQogewotICAgIEFTU0VSVCgh
bV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOwotICAgIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2
ZW50ID0gdHJ1ZTsKKyAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gdHJ1ZTsKICAg
ICBpZiAobV9mcmFtZS0+ZG9tV2luZG93KCkpCiAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygp
LT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
cGFnZWhpZGVFdmVudCwgdHJ1ZSksIG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgIEFTU0VSVCht
X2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCk7Ci0gICAgbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZl
bnQgPSBmYWxzZTsKKyAgICBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkID0gZmFsc2U7CiAK
ICAgICAvLyBTZW5kIHBhZ2VoaWRlIGV2ZW50IGZvciBzdWJmcmFtZXMgYXMgd2VsbAogICAgIGZv
ciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9SZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCShyZXZp
c2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQsMjMgKzI0LDE2IEBACiAjZGVmaW5lIFJlcXVlc3RfaAogCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIENhY2hlZFJlc291cmNl
OwogICAgIGNsYXNzIERvY0xvYWRlcjsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICAKLSAgICBlbnVt
IE91dGxpdmVQYWdlUG9saWN5IHsKLSAgICAgICAgRG9Ob3RPdXRsaXZlUGFnZSwKLSAgICAgICAg
T3V0bGl2ZVBhZ2UKLSAgICB9OwogCiAgICAgY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJl
c291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgT3V0bGl2ZVBh
Z2VQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgICAgIFJlcXVl
c3QoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0
eUNoZWNrUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogICAgICAgICB+
UmVxdWVzdCgpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPGNoYXI+JiBidWZmZXIoKSB7IHJl
dHVybiBtX2J1ZmZlcjsgfQpAQCAtNTYsOSArNDksNiBAQAogICAgICAgICBTZWN1cml0eUNoZWNr
UG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVjaygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkRG9T
ZWN1cml0eUNoZWNrOyB9CiAgICAgICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygp
IGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQogICAgICAgICAK
LSAgICAgICAgT3V0bGl2ZVBhZ2VQb2xpY3kgY2FuT3V0bGl2ZVBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZSA/IE91dGxpdmVQYWdlIDogRG9O
b3RPdXRsaXZlUGFnZTsgfQotICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdDsKLSAgICAgICAg
CiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOwogICAgICAgICBD
YWNoZWRSZXNvdXJjZSogbV9vYmplY3Q7CkBAIC02Nyw3ICs1Nyw2IEBACiAgICAgICAgIGJvb2wg
bV9tdWx0aXBhcnQ7CiAgICAgICAgIFNlY3VyaXR5Q2hlY2tQb2xpY3kgbV9zaG91bGREb1NlY3Vy
aXR5Q2hlY2s7CiAgICAgICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwotICAg
ICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlOwog
ICAgIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3Vi
cmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291
cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNTI0NTUpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNv
dXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDE4ICs2MSwxOCBAQAogI2VuZGlm
CiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpj
cmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlD
aGVja1BvbGljeSwgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCitQYXNzUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBm
cmFtZSwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCiB7CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBGcmFtZUxvYWRlciogZmwgPSBm
cmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYgKG91dGxpdmVQYWdlUG9saWN5ID09IERvTm90T3V0bGl2
ZVBhZ2UgJiYgKGZsLT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCBmbC0+YWN0
aXZlRG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSkKKyAgICBpZiAoc2VjdXJpdHlDaGVj
ayA9PSBEb1NlY3VyaXR5Q2hlY2sgJiYgKGZsLT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNp
b25hbCB8fCBmbC0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3Q7
CiAKLSAgICBpZiAoc2VjdXJpdHlDaGVja1BvbGljeSA9PSBEb1NlY3VyaXR5Q2hlY2sKKyAgICBp
ZiAoc2VjdXJpdHlDaGVjayA9PSBEb1NlY3VyaXR5Q2hlY2sKICAgICAgICAgICAgICYmIFNlY3Vy
aXR5T3JpZ2luOjpyZXN0cmljdEFjY2Vzc1RvTG9jYWwoKQogICAgICAgICAgICAgJiYgIVNlY3Vy
aXR5T3JpZ2luOjpjYW5Mb2FkKHJlcXVlc3QudXJsKCksIFN0cmluZygpLCBmcmFtZS0+ZG9jdW1l
bnQoKSkpIHsKICAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChmcmFt
ZSwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDUy
NDU1KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIw
LDE2ICsxMjAsNyBAQAogdm9pZCBMb2FkZXI6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1Bv
bGljeSBzZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7CiAg
ICAgQVNTRVJUKGRvY0xvYWRlcik7Ci0gICAgCi0gICAgLy8gSWYgd2UgYXJlIGxvYWRpbmcgYW4g
aW1hZ2UgZHVyaW5nIGFuIHVubG9hZCBldmVudCwgd2Ugd2FudCB0byBhbGxvdyB0aGUgcmVxdWVz
dCB0byBvdXRsaXZlIHRoZSBwYWdlCi0gICAgLy8gdGhhdCB3ZSBhcmUgbGVhdmluZy4gU29tZSBz
aXRlcyAobW9zdCBjb21tb25seSBhZCBuZXR3b3JrcykgcmVseSBvbiBpbWFnZSByZXF1ZXN0cyBp
biBiZWZvcmV1bmxvYWQKLSAgICAvLyBvciB1bmxvYWQgZXZlbnQgaGFuZGxlcnMgdG8gdHJhY2sg
dGltZSBzcGVudCBvbiB0aGUgcGFnZS4gVGhpcyB3aWxsIGFsbG93IHRoZW0gdG8gZG8gdGhlIHRy
YWNraW5nCi0gICAgLy8gdGhhdCB0aGV5IGFyZSBnb2luZyB0byBkbyBhbnl3YXksIGJ1dCBhc3lu
Y2hyb25vdXNseSBzbyB0aGF0IHRoZXkgZG9uJ3Qgc2xvdyBkb3duIG5hdmlnYXRpb24uCi0gICAg
T3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3kgPSByZXNvdXJjZS0+aXNJbWFnZSgp
ICYmIGRvY0xvYWRlciAmJiBkb2NMb2FkZXItPmZyYW1lKCkgCi0gICAgICAgICYmIGRvY0xvYWRl
ci0+ZnJhbWUoKS0+bG9hZGVyKCktPmlzRGlzcGF0Y2hpbmdVbmxvYWRGYW1pbHlFdmVudCgpCi0g
ICAgICAgID8gT3V0bGl2ZVBhZ2UgOiBEb05vdE91dGxpdmVQYWdlOwotICAgIAotICAgIFJlcXVl
c3QqIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChkb2NMb2FkZXIsIHJlc291cmNlLCBpbmNyZW1lbnRh
bCwgc2VjdXJpdHlDaGVjaywgb3V0bGl2ZVBhZ2VQb2xpY3ksIHNlbmRSZXNvdXJjZUxvYWRDYWxs
YmFja3MpOworICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChkb2NMb2FkZXIsIHJl
c291cmNlLCBpbmNyZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrcyk7CiAKICAgICBSZWZQdHI8SG9zdD4gaG9zdDsKICAgICBLVVJMIHVybChQYXJzZWRVUkxT
dHJpbmcsIHJlc291cmNlLT51cmwoKSk7CkBAIC0xNDcsMTAgKzEzOCw4IEBACiAgICAgUHJpb3Jp
dHkgcHJpb3JpdHkgPSBkZXRlcm1pbmVQcmlvcml0eShyZXNvdXJjZSk7CiAgICAgaG9zdC0+YWRk
UmVxdWVzdChyZXF1ZXN0LCBwcmlvcml0eSk7CiAgICAgZG9jTG9hZGVyLT5pbmNyZW1lbnRSZXF1
ZXN0Q291bnQoKTsKLSAgICAKLSAgICAvLyBXZSB3YW50IHRvIGd1YXJhbnRlZSB0aGF0IHJlcXVl
c3RzIHdoaWNoIG91dGxpdmUgdGhlIHBhZ2UgYXJlIHJ1biBhc3luY2hyb25vdXNseSwgc28gb25s
eQotICAgIC8vIHNlcnZlIHRoZSByZXF1ZXN0IGltbWVkaWF0ZWx5IGlmIHRoZSByZXF1ZXN0IGRv
ZXNuJ3QgbmVlZCB0byBvdXRsaXZlIHRoZSBwYWdlLgotICAgIGlmIChyZXF1ZXN0LT5jYW5PdXRs
aXZlUGFnZSgpID09IERvTm90T3V0bGl2ZVBhZ2UgJiYgKHByaW9yaXR5ID4gTG93IHx8ICF1cmwu
cHJvdG9jb2xJbkhUVFBGYW1pbHkoKSB8fCAhaGFkUmVxdWVzdHMpKSB7CisKKyAgICBpZiAocHJp
b3JpdHkgPiBMb3cgfHwgIXVybC5wcm90b2NvbEluSFRUUEZhbWlseSgpIHx8ICFoYWRSZXF1ZXN0
cykgewogICAgICAgICAvLyBUcnkgdG8gcmVxdWVzdCBpbXBvcnRhbnQgcmVzb3VyY2VzIGltbWVk
aWF0ZWx5CiAgICAgICAgIGhvc3QtPnNlcnZlUGVuZGluZ1JlcXVlc3RzKHByaW9yaXR5KTsKICAg
ICB9IGVsc2UgewpAQCAtMjU5LDYgKzI0OCw4IEBACiAgICAgfQogCiAgICAgc2NoZWR1bGVTZXJ2
ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIAorICAgIEFTU0VSVChkb2NMb2FkZXItPnJlcXVlc3RD
b3VudCgpID09IChkb2NMb2FkZXItPmxvYWRJblByb2dyZXNzKCkgPyAxIDogMCkpOwogfQogCiBM
b2FkZXI6Okhvc3Q6Okhvc3QoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhS
ZXF1ZXN0c0luRmxpZ2h0KQpAQCAtMzU1LDggKzM0Niw4IEBACiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAotICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJl
c291cmNlTG9hZGVyOjpjcmVhdGUocmVxdWVzdC0+ZnJhbWUoKSwKLSAgICAgICAgICAgIHRoaXMs
IHJlc291cmNlUmVxdWVzdCwgcmVxdWVzdC0+c2hvdWxkRG9TZWN1cml0eUNoZWNrKCksIHJlcXVl
c3QtPmNhbk91dGxpdmVQYWdlKCksIHJlcXVlc3QtPnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KSk7CisgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3Vy
Y2VMb2FkZXI6OmNyZWF0ZShkb2NMb2FkZXItPmRvYygpLT5mcmFtZSgpLAorICAgICAgICAgICAg
dGhpcywgcmVzb3VyY2VSZXF1ZXN0LCByZXF1ZXN0LT5zaG91bGREb1NlY3VyaXR5Q2hlY2soKSwg
cmVxdWVzdC0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKICAgICAgICAgaWYgKGxvYWRl
cikgewogICAgICAgICAgICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRkKGxvYWRlci5yZWxlYXNlKCks
IHJlcXVlc3QpOwogICAgICAgICAgICAgcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+c2V0UmVx
dWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigpOwpAQCAtNTU5LDcgKzU1MCw3IEBACiAgICAgUmVx
dWVzdFF1ZXVlOjppdGVyYXRvciBlbmQgPSByZXF1ZXN0c1BlbmRpbmcuZW5kKCk7CiAgICAgZm9y
IChSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGl0ID0gcmVxdWVzdHNQZW5kaW5nLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gKml0OwotICAgICAg
ICBpZiAocmVxdWVzdC0+Y2FuT3V0bGl2ZVBhZ2UoKSA9PSBEb05vdE91dGxpdmVQYWdlICYmIHJl
cXVlc3QtPmRvY0xvYWRlcigpID09IGRvY0xvYWRlcikgeworICAgICAgICBpZiAocmVxdWVzdC0+
ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVyKSB7CiAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUo
cmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdDsK
ICAgICAgICAgICAgIGRvY0xvYWRlci0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CkBAIC01Nzks
NyArNTcwLDcgQEAKICAgICBSZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzTG9h
ZGluZy5lbmQoKTsKICAgICBmb3IgKFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3Rz
TG9hZGluZy5iZWdpbigpOyBpICE9IGVuZDsgKytpKSB7CiAgICAgICAgIFJlcXVlc3QqIHIgPSBp
LT5zZWNvbmQ7Ci0gICAgICAgIGlmIChyLT5jYW5PdXRsaXZlUGFnZSgpID09IERvTm90T3V0bGl2
ZVBhZ2UgJiYgci0+ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVyKQorICAgICAgICBpZiAoci0+ZG9j
TG9hZGVyKCkgPT0gZG9jTG9hZGVyKQogICAgICAgICAgICAgbG9hZGVyc1RvQ2FuY2VsLmFwcGVu
ZChpLT5maXJzdC5nZXQoKSk7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDUyNDU1KQorKysgV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcg
KzI5OSw3IEBACiAKICAgICAgICAgLy8gQ2xlYXIgdGhlIGxvYWRlciBzbyB0aGF0IGFueSBjYWxs
YmFja3MgZnJvbSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlIHdpbGwgbm90IGhhdmUgdGhlIG9s
ZCBsb2FkZXIuCiAgICAgICAgIG1fbG9hZGVyID0gMDsKLSAgICAgICAgbV9sb2FkZXIgPSBTdWJy
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3Qs
IHNlY3VyaXR5Q2hlY2ssIERvTm90T3V0bGl2ZVBhZ2UsIHNlbmRMb2FkQ2FsbGJhY2tzLCBzbmlm
ZkNvbnRlbnQpOworICAgICAgICBtX2xvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUo
bV9kb2N1bWVudC0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgc2VjdXJpdHlDaGVjaywgc2VuZExv
YWRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDUyNDU1KQorKysgV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDggKzMzMyw2IEBACiAgICAg
dm9pZCBjb250aW51ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtKCk7CiAgICAgCiAgICAgYm9vbCBz
dXBwcmVzc09wZW5lckluTmV3RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3N1cHByZXNzT3BlbmVy
SW5OZXdGcmFtZTsgfQotICAgIAotICAgIGJvb2wgaXNEaXNwYXRjaGluZ1VubG9hZEZhbWlseUV2
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQgfHwg
bV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQ7IH0KIAogICAgIHN0YXRpYyBPYmplY3RDb250ZW50
VHlwZSBkZWZhdWx0T2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKTsKIApAQCAtNDgxLDggKzQ3OSw3IEBACiAKICAgICBib29sIG1fZGlkQ2Fs
bEltcGxpY2l0Q2xvc2U7CiAgICAgYm9vbCBtX3dhc1VubG9hZEV2ZW50RW1pdHRlZDsKLSAgICBi
b29sIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50OwotICAgIGJvb2wgbV9pc0Rpc3Bh
dGNoaW5nVW5sb2FkRXZlbnQ7CisgICAgYm9vbCBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVk
OwogICAgIGJvb2wgbV9pc0NvbXBsZXRlOwogICAgIGJvb2wgbV9pc0xvYWRpbmdNYWluUmVzb3Vy
Y2U7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCShyZXZpc2lvbiA1MjQ1NSkKKysrIFdlYkNvcmUvbG9h
ZGVyL1JlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMTAgQEAKICNpbmNs
dWRlICJSZXF1ZXN0LmgiCiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotI2luY2x1ZGUg
IkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUmVxdWVzdDo6UmVxdWVzdChEb2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2Uq
IG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzaG91bGREb1Nl
Y3VyaXR5Q2hlY2ssIE91dGxpdmVQYWdlUG9saWN5IG91dGxpdmVQYWdlUG9saWN5LCBib29sIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCitSZXF1ZXN0OjpSZXF1ZXN0KERvY0xvYWRlciogZG9j
TG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogb2JqZWN0LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0
eUNoZWNrUG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKQogICAgIDogbV9vYmplY3Qob2JqZWN0KQogICAgICwgbV9kb2NMb2FkZXIoZG9j
TG9hZGVyKQogICAgICwgbV9pbmNyZW1lbnRhbChpbmNyZW1lbnRhbCkKQEAgLTM5LDE4ICszNywx
MSBAQAogICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MpCiB7CiAgICAgbV9vYmplY3QtPnNldFJlcXVlc3QodGhpcyk7Ci0gICAgaWYgKG91
dGxpdmVQYWdlUG9saWN5ID09IE91dGxpdmVQYWdlKQotICAgICAgICBtX2ZyYW1lRm9yUmVxdWVz
dFRoYXRDYW5PdXRsaXZlUGFnZSA9IGRvY0xvYWRlci0+ZnJhbWUoKTsKIH0KIAogUmVxdWVzdDo6
flJlcXVlc3QoKQogewogICAgIG1fb2JqZWN0LT5zZXRSZXF1ZXN0KDApOwogfQotICAgIAotRnJh
bWUqIFJlcXVlc3Q6OmZyYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcmFtZUZvclJlcXVl
c3RUaGF0Q2FuT3V0bGl2ZVBhZ2UgPyBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFn
ZS5nZXQoKSA6IG1fZG9jTG9hZGVyLT5mcmFtZSgpOwotfQogCiB9IC8vbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNTI0NTUpCisr
KyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw2IEBACiAjZGVmaW5lIFN1YnJlc291cmNlTG9hZGVyX2gKIAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyVHlwZXMuaCIKLSNpbmNsdWRlICJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkZXIuaCIKICAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDcgKzM5LDcgQEAKICAg
ICAKICAgICBjbGFzcyBTdWJyZXNvdXJjZUxvYWRlciA6IHB1YmxpYyBSZXNvdXJjZUxvYWRlciB7
CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRl
cj4gY3JlYXRlKEZyYW1lKiwgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTZWN1cml0eUNoZWNrUG9saWN5ID0gRG9TZWN1cml0eUNoZWNrLCBPdXRsaXZl
UGFnZVBvbGljeSA9IERvTm90T3V0bGl2ZVBhZ2UsIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrcyA9IHRydWUsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gdHJ1ZSk7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBjcmVhdGUoRnJhbWUqLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5Q2hlY2tQ
b2xpY3kgPSBEb1NlY3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9
IHRydWUsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gdHJ1ZSk7CiAKICAgICAgICAgdm9pZCBj
bGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSAwOyB9CiAKSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24v
aW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDUyNDU1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQt
aW4tYmVmb3JldW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDggKzAsMCBAQAotPHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vycm9y
IGRvbWFpbiBOU1VSTEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJMICJodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5k
bGVyLmh0bWwiPgotaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dh
aXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3Qg
VVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4t
bm90aWZ5LWRvbmUuaHRtbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAw
L25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIG1l
dGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCi1odHRwOi8vMTI3LjAuMC4xOjgwMDAv
bmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIHdpbGxTZW5kUmVx
dWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9y
ZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDov
LzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFu
ZGxlci5odG1sLCBodHRwIG1ldGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCi1odHRw
Oi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1k
b25lLmh0bWwgLSBkaWRSZWNlaXZlUmVzcG9uc2UgPE5TVVJMUmVzcG9uc2UgaHR0cDovLzEyNy4w
LjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1s
LCBodHRwIHN0YXR1cyBjb2RlIDIwMD4KLWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9u
L3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIGRpZEZpbmlzaExvYWRpbmcK
LWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNl
LTEtc2VjLnBsIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBo
dHRwIHN0YXR1cyBjb2RlIDIwMD4KLWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jl
c291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZwotCkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1
bmxvYWQtaGFuZGxlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
bmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlz
aW9uIDUyNDU1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxv
YWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwyMyAr
MCwwIEBACi08aHRtbD48aGVhZD4KLTx0aXRsZT5JbWFnZSBsb2FkIGluIHVubG9hZCBoYW5kbGVy
PC90aXRsZT4KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBuYXZpZ2F0ZSgpIHsKLSAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcFJlc291cmNlTG9h
ZENhbGxiYWNrcygpOwotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7Ci0gICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibGluayIp
OwotICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXQub2Zmc2V0TGVmdCArIDIs
IHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKLSAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7
Ci0gICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIHJl
cXVlc3RJbWFnZSgpIHsKLSAgICB2YXIgaW1nID0gbmV3IEltYWdlKDEsIDEpOwotICAgIGltZy5z
cmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwiOwotfQotPC9zY3JpcHQ+PC9o
ZWFkPgotPGJvZHkgb25sb2FkPSJuYXZpZ2F0ZSgpOyIgb25iZWZvcmV1bmxvYWQ9InJlcXVlc3RJ
bWFnZSgpOyI+Ci08YSBpZD0ibGluayIgaHJlZj0icmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnkt
ZG9uZS5odG1sIj5saW5rPC9hPgotPC9ib2R5PjwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNl
cy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbAkocmV2aXNpb24gNTI0NTUpCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9u
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+DQotPHNjcmlwdD4N
Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgew0KLSAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsNCi0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7DQotICAgICAgICB9LCAyMDAwKTsNCi0gICAgfQ0KLTwvc2NyaXB0Pg0KLTwvaHRt
bD4NCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1p
bi11bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA1MjQ1NSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSw5ICswLDAgQEAKLW1haW4gZnJhbWUgLSBoYXMgMSBvbnVubG9hZCBoYW5kbGVy
KHMpCi08dW5rbm93bj4gLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogPE5TRXJyb3IgZG9tYWlu
IE5TVVJMRXJyb3JEb21haW4sIGNvZGUgLTk5OSwgZmFpbGluZyBVUkwgImh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbCI+Ci1o
dHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlm
eS1kb25lLmh0bWwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5o
dG1sLCBtYWluIGRvY3VtZW50IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9y
ZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVk
aXJlY3RSZXNwb25zZSAobnVsbCkKLWh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jl
c291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8
TlNVUkxSZXNwb25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMv
d2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIGh0dHAgc3RhdHVzIGNvZGUgMjAwPgotaHR0cDov
LzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9u
ZS5odG1sIC0gZGlkRmluaXNoTG9hZGluZwotaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRp
b24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwgLSB3aWxsU2VuZFJlcXVlc3QgPE5T
VVJMUmVxdWVzdCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwsIG1haW4gZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwg
aHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQotaHR0cDovLzEyNy4wLjAu
MTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwgLSBkaWRS
ZWNlaXZlUmVzcG9uc2UgPE5TVVJMUmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwsIGh0dHAgc3RhdHVzIGNvZGUg
MjAwPgotaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVz
b3VyY2UtMS1zZWMucGwgLSBkaWRGaW5pc2hMb2FkaW5nCi0KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQt
aW4tdW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2aXNpb24gNTI0NTUpCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDI0ICswLDAgQEAKLTxodG1sPjxoZWFkPgotPHRpdGxlPkltYWdl
IGxvYWQgaW4gdW5sb2FkIGhhbmRsZXI8L3RpdGxlPgotPHNjcmlwdD4KLWZ1bmN0aW9uIG5hdmln
YXRlKCkgewotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCk7Ci0gICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJsaW5rIik7Ci0gICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRv
KHRhcmdldC5vZmZzZXRMZWZ0ICsgMiwgdGFyZ2V0Lm9mZnNldFRvcCArIDIpOwotICAgICAgICBl
dmVudFNlbmRlci5tb3VzZURvd24oKTsKLSAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwot
ICAgIH0KLX0KLQotZnVuY3Rpb24gcmVxdWVzdEltYWdlKCkgewotICAgIHZhciBpbWcgPSBuZXcg
SW1hZ2UoMSwgMSk7Ci0gICAgaW1nLnNyYyA9ICJyZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNl
Yy5wbCI7Ci19Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0ibmF2aWdhdGUoKTsi
IG9udW5sb2FkPSJyZXF1ZXN0SW1hZ2UoKTsiPgotPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNl
cy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCI+bGluazwvYT4KLTwvYm9keT48L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA1MjQ1NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDA5LTEyLTIxICBOYXRlIENoYXBpbiAgPGphcGhl
dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmV2ZXJ0IHI1MjQ0NiBkdWUgdG8gY3Jhc2hpbmVzcy4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI4MzkKKworICAgICAgICAqIGh0
dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1p
bi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdh
dGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1s
OgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5v
dGlmeS1kb25lLmh0bWw6CisKIDIwMDktMTItMjEgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBhbmQgTmlrb2xhcyBaaW1t
ZXJtYW5uLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46158</attachid>
            <date>2010-01-08 13:56:25 -0800</date>
            <delta_ts>2010-01-25 09:24:05 -0800</delta_ts>
            <desc>Patch minus the crashing</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28091</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzAwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMDEtMDggIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuICBPcmlnaW5hbGx5IGxhbmRlZCBhcyBodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC81MjQ0Ni4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIzODkKKworICAgICAgICBUZXN0czogaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAorICAg
ICAgICAgICAgICAgaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhh
bmRsZXIuaHRtbAorCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzY2hlZHVsZUFyY2hpdmVMb2FkKToKKyAgICAg
ICAgKiBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlc3QpOgorICAgICAgICAqIGxv
YWRlci9GcmFtZUxvYWRlci5jcHA6IFJlbmFtZSBtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVk
IHRvIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdG9w
TG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFdpdGhEb2N1bWVudExvYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OnNldERvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KTogU2V0IG1faXNEaXNw
YXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OnBhZ2VIaWRkZW4pOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6OmlzRGlzcGF0Y2hpbmdVbmxvYWRGYW1pbHlFdmVudCk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmluY3JlbWVudE91dGxpdmVQYWdl
UmVxdWVzdENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZWNyZW1lbnRP
dXRsaXZlUGFnZVJlcXVlc3RDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
b3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQpOgorICAgICAgICAqIGxvYWRlci9SZXF1ZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6OlJlcXVlc3QpOiBBZGQgT3V0bGl2ZVBhZ2VQb2xp
Y3kgdG8gY29uc3RydWN0b3IgcGFyYW1ldGVycworICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6
flJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6ZnJhbWUpOgorICAgICAgICAq
IGxvYWRlci9SZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29y
ZTo6UmVxdWVzdDo6Y2FuT3V0bGl2ZVBhZ2UpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OlJlc291
cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXVlc3QpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxvYWRlcjo6bG9hZCk6IEFkZCBPdXRsaXZlUGFnZVBvbGljeSB0byBSZXF1
ZXN0IGNvbnN0cnVjdG9yIGNhbGwsCisgICAgICAgICAgICAgZW5zdXJlIHJlcXVlc3RzIHRoYXQg
c2hvdWxkIG91dGxpdmUgcGFnZSBhcmUgZG9uZSBhc3luY2hyb25vdXNseS4KKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRlcjo6Y2FuY2VsUmVxdWVzdHMpOiBSZW1vdmUgZW5kaW5nIEFTU0VSVCBzaW5j
ZSBpdCB3aWxsIG5vdyBiZSBoYXJkIHRvIHByZWRpY3QgaG93CisgICAgICAgICAgICAgbWFueSBy
ZXF1ZXN0cyBtaWdodCBwb3NzaWJseSBvdXRsaXZlIGEgY2FuY2VsIGluIGV2ZXJ5IGNhc2UuCisg
ICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKTogVXNl
IHRoZSBjb3JyZWN0IGZyYW1lIGluIHRoZSBjYXNlIG9mIGEgcmVxdWVzdCBvdXRsaXZpbmcgaXRz
IHBhZ2UuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmNhbmNlbFBlbmRpbmdSZXF1
ZXN0cyk6IEVuc3VyZSB3ZSBkb24ndCBjYW5jZWwgcmVxdWVzdCB0aGF0IHNob3VsZCBvdXRsaXZl
IHRoZWlyIHBhZ2UuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmNhbmNlbFJlcXVl
c3RzKTogRW5zdXJlIHdlIGRvbid0IGNhbmNlbCByZXF1ZXN0IHRoYXQgc2hvdWxkIG91dGxpdmUg
dGhlaXIgcGFnZS4KKwogMjAxMC0wMS0wOCAgWXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCShyZXZpc2lvbiA1MzAwMykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw5IEBACiAgICAgLCBtX2lzRXhlY3V0
aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24oZmFsc2UpCiAgICAgLCBtX2RpZENhbGxJbXBsaWNpdENs
b3NlKGZhbHNlKQogICAgICwgbV93YXNVbmxvYWRFdmVudEVtaXR0ZWQoZmFsc2UpCi0gICAgLCBt
X3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkKGZhbHNlKQorICAgICwgbV9pc0Rpc3BhdGNoaW5n
QmVmb3JlVW5sb2FkRXZlbnQoZmFsc2UpCisgICAgLCBtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVu
dChmYWxzZSkKKyAgICAsIG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoMCkKICAgICAsIG1faXND
b21wbGV0ZShmYWxzZSkKICAgICAsIG1faXNMb2FkaW5nTWFpblJlc291cmNlKGZhbHNlKQogICAg
ICwgbV9uZWVkc0NsZWFyKGZhbHNlKQpAQCAtNTE3LDE0ICs1MTksMTYgQEAKICAgICAgICAgICAg
ICAgICBOb2RlKiBjdXJyZW50Rm9jdXNlZE5vZGUgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1
c2VkTm9kZSgpOwogICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9jdXNlZE5vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIGN1cnJlbnRGb2N1c2VkTm9kZS0+YWJvdXRUb1VubG9hZCgpOwotICAg
ICAgICAgICAgICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAgICAgICAg
ICAgICAgIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBpZiAobV9mcmFtZS0+ZG9tV2luZG93KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVu
bG9hZEV2ZW50UG9saWN5ID09IFVubG9hZEV2ZW50UG9saWN5VW5sb2FkQW5kUGFnZUhpZGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVu
dChQYWdlVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQs
IG1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpLCBtX2ZyYW1lLT5kb2N1bWVudCgp
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpLT5pblBhZ2VD
YWNoZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPmRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGZhbHNl
LCBmYWxzZSksIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kb2N1bWVudCgpKTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbV91bmxvYWRFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCk7
CisgICAgICAgICAgICAgICAgbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgICAgICAg
ICAgICAgIG1fd2FzVW5sb2FkRXZlbnRFbWl0dGVkID0gdHJ1ZTsKQEAgLTE5MDgsNyArMTkxMiw3
IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV91bmxvYWRFdmVudEJlaW5n
RGlzcGF0Y2hlZCkKKyAgICBpZiAobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uKG5ld1VSTCwgbmV3TG9hZFR5
cGUsIGlzRm9ybVN1Ym1pc3Npb24sIGV2ZW50KTsKQEAgLTIwMzQsNyArMjAzOCw3IEBACiAKICAg
ICBBU1NFUlQobV9mcmFtZS0+dmlldygpKTsKIAotICAgIGlmIChtX3VubG9hZEV2ZW50QmVpbmdE
aXNwYXRjaGVkKQorICAgIGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRFdmVudCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgcG9saWN5Q2hlY2tlcigpLT5zZXRMb2FkVHlwZSh0eXBlKTsKQEAgLTIy
NzYsNyArMjI4MCw3IEBACiB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wQWxsTG9hZGVycyhEYXRhYmFz
ZVBvbGljeSBkYXRhYmFzZVBvbGljeSkKIHsKICAgICBBU1NFUlQoIW1fZnJhbWUtPmRvY3VtZW50
KCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpOwotICAgIGlmIChtX3Vu
bG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkKQorICAgIGlmIChtX2lzRGlzcGF0Y2hpbmdVbmxvYWRF
dmVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhpcyBtZXRob2QgaXMgY2FsbGVk
IGZyb20gd2l0aGluIHRoaXMgbWV0aG9kLCBpbmZpbml0ZSByZWN1cnNpb24gY2FuIG9jY3VyICgz
NDQyMjE4KS4gQXZvaWQgdGhpcy4KQEAgLTIzMzMsNyArMjMzNyw3IEBACiAKIHZvaWQgRnJhbWVM
b2FkZXI6OnNldERvY3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAg
aWYgKCFsb2FkZXIgJiYgIW1fZG9jdW1lbnRMb2FkZXIpCisgICAgaWYgKCFsb2FkZXIgJiYgKCFt
X2RvY3VtZW50TG9hZGVyIHx8IG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgQVNTRVJUKGxvYWRlciAhPSBtX2RvY3VtZW50TG9hZGVyKTsKQEAg
LTMwODcsOCArMzA5MSw2IEBACiAvLyBDYWxsZWQgZXZlcnkgdGltZSBhIHJlc291cmNlIGlzIGNv
bXBsZXRlbHkgbG9hZGVkLCBvciBhbiBlcnJvciBpcyByZWNlaXZlZC4KIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNoZWNrTG9hZENvbXBsZXRlKCkKIHsKLSAgICBBU1NFUlQobV9jbGllbnQtPmhhc1dlYlZp
ZXcoKSk7Ci0gICAgCiAgICAgbV9zaG91bGRDYWxsQ2hlY2tMb2FkQ29tcGxldGUgPSBmYWxzZTsK
IAogICAgIC8vIEZJWE1FOiBBbHdheXMgdHJhdmVyc2luZyB0aGUgZW50aXJlIGZyYW1lIHRyZWUg
aXMgYSBiaXQgaW5lZmZpY2llbnQsIGJ1dCAKQEAgLTM0MzMsNyArMzQzNSwxMSBAQAogICAgIC8v
ICAgICAgIGlzIHRoZSB1c2VyIHJlc3BvbmRpbmcgQ2FuY2VsIHRvIHRoZSBmb3JtIHJlcG9zdCBu
YWcgc2hlZXQuCiAgICAgLy8gICAgMikgVXNlciByZXNwb25kZWQgQ2FuY2VsIHRvIGFuIGFsZXJ0
IHBvcHBlZCB1cCBieSB0aGUgYmVmb3JlIHVubG9hZCBldmVudCBoYW5kbGVyLgogICAgIC8vIFRo
ZSAiYmVmb3JlIHVubG9hZCIgZXZlbnQgaGFuZGxlciBydW5zIG9ubHkgZm9yIHRoZSBtYWluIGZy
YW1lLgorICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5sb2FkRXZlbnQpOworICAg
IG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50ID0gdHJ1ZTsKICAgICBib29sIGNhbkNv
bnRpbnVlID0gc2hvdWxkQ29udGludWUgJiYgKCFpc0xvYWRpbmdNYWluRnJhbWUoKSB8fCBtX2Zy
YW1lLT5zaG91bGRDbG9zZSgpKTsKKyAgICBBU1NFUlQobV9pc0Rpc3BhdGNoaW5nQmVmb3JlVW5s
b2FkRXZlbnQpOworICAgIG1faXNEaXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50ID0gZmFsc2U7
CiAKICAgICBpZiAoIWNhbkNvbnRpbnVlKSB7CiAgICAgICAgIC8vIElmIHdlIHdlcmUgd2FpdGlu
ZyBmb3IgYSBxdWljayByZWRpcmVjdCwgYnV0IHRoZSBwb2xpY3kgZGVsZWdhdGUgZGVjaWRlZCB0
byBpZ25vcmUgaXQsIHRoZW4gd2UgCkBAIC0zNjI3LDEwICszNjMzLDEyIEBACiAKIHZvaWQgRnJh
bWVMb2FkZXI6OnBhZ2VIaWRkZW4oKQogewotICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQgPSB0cnVlOworICAgIEFTU0VSVCghbV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAg
IG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gdHJ1ZTsKICAgICBpZiAobV9mcmFtZS0+ZG9t
V2luZG93KCkpCiAgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBh
Z2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgdHJ1
ZSksIG1fZnJhbWUtPmRvY3VtZW50KCkpOwotICAgIG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQgPSBmYWxzZTsKKyAgICBBU1NFUlQobV9pc0Rpc3BhdGNoaW5nVW5sb2FkRXZlbnQpOworICAg
IG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50ID0gZmFsc2U7CiAKICAgICAvLyBTZW5kIHBhZ2Vo
aWRlIGV2ZW50IGZvciBzdWJmcmFtZXMgYXMgd2VsbAogICAgIGZvciAoRnJhbWUqIGNoaWxkID0g
bV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVl
KCktPm5leHRTaWJsaW5nKCkpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCShyZXZpc2lvbiA1MzAwMykKKysrIFdl
YkNvcmUvbG9hZGVyL1JlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTYgKzI0LDI1IEBA
CiAjZGVmaW5lIFJlcXVlc3RfaAogCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIENhY2hlZFJlc291cmNlOwogICAgIGNsYXNzIERvY0xv
YWRlcjsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKKyAg
ICBjbGFzcyBGcmFtZTsKKyAgICAKKyAgICBlbnVtIE91dGxpdmVQYWdlUG9saWN5IHsKKyAgICAg
ICAgRG9Ob3RPdXRsaXZlUGFnZSwKKyAgICAgICAgT3V0bGl2ZVBhZ2UKKyAgICB9OwogCiAgICAg
Y2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAg
ICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCwg
U2VjdXJpdHlDaGVja1BvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAg
ICAgICAgUmVxdWVzdChEb2NMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50
YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIE91dGxpdmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MpOwogICAgICAgICB+UmVxdWVzdCgpOwogICAgICAgICAKICAgICAg
ICAgVmVjdG9yPGNoYXI+JiBidWZmZXIoKSB7IHJldHVybiBtX2J1ZmZlcjsgfQpAQCAtNDksNiAr
NTgsOSBAQAogICAgICAgICBTZWN1cml0eUNoZWNrUG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVj
aygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkRG9TZWN1cml0eUNoZWNrOyB9CiAgICAgICAgIGJv
b2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291
cmNlTG9hZENhbGxiYWNrczsgfQogICAgICAgICAKKyAgICAgICAgT3V0bGl2ZVBhZ2VQb2xpY3kg
Y2FuT3V0bGl2ZVBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5P
dXRsaXZlUGFnZSA/IE91dGxpdmVQYWdlIDogRG9Ob3RPdXRsaXZlUGFnZTsgfQorICAgICAgICBG
cmFtZSogZnJhbWUoKSBjb25zdDsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVj
dG9yPGNoYXI+IG1fYnVmZmVyOwogICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9vYmplY3Q7CkBA
IC01Nyw2ICs2OSw5IEBACiAgICAgICAgIGJvb2wgbV9tdWx0aXBhcnQ7CiAgICAgICAgIFNlY3Vy
aXR5Q2hlY2tQb2xpY3kgbV9zaG91bGREb1NlY3VyaXR5Q2hlY2s7CiAgICAgICAgIGJvb2wgbV9z
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOworICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWVG
b3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlOworICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1f
ZG9jdW1lbnRGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlOworICAgICAgICBSZWZQdHI8RG9j
dW1lbnRMb2FkZXI+IG1fZG9jdW1lbnRMb2FkZXJGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdl
OwogICAgIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gNTMwMDMpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAsIG1fc2VuZFJl
c291cmNlTG9hZENhbGxiYWNrcyhzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogICAgICwgbV9z
aG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQogICAgICwgbV9zaG91bGRCdWZm
ZXJEYXRhKHRydWUpCi0gICAgLCBtX2RlZmVyc0xvYWRpbmcoZnJhbWUtPnBhZ2UoKS0+ZGVmZXJz
TG9hZGluZygpKQorICAgICwgbV9kZWZlcnNMb2FkaW5nKGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+
cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkgOiBmYWxzZSkKIHsKIH0KIApAQCAtMjAyLDcgKzIwMiw3
IEBACiAKICAgICBpZiAobV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKSB7CiAgICAgICAgIGlm
ICghbV9pZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2ZyYW1lLT5w
YWdlKCktPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAg
IG1faWRlbnRpZmllciA9IG1fZnJhbWUtPnBhZ2UoKSA/IG1fZnJhbWUtPnBhZ2UoKS0+cHJvZ3Jl
c3MoKS0+Y3JlYXRlVW5pcXVlSWRlbnRpZmllcigpIDogMDsKICAgICAgICAgICAgIGZyYW1lTG9h
ZGVyKCktPm5vdGlmaWVyKCktPmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KG1faWRl
bnRpZmllciwgZG9jdW1lbnRMb2FkZXIoKSwgcmVxdWVzdCk7CiAgICAgICAgIH0KIApJbmRleDog
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gNTMwMDMpCisrKyBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw3ICs1NzIsNyBA
QAogCiAgICAgaWYgKCFyZXNvdXJjZSkgewogICAgICAgICAvLyBXZWJBcmNoaXZlRGVidWdNb2Rl
IG1lYW5zIHdlIGZhaWwgbG9hZHMgaW5zdGVhZCBvZiB0cnlpbmcgdG8gZmV0Y2ggdGhlbSBmcm9t
IHRoZSBuZXR3b3JrIGlmIHRoZXkncmUgbm90IGluIHRoZSBhcmNoaXZlLgotICAgICAgICBib29s
IHNob3VsZEZhaWxMb2FkID0gbV9mcmFtZS0+c2V0dGluZ3MoKS0+d2ViQXJjaGl2ZURlYnVnTW9k
ZUVuYWJsZWQoKSAmJiBBcmNoaXZlRmFjdG9yeTo6aXNBcmNoaXZlTWltZVR5cGUocmVzcG9uc2VN
SU1FVHlwZSgpKTsKKyAgICAgICAgYm9vbCBzaG91bGRGYWlsTG9hZCA9IG1fZnJhbWUtPnNldHRp
bmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+d2ViQXJjaGl2ZURlYnVnTW9kZUVuYWJsZWQo
KSAmJiBBcmNoaXZlRmFjdG9yeTo6aXNBcmNoaXZlTWltZVR5cGUocmVzcG9uc2VNSU1FVHlwZSgp
KTsKIAogICAgICAgICBpZiAoIXNob3VsZEZhaWxMb2FkKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNTMw
MDMpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDE4ICs2MSwxOCBAQAogI2VuZGlmCiB9CiAKLVBhc3NSZWZQdHI8U3VicmVzb3Vy
Y2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKK1Bhc3NSZWZQdHI8U3VicmVzb3Vy
Y2VMb2FkZXI+IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVja1BvbGljeSwgT3V0bGl2ZVBhZ2VQb2xp
Y3kgb3V0bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywgYm9v
bCBzaG91bGRDb250ZW50U25pZmYpCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBGcmFtZUxvYWRlciogZmwgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYgKHNl
Y3VyaXR5Q2hlY2sgPT0gRG9TZWN1cml0eUNoZWNrICYmIChmbC0+c3RhdGUoKSA9PSBGcmFtZVN0
YXRlUHJvdmlzaW9uYWwgfHwgZmwtPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPmlzU3RvcHBpbmco
KSkpCisgICAgaWYgKG91dGxpdmVQYWdlUG9saWN5ID09IERvTm90T3V0bGl2ZVBhZ2UgJiYgKGZs
LT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCBmbC0+YWN0aXZlRG9jdW1lbnRM
b2FkZXIoKS0+aXNTdG9wcGluZygpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZXNvdXJj
ZVJlcXVlc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3Q7CiAKLSAgICBpZiAoc2VjdXJpdHlDaGVjayA9
PSBEb1NlY3VyaXR5Q2hlY2sKKyAgICBpZiAoc2VjdXJpdHlDaGVja1BvbGljeSA9PSBEb1NlY3Vy
aXR5Q2hlY2sKICAgICAgICAgICAgICYmIFNlY3VyaXR5T3JpZ2luOjpyZXN0cmljdEFjY2Vzc1Rv
TG9jYWwoKQogICAgICAgICAgICAgJiYgIVNlY3VyaXR5T3JpZ2luOjpjYW5Mb2FkKHJlcXVlc3Qu
dXJsKCksIFN0cmluZygpLCBmcmFtZS0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgRnJhbWVMb2Fk
ZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChmcmFtZSwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDUzMDAzKQorKysgV2ViQ29yZS9sb2FkZXIvbG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCwxNiBAQAogdm9pZCBMb2FkZXI6
OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9v
bCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBib29sIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7CiAgICAgQVNTRVJUKGRvY0xvYWRlcik7Ci0gICAg
UmVxdWVzdCogcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGRvY0xvYWRlciwgcmVzb3VyY2UsIGluY3Jl
bWVudGFsLCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICAK
KyAgICAvLyBJZiB3ZSBhcmUgbG9hZGluZyBhbiBpbWFnZSBkdXJpbmcgYW4gdW5sb2FkIGV2ZW50
LCB3ZSB3YW50IHRvIGFsbG93IHRoZSByZXF1ZXN0IHRvIG91dGxpdmUgdGhlIHBhZ2UKKyAgICAv
LyB0aGF0IHdlIGFyZSBsZWF2aW5nLiBTb21lIHNpdGVzIChtb3N0IGNvbW1vbmx5IGFkIG5ldHdv
cmtzKSByZWx5IG9uIGltYWdlIHJlcXVlc3RzIGluIGJlZm9yZXVubG9hZAorICAgIC8vIG9yIHVu
bG9hZCBldmVudCBoYW5kbGVycyB0byB0cmFjayB0aW1lIHNwZW50IG9uIHRoZSBwYWdlLiBUaGlz
IHdpbGwgYWxsb3cgdGhlbSB0byBkbyB0aGUgdHJhY2tpbmcKKyAgICAvLyB0aGF0IHRoZXkgYXJl
IGdvaW5nIHRvIGRvIGFueXdheSwgYnV0IGFzeW5jaHJvbm91c2x5IHNvIHRoYXQgdGhleSBkb24n
dCBzbG93IGRvd24gbmF2aWdhdGlvbi4KKyAgICBPdXRsaXZlUGFnZVBvbGljeSBvdXRsaXZlUGFn
ZVBvbGljeSA9IHJlc291cmNlLT5pc0ltYWdlKCkgJiYgZG9jTG9hZGVyICYmIGRvY0xvYWRlci0+
ZnJhbWUoKSAKKyAgICAgICAgJiYgZG9jTG9hZGVyLT5mcmFtZSgpLT5sb2FkZXIoKS0+aXNEaXNw
YXRjaGluZ1VubG9hZEZhbWlseUV2ZW50KCkKKyAgICAgICAgPyBPdXRsaXZlUGFnZSA6IERvTm90
T3V0bGl2ZVBhZ2U7CisgICAgCisgICAgUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGRv
Y0xvYWRlciwgcmVzb3VyY2UsIGluY3JlbWVudGFsLCBzZWN1cml0eUNoZWNrLCBvdXRsaXZlUGFn
ZVBvbGljeSwgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CiAKICAgICBSZWZQdHI8SG9zdD4g
aG9zdDsKICAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIHJlc291cmNlLT51cmwoKSk7CkBA
IC0xMzgsOCArMTQ3LDEwIEBACiAgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBkZXRlcm1pbmVQcmlv
cml0eShyZXNvdXJjZSk7CiAgICAgaG9zdC0+YWRkUmVxdWVzdChyZXF1ZXN0LCBwcmlvcml0eSk7
CiAgICAgZG9jTG9hZGVyLT5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKLQotICAgIGlmIChwcmlv
cml0eSA+IExvdyB8fCAhdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgfHwgIWhhZFJlcXVlc3Rz
KSB7CisgICAgCisgICAgLy8gV2Ugd2FudCB0byBndWFyYW50ZWUgdGhhdCByZXF1ZXN0cyB3aGlj
aCBvdXRsaXZlIHRoZSBwYWdlIGFyZSBydW4gYXN5bmNocm9ub3VzbHksIHNvIG9ubHkKKyAgICAv
LyBzZXJ2ZSB0aGUgcmVxdWVzdCBpbW1lZGlhdGVseSBpZiB0aGUgcmVxdWVzdCBkb2Vzbid0IG5l
ZWQgdG8gb3V0bGl2ZSB0aGUgcGFnZS4KKyAgICBpZiAocmVxdWVzdC0+Y2FuT3V0bGl2ZVBhZ2Uo
KSA9PSBEb05vdE91dGxpdmVQYWdlICYmIChwcmlvcml0eSA+IExvdyB8fCAhdXJsLnByb3RvY29s
SW5IVFRQRmFtaWx5KCkgfHwgIWhhZFJlcXVlc3RzKSkgewogICAgICAgICAvLyBUcnkgdG8gcmVx
dWVzdCBpbXBvcnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5CiAgICAgICAgIGhvc3QtPnNlcnZl
UGVuZGluZ1JlcXVlc3RzKHByaW9yaXR5KTsKICAgICB9IGVsc2UgewpAQCAtMjQ4LDggKzI1OSw2
IEBACiAgICAgfQogCiAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotICAgIAot
ICAgIEFTU0VSVChkb2NMb2FkZXItPnJlcXVlc3RDb3VudCgpID09IChkb2NMb2FkZXItPmxvYWRJ
blByb2dyZXNzKCkgPyAxIDogMCkpOwogfQogCiBMb2FkZXI6Okhvc3Q6Okhvc3QoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQpAQCAtMzQ2LDgg
KzM1NSw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8U3Vi
cmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZG9jTG9h
ZGVyLT5kb2MoKS0+ZnJhbWUoKSwKLSAgICAgICAgICAgIHRoaXMsIHJlc291cmNlUmVxdWVzdCwg
cmVxdWVzdC0+c2hvdWxkRG9TZWN1cml0eUNoZWNrKCksIHJlcXVlc3QtPnNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MoKSk7CisgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVy
ID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShyZXF1ZXN0LT5mcmFtZSgpLAorICAgICAgICAg
ICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0LCByZXF1ZXN0LT5zaG91bGREb1NlY3VyaXR5Q2hlY2so
KSwgcmVxdWVzdC0+Y2FuT3V0bGl2ZVBhZ2UoKSwgcmVxdWVzdC0+c2VuZFJlc291cmNlTG9hZENh
bGxiYWNrcygpKTsKICAgICAgICAgaWYgKGxvYWRlcikgewogICAgICAgICAgICAgbV9yZXF1ZXN0
c0xvYWRpbmcuYWRkKGxvYWRlci5yZWxlYXNlKCksIHJlcXVlc3QpOwogICAgICAgICAgICAgcmVx
dWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+c2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigp
OwpAQCAtNTUwLDcgKzU1OSw3IEBACiAgICAgUmVxdWVzdFF1ZXVlOjppdGVyYXRvciBlbmQgPSBy
ZXF1ZXN0c1BlbmRpbmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGl0
ID0gcmVxdWVzdHNQZW5kaW5nLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBS
ZXF1ZXN0KiByZXF1ZXN0ID0gKml0OwotICAgICAgICBpZiAocmVxdWVzdC0+ZG9jTG9hZGVyKCkg
PT0gZG9jTG9hZGVyKSB7CisgICAgICAgIGlmIChyZXF1ZXN0LT5jYW5PdXRsaXZlUGFnZSgpID09
IERvTm90T3V0bGl2ZVBhZ2UgJiYgcmVxdWVzdC0+ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVyKSB7
CiAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKSk7
CiAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdDsKICAgICAgICAgICAgIGRvY0xvYWRlci0+ZGVj
cmVtZW50UmVxdWVzdENvdW50KCk7CkBAIC01NzAsNyArNTc5LDcgQEAKICAgICBSZXF1ZXN0TWFw
OjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKTsKICAgICBmb3IgKFJlcXVl
c3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5iZWdpbigpOyBpICE9IGVuZDsg
KytpKSB7CiAgICAgICAgIFJlcXVlc3QqIHIgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChyLT5k
b2NMb2FkZXIoKSA9PSBkb2NMb2FkZXIpCisgICAgICAgIGlmIChyLT5jYW5PdXRsaXZlUGFnZSgp
ID09IERvTm90T3V0bGl2ZVBhZ2UgJiYgci0+ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVyKQogICAg
ICAgICAgICAgbG9hZGVyc1RvQ2FuY2VsLmFwcGVuZChpLT5maXJzdC5nZXQoKSk7CiAgICAgfQog
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDUzMDAzKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBACiAKICAgICAgICAgLy8gQ2xl
YXIgdGhlIGxvYWRlciBzbyB0aGF0IGFueSBjYWxsYmFja3MgZnJvbSBTdWJyZXNvdXJjZUxvYWRl
cjo6Y3JlYXRlIHdpbGwgbm90IGhhdmUgdGhlIG9sZCBsb2FkZXIuCiAgICAgICAgIG1fbG9hZGVy
ID0gMDsKLSAgICAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9j
dW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIHNlY3VyaXR5Q2hlY2ssIHNlbmRMb2FkQ2Fs
bGJhY2tzLCBzbmlmZkNvbnRlbnQpOworICAgICAgICBtX2xvYWRlciA9IFN1YnJlc291cmNlTG9h
ZGVyOjpjcmVhdGUobV9kb2N1bWVudC0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgc2VjdXJpdHlD
aGVjaywgRG9Ob3RPdXRsaXZlUGFnZSwgc2VuZExvYWRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJl
dmlzaW9uIDUzMDAzKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMzLDYgKzMzMywxMSBAQAogICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJXaWxs
U3VibWl0Rm9ybSgpOwogICAgIAogICAgIGJvb2wgc3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9zdXBwcmVzc09wZW5lckluTmV3RnJhbWU7IH0KKyAgICAKKyAgICBi
b29sIGlzRGlzcGF0Y2hpbmdVbmxvYWRGYW1pbHlFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNE
aXNwYXRjaGluZ0JlZm9yZVVubG9hZEV2ZW50IHx8IG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50
OyB9CisgICAgdm9pZCBpbmNyZW1lbnRPdXRsaXZlUGFnZVJlcXVlc3RDb3VudCgpIHsgbV9vdXRs
aXZlUGFnZVJlcXVlc3RDb3VudCsrOyB9CisgICAgdm9pZCBkZWNyZW1lbnRPdXRsaXZlUGFnZVJl
cXVlc3RDb3VudCgpIHsgbV9vdXRsaXZlUGFnZVJlcXVlc3RDb3VudC0tOyB9CisgICAgYm9vbCBv
dXRsaXZlUGFnZVJlcXVlc3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0bGl2ZVBhZ2VSZXF1
ZXN0Q291bnQ7IH0KIAogICAgIHN0YXRpYyBPYmplY3RDb250ZW50VHlwZSBkZWZhdWx0T2JqZWN0
Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIApA
QCAtNDc5LDcgKzQ4NCw5IEBACiAKICAgICBib29sIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2U7CiAg
ICAgYm9vbCBtX3dhc1VubG9hZEV2ZW50RW1pdHRlZDsKLSAgICBib29sIG1fdW5sb2FkRXZlbnRC
ZWluZ0Rpc3BhdGNoZWQ7CisgICAgYm9vbCBtX2lzRGlzcGF0Y2hpbmdCZWZvcmVVbmxvYWRFdmVu
dDsKKyAgICBib29sIG1faXNEaXNwYXRjaGluZ1VubG9hZEV2ZW50OworICAgIGludCBtX291dGxp
dmVQYWdlUmVxdWVzdENvdW50OwogICAgIGJvb2wgbV9pc0NvbXBsZXRlOwogICAgIGJvb2wgbV9p
c0xvYWRpbmdNYWluUmVzb3VyY2U7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCShyZXZpc2lvbiA1MzAw
MykKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
MCArMjUsMTQgQEAKICNpbmNsdWRlICJSZXF1ZXN0LmgiCiAKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVJlcXVlc3Q6OlJlcXVlc3QoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENh
Y2hlZFJlc291cmNlKiBvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xp
Y3kgc2hvdWxkRG9TZWN1cml0eUNoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Mp
CitSZXF1ZXN0OjpSZXF1ZXN0KERvY0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSog
b2JqZWN0LCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNob3VsZERvU2Vj
dXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3ksIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcykKICAgICA6IG1fb2JqZWN0KG9iamVjdCkKICAgICAsIG1f
ZG9jTG9hZGVyKGRvY0xvYWRlcikKICAgICAsIG1faW5jcmVtZW50YWwoaW5jcmVtZW50YWwpCkBA
IC0zNywxMSArNDEsMjUgQEAKICAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyhzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewogICAgIG1fb2JqZWN0LT5zZXRSZXF1ZXN0KHRoaXMp
OworICAgIGlmIChvdXRsaXZlUGFnZVBvbGljeSA9PSBPdXRsaXZlUGFnZSkgeworCisgICAgICAg
IG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID0gZG9jTG9hZGVyLT5mcmFtZSgp
OworICAgICAgICBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS0+bG9hZGVyKCkt
PmluY3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCk7CisgICAgICAgIG1fZG9jdW1lbnRG
b3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID0gbV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0
bGl2ZVBhZ2UtPmRvY3VtZW50KCk7CisgICAgICAgIG1fZG9jdW1lbnRMb2FkZXJGb3JSZXF1ZXN0
VGhhdENhbk91dGxpdmVQYWdlID0gbV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2Ut
PmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpOworICAgIH0KIH0KIAogUmVxdWVzdDo6
flJlcXVlc3QoKQogeworICAgIGlmIChtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFn
ZSkgICAgICAgCisgICAgICAgIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLT5s
b2FkZXIoKS0+ZGVjcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKICAgICBtX29iamVj
dC0+c2V0UmVxdWVzdCgwKTsKIH0KKyAgICAKK0ZyYW1lKiBSZXF1ZXN0OjpmcmFtZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID8gbV9m
cmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UuZ2V0KCkgOiBtX2RvY0xvYWRlci0+ZnJh
bWUoKTsKK30KIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291
cmNlTG9hZGVyLmgJKHJldmlzaW9uIDUzMDAzKQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBTdWJy
ZXNvdXJjZUxvYWRlcl9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVk
ZSAiUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAgCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zOSw3ICs0MCw3IEBACiAgICAgCiAgICAgY2xhc3MgU3VicmVzb3VyY2VM
b2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VMb2FkZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291
cmNlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1Bv
bGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0g
dHJ1ZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9h
ZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9
IERvU2VjdXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgPSBEb05vdE91dGxpdmVQYWdlLCBi
b29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlLCBib29sIHNob3VsZENvbnRlbnRT
bmlmZiA9IHRydWUpOwogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0g
MDsgfQogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9h
ZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2Fk
LWhhbmRsZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXItZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzx1bmtub3duPiAtIGRpZEZhaWxM
b2FkaW5nV2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRvbWFpbiwgY29kZSAt
OTk5LCBmYWlsaW5nIFVSTCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vaW1hZ2Ut
bG9hZC1pbi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIHdpbGxT
ZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIG1haW4gZG9jdW1lbnQg
VVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4t
bm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxs
KQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3Vy
Y2UtMS1zZWMucGwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGws
IG1haW4gZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL2ltYWdl
LWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRp
cmVjdFJlc3BvbnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVz
b3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxO
U1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93
YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25l
Lmh0bWwgLSBkaWRGaW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlv
bi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8
TlNVUkxSZXNwb25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMv
c2xvdy1yZXNvdXJjZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3
LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAt
IGRpZEZpbmlzaExvYWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0
aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1
bmxvYWQtaGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbG9h
ZCBpbiB1bmxvYWQgaGFuZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbmF2aWdhdGUo
KSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImxpbmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFy
Z2V0Lm9mZnNldExlZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAg
fQorfQorCitmdW5jdGlvbiByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9IG5ldyBJbWFn
ZSgxLCAxKTsKKyAgICBpbWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBs
IjsKK30KKzwvc2NyaXB0PjwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibmF2aWdhdGUoKTsiIG9uYmVm
b3JldW5sb2FkPSJyZXF1ZXN0SW1hZ2UoKTsiPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNl
cy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCI+bGluazwvYT4KKzwvYm9keT48L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhl
bi1ub3RpZnktZG9uZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
bmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQt
dGhlbi1ub3RpZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxodG1s
Pg0KKzxzY3JpcHQ+DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsNCisg
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOw0KKyAgICAgICAgfSwgMjAwMCk7DQorICAgIH0NCis8L3Nj
cmlwdD4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1o
YW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACittYWluIGZyYW1lIC0gaGFzIDEgb251bmxvYWQg
aGFuZGxlcihzKQorPHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vycm9y
IGRvbWFpbiBOU1VSTEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJMICJodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0
bWwiPgoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhl
bi1ub3RpZnktZG9uZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5
LWRvbmUuaHRtbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmln
YXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIG1ldGhvZCBH
RVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRSZWNlaXZlUmVz
cG9uc2UgPE5TVVJMUmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVz
b3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIHN0YXR1cyBjb2RlIDIwMD4K
K2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90
aWZ5LWRvbmUuaHRtbCAtIGRpZEZpbmlzaExvYWRpbmcKK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9u
YXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gd2lsbFNlbmRSZXF1
ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jl
c291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRvY3VtZW50IFVSTCBodHRwOi8v
MTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25l
Lmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKK2h0dHA6Ly8x
MjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBs
IC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBodHRwIHN0YXR1
cyBjb2RlIDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9z
bG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZworCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFn
ZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8aHRtbD48aGVhZD4KKzx0aXRsZT5JbWFn
ZSBsb2FkIGluIHVubG9hZCBoYW5kbGVyPC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBuYXZp
Z2F0ZSgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpOworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibGluayIpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVU
byh0YXJnZXQub2Zmc2V0TGVmdCArIDIsIHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKKyAgICAgICAg
ZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbWFnZSgpIHsKKyAgICB2YXIgaW1nID0gbmV3
IEltYWdlKDEsIDEpOworICAgIGltZy5zcmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1z
ZWMucGwiOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im5hdmlnYXRlKCk7
IiBvbnVubG9hZD0icmVxdWVzdEltYWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVmPSJyZXNvdXJj
ZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+PC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNTMwMDQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMS0wOCAgTmF0ZSBDaGFwaW4gIDxqYXBo
ZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3RzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzI4MzkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1p
bi1iZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWlu
LXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5
LWRvbmUuaHRtbDogQWRkZWQuCisKIDIwMTAtMDEtMDggIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bn
b29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>