<?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>53529</bug_id>
          
          <creation_ts>2011-02-01 13:38:05 -0800</creation_ts>
          <short_desc>[fileapi] Add support for filesystem: URI handling</short_desc>
          <delta_ts>2011-02-11 13:39:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmikurube</cc>
    
    <cc>ericu</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>kinuko</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>343496</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-01 13:38:05 -0800</bug_when>
    <thetext>[fileapi] FileSystem type must be available to DOM code in order to implement Entry.toURI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343498</commentid>
    <comment_count>1</comment_count>
      <attachid>80817</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-01 13:39:48 -0800</bug_when>
    <thetext>Created attachment 80817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343504</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-01 13:41:32 -0800</bug_when>
    <thetext>This is a pre-condition for implementing Entry.toURI() as specified in http://dev.w3.org/2009/dap/file-system/file-dir-sys.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343520</commentid>
    <comment_count>3</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-02-01 14:01:39 -0800</bug_when>
    <thetext>Looks reasonable.

The info&apos;s a little redundant in the current Chromium implementation [it&apos;s in the root path as well], but we don&apos;t want to assume that, and I&apos;d like to take out the root path anyway in favor of a more generic identifier later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343642</commentid>
    <comment_count>4</comment_count>
      <attachid>80849</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-01 16:16:23 -0800</bug_when>
    <thetext>Created attachment 80849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343645</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-01 16:18:44 -0800</bug_when>
    <thetext>CCing abarth to get his thoughts on the SecurityOrigin changes.

I&apos;ve now included everything together in one patch: it didn&apos;t end up being too big, and I think it makes everything make more sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343647</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-01 16:21:14 -0800</bug_when>
    <thetext>Did you mean to mark the patch &quot;review?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343652</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-01 16:23:14 -0800</bug_when>
    <thetext>So marked. There are more tests to add, I think, but yes, review would probably be useful at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343654</commentid>
    <comment_count>8</comment_count>
      <attachid>80849</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-01 16:27:24 -0800</bug_when>
    <thetext>Comment on attachment 80849
Patch

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

&gt; Source/WebCore/fileapi/FileSystemURL.cpp:66
&gt; +KURL FileSystemURL::getOrigin(const KURL&amp; url)
&gt; +{
&gt; +    ASSERT(url.protocolIs(kFileSystemProtocol));
&gt; +
&gt; +    KURL originUrl(ParsedURLString, url.path());
&gt; +    originUrl.setPath(&quot;/&quot;);
&gt; +    return originUrl;
&gt; +}

The types on this function don&apos;t look right.  An &quot;origin&quot; is a SecurityOrigin, not a KURL...  Also, we&apos;ve been centralizing all the knowledge about how to compute SecurityOrigins from URLs in the SecurityOrigin class.

&gt; Source/WebCore/fileapi/FileSystemURL.h:53
&gt; +class FileSystemURL {
&gt; +public:
&gt; +    static String createURLString(SecurityOrigin*, AsyncFileSystem::Type, const String&amp; fullPath);
&gt; +    static KURL getOrigin(const KURL&amp;);
&gt; +    static const char* fileSystemProtocol() { return kFileSystemProtocol; }
&gt; +
&gt; +private:
&gt; +    static const char kFileSystemProtocol[];
&gt; +    FileSystemURL() { }
&gt; +};

Generally, we don&apos;t create classes that have all static members.  What does a FileSystemURL represent?  How is that different from a KURL?

&gt; Source/WebCore/page/SecurityOrigin.cpp:68
&gt; +// FIXME: Should this be part of SchemeRegistry?

Yes.

&gt; Source/WebCore/page/SecurityOrigin.cpp:69
&gt; +static bool schemeRequiresRequestCapabilityForDisplay(const String&amp; scheme)

We probably don&apos;t want to use the term &quot;Capability&quot; here because Capability has a special meaning in security, and this doesn&apos;t quite match that meaning.

&gt; Source/WebCore/page/SecurityOrigin.cpp:152
&gt;          return adoptRef(new SecurityOrigin(BlobURL::getOrigin(url), sandboxFlags));

I see that you&apos;re copying the pattern here from BlobURL, but that&apos;s not a good pattern.  We should fix Blob URL not to use this style either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343655</commentid>
    <comment_count>9</comment_count>
      <attachid>80849</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-01 16:28:20 -0800</bug_when>
    <thetext>Comment on attachment 80849
Patch

The SecurityOrigin-related bits of this patch generally look good, but we should iterate on the style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343666</commentid>
    <comment_count>10</comment_count>
      <attachid>80849</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-01 16:40:07 -0800</bug_when>
    <thetext>Comment on attachment 80849
Patch

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

&gt;&gt; Source/WebCore/fileapi/FileSystemURL.h:53
&gt;&gt; +};
&gt; 
&gt; Generally, we don&apos;t create classes that have all static members.  What does a FileSystemURL represent?  How is that different from a KURL?

As you guessed, this is simply mirroring the code layout of BlobURL. createURLString() should be able to move entirely to Entry.cpp (it&apos;s not called elsewhere).  See my question in SecurityOrigin.cpp about what I should do with getOrigin().

&gt;&gt; Source/WebCore/page/SecurityOrigin.cpp:68
&gt;&gt; +// FIXME: Should this be part of SchemeRegistry?
&gt; 
&gt; Yes.

Will move once we&apos;ve agreed on a name.

&gt;&gt; Source/WebCore/page/SecurityOrigin.cpp:69
&gt;&gt; +static bool schemeRequiresRequestCapabilityForDisplay(const String&amp; scheme)
&gt; 
&gt; We probably don&apos;t want to use the term &quot;Capability&quot; here because Capability has a special meaning in security, and this doesn&apos;t quite match that meaning.

I disliked this name too; do you have an alternate suggestion? SchemeRegistry::shouldTreatURLSchemeDisplayAsRequestRestricted?  More words doesn&apos;t necessarily make it clearer to me.

&gt;&gt; Source/WebCore/page/SecurityOrigin.cpp:152
&gt;&gt;          return adoptRef(new SecurityOrigin(BlobURL::getOrigin(url), sandboxFlags));
&gt; 
&gt; I see that you&apos;re copying the pattern here from BlobURL, but that&apos;s not a good pattern.  We should fix Blob URL not to use this style either.

Do you have a pattern in mind?  Should the code that&apos;s currently in FileSystemURL::getOrigin() just move into the SecurityOrigin constructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343678</commentid>
    <comment_count>11</comment_count>
      <attachid>80849</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-01 16:55:22 -0800</bug_when>
    <thetext>Comment on attachment 80849
Patch

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

&gt;&gt;&gt; Source/WebCore/page/SecurityOrigin.cpp:69
&gt;&gt;&gt; +static bool schemeRequiresRequestCapabilityForDisplay(const String&amp; scheme)
&gt;&gt; 
&gt;&gt; We probably don&apos;t want to use the term &quot;Capability&quot; here because Capability has a special meaning in security, and this doesn&apos;t quite match that meaning.
&gt; 
&gt; I disliked this name too; do you have an alternate suggestion? SchemeRegistry::shouldTreatURLSchemeDisplayAsRequestRestricted?  More words doesn&apos;t necessarily make it clearer to me.

Yeah, all these functions are poorly named.  Maybe SchemeRegistry::canDisplayOnlyIfCanRequest ?

&gt;&gt;&gt; Source/WebCore/page/SecurityOrigin.cpp:152
&gt;&gt;&gt;          return adoptRef(new SecurityOrigin(BlobURL::getOrigin(url), sandboxFlags));
&gt;&gt; 
&gt;&gt; I see that you&apos;re copying the pattern here from BlobURL, but that&apos;s not a good pattern.  We should fix Blob URL not to use this style either.
&gt; 
&gt; Do you have a pattern in mind?  Should the code that&apos;s currently in FileSystemURL::getOrigin() just move into the SecurityOrigin constructor?

Yeah, or just into a free function in an anonymous namespace in SecurityOrigin.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343740</commentid>
    <comment_count>12</comment_count>
      <attachid>80867</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-01 18:12:06 -0800</bug_when>
    <thetext>Created attachment 80867
Removed FileSystemURL, moved some code to SchemeRegistry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343791</commentid>
    <comment_count>13</comment_count>
      <attachid>80867</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-01 19:54:06 -0800</bug_when>
    <thetext>Comment on attachment 80867
Removed FileSystemURL, moved some code to SchemeRegistry

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

&gt; Source/WebCore/fileapi/Entry.cpp:95
&gt; +    String uri = &quot;filesystem:&quot;;
&gt; +    uri += filesystem()-&gt;scriptExecutionContext()-&gt;securityOrigin()-&gt;toString();
&gt; +    uri += &quot;/&quot;;
&gt; +    uri += (m_fileSystem-&gt;asyncFileSystem()-&gt;type() == AsyncFileSystem::Temporary ? &quot;temporary&quot; : &quot;persistent&quot;);
&gt; +    uri += m_fullPath;
&gt; +    return uri;

Consider using StringBuilder instead of +=.  That should save a bunch of allocations.

&gt; Source/WebCore/page/SecurityOrigin.cpp:85
&gt; +        if (originURL.isValid()) {

If the originURL isn&apos;t valid, will we trigger the &quot;m_isUnique = true&quot; assignment on line 95?  If not, we should probably do that explicitly.

&gt; Source/WebCore/page/SecurityOrigin.cpp:88
&gt; +            m_port = originURL.port();

Do we need to do something with default ports, or will that happen automagically for us?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344010</commentid>
    <comment_count>14</comment_count>
      <attachid>80923</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-02 09:39:48 -0800</bug_when>
    <thetext>Created attachment 80923
Use StringBuilder and set m_isUnique for invalid URLs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344013</commentid>
    <comment_count>15</comment_count>
      <attachid>80867</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-02 09:42:49 -0800</bug_when>
    <thetext>Comment on attachment 80867
Removed FileSystemURL, moved some code to SchemeRegistry

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

&gt;&gt; Source/WebCore/fileapi/Entry.cpp:95
&gt;&gt; +    return uri;
&gt; 
&gt; Consider using StringBuilder instead of +=.  That should save a bunch of allocations.

Done. I was thinking std::string, now I know how to treat WTF::String.

&gt;&gt; Source/WebCore/page/SecurityOrigin.cpp:85
&gt;&gt; +        if (originURL.isValid()) {
&gt; 
&gt; If the originURL isn&apos;t valid, will we trigger the &quot;m_isUnique = true&quot; assignment on line 95?  If not, we should probably do that explicitly.

Added my own explicit setting in the else branch (the other one wasn&apos;t going to trigger).

&gt;&gt; Source/WebCore/page/SecurityOrigin.cpp:88
&gt;&gt; +            m_port = originURL.port();
&gt; 
&gt; Do we need to do something with default ports, or will that happen automagically for us?

That&apos;ll be handled by the last if statement in the constructor.  It worries me a little that the ordering is so important here, but it&apos;s still short enough to fit on one screen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344190</commentid>
    <comment_count>16</comment_count>
      <attachid>80923</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-02 13:35:18 -0800</bug_when>
    <thetext>Comment on attachment 80923
Use StringBuilder and set m_isUnique for invalid URLs

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

The SecurityOrigin-related parts of this patch look great!  I&apos;ll let someone else review the filesystem parts.

&gt; Source/WebCore/fileapi/Entry.idl:46
&gt; +        DOMString toURI();

Its too bad the web platform is so inconsistent w.r.t URL and URI.  Not really a problem with this patch, just rambling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344284</commentid>
    <comment_count>17</comment_count>
      <attachid>80975</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-02 14:53:41 -0800</bug_when>
    <thetext>Created attachment 80975
Adds test to exercise canDisplay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344417</commentid>
    <comment_count>18</comment_count>
      <attachid>80975</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-02-02 16:53:38 -0800</bug_when>
    <thetext>Comment on attachment 80975
Adds test to exercise canDisplay

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

&gt; LayoutTests/fast/filesystem/filesystem-uri-origin.html:1
&gt; +&lt;a style=&quot;display:none&quot; href=&quot;filesystem:http://www.webkit.org:8080/temporary/a/b/c/file.txt&quot;&gt;foo&lt;/a&gt;

Here you have webkit.org as the filesystem origin.  In directory-entry-to-uri-expected.txt you have file:// as the origin.  In an iframe test I see http://localhost:8000.  Please make sure these tests will work both on the webkit bots and when run locally.

&gt; Source/WebCore/fileapi/Entry.cpp:95
&gt; +    uriBuilder.append(m_fileSystem-&gt;asyncFileSystem()-&gt;type() == AsyncFileSystem::Temporary ? &quot;temporary&quot; : &quot;persistent&quot;);

Do the strings &quot;temporary&quot; and &quot;persistent&quot; exist anywhere as constants?  It would be nice not to have them inline here.  At the very least they should be shared with the code that cracks the URI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344444</commentid>
    <comment_count>19</comment_count>
      <attachid>80975</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-02-02 17:32:48 -0800</bug_when>
    <thetext>Comment on attachment 80975
Adds test to exercise canDisplay

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

&gt;&gt; Source/WebCore/fileapi/Entry.cpp:95
&gt;&gt; +    uriBuilder.append(m_fileSystem-&gt;asyncFileSystem()-&gt;type() == AsyncFileSystem::Temporary ? &quot;temporary&quot; : &quot;persistent&quot;);
&gt; 
&gt; Do the strings &quot;temporary&quot; and &quot;persistent&quot; exist anywhere as constants?  It would be nice not to have them inline here.  At the very least they should be shared with the code that cracks the URI.

Same for the protocol name &quot;filesystem&quot;?

The changes in FileSystem callback chains to include type parameter lgtm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344448</commentid>
    <comment_count>20</comment_count>
      <attachid>80975</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-02 17:38:04 -0800</bug_when>
    <thetext>Comment on attachment 80975
Adds test to exercise canDisplay

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

&gt;&gt; LayoutTests/fast/filesystem/filesystem-uri-origin.html:1
&gt;&gt; +&lt;a style=&quot;display:none&quot; href=&quot;filesystem:http://www.webkit.org:8080/temporary/a/b/c/file.txt&quot;&gt;foo&lt;/a&gt;
&gt; 
&gt; Here you have webkit.org as the filesystem origin.  In directory-entry-to-uri-expected.txt you have file:// as the origin.  In an iframe test I see http://localhost:8000.  Please make sure these tests will work both on the webkit bots and when run locally.

The file:/// URIs are there to avoid needing to be an http test. Would you rather I use http tests for those toURI() tests?

The iframe test uses localhost to distinguish it from 127.0.0.1 (where the hosted page is running).

The use of webkit.org:8080 here is purely ornamental, since this URI is never followed; it&apos;s simply being used to set up the dom so that the origin is available.  Changing this to localhost or similar wouldn&apos;t change anything...

&gt;&gt;&gt; Source/WebCore/fileapi/Entry.cpp:95
&gt;&gt;&gt; +    uriBuilder.append(m_fileSystem-&gt;asyncFileSystem()-&gt;type() == AsyncFileSystem::Temporary ? &quot;temporary&quot; : &quot;persistent&quot;);
&gt;&gt; 
&gt;&gt; Do the strings &quot;temporary&quot; and &quot;persistent&quot; exist anywhere as constants?  It would be nice not to have them inline here.  At the very least they should be shared with the code that cracks the URI.
&gt; 
&gt; Same for the protocol name &quot;filesystem&quot;?
&gt; 
&gt; The changes in FileSystem callback chains to include type parameter lgtm.

Any suggestions about where these strings would live?  Right now, the URI cracking code is in Chromium.  Should it move into WebCore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344461</commentid>
    <comment_count>21</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2011-02-02 17:59:13 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 80975 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80975&amp;action=review
&gt; 
&gt; &gt;&gt; LayoutTests/fast/filesystem/filesystem-uri-origin.html:1
&gt; &gt;&gt; +&lt;a style=&quot;display:none&quot; href=&quot;filesystem:http://www.webkit.org:8080/temporary/a/b/c/file.txt&quot;&gt;foo&lt;/a&gt;
&gt; &gt; 
&gt; &gt; Here you have webkit.org as the filesystem origin.  In directory-entry-to-uri-expected.txt you have file:// as the origin.  In an iframe test I see http://localhost:8000.  Please make sure these tests will work both on the webkit bots and when run locally.
&gt; 
&gt; The file:/// URIs are there to avoid needing to be an http test. Would you rather I use http tests for those toURI() tests?

Nope; just wanted to make sure that it was all going to work.  That&apos;s fine.

&gt; The iframe test uses localhost to distinguish it from 127.0.0.1 (where the hosted page is running).
&gt; 
&gt; The use of webkit.org:8080 here is purely ornamental, since this URI is never followed; it&apos;s simply being used to set up the dom so that the origin is available.  Changing this to localhost or similar wouldn&apos;t change anything...
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/fileapi/Entry.cpp:95
&gt; &gt;&gt;&gt; +    uriBuilder.append(m_fileSystem-&gt;asyncFileSystem()-&gt;type() == AsyncFileSystem::Temporary ? &quot;temporary&quot; : &quot;persistent&quot;);
&gt; &gt;&gt; 
&gt; &gt;&gt; Do the strings &quot;temporary&quot; and &quot;persistent&quot; exist anywhere as constants?  It would be nice not to have them inline here.  At the very least they should be shared with the code that cracks the URI.
&gt; &gt; 
&gt; &gt; Same for the protocol name &quot;filesystem&quot;?
&gt; &gt; 
&gt; &gt; The changes in FileSystem callback chains to include type parameter lgtm.
&gt; 
&gt; Any suggestions about where these strings would live?  Right now, the URI cracking code is in Chromium.  Should it move into WebCore?

Hmm...tricky, since it deals with security origin code.  Let&apos;s at least make sure that the strings don&apos;t exist in more than one place for chromium or more than one place for webkit.  Perhaps for WebCore it should be in AsyncFileSystem, along with Type?  Kinuko, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344989</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-03 14:07:47 -0800</bug_when>
    <thetext>I actually had a followup question about tests: these clearly won&apos;t work without FILE_SYSTEM being enabled. Is there anything I need to do to mark them as ignored/disabled when run outside the chromium configuration?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345000</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-03 14:14:46 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; I actually had a followup question about tests: these clearly won&apos;t work without FILE_SYSTEM being enabled. Is there anything I need to do to mark them as ignored/disabled when run outside the chromium configuration?

Yeah, you can add them to the Skipped lists for ports that don&apos;t support this feature.  For example, LayoutTests/platform/mac/Skipped</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345007</commentid>
    <comment_count>24</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-02-03 14:20:48 -0800</bug_when>
    <thetext>I&apos;m pretty certain the fast/filesystem directory is already in those skip lists so that individual tests need not be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345011</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-03 14:22:49 -0800</bug_when>
    <thetext>I&apos;ve also added an http test, which will need to be skipped.  I&apos;ve added it locally, will update the patch after the next round of comments is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346966</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-07 17:17:48 -0800</bug_when>
    <thetext>Any further comments?  Either about where to put the string constants, or anything else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347025</commentid>
    <comment_count>27</comment_count>
      <attachid>80975</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-02-07 19:47:29 -0800</bug_when>
    <thetext>Comment on attachment 80975
Adds test to exercise canDisplay

Again this generally looks good to me (as for changes in FileSystem API).  A few more cosmetic comments:

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

&gt; Source/WebCore/ChangeLog:6
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=53529

It might expect to see a few more lines that explain what changes are to be made by this patch.
(Also some of the individual files/changes listed below may deserve brief one-liner comments?)

&gt;&gt;&gt;&gt;&gt; Source/WebCore/fileapi/Entry.cpp:95
&gt;&gt;&gt;&gt;&gt; +    uriBuilder.append(m_fileSystem-&gt;asyncFileSystem()-&gt;type() == AsyncFileSystem::Temporary ? &quot;temporary&quot; : &quot;persistent&quot;);
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Do the strings &quot;temporary&quot; and &quot;persistent&quot; exist anywhere as constants?  It would be nice not to have them inline here.  At the very least they should be shared with the code that cracks the URI.
&gt;&gt;&gt; 
&gt;&gt;&gt; Same for the protocol name &quot;filesystem&quot;?
&gt;&gt;&gt; 
&gt;&gt;&gt; The changes in FileSystem callback chains to include type parameter lgtm.
&gt;&gt; 
&gt;&gt; Any suggestions about where these strings would live?  Right now, the URI cracking code is in Chromium.  Should it move into WebCore?
&gt; 
&gt; Hmm...tricky, since it deals with security origin code.  Let&apos;s at least make sure that the strings don&apos;t exist in more than one place for chromium or more than one place for webkit.  Perhaps for WebCore it should be in AsyncFileSystem, along with Type?  Kinuko, what do you think?

(Sorry I thought I had commented on this but seems like I failed to hit &apos;publish&apos; button!)

The URI format will be on the spec right?  Then I think it&apos;s ok to construct the URI in WebCore and crack it in chromium (i.e. in embedder&apos;s code).  For WebCore side having constants in AsyncFileSystem sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347515</commentid>
    <comment_count>28</comment_count>
      <attachid>80975</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-08 10:53:03 -0800</bug_when>
    <thetext>Comment on attachment 80975
Adds test to exercise canDisplay

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

&gt;&gt; Source/WebCore/ChangeLog:6
&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=53529
&gt; 
&gt; It might expect to see a few more lines that explain what changes are to be made by this patch.
&gt; (Also some of the individual files/changes listed below may deserve brief one-liner comments?)

Updated all the ChangeLogs with more info, thanks for the suggestion (this is my first real (non-cleanup) WebKit patch)

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/fileapi/Entry.cpp:95
&gt;&gt;&gt;&gt;&gt;&gt; +    uriBuilder.append(m_fileSystem-&gt;asyncFileSystem()-&gt;type() == AsyncFileSystem::Temporary ? &quot;temporary&quot; : &quot;persistent&quot;);
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Do the strings &quot;temporary&quot; and &quot;persistent&quot; exist anywhere as constants?  It would be nice not to have them inline here.  At the very least they should be shared with the code that cracks the URI.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Same for the protocol name &quot;filesystem&quot;?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; The changes in FileSystem callback chains to include type parameter lgtm.
&gt;&gt;&gt; 
&gt;&gt;&gt; Any suggestions about where these strings would live?  Right now, the URI cracking code is in Chromium.  Should it move into WebCore?
&gt;&gt; 
&gt;&gt; Hmm...tricky, since it deals with security origin code.  Let&apos;s at least make sure that the strings don&apos;t exist in more than one place for chromium or more than one place for webkit.  Perhaps for WebCore it should be in AsyncFileSystem, along with Type?  Kinuko, what do you think?
&gt; 
&gt; (Sorry I thought I had commented on this but seems like I failed to hit &apos;publish&apos; button!)
&gt; 
&gt; The URI format will be on the spec right?  Then I think it&apos;s ok to construct the URI in WebCore and crack it in chromium (i.e. in embedder&apos;s code).  For WebCore side having constants in AsyncFileSystem sounds good to me.

Hmm, the trouble with putting these in AsyncFileSystem is that there are already two implementations of AsyncFileSystem, so there&apos;s not a single place on which to hang const char[] string constants.  WebCore/platform/AsyncFileSystem.cpp is not used by Chromium; we use WebKit/chromium/src/AsyncFileSystemChromium.cpp.  And in fact, AsyncFileSystem already has this duplicated string constant problem: AsyncFileSystem.cpp uses the strings &quot;Temporary&quot; and &quot;Persistent&quot; (part of the filesystem name), while in Chromium, those live in webkit/fileapi/file_system_path_manager.cc.

In short, I&apos;m not sure what&apos;s to be gained from moving these constants out of Entry.cpp and into two other CPP files, given that this is the only reference in all of WebKit. Is there another place I&apos;m missing where they would be used?  That might make it clearer where they should be (if they do need centralization).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347516</commentid>
    <comment_count>29</comment_count>
      <attachid>81663</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-08 10:53:50 -0800</bug_when>
    <thetext>Created attachment 81663
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347885</commentid>
    <comment_count>30</comment_count>
      <attachid>81663</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-02-08 18:40:05 -0800</bug_when>
    <thetext>Comment on attachment 81663
Patch

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

&gt; Source/WebCore/fileapi/Entry.cpp:97
&gt; +    return uriBuilder.toString();

Somehow it didn&apos;t come to me up until now, but shouldn&apos;t we put this in EntryBase (base class of Entry and EntrySync) rather than in Entry?
The spec seems to have toURI method also in EntrySync.
http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#widl-EntrySync-toURI

And as for string constants, you&apos;re right about AsyncFileSystem (its .cpp is not referred in chromium build).  In addition to the fact you pointed out, the URI stuff is not platform dependent stuff but spec based fact, so we should put them in WebCore/fileapi as a common implementation.
If we&apos;re going to put this code in EntryBase, I&apos;d think about putting the constants in DOMFileSystemBase.{h,cpp}.
Or if we&apos;re sure we won&apos;t use the constants from anywhere else in webcore, it&apos;d be also ok to leave them as literals.
So my take is to put them in DOMFileSystemBase or just leave them as is.
Thanks for taking your extra time on this issue!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348374</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-09 10:45:46 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 81663 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81663&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/fileapi/Entry.cpp:97
&gt; &gt; +    return uriBuilder.toString();
&gt; 
&gt; Somehow it didn&apos;t come to me up until now, but shouldn&apos;t we put this in EntryBase (base class of Entry and EntrySync) rather than in Entry?
&gt; The spec seems to have toURI method also in EntrySync.
&gt; http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#widl-EntrySync-toURI

Hooking this up to EntrySync will require a bit more work, since neither EntryBase nor EntrySync currently have access to the scriptExecutionContext-&gt;securityOrigin(). Getting EntryBase access to that would make this patch significantly bigger, I fear.  Might it make sense to do that in a followup?

&gt; And as for string constants, you&apos;re right about AsyncFileSystem (its .cpp is not referred in chromium build).  In addition to the fact you pointed out, the URI stuff is not platform dependent stuff but spec based fact, so we should put them in WebCore/fileapi as a common implementation.
&gt; If we&apos;re going to put this code in EntryBase, I&apos;d think about putting the constants in DOMFileSystemBase.{h,cpp}.
&gt; Or if we&apos;re sure we won&apos;t use the constants from anywhere else in webcore, it&apos;d be also ok to leave them as literals.
&gt; So my take is to put them in DOMFileSystemBase or just leave them as is.
&gt; Thanks for taking your extra time on this issue!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348678</commentid>
    <comment_count>32</comment_count>
      <attachid>81663</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-02-09 16:05:36 -0800</bug_when>
    <thetext>Comment on attachment 81663
Patch

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

&gt;&gt;&gt; Source/WebCore/fileapi/Entry.cpp:97
&gt;&gt;&gt; +    return uriBuilder.toString();
&gt;&gt; 
&gt;&gt; Somehow it didn&apos;t come to me up until now, but shouldn&apos;t we put this in EntryBase (base class of Entry and EntrySync) rather than in Entry?
&gt;&gt; The spec seems to have toURI method also in EntrySync.
&gt;&gt; http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#widl-EntrySync-toURI
&gt;&gt; 
&gt;&gt; And as for string constants, you&apos;re right about AsyncFileSystem (its .cpp is not referred in chromium build).  In addition to the fact you pointed out, the URI stuff is not platform dependent stuff but spec based fact, so we should put them in WebCore/fileapi as a common implementation.
&gt;&gt; If we&apos;re going to put this code in EntryBase, I&apos;d think about putting the constants in DOMFileSystemBase.{h,cpp}.
&gt;&gt; Or if we&apos;re sure we won&apos;t use the constants from anywhere else in webcore, it&apos;d be also ok to leave them as literals.
&gt;&gt; So my take is to put them in DOMFileSystemBase or just leave them as is.
&gt;&gt; Thanks for taking your extra time on this issue!
&gt; 
&gt; Hooking this up to EntrySync will require a bit more work, since neither EntryBase nor EntrySync currently have access to the scriptExecutionContext-&gt;securityOrigin(). Getting EntryBase access to that would make this patch significantly bigger, I fear.  Might it make sense to do that in a followup?

I see, yes it makes sense.  Let&apos;s do it separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348824</commentid>
    <comment_count>33</comment_count>
      <attachid>81663</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-09 22:44:07 -0800</bug_when>
    <thetext>Comment on attachment 81663
Patch

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

&gt; Source/WebCore/page/SecurityOrigin.cpp:86
&gt; +            m_protocol = originURL.protocol().lower();

I suspect that these calls to .lower() may be redundant.  Doesn&apos;t KURL canonicalize the protocol and host to lowercase?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348868</commentid>
    <comment_count>34</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-10 00:53:50 -0800</bug_when>
    <thetext>&gt; Doesn&apos;t KURL canonicalize the protocol and host to lowercase?

As of about two days ago, yes.  Before that, no.  Let&apos;s keep the toLower for a bit while we make sure that change sticks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349157</commentid>
    <comment_count>35</comment_count>
      <attachid>81663</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-10 10:10:36 -0800</bug_when>
    <thetext>Comment on attachment 81663
Patch

OK, makes sense.  R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349298</commentid>
    <comment_count>36</comment_count>
      <attachid>81663</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-10 12:57:37 -0800</bug_when>
    <thetext>Comment on attachment 81663
Patch

Rejecting attachment 81663 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;build-...&quot; exit_code: 2

Last 500 characters of output:
......................................................................................................................................................................
compositing ...........
compositing/animation ...
compositing/color-matching ..
compositing/geometry ......
compositing/geometry/empty-embed-rects.html -&gt; crashed

Exiting early after 1 failures. 962 tests run.
103.11s total testing time

961 test cases (99%) succeeded
1 test case (&lt;1%) crashed
2 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/7886413</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349445</commentid>
    <comment_count>37</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-10 15:36:25 -0800</bug_when>
    <thetext>Looks like  a flaky crash...Darin, can you resubmit to the commit queue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349451</commentid>
    <comment_count>38</comment_count>
      <attachid>81663</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-10 15:37:56 -0800</bug_when>
    <thetext>Comment on attachment 81663
Patch

suspicious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349556</commentid>
    <comment_count>39</comment_count>
      <attachid>81663</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-10 18:44:35 -0800</bug_when>
    <thetext>Comment on attachment 81663
Patch

Rejecting attachment 81663 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;build-...&quot; exit_code: 2

Last 500 characters of output:
......................................................................................................................................................................
compositing ...........
compositing/animation ...
compositing/color-matching ..
compositing/geometry ......
compositing/geometry/empty-embed-rects.html -&gt; crashed

Exiting early after 1 failures. 962 tests run.
103.00s total testing time

961 test cases (99%) succeeded
1 test case (&lt;1%) crashed
2 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/7886508</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349566</commentid>
    <comment_count>40</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-10 18:57:37 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; Looks like  a flaky crash...Darin, can you resubmit to the commit queue?

The commit-queue should be robust to flaky crashes...  Have you tried to reproduce locally?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349630</commentid>
    <comment_count>41</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-10 21:33:04 -0800</bug_when>
    <thetext>The commit-queue never lies. :)  I&apos;m certain this is a crash from this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349946</commentid>
    <comment_count>42</comment_count>
      <attachid>82163</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-11 12:57:21 -0800</bug_when>
    <thetext>Created attachment 82163
Patch for commit, no layout test crashes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349958</commentid>
    <comment_count>43</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-02-11 13:12:21 -0800</bug_when>
    <thetext>I see this diff between the patches:

 bool SchemeRegistry::canDisplayOnlyIfCanRequest(const String&amp; scheme)
 {
+    if (scheme.isEmpty())
+        return false;
     return canDisplayOnlyIfCanRequestSchemes().contains(scheme);
 }

LGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349960</commentid>
    <comment_count>44</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-02-11 13:13:13 -0800</bug_when>
    <thetext>Indeed the commit queue was right. Very little code in this change exists without ENABLE_FILE_SYSTEM, but the bit that does was crashing when called with an empty scheme (as we apparently do for &lt;embed&gt;s).  I&apos;ve fixed that in this change, and also sent out https://bugs.webkit.org/show_bug.cgi?id=54304 to add safety checks to the rest of the methods in SchemeRegistry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349980</commentid>
    <comment_count>45</comment_count>
      <attachid>82163</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-11 13:39:19 -0800</bug_when>
    <thetext>Comment on attachment 82163
Patch for commit, no layout test crashes

Clearing flags on attachment: 82163

Committed r78362: &lt;http://trac.webkit.org/changeset/78362&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349981</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-11 13:39:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80817</attachid>
            <date>2011-02-01 13:39:48 -0800</date>
            <delta_ts>2011-02-01 16:16:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53529-20110201133947.patch</filename>
            <type>text/plain</type>
            <size>14388</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlMzM3ZmJhOGY4ZTI0ZDE3ODNmZDdlZjJhZDFkMWU3YzdlMWYzNzZiLi5j
NDJmMzI1NGNkOTZjZDZmMzI1OWRlN2UxNThlZTUwZjhiN2U4YjkwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTEtMDItMDEgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVh
cGldIEZpbGVTeXN0ZW0gdHlwZSBtdXN0IGJlIGF2YWlsYWJsZSB0byBET00gY29kZSBpbiBvcmRl
ciB0byBpbXBsZW1lbnQgRW50cnkudG9VUkkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUzNTI5CisKKyAgICAgICAgKiBwbGF0Zm9ybS9Bc3luY0ZpbGVT
eXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oOgorICAgICAgICAoV2ViQ29yZTo6
QXN5bmNGaWxlU3lzdGVtOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3Rl
bTo6QXN5bmNGaWxlU3lzdGVtKToKKwogMjAxMS0wMS0zMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fi
b2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGI4NWE0ODdm
YjYxY2Y3NjZiOWIwYjhmNDk3MmY0Njc5M2FlMTljNmEuLjI2YTQzMmNiNWEyMTdkMGRjZmViOGY0
ZjRhNzZjNDMxOTU4MmU5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Fz
eW5jRmlsZVN5c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxl
U3lzdGVtLmNwcApAQCAtNDYsNyArNDYsNyBAQCBib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNBdmFp
bGFibGUoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc093blB0cjxBc3luY0ZpbGVTeXN0
ZW0+IEFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYpCitQYXNzT3duUHRyPEFz
eW5jRmlsZVN5c3RlbT4gQXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUoVHlwZSwgY29uc3QgU3RyaW5n
JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaAppbmRleCBjMzRhNjQ0ZDVkZDJjM2ZiMDY5YjQz
ZTYzYzkzYjFiOTdmYzRiNTJhLi5mNTIwN2NlM2UyMGMwODYyOTEzODYzODM2OGJlZDIzZmU4NjBm
YWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaApAQCAtNjUs
NyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHdhaXRGb3JPcGVyYXRpb25Ub0Nv
bXBsZXRlKCkgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIENyZWF0ZXMgYW5kIHJldHVybnMg
YSBuZXcgcGxhdGZvcm0tc3BlY2lmaWMgQXN5bmNGaWxlU3lzdGVtIGluc3RhbmNlIGlmIHRoZSBw
bGF0Zm9ybSBoYXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbi4KLSAgICBzdGF0aWMgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoKTsKKyAgICBz
dGF0aWMgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShUeXBlLCBjb25zdCBTdHJp
bmcmIHJvb3RQYXRoKTsKIAogICAgIC8vIE9wZW5zIGEgbmV3IGZpbGUgc3lzdGVtLiBUaGUgY3Jl
YXRlIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gY3JlYXRlIHRoZSBwYXRo
IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3RzLgogICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxl
U3lzdGVtKGNvbnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50
aWZpZXIsIFR5cGUsIGJvb2wgY3JlYXRlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcz4pOwpAQCAtMTMyLDEyICsxMzIsMTYgQEAgcHVibGljOgogICAgIC8vIEdldHRlciBmb3Ig
dGhpcyBmaWxlIHN5c3RlbSdzIHJvb3QgcGF0aC4KICAgICBTdHJpbmcgcm9vdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGxhdGZvcm1Sb290UGF0aDsgfQogCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisKIHByb3RlY3RlZDoKLSAgICBBc3luY0ZpbGVTeXN0ZW0oY29uc3Qg
U3RyaW5nJiBwbGF0Zm9ybVJvb3RQYXRoKQotICAgICAgICA6IG1fcGxhdGZvcm1Sb290UGF0aChw
bGF0Zm9ybVJvb3RQYXRoKQorICAgIEFzeW5jRmlsZVN5c3RlbShUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgcGxhdGZvcm1Sb290UGF0aCkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAg
LCBtX3BsYXRmb3JtUm9vdFBhdGgocGxhdGZvcm1Sb290UGF0aCkKICAgICB7CiAgICAgfQogCisg
ICAgVHlwZSBtX3R5cGU7CiAgICAgU3RyaW5nIG1fcGxhdGZvcm1Sb290UGF0aDsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzNjNWJiYWY2NzA1YWY3ODg3YjlhMmQyNjAxNWYz
YjUzYjMwMzIwMC4uMTIwYzQ0N2ExYTg3NmZmN2Y3NWFmMmVlYWE4ZDc4MDdkMjY4YjNjMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0wMi0wMSAgQWRh
bSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbZmlsZWFwaV0gRmlsZVN5c3RlbSB0eXBlIG11c3QgYmUg
YXZhaWxhYmxlIHRvIERPTSBjb2RlIGluIG9yZGVyIHRvIGltcGxlbWVudCBFbnRyeS50b1VSSQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM1MjkKKwor
ICAgICAgICAqIHNyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0pOgor
ICAgICAgICAqIHNyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29y
ZTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgICogc3JjL0xvY2Fs
RmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3Rl
bTo6cmVhZEZpbGVTeXN0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpy
ZXF1ZXN0RmlsZVN5c3RlbSk6CisgICAgICAgICogc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6Oldl
YkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGw6OmRpZE9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKiBzcmMvV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lz
dGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW06OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToKKyAgICAgICAgKiBzcmMv
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUpOgorCiAyMDExLTAxLTMxICBDaHJpcyBS
b2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15
IE9ybG93LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IDU5NzVlNzI0M2QzNDU4MjJlZmFhMTg3OWQ0YzI4ZmY0
YWQ1MzY0YTcuLmVmMWY2MTY3MWM4N2Q5MDFkYTM0MDA5MjY1MDFiMzViZGJjOThmYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAKQEAgLTUwLDggKzUwLDggQEAgYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxh
YmxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OkFz
eW5jRmlsZVN5c3RlbUNocm9taXVtKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpCi0gICAgOiBBc3lu
Y0ZpbGVTeXN0ZW0ocm9vdFBhdGgpCitBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6QXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0oQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYg
cm9vdFBhdGgpCisgICAgOiBBc3luY0ZpbGVTeXN0ZW0odHlwZSwgcm9vdFBhdGgpCiAgICAgLCBt
X3dlYkZpbGVTeXN0ZW0oV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+ZmlsZVN5c3RlbSgpKQogewog
ICAgIEFTU0VSVChtX3dlYkZpbGVTeXN0ZW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKaW5kZXggNjIwNTYwOWI5ODZjYTA0
OGZkOTkwZGY5NGM0NTU3YzJjMjBmOWRkYS4uZGE5OGEzMzFiOTc3ZTBiNzhmNTUxYjNiMDU4ZTJk
MGRjZGQ0YTExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3lu
Y0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCkBAIC00Niw5ICs0Niw5IEBAIGNsYXNzIEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrczsKIAogY2xhc3MgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0gOiBwdWJsaWMg
QXN5bmNGaWxlU3lzdGVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoKQorICAgIHN0YXRpYyBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBl
LCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShyb290UGF0aCkpOworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKHR5cGUsIHJvb3RQYXRoKSk7CiAg
ICAgfQogCiAgICAgdmlydHVhbCB+QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oKTsKQEAgLTY2LDcg
KzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVXcml0ZXIoQXN5bmNGaWxl
V3JpdGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bShjb25zdCBTdHJpbmcmIHJvb3RQYXRoKTsKKyAgICBBc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bShBc3luY0ZpbGVTeXN0ZW06OlR5cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBh
dGgpOwogICAgIFdlYktpdDo6V2ViRmlsZVN5c3RlbSogbV93ZWJGaWxlU3lzdGVtOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwCmluZGV4IGE5YzYxZDBkNGZkMDU1ZWM2NTZlMGNkZGMxZjYxOWY4ZGE5NDk1ZWIu
LmFlMmViMWRjMGY2ODAzM2U0ZTgxNjY3MjM2YThhZjQxNzIzMDk4YmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAK
QEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVMKICAgICBBU1NFUlQoY29u
dGV4dCAmJiBjb250ZXh0LT5pc0RvY3VtZW50KCkpOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJG
cmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICB3
ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNfY2FzdDxX
ZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgZmFsc2UsIG5ldyBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbChjYWxsYmFja3MpKTsKKyAgICB3ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5G
aWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBl
KSwgc2l6ZSwgZmFsc2UsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3Ms
IHR5cGUpKTsKIH0KIAogdm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBl
LCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNh
bGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykKQEAgLTcxLDEyICs3MSwxMiBAQCB2b2lkIExvY2Fs
RmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgQXN5bmNGaQogICAgIGlmIChjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKICAg
ICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRv
Y3VtZW50LT5mcmFtZSgpKTsKLSAgICAgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5
c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNp
emUsIHRydWUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpKTsKKyAg
ICAgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGlj
X2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIHRydWUsIG5ldyBXZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29u
dGV4dCo+KGNvbnRleHQpOwogICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVy
UHJveHkgPSAmd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CiAg
ICAgICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJh
c2UqPih3b3JrZXJMb2FkZXJQcm94eSk7Ci0gICAgICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0
ZW0oc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIG5ldyBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIGNvbnRleHQsIHN5bmNocm9ub3VzKSwg
c3luY2hyb25vdXMpOworICAgICAgICB3ZWJXb3JrZXItPm9wZW5GaWxlU3lzdGVtKHN0YXRpY19j
YXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBuZXcgV2ViRmlsZVN5c3RlbUNh
bGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBzeW5jaHJvbm91cyksIHN5bmNo
cm9ub3VzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcAppbmRleCA1MmE0MDMyMWRmYmQx
OTE5YzYzZTA0YWZjOWI4MzNlMTBkYmNmY2Y0Li4wYzcxZjgwMmQ1MTYzMzkwNjZiMjNiNGUxMGQz
MzllZTExOGE0ZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCkBAIC0zNiw4ICszNiw5IEBACiAjaW5j
bHVkZSAiQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCIKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEu
aCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViRmls
ZVN5c3RlbUVudHJ5LmgiCiAjaW5jbHVkZSAiV2ViRmlsZUluZm8uaCIKKyNpbmNsdWRlICJXZWJG
aWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUVudHJ5LmgiCiAjaW5jbHVkZSAi
V2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCIK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00Niw4ICs0Nyw5IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViRmlsZVN5c3RlbUNhbGxiYWNr
c0ltcGw6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGJvb2wgc3luY2hyb25vdXMpCitXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxs
YmFja3M+IGNhbGxiYWNrcywgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wgc3luY2hyb25vdXMpCiAgICAgOiBt
X2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fY29udGV4
dChjb250ZXh0KQogICAgICwgbV9zeW5jaHJvbm91cyhzeW5jaHJvbm91cykKIHsKQEAgLTg1LDkg
Kzg3LDkgQEAgdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkUmVhZERpcmVjdG9y
eShjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUUKIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrc0ltcGw6OmRpZE9wZW5GaWxlU3lzdGVtKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3Qg
V2ViU3RyaW5nJiBwYXRoKQogewogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pc1dv
cmtlckNvbnRleHQoKSkKLSAgICAgICAgbV9jYWxsYmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5h
bWUsIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUobV9jb250ZXh0LCBwYXRo
LCBtX3N5bmNocm9ub3VzKSk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5kaWRPcGVuRmlsZVN5c3Rl
bShuYW1lLCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKG1fY29udGV4dCwg
bV90eXBlLCBwYXRoLCBtX3N5bmNocm9ub3VzKSk7CiAgICAgZWxzZQotICAgICAgICBtX2NhbGxi
YWNrcy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFtZSwgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNy
ZWF0ZShwYXRoKSk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5kaWRPcGVuRmlsZVN5c3RlbShuYW1l
LCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKG1fdHlwZSwgcGF0aCkpOwogICAgIGRl
bGV0ZSB0aGlzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaAppbmRleCA3NWZhMmJiOTk0ZjA2ZTQyNjg0N2Yw
N2FiMjIyZmJlYWJmODJmMWQyLi4zZTIxOTJlOThkYTQ2MzFhMWMzOGNlNjU2MDc5ZGFiYTlkMTI3
MzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsLmgKQEAgLTMxLDYgKzMxLDggQEAKICNpZm5kZWYgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGxfaAogI2RlZmluZSBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbF9o
CiAKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJXZWJGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIldlYlZl
Y3Rvci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ5LDcgKzUxLDcgQEAgY2xhc3Mg
V2ViU3RyaW5nOwogCiBjbGFzcyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCA6IHB1YmxpYyBX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzIHsKIHB1YmxpYzoKLSAgICBXZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbChQYXNzT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4sIFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqID0gMCwgYm9vbCBzeW5jaHJvbm91cyA9IGZh
bHNlKTsKKyAgICBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChQYXNzT3duUHRyPFdlYkNvcmU6
OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4sIFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6VHlw
ZSA9IFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5LCBXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiA9IDAsIGJvb2wgc3luY2hyb25vdXMgPSBmYWxzZSk7CiAgICAgdmly
dHVhbCB+V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBk
aWRTdWNjZWVkKCk7CkBAIC02MSw2ICs2Myw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgT3du
UHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiAKKyAg
ICAvLyBVc2VkIGZvciBvcGVuRmlsZVN5c3RlbSBjYWxsYmFja3MuCisgICAgV2ViQ29yZTo6QXN5
bmNGaWxlU3lzdGVtOjpUeXBlIG1fdHlwZTsKKwogICAgIC8vIFVzZWQgZm9yIHdvcmtlcidzIG9w
ZW5GaWxlU3lzdGVtIGNhbGxiYWNrcy4KICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBtX2NvbnRleHQ7CiAgICAgYm9vbCBtX3N5bmNocm9ub3VzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwCmluZGV4IDA1OGU5NDdhNjNlY2ExODljZGMxYWQzMjNjYTcxMmMyNWIxMTY4YmIuLmZh
ZWE0MGIwNTM3NDQzOGQ3NTQ4MjJjYWNiNTA3ZTIxMjNlZjE1MDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAKQEAgLTU2LDggKzU2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
Y29uc3QgY2hhciBmaWxlU3lzdGVtT3BlcmF0aW9uc01vZGVbXSA9ICJmaWxlU3lzdGVtT3BlcmF0
aW9uc01vZGUiOwogCi1Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6V29ya2VyQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJvbm91cykKLSAgICA6IEFzeW5jRmlsZVN5c3Rl
bShyb290UGF0aCkKK1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpXb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0Zp
bGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJv
bm91cykKKyAgICA6IEFzeW5jRmlsZVN5c3RlbSh0eXBlLCByb290UGF0aCkKICAgICAsIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQogICAgICwgbV93ZWJGaWxlU3lzdGVtKFdlYktp
dDo6d2ViS2l0Q2xpZW50KCktPmZpbGVTeXN0ZW0oKSkKICAgICAsIG1fd29ya2VyQ29udGV4dChz
dGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaApp
bmRleCAwYjRiNzA4NTQyYTkwNDM1ZTllOWViMGU4MjdkNjM5ZTVjMDdhYjRiLi43ZTMzMTZiMjJj
OTMzYTAwMzFkYmIwZTE1N2NiMTgwNTM4Zjc3ZDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKQEAg
LTUyLDkgKzUyLDkgQEAgY2xhc3MgV29ya2VyQ29udGV4dDsKIAogY2xhc3MgV29ya2VyQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0gOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9u
b3VzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9ub3VzKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShjb250ZXh0
LCByb290UGF0aCwgc3luY2hyb25vdXMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBX
b3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShjb250ZXh0LCB0eXBlLCByb290UGF0aCwgc3lu
Y2hyb25vdXMpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bSgpOwpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBw
YXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwogCiBwcml2YXRlOgot
ICAgIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9ub3VzKTsKKyAgICBXb3JrZXJB
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxl
U3lzdGVtOjpUeXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9ub3VzKTsK
IAogICAgIFBhc3NSZWZQdHI8V2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
PiBjcmVhdGVXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80849</attachid>
            <date>2011-02-01 16:16:23 -0800</date>
            <delta_ts>2011-02-01 18:12:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53529-20110201161622.patch</filename>
            <type>text/plain</type>
            <size>35363</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnkt
dG8tdXJpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3Rv
cnktZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTI3MzNjOTdhMWU3OTdi
YzM3YTQyMTRiZDFmOWQ5MWI1OGQ1ZDFiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTAgQEAKK09idGFpbmluZyBVUkkgZnJvbSBEaXJlY3RvcnlFbnRyeS4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgdGVzdERpcmVjdG9yeVVSSSBpcyAnZmlsZXN5
c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90ZXN0RGlyZWN0b3J5JworUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjlhZjkxYmI4MjUxMWQ2MzVmYmViZmEwMTg1OTg2NzdhNDA3ZmIwMDEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5o
dG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
ZmlsZS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL2ZpbGUtZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODg2ZmQ1Mjdi
NDE0Y2UyNTQwZjgwNzhmOGM5NDZhMTI4YTdhOGU3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEwIEBACitPYnRhaW5pbmcgVVJJIGZyb20gRmlsZUVudHJ5LgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0ZXN0RmlsZVVSSSBpcyAnZmlsZXN5c3RlbTpmaWxl
Oi8vL3RlbXBvcmFyeS90ZXN0RmlsZUVudHJ5LnR4dCcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmkuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVyaS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYzM0NWIxZjM4OWI5
NzMwNDU1YjkxZGJkMzZkYWJhMGY0OGUyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmkuaHRtbApAQCAtMCwwICsxLDEzIEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZzLXRlc3Qt
dXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Zp
bGUtZW50cnktdG8tdXJpLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZGlyZWN0b3J5LWVudHJ5
LXRvLXVyaS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZGlyZWN0
b3J5LWVudHJ5LXRvLXVyaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yM2ZhYjQ4OThlZDg0NjU0ZjU5ZjFjNTVk
NmVkMDZlYmIyYmNkOGZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9kaXJlY3RvcnktZW50cnktdG8tdXJpLmpzCkBAIC0wLDAgKzEsMzQg
QEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdmcy13b3Jr
ZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtdGVzdC11dGlsLmpzJyk7Cit9
CisKK2Rlc2NyaXB0aW9uKCJPYnRhaW5pbmcgVVJJIGZyb20gRGlyZWN0b3J5RW50cnkuIik7CisK
K3ZhciBmaWxlU3lzdGVtID0gbnVsbDsKK3ZhciB0ZXN0RGlyZWN0b3J5TmFtZSA9ICd0ZXN0RGly
ZWN0b3J5JzsKK3ZhciB0ZXN0RGlyZWN0b3J5VVJJID0gbnVsbDsKKworZnVuY3Rpb24gZXJyb3JD
YWxsYmFjayhlcnJvcikgeworICAgIHRlc3RGYWlsZWQoIkVycm9yIG9jY3VyZWQ6IiArIGVycm9y
LmNvZGUpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5jdGlvbiBlbnRyeVRvVVJJKGVu
dHJ5KSB7CisgICAgdGVzdERpcmVjdG9yeVVSSSA9IGVudHJ5LnRvVVJJKCk7CisgICAgc2hvdWxk
QmUoInRlc3REaXJlY3RvcnlVUkkiLCAiJ2ZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3JhcnkvdGVz
dERpcmVjdG9yeSciKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gY3JlYXRl
VGVzdERpcmVjdG9yeSgpIHsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RGlyZWN0b3J5KHRlc3RE
aXJlY3RvcnlOYW1lLCB7Y3JlYXRlOnRydWV9LCBlbnRyeVRvVVJJLCBlcnJvckNhbGxiYWNrKTsK
K30KKworZnVuY3Rpb24gZmlsZVN5c3RlbUNhbGxiYWNrKGZzKSB7CisgICAgZmlsZVN5c3RlbSA9
IGZzOworICAgIHJlbW92ZUFsbEluRGlyZWN0b3J5KGZpbGVTeXN0ZW0ucm9vdCwgY3JlYXRlVGVz
dERpcmVjdG9yeSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKK3JlcXVlc3RGaWxlU3lzdGVtKFRFTVBPUkFSWSwgMTAwLCBmaWxlU3lzdGVtQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2spOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtZW50cnktdG8t
dXJpLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVudHJ5
LXRvLXVyaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjgyYWUzMGY4ZGYxZTY4ZjYzZmJiMjU1Y2IwNzU3N2Uw
NGFiZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jl
c291cmNlcy9maWxlLWVudHJ5LXRvLXVyaS5qcwpAQCAtMCwwICsxLDM0IEBACitpZiAodGhpcy5p
bXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtd29ya2VyLWNvbW1vbi5qcycp
OworICAgIGltcG9ydFNjcmlwdHMoJ2ZzLXRlc3QtdXRpbC5qcycpOworfQorCitkZXNjcmlwdGlv
bigiT2J0YWluaW5nIFVSSSBmcm9tIEZpbGVFbnRyeS4iKTsKKwordmFyIGZpbGVTeXN0ZW0gPSBu
dWxsOwordmFyIHRlc3RGaWxlTmFtZSA9ICd0ZXN0RmlsZUVudHJ5LnR4dCc7Cit2YXIgdGVzdEZp
bGVVUkkgPSBudWxsOworCitmdW5jdGlvbiBlcnJvckNhbGxiYWNrKGVycm9yKSB7CisgICAgdGVz
dEZhaWxlZCgiRXJyb3Igb2NjdXJlZDoiICsgZXJyb3IuY29kZSk7CisgICAgZmluaXNoSlNUZXN0
KCk7Cit9CisKK2Z1bmN0aW9uIGVudHJ5VG9VUkkoZW50cnkpIHsKKyAgICB0ZXN0RmlsZVVSSSA9
IGVudHJ5LnRvVVJJKCk7CisgICAgc2hvdWxkQmUoInRlc3RGaWxlVVJJIiwgIidmaWxlc3lzdGVt
OmZpbGU6Ly8vdGVtcG9yYXJ5L3Rlc3RGaWxlRW50cnkudHh0JyIpOworICAgIGZpbmlzaEpTVGVz
dCgpOworfQorCitmdW5jdGlvbiBjcmVhdGVUZXN0RmlsZSgpIHsKKyAgICBmaWxlU3lzdGVtLnJv
b3QuZ2V0RmlsZSh0ZXN0RmlsZU5hbWUsIHtjcmVhdGU6dHJ1ZX0sIGVudHJ5VG9VUkksIGVycm9y
Q2FsbGJhY2spOworfQorCitmdW5jdGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsKKyAgICBm
aWxlU3lzdGVtID0gZnM7CisgICAgcmVtb3ZlQWxsSW5EaXJlY3RvcnkoZmlsZVN5c3RlbS5yb290
LCBjcmVhdGVUZXN0RmlsZSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK3ZhciBqc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKK3JlcXVlc3RGaWxlU3lzdGVtKFRFTVBPUkFSWSwgMTAwLCBmaWxlU3lzdGVtQ2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2spOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZTMzN2ZiYThmOGUyNGQxNzgzZmQ3ZWYyYWQxZDFlN2M3ZTFmMzc2Yi4uYzQy
ZjMyNTRjZDk2Y2Q2ZjMyNTlkZTdlMTU4ZWU1MGY4YjdlOGI5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDExLTAyLTAxICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtmaWxlYXBp
XSBGaWxlU3lzdGVtIHR5cGUgbXVzdCBiZSBhdmFpbGFibGUgdG8gRE9NIGNvZGUgaW4gb3JkZXIg
dG8gaW1wbGVtZW50IEVudHJ5LnRvVVJJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01MzUyOQorCisgICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkFz
eW5jRmlsZVN5c3RlbTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06
OkFzeW5jRmlsZVN5c3RlbSk6CisKIDIwMTEtMDEtMzEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9m
ZkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggMWY4ZWZkOGM4YjQyZDY2MjRhMzU0ZjEwYzIyMGJkMWMwODRjOGUzZS4u
MWJiYmIyMjE5Yjc0NzU0NzExNjk3YWVmZmJhMjY1N2U3MzQ4ZTUxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMTU3MSw2ICsxNTcxLDggQEAKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVTeXN0ZW1D
YWxsYmFjay5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3Bw
JywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCcsCisgICAgICAg
ICAgICAnZmlsZWFwaS9GaWxlU3lzdGVtVVJMLmNwcCcsCisgICAgICAgICAgICAnZmlsZWFwaS9G
aWxlU3lzdGVtVVJMLmgnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVRocmVhZC5jcHAnLAog
ICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVRocmVhZC5oJywKICAgICAgICAgICAgICdmaWxlYXBp
L0ZpbGVUaHJlYWRUYXNrLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQxNTYwMmU4YTI2MTgyYTkwZDAzMzk2ZGQzMGY5NGU3
OGNjMGNiYzYuLjkyNTg5M2VkNGU2ZWYwMDFlMDMzYmMyYmU2ZjRiZjNiYjdjMjA0Y2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTUzODYsNiArNTM4Niw4IEBACiAJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdl
RXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hl
ci5oICovOyB9OwogCQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgg
Ki87IH07CiAJCUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAg
Ki87IH07CisJCUM2RTM3QzAwMTJGNzlCNUUwMDA2NTQ0NyAvKiBGaWxlU3lzdGVtVVJMLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RTM3QkZFMTJG
NzlCNUUwMDA2NTQ0NyAvKiBGaWxlU3lzdGVtVVJMLmNwcCAqLzsgfTsKKwkJQzZFMzdDMDExMkY3
OUI1RTAwMDY1NDQ3IC8qIEZpbGVTeXN0ZW1VUkwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RTM3QkZGMTJGNzlCNUUwMDA2NTQ0NyAvKiBGaWxlU3lz
dGVtVVJMLmggKi87IH07CiAJCUNBM0JGNjdDMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmlt
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
QTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovOyB9OwogCQlD
QTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1
MyAvKiBTY3JvbGxBbmltYXRvci5oICovOyB9OwogCQlDREVBN0M4NDEyNzYyMzA0MDBCODQ2REQg
LyogUmVuZGVyRnVsbFNjcmVlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RFQTdDODIxMjc2MjMwNDAwQjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4u
aCAqLzsgfTsKQEAgLTExNzQyLDYgKzExNzQ0LDggQEAKIAkJQzVFQkREODExMDVFRERFQzAwNTY4
MTZGIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNkQ3NEFFMzA5QUEyOTBB
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM2RTM3QkZFMTJGNzlCNUUwMDA2NTQ0NyAvKiBGaWxl
U3lzdGVtVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbGVT
eXN0ZW1VUkwuY3BwOyBwYXRoID0gZmlsZWFwaS9GaWxlU3lzdGVtVVJMLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzZFMzdCRkYxMkY3OUI1RTAwMDY1NDQ3IC8qIEZpbGVTeXN0
ZW1VUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVN5c3RlbVVSTC5o
OyBwYXRoID0gZmlsZWFwaS9GaWxlU3lzdGVtVVJMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxBbmltYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBT
Y3JvbGxBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxB
bmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDRFMEFGQTExRjdCQzI3
MDA5RDM4MTEgLyogZnVsbHNjcmVlbi5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IGZ1
bGxzY3JlZW4uY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0MjAsNiArMTI0
MjQsOCBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDNkUzN0JGRTEyRjc5QjVFMDAw
NjU0NDcgLyogRmlsZVN5c3RlbVVSTC5jcHAgKi8sCisJCQkJQzZFMzdCRkYxMkY3OUI1RTAwMDY1
NDQ3IC8qIEZpbGVTeXN0ZW1VUkwuaCAqLywKIAkJCQk2NUM5N0FGMjA4RUE5MDg4MDBBQ0QyNzMg
LyogY29uZmlnLmggKi8sCiAJCQkJRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdGIC8qIFdlYkNvcmVQ
cmVmaXguaCAqLywKIAkJCQk5MzA3MDYxMzA5RTBDQTgyMDBCMTdGRTQgLyogRGVyaXZlZFNvdXJj
ZXMubWFrZSAqLywKQEAgLTIyNDY5LDYgKzIyNDc1LDcgQEAKIAkJCQkwRjNERDQ1MDEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNDQxMzQxMkY3
NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0U0NDEzNjEyRjc0OTBCMDA5Qjg0QjggLyogRm9udFdpZHRoVmFyaWFudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQzZFMzdDMDExMkY3OUI1RTAwMDY1NDQ3IC8qIEZpbGVTeXN0ZW1VUkwuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMjUxNjgsNiArMjUxNzUsNyBAQAogCQkJCTk3N0UyRTBFMTJGMEZDOUMw
MEMxMzM3OSAvKiBYU1NGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzREQ0NEYxMkY1
RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNDQx
MzMxMkY3NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUM2RTM3QzAwMTJGNzlCNUUwMDA2NTQ0NyAvKiBGaWxlU3lzdGVtVVJMLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmNwcAppbmRleCA5YzNmYTRlZWY4YWVjZWU5
OGE4MWFmOWE2MjQ1NDIwYWFmMmEyYzFiLi5iNGU0OWI4NTNjZWU3ZmE1ZDYxYzkxZGFhYzJhNjgx
YTMxMzVjNzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmNwcApAQCAtMzcsNyArMzcsOSBAQAog
I2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKICNpbmNsdWRlICJGaWxlRXJyb3IuaCIKICNpbmNs
dWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbVVSTC5oIgog
I2luY2x1ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTgyLDExICs4NCw5IEBAIHZvaWQgRW50cnk6OmdldFBhcmVudChQYXNzUmVmUHRyPEVu
dHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvCiAgICAgICAgIGZp
bGVzeXN0ZW0oKS0+c2NoZWR1bGVDYWxsYmFjayhlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgRmls
ZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpJTlZBTElEX01PRElGSUNBVElPTl9FUlIpKTsKIH0K
IAotU3RyaW5nIEVudHJ5Ojp0b1VSSShjb25zdCBTdHJpbmcmKQorU3RyaW5nIEVudHJ5Ojp0b1VS
SSgpCiB7Ci0gICAgLy8gRklYTUU6IHRvIGJlIGltcGxlbWVudGVkLgotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gRmlsZVN5c3RlbVVS
TDo6Y3JlYXRlVVJMU3RyaW5nKGZpbGVzeXN0ZW0oKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5zZWN1cml0eU9yaWdpbigpLCBtX2ZpbGVTeXN0ZW0tPmFzeW5jRmlsZVN5c3RlbSgpLT50eXBl
KCksIG1fZnVsbFBhdGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0VudHJ5LmgKaW5kZXggOTM2N2Y0ZjMwMmE0ZDdhNTA5MDQzOWM3NWI2MDM4MjI2OGM0MDIzYy4u
ZDg3MTI2MjQwZTU5MWJhMmQyZWJlMzE3ODFlODY5OTY3NzYyNDYwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RW50cnkuaApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmUoUGFzc1Jl
ZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IDAsIFBhc3NSZWZQdHI8RXJyb3JD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IDApIGNvbnN0OwogICAgIHZvaWQgZ2V0UGFyZW50KFBh
c3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gMCwgUGFzc1JlZlB0cjxF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gMCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgdG9V
UkkoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSA9IFN0cmluZygpKTsKKyAgICBTdHJpbmcgdG9VUkko
KTsKIAogcHJvdGVjdGVkOgogICAgIEVudHJ5KFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbUJhc2U+
LCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRW50cnkuaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5pZGwKaW5kZXgg
ZjZmY2RiM2I0ZWE4NjQ5ZjNkOGQ5N2QzYTkxMDQyM2I0YzcxZjk3MC4uZjE0NGIzMWViMmU5NDBl
ODgzNWYzYTA4OTI4ZGJmMjhmYjA4NTdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9FbnRyeS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5pZGwKQEAg
LTQzLDYgKzQzLDcgQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgICAgICB2b2lkIGdldE1ldGFkYXRh
KGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIE1ldGFkYXRhQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
LCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwog
ICAgICAgICB2b2lkIG1vdmVUbyhpbiBEaXJlY3RvcnlFbnRyeSBwYXJlbnQsIGluIFtPcHRpb25h
bCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWUsIGlu
IFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBb
T3B0aW9uYWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwogICAgICAg
ICB2b2lkIGNvcHlUbyhpbiBEaXJlY3RvcnlFbnRyeSBwYXJlbnQsIGluIFtPcHRpb25hbCwgQ29u
dmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRp
b25hbCwgQ2FsbGJhY2tdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbT3B0aW9u
YWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOworICAgICAgICBET01T
dHJpbmcgdG9VUkkoKTsKICAgICAgICAgdm9pZCByZW1vdmUoaW4gW09wdGlvbmFsLCBDYWxsYmFj
a10gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW09wdGlvbmFsLCBDYWxsYmFja10g
RXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAgICAgICAgdm9pZCBnZXRQYXJlbnQoaW4g
W09wdGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtP
cHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CiAgICAgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbVVSTC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1VUkwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiNzQ2
N2RjODMxYzk0ZDE4ZjZiZTRmZWVhYjA2ODU3ZWNiYzQ1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1VUkwuY3BwCkBAIC0wLDAgKzEsNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbVVSTC5oIgorCisjaWYgRU5B
QkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBjaGFyIEZpbGVTeXN0
ZW1VUkw6OmtGaWxlU3lzdGVtUHJvdG9jb2xbXSA9ICJmaWxlc3lzdGVtIjsKKworc3RhdGljIGNv
bnN0IGNoYXIga1R5cGVQZXJzaXN0ZW50TmFtZVtdID0gInBlcnNpc3RlbnQiOworc3RhdGljIGNv
bnN0IGNoYXIga1R5cGVUZW1wb3JhcnlOYW1lW10gPSAidGVtcG9yYXJ5IjsKKworU3RyaW5nIEZp
bGVTeXN0ZW1VUkw6OmNyZWF0ZVVSTFN0cmluZyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4sIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKQor
eworICAgIFN0cmluZyB1cmxTdHJpbmcgPSBrRmlsZVN5c3RlbVByb3RvY29sOworICAgIHVybFN0
cmluZyArPSAiOiI7CisgICAgdXJsU3RyaW5nICs9IHNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygp
OworICAgIHVybFN0cmluZyArPSAiLyI7CisgICAgdXJsU3RyaW5nICs9ICh0eXBlID09IEFzeW5j
RmlsZVN5c3RlbTo6VGVtcG9yYXJ5ID8ga1R5cGVUZW1wb3JhcnlOYW1lIDoga1R5cGVQZXJzaXN0
ZW50TmFtZSk7CisgICAgdXJsU3RyaW5nICs9IGZ1bGxQYXRoOworICAgIHJldHVybiB1cmxTdHJp
bmc7Cit9CisKK0tVUkwgRmlsZVN5c3RlbVVSTDo6Z2V0T3JpZ2luKGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoa0ZpbGVTeXN0ZW1Qcm90b2NvbCkpOworCisg
ICAgS1VSTCBvcmlnaW5VcmwoUGFyc2VkVVJMU3RyaW5nLCB1cmwucGF0aCgpKTsKKyAgICBvcmln
aW5Vcmwuc2V0UGF0aCgiLyIpOworICAgIHJldHVybiBvcmlnaW5Vcmw7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1NZU1RFTSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbVVSTC5oIGIvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlU3lzdGVtVVJMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U0MDY0M2ZjY2Q1ZTA0YzRk
NmVlODYyODhhNjdkZGI4NDQ1ZjcyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVN5c3RlbVVSTC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbGVTeXN0
ZW1VUkxfaAorI2RlZmluZSBGaWxlU3lzdGVtVVJMX2gKKworI2lmIEVOQUJMRShGSUxFX1NZU1RF
TSkKKworI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNlY3VyaXR5T3JpZ2luOworCitjbGFzcyBGaWxlU3lzdGVtVVJMIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgU3RyaW5nIGNyZWF0ZVVSTFN0cmluZyhTZWN1cml0eU9yaWdpbiosIEFzeW5jRmlsZVN5
c3RlbTo6VHlwZSwgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCk7CisgICAgc3RhdGljIEtVUkwgZ2V0
T3JpZ2luKGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZmlsZVN5c3RlbVBy
b3RvY29sKCkgeyByZXR1cm4ga0ZpbGVTeXN0ZW1Qcm90b2NvbDsgfQorCitwcml2YXRlOgorICAg
IHN0YXRpYyBjb25zdCBjaGFyIGtGaWxlU3lzdGVtUHJvdG9jb2xbXTsKKyAgICBGaWxlU3lzdGVt
VVJMKCkgeyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCisKKyNl
bmRpZiAvLyBGaWxlU3lzdGVtVVJMX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2VjdXJpdHlPcmlnaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5j
cHAKaW5kZXggNzg5ZmRmOTM5MzI3MmMyZmVmMmJkNWViYzZhOGJmYThkZjhkYjMwMy4uMDUwZmI0
ZmFkY2QzYTFlNTMyYjMwMDhkOTlmM2Y4MjQxMzE2OTI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZWN1cml0eU9yaWdpbi5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCbG9iVVJMLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVk
ZSAiRmlsZVN5c3RlbVVSTC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJPcmlnaW5B
Y2Nlc3NFbnRyeS5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCkBAIC02NCw2ICs2NSwy
NyBAQCBzdGF0aWMgYm9vbCBzY2hlbWVSZXF1aXJlc0F1dGhvcml0eShjb25zdCBTdHJpbmcmIHNj
aGVtZSkKICAgICByZXR1cm4gc2NoZW1lcy5jb250YWlucyhzY2hlbWUpOwogfQogCisvLyBGSVhN
RTogU2hvdWxkIHRoaXMgYmUgcGFydCBvZiBTY2hlbWVSZWdpc3RyeT8KK3N0YXRpYyBib29sIHNj
aGVtZVJlcXVpcmVzUmVxdWVzdENhcGFiaWxpdHlGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYgc2No
ZW1lKQoreworI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChVUkxTY2hlbWVzTWFwLCBzY2hlbWVzLCAoKSk7CisKKyAgICBpZiAo
c2NoZW1lcy5pc0VtcHR5KCkpIHsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAgICAgc2NoZW1lcy5h
ZGQoQmxvYlVSTDo6YmxvYlByb3RvY29sKCkpOworI2VuZGlmCisjaWYgRU5BQkxFKEZJTEVfU1lT
VEVNKQorICAgICAgICBzY2hlbWVzLmFkZChGaWxlU3lzdGVtVVJMOjpmaWxlU3lzdGVtUHJvdG9j
b2woKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gc2NoZW1lcy5jb250YWlucyhzY2hl
bWUpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpIHx8
IEVOQUJMRShGSUxFX1NZU1RFTSkKK30KKwogCiBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmln
aW4oY29uc3QgS1VSTCYgdXJsLCBTYW5kYm94RmxhZ3Mgc2FuZGJveEZsYWdzKQogICAgIDogbV9z
YW5kYm94RmxhZ3Moc2FuZGJveEZsYWdzKQpAQCAtMTI5LDYgKzE1MSwxMCBAQCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKGNvbnN0IEtVUkwmIHVybCwg
U2FuZGJveEZsYWdzCiAgICAgaWYgKHVybC5wcm90b2NvbElzKEJsb2JVUkw6OmJsb2JQcm90b2Nv
bCgpKSkKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWN1cml0eU9yaWdpbihCbG9iVVJM
OjpnZXRPcmlnaW4odXJsKSwgc2FuZGJveEZsYWdzKSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoRklM
RV9TWVNURU0pCisgICAgaWYgKHVybC5wcm90b2NvbElzKEZpbGVTeXN0ZW1VUkw6OmZpbGVTeXN0
ZW1Qcm90b2NvbCgpKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWN1cml0eU9yaWdp
bihGaWxlU3lzdGVtVVJMOjpnZXRPcmlnaW4odXJsKSwgc2FuZGJveEZsYWdzKSk7CisjZW5kaWYK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKHVybCwgc2FuZGJveEZsYWdz
KSk7CiB9CiAKQEAgLTMxMCwxMSArMzM2LDggQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuRGlz
cGxheShjb25zdCBLVVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHByb3RvY29sID0gdXJs
LnByb3RvY29sKCkubG93ZXIoKTsKIAotI2lmIEVOQUJMRShCTE9CKQotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgZ2VuZXJhbGl6ZSB0aGlzIGNoZWNrLgotICAgIGlmIChwcm90b2NvbCA9PSBCbG9i
VVJMOjpibG9iUHJvdG9jb2woKSkKKyAgICBpZiAoc2NoZW1lUmVxdWlyZXNSZXF1ZXN0Q2FwYWJp
bGl0eUZvckRpc3BsYXkocHJvdG9jb2wpKQogICAgICAgICByZXR1cm4gY2FuUmVxdWVzdCh1cmwp
OwotI2VuZGlmCiAKICAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1l
QXNEaXNwbGF5SXNvbGF0ZWQocHJvdG9jb2wpKQogICAgICAgICByZXR1cm4gbV9wcm90b2NvbCA9
PSBwcm90b2NvbCB8fCBpc0FjY2Vzc1RvVVJMV2hpdGVMaXN0ZWQodXJsKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGI4NWE0ODdmYjYxY2Y3NjZi
OWIwYjhmNDk3MmY0Njc5M2FlMTljNmEuLmIxYTNmZTIyOTI4NThjNDhjMWNlNWI3ZDllYzQyZmJi
OTJlOTM2Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5
c3RlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNw
cApAQCAtNDYsNyArNDYsNyBAQCBib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IEFzeW5j
RmlsZVN5c3RlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYpCitQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbT4gQXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUoVHlwZSwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwpAQCAtNjgsNyArNjgsNyBAQCB2b2lk
IEFzeW5jRmlsZVN5c3RlbTo6b3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwg
Y29uc3QgU3RyaW5nJiBzdG9yYQogICAgIHJvb3RQYXRoICs9IHR5cGVTdHJpbmc7CiAgICAgcm9v
dFBhdGguYXBwZW5kKFBsYXRmb3JtRmlsZVBhdGhTZXBhcmF0b3IpOwogCi0gICAgY2FsbGJhY2tz
LT5kaWRPcGVuRmlsZVN5c3RlbShuYW1lLCBBc3luY0ZpbGVTeXN0ZW06OmNyZWF0ZShyb290UGF0
aCkpOworICAgIGNhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFtZSwgQXN5bmNGaWxlU3lz
dGVtOjpjcmVhdGUodHlwZSwgcm9vdFBhdGgpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCmluZGV4IGMzNGE2NDRkNWRkMmMzZmIwNjliNDNl
NjNjOTNiMWI5N2ZjNGI1MmEuLmY1MjA3Y2UzZTIwYzA4NjI5MTM4NjM4MzY4YmVkMjNmZTg2MGZh
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCkBAIC02NSw3
ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgd2FpdEZvck9wZXJhdGlvblRvQ29t
cGxldGUoKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBh
IG5ldyBwbGF0Zm9ybS1zcGVjaWZpYyBBc3luY0ZpbGVTeXN0ZW0gaW5zdGFuY2UgaWYgdGhlIHBs
YXRmb3JtIGhhcyBpdHMgb3duIGltcGxlbWVudGF0aW9uLgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKFR5cGUsIGNvbnN0IFN0cmlu
ZyYgcm9vdFBhdGgpOwogCiAgICAgLy8gT3BlbnMgYSBuZXcgZmlsZSBzeXN0ZW0uIFRoZSBjcmVh
dGUgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgdGhlIHBhdGgg
aWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdHMuCiAgICAgc3RhdGljIHZvaWQgb3BlbkZpbGVT
eXN0ZW0oY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlSWRlbnRp
ZmllciwgVHlwZSwgYm9vbCBjcmVhdGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPik7CkBAIC0xMzIsMTIgKzEzMiwxNiBAQCBwdWJsaWM6CiAgICAgLy8gR2V0dGVyIGZvciB0
aGlzIGZpbGUgc3lzdGVtJ3Mgcm9vdCBwYXRoLgogICAgIFN0cmluZyByb290KCkgY29uc3QgeyBy
ZXR1cm4gbV9wbGF0Zm9ybVJvb3RQYXRoOyB9CiAKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KKwogcHJvdGVjdGVkOgotICAgIEFzeW5jRmlsZVN5c3RlbShjb25zdCBT
dHJpbmcmIHBsYXRmb3JtUm9vdFBhdGgpCi0gICAgICAgIDogbV9wbGF0Zm9ybVJvb3RQYXRoKHBs
YXRmb3JtUm9vdFBhdGgpCisgICAgQXN5bmNGaWxlU3lzdGVtKFR5cGUgdHlwZSwgY29uc3QgU3Ry
aW5nJiBwbGF0Zm9ybVJvb3RQYXRoKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAs
IG1fcGxhdGZvcm1Sb290UGF0aChwbGF0Zm9ybVJvb3RQYXRoKQogICAgIHsKICAgICB9CiAKKyAg
ICBUeXBlIG1fdHlwZTsKICAgICBTdHJpbmcgbV9wbGF0Zm9ybVJvb3RQYXRoOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjM2M1YmJhZjY3MDVhZjc4ODdiOWEyZDI2MDE1ZjNi
NTNiMzAzMjAwLi4xMjBjNDQ3YTFhODc2ZmY3Zjc1YWYyZWVhYThkNzgwN2QyNjhiM2MwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTAyLTAxICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtmaWxlYXBpXSBGaWxlU3lzdGVtIHR5cGUgbXVzdCBiZSBh
dmFpbGFibGUgdG8gRE9NIGNvZGUgaW4gb3JkZXIgdG8gaW1wbGVtZW50IEVudHJ5LnRvVVJJCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzUyOQorCisg
ICAgICAgICogc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSk6Cisg
ICAgICAgICogc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKiBzcmMvTG9jYWxG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVt
OjpyZWFkRmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEZpbGVTeXN0ZW06OnJl
cXVlc3RGaWxlU3lzdGVtKToKKyAgICAgICAgKiBzcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0lt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6V2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbDo6ZGlkT3BlbkZpbGVTeXN0ZW0pOgorICAgICAgICAqIHNyYy9XZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbC5oOgorICAgICAgICAqIHNyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0pOgorICAgICAgICAqIHNyYy9X
b3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZSk6CisKIDIwMTEtMDEtMzEgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkg
T3Jsb3cuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAKaW5kZXggNTk3NWU3MjQzZDM0NTgyMmVmYWExODc5ZDRjMjhmZjRh
ZDUzNjRhNy4uZWYxZjYxNjcxYzg3ZDkwMWRhMzQwMDkyNjUwMWIzNWJkYmM5OGZhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmNwcApAQCAtNTAsOCArNTAsOCBAQCBib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFi
bGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6QXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0oY29uc3QgU3RyaW5nJiByb290UGF0aCkKLSAgICA6IEFzeW5j
RmlsZVN5c3RlbShyb290UGF0aCkKK0FzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpBc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bShBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBy
b290UGF0aCkKKyAgICA6IEFzeW5jRmlsZVN5c3RlbSh0eXBlLCByb290UGF0aCkKICAgICAsIG1f
d2ViRmlsZVN5c3RlbShXZWJLaXQ6OndlYktpdENsaWVudCgpLT5maWxlU3lzdGVtKCkpCiB7CiAg
ICAgQVNTRVJUKG1fd2ViRmlsZVN5c3RlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAppbmRleCA2MjA1NjA5Yjk4NmNhMDQ4
ZmQ5OTBkZjk0YzQ1NTdjMmMyMGY5ZGRhLi5kYTk4YTMzMWI5NzdlMGI3OGY1NTFiM2IwNThlMmQw
ZGNkZDRhMTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmgKQEAgLTQ2LDkgKzQ2LDkgQEAgY2xhc3MgQXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzOwogCiBjbGFzcyBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSA6IHB1YmxpYyBB
c3luY0ZpbGVTeXN0ZW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpCisgICAgc3RhdGljIFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtPiBjcmVhdGUoQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKHJvb3RQYXRoKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0odHlwZSwgcm9vdFBhdGgpKTsKICAg
ICB9CiAKICAgICB2aXJ0dWFsIH5Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSgpOwpAQCAtNjYsNyAr
NjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdyaXRlcihBc3luY0ZpbGVX
cml0ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4pOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IEFzeW5jRmls
ZVN5c3RlbUNocm9taXVtKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpOworICAgIEFzeW5jRmlsZVN5
c3RlbUNocm9taXVtKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSwgY29uc3QgU3RyaW5nJiByb290UGF0
aCk7CiAgICAgV2ViS2l0OjpXZWJGaWxlU3lzdGVtKiBtX3dlYkZpbGVTeXN0ZW07CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAKaW5kZXggYTljNjFkMGQ0ZmQwNTVlYzY1NmUwY2RkYzFmNjE5ZjhkYTk0OTVlYi4u
YWUyZWIxZGMwZjY4MDMzZTRlODE2NjcyMzZhOGFmNDE3MjMwOThiYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApA
QCAtNjIsNyArNjIsNyBAQCB2b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlUwogICAgIEFTU0VSVChjb250
ZXh0ICYmIGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKICAgICBXZWJGcmFtZUltcGwqIHdlYkZy
YW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIHdl
YkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdl
YkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBmYWxzZSwgbmV3IFdlYkZpbGVTeXN0ZW1D
YWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZp
bGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUp
LCBzaXplLCBmYWxzZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywg
dHlwZSkpOwogfQogCiB2b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUs
IGxvbmcgbG9uZyBzaXplLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQpAQCAtNzEsMTIgKzcxLDEyIEBAIHZvaWQgTG9jYWxG
aWxlU3lzdGVtOjpyZXF1ZXN0RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBBc3luY0ZpCiAgICAgaWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwogICAg
ICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9j
dW1lbnQtPmZyYW1lKCkpOwotICAgICAgICB3ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lz
dGVtKHdlYkZyYW1lLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6
ZSwgdHJ1ZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAg
ICAgICB3ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNf
Y2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgdHJ1ZSwgbmV3IFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSkpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250
ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQ
cm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKICAg
ICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFz
ZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAgd2ViV29ya2VyLT5vcGVuRmlsZVN5c3Rl
bShzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgbmV3IFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgY29udGV4dCwgc3luY2hyb25vdXMpLCBz
eW5jaHJvbm91cyk7CisgICAgICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0ZW0oc3RhdGljX2Nh
c3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIG5ldyBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUsIGNvbnRleHQsIHN5bmNocm9ub3VzKSwgc3luY2hy
b25vdXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCmluZGV4IDUyYTQwMzIxZGZiZDE5
MTljNjNlMDRhZmM5YjgzM2UxMGRiY2ZjZjQuLjBjNzFmODAyZDUxNjMzOTA2NmIyM2I0ZTEwZDMz
OWVlMTE4YTRmYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAKQEAgLTM2LDggKzM2LDkgQEAKICNpbmNs
dWRlICJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJGaWxl
U3lzdGVtRW50cnkuaCIKICNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgorI2luY2x1ZGUgIldlYkZp
bGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJXZWJGaWxlU3lzdGVtRW50cnkuaCIKICNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ2LDggKzQ3LDkgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJGaWxlU3lzdGVtQ2FsbGJhY2tz
SW1wbDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoUGFzc093blB0cjxBc3luY0ZpbGVTeXN0
ZW1DYWxsYmFja3M+IGNhbGxiYWNrcywgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgYm9vbCBzeW5jaHJvbm91cykKK1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgYm9vbCBzeW5jaHJvbm91cykKICAgICA6IG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCiAgICAgLCBtX3N5bmNocm9ub3VzKHN5bmNocm9ub3VzKQogewpAQCAtODUsOSAr
ODcsOSBAQCB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRSZWFkRGlyZWN0b3J5
KGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRQogdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbDo6ZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBX
ZWJTdHJpbmcmIHBhdGgpCiB7CiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzV29y
a2VyQ29udGV4dCgpKQotICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFt
ZSwgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZShtX2NvbnRleHQsIHBhdGgs
IG1fc3luY2hyb25vdXMpKTsKKyAgICAgICAgbV9jYWxsYmFja3MtPmRpZE9wZW5GaWxlU3lzdGVt
KG5hbWUsIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUobV9jb250ZXh0LCBt
X3R5cGUsIHBhdGgsIG1fc3luY2hyb25vdXMpKTsKICAgICBlbHNlCi0gICAgICAgIG1fY2FsbGJh
Y2tzLT5kaWRPcGVuRmlsZVN5c3RlbShuYW1lLCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3Jl
YXRlKHBhdGgpKTsKKyAgICAgICAgbV9jYWxsYmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUs
IEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUobV90eXBlLCBwYXRoKSk7CiAgICAgZGVs
ZXRlIHRoaXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCmluZGV4IDc1ZmEyYmI5OTRmMDZlNDI2ODQ3ZjA3
YWIyMjJmYmVhYmY4MmYxZDIuLjNlMjE5MmU5OGRhNDYzMWExYzM4Y2U2NTYwNzlkYWJhOWQxMjcz
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1D
YWxsYmFja3NJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwuaApAQCAtMzEsNiArMzEsOCBAQAogI2lmbmRlZiBXZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzSW1wbF9oCiAjZGVmaW5lIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsX2gK
IAorI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW0u
aCIKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiV2ViVmVj
dG9yLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDksNyArNTEsNyBAQCBjbGFzcyBX
ZWJTdHJpbmc7CiAKIGNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsIDogcHVibGljIFdl
YkZpbGVTeXN0ZW1DYWxsYmFja3MgewogcHVibGljOgotICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsKFBhc3NPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiwgV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogPSAwLCBib29sIHN5bmNocm9ub3VzID0gZmFs
c2UpOworICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NPd25QdHI8V2ViQ29yZTo6
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiwgV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpUeXBl
ID0gV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnksIFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqID0gMCwgYm9vbCBzeW5jaHJvbm91cyA9IGZhbHNlKTsKICAgICB2aXJ0
dWFsIH5XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRp
ZFN1Y2NlZWQoKTsKQEAgLTYxLDYgKzYzLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBPd25Q
dHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIAorICAg
IC8vIFVzZWQgZm9yIG9wZW5GaWxlU3lzdGVtIGNhbGxiYWNrcy4KKyAgICBXZWJDb3JlOjpBc3lu
Y0ZpbGVTeXN0ZW06OlR5cGUgbV90eXBlOworCiAgICAgLy8gVXNlZCBmb3Igd29ya2VyJ3Mgb3Bl
bkZpbGVTeXN0ZW0gY2FsbGJhY2tzLgogICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIG1fY29udGV4dDsKICAgICBib29sIG1fc3luY2hyb25vdXM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAKaW5kZXggMDU4ZTk0N2E2M2VjYTE4OWNkYzFhZDMyM2NhNzEyYzI1YjExNjhiYi4uZmFl
YTQwYjA1Mzc0NDM4ZDc1NDgyMmNhY2I1MDdlMjEyM2VmMTUwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmNwcApAQCAtNTYsOCArNTYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBj
b25zdCBjaGFyIGZpbGVTeXN0ZW1PcGVyYXRpb25zTW9kZVtdID0gImZpbGVTeXN0ZW1PcGVyYXRp
b25zTW9kZSI7CiAKLVdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpXb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9ub3VzKQotICAgIDogQXN5bmNGaWxlU3lzdGVt
KHJvb3RQYXRoKQorV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OldvcmtlckFzeW5jRmls
ZVN5c3RlbUNocm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmls
ZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9u
b3VzKQorICAgIDogQXN5bmNGaWxlU3lzdGVtKHR5cGUsIHJvb3RQYXRoKQogICAgICwgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3dlYkZpbGVTeXN0ZW0oV2ViS2l0
Ojp3ZWJLaXRDbGllbnQoKS0+ZmlsZVN5c3RlbSgpKQogICAgICwgbV93b3JrZXJDb250ZXh0KHN0
YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCmlu
ZGV4IDBiNGI3MDg1NDJhOTA0MzVlOWU5ZWIwZTgyN2Q2MzllNWMwN2FiNGIuLjdlMzMxNmIyMmM5
MzNhMDAzMWRiYjBlMTU3Y2IxODA1MzhmNzdkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaApAQCAt
NTIsOSArNTIsOSBAQCBjbGFzcyBXb3JrZXJDb250ZXh0OwogCiBjbGFzcyBXb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bSA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW0gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wgc3luY2hyb25v
dXMpCisgICAgc3RhdGljIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wgc3luY2hyb25vdXMpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNvbnRleHQs
IHJvb3RQYXRoLCBzeW5jaHJvbm91cykpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdv
cmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNvbnRleHQsIHR5cGUsIHJvb3RQYXRoLCBzeW5j
aHJvbm91cykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfldvcmtlckFzeW5jRmlsZVN5c3RlbUNo
cm9taXVtKCk7CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlV3JpdGVyKEFzeW5jRmlsZVdyaXRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHBh
dGgsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAKIHByaXZhdGU6Ci0g
ICAgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wgc3luY2hyb25vdXMpOworICAgIFdvcmtlckFz
eW5jRmlsZVN5c3RlbUNocm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBBc3luY0ZpbGVT
eXN0ZW06OlR5cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wgc3luY2hyb25vdXMpOwog
CiAgICAgUGFzc1JlZlB0cjxXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+
IGNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW1DYWxsYmFja3M+KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80867</attachid>
            <date>2011-02-01 18:12:06 -0800</date>
            <delta_ts>2011-02-02 09:42:49 -0800</delta_ts>
            <desc>Removed FileSystemURL, moved some code to SchemeRegistry</desc>
            <filename>bug-53529-20110201181205.patch</filename>
            <type>text/plain</type>
            <size>30178</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0ZDc4ZWJhZTM2OGVkYTBhZjEzYTg5OGM0ZTc5ZDA2MzM1MTM0NGJiLi4zMWQ1Nzkx
NjY4NDZmMDE0YmQ4Y2JkNGZkOTI1ZTQ4NjRhZmY1YWQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAK
KzIwMTEtMDItMDEgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgZm9yIEVudHJ5LnRv
VVJJIGFuZCBhc3NvY2lhdGVkIGNoYW5nZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MzUyOQorCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2Rp
cmVjdG9yeS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmkuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1v
cmlnaW4uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9k
aXJlY3RvcnktZW50cnktdG8tdXJpLmpzOiBBZGRlZC4KKyAgICAgICAgKGVycm9yQ2FsbGJhY2sp
OgorICAgICAgICAoZW50cnlUb1VSSSk6CisgICAgICAgIChjcmVhdGVUZXN0RGlyZWN0b3J5KToK
KyAgICAgICAgKCk6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVu
dHJ5LXRvLXVyaS5qczogQWRkZWQuCisgICAgICAgIChlcnJvckNhbGxiYWNrKToKKyAgICAgICAg
KGVudHJ5VG9VUkkpOgorICAgICAgICAoY3JlYXRlVGVzdEZpbGUpOgorICAgICAgICAoKToKKwog
MjAxMS0wMS0zMSAgU2NvdHQgQ2FtZXJvbiAgPHNjY2FtZXJvbkByaW0uY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhbmllbCBCYXRlcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMTI3MzNjOTdhMWU3OTdiYzM3YTQyMTRiZDFmOWQ5MWI1OGQ1ZDFiCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRy
eS10by11cmktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK09idGFpbmluZyBVUkkgZnJv
bSBEaXJlY3RvcnlFbnRyeS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
dGVzdERpcmVjdG9yeVVSSSBpcyAnZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90ZXN0RGly
ZWN0b3J5JworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50
cnktdG8tdXJpLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVu
dHJ5LXRvLXVyaS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhZjkxYmI4MjUxMWQ2MzVmYmViZmEwMTg1OTg2
NzdhNDA3ZmIwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlyZWN0b3J5LWVu
dHJ5LXRvLXVyaS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50cnktdG8tdXJpLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jODg2ZmQ1MjdiNDE0Y2UyNTQwZjgwNzhmOGM5NDZhMTI4YTdhOGU3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50
cnktdG8tdXJpLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitPYnRhaW5pbmcgVVJJIGZy
b20gRmlsZUVudHJ5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0ZXN0
RmlsZVVSSSBpcyAnZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90ZXN0RmlsZUVudHJ5LnR4
dCcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmku
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVyaS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRlYzM0NWIxZjM4OWI5NzMwNDU1YjkxZGJkMzZkYWJhMGY0OGUyNjIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10
by11cmkuaHRtbApAQCAtMCwwICsxLDEzIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2ZzLXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZpbGUtZW50cnktdG8tdXJpLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9maWxlc3lzdGVtLXVyaS1vcmlnaW4tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjhmZjNlMmRhYWViNjk4MmJmZTBjNjcwODg0NmU3NTJlYTE5OGVhZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1vcmlnaW4tZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1NFRDogb3JpZ2luIHdhcyBodHRwOi8vd3d3Lndl
YmtpdC5vcmc6ODA4MApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGVzeXN0ZW0tdXJpLW9yaWdpbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGVzeXN0ZW0tdXJpLW9yaWdpbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MjIzMjIwZWQ4ZDA3NmE5NzY4
NjU0M2IxOWE4ZTJhZjg4MmM3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLmh0bWwKQEAgLTAsMCArMSwxMyBAQAor
PGEgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaHJlZj0iZmlsZXN5c3RlbTpodHRwOi8vd3d3LndlYmtp
dC5vcmc6ODA4MC90ZW1wb3JhcnkvYS9iL2MvZmlsZS50eHQiPmZvbzwvYT4KKzxwPlRoaXMgdGV4
dCBzaG91bGQgbm90IGJlIHZpc2libGUuIEl0IHNob3VsZCBiZSBvdmVyd3JpdHRlbiBieSB0aGUg
cnVubmluZyBvZiB0aGUgdGVzdC48L3A+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICB2YXIgZXhwZWN0ZWRPcmlnaW4gPSAnaHR0cDovL3d3dy53ZWJraXQub3JnOjgwODAn
OworICAgIHZhciBhY3R1YWxPcmlnaW4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
YScpWzBdLm9yaWdpbjsKKyAgICB2YXIgcmVzdWx0RWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ3AnKVswXTsKKyAgICBpZiAoYWN0dWFsT3JpZ2luID09IGV4cGVjdGVkT3JpZ2lu
KQorICAgICAgICByZXN1bHRFbHQuaW5uZXJUZXh0ID0gJ1BBU1NFRDogb3JpZ2luIHdhcyAnICsg
ZXhwZWN0ZWRPcmlnaW47CisgICAgZWxzZQorICAgICAgICByZXN1bHRFbHQuaW5uZXJUZXh0ID0g
J0ZBSUxFRDogZXhwZWN0ZWQgb3JpZ2luOiAnICsgZXhwZWN0ZWRPcmlnaW4gKyAnIGJ1dCBnb3Q6
ICcgKyBhY3R1YWxPcmlnaW47Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5qcyBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yM2ZhYjQ4OThlZDg0NjU0ZjU5ZjFjNTVkNmVkMDZlYmIyYmNkOGZkCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9k
aXJlY3RvcnktZW50cnktdG8tdXJpLmpzCkBAIC0wLDAgKzEsMzQgQEAKK2lmICh0aGlzLmltcG9y
dFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdmcy13b3JrZXItY29tbW9uLmpzJyk7Cisg
ICAgaW1wb3J0U2NyaXB0cygnZnMtdGVzdC11dGlsLmpzJyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJP
YnRhaW5pbmcgVVJJIGZyb20gRGlyZWN0b3J5RW50cnkuIik7CisKK3ZhciBmaWxlU3lzdGVtID0g
bnVsbDsKK3ZhciB0ZXN0RGlyZWN0b3J5TmFtZSA9ICd0ZXN0RGlyZWN0b3J5JzsKK3ZhciB0ZXN0
RGlyZWN0b3J5VVJJID0gbnVsbDsKKworZnVuY3Rpb24gZXJyb3JDYWxsYmFjayhlcnJvcikgewor
ICAgIHRlc3RGYWlsZWQoIkVycm9yIG9jY3VyZWQ6IiArIGVycm9yLmNvZGUpOworICAgIGZpbmlz
aEpTVGVzdCgpOworfQorCitmdW5jdGlvbiBlbnRyeVRvVVJJKGVudHJ5KSB7CisgICAgdGVzdERp
cmVjdG9yeVVSSSA9IGVudHJ5LnRvVVJJKCk7CisgICAgc2hvdWxkQmUoInRlc3REaXJlY3RvcnlV
UkkiLCAiJ2ZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3JhcnkvdGVzdERpcmVjdG9yeSciKTsKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlVGVzdERpcmVjdG9yeSgpIHsK
KyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RGlyZWN0b3J5KHRlc3REaXJlY3RvcnlOYW1lLCB7Y3Jl
YXRlOnRydWV9LCBlbnRyeVRvVVJJLCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gZmls
ZVN5c3RlbUNhbGxiYWNrKGZzKSB7CisgICAgZmlsZVN5c3RlbSA9IGZzOworICAgIHJlbW92ZUFs
bEluRGlyZWN0b3J5KGZpbGVTeXN0ZW0ucm9vdCwgY3JlYXRlVGVzdERpcmVjdG9yeSwgZXJyb3JD
YWxsYmFjayk7Cit9CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3JlcXVlc3RGaWxlU3lz
dGVtKFRFTVBPUkFSWSwgMTAwLCBmaWxlU3lzdGVtQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtZW50cnktdG8tdXJpLmpzIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVudHJ5LXRvLXVyaS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iYjgyYWUzMGY4ZGYxZTY4ZjYzZmJiMjU1Y2IwNzU3N2UwNGFiZjQ1Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVudHJ5
LXRvLXVyaS5qcwpAQCAtMCwwICsxLDM0IEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7Cisg
ICAgaW1wb3J0U2NyaXB0cygnZnMtd29ya2VyLWNvbW1vbi5qcycpOworICAgIGltcG9ydFNjcmlw
dHMoJ2ZzLXRlc3QtdXRpbC5qcycpOworfQorCitkZXNjcmlwdGlvbigiT2J0YWluaW5nIFVSSSBm
cm9tIEZpbGVFbnRyeS4iKTsKKwordmFyIGZpbGVTeXN0ZW0gPSBudWxsOwordmFyIHRlc3RGaWxl
TmFtZSA9ICd0ZXN0RmlsZUVudHJ5LnR4dCc7Cit2YXIgdGVzdEZpbGVVUkkgPSBudWxsOworCitm
dW5jdGlvbiBlcnJvckNhbGxiYWNrKGVycm9yKSB7CisgICAgdGVzdEZhaWxlZCgiRXJyb3Igb2Nj
dXJlZDoiICsgZXJyb3IuY29kZSk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9u
IGVudHJ5VG9VUkkoZW50cnkpIHsKKyAgICB0ZXN0RmlsZVVSSSA9IGVudHJ5LnRvVVJJKCk7Cisg
ICAgc2hvdWxkQmUoInRlc3RGaWxlVVJJIiwgIidmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5
L3Rlc3RGaWxlRW50cnkudHh0JyIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5jdGlv
biBjcmVhdGVUZXN0RmlsZSgpIHsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZSh0ZXN0Rmls
ZU5hbWUsIHtjcmVhdGU6dHJ1ZX0sIGVudHJ5VG9VUkksIGVycm9yQ2FsbGJhY2spOworfQorCitm
dW5jdGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsKKyAgICBmaWxlU3lzdGVtID0gZnM7Cisg
ICAgcmVtb3ZlQWxsSW5EaXJlY3RvcnkoZmlsZVN5c3RlbS5yb290LCBjcmVhdGVUZXN0RmlsZSwg
ZXJyb3JDYWxsYmFjayk7Cit9CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3JlcXVlc3RG
aWxlU3lzdGVtKFRFTVBPUkFSWSwgMTAwLCBmaWxlU3lzdGVtQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2spOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMzN2Zi
YThmOGUyNGQxNzgzZmQ3ZWYyYWQxZDFlN2M3ZTFmMzc2Yi4uYzE3ODE1OTU5ZTc4MjMyNWViMGVl
MjMzNDg5Y2Q0MGMzNGUzOTY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDExLTAy
LTAxICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBFbnRyeS50b1VSSSBhbG9u
ZyB3aXRoIGFwcHJvcHJpYXRlIFNlY3VyaXR5T3JpZ2luIGNoYW5nZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzUyOQorCisgICAgICAgIFRlc3Rz
OiBmYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5odG1sCisgICAgICAgICAg
ICAgICBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmkuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9maWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi5odG1sCisKKyAgICAgICAg
KiBmaWxlYXBpL0VudHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVudHJ5Ojp0b1VSSSk6Cisg
ICAgICAgICogZmlsZWFwaS9FbnRyeS5oOgorICAgICAgICAqIGZpbGVhcGkvRW50cnkuaWRsOgor
ICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW46OlNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luOjpjYW5EaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpvcGVuRmlsZVN5c3RlbSk6CisgICAgICAgICog
cGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmg6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVT
eXN0ZW06OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpBc3luY0Zp
bGVTeXN0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6Y2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyQXNDYW5EaXNwbGF5T25s
eUlmQ2FuUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaDoKKwog
MjAxMS0wMS0zMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRW50cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5jcHAKaW5k
ZXggOWMzZmE0ZWVmOGFlY2VlOThhODFhZjlhNjI0NTQyMGFhZjJhMmMxYi4uYWMxMDQ1YmM4OGIx
NGZlYjVjOTc2ZGUzMDI2NTkyMGUxYTFhOWY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9FbnRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5jcHAK
QEAgLTMyLDEyICszMiwxNSBAQAogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogCisjaW5jbHVk
ZSAiQXN5bmNGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRGlyZWN0b3J5RW50cnkuaCIKICNpbmNs
dWRlICJFbnRyeUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXJyb3JDYWxsYmFjay5oIgogI2luY2x1
ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKICNpbmNs
dWRlICJNZXRhZGF0YUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNr
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTgyLDExICs4NSwxNCBAQCB2b2lkIEVudHJ5
OjpnZXRQYXJlbnQoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8RXJybwogICAgICAgICBmaWxlc3lzdGVtKCktPnNjaGVkdWxlQ2FsbGJhY2soZXJy
b3JDYWxsYmFjay5yZWxlYXNlKCksIEZpbGVFcnJvcjo6Y3JlYXRlKEZpbGVFcnJvcjo6SU5WQUxJ
RF9NT0RJRklDQVRJT05fRVJSKSk7CiB9CiAKLVN0cmluZyBFbnRyeTo6dG9VUkkoY29uc3QgU3Ry
aW5nJikKK1N0cmluZyBFbnRyeTo6dG9VUkkoKQogewotICAgIC8vIEZJWE1FOiB0byBiZSBpbXBs
ZW1lbnRlZC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgU3RyaW5nIHVyaSA9ICJmaWxlc3lzdGVtOiI7CisgICAgdXJpICs9IGZpbGVzeXN0ZW0o
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
OworICAgIHVyaSArPSAiLyI7CisgICAgdXJpICs9IChtX2ZpbGVTeXN0ZW0tPmFzeW5jRmlsZVN5
c3RlbSgpLT50eXBlKCkgPT0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkgPyAidGVtcG9yYXJ5
IiA6ICJwZXJzaXN0ZW50Iik7CisgICAgdXJpICs9IG1fZnVsbFBhdGg7CisgICAgcmV0dXJuIHVy
aTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9FbnRyeS5oIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5oCmluZGV4
IDkzNjdmNGYzMDJhNGQ3YTUwOTA0MzljNzViNjAzODIyNjhjNDAyM2MuLmQ4NzEyNjI0MGU1OTFi
YTJkMmViZTMxNzgxZTg2OTk2Nzc2MjQ2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRW50cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmgKQEAgLTU3
LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKFBhc3NSZWZQdHI8Vm9pZENhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSAwLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2sgPSAwKSBjb25zdDsKICAgICB2b2lkIGdldFBhcmVudChQYXNzUmVmUHRyPEVudHJ5
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IDAsIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjayA9IDApIGNvbnN0OwogCi0gICAgU3RyaW5nIHRvVVJJKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUgPSBTdHJpbmcoKSk7CisgICAgU3RyaW5nIHRvVVJJKCk7CiAKIHByb3RlY3Rl
ZDoKICAgICBFbnRyeShQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW1CYXNlPiwgY29uc3QgU3RyaW5n
JiBmdWxsUGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuaWRsCmluZGV4IGY2ZmNkYjNiNGVhODY0
OWYzZDhkOTdkM2E5MTA0MjNiNGM3MWY5NzAuLmYxNDRiMzFlYjJlOTQwZTg4MzVmM2EwODkyOGRi
ZjI4ZmIwODU3ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuaWRsCkBAIC00Myw2ICs0Myw3IEBA
IG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgdm9pZCBnZXRNZXRhZGF0YShpbiBbT3B0aW9uYWws
IENhbGxiYWNrXSBNZXRhZGF0YUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW09wdGlvbmFs
LCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAgICAgICAgdm9pZCBt
b3ZlVG8oaW4gRGlyZWN0b3J5RW50cnkgcGFyZW50LCBpbiBbT3B0aW9uYWwsIENvbnZlcnRVbmRl
ZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9uYWwsIENh
bGxiYWNrXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW09wdGlvbmFsLCBDYWxs
YmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAgICAgICAgdm9pZCBjb3B5VG8o
aW4gRGlyZWN0b3J5RW50cnkgcGFyZW50LCBpbiBbT3B0aW9uYWwsIENvbnZlcnRVbmRlZmluZWRP
ck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNr
XSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW09wdGlvbmFsLCBDYWxsYmFja10g
RXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAgICAgRE9NU3RyaW5nIHRvVVJJKCk7
CiAgICAgICAgIHZvaWQgcmVtb3ZlKGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIFZvaWRDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sg
ZXJyb3JDYWxsYmFjayk7CiAgICAgICAgIHZvaWQgZ2V0UGFyZW50KGluIFtPcHRpb25hbCwgQ2Fs
bGJhY2tdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbT3B0aW9uYWwsIENhbGxi
YWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwogICAgIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2VjdXJpdHlPcmlnaW4uY3BwCmluZGV4IDc4OWZkZjkzOTMyNzJjMmZlZjJiZDVlYmM2YThi
ZmE4ZGY4ZGIzMDMuLjYxN2JiNzVlZWJmZDZjOThjYzIyYzQ1MDZkMTk2MjJhYTBjMmU5MGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCkBAIC03OSw2ICs3OSwxNyBAQCBT
ZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29uc3QgS1VSTCYgdXJsLCBTYW5kYm94Rmxh
Z3Mgc2FuZGJveEZsYWdzKQogICAgIGlmIChtX3Byb3RvY29sID09ICJhYm91dCIgfHwgbV9wcm90
b2NvbCA9PSAiamF2YXNjcmlwdCIpCiAgICAgICAgIG1fcHJvdG9jb2wgPSAiIjsKIAorI2lmIEVO
QUJMRShGSUxFX1NZU1RFTSkKKyAgICBpZiAobV9wcm90b2NvbCA9PSAiZmlsZXN5c3RlbSIpIHsK
KyAgICAgICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwucGF0aCgpKTsKKyAg
ICAgICAgaWYgKG9yaWdpblVSTC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fcHJvdG9jb2wg
PSBvcmlnaW5VUkwucHJvdG9jb2woKS5sb3dlcigpOworICAgICAgICAgICAgbV9ob3N0ID0gb3Jp
Z2luVVJMLmhvc3QoKS5sb3dlcigpOworICAgICAgICAgICAgbV9wb3J0ID0gb3JpZ2luVVJMLnBv
cnQoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgLy8gRm9yIGVkZ2UgY2FzZSBV
UkxzIHRoYXQgd2VyZSBwcm9iYWJseSBtaXNwYXJzZWQsIG1ha2Ugc3VyZSB0aGF0IHRoZSBvcmln
aW4gaXMgdW5pcXVlLgogICAgIGlmIChzY2hlbWVSZXF1aXJlc0F1dGhvcml0eShtX3Byb3RvY29s
KSAmJiBtX2hvc3QuaXNFbXB0eSgpKQogICAgICAgICBtX2lzVW5pcXVlID0gdHJ1ZTsKQEAgLTMx
MCwxMSArMzIxLDggQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuRGlzcGxheShjb25zdCBLVVJM
JiB1cmwpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHByb3RvY29sID0gdXJsLnByb3RvY29sKCkubG93
ZXIoKTsKIAotI2lmIEVOQUJMRShCTE9CKQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZ2VuZXJh
bGl6ZSB0aGlzIGNoZWNrLgotICAgIGlmIChwcm90b2NvbCA9PSBCbG9iVVJMOjpibG9iUHJvdG9j
b2woKSkKKyAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OmNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0
KHByb3RvY29sKSkKICAgICAgICAgcmV0dXJuIGNhblJlcXVlc3QodXJsKTsKLSNlbmRpZgogCiAg
ICAgaWYgKFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzRGlzcGxheUlzb2xh
dGVkKHByb3RvY29sKSkKICAgICAgICAgcmV0dXJuIG1fcHJvdG9jb2wgPT0gcHJvdG9jb2wgfHwg
aXNBY2Nlc3NUb1VSTFdoaXRlTGlzdGVkKHVybCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
QXN5bmNGaWxlU3lzdGVtLmNwcAppbmRleCBiODVhNDg3ZmI2MWNmNzY2YjliMGI4ZjQ5NzJmNDY3
OTNhZTE5YzZhLi5iMWEzZmUyMjkyODU4YzQ4YzFjZTViN2Q5ZWM0MmZiYjkyZTkzNmNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAKQEAgLTQ2LDcgKzQ2
LDcgQEAgYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBBc3luY0ZpbGVTeXN0ZW06OmNy
ZWF0ZShjb25zdCBTdHJpbmcmKQorUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IEFzeW5jRmls
ZVN5c3RlbTo6Y3JlYXRlKFR5cGUsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICByZXR1cm4gMDsKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBBc3luY0ZpbGVTeXN0
ZW06Om9wZW5GaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYg
c3RvcmEKICAgICByb290UGF0aCArPSB0eXBlU3RyaW5nOwogICAgIHJvb3RQYXRoLmFwcGVuZChQ
bGF0Zm9ybUZpbGVQYXRoU2VwYXJhdG9yKTsKIAotICAgIGNhbGxiYWNrcy0+ZGlkT3BlbkZpbGVT
eXN0ZW0obmFtZSwgQXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUocm9vdFBhdGgpKTsKKyAgICBjYWxs
YmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIEFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRlKHR5
cGUsIHJvb3RQYXRoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3lu
Y0ZpbGVTeXN0ZW0uaAppbmRleCBjMzRhNjQ0ZDVkZDJjM2ZiMDY5YjQzZTYzYzkzYjFiOTdmYzRi
NTJhLi5mNTIwN2NlM2UyMGMwODYyOTEzODYzODM2OGJlZDIzZmU4NjBmYWRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaApAQCAtNjUsNyArNjUsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIHdhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkgeyByZXR1
cm4gZmFsc2U7IH0KIAogICAgIC8vIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcGxhdGZvcm0t
c3BlY2lmaWMgQXN5bmNGaWxlU3lzdGVtIGluc3RhbmNlIGlmIHRoZSBwbGF0Zm9ybSBoYXMgaXRz
IG93biBpbXBsZW1lbnRhdGlvbi4KLSAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0
ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShUeXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoKTsK
IAogICAgIC8vIE9wZW5zIGEgbmV3IGZpbGUgc3lzdGVtLiBUaGUgY3JlYXRlIHBhcmFtZXRlciBz
cGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gY3JlYXRlIHRoZSBwYXRoIGlmIGl0IGRvZXMgbm90
IGFscmVhZHkgZXhpc3RzLgogICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtKGNvbnN0IFN0
cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50aWZpZXIsIFR5cGUsIGJv
b2wgY3JlYXRlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwpAQCAtMTMy
LDEyICsxMzIsMTYgQEAgcHVibGljOgogICAgIC8vIEdldHRlciBmb3IgdGhpcyBmaWxlIHN5c3Rl
bSdzIHJvb3QgcGF0aC4KICAgICBTdHJpbmcgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZv
cm1Sb290UGF0aDsgfQogCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisKIHByb3RlY3RlZDoKLSAgICBBc3luY0ZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBwbGF0Zm9y
bVJvb3RQYXRoKQotICAgICAgICA6IG1fcGxhdGZvcm1Sb290UGF0aChwbGF0Zm9ybVJvb3RQYXRo
KQorICAgIEFzeW5jRmlsZVN5c3RlbShUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgcGxhdGZvcm1S
b290UGF0aCkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX3BsYXRmb3JtUm9v
dFBhdGgocGxhdGZvcm1Sb290UGF0aCkKICAgICB7CiAgICAgfQogCisgICAgVHlwZSBtX3R5cGU7
CiAgICAgU3RyaW5nIG1fcGxhdGZvcm1Sb290UGF0aDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcAppbmRleCAwYTdjYjhjZjRiOWZkY2EwZjVlZmQxZGYz
M2YyZmZhZjc1ZGJiMTJlLi5iMWRhZGZlZDA5OWUyMmM0Y2I2NTk1N2FhZjAwZDMxNDRmNzc0MTkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCkBAIC04Niw2
ICs4NiwyNCBAQCBzdGF0aWMgVVJMU2NoZW1lc01hcCYgZW1wdHlEb2N1bWVudFNjaGVtZXMoKQog
ICAgIHJldHVybiBlbXB0eURvY3VtZW50U2NoZW1lczsKIH0KIAorc3RhdGljIFVSTFNjaGVtZXNN
YXAmIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcygpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChVUkxTY2hlbWVzTWFwLCBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVt
ZXMsICgpKTsKKworI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9TWVNURU0pCisgICAg
aWYgKGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcy5pc0VtcHR5KCkpIHsKKyNpZiBF
TkFCTEUoQkxPQikKKyAgICAgICAgY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzLmFk
ZCgiYmxvYiIpOworI2VuZGlmCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAgICAgICBjYW5E
aXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVtZXMuYWRkKCJmaWxlc3lzdGVtIik7CisjZW5kaWYK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKKwor
ICAgIHJldHVybiBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVtZXM7Cit9CisKIHZvaWQg
U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHNj
aGVtZSkKIHsKICAgICBsb2NhbFVSTFNjaGVtZXMoKS5hZGQoc2NoZW1lKTsKQEAgLTE1Niw0ICsx
NzQsMTQgQEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkTG9hZFVSTFNjaGVtZUFzRW1wdHlE
b2N1bWVudChjb25zdCBTdHJpbmcmIHNjaGVtZSkKICAgICByZXR1cm4gZW1wdHlEb2N1bWVudFNj
aGVtZXMoKS5jb250YWlucyhzY2hlbWUpOwogfQogCitib29sIFNjaGVtZVJlZ2lzdHJ5OjpjYW5E
aXNwbGF5T25seUlmQ2FuUmVxdWVzdChjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICByZXR1
cm4gY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzKCkuY29udGFpbnMoc2NoZW1lKTsK
K30KKwordm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJBc0NhbkRpc3BsYXlPbmx5SWZDYW5S
ZXF1ZXN0KGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworICAgIGNhbkRpc3BsYXlPbmx5SWZDYW5S
ZXF1ZXN0U2NoZW1lcygpLmFkZChzY2hlbWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAppbmRleCA1MzBmY2FiMWQw
Yzc3YzkwN2VhNDUxYmVlMDk5NDNmY2E1MjhmMDMxLi5jOWNiNDc2YTAzZmYxYTYzNmZjZDVkYTY3
MTExZGVmMzUzNDk3MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hl
bWVSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5
LmgKQEAgLTU4LDYgKzU4LDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
VVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBib29s
IHNob3VsZExvYWRVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQoY29uc3QgU3RyaW5nJik7CisKKyAg
ICAvLyBTdWNoIHNjaGVtZXMgc2hvdWxkIGRlbGVnYXRlIHRvIFNlY3VyaXR5T3JpZ2luOjpjYW5S
ZXF1ZXN0IGZvciBhbnkgVVJMCisgICAgLy8gcGFzc2VkIHRvIFNlY3VyaXR5T3JpZ2luOjpjYW5E
aXNwbGF5LgorICAgIHN0YXRpYyBib29sIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0KGNvbnN0
IFN0cmluZyYgc2NoZW1lKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckFzQ2FuRGlzcGxheU9u
bHlJZkNhblJlcXVlc3QoY29uc3QgU3RyaW5nJiBzY2hlbWUpOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjM2M1YmJhZjY3MDVhZjc4
ODdiOWEyZDI2MDE1ZjNiNTNiMzAzMjAwLi4zNmQ5OWZhNTE2YmJmNmU1YjU5NWEzNjExYTNjYTdj
ODk1Y2Y4OGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisy
MDExLTAyLTAxICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hZGUgRmlsZVN5c3RlbSB0eXBl
IGF2YWlsYWJsZSB0byBET00gY29kZSBpbiBvcmRlciB0byBpbXBsZW1lbnQgRW50cnkudG9VUkkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTI5CisK
KyAgICAgICAgKiBzcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToK
KyAgICAgICAgKiBzcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAqIHNyYy9Mb2Nh
bEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEZpbGVTeXN0
ZW06OnJlYWRGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6
cmVxdWVzdEZpbGVTeXN0ZW0pOgorICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tz
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsOjpkaWRPcGVuRmlsZVN5c3RlbSk6CisgICAgICAgICogc3JjL1dlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsLmg6CisgICAgICAgICogc3JjL1dvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtOjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSk6CisgICAgICAgICogc3Jj
L1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKToKKwogMjAxMS0wMS0zMSAgQ2hyaXMg
Um9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVt
eSBPcmxvdy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmls
ZVN5c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmls
ZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCA1OTc1ZTcyNDNkMzQ1ODIyZWZhYTE4NzlkNGMyOGZm
NGFkNTM2NGE3Li5lZjFmNjE2NzFjODdkOTAxZGEzNDAwOTI2NTAxYjM1YmRiYzk4ZmE4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwCkBAIC01MCw4ICs1MCw4IEBAIGJvb2wgQXN5bmNGaWxlU3lzdGVtOjppc0F2YWls
YWJsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpB
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShjb25zdCBTdHJpbmcmIHJvb3RQYXRoKQotICAgIDogQXN5
bmNGaWxlU3lzdGVtKHJvb3RQYXRoKQorQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OkFzeW5jRmls
ZVN5c3RlbUNocm9taXVtKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IHJvb3RQYXRoKQorICAgIDogQXN5bmNGaWxlU3lzdGVtKHR5cGUsIHJvb3RQYXRoKQogICAgICwg
bV93ZWJGaWxlU3lzdGVtKFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmZpbGVTeXN0ZW0oKSkKIHsK
ICAgICBBU1NFUlQobV93ZWJGaWxlU3lzdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCmluZGV4IDYyMDU2MDliOTg2Y2Ew
NDhmZDk5MGRmOTRjNDU1N2MyYzIwZjlkZGEuLmRhOThhMzMxYjk3N2UwYjc4ZjU1MWIzYjA1OGUy
ZDBkY2RkNGExMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0uaApAQCAtNDYsOSArNDYsOSBAQCBjbGFzcyBBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M7CiAKIGNsYXNzIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtIDogcHVibGlj
IEFzeW5jRmlsZVN5c3RlbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8QXN5bmNG
aWxlU3lzdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiByb290UGF0aCkKKyAgICBzdGF0aWMgUGFz
c093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0ocm9vdFBhdGgpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSh0eXBlLCByb290UGF0aCkpOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgfkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKCk7CkBAIC02Niw3
ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlV3JpdGVyKEFzeW5jRmls
ZVdyaXRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0oY29uc3QgU3RyaW5nJiByb290UGF0aCk7CisgICAgQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0oQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQ
YXRoKTsKICAgICBXZWJLaXQ6OldlYkZpbGVTeXN0ZW0qIG1fd2ViRmlsZVN5c3RlbTsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNo
cm9taXVtLmNwcAppbmRleCBhOWM2MWQwZDRmZDA1NWVjNjU2ZTBjZGRjMWY2MTlmOGRhOTQ5NWVi
Li5hZTJlYjFkYzBmNjgwMzNlNGU4MTY2NzIzNmE4YWY0MTcyMzA5OGJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3Bw
CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTCiAgICAgQVNTRVJUKGNv
bnRleHQgJiYgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwogICAgIFdlYkZyYW1lSW1wbCogd2Vi
RnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAg
d2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8
V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CisgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVu
RmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlw
ZSksIHNpemUsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
LCB0eXBlKSk7CiB9CiAKIHZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0RmlsZVN5c3RlbShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlw
ZSwgbG9uZyBsb25nIHNpemUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCkBAIC03MSwxMiArNzEsMTIgQEAgdm9pZCBMb2Nh
bEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEFzeW5jRmkKICAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CiAg
ICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShk
b2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVT
eXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBz
aXplLCB0cnVlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7Cisg
ICAgICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRp
Y19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCB0cnVlLCBuZXcgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihjb250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRl
clByb3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwog
ICAgICAgICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJC
YXNlKj4od29ya2VyTG9hZGVyUHJveHkpOwotICAgICAgICB3ZWJXb3JrZXItPm9wZW5GaWxlU3lz
dGVtKHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBuZXcgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCBjb250ZXh0LCBzeW5jaHJvbm91cyks
IHN5bmNocm9ub3VzKTsKKyAgICAgICAgd2ViV29ya2VyLT5vcGVuRmlsZVN5c3RlbShzdGF0aWNf
Y2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgbmV3IFdlYkZpbGVTeXN0ZW1D
YWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5j
aHJvbm91cyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAKaW5kZXggNTJhNDAzMjFkZmJk
MTkxOWM2M2UwNGFmYzliODMzZTEwZGJjZmNmNC4uMGM3MWY4MDJkNTE2MzM5MDY2YjIzYjRlMTBk
MzM5ZWUxMThhNGZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcApAQCAtMzYsOCArMzYsOSBAQAogI2lu
Y2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmlsZU1ldGFkYXRh
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkZp
bGVTeXN0ZW1FbnRyeS5oIgogI2luY2x1ZGUgIldlYkZpbGVJbmZvLmgiCisjaW5jbHVkZSAiV2Vi
RmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1FbnRyeS5oIgogI2luY2x1ZGUg
IldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDYsOCArNDcsOSBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsOjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBib29sIHN5bmNocm9ub3VzKQorV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6
OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBib29sIHN5bmNocm9ub3VzKQogICAgIDog
bV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1fc3luY2hyb25vdXMoc3luY2hyb25vdXMpCiB7CkBAIC04NSw5
ICs4Nyw5IEBAIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWREaXJlY3Rv
cnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FCiB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxs
YmFja3NJbXBsOjpkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0
IFdlYlN0cmluZyYgcGF0aCkKIHsKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXNX
b3JrZXJDb250ZXh0KCkpCi0gICAgICAgIG1fY2FsbGJhY2tzLT5kaWRPcGVuRmlsZVN5c3RlbShu
YW1lLCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKG1fY29udGV4dCwgcGF0
aCwgbV9zeW5jaHJvbm91cykpOworICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0
ZW0obmFtZSwgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZShtX2NvbnRleHQs
IG1fdHlwZSwgcGF0aCwgbV9zeW5jaHJvbm91cykpOwogICAgIGVsc2UKLSAgICAgICAgbV9jYWxs
YmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpj
cmVhdGUocGF0aCkpOworICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFt
ZSwgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZShtX3R5cGUsIHBhdGgpKTsKICAgICBk
ZWxldGUgdGhpczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgKaW5kZXggNzVmYTJiYjk5NGYwNmU0MjY4NDdm
MDdhYjIyMmZiZWFiZjgyZjFkMi4uM2UyMTkyZTk4ZGE0NjMxYTFjMzhjZTY1NjA3OWRhYmE5ZDEy
NzMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbC5oCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsX2gKICNkZWZpbmUgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGxf
aAogCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiV2ViRmlsZVN5c3Rl
bS5oIgogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKICNpbmNsdWRlICJXZWJW
ZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00OSw3ICs1MSw3IEBAIGNsYXNz
IFdlYlN0cmluZzsKIAogY2xhc3MgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwgOiBwdWJsaWMg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrcyB7CiBwdWJsaWM6Ci0gICAgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrc0ltcGwoUGFzc093blB0cjxXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+LCBX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiA9IDAsIGJvb2wgc3luY2hyb25vdXMgPSBm
YWxzZSk7CisgICAgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoUGFzc093blB0cjxXZWJDb3Jl
OjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+LCBXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06OlR5
cGUgPSBXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSwgV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogPSAwLCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwogICAgIHZp
cnR1YWwgfldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkU3VjY2VlZCgpOwpAQCAtNjEsNiArNjMsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE93
blB0cjxXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogCisg
ICAgLy8gVXNlZCBmb3Igb3BlbkZpbGVTeXN0ZW0gY2FsbGJhY2tzLgorICAgIFdlYkNvcmU6OkFz
eW5jRmlsZVN5c3RlbTo6VHlwZSBtX3R5cGU7CisKICAgICAvLyBVc2VkIGZvciB3b3JrZXIncyBv
cGVuRmlsZVN5c3RlbSBjYWxsYmFja3MuCiAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogbV9jb250ZXh0OwogICAgIGJvb2wgbV9zeW5jaHJvbm91czsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmNwcAppbmRleCAwNThlOTQ3YTYzZWNhMTg5Y2RjMWFkMzIzY2E3MTJjMjViMTE2OGJiLi5m
YWVhNDBiMDUzNzQ0MzhkNzU0ODIyY2FjYjUwN2UyMTIzZWYxNTA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwCkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGlj
IGNvbnN0IGNoYXIgZmlsZVN5c3RlbU9wZXJhdGlvbnNNb2RlW10gPSAiZmlsZVN5c3RlbU9wZXJh
dGlvbnNNb2RlIjsKIAotV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OldvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wgc3luY2hyb25vdXMpCi0gICAgOiBBc3luY0ZpbGVTeXN0
ZW0ocm9vdFBhdGgpCitXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6V29ya2VyQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNG
aWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wgc3luY2hy
b25vdXMpCisgICAgOiBBc3luY0ZpbGVTeXN0ZW0odHlwZSwgcm9vdFBhdGgpCiAgICAgLCBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKICAgICAsIG1fd2ViRmlsZVN5c3RlbShXZWJL
aXQ6OndlYktpdENsaWVudCgpLT5maWxlU3lzdGVtKCkpCiAgICAgLCBtX3dvcmtlckNvbnRleHQo
c3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgK
aW5kZXggMGI0YjcwODU0MmE5MDQzNWU5ZTllYjBlODI3ZDYzOWU1YzA3YWI0Yi4uN2UzMzE2YjIy
YzkzM2EwMDMxZGJiMGUxNTdjYjE4MDUzOGY3N2Q4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCkBA
IC01Miw5ICs1Miw5IEBAIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAKIGNsYXNzIFdvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtIDogcHVibGljIEFzeW5jRmlsZVN5c3RlbSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJv
bm91cykKKyAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwg
Y29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJvbm91cykKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oY29udGV4
dCwgcm9vdFBhdGgsIHN5bmNocm9ub3VzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oY29udGV4dCwgdHlwZSwgcm9vdFBhdGgsIHN5
bmNocm9ub3VzKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+V29ya2VyQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW0oKTsKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVXcml0ZXIoQXN5bmNGaWxlV3JpdGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYg
cGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKIAogcHJpdmF0ZToK
LSAgICBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJvbm91cyk7CisgICAgV29ya2Vy
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEFzeW5jRmls
ZVN5c3RlbTo6VHlwZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJvbm91cyk7
CiAKICAgICBQYXNzUmVmUHRyPFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZT4gY3JlYXRlV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80923</attachid>
            <date>2011-02-02 09:39:48 -0800</date>
            <delta_ts>2011-02-02 14:53:38 -0800</delta_ts>
            <desc>Use StringBuilder and set m_isUnique for invalid URLs</desc>
            <filename>bug-53529-20110202093947.patch</filename>
            <type>text/plain</type>
            <size>30355</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0ZDc4ZWJhZTM2OGVkYTBhZjEzYTg5OGM0ZTc5ZDA2MzM1MTM0NGJiLi4zMWQ1Nzkx
NjY4NDZmMDE0YmQ4Y2JkNGZkOTI1ZTQ4NjRhZmY1YWQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAK
KzIwMTEtMDItMDEgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgZm9yIEVudHJ5LnRv
VVJJIGFuZCBhc3NvY2lhdGVkIGNoYW5nZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MzUyOQorCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2Rp
cmVjdG9yeS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmkuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1v
cmlnaW4uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9k
aXJlY3RvcnktZW50cnktdG8tdXJpLmpzOiBBZGRlZC4KKyAgICAgICAgKGVycm9yQ2FsbGJhY2sp
OgorICAgICAgICAoZW50cnlUb1VSSSk6CisgICAgICAgIChjcmVhdGVUZXN0RGlyZWN0b3J5KToK
KyAgICAgICAgKCk6CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVu
dHJ5LXRvLXVyaS5qczogQWRkZWQuCisgICAgICAgIChlcnJvckNhbGxiYWNrKToKKyAgICAgICAg
KGVudHJ5VG9VUkkpOgorICAgICAgICAoY3JlYXRlVGVzdEZpbGUpOgorICAgICAgICAoKToKKwog
MjAxMS0wMS0zMSAgU2NvdHQgQ2FtZXJvbiAgPHNjY2FtZXJvbkByaW0uY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhbmllbCBCYXRlcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMTI3MzNjOTdhMWU3OTdiYzM3YTQyMTRiZDFmOWQ5MWI1OGQ1ZDFiCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRy
eS10by11cmktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK09idGFpbmluZyBVUkkgZnJv
bSBEaXJlY3RvcnlFbnRyeS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
dGVzdERpcmVjdG9yeVVSSSBpcyAnZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90ZXN0RGly
ZWN0b3J5JworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50
cnktdG8tdXJpLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVu
dHJ5LXRvLXVyaS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhZjkxYmI4MjUxMWQ2MzVmYmViZmEwMTg1OTg2
NzdhNDA3ZmIwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlyZWN0b3J5LWVu
dHJ5LXRvLXVyaS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50cnktdG8tdXJpLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jODg2ZmQ1MjdiNDE0Y2UyNTQwZjgwNzhmOGM5NDZhMTI4YTdhOGU3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50
cnktdG8tdXJpLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitPYnRhaW5pbmcgVVJJIGZy
b20gRmlsZUVudHJ5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0ZXN0
RmlsZVVSSSBpcyAnZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90ZXN0RmlsZUVudHJ5LnR4
dCcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmku
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVyaS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRlYzM0NWIxZjM4OWI5NzMwNDU1YjkxZGJkMzZkYWJhMGY0OGUyNjIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10
by11cmkuaHRtbApAQCAtMCwwICsxLDEzIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2ZzLXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZpbGUtZW50cnktdG8tdXJpLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9maWxlc3lzdGVtLXVyaS1vcmlnaW4tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjhmZjNlMmRhYWViNjk4MmJmZTBjNjcwODg0NmU3NTJlYTE5OGVhZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1vcmlnaW4tZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1BBU1NFRDogb3JpZ2luIHdhcyBodHRwOi8vd3d3Lndl
YmtpdC5vcmc6ODA4MApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGVzeXN0ZW0tdXJpLW9yaWdpbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGVzeXN0ZW0tdXJpLW9yaWdpbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MjIzMjIwZWQ4ZDA3NmE5NzY4
NjU0M2IxOWE4ZTJhZjg4MmM3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLmh0bWwKQEAgLTAsMCArMSwxMyBAQAor
PGEgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaHJlZj0iZmlsZXN5c3RlbTpodHRwOi8vd3d3LndlYmtp
dC5vcmc6ODA4MC90ZW1wb3JhcnkvYS9iL2MvZmlsZS50eHQiPmZvbzwvYT4KKzxwPlRoaXMgdGV4
dCBzaG91bGQgbm90IGJlIHZpc2libGUuIEl0IHNob3VsZCBiZSBvdmVyd3JpdHRlbiBieSB0aGUg
cnVubmluZyBvZiB0aGUgdGVzdC48L3A+Cis8c2NyaXB0PgorICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICB2YXIgZXhwZWN0ZWRPcmlnaW4gPSAnaHR0cDovL3d3dy53ZWJraXQub3JnOjgwODAn
OworICAgIHZhciBhY3R1YWxPcmlnaW4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
YScpWzBdLm9yaWdpbjsKKyAgICB2YXIgcmVzdWx0RWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ3AnKVswXTsKKyAgICBpZiAoYWN0dWFsT3JpZ2luID09IGV4cGVjdGVkT3JpZ2lu
KQorICAgICAgICByZXN1bHRFbHQuaW5uZXJUZXh0ID0gJ1BBU1NFRDogb3JpZ2luIHdhcyAnICsg
ZXhwZWN0ZWRPcmlnaW47CisgICAgZWxzZQorICAgICAgICByZXN1bHRFbHQuaW5uZXJUZXh0ID0g
J0ZBSUxFRDogZXhwZWN0ZWQgb3JpZ2luOiAnICsgZXhwZWN0ZWRPcmlnaW4gKyAnIGJ1dCBnb3Q6
ICcgKyBhY3R1YWxPcmlnaW47Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5qcyBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yM2ZhYjQ4OThlZDg0NjU0ZjU5ZjFjNTVkNmVkMDZlYmIyYmNkOGZkCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9k
aXJlY3RvcnktZW50cnktdG8tdXJpLmpzCkBAIC0wLDAgKzEsMzQgQEAKK2lmICh0aGlzLmltcG9y
dFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdmcy13b3JrZXItY29tbW9uLmpzJyk7Cisg
ICAgaW1wb3J0U2NyaXB0cygnZnMtdGVzdC11dGlsLmpzJyk7Cit9CisKK2Rlc2NyaXB0aW9uKCJP
YnRhaW5pbmcgVVJJIGZyb20gRGlyZWN0b3J5RW50cnkuIik7CisKK3ZhciBmaWxlU3lzdGVtID0g
bnVsbDsKK3ZhciB0ZXN0RGlyZWN0b3J5TmFtZSA9ICd0ZXN0RGlyZWN0b3J5JzsKK3ZhciB0ZXN0
RGlyZWN0b3J5VVJJID0gbnVsbDsKKworZnVuY3Rpb24gZXJyb3JDYWxsYmFjayhlcnJvcikgewor
ICAgIHRlc3RGYWlsZWQoIkVycm9yIG9jY3VyZWQ6IiArIGVycm9yLmNvZGUpOworICAgIGZpbmlz
aEpTVGVzdCgpOworfQorCitmdW5jdGlvbiBlbnRyeVRvVVJJKGVudHJ5KSB7CisgICAgdGVzdERp
cmVjdG9yeVVSSSA9IGVudHJ5LnRvVVJJKCk7CisgICAgc2hvdWxkQmUoInRlc3REaXJlY3RvcnlV
UkkiLCAiJ2ZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3JhcnkvdGVzdERpcmVjdG9yeSciKTsKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlVGVzdERpcmVjdG9yeSgpIHsK
KyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RGlyZWN0b3J5KHRlc3REaXJlY3RvcnlOYW1lLCB7Y3Jl
YXRlOnRydWV9LCBlbnRyeVRvVVJJLCBlcnJvckNhbGxiYWNrKTsKK30KKworZnVuY3Rpb24gZmls
ZVN5c3RlbUNhbGxiYWNrKGZzKSB7CisgICAgZmlsZVN5c3RlbSA9IGZzOworICAgIHJlbW92ZUFs
bEluRGlyZWN0b3J5KGZpbGVTeXN0ZW0ucm9vdCwgY3JlYXRlVGVzdERpcmVjdG9yeSwgZXJyb3JD
YWxsYmFjayk7Cit9CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3JlcXVlc3RGaWxlU3lz
dGVtKFRFTVBPUkFSWSwgMTAwLCBmaWxlU3lzdGVtQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtZW50cnktdG8tdXJpLmpzIGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVudHJ5LXRvLXVyaS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iYjgyYWUzMGY4ZGYxZTY4ZjYzZmJiMjU1Y2IwNzU3N2UwNGFiZjQ1Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVudHJ5
LXRvLXVyaS5qcwpAQCAtMCwwICsxLDM0IEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7Cisg
ICAgaW1wb3J0U2NyaXB0cygnZnMtd29ya2VyLWNvbW1vbi5qcycpOworICAgIGltcG9ydFNjcmlw
dHMoJ2ZzLXRlc3QtdXRpbC5qcycpOworfQorCitkZXNjcmlwdGlvbigiT2J0YWluaW5nIFVSSSBm
cm9tIEZpbGVFbnRyeS4iKTsKKwordmFyIGZpbGVTeXN0ZW0gPSBudWxsOwordmFyIHRlc3RGaWxl
TmFtZSA9ICd0ZXN0RmlsZUVudHJ5LnR4dCc7Cit2YXIgdGVzdEZpbGVVUkkgPSBudWxsOworCitm
dW5jdGlvbiBlcnJvckNhbGxiYWNrKGVycm9yKSB7CisgICAgdGVzdEZhaWxlZCgiRXJyb3Igb2Nj
dXJlZDoiICsgZXJyb3IuY29kZSk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9u
IGVudHJ5VG9VUkkoZW50cnkpIHsKKyAgICB0ZXN0RmlsZVVSSSA9IGVudHJ5LnRvVVJJKCk7Cisg
ICAgc2hvdWxkQmUoInRlc3RGaWxlVVJJIiwgIidmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5
L3Rlc3RGaWxlRW50cnkudHh0JyIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5jdGlv
biBjcmVhdGVUZXN0RmlsZSgpIHsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZSh0ZXN0Rmls
ZU5hbWUsIHtjcmVhdGU6dHJ1ZX0sIGVudHJ5VG9VUkksIGVycm9yQ2FsbGJhY2spOworfQorCitm
dW5jdGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsKKyAgICBmaWxlU3lzdGVtID0gZnM7Cisg
ICAgcmVtb3ZlQWxsSW5EaXJlY3RvcnkoZmlsZVN5c3RlbS5yb290LCBjcmVhdGVUZXN0RmlsZSwg
ZXJyb3JDYWxsYmFjayk7Cit9CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3JlcXVlc3RG
aWxlU3lzdGVtKFRFTVBPUkFSWSwgMTAwLCBmaWxlU3lzdGVtQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2spOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMzN2Zi
YThmOGUyNGQxNzgzZmQ3ZWYyYWQxZDFlN2M3ZTFmMzc2Yi4uYzE3ODE1OTU5ZTc4MjMyNWViMGVl
MjMzNDg5Y2Q0MGMzNGUzOTY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDExLTAy
LTAxICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBFbnRyeS50b1VSSSBhbG9u
ZyB3aXRoIGFwcHJvcHJpYXRlIFNlY3VyaXR5T3JpZ2luIGNoYW5nZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzUyOQorCisgICAgICAgIFRlc3Rz
OiBmYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5odG1sCisgICAgICAgICAg
ICAgICBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmkuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9maWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi5odG1sCisKKyAgICAgICAg
KiBmaWxlYXBpL0VudHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVudHJ5Ojp0b1VSSSk6Cisg
ICAgICAgICogZmlsZWFwaS9FbnRyeS5oOgorICAgICAgICAqIGZpbGVhcGkvRW50cnkuaWRsOgor
ICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW46OlNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luOjpjYW5EaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpvcGVuRmlsZVN5c3RlbSk6CisgICAgICAgICog
cGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmg6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVT
eXN0ZW06OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpBc3luY0Zp
bGVTeXN0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6Y2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyQXNDYW5EaXNwbGF5T25s
eUlmQ2FuUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaDoKKwog
MjAxMS0wMS0zMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRW50cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5jcHAKaW5k
ZXggOWMzZmE0ZWVmOGFlY2VlOThhODFhZjlhNjI0NTQyMGFhZjJhMmMxYi4uNTNjZDU3NmExYzc3
MTcwN2Q4NGI3ZThlN2JmMDk5M2YxZmU1OWUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9FbnRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5jcHAK
QEAgLTMyLDEzICszMiwxNyBAQAogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogCisjaW5jbHVk
ZSAiQXN5bmNGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRGlyZWN0b3J5RW50cnkuaCIKICNpbmNs
dWRlICJFbnRyeUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXJyb3JDYWxsYmFjay5oIgogI2luY2x1
ZGUgIkZpbGVFcnJvci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKICNpbmNs
dWRlICJNZXRhZGF0YUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNr
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTgyLDExICs4NiwxNSBAQCB2b2lkIEVudHJ5OjpnZXRQYXJlbnQoUGFzc1Jl
ZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJybwogICAg
ICAgICBmaWxlc3lzdGVtKCktPnNjaGVkdWxlQ2FsbGJhY2soZXJyb3JDYWxsYmFjay5yZWxlYXNl
KCksIEZpbGVFcnJvcjo6Y3JlYXRlKEZpbGVFcnJvcjo6SU5WQUxJRF9NT0RJRklDQVRJT05fRVJS
KSk7CiB9CiAKLVN0cmluZyBFbnRyeTo6dG9VUkkoY29uc3QgU3RyaW5nJikKK1N0cmluZyBFbnRy
eTo6dG9VUkkoKQogewotICAgIC8vIEZJWE1FOiB0byBiZSBpbXBsZW1lbnRlZC4KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgU3RyaW5nQnVpbGRl
ciB1cmlCdWlsZGVyOworICAgIHVyaUJ1aWxkZXIuYXBwZW5kKCJmaWxlc3lzdGVtOiIpOworICAg
IHVyaUJ1aWxkZXIuYXBwZW5kKGZpbGVzeXN0ZW0oKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKKyAgICB1cmlCdWlsZGVyLmFwcGVuZCgi
LyIpOworICAgIHVyaUJ1aWxkZXIuYXBwZW5kKG1fZmlsZVN5c3RlbS0+YXN5bmNGaWxlU3lzdGVt
KCktPnR5cGUoKSA9PSBBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSA/ICJ0ZW1wb3JhcnkiIDog
InBlcnNpc3RlbnQiKTsKKyAgICB1cmlCdWlsZGVyLmFwcGVuZChtX2Z1bGxQYXRoKTsKKyAgICBy
ZXR1cm4gdXJpQnVpbGRlci50b1N0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0VudHJ5LmgKaW5kZXggOTM2N2Y0ZjMwMmE0ZDdhNTA5MDQzOWM3NWI2MDM4
MjI2OGM0MDIzYy4uZDg3MTI2MjQwZTU5MWJhMmQyZWJlMzE3ODFlODY5OTY3NzYyNDYwNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRW50cnkuaApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZW1vdmUoUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IDAsIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IDApIGNvbnN0OwogICAgIHZvaWQg
Z2V0UGFyZW50KFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gMCwg
UGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gMCkgY29uc3Q7CiAKLSAg
ICBTdHJpbmcgdG9VUkkoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSA9IFN0cmluZygpKTsKKyAgICBT
dHJpbmcgdG9VUkkoKTsKIAogcHJvdGVjdGVkOgogICAgIEVudHJ5KFBhc3NSZWZQdHI8RE9NRmls
ZVN5c3RlbUJhc2U+LCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRy
eS5pZGwKaW5kZXggZjZmY2RiM2I0ZWE4NjQ5ZjNkOGQ5N2QzYTkxMDQyM2I0YzcxZjk3MC4uZjE0
NGIzMWViMmU5NDBlODgzNWYzYTA4OTI4ZGJmMjhmYjA4NTdkZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9F
bnRyeS5pZGwKQEAgLTQzLDYgKzQzLDcgQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgICAgICB2b2lk
IGdldE1ldGFkYXRhKGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIE1ldGFkYXRhQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9y
Q2FsbGJhY2spOwogICAgICAgICB2b2lkIG1vdmVUbyhpbiBEaXJlY3RvcnlFbnRyeSBwYXJlbnQs
IGluIFtPcHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3Ry
aW5nIG5hbWUsIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJh
Y2spOwogICAgICAgICB2b2lkIGNvcHlUbyhpbiBEaXJlY3RvcnlFbnRyeSBwYXJlbnQsIGluIFtP
cHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5h
bWUsIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
LCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwor
ICAgICAgICBET01TdHJpbmcgdG9VUkkoKTsKICAgICAgICAgdm9pZCByZW1vdmUoaW4gW09wdGlv
bmFsLCBDYWxsYmFja10gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW09wdGlvbmFs
LCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAgICAgICAgdm9pZCBn
ZXRQYXJlbnQoaW4gW09wdGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFj
ayk7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmln
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAKaW5kZXggNzg5
ZmRmOTM5MzI3MmMyZmVmMmJkNWViYzZhOGJmYThkZjhkYjMwMy4uOWZiODQ3NjdlZGFkMmFlYzYy
M2JmZjU4NDRkNTQ1YjQxZGU2ZTBjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZWN1cml0eU9yaWdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdp
bi5jcHAKQEAgLTc5LDYgKzc5LDE4IEBAIFNlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9yaWdpbihj
b25zdCBLVVJMJiB1cmwsIFNhbmRib3hGbGFncyBzYW5kYm94RmxhZ3MpCiAgICAgaWYgKG1fcHJv
dG9jb2wgPT0gImFib3V0IiB8fCBtX3Byb3RvY29sID09ICJqYXZhc2NyaXB0IikKICAgICAgICAg
bV9wcm90b2NvbCA9ICIiOwogCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAgIGlmIChtX3By
b3RvY29sID09ICJmaWxlc3lzdGVtIikgeworICAgICAgICBLVVJMIG9yaWdpblVSTChQYXJzZWRV
UkxTdHJpbmcsIHVybC5wYXRoKCkpOworICAgICAgICBpZiAob3JpZ2luVVJMLmlzVmFsaWQoKSkg
eworICAgICAgICAgICAgbV9wcm90b2NvbCA9IG9yaWdpblVSTC5wcm90b2NvbCgpLmxvd2VyKCk7
CisgICAgICAgICAgICBtX2hvc3QgPSBvcmlnaW5VUkwuaG9zdCgpLmxvd2VyKCk7CisgICAgICAg
ICAgICBtX3BvcnQgPSBvcmlnaW5VUkwucG9ydCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1faXNVbmlxdWUgPSB0cnVlOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gRm9yIGVkZ2Ug
Y2FzZSBVUkxzIHRoYXQgd2VyZSBwcm9iYWJseSBtaXNwYXJzZWQsIG1ha2Ugc3VyZSB0aGF0IHRo
ZSBvcmlnaW4gaXMgdW5pcXVlLgogICAgIGlmIChzY2hlbWVSZXF1aXJlc0F1dGhvcml0eShtX3By
b3RvY29sKSAmJiBtX2hvc3QuaXNFbXB0eSgpKQogICAgICAgICBtX2lzVW5pcXVlID0gdHJ1ZTsK
QEAgLTMxMCwxMSArMzIyLDggQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuRGlzcGxheShjb25z
dCBLVVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHByb3RvY29sID0gdXJsLnByb3RvY29s
KCkubG93ZXIoKTsKIAotI2lmIEVOQUJMRShCTE9CKQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
Z2VuZXJhbGl6ZSB0aGlzIGNoZWNrLgotICAgIGlmIChwcm90b2NvbCA9PSBCbG9iVVJMOjpibG9i
UHJvdG9jb2woKSkKKyAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OmNhbkRpc3BsYXlPbmx5SWZDYW5S
ZXF1ZXN0KHByb3RvY29sKSkKICAgICAgICAgcmV0dXJuIGNhblJlcXVlc3QodXJsKTsKLSNlbmRp
ZgogCiAgICAgaWYgKFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzRGlzcGxh
eUlzb2xhdGVkKHByb3RvY29sKSkKICAgICAgICAgcmV0dXJuIG1fcHJvdG9jb2wgPT0gcHJvdG9j
b2wgfHwgaXNBY2Nlc3NUb1VSTFdoaXRlTGlzdGVkKHVybCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcAppbmRleCBiODVhNDg3ZmI2MWNmNzY2YjliMGI4ZjQ5
NzJmNDY3OTNhZTE5YzZhLi5iMWEzZmUyMjkyODU4YzQ4YzFjZTViN2Q5ZWM0MmZiYjkyZTkzNmNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAKQEAgLTQ2
LDcgKzQ2LDcgQEAgYm9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBBc3luY0ZpbGVTeXN0
ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmKQorUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IEFz
eW5jRmlsZVN5c3RlbTo6Y3JlYXRlKFR5cGUsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBBc3luY0Zp
bGVTeXN0ZW06Om9wZW5GaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0
cmluZyYgc3RvcmEKICAgICByb290UGF0aCArPSB0eXBlU3RyaW5nOwogICAgIHJvb3RQYXRoLmFw
cGVuZChQbGF0Zm9ybUZpbGVQYXRoU2VwYXJhdG9yKTsKIAotICAgIGNhbGxiYWNrcy0+ZGlkT3Bl
bkZpbGVTeXN0ZW0obmFtZSwgQXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUocm9vdFBhdGgpKTsKKyAg
ICBjYWxsYmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIEFzeW5jRmlsZVN5c3RlbTo6Y3Jl
YXRlKHR5cGUsIHJvb3RQYXRoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Bc3luY0ZpbGVTeXN0ZW0uaAppbmRleCBjMzRhNjQ0ZDVkZDJjM2ZiMDY5YjQzZTYzYzkzYjFi
OTdmYzRiNTJhLi5mNTIwN2NlM2UyMGMwODYyOTEzODYzODM2OGJlZDIzZmU4NjBmYWRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaApAQCAtNjUsNyArNjUsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHdhaXRGb3JPcGVyYXRpb25Ub0NvbXBsZXRlKCkg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgcGxh
dGZvcm0tc3BlY2lmaWMgQXN5bmNGaWxlU3lzdGVtIGluc3RhbmNlIGlmIHRoZSBwbGF0Zm9ybSBo
YXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbi4KLSAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoKTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShUeXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQ
YXRoKTsKIAogICAgIC8vIE9wZW5zIGEgbmV3IGZpbGUgc3lzdGVtLiBUaGUgY3JlYXRlIHBhcmFt
ZXRlciBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gY3JlYXRlIHRoZSBwYXRoIGlmIGl0IGRv
ZXMgbm90IGFscmVhZHkgZXhpc3RzLgogICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtKGNv
bnN0IFN0cmluZyYgYmFzZVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmFnZUlkZW50aWZpZXIsIFR5
cGUsIGJvb2wgY3JlYXRlLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwpA
QCAtMTMyLDEyICsxMzIsMTYgQEAgcHVibGljOgogICAgIC8vIEdldHRlciBmb3IgdGhpcyBmaWxl
IHN5c3RlbSdzIHJvb3QgcGF0aC4KICAgICBTdHJpbmcgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGxhdGZvcm1Sb290UGF0aDsgfQogCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisKIHByb3RlY3RlZDoKLSAgICBBc3luY0ZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBw
bGF0Zm9ybVJvb3RQYXRoKQotICAgICAgICA6IG1fcGxhdGZvcm1Sb290UGF0aChwbGF0Zm9ybVJv
b3RQYXRoKQorICAgIEFzeW5jRmlsZVN5c3RlbShUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgcGxh
dGZvcm1Sb290UGF0aCkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX3BsYXRm
b3JtUm9vdFBhdGgocGxhdGZvcm1Sb290UGF0aCkKICAgICB7CiAgICAgfQogCisgICAgVHlwZSBt
X3R5cGU7CiAgICAgU3RyaW5nIG1fcGxhdGZvcm1Sb290UGF0aDsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcAppbmRleCAwYTdjYjhjZjRiOWZkY2EwZjVl
ZmQxZGYzM2YyZmZhZjc1ZGJiMTJlLi5iMWRhZGZlZDA5OWUyMmM0Y2I2NTk1N2FhZjAwZDMxNDRm
Nzc0MTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3Ry
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCkBA
IC04Niw2ICs4NiwyNCBAQCBzdGF0aWMgVVJMU2NoZW1lc01hcCYgZW1wdHlEb2N1bWVudFNjaGVt
ZXMoKQogICAgIHJldHVybiBlbXB0eURvY3VtZW50U2NoZW1lczsKIH0KIAorc3RhdGljIFVSTFNj
aGVtZXNNYXAmIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcygpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChVUkxTY2hlbWVzTWFwLCBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVz
dFNjaGVtZXMsICgpKTsKKworI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9TWVNURU0p
CisgICAgaWYgKGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcy5pc0VtcHR5KCkpIHsK
KyNpZiBFTkFCTEUoQkxPQikKKyAgICAgICAgY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hl
bWVzLmFkZCgiYmxvYiIpOworI2VuZGlmCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAgICAg
ICBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVtZXMuYWRkKCJmaWxlc3lzdGVtIik7Cisj
ZW5kaWYKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RF
TSkKKworICAgIHJldHVybiBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVtZXM7Cit9CisK
IHZvaWQgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJp
bmcmIHNjaGVtZSkKIHsKICAgICBsb2NhbFVSTFNjaGVtZXMoKS5hZGQoc2NoZW1lKTsKQEAgLTE1
Niw0ICsxNzQsMTQgQEAgYm9vbCBTY2hlbWVSZWdpc3RyeTo6c2hvdWxkTG9hZFVSTFNjaGVtZUFz
RW1wdHlEb2N1bWVudChjb25zdCBTdHJpbmcmIHNjaGVtZSkKICAgICByZXR1cm4gZW1wdHlEb2N1
bWVudFNjaGVtZXMoKS5jb250YWlucyhzY2hlbWUpOwogfQogCitib29sIFNjaGVtZVJlZ2lzdHJ5
OjpjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAg
ICByZXR1cm4gY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzKCkuY29udGFpbnMoc2No
ZW1lKTsKK30KKwordm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJBc0NhbkRpc3BsYXlPbmx5
SWZDYW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworICAgIGNhbkRpc3BsYXlPbmx5
SWZDYW5SZXF1ZXN0U2NoZW1lcygpLmFkZChzY2hlbWUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3Ry
eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAppbmRleCA1MzBm
Y2FiMWQwYzc3YzkwN2VhNDUxYmVlMDk5NDNmY2E1MjhmMDMxLi5jOWNiNDc2YTAzZmYxYTYzNmZj
ZDVkYTY3MTExZGVmMzUzNDk3MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY2hlbWVSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJl
Z2lzdHJ5LmgKQEAgLTU4LDYgKzU4LDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRp
YyBib29sIHNob3VsZExvYWRVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQoY29uc3QgU3RyaW5nJik7
CisKKyAgICAvLyBTdWNoIHNjaGVtZXMgc2hvdWxkIGRlbGVnYXRlIHRvIFNlY3VyaXR5T3JpZ2lu
OjpjYW5SZXF1ZXN0IGZvciBhbnkgVVJMCisgICAgLy8gcGFzc2VkIHRvIFNlY3VyaXR5T3JpZ2lu
OjpjYW5EaXNwbGF5LgorICAgIHN0YXRpYyBib29sIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0
KGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckFzQ2FuRGlz
cGxheU9ubHlJZkNhblJlcXVlc3QoY29uc3QgU3RyaW5nJiBzY2hlbWUpOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjM2M1YmJhZjY3
MDVhZjc4ODdiOWEyZDI2MDE1ZjNiNTNiMzAzMjAwLi4zNmQ5OWZhNTE2YmJmNmU1YjU5NWEzNjEx
YTNjYTdjODk1Y2Y4OGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2
IEBACisyMDExLTAyLTAxICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hZGUgRmlsZVN5c3Rl
bSB0eXBlIGF2YWlsYWJsZSB0byBET00gY29kZSBpbiBvcmRlciB0byBpbXBsZW1lbnQgRW50cnku
dG9VUkkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUz
NTI5CisKKyAgICAgICAgKiBzcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OkFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtKToKKyAgICAgICAgKiBzcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAqIHNy
Yy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEZp
bGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5
c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0pOgorICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsOjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRPcGVuRmlsZVN5c3RlbSk6CisgICAgICAgICogc3Jj
L1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmg6CisgICAgICAgICogc3JjL1dvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckFzeW5jRmls
ZVN5c3RlbUNocm9taXVtOjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSk6CisgICAgICAg
ICogc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKToKKwogMjAxMS0wMS0zMSAg
Q2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEplcmVteSBPcmxvdy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fz
eW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fz
eW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCA1OTc1ZTcyNDNkMzQ1ODIyZWZhYTE4Nzlk
NGMyOGZmNGFkNTM2NGE3Li5lZjFmNjE2NzFjODdkOTAxZGEzNDAwOTI2NTAxYjM1YmRiYzk4ZmE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lz
dGVtQ2hyb21pdW0uY3BwCkBAIC01MCw4ICs1MCw4IEBAIGJvb2wgQXN5bmNGaWxlU3lzdGVtOjpp
c0F2YWlsYWJsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShjb25zdCBTdHJpbmcmIHJvb3RQYXRoKQotICAg
IDogQXN5bmNGaWxlU3lzdGVtKHJvb3RQYXRoKQorQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OkFz
eW5jRmlsZVN5c3RlbUNocm9taXVtKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBT
dHJpbmcmIHJvb3RQYXRoKQorICAgIDogQXN5bmNGaWxlU3lzdGVtKHR5cGUsIHJvb3RQYXRoKQog
ICAgICwgbV93ZWJGaWxlU3lzdGVtKFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmZpbGVTeXN0ZW0o
KSkKIHsKICAgICBBU1NFUlQobV93ZWJGaWxlU3lzdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCmluZGV4IDYyMDU2MDli
OTg2Y2EwNDhmZDk5MGRmOTRjNDU1N2MyYzIwZjlkZGEuLmRhOThhMzMxYjk3N2UwYjc4ZjU1MWIz
YjA1OGUyZDBkY2RkNGExMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaApAQCAtNDYsOSArNDYsOSBAQCBjbGFzcyBBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3M7CiAKIGNsYXNzIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtIDog
cHVibGljIEFzeW5jRmlsZVN5c3RlbSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
QXN5bmNGaWxlU3lzdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiByb290UGF0aCkKKyAgICBzdGF0
aWMgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShBc3luY0ZpbGVTeXN0ZW06OlR5
cGUgdHlwZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0ocm9vdFBhdGgpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSh0eXBlLCByb290UGF0
aCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKCk7CkBA
IC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlV3JpdGVyKEFz
eW5jRmlsZVdyaXRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQg
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oY29uc3QgU3RyaW5nJiByb290UGF0aCk7CisgICAgQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0oQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBjb25zdCBTdHJpbmcm
IHJvb3RQYXRoKTsKICAgICBXZWJLaXQ6OldlYkZpbGVTeXN0ZW0qIG1fd2ViRmlsZVN5c3RlbTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5
c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5
c3RlbUNocm9taXVtLmNwcAppbmRleCBhOWM2MWQwZDRmZDA1NWVjNjU2ZTBjZGRjMWY2MTlmOGRh
OTQ5NWViLi5hZTJlYjFkYzBmNjgwMzNlNGU4MTY2NzIzNmE4YWY0MTcyMzA5OGJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5
c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTCiAgICAgQVNT
RVJUKGNvbnRleHQgJiYgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwogICAgIFdlYkZyYW1lSW1w
bCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7
Ci0gICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGlj
X2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIGZhbHNlLCBuZXcgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CisgICAgd2ViRnJhbWUtPmNsaWVudCgp
LT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlw
ZT4odHlwZSksIHNpemUsIGZhbHNlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2Fs
bGJhY2tzLCB0eXBlKSk7CiB9CiAKIHZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0RmlsZVN5
c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5
cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCkBAIC03MSwxMiArNzEsMTIgQEAgdm9p
ZCBMb2NhbEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIEFzeW5jRmkKICAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAg
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4
dCk7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21G
cmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+b3Bl
bkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5
cGUpLCBzaXplLCB0cnVlLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
KSk7CisgICAgICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUs
IHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCB0cnVlLCBuZXcg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdv
cmtlckNvbnRleHQqPihjb250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtl
ckxvYWRlclByb3h5ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94
eSgpOwogICAgICAgICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJX
b3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOwotICAgICAgICB3ZWJXb3JrZXItPm9wZW5G
aWxlU3lzdGVtKHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBu
ZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCBjb250ZXh0LCBzeW5jaHJv
bm91cyksIHN5bmNocm9ub3VzKTsKKyAgICAgICAgd2ViV29ya2VyLT5vcGVuRmlsZVN5c3RlbShz
dGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgbmV3IFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMp
LCBzeW5jaHJvbm91cyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAKaW5kZXggNTJhNDAz
MjFkZmJkMTkxOWM2M2UwNGFmYzliODMzZTEwZGJjZmNmNC4uMGM3MWY4MDJkNTE2MzM5MDY2YjIz
YjRlMTBkMzM5ZWUxMThhNGZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcApAQCAtMzYsOCArMzYsOSBA
QAogI2luY2x1ZGUgIkFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmlsZU1l
dGFkYXRhLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUg
IldlYkZpbGVTeXN0ZW1FbnRyeS5oIgogI2luY2x1ZGUgIldlYkZpbGVJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1FbnRyeS5oIgogI2lu
Y2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDYsOCArNDcsOSBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYkZpbGVTeXN0ZW1D
YWxsYmFja3NJbXBsOjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBib29sIHN5bmNocm9ub3VzKQorV2ViRmlsZVN5c3RlbUNhbGxiYWNr
c0ltcGw6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBib29sIHN5bmNocm9ub3VzKQog
ICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc3luY2hyb25vdXMoc3luY2hyb25vdXMpCiB7CkBA
IC04NSw5ICs4Nyw5IEBAIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWRE
aXJlY3RvcnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FCiB2b2lkIFdlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsOjpkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBXZWJTdHJpbmcmIG5hbWUs
IGNvbnN0IFdlYlN0cmluZyYgcGF0aCkKIHsKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4
dC0+aXNXb3JrZXJDb250ZXh0KCkpCi0gICAgICAgIG1fY2FsbGJhY2tzLT5kaWRPcGVuRmlsZVN5
c3RlbShuYW1lLCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKG1fY29udGV4
dCwgcGF0aCwgbV9zeW5jaHJvbm91cykpOworICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZp
bGVTeXN0ZW0obmFtZSwgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZShtX2Nv
bnRleHQsIG1fdHlwZSwgcGF0aCwgbV9zeW5jaHJvbm91cykpOwogICAgIGVsc2UKLSAgICAgICAg
bV9jYWxsYmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIEFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtOjpjcmVhdGUocGF0aCkpOworICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0
ZW0obmFtZSwgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZShtX3R5cGUsIHBhdGgpKTsK
ICAgICBkZWxldGUgdGhpczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgKaW5kZXggNzVmYTJiYjk5NGYwNmU0
MjY4NDdmMDdhYjIyMmZiZWFiZjgyZjFkMi4uM2UyMTkyZTk4ZGE0NjMxYTFjMzhjZTY1NjA3OWRh
YmE5ZDEyNzMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIFdl
YkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsX2gKICNkZWZpbmUgV2ViRmlsZVN5c3RlbUNhbGxiYWNr
c0ltcGxfaAogCisjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiV2ViRmls
ZVN5c3RlbS5oIgogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFja3MuaCIKICNpbmNsdWRl
ICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00OSw3ICs1MSw3IEBA
IGNsYXNzIFdlYlN0cmluZzsKIAogY2xhc3MgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwgOiBw
dWJsaWMgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyB7CiBwdWJsaWM6Ci0gICAgV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwoUGFzc093blB0cjxXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFj
a3M+LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiA9IDAsIGJvb2wgc3luY2hyb25v
dXMgPSBmYWxzZSk7CisgICAgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoUGFzc093blB0cjxX
ZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+LCBXZWJDb3JlOjpBc3luY0ZpbGVTeXN0
ZW06OlR5cGUgPSBXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06OlRlbXBvcmFyeSwgV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogPSAwLCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOwog
ICAgIHZpcnR1YWwgfldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGlkU3VjY2VlZCgpOwpAQCAtNjEsNiArNjMsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIE93blB0cjxXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IG1fY2FsbGJhY2tz
OwogCisgICAgLy8gVXNlZCBmb3Igb3BlbkZpbGVTeXN0ZW0gY2FsbGJhY2tzLgorICAgIFdlYkNv
cmU6OkFzeW5jRmlsZVN5c3RlbTo6VHlwZSBtX3R5cGU7CisKICAgICAvLyBVc2VkIGZvciB3b3Jr
ZXIncyBvcGVuRmlsZVN5c3RlbSBjYWxsYmFja3MuCiAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogbV9jb250ZXh0OwogICAgIGJvb2wgbV9zeW5jaHJvbm91czsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtLmNwcAppbmRleCAwNThlOTQ3YTYzZWNhMTg5Y2RjMWFkMzIzY2E3MTJjMjViMTE2
OGJiLi5mYWVhNDBiMDUzNzQ0MzhkNzU0ODIyY2FjYjUwN2UyMTIzZWYxNTA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lz
dGVtQ2hyb21pdW0uY3BwCkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIGNvbnN0IGNoYXIgZmlsZVN5c3RlbU9wZXJhdGlvbnNNb2RlW10gPSAiZmlsZVN5c3Rl
bU9wZXJhdGlvbnNNb2RlIjsKIAotV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06Oldvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wgc3luY2hyb25vdXMpCi0gICAgOiBBc3luY0Zp
bGVTeXN0ZW0ocm9vdFBhdGgpCitXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6V29ya2Vy
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
QXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wg
c3luY2hyb25vdXMpCisgICAgOiBBc3luY0ZpbGVTeXN0ZW0odHlwZSwgcm9vdFBhdGgpCiAgICAg
LCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKICAgICAsIG1fd2ViRmlsZVN5c3Rl
bShXZWJLaXQ6OndlYktpdENsaWVudCgpLT5maWxlU3lzdGVtKCkpCiAgICAgLCBtX3dvcmtlckNv
bnRleHQoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmgKaW5kZXggMGI0YjcwODU0MmE5MDQzNWU5ZTllYjBlODI3ZDYzOWU1YzA3YWI0Yi4uN2Uz
MzE2YjIyYzkzM2EwMDMxZGJiMGUxNTdjYjE4MDUzOGY3N2Q4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bS5oCkBAIC01Miw5ICs1Miw5IEBAIGNsYXNzIFdvcmtlckNvbnRleHQ7CiAKIGNsYXNzIFdvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtIDogcHVibGljIEFzeW5jRmlsZVN5c3RlbSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBz
eW5jaHJvbm91cykKKyAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUg
dHlwZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJvbm91cykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0o
Y29udGV4dCwgcm9vdFBhdGgsIHN5bmNocm9ub3VzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oY29udGV4dCwgdHlwZSwgcm9vdFBh
dGgsIHN5bmNocm9ub3VzKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+V29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0oKTsKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVXcml0ZXIoQXN5bmNGaWxlV3JpdGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0
cmluZyYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKIAogcHJp
dmF0ZToKLSAgICBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJvbm91cyk7CisgICAg
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEFz
eW5jRmlsZVN5c3RlbTo6VHlwZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJv
bm91cyk7CiAKICAgICBQYXNzUmVmUHRyPFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZT4gY3JlYXRlV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80975</attachid>
            <date>2011-02-02 14:53:41 -0800</date>
            <delta_ts>2011-02-08 10:53:47 -0800</delta_ts>
            <desc>Adds test to exercise canDisplay</desc>
            <filename>bug-53529-20110202145340.patch</filename>
            <type>text/plain</type>
            <size>34254</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0ZDc4ZWJhZTM2OGVkYTBhZjEzYTg5OGM0ZTc5ZDA2MzM1MTM0NGJiLi40ZDk1YTJk
MjlhMjFiNmJhOTkxZGUxNzYzZWU4NmQ2ZWNiMGMwZDJiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTEtMDItMDIgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEFkZCBzdXBw
b3J0IGZvciBmaWxlc3lzdGVtOiBVUkkgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTI5CisKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0
ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVyaS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVyaS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGVzeXN0ZW0t
dXJpLW9yaWdpbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3Vy
Y2VzL2RpcmVjdG9yeS1lbnRyeS10by11cmkuanM6IEFkZGVkLgorICAgICAgICAoZXJyb3JDYWxs
YmFjayk6CisgICAgICAgIChlbnRyeVRvVVJJKToKKyAgICAgICAgKGNyZWF0ZVRlc3REaXJlY3Rv
cnkpOgorICAgICAgICAoKToKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2Zp
bGUtZW50cnktdG8tdXJpLmpzOiBBZGRlZC4KKyAgICAgICAgKGVycm9yQ2FsbGJhY2spOgorICAg
ICAgICAoZW50cnlUb1VSSSk6CisgICAgICAgIChjcmVhdGVUZXN0RmlsZSk6CisgICAgICAgICgp
OgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1y
ZW1vdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbDog
QWRkZWQuCisKIDIwMTEtMDEtMzEgIFNjb3R0IENhbWVyb24gIDxzY2NhbWVyb25AcmltLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0ZXMuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTEyNzMzYzk3YTFlNzk3YmMzN2E0MjE0YmQxZjlkOTFiNThk
NWQxYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJl
Y3RvcnktZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitPYnRhaW5p
bmcgVVJJIGZyb20gRGlyZWN0b3J5RW50cnkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIHRlc3REaXJlY3RvcnlVUkkgaXMgJ2ZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3Jh
cnkvdGVzdERpcmVjdG9yeScKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZGly
ZWN0b3J5LWVudHJ5LXRvLXVyaS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Rp
cmVjdG9yeS1lbnRyeS10by11cmkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWY5MWJiODI1MTFkNjM1ZmJl
YmZhMDE4NTk4Njc3YTQwN2ZiMDAxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRyeS10by11cmkuaHRtbApAQCAtMCwwICsxLDEzIEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZzLXRlc3Qt
dXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rp
cmVjdG9yeS1lbnRyeS10by11cmkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50cnktdG8tdXJpLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVy
aS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzg4NmZkNTI3YjQxNGNlMjU0MGY4MDc4ZjhjOTQ2
YTEyOGE3YThlNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3Rl
bS9maWxlLWVudHJ5LXRvLXVyaS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorT2J0YWlu
aW5nIFVSSSBmcm9tIEZpbGVFbnRyeS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1MgdGVzdEZpbGVVUkkgaXMgJ2ZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3JhcnkvdGVzdEZp
bGVFbnRyeS50eHQnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50
cnktdG8tdXJpLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10
by11cmkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZWMzNDViMWYzODliOTczMDQ1NWI5MWRiZDM2ZGFiYTBm
NDhlMjYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Zp
bGUtZW50cnktdG8tdXJpLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9mcy10ZXN0LXV0aWwuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9maWxlLWVudHJ5LXRvLXVyaS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1vcmlnaW4tZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI4ZmYzZTJkYWFlYjY5ODJiZmUwYzY3MDg4NDZlNzUyZWExOThlYWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmkt
b3JpZ2luLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxIEBACitQQVNTRUQ6IG9yaWdpbiB3YXMgaHR0
cDovL3d3dy53ZWJraXQub3JnOjgwODAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1vcmlnaW4uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1vcmlnaW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzIyMzIyMGVk
OGQwNzZhOTc2ODY1NDNiMTlhOGUyYWY4ODJjNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi5odG1sCkBAIC0wLDAg
KzEsMTMgQEAKKzxhIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGhyZWY9ImZpbGVzeXN0ZW06aHR0cDov
L3d3dy53ZWJraXQub3JnOjgwODAvdGVtcG9yYXJ5L2EvYi9jL2ZpbGUudHh0Ij5mb288L2E+Cis8
cD5UaGlzIHRleHQgc2hvdWxkIG5vdCBiZSB2aXNpYmxlLiBJdCBzaG91bGQgYmUgb3ZlcndyaXR0
ZW4gYnkgdGhlIHJ1bm5pbmcgb2YgdGhlIHRlc3QuPC9wPgorPHNjcmlwdD4KKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgdmFyIGV4cGVjdGVkT3JpZ2luID0gJ2h0dHA6Ly93d3cud2Via2l0
Lm9yZzo4MDgwJzsKKyAgICB2YXIgYWN0dWFsT3JpZ2luID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2EnKVswXS5vcmlnaW47CisgICAgdmFyIHJlc3VsdEVsdCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdwJylbMF07CisgICAgaWYgKGFjdHVhbE9yaWdpbiA9PSBleHBl
Y3RlZE9yaWdpbikKKyAgICAgICAgcmVzdWx0RWx0LmlubmVyVGV4dCA9ICdQQVNTRUQ6IG9yaWdp
biB3YXMgJyArIGV4cGVjdGVkT3JpZ2luOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0RWx0Lmlu
bmVyVGV4dCA9ICdGQUlMRUQ6IGV4cGVjdGVkIG9yaWdpbjogJyArIGV4cGVjdGVkT3JpZ2luICsg
JyBidXQgZ290OiAnICsgYWN0dWFsT3JpZ2luOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2RpcmVjdG9yeS1lbnRyeS10by11cmku
anMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2RpcmVjdG9yeS1lbnRy
eS10by11cmkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjNmYWI0ODk4ZWQ4NDY1NGY1OWYxYzU1ZDZlZDA2ZWJi
MmJjZDhmZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9y
ZXNvdXJjZXMvZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS5qcwpAQCAtMCwwICsxLDM0IEBACitpZiAo
dGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtd29ya2VyLWNvbW1v
bi5qcycpOworICAgIGltcG9ydFNjcmlwdHMoJ2ZzLXRlc3QtdXRpbC5qcycpOworfQorCitkZXNj
cmlwdGlvbigiT2J0YWluaW5nIFVSSSBmcm9tIERpcmVjdG9yeUVudHJ5LiIpOworCit2YXIgZmls
ZVN5c3RlbSA9IG51bGw7Cit2YXIgdGVzdERpcmVjdG9yeU5hbWUgPSAndGVzdERpcmVjdG9yeSc7
Cit2YXIgdGVzdERpcmVjdG9yeVVSSSA9IG51bGw7CisKK2Z1bmN0aW9uIGVycm9yQ2FsbGJhY2so
ZXJyb3IpIHsKKyAgICB0ZXN0RmFpbGVkKCJFcnJvciBvY2N1cmVkOiIgKyBlcnJvci5jb2RlKTsK
KyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gZW50cnlUb1VSSShlbnRyeSkgewor
ICAgIHRlc3REaXJlY3RvcnlVUkkgPSBlbnRyeS50b1VSSSgpOworICAgIHNob3VsZEJlKCJ0ZXN0
RGlyZWN0b3J5VVJJIiwgIidmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5L3Rlc3REaXJlY3Rv
cnknIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRlc3REaXJl
Y3RvcnkoKSB7CisgICAgZmlsZVN5c3RlbS5yb290LmdldERpcmVjdG9yeSh0ZXN0RGlyZWN0b3J5
TmFtZSwge2NyZWF0ZTp0cnVlfSwgZW50cnlUb1VSSSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK2Z1
bmN0aW9uIGZpbGVTeXN0ZW1DYWxsYmFjayhmcykgeworICAgIGZpbGVTeXN0ZW0gPSBmczsKKyAg
ICByZW1vdmVBbGxJbkRpcmVjdG9yeShmaWxlU3lzdGVtLnJvb3QsIGNyZWF0ZVRlc3REaXJlY3Rv
cnksIGVycm9yQ2FsbGJhY2spOworfQorCit2YXIganNUZXN0SXNBc3luYyA9IHRydWU7CityZXF1
ZXN0RmlsZVN5c3RlbShURU1QT1JBUlksIDEwMCwgZmlsZVN5c3RlbUNhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKTsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVudHJ5LXRvLXVyaS5qcyBi
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS1lbnRyeS10by11cmku
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmI4MmFlMzBmOGRmMWU2OGY2M2ZiYjI1NWNiMDc1NzdlMDRhYmY0NQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMv
ZmlsZS1lbnRyeS10by11cmkuanMKQEAgLTAsMCArMSwzNCBAQAoraWYgKHRoaXMuaW1wb3J0U2Ny
aXB0cykgeworICAgIGltcG9ydFNjcmlwdHMoJ2ZzLXdvcmtlci1jb21tb24uanMnKTsKKyAgICBp
bXBvcnRTY3JpcHRzKCdmcy10ZXN0LXV0aWwuanMnKTsKK30KKworZGVzY3JpcHRpb24oIk9idGFp
bmluZyBVUkkgZnJvbSBGaWxlRW50cnkuIik7CisKK3ZhciBmaWxlU3lzdGVtID0gbnVsbDsKK3Zh
ciB0ZXN0RmlsZU5hbWUgPSAndGVzdEZpbGVFbnRyeS50eHQnOwordmFyIHRlc3RGaWxlVVJJID0g
bnVsbDsKKworZnVuY3Rpb24gZXJyb3JDYWxsYmFjayhlcnJvcikgeworICAgIHRlc3RGYWlsZWQo
IkVycm9yIG9jY3VyZWQ6IiArIGVycm9yLmNvZGUpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQor
CitmdW5jdGlvbiBlbnRyeVRvVVJJKGVudHJ5KSB7CisgICAgdGVzdEZpbGVVUkkgPSBlbnRyeS50
b1VSSSgpOworICAgIHNob3VsZEJlKCJ0ZXN0RmlsZVVSSSIsICInZmlsZXN5c3RlbTpmaWxlOi8v
L3RlbXBvcmFyeS90ZXN0RmlsZUVudHJ5LnR4dCciKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
KworZnVuY3Rpb24gY3JlYXRlVGVzdEZpbGUoKSB7CisgICAgZmlsZVN5c3RlbS5yb290LmdldEZp
bGUodGVzdEZpbGVOYW1lLCB7Y3JlYXRlOnRydWV9LCBlbnRyeVRvVVJJLCBlcnJvckNhbGxiYWNr
KTsKK30KKworZnVuY3Rpb24gZmlsZVN5c3RlbUNhbGxiYWNrKGZzKSB7CisgICAgZmlsZVN5c3Rl
bSA9IGZzOworICAgIHJlbW92ZUFsbEluRGlyZWN0b3J5KGZpbGVTeXN0ZW0ucm9vdCwgY3JlYXRl
VGVzdEZpbGUsIGVycm9yQ2FsbGJhY2spOworfQorCit2YXIganNUZXN0SXNBc3luYyA9IHRydWU7
CityZXF1ZXN0RmlsZVN5c3RlbShURU1QT1JBUlksIDEwMCwgZmlsZVN5c3RlbUNhbGxiYWNrLCBl
cnJvckNhbGxiYWNrKTsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9t
LXJlbW90ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Zp
bGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGY0
YWZkNmU1NjY5ZjU1YTVjNDNkNDMwMTk3MDJlMWM0ZTY4YjQwCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJl
bW90ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
MDogTm90IGFsbG93ZWQgdG8gbG9hZCBsb2NhbCByZXNvdXJjZTogZmlsZXN5c3RlbTpodHRwOi8v
bG9jYWxob3N0OjgwMDAvdGVtcG9yYXJ5L3BhZ2UuaHRtbAorVGhpcyB0ZXN0IGlzIHRvIHNlZSBp
ZiBhIHJlbW90ZSBmaWxlIGNhbiBpbmNsdWRlIGEgbG9jYWwgcGFnZSB2aWEgYSBmaWxlc3lzdGVt
OiBVUkkgaW4gYW4gaUZyYW1lLgorCitUZXN0IFBhc3NlZC4gTG9jYWwgcGFnZSBub3QgcmVtb3Rl
bHkgbG9hZGVkIGludG8gaUZyYW1lLgorICAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xZGNkZjRiNDc4NWMyZTgxMGMxMDFmNzQ1OGFlODMyNDhiZmU3NTRi
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9maWxl
c3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzxodG1sPiA8
aGVhZD4KKyAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBkb25lKCkgeworICAgICAgICAg
ICAgdmFyIHBhZ2VMb2NhdGlvbiA9ICJmaWxlc3lzdGVtOmh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC90
ZW1wb3JhcnkvcGFnZS5odG1sIjsKKyAgICAgICAgICAgIHZhciBsb2NhbElmcmFtZUVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgICAgICAgIGxvY2FsSWZy
YW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIiwgIm15RnJhbWUiKTsKKyAgICAgICAgICAgIGxv
Y2FsSWZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInNyYyIsIHBhZ2VMb2NhdGlvbik7CisgICAg
ICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvY2FsSWZyYW1lRWxlbWVudCk7CisK
KyAgICAgICAgICAgIHZhciByZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0
Iik7CisgICAgICAgICAgICB2YXIgbXlGcmFtZURvY3VtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm15RnJhbWUiKS5jb250ZW50RG9jdW1lbnQ7CisgICAgICAgICAgICBpZiAobXlGcmFt
ZURvY3VtZW50KQorICAgICAgICAgICAgICAgIHJlc3VsdC5pbm5lckhUTUwgPSAiVGVzdCBGYWls
ZWQ6IExvY2FsIHBhZ2UgcmVtb3RlbHkgbG9hZGVkIGludG8gaUZyYW1lLiI7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LmlubmVySFRNTCA9ICJUZXN0IFBhc3NlZC4g
TG9jYWwgcGFnZSBub3QgcmVtb3RlbHkgbG9hZGVkIGludG8gaUZyYW1lLiI7CisKKyAgICAgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTmVlZCB0byB3YWl0IGZvciB0aGUgaWZy
YW1lIHRvIGRvIGl0cyBhc3luYyB3b3JrLgorICAgICAgICAgICAgc2V0VGltZW91dChkb25lLCAx
MDAwKTsKKyAgICAgICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8
ZGl2IGlkPSJkaXYwIj4KKyAgICAgICAgVGhpcyB0ZXN0IGlzIHRvIHNlZSBpZiBhIHJlbW90ZSBm
aWxlIGNhbiBpbmNsdWRlIGEgbG9jYWwgcGFnZSB2aWEgYSBmaWxlc3lzdGVtOiBVUkkgaW4gYW4g
aUZyYW1lLgorICAgIDwvZGl2PgorICAgIDxicj4KKyAgICA8ZGl2IGlkPSJyZXN1bHQiPgorICAg
ICAgICBUZXN0IG5vdCBydW4gY29ycmVjdGx5LgorICAgIDwvZGl2PgorICAgIDxpZnJhbWUgc3Jj
PSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lz
dGVtLWZpbGUuaHRtbCIgb25sb2FkPSJydW5UZXN0KCkiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJj
ZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS9yZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU5MjRhYjcyNTljOTg3NDI3YjE4N2FmMTQ1MTE1OGJhNzA2ODY0OTEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUtZmls
ZXN5c3RlbS1maWxlLmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8
c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBjcmVhdGVGaWxlKCkgeworICAgICAgICAgICAgcmVx
dWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCAxMDAsIGZ1bmN0aW9uKGZzKSB7CisgICAgICAgICAg
ICAgICAgZnMucm9vdC5nZXRGaWxlKCJwYWdlLmh0bWwiLCB7Y3JlYXRlOnRydWV9LCBmdW5jdGlv
bihlbnRyeSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeS5jcmVhdGVXcml0ZXIoZnVuY3Rp
b24od3JpdGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmIgPSBuZXcgQmxvYkJ1
aWxkZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmFwcGVuZCgnPGRpdiBpZD0iaW5u
ZXJEaXYiPlZpc2libGUgQ29udGVudHM8L2Rpdj5cbicpOworICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLndyaXRlKGJiLmdldEJsb2IoKSk7CisgICAgICAgICAgICAgICAgICAgIH0pCisg
ICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkKKyAgICAgICAgICAgIGNyZWF0ZUZpbGUoKTsK
KyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMzM3ZmJhOGY4
ZTI0ZDE3ODNmZDdlZjJhZDFkMWU3YzdlMWYzNzZiLi43OThkZjBjZTI4ZDhlNDc0NzYyNjU0M2Rk
MDdjOTUzNGNlMjE1OWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDItMDIg
IEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEFkZCBzdXBwb3J0IGZvciBmaWxl
c3lzdGVtOiBVUkkgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUzNTI5CisKKyAgICAgICAgVGVzdHM6IGZhc3QvZmlsZXN5c3RlbS9kaXJl
Y3RvcnktZW50cnktdG8tdXJpLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZmlsZXN5c3RlbS9m
aWxlLWVudHJ5LXRvLXVyaS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2ZpbGVzeXN0ZW0vZmls
ZXN5c3RlbS11cmktb3JpZ2luLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJp
dHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbAorCisgICAgICAgICogZmlsZWFw
aS9FbnRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbnRyeTo6dG9VUkkpOgorICAgICAgICAq
IGZpbGVhcGkvRW50cnkuaDoKKyAgICAgICAgKiBmaWxlYXBpL0VudHJ5LmlkbDoKKyAgICAgICAg
KiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luOjpTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6
Y2FuRGlzcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jRmlsZVN5c3RlbTo6b3BlbkZpbGVTeXN0ZW0pOgorICAgICAgICAqIHBsYXRmb3Jt
L0FzeW5jRmlsZVN5c3RlbS5oOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjp0
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6QXN5bmNGaWxlU3lzdGVt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVtZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NoZW1lUmVnaXN0cnk6OmNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlckFzQ2FuRGlzcGxheU9ubHlJZkNhblJl
cXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5Lmg6CisKIDIwMTEtMDEt
MzEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0VudHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuY3BwCmluZGV4IDljM2Zh
NGVlZjhhZWNlZTk4YTgxYWY5YTYyNDU0MjBhYWYyYTJjMWIuLjUzY2Q1NzZhMWM3NzE3MDdkODRi
N2U4ZTdiZjA5OTNmMWZlNTllMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RW50cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuY3BwCkBAIC0zMiwx
MyArMzIsMTcgQEAKIAogI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKIAorI2luY2x1ZGUgIkFzeW5j
RmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkRpcmVjdG9yeUVudHJ5LmgiCiAjaW5jbHVkZSAiRW50
cnlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKICNpbmNsdWRlICJGaWxl
RXJyb3IuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiTWV0
YWRhdGFDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC04MiwxMSArODYsMTUgQEAgdm9pZCBFbnRyeTo6Z2V0UGFyZW50KFBhc3NSZWZQdHI8RW50
cnlDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm8KICAgICAgICAgZmls
ZXN5c3RlbSgpLT5zY2hlZHVsZUNhbGxiYWNrKGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBGaWxl
RXJyb3I6OmNyZWF0ZShGaWxlRXJyb3I6OklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUikpOwogfQog
Ci1TdHJpbmcgRW50cnk6OnRvVVJJKGNvbnN0IFN0cmluZyYpCitTdHJpbmcgRW50cnk6OnRvVVJJ
KCkKIHsKLSAgICAvLyBGSVhNRTogdG8gYmUgaW1wbGVtZW50ZWQuCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIFN0cmluZ0J1aWxkZXIgdXJpQnVp
bGRlcjsKKyAgICB1cmlCdWlsZGVyLmFwcGVuZCgiZmlsZXN5c3RlbToiKTsKKyAgICB1cmlCdWls
ZGVyLmFwcGVuZChmaWxlc3lzdGVtKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CisgICAgdXJpQnVpbGRlci5hcHBlbmQoIi8iKTsKKyAg
ICB1cmlCdWlsZGVyLmFwcGVuZChtX2ZpbGVTeXN0ZW0tPmFzeW5jRmlsZVN5c3RlbSgpLT50eXBl
KCkgPT0gQXN5bmNGaWxlU3lzdGVtOjpUZW1wb3JhcnkgPyAidGVtcG9yYXJ5IiA6ICJwZXJzaXN0
ZW50Iik7CisgICAgdXJpQnVpbGRlci5hcHBlbmQobV9mdWxsUGF0aCk7CisgICAgcmV0dXJuIHVy
aUJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5oIGIvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9FbnRyeS5oCmluZGV4IDkzNjdmNGYzMDJhNGQ3YTUwOTA0MzljNzViNjAzODIyNjhjNDAy
M2MuLmQ4NzEyNjI0MGU1OTFiYTJkMmViZTMxNzgxZTg2OTk2Nzc2MjQ2MDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0VudHJ5LmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlKFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSAwLCBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSAwKSBjb25zdDsKICAgICB2b2lkIGdldFBhcmVu
dChQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IDAsIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IDApIGNvbnN0OwogCi0gICAgU3RyaW5n
IHRvVVJJKGNvbnN0IFN0cmluZyYgbWltZVR5cGUgPSBTdHJpbmcoKSk7CisgICAgU3RyaW5nIHRv
VVJJKCk7CiAKIHByb3RlY3RlZDoKICAgICBFbnRyeShQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW1C
YXNlPiwgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0VudHJ5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuaWRsCmlu
ZGV4IGY2ZmNkYjNiNGVhODY0OWYzZDhkOTdkM2E5MTA0MjNiNGM3MWY5NzAuLmYxNDRiMzFlYjJl
OTQwZTg4MzVmM2EwODkyOGRiZjI4ZmIwODU3ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRW50cnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuaWRs
CkBAIC00Myw2ICs0Myw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgdm9pZCBnZXRNZXRh
ZGF0YShpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBNZXRhZGF0YUNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjaywgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNr
KTsKICAgICAgICAgdm9pZCBtb3ZlVG8oaW4gRGlyZWN0b3J5RW50cnkgcGFyZW50LCBpbiBbT3B0
aW9uYWwsIENvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBuYW1l
LCBpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywg
aW4gW09wdGlvbmFsLCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAg
ICAgICAgdm9pZCBjb3B5VG8oaW4gRGlyZWN0b3J5RW50cnkgcGFyZW50LCBpbiBbT3B0aW9uYWws
IENvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBuYW1lLCBpbiBb
T3B0aW9uYWwsIENhbGxiYWNrXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW09w
dGlvbmFsLCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKKyAgICAgICAg
RE9NU3RyaW5nIHRvVVJJKCk7CiAgICAgICAgIHZvaWQgcmVtb3ZlKGluIFtPcHRpb25hbCwgQ2Fs
bGJhY2tdIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJh
Y2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CiAgICAgICAgIHZvaWQgZ2V0UGFyZW50
KGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVudHJ5Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBp
biBbT3B0aW9uYWwsIENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwogICAg
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCmluZGV4IDc4OWZkZjkzOTMy
NzJjMmZlZjJiZDVlYmM2YThiZmE4ZGY4ZGIzMDMuLjlmYjg0NzY3ZWRhZDJhZWM2MjNiZmY1ODQ0
ZDU0NWI0MWRlNmUwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlP
cmlnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCkBA
IC03OSw2ICs3OSwxOCBAQCBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29uc3QgS1VS
TCYgdXJsLCBTYW5kYm94RmxhZ3Mgc2FuZGJveEZsYWdzKQogICAgIGlmIChtX3Byb3RvY29sID09
ICJhYm91dCIgfHwgbV9wcm90b2NvbCA9PSAiamF2YXNjcmlwdCIpCiAgICAgICAgIG1fcHJvdG9j
b2wgPSAiIjsKIAorI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICBpZiAobV9wcm90b2NvbCA9
PSAiZmlsZXN5c3RlbSIpIHsKKyAgICAgICAgS1VSTCBvcmlnaW5VUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmwucGF0aCgpKTsKKyAgICAgICAgaWYgKG9yaWdpblVSTC5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgICAgIG1fcHJvdG9jb2wgPSBvcmlnaW5VUkwucHJvdG9jb2woKS5sb3dlcigpOworICAgICAg
ICAgICAgbV9ob3N0ID0gb3JpZ2luVVJMLmhvc3QoKS5sb3dlcigpOworICAgICAgICAgICAgbV9w
b3J0ID0gb3JpZ2luVVJMLnBvcnQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2lz
VW5pcXVlID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIEZvciBlZGdlIGNhc2UgVVJM
cyB0aGF0IHdlcmUgcHJvYmFibHkgbWlzcGFyc2VkLCBtYWtlIHN1cmUgdGhhdCB0aGUgb3JpZ2lu
IGlzIHVuaXF1ZS4KICAgICBpZiAoc2NoZW1lUmVxdWlyZXNBdXRob3JpdHkobV9wcm90b2NvbCkg
JiYgbV9ob3N0LmlzRW1wdHkoKSkKICAgICAgICAgbV9pc1VuaXF1ZSA9IHRydWU7CkBAIC0zMTAs
MTEgKzMyMiw4IEBAIGJvb2wgU2VjdXJpdHlPcmlnaW46OmNhbkRpc3BsYXkoY29uc3QgS1VSTCYg
dXJsKSBjb25zdAogewogICAgIFN0cmluZyBwcm90b2NvbCA9IHVybC5wcm90b2NvbCgpLmxvd2Vy
KCk7CiAKLSNpZiBFTkFCTEUoQkxPQikKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGdlbmVyYWxp
emUgdGhpcyBjaGVjay4KLSAgICBpZiAocHJvdG9jb2wgPT0gQmxvYlVSTDo6YmxvYlByb3RvY29s
KCkpCisgICAgaWYgKFNjaGVtZVJlZ2lzdHJ5OjpjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChw
cm90b2NvbCkpCiAgICAgICAgIHJldHVybiBjYW5SZXF1ZXN0KHVybCk7Ci0jZW5kaWYKIAogICAg
IGlmIChTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRl
ZChwcm90b2NvbCkpCiAgICAgICAgIHJldHVybiBtX3Byb3RvY29sID09IHByb3RvY29sIHx8IGlz
QWNjZXNzVG9VUkxXaGl0ZUxpc3RlZCh1cmwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Fz
eW5jRmlsZVN5c3RlbS5jcHAKaW5kZXggYjg1YTQ4N2ZiNjFjZjc2NmI5YjBiOGY0OTcyZjQ2Nzkz
YWUxOWM2YS4uYjFhM2ZlMjI5Mjg1OGM0OGMxY2U1YjdkOWVjNDJmYmI5MmU5MzZjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCkBAIC00Niw3ICs0Niw3
IEBAIGJvb2wgQXN5bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1QYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gQXN5bmNGaWxlU3lzdGVtOjpjcmVh
dGUoY29uc3QgU3RyaW5nJikKK1Bhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBBc3luY0ZpbGVT
eXN0ZW06OmNyZWF0ZShUeXBlLCBjb25zdCBTdHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgcmV0dXJuIDA7CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQXN5bmNGaWxlU3lzdGVt
OjpvcGVuRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIGJhc2VQYXRoLCBjb25zdCBTdHJpbmcmIHN0
b3JhCiAgICAgcm9vdFBhdGggKz0gdHlwZVN0cmluZzsKICAgICByb290UGF0aC5hcHBlbmQoUGxh
dGZvcm1GaWxlUGF0aFNlcGFyYXRvcik7CiAKLSAgICBjYWxsYmFja3MtPmRpZE9wZW5GaWxlU3lz
dGVtKG5hbWUsIEFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRlKHJvb3RQYXRoKSk7CisgICAgY2FsbGJh
Y2tzLT5kaWRPcGVuRmlsZVN5c3RlbShuYW1lLCBBc3luY0ZpbGVTeXN0ZW06OmNyZWF0ZSh0eXBl
LCByb290UGF0aCkpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNG
aWxlU3lzdGVtLmgKaW5kZXggYzM0YTY0NGQ1ZGQyYzNmYjA2OWI0M2U2M2M5M2IxYjk3ZmM0YjUy
YS4uZjUyMDdjZTNlMjBjMDg2MjkxMzg2MzgzNjhiZWQyM2ZlODYwZmFkZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmgKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCB3YWl0Rm9yT3BlcmF0aW9uVG9Db21wbGV0ZSgpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICAvLyBDcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IHBsYXRmb3JtLXNw
ZWNpZmljIEFzeW5jRmlsZVN5c3RlbSBpbnN0YW5jZSBpZiB0aGUgcGxhdGZvcm0gaGFzIGl0cyBv
d24gaW1wbGVtZW50YXRpb24uCi0gICAgc3RhdGljIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVt
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiByb290UGF0aCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8
QXN5bmNGaWxlU3lzdGVtPiBjcmVhdGUoVHlwZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCk7CiAK
ICAgICAvLyBPcGVucyBhIG5ldyBmaWxlIHN5c3RlbS4gVGhlIGNyZWF0ZSBwYXJhbWV0ZXIgc3Bl
Y2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSB0aGUgcGF0aCBpZiBpdCBkb2VzIG5vdCBh
bHJlYWR5IGV4aXN0cy4KICAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbShjb25zdCBTdHJp
bmcmIGJhc2VQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VJZGVudGlmaWVyLCBUeXBlLCBib29s
IGNyZWF0ZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKQEAgLTEzMiwx
MiArMTMyLDE2IEBAIHB1YmxpYzoKICAgICAvLyBHZXR0ZXIgZm9yIHRoaXMgZmlsZSBzeXN0ZW0n
cyByb290IHBhdGguCiAgICAgU3RyaW5nIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3Jt
Um9vdFBhdGg7IH0KIAorICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
CiBwcm90ZWN0ZWQ6Ci0gICAgQXN5bmNGaWxlU3lzdGVtKGNvbnN0IFN0cmluZyYgcGxhdGZvcm1S
b290UGF0aCkKLSAgICAgICAgOiBtX3BsYXRmb3JtUm9vdFBhdGgocGxhdGZvcm1Sb290UGF0aCkK
KyAgICBBc3luY0ZpbGVTeXN0ZW0oVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHBsYXRmb3JtUm9v
dFBhdGgpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9wbGF0Zm9ybVJvb3RQ
YXRoKHBsYXRmb3JtUm9vdFBhdGgpCiAgICAgewogICAgIH0KIAorICAgIFR5cGUgbV90eXBlOwog
ICAgIFN0cmluZyBtX3BsYXRmb3JtUm9vdFBhdGg7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAKaW5kZXggMGE3Y2I4Y2Y0YjlmZGNhMGY1ZWZkMWRmMzNm
MmZmYWY3NWRiYjEyZS4uYjFkYWRmZWQwOTllMjJjNGNiNjU5NTdhYWYwMGQzMTQ0Zjc3NDE5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcApAQCAtODYsNiAr
ODYsMjQgQEAgc3RhdGljIFVSTFNjaGVtZXNNYXAmIGVtcHR5RG9jdW1lbnRTY2hlbWVzKCkKICAg
ICByZXR1cm4gZW1wdHlEb2N1bWVudFNjaGVtZXM7CiB9CiAKK3N0YXRpYyBVUkxTY2hlbWVzTWFw
JiBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVtZXMoKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoVVJMU2NoZW1lc01hcCwgY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVz
LCAoKSk7CisKKyNpZiBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAgIGlm
IChjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVtZXMuaXNFbXB0eSgpKSB7CisjaWYgRU5B
QkxFKEJMT0IpCisgICAgICAgIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcy5hZGQo
ImJsb2IiKTsKKyNlbmRpZgorI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICAgICAgY2FuRGlz
cGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzLmFkZCgiZmlsZXN5c3RlbSIpOworI2VuZGlmCisg
ICAgfQorI2VuZGlmIC8vIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9TWVNURU0pCisKKyAg
ICByZXR1cm4gY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzOworfQorCiB2b2lkIFNj
aGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiBzY2hl
bWUpCiB7CiAgICAgbG9jYWxVUkxTY2hlbWVzKCkuYWRkKHNjaGVtZSk7CkBAIC0xNTYsNCArMTc0
LDE0IEBAIGJvb2wgU2NoZW1lUmVnaXN0cnk6OnNob3VsZExvYWRVUkxTY2hlbWVBc0VtcHR5RG9j
dW1lbnQoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiAgICAgcmV0dXJuIGVtcHR5RG9jdW1lbnRTY2hl
bWVzKCkuY29udGFpbnMoc2NoZW1lKTsKIH0KIAorYm9vbCBTY2hlbWVSZWdpc3RyeTo6Y2FuRGlz
cGxheU9ubHlJZkNhblJlcXVlc3QoY29uc3QgU3RyaW5nJiBzY2hlbWUpCit7CisgICAgcmV0dXJu
IGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7Cit9
CisKK3ZvaWQgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyQXNDYW5EaXNwbGF5T25seUlmQ2FuUmVx
dWVzdChjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBjYW5EaXNwbGF5T25seUlmQ2FuUmVx
dWVzdFNjaGVtZXMoKS5hZGQoc2NoZW1lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmgKaW5kZXggNTMwZmNhYjFkMGM3
N2M5MDdlYTQ1MWJlZTA5OTQzZmNhNTI4ZjAzMS4uYzljYjQ3NmEwM2ZmMWE2MzZmY2Q1ZGE2NzEx
MWRlZjM1MzQ5NzI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1l
UmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5o
CkBAIC01OCw2ICs1OCwxMSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlclVS
TFNjaGVtZUFzRW1wdHlEb2N1bWVudChjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBz
aG91bGRMb2FkVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KGNvbnN0IFN0cmluZyYpOworCisgICAg
Ly8gU3VjaCBzY2hlbWVzIHNob3VsZCBkZWxlZ2F0ZSB0byBTZWN1cml0eU9yaWdpbjo6Y2FuUmVx
dWVzdCBmb3IgYW55IFVSTAorICAgIC8vIHBhc3NlZCB0byBTZWN1cml0eU9yaWdpbjo6Y2FuRGlz
cGxheS4KKyAgICBzdGF0aWMgYm9vbCBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChjb25zdCBT
dHJpbmcmIHNjaGVtZSk7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJBc0NhbkRpc3BsYXlPbmx5
SWZDYW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzNjNWJiYWY2NzA1YWY3ODg3
YjlhMmQyNjAxNWYzYjUzYjMwMzIwMC4uODUzZjhhNzE5YmRkNDhhNDAwZjM3ZGNjZGU5ZTFhNTVi
MmFiNzU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAx
MS0wMi0wMiAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbZmlsZWFwaV0gQWRkIHN1cHBvcnQg
Zm9yIGZpbGVzeXN0ZW06IFVSSSBoYW5kbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM1MjkKKworICAgICAgICAqIHNyYy9Bc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0pOgorICAgICAgICAqIHNyYy9Bc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06
OmNyZWF0ZSk6CisgICAgICAgICogc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0RmlsZVN5c3RlbSk6CisgICAgICAg
ICogc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZE9wZW5GaWxl
U3lzdGVtKToKKyAgICAgICAgKiBzcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaDoKKyAg
ICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OldvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtKToKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpj
cmVhdGUpOgorCiAyMDExLTAxLTMxICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IDU5
NzVlNzI0M2QzNDU4MjJlZmFhMTg3OWQ0YzI4ZmY0YWQ1MzY0YTcuLmVmMWY2MTY3MWM4N2Q5MDFk
YTM0MDA5MjY1MDFiMzViZGJjOThmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTUwLDggKzUwLDggQEAg
Ym9vbCBBc3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNvbnN0
IFN0cmluZyYgcm9vdFBhdGgpCi0gICAgOiBBc3luY0ZpbGVTeXN0ZW0ocm9vdFBhdGgpCitBc3lu
Y0ZpbGVTeXN0ZW1DaHJvbWl1bTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oQXN5bmNGaWxlU3lz
dGVtOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpCisgICAgOiBBc3luY0ZpbGVT
eXN0ZW0odHlwZSwgcm9vdFBhdGgpCiAgICAgLCBtX3dlYkZpbGVTeXN0ZW0oV2ViS2l0Ojp3ZWJL
aXRDbGllbnQoKS0+ZmlsZVN5c3RlbSgpKQogewogICAgIEFTU0VSVChtX3dlYkZpbGVTeXN0ZW0p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNo
cm9taXVtLmgKaW5kZXggNjIwNTYwOWI5ODZjYTA0OGZkOTkwZGY5NGM0NTU3YzJjMjBmOWRkYS4u
ZGE5OGEzMzFiOTc3ZTBiNzhmNTUxYjNiMDU4ZTJkMGRjZGQ0YTExYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCkBAIC00
Niw5ICs0Niw5IEBAIGNsYXNzIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczsKIAogY2xhc3MgQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0gOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIHJvb3RQYXRoKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3Jl
YXRlKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bShyb290UGF0aCkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtKHR5cGUsIHJvb3RQYXRoKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+QXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0oKTsKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVXcml0ZXIoQXN5bmNGaWxlV3JpdGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0
IFN0cmluZyYgcGF0aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKIAog
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShjb25zdCBTdHJp
bmcmIHJvb3RQYXRoKTsKKyAgICBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShBc3luY0ZpbGVTeXN0
ZW06OlR5cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpOwogICAgIFdlYktpdDo6V2ViRmlsZVN5
c3RlbSogbV93ZWJGaWxlU3lzdGVtOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IGE5YzYxZDBkNGZk
MDU1ZWM2NTZlMGNkZGMxZjYxOWY4ZGE5NDk1ZWIuLmFlMmViMWRjMGY2ODAzM2U0ZTgxNjY3MjM2
YThhZjQxNzIzMDk4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xv
Y2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBMb2Nh
bEZpbGVTeXN0ZW06OnJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEFzeW5jRmlsZVMKICAgICBBU1NFUlQoY29udGV4dCAmJiBjb250ZXh0LT5pc0RvY3VtZW50
KCkpOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29u
dGV4dCk7CiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZy
YW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICB3ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxl
U3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwg
c2l6ZSwgZmFsc2UsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpKTsK
KyAgICB3ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNf
Y2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgZmFsc2UsIG5ldyBXZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUpKTsKIH0KIAogdm9pZCBMb2NhbEZp
bGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0
cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykK
QEAgLTcxLDEyICs3MSwxMiBAQCB2b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0
ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaQogICAgIGlmIChjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKICAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFt
ZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICAgICAg
d2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8
V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIHRydWUsIG5ldyBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbChjYWxsYmFja3MpKTsKKyAgICAgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5v
cGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4o
dHlwZSksIHNpemUsIHRydWUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFj
a3MsIHR5cGUpKTsKICAgICB9IGVsc2UgewogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOwogICAgICAgICBX
b3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4dC0+dGhy
ZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7CiAgICAgICAgIFdlYldvcmtlckJhc2UqIHdlYldv
cmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7Ci0g
ICAgICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0ZW0oc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3Rl
bTo6VHlwZT4odHlwZSksIHNpemUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxs
YmFja3MsIGNvbnRleHQsIHN5bmNocm9ub3VzKSwgc3luY2hyb25vdXMpOworICAgICAgICB3ZWJX
b3JrZXItPm9wZW5GaWxlU3lzdGVtKHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5
cGUpLCBzaXplLCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBl
LCBjb250ZXh0LCBzeW5jaHJvbm91cyksIHN5bmNocm9ub3VzKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsLmNwcAppbmRleCA1MmE0MDMyMWRmYmQxOTE5YzYzZTA0YWZjOWI4MzNlMTBkYmNmY2Y0
Li4wYzcxZjgwMmQ1MTYzMzkwNjZiMjNiNGUxMGQzMzllZTExOGE0ZmExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0lt
cGwuY3BwCkBAIC0zNiw4ICszNiw5IEBACiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUVudHJ5LmgiCiAjaW5jbHVkZSAi
V2ViRmlsZUluZm8uaCIKKyNpbmNsdWRlICJXZWJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiV2Vi
RmlsZVN5c3RlbUVudHJ5LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV29y
a2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC00Niw4ICs0Nyw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OldlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsKFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wgc3luY2hyb25vdXMp
CitXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwo
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcywgQXN5bmNGaWxl
U3lzdGVtOjpUeXBlIHR5cGUsIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGJvb2wgc3luY2hyb25vdXMpCiAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAg
LCBtX3R5cGUodHlwZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zeW5jaHJv
bm91cyhzeW5jaHJvbm91cykKIHsKQEAgLTg1LDkgKzg3LDkgQEAgdm9pZCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbDo6ZGlkUmVhZERpcmVjdG9yeShjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5
c3RlbUUKIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZE9wZW5GaWxlU3lzdGVt
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBwYXRoKQogewogICAgIGlm
IChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKLSAgICAgICAgbV9j
YWxsYmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNo
cm9taXVtOjpjcmVhdGUobV9jb250ZXh0LCBwYXRoLCBtX3N5bmNocm9ub3VzKSk7CisgICAgICAg
IG1fY2FsbGJhY2tzLT5kaWRPcGVuRmlsZVN5c3RlbShuYW1lLCBXb3JrZXJBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bTo6Y3JlYXRlKG1fY29udGV4dCwgbV90eXBlLCBwYXRoLCBtX3N5bmNocm9ub3Vz
KSk7CiAgICAgZWxzZQotICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFt
ZSwgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZShwYXRoKSk7CisgICAgICAgIG1fY2Fs
bGJhY2tzLT5kaWRPcGVuRmlsZVN5c3RlbShuYW1lLCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6
Y3JlYXRlKG1fdHlwZSwgcGF0aCkpOwogICAgIGRlbGV0ZSB0aGlzOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwu
aAppbmRleCA3NWZhMmJiOTk0ZjA2ZTQyNjg0N2YwN2FiMjIyZmJlYWJmODJmMWQyLi4zZTIxOTJl
OThkYTQ2MzFhMWMzOGNlNjU2MDc5ZGFiYTlkMTI3MzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgKQEAgLTMx
LDYgKzMxLDggQEAKICNpZm5kZWYgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGxfaAogI2RlZmlu
ZSBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbF9oCiAKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0
ZW0uaCIKKyNpbmNsdWRlICJXZWJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIldlYlZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KQEAgLTQ5LDcgKzUxLDcgQEAgY2xhc3MgV2ViU3RyaW5nOwogCiBjbGFzcyBXZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbCA6IHB1YmxpYyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzIHsKIHB1
YmxpYzoKLSAgICBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChQYXNzT3duUHRyPFdlYkNvcmU6
OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4sIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqID0gMCwgYm9vbCBzeW5jaHJvbm91cyA9IGZhbHNlKTsKKyAgICBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbChQYXNzT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4s
IFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6VHlwZSA9IFdlYkNvcmU6OkFzeW5jRmlsZVN5c3Rl
bTo6VGVtcG9yYXJ5LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiA9IDAsIGJvb2wg
c3luY2hyb25vdXMgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB+V2ViRmlsZVN5c3RlbUNhbGxiYWNr
c0ltcGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRTdWNjZWVkKCk7CkBAIC02MSw2ICs2Myw5
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiAKKyAgICAvLyBVc2VkIGZvciBvcGVuRmlsZVN5c3Rl
bSBjYWxsYmFja3MuCisgICAgV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpUeXBlIG1fdHlwZTsK
KwogICAgIC8vIFVzZWQgZm9yIHdvcmtlcidzIG9wZW5GaWxlU3lzdGVtIGNhbGxiYWNrcy4KICAg
ICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CiAgICAgYm9vbCBt
X3N5bmNocm9ub3VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IDA1OGU5NDdhNjNlY2Ex
ODljZGMxYWQzMjNjYTcxMmMyNWIxMTY4YmIuLmZhZWE0MGIwNTM3NDQzOGQ3NTQ4MjJjYWNiNTA3
ZTIxMjNlZjE1MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTU2LDggKzU2LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgY2hhciBmaWxlU3lzdGVtT3BlcmF0
aW9uc01vZGVbXSA9ICJmaWxlU3lzdGVtT3BlcmF0aW9uc01vZGUiOwogCi1Xb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5j
aHJvbm91cykKLSAgICA6IEFzeW5jRmlsZVN5c3RlbShyb290UGF0aCkKK1dvcmtlckFzeW5jRmls
ZVN5c3RlbUNocm9taXVtOjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3Qg
U3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJvbm91cykKKyAgICA6IEFzeW5jRmlsZVN5c3Rl
bSh0eXBlLCByb290UGF0aCkKICAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0
KQogICAgICwgbV93ZWJGaWxlU3lzdGVtKFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmZpbGVTeXN0
ZW0oKSkKICAgICAsIG1fd29ya2VyQ29udGV4dChzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
Y29udGV4dCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJB
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAppbmRleCAwYjRiNzA4NTQyYTkwNDM1ZTllOWVi
MGU4MjdkNjM5ZTVjMDdhYjRiLi43ZTMzMTZiMjJjOTMzYTAwMzFkYmIwZTE1N2NiMTgwNTM4Zjc3
ZDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKQEAgLTUyLDkgKzUyLDkgQEAgY2xhc3MgV29ya2Vy
Q29udGV4dDsKIAogY2xhc3MgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0gOiBwdWJsaWMg
QXN5bmNGaWxlU3lzdGVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW0+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9ub3VzKQorICAgIHN0YXRpYyBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBib29s
IHN5bmNocm9ub3VzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXb3JrZXJB
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShjb250ZXh0LCByb290UGF0aCwgc3luY2hyb25vdXMpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bShjb250ZXh0LCB0eXBlLCByb290UGF0aCwgc3luY2hyb25vdXMpKTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIH5Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSgpOwpAQCAtNzUsNyArNzUsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJD
bGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4pOwogCiBwcml2YXRlOgotICAgIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNo
cm9taXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBi
b29sIHN5bmNocm9ub3VzKTsKKyAgICBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBjb25zdCBTdHJpbmcm
IHJvb3RQYXRoLCBib29sIHN5bmNocm9ub3VzKTsKIAogICAgIFBhc3NSZWZQdHI8V2ViS2l0OjpX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBjcmVhdGVXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81663</attachid>
            <date>2011-02-08 10:53:50 -0800</date>
            <delta_ts>2011-02-11 12:57:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53529-20110208105349.patch</filename>
            <type>text/plain</type>
            <size>37853</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0ZDc4ZWJhZTM2OGVkYTBhZjEzYTg5OGM0ZTc5ZDA2MzM1MTM0NGJiLi5jZjMzODlh
OWMyMWYwMjdiNWZjZThmZTcyMmEwYjJkM2VjMDdlNTRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAK
KzIwMTEtMDItMDIgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEFkZCBzdXBw
b3J0IGZvciBmaWxlc3lzdGVtOiBVUkkgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTI5CisKKyAgICAgICAgVGVzdHMgZm9yIGZpbGVz
eXN0ZW06IFVSSXMsIHRlc3RpbmcgYm90aCB0aGVpciBzZWN1cml0eSBvcmlnaW4KKyAgICAgICAg
cHJvcGVydGllcyBhbmQgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgRW50cnkudG9VUkkgbWV0aG9kLgor
CisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRyeS10by11cmktZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5
LXRvLXVyaS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRy
eS10by11cmktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0v
ZmlsZS1lbnRyeS10by11cmkuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVt
L2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZmlsZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1vcmlnaW4uaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9kaXJlY3RvcnktZW50cnktdG8tdXJpLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGVycm9yQ2FsbGJhY2spOgorICAgICAgICAoZW50cnlUb1VSSSk6Cisg
ICAgICAgIChjcmVhdGVUZXN0RGlyZWN0b3J5KToKKyAgICAgICAgKCk6CisgICAgICAgICogZmFz
dC9maWxlc3lzdGVtL3Jlc291cmNlcy9maWxlLWVudHJ5LXRvLXVyaS5qczogQWRkZWQuCisgICAg
ICAgIChlcnJvckNhbGxiYWNrKToKKyAgICAgICAgKGVudHJ5VG9VUkkpOgorICAgICAgICAoY3Jl
YXRlVGVzdEZpbGUpOgorICAgICAgICAoKToKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVh
dGUtZmlsZXN5c3RlbS1maWxlLmh0bWw6IEFkZGVkLgorCiAyMDExLTAxLTMxICBTY290dCBDYW1l
cm9uICA8c2NjYW1lcm9uQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuaWVsIEJh
dGVzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2RpcmVjdG9yeS1l
bnRyeS10by11cmktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2Rp
cmVjdG9yeS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMjczM2M5N2Ex
ZTc5N2JjMzdhNDIxNGJkMWY5ZDkxYjU4ZDVkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxMCBAQAorT2J0YWluaW5nIFVSSSBmcm9tIERpcmVjdG9yeUVudHJ5LgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0ZXN0RGlyZWN0b3J5VVJJIGlzICdm
aWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5L3Rlc3REaXJlY3RvcnknCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRyeS10by11cmkuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWFmOTFiYjgyNTExZDYzNWZiZWJmYTAxODU5ODY3N2E0MDdmYjAwMQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8t
dXJpLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3Jp
cHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9mcy10ZXN0LXV0aWwuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kaXJlY3RvcnktZW50cnktdG8tdXJpLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9maWxlLWVudHJ5LXRvLXVyaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4ODZm
ZDUyN2I0MTRjZTI1NDBmODA3OGY4Yzk0NmExMjhhN2E4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTAgQEAKK09idGFpbmluZyBVUkkgZnJvbSBGaWxlRW50cnkuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHRlc3RGaWxlVVJJIGlzICdmaWxlc3lzdGVt
OmZpbGU6Ly8vdGVtcG9yYXJ5L3Rlc3RGaWxlRW50cnkudHh0JworUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVyaS5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL2ZpbGUtZW50cnktdG8tdXJpLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVjMzQ1YjFm
Mzg5Yjk3MzA0NTViOTFkYmQzNmRhYmEwZjQ4ZTI2MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVyaS5odG1sCkBAIC0wLDAgKzEs
MTMgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZnMt
dGVzdC11dGlsLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvZmlsZS1lbnRyeS10by11cmkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdp
bi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11
cmktb3JpZ2luLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGZmM2UyZGFhZWI2OTgyYmZlMGM2
NzA4ODQ2ZTc1MmVhMTk4ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBA
QAorUEFTU0VEOiBvcmlnaW4gd2FzIGh0dHA6Ly93d3cud2Via2l0Lm9yZzo4MDgwCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDcyMjMyMjBlZDhkMDc2YTk3Njg2NTQzYjE5YThlMmFmODgyYzc3Ngot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlc3lzdGVt
LXVyaS1vcmlnaW4uaHRtbApAQCAtMCwwICsxLDEzIEBACis8YSBzdHlsZT0iZGlzcGxheTpub25l
IiBocmVmPSJmaWxlc3lzdGVtOmh0dHA6Ly93d3cud2Via2l0Lm9yZzo4MDgwL3RlbXBvcmFyeS9h
L2IvYy9maWxlLnR4dCI+Zm9vPC9hPgorPHA+VGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgdmlzaWJs
ZS4gSXQgc2hvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBydW5uaW5nIG9mIHRoZSB0ZXN0Ljwv
cD4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIHZhciBleHBlY3RlZE9y
aWdpbiA9ICdodHRwOi8vd3d3LndlYmtpdC5vcmc6ODA4MCc7CisgICAgdmFyIGFjdHVhbE9yaWdp
biA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJylbMF0ub3JpZ2luOworICAgIHZh
ciByZXN1bHRFbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncCcpWzBdOworICAg
IGlmIChhY3R1YWxPcmlnaW4gPT0gZXhwZWN0ZWRPcmlnaW4pCisgICAgICAgIHJlc3VsdEVsdC5p
bm5lclRleHQgPSAnUEFTU0VEOiBvcmlnaW4gd2FzICcgKyBleHBlY3RlZE9yaWdpbjsKKyAgICBl
bHNlCisgICAgICAgIHJlc3VsdEVsdC5pbm5lclRleHQgPSAnRkFJTEVEOiBleHBlY3RlZCBvcmln
aW46ICcgKyBleHBlY3RlZE9yaWdpbiArICcgYnV0IGdvdDogJyArIGFjdHVhbE9yaWdpbjsKKzwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNl
cy9kaXJlY3RvcnktZW50cnktdG8tdXJpLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVt
L3Jlc291cmNlcy9kaXJlY3RvcnktZW50cnktdG8tdXJpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzZmFiNDg5
OGVkODQ2NTRmNTlmMWM1NWQ2ZWQwNmViYjJiY2Q4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2RpcmVjdG9yeS1lbnRyeS10by11cmku
anMKQEAgLTAsMCArMSwzNCBAQAoraWYgKHRoaXMuaW1wb3J0U2NyaXB0cykgeworICAgIGltcG9y
dFNjcmlwdHMoJ2ZzLXdvcmtlci1jb21tb24uanMnKTsKKyAgICBpbXBvcnRTY3JpcHRzKCdmcy10
ZXN0LXV0aWwuanMnKTsKK30KKworZGVzY3JpcHRpb24oIk9idGFpbmluZyBVUkkgZnJvbSBEaXJl
Y3RvcnlFbnRyeS4iKTsKKwordmFyIGZpbGVTeXN0ZW0gPSBudWxsOwordmFyIHRlc3REaXJlY3Rv
cnlOYW1lID0gJ3Rlc3REaXJlY3RvcnknOwordmFyIHRlc3REaXJlY3RvcnlVUkkgPSBudWxsOwor
CitmdW5jdGlvbiBlcnJvckNhbGxiYWNrKGVycm9yKSB7CisgICAgdGVzdEZhaWxlZCgiRXJyb3Ig
b2NjdXJlZDoiICsgZXJyb3IuY29kZSk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0
aW9uIGVudHJ5VG9VUkkoZW50cnkpIHsKKyAgICB0ZXN0RGlyZWN0b3J5VVJJID0gZW50cnkudG9V
UkkoKTsKKyAgICBzaG91bGRCZSgidGVzdERpcmVjdG9yeVVSSSIsICInZmlsZXN5c3RlbTpmaWxl
Oi8vL3RlbXBvcmFyeS90ZXN0RGlyZWN0b3J5JyIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQor
CitmdW5jdGlvbiBjcmVhdGVUZXN0RGlyZWN0b3J5KCkgeworICAgIGZpbGVTeXN0ZW0ucm9vdC5n
ZXREaXJlY3RvcnkodGVzdERpcmVjdG9yeU5hbWUsIHtjcmVhdGU6dHJ1ZX0sIGVudHJ5VG9VUkks
IGVycm9yQ2FsbGJhY2spOworfQorCitmdW5jdGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsK
KyAgICBmaWxlU3lzdGVtID0gZnM7CisgICAgcmVtb3ZlQWxsSW5EaXJlY3RvcnkoZmlsZVN5c3Rl
bS5yb290LCBjcmVhdGVUZXN0RGlyZWN0b3J5LCBlcnJvckNhbGxiYWNrKTsKK30KKwordmFyIGpz
VGVzdElzQXN5bmMgPSB0cnVlOworcmVxdWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCAxMDAsIGZp
bGVTeXN0ZW1DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJj
ZXMvZmlsZS1lbnRyeS10by11cmkuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZpbGUtZW50cnktdG8tdXJpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiODJhZTMwZjhkZjFlNjhm
NjNmYmIyNTVjYjA3NTc3ZTA0YWJmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtZW50cnktdG8tdXJpLmpzCkBAIC0wLDAgKzEs
MzQgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdmcy13
b3JrZXItY29tbW9uLmpzJyk7CisgICAgaW1wb3J0U2NyaXB0cygnZnMtdGVzdC11dGlsLmpzJyk7
Cit9CisKK2Rlc2NyaXB0aW9uKCJPYnRhaW5pbmcgVVJJIGZyb20gRmlsZUVudHJ5LiIpOworCit2
YXIgZmlsZVN5c3RlbSA9IG51bGw7Cit2YXIgdGVzdEZpbGVOYW1lID0gJ3Rlc3RGaWxlRW50cnku
dHh0JzsKK3ZhciB0ZXN0RmlsZVVSSSA9IG51bGw7CisKK2Z1bmN0aW9uIGVycm9yQ2FsbGJhY2so
ZXJyb3IpIHsKKyAgICB0ZXN0RmFpbGVkKCJFcnJvciBvY2N1cmVkOiIgKyBlcnJvci5jb2RlKTsK
KyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gZW50cnlUb1VSSShlbnRyeSkgewor
ICAgIHRlc3RGaWxlVVJJID0gZW50cnkudG9VUkkoKTsKKyAgICBzaG91bGRCZSgidGVzdEZpbGVV
UkkiLCAiJ2ZpbGVzeXN0ZW06ZmlsZTovLy90ZW1wb3JhcnkvdGVzdEZpbGVFbnRyeS50eHQnIik7
CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRlc3RGaWxlKCkgewor
ICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXRGaWxlKHRlc3RGaWxlTmFtZSwge2NyZWF0ZTp0cnVlfSwg
ZW50cnlUb1VSSSwgZXJyb3JDYWxsYmFjayk7Cit9CisKK2Z1bmN0aW9uIGZpbGVTeXN0ZW1DYWxs
YmFjayhmcykgeworICAgIGZpbGVTeXN0ZW0gPSBmczsKKyAgICByZW1vdmVBbGxJbkRpcmVjdG9y
eShmaWxlU3lzdGVtLnJvb3QsIGNyZWF0ZVRlc3RGaWxlLCBlcnJvckNhbGxiYWNrKTsKK30KKwor
dmFyIGpzVGVzdElzQXN5bmMgPSB0cnVlOworcmVxdWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCAx
MDAsIGZpbGVTeXN0ZW1DYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Cit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTBmNGFmZDZlNTY2OWY1NWE1YzQzZDQzMDE5NzAyZTFjNGU2
OGI0MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
ZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBA
QAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IE5vdCBhbGxvd2VkIHRvIGxvYWQgbG9jYWwgcmVz
b3VyY2U6IGZpbGVzeXN0ZW06aHR0cDovL2xvY2FsaG9zdDo4MDAwL3RlbXBvcmFyeS9wYWdlLmh0
bWwKK1RoaXMgdGVzdCBpcyB0byBzZWUgaWYgYSByZW1vdGUgZmlsZSBjYW4gaW5jbHVkZSBhIGxv
Y2FsIHBhZ2UgdmlhIGEgZmlsZXN5c3RlbTogVVJJIGluIGFuIGlGcmFtZS4KKworVGVzdCBQYXNz
ZWQuIExvY2FsIHBhZ2Ugbm90IHJlbW90ZWx5IGxvYWRlZCBpbnRvIGlGcmFtZS4KKyAgCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1l
LWZyb20tcmVtb3RlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVz
eXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRjZGY0YjQ3ODVjMmU4
MTBjMTAxZjc0NThhZTgzMjQ4YmZlNzU0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbApA
QCAtMCwwICsxLDQyIEBACis8aHRtbD4gPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVu
Y3Rpb24gZG9uZSgpIHsKKyAgICAgICAgICAgIHZhciBwYWdlTG9jYXRpb24gPSAiZmlsZXN5c3Rl
bTpodHRwOi8vbG9jYWxob3N0OjgwMDAvdGVtcG9yYXJ5L3BhZ2UuaHRtbCI7CisgICAgICAgICAg
ICB2YXIgbG9jYWxJZnJhbWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1l
Iik7CisgICAgICAgICAgICBsb2NhbElmcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsICJt
eUZyYW1lIik7CisgICAgICAgICAgICBsb2NhbElmcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJz
cmMiLCBwYWdlTG9jYXRpb24pOworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChsb2NhbElmcmFtZUVsZW1lbnQpOworCisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOworICAgICAgICAgICAgdmFyIG15RnJhbWVEb2N1
bWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUZyYW1lIikuY29udGVudERvY3VtZW50
OworICAgICAgICAgICAgaWYgKG15RnJhbWVEb2N1bWVudCkKKyAgICAgICAgICAgICAgICByZXN1
bHQuaW5uZXJIVE1MID0gIlRlc3QgRmFpbGVkOiBMb2NhbCBwYWdlIHJlbW90ZWx5IGxvYWRlZCBp
bnRvIGlGcmFtZS4iOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5p
bm5lckhUTUwgPSAiVGVzdCBQYXNzZWQuIExvY2FsIHBhZ2Ugbm90IHJlbW90ZWx5IGxvYWRlZCBp
bnRvIGlGcmFtZS4iOworCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8v
IE5lZWQgdG8gd2FpdCBmb3IgdGhlIGlmcmFtZSB0byBkbyBpdHMgYXN5bmMgd29yay4KKyAgICAg
ICAgICAgIHNldFRpbWVvdXQoZG9uZSwgMTAwMCk7CisgICAgICAgIH0KKworICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0iZGl2MCI+CisgICAgICAgIFRoaXMgdGVz
dCBpcyB0byBzZWUgaWYgYSByZW1vdGUgZmlsZSBjYW4gaW5jbHVkZSBhIGxvY2FsIHBhZ2Ugdmlh
IGEgZmlsZXN5c3RlbTogVVJJIGluIGFuIGlGcmFtZS4KKyAgICA8L2Rpdj4KKyAgICA8YnI+Cisg
ICAgPGRpdiBpZD0icmVzdWx0Ij4KKyAgICAgICAgVGVzdCBub3QgcnVuIGNvcnJlY3RseS4KKyAg
ICA8L2Rpdj4KKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5
L3Jlc291cmNlcy9jcmVhdGUtZmlsZXN5c3RlbS1maWxlLmh0bWwiIG9ubG9hZD0icnVuVGVzdCgp
Ij48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lz
dGVtLWZpbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTI0YWI3MjU5Yzk4NzQyN2IxODdhZjE0NTExNThi
YTcwNjg2NDkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9yZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sCkBAIC0wLDAgKzEsMjAg
QEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gY3JlYXRl
RmlsZSgpIHsKKyAgICAgICAgICAgIHJlcXVlc3RGaWxlU3lzdGVtKFRFTVBPUkFSWSwgMTAwLCBm
dW5jdGlvbihmcykgeworICAgICAgICAgICAgICAgIGZzLnJvb3QuZ2V0RmlsZSgicGFnZS5odG1s
Iiwge2NyZWF0ZTp0cnVlfSwgZnVuY3Rpb24oZW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZW50cnkuY3JlYXRlV3JpdGVyKGZ1bmN0aW9uKHdyaXRlcikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGJiID0gbmV3IEJsb2JCdWlsZGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBiYi5hcHBlbmQoJzxkaXYgaWQ9ImlubmVyRGl2Ij5WaXNpYmxlIENvbnRlbnRzPC9kaXY+XG4n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZShiYi5nZXRCbG9iKCkpOwor
ICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0pCisg
ICAgICAgICAgICBjcmVhdGVGaWxlKCk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDdmMTU0ZDA4MTBiYTUyNDhjNGE3ZGJhM2M1
YjBhZGQ0NDQ0Yzc0ZWUuLjgwMzFmZDUyMjBlOGI0YjU0N2M4OWRjN2U2MTkwNDM2YWE3ZWFmOWEg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC00OTU1LDYgKzQ5NTUsNyBAQCBmYXN0L3Bh
cnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1aXJrcy5odG1sCiAjIEZpbGVTeXN0ZW0gQVBJIGlzIG5v
dCBzdXBwb3J0ZWQuCiBmYXN0L2ZpbGVzeXN0ZW0KIGh0dHAvdGVzdHMvbG9jYWwvZmlsZWFwaQor
aHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS5odG1sCiAK
ICMgTmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uIGxpa2UgUVQKIGZhc3QvZG9tL25vZGVzRnJvbVJl
Y3QtbGlua3MtYW5kLXRleHQuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCA5Mzli
YTQyNmU1ZWJkNmQ5MTBmNDdlY2NlOWRjZTlhOTRlZGViYTIwLi41ZTBmYzc2NDJjYjI0ZTc1ZGQy
ZjU1YjUxNDZiZTllN2ExMDYyZmM3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtMjU3
LDYgKzI1Nyw3IEBAIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tYnVmZmVyZWQuaHRtbAogCiAjIEZp
bGVTeXN0ZW0gQVBJIGlzIG5vdCBzdXBwb3J0ZWQuCiBmYXN0L2ZpbGVzeXN0ZW0KK2h0dHAvdGVz
dHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbAogCiAjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjIyMwogIyBUaGUgV2ViS2l0IHBs
dWdpbiBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGlmcmFtZSBzaGltcy4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IGI4YWE3Zjg5Yjg4N2MxNzlhZTNkOTY5ZGM5ZWIyMzc0ZmEz
MDBmNDkuLjhiYjMwOTIxZWRiMTVlZjcxMzc3MTBhMzMxMmY1OGVlNzEyMjU0N2UgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvU2tpcHBlZApAQCAtNDkxMiw2ICs0OTEyLDcgQEAgZmFzdC9wYXJzZXIvcHJlLWh0
bWw1LXBhcnNlci1xdWlya3MuaHRtbAogCiAjIEZpbGVTeXN0ZW0gQVBJIGlzIG5vdCBzdXBwb3J0
ZWQuCiBmYXN0L2ZpbGVzeXN0ZW0KK2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJh
bWUtZnJvbS1yZW1vdGUuaHRtbAogCiAjIEl0IGZhaWxzLCBiZWNhdXNlIDNEIGNhbnZhcyBpcyBk
aXNhYmxlZCBieSBkZWZhdWx0LgogaHR0cC90ZXN0cy9jYW52YXMvd2ViZ2wvb3JpZ2luLWNsZWFu
LWNvbmZvcm1hbmNlLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5kZXggNDExMDMwNDUw
NmYxMzQzYzFhZGVlNThmMTMwYTdjNTdhM2U3NjM1OC4uM2ZmNDc4Y2U0NDI3NjQ5ODJhMjRhYjQ0
ZTViYjBlNmI5NjliMWYxMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAgLTEwODIsNiAr
MTA4Miw3IEBAIGZhc3QvcGFyc2VyL3ByZS1odG1sNS1wYXJzZXItcXVpcmtzLmh0bWwKIAogIyBG
aWxlU3lzdGVtIEFQSSBpcyBub3Qgc3VwcG9ydGVkLgogZmFzdC9maWxlc3lzdGVtCitodHRwL3Rl
c3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWwKIAogIyBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bm9kZXNGcm9tUmVjdCBpcyBub3Qgc3VwcG9ydGVkLgogZmFzdC9k
b20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMzN2ZiYThmOGUyNGQx
NzgzZmQ3ZWYyYWQxZDFlN2M3ZTFmMzc2Yi4uYjFhYWIyMzY0MDFiYTM0ZWQ0MzEwMWQ5ZjIzY2Iw
YzI0N2VjMGJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDExLTAyLTAyICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtmaWxlYXBpXSBBZGQgc3VwcG9ydCBmb3IgZmlsZXN5c3Rl
bTogVVJJIGhhbmRsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MzUyOQorCisgICAgICAgIFRoZXJlIGFyZSB0d28gbWFqb3IgcGFydHMgdG8gdGhp
cyBwYXRjaDogb25lIGlzIHRvIGFkZCBhbgorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBFbnRy
eS50b1VSSSB0byB0aGUgRmlsZVN5c3RlbSBBUEkuCisgICAgICAgIFRoZSBvdGhlciBpcyB0byBp
bXBsZW1lbnQgc2VjdXJpdHkgb3JpZ2luIGNoZWNraW5nIGZvciB0aGlzCisgICAgICAgIG5ldyBz
Y2hlbWUuCisKKyAgICAgICAgQWxsIGNoYW5nZXMgYXJlIGd1YXJkZWQgYnkgdGhlIEZJTEVfU1lT
VEVNIGZlYXR1cmUuIEFuIGFjY29tcGFueWluZworICAgICAgICBDaHJvbWl1bSBjaGFuZ2UsIHRv
IHN1cHBvcnQgbG9hZGluZyBvZiBmaWxlc3lzdGVtOiBVUklzLCBoYXMgcmVjZW50bHkKKyAgICAg
ICAgYmVlbiBzdWJtaXR0ZWQgYXMgQ2hyb21pdW0gcjc0MDgyLgorCisgICAgICAgIFNwZWM6Cisg
ICAgICAgICAgaHR0cDovL2Rldi53My5vcmcvMjAwOS9kYXAvZmlsZS1zeXN0ZW0vZmlsZS1kaXIt
c3lzLmh0bWwjbWV0aG9kcy0yCisgICAgICAgIFByb3Bvc2VkIFVSSSBmb3JtYXQsIGFuZCBkaXNj
dXNzaW9uIG9mIHNlY3VyaXR5IG9yaWdpbiBpc3N1ZXM6CisgICAgICAgICAgaHR0cDovL2xpc3Rz
LnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvcHVibGljLXdlYmFwcHMvMjAxMUphbk1hci8wMjE4Lmh0
bWwKKworICAgICAgICBUZXN0czogZmFzdC9maWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRyeS10by11
cmkuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50cnktdG8tdXJp
Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZmlsZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1vcmln
aW4uaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlm
cmFtZS1mcm9tLXJlbW90ZS5odG1sCisKKyAgICAgICAgKiBmaWxlYXBpL0VudHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVudHJ5Ojp0b1VSSSk6CisgICAgICAgICogZmlsZWFwaS9FbnRyeS5o
OgorICAgICAgICAqIGZpbGVhcGkvRW50cnkuaWRsOgorICAgICAgICAtIEFkZGVkIHRvVVJJIG1l
dGhvZCB0byB0aGUgSURMLCBvbWl0dGluZyB0aGUgTUlNRSB0eXBlIGFyZ3VtZW50CisgICAgICAg
ICAgc3BlY2lmaWVkIGluIHRoZSBzcGVjIGFzIGl0IHdpbGwgc29vbiBiZSByZW1vdmVkLgorICAg
ICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW46OlNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgLSBjcmFjayB0aGUgZmlsZXN5c3Rl
bTogVVJJIHRvIGdldCBhdCB0aGUgb3JpZ2luIG9mIHRoZSBzaXRlCisgICAgICAgIChXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbjo6Y2FuRGlzcGxheSk6CisgICAgICAgIC0gY2FuRGlzcGxheSBmb3Ig
ZmlsZXN5c3RlbTogVVJJcyBpcyBlcXVpdmFsZW50IHRvIGNhblJlcXVlc3QKKyAgICAgICAgKiBw
bGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxl
U3lzdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpvcGVu
RmlsZVN5c3RlbSk6CisgICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06OnR5cGUpOgorICAgICAgICAtIEV4cG9zZWQg
ZmlsZXN5c3RlbSB0eXBlIHRvIGFsbG93IHRvVVJJIHRvIHVzZSBpdCBhcyBwYXJ0IG9mIHRoZQor
ICAgICAgICAgIHBhdGguCisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06OkFzeW5j
RmlsZVN5c3RlbSk6CisgICAgICAgICogcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJBc0NhbkRpc3BsYXlP
bmx5SWZDYW5SZXF1ZXN0KToKKyAgICAgICAgLSBHZW5lcmFsaXplZCBjYW5EaXNwbGF5T25seUlm
Q2FuUmVxdWVzdCBhcyBpdCBhcHBsaWVzIHRvIGJvdGgKKyAgICAgICAgICBmaWxlc3lzdGVtOiBh
bmQgYmxvYjogVVJJcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oOgorCiAy
MDExLTAxLTMxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9FbnRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmNwcAppbmRl
eCA5YzNmYTRlZWY4YWVjZWU5OGE4MWFmOWE2MjQ1NDIwYWFmMmEyYzFiLi41M2NkNTc2YTFjNzcx
NzA3ZDg0YjdlOGU3YmYwOTkzZjFmZTU5ZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0VudHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmNwcApA
QCAtMzIsMTMgKzMyLDE3IEBACiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAKKyNpbmNsdWRl
ICJBc3luY0ZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgogI2luY2x1
ZGUgIkVudHJ5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVk
ZSAiRmlsZUVycm9yLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1
ZGUgIk1ldGFkYXRhQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJWb2lkQ2FsbGJhY2su
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtODIsMTEgKzg2LDE1IEBAIHZvaWQgRW50cnk6OmdldFBhcmVudChQYXNzUmVm
UHRyPEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvCiAgICAg
ICAgIGZpbGVzeXN0ZW0oKS0+c2NoZWR1bGVDYWxsYmFjayhlcnJvckNhbGxiYWNrLnJlbGVhc2Uo
KSwgRmlsZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpJTlZBTElEX01PRElGSUNBVElPTl9FUlIp
KTsKIH0KIAotU3RyaW5nIEVudHJ5Ojp0b1VSSShjb25zdCBTdHJpbmcmKQorU3RyaW5nIEVudHJ5
Ojp0b1VSSSgpCiB7Ci0gICAgLy8gRklYTUU6IHRvIGJlIGltcGxlbWVudGVkLgotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBTdHJpbmdCdWlsZGVy
IHVyaUJ1aWxkZXI7CisgICAgdXJpQnVpbGRlci5hcHBlbmQoImZpbGVzeXN0ZW06Iik7CisgICAg
dXJpQnVpbGRlci5hcHBlbmQoZmlsZXN5c3RlbSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAgIHVyaUJ1aWxkZXIuYXBwZW5kKCIv
Iik7CisgICAgdXJpQnVpbGRlci5hcHBlbmQobV9maWxlU3lzdGVtLT5hc3luY0ZpbGVTeXN0ZW0o
KS0+dHlwZSgpID09IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5ID8gInRlbXBvcmFyeSIgOiAi
cGVyc2lzdGVudCIpOworICAgIHVyaUJ1aWxkZXIuYXBwZW5kKG1fZnVsbFBhdGgpOworICAgIHJl
dHVybiB1cmlCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuaCBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRW50cnkuaAppbmRleCA5MzY3ZjRmMzAyYTRkN2E1MDkwNDM5Yzc1YjYwMzgy
MjY4YzQwMjNjLi5kODcxMjYyNDBlNTkxYmEyZDJlYmUzMTc4MWU4Njk5Njc3NjI0NjA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9FbnRyeS5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
bW92ZShQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gMCwgUGFzc1Jl
ZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gMCkgY29uc3Q7CiAgICAgdm9pZCBn
ZXRQYXJlbnQoUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSAwLCBQ
YXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSAwKSBjb25zdDsKIAotICAg
IFN0cmluZyB0b1VSSShjb25zdCBTdHJpbmcmIG1pbWVUeXBlID0gU3RyaW5nKCkpOworICAgIFN0
cmluZyB0b1VSSSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgRW50cnkoUGFzc1JlZlB0cjxET01GaWxl
U3lzdGVtQmFzZT4sIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9FbnRyeS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5
LmlkbAppbmRleCBmNmZjZGIzYjRlYTg2NDlmM2Q4ZDk3ZDNhOTEwNDIzYjRjNzFmOTcwLi5mMTQ0
YjMxZWIyZTk0MGU4ODM1ZjNhMDg5MjhkYmYyOGZiMDg1N2RkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0VudHJ5LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Vu
dHJ5LmlkbApAQCAtNDMsNiArNDMsNyBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHZvaWQg
Z2V0TWV0YWRhdGEoaW4gW09wdGlvbmFsLCBDYWxsYmFja10gTWV0YWRhdGFDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JD
YWxsYmFjayk7CiAgICAgICAgIHZvaWQgbW92ZVRvKGluIERpcmVjdG9yeUVudHJ5IHBhcmVudCwg
aW4gW09wdGlvbmFsLCBDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJp
bmcgbmFtZSwgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFj
ayk7CiAgICAgICAgIHZvaWQgY29weVRvKGluIERpcmVjdG9yeUVudHJ5IHBhcmVudCwgaW4gW09w
dGlvbmFsLCBDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgbmFt
ZSwgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ss
IGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7Cisg
ICAgICAgIERPTVN0cmluZyB0b1VSSSgpOwogICAgICAgICB2b2lkIHJlbW92ZShpbiBbT3B0aW9u
YWwsIENhbGxiYWNrXSBWb2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbT3B0aW9uYWws
IENhbGxiYWNrXSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwogICAgICAgICB2b2lkIGdl
dFBhcmVudChpbiBbT3B0aW9uYWwsIENhbGxiYWNrXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjaywgaW4gW09wdGlvbmFsLCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNr
KTsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAppbmRleCA3ODlm
ZGY5MzkzMjcyYzJmZWYyYmQ1ZWJjNmE4YmZhOGRmOGRiMzAzLi45ZmI4NDc2N2VkYWQyYWVjNjIz
YmZmNTg0NGQ1NDViNDFkZTZlMGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
Y3VyaXR5T3JpZ2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmNwcApAQCAtNzksNiArNzksMTggQEAgU2VjdXJpdHlPcmlnaW46OlNlY3VyaXR5T3JpZ2luKGNv
bnN0IEtVUkwmIHVybCwgU2FuZGJveEZsYWdzIHNhbmRib3hGbGFncykKICAgICBpZiAobV9wcm90
b2NvbCA9PSAiYWJvdXQiIHx8IG1fcHJvdG9jb2wgPT0gImphdmFzY3JpcHQiKQogICAgICAgICBt
X3Byb3RvY29sID0gIiI7CiAKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgaWYgKG1fcHJv
dG9jb2wgPT0gImZpbGVzeXN0ZW0iKSB7CisgICAgICAgIEtVUkwgb3JpZ2luVVJMKFBhcnNlZFVS
TFN0cmluZywgdXJsLnBhdGgoKSk7CisgICAgICAgIGlmIChvcmlnaW5VUkwuaXNWYWxpZCgpKSB7
CisgICAgICAgICAgICBtX3Byb3RvY29sID0gb3JpZ2luVVJMLnByb3RvY29sKCkubG93ZXIoKTsK
KyAgICAgICAgICAgIG1faG9zdCA9IG9yaWdpblVSTC5ob3N0KCkubG93ZXIoKTsKKyAgICAgICAg
ICAgIG1fcG9ydCA9IG9yaWdpblVSTC5wb3J0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbV9pc1VuaXF1ZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBGb3IgZWRnZSBj
YXNlIFVSTHMgdGhhdCB3ZXJlIHByb2JhYmx5IG1pc3BhcnNlZCwgbWFrZSBzdXJlIHRoYXQgdGhl
IG9yaWdpbiBpcyB1bmlxdWUuCiAgICAgaWYgKHNjaGVtZVJlcXVpcmVzQXV0aG9yaXR5KG1fcHJv
dG9jb2wpICYmIG1faG9zdC5pc0VtcHR5KCkpCiAgICAgICAgIG1faXNVbmlxdWUgPSB0cnVlOwpA
QCAtMzEwLDExICszMjIsOCBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5KGNvbnN0
IEtVUkwmIHVybCkgY29uc3QKIHsKICAgICBTdHJpbmcgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wo
KS5sb3dlcigpOwogCi0jaWYgRU5BQkxFKEJMT0IpCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBn
ZW5lcmFsaXplIHRoaXMgY2hlY2suCi0gICAgaWYgKHByb3RvY29sID09IEJsb2JVUkw6OmJsb2JQ
cm90b2NvbCgpKQorICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6Y2FuRGlzcGxheU9ubHlJZkNhblJl
cXVlc3QocHJvdG9jb2wpKQogICAgICAgICByZXR1cm4gY2FuUmVxdWVzdCh1cmwpOwotI2VuZGlm
CiAKICAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNEaXNwbGF5
SXNvbGF0ZWQocHJvdG9jb2wpKQogICAgICAgICByZXR1cm4gbV9wcm90b2NvbCA9PSBwcm90b2Nv
bCB8fCBpc0FjY2Vzc1RvVVJMV2hpdGVMaXN0ZWQodXJsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGI4NWE0ODdmYjYxY2Y3NjZiOWIwYjhmNDk3
MmY0Njc5M2FlMTljNmEuLmIxYTNmZTIyOTI4NThjNDhjMWNlNWI3ZDllYzQyZmJiOTJlOTM2Y2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApAQCAtNDYs
NyArNDYsNyBAQCBib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IEFzeW5jRmlsZVN5c3Rl
bTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYpCitQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gQXN5
bmNGaWxlU3lzdGVtOjpjcmVhdGUoVHlwZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEFzeW5jRmls
ZVN5c3RlbTo6b3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29uc3QgU3Ry
aW5nJiBzdG9yYQogICAgIHJvb3RQYXRoICs9IHR5cGVTdHJpbmc7CiAgICAgcm9vdFBhdGguYXBw
ZW5kKFBsYXRmb3JtRmlsZVBhdGhTZXBhcmF0b3IpOwogCi0gICAgY2FsbGJhY2tzLT5kaWRPcGVu
RmlsZVN5c3RlbShuYW1lLCBBc3luY0ZpbGVTeXN0ZW06OmNyZWF0ZShyb290UGF0aCkpOworICAg
IGNhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFtZSwgQXN5bmNGaWxlU3lzdGVtOjpjcmVh
dGUodHlwZSwgcm9vdFBhdGgpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0FzeW5jRmlsZVN5c3RlbS5oCmluZGV4IGMzNGE2NDRkNWRkMmMzZmIwNjliNDNlNjNjOTNiMWI5
N2ZjNGI1MmEuLmY1MjA3Y2UzZTIwYzA4NjI5MTM4NjM4MzY4YmVkMjNmZTg2MGZhZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCkBAIC02NSw3ICs2NSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgd2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSB7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBwbGF0
Zm9ybS1zcGVjaWZpYyBBc3luY0ZpbGVTeXN0ZW0gaW5zdGFuY2UgaWYgdGhlIHBsYXRmb3JtIGhh
cyBpdHMgb3duIGltcGxlbWVudGF0aW9uLgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpOworICAgIHN0YXRpYyBQYXNz
T3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKFR5cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBh
dGgpOwogCiAgICAgLy8gT3BlbnMgYSBuZXcgZmlsZSBzeXN0ZW0uIFRoZSBjcmVhdGUgcGFyYW1l
dGVyIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgdGhlIHBhdGggaWYgaXQgZG9l
cyBub3QgYWxyZWFkeSBleGlzdHMuCiAgICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW0oY29u
c3QgU3RyaW5nJiBiYXNlUGF0aCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlSWRlbnRpZmllciwgVHlw
ZSwgYm9vbCBjcmVhdGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CkBA
IC0xMzIsMTIgKzEzMiwxNiBAQCBwdWJsaWM6CiAgICAgLy8gR2V0dGVyIGZvciB0aGlzIGZpbGUg
c3lzdGVtJ3Mgcm9vdCBwYXRoLgogICAgIFN0cmluZyByb290KCkgY29uc3QgeyByZXR1cm4gbV9w
bGF0Zm9ybVJvb3RQYXRoOyB9CiAKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KKwogcHJvdGVjdGVkOgotICAgIEFzeW5jRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIHBs
YXRmb3JtUm9vdFBhdGgpCi0gICAgICAgIDogbV9wbGF0Zm9ybVJvb3RQYXRoKHBsYXRmb3JtUm9v
dFBhdGgpCisgICAgQXN5bmNGaWxlU3lzdGVtKFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBwbGF0
Zm9ybVJvb3RQYXRoKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fcGxhdGZv
cm1Sb290UGF0aChwbGF0Zm9ybVJvb3RQYXRoKQogICAgIHsKICAgICB9CiAKKyAgICBUeXBlIG1f
dHlwZTsKICAgICBTdHJpbmcgbV9wbGF0Zm9ybVJvb3RQYXRoOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCmluZGV4IDBhN2NiOGNmNGI5ZmRjYTBmNWVm
ZDFkZjMzZjJmZmFmNzVkYmIxMmUuLmIxZGFkZmVkMDk5ZTIyYzRjYjY1OTU3YWFmMDBkMzE0NGY3
NzQxOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAKQEAg
LTg2LDYgKzg2LDI0IEBAIHN0YXRpYyBVUkxTY2hlbWVzTWFwJiBlbXB0eURvY3VtZW50U2NoZW1l
cygpCiAgICAgcmV0dXJuIGVtcHR5RG9jdW1lbnRTY2hlbWVzOwogfQogCitzdGF0aWMgVVJMU2No
ZW1lc01hcCYgY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFVSTFNjaGVtZXNNYXAsIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0
U2NoZW1lcywgKCkpOworCisjaWYgRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkK
KyAgICBpZiAoY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzLmlzRW1wdHkoKSkgewor
I2lmIEVOQUJMRShCTE9CKQorICAgICAgICBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVt
ZXMuYWRkKCJibG9iIik7CisjZW5kaWYKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgICAg
IGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcy5hZGQoImZpbGVzeXN0ZW0iKTsKKyNl
bmRpZgorICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfU1lTVEVN
KQorCisgICAgcmV0dXJuIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lczsKK30KKwog
dm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmlu
ZyYgc2NoZW1lKQogewogICAgIGxvY2FsVVJMU2NoZW1lcygpLmFkZChzY2hlbWUpOwpAQCAtMTU2
LDQgKzE3NCwxNCBAQCBib29sIFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRMb2FkVVJMU2NoZW1lQXNF
bXB0eURvY3VtZW50KGNvbnN0IFN0cmluZyYgc2NoZW1lKQogICAgIHJldHVybiBlbXB0eURvY3Vt
ZW50U2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAKK2Jvb2wgU2NoZW1lUmVnaXN0cnk6
OmNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworICAg
IHJldHVybiBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVtZXMoKS5jb250YWlucyhzY2hl
bWUpOworfQorCit2b2lkIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlckFzQ2FuRGlzcGxheU9ubHlJ
ZkNhblJlcXVlc3QoY29uc3QgU3RyaW5nJiBzY2hlbWUpCit7CisgICAgY2FuRGlzcGxheU9ubHlJ
ZkNhblJlcXVlc3RTY2hlbWVzKCkuYWRkKHNjaGVtZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCmluZGV4IDUzMGZj
YWIxZDBjNzdjOTA3ZWE0NTFiZWUwOTk0M2ZjYTUyOGYwMzEuLmM5Y2I0NzZhMDNmZjFhNjM2ZmNk
NWRhNjcxMTFkZWYzNTM0OTcyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NjaGVtZVJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVn
aXN0cnkuaApAQCAtNTgsNiArNTgsMTEgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgcmVn
aXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGlj
IGJvb2wgc2hvdWxkTG9hZFVSTFNjaGVtZUFzRW1wdHlEb2N1bWVudChjb25zdCBTdHJpbmcmKTsK
KworICAgIC8vIFN1Y2ggc2NoZW1lcyBzaG91bGQgZGVsZWdhdGUgdG8gU2VjdXJpdHlPcmlnaW46
OmNhblJlcXVlc3QgZm9yIGFueSBVUkwKKyAgICAvLyBwYXNzZWQgdG8gU2VjdXJpdHlPcmlnaW46
OmNhbkRpc3BsYXkuCisgICAgc3RhdGljIGJvb2wgY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3Qo
Y29uc3QgU3RyaW5nJiBzY2hlbWUpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQXNDYW5EaXNw
bGF5T25seUlmQ2FuUmVxdWVzdChjb25zdCBTdHJpbmcmIHNjaGVtZSk7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGMzYzViYmFmNjcw
NWFmNzg4N2I5YTJkMjYwMTVmM2I1M2IzMDMyMDAuLjVkN2ExOGMxMjhiNDQ0MGJhN2MzNTZjN2I3
NzFlODI3MTc2NDQ2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTEtMDItMDIgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2ZpbGVhcGldIEFkZCBz
dXBwb3J0IGZvciBmaWxlc3lzdGVtOiBVUkkgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTI5CisKKyAgICAgICAgQ2hhbmdlcyB0byBD
aHJvbWl1bSBXZWJLaXQgQVBJIHJlcXVpcmVkIHRvIGV4cG9zZQorICAgICAgICB0aGUgRmlsZVN5
c3RlbSB0eXBlIHRvIFdlYkNvcmUncyBmaWxlYXBpIGNvZGUsIHNpbmNlIHRoZQorICAgICAgICB0
eXBlIGlzIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0gVVJJLgorCisgICAgICAgICogc3JjL0FzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSk6CisgICAgICAgICogc3JjL0FzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbSk6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKToK
KyAgICAgICAgKiBzcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNr
c0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlk
T3BlbkZpbGVTeXN0ZW0pOgorICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bC5oOgorICAgICAgICAqIHNyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6V29ya2VyQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0pOgorICAgICAgICAqIHNyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW06OmNyZWF0ZSk6CisKIDIwMTEtMDEtMzEgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAK
aW5kZXggNTk3NWU3MjQzZDM0NTgyMmVmYWExODc5ZDRjMjhmZjRhZDUzNjRhNy4uZWYxZjYxNjcx
Yzg3ZDkwMWRhMzQwMDkyNjUwMWIzNWJkYmM5OGZhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNTAsOCAr
NTAsOCBAQCBib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKQogICAgIHJldHVybiB0
cnVlOwogfQogCi1Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0oY29uc3QgU3RyaW5nJiByb290UGF0aCkKLSAgICA6IEFzeW5jRmlsZVN5c3RlbShyb290UGF0
aCkKK0FzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShBc3lu
Y0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCkKKyAgICA6IEFz
eW5jRmlsZVN5c3RlbSh0eXBlLCByb290UGF0aCkKICAgICAsIG1fd2ViRmlsZVN5c3RlbShXZWJL
aXQ6OndlYktpdENsaWVudCgpLT5maWxlU3lzdGVtKCkpCiB7CiAgICAgQVNTRVJUKG1fd2ViRmls
ZVN5c3RlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uaAppbmRleCA2MjA1NjA5Yjk4NmNhMDQ4ZmQ5OTBkZjk0YzQ1NTdjMmMy
MGY5ZGRhLi5kYTk4YTMzMWI5NzdlMGI3OGY1NTFiM2IwNThlMmQwZGNkZDRhMTFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVt
LmgKQEAgLTQ2LDkgKzQ2LDkgQEAgY2xhc3MgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzOwogCiBj
bGFzcyBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSA6IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW0gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgcm9vdFBhdGgpCisgICAgc3RhdGljIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lz
dGVtPiBjcmVhdGUoQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgcm9v
dFBhdGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtKHJvb3RQYXRoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0odHlwZSwgcm9vdFBhdGgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IH5Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSgpOwpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqIGNsaWVu
dCwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNr
cz4pOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNv
bnN0IFN0cmluZyYgcm9vdFBhdGgpOworICAgIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKEFzeW5j
RmlsZVN5c3RlbTo6VHlwZSwgY29uc3QgU3RyaW5nJiByb290UGF0aCk7CiAgICAgV2ViS2l0OjpX
ZWJGaWxlU3lzdGVtKiBtX3dlYkZpbGVTeXN0ZW07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKaW5kZXggYTlj
NjFkMGQ0ZmQwNTVlYzY1NmUwY2RkYzFmNjE5ZjhkYTk0OTVlYi4uYWUyZWIxZGMwZjY4MDMzZTRl
ODE2NjcyMzZhOGFmNDE3MjMwOThiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2
b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVhZEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgQXN5bmNGaWxlUwogICAgIEFTU0VSVChjb250ZXh0ICYmIGNvbnRleHQtPmlz
RG9jdW1lbnQoKSk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihjb250ZXh0KTsKICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBs
Ojpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+
b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUsIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+
KHR5cGUpLCBzaXplLCBmYWxzZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxi
YWNrcykpOworICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0od2ViRnJhbWUs
IHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBmYWxzZSwgbmV3
IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSkpOwogfQogCiB2b2lk
IExvY2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBib29sIHN5bmNo
cm9ub3VzKQpAQCAtNzEsMTIgKzcxLDEyIEBAIHZvaWQgTG9jYWxGaWxlU3lzdGVtOjpyZXF1ZXN0
RmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpCiAgICAg
aWYgKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwogICAgICAgICBXZWJGcmFtZUltcGwq
IHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwot
ICAgICAgICB3ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0
aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgdHJ1ZSwgbmV3IFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAgICAgICB3ZWJGcmFtZS0+Y2xp
ZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVt
OjpUeXBlPih0eXBlKSwgc2l6ZSwgdHJ1ZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBs
KGNhbGxiYWNrcywgdHlwZSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFdvcmtlckNvbnRleHQq
IHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CiAg
ICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250
ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKICAgICAgICAgV2ViV29ya2VyQmFz
ZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclBy
b3h5KTsKLSAgICAgICAgd2ViV29ya2VyLT5vcGVuRmlsZVN5c3RlbShzdGF0aWNfY2FzdDxXZWJG
aWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsKGNhbGxiYWNrcywgY29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CisgICAg
ICAgIHdlYldvcmtlci0+b3BlbkZpbGVTeXN0ZW0oc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6
VHlwZT4odHlwZSksIHNpemUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFj
a3MsIHR5cGUsIGNvbnRleHQsIHN5bmNocm9ub3VzKSwgc3luY2hyb25vdXMpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNh
bGxiYWNrc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwuY3BwCmluZGV4IDUyYTQwMzIxZGZiZDE5MTljNjNlMDRhZmM5YjgzM2Ux
MGRiY2ZjZjQuLjBjNzFmODAyZDUxNjMzOTA2NmIyM2I0ZTEwZDMzOWVlMTE4YTRmYTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbC5jcHAKQEAgLTM2LDggKzM2LDkgQEAKICNpbmNsdWRlICJBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgogI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJGaWxlU3lzdGVtRW50cnkuaCIKICNp
bmNsdWRlICJXZWJGaWxlSW5mby5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlICJXZWJGaWxlU3lzdGVtRW50cnkuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNs
dWRlICJXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTQ2LDggKzQ3LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6V2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwoUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxi
YWNrcywgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgYm9vbCBzeW5j
aHJvbm91cykKK1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpXZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbChQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBB
c3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgYm9vbCBzeW5jaHJvbm91cykKICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKKyAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBt
X3N5bmNocm9ub3VzKHN5bmNocm9ub3VzKQogewpAQCAtODUsOSArODcsOSBAQCB2b2lkIFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRSZWFkRGlyZWN0b3J5KGNvbnN0IFdlYlZlY3RvcjxX
ZWJGaWxlU3lzdGVtRQogdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkT3BlbkZp
bGVTeXN0ZW0oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHBhdGgpCiB7
CiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQotICAg
ICAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFtZSwgV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW06OmNyZWF0ZShtX2NvbnRleHQsIHBhdGgsIG1fc3luY2hyb25vdXMpKTsK
KyAgICAgICAgbV9jYWxsYmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIFdvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGUobV9jb250ZXh0LCBtX3R5cGUsIHBhdGgsIG1fc3lu
Y2hyb25vdXMpKTsKICAgICBlbHNlCi0gICAgICAgIG1fY2FsbGJhY2tzLT5kaWRPcGVuRmlsZVN5
c3RlbShuYW1lLCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKHBhdGgpKTsKKyAgICAg
ICAgbV9jYWxsYmFja3MtPmRpZE9wZW5GaWxlU3lzdGVtKG5hbWUsIEFzeW5jRmlsZVN5c3RlbUNo
cm9taXVtOjpjcmVhdGUobV90eXBlLCBwYXRoKSk7CiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbC5oCmluZGV4IDc1ZmEyYmI5OTRmMDZlNDI2ODQ3ZjA3YWIyMjJmYmVhYmY4MmYxZDIu
LjNlMjE5MmU5OGRhNDYzMWExYzM4Y2U2NTYwNzlkYWJhOWQxMjczMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwu
aApAQCAtMzEsNiArMzEsOCBAQAogI2lmbmRlZiBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbF9o
CiAjZGVmaW5lIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsX2gKIAorI2luY2x1ZGUgIkFzeW5j
RmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgpAQCAtNDksNyArNTEsNyBAQCBjbGFzcyBXZWJTdHJpbmc7CiAKIGNsYXNz
IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsIDogcHVibGljIFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3MgewogcHVibGljOgotICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NPd25QdHI8
V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogPSAwLCBib29sIHN5bmNocm9ub3VzID0gZmFsc2UpOworICAgIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzPiwgV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpUeXBlID0gV2ViQ29yZTo6QXN5bmNG
aWxlU3lzdGVtOjpUZW1wb3JhcnksIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqID0g
MCwgYm9vbCBzeW5jaHJvbm91cyA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIH5XZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZFN1Y2NlZWQoKTsKQEAgLTYx
LDYgKzYzLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIAorICAgIC8vIFVzZWQgZm9yIG9wZW5G
aWxlU3lzdGVtIGNhbGxiYWNrcy4KKyAgICBXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW06OlR5cGUg
bV90eXBlOworCiAgICAgLy8gVXNlZCBmb3Igd29ya2VyJ3Mgb3BlbkZpbGVTeXN0ZW0gY2FsbGJh
Y2tzLgogICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKICAg
ICBib29sIG1fc3luY2hyb25vdXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKaW5kZXggMDU4ZTk0
N2E2M2VjYTE4OWNkYzFhZDMyM2NhNzEyYzI1YjExNjhiYi4uZmFlYTQwYjA1Mzc0NDM4ZDc1NDgy
MmNhY2I1MDdlMjEyM2VmMTUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNTYsOCAr
NTYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGZpbGVTeXN0
ZW1PcGVyYXRpb25zTW9kZVtdID0gImZpbGVTeXN0ZW1PcGVyYXRpb25zTW9kZSI7CiAKLVdvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBi
b29sIHN5bmNocm9ub3VzKQotICAgIDogQXN5bmNGaWxlU3lzdGVtKHJvb3RQYXRoKQorV29ya2Vy
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBl
LCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9ub3VzKQorICAgIDogQXN5bmNG
aWxlU3lzdGVtKHR5cGUsIHJvb3RQYXRoKQogICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KGNvbnRleHQpCiAgICAgLCBtX3dlYkZpbGVTeXN0ZW0oV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+
ZmlsZVN5c3RlbSgpKQogICAgICwgbV93b3JrZXJDb250ZXh0KHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihjb250ZXh0KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCmluZGV4IDBiNGI3MDg1NDJhOTA0
MzVlOWU5ZWIwZTgyN2Q2MzllNWMwN2FiNGIuLjdlMzMxNmIyMmM5MzNhMDAzMWRiYjBlMTU3Y2Ix
ODA1MzhmNzdkODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaApAQCAtNTIsOSArNTIsOSBAQCBjbGFz
cyBXb3JrZXJDb250ZXh0OwogCiBjbGFzcyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSA6
IHB1YmxpYyBBc3luY0ZpbGVTeXN0ZW0gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wgc3luY2hyb25vdXMpCisgICAgc3RhdGljIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBh
dGgsIGJvb2wgc3luY2hyb25vdXMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNvbnRleHQsIHJvb3RQYXRoLCBzeW5jaHJv
bm91cykpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdvcmtlckFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtKGNvbnRleHQsIHR5cGUsIHJvb3RQYXRoLCBzeW5jaHJvbm91cykpOwogICAgIH0K
IAogICAgIHZpcnR1YWwgfldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKCk7CkBAIC03NSw3
ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlV3JpdGVyKEFzeW5jRmls
ZVdyaXRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAKIHByaXZhdGU6Ci0gICAgV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcm9v
dFBhdGgsIGJvb2wgc3luY2hyb25vdXMpOworICAgIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUsIGNvbnN0
IFN0cmluZyYgcm9vdFBhdGgsIGJvb2wgc3luY2hyb25vdXMpOwogCiAgICAgUGFzc1JlZlB0cjxX
ZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZVdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UoUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82163</attachid>
            <date>2011-02-11 12:57:21 -0800</date>
            <delta_ts>2011-02-11 13:39:19 -0800</delta_ts>
            <desc>Patch for commit, no layout test crashes</desc>
            <filename>bug-53529-20110211125720.patch</filename>
            <type>text/plain</type>
            <size>37947</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgzNTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5M2QyZWRkYjFhMzA0YmU0YzY1ZTA2
YzUxZjBmNGU5NGQxMGYwMDM5Li40ZDUwOWMzNTg3MzFiZTAzNDc2N2E0NjExN2JlOGFhZjY2ZWEw
MDczIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDItMTEgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgorCisg
ICAgICAgIFtmaWxlYXBpXSBBZGQgc3VwcG9ydCBmb3IgZmlsZXN5c3RlbTogVVJJIGhhbmRsaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzUyOQor
CisgICAgICAgIFRlc3RzIGZvciBmaWxlc3lzdGVtOiBVUklzLCB0ZXN0aW5nIGJvdGggdGhlaXIg
c2VjdXJpdHkgb3JpZ2luCisgICAgICAgIHByb3BlcnRpZXMgYW5kIHRoZSBleGlzdGVuY2Ugb2Yg
dGhlIEVudHJ5LnRvVVJJIG1ldGhvZC4KKworICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9kaXJl
Y3RvcnktZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9m
aWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRyeS10by11cmkuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50cnktdG8tdXJpLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9maWxlc3lzdGVtL2ZpbGUtZW50cnktdG8tdXJpLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1vcmlnaW4tZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3Jp
Z2luLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZGly
ZWN0b3J5LWVudHJ5LXRvLXVyaS5qczogQWRkZWQuCisgICAgICAgIChlcnJvckNhbGxiYWNrKToK
KyAgICAgICAgKGVudHJ5VG9VUkkpOgorICAgICAgICAoY3JlYXRlVGVzdERpcmVjdG9yeSk6Cisg
ICAgICAgICgpOgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS1lbnRy
eS10by11cmkuanM6IEFkZGVkLgorICAgICAgICAoZXJyb3JDYWxsYmFjayk6CisgICAgICAgIChl
bnRyeVRvVVJJKToKKyAgICAgICAgKGNyZWF0ZVRlc3RGaWxlKToKKyAgICAgICAgKCk6CisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5
c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9zZWN1cml0eS9yZXNvdXJjZXMvY3JlYXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sOiBBZGRlZC4K
KwogMjAxMS0wMi0xMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjc4MzMxLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRyeS10by11cmktZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2RpcmVjdG9yeS1lbnRyeS10by11
cmktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMjczM2M5N2ExZTc5N2JjMzdhNDIxNGJkMWY5
ZDkxYjU4ZDVkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0
ZW0vZGlyZWN0b3J5LWVudHJ5LXRvLXVyaS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAor
T2J0YWluaW5nIFVSSSBmcm9tIERpcmVjdG9yeUVudHJ5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyB0ZXN0RGlyZWN0b3J5VVJJIGlzICdmaWxlc3lzdGVtOmZpbGU6Ly8v
dGVtcG9yYXJ5L3Rlc3REaXJlY3RvcnknCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL2RpcmVjdG9yeS1lbnRyeS10by11cmkuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFmOTFiYjgyNTEx
ZDYzNWZiZWJmYTAxODU5ODY3N2E0MDdmYjAwMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLmh0bWwKQEAgLTAsMCAr
MSwxMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9m
cy10ZXN0LXV0aWwuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9kaXJlY3RvcnktZW50cnktdG8tdXJpLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRv
LXVyaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZS1lbnRy
eS10by11cmktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4ODZmZDUyN2I0MTRjZTI1NDBmODA3
OGY4Yzk0NmExMjhhN2E4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzeXN0ZW0vZmlsZS1lbnRyeS10by11cmktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAK
K09idGFpbmluZyBVUkkgZnJvbSBGaWxlRW50cnkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIHRlc3RGaWxlVVJJIGlzICdmaWxlc3lzdGVtOmZpbGU6Ly8vdGVtcG9yYXJ5
L3Rlc3RGaWxlRW50cnkudHh0JworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9m
aWxlLWVudHJ5LXRvLXVyaS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGUt
ZW50cnktdG8tdXJpLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVjMzQ1YjFmMzg5Yjk3MzA0NTViOTFkYmQz
NmRhYmEwZjQ4ZTI2MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9maWxlLWVudHJ5LXRvLXVyaS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorPGhl
YWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZmlsZS1lbnRyeS10by11
cmkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9maWxlc3lzdGVtL2ZpbGVzeXN0ZW0tdXJpLW9yaWdpbi1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iOGZmM2UyZGFhZWI2OTgyYmZlMGM2NzA4ODQ2ZTc1MmVhMTk4ZWFk
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZpbGVzeXN0
ZW0tdXJpLW9yaWdpbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorUEFTU0VEOiBvcmlnaW4g
d2FzIGh0dHA6Ly93d3cud2Via2l0Lm9yZzo4MDgwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDcy
MjMyMjBlZDhkMDc2YTk3Njg2NTQzYjE5YThlMmFmODgyYzc3NgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9maWxlc3lzdGVtLXVyaS1vcmlnaW4uaHRtbApA
QCAtMCwwICsxLDEzIEBACis8YSBzdHlsZT0iZGlzcGxheTpub25lIiBocmVmPSJmaWxlc3lzdGVt
Omh0dHA6Ly93d3cud2Via2l0Lm9yZzo4MDgwL3RlbXBvcmFyeS9hL2IvYy9maWxlLnR4dCI+Zm9v
PC9hPgorPHA+VGhpcyB0ZXh0IHNob3VsZCBub3QgYmUgdmlzaWJsZS4gSXQgc2hvdWxkIGJlIG92
ZXJ3cml0dGVuIGJ5IHRoZSBydW5uaW5nIG9mIHRoZSB0ZXN0LjwvcD4KKzxzY3JpcHQ+CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIHZhciBleHBlY3RlZE9yaWdpbiA9ICdodHRwOi8vd3d3
LndlYmtpdC5vcmc6ODA4MCc7CisgICAgdmFyIGFjdHVhbE9yaWdpbiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdhJylbMF0ub3JpZ2luOworICAgIHZhciByZXN1bHRFbHQgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncCcpWzBdOworICAgIGlmIChhY3R1YWxPcmlnaW4g
PT0gZXhwZWN0ZWRPcmlnaW4pCisgICAgICAgIHJlc3VsdEVsdC5pbm5lclRleHQgPSAnUEFTU0VE
OiBvcmlnaW4gd2FzICcgKyBleHBlY3RlZE9yaWdpbjsKKyAgICBlbHNlCisgICAgICAgIHJlc3Vs
dEVsdC5pbm5lclRleHQgPSAnRkFJTEVEOiBleHBlY3RlZCBvcmlnaW46ICcgKyBleHBlY3RlZE9y
aWdpbiArICcgYnV0IGdvdDogJyArIGFjdHVhbE9yaWdpbjsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9kaXJlY3RvcnktZW50cnkt
dG8tdXJpLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Jlc291cmNlcy9kaXJlY3Rv
cnktZW50cnktdG8tdXJpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzZmFiNDg5OGVkODQ2NTRmNTlmMWM1NWQ2
ZWQwNmViYjJiY2Q4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVzb3VyY2VzL2RpcmVjdG9yeS1lbnRyeS10by11cmkuanMKQEAgLTAsMCArMSwzNCBA
QAoraWYgKHRoaXMuaW1wb3J0U2NyaXB0cykgeworICAgIGltcG9ydFNjcmlwdHMoJ2ZzLXdvcmtl
ci1jb21tb24uanMnKTsKKyAgICBpbXBvcnRTY3JpcHRzKCdmcy10ZXN0LXV0aWwuanMnKTsKK30K
KworZGVzY3JpcHRpb24oIk9idGFpbmluZyBVUkkgZnJvbSBEaXJlY3RvcnlFbnRyeS4iKTsKKwor
dmFyIGZpbGVTeXN0ZW0gPSBudWxsOwordmFyIHRlc3REaXJlY3RvcnlOYW1lID0gJ3Rlc3REaXJl
Y3RvcnknOwordmFyIHRlc3REaXJlY3RvcnlVUkkgPSBudWxsOworCitmdW5jdGlvbiBlcnJvckNh
bGxiYWNrKGVycm9yKSB7CisgICAgdGVzdEZhaWxlZCgiRXJyb3Igb2NjdXJlZDoiICsgZXJyb3Iu
Y29kZSk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGVudHJ5VG9VUkkoZW50
cnkpIHsKKyAgICB0ZXN0RGlyZWN0b3J5VVJJID0gZW50cnkudG9VUkkoKTsKKyAgICBzaG91bGRC
ZSgidGVzdERpcmVjdG9yeVVSSSIsICInZmlsZXN5c3RlbTpmaWxlOi8vL3RlbXBvcmFyeS90ZXN0
RGlyZWN0b3J5JyIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5jdGlvbiBjcmVhdGVU
ZXN0RGlyZWN0b3J5KCkgeworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXREaXJlY3RvcnkodGVzdERp
cmVjdG9yeU5hbWUsIHtjcmVhdGU6dHJ1ZX0sIGVudHJ5VG9VUkksIGVycm9yQ2FsbGJhY2spOwor
fQorCitmdW5jdGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsKKyAgICBmaWxlU3lzdGVtID0g
ZnM7CisgICAgcmVtb3ZlQWxsSW5EaXJlY3RvcnkoZmlsZVN5c3RlbS5yb290LCBjcmVhdGVUZXN0
RGlyZWN0b3J5LCBlcnJvckNhbGxiYWNrKTsKK30KKwordmFyIGpzVGVzdElzQXN5bmMgPSB0cnVl
OworcmVxdWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCAxMDAsIGZpbGVTeXN0ZW1DYWxsYmFjaywg
ZXJyb3JDYWxsYmFjayk7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZmlsZS1lbnRyeS10by11
cmkuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZpbGUtZW50cnkt
dG8tdXJpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiODJhZTMwZjhkZjFlNjhmNjNmYmIyNTVjYjA3NTc3ZTA0
YWJmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVz
b3VyY2VzL2ZpbGUtZW50cnktdG8tdXJpLmpzCkBAIC0wLDAgKzEsMzQgQEAKK2lmICh0aGlzLmlt
cG9ydFNjcmlwdHMpIHsKKyAgICBpbXBvcnRTY3JpcHRzKCdmcy13b3JrZXItY29tbW9uLmpzJyk7
CisgICAgaW1wb3J0U2NyaXB0cygnZnMtdGVzdC11dGlsLmpzJyk7Cit9CisKK2Rlc2NyaXB0aW9u
KCJPYnRhaW5pbmcgVVJJIGZyb20gRmlsZUVudHJ5LiIpOworCit2YXIgZmlsZVN5c3RlbSA9IG51
bGw7Cit2YXIgdGVzdEZpbGVOYW1lID0gJ3Rlc3RGaWxlRW50cnkudHh0JzsKK3ZhciB0ZXN0Rmls
ZVVSSSA9IG51bGw7CisKK2Z1bmN0aW9uIGVycm9yQ2FsbGJhY2soZXJyb3IpIHsKKyAgICB0ZXN0
RmFpbGVkKCJFcnJvciBvY2N1cmVkOiIgKyBlcnJvci5jb2RlKTsKKyAgICBmaW5pc2hKU1Rlc3Qo
KTsKK30KKworZnVuY3Rpb24gZW50cnlUb1VSSShlbnRyeSkgeworICAgIHRlc3RGaWxlVVJJID0g
ZW50cnkudG9VUkkoKTsKKyAgICBzaG91bGRCZSgidGVzdEZpbGVVUkkiLCAiJ2ZpbGVzeXN0ZW06
ZmlsZTovLy90ZW1wb3JhcnkvdGVzdEZpbGVFbnRyeS50eHQnIik7CisgICAgZmluaXNoSlNUZXN0
KCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRlc3RGaWxlKCkgeworICAgIGZpbGVTeXN0ZW0ucm9v
dC5nZXRGaWxlKHRlc3RGaWxlTmFtZSwge2NyZWF0ZTp0cnVlfSwgZW50cnlUb1VSSSwgZXJyb3JD
YWxsYmFjayk7Cit9CisKK2Z1bmN0aW9uIGZpbGVTeXN0ZW1DYWxsYmFjayhmcykgeworICAgIGZp
bGVTeXN0ZW0gPSBmczsKKyAgICByZW1vdmVBbGxJbkRpcmVjdG9yeShmaWxlU3lzdGVtLnJvb3Qs
IGNyZWF0ZVRlc3RGaWxlLCBlcnJvckNhbGxiYWNrKTsKK30KKwordmFyIGpzVGVzdElzQXN5bmMg
PSB0cnVlOworcmVxdWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCAxMDAsIGZpbGVTeXN0ZW1DYWxs
YmFjaywgZXJyb3JDYWxsYmFjayk7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJh
bWUtZnJvbS1yZW1vdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTBmNGFmZDZlNTY2OWY1NWE1YzQzZDQzMDE5NzAyZTFjNGU2OGI0MAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUt
ZnJvbS1yZW1vdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDA6IE5vdCBhbGxvd2VkIHRvIGxvYWQgbG9jYWwgcmVzb3VyY2U6IGZpbGVzeXN0ZW06
aHR0cDovL2xvY2FsaG9zdDo4MDAwL3RlbXBvcmFyeS9wYWdlLmh0bWwKK1RoaXMgdGVzdCBpcyB0
byBzZWUgaWYgYSByZW1vdGUgZmlsZSBjYW4gaW5jbHVkZSBhIGxvY2FsIHBhZ2UgdmlhIGEgZmls
ZXN5c3RlbTogVVJJIGluIGFuIGlGcmFtZS4KKworVGVzdCBQYXNzZWQuIExvY2FsIHBhZ2Ugbm90
IHJlbW90ZWx5IGxvYWRlZCBpbnRvIGlGcmFtZS4KKyAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20t
cmVtb3RlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRjZGY0YjQ3ODVjMmU4MTBjMTAxZjc0NThhZTgzMjQ4
YmZlNzU0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbApAQCAtMCwwICsxLDQyIEBACis8
aHRtbD4gPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHsKKyAg
ICAgICAgICAgIHZhciBwYWdlTG9jYXRpb24gPSAiZmlsZXN5c3RlbTpodHRwOi8vbG9jYWxob3N0
OjgwMDAvdGVtcG9yYXJ5L3BhZ2UuaHRtbCI7CisgICAgICAgICAgICB2YXIgbG9jYWxJZnJhbWVF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgICAgICBs
b2NhbElmcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsICJteUZyYW1lIik7CisgICAgICAg
ICAgICBsb2NhbElmcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzcmMiLCBwYWdlTG9jYXRpb24p
OworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsb2NhbElmcmFtZUVsZW1l
bnQpOworCisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InJlc3VsdCIpOworICAgICAgICAgICAgdmFyIG15RnJhbWVEb2N1bWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJteUZyYW1lIikuY29udGVudERvY3VtZW50OworICAgICAgICAgICAgaWYg
KG15RnJhbWVEb2N1bWVudCkKKyAgICAgICAgICAgICAgICByZXN1bHQuaW5uZXJIVE1MID0gIlRl
c3QgRmFpbGVkOiBMb2NhbCBwYWdlIHJlbW90ZWx5IGxvYWRlZCBpbnRvIGlGcmFtZS4iOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5pbm5lckhUTUwgPSAiVGVzdCBQ
YXNzZWQuIExvY2FsIHBhZ2Ugbm90IHJlbW90ZWx5IGxvYWRlZCBpbnRvIGlGcmFtZS4iOworCisg
ICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5lZWQgdG8gd2FpdCBmb3Ig
dGhlIGlmcmFtZSB0byBkbyBpdHMgYXN5bmMgd29yay4KKyAgICAgICAgICAgIHNldFRpbWVvdXQo
ZG9uZSwgMTAwMCk7CisgICAgICAgIH0KKworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
CisgICAgPGRpdiBpZD0iZGl2MCI+CisgICAgICAgIFRoaXMgdGVzdCBpcyB0byBzZWUgaWYgYSBy
ZW1vdGUgZmlsZSBjYW4gaW5jbHVkZSBhIGxvY2FsIHBhZ2UgdmlhIGEgZmlsZXN5c3RlbTogVVJJ
IGluIGFuIGlGcmFtZS4KKyAgICA8L2Rpdj4KKyAgICA8YnI+CisgICAgPGRpdiBpZD0icmVzdWx0
Ij4KKyAgICAgICAgVGVzdCBub3QgcnVuIGNvcnJlY3RseS4KKyAgICA8L2Rpdj4KKyAgICA8aWZy
YW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3Jlc291cmNlcy9jcmVhdGUt
ZmlsZXN5c3RlbS1maWxlLmh0bWwiIG9ubG9hZD0icnVuVGVzdCgpIj48L2lmcmFtZT4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
cmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL2NyZWF0ZS1maWxlc3lzdGVtLWZpbGUuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lOTI0YWI3MjU5Yzk4NzQyN2IxODdhZjE0NTExNThiYTcwNjg2NDkxCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMvY3Jl
YXRlLWZpbGVzeXN0ZW0tZmlsZS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzxodG1sPgorPGhlYWQ+
CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmlsZSgpIHsKKyAgICAgICAg
ICAgIHJlcXVlc3RGaWxlU3lzdGVtKFRFTVBPUkFSWSwgMTAwLCBmdW5jdGlvbihmcykgeworICAg
ICAgICAgICAgICAgIGZzLnJvb3QuZ2V0RmlsZSgicGFnZS5odG1sIiwge2NyZWF0ZTp0cnVlfSwg
ZnVuY3Rpb24oZW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnkuY3JlYXRlV3JpdGVy
KGZ1bmN0aW9uKHdyaXRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJiID0gbmV3
IEJsb2JCdWlsZGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5hcHBlbmQoJzxkaXYg
aWQ9ImlubmVyRGl2Ij5WaXNpYmxlIENvbnRlbnRzPC9kaXY+XG4nKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci53cml0ZShiYi5nZXRCbG9iKCkpOworICAgICAgICAgICAgICAgICAg
ICB9KQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0pCisgICAgICAgICAgICBjcmVhdGVG
aWxlKCk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCmluZGV4IDE2MGY5NTc4NDljYjE3OTMxN2MyYzU0YWIwNWZlYjMxNDA1ZGEyY2YuLjRi
MTg5NWRkNjAxZWNlMTU4OGMxNmFhM2I4ZTFjYjE4MjFiZDIyODQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9Ta2lwcGVkCkBAIC0yNjE4LDYgKzI2MTgsNyBAQCBmYXN0L3BhcnNlci9wcmUtaHRtbDUtcGFy
c2VyLXF1aXJrcy5odG1sCiAjIEZpbGVTeXN0ZW0gQVBJIGlzIG5vdCBzdXBwb3J0ZWQuCiBmYXN0
L2ZpbGVzeXN0ZW0KIGh0dHAvdGVzdHMvbG9jYWwvZmlsZWFwaQoraHR0cC90ZXN0cy9zZWN1cml0
eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS5odG1sCiAKICMgTmVlZHMgbW9yZSBpbnZl
c3RpZ2F0aW9uIGxpa2UgUVQKIGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtbGlua3MtYW5kLXRleHQu
aHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCAxNjI3YzY3MzJjOTUzNmJiOTdkOTll
ODdkYWNlZDYwOWZkMjBhODU4Li42MDc2MTExNjVlN2E4ZGJhMzViMmYyNGRiZjI3NTkwODFkYzhi
YWUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtMjU3LDYgKzI1Nyw3IEBAIGh0dHAv
dGVzdHMvbWVkaWEvdmlkZW8tYnVmZmVyZWQuaHRtbAogCiAjIEZpbGVTeXN0ZW0gQVBJIGlzIG5v
dCBzdXBwb3J0ZWQuCiBmYXN0L2ZpbGVzeXN0ZW0KK2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5
c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbAogCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjIyMwogIyBUaGUgV2ViS2l0IHBsdWdpbiBpbXBsZW1lbnRhdGlv
biBkb2VzIG5vdCBzdXBwb3J0IGlmcmFtZSBzaGltcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmlu
ZGV4IDFkZDEyZTRiYmMyODdkNTk4MjdlNGRhODI2N2M2Mzk4YjliNTlhMWQuLjcwZTExZjQwZmU1
YjQxNDNkYzYwMDZjZjAxNDAxOGUzOTI4NmJhZTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApA
QCAtNDkxMCw2ICs0OTEwLDcgQEAgZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBhcnNlci1xdWlya3Mu
aHRtbAogCiAjIEZpbGVTeXN0ZW0gQVBJIGlzIG5vdCBzdXBwb3J0ZWQuCiBmYXN0L2ZpbGVzeXN0
ZW0KK2h0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRt
bAogCiAjIEl0IGZhaWxzLCBiZWNhdXNlIDNEIGNhbnZhcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0
LgogaHR0cC90ZXN0cy9jYW52YXMvd2ViZ2wvb3JpZ2luLWNsZWFuLWNvbmZvcm1hbmNlLmh0bWwK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5kZXggZmY5YWExNjM4MDNlMjBiMDIwZmJhOGE4OGY5
NTFiYTRhOWExOTMyMC4uYmMxNzc5MWZkMmZkOTgzMzQ5NjVhMzU5MjEyY2MwN2Q0OTU4ZjY0OCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAgLTEwOTEsNiArMTA5MSw3IEBAIGZhc3QvcGFy
c2VyL3ByZS1odG1sNS1wYXJzZXItcXVpcmtzLmh0bWwKIAogIyBGaWxlU3lzdGVtIEFQSSBpcyBu
b3Qgc3VwcG9ydGVkLgogZmFzdC9maWxlc3lzdGVtCitodHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVz
eXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWwKIAogIyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bm9kZXNGcm9tUmVjdCBpcyBub3Qgc3VwcG9ydGVkLgogZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1i
YXNpYy5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjlmMzlmOTkwNzM0MjljYWY5NGZhMTExZGRlZDIzYWEy
M2YzZDljMC4uZWVmMzBlMGRlNjQ0YTdhZmFiMjM2ZjA5YWQyN2E3MDc5MmQ3MDA4YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDExLTAyLTExICBBZGFtIEtsZWluICA8YWRhbWtAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KKworICAgICAg
ICBbZmlsZWFwaV0gQWRkIHN1cHBvcnQgZm9yIGZpbGVzeXN0ZW06IFVSSSBoYW5kbGluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM1MjkKKworICAg
ICAgICBUaGVyZSBhcmUgdHdvIG1ham9yIHBhcnRzIHRvIHRoaXMgcGF0Y2g6IG9uZSBpcyB0byBh
ZGQgYW4KKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgRW50cnkudG9VUkkgdG8gdGhlIEZpbGVT
eXN0ZW0gQVBJLgorICAgICAgICBUaGUgb3RoZXIgaXMgdG8gaW1wbGVtZW50IHNlY3VyaXR5IG9y
aWdpbiBjaGVja2luZyBmb3IgdGhpcworICAgICAgICBuZXcgc2NoZW1lLgorCisgICAgICAgIEFs
bCBjaGFuZ2VzIGFyZSBndWFyZGVkIGJ5IHRoZSBGSUxFX1NZU1RFTSBmZWF0dXJlLiBBbiBhY2Nv
bXBhbnlpbmcKKyAgICAgICAgQ2hyb21pdW0gY2hhbmdlLCB0byBzdXBwb3J0IGxvYWRpbmcgb2Yg
ZmlsZXN5c3RlbTogVVJJcywgaGFzIHJlY2VudGx5CisgICAgICAgIGJlZW4gc3VibWl0dGVkIGFz
IENocm9taXVtIHI3NDA4Mi4KKworICAgICAgICBTcGVjOgorICAgICAgICAgIGh0dHA6Ly9kZXYu
dzMub3JnLzIwMDkvZGFwL2ZpbGUtc3lzdGVtL2ZpbGUtZGlyLXN5cy5odG1sI21ldGhvZHMtMgor
ICAgICAgICBQcm9wb3NlZCBVUkkgZm9ybWF0LCBhbmQgZGlzY3Vzc2lvbiBvZiBzZWN1cml0eSBv
cmlnaW4gaXNzdWVzOgorICAgICAgICAgIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVi
bGljL3B1YmxpYy13ZWJhcHBzLzIwMTFKYW5NYXIvMDIxOC5odG1sCisKKyAgICAgICAgVGVzdHM6
IGZhc3QvZmlsZXN5c3RlbS9kaXJlY3RvcnktZW50cnktdG8tdXJpLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvZmlsZXN5c3RlbS9maWxlLWVudHJ5LXRvLXVyaS5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2ZpbGVzeXN0ZW0vZmlsZXN5c3RlbS11cmktb3JpZ2luLmh0bWwKKyAgICAgICAgICAg
ICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRt
bAorCisgICAgICAgICogZmlsZWFwaS9FbnRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbnRy
eTo6dG9VUkkpOgorICAgICAgICAqIGZpbGVhcGkvRW50cnkuaDoKKyAgICAgICAgKiBmaWxlYXBp
L0VudHJ5LmlkbDoKKyAgICAgICAgLSBBZGRlZCB0b1VSSSBtZXRob2QgdG8gdGhlIElETCwgb21p
dHRpbmcgdGhlIE1JTUUgdHlwZSBhcmd1bWVudAorICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUg
c3BlYyBhcyBpdCB3aWxsIHNvb24gYmUgcmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5
T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9y
aWdpbik6CisgICAgICAgIC0gY3JhY2sgdGhlIGZpbGVzeXN0ZW06IFVSSSB0byBnZXQgYXQgdGhl
IG9yaWdpbiBvZiB0aGUgc2l0ZQorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNh
bkRpc3BsYXkpOgorICAgICAgICAtIGNhbkRpc3BsYXkgZm9yIGZpbGVzeXN0ZW06IFVSSXMgaXMg
ZXF1aXZhbGVudCB0byBjYW5SZXF1ZXN0CisgICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6b3BlbkZpbGVTeXN0ZW0pOgorICAgICAg
ICAqIHBsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNG
aWxlU3lzdGVtOjp0eXBlKToKKyAgICAgICAgLSBFeHBvc2VkIGZpbGVzeXN0ZW0gdHlwZSB0byBh
bGxvdyB0b1VSSSB0byB1c2UgaXQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICBwYXRoLgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpBc3luY0ZpbGVTeXN0ZW0pOgorICAgICAg
ICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbkRp
c3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVS
ZWdpc3RyeTo6Y2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyQXNDYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdCk6Cisg
ICAgICAgIC0gR2VuZXJhbGl6ZWQgY2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QgYXMgaXQgYXBw
bGllcyB0byBib3RoCisgICAgICAgICAgZmlsZXN5c3RlbTogYW5kIGJsb2I6IFVSSXMuCisgICAg
ICAgICogcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaDoKKwogMjAxMS0wMi0xMSAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjc4MzMxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9F
bnRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmNwcAppbmRleCA5YzNmYTRl
ZWY4YWVjZWU5OGE4MWFmOWE2MjQ1NDIwYWFmMmEyYzFiLi41M2NkNTc2YTFjNzcxNzA3ZDg0Yjdl
OGU3YmYwOTkzZjFmZTU5ZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Vu
dHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmNwcApAQCAtMzIsMTMg
KzMyLDE3IEBACiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAKKyNpbmNsdWRlICJBc3luY0Zp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgogI2luY2x1ZGUgIkVudHJ5
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZUVy
cm9yLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIk1ldGFk
YXRhQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJWb2lkQ2FsbGJhY2suaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODIsMTEgKzg2LDE1IEBAIHZvaWQgRW50cnk6OmdldFBhcmVudChQYXNzUmVmUHRyPEVudHJ5
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvCiAgICAgICAgIGZpbGVz
eXN0ZW0oKS0+c2NoZWR1bGVDYWxsYmFjayhlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgRmlsZUVy
cm9yOjpjcmVhdGUoRmlsZUVycm9yOjpJTlZBTElEX01PRElGSUNBVElPTl9FUlIpKTsKIH0KIAot
U3RyaW5nIEVudHJ5Ojp0b1VSSShjb25zdCBTdHJpbmcmKQorU3RyaW5nIEVudHJ5Ojp0b1VSSSgp
CiB7Ci0gICAgLy8gRklYTUU6IHRvIGJlIGltcGxlbWVudGVkLgotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBTdHJpbmdCdWlsZGVyIHVyaUJ1aWxk
ZXI7CisgICAgdXJpQnVpbGRlci5hcHBlbmQoImZpbGVzeXN0ZW06Iik7CisgICAgdXJpQnVpbGRl
ci5hcHBlbmQoZmlsZXN5c3RlbSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAgIHVyaUJ1aWxkZXIuYXBwZW5kKCIvIik7CisgICAg
dXJpQnVpbGRlci5hcHBlbmQobV9maWxlU3lzdGVtLT5hc3luY0ZpbGVTeXN0ZW0oKS0+dHlwZSgp
ID09IEFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5ID8gInRlbXBvcmFyeSIgOiAicGVyc2lzdGVu
dCIpOworICAgIHVyaUJ1aWxkZXIuYXBwZW5kKG1fZnVsbFBhdGgpOworICAgIHJldHVybiB1cmlC
dWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRW50cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRW50cnkuaAppbmRleCA5MzY3ZjRmMzAyYTRkN2E1MDkwNDM5Yzc1YjYwMzgyMjY4YzQwMjNj
Li5kODcxMjYyNDBlNTkxYmEyZDJlYmUzMTc4MWU4Njk5Njc3NjI0NjA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9FbnRyeS5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZShQYXNz
UmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gMCwgUGFzc1JlZlB0cjxFcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gMCkgY29uc3Q7CiAgICAgdm9pZCBnZXRQYXJlbnQo
UGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSAwLCBQYXNzUmVmUHRy
PEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSAwKSBjb25zdDsKIAotICAgIFN0cmluZyB0
b1VSSShjb25zdCBTdHJpbmcmIG1pbWVUeXBlID0gU3RyaW5nKCkpOworICAgIFN0cmluZyB0b1VS
SSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgRW50cnkoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtQmFz
ZT4sIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9FbnRyeS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmlkbAppbmRl
eCBmNmZjZGIzYjRlYTg2NDlmM2Q4ZDk3ZDNhOTEwNDIzYjRjNzFmOTcwLi5mMTQ0YjMxZWIyZTk0
MGU4ODM1ZjNhMDg5MjhkYmYyOGZiMDg1N2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0VudHJ5LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0VudHJ5LmlkbApA
QCAtNDMsNiArNDMsNyBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHZvaWQgZ2V0TWV0YWRh
dGEoaW4gW09wdGlvbmFsLCBDYWxsYmFja10gTWV0YWRhdGFDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2ssIGluIFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7
CiAgICAgICAgIHZvaWQgbW92ZVRvKGluIERpcmVjdG9yeUVudHJ5IHBhcmVudCwgaW4gW09wdGlv
bmFsLCBDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgbmFtZSwg
aW4gW09wdGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGlu
IFtPcHRpb25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CiAgICAg
ICAgIHZvaWQgY29weVRvKGluIERpcmVjdG9yeUVudHJ5IHBhcmVudCwgaW4gW09wdGlvbmFsLCBD
b252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgbmFtZSwgaW4gW09w
dGlvbmFsLCBDYWxsYmFja10gRW50cnlDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtPcHRp
b25hbCwgQ2FsbGJhY2tdIEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayk7CisgICAgICAgIERP
TVN0cmluZyB0b1VSSSgpOwogICAgICAgICB2b2lkIHJlbW92ZShpbiBbT3B0aW9uYWwsIENhbGxi
YWNrXSBWb2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbT3B0aW9uYWwsIENhbGxiYWNr
XSBFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwogICAgICAgICB2b2lkIGdldFBhcmVudChp
biBbT3B0aW9uYWwsIENhbGxiYWNrXSBFbnRyeUNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4g
W09wdGlvbmFsLCBDYWxsYmFja10gRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAgICB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAppbmRleCBjNzUwNWYzZjRlNWMy
MzJlMTM0OTY4ZGJkYjBjODU1N2UwMjMyNTAyLi45NzdlODYwNzU0Yjc5YjY2YTgyZDc0OGIwYjU5
ZjQ3NTRhMjk5ZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3Jp
Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcApAQCAt
NzksNiArNzksMTggQEAgU2VjdXJpdHlPcmlnaW46OlNlY3VyaXR5T3JpZ2luKGNvbnN0IEtVUkwm
IHVybCwgU2FuZGJveEZsYWdzIHNhbmRib3hGbGFncykKICAgICBpZiAobV9wcm90b2NvbCA9PSAi
YWJvdXQiIHx8IG1fcHJvdG9jb2wgPT0gImphdmFzY3JpcHQiKQogICAgICAgICBtX3Byb3RvY29s
ID0gIiI7CiAKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgaWYgKG1fcHJvdG9jb2wgPT0g
ImZpbGVzeXN0ZW0iKSB7CisgICAgICAgIEtVUkwgb3JpZ2luVVJMKFBhcnNlZFVSTFN0cmluZywg
dXJsLnBhdGgoKSk7CisgICAgICAgIGlmIChvcmlnaW5VUkwuaXNWYWxpZCgpKSB7CisgICAgICAg
ICAgICBtX3Byb3RvY29sID0gb3JpZ2luVVJMLnByb3RvY29sKCkubG93ZXIoKTsKKyAgICAgICAg
ICAgIG1faG9zdCA9IG9yaWdpblVSTC5ob3N0KCkubG93ZXIoKTsKKyAgICAgICAgICAgIG1fcG9y
dCA9IG9yaWdpblVSTC5wb3J0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9pc1Vu
aXF1ZSA9IHRydWU7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBGb3IgZWRnZSBjYXNlIFVSTHMg
dGhhdCB3ZXJlIHByb2JhYmx5IG1pc3BhcnNlZCwgbWFrZSBzdXJlIHRoYXQgdGhlIG9yaWdpbiBp
cyB1bmlxdWUuCiAgICAgaWYgKHNjaGVtZVJlcXVpcmVzQXV0aG9yaXR5KG1fcHJvdG9jb2wpICYm
IG1faG9zdC5pc0VtcHR5KCkpCiAgICAgICAgIG1faXNVbmlxdWUgPSB0cnVlOwpAQCAtMzEzLDEx
ICszMjUsOCBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5KGNvbnN0IEtVUkwmIHVy
bCkgY29uc3QKIHsKICAgICBTdHJpbmcgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2woKS5sb3dlcigp
OwogCi0jaWYgRU5BQkxFKEJMT0IpCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBnZW5lcmFsaXpl
IHRoaXMgY2hlY2suCi0gICAgaWYgKHByb3RvY29sID09IEJsb2JVUkw6OmJsb2JQcm90b2NvbCgp
KQorICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6Y2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QocHJv
dG9jb2wpKQogICAgICAgICByZXR1cm4gY2FuUmVxdWVzdCh1cmwpOwotI2VuZGlmCiAKICAgICBp
ZiAoU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQo
cHJvdG9jb2wpKQogICAgICAgICByZXR1cm4gbV9wcm90b2NvbCA9PSBwcm90b2NvbCB8fCBpc0Fj
Y2Vzc1RvVVJMV2hpdGVMaXN0ZWQodXJsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3lu
Y0ZpbGVTeXN0ZW0uY3BwCmluZGV4IGI4NWE0ODdmYjYxY2Y3NjZiOWIwYjhmNDk3MmY0Njc5M2Fl
MTljNmEuLmIxYTNmZTIyOTI4NThjNDhjMWNlNWI3ZDllYzQyZmJiOTJlOTM2Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcApAQCAtNDYsNyArNDYsNyBA
QCBib29sIEFzeW5jRmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IEFzeW5jRmlsZVN5c3RlbTo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYpCitQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gQXN5bmNGaWxlU3lz
dGVtOjpjcmVhdGUoVHlwZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiAwOwpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEFzeW5jRmlsZVN5c3RlbTo6
b3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBiYXNlUGF0aCwgY29uc3QgU3RyaW5nJiBzdG9y
YQogICAgIHJvb3RQYXRoICs9IHR5cGVTdHJpbmc7CiAgICAgcm9vdFBhdGguYXBwZW5kKFBsYXRm
b3JtRmlsZVBhdGhTZXBhcmF0b3IpOwogCi0gICAgY2FsbGJhY2tzLT5kaWRPcGVuRmlsZVN5c3Rl
bShuYW1lLCBBc3luY0ZpbGVTeXN0ZW06OmNyZWF0ZShyb290UGF0aCkpOworICAgIGNhbGxiYWNr
cy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFtZSwgQXN5bmNGaWxlU3lzdGVtOjpjcmVhdGUodHlwZSwg
cm9vdFBhdGgpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Bc3luY0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmls
ZVN5c3RlbS5oCmluZGV4IGMzNGE2NDRkNWRkMmMzZmIwNjliNDNlNjNjOTNiMWI5N2ZjNGI1MmEu
LmY1MjA3Y2UzZTIwYzA4NjI5MTM4NjM4MzY4YmVkMjNmZTg2MGZhZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgd2FpdEZvck9wZXJhdGlvblRvQ29tcGxldGUoKSB7IHJldHVybiBm
YWxzZTsgfQogCiAgICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBwbGF0Zm9ybS1zcGVj
aWZpYyBBc3luY0ZpbGVTeXN0ZW0gaW5zdGFuY2UgaWYgdGhlIHBsYXRmb3JtIGhhcyBpdHMgb3du
IGltcGxlbWVudGF0aW9uLgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEFz
eW5jRmlsZVN5c3RlbT4gY3JlYXRlKFR5cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpOwogCiAg
ICAgLy8gT3BlbnMgYSBuZXcgZmlsZSBzeXN0ZW0uIFRoZSBjcmVhdGUgcGFyYW1ldGVyIHNwZWNp
ZmllcyB3aGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgdGhlIHBhdGggaWYgaXQgZG9lcyBub3QgYWxy
ZWFkeSBleGlzdHMuCiAgICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5n
JiBiYXNlUGF0aCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlSWRlbnRpZmllciwgVHlwZSwgYm9vbCBj
cmVhdGUsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CkBAIC0xMzIsMTIg
KzEzMiwxNiBAQCBwdWJsaWM6CiAgICAgLy8gR2V0dGVyIGZvciB0aGlzIGZpbGUgc3lzdGVtJ3Mg
cm9vdCBwYXRoLgogICAgIFN0cmluZyByb290KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybVJv
b3RQYXRoOyB9CiAKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwog
cHJvdGVjdGVkOgotICAgIEFzeW5jRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmIHBsYXRmb3JtUm9v
dFBhdGgpCi0gICAgICAgIDogbV9wbGF0Zm9ybVJvb3RQYXRoKHBsYXRmb3JtUm9vdFBhdGgpCisg
ICAgQXN5bmNGaWxlU3lzdGVtKFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBwbGF0Zm9ybVJvb3RQ
YXRoKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fcGxhdGZvcm1Sb290UGF0
aChwbGF0Zm9ybVJvb3RQYXRoKQogICAgIHsKICAgICB9CiAKKyAgICBUeXBlIG1fdHlwZTsKICAg
ICBTdHJpbmcgbV9wbGF0Zm9ybVJvb3RQYXRoOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2NoZW1lUmVnaXN0cnkuY3BwCmluZGV4IDBhN2NiOGNmNGI5ZmRjYTBmNWVmZDFkZjMzZjJm
ZmFmNzVkYmIxMmUuLjIxMjBmMmRlNTEwMmYzODNmY2RhY2Q5MjJjZGUyOTBiZThhMTU4ZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAKQEAgLTg2LDYgKzg2
LDI0IEBAIHN0YXRpYyBVUkxTY2hlbWVzTWFwJiBlbXB0eURvY3VtZW50U2NoZW1lcygpCiAgICAg
cmV0dXJuIGVtcHR5RG9jdW1lbnRTY2hlbWVzOwogfQogCitzdGF0aWMgVVJMU2NoZW1lc01hcCYg
Y2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFVSTFNjaGVtZXNNYXAsIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcywg
KCkpOworCisjaWYgRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICBpZiAo
Y2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3RTY2hlbWVzLmlzRW1wdHkoKSkgeworI2lmIEVOQUJM
RShCTE9CKQorICAgICAgICBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVtZXMuYWRkKCJi
bG9iIik7CisjZW5kaWYKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgICAgIGNhbkRpc3Bs
YXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcy5hZGQoImZpbGVzeXN0ZW0iKTsKKyNlbmRpZgorICAg
IH0KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisgICAg
cmV0dXJuIGNhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lczsKK30KKwogdm9pZCBTY2hl
bWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYgc2NoZW1l
KQogewogICAgIGxvY2FsVVJMU2NoZW1lcygpLmFkZChzY2hlbWUpOwpAQCAtMTU2LDQgKzE3NCwx
NiBAQCBib29sIFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRMb2FkVVJMU2NoZW1lQXNFbXB0eURvY3Vt
ZW50KGNvbnN0IFN0cmluZyYgc2NoZW1lKQogICAgIHJldHVybiBlbXB0eURvY3VtZW50U2NoZW1l
cygpLmNvbnRhaW5zKHNjaGVtZSk7CiB9CiAKK2Jvb2wgU2NoZW1lUmVnaXN0cnk6OmNhbkRpc3Bs
YXlPbmx5SWZDYW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworICAgIGlmIChzY2hl
bWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNhbkRpc3Bs
YXlPbmx5SWZDYW5SZXF1ZXN0U2NoZW1lcygpLmNvbnRhaW5zKHNjaGVtZSk7Cit9CisKK3ZvaWQg
U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyQXNDYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChjb25z
dCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdFNjaGVt
ZXMoKS5hZGQoc2NoZW1lKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmgKaW5kZXggNTMwZmNhYjFkMGM3N2M5MDdlYTQ1
MWJlZTA5OTQzZmNhNTI4ZjAzMS4uYzljYjQ3NmEwM2ZmMWE2MzZmY2Q1ZGE2NzExMWRlZjM1MzQ5
NzI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oCkBAIC01OCw2
ICs1OCwxMSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFz
RW1wdHlEb2N1bWVudChjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRMb2Fk
VVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KGNvbnN0IFN0cmluZyYpOworCisgICAgLy8gU3VjaCBz
Y2hlbWVzIHNob3VsZCBkZWxlZ2F0ZSB0byBTZWN1cml0eU9yaWdpbjo6Y2FuUmVxdWVzdCBmb3Ig
YW55IFVSTAorICAgIC8vIHBhc3NlZCB0byBTZWN1cml0eU9yaWdpbjo6Y2FuRGlzcGxheS4KKyAg
ICBzdGF0aWMgYm9vbCBjYW5EaXNwbGF5T25seUlmQ2FuUmVxdWVzdChjb25zdCBTdHJpbmcmIHNj
aGVtZSk7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJBc0NhbkRpc3BsYXlPbmx5SWZDYW5SZXF1
ZXN0KGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2MxNTRmNWY2Mzg4ZTMxNzFlMjhlZmRiM2Fj
YTNiZDYwODZkNTcxMy4uNjAzZWVhYjllY2M2ODFiM2Y5MDdjYWNjMWNmMWNmZTYxYmU2YjU2NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMS0wMi0xMSAg
QWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBGaXNoZXIuCisKKyAgICAgICAgW2ZpbGVhcGldIEFkZCBzdXBwb3J0IGZvciBmaWxlc3lz
dGVtOiBVUkkgaGFuZGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUzNTI5CisKKyAgICAgICAgQ2hhbmdlcyB0byBDaHJvbWl1bSBXZWJLaXQgQVBJ
IHJlcXVpcmVkIHRvIGV4cG9zZQorICAgICAgICB0aGUgRmlsZVN5c3RlbSB0eXBlIHRvIFdlYkNv
cmUncyBmaWxlYXBpIGNvZGUsIHNpbmNlIHRoZQorICAgICAgICB0eXBlIGlzIHBhcnQgb2YgdGhl
IGZpbGVzeXN0ZW0gVVJJLgorCisgICAgICAgICogc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bSk6CisgICAgICAgICogc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVt
Lmg6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKToK
KyAgICAgICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYWxGaWxlU3lzdGVtOjpyZWFkRmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbEZpbGVTeXN0ZW06OnJlcXVlc3RGaWxlU3lzdGVtKToKKyAgICAgICAgKiBzcmMvV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzSW1wbDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkT3BlbkZpbGVTeXN0ZW0pOgor
ICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oOgorICAgICAgICAqIHNy
Yy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0pOgorICAgICAgICAqIHNyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZSk6CisK
IDIwMTEtMDItMTAgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IDU5NzVlNzI0M2QzNDU4
MjJlZmFhMTg3OWQ0YzI4ZmY0YWQ1MzY0YTcuLmVmMWY2MTY3MWM4N2Q5MDFkYTM0MDA5MjY1MDFi
MzViZGJjOThmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9B
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTUwLDggKzUwLDggQEAgYm9vbCBBc3luY0Zp
bGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW06OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtKGNvbnN0IFN0cmluZyYgcm9v
dFBhdGgpCi0gICAgOiBBc3luY0ZpbGVTeXN0ZW0ocm9vdFBhdGgpCitBc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgpCisgICAgOiBBc3luY0ZpbGVTeXN0ZW0odHlwZSwg
cm9vdFBhdGgpCiAgICAgLCBtX3dlYkZpbGVTeXN0ZW0oV2ViS2l0Ojp3ZWJLaXRDbGllbnQoKS0+
ZmlsZVN5c3RlbSgpKQogewogICAgIEFTU0VSVChtX3dlYkZpbGVTeXN0ZW0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKaW5k
ZXggNjIwNTYwOWI5ODZjYTA0OGZkOTkwZGY5NGM0NTU3YzJjMjBmOWRkYS4uZGE5OGEzMzFiOTc3
ZTBiNzhmNTUxYjNiMDU4ZTJkMGRjZGQ0YTExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCkBAIC00Niw5ICs0Niw5IEBA
IGNsYXNzIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczsKIAogY2xhc3MgQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW0gOiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHJvb3RQYXRo
KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gY3JlYXRlKEFzeW5jRmls
ZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShyb290UGF0aCkp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKHR5
cGUsIHJvb3RQYXRoKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+QXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW0oKTsKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVXcml0ZXIoQXN5bmNGaWxlV3JpdGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgcGF0
aCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KTsKIAogcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShjb25zdCBTdHJpbmcmIHJvb3RQYXRo
KTsKKyAgICBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShBc3luY0ZpbGVTeXN0ZW06OlR5cGUsIGNv
bnN0IFN0cmluZyYgcm9vdFBhdGgpOwogICAgIFdlYktpdDo6V2ViRmlsZVN5c3RlbSogbV93ZWJG
aWxlU3lzdGVtOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
TG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
TG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IGE5YzYxZDBkNGZkMDU1ZWM2NTZlMGNk
ZGMxZjYxOWY4ZGE5NDk1ZWIuLmFlMmViMWRjMGY2ODAzM2U0ZTgxNjY3MjM2YThhZjQxNzIzMDk4
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3Rl
bUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBMb2NhbEZpbGVTeXN0ZW06
OnJlYWRGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmls
ZVMKICAgICBBU1NFUlQoY29udGV4dCAmJiBjb250ZXh0LT5pc0RvY3VtZW50KCkpOwogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CiAgICAg
V2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50
LT5mcmFtZSgpKTsKLSAgICB3ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZy
YW1lLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgZmFsc2Us
IG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpKTsKKyAgICB3ZWJGcmFt
ZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKHdlYkZyYW1lLCBzdGF0aWNfY2FzdDxXZWJGaWxl
U3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgZmFsc2UsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbChjYWxsYmFja3MsIHR5cGUpKTsKIH0KIAogdm9pZCBMb2NhbEZpbGVTeXN0ZW06OnJl
cXVlc3RGaWxlU3lzdGVtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmls
ZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykKQEAgLTcxLDEyICs3
MSwxMiBAQCB2b2lkIExvY2FsRmlsZVN5c3RlbTo6cmVxdWVzdEZpbGVTeXN0ZW0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgQXN5bmNGaQogICAgIGlmIChjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihjb250ZXh0KTsKICAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICAgICAgd2ViRnJhbWUtPmNs
aWVudCgpLT5vcGVuRmlsZVN5c3RlbSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3Rl
bTo6VHlwZT4odHlwZSksIHNpemUsIHRydWUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bChjYWxsYmFja3MpKTsKKyAgICAgICAgd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3Rl
bSh3ZWJGcmFtZSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUs
IHRydWUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUpKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOwogICAgICAgICBXb3JrZXJMb2FkZXJQ
cm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtl
ckxvYWRlclByb3h5KCk7CiAgICAgICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRp
Y19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7Ci0gICAgICAgIHdlYldv
cmtlci0+b3BlbkZpbGVTeXN0ZW0oc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlw
ZSksIHNpemUsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIGNvbnRl
eHQsIHN5bmNocm9ub3VzKSwgc3luY2hyb25vdXMpOworICAgICAgICB3ZWJXb3JrZXItPm9wZW5G
aWxlU3lzdGVtKHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBu
ZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBz
eW5jaHJvbm91cyksIHN5bmNocm9ub3VzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcApp
bmRleCA1MmE0MDMyMWRmYmQxOTE5YzYzZTA0YWZjOWI4MzNlMTBkYmNmY2Y0Li4wYzcxZjgwMmQ1
MTYzMzkwNjZiMjNiNGUxMGQzMzllZTExOGE0ZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCkBAIC0z
Niw4ICszNiw5IEBACiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
Ci0jaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUVudHJ5LmgiCiAjaW5jbHVkZSAiV2ViRmlsZUluZm8u
aCIKKyNpbmNsdWRlICJXZWJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUVu
dHJ5LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00Niw4ICs0Nyw5
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKFBhc3NP
d25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wgc3luY2hyb25vdXMpCitXZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzSW1wbDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcywgQXN5bmNGaWxlU3lzdGVtOjpUeXBl
IHR5cGUsIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wgc3lu
Y2hyb25vdXMpCiAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgLCBtX3R5cGUodHlw
ZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zeW5jaHJvbm91cyhzeW5jaHJv
bm91cykKIHsKQEAgLTg1LDkgKzg3LDkgQEAgdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bDo6ZGlkUmVhZERpcmVjdG9yeShjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUUKIHZvaWQg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZE9wZW5GaWxlU3lzdGVtKGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBwYXRoKQogewogICAgIGlmIChtX2NvbnRleHQg
JiYgbV9jb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKLSAgICAgICAgbV9jYWxsYmFja3MtPmRp
ZE9wZW5GaWxlU3lzdGVtKG5hbWUsIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVh
dGUobV9jb250ZXh0LCBwYXRoLCBtX3N5bmNocm9ub3VzKSk7CisgICAgICAgIG1fY2FsbGJhY2tz
LT5kaWRPcGVuRmlsZVN5c3RlbShuYW1lLCBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6
Y3JlYXRlKG1fY29udGV4dCwgbV90eXBlLCBwYXRoLCBtX3N5bmNocm9ub3VzKSk7CiAgICAgZWxz
ZQotICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkT3BlbkZpbGVTeXN0ZW0obmFtZSwgQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW06OmNyZWF0ZShwYXRoKSk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5kaWRP
cGVuRmlsZVN5c3RlbShuYW1lLCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlKG1fdHlw
ZSwgcGF0aCkpOwogICAgIGRlbGV0ZSB0aGlzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaAppbmRleCA3NWZh
MmJiOTk0ZjA2ZTQyNjg0N2YwN2FiMjIyZmJlYWJmODJmMWQyLi4zZTIxOTJlOThkYTQ2MzFhMWMz
OGNlNjU2MDc5ZGFiYTlkMTI3MzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgKQEAgLTMxLDYgKzMxLDggQEAK
ICNpZm5kZWYgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGxfaAogI2RlZmluZSBXZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzSW1wbF9oCiAKKyNpbmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlICJXZWJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNrcy5o
IgogI2luY2x1ZGUgIldlYlZlY3Rvci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ5
LDcgKzUxLDcgQEAgY2xhc3MgV2ViU3RyaW5nOwogCiBjbGFzcyBXZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbCA6IHB1YmxpYyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzIHsKIHB1YmxpYzoKLSAgICBX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChQYXNzT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcz4sIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqID0gMCwgYm9v
bCBzeW5jaHJvbm91cyA9IGZhbHNlKTsKKyAgICBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChQ
YXNzT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4sIFdlYkNvcmU6OkFz
eW5jRmlsZVN5c3RlbTo6VHlwZSA9IFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbTo6VGVtcG9yYXJ5
LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiA9IDAsIGJvb2wgc3luY2hyb25vdXMg
PSBmYWxzZSk7CiAgICAgdmlydHVhbCB+V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWRTdWNjZWVkKCk7CkBAIC02MSw2ICs2Myw5IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7CiAKKyAgICAvLyBVc2VkIGZvciBvcGVuRmlsZVN5c3RlbSBjYWxsYmFja3Mu
CisgICAgV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtOjpUeXBlIG1fdHlwZTsKKwogICAgIC8vIFVz
ZWQgZm9yIHdvcmtlcidzIG9wZW5GaWxlU3lzdGVtIGNhbGxiYWNrcy4KICAgICBXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CiAgICAgYm9vbCBtX3N5bmNocm9ub3Vz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5
bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmluZGV4IDA1OGU5NDdhNjNlY2ExODljZGMxYWQzMjNj
YTcxMmMyNWIxMTY4YmIuLmZhZWE0MGIwNTM3NDQzOGQ3NTQ4MjJjYWNiNTA3ZTIxMjNlZjE1MDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJB
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTU2LDggKzU2LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBzdGF0aWMgY29uc3QgY2hhciBmaWxlU3lzdGVtT3BlcmF0aW9uc01vZGVbXSA9
ICJmaWxlU3lzdGVtT3BlcmF0aW9uc01vZGUiOwogCi1Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJv
bWl1bTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiByb290UGF0aCwgYm9vbCBzeW5jaHJvbm91cykKLSAg
ICA6IEFzeW5jRmlsZVN5c3RlbShyb290UGF0aCkKK1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtOjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiByb290
UGF0aCwgYm9vbCBzeW5jaHJvbm91cykKKyAgICA6IEFzeW5jRmlsZVN5c3RlbSh0eXBlLCByb290
UGF0aCkKICAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQogICAgICwgbV93
ZWJGaWxlU3lzdGVtKFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmZpbGVTeXN0ZW0oKSkKICAgICAs
IG1fd29ya2VyQ29udGV4dChzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uaAppbmRleCAwYjRiNzA4NTQyYTkwNDM1ZTllOWViMGU4MjdkNjM5ZTVj
MDdhYjRiLi43ZTMzMTZiMjJjOTMzYTAwMzFkYmIwZTE1N2NiMTgwNTM4Zjc3ZDg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5
c3RlbUNocm9taXVtLmgKQEAgLTUyLDkgKzUyLDkgQEAgY2xhc3MgV29ya2VyQ29udGV4dDsKIAog
Y2xhc3MgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0gOiBwdWJsaWMgQXN5bmNGaWxlU3lz
dGVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHJvb3RQ
YXRoLCBib29sIHN5bmNocm9ub3VzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPEFzeW5jRmlsZVN5
c3RlbT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5
c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9ub3Vz
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXb3JrZXJBc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bShjb250ZXh0LCByb290UGF0aCwgc3luY2hyb25vdXMpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShjb250ZXh0LCB0
eXBlLCByb290UGF0aCwgc3luY2hyb25vdXMpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5Xb3Jr
ZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSgpOwpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVdyaXRlcihBc3luY0ZpbGVXcml0ZXJDbGllbnQqIGNsaWVu
dCwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNr
cz4pOwogCiBwcml2YXRlOgotICAgIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBib29sIHN5bmNocm9u
b3VzKTsKKyAgICBXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlLCBjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBi
b29sIHN5bmNocm9ub3VzKTsKIAogICAgIFBhc3NSZWZQdHI8V2ViS2l0OjpXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlPiBjcmVhdGVXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>