<?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>53784</bug_id>
          
          <creation_ts>2011-02-04 10:11:17 -0800</creation_ts>
          <short_desc>Application Cache should save audio/ and video/ mime types as flat files</short_desc>
          <delta_ts>2011-03-25 17:08:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</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>&lt;none&gt;</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>57084</dependson>
          <blocked>53818</blocked>
    
    <blocked>56997</blocked>
    
    <blocked>57047</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>michaeln</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>345573</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-04 10:11:17 -0800</bug_when>
    <thetext>Various platform media engines do not support client-generated byte streams.  As a work around, and to avoid saving potentially huge BLOBs in the Application Cache database, WebKit should store audio/ and video/ resources as flat files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345575</commentid>
    <comment_count>1</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-04 10:12:28 -0800</bug_when>
    <thetext>rdar://problem/8932473</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345818</commentid>
    <comment_count>2</comment_count>
      <attachid>81292</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-04 14:51:57 -0800</bug_when>
    <thetext>Created attachment 81292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345831</commentid>
    <comment_count>3</comment_count>
      <attachid>81292</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-04 15:03:56 -0800</bug_when>
    <thetext>Comment on attachment 81292
Patch

Removing r? for now until I can get more eyeballs on this diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346609</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-07 08:45:44 -0800</bug_when>
    <thetext>Attachment 81292 did not build on win:
Build output: http://queues.webkit.org/results/7705667</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346871</commentid>
    <comment_count>5</comment_count>
      <attachid>81539</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-07 15:16:58 -0800</bug_when>
    <thetext>Created attachment 81539
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346873</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-07 15:17:43 -0800</bug_when>
    <thetext>Modified the previous patch to implement quota checking when saving flat files to the Application Cache.  In order to test these changes, WebKit has also been modified to pass the maximum total- and per-origin-quota values from WebKitPreferences through to ApplicationCacheStorage upon startup.  These values can be modified via:                                                                            
  defaults write com.apple.Safari WebKitApplicationCacheTotalQuota -int &lt;new quota&gt;
  defaults write com.apple.Safari WebKitApplicationCacheDefaultOriginQuota -int &lt;new quota&gt;
then restarting Safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346875</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-07 15:18:11 -0800</bug_when>
    <thetext>Again, clearing the r? flag until more reviewers look at this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346908</commentid>
    <comment_count>8</comment_count>
      <attachid>81545</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-07 15:55:41 -0800</bug_when>
    <thetext>Created attachment 81545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346909</commentid>
    <comment_count>9</comment_count>
      <attachid>81545</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-07 15:56:03 -0800</bug_when>
    <thetext>Comment on attachment 81545
Patch

Clarified some comments, and added an additional error check when writing flat files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347713</commentid>
    <comment_count>10</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-08 14:54:02 -0800</bug_when>
    <thetext>Splitting the patch into three parts, only one of which changes the filesystem reading/wrtiting behavior of the Application Cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347718</commentid>
    <comment_count>11</comment_count>
      <attachid>81700</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-08 14:57:50 -0800</bug_when>
    <thetext>Created attachment 81700
[1/3] Add &quot;path&quot; ivar to ApplicationCacheResource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347719</commentid>
    <comment_count>12</comment_count>
      <attachid>81701</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-08 14:58:21 -0800</bug_when>
    <thetext>Created attachment 81701
[2/3] Store media files as flat files within the Application Cache area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347720</commentid>
    <comment_count>13</comment_count>
      <attachid>81702</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-08 14:59:15 -0800</bug_when>
    <thetext>Created attachment 81702
[3/3] Set the maximum total- and quota-specific Application Cache sizes from WebKitPreferences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347773</commentid>
    <comment_count>14</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-08 16:02:11 -0800</bug_when>
    <thetext>Attachment 81701 did not build on win:
Build output: http://queues.webkit.org/results/7819224</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347776</commentid>
    <comment_count>15</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-08 16:06:51 -0800</bug_when>
    <thetext>Attachment 81701 did not build on qt:
Build output: http://queues.webkit.org/results/7791202</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347805</commentid>
    <comment_count>16</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-08 16:43:49 -0800</bug_when>
    <thetext>Attachment 81701 did not build on gtk:
Build output: http://queues.webkit.org/results/7801222</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347938</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-08 21:15:38 -0800</bug_when>
    <thetext>Attachment 81701 did not build on mac:
Build output: http://queues.webkit.org/results/7819297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348859</commentid>
    <comment_count>18</comment_count>
      <attachid>81700</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-02-10 00:44:52 -0800</bug_when>
    <thetext>Comment on attachment 81700
[1/3] Add &quot;path&quot; ivar to ApplicationCacheResource.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348860</commentid>
    <comment_count>19</comment_count>
      <attachid>81702</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-02-10 00:45:42 -0800</bug_when>
    <thetext>Comment on attachment 81702
[3/3] Set the maximum total- and quota-specific Application Cache sizes from WebKitPreferences.

r=me

Does this need to be done for WebKit2 as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348869</commentid>
    <comment_count>20</comment_count>
      <attachid>81701</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-02-10 00:57:16 -0800</bug_when>
    <thetext>Comment on attachment 81701
[2/3] Store media files as flat files within the Application Cache area.

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

Overall comment: where does &quot;path&quot; come from in the first place? Is it based on the URL of the resource? If so, we need to make sure to sanitize it to avoid dangerous characters like / or null. I see that you try to avoid escaping the flat file directory, but I don&apos;t see that in store().

I would like to see path sanitization code or an explanation of why it&apos;s not needed. The style comments are purely optional, but I think this part is required to fix, so r-.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:564
&gt; +    // Allow the normal flat-file cleanup process to execute before clearing all the tables:

I suggest removing this comment or add an inline wrapper for empty() called cleanUpFlatFiles() if it&apos;s important to state the purpose.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:648
&gt; +    // When a cache resource is deleted, if it contains a non-empty path, that path should
&gt; +    // be added to the DeletedCacheResources table so the flat file at that path can
&gt; +    // be deleted at a later time.
&gt; +    executeSQLCommand(&quot;CREATE TRIGGER IF NOT EXISTS CacheResourceDataDeleted AFTER DELETE ON CacheResourceData&quot;
&gt; +                      &quot; FOR EACH ROW&quot;
&gt; +                      &quot; WHEN OLD.path NOT NULL BEGIN&quot;
&gt; +                      &quot;  INSERT INTO DeletedCacheResources (path) values (OLD.path);&quot;
&gt; +                      &quot; END&quot;);

I suggest instead of the comment you factor this out as a helper function: recordResourcePathForLaterDeletion() or something like that.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:786
&gt; +    if (resource-&gt;response().mimeType().startsWith(&quot;audio/&quot;, false) || resource-&gt;response().mimeType().startsWith(&quot;video/&quot;, false)) {

The chunk of code added in this if statement is pretty big to bury in an if statement. I suggest factoring it out into a separate function.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1076
&gt; +        String path = cacheStatement.getColumnText(6);

Consider making a named constant instead of using 6 directly in code.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1383
&gt; +        ASSERT(directoryName(fullPath) == flatFileDirectory);

I don&apos;t think it&apos;s right to ASSERT for something based on a file on disk. You should always assume that files on disk could be corrupted or even malicious. I suggest you leve it at just the if check below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349170</commentid>
    <comment_count>21</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-10 10:31:04 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 81701 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81701&amp;action=review
&gt; 
&gt; Overall comment: where does &quot;path&quot; come from in the first place? Is it based on the URL of the resource? If so, we need to make sure to sanitize it to avoid dangerous characters like / or null. I see that you try to avoid escaping the flat file directory, but I don&apos;t see that in store().
&gt; 
&gt; I would like to see path sanitization code or an explanation of why it&apos;s not needed. The style comments are purely optional, but I think this part is required to fix, so r-.

Sure, the &quot;path&quot; is a generated canonical UUID, so as to be sure that a) the filename is unique and b) it doesn&apos;t contain any path characters on any platform.  However, since you suggested a self-documenting function name below, perhaps that could be encapsulated in a function called &quot;bool writeDataToUniqueFileInDirectory(inData, inDirectory, outFileName)&quot; or similar.

The reason why it&apos;s sanitized in checkForDeletedResources() but not in store() is that we completely control the filename in the second case, but not in the first.  But to advance the cause of filesystem paranoia, I&apos;ll add the same check inside the new writeData...() function.

&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:564
&gt; &gt; +    // Allow the normal flat-file cleanup process to execute before clearing all the tables:
&gt; 
&gt; I suggest removing this comment or add an inline wrapper for empty() called cleanUpFlatFiles() if it&apos;s important to state the purpose.

Sure.  Perhaps a helper function called &quot;deleteTables()&quot; that calls both empty() and m_dataBase.clearAllTables().

&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:648
&gt; &gt; +    // When a cache resource is deleted, if it contains a non-empty path, that path should
&gt; &gt; +    // be added to the DeletedCacheResources table so the flat file at that path can
&gt; &gt; +    // be deleted at a later time.
&gt; &gt; +    executeSQLCommand(&quot;CREATE TRIGGER IF NOT EXISTS CacheResourceDataDeleted AFTER DELETE ON CacheResourceData&quot;
&gt; &gt; +                      &quot; FOR EACH ROW&quot;
&gt; &gt; +                      &quot; WHEN OLD.path NOT NULL BEGIN&quot;
&gt; &gt; +                      &quot;  INSERT INTO DeletedCacheResources (path) values (OLD.path);&quot;
&gt; &gt; +                      &quot; END&quot;);
&gt; 
&gt; I suggest instead of the comment you factor this out as a helper function: recordResourcePathForLaterDeletion() or something like that.

I was just following convention; the rest of the &quot;CREATE TRIGGER&quot; statements contain comments explaining the SQL.  I don&apos;t think the function name is quite self-documenting enough either, and it would remove the trigger creation statement from it&apos;s peers rendering it both lonely and difficult to find.  

&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:786
&gt; &gt; +    if (resource-&gt;response().mimeType().startsWith(&quot;audio/&quot;, false) || resource-&gt;response().mimeType().startsWith(&quot;video/&quot;, false)) {
&gt; 
&gt; The chunk of code added in this if statement is pretty big to bury in an if statement. I suggest factoring it out into a separate function.

Sure thing.

&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1076
&gt; &gt; +        String path = cacheStatement.getColumnText(6);
&gt; 
&gt; Consider making a named constant instead of using 6 directly in code.
&gt; 
&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1383
&gt; &gt; +        ASSERT(directoryName(fullPath) == flatFileDirectory);
&gt; 
&gt; I don&apos;t think it&apos;s right to ASSERT for something based on a file on disk. You should always assume that files on disk could be corrupted or even malicious. I suggest you leve it at just the if check below.

Sure thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349187</commentid>
    <comment_count>22</comment_count>
      <attachid>82004</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-10 10:55:25 -0800</bug_when>
    <thetext>Created attachment 82004
[2/3] Store media files as flat files within the Application Cache area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349194</commentid>
    <comment_count>23</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-10 11:00:55 -0800</bug_when>
    <thetext>Attachment 82004 did not build on gtk:
Build output: http://queues.webkit.org/results/7870394</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349212</commentid>
    <comment_count>24</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-10 11:20:52 -0800</bug_when>
    <thetext>Attachment 82004 did not build on win:
Build output: http://queues.webkit.org/results/7869411</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349260</commentid>
    <comment_count>25</comment_count>
      <attachid>82022</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-10 12:18:16 -0800</bug_when>
    <thetext>Created attachment 82022
[2/3] Store media files as flat files within the Application Cache area.

Whoops, discovered a compile error in the previous patch.  This latest one will apply and build cleanly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349284</commentid>
    <comment_count>26</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-10 12:39:35 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 81702 [details])
&gt; r=me
&gt; 
&gt; Does this need to be done for WebKit2 as well?

Yes, it probably does. Filed: https://bugs.webkit.org/show_bug.cgi?id=54237</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349286</commentid>
    <comment_count>27</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-10 12:44:06 -0800</bug_when>
    <thetext>Attachment 82022 did not build on win:
Build output: http://queues.webkit.org/results/7870426</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349357</commentid>
    <comment_count>28</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-10 13:59:31 -0800</bug_when>
    <thetext>Attachment 82022 did not build on gtk:
Build output: http://queues.webkit.org/results/7867462</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349492</commentid>
    <comment_count>29</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-10 16:27:43 -0800</bug_when>
    <thetext>Attachment 82022 did not build on qt:
Build output: http://queues.webkit.org/results/7884426</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349575</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-10 19:15:26 -0800</bug_when>
    <thetext>Attachment 82022 did not build on mac:
Build output: http://queues.webkit.org/results/7875487</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349993</commentid>
    <comment_count>31</comment_count>
      <attachid>82169</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-02-11 13:56:35 -0800</bug_when>
    <thetext>Created attachment 82169
[2/3] Store media files as flat files within the Application Cache area.

Fixed a few bugs that would leave the path field of ApplicationCacheResource empty, and save 0-length files to the ApplicationCache/ area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372313</commentid>
    <comment_count>32</comment_count>
      <attachid>82169</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-23 11:57:55 -0700</bug_when>
    <thetext>Comment on attachment 82169
[2/3] Store media files as flat files within the Application Cache area.

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

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:47
&gt; +static const char* const kFlatFileSubdirectory = &quot;ApplicationCache&quot;;

We don’t use “k” for these. This should be inside the WebCore namespace. Also perhaps better to have this be an array rather than a constant pointer:

    static const char flatFileSubdirectory[] = &quot;ApplicationCache&quot;;

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:786
&gt; +    if (!resource-&gt;path().isEmpty()) {
&gt; +        dataStatement.bindText(2, pathGetFileName(resource-&gt;path()));
&gt; +    } else if (shouldStoreResourceAsFlatFile(resource)) {

No braces around single line if bodies.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:788
&gt; +        // to check the per-origin quote here, as it was already checked in storeNewestCache().

quota, not quote

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:789
&gt; +        if (m_database.totalSize() + flatFileAreaSize() + resource-&gt;data()-&gt;size() &gt; m_maximumSize) {

Any possibility of overflow here?

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:794
&gt; +        String path;

I’d move this definition down to just before the writeDataToUniqueFileInDirectory call, since it’s an out argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372384</commentid>
    <comment_count>33</comment_count>
      <attachid>82169</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-23 13:08:41 -0700</bug_when>
    <thetext>Comment on attachment 82169
[2/3] Store media files as flat files within the Application Cache area.

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

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:47
&gt;&gt; +static const char* const kFlatFileSubdirectory = &quot;ApplicationCache&quot;;
&gt; 
&gt; We don’t use “k” for these. This should be inside the WebCore namespace. Also perhaps better to have this be an array rather than a constant pointer:
&gt; 
&gt;     static const char flatFileSubdirectory[] = &quot;ApplicationCache&quot;;

Sure thing! Changed.

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:786
&gt;&gt; +    } else if (shouldStoreResourceAsFlatFile(resource)) {
&gt; 
&gt; No braces around single line if bodies.

Removed.

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:788
&gt;&gt; +        // to check the per-origin quote here, as it was already checked in storeNewestCache().
&gt; 
&gt; quota, not quote

Changed.

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:789
&gt;&gt; +        if (m_database.totalSize() + flatFileAreaSize() + resource-&gt;data()-&gt;size() &gt; m_maximumSize) {
&gt; 
&gt; Any possibility of overflow here?

m_database.totalSize(), flatFileAreaSize(), m_maximumSize are all int64_t, and resource-&gt;data()-&gt;size() is an unsigned.  Since the first two are queried from the filesystem itself, I believe an overflow is pretty much impossible.

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:794
&gt;&gt; +        String path;
&gt; 
&gt; I’d move this definition down to just before the writeDataToUniqueFileInDirectory call, since it’s an out argument.

Sure thing!  Moved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372882</commentid>
    <comment_count>34</comment_count>
      <attachid>82169</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-24 10:11:18 -0700</bug_when>
    <thetext>Comment on attachment 82169
[2/3] Store media files as flat files within the Application Cache area.

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

This patch didn’t apply, so you probably need to upload a new one to get EWS checking on it.

&gt; Source/WebCore/loader/appcache/ApplicationCacheResource.h:60
&gt; +    void setPath(const String&amp; path) { m_path = path; };

Extra semicolon here is not needed.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1073
&gt; +        long long size = 0;

I’m never sure what the best types are to use. For a long time I liked to use int and unsigned, but Maciej suggested we might want to move to int32_t and uint32_t. Similarly for 64-bit we have used long long for a while, but maybe int64_t is better.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1234
&gt; +    } while (directoryName(fullPath) != directory || fileExists(fullPath));

Under what circumstances will directoryName(fullPath) be != directory?

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1243
&gt; +    if (writtenBytes == -1) {

Is -1 the only value we should check for? Maybe != data-&gt;size() is what we want to check?

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1408
&gt; +    SQLiteStatement selectPaths(m_database, &quot;SELECT DeletedCacheResources.path &quot;
&gt; +                                &quot;FROM DeletedCacheResources &quot;
&gt; +                                &quot;LEFT JOIN CacheResourceData &quot;
&gt; +                                &quot;ON DeletedCacheResources.path = CacheResourceData.path &quot;
&gt; +                                &quot;WHERE (SELECT DeletedCacheResources.path == CacheResourceData.path) IS NULL&quot;);

This file uses this style of alignment everywhere, but in the past we frowned on that in WebKit. We want to be able to rename.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1425
&gt; +        // Don&apos;t exit the flatFileDirectory!  This should only happen if someone tampers 
&gt; +        // with the ApplicationCache database, but protect against it regardless.

One space after the !, not two.

The comment “tampers with” is a little scary. I think you could word this in a more specific way that could make things clearer. I guess the idea is that if the path has a &quot;/&quot; character in it, this could happen. It seems like there could be other kinds of bad paths, such as very long strings. What would this code do in a case like that? I suppose the deleteFile function would just fail and do nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372919</commentid>
    <comment_count>35</comment_count>
      <attachid>82169</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 10:46:01 -0700</bug_when>
    <thetext>Comment on attachment 82169
[2/3] Store media files as flat files within the Application Cache area.

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

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheResource.h:60
&gt;&gt; +    void setPath(const String&amp; path) { m_path = path; };
&gt; 
&gt; Extra semicolon here is not needed.

Removed.

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1073
&gt;&gt; +        long long size = 0;
&gt; 
&gt; I’m never sure what the best types are to use. For a long time I liked to use int and unsigned, but Maciej suggested we might want to move to int32_t and uint32_t. Similarly for 64-bit we have used long long for a while, but maybe int64_t is better.

I only used &quot;long long&quot; here because that&apos;s what ResourceResponse expects.  I believe this is functionally identical to a int64_t, and I use it in other places in this patch, so I might as well use it here too.
b
&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1234
&gt;&gt; +    } while (directoryName(fullPath) != directory || fileExists(fullPath));
&gt; 
&gt; Under what circumstances will directoryName(fullPath) be != directory?

This is a paranoia check.  Canonical UUIDs should never have a path component in them, but for the sake of extreme overprotection, this check guarantees that we will never write to &quot;ApplicationCache/../../etc/passwd&quot; or any other such nonsense.

I guess this could be an &quot;ASSERT(directoryName(fullPath) == directory)&quot; instead, if you prefer.

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1243
&gt;&gt; +    if (writtenBytes == -1) {
&gt; 
&gt; Is -1 the only value we should check for? Maybe != data-&gt;size() is what we want to check?

Looking at the POSIX implementation, -1 is the error code return value, but you&apos;re right in that other implementations might use different error codes, and that != data-&gt;size() would be a more universal check.

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1408
&gt;&gt; +                                &quot;WHERE (SELECT DeletedCacheResources.path == CacheResourceData.path) IS NULL&quot;);
&gt; 
&gt; This file uses this style of alignment everywhere, but in the past we frowned on that in WebKit. We want to be able to rename.

I did my best to use only a single indent in these cases, but this one must have escaped. :)  Undented.

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1425
&gt;&gt; +        // with the ApplicationCache database, but protect against it regardless.
&gt; 
&gt; One space after the !, not two.
&gt; 
&gt; The comment “tampers with” is a little scary. I think you could word this in a more specific way that could make things clearer. I guess the idea is that if the path has a &quot;/&quot; character in it, this could happen. It seems like there could be other kinds of bad paths, such as very long strings. What would this code do in a case like that? I suppose the deleteFile function would just fail and do nothing.

7th grade typing class strikes again (with the double-space after end-of-sentence punctuation).

How about: &quot;Don&apos;t exit the flatFileDirectory! This should only happen if the &quot;path&quot; entry contains a directory component, but protect against it regardless.&quot;

In the case of a very long string, deleteFile() would silently fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372974</commentid>
    <comment_count>36</comment_count>
      <attachid>86806</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 11:52:05 -0700</bug_when>
    <thetext>Created attachment 86806
[2/3] Store media files as flat files within the Application Cache area.

Uploading a new version of [2/3], even thought Darin r+&apos;d it already, so that the EWS bots can chew on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372997</commentid>
    <comment_count>37</comment_count>
      <attachid>86806</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 12:35:24 -0700</bug_when>
    <thetext>Comment on attachment 86806
[2/3] Store media files as flat files within the Application Cache area.

Looks like this patch didn&apos;t apply cleanly either.  I&apos;ll rebase and re-upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373075</commentid>
    <comment_count>38</comment_count>
      <attachid>86830</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 14:04:25 -0700</bug_when>
    <thetext>Created attachment 86830
[2/3] Store media files as flat files within the Application Cache area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373084</commentid>
    <comment_count>39</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 14:12:22 -0700</bug_when>
    <thetext>Well, shoot.  Looks like the [2/3] patch will never fully apply cleanly because it depends on a piece of [1/3].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373102</commentid>
    <comment_count>40</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-03-24 14:31:08 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Well, shoot.  Looks like the [2/3] patch will never fully apply cleanly because it depends on a piece of [1/3].

You could check in 1/3 by itself to get EWS rolling on this, assuming there is no harm to landing just 1/3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373150</commentid>
    <comment_count>41</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-24 15:42:36 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; You could check in 1/3 by itself to get EWS rolling on this, assuming there is no harm to landing just 1/3.

You should definitely do this if you can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373152</commentid>
    <comment_count>42</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-24 15:44:36 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; This is a paranoia check.  Canonical UUIDs should never have a path component in them, but for the sake of extreme overprotection, this check guarantees that we will never write to &quot;ApplicationCache/../../etc/passwd&quot; or any other such nonsense.
&gt; 
&gt; I guess this could be an &quot;ASSERT(directoryName(fullPath) == directory)&quot; instead, if you prefer.

An assert plus a runtime check together would give you safety in the case where we are wrong in our believe that this should never happen, plus clarity that this should actually never happen. So that&apos;s OK.

&gt; How about: &quot;Don&apos;t exit the flatFileDirectory! This should only happen if the &quot;path&quot; entry contains a directory component, but protect against it regardless.&quot;

Seems OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373161</commentid>
    <comment_count>43</comment_count>
      <attachid>86830</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-03-24 16:04:23 -0700</bug_when>
    <thetext>Comment on attachment 86830
[2/3] Store media files as flat files within the Application Cache area.

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

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1069
&gt; +    String flatFileDirectory = pathByAppendingComponent(m_cacheDirectory, flatFileSubdirectory);

Nit: You calculate this a few times. Once in loadCache, and again in store. It might be nice to put this into a function, &quot;one place&quot;.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1418
&gt; +    SQLiteStatement selectPaths(m_database, &quot;SELECT DeletedCacheResources.path &quot;
&gt; +        &quot;FROM DeletedCacheResources &quot;
&gt; +        &quot;LEFT JOIN CacheResourceData &quot;
&gt; +        &quot;ON DeletedCacheResources.path = CacheResourceData.path &quot;
&gt; +        &quot;WHERE (SELECT DeletedCacheResources.path == CacheResourceData.path) IS NULL&quot;);

The WHERE statement here has an added &quot;subquery&quot; which seems
like unnecessary complexity. Can you instead just check if
CacheResourceData.path is NULL?

    WHERE CacheResourceData.path IS NULL

Since your trigger does not put NULL paths into DeletedCacheResources,
you can always assume that DeletedCacheResources.path is NOT NULL,
and you want to find the DeletedCacheResources which do not have
a corresponding entry in CacheResourceData, so the left join in
those cases produce 1 row with null values for CacheResourceData.

Let me know if there is a case this wouldn&apos;t handle.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.h:116
&gt; +    bool shouldStoreResourceAsFlatFile(ApplicationCacheResource*);

Nit: I think this can be marked const</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373168</commentid>
    <comment_count>44</comment_count>
      <attachid>81702</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-03-24 16:15:55 -0700</bug_when>
    <thetext>Comment on attachment 81702
[3/3] Set the maximum total- and quota-specific Application Cache sizes from WebKitPreferences.

Was this part (part 3) so that you could test with quotas? The
following code already sets the default origin quota in
-[WebView _preferencesChanged]:

    // Application Cache Preferences are stored on the global cache storage manager, not in Settings.
    [WebApplicationCache setDefaultOriginQuota:[preferences applicationCacheDefaultOriginQuota]];

There could just be another line added to set the maximum storage.

I think the default quotas on PLATFORM(MAC) are &quot;noQuota&quot;, so I
don&apos;t think this part actually changes anything. Am I missing
its usefulness?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373197</commentid>
    <comment_count>45</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 16:50:13 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (In reply to comment #35)
&gt; &gt; This is a paranoia check.  Canonical UUIDs should never have a path component in them, but for the sake of extreme overprotection, this check guarantees that we will never write to &quot;ApplicationCache/../../etc/passwd&quot; or any other such nonsense.
&gt; &gt; 
&gt; &gt; I guess this could be an &quot;ASSERT(directoryName(fullPath) == directory)&quot; instead, if you prefer.
&gt; 
&gt; An assert plus a runtime check together would give you safety in the case where we are wrong in our believe that this should never happen, plus clarity that this should actually never happen. So that&apos;s OK.

Okay, I&apos;ll add the ASSERT as well.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373204</commentid>
    <comment_count>46</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 16:58:13 -0700</bug_when>
    <thetext>Committed r81919: &lt;http://trac.webkit.org/changeset/81919&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373206</commentid>
    <comment_count>47</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 16:59:11 -0700</bug_when>
    <thetext>Committed part [1/3], so that the EWS bots can successfully apply and test [2/3].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373302</commentid>
    <comment_count>48</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 21:46:22 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (From update of attachment 81702 [details])
&gt; Was this part (part 3) so that you could test with quotas? The
&gt; following code already sets the default origin quota in
&gt; -[WebView _preferencesChanged]:
&gt; 
&gt;     // Application Cache Preferences are stored on the global cache storage manager, not in Settings.
&gt;     [WebApplicationCache setDefaultOriginQuota:[preferences applicationCacheDefaultOriginQuota]];
&gt; 
&gt; There could just be another line added to set the maximum storage.

Indeed!  No need to add a new function.  Changed.

&gt; I think the default quotas on PLATFORM(MAC) are &quot;noQuota&quot;, so I
&gt; don&apos;t think this part actually changes anything. Am I missing
&gt; its usefulness?

It doesn&apos;t change anything directly, but it does allow the maximum cache size to be changed via user defaults, thus allowing the maximum cache behavior to be tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373319</commentid>
    <comment_count>49</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 22:34:47 -0700</bug_when>
    <thetext>Committed r81939: &lt;http://trac.webkit.org/changeset/81939&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373323</commentid>
    <comment_count>50</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 22:47:43 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 86830 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86830&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1069
&gt; &gt; +    String flatFileDirectory = pathByAppendingComponent(m_cacheDirectory, flatFileSubdirectory);
&gt; 
&gt; Nit: You calculate this a few times. Once in loadCache, and again in store. It might be nice to put this into a function, &quot;one place&quot;.

I can&apos;t figure out a way to do this which won&apos;t end up with a net increase of NLOCs.

&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1418
&gt; &gt; +    SQLiteStatement selectPaths(m_database, &quot;SELECT DeletedCacheResources.path &quot;
&gt; &gt; +        &quot;FROM DeletedCacheResources &quot;
&gt; &gt; +        &quot;LEFT JOIN CacheResourceData &quot;
&gt; &gt; +        &quot;ON DeletedCacheResources.path = CacheResourceData.path &quot;
&gt; &gt; +        &quot;WHERE (SELECT DeletedCacheResources.path == CacheResourceData.path) IS NULL&quot;);
&gt; 
&gt; The WHERE statement here has an added &quot;subquery&quot; which seems
&gt; like unnecessary complexity. Can you instead just check if
&gt; CacheResourceData.path is NULL?
&gt; 
&gt;     WHERE CacheResourceData.path IS NULL
&gt; 
&gt; Since your trigger does not put NULL paths into DeletedCacheResources,
&gt; you can always assume that DeletedCacheResources.path is NOT NULL,
&gt; and you want to find the DeletedCacheResources which do not have
&gt; a corresponding entry in CacheResourceData, so the left join in
&gt; those cases produce 1 row with null values for CacheResourceData.
&gt; 
&gt; Let me know if there is a case this wouldn&apos;t handle.

No, I think this works really well.  Changed.

&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.h:116
&gt; &gt; +    bool shouldStoreResourceAsFlatFile(ApplicationCacheResource*);
&gt; 
&gt; Nit: I think this can be marked const

Done.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373328</commentid>
    <comment_count>51</comment_count>
      <attachid>86888</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-24 22:54:19 -0700</bug_when>
    <thetext>Created attachment 86888
[2/3] Store media files as flat files within the Application Cache area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373358</commentid>
    <comment_count>52</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-25 00:01:40 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #44)
&gt; &gt; (From update of attachment 81702 [details] [details])
&gt; &gt; Was this part (part 3) so that you could test with quotas? The
&gt; &gt; following code already sets the default origin quota in
&gt; &gt; -[WebView _preferencesChanged]:
&gt; &gt; 
&gt; &gt;     // Application Cache Preferences are stored on the global cache storage manager, not in Settings.
&gt; &gt;     [WebApplicationCache setDefaultOriginQuota:[preferences applicationCacheDefaultOriginQuota]];
&gt; &gt; 
&gt; &gt; There could just be another line added to set the maximum storage.
&gt; 
&gt; Indeed!  No need to add a new function.  Changed.

Unfortunately, using the above approach causes a couple of test failures (see: http://build.webkit.org/results/Leopard%20Intel%20Debug%20(Tests)/r81939%20(28013)/results.html).  I haven&apos;t quite figured out why yet, but the original patch doesn&apos;t cause the same errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373360</commentid>
    <comment_count>53</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-25 00:02:12 -0700</bug_when>
    <thetext>Attachment 86888 did not build on win:
Build output: http://queues.webkit.org/results/8233947</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373362</commentid>
    <comment_count>54</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-25 00:07:35 -0700</bug_when>
    <thetext>Looks like the EWS bot doesn&apos;t like the int64_t change; and the Windows bot can&apos;t find WebCore::openFile() during linking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373582</commentid>
    <comment_count>55</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-25 10:22:31 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; Looks like the EWS bot doesn&apos;t like the int64_t change; and the Windows bot can&apos;t find WebCore::openFile() during linking.

Gah! It appears openFile() isn&apos;t even implemented on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373640</commentid>
    <comment_count>56</comment_count>
      <attachid>86967</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-25 11:44:25 -0700</bug_when>
    <thetext>Created attachment 86967
[2/3] Store media files as flat files within the Application Cache area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373680</commentid>
    <comment_count>57</comment_count>
      <attachid>86967</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-03-25 12:38:06 -0700</bug_when>
    <thetext>Comment on attachment 86967
[2/3] Store media files as flat files within the Application Cache area.

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

&gt; Source/WebCore/platform/win/FileSystemWin.cpp:241
&gt; +    return CreateFile(path.characters(), desiredAccess, 0, 0, creationDisposition, FILE_ATTRIBUTE_NORMAL, 0);

This should be charactersWithNullTermination, I believe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373684</commentid>
    <comment_count>58</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-25 12:43:41 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (From update of attachment 86967 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86967&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/win/FileSystemWin.cpp:241
&gt; &gt; +    return CreateFile(path.characters(), desiredAccess, 0, 0, creationDisposition, FILE_ATTRIBUTE_NORMAL, 0);
&gt; 
&gt; This should be charactersWithNullTermination, I believe.

Indeed it should!  Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373686</commentid>
    <comment_count>59</comment_count>
      <attachid>86967</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-03-25 12:48:09 -0700</bug_when>
    <thetext>Comment on attachment 86967
[2/3] Store media files as flat files within the Application Cache area.

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        No new tests.

It would be nice to have an explanation of why there aren&apos;t any new tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373708</commentid>
    <comment_count>60</comment_count>
      <attachid>86967</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-25 13:46:16 -0700</bug_when>
    <thetext>Comment on attachment 86967
[2/3] Store media files as flat files within the Application Cache area.

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

Looks good to me, too.

I think that it would be very useful to add tests checking that updating an appcache with media resources works. That probably doesn&apos;t need to block landing this patch.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1253
&gt; +    if (writtenBytes != (int64_t)data-&gt;size()) {

We prefer static_cast to C-style casts.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1454
&gt; +    if (selectPaths.prepare() != SQLResultOk)
&gt; +        return 0;

Should we log an error?

&gt; Source/WebCore/platform/win/FileSystemWin.cpp:239
&gt; +    DWORD desiredAccess = mode == OpenForRead ? GENERIC_READ : GENERIC_WRITE;
&gt; +    DWORD creationDisposition = mode == OpenForRead ? OPEN_EXISTING : CREATE_ALWAYS;

Perhaps this would be safer as a switch - that way, the compiler will warn if other modes are added later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373717</commentid>
    <comment_count>61</comment_count>
      <attachid>86967</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-25 13:55:34 -0700</bug_when>
    <thetext>Comment on attachment 86967
[2/3] Store media files as flat files within the Application Cache area.

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

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1253
&gt;&gt; +    if (writtenBytes != (int64_t)data-&gt;size()) {
&gt; 
&gt; We prefer static_cast to C-style casts.

Sure thing.  Changed.

&gt;&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:1454
&gt;&gt; +        return 0;
&gt; 
&gt; Should we log an error?

We don&apos;t currently log errors for most other equivalent select statements elsewhere in this class, but I&apos;ll add one here.

&gt;&gt; Source/WebCore/platform/win/FileSystemWin.cpp:239
&gt;&gt; +    DWORD creationDisposition = mode == OpenForRead ? OPEN_EXISTING : CREATE_ALWAYS;
&gt; 
&gt; Perhaps this would be safer as a switch - that way, the compiler will warn if other modes are added later.

Sure thing.  Changed.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373763</commentid>
    <comment_count>62</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-25 15:52:00 -0700</bug_when>
    <thetext>The [2/3] patch has passed the style, qt, mac, win, and efl EWS bots, so I&apos;m preparing to land this patch now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373767</commentid>
    <comment_count>63</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-25 16:05:52 -0700</bug_when>
    <thetext>Committed r82000: &lt;http://trac.webkit.org/changeset/82000&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373798</commentid>
    <comment_count>64</comment_count>
      <attachid>81702</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-03-25 17:07:10 -0700</bug_when>
    <thetext>Comment on attachment 81702
[3/3] Set the maximum total- and quota-specific Application Cache sizes from WebKitPreferences.

This change causes a number of broken (and some crashed) LayoutTests, so I&apos;m going to obsolete it for now.  This patch should not affect blocked bugs, so I&apos;m going to mark this bug as closed, and file a new bug for this obsolete patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81292</attachid>
            <date>2011-02-04 14:51:57 -0800</date>
            <delta_ts>2011-02-07 15:16:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53784-20110204145156.patch</filename>
            <type>text/plain</type>
            <size>21405</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YmY3ZTlkZDU3NjRlNmJjZjVjOGY1N2VkMTQ0YTk0ODY0ZTNjMzIwLi5k
Mzc1Nzg5OTRhM2ZjOGQ2OWM5OGUwYjM5OTE3MDM0NDA4Mzg2YjRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDUgQEAKKzIwMTEtMDItMDMgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBwbGlj
YXRpb24gQ2FjaGUgc2hvdWxkIHNhdmUgYXVkaW8vIGFuZCB2aWRlby8gbWltZSB0eXBlcyBhcyBm
bGF0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01Mzc4NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODkzMjQ3Mz4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuCisKKyAgICAgICAgU3RvcmUgY2VydGFpbiBtaW1lIHR5cGVzIGFzIGZsYXQgZmls
ZXMgYWxvbmdzaWRlIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBkYXRhYmFzZS4KKyAgICAgICAgVGhp
cyByZXF1aXJlcyBwbHVtYmluZyB0aGUgc2F2ZWQgZmlsZSBwYXRoIGZyb20gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UgdGhyb3VnaAorICAgICAgICB0byBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uu
ICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpIG5vdyB0YWtlcyBhbiBhZGRpdGlv
bmFsCisgICAgICAgICJwYXRoIiBwYXJhbWV0ZXIuICBUbyBmYWNpbGl0YXRlIGV4dHJhY3Rpbmcg
dGhpcyBwYXRoIGluZm9ybWF0aW9uLCB0d28gZnVuY3Rpb25zIGluIAorICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlSG9zdCBoYXZlIGJlZW4gbWFkZSBwdWJsaWMuCisKKyAgICAgICAgKiBsb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogUGFzcyBhbG9uZyBuZXcg
InBhdGgiIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6ZGlkRmFpbCk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OnNo
b3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKTogTWFkZSBwdWJsaWMuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Z2V0QXBwbGljYXRpb25DYWNoZUZh
bGxiYWNrUmVzb3VyY2UpOiBNYWRlIHB1YmxpYy4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlKTogQWRkIG5ldyAicGF0
aCIgcGFyYW1ldGVyLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6
Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U6OnBhdGgpOiBOZXcgYWNjZXNzb3IuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VEYXRhIHNj
aGVtYSBhbmQKKyAgICAgICAgICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFi
bGUsIGFkZCBhIG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUgbmV3IHBh
dGggZGF0YSB3aGVuIGFkZGluZyBuZXcgcm93cyBpbiAKKyAgICAgICAgICAgIENhY2hlUmVzb3Vy
Y2VEYXRhLCBhbmQgc3RvcmUgbWVkaWEgcmVzb3VyY2VzIGFzIGZsYXQgZmlsZXMuCisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKTogUHVsbCB0aGUg
InBhdGgiIGNvbHVtbiBmcm9tIENhY2hlUmVzb3VyY2VEYXRhCisgICAgICAgICAgICB3aGVuIGxv
YWRpbmcgY2FjaGUgaXRlbXMuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6cmVtb3ZlKTogQ2FsbCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2Fj
aGVHcm91cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6IFdhbGsgdGhyb3VnaCBEZWxldGVkQ2FjaGVS
ZXNvdXJjZURhdGEKKyAgICAgICAgICAgIGxvb2tpbmcgZm9yIGVudHJpZXMgd2l0aCBub24tZW1w
dHkgInBhdGgiIGNvbHVtbnM7IGlmIGZvdW5kLCBkZWxldGUuCisgICAgICAgICogbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg6CisKIDIwMTEtMDItMDIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1
a2UgTml3YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlR3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKaW5kZXggNTE0ZWYxOTdhYWQ4MDJkZDAyMTNmOTZkYThl
NDI4MmIxMTcyZTZkMS4uM2M4ZTFhNDU4OWU0MGM1MzI3ZTllOWJjZTk4ZmEzNTM4YmE1YjMxYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVHcm91cC5jcHAKQEAgLTUxMiw3ICs1MTIsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0
IFJlcwogICAgIGlmIChtX25ld2VzdENhY2hlICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
PT0gMzA0KSB7IC8vIE5vdCBtb2RpZmllZC4KICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291
cmNlKiBuZXdlc3RDYWNoZWRSZXNvdXJjZSA9IG1fbmV3ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJM
KHVybCk7CiAgICAgICAgIGlmIChuZXdlc3RDYWNoZWRSZXNvdXJjZSkgewotICAgICAgICAgICAg
bV9jYWNoZUJlaW5nVXBkYXRlZC0+YWRkUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNl
OjpjcmVhdGUodXJsLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgdHlwZSwgbmV3
ZXN0Q2FjaGVkUmVzb3VyY2UtPmRhdGEoKSkpOworICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBk
YXRlZC0+YWRkUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCBu
ZXdlc3RDYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgdHlwZSwgbmV3ZXN0Q2FjaGVkUmVzb3Vy
Y2UtPmRhdGEoKSwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnBhdGgoKSkpOwogICAgICAgICAgICAg
bV9wZW5kaW5nRW50cmllcy5yZW1vdmUobV9jdXJyZW50SGFuZGxlLT5maXJzdFJlcXVlc3QoKS51
cmwoKSk7CiAgICAgICAgICAgICBtX2N1cnJlbnRIYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICAg
ICAgbV9jdXJyZW50SGFuZGxlID0gMDsKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IGNvbnN0IFJlcwogICAgICAgICAgICAgQVNTRVJUKG1fbmV3ZXN0Q2FjaGUpOwogICAgICAgICAg
ICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBuZXdlc3RDYWNoZWRSZXNvdXJjZSA9IG1fbmV3
ZXN0Q2FjaGUtPnJlc291cmNlRm9yVVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOwog
ICAgICAgICAgICAgQVNTRVJUKG5ld2VzdENhY2hlZFJlc291cmNlKTsKLSAgICAgICAgICAgIG1f
Y2FjaGVCZWluZ1VwZGF0ZWQtPmFkZFJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6
Y3JlYXRlKHVybCwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIHR5cGUsIG5ld2Vz
dENhY2hlZFJlc291cmNlLT5kYXRhKCkpKTsKKyAgICAgICAgICAgIG1fY2FjaGVCZWluZ1VwZGF0
ZWQtPmFkZFJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgbmV3
ZXN0Q2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIHR5cGUsIG5ld2VzdENhY2hlZFJlc291cmNl
LT5kYXRhKCksIG5ld2VzdENhY2hlZFJlc291cmNlLT5wYXRoKCkpKTsKICAgICAgICAgICAgIG1f
cGVuZGluZ0VudHJpZXMucmVtb3ZlKG1fY3VycmVudEhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJs
KCkpOwogICAgICAgICAgICAgbV9jdXJyZW50SGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgICAg
IG1fY3VycmVudEhhbmRsZSA9IDA7CkBAIC02NDIsNyArNjQyLDcgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYKICAgICAgICAgQVNTRVJUKG1fbmV3ZXN0Q2FjaGUpOwogICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UqIG5ld2VzdENhY2hlZFJlc291cmNlID0gbV9uZXdlc3RDYWNoZS0+
cmVzb3VyY2VGb3JVUkwodXJsKTsKICAgICAgICAgQVNTRVJUKG5ld2VzdENhY2hlZFJlc291cmNl
KTsKLSAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+YWRkUmVzb3VyY2UoQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2Uo
KSwgdHlwZSwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPmRhdGEoKSkpOworICAgICAgICBtX2NhY2hl
QmVpbmdVcGRhdGVkLT5hZGRSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0
ZSh1cmwsIG5ld2VzdENhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCB0eXBlLCBuZXdlc3RDYWNo
ZWRSZXNvdXJjZS0+ZGF0YSgpLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+cGF0aCgpKSk7CiAgICAg
ICAgIC8vIExvYWQgdGhlIG5leHQgcmVzb3VyY2UsIGlmIGFueS4KICAgICAgICAgc3RhcnRMb2Fk
aW5nRW50cnkoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlSG9zdC5oCmluZGV4IGExZjI4NDFjMzBkNzUxYzRhZjgzZGYx
MzNhYTkyZDA4ZGRjMmI3NmEuLjU2YTVmNTdhZTc2NzljZDBmOWEwMWRjNzJhNTU4ZmRjMjgyZjM5
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlSG9zdC5oCkBAIC0xNTYsNiArMTU2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgQ2FjaGVJbmZvIGFwcGxpY2F0aW9uQ2FjaGVJbmZvKCk7CiAjZW5kaWYKIAorI2lm
ICFQTEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgYm9vbCBzaG91bGRMb2FkUmVzb3VyY2VGcm9t
QXBwbGljYXRpb25DYWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UqJik7CisgICAgICAgIGJvb2wgZ2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVz
b3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYs
IEFwcGxpY2F0aW9uQ2FjaGUqID0gMCk7CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IGJvb2wgaXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpOwogICAgICAgICBEb2N1bWVudExvYWRl
ciogZG9jdW1lbnRMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TG9hZGVyOyB9CkBA
IC0xODIsOCArMTg3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBmcmllbmQgY2xh
c3MgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U7CiAKICAgICAgICAgYm9vbCBzY2hlZHVsZUxvYWRG
YWxsYmFja1Jlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoUmVzb3VyY2VMb2FkZXIqLCBBcHBs
aWNhdGlvbkNhY2hlKiA9IDApOwotICAgICAgICBib29sIHNob3VsZExvYWRSZXNvdXJjZUZyb21B
cHBsaWNhdGlvbkNhY2hlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSomKTsKLSAgICAgICAgYm9vbCBnZXRBcHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNv
dXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJiwg
QXBwbGljYXRpb25DYWNoZSogPSAwKTsKICAgICAgICAgdm9pZCBzZXRDYW5kaWRhdGVBcHBsaWNh
dGlvbkNhY2hlR3JvdXAoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCk7CiAgICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cCogY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKCkgY29u
c3QgeyByZXR1cm4gbV9jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXA7IH0KICAgICAgICAg
dm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gYXBw
bGljYXRpb25DYWNoZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCmluZGV4IDAzYzVjODM1OTQ3YzQz
MTUwMTU2YjQ1Yjg2NTA3NzI5YjFjMTEwM2IuLmMwZGY1NzM0MDZiY2Y1NzAzOWEyOGQwNDNhOTY1
MWRlOTU5ZWUwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCkBAIC0zMSwxMSArMzEsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCB1bnNpZ25lZCB0eXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSkKK0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVk
IHR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgp
CiAgICAgOiBTdWJzdGl0dXRlUmVzb3VyY2UodXJsLCByZXNwb25zZSwgZGF0YSkKICAgICAsIG1f
dHlwZSh0eXBlKQogICAgICwgbV9zdG9yYWdlSUQoMCkKICAgICAsIG1fZXN0aW1hdGVkU2l6ZUlu
U3RvcmFnZSgwKQorICAgICwgbV9wYXRoKHBhdGgpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaApp
bmRleCAyY2E3ODQ2NjNlYTMwY2JkZjAyMzNiM2MxYjVjNWU0ZTE4NTA3YzRmLi4xOTBlNjI5MTAx
OWI3YTc3Mjk1MzJjM2NlZTBlYWJmZTFmNmM2ZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCkBAIC00
MiwxMCArNDIsMTAgQEAgcHVibGljOgogICAgICAgICBGYWxsYmFjayA9IDEgPDwgNAogICAgIH07
CiAgICAgICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4gY3JlYXRlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIHVuc2lnbmVkIHR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZSgpKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZT4gY3JlYXRlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIHVuc2lnbmVkIHR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZm
ZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpLCBjb25zdCBTdHJpbmcmIHBhdGggPSBTdHJpbmco
KSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghdXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKTsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UodXJs
LCByZXNwb25zZSwgdHlwZSwgYnVmZmVyKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlKHVybCwgcmVzcG9uc2UsIHR5cGUsIGJ1ZmZlciwgcGF0
aCkpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KQEAgLTU2LDE2ICs1NiwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclN0b3JhZ2VJRCgp
IHsgbV9zdG9yYWdlSUQgPSAwOyB9CiAgICAgaW50NjRfdCBlc3RpbWF0ZWRTaXplSW5TdG9yYWdl
KCk7CiAKKyAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0K
KwogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgdm9pZCBkdW1wVHlwZSh1bnNpZ25lZCB0eXBl
KTsKICNlbmRpZgogICAgIAogcHJpdmF0ZToKLSAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgdW5zaWdu
ZWQgdHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcik7CisgICAgQXBwbGljYXRp
b25DYWNoZVJlc291cmNlKGNvbnN0IEtVUkwmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgdW5z
aWduZWQgdHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHBhdGgp
OwogCiAgICAgdW5zaWduZWQgbV90eXBlOwogICAgIHVuc2lnbmVkIG1fc3RvcmFnZUlEOwogICAg
IGludDY0X3QgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlOworICAgIFN0cmluZyBtX3BhdGg7CiB9
OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXgg
MGMwMGVlNjFkNDQ5ODUxZDAxZjhmMzNjYTkzYTQ1YTdkY2FjNzBjMC4uNTNiYTcwNDRjYjFhNzVl
NTA3NDA0NzFlOWUzMjliNWMzYjk0YmY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0zNywx
MiArMzcsMTUgQEAKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxp
dGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAi
VVVJRC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qga0ZsYXRGaWxlU3ViZGlyZWN0
b3J5ID0gIkFwcGxpY2F0aW9uQ2FjaGUiOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBs
YXRlIDxjbGFzcyBUPgpAQCAtNTUwLDcgKzU1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmV4ZWN1dGVTUUxDb21tYW5kKGNvbnN0IFN0cmluZyYgc3FsKQogLy8gVXBkYXRlIHRo
ZSBzY2hlbWFWZXJzaW9uIHdoZW4gdGhlIHNjaGVtYSBvZiBhbnkgdGhlIEFwcGxpY2F0aW9uIENh
Y2hlCiAvLyBTUUxpdGUgdGFibGVzIGNoYW5nZXMuIFRoaXMgYWxsb3dzIHRoZSBkYXRhYmFzZSB0
byBiZSByZWJ1aWx0IHdoZW4KIC8vIGEgbmV3LCBpbmNvbXBhdGlibGUgY2hhbmdlIGhhcyBiZWVu
IGludHJvZHVjZWQgdG8gdGhlIGRhdGFiYXNlIHNjaGVtYS4KLXN0YXRpYyBjb25zdCBpbnQgc2No
ZW1hVmVyc2lvbiA9IDY7CitzdGF0aWMgY29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSA3OwogICAg
IAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiB7
CkBAIC02MDgsNyArNjExLDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRh
dGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQo
IkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlRW50cmllcyAoY2FjaGUgSU5URUdFUiBO
T1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCB0eXBlIElOVEVHRVIsIHJlc291cmNlIElOVEVHRVIg
Tk9UIE5VTEwpIik7CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIENhY2hlUmVzb3VyY2VzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1F
TlQsIHVybCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKICAgICAgICAgICAgICAg
ICAgICAgICAic3RhdHVzQ29kZSBJTlRFR0VSIE5PVCBOVUxMLCByZXNwb25zZVVSTCBURVhUIE5P
VCBOVUxMLCBtaW1lVHlwZSBURVhULCB0ZXh0RW5jb2RpbmdOYW1lIFRFWFQsIGhlYWRlcnMgVEVY
VCwgZGF0YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7Ci0gICAgZXhlY3V0
ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlUmVzb3VyY2VEYXRh
IChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGRhdGEgQkxPQikiKTsKKyAg
ICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2FjaGVSZXNv
dXJjZURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgZGF0YSBCTE9C
LCBwYXRoIFRFWFQpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIERlbGV0ZWRDYWNoZVJlc291cmNlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBB
VVRPSU5DUkVNRU5ULCBwYXRoIFRFWFQpIik7CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05G
TElDVCBJR05PUkUsIHF1b3RhIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsK
IAogICAgIC8vIFdoZW4gYSBjYWNoZSBpcyBkZWxldGVkLCBhbGwgaXRzIGVudHJpZXMgYW5kIGl0
cyB3aGl0ZWxpc3Qgc2hvdWxkIGJlIGRlbGV0ZWQuCkBAIC02MzEsNiArNjM1LDE0IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05v
dEV4aXN0KQogICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIEJFR0lOIgogICAg
ICAgICAgICAgICAgICAgICAgICIgIERFTEVURSBGUk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJF
IGlkID0gT0xELmRhdGE7IgogICAgICAgICAgICAgICAgICAgICAgICIgRU5EIik7CisgICAgCisg
ICAgLy8gV2hlbiBhIGNhY2hlIHJlc291cmNlIGlzIGRlbGV0ZWQsIHdoZXRoZXIgb3Igbm90IGl0
IGNvbnRhaW5zIGEgbm9uLWVtcHR5IHBhdGgsIHRoYXQgcGF0aCBzaG91bGQKKyAgICAvLyBiZSBh
ZGRlZCB0byB0aGUgRGVsZXRlZENhY2hlUmVzb3VyY2VzIHRhYmxlLiAgRklYTUU6IGl0IHdvdWxk
IGJlIG5pY2UgaWYgc3FsaXRlMyBhbGxvd2VkIGNvbmRpdGlvbnMKKyAgICAvLyB3aXRoaW4gaXRz
IHRyaWdnZXJzLCBzbyB0aGF0IGRlbGV0ZWQgcmVzb3VyY2VzIHdpdGggZW1wdHkgcGF0aCBzdHJp
bmdzIGNvdWxkIGJlIHNraXBwZWQgaGVyZS4KKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRF
IFRSSUdHRVIgSUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgQUZURVIgREVM
RVRFIE9OIENhY2hlUmVzb3VyY2VEYXRhIgorICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVB
Q0ggUk9XIEJFR0lOIgorICAgICAgICAgICAgICAgICAgICAgICIgIElOU0VSVCBJTlRPIERlbGV0
ZWRDYWNoZVJlc291cmNlcyAocGF0aCkgdmFsdWVzIChPTEQucGF0aCk7IgorICAgICAgICAgICAg
ICAgICAgICAgICIgRU5EIik7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4
ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCkBAIC03NjIsMTUgKzc3
NCwzOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FMaXRlU3RhdGVtZW50IGRhdGFT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRh
KSBWQUxVRVMgKD8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGRhdGFTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRhLCBwYXRoKSBWQUxVRVMg
KD8sID8pIik7CiAgICAgaWYgKGRhdGFTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKHJlc291cmNlLT5kYXRhKCkt
PnNpemUoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0
YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CisKKyAgICBTdHJpbmcgZnVs
bFBhdGg7CisgICAgaWYgKHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkuc3RhcnRzV2l0
aCgiYXVkaW8vIiwgZmFsc2UpIHx8IHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkuc3Rh
cnRzV2l0aCgidmlkZW8vIiwgZmFsc2UpKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gY3JlYXRl
Q2Fub25pY2FsVVVJRFN0cmluZygpOworICAgICAgICBTdHJpbmcgZmxhdEZpbGVEaXJlY3Rvcnkg
PSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwga0ZsYXRGaWxlU3Vi
ZGlyZWN0b3J5KTsKKyAgICAgICAgbWFrZUFsbERpcmVjdG9yaWVzKGZsYXRGaWxlRGlyZWN0b3J5
KTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgCisgICAgICAgIFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUgPSBvcGVuRmlsZShmdWxsUGF0aCwgT3BlbkZvcldyaXRlKTsKKyAgICAg
ICAgaWYgKCFoYW5kbGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgd3Jp
dGVUb0ZpbGUoaGFuZGxlLCByZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRh
KCktPnNpemUoKSk7CisgICAgICAgIGNsb3NlRmlsZShoYW5kbGUpOworICAgICAgICAKKyAgICAg
ICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAocmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKQorICAgICAgICAgICAgZGF0YVN0YXRlbWVu
dC5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRhKCkt
PnNpemUoKSk7CisgICAgfQogICAgIAotICAgIGlmICghZGF0YVN0YXRlbWVudC5leGVjdXRlQ29t
bWFuZCgpKQorICAgIGlmICghZGF0YVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAg
ICAgIC8vIENsZWFuIHVwIHRoZSBmaWxlIHdoaWNoIHdlIG1heSBoYXZlIHdyaXR0ZW4gdG86Cisg
ICAgICAgIGlmICghZnVsbFBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAgZGVsZXRlRmlsZShm
dWxsUGF0aCk7CisKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIHVuc2lnbmVk
IGRhdGFJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJ
RCgpKTsKIApAQCAtOTk4LDcgKzEwMzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VIZWFk
ZXJzKGNvbnN0IFN0cmluZyYgaGVhZGVycywgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9ucwogUGFz
c1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENh
Y2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgY2FjaGVTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJT
RUxFQ1QgdXJsLCB0eXBlLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2Fj
aGVSZXNvdXJjZURhdGEuZGF0YSBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVz
b3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgdXJsLCB0eXBlLCBtaW1lVHlw
ZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJjZURhdGEuZGF0YSwgQ2Fj
aGVSZXNvdXJjZURhdGEucGF0aCBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVz
b3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VE
YXRhIE9OIENhY2hlUmVzb3VyY2VEYXRhLmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hFUkUgQ2Fj
aGVFbnRyaWVzLmNhY2hlPT8iKTsKICAgICBpZiAoY2FjaGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgY2Fj
aGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
QEAgLTEwMDgsNyArMTA0NCw5IEBAIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlCiAgICAgY2FjaGVT
dGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAKICAgICBSZWZQdHI8QXBwbGljYXRp
b25DYWNoZT4gY2FjaGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKLSAgICAKKworICAg
IFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2Nh
Y2hlRGlyZWN0b3J5LCBrRmxhdEZpbGVTdWJkaXJlY3RvcnkpOworCiAgICAgaW50IHJlc3VsdDsK
ICAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0
Um93KSB7CiAgICAgICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKSk7CkBAIC0xMDE3LDE4ICsxMDU1LDIzIEBAIFBhc3NSZWZQdHI8QXBw
bGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25l
ZCBzdG9yYWdlCiAKICAgICAgICAgVmVjdG9yPGNoYXI+IGJsb2I7CiAgICAgICAgIGNhY2hlU3Rh
dGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3Rvcig1LCBibG9iKTsKLSAgICAgICAgCisgICAgICAg
ICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBTaGFyZWRCdWZm
ZXI6OmFkb3B0VmVjdG9yKGJsb2IpOwogICAgICAgICAKKyAgICAgICAgU3RyaW5nIHBhdGggPSBj
YWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDYpOworICAgICAgICBsb25nIGxvbmcgc2l6ZSA9
IDA7CisgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSB8fCAhZ2V0RmlsZVNpemUocGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKSwgc2l6ZSkpCisgICAgICAg
ICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOworICAgICAgICAKICAgICAgICAgU3RyaW5nIG1pbWVU
eXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgyKTsKICAgICAgICAgU3RyaW5nIHRl
eHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDMpOwogICAgICAg
ICAKLSAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSh1cmwsIG1pbWVUeXBlLCBkYXRh
LT5zaXplKCksIHRleHRFbmNvZGluZ05hbWUsICIiKTsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZSh1cmwsIG1pbWVUeXBlLCBzaXplLCB0ZXh0RW5jb2RpbmdOYW1lLCAiIik7CiAK
ICAgICAgICAgU3RyaW5nIGhlYWRlcnMgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDQp
OwogICAgICAgICBwYXJzZUhlYWRlcnMoaGVhZGVycywgcmVzcG9uc2UpOwogICAgICAgICAKLSAg
ICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIHJlc3BvbnNlLCB0eXBlLCBkYXRhLnJlbGVh
c2UoKSk7CisgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNl
ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCByZXNwb25zZSwgdHlwZSwg
ZGF0YS5yZWxlYXNlKCksIHBhdGgpOwogCiAgICAgICAgIGlmICh0eXBlICYgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjpNYW5pZmVzdCkKICAgICAgICAgICAgIGNhY2hlLT5zZXRNYW5pZmVzdFJl
c291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7CkBAIC0xMTIyLDYgKzExNjUsOCBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpyZW1vdmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCiAK
ICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlEKCk7CiAgICAgfQorICAgIAor
ICAgIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOwogfSAgICAKIAogdm9pZCBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQpAQCAtMTE0Miw2ICsxMTg3LDggQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQogICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQogICAgICAgICBpdC0+c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOworICAgIAorICAg
IGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOwogfSAgICAKIAogYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5
LCBBcHBsaWNhdGlvbkNhY2hlSG9zdCogY2FjaGVIb3N0KQpAQCAtMTE2MSw3ICsxMjA4LDcgQEAg
Ym9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJp
bmcmIGNhY2hlRGlyZWN0b3J5LCBBcHAKICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJl
c291cmNlPiByZXNvdXJjZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShy
ZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5yZXNwb25zZSgpLCByZXNvdXJjZS0+dHlwZSgpLCBy
ZXNvdXJjZS0+ZGF0YSgpKTsKKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4gcmVzb3VyY2VDb3B5ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUocmVzb3Vy
Y2UtPnVybCgpLCByZXNvdXJjZS0+cmVzcG9uc2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3Vy
Y2UtPmRhdGEoKSwgcmVzb3VyY2UtPnBhdGgoKSk7CiAgICAgICAgIAogICAgICAgICBjYWNoZUNv
cHktPmFkZFJlc291cmNlKHJlc291cmNlQ29weS5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTEyNjks
NiArMTMxNiw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3Jv
dXAoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkKICAgICB9CiAKICAgICBkZWxldGVUcmFuc2Fj
dGlvbi5jb21taXQoKTsKKyAgICAKKyAgICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKKyAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTI4Niw2ICsxMzM2LDQxIEBAIHZvaWQgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yTWF4U2l6ZVJlYWNoZWQoKQogICAgIGlmICht
X2RhdGFiYXNlLmxhc3RFcnJvcigpID09IFNRTFJlc3VsdEZ1bGwpCiAgICAgICAgIG1faXNNYXhp
bXVtU2l6ZVJlYWNoZWQgPSB0cnVlOwogfQorICAgIAordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCkKK3sKKyAgICBvcGVuRGF0YWJhc2UoZmFs
c2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VMRUNUIHBh
dGggRlJPTSBEZWxldGVkQ2FjaGVSZXNvdXJjZXMiKTsKKyAgICAKKyAgICBpZiAoc2VsZWN0UGF0
aHMucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gQmFpbCBvdXQgZWFybHkgaWYgdGhlIHN0YXRlbWVudCByZXR1cm5zIDAgcm93cy4KKyAgICBp
ZiAoc2VsZWN0UGF0aHMuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGRvIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBzZWxlY3RQYXRocy5nZXRDb2x1
bW5UZXh0KDApOworICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBrRmxhdEZpbGVTdWJkaXJlY3Rv
cnkpOworICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
ZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOworICAgICAgICAKKyAgICAgICAgLy8gRG9uJ3QgZXhp
dCB0aGUgZmxhdEZpbGVEaXJlY3RvcnkhICBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBzb21l
b25lIHRhbXBlcnMgCisgICAgICAgIC8vIHdpdGggdGhlIEFwcGxpY2F0aW9uQ2FjaGUgZGF0YWJh
c2UsIGJ1dCBwcm90ZWN0IGFnYWluc3QgaXQgcmVnYXJkbGVzcy4KKyAgICAgICAgQVNTRVJUKGRp
cmVjdG9yeU5hbWUoZnVsbFBhdGgpID09IGZsYXRGaWxlRGlyZWN0b3J5KTsKKyAgICAgICAgaWYg
KGRpcmVjdG9yeU5hbWUoZnVsbFBhdGgpICE9IGZsYXRGaWxlRGlyZWN0b3J5KQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKyAg
ICB9IHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KTsKKyAgICAKKyAg
ICBleGVjdXRlU1FMQ29tbWFuZCgiREVMRVRFIEZST00gRGVsZXRlZENhY2hlUmVzb3VyY2VzIik7
Cit9CiAKIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgp
IAogICAgIDogbV9tYXhpbXVtU2l6ZShBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bm9RdW90YSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuaAppbmRleCA4YmZkZjEzZjZiYzZmZjAyMjczODZkOTBiYzU5YTA1NDky
ZTUxMTQ0Li45Njg4MzVlOTUyMDgyOTE3MzI4YzQ2ZmE5YmYxOGM0MWI2MmJlMWQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuaApAQCAtOTQsNiArOTQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW50NjRf
dCB1bmtub3duUXVvdGEoKSB7IHJldHVybiAtMTsgfQogICAgIHN0YXRpYyBpbnQ2NF90IG5vUXVv
dGEoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKTsgfQorCiBw
cml2YXRlOgogICAgIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCk7CiAgICAgUGFzc1JlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlPiBsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKTsKQEAgLTExOCw2
ICsxMTksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgZXhlY3V0ZVNRTENvbW1hbmQoY29uc3QgU3Ry
aW5nJik7CiAKICAgICB2b2lkIGNoZWNrRm9yTWF4U2l6ZVJlYWNoZWQoKTsKKyAgICB2b2lkIGNo
ZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOwogICAgIAogICAgIFN0cmluZyBtX2NhY2hlRGlyZWN0
b3J5OwogICAgIFN0cmluZyBtX2NhY2hlRmlsZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81539</attachid>
            <date>2011-02-07 15:16:58 -0800</date>
            <delta_ts>2011-02-07 15:55:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53784-20110207151657.patch</filename>
            <type>text/plain</type>
            <size>26077</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0YTdiZDUyMGE5N2Y0MWNkYjU5NjkzNzhhNjA2ZTQ5MjQyMmIzMDM0Li5i
ZTc1NGIwMmQwMTNmYzZkM2Y4OTY5NWEwNjE2YmVhZDM2NzFmYTQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDUgQEAKKzIwMTEtMDItMDMgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBwbGlj
YXRpb24gQ2FjaGUgc2hvdWxkIHNhdmUgYXVkaW8vIGFuZCB2aWRlby8gbWltZSB0eXBlcyBhcyBm
bGF0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01Mzc4NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODkzMjQ3Mz4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuCisKKyAgICAgICAgU3RvcmUgY2VydGFpbiBtaW1lIHR5cGVzIGFzIGZsYXQgZmls
ZXMgYWxvbmdzaWRlIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBkYXRhYmFzZS4KKyAgICAgICAgVGhp
cyByZXF1aXJlcyBwbHVtYmluZyB0aGUgc2F2ZWQgZmlsZSBwYXRoIGZyb20gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UgdGhyb3VnaAorICAgICAgICB0byBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uu
ICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpIG5vdyB0YWtlcyBhbiBhZGRpdGlv
bmFsCisgICAgICAgICJwYXRoIiBwYXJhbWV0ZXIuICBUbyBmYWNpbGl0YXRlIGV4dHJhY3Rpbmcg
dGhpcyBwYXRoIGluZm9ybWF0aW9uLCB0d28gZnVuY3Rpb25zIGluIAorICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlSG9zdCBoYXZlIGJlZW4gbWFkZSBwdWJsaWMuCisKKyAgICAgICAgKiBsb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogUGFzcyBhbG9uZyBuZXcg
InBhdGgiIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6ZGlkRmFpbCk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OnNo
b3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKTogTWFkZSBwdWJsaWMuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Z2V0QXBwbGljYXRpb25DYWNoZUZh
bGxiYWNrUmVzb3VyY2UpOiBNYWRlIHB1YmxpYy4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlKTogQWRkIG5ldyAicGF0
aCIgcGFyYW1ldGVyLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6
Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U6OnBhdGgpOiBOZXcgYWNjZXNzb3IuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VEYXRhIHNj
aGVtYSBhbmQKKyAgICAgICAgICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFi
bGUsIGFkZCBhIG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUgbmV3IHBh
dGggZGF0YSB3aGVuIGFkZGluZyBuZXcgcm93cyBpbiAKKyAgICAgICAgICAgIENhY2hlUmVzb3Vy
Y2VEYXRhLCBhbmQgc3RvcmUgbWVkaWEgcmVzb3VyY2VzIGFzIGZsYXQgZmlsZXMuCisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKTogUHVsbCB0aGUg
InBhdGgiIGNvbHVtbiBmcm9tIENhY2hlUmVzb3VyY2VEYXRhCisgICAgICAgICAgICB3aGVuIGxv
YWRpbmcgY2FjaGUgaXRlbXMuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6cmVtb3ZlKTogQ2FsbCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2Fj
aGVHcm91cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6IFdhbGsgdGhyb3VnaCBEZWxldGVkQ2FjaGVS
ZXNvdXJjZURhdGEKKyAgICAgICAgICAgIGxvb2tpbmcgZm9yIGVudHJpZXMgd2l0aCBub24tZW1w
dHkgInBhdGgiIGNvbHVtbnM7IGlmIGZvdW5kLCBkZWxldGUuCisgICAgICAgICogbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg6CisKIDIwMTEtMDItMDMgIFpoZW55YW8g
TW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3Nl
bGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuY3BwCmluZGV4IDUxNGVmMTk3YWFkODAyZGQwMjEzZjk2ZGE4ZTQyODJi
MTE3MmU2ZDEuLjNjOGUxYTQ1ODllNDBjNTMyN2U5ZTliY2U5OGZhMzUzOGJhNWIzMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3Jv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlR3JvdXAuY3BwCkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXMK
ICAgICBpZiAobV9uZXdlc3RDYWNoZSAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMw
NCkgeyAvLyBOb3QgbW9kaWZpZWQuCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSog
bmV3ZXN0Q2FjaGVkUmVzb3VyY2UgPSBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVSTCh1cmwp
OwogICAgICAgICBpZiAobmV3ZXN0Q2FjaGVkUmVzb3VyY2UpIHsKLSAgICAgICAgICAgIG1fY2Fj
aGVCZWluZ1VwZGF0ZWQtPmFkZFJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3Jl
YXRlKHVybCwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIHR5cGUsIG5ld2VzdENh
Y2hlZFJlc291cmNlLT5kYXRhKCkpKTsKKyAgICAgICAgICAgIG1fY2FjaGVCZWluZ1VwZGF0ZWQt
PmFkZFJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgbmV3ZXN0
Q2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIHR5cGUsIG5ld2VzdENhY2hlZFJlc291cmNlLT5k
YXRhKCksIG5ld2VzdENhY2hlZFJlc291cmNlLT5wYXRoKCkpKTsKICAgICAgICAgICAgIG1fcGVu
ZGluZ0VudHJpZXMucmVtb3ZlKG1fY3VycmVudEhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkp
OwogICAgICAgICAgICAgbV9jdXJyZW50SGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgICAgIG1f
Y3VycmVudEhhbmRsZSA9IDA7CkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25z
dCBSZXMKICAgICAgICAgICAgIEFTU0VSVChtX25ld2VzdENhY2hlKTsKICAgICAgICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogbmV3ZXN0Q2FjaGVkUmVzb3VyY2UgPSBtX25ld2VzdENh
Y2hlLT5yZXNvdXJjZUZvclVSTChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVChuZXdlc3RDYWNoZWRSZXNvdXJjZSk7Ci0gICAgICAgICAgICBtX2NhY2hl
QmVpbmdVcGRhdGVkLT5hZGRSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0
ZSh1cmwsIG5ld2VzdENhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCB0eXBlLCBuZXdlc3RDYWNo
ZWRSZXNvdXJjZS0+ZGF0YSgpKSk7CisgICAgICAgICAgICBtX2NhY2hlQmVpbmdVcGRhdGVkLT5h
ZGRSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIG5ld2VzdENh
Y2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCB0eXBlLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+ZGF0
YSgpLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+cGF0aCgpKSk7CiAgICAgICAgICAgICBtX3BlbmRp
bmdFbnRyaWVzLnJlbW92ZShtX2N1cnJlbnRIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsK
ICAgICAgICAgICAgIG1fY3VycmVudEhhbmRsZS0+Y2FuY2VsKCk7CiAgICAgICAgICAgICBtX2N1
cnJlbnRIYW5kbGUgPSAwOwpAQCAtNjQyLDcgKzY0Miw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlRXJy
b3ImCiAgICAgICAgIEFTU0VSVChtX25ld2VzdENhY2hlKTsKICAgICAgICAgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlKiBuZXdlc3RDYWNoZWRSZXNvdXJjZSA9IG1fbmV3ZXN0Q2FjaGUtPnJlc291
cmNlRm9yVVJMKHVybCk7CiAgICAgICAgIEFTU0VSVChuZXdlc3RDYWNoZWRSZXNvdXJjZSk7Ci0g
ICAgICAgIG1fY2FjaGVCZWluZ1VwZGF0ZWQtPmFkZFJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZTo6Y3JlYXRlKHVybCwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIHR5
cGUsIG5ld2VzdENhY2hlZFJlc291cmNlLT5kYXRhKCkpKTsKKyAgICAgICAgbV9jYWNoZUJlaW5n
VXBkYXRlZC0+YWRkUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJs
LCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgdHlwZSwgbmV3ZXN0Q2FjaGVkUmVz
b3VyY2UtPmRhdGEoKSwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnBhdGgoKSkpOwogICAgICAgICAv
LyBMb2FkIHRoZSBuZXh0IHJlc291cmNlLCBpZiBhbnkuCiAgICAgICAgIHN0YXJ0TG9hZGluZ0Vu
dHJ5KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuaAppbmRleCBhMWYyODQxYzMwZDc1MWM0YWY4M2RmMTMzYWE5
MmQwOGRkYzJiNzZhLi41NmE1ZjU3YWU3Njc5Y2QwZjlhMDFkYzcyYTU1OGZkYzI4MmYzOThhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUhvc3QuaApAQCAtMTU2LDYgKzE1NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIENhY2hlSW5mbyBhcHBsaWNhdGlvbkNhY2hlSW5mbygpOwogI2VuZGlmCiAKKyNpZiAhUExB
VEZPUk0oQ0hST01JVU0pCisgICAgICAgIGJvb2wgc2hvdWxkTG9hZFJlc291cmNlRnJvbUFwcGxp
Y2F0aW9uQ2FjaGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZVJlc291
cmNlKiYpOworICAgICAgICBib29sIGdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNl
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSomLCBBcHBs
aWNhdGlvbkNhY2hlKiA9IDApOworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBib29s
IGlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKTsKICAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGRv
Y3VtZW50TG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudExvYWRlcjsgfQpAQCAtMTgy
LDggKzE4Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOwogCiAgICAgICAgIGJvb2wgc2NoZWR1bGVMb2FkRmFsbGJh
Y2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKFJlc291cmNlTG9hZGVyKiwgQXBwbGljYXRp
b25DYWNoZSogPSAwKTsKLSAgICAgICAgYm9vbCBzaG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGlj
YXRpb25DYWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqJik7Ci0gICAgICAgIGJvb2wgZ2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3VyY2Uo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYsIEFwcGxp
Y2F0aW9uQ2FjaGUqID0gMCk7CiAgICAgICAgIHZvaWQgc2V0Q2FuZGlkYXRlQXBwbGljYXRpb25D
YWNoZUdyb3VwKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApOwogICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOyB9CiAgICAgICAgIHZvaWQg
c2V0QXBwbGljYXRpb25DYWNoZShQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IGFwcGxpY2F0
aW9uQ2FjaGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAppbmRleCAwM2M1YzgzNTk0N2M0MzE1MDE1
NmI0NWI4NjUwNzcyOWIxYzExMDNiLi5jMGRmNTczNDA2YmNmNTcwMzlhMjhkMDQzYTk2NTFkZTk1
OWVlMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcApAQCAtMzEsMTEgKzMxLDEyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgdW5zaWduZWQgdHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEpCitB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCB1bnNpZ25lZCB0eXBl
LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogICAg
IDogU3Vic3RpdHV0ZVJlc291cmNlKHVybCwgcmVzcG9uc2UsIGRhdGEpCiAgICAgLCBtX3R5cGUo
dHlwZSkKICAgICAsIG1fc3RvcmFnZUlEKDApCiAgICAgLCBtX2VzdGltYXRlZFNpemVJblN0b3Jh
Z2UoMCkKKyAgICAsIG1fcGF0aChwYXRoKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgKaW5kZXgg
MmNhNzg0NjYzZWEzMGNiZGYwMjMzYjNjMWI1YzVlNGUxODUwN2M0Zi4uMTkwZTYyOTEwMTliN2E3
NzI5NTMyYzNjZWUwZWFiZmUxZjZjNmRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaApAQCAtNDIsMTAg
KzQyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgRmFsbGJhY2sgPSAxIDw8IDQKICAgICB9OwogICAg
ICAgICAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IGNy
ZWF0ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCB1
bnNpZ25lZCB0eXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoKSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U+IGNyZWF0ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCB1bnNpZ25lZCB0eXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKSwgY29uc3QgU3RyaW5nJiBwYXRoID0gU3RyaW5nKCkpCiAg
ICAgewogICAgICAgICBBU1NFUlQoIXVybC5oYXNGcmFnbWVudElkZW50aWZpZXIoKSk7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKHVybCwgcmVz
cG9uc2UsIHR5cGUsIGJ1ZmZlcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSh1cmwsIHJlc3BvbnNlLCB0eXBlLCBidWZmZXIsIHBhdGgpKTsK
ICAgICB9CiAKICAgICB1bnNpZ25lZCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CkBA
IC01NiwxNiArNTYsMTkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTdG9yYWdlSUQoKSB7IG1f
c3RvcmFnZUlEID0gMDsgfQogICAgIGludDY0X3QgZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpOwog
CisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisKICNp
Zm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIHZvaWQgZHVtcFR5cGUodW5zaWduZWQgdHlwZSk7CiAj
ZW5kaWYKICAgICAKIHByaXZhdGU6Ci0gICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVkIHR5
cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpOworICAgIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZShjb25zdCBLVVJMJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIHVuc2lnbmVk
IHR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgY29uc3QgU3RyaW5nJiBwYXRoKTsKIAog
ICAgIHVuc2lnbmVkIG1fdHlwZTsKICAgICB1bnNpZ25lZCBtX3N0b3JhZ2VJRDsKICAgICBpbnQ2
NF90IG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZTsKKyAgICBTdHJpbmcgbV9wYXRoOwogfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDBjMDBl
ZTYxZDQ0OTg1MWQwMWY4ZjMzY2E5M2E0NWE3ZGNhYzcwYzAuLjk1M2RlZjgyMjFkNDNhNjc4ODE0
N2MxMTkzNzdiMGM1OWNkYjljZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMzcsMTIgKzM3
LDE1IEBACiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMaXRlVHJh
bnNhY3Rpb24uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlVVSUQu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGtGbGF0RmlsZVN1YmRpcmVjdG9yeSA9
ICJBcHBsaWNhdGlvbkNhY2hlIjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZSA8
Y2xhc3MgVD4KQEAgLTM4NCw3ICszODcsNyBAQCBpbnQ2NF90IEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpzcGFjZU5lZWRlZChpbnQ2NF90IGNhY2hlVG9TYXZlKQogICAgIGlmICghZ2V0RmlsZVNp
emUobV9jYWNoZUZpbGUsIGZpbGVTaXplKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQ2
NF90IGN1cnJlbnRTaXplID0gZmlsZVNpemU7CisgICAgaW50NjRfdCBjdXJyZW50U2l6ZSA9IGZp
bGVTaXplICsgZmxhdEZpbGVBcmVhU2l6ZSgpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBhbW91
bnQgb2YgZnJlZSBzcGFjZSB3ZSBoYXZlIGF2YWlsYWJsZS4KICAgICBpbnQ2NF90IHRvdGFsQXZh
aWxhYmxlU2l6ZSA9IDA7CkBAIC01NTAsNyArNTUzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZXhlY3V0ZVNRTENvbW1hbmQoY29uc3QgU3RyaW5nJiBzcWwpCiAvLyBVcGRhdGUg
dGhlIHNjaGVtYVZlcnNpb24gd2hlbiB0aGUgc2NoZW1hIG9mIGFueSB0aGUgQXBwbGljYXRpb24g
Q2FjaGUKIC8vIFNRTGl0ZSB0YWJsZXMgY2hhbmdlcy4gVGhpcyBhbGxvd3MgdGhlIGRhdGFiYXNl
IHRvIGJlIHJlYnVpbHQgd2hlbgogLy8gYSBuZXcsIGluY29tcGF0aWJsZSBjaGFuZ2UgaGFzIGJl
ZW4gaW50cm9kdWNlZCB0byB0aGUgZGF0YWJhc2Ugc2NoZW1hLgotc3RhdGljIGNvbnN0IGludCBz
Y2hlbWFWZXJzaW9uID0gNjsKK3N0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVyc2lvbiA9IDc7CiAg
ICAgCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkK
IHsKQEAgLTU1OCw2ICs1NjEsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJp
ZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAg
ICAgICByZXR1cm47CiAKKyAgICAvLyBBbGxvdyB0aGUgbm9ybWFsIGZsYXQtZmlsZSBjbGVhbnVw
IHByb2Nlc3MgdG8gZXhlY3V0ZSBiZWZvcmUgY2xlYXJpbmcgYWxsIHRoZSB0YWJsZXM6CisgICAg
ZW1wdHkoKTsKICAgICBtX2RhdGFiYXNlLmNsZWFyQWxsVGFibGVzKCk7CiAKICAgICAvLyBVcGRh
dGUgdXNlciB2ZXJzaW9uLgpAQCAtNjA4LDcgKzYxMyw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgIGV4
ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZUVudHJpZXMg
KGNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgdHlwZSBJTlRFR0VSLCBy
ZXNvdXJjZSBJTlRFR0VSIE5PVCBOVUxMKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVB
VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNlcyAoaWQgSU5URUdFUiBQUklNQVJZ
IEtFWSBBVVRPSU5DUkVNRU5ULCB1cmwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAi
CiAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1c0NvZGUgSU5URUdFUiBOT1QgTlVMTCwgcmVz
cG9uc2VVUkwgVEVYVCBOT1QgTlVMTCwgbWltZVR5cGUgVEVYVCwgdGV4dEVuY29kaW5nTmFtZSBU
RVhULCBoZWFkZXJzIFRFWFQsIGRhdGEgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
KSIpOwotICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBD
YWNoZVJlc291cmNlRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBk
YXRhIEJMT0IpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIENhY2hlUmVzb3VyY2VEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNS
RU1FTlQsIGRhdGEgQkxPQiwgcGF0aCBURVhUKSIpOworICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKGlkIElOVEVH
RVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgcGF0aCBURVhUKSIpOwogICAgIGV4ZWN1dGVT
UUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBPcmlnaW5zIChvcmlnaW4gVEVY
VCBVTklRVUUgT04gQ09ORkxJQ1QgSUdOT1JFLCBxdW90YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwpIik7CiAKICAgICAvLyBXaGVuIGEgY2FjaGUgaXMgZGVsZXRlZCwgYWxsIGl0
cyBlbnRyaWVzIGFuZCBpdHMgd2hpdGVsaXN0IHNob3VsZCBiZSBkZWxldGVkLgpAQCAtNjMxLDYg
KzYzNywxNCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UoYm9v
bCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAiIEZPUiBFQUNI
IFJPVyBCRUdJTiIKICAgICAgICAgICAgICAgICAgICAgICAiICBERUxFVEUgRlJPTSBDYWNoZVJl
c291cmNlRGF0YSBXSEVSRSBpZCA9IE9MRC5kYXRhOyIKICAgICAgICAgICAgICAgICAgICAgICAi
IEVORCIpOworICAgIAorICAgIC8vIFdoZW4gYSBjYWNoZSByZXNvdXJjZSBpcyBkZWxldGVkLCB3
aGV0aGVyIG9yIG5vdCBpdCBjb250YWlucyBhIG5vbi1lbXB0eSBwYXRoLCB0aGF0IHBhdGggc2hv
dWxkCisgICAgLy8gYmUgYWRkZWQgdG8gdGhlIERlbGV0ZWRDYWNoZVJlc291cmNlcyB0YWJsZS4K
KyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRSSUdHRVIgSUYgTk9UIEVYSVNUUyBDYWNo
ZVJlc291cmNlRGF0YURlbGV0ZWQgQUZURVIgREVMRVRFIE9OIENhY2hlUmVzb3VyY2VEYXRhIgor
ICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIgorICAgICAgICAgICAgICAgICAg
ICAgICIgV0hFTiBPTEQucGF0aCBOT1QgTlVMTCBCRUdJTiIKKyAgICAgICAgICAgICAgICAgICAg
ICAiICBJTlNFUlQgSU5UTyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKHBhdGgpIHZhbHVlcyAoT0xE
LnBhdGgpOyIKKyAgICAgICAgICAgICAgICAgICAgICAiIEVORCIpOwogfQogCiBib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3Rh
dGVtZW50KQpAQCAtNzYyLDE1ICs3NzYsNDYgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAg
IFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBD
YWNoZVJlc291cmNlRGF0YSAoZGF0YSkgVkFMVUVTICg/KSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0
YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSIpOwogICAgIGlmIChkYXRhU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGlmIChyZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpCi0gICAgICAgIGRhdGFTdGF0ZW1lbnQuYmlu
ZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLT5zaXpl
KCkpOworCisgICAgU3RyaW5nIGZ1bGxQYXRoOworICAgIGlmIChyZXNvdXJjZS0+cmVzcG9uc2Uo
KS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoImF1ZGlvLyIsIGZhbHNlKSB8fCByZXNvdXJjZS0+cmVz
cG9uc2UoKS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoInZpZGVvLyIsIGZhbHNlKSkgeworICAgICAg
ICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5nIHRoZSBmbGF0IGZpbGUgd291bGQg
dmlvbGF0ZSB0aGUgbWF4aW11bSBUb3RhbCBxdW90YS4gIFdlIGRvbid0IG5lZWQKKyAgICAgICAg
Ly8gdG8gY2hlY2sgdGhlIHBlci1PcmlnaW4gcXVvdGUgaGVyZSwgYXMgaXQgd2FzIGFscmVhZHkg
Y2hlY2tlZCBpbiBzdG9yZU5ld2VzdENhY2hlKCkuCisgICAgICAgIGlmIChtX2RhdGFiYXNlLnRv
dGFsU2l6ZSgpICsgZmxhdEZpbGVBcmVhU2l6ZSgpICsgcmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgp
ID4gbV9tYXhpbXVtU2l6ZSkgeworICAgICAgICAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFN0cmluZyBwYXRoID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgICAg
ICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9j
YWNoZURpcmVjdG9yeSwga0ZsYXRGaWxlU3ViZGlyZWN0b3J5KTsKKyAgICAgICAgbWFrZUFsbERp
cmVjdG9yaWVzKGZsYXRGaWxlRGlyZWN0b3J5KTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxQYXRo
ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAg
ICAgICAgCisgICAgICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUgPSBvcGVuRmlsZShmdWxs
UGF0aCwgT3BlbkZvcldyaXRlKTsKKyAgICAgICAgaWYgKCFoYW5kbGUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgd3JpdGVUb0ZpbGUoaGFuZGxlLCByZXNvdXJjZS0+ZGF0
YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CisgICAgICAgIGNsb3NlRmls
ZShoYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBw
YXRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgp
KQorICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0YSgp
LT5kYXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CisgICAgfQogICAgIAotICAgIGlm
ICghZGF0YVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKQorICAgIGlmICghZGF0YVN0YXRlbWVu
dC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgIC8vIENsZWFuIHVwIHRoZSBmaWxlIHdoaWNo
IHdlIG1heSBoYXZlIHdyaXR0ZW4gdG86CisgICAgICAgIGlmICghZnVsbFBhdGguaXNFbXB0eSgp
KQorICAgICAgICAgICAgZGVsZXRlRmlsZShmdWxsUGF0aCk7CisKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAogICAgIHVuc2lnbmVkIGRhdGFJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKIApAQCAtODUxLDcgKzg5Niw3IEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZSogcmVzb3VyY2UsIEFwcGxpY2F0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAKICAgICBtX2lz
TWF4aW11bVNpemVSZWFjaGVkID0gZmFsc2U7Ci0gICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6
ZShtX21heGltdW1TaXplKTsKKyAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11
bVNpemUgLSBmbGF0RmlsZUFyZWFTaXplKCkpOwogCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc3Rv
cmVSZXNvdXJjZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIHN0b3JlUmVzb3VyY2VUcmFu
c2FjdGlvbi5iZWdpbigpOwpAQCAtODk4LDcgKzk0Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCwg
QXBwCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQg
PSBmYWxzZTsKLSAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUpOwor
ICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6ZSAtIGZsYXRGaWxlQXJl
YVNpemUoKSk7CiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZUNhY2hlVHJhbnNhY3Rpb24o
bV9kYXRhYmFzZSk7CiAgICAgCkBAIC05OTgsNyArMTA0Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zCiBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKQogewogICAgIFNRTGl0ZVN0YXRlbWVu
dCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIlNFTEVDVCB1cmwsIHR5cGUsIG1pbWVUeXBlLCB0ZXh0RW5jb2RpbmdOYW1lLCBo
ZWFkZXJzLCBDYWNoZVJlc291cmNlRGF0YS5kYXRhIEZST00gQ2FjaGVFbnRyaWVzIElOTkVSIEpP
SU4gQ2FjaGVSZXNvdXJjZXMgT04gQ2FjaGVFbnRyaWVzLnJlc291cmNlPUNhY2hlUmVzb3VyY2Vz
LmlkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFTEVDVCB1cmwsIHR5
cGUsIG1pbWVUeXBlLCB0ZXh0RW5jb2RpbmdOYW1lLCBoZWFkZXJzLCBDYWNoZVJlc291cmNlRGF0
YS5kYXRhLCBDYWNoZVJlc291cmNlRGF0YS5wYXRoIEZST00gQ2FjaGVFbnRyaWVzIElOTkVSIEpP
SU4gQ2FjaGVSZXNvdXJjZXMgT04gQ2FjaGVFbnRyaWVzLnJlc291cmNlPUNhY2hlUmVzb3VyY2Vz
LmlkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklOTkVSIEpPSU4gQ2Fj
aGVSZXNvdXJjZURhdGEgT04gQ2FjaGVSZXNvdXJjZURhdGEuaWQ9Q2FjaGVSZXNvdXJjZXMuZGF0
YSBXSEVSRSBDYWNoZUVudHJpZXMuY2FjaGU9PyIpOwogICAgIGlmIChjYWNoZVN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
cHJlcGFyZSBjYWNoZSBzdGF0ZW1lbnQsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwpAQCAtMTAwOCw3ICsxMDUzLDkgQEAgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNh
Y2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2UK
ICAgICBjYWNoZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlPiBjYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpOwot
ICAgIAorCisgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KG1fY2FjaGVEaXJlY3RvcnksIGtGbGF0RmlsZVN1YmRpcmVjdG9yeSk7CisKICAgICBp
bnQgcmVzdWx0OwogICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9
PSBTUUxSZXN1bHRSb3cpIHsKICAgICAgICAgS1VSTCB1cmwoUGFyc2VkVVJMU3RyaW5nLCBjYWNo
ZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKQEAgLTEwMTcsMTggKzEwNjQsMjMgQEAgUGFz
c1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENh
Y2hlKHVuc2lnbmVkIHN0b3JhZ2UKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gYmxvYjsKICAgICAg
ICAgY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDUsIGJsb2IpOwotICAgICAg
ICAKKyAgICAgICAgICAgICAgICAKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9
IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoYmxvYik7CiAgICAgICAgIAorICAgICAgICBTdHJp
bmcgcGF0aCA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNik7CisgICAgICAgIGxvbmcg
bG9uZyBzaXplID0gMDsKKyAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgpIHx8ICFnZXRGaWxlU2l6
ZShwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpLCBzaXpl
KSkKKyAgICAgICAgICAgIHNpemUgPSBkYXRhLT5zaXplKCk7CisgICAgICAgIAogICAgICAgICBT
dHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDIpOwogICAgICAg
ICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQo
Myk7CiAgICAgICAgIAotICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWlt
ZVR5cGUsIGRhdGEtPnNpemUoKSwgdGV4dEVuY29kaW5nTmFtZSwgIiIpOworICAgICAgICBSZXNv
dXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWltZVR5cGUsIHNpemUsIHRleHRFbmNvZGluZ05h
bWUsICIiKTsKIAogICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENv
bHVtblRleHQoNCk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAg
ICAgICAgIAotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJj
ZSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgcmVzcG9uc2UsIHR5cGUs
IGRhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4gcmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIHJlc3Bv
bnNlLCB0eXBlLCBkYXRhLnJlbGVhc2UoKSwgcGF0aCk7CiAKICAgICAgICAgaWYgKHR5cGUgJiBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hbmlmZXN0KQogICAgICAgICAgICAgY2FjaGUtPnNl
dE1hbmlmZXN0UmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKQEAgLTExMjIsNiArMTE3NCw4
IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnJlbW92ZShBcHBsaWNhdGlvbkNhY2hl
KiBjYWNoZSkKIAogICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+Y2xlYXJTdG9yYWdlSUQoKTsKICAg
ICB9CisgICAgCisgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9ICAgIAogCiB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCkBAIC0xMTQyLDYgKzExOTYsOCBAQCB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCiAgICAgQ2FjaGVHcm91cE1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENh
Y2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlEKCk7
CisgICAgCisgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9ICAgIAogCiBib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2Fj
aGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QpCkBAIC0xMTYxLDcg
KzEyMTcsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hl
KGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAgIGZvciAoQXBwbGljYXRpb25D
YWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291
cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZTo6Y3JlYXRlKHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291cmNl
LT50eXBlKCksIHJlc291cmNlLT5kYXRhKCkpOworICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNy
ZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5yZXNwb25zZSgpLCByZXNvdXJjZS0+dHlw
ZSgpLCByZXNvdXJjZS0+ZGF0YSgpLCByZXNvdXJjZS0+cGF0aCgpKTsKICAgICAgICAgCiAgICAg
ICAgIGNhY2hlQ29weS0+YWRkUmVzb3VyY2UocmVzb3VyY2VDb3B5LnJlbGVhc2UoKSk7CiAgICAg
fQpAQCAtMTI2OSw2ICsxMzI1LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVs
ZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKQogICAgIH0KIAogICAgIGRl
bGV0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIAorICAgIGNoZWNrRm9yRGVsZXRlZFJlc291
cmNlcygpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMjg2LDYgKzEzNDUsNjYg
QEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JNYXhTaXplUmVhY2hlZCgp
CiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgPT0gU1FMUmVzdWx0RnVsbCkKICAgICAg
ICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9IHRydWU7CiB9CisgICAgCit2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKQoreworICAgIG9wZW5E
YXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJhc2Us
ICJTRUxFQ1QgcGF0aCBGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyIpOworICAgIAorICAgIGlm
IChzZWxlY3RQYXRocy5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB0aGUgc3RhdGVtZW50IHJldHVybnMgMCBy
b3dzLgorICAgIGlmIChzZWxlY3RQYXRocy5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgZG8geworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBh
dGhzLmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0
b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksIGtGbGF0Rmls
ZVN1YmRpcmVjdG9yeSk7CisgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7CisgICAgICAgIAorICAgICAgICAv
LyBEb24ndCBleGl0IHRoZSBmbGF0RmlsZURpcmVjdG9yeSEgIFRoaXMgc2hvdWxkIG9ubHkgaGFw
cGVuIGlmIHNvbWVvbmUgdGFtcGVycyAKKyAgICAgICAgLy8gd2l0aCB0aGUgQXBwbGljYXRpb25D
YWNoZSBkYXRhYmFzZSwgYnV0IHByb3RlY3QgYWdhaW5zdCBpdCByZWdhcmRsZXNzLgorICAgICAg
ICBBU1NFUlQoZGlyZWN0b3J5TmFtZShmdWxsUGF0aCkgPT0gZmxhdEZpbGVEaXJlY3RvcnkpOwor
ICAgICAgICBpZiAoZGlyZWN0b3J5TmFtZShmdWxsUGF0aCkgIT0gZmxhdEZpbGVEaXJlY3Rvcnkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZUZpbGUoZnVs
bFBhdGgpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cp
OworICAgIAorICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJERUxFVEUgRlJPTSBEZWxldGVkQ2FjaGVS
ZXNvdXJjZXMiKTsKK30KKyAgICAKK2xvbmcgbG9uZyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZmxhdEZpbGVBcmVhU2l6ZSgpCit7CisgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGxvbmcg
bG9uZyB0b3RhbFNpemUgPSAwOworICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBrRmxhdEZpbGVTdWJkaXJlY3Rv
cnkpOworICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VMRUNU
IHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBXSEVSRSBwYXRoIE5PVCBOVUxMIik7CisKKyAg
ICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7
CisgICAgICAgIFN0cmluZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAg
ICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxl
RGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgbG9uZyBsb25nIHBhdGhTaXplID0gMDsKKyAgICAg
ICAgaWYgKCFnZXRGaWxlU2l6ZShmdWxsUGF0aCwgcGF0aFNpemUpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIHRvdGFsU2l6ZSArPSBwYXRoU2l6ZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHRvdGFsU2l6ZTsKK30KIAogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlKCkgCiAgICAgOiBtX21heGltdW1TaXplKEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpub1F1b3RhKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCmluZGV4IDhiZmRmMTNmNmJjNmZmMDIy
NzM4NmQ5MGJjNTlhMDU0OTJlNTExNDQuLjEzODE5NjZkMzAyNDE4NGEwZGFkY2M3OTlkZWI3ZTIz
MGJhNDI3ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCkBAIC05NCw2ICs5NCw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBpbnQ2NF90IHVua25vd25RdW90YSgpIHsgcmV0dXJuIC0xOyB9CiAgICAgc3Rh
dGljIGludDY0X3Qgbm9RdW90YSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRf
dD46Om1heCgpOyB9CisKIHByaXZhdGU6CiAgICAgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKTsK
ICAgICBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IGxvYWRDYWNoZSh1bnNpZ25lZCBzdG9y
YWdlSUQpOwpAQCAtMTE4LDYgKzExOSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBleGVjdXRlU1FM
Q29tbWFuZChjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgY2hlY2tGb3JNYXhTaXplUmVhY2hl
ZCgpOworICAgIHZvaWQgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CisgICAgCisgICAgbG9u
ZyBsb25nIGZsYXRGaWxlQXJlYVNpemUoKTsKICAgICAKICAgICBTdHJpbmcgbV9jYWNoZURpcmVj
dG9yeTsKICAgICBTdHJpbmcgbV9jYWNoZUZpbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggMTMyZDBl
MDc3N2RiMjk2NjZmYzVlZDEzZGM3MWIzMmU5MmE1YWRiMS4uNWJmZjdkODZhNGQ2ZGZkMzA3NzU2
NzRhYzIyM2ZmNjM0ZDI3N2Q0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisy
MDExLTAyLTA3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFwcGxpY2F0aW9uIENhY2hlIHNo
b3VsZCBzYXZlIGF1ZGlvLyBhbmQgdmlkZW8vIG1pbWUgdHlwZXMgYXMgZmxhdCBmaWxlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3ODQKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzg5MzI0NzM+CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisg
ICAgICAgIEluaXRpYWxpemUgdGhlIEFwcENhY2hlIHBlci1PcmlnaW4gYW5kIFRvdGFsIHNpemUg
cXVvdGFzIHdpdGggdGhlIHZhbHVlcyBmb3IgV2ViS2l0UHJlZmVyZW5jZXMKKyAgICAgICAgdXBv
biBzdGFydHVwLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoV2Vi
S2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVRdW90YXNJZk5lY2Vzc2FyeSk6CisgICAgICAg
ICgtW1dlYlZpZXcgX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5hbWU6
dXNlc0RvY3VtZW50Vmlld3M6XSk6CisKIDIwMTEtMDItMDMgIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCBlMDE4NzdiZTZhNGNiOWUzZGE1
NmY0MWY3YjMwZTQ2NjdmNjZkNzJmLi5jNzQyZDkzZTkwNjJlMDEyYjI1OWIwZmEwMGVlZDNlMjgx
NDFkYmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC01ODksNiArNTg5
LDE5IEBAIHN0YXRpYyB2b2lkIFdlYktpdEluaXRpYWxpemVBcHBsaWNhdGlvbkNhY2hlUGF0aElm
TmVjZXNzYXJ5KCkKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBXZWJLaXRJbml0aWFsaXplQXBw
bGljYXRpb25DYWNoZVF1b3Rhc0lmTmVjZXNzYXJ5KCkKK3sKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorICAgIHN0YXRpYyBCT09MIGluaXRpYWxpemVkID0gTk87CisgICAg
aWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY2FjaGVTdG9yYWdl
KCkuc2V0TWF4aW11bVNpemUoW1tXZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBh
cHBsaWNhdGlvbkNhY2hlVG90YWxRdW90YV0pOworICAgIGNhY2hlU3RvcmFnZSgpLnNldERlZmF1
bHRPcmlnaW5RdW90YShbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVyZW5jZXNdIGFwcGxp
Y2F0aW9uQ2FjaGVEZWZhdWx0T3JpZ2luUXVvdGFdKTsKKyAgICBpbml0aWFsaXplZCA9IFlFUzsK
KyNlbmRpZgorfQorCiBzdGF0aWMgYm9vbCBydW5uaW5nTGVvcGFyZE1haWwoKQogewogI2lmZGVm
IEJVSUxESU5HX09OX0xFT1BBUkQKQEAgLTY5MCw2ICs3MDMsNyBAQCBzdGF0aWMgTlNTdHJpbmcg
KmxlYWtNYWlsUXVpcmtzVXNlclNjcmlwdFBhdGgoKQogICAgICAgICBXZWJLaXRJbml0aWFsaXpl
RGF0YWJhc2VzSWZOZWNlc3NhcnkoKTsKICNlbmRpZgogICAgICAgICBXZWJLaXRJbml0aWFsaXpl
QXBwbGljYXRpb25DYWNoZVBhdGhJZk5lY2Vzc2FyeSgpOworICAgICAgICBXZWJLaXRJbml0aWFs
aXplQXBwbGljYXRpb25DYWNoZVF1b3Rhc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIHBhdGNoTWFp
bFJlbW92ZUF0dHJpYnV0ZXNNZXRob2QoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEluaXRpYWxp
emUgb3VyIHBsYXRmb3JtIHN0cmF0ZWdpZXMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81545</attachid>
            <date>2011-02-07 15:55:41 -0800</date>
            <delta_ts>2011-02-08 14:57:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53784-20110207155540.patch</filename>
            <type>text/plain</type>
            <size>25832</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0YTdiZDUyMGE5N2Y0MWNkYjU5NjkzNzhhNjA2ZTQ5MjQyMmIzMDM0Li5i
ZTc1NGIwMmQwMTNmYzZkM2Y4OTY5NWEwNjE2YmVhZDM2NzFmYTQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDUgQEAKKzIwMTEtMDItMDMgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBwbGlj
YXRpb24gQ2FjaGUgc2hvdWxkIHNhdmUgYXVkaW8vIGFuZCB2aWRlby8gbWltZSB0eXBlcyBhcyBm
bGF0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01Mzc4NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODkzMjQ3Mz4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuCisKKyAgICAgICAgU3RvcmUgY2VydGFpbiBtaW1lIHR5cGVzIGFzIGZsYXQgZmls
ZXMgYWxvbmdzaWRlIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBkYXRhYmFzZS4KKyAgICAgICAgVGhp
cyByZXF1aXJlcyBwbHVtYmluZyB0aGUgc2F2ZWQgZmlsZSBwYXRoIGZyb20gQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UgdGhyb3VnaAorICAgICAgICB0byBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uu
ICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpIG5vdyB0YWtlcyBhbiBhZGRpdGlv
bmFsCisgICAgICAgICJwYXRoIiBwYXJhbWV0ZXIuICBUbyBmYWNpbGl0YXRlIGV4dHJhY3Rpbmcg
dGhpcyBwYXRoIGluZm9ybWF0aW9uLCB0d28gZnVuY3Rpb25zIGluIAorICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlSG9zdCBoYXZlIGJlZW4gbWFkZSBwdWJsaWMuCisKKyAgICAgICAgKiBsb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogUGFzcyBhbG9uZyBuZXcg
InBhdGgiIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6ZGlkRmFpbCk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OnNo
b3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKTogTWFkZSBwdWJsaWMuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Z2V0QXBwbGljYXRpb25DYWNoZUZh
bGxiYWNrUmVzb3VyY2UpOiBNYWRlIHB1YmxpYy4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlKTogQWRkIG5ldyAicGF0
aCIgcGFyYW1ldGVyLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6
Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U6OnBhdGgpOiBOZXcgYWNjZXNzb3IuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VEYXRhIHNj
aGVtYSBhbmQKKyAgICAgICAgICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFi
bGUsIGFkZCBhIG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUgbmV3IHBh
dGggZGF0YSB3aGVuIGFkZGluZyBuZXcgcm93cyBpbiAKKyAgICAgICAgICAgIENhY2hlUmVzb3Vy
Y2VEYXRhLCBhbmQgc3RvcmUgbWVkaWEgcmVzb3VyY2VzIGFzIGZsYXQgZmlsZXMuCisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKTogUHVsbCB0aGUg
InBhdGgiIGNvbHVtbiBmcm9tIENhY2hlUmVzb3VyY2VEYXRhCisgICAgICAgICAgICB3aGVuIGxv
YWRpbmcgY2FjaGUgaXRlbXMuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6cmVtb3ZlKTogQ2FsbCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2Fj
aGVHcm91cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6IFdhbGsgdGhyb3VnaCBEZWxldGVkQ2FjaGVS
ZXNvdXJjZURhdGEKKyAgICAgICAgICAgIGxvb2tpbmcgZm9yIGVudHJpZXMgd2l0aCBub24tZW1w
dHkgInBhdGgiIGNvbHVtbnM7IGlmIGZvdW5kLCBkZWxldGUuCisgICAgICAgICogbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg6CisKIDIwMTEtMDItMDMgIFpoZW55YW8g
TW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3Nl
bGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlR3JvdXAuY3BwCmluZGV4IDUxNGVmMTk3YWFkODAyZGQwMjEzZjk2ZGE4ZTQyODJi
MTE3MmU2ZDEuLjNjOGUxYTQ1ODllNDBjNTMyN2U5ZTliY2U5OGZhMzUzOGJhNWIzMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3Jv
dXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlR3JvdXAuY3BwCkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXMK
ICAgICBpZiAobV9uZXdlc3RDYWNoZSAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMw
NCkgeyAvLyBOb3QgbW9kaWZpZWQuCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSog
bmV3ZXN0Q2FjaGVkUmVzb3VyY2UgPSBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVSTCh1cmwp
OwogICAgICAgICBpZiAobmV3ZXN0Q2FjaGVkUmVzb3VyY2UpIHsKLSAgICAgICAgICAgIG1fY2Fj
aGVCZWluZ1VwZGF0ZWQtPmFkZFJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3Jl
YXRlKHVybCwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIHR5cGUsIG5ld2VzdENh
Y2hlZFJlc291cmNlLT5kYXRhKCkpKTsKKyAgICAgICAgICAgIG1fY2FjaGVCZWluZ1VwZGF0ZWQt
PmFkZFJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgbmV3ZXN0
Q2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIHR5cGUsIG5ld2VzdENhY2hlZFJlc291cmNlLT5k
YXRhKCksIG5ld2VzdENhY2hlZFJlc291cmNlLT5wYXRoKCkpKTsKICAgICAgICAgICAgIG1fcGVu
ZGluZ0VudHJpZXMucmVtb3ZlKG1fY3VycmVudEhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkp
OwogICAgICAgICAgICAgbV9jdXJyZW50SGFuZGxlLT5jYW5jZWwoKTsKICAgICAgICAgICAgIG1f
Y3VycmVudEhhbmRsZSA9IDA7CkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25z
dCBSZXMKICAgICAgICAgICAgIEFTU0VSVChtX25ld2VzdENhY2hlKTsKICAgICAgICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogbmV3ZXN0Q2FjaGVkUmVzb3VyY2UgPSBtX25ld2VzdENh
Y2hlLT5yZXNvdXJjZUZvclVSTChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVChuZXdlc3RDYWNoZWRSZXNvdXJjZSk7Ci0gICAgICAgICAgICBtX2NhY2hl
QmVpbmdVcGRhdGVkLT5hZGRSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0
ZSh1cmwsIG5ld2VzdENhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCB0eXBlLCBuZXdlc3RDYWNo
ZWRSZXNvdXJjZS0+ZGF0YSgpKSk7CisgICAgICAgICAgICBtX2NhY2hlQmVpbmdVcGRhdGVkLT5h
ZGRSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIG5ld2VzdENh
Y2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCB0eXBlLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+ZGF0
YSgpLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+cGF0aCgpKSk7CiAgICAgICAgICAgICBtX3BlbmRp
bmdFbnRyaWVzLnJlbW92ZShtX2N1cnJlbnRIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsK
ICAgICAgICAgICAgIG1fY3VycmVudEhhbmRsZS0+Y2FuY2VsKCk7CiAgICAgICAgICAgICBtX2N1
cnJlbnRIYW5kbGUgPSAwOwpAQCAtNjQyLDcgKzY0Miw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlRXJy
b3ImCiAgICAgICAgIEFTU0VSVChtX25ld2VzdENhY2hlKTsKICAgICAgICAgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlKiBuZXdlc3RDYWNoZWRSZXNvdXJjZSA9IG1fbmV3ZXN0Q2FjaGUtPnJlc291
cmNlRm9yVVJMKHVybCk7CiAgICAgICAgIEFTU0VSVChuZXdlc3RDYWNoZWRSZXNvdXJjZSk7Ci0g
ICAgICAgIG1fY2FjaGVCZWluZ1VwZGF0ZWQtPmFkZFJlc291cmNlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZTo6Y3JlYXRlKHVybCwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIHR5
cGUsIG5ld2VzdENhY2hlZFJlc291cmNlLT5kYXRhKCkpKTsKKyAgICAgICAgbV9jYWNoZUJlaW5n
VXBkYXRlZC0+YWRkUmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJs
LCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgdHlwZSwgbmV3ZXN0Q2FjaGVkUmVz
b3VyY2UtPmRhdGEoKSwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPnBhdGgoKSkpOwogICAgICAgICAv
LyBMb2FkIHRoZSBuZXh0IHJlc291cmNlLCBpZiBhbnkuCiAgICAgICAgIHN0YXJ0TG9hZGluZ0Vu
dHJ5KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUhvc3QuaAppbmRleCBhMWYyODQxYzMwZDc1MWM0YWY4M2RmMTMzYWE5
MmQwOGRkYzJiNzZhLi41NmE1ZjU3YWU3Njc5Y2QwZjlhMDFkYzcyYTU1OGZkYzI4MmYzOThhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUhvc3QuaApAQCAtMTU2LDYgKzE1NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIENhY2hlSW5mbyBhcHBsaWNhdGlvbkNhY2hlSW5mbygpOwogI2VuZGlmCiAKKyNpZiAhUExB
VEZPUk0oQ0hST01JVU0pCisgICAgICAgIGJvb2wgc2hvdWxkTG9hZFJlc291cmNlRnJvbUFwcGxp
Y2F0aW9uQ2FjaGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZVJlc291
cmNlKiYpOworICAgICAgICBib29sIGdldEFwcGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNl
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSomLCBBcHBs
aWNhdGlvbkNhY2hlKiA9IDApOworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBib29s
IGlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKTsKICAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGRv
Y3VtZW50TG9hZGVyKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudExvYWRlcjsgfQpAQCAtMTgy
LDggKzE4Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOwogCiAgICAgICAgIGJvb2wgc2NoZWR1bGVMb2FkRmFsbGJh
Y2tSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKFJlc291cmNlTG9hZGVyKiwgQXBwbGljYXRp
b25DYWNoZSogPSAwKTsKLSAgICAgICAgYm9vbCBzaG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGlj
YXRpb25DYWNoZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqJik7Ci0gICAgICAgIGJvb2wgZ2V0QXBwbGljYXRpb25DYWNoZUZhbGxiYWNrUmVzb3VyY2Uo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYsIEFwcGxp
Y2F0aW9uQ2FjaGUqID0gMCk7CiAgICAgICAgIHZvaWQgc2V0Q2FuZGlkYXRlQXBwbGljYXRpb25D
YWNoZUdyb3VwKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApOwogICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwOyB9CiAgICAgICAgIHZvaWQg
c2V0QXBwbGljYXRpb25DYWNoZShQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IGFwcGxpY2F0
aW9uQ2FjaGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAppbmRleCAwM2M1YzgzNTk0N2M0MzE1MDE1
NmI0NWI4NjUwNzcyOWIxYzExMDNiLi5jMGRmNTczNDA2YmNmNTcwMzlhMjhkMDQzYTk2NTFkZTk1
OWVlMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcApAQCAtMzEsMTEgKzMxLDEyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgdW5zaWduZWQgdHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEpCitB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCB1bnNpZ25lZCB0eXBl
LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKQogICAg
IDogU3Vic3RpdHV0ZVJlc291cmNlKHVybCwgcmVzcG9uc2UsIGRhdGEpCiAgICAgLCBtX3R5cGUo
dHlwZSkKICAgICAsIG1fc3RvcmFnZUlEKDApCiAgICAgLCBtX2VzdGltYXRlZFNpemVJblN0b3Jh
Z2UoMCkKKyAgICAsIG1fcGF0aChwYXRoKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgKaW5kZXgg
MmNhNzg0NjYzZWEzMGNiZGYwMjMzYjNjMWI1YzVlNGUxODUwN2M0Zi4uMTkwZTYyOTEwMTliN2E3
NzI5NTMyYzNjZWUwZWFiZmUxZjZjNmRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaApAQCAtNDIsMTAg
KzQyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgRmFsbGJhY2sgPSAxIDw8IDQKICAgICB9OwogICAg
ICAgICAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IGNy
ZWF0ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCB1
bnNpZ25lZCB0eXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoKSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U+IGNyZWF0ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCB1bnNpZ25lZCB0eXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKSwgY29uc3QgU3RyaW5nJiBwYXRoID0gU3RyaW5nKCkpCiAg
ICAgewogICAgICAgICBBU1NFUlQoIXVybC5oYXNGcmFnbWVudElkZW50aWZpZXIoKSk7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKHVybCwgcmVz
cG9uc2UsIHR5cGUsIGJ1ZmZlcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSh1cmwsIHJlc3BvbnNlLCB0eXBlLCBidWZmZXIsIHBhdGgpKTsK
ICAgICB9CiAKICAgICB1bnNpZ25lZCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CkBA
IC01NiwxNiArNTYsMTkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTdG9yYWdlSUQoKSB7IG1f
c3RvcmFnZUlEID0gMDsgfQogICAgIGludDY0X3QgZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpOwog
CisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisKICNp
Zm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIHZvaWQgZHVtcFR5cGUodW5zaWduZWQgdHlwZSk7CiAj
ZW5kaWYKICAgICAKIHByaXZhdGU6Ci0gICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVkIHR5
cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpOworICAgIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZShjb25zdCBLVVJMJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIHVuc2lnbmVk
IHR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgY29uc3QgU3RyaW5nJiBwYXRoKTsKIAog
ICAgIHVuc2lnbmVkIG1fdHlwZTsKICAgICB1bnNpZ25lZCBtX3N0b3JhZ2VJRDsKICAgICBpbnQ2
NF90IG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZTsKKyAgICBTdHJpbmcgbV9wYXRoOwogfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDBjMDBl
ZTYxZDQ0OTg1MWQwMWY4ZjMzY2E5M2E0NWE3ZGNhYzcwYzAuLmUyMmNkODZhN2NmYTEwY2Q1ZGE3
NjAzNmQ1MWVkMjE2MTA3ODYxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMzcsMTIgKzM3
LDE1IEBACiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMaXRlVHJh
bnNhY3Rpb24uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlVVSUQu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGtGbGF0RmlsZVN1YmRpcmVjdG9yeSA9
ICJBcHBsaWNhdGlvbkNhY2hlIjsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZSA8
Y2xhc3MgVD4KQEAgLTM4NCw3ICszODcsNyBAQCBpbnQ2NF90IEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpzcGFjZU5lZWRlZChpbnQ2NF90IGNhY2hlVG9TYXZlKQogICAgIGlmICghZ2V0RmlsZVNp
emUobV9jYWNoZUZpbGUsIGZpbGVTaXplKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQ2
NF90IGN1cnJlbnRTaXplID0gZmlsZVNpemU7CisgICAgaW50NjRfdCBjdXJyZW50U2l6ZSA9IGZp
bGVTaXplICsgZmxhdEZpbGVBcmVhU2l6ZSgpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBhbW91
bnQgb2YgZnJlZSBzcGFjZSB3ZSBoYXZlIGF2YWlsYWJsZS4KICAgICBpbnQ2NF90IHRvdGFsQXZh
aWxhYmxlU2l6ZSA9IDA7CkBAIC01NTAsNyArNTUzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6ZXhlY3V0ZVNRTENvbW1hbmQoY29uc3QgU3RyaW5nJiBzcWwpCiAvLyBVcGRhdGUg
dGhlIHNjaGVtYVZlcnNpb24gd2hlbiB0aGUgc2NoZW1hIG9mIGFueSB0aGUgQXBwbGljYXRpb24g
Q2FjaGUKIC8vIFNRTGl0ZSB0YWJsZXMgY2hhbmdlcy4gVGhpcyBhbGxvd3MgdGhlIGRhdGFiYXNl
IHRvIGJlIHJlYnVpbHQgd2hlbgogLy8gYSBuZXcsIGluY29tcGF0aWJsZSBjaGFuZ2UgaGFzIGJl
ZW4gaW50cm9kdWNlZCB0byB0aGUgZGF0YWJhc2Ugc2NoZW1hLgotc3RhdGljIGNvbnN0IGludCBz
Y2hlbWFWZXJzaW9uID0gNjsKK3N0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVyc2lvbiA9IDc7CiAg
ICAgCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkK
IHsKQEAgLTU1OCw2ICs1NjEsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJp
ZnlTY2hlbWFWZXJzaW9uKCkKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAg
ICAgICByZXR1cm47CiAKKyAgICAvLyBBbGxvdyB0aGUgbm9ybWFsIGZsYXQtZmlsZSBjbGVhbnVw
IHByb2Nlc3MgdG8gZXhlY3V0ZSBiZWZvcmUgY2xlYXJpbmcgYWxsIHRoZSB0YWJsZXM6CisgICAg
ZW1wdHkoKTsKICAgICBtX2RhdGFiYXNlLmNsZWFyQWxsVGFibGVzKCk7CiAKICAgICAvLyBVcGRh
dGUgdXNlciB2ZXJzaW9uLgpAQCAtNjA4LDcgKzYxMyw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgIGV4
ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZUVudHJpZXMg
KGNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgdHlwZSBJTlRFR0VSLCBy
ZXNvdXJjZSBJTlRFR0VSIE5PVCBOVUxMKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVB
VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNlcyAoaWQgSU5URUdFUiBQUklNQVJZ
IEtFWSBBVVRPSU5DUkVNRU5ULCB1cmwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAi
CiAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1c0NvZGUgSU5URUdFUiBOT1QgTlVMTCwgcmVz
cG9uc2VVUkwgVEVYVCBOT1QgTlVMTCwgbWltZVR5cGUgVEVYVCwgdGV4dEVuY29kaW5nTmFtZSBU
RVhULCBoZWFkZXJzIFRFWFQsIGRhdGEgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
KSIpOwotICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBD
YWNoZVJlc291cmNlRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBk
YXRhIEJMT0IpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIENhY2hlUmVzb3VyY2VEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNS
RU1FTlQsIGRhdGEgQkxPQiwgcGF0aCBURVhUKSIpOworICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKGlkIElOVEVH
RVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgcGF0aCBURVhUKSIpOwogICAgIGV4ZWN1dGVT
UUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBPcmlnaW5zIChvcmlnaW4gVEVY
VCBVTklRVUUgT04gQ09ORkxJQ1QgSUdOT1JFLCBxdW90YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwpIik7CiAKICAgICAvLyBXaGVuIGEgY2FjaGUgaXMgZGVsZXRlZCwgYWxsIGl0
cyBlbnRyaWVzIGFuZCBpdHMgd2hpdGVsaXN0IHNob3VsZCBiZSBkZWxldGVkLgpAQCAtNjMxLDYg
KzYzNywxNSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UoYm9v
bCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAiIEZPUiBFQUNI
IFJPVyBCRUdJTiIKICAgICAgICAgICAgICAgICAgICAgICAiICBERUxFVEUgRlJPTSBDYWNoZVJl
c291cmNlRGF0YSBXSEVSRSBpZCA9IE9MRC5kYXRhOyIKICAgICAgICAgICAgICAgICAgICAgICAi
IEVORCIpOworICAgIAorICAgIC8vIFdoZW4gYSBjYWNoZSByZXNvdXJjZSBpcyBkZWxldGVkLCBp
ZiBpdCBjb250YWlucyBhIG5vbi1lbXB0eSBwYXRoLCB0aGF0IHBhdGggc2hvdWxkCisgICAgLy8g
YmUgYWRkZWQgdG8gdGhlIERlbGV0ZWRDYWNoZVJlc291cmNlcyB0YWJsZSBzbyB0aGUgZmxhdCBm
aWxlIGF0IHRoYXQgcGF0aCBjYW4KKyAgICAvLyBiZSBkZWxldGVkIGF0IGEgbGF0ZXIgdGltZS4K
KyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRSSUdHRVIgSUYgTk9UIEVYSVNUUyBDYWNo
ZVJlc291cmNlRGF0YURlbGV0ZWQgQUZURVIgREVMRVRFIE9OIENhY2hlUmVzb3VyY2VEYXRhIgor
ICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIgorICAgICAgICAgICAgICAgICAg
ICAgICIgV0hFTiBPTEQucGF0aCBOT1QgTlVMTCBCRUdJTiIKKyAgICAgICAgICAgICAgICAgICAg
ICAiICBJTlNFUlQgSU5UTyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKHBhdGgpIHZhbHVlcyAoT0xE
LnBhdGgpOyIKKyAgICAgICAgICAgICAgICAgICAgICAiIEVORCIpOwogfQogCiBib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3Rh
dGVtZW50KQpAQCAtNzYyLDE1ICs3NzcsNTEgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAg
IFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBD
YWNoZVJlc291cmNlRGF0YSAoZGF0YSkgVkFMVUVTICg/KSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0
YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSIpOwogICAgIGlmIChkYXRhU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGlmIChyZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpCi0gICAgICAgIGRhdGFTdGF0ZW1lbnQuYmlu
ZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLT5zaXpl
KCkpOworCisgICAgU3RyaW5nIGZ1bGxQYXRoOworICAgIGlmIChyZXNvdXJjZS0+cmVzcG9uc2Uo
KS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoImF1ZGlvLyIsIGZhbHNlKSB8fCByZXNvdXJjZS0+cmVz
cG9uc2UoKS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoInZpZGVvLyIsIGZhbHNlKSkgeworICAgICAg
ICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0aW5nIHRoZSBmbGF0IGZpbGUgd291bGQg
dmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4gIFdlIGRvbid0IG5lZWQKKyAgICAgICAg
Ly8gdG8gY2hlY2sgdGhlIHBlci1vcmlnaW4gcXVvdGUgaGVyZSwgYXMgaXQgd2FzIGFscmVhZHkg
Y2hlY2tlZCBpbiBzdG9yZU5ld2VzdENhY2hlKCkuCisgICAgICAgIGlmIChtX2RhdGFiYXNlLnRv
dGFsU2l6ZSgpICsgZmxhdEZpbGVBcmVhU2l6ZSgpICsgcmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgp
ID4gbV9tYXhpbXVtU2l6ZSkgeworICAgICAgICAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFN0cmluZyBwYXRoID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgICAg
ICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9j
YWNoZURpcmVjdG9yeSwga0ZsYXRGaWxlU3ViZGlyZWN0b3J5KTsKKyAgICAgICAgbWFrZUFsbERp
cmVjdG9yaWVzKGZsYXRGaWxlRGlyZWN0b3J5KTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxQYXRo
ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAg
ICAgICAgCisgICAgICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUgPSBvcGVuRmlsZShmdWxs
UGF0aCwgT3BlbkZvcldyaXRlKTsKKyAgICAgICAgaWYgKCFoYW5kbGUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaW50IHdyaXR0ZW5CeXRlcyA9IHdyaXRlVG9GaWxlKGhh
bmRsZSwgcmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkp
OworICAgICAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKworICAgICAgICBpZiAod3JpdHRlbkJ5dGVz
ID09IC0xKSB7CisgICAgICAgICAgICBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGF0YVN0YXRlbWVu
dC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocmVzb3VyY2Ut
PmRhdGEoKS0+c2l6ZSgpKQorICAgICAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxvYigxLCBy
ZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CisgICAg
fQogICAgIAotICAgIGlmICghZGF0YVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKQorICAgIGlm
ICghZGF0YVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7CisgICAgICAgIC8vIENsZWFuIHVw
IHRoZSBmaWxlIHdoaWNoIHdlIG1heSBoYXZlIHdyaXR0ZW4gdG86CisgICAgICAgIGlmICghZnVs
bFBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAgZGVsZXRlRmlsZShmdWxsUGF0aCk7CisKICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIHVuc2lnbmVkIGRhdGFJZCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRSb3dJRCgpKTsKIApAQCAtODUx
LDcgKzkwMiw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAKICAgICBtX2lzTWF4aW11bVNpemVSZWFjaGVkID0gZmFsc2U7Ci0gICAgbV9kYXRhYmFz
ZS5zZXRNYXhpbXVtU2l6ZShtX21heGltdW1TaXplKTsKKyAgICBtX2RhdGFiYXNlLnNldE1heGlt
dW1TaXplKG1fbWF4aW11bVNpemUgLSBmbGF0RmlsZUFyZWFTaXplKCkpOwogCiAgICAgU1FMaXRl
VHJhbnNhY3Rpb24gc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIHN0
b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5iZWdpbigpOwpAQCAtODk4LDcgKzk0OSw3IEBAIGJvb2wg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBncm91cCwgQXBwCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1faXNNYXhp
bXVtU2l6ZVJlYWNoZWQgPSBmYWxzZTsKLSAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1f
bWF4aW11bVNpemUpOworICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6
ZSAtIGZsYXRGaWxlQXJlYVNpemUoKSk7CiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZUNh
Y2hlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CiAgICAgCkBAIC05OTgsNyArMTA0OSw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhlYWRlcnMoY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zCiBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKQogewogICAg
IFNRTGl0ZVN0YXRlbWVudCBjYWNoZVN0YXRlbWVudChtX2RhdGFiYXNlLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlNFTEVDVCB1cmwsIHR5cGUsIG1pbWVUeXBlLCB0ZXh0
RW5jb2RpbmdOYW1lLCBoZWFkZXJzLCBDYWNoZVJlc291cmNlRGF0YS5kYXRhIEZST00gQ2FjaGVF
bnRyaWVzIElOTkVSIEpPSU4gQ2FjaGVSZXNvdXJjZXMgT04gQ2FjaGVFbnRyaWVzLnJlc291cmNl
PUNhY2hlUmVzb3VyY2VzLmlkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlNFTEVDVCB1cmwsIHR5cGUsIG1pbWVUeXBlLCB0ZXh0RW5jb2RpbmdOYW1lLCBoZWFkZXJzLCBD
YWNoZVJlc291cmNlRGF0YS5kYXRhLCBDYWNoZVJlc291cmNlRGF0YS5wYXRoIEZST00gQ2FjaGVF
bnRyaWVzIElOTkVSIEpPSU4gQ2FjaGVSZXNvdXJjZXMgT04gQ2FjaGVFbnRyaWVzLnJlc291cmNl
PUNhY2hlUmVzb3VyY2VzLmlkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IklOTkVSIEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgT04gQ2FjaGVSZXNvdXJjZURhdGEuaWQ9Q2Fj
aGVSZXNvdXJjZXMuZGF0YSBXSEVSRSBDYWNoZUVudHJpZXMuY2FjaGU9PyIpOwogICAgIGlmIChj
YWNoZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgcHJlcGFyZSBjYWNoZSBzdGF0ZW1lbnQsIGVycm9yIFwiJXNcIiIsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwpAQCAtMTAwOCw3ICsxMDU5LDkgQEAgUGFzc1JlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVu
c2lnbmVkIHN0b3JhZ2UKICAgICBjYWNoZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlE
KTsKIAogICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBjYWNoZSA9IEFwcGxpY2F0aW9uQ2Fj
aGU6OmNyZWF0ZSgpOwotICAgIAorCisgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksIGtGbGF0RmlsZVN1YmRpcmVj
dG9yeSk7CisKICAgICBpbnQgcmVzdWx0OwogICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0
ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpIHsKICAgICAgICAgS1VSTCB1cmwoUGFyc2Vk
VVJMU3RyaW5nLCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKQEAgLTEwMjAsMTUg
KzEwNzMsMjAgQEAgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2UKICAgICAgICAgCiAgICAgICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJsb2Ip
OwogICAgICAgICAKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDYpOworICAgICAgICBsb25nIGxvbmcgc2l6ZSA9IDA7CisgICAgICAgIGlmIChwYXRo
LmlzRW1wdHkoKSB8fCAhZ2V0RmlsZVNpemUocGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRG
aWxlRGlyZWN0b3J5LCBwYXRoKSwgc2l6ZSkpCisgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6
ZSgpOworICAgICAgICAKICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgyKTsKICAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNo
ZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDMpOwogICAgICAgICAKLSAgICAgICAgUmVzb3VyY2VS
ZXNwb25zZSByZXNwb25zZSh1cmwsIG1pbWVUeXBlLCBkYXRhLT5zaXplKCksIHRleHRFbmNvZGlu
Z05hbWUsICIiKTsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSh1cmwsIG1pbWVU
eXBlLCBzaXplLCB0ZXh0RW5jb2RpbmdOYW1lLCAiIik7CiAKICAgICAgICAgU3RyaW5nIGhlYWRl
cnMgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDQpOwogICAgICAgICBwYXJzZUhlYWRl
cnMoaGVhZGVycywgcmVzcG9uc2UpOwogICAgICAgICAKLSAgICAgICAgUmVmUHRyPEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNy
ZWF0ZSh1cmwsIHJlc3BvbnNlLCB0eXBlLCBkYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJl
c291cmNlOjpjcmVhdGUodXJsLCByZXNwb25zZSwgdHlwZSwgZGF0YS5yZWxlYXNlKCksIHBhdGgp
OwogCiAgICAgICAgIGlmICh0eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYW5pZmVz
dCkKICAgICAgICAgICAgIGNhY2hlLT5zZXRNYW5pZmVzdFJlc291cmNlKHJlc291cmNlLnJlbGVh
c2UoKSk7CkBAIC0xMTIyLDYgKzExODAsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpyZW1vdmUoQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCiAKICAgICAgICAgY2FjaGUtPmdyb3Vw
KCktPmNsZWFyU3RvcmFnZUlEKCk7CiAgICAgfQorICAgIAorICAgIGNoZWNrRm9yRGVsZXRlZFJl
c291cmNlcygpOwogfSAgICAKIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHko
KQpAQCAtMTE0Miw2ICsxMjAyLDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1w
dHkoKQogICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5N
ZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBpdC0+
c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOworICAgIAorICAgIGNoZWNrRm9yRGVsZXRlZFJlc291
cmNlcygpOwogfSAgICAKIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5
T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlSG9z
dCogY2FjaGVIb3N0KQpAQCAtMTE2MSw3ICsxMjIzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBB
cHAKICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgICAg
IAotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkg
PSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291
cmNlLT5yZXNwb25zZSgpLCByZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpKTsKKyAg
ICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2VDb3B5ID0gQXBw
bGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZS0+
cmVzcG9uc2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRhdGEoKSwgcmVzb3VyY2Ut
PnBhdGgoKSk7CiAgICAgICAgIAogICAgICAgICBjYWNoZUNvcHktPmFkZFJlc291cmNlKHJlc291
cmNlQ29weS5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTEyNjksNiArMTMzMSw5IEBAIGJvb2wgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXAoY29uc3QgU3RyaW5nJiBtYW5p
ZmVzdFVSTCkKICAgICB9CiAKICAgICBkZWxldGVUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICAK
KyAgICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMTI4Niw2ICsxMzUxLDY1IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmNoZWNrRm9yTWF4U2l6ZVJlYWNoZWQoKQogICAgIGlmIChtX2RhdGFiYXNlLmxhc3RFcnJvcigp
ID09IFNRTFJlc3VsdEZ1bGwpCiAgICAgICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSB0cnVl
OwogfQorICAgIAordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVk
UmVzb3VyY2VzKCkKK3sKKyAgICBvcGVuRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRh
YmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNRTGl0ZVN0YXRlbWVu
dCBzZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBEZWxldGVkQ2FjaGVS
ZXNvdXJjZXMiKTsKKyAgICAKKyAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTFJl
c3VsdE9rKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHNlbGVjdFBhdGhzLnN0ZXAo
KSAhPSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBkbyB7CisgICAg
ICAgIFN0cmluZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAg
aWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAg
ICAgICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
bV9jYWNoZURpcmVjdG9yeSwga0ZsYXRGaWxlU3ViZGlyZWN0b3J5KTsKKyAgICAgICAgU3RyaW5n
IGZ1bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBw
YXRoKTsKKyAgICAgICAgCisgICAgICAgIC8vIERvbid0IGV4aXQgdGhlIGZsYXRGaWxlRGlyZWN0
b3J5ISAgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgc29tZW9uZSB0YW1wZXJzIAorICAgICAg
ICAvLyB3aXRoIHRoZSBBcHBsaWNhdGlvbkNhY2hlIGRhdGFiYXNlLCBidXQgcHJvdGVjdCBhZ2Fp
bnN0IGl0IHJlZ2FyZGxlc3MuCisgICAgICAgIEFTU0VSVChkaXJlY3RvcnlOYW1lKGZ1bGxQYXRo
KSA9PSBmbGF0RmlsZURpcmVjdG9yeSk7CisgICAgICAgIGlmIChkaXJlY3RvcnlOYW1lKGZ1bGxQ
YXRoKSAhPSBmbGF0RmlsZURpcmVjdG9yeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAgZGVsZXRlRmlsZShmdWxsUGF0aCk7CisgICAgfSB3aGlsZSAoc2VsZWN0UGF0
aHMuc3RlcCgpID09IFNRTFJlc3VsdFJvdyk7CisgICAgCisgICAgZXhlY3V0ZVNRTENvbW1hbmQo
IkRFTEVURSBGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyIpOworfQorICAgIAorbG9uZyBsb25n
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmbGF0RmlsZUFyZWFTaXplKCkKK3sKKyAgICBvcGVu
RGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgbG9uZyBsb25nIHRvdGFsU2l6ZSA9IDA7CisgICAgU3RyaW5n
IGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJl
Y3RvcnksIGtGbGF0RmlsZVN1YmRpcmVjdG9yeSk7CisgICAgU1FMaXRlU3RhdGVtZW50IHNlbGVj
dFBhdGhzKG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVzb3VyY2VEYXRhIFdI
RVJFIHBhdGggTk9UIE5VTEwiKTsKKworICAgIGlmIChzZWxlY3RQYXRocy5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybiAwOworCisgICAgd2hpbGUgKHNlbGVjdFBhdGhz
LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBzZWxlY3RQ
YXRocy5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOworICAgICAgICBsb25n
IGxvbmcgcGF0aFNpemUgPSAwOworICAgICAgICBpZiAoIWdldEZpbGVTaXplKGZ1bGxQYXRoLCBw
YXRoU2l6ZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdG90YWxTaXplICs9IHBh
dGhTaXplOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdG90YWxTaXplOworfQogCiBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKSAKICAgICA6IG1fbWF4
aW11bVNpemUoQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
LmgKaW5kZXggOGJmZGYxM2Y2YmM2ZmYwMjI3Mzg2ZDkwYmM1OWEwNTQ5MmU1MTE0NC4uODRhYjQ2
OTMxM2ViYzc3MzMxYTM1MjcyZGVhZmU1MDJkMWZkNTlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKQEAg
LTExOCw2ICsxMTgsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgZXhlY3V0ZVNRTENvbW1hbmQoY29u
c3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGNoZWNrRm9yTWF4U2l6ZVJlYWNoZWQoKTsKKyAgICB2
b2lkIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOworICAgIGxvbmcgbG9uZyBmbGF0RmlsZUFy
ZWFTaXplKCk7CiAgICAgCiAgICAgU3RyaW5nIG1fY2FjaGVEaXJlY3Rvcnk7CiAgICAgU3RyaW5n
IG1fY2FjaGVGaWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDEzMmQwZTA3NzdkYjI5NjY2ZmM1ZWQx
M2RjNzFiMzJlOTJhNWFkYjEuLjViZmY3ZDg2YTRkNmRmZDMwNzc1Njc0YWMyMjNmZjYzNGQyNzdk
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0wMi0wNyAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBcHBsaWNhdGlvbiBDYWNoZSBzaG91bGQgc2F2ZSBhdWRpby8g
YW5kIHZpZGVvLyBtaW1lIHR5cGVzIGFzIGZsYXQgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNzg0CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS84OTMyNDczPgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICBJbml0aWFsaXpl
IHRoZSBBcHBDYWNoZSBwZXItT3JpZ2luIGFuZCBUb3RhbCBzaXplIHF1b3RhcyB3aXRoIHRoZSB2
YWx1ZXMgZm9yIFdlYktpdFByZWZlcmVuY2VzCisgICAgICAgIHVwb24gc3RhcnR1cC4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKFdlYktpdEluaXRpYWxpemVBcHBs
aWNhdGlvbkNhY2hlUXVvdGFzSWZOZWNlc3NhcnkpOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21t
b25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hbWU6Z3JvdXBOYW1lOnVzZXNEb2N1bWVudFZpZXdz
Ol0pOgorCiAyMDExLTAyLTAzICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0KaW5kZXggZTAxODc3YmU2YTRjYjllM2RhNTZmNDFmN2IzMGU0NjY3ZjY2
ZDcyZi4uYzc0MmQ5M2U5MDYyZTAxMmIyNTliMGZhMDBlZWQzZTI4MTQxZGJiYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtNTg5LDYgKzU4OSwxOSBAQCBzdGF0aWMgdm9p
ZCBXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVBhdGhJZk5lY2Vzc2FyeSgpCiAjZW5k
aWYKIH0KIAorc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVRdW90
YXNJZk5lY2Vzc2FyeSgpCit7CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
KyAgICBzdGF0aWMgQk9PTCBpbml0aWFsaXplZCA9IE5POworICAgIGlmIChpbml0aWFsaXplZCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhY2hlU3RvcmFnZSgpLnNldE1heGltdW1TaXpl
KFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNlc10gYXBwbGljYXRpb25DYWNoZVRv
dGFsUXVvdGFdKTsKKyAgICBjYWNoZVN0b3JhZ2UoKS5zZXREZWZhdWx0T3JpZ2luUXVvdGEoW1tX
ZWJQcmVmZXJlbmNlcyBzdGFuZGFyZFByZWZlcmVuY2VzXSBhcHBsaWNhdGlvbkNhY2hlRGVmYXVs
dE9yaWdpblF1b3RhXSk7CisgICAgaW5pdGlhbGl6ZWQgPSBZRVM7CisjZW5kaWYKK30KKwogc3Rh
dGljIGJvb2wgcnVubmluZ0xlb3BhcmRNYWlsKCkKIHsKICNpZmRlZiBCVUlMRElOR19PTl9MRU9Q
QVJECkBAIC02OTAsNiArNzAzLDcgQEAgc3RhdGljIE5TU3RyaW5nICpsZWFrTWFpbFF1aXJrc1Vz
ZXJTY3JpcHRQYXRoKCkKICAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZURhdGFiYXNlc0lmTmVjZXNz
YXJ5KCk7CiAjZW5kaWYKICAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVQ
YXRoSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2Fj
aGVRdW90YXNJZk5lY2Vzc2FyeSgpOwogICAgICAgICBwYXRjaE1haWxSZW1vdmVBdHRyaWJ1dGVz
TWV0aG9kKCk7CiAgICAgICAgIAogICAgICAgICAvLyBJbml0aWFsaXplIG91ciBwbGF0Zm9ybSBz
dHJhdGVnaWVzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81700</attachid>
            <date>2011-02-08 14:57:50 -0800</date>
            <delta_ts>2011-02-10 00:44:52 -0800</delta_ts>
            <desc>[1/3] Add &quot;path&quot; ivar to ApplicationCacheResource.</desc>
            <filename>0001-Application-Cache-should-save-audio-and-video-mime-t.patch</filename>
            <type>text/plain</type>
            <size>8090</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0YTdiZDUyLi41MGFiNzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDItMDMgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBwbGljYXRpb24gQ2Fj
aGUgc2hvdWxkIHNhdmUgYXVkaW8vIGFuZCB2aWRlby8gbWltZSB0eXBlcyBhcyBmbGF0IGZpbGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzc4NAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vODkzMjQ3Mz4KKworICAgICAgICBObyBuZXcgdGVzdHMu
CisKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUoKSBub3cgdGFrZXMg
YW4gYWRkaXRpb25hbCAicGF0aCIgcGFyYW1ldGVyLiAgVG8gZmFjaWxpdGF0ZSAKKyAgICAgICAg
ZXh0cmFjdGluZyB0aGlzIHBhdGggaW5mb3JtYXRpb24sIHR3byBmdW5jdGlvbnMgaW4gQXBwbGlj
YXRpb25DYWNoZUhvc3QgaGF2ZSBiZWVuIG1hZGUgcHVibGljLgorCisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVSZXNwb25zZSk6IFBhc3MgYWxvbmcgbmV3
ICJwYXRoIiBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OmRpZEZhaWwpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVIb3N0Ojpz
aG91bGRMb2FkUmVzb3VyY2VGcm9tQXBwbGljYXRpb25DYWNoZSk6IE1hZGUgcHVibGljLgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUhvc3Q6OmdldEFwcGxpY2F0aW9uQ2FjaGVG
YWxsYmFja1Jlc291cmNlKTogTWFkZSBwdWJsaWMuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSk6IEFkZCBuZXcgInBh
dGgiIHBhcmFtZXRlci4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6
OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpwYXRoKTogTmV3IGFjY2Vzc29yLgorCiAyMDExLTAyLTAzICBaaGVueWFvIE1vICA8em1v
QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVH
cm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUdyb3VwLmNwcAppbmRleCA1MTRlZjE5Li4zYzhlMWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcApAQCAt
NTEyLDcgKzUxMiw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRSZWNlaXZlUmVz
cG9uc2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzCiAgICAgaWYgKG1fbmV3ZXN0
Q2FjaGUgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQpIHsgLy8gTm90IG1vZGlm
aWVkLgogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIG5ld2VzdENhY2hlZFJlc291
cmNlID0gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JVUkwodXJsKTsKICAgICAgICAgaWYgKG5l
d2VzdENhY2hlZFJlc291cmNlKSB7Ci0gICAgICAgICAgICBtX2NhY2hlQmVpbmdVcGRhdGVkLT5h
ZGRSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIG5ld2VzdENh
Y2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCB0eXBlLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+ZGF0
YSgpKSk7CisgICAgICAgICAgICBtX2NhY2hlQmVpbmdVcGRhdGVkLT5hZGRSZXNvdXJjZShBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIG5ld2VzdENhY2hlZFJlc291cmNlLT5y
ZXNwb25zZSgpLCB0eXBlLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+ZGF0YSgpLCBuZXdlc3RDYWNo
ZWRSZXNvdXJjZS0+cGF0aCgpKSk7CiAgICAgICAgICAgICBtX3BlbmRpbmdFbnRyaWVzLnJlbW92
ZShtX2N1cnJlbnRIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKICAgICAgICAgICAgIG1f
Y3VycmVudEhhbmRsZS0+Y2FuY2VsKCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRIYW5kbGUgPSAw
OwpAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRSZWNl
aXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzCiAgICAgICAgICAg
ICBBU1NFUlQobV9uZXdlc3RDYWNoZSk7CiAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UqIG5ld2VzdENhY2hlZFJlc291cmNlID0gbV9uZXdlc3RDYWNoZS0+cmVzb3VyY2VGb3JV
UkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgICAgICBBU1NFUlQobmV3
ZXN0Q2FjaGVkUmVzb3VyY2UpOwotICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+YWRk
UmVzb3VyY2UoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCBuZXdlc3RDYWNo
ZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgdHlwZSwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPmRhdGEo
KSkpOworICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+YWRkUmVzb3VyY2UoQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCBuZXdlc3RDYWNoZWRSZXNvdXJjZS0+cmVz
cG9uc2UoKSwgdHlwZSwgbmV3ZXN0Q2FjaGVkUmVzb3VyY2UtPmRhdGEoKSwgbmV3ZXN0Q2FjaGVk
UmVzb3VyY2UtPnBhdGgoKSkpOwogICAgICAgICAgICAgbV9wZW5kaW5nRW50cmllcy5yZW1vdmUo
bV9jdXJyZW50SGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CiAgICAgICAgICAgICBtX2N1
cnJlbnRIYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICAgICAgbV9jdXJyZW50SGFuZGxlID0gMDsK
QEAgLTY0Miw3ICs2NDIsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmFpbChS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZUVycm9yJgogICAgICAgICBBU1NF
UlQobV9uZXdlc3RDYWNoZSk7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogbmV3
ZXN0Q2FjaGVkUmVzb3VyY2UgPSBtX25ld2VzdENhY2hlLT5yZXNvdXJjZUZvclVSTCh1cmwpOwog
ICAgICAgICBBU1NFUlQobmV3ZXN0Q2FjaGVkUmVzb3VyY2UpOwotICAgICAgICBtX2NhY2hlQmVp
bmdVcGRhdGVkLT5hZGRSZXNvdXJjZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1
cmwsIG5ld2VzdENhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCB0eXBlLCBuZXdlc3RDYWNoZWRS
ZXNvdXJjZS0+ZGF0YSgpKSk7CisgICAgICAgIG1fY2FjaGVCZWluZ1VwZGF0ZWQtPmFkZFJlc291
cmNlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgbmV3ZXN0Q2FjaGVkUmVz
b3VyY2UtPnJlc3BvbnNlKCksIHR5cGUsIG5ld2VzdENhY2hlZFJlc291cmNlLT5kYXRhKCksIG5l
d2VzdENhY2hlZFJlc291cmNlLT5wYXRoKCkpKTsKICAgICAgICAgLy8gTG9hZCB0aGUgbmV4dCBy
ZXNvdXJjZSwgaWYgYW55LgogICAgICAgICBzdGFydExvYWRpbmdFbnRyeSgpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
SG9zdC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVI
b3N0LmgKaW5kZXggYTFmMjg0MS4uNTZhNWY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVIb3N0LmgKQEAgLTE1Niw2ICsxNTYs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDYWNoZUluZm8gYXBwbGljYXRpb25D
YWNoZUluZm8oKTsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICBi
b29sIHNob3VsZExvYWRSZXNvdXJjZUZyb21BcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSomKTsKKyAgICAgICAgYm9vbCBnZXRB
cHBsaWNhdGlvbkNhY2hlRmFsbGJhY2tSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqJiwgQXBwbGljYXRpb25DYWNoZSogPSAwKTsKKyNlbmRp
ZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBpc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVk
KCk7CiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZG9jdW1lbnRMb2FkZXI7IH0KQEAgLTE4Miw4ICsxODcsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTsKIAog
ICAgICAgICBib29sIHNjaGVkdWxlTG9hZEZhbGxiYWNrUmVzb3VyY2VGcm9tQXBwbGljYXRpb25D
YWNoZShSZXNvdXJjZUxvYWRlciosIEFwcGxpY2F0aW9uQ2FjaGUqID0gMCk7Ci0gICAgICAgIGJv
b2wgc2hvdWxkTG9hZFJlc291cmNlRnJvbUFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiYpOwotICAgICAgICBib29sIGdldEFw
cGxpY2F0aW9uQ2FjaGVGYWxsYmFja1Jlc291cmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSomLCBBcHBsaWNhdGlvbkNhY2hlKiA9IDApOwogICAgICAg
ICB2b2lkIHNldENhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cChBcHBsaWNhdGlvbkNhY2hl
R3JvdXAqIGdyb3VwKTsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBjYW5kaWRhdGVB
cHBsaWNhdGlvbkNhY2hlR3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NhbmRpZGF0ZUFwcGxpY2F0
aW9uQ2FjaGVHcm91cDsgfQogICAgICAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGUoUGFzc1Jl
ZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBhcHBsaWNhdGlvbkNhY2hlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZS5jcHAKaW5kZXggMDNjNWM4My4uYzBkZjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKQEAg
LTMxLDExICszMSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVkIHR5cGUsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhKQorQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgdW5zaWduZWQgdHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGNv
bnN0IFN0cmluZyYgcGF0aCkKICAgICA6IFN1YnN0aXR1dGVSZXNvdXJjZSh1cmwsIHJlc3BvbnNl
LCBkYXRhKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3N0b3JhZ2VJRCgwKQogICAgICwg
bV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKDApCisgICAgLCBtX3BhdGgocGF0aCkKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZS5oCmluZGV4IDJjYTc4NDYuLjE5MGU2MjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNl
LmgKQEAgLTQyLDEwICs0MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEZhbGxiYWNrID0gMSA8PCA0
CiAgICAgfTsKICAgICAgICAgCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZVJlc291cmNlPiBjcmVhdGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgdW5zaWduZWQgdHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZl
ciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXBwbGlj
YXRpb25DYWNoZVJlc291cmNlPiBjcmVhdGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgdW5zaWduZWQgdHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCksIGNvbnN0IFN0cmluZyYgcGF0aCA9
IFN0cmluZygpKQogICAgIHsKICAgICAgICAgQVNTRVJUKCF1cmwuaGFzRnJhZ21lbnRJZGVudGlm
aWVyKCkpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSh1cmwsIHJlc3BvbnNlLCB0eXBlLCBidWZmZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UodXJsLCByZXNwb25zZSwgdHlwZSwgYnVm
ZmVyLCBwYXRoKSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQpAQCAtNTYsMTYgKzU2LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyU3Rv
cmFnZUlEKCkgeyBtX3N0b3JhZ2VJRCA9IDA7IH0KICAgICBpbnQ2NF90IGVzdGltYXRlZFNpemVJ
blN0b3JhZ2UoKTsKIAorICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGF0aDsgfQorCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyB2b2lkIGR1bXBUeXBlKHVuc2ln
bmVkIHR5cGUpOwogI2VuZGlmCiAgICAgCiBwcml2YXRlOgotICAgIEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCB1bnNpZ25lZCB0eXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKTsKKyAgICBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgS1VSTCYsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmLCB1bnNpZ25lZCB0eXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmlu
ZyYgcGF0aCk7CiAKICAgICB1bnNpZ25lZCBtX3R5cGU7CiAgICAgdW5zaWduZWQgbV9zdG9yYWdl
SUQ7CiAgICAgaW50NjRfdCBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2U7CisgICAgU3RyaW5nIG1f
cGF0aDsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0tIAoxLjcuMy4yCgo=
</data>
<flag name="review"
          id="73308"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81701</attachid>
            <date>2011-02-08 14:58:21 -0800</date>
            <delta_ts>2011-02-10 10:55:25 -0800</delta_ts>
            <desc>[2/3] Store media files as flat files within the Application Cache area.</desc>
            <filename>0002-Application-Cache-should-save-audio-and-video-mime-t.patch</filename>
            <type>text/plain</type>
            <size>15828</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MGFiNzcxLi44ZTlkYjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC04LDYgKzgsMzYg
QEAKIAogICAgICAgICBObyBuZXcgdGVzdHMuCiAKKyAgICAgICAgU3RvcmUgY2VydGFpbiBtaW1l
IHR5cGVzIGFzIGZsYXQgZmlsZXMgYWxvbmdzaWRlIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBkYXRh
YmFzZS4KKyAgICAgICAgVGhpcyByZXF1aXJlcyBwbHVtYmluZyB0aGUgc2F2ZWQgZmlsZSBwYXRo
IGZyb20gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgdGhyb3VnaAorICAgICAgICB0byBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VEYXRhIHNjaGVt
YSBhbmQKKyAgICAgICAgICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFibGUs
IGFkZCBhIG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUgbmV3IHBhdGgg
ZGF0YSB3aGVuIGFkZGluZyBuZXcgcm93cyBpbiAKKyAgICAgICAgICAgIENhY2hlUmVzb3VyY2VE
YXRhLCBhbmQgc3RvcmUgbWVkaWEgcmVzb3VyY2VzIGFzIGZsYXQgZmlsZXMuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKTogUHVsbCB0aGUgInBh
dGgiIGNvbHVtbiBmcm9tIENhY2hlUmVzb3VyY2VEYXRhCisgICAgICAgICAgICB3aGVuIGxvYWRp
bmcgY2FjaGUgaXRlbXMuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6cmVtb3ZlKTogQ2FsbCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMuCisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVH
cm91cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6IFdhbGsgdGhyb3VnaCBEZWxldGVkQ2FjaGVSZXNv
dXJjZURhdGEKKyAgICAgICAgICAgIGxvb2tpbmcgZm9yIGVudHJpZXMgd2l0aCBub24tZW1wdHkg
InBhdGgiIGNvbHVtbnM7IGlmIGZvdW5kLCBkZWxldGUuCisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6IFdhbGsgdGhyb3VnaCBDYWNo
ZVJlc291cmNlRGF0YSByb3dzCisgICAgICAgICAgICBhbmQgc3VtIHRoZSBmaWxlIHNpemUgb2Yg
dGhvc2Ugcm93cyB3aXRoIGZsYXQgZmlsZSBzdG9yYWdlLgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oOgorCisyMDExLTAyLTAzICBKZXIgTm9ibGUg
IDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFwcGxpY2F0aW9uIENhY2hlIHNob3VsZCBzYXZlIGF1ZGlvLyBhbmQg
dmlkZW8vIG1pbWUgdHlwZXMgYXMgZmxhdCBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg5
MzI0NzM+CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCiAgICAgICAgIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKCkgbm93IHRha2VzIGFuIGFkZGl0aW9uYWwgInBhdGgiIHBhcmFt
ZXRlci4gIFRvIGZhY2lsaXRhdGUgCiAgICAgICAgIGV4dHJhY3RpbmcgdGhpcyBwYXRoIGluZm9y
bWF0aW9uLCB0d28gZnVuY3Rpb25zIGluIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IGhhdmUgYmVlbiBt
YWRlIHB1YmxpYy4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggMGMwMGVlNi4uMmQxYTRmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0zNywxMiArMzcsMTUgQEAKICNpbmNsdWRlICJTUUxp
dGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVVVJRC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3Qga0ZsYXRGaWxlU3ViZGlyZWN0b3J5ID0gIkFwcGxpY2F0aW9uQ2FjaGUiOwor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlIDxjbGFzcyBUPgpAQCAtMzg0LDcgKzM4
Nyw3IEBAIGludDY0X3QgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNwYWNlTmVlZGVkKGludDY0
X3QgY2FjaGVUb1NhdmUpCiAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX2NhY2hlRmlsZSwgZmlsZVNp
emUpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludDY0X3QgY3VycmVudFNpemUgPSBmaWxl
U2l6ZTsKKyAgICBpbnQ2NF90IGN1cnJlbnRTaXplID0gZmlsZVNpemUgKyBmbGF0RmlsZUFyZWFT
aXplKCk7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHdlIGhh
dmUgYXZhaWxhYmxlLgogICAgIGludDY0X3QgdG90YWxBdmFpbGFibGVTaXplID0gMDsKQEAgLTU1
MCw3ICs1NTMsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29t
bWFuZChjb25zdCBTdHJpbmcmIHNxbCkKIC8vIFVwZGF0ZSB0aGUgc2NoZW1hVmVyc2lvbiB3aGVu
IHRoZSBzY2hlbWEgb2YgYW55IHRoZSBBcHBsaWNhdGlvbiBDYWNoZQogLy8gU1FMaXRlIHRhYmxl
cyBjaGFuZ2VzLiBUaGlzIGFsbG93cyB0aGUgZGF0YWJhc2UgdG8gYmUgcmVidWlsdCB3aGVuCiAv
LyBhIG5ldywgaW5jb21wYXRpYmxlIGNoYW5nZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIHRoZSBk
YXRhYmFzZSBzY2hlbWEuCi1zdGF0aWMgY29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSA2Oworc3Rh
dGljIGNvbnN0IGludCBzY2hlbWFWZXJzaW9uID0gNzsKICAgICAKIHZvaWQgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogewpAQCAtNTU4LDYgKzU2MSw4IEBA
IHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAg
IGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJldHVybjsKIAorICAgIC8v
IEFsbG93IHRoZSBub3JtYWwgZmxhdC1maWxlIGNsZWFudXAgcHJvY2VzcyB0byBleGVjdXRlIGJl
Zm9yZSBjbGVhcmluZyBhbGwgdGhlIHRhYmxlczoKKyAgICBlbXB0eSgpOwogICAgIG1fZGF0YWJh
c2UuY2xlYXJBbGxUYWJsZXMoKTsKIAogICAgIC8vIFVwZGF0ZSB1c2VyIHZlcnNpb24uCkBAIC02
MDgsNyArNjEzLDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYXNl
KGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlRW50cmllcyAoY2FjaGUgSU5URUdFUiBOT1QgTlVM
TCBPTiBDT05GTElDVCBGQUlMLCB0eXBlIElOVEVHRVIsIHJlc291cmNlIElOVEVHRVIgTk9UIE5V
TEwpIik7CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT
IENhY2hlUmVzb3VyY2VzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIHVy
bCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKICAgICAgICAgICAgICAgICAgICAg
ICAic3RhdHVzQ29kZSBJTlRFR0VSIE5PVCBOVUxMLCByZXNwb25zZVVSTCBURVhUIE5PVCBOVUxM
LCBtaW1lVHlwZSBURVhULCB0ZXh0RW5jb2RpbmdOYW1lIFRFWFQsIGhlYWRlcnMgVEVYVCwgZGF0
YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7Ci0gICAgZXhlY3V0ZVNRTENv
bW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlUmVzb3VyY2VEYXRhIChpZCBJ
TlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGRhdGEgQkxPQikiKTsKKyAgICBleGVj
dXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2FjaGVSZXNvdXJjZURh
dGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgZGF0YSBCTE9CLCBwYXRo
IFRFWFQpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJ
U1RTIERlbGV0ZWRDYWNoZVJlc291cmNlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5D
UkVNRU5ULCBwYXRoIFRFWFQpIik7CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBJ
R05PUkUsIHF1b3RhIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKIAogICAg
IC8vIFdoZW4gYSBjYWNoZSBpcyBkZWxldGVkLCBhbGwgaXRzIGVudHJpZXMgYW5kIGl0cyB3aGl0
ZWxpc3Qgc2hvdWxkIGJlIGRlbGV0ZWQuCkBAIC02MzEsNiArNjM3LDE1IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0
KQogICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIEJFR0lOIgogICAgICAgICAg
ICAgICAgICAgICAgICIgIERFTEVURSBGUk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJFIGlkID0g
T0xELmRhdGE7IgogICAgICAgICAgICAgICAgICAgICAgICIgRU5EIik7CisgICAgCisgICAgLy8g
V2hlbiBhIGNhY2hlIHJlc291cmNlIGlzIGRlbGV0ZWQsIGlmIGl0IGNvbnRhaW5zIGEgbm9uLWVt
cHR5IHBhdGgsIHRoYXQgcGF0aCBzaG91bGQKKyAgICAvLyBiZSBhZGRlZCB0byB0aGUgRGVsZXRl
ZENhY2hlUmVzb3VyY2VzIHRhYmxlIHNvIHRoZSBmbGF0IGZpbGUgYXQgdGhhdCBwYXRoIGNhbgor
ICAgIC8vIGJlIGRlbGV0ZWQgYXQgYSBsYXRlciB0aW1lLgorICAgIGV4ZWN1dGVTUUxDb21tYW5k
KCJDUkVBVEUgVFJJR0dFUiBJRiBOT1QgRVhJU1RTIENhY2hlUmVzb3VyY2VEYXRhRGVsZXRlZCBB
RlRFUiBERUxFVEUgT04gQ2FjaGVSZXNvdXJjZURhdGEiCisgICAgICAgICAgICAgICAgICAgICAg
IiBGT1IgRUFDSCBST1ciCisgICAgICAgICAgICAgICAgICAgICAgIiBXSEVOIE9MRC5wYXRoIE5P
VCBOVUxMIEJFR0lOIgorICAgICAgICAgICAgICAgICAgICAgICIgIElOU0VSVCBJTlRPIERlbGV0
ZWRDYWNoZVJlc291cmNlcyAocGF0aCkgdmFsdWVzIChPTEQucGF0aCk7IgorICAgICAgICAgICAg
ICAgICAgICAgICIgRU5EIik7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4
ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQpCkBAIC03NjIsMTUgKzc3
Nyw1MSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FMaXRlU3RhdGVtZW50IGRhdGFT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRh
KSBWQUxVRVMgKD8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGRhdGFTdGF0ZW1lbnQobV9kYXRh
YmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRhLCBwYXRoKSBWQUxVRVMg
KD8sID8pIik7CiAgICAgaWYgKGRhdGFTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisKKyAgICBTdHJpbmcgZnVsbFBhdGg7Cisg
ICAgaWYgKHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkuc3RhcnRzV2l0aCgiYXVkaW8v
IiwgZmFsc2UpIHx8IHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkuc3RhcnRzV2l0aCgi
dmlkZW8vIiwgZmFsc2UpKSB7CisgICAgICAgIC8vIEZpcnN0LCBjaGVjayB0byBzZWUgaWYgY3Jl
YXRpbmcgdGhlIGZsYXQgZmlsZSB3b3VsZCB2aW9sYXRlIHRoZSBtYXhpbXVtIHRvdGFsIHF1b3Rh
LiAgV2UgZG9uJ3QgbmVlZAorICAgICAgICAvLyB0byBjaGVjayB0aGUgcGVyLW9yaWdpbiBxdW90
ZSBoZXJlLCBhcyBpdCB3YXMgYWxyZWFkeSBjaGVja2VkIGluIHN0b3JlTmV3ZXN0Q2FjaGUoKS4K
KyAgICAgICAgaWYgKG1fZGF0YWJhc2UudG90YWxTaXplKCkgKyBmbGF0RmlsZUFyZWFTaXplKCkg
KyByZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkgPiBtX21heGltdW1TaXplKSB7CisgICAgICAgICAg
ICBtX2lzTWF4aW11bVNpemVSZWFjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjcmVhdGVDYW5v
bmljYWxVVUlEU3RyaW5nKCk7CisgICAgICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBrRmxhdEZpbGVTdWJkaXJl
Y3RvcnkpOworICAgICAgICBtYWtlQWxsRGlyZWN0b3JpZXMoZmxhdEZpbGVEaXJlY3RvcnkpOwor
ICAgICAgICAKKyAgICAgICAgZnVsbFBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxh
dEZpbGVEaXJlY3RvcnksIHBhdGgpOworICAgICAgICAKKyAgICAgICAgUGxhdGZvcm1GaWxlSGFu
ZGxlIGhhbmRsZSA9IG9wZW5GaWxlKGZ1bGxQYXRoLCBPcGVuRm9yV3JpdGUpOworICAgICAgICBp
ZiAoIWhhbmRsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpbnQgd3Jp
dHRlbkJ5dGVzID0gd3JpdGVUb0ZpbGUoaGFuZGxlLCByZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCks
IHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CisgICAgICAgIGNsb3NlRmlsZShoYW5kbGUpOwor
CisgICAgICAgIGlmICh3cml0dGVuQnl0ZXMgPT0gLTEpIHsKKyAgICAgICAgICAgIGRlbGV0ZUZp
bGUoZnVsbFBhdGgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIsIHBhdGgpOworICAgIH0gZWxz
ZSB7CiAgICAgaWYgKHJlc291cmNlLT5kYXRhKCktPnNpemUoKSkKICAgICAgICAgZGF0YVN0YXRl
bWVudC5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRh
KCktPnNpemUoKSk7CisgICAgfQorICAgIAorICAgIGlmICghZGF0YVN0YXRlbWVudC5leGVjdXRl
Q29tbWFuZCgpKSB7CisgICAgICAgIC8vIENsZWFuIHVwIHRoZSBmaWxlIHdoaWNoIHdlIG1heSBo
YXZlIHdyaXR0ZW4gdG86CisgICAgICAgIGlmICghZnVsbFBhdGguaXNFbXB0eSgpKQorICAgICAg
ICAgICAgZGVsZXRlRmlsZShmdWxsUGF0aCk7CiAgICAgCi0gICAgaWYgKCFkYXRhU3RhdGVtZW50
LmV4ZWN1dGVDb21tYW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICB1
bnNpZ25lZCBkYXRhSWQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9kYXRhYmFzZS5sYXN0SW5z
ZXJ0Um93SUQoKSk7CiAKQEAgLTg1MSw3ICs5MDIsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCBBcHBsaWNh
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgCiAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9
IGZhbHNlOwotICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6ZSk7Cisg
ICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShtX21heGltdW1TaXplIC0gZmxhdEZpbGVBcmVh
U2l6ZSgpKTsKIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlv
bihtX2RhdGFiYXNlKTsKICAgICBzdG9yZVJlc291cmNlVHJhbnNhY3Rpb24uYmVnaW4oKTsKQEAg
LTg5OCw3ICs5NDksNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2Vz
dENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAsIEFwcAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBtX2lzTWF4aW11bVNpemVSZWFjaGVkID0gZmFsc2U7Ci0gICAgbV9kYXRh
YmFzZS5zZXRNYXhpbXVtU2l6ZShtX21heGltdW1TaXplKTsKKyAgICBtX2RhdGFiYXNlLnNldE1h
eGltdW1TaXplKG1fbWF4aW11bVNpemUgLSBmbGF0RmlsZUFyZWFTaXplKCkpOwogCiAgICAgU1FM
aXRlVHJhbnNhY3Rpb24gc3RvcmVDYWNoZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIApA
QCAtOTk4LDcgKzEwNDksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VIZWFkZXJzKGNvbnN0
IFN0cmluZyYgaGVhZGVycywgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9ucwogUGFzc1JlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2ln
bmVkIHN0b3JhZ2VJRCkKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgY2FjaGVTdGF0ZW1lbnQobV9k
YXRhYmFzZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgdXJs
LCB0eXBlLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJj
ZURhdGEuZGF0YSBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VzIE9O
IENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgdXJsLCB0eXBlLCBtaW1lVHlwZSwgdGV4dEVu
Y29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJjZURhdGEuZGF0YSwgQ2FjaGVSZXNvdXJj
ZURhdGEucGF0aCBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VzIE9O
IENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VEYXRhIE9OIENh
Y2hlUmVzb3VyY2VEYXRhLmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hFUkUgQ2FjaGVFbnRyaWVz
LmNhY2hlPT8iKTsKICAgICBpZiAoY2FjaGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3Vs
dE9rKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3RhdGVt
ZW50LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTEwMDks
NiArMTA2MCw4IEBAIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlCiAKICAgICBSZWZQdHI8QXBwbGlj
YXRpb25DYWNoZT4gY2FjaGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKICAgICAKKyAg
ICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9j
YWNoZURpcmVjdG9yeSwga0ZsYXRGaWxlU3ViZGlyZWN0b3J5KTsKKwogICAgIGludCByZXN1bHQ7
CiAgICAgd2hpbGUgKChyZXN1bHQgPSBjYWNoZVN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3Vs
dFJvdykgewogICAgICAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIGNhY2hlU3RhdGVtZW50
LmdldENvbHVtblRleHQoMCkpOwpAQCAtMTAyMCwxNSArMTA3MywyNCBAQCBQYXNzUmVmUHRyPEFw
cGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWdu
ZWQgc3RvcmFnZQogICAgICAgICAKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9
IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoYmxvYik7CiAgICAgICAgIAorICAgICAgICBTdHJp
bmcgcGF0aCA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNik7CisgICAgICAgIGxvbmcg
bG9uZyBzaXplID0gMDsKKyAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAg
c2l6ZSA9IGRhdGEtPnNpemUoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAg
ICAgICAgIGdldEZpbGVTaXplKHBhdGgsIHNpemUpOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBTdHJpbmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDIpOwog
ICAgICAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVt
blRleHQoMyk7CiAgICAgICAgIAotICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVy
bCwgbWltZVR5cGUsIGRhdGEtPnNpemUoKSwgdGV4dEVuY29kaW5nTmFtZSwgIiIpOworICAgICAg
ICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWltZVR5cGUsIHNpemUsIHRleHRFbmNv
ZGluZ05hbWUsICIiKTsKIAogICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50
LmdldENvbHVtblRleHQoNCk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25z
ZSk7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBy
ZXNvdXJjZSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgcmVzcG9uc2Us
IHR5cGUsIGRhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4gcmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmws
IHJlc3BvbnNlLCB0eXBlLCBkYXRhLnJlbGVhc2UoKSwgcGF0aCk7CiAKICAgICAgICAgaWYgKHR5
cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hbmlmZXN0KQogICAgICAgICAgICAgY2Fj
aGUtPnNldE1hbmlmZXN0UmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKQEAgLTExMjIsNiAr
MTE4NCw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnJlbW92ZShBcHBsaWNhdGlv
bkNhY2hlKiBjYWNoZSkKIAogICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+Y2xlYXJTdG9yYWdlSUQo
KTsKICAgICB9CisgICAgCisgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9ICAgIAog
CiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCkBAIC0xMTQyLDYgKzEyMDYs
OCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCiAgICAgQ2FjaGVHcm91
cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBm
b3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFn
ZUlEKCk7CisgICAgCisgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9ICAgIAogCiBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmlu
ZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QpCkBAIC0x
MTYxLDcgKzEyMjcsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlP
ZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAgIGZvciAoQXBwbGlj
YXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uq
IHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZTo6Y3JlYXRlKHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJl
c291cmNlLT50eXBlKCksIHJlc291cmNlLT5kYXRhKCkpOworICAgICAgICBSZWZQdHI8QXBwbGlj
YXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U6OmNyZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5yZXNwb25zZSgpLCByZXNvdXJj
ZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpLCByZXNvdXJjZS0+cGF0aCgpKTsKICAgICAgICAg
CiAgICAgICAgIGNhY2hlQ29weS0+YWRkUmVzb3VyY2UocmVzb3VyY2VDb3B5LnJlbGVhc2UoKSk7
CiAgICAgfQpAQCAtMTI2OSw2ICsxMzM1LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6ZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKQogICAgIH0KIAog
ICAgIGRlbGV0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIAorICAgIGNoZWNrRm9yRGVsZXRl
ZFJlc291cmNlcygpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMjg3LDYgKzEz
NTYsNjUgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JNYXhTaXplUmVh
Y2hlZCgpCiAgICAgICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSB0cnVlOwogfQogCit2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKQorewor
ICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1f
ZGF0YWJhc2UsICJTRUxFQ1QgcGF0aCBGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyIpOworICAg
IAorICAgIGlmIChzZWxlY3RQYXRocy5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAoc2VsZWN0UGF0aHMuc3RlcCgpICE9IFNRTFJlc3VsdFJv
dykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGRvIHsKKyAgICAgICAgU3RyaW5nIHBhdGgg
PSBzZWxlY3RQYXRocy5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBmbGF0
RmlsZURpcmVjdG9yeSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5
LCBrRmxhdEZpbGVTdWJkaXJlY3RvcnkpOworICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOworICAgICAgICAK
KyAgICAgICAgLy8gRG9uJ3QgZXhpdCB0aGUgZmxhdEZpbGVEaXJlY3RvcnkhICBUaGlzIHNob3Vs
ZCBvbmx5IGhhcHBlbiBpZiBzb21lb25lIHRhbXBlcnMgCisgICAgICAgIC8vIHdpdGggdGhlIEFw
cGxpY2F0aW9uQ2FjaGUgZGF0YWJhc2UsIGJ1dCBwcm90ZWN0IGFnYWluc3QgaXQgcmVnYXJkbGVz
cy4KKyAgICAgICAgQVNTRVJUKGRpcmVjdG9yeU5hbWUoZnVsbFBhdGgpID09IGZsYXRGaWxlRGly
ZWN0b3J5KTsKKyAgICAgICAgaWYgKGRpcmVjdG9yeU5hbWUoZnVsbFBhdGgpICE9IGZsYXRGaWxl
RGlyZWN0b3J5KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBkZWxl
dGVGaWxlKGZ1bGxQYXRoKTsKKyAgICB9IHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FM
UmVzdWx0Um93KTsKKyAgICAKKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiREVMRVRFIEZST00gRGVs
ZXRlZENhY2hlUmVzb3VyY2VzIik7Cit9CisgICAgCitsb25nIGxvbmcgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQoreworICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7
CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAK
KyAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKKyAgICBTdHJpbmcgZmxhdEZpbGVEaXJlY3Rv
cnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwga0ZsYXRGaWxl
U3ViZGlyZWN0b3J5KTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0UGF0aHMobV9kYXRhYmFz
ZSwgIlNFTEVDVCBwYXRoIEZST00gQ2FjaGVSZXNvdXJjZURhdGEgV0hFUkUgcGF0aCBOT1QgTlVM
TCIpOworCisgICAgaWYgKHNlbGVjdFBhdGhzLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgpID09IFNRTFJl
c3VsdFJvdykgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBhdGhzLmdldENvbHVtblRl
eHQoMCk7CisgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7CisgICAgICAgIGxvbmcgbG9uZyBwYXRoU2l6ZSA9
IDA7CisgICAgICAgIGlmICghZ2V0RmlsZVNpemUoZnVsbFBhdGgsIHBhdGhTaXplKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB0b3RhbFNpemUgKz0gcGF0aFNpemU7CisgICAgfQor
ICAgIAorICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisKIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpIAogICAgIDogbV9tYXhpbXVtU2l6ZShBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6bm9RdW90YSgpKQogICAgICwgbV9pc01heGltdW1TaXplUmVhY2hl
ZChmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKaW5kZXggOGJmZGYxMy4uODRhYjQ2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmgKQEAgLTExOCw2ICsxMTgsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgZXhlY3V0ZVNR
TENvbW1hbmQoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGNoZWNrRm9yTWF4U2l6ZVJlYWNo
ZWQoKTsKKyAgICB2b2lkIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOworICAgIGxvbmcgbG9u
ZyBmbGF0RmlsZUFyZWFTaXplKCk7CiAgICAgCiAgICAgU3RyaW5nIG1fY2FjaGVEaXJlY3Rvcnk7
CiAgICAgU3RyaW5nIG1fY2FjaGVGaWxlOwotLSAKMS43LjMuMgoK
</data>
<flag name="review"
          id="73309"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81702</attachid>
            <date>2011-02-08 14:59:15 -0800</date>
            <delta_ts>2011-03-25 17:07:10 -0700</delta_ts>
            <desc>[3/3] Set the maximum total- and quota-specific Application Cache sizes from WebKitPreferences.</desc>
            <filename>0003-Application-Cache-should-save-audio-and-video-mime-t.patch</filename>
            <type>text/plain</type>
            <size>2044</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwppbmRleCAxMzJkMGUwLi41YmZmN2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTEtMDItMDcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBw
bGljYXRpb24gQ2FjaGUgc2hvdWxkIHNhdmUgYXVkaW8vIGFuZCB2aWRlby8gbWltZSB0eXBlcyBh
cyBmbGF0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01Mzc4NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODkzMjQ3Mz4KKworICAgICAgICBO
byBuZXcgdGVzdHMuCisKKyAgICAgICAgSW5pdGlhbGl6ZSB0aGUgQXBwQ2FjaGUgcGVyLU9yaWdp
biBhbmQgVG90YWwgc2l6ZSBxdW90YXMgd2l0aCB0aGUgdmFsdWVzIGZvciBXZWJLaXRQcmVmZXJl
bmNlcworICAgICAgICB1cG9uIHN0YXJ0dXAuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgIChXZWJLaXRJbml0aWFsaXplQXBwbGljYXRpb25DYWNoZVF1b3Rhc0lmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJh
bWVOYW1lOmdyb3VwTmFtZTp1c2VzRG9jdW1lbnRWaWV3czpdKToKKwogMjAxMS0wMi0wMyAgWXVy
eSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IGUw
MTg3N2IuLmM3NDJkOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTU4
OSw2ICs1ODksMTkgQEAgc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2Fj
aGVQYXRoSWZOZWNlc3NhcnkoKQogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIFdlYktpdEluaXRp
YWxpemVBcHBsaWNhdGlvbkNhY2hlUXVvdGFzSWZOZWNlc3NhcnkoKQoreworI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgc3RhdGljIEJPT0wgaW5pdGlhbGl6ZWQgPSBO
TzsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjYWNo
ZVN0b3JhZ2UoKS5zZXRNYXhpbXVtU2l6ZShbW1dlYlByZWZlcmVuY2VzIHN0YW5kYXJkUHJlZmVy
ZW5jZXNdIGFwcGxpY2F0aW9uQ2FjaGVUb3RhbFF1b3RhXSk7CisgICAgY2FjaGVTdG9yYWdlKCku
c2V0RGVmYXVsdE9yaWdpblF1b3RhKFtbV2ViUHJlZmVyZW5jZXMgc3RhbmRhcmRQcmVmZXJlbmNl
c10gYXBwbGljYXRpb25DYWNoZURlZmF1bHRPcmlnaW5RdW90YV0pOworICAgIGluaXRpYWxpemVk
ID0gWUVTOworI2VuZGlmCit9CisKIHN0YXRpYyBib29sIHJ1bm5pbmdMZW9wYXJkTWFpbCgpCiB7
CiAjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRApAQCAtNjkwLDYgKzcwMyw3IEBAIHN0YXRpYyBO
U1N0cmluZyAqbGVha01haWxRdWlya3NVc2VyU2NyaXB0UGF0aCgpCiAgICAgICAgIFdlYktpdElu
aXRpYWxpemVEYXRhYmFzZXNJZk5lY2Vzc2FyeSgpOwogI2VuZGlmCiAgICAgICAgIFdlYktpdElu
aXRpYWxpemVBcHBsaWNhdGlvbkNhY2hlUGF0aElmTmVjZXNzYXJ5KCk7CisgICAgICAgIFdlYktp
dEluaXRpYWxpemVBcHBsaWNhdGlvbkNhY2hlUXVvdGFzSWZOZWNlc3NhcnkoKTsKICAgICAgICAg
cGF0Y2hNYWlsUmVtb3ZlQXR0cmlidXRlc01ldGhvZCgpOwogICAgICAgICAKICAgICAgICAgLy8g
SW5pdGlhbGl6ZSBvdXIgcGxhdGZvcm0gc3RyYXRlZ2llcy4KLS0gCjEuNy4zLjIKCg==
</data>
<flag name="review"
          id="73310"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82004</attachid>
            <date>2011-02-10 10:55:25 -0800</date>
            <delta_ts>2011-02-10 12:18:27 -0800</delta_ts>
            <desc>[2/3] Store media files as flat files within the Application Cache area.</desc>
            <filename>0002-Application-Cache-should-save-audio-and-video-mime-t.patch</filename>
            <type>text/plain</type>
            <size>20007</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSBlZDAyNzY4OTA4ZDQxMjFiYThmZGRmODQxYzgxNjc0MzExMDQ0ZGMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBhcHBsZS5jb20+CkRhdGU6
IFR1ZSwgOCBGZWIgMjAxMSAxNDoyMTo0MiAtMDgwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBBcHBs
aWNhdGlvbiBDYWNoZSBzaG91bGQgc2F2ZSBhdWRpby8gYW5kIHZpZGVvLyBtaW1lIHR5cGVzIGFz
IGZsYXQgZmlsZXMKIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzc4
NAogPHJkYXI6Ly9wcm9ibGVtLzg5MzI0NzM+CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
Ck5vIG5ldyB0ZXN0cy4KClN0b3JlIGNlcnRhaW4gbWltZSB0eXBlcyBhcyBmbGF0IGZpbGVzIGFs
b25nc2lkZSB0aGUgQXBwbGljYXRpb24gQ2FjaGUgZGF0YWJhc2UuClRoaXMgcmVxdWlyZXMgcGx1
bWJpbmcgdGhlIHNhdmVkIGZpbGUgcGF0aCBmcm9tIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIHRo
cm91Z2gKdG8gQXBwbGljYXRpb25DYWNoZVJlc291cmNlLgoKKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VEYXRh
IHNjaGVtYSBhbmQKICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFibGUsIGFk
ZCBhIG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUgbmV3IHBhdGggZGF0YSB3aGVuIGFk
ZGluZyBuZXcgcm93cyBpbgogICAgQ2FjaGVSZXNvdXJjZURhdGEsIGFuZCBzdG9yZSBtZWRpYSBy
ZXNvdXJjZXMgYXMgZmxhdCBmaWxlcy4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
Ojpsb2FkQ2FjaGUpOiBQdWxsIHRoZSAicGF0aCIgY29sdW1uIGZyb20gQ2FjaGVSZXNvdXJjZURh
dGEKICAgIHdoZW4gbG9hZGluZyBjYWNoZSBpdGVtcy4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpyZW1vdmUpOiBDYWxsIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcy4KKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6IERpdHRvLgooV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUpOiBEaXR0by4KKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVDYWNoZUdyb3VwKTogRGl0dG8uCihXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKTog
V2FsayB0aHJvdWdoIERlbGV0ZWRDYWNoZVJlc291cmNlRGF0YQogICAgbG9va2luZyBmb3IgZW50
cmllcyB3aXRoIG5vbi1lbXB0eSAicGF0aCIgY29sdW1uczsgaWYgZm91bmQsIGRlbGV0ZS4KKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmbGF0RmlsZUFyZWFTaXplKTogV2FsayB0
aHJvdWdoIENhY2hlUmVzb3VyY2VEYXRhIHJvd3MKICAgIGFuZCBzdW0gdGhlIGZpbGUgc2l6ZSBv
ZiB0aG9zZSByb3dzIHdpdGggZmxhdCBmaWxlIHN0b3JhZ2UuCihXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbik6IENhbGwgZGVsZXRlVGFibGVzKCkg
aW5zdGVhZCBvZgogICAgY2xlYXJBbGxUYWJsZXMoKSBkaXJlY3RseS4KKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVUYWJsZXMpOiBDYWxsIGVtcHR5KCkgYmVmb3JlIGRl
bGV0aW5nIHRoZSB0YWJsZXMsCiAgICBzbyB0aGF0IGZsYXQgZmlsZXMgZ2V0IGRlbGV0ZWQuCihX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxh
dEZpbGUpOiBBZGRlZC4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURh
dGFUb1VuaXF1ZUZpbGVJbkRpcmVjdG9yeSk6IEFkZGVkLgoqIGxvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5oOgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAzNiArKysrCiAuLi4vbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCAgICB8ICAxODggKysrKysrKysrKysrKysrKysrLS0K
IC4uLi9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCAgICAgIHwgICAg
NSArCiAzIGZpbGVzIGNoYW5nZWQsIDIxMyBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggYWIzYTM0OC4uODllODlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtOCw2ICs4LDQy
IEBACiAKICAgICAgICAgTm8gbmV3IHRlc3RzLgogCisgICAgICAgIFN0b3JlIGNlcnRhaW4gbWlt
ZSB0eXBlcyBhcyBmbGF0IGZpbGVzIGFsb25nc2lkZSB0aGUgQXBwbGljYXRpb24gQ2FjaGUgZGF0
YWJhc2UuCisgICAgICAgIFRoaXMgcmVxdWlyZXMgcGx1bWJpbmcgdGhlIHNhdmVkIGZpbGUgcGF0
aCBmcm9tIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIHRocm91Z2gKKyAgICAgICAgdG8gQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLgorCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6b3BlbkRhdGFiYXNlKTogTW9kaWZ5IHRoZSBDYWNoZVJlc291cmNlRGF0YSBzY2hl
bWEgYW5kCisgICAgICAgICAgICBhZGQgYSBuZXcgRGVsZXRlZENhY2hlUmVzb3VyY2VzIHRhYmxl
LCBhZGQgYSBuZXcgQ2FjaGVSZXNvdXJjZURhdGFEZWxldGVkIHRyaWdnZXIuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOiBBZGQgdGhlIG5ldyBwYXRo
IGRhdGEgd2hlbiBhZGRpbmcgbmV3IHJvd3MgaW4gCisgICAgICAgICAgICBDYWNoZVJlc291cmNl
RGF0YSwgYW5kIHN0b3JlIG1lZGlhIHJlc291cmNlcyBhcyBmbGF0IGZpbGVzLgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6IFB1bGwgdGhlICJw
YXRoIiBjb2x1bW4gZnJvbSBDYWNoZVJlc291cmNlRGF0YQorICAgICAgICAgICAgd2hlbiBsb2Fk
aW5nIGNhY2hlIGl0ZW1zLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnJlbW92ZSk6IENhbGwgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzLgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hl
R3JvdXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMpOiBXYWxrIHRocm91Z2ggRGVsZXRlZENhY2hlUmVz
b3VyY2VEYXRhCisgICAgICAgICAgICBsb29raW5nIGZvciBlbnRyaWVzIHdpdGggbm9uLWVtcHR5
ICJwYXRoIiBjb2x1bW5zOyBpZiBmb3VuZCwgZGVsZXRlLgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUpOiBXYWxrIHRocm91Z2ggQ2Fj
aGVSZXNvdXJjZURhdGEgcm93cworICAgICAgICAgICAgYW5kIHN1bSB0aGUgZmlsZSBzaXplIG9m
IHRob3NlIHJvd3Mgd2l0aCBmbGF0IGZpbGUgc3RvcmFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKTogQ2FsbCBkZWxldGVU
YWJsZXMoKSBpbnN0ZWFkIG9mIAorICAgICAgICAgICAgY2xlYXJBbGxUYWJsZXMoKSBkaXJlY3Rs
eS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVUYWJs
ZXMpOiBDYWxsIGVtcHR5KCkgYmVmb3JlIGRlbGV0aW5nIHRoZSB0YWJsZXMsCisgICAgICAgICAg
ICBzbyB0aGF0IGZsYXQgZmlsZXMgZ2V0IGRlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6c2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZpbGUpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFU
b1VuaXF1ZUZpbGVJbkRpcmVjdG9yeSk6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oOgorCisyMDExLTAyLTAzICBKZXIgTm9ibGUgIDxq
ZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFwcGxpY2F0aW9uIENhY2hlIHNob3VsZCBzYXZlIGF1ZGlvLyBhbmQgdmlk
ZW8vIG1pbWUgdHlwZXMgYXMgZmxhdCBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg5MzI0
NzM+CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZTo6Y3JlYXRlKCkgbm93IHRha2VzIGFuIGFkZGl0aW9uYWwgInBhdGgiIHBhcmFtZXRl
ci4gIFRvIGZhY2lsaXRhdGUgCiAgICAgICAgIGV4dHJhY3RpbmcgdGhpcyBwYXRoIGluZm9ybWF0
aW9uLCB0d28gZnVuY3Rpb25zIGluIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IGhhdmUgYmVlbiBtYWRl
IHB1YmxpYy4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggMGMwMGVlNi4uNGI4N2EzZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0zNywxMiArMzcsMTUgQEAKICNpbmNsdWRlICJTUUxpdGVT
dGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVVVJRC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0
cmluZ0V4dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCitzdGF0aWMgY29uc3QgY2hh
ciogY29uc3Qga0ZsYXRGaWxlU3ViZGlyZWN0b3J5ID0gIkFwcGxpY2F0aW9uQ2FjaGUiOworCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlIDxjbGFzcyBUPgpAQCAtMzg0LDcgKzM4Nyw3
IEBAIGludDY0X3QgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNwYWNlTmVlZGVkKGludDY0X3Qg
Y2FjaGVUb1NhdmUpCiAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX2NhY2hlRmlsZSwgZmlsZVNpemUp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludDY0X3QgY3VycmVudFNpemUgPSBmaWxlU2l6
ZTsKKyAgICBpbnQ2NF90IGN1cnJlbnRTaXplID0gZmlsZVNpemUgKyBmbGF0RmlsZUFyZWFTaXpl
KCk7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHdlIGhhdmUg
YXZhaWxhYmxlLgogICAgIGludDY0X3QgdG90YWxBdmFpbGFibGVTaXplID0gMDsKQEAgLTU1MCw3
ICs1NTMsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29tbWFu
ZChjb25zdCBTdHJpbmcmIHNxbCkKIC8vIFVwZGF0ZSB0aGUgc2NoZW1hVmVyc2lvbiB3aGVuIHRo
ZSBzY2hlbWEgb2YgYW55IHRoZSBBcHBsaWNhdGlvbiBDYWNoZQogLy8gU1FMaXRlIHRhYmxlcyBj
aGFuZ2VzLiBUaGlzIGFsbG93cyB0aGUgZGF0YWJhc2UgdG8gYmUgcmVidWlsdCB3aGVuCiAvLyBh
IG5ldywgaW5jb21wYXRpYmxlIGNoYW5nZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIHRoZSBkYXRh
YmFzZSBzY2hlbWEuCi1zdGF0aWMgY29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSA2Oworc3RhdGlj
IGNvbnN0IGludCBzY2hlbWFWZXJzaW9uID0gNzsKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogewpAQCAtNTU4LDcgKzU2MSw3IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIGlm
ICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0
YWJhc2UuY2xlYXJBbGxUYWJsZXMoKTsKKyAgICBkZWxldGVUYWJsZXMoKTsKIAogICAgIC8vIFVw
ZGF0ZSB1c2VyIHZlcnNpb24uCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc2V0RGF0YWJhc2VWZXJz
aW9uKG1fZGF0YWJhc2UpOwpAQCAtNjA4LDcgKzYxMSw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgIGV4
ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZUVudHJpZXMg
KGNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgdHlwZSBJTlRFR0VSLCBy
ZXNvdXJjZSBJTlRFR0VSIE5PVCBOVUxMKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVB
VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNlcyAoaWQgSU5URUdFUiBQUklNQVJZ
IEtFWSBBVVRPSU5DUkVNRU5ULCB1cmwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAi
CiAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1c0NvZGUgSU5URUdFUiBOT1QgTlVMTCwgcmVz
cG9uc2VVUkwgVEVYVCBOT1QgTlVMTCwgbWltZVR5cGUgVEVYVCwgdGV4dEVuY29kaW5nTmFtZSBU
RVhULCBoZWFkZXJzIFRFWFQsIGRhdGEgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
KSIpOwotICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBD
YWNoZVJlc291cmNlRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBk
YXRhIEJMT0IpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIENhY2hlUmVzb3VyY2VEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNS
RU1FTlQsIGRhdGEgQkxPQiwgcGF0aCBURVhUKSIpOworICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKGlkIElOVEVH
RVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgcGF0aCBURVhUKSIpOwogICAgIGV4ZWN1dGVT
UUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBPcmlnaW5zIChvcmlnaW4gVEVY
VCBVTklRVUUgT04gQ09ORkxJQ1QgSUdOT1JFLCBxdW90YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwpIik7CiAKICAgICAvLyBXaGVuIGEgY2FjaGUgaXMgZGVsZXRlZCwgYWxsIGl0
cyBlbnRyaWVzIGFuZCBpdHMgd2hpdGVsaXN0IHNob3VsZCBiZSBkZWxldGVkLgpAQCAtNjMxLDYg
KzYzNSwxNSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UoYm9v
bCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAiIEZPUiBFQUNI
IFJPVyBCRUdJTiIKICAgICAgICAgICAgICAgICAgICAgICAiICBERUxFVEUgRlJPTSBDYWNoZVJl
c291cmNlRGF0YSBXSEVSRSBpZCA9IE9MRC5kYXRhOyIKICAgICAgICAgICAgICAgICAgICAgICAi
IEVORCIpOworICAgIAorICAgIC8vIFdoZW4gYSBjYWNoZSByZXNvdXJjZSBpcyBkZWxldGVkLCBp
ZiBpdCBjb250YWlucyBhIG5vbi1lbXB0eSBwYXRoLCB0aGF0IHBhdGggc2hvdWxkCisgICAgLy8g
YmUgYWRkZWQgdG8gdGhlIERlbGV0ZWRDYWNoZVJlc291cmNlcyB0YWJsZSBzbyB0aGUgZmxhdCBm
aWxlIGF0IHRoYXQgcGF0aCBjYW4KKyAgICAvLyBiZSBkZWxldGVkIGF0IGEgbGF0ZXIgdGltZS4K
KyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRSSUdHRVIgSUYgTk9UIEVYSVNUUyBDYWNo
ZVJlc291cmNlRGF0YURlbGV0ZWQgQUZURVIgREVMRVRFIE9OIENhY2hlUmVzb3VyY2VEYXRhIgor
ICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIgorICAgICAgICAgICAgICAgICAg
ICAgICIgV0hFTiBPTEQucGF0aCBOT1QgTlVMTCBCRUdJTiIKKyAgICAgICAgICAgICAgICAgICAg
ICAiICBJTlNFUlQgSU5UTyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKHBhdGgpIHZhbHVlcyAoT0xE
LnBhdGgpOyIKKyAgICAgICAgICAgICAgICAgICAgICAiIEVORCIpOwogfQogCiBib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3Rh
dGVtZW50KQpAQCAtNzYyLDE1ICs3NzUsNDAgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAg
IFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBD
YWNoZVJlc291cmNlRGF0YSAoZGF0YSkgVkFMVUVTICg/KSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0
YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSIpOwogICAgIGlmIChkYXRhU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGlmIChyZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpCi0gICAgICAgIGRhdGFTdGF0ZW1lbnQuYmlu
ZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLT5zaXpl
KCkpOworCisgICAgU3RyaW5nIGZ1bGxQYXRoOworICAgIGlmIChzaG91bGRTdG9yZVJlc291cmNl
QXNGbGF0RmlsZShyZXNvdXJjZSkpIHsKKyAgICAgICAgLy8gRmlyc3QsIGNoZWNrIHRvIHNlZSBp
ZiBjcmVhdGluZyB0aGUgZmxhdCBmaWxlIHdvdWxkIHZpb2xhdGUgdGhlIG1heGltdW0gdG90YWwg
cXVvdGEuICBXZSBkb24ndCBuZWVkCisgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBwZXItb3JpZ2lu
IHF1b3RlIGhlcmUsIGFzIGl0IHdhcyBhbHJlYWR5IGNoZWNrZWQgaW4gc3RvcmVOZXdlc3RDYWNo
ZSgpLgorICAgICAgICBpZiAobV9kYXRhYmFzZS50b3RhbFNpemUoKSArIGZsYXRGaWxlQXJlYVNp
emUoKSArIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSA+IG1fbWF4aW11bVNpemUpIHsKKyAgICAg
ICAgICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAg
ICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1f
Y2FjaGVEaXJlY3RvcnksIGtGbGF0RmlsZVN1YmRpcmVjdG9yeSk7CisgICAgICAgIG1ha2VBbGxE
aXJlY3RvcmllcyhmbGF0RmlsZURpcmVjdG9yeSk7CisgICAgICAgIGlmICghd3JpdGVEYXRhVG9V
bmlxdWVGaWxlSW5EaXJlY3RvcnkocmVzb3VyY2UtPmRhdGEoKSwgZmxhdEZpbGVEaXJlY3Rvcnks
IHBhdGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZnVs
bFBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgp
OworICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIsIHBhdGgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChyZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpCisgICAgICAgICAgICBkYXRh
U3RhdGVtZW50LmJpbmRCbG9iKDEsIHJlc291cmNlLT5kYXRhKCktPmRhdGEoKSwgcmVzb3VyY2Ut
PmRhdGEoKS0+c2l6ZSgpKTsKKyAgICB9CiAgICAgCi0gICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4
ZWN1dGVDb21tYW5kKCkpCisgICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkp
IHsKKyAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2ggd2UgbWF5IGhhdmUgd3JpdHRl
biB0bzoKKyAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBkZWxl
dGVGaWxlKGZ1bGxQYXRoKTsKKwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAg
dW5zaWduZWQgZGF0YUlkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdElu
c2VydFJvd0lEKCkpOwogCkBAIC04NTEsNyArODg5LDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGlj
YXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogIAogICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQg
PSBmYWxzZTsKLSAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUpOwor
ICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6ZSAtIGZsYXRGaWxlQXJl
YVNpemUoKSk7CiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZVJlc291cmNlVHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CiAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLmJlZ2luKCk7CkBA
IC04OTgsNyArOTM2LDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdl
c3RDYWNoZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBBcHAKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9IGZhbHNlOwotICAgIG1fZGF0
YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6ZSk7CisgICAgbV9kYXRhYmFzZS5zZXRN
YXhpbXVtU2l6ZShtX21heGltdW1TaXplIC0gZmxhdEZpbGVBcmVhU2l6ZSgpKTsKIAogICAgIFNR
TGl0ZVRyYW5zYWN0aW9uIHN0b3JlQ2FjaGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAK
QEAgLTk5OCw3ICsxMDM2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHBhcnNlSGVhZGVycyhjb25z
dCBTdHJpbmcmIGhlYWRlcnMsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnMKIFBhc3NSZWZQdHI8
QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNp
Z25lZCBzdG9yYWdlSUQpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVy
bCwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3Vy
Y2VEYXRhLmRhdGEgRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBP
TiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgdHlwZSwgbWltZVR5cGUsIHRleHRF
bmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3Vy
Y2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBP
TiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBD
YWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmll
cy5jYWNoZT0/Iik7CiAgICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJlIGNhY2hlIHN0YXRl
bWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMDA4
LDcgKzEwNDYsOSBAQCBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZQogICAgIGNhY2hlU3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOwogCiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+
IGNhY2hlID0gQXBwbGljYXRpb25DYWNoZTo6Y3JlYXRlKCk7Ci0gICAgCisKKyAgICBTdHJpbmcg
ZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVj
dG9yeSwga0ZsYXRGaWxlU3ViZGlyZWN0b3J5KTsKKwogICAgIGludCByZXN1bHQ7CiAgICAgd2hp
bGUgKChyZXN1bHQgPSBjYWNoZVN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykgewog
ICAgICAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIGNhY2hlU3RhdGVtZW50LmdldENvbHVt
blRleHQoMCkpOwpAQCAtMTAyMCwxNSArMTA2MCwyNCBAQCBQYXNzUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFn
ZQogICAgICAgICAKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IFNoYXJlZEJ1
ZmZlcjo6YWRvcHRWZWN0b3IoYmxvYik7CiAgICAgICAgIAorICAgICAgICBTdHJpbmcgcGF0aCA9
IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNik7CisgICAgICAgIGxvbmcgbG9uZyBzaXpl
ID0gMDsKKyAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAgc2l6ZSA9IGRh
dGEtPnNpemUoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXRoID0gcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgICAgIGdl
dEZpbGVTaXplKHBhdGgsIHNpemUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBTdHJp
bmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDIpOwogICAgICAgICBT
dHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoMyk7
CiAgICAgICAgIAotICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWltZVR5
cGUsIGRhdGEtPnNpemUoKSwgdGV4dEVuY29kaW5nTmFtZSwgIiIpOworICAgICAgICBSZXNvdXJj
ZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWltZVR5cGUsIHNpemUsIHRleHRFbmNvZGluZ05hbWUs
ICIiKTsKIAogICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVt
blRleHQoNCk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAg
ICAgIAotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgcmVzcG9uc2UsIHR5cGUsIGRh
dGEucmVsZWFzZSgpKTsKKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4g
cmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIHJlc3BvbnNl
LCB0eXBlLCBkYXRhLnJlbGVhc2UoKSwgcGF0aCk7CiAKICAgICAgICAgaWYgKHR5cGUgJiBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hbmlmZXN0KQogICAgICAgICAgICAgY2FjaGUtPnNldE1h
bmlmZXN0UmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKQEAgLTExMjIsNiArMTE3MSw4IEBA
IHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnJlbW92ZShBcHBsaWNhdGlvbkNhY2hlKiBj
YWNoZSkKIAogICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+Y2xlYXJTdG9yYWdlSUQoKTsKICAgICB9
CisgICAgCisgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9ICAgIAogCiB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCkBAIC0xMTQyLDcgKzExOTMsNTEgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQogICAgIENhY2hlR3JvdXBNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNo
ZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQogICAgICAgICBpdC0+c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOwot
fSAgICAKKyAgICAKKyAgICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKK30KKyAgICAKK3Zv
aWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZVRhYmxlcygpCit7CisgICAgZW1wdHko
KTsKKyAgICBtX2RhdGFiYXNlLmNsZWFyQWxsVGFibGVzKCk7Cit9CisgICAgCitib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0RmlsZShBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIHJldHVybiByZXNvdXJjZS0+cmVz
cG9uc2UoKS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoImF1ZGlvLyIsIGZhbHNlKSAKKyAgICAgICAg
fHwgcmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKS5zdGFydHNXaXRoKCJ2aWRlby8iLCBm
YWxzZSk7Cit9CisgICAgCitib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFU
b1VuaXF1ZUZpbGVJbkRpcmVjdG9yeShTaGFyZWRCdWZmZXIqIGRhdGEsIGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5LCBTdHJpbmcmIHBhdGgpCit7CisgICAgU3RyaW5nIGZ1bGxQYXRoOworICAgIAor
ICAgIGRvIHsKKyAgICAgICAgcGF0aCA9IGVuY29kZUZvckZpbGVOYW1lKGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSk7CisgICAgICAgIC8vIEd1YXJkIGFnYWluc3QgdGhlIGFib3ZlIGZ1bmN0
aW9uIGJlaW5nIGNhbGxlZCBvbiBhIHBsYXRmb3JtIHdoaWNoIGRvZXMgbm90IGltcGxlbWVudAor
ICAgICAgICAvLyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkuCisgICAgICAgIEFTU0VSVCgh
cGF0aC5pc0VtcHR5KCkpOworICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmdWxsUGF0aCA9IHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChkaXJlY3RvcnksIHBhdGgpOworICAgIH0gd2hpbGUgKGRpcmVjdG9yeU5h
bWUoZnVsbFBhdGgpICE9IGZsYXRGaWxlRGlyZWN0b3J5IHx8IGZpbGVFeGlzdHMoZnVsbFBhdGgp
KTsKKyAgICAKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlID0gb3BlbkZpbGUoZnVsbFBh
dGgsIE9wZW5Gb3JXcml0ZSk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBpbnQgd3JpdHRlbkJ5dGVzID0gd3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRh
LT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgY2xvc2VGaWxlKGhhbmRsZSk7CisgICAgCisg
ICAgaWYgKHdyaXR0ZW5CeXRlcyA9PSAtMSkgeworICAgICAgICBkZWxldGVGaWxlKGZ1bGxQYXRo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25z
dCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlSG9zdCogY2FjaGVIb3N0
KQogewpAQCAtMTE2MSw3ICsxMjU2LDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHAKICAgICBm
b3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNh
Y2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIAotICAgICAg
ICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkgPSBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5yZXNw
b25zZSgpLCByZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpKTsKKyAgICAgICAgUmVm
UHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2VDb3B5ID0gQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjpjcmVhdGUocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZS0+cmVzcG9uc2Uo
KSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRhdGEoKSwgcmVzb3VyY2UtPnBhdGgoKSk7
CiAgICAgICAgIAogICAgICAgICBjYWNoZUNvcHktPmFkZFJlc291cmNlKHJlc291cmNlQ29weS5y
ZWxlYXNlKCkpOwogICAgIH0KQEAgLTEyNjksNiArMTM2NCw5IEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXAoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkK
ICAgICB9CiAKICAgICBkZWxldGVUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICAKKyAgICBjaGVj
a0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTI4Niw2ICsxMzg0LDY0IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9y
TWF4U2l6ZVJlYWNoZWQoKQogICAgIGlmIChtX2RhdGFiYXNlLmxhc3RFcnJvcigpID09IFNRTFJl
c3VsdEZ1bGwpCiAgICAgICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSB0cnVlOwogfQorICAg
IAordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2Vz
KCkKK3sKKyAgICBvcGVuRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RQ
YXRocyhtX2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBEZWxldGVkQ2FjaGVSZXNvdXJjZXMi
KTsKKyAgICAKKyAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHNlbGVjdFBhdGhzLnN0ZXAoKSAhPSBTUUxS
ZXN1bHRSb3cpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBkbyB7CisgICAgICAgIFN0cmlu
ZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBTdHJp
bmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURp
cmVjdG9yeSwga0ZsYXRGaWxlU3ViZGlyZWN0b3J5KTsKKyAgICAgICAgU3RyaW5nIGZ1bGxQYXRo
ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIERvbid0IGV4aXQgdGhlIGZsYXRGaWxlRGlyZWN0b3J5ISAgVGhp
cyBzaG91bGQgb25seSBoYXBwZW4gaWYgc29tZW9uZSB0YW1wZXJzIAorICAgICAgICAvLyB3aXRo
IHRoZSBBcHBsaWNhdGlvbkNhY2hlIGRhdGFiYXNlLCBidXQgcHJvdGVjdCBhZ2FpbnN0IGl0IHJl
Z2FyZGxlc3MuCisgICAgICAgIGlmIChkaXJlY3RvcnlOYW1lKGZ1bGxQYXRoKSAhPSBmbGF0Rmls
ZURpcmVjdG9yeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZGVs
ZXRlRmlsZShmdWxsUGF0aCk7CisgICAgfSB3aGlsZSAoc2VsZWN0UGF0aHMuc3RlcCgpID09IFNR
TFJlc3VsdFJvdyk7CisgICAgCisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkRFTEVURSBGUk9NIERl
bGV0ZWRDYWNoZVJlc291cmNlcyIpOworfQorICAgIAorbG9uZyBsb25nIEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpmbGF0RmlsZUFyZWFTaXplKCkKK3sKKyAgICBvcGVuRGF0YWJhc2UoZmFsc2Up
OworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgbG9uZyBsb25nIHRvdGFsU2l6ZSA9IDA7CisgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0
b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksIGtGbGF0Rmls
ZVN1YmRpcmVjdG9yeSk7CisgICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFBhdGhzKG1fZGF0YWJh
c2UsICJTRUxFQ1QgcGF0aCBGUk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJFIHBhdGggTk9UIE5V
TEwiKTsKKworICAgIGlmIChzZWxlY3RQYXRocy5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisg
ICAgICAgIHJldHVybiAwOworCisgICAgd2hpbGUgKHNlbGVjdFBhdGhzLnN0ZXAoKSA9PSBTUUxS
ZXN1bHRSb3cpIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBzZWxlY3RQYXRocy5nZXRDb2x1bW5U
ZXh0KDApOworICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOworICAgICAgICBsb25nIGxvbmcgcGF0aFNpemUg
PSAwOworICAgICAgICBpZiAoIWdldEZpbGVTaXplKGZ1bGxQYXRoLCBwYXRoU2l6ZSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdG90YWxTaXplICs9IHBhdGhTaXplOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gdG90YWxTaXplOworfQogCiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKSAKICAgICA6IG1fbWF4aW11bVNpemUoQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om5vUXVvdGEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKaW5kZXggOGJmZGYx
My4uMGYyYmFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKQEAgLTEwNyw2ICsxMDcsOSBAQCBwcml2YXRl
OgogICAgIGJvb2wgc3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiwgdW5zaWduZWQgY2Fj
aGVTdG9yYWdlSUQpOwogCiAgICAgYm9vbCBlbnN1cmVPcmlnaW5SZWNvcmQoY29uc3QgU2VjdXJp
dHlPcmlnaW4qKTsKKyAgICBib29sIHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSopOworICAgIHZvaWQgZGVsZXRlVGFibGVzKCk7CisgICAgYm9v
bCB3cml0ZURhdGFUb1VuaXF1ZUZpbGVJbkRpcmVjdG9yeShTaGFyZWRCdWZmZXIqLCBjb25zdCBT
dHJpbmcmIGRpcmVjdG9yeSwgU3RyaW5nJiBvdXRGaWxlbmFtZSk7CiAKICAgICB2b2lkIGxvYWRN
YW5pZmVzdEhvc3RIYXNoZXMoKTsKICAgICAKQEAgLTExOCw2ICsxMjEsOCBAQCBwcml2YXRlOgog
ICAgIGJvb2wgZXhlY3V0ZVNRTENvbW1hbmQoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGNo
ZWNrRm9yTWF4U2l6ZVJlYWNoZWQoKTsKKyAgICB2b2lkIGNoZWNrRm9yRGVsZXRlZFJlc291cmNl
cygpOworICAgIGxvbmcgbG9uZyBmbGF0RmlsZUFyZWFTaXplKCk7CiAgICAgCiAgICAgU3RyaW5n
IG1fY2FjaGVEaXJlY3Rvcnk7CiAgICAgU3RyaW5nIG1fY2FjaGVGaWxlOwotLSAKMS43LjMuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82022</attachid>
            <date>2011-02-10 12:18:16 -0800</date>
            <delta_ts>2011-02-11 13:56:35 -0800</delta_ts>
            <desc>[2/3] Store media files as flat files within the Application Cache area.</desc>
            <filename>0002-Application-Cache-should-save-audio-and-video-mime-t.patch</filename>
            <type>text/plain</type>
            <size>19999</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSBhM2Y5NjIyYzhhYWY2NDYyNzkzODcyZGJhN2MxNzEzYjRiODk3YTAzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBhcHBsZS5jb20+CkRhdGU6
IFR1ZSwgOCBGZWIgMjAxMSAxNDoyMTo0MiAtMDgwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSBBcHBs
aWNhdGlvbiBDYWNoZSBzaG91bGQgc2F2ZSBhdWRpby8gYW5kIHZpZGVvLyBtaW1lIHR5cGVzIGFz
IGZsYXQgZmlsZXMKIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzc4
NAogPHJkYXI6Ly9wcm9ibGVtLzg5MzI0NzM+CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
Ck5vIG5ldyB0ZXN0cy4KClN0b3JlIGNlcnRhaW4gbWltZSB0eXBlcyBhcyBmbGF0IGZpbGVzIGFs
b25nc2lkZSB0aGUgQXBwbGljYXRpb24gQ2FjaGUgZGF0YWJhc2UuClRoaXMgcmVxdWlyZXMgcGx1
bWJpbmcgdGhlIHNhdmVkIGZpbGUgcGF0aCBmcm9tIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIHRo
cm91Z2gKdG8gQXBwbGljYXRpb25DYWNoZVJlc291cmNlLgoKKFdlYkNvcmU6OkFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VEYXRh
IHNjaGVtYSBhbmQKICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFibGUsIGFk
ZCBhIG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUgbmV3IHBhdGggZGF0YSB3aGVuIGFk
ZGluZyBuZXcgcm93cyBpbgogICAgQ2FjaGVSZXNvdXJjZURhdGEsIGFuZCBzdG9yZSBtZWRpYSBy
ZXNvdXJjZXMgYXMgZmxhdCBmaWxlcy4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
Ojpsb2FkQ2FjaGUpOiBQdWxsIHRoZSAicGF0aCIgY29sdW1uIGZyb20gQ2FjaGVSZXNvdXJjZURh
dGEKICAgIHdoZW4gbG9hZGluZyBjYWNoZSBpdGVtcy4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpyZW1vdmUpOiBDYWxsIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcy4KKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6IERpdHRvLgooV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUpOiBEaXR0by4KKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVDYWNoZUdyb3VwKTogRGl0dG8uCihXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKTog
V2FsayB0aHJvdWdoIERlbGV0ZWRDYWNoZVJlc291cmNlRGF0YQogICAgbG9va2luZyBmb3IgZW50
cmllcyB3aXRoIG5vbi1lbXB0eSAicGF0aCIgY29sdW1uczsgaWYgZm91bmQsIGRlbGV0ZS4KKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmbGF0RmlsZUFyZWFTaXplKTogV2FsayB0
aHJvdWdoIENhY2hlUmVzb3VyY2VEYXRhIHJvd3MKICAgIGFuZCBzdW0gdGhlIGZpbGUgc2l6ZSBv
ZiB0aG9zZSByb3dzIHdpdGggZmxhdCBmaWxlIHN0b3JhZ2UuCihXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbik6IENhbGwgZGVsZXRlVGFibGVzKCkg
aW5zdGVhZCBvZgogICAgY2xlYXJBbGxUYWJsZXMoKSBkaXJlY3RseS4KKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVUYWJsZXMpOiBDYWxsIGVtcHR5KCkgYmVmb3JlIGRl
bGV0aW5nIHRoZSB0YWJsZXMsCiAgICBzbyB0aGF0IGZsYXQgZmlsZXMgZ2V0IGRlbGV0ZWQuCihX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxh
dEZpbGUpOiBBZGRlZC4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURh
dGFUb1VuaXF1ZUZpbGVJbkRpcmVjdG9yeSk6IEFkZGVkLgoqIGxvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5oOgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAzNiArKysrCiAuLi4vbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCAgICB8ICAxODggKysrKysrKysrKysrKysrKysrLS0K
IC4uLi9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCAgICAgIHwgICAg
NSArCiAzIGZpbGVzIGNoYW5nZWQsIDIxMyBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggYWIzYTM0OC4uODllODlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtOCw2ICs4LDQy
IEBACiAKICAgICAgICAgTm8gbmV3IHRlc3RzLgogCisgICAgICAgIFN0b3JlIGNlcnRhaW4gbWlt
ZSB0eXBlcyBhcyBmbGF0IGZpbGVzIGFsb25nc2lkZSB0aGUgQXBwbGljYXRpb24gQ2FjaGUgZGF0
YWJhc2UuCisgICAgICAgIFRoaXMgcmVxdWlyZXMgcGx1bWJpbmcgdGhlIHNhdmVkIGZpbGUgcGF0
aCBmcm9tIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIHRocm91Z2gKKyAgICAgICAgdG8gQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLgorCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6b3BlbkRhdGFiYXNlKTogTW9kaWZ5IHRoZSBDYWNoZVJlc291cmNlRGF0YSBzY2hl
bWEgYW5kCisgICAgICAgICAgICBhZGQgYSBuZXcgRGVsZXRlZENhY2hlUmVzb3VyY2VzIHRhYmxl
LCBhZGQgYSBuZXcgQ2FjaGVSZXNvdXJjZURhdGFEZWxldGVkIHRyaWdnZXIuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOiBBZGQgdGhlIG5ldyBwYXRo
IGRhdGEgd2hlbiBhZGRpbmcgbmV3IHJvd3MgaW4gCisgICAgICAgICAgICBDYWNoZVJlc291cmNl
RGF0YSwgYW5kIHN0b3JlIG1lZGlhIHJlc291cmNlcyBhcyBmbGF0IGZpbGVzLgorICAgICAgICAo
V2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSk6IFB1bGwgdGhlICJw
YXRoIiBjb2x1bW4gZnJvbSBDYWNoZVJlc291cmNlRGF0YQorICAgICAgICAgICAgd2hlbiBsb2Fk
aW5nIGNhY2hlIGl0ZW1zLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnJlbW92ZSk6IENhbGwgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzLgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hl
R3JvdXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMpOiBXYWxrIHRocm91Z2ggRGVsZXRlZENhY2hlUmVz
b3VyY2VEYXRhCisgICAgICAgICAgICBsb29raW5nIGZvciBlbnRyaWVzIHdpdGggbm9uLWVtcHR5
ICJwYXRoIiBjb2x1bW5zOyBpZiBmb3VuZCwgZGVsZXRlLgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUpOiBXYWxrIHRocm91Z2ggQ2Fj
aGVSZXNvdXJjZURhdGEgcm93cworICAgICAgICAgICAgYW5kIHN1bSB0aGUgZmlsZSBzaXplIG9m
IHRob3NlIHJvd3Mgd2l0aCBmbGF0IGZpbGUgc3RvcmFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKTogQ2FsbCBkZWxldGVU
YWJsZXMoKSBpbnN0ZWFkIG9mIAorICAgICAgICAgICAgY2xlYXJBbGxUYWJsZXMoKSBkaXJlY3Rs
eS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVUYWJs
ZXMpOiBDYWxsIGVtcHR5KCkgYmVmb3JlIGRlbGV0aW5nIHRoZSB0YWJsZXMsCisgICAgICAgICAg
ICBzbyB0aGF0IGZsYXQgZmlsZXMgZ2V0IGRlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6c2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZpbGUpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFU
b1VuaXF1ZUZpbGVJbkRpcmVjdG9yeSk6IEFkZGVkLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oOgorCisyMDExLTAyLTAzICBKZXIgTm9ibGUgIDxq
ZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFwcGxpY2F0aW9uIENhY2hlIHNob3VsZCBzYXZlIGF1ZGlvLyBhbmQgdmlk
ZW8vIG1pbWUgdHlwZXMgYXMgZmxhdCBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM3ODQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg5MzI0
NzM+CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZTo6Y3JlYXRlKCkgbm93IHRha2VzIGFuIGFkZGl0aW9uYWwgInBhdGgiIHBhcmFtZXRl
ci4gIFRvIGZhY2lsaXRhdGUgCiAgICAgICAgIGV4dHJhY3RpbmcgdGhpcyBwYXRoIGluZm9ybWF0
aW9uLCB0d28gZnVuY3Rpb25zIGluIEFwcGxpY2F0aW9uQ2FjaGVIb3N0IGhhdmUgYmVlbiBtYWRl
IHB1YmxpYy4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggMGMwMGVlNi4uYTE3MmRhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0zNywxMiArMzcsMTUgQEAKICNpbmNsdWRlICJTUUxpdGVT
dGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVVVJRC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0
cmluZ0V4dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCitzdGF0aWMgY29uc3QgY2hh
ciogY29uc3Qga0ZsYXRGaWxlU3ViZGlyZWN0b3J5ID0gIkFwcGxpY2F0aW9uQ2FjaGUiOworCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlIDxjbGFzcyBUPgpAQCAtMzg0LDcgKzM4Nyw3
IEBAIGludDY0X3QgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNwYWNlTmVlZGVkKGludDY0X3Qg
Y2FjaGVUb1NhdmUpCiAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX2NhY2hlRmlsZSwgZmlsZVNpemUp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludDY0X3QgY3VycmVudFNpemUgPSBmaWxlU2l6
ZTsKKyAgICBpbnQ2NF90IGN1cnJlbnRTaXplID0gZmlsZVNpemUgKyBmbGF0RmlsZUFyZWFTaXpl
KCk7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHdlIGhhdmUg
YXZhaWxhYmxlLgogICAgIGludDY0X3QgdG90YWxBdmFpbGFibGVTaXplID0gMDsKQEAgLTU1MCw3
ICs1NTMsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29tbWFu
ZChjb25zdCBTdHJpbmcmIHNxbCkKIC8vIFVwZGF0ZSB0aGUgc2NoZW1hVmVyc2lvbiB3aGVuIHRo
ZSBzY2hlbWEgb2YgYW55IHRoZSBBcHBsaWNhdGlvbiBDYWNoZQogLy8gU1FMaXRlIHRhYmxlcyBj
aGFuZ2VzLiBUaGlzIGFsbG93cyB0aGUgZGF0YWJhc2UgdG8gYmUgcmVidWlsdCB3aGVuCiAvLyBh
IG5ldywgaW5jb21wYXRpYmxlIGNoYW5nZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIHRoZSBkYXRh
YmFzZSBzY2hlbWEuCi1zdGF0aWMgY29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSA2Oworc3RhdGlj
IGNvbnN0IGludCBzY2hlbWFWZXJzaW9uID0gNzsKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogewpAQCAtNTU4LDcgKzU2MSw3IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIGlm
ICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0
YWJhc2UuY2xlYXJBbGxUYWJsZXMoKTsKKyAgICBkZWxldGVUYWJsZXMoKTsKIAogICAgIC8vIFVw
ZGF0ZSB1c2VyIHZlcnNpb24uCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc2V0RGF0YWJhc2VWZXJz
aW9uKG1fZGF0YWJhc2UpOwpAQCAtNjA4LDcgKzYxMSw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgIGV4
ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZUVudHJpZXMg
KGNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgdHlwZSBJTlRFR0VSLCBy
ZXNvdXJjZSBJTlRFR0VSIE5PVCBOVUxMKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVB
VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNlcyAoaWQgSU5URUdFUiBQUklNQVJZ
IEtFWSBBVVRPSU5DUkVNRU5ULCB1cmwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAi
CiAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1c0NvZGUgSU5URUdFUiBOT1QgTlVMTCwgcmVz
cG9uc2VVUkwgVEVYVCBOT1QgTlVMTCwgbWltZVR5cGUgVEVYVCwgdGV4dEVuY29kaW5nTmFtZSBU
RVhULCBoZWFkZXJzIFRFWFQsIGRhdGEgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
KSIpOwotICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBD
YWNoZVJlc291cmNlRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBk
YXRhIEJMT0IpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIENhY2hlUmVzb3VyY2VEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNS
RU1FTlQsIGRhdGEgQkxPQiwgcGF0aCBURVhUKSIpOworICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKGlkIElOVEVH
RVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgcGF0aCBURVhUKSIpOwogICAgIGV4ZWN1dGVT
UUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBPcmlnaW5zIChvcmlnaW4gVEVY
VCBVTklRVUUgT04gQ09ORkxJQ1QgSUdOT1JFLCBxdW90YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwpIik7CiAKICAgICAvLyBXaGVuIGEgY2FjaGUgaXMgZGVsZXRlZCwgYWxsIGl0
cyBlbnRyaWVzIGFuZCBpdHMgd2hpdGVsaXN0IHNob3VsZCBiZSBkZWxldGVkLgpAQCAtNjMxLDYg
KzYzNSwxNSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UoYm9v
bCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAiIEZPUiBFQUNI
IFJPVyBCRUdJTiIKICAgICAgICAgICAgICAgICAgICAgICAiICBERUxFVEUgRlJPTSBDYWNoZVJl
c291cmNlRGF0YSBXSEVSRSBpZCA9IE9MRC5kYXRhOyIKICAgICAgICAgICAgICAgICAgICAgICAi
IEVORCIpOworICAgIAorICAgIC8vIFdoZW4gYSBjYWNoZSByZXNvdXJjZSBpcyBkZWxldGVkLCBp
ZiBpdCBjb250YWlucyBhIG5vbi1lbXB0eSBwYXRoLCB0aGF0IHBhdGggc2hvdWxkCisgICAgLy8g
YmUgYWRkZWQgdG8gdGhlIERlbGV0ZWRDYWNoZVJlc291cmNlcyB0YWJsZSBzbyB0aGUgZmxhdCBm
aWxlIGF0IHRoYXQgcGF0aCBjYW4KKyAgICAvLyBiZSBkZWxldGVkIGF0IGEgbGF0ZXIgdGltZS4K
KyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRSSUdHRVIgSUYgTk9UIEVYSVNUUyBDYWNo
ZVJlc291cmNlRGF0YURlbGV0ZWQgQUZURVIgREVMRVRFIE9OIENhY2hlUmVzb3VyY2VEYXRhIgor
ICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIgorICAgICAgICAgICAgICAgICAg
ICAgICIgV0hFTiBPTEQucGF0aCBOT1QgTlVMTCBCRUdJTiIKKyAgICAgICAgICAgICAgICAgICAg
ICAiICBJTlNFUlQgSU5UTyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKHBhdGgpIHZhbHVlcyAoT0xE
LnBhdGgpOyIKKyAgICAgICAgICAgICAgICAgICAgICAiIEVORCIpOwogfQogCiBib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3Rh
dGVtZW50KQpAQCAtNzYyLDE1ICs3NzUsNDAgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAg
IFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBD
YWNoZVJlc291cmNlRGF0YSAoZGF0YSkgVkFMVUVTICg/KSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0
YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSIpOwogICAgIGlmIChkYXRhU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGlmIChyZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpCi0gICAgICAgIGRhdGFTdGF0ZW1lbnQuYmlu
ZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLT5zaXpl
KCkpOworCisgICAgU3RyaW5nIGZ1bGxQYXRoOworICAgIGlmIChzaG91bGRTdG9yZVJlc291cmNl
QXNGbGF0RmlsZShyZXNvdXJjZSkpIHsKKyAgICAgICAgLy8gRmlyc3QsIGNoZWNrIHRvIHNlZSBp
ZiBjcmVhdGluZyB0aGUgZmxhdCBmaWxlIHdvdWxkIHZpb2xhdGUgdGhlIG1heGltdW0gdG90YWwg
cXVvdGEuICBXZSBkb24ndCBuZWVkCisgICAgICAgIC8vIHRvIGNoZWNrIHRoZSBwZXItb3JpZ2lu
IHF1b3RlIGhlcmUsIGFzIGl0IHdhcyBhbHJlYWR5IGNoZWNrZWQgaW4gc3RvcmVOZXdlc3RDYWNo
ZSgpLgorICAgICAgICBpZiAobV9kYXRhYmFzZS50b3RhbFNpemUoKSArIGZsYXRGaWxlQXJlYVNp
emUoKSArIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSA+IG1fbWF4aW11bVNpemUpIHsKKyAgICAg
ICAgICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAg
ICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1f
Y2FjaGVEaXJlY3RvcnksIGtGbGF0RmlsZVN1YmRpcmVjdG9yeSk7CisgICAgICAgIG1ha2VBbGxE
aXJlY3RvcmllcyhmbGF0RmlsZURpcmVjdG9yeSk7CisgICAgICAgIGlmICghd3JpdGVEYXRhVG9V
bmlxdWVGaWxlSW5EaXJlY3RvcnkocmVzb3VyY2UtPmRhdGEoKSwgZmxhdEZpbGVEaXJlY3Rvcnks
IHBhdGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZnVs
bFBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgp
OworICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIsIHBhdGgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChyZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpCisgICAgICAgICAgICBkYXRh
U3RhdGVtZW50LmJpbmRCbG9iKDEsIHJlc291cmNlLT5kYXRhKCktPmRhdGEoKSwgcmVzb3VyY2Ut
PmRhdGEoKS0+c2l6ZSgpKTsKKyAgICB9CiAgICAgCi0gICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4
ZWN1dGVDb21tYW5kKCkpCisgICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkp
IHsKKyAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2ggd2UgbWF5IGhhdmUgd3JpdHRl
biB0bzoKKyAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBkZWxl
dGVGaWxlKGZ1bGxQYXRoKTsKKwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAg
dW5zaWduZWQgZGF0YUlkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdElu
c2VydFJvd0lEKCkpOwogCkBAIC04NTEsNyArODg5LDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGlj
YXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogIAogICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQg
PSBmYWxzZTsKLSAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUpOwor
ICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6ZSAtIGZsYXRGaWxlQXJl
YVNpemUoKSk7CiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZVJlc291cmNlVHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CiAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLmJlZ2luKCk7CkBA
IC04OTgsNyArOTM2LDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdl
c3RDYWNoZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBBcHAKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9IGZhbHNlOwotICAgIG1fZGF0
YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6ZSk7CisgICAgbV9kYXRhYmFzZS5zZXRN
YXhpbXVtU2l6ZShtX21heGltdW1TaXplIC0gZmxhdEZpbGVBcmVhU2l6ZSgpKTsKIAogICAgIFNR
TGl0ZVRyYW5zYWN0aW9uIHN0b3JlQ2FjaGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICAK
QEAgLTk5OCw3ICsxMDM2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHBhcnNlSGVhZGVycyhjb25z
dCBTdHJpbmcmIGhlYWRlcnMsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnMKIFBhc3NSZWZQdHI8
QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNp
Z25lZCBzdG9yYWdlSUQpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVy
bCwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3Vy
Y2VEYXRhLmRhdGEgRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBP
TiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgdHlwZSwgbWltZVR5cGUsIHRleHRF
bmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3Vy
Y2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBP
TiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBD
YWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmll
cy5jYWNoZT0/Iik7CiAgICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJlIGNhY2hlIHN0YXRl
bWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMDA4
LDcgKzEwNDYsOSBAQCBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZQogICAgIGNhY2hlU3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOwogCiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+
IGNhY2hlID0gQXBwbGljYXRpb25DYWNoZTo6Y3JlYXRlKCk7Ci0gICAgCisKKyAgICBTdHJpbmcg
ZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVj
dG9yeSwga0ZsYXRGaWxlU3ViZGlyZWN0b3J5KTsKKwogICAgIGludCByZXN1bHQ7CiAgICAgd2hp
bGUgKChyZXN1bHQgPSBjYWNoZVN0YXRlbWVudC5zdGVwKCkpID09IFNRTFJlc3VsdFJvdykgewog
ICAgICAgICBLVVJMIHVybChQYXJzZWRVUkxTdHJpbmcsIGNhY2hlU3RhdGVtZW50LmdldENvbHVt
blRleHQoMCkpOwpAQCAtMTAyMCwxNSArMTA2MCwyNCBAQCBQYXNzUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFn
ZQogICAgICAgICAKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IFNoYXJlZEJ1
ZmZlcjo6YWRvcHRWZWN0b3IoYmxvYik7CiAgICAgICAgIAorICAgICAgICBTdHJpbmcgcGF0aCA9
IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNik7CisgICAgICAgIGxvbmcgbG9uZyBzaXpl
ID0gMDsKKyAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAgc2l6ZSA9IGRh
dGEtPnNpemUoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXRoID0gcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgICAgIGdl
dEZpbGVTaXplKHBhdGgsIHNpemUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBTdHJp
bmcgbWltZVR5cGUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDIpOwogICAgICAgICBT
dHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoMyk7
CiAgICAgICAgIAotICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWltZVR5
cGUsIGRhdGEtPnNpemUoKSwgdGV4dEVuY29kaW5nTmFtZSwgIiIpOworICAgICAgICBSZXNvdXJj
ZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWltZVR5cGUsIHNpemUsIHRleHRFbmNvZGluZ05hbWUs
ICIiKTsKIAogICAgICAgICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVt
blRleHQoNCk7CiAgICAgICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAg
ICAgIAotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgcmVzcG9uc2UsIHR5cGUsIGRh
dGEucmVsZWFzZSgpKTsKKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4g
cmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIHJlc3BvbnNl
LCB0eXBlLCBkYXRhLnJlbGVhc2UoKSwgcGF0aCk7CiAKICAgICAgICAgaWYgKHR5cGUgJiBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hbmlmZXN0KQogICAgICAgICAgICAgY2FjaGUtPnNldE1h
bmlmZXN0UmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKQEAgLTExMjIsNiArMTE3MSw4IEBA
IHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnJlbW92ZShBcHBsaWNhdGlvbkNhY2hlKiBj
YWNoZSkKIAogICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+Y2xlYXJTdG9yYWdlSUQoKTsKICAgICB9
CisgICAgCisgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9ICAgIAogCiB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCkBAIC0xMTQyLDcgKzExOTMsNTEgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQogICAgIENhY2hlR3JvdXBNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNo
ZUdyb3VwTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQogICAgICAgICBpdC0+c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOwot
fSAgICAKKyAgICAKKyAgICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKK30KKyAgICAKK3Zv
aWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZVRhYmxlcygpCit7CisgICAgZW1wdHko
KTsKKyAgICBtX2RhdGFiYXNlLmNsZWFyQWxsVGFibGVzKCk7Cit9CisgICAgCitib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0RmlsZShBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIHJldHVybiByZXNvdXJjZS0+cmVz
cG9uc2UoKS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoImF1ZGlvLyIsIGZhbHNlKSAKKyAgICAgICAg
fHwgcmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKS5zdGFydHNXaXRoKCJ2aWRlby8iLCBm
YWxzZSk7Cit9CisgICAgCitib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFU
b1VuaXF1ZUZpbGVJbkRpcmVjdG9yeShTaGFyZWRCdWZmZXIqIGRhdGEsIGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5LCBTdHJpbmcmIHBhdGgpCit7CisgICAgU3RyaW5nIGZ1bGxQYXRoOworICAgIAor
ICAgIGRvIHsKKyAgICAgICAgcGF0aCA9IGVuY29kZUZvckZpbGVOYW1lKGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSk7CisgICAgICAgIC8vIEd1YXJkIGFnYWluc3QgdGhlIGFib3ZlIGZ1bmN0
aW9uIGJlaW5nIGNhbGxlZCBvbiBhIHBsYXRmb3JtIHdoaWNoIGRvZXMgbm90IGltcGxlbWVudAor
ICAgICAgICAvLyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkuCisgICAgICAgIEFTU0VSVCgh
cGF0aC5pc0VtcHR5KCkpOworICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmdWxsUGF0aCA9IHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChkaXJlY3RvcnksIHBhdGgpOworICAgIH0gd2hpbGUgKGRpcmVjdG9yeU5h
bWUoZnVsbFBhdGgpICE9IGRpcmVjdG9yeSB8fCBmaWxlRXhpc3RzKGZ1bGxQYXRoKSk7CisgICAg
CisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IG9wZW5GaWxlKGZ1bGxQYXRoLCBPcGVu
Rm9yV3JpdGUpOworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgaW50IHdyaXR0ZW5CeXRlcyA9IHdyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS0+ZGF0YSgp
LCBkYXRhLT5zaXplKCkpOworICAgIGNsb3NlRmlsZShoYW5kbGUpOworICAgIAorICAgIGlmICh3
cml0dGVuQnl0ZXMgPT0gLTEpIHsKKyAgICAgICAgZGVsZXRlRmlsZShmdWxsUGF0aCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CiAKIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUoY29uc3QgU3RyaW5n
JiBjYWNoZURpcmVjdG9yeSwgQXBwbGljYXRpb25DYWNoZUhvc3QqIGNhY2hlSG9zdCkKIHsKQEAg
LTExNjEsNyArMTI1Niw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29w
eU9mQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwCiAgICAgZm9yIChBcHBs
aWNhdGlvbkNhY2hlOjpSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZS0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOwogICAgICAgICAKLSAgICAgICAgUmVmUHRy
PEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2VDb3B5ID0gQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlOjpjcmVhdGUocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZS0+cmVzcG9uc2UoKSwg
cmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRhdGEoKSk7CisgICAgICAgIFJlZlB0cjxBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6Y3JlYXRlKHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291
cmNlLT50eXBlKCksIHJlc291cmNlLT5kYXRhKCksIHJlc291cmNlLT5wYXRoKCkpOwogICAgICAg
ICAKICAgICAgICAgY2FjaGVDb3B5LT5hZGRSZXNvdXJjZShyZXNvdXJjZUNvcHkucmVsZWFzZSgp
KTsKICAgICB9CkBAIC0xMjY5LDYgKzEzNjQsOSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpkZWxldGVDYWNoZUdyb3VwKGNvbnN0IFN0cmluZyYgbWFuaWZlc3RVUkwpCiAgICAgfQog
CiAgICAgZGVsZXRlVHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgCisgICAgY2hlY2tGb3JEZWxl
dGVkUmVzb3VyY2VzKCk7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEyODYsNiAr
MTM4NCw2NCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0Zvck1heFNpemVS
ZWFjaGVkKCkKICAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSA9PSBTUUxSZXN1bHRGdWxs
KQogICAgICAgICBtX2lzTWF4aW11bVNpemVSZWFjaGVkID0gdHJ1ZTsKIH0KKyAgICAKK3ZvaWQg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpCit7Cisg
ICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0UGF0aHMobV9k
YXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGVsZXRlZENhY2hlUmVzb3VyY2VzIik7CisgICAg
CisgICAgaWYgKHNlbGVjdFBhdGhzLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmIChzZWxlY3RQYXRocy5zdGVwKCkgIT0gU1FMUmVzdWx0Um93
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZG8geworICAgICAgICBTdHJpbmcgcGF0aCA9
IHNlbGVjdFBhdGhzLmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGlmIChwYXRoLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGZsYXRG
aWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3Rvcnks
IGtGbGF0RmlsZVN1YmRpcmVjdG9yeSk7CisgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7CisgICAgICAgIAor
ICAgICAgICAvLyBEb24ndCBleGl0IHRoZSBmbGF0RmlsZURpcmVjdG9yeSEgIFRoaXMgc2hvdWxk
IG9ubHkgaGFwcGVuIGlmIHNvbWVvbmUgdGFtcGVycyAKKyAgICAgICAgLy8gd2l0aCB0aGUgQXBw
bGljYXRpb25DYWNoZSBkYXRhYmFzZSwgYnV0IHByb3RlY3QgYWdhaW5zdCBpdCByZWdhcmRsZXNz
LgorICAgICAgICBpZiAoZGlyZWN0b3J5TmFtZShmdWxsUGF0aCkgIT0gZmxhdEZpbGVEaXJlY3Rv
cnkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZUZpbGUo
ZnVsbFBhdGgpOworICAgIH0gd2hpbGUgKHNlbGVjdFBhdGhzLnN0ZXAoKSA9PSBTUUxSZXN1bHRS
b3cpOworICAgIAorICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJERUxFVEUgRlJPTSBEZWxldGVkQ2Fj
aGVSZXNvdXJjZXMiKTsKK30KKyAgICAKK2xvbmcgbG9uZyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6ZmxhdEZpbGVBcmVhU2l6ZSgpCit7CisgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGxv
bmcgbG9uZyB0b3RhbFNpemUgPSAwOworICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBrRmxhdEZpbGVTdWJkaXJl
Y3RvcnkpOworICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VM
RUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNlRGF0YSBXSEVSRSBwYXRoIE5PVCBOVUxMIik7CisK
KyAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93
KSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsK
KyAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRG
aWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgbG9uZyBsb25nIHBhdGhTaXplID0gMDsKKyAg
ICAgICAgaWYgKCFnZXRGaWxlU2l6ZShmdWxsUGF0aCwgcGF0aFNpemUpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIHRvdGFsU2l6ZSArPSBwYXRoU2l6ZTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KIAogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlKCkgCiAgICAgOiBtX21heGltdW1TaXplKEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpub1F1b3RhKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCmluZGV4IDhiZmRmMTMuLjBmMmJh
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5oCkBAIC0xMDcsNiArMTA3LDkgQEAgcHJpdmF0ZToKICAgICBi
b29sIHN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSosIHVuc2lnbmVkIGNhY2hlU3RvcmFn
ZUlEKTsKIAogICAgIGJvb2wgZW5zdXJlT3JpZ2luUmVjb3JkKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
Kik7CisgICAgYm9vbCBzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0RmlsZShBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UqKTsKKyAgICB2b2lkIGRlbGV0ZVRhYmxlcygpOworICAgIGJvb2wgd3JpdGVE
YXRhVG9VbmlxdWVGaWxlSW5EaXJlY3RvcnkoU2hhcmVkQnVmZmVyKiwgY29uc3QgU3RyaW5nJiBk
aXJlY3RvcnksIFN0cmluZyYgb3V0RmlsZW5hbWUpOwogCiAgICAgdm9pZCBsb2FkTWFuaWZlc3RI
b3N0SGFzaGVzKCk7CiAgICAgCkBAIC0xMTgsNiArMTIxLDggQEAgcHJpdmF0ZToKICAgICBib29s
IGV4ZWN1dGVTUUxDb21tYW5kKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBjaGVja0Zvck1h
eFNpemVSZWFjaGVkKCk7CisgICAgdm9pZCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKKyAg
ICBsb25nIGxvbmcgZmxhdEZpbGVBcmVhU2l6ZSgpOwogICAgIAogICAgIFN0cmluZyBtX2NhY2hl
RGlyZWN0b3J5OwogICAgIFN0cmluZyBtX2NhY2hlRmlsZTsKLS0gCjEuNy4zLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82169</attachid>
            <date>2011-02-11 13:56:35 -0800</date>
            <delta_ts>2011-03-24 11:52:05 -0700</delta_ts>
            <desc>[2/3] Store media files as flat files within the Application Cache area.</desc>
            <filename>0002-Application-Cache-should-save-audio-and-video-mime-t.patch</filename>
            <type>text/plain</type>
            <size>19291</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhYjNhMzQ4Li44OWU4OWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC04LDYgKzgsNDIg
QEAKIAogICAgICAgICBObyBuZXcgdGVzdHMuCiAKKyAgICAgICAgU3RvcmUgY2VydGFpbiBtaW1l
IHR5cGVzIGFzIGZsYXQgZmlsZXMgYWxvbmdzaWRlIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBkYXRh
YmFzZS4KKyAgICAgICAgVGhpcyByZXF1aXJlcyBwbHVtYmluZyB0aGUgc2F2ZWQgZmlsZSBwYXRo
IGZyb20gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgdGhyb3VnaAorICAgICAgICB0byBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VEYXRhIHNjaGVt
YSBhbmQKKyAgICAgICAgICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFibGUs
IGFkZCBhIG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUgbmV3IHBhdGgg
ZGF0YSB3aGVuIGFkZGluZyBuZXcgcm93cyBpbiAKKyAgICAgICAgICAgIENhY2hlUmVzb3VyY2VE
YXRhLCBhbmQgc3RvcmUgbWVkaWEgcmVzb3VyY2VzIGFzIGZsYXQgZmlsZXMuCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKTogUHVsbCB0aGUgInBh
dGgiIGNvbHVtbiBmcm9tIENhY2hlUmVzb3VyY2VEYXRhCisgICAgICAgICAgICB3aGVuIGxvYWRp
bmcgY2FjaGUgaXRlbXMuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6cmVtb3ZlKTogQ2FsbCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMuCisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVH
cm91cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6IFdhbGsgdGhyb3VnaCBEZWxldGVkQ2FjaGVSZXNv
dXJjZURhdGEKKyAgICAgICAgICAgIGxvb2tpbmcgZm9yIGVudHJpZXMgd2l0aCBub24tZW1wdHkg
InBhdGgiIGNvbHVtbnM7IGlmIGZvdW5kLCBkZWxldGUuCisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6IFdhbGsgdGhyb3VnaCBDYWNo
ZVJlc291cmNlRGF0YSByb3dzCisgICAgICAgICAgICBhbmQgc3VtIHRoZSBmaWxlIHNpemUgb2Yg
dGhvc2Ugcm93cyB3aXRoIGZsYXQgZmlsZSBzdG9yYWdlLgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOiBDYWxsIGRlbGV0ZVRh
YmxlcygpIGluc3RlYWQgb2YgCisgICAgICAgICAgICBjbGVhckFsbFRhYmxlcygpIGRpcmVjdGx5
LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZVRhYmxl
cyk6IENhbGwgZW1wdHkoKSBiZWZvcmUgZGVsZXRpbmcgdGhlIHRhYmxlcywKKyAgICAgICAgICAg
IHNvIHRoYXQgZmxhdCBmaWxlcyBnZXQgZGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0RmlsZSk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OndyaXRlRGF0YVRv
VW5pcXVlRmlsZUluRGlyZWN0b3J5KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg6CisKKzIwMTEtMDItMDMgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQXBwbGljYXRpb24gQ2FjaGUgc2hvdWxkIHNhdmUgYXVkaW8vIGFuZCB2aWRl
by8gbWltZSB0eXBlcyBhcyBmbGF0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01Mzc4NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODkzMjQ3
Mz4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJl
c291cmNlOjpjcmVhdGUoKSBub3cgdGFrZXMgYW4gYWRkaXRpb25hbCAicGF0aCIgcGFyYW1ldGVy
LiAgVG8gZmFjaWxpdGF0ZSAKICAgICAgICAgZXh0cmFjdGluZyB0aGlzIHBhdGggaW5mb3JtYXRp
b24sIHR3byBmdW5jdGlvbnMgaW4gQXBwbGljYXRpb25DYWNoZUhvc3QgaGF2ZSBiZWVuIG1hZGUg
cHVibGljLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgKaW5kZXggMTkwZTYyOS4uNDk5YTI3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgaW50NjRfdCBlc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlKCk7CiAKICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7
IHJldHVybiBtX3BhdGg7IH0KKyAgICB2b2lkIHNldFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKSB7
IG1fcGF0aCA9IHBhdGg7IH07CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIHZvaWQgZHVt
cFR5cGUodW5zaWduZWQgdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAppbmRleCAwYzAwZWU2Li5m
NzM1OGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAgLTM3LDEyICszNywxNSBAQAogI2luY2x1
ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKK3N0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBrRmxhdEZpbGVTdWJkaXJlY3RvcnkgPSAiQXBwbGljYXRpb25D
YWNoZSI7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGUgPGNsYXNzIFQ+CkBAIC0z
ODQsNyArMzg3LDcgQEAgaW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3BhY2VOZWVk
ZWQoaW50NjRfdCBjYWNoZVRvU2F2ZSkKICAgICBpZiAoIWdldEZpbGVTaXplKG1fY2FjaGVGaWxl
LCBmaWxlU2l6ZSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50NjRfdCBjdXJyZW50U2l6
ZSA9IGZpbGVTaXplOworICAgIGludDY0X3QgY3VycmVudFNpemUgPSBmaWxlU2l6ZSArIGZsYXRG
aWxlQXJlYVNpemUoKTsKIAogICAgIC8vIERldGVybWluZSB0aGUgYW1vdW50IG9mIGZyZWUgc3Bh
Y2Ugd2UgaGF2ZSBhdmFpbGFibGUuCiAgICAgaW50NjRfdCB0b3RhbEF2YWlsYWJsZVNpemUgPSAw
OwpAQCAtNTUwLDcgKzU1Myw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1
dGVTUUxDb21tYW5kKGNvbnN0IFN0cmluZyYgc3FsKQogLy8gVXBkYXRlIHRoZSBzY2hlbWFWZXJz
aW9uIHdoZW4gdGhlIHNjaGVtYSBvZiBhbnkgdGhlIEFwcGxpY2F0aW9uIENhY2hlCiAvLyBTUUxp
dGUgdGFibGVzIGNoYW5nZXMuIFRoaXMgYWxsb3dzIHRoZSBkYXRhYmFzZSB0byBiZSByZWJ1aWx0
IHdoZW4KIC8vIGEgbmV3LCBpbmNvbXBhdGlibGUgY2hhbmdlIGhhcyBiZWVuIGludHJvZHVjZWQg
dG8gdGhlIGRhdGFiYXNlIHNjaGVtYS4KLXN0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVyc2lvbiA9
IDY7CitzdGF0aWMgY29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSA3OwogICAgIAogdm9pZCBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiB7CkBAIC01NTgsNyAr
NTYxLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lv
bigpCiAgICAgaWYgKHZlcnNpb24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9kYXRhYmFzZS5jbGVhckFsbFRhYmxlcygpOworICAgIGRlbGV0ZVRhYmxlcygpOwog
CiAgICAgLy8gVXBkYXRlIHVzZXIgdmVyc2lvbi4KICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzZXRE
YXRhYmFzZVZlcnNpb24obV9kYXRhYmFzZSk7CkBAIC02MDgsNyArNjExLDggQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhp
c3QpCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENh
Y2hlRW50cmllcyAoY2FjaGUgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCB0eXBl
IElOVEVHRVIsIHJlc291cmNlIElOVEVHRVIgTk9UIE5VTEwpIik7CiAgICAgZXhlY3V0ZVNRTENv
bW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlUmVzb3VyY2VzIChpZCBJTlRF
R0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIHVybCBURVhUIE5PVCBOVUxMIE9OIENPTkZM
SUNUIEZBSUwsICIKICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzQ29kZSBJTlRFR0VSIE5P
VCBOVUxMLCByZXNwb25zZVVSTCBURVhUIE5PVCBOVUxMLCBtaW1lVHlwZSBURVhULCB0ZXh0RW5j
b2RpbmdOYW1lIFRFWFQsIGhlYWRlcnMgVEVYVCwgZGF0YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwpIik7Ci0gICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIENhY2hlUmVzb3VyY2VEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9J
TkNSRU1FTlQsIGRhdGEgQkxPQikiKTsKKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRB
QkxFIElGIE5PVCBFWElTVFMgQ2FjaGVSZXNvdXJjZURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVkgQVVUT0lOQ1JFTUVOVCwgZGF0YSBCTE9CLCBwYXRoIFRFWFQpIik7CisgICAgZXhlY3V0ZVNR
TENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIERlbGV0ZWRDYWNoZVJlc291cmNl
cyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBwYXRoIFRFWFQpIik7CiAg
ICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIE9yaWdpbnMg
KG9yaWdpbiBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBJR05PUkUsIHF1b3RhIElOVEVHRVIgTk9U
IE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKIAogICAgIC8vIFdoZW4gYSBjYWNoZSBpcyBkZWxl
dGVkLCBhbGwgaXRzIGVudHJpZXMgYW5kIGl0cyB3aGl0ZWxpc3Qgc2hvdWxkIGJlIGRlbGV0ZWQu
CkBAIC02MzEsNiArNjM1LDE1IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5E
YXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgICAgICAgICAgICAgICAgICAg
ICIgRk9SIEVBQ0ggUk9XIEJFR0lOIgogICAgICAgICAgICAgICAgICAgICAgICIgIERFTEVURSBG
Uk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJFIGlkID0gT0xELmRhdGE7IgogICAgICAgICAgICAg
ICAgICAgICAgICIgRU5EIik7CisgICAgCisgICAgLy8gV2hlbiBhIGNhY2hlIHJlc291cmNlIGlz
IGRlbGV0ZWQsIGlmIGl0IGNvbnRhaW5zIGEgbm9uLWVtcHR5IHBhdGgsIHRoYXQgcGF0aCBzaG91
bGQKKyAgICAvLyBiZSBhZGRlZCB0byB0aGUgRGVsZXRlZENhY2hlUmVzb3VyY2VzIHRhYmxlIHNv
IHRoZSBmbGF0IGZpbGUgYXQgdGhhdCBwYXRoIGNhbgorICAgIC8vIGJlIGRlbGV0ZWQgYXQgYSBs
YXRlciB0aW1lLgorICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVFJJR0dFUiBJRiBOT1Qg
RVhJU1RTIENhY2hlUmVzb3VyY2VEYXRhRGVsZXRlZCBBRlRFUiBERUxFVEUgT04gQ2FjaGVSZXNv
dXJjZURhdGEiCisgICAgICAgICAgICAgICAgICAgICAgIiBGT1IgRUFDSCBST1ciCisgICAgICAg
ICAgICAgICAgICAgICAgIiBXSEVOIE9MRC5wYXRoIE5PVCBOVUxMIEJFR0lOIgorICAgICAgICAg
ICAgICAgICAgICAgICIgIElOU0VSVCBJTlRPIERlbGV0ZWRDYWNoZVJlc291cmNlcyAocGF0aCkg
dmFsdWVzIChPTEQucGF0aCk7IgorICAgICAgICAgICAgICAgICAgICAgICIgRU5EIik7CiB9CiAK
IGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3Rh
dGVtZW50JiBzdGF0ZW1lbnQpCkBAIC03NjIsMTUgKzc3NSw0MyBAQCBib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1
bnNpZ25lZAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRo
ZSBkYXRhCi0gICAgU1FMaXRlU3RhdGVtZW50IGRhdGFTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklO
U0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRhKSBWQUxVRVMgKD8pIik7CisgICAgU1FM
aXRlU3RhdGVtZW50IGRhdGFTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hl
UmVzb3VyY2VEYXRhIChkYXRhLCBwYXRoKSBWQUxVRVMgKD8sID8pIik7CiAgICAgaWYgKGRhdGFT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgaWYgKHJlc291cmNlLT5kYXRhKCktPnNpemUoKSkKLSAgICAgICAgZGF0YVN0
YXRlbWVudC5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5k
YXRhKCktPnNpemUoKSk7CisKKyAgICBTdHJpbmcgZnVsbFBhdGg7CisgICAgaWYgKCFyZXNvdXJj
ZS0+cGF0aCgpLmlzRW1wdHkoKSkgeworICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIs
IHBhdGhHZXRGaWxlTmFtZShyZXNvdXJjZS0+cGF0aCgpKSk7CisgICAgfSBlbHNlIGlmIChzaG91
bGRTdG9yZVJlc291cmNlQXNGbGF0RmlsZShyZXNvdXJjZSkpIHsKKyAgICAgICAgLy8gRmlyc3Qs
IGNoZWNrIHRvIHNlZSBpZiBjcmVhdGluZyB0aGUgZmxhdCBmaWxlIHdvdWxkIHZpb2xhdGUgdGhl
IG1heGltdW0gdG90YWwgcXVvdGEuICBXZSBkb24ndCBuZWVkCisgICAgICAgIC8vIHRvIGNoZWNr
IHRoZSBwZXItb3JpZ2luIHF1b3RlIGhlcmUsIGFzIGl0IHdhcyBhbHJlYWR5IGNoZWNrZWQgaW4g
c3RvcmVOZXdlc3RDYWNoZSgpLgorICAgICAgICBpZiAobV9kYXRhYmFzZS50b3RhbFNpemUoKSAr
IGZsYXRGaWxlQXJlYVNpemUoKSArIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSA+IG1fbWF4aW11
bVNpemUpIHsKKyAgICAgICAgICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJp
bmcgcGF0aDsKKyAgICAgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5k
aW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksIGtGbGF0RmlsZVN1YmRpcmVjdG9yeSk7Cisg
ICAgICAgIG1ha2VBbGxEaXJlY3RvcmllcyhmbGF0RmlsZURpcmVjdG9yeSk7CisgICAgICAgIGlm
ICghd3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3RvcnkocmVzb3VyY2UtPmRhdGEoKSwgZmxh
dEZpbGVEaXJlY3RvcnksIHBhdGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgZnVsbFBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVE
aXJlY3RvcnksIHBhdGgpOworICAgICAgICByZXNvdXJjZS0+c2V0UGF0aChmdWxsUGF0aCk7Cisg
ICAgICAgIGRhdGFTdGF0ZW1lbnQuYmluZFRleHQoMiwgcGF0aCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKHJlc291cmNlLT5kYXRhKCktPnNpemUoKSkKKyAgICAgICAgICAgIGRhdGFTdGF0
ZW1lbnQuYmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0
YSgpLT5zaXplKCkpOworICAgIH0KICAgICAKLSAgICBpZiAoIWRhdGFTdGF0ZW1lbnQuZXhlY3V0
ZUNvbW1hbmQoKSkKKyAgICBpZiAoIWRhdGFTdGF0ZW1lbnQuZXhlY3V0ZUNvbW1hbmQoKSkgewor
ICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZmlsZSB3aGljaCB3ZSBtYXkgaGF2ZSB3cml0dGVuIHRv
OgorICAgICAgICBpZiAoIWZ1bGxQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRlbGV0ZUZp
bGUoZnVsbFBhdGgpOworCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICB1bnNp
Z25lZCBkYXRhSWQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9kYXRhYmFzZS5sYXN0SW5zZXJ0
Um93SUQoKSk7CiAKQEAgLTgyMSw2ICs4NjIsMTIgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQK
ICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCisgICAgLy8gRGlkIHdlIHN1Y2Nlc3NmdWxseSB3cml0ZSB0aGUgcmVz
b3VyY2UgZGF0YSB0byBhIGZpbGU/ICBJZiBzbywKKyAgICAvLyByZWxlYXNlIHRoZSByZXNvdXJj
ZSdzIGRhdGEgYW5kIGZyZWUgdXAgYSBwb3RlbnRpYWxseSBsYXJnZSBhbW91bnQKKyAgICAvLyBv
ZiBtZW1vcnk6CisgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJlc291cmNl
LT5kYXRhKCktPmNsZWFyKCk7CisKICAgICByZXNvdXJjZS0+c2V0U3RvcmFnZUlEKHJlc291cmNl
SWQpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtODUxLDcgKzg5OCw3IEBAIGJvb2wgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3Vy
Y2UsIEFwcGxpY2F0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAKICAgICBtX2lzTWF4aW11bVNp
emVSZWFjaGVkID0gZmFsc2U7Ci0gICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShtX21heGlt
dW1TaXplKTsKKyAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUgLSBm
bGF0RmlsZUFyZWFTaXplKCkpOwogCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc3RvcmVSZXNvdXJj
ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5i
ZWdpbigpOwpAQCAtODk4LDcgKzk0NSw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCwgQXBwCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSBmYWxzZTsK
LSAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUpOworICAgIG1fZGF0
YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6ZSAtIGZsYXRGaWxlQXJlYVNpemUoKSk7
CiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZUNhY2hlVHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CiAgICAgCkBAIC05OTgsNyArMTA0NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXJzZUhl
YWRlcnMoY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zCiBQ
YXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2Fk
Q2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBjYWNoZVN0
YXRlbWVudChtX2RhdGFiYXNlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlNFTEVDVCB1cmwsIHR5cGUsIG1pbWVUeXBlLCB0ZXh0RW5jb2RpbmdOYW1lLCBoZWFkZXJzLCBD
YWNoZVJlc291cmNlRGF0YS5kYXRhIEZST00gQ2FjaGVFbnRyaWVzIElOTkVSIEpPSU4gQ2FjaGVS
ZXNvdXJjZXMgT04gQ2FjaGVFbnRyaWVzLnJlc291cmNlPUNhY2hlUmVzb3VyY2VzLmlkICIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFTEVDVCB1cmwsIHR5cGUsIG1pbWVU
eXBlLCB0ZXh0RW5jb2RpbmdOYW1lLCBoZWFkZXJzLCBDYWNoZVJlc291cmNlRGF0YS5kYXRhLCBD
YWNoZVJlc291cmNlRGF0YS5wYXRoIEZST00gQ2FjaGVFbnRyaWVzIElOTkVSIEpPSU4gQ2FjaGVS
ZXNvdXJjZXMgT04gQ2FjaGVFbnRyaWVzLnJlc291cmNlPUNhY2hlUmVzb3VyY2VzLmlkICIKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklOTkVSIEpPSU4gQ2FjaGVSZXNvdXJj
ZURhdGEgT04gQ2FjaGVSZXNvdXJjZURhdGEuaWQ9Q2FjaGVSZXNvdXJjZXMuZGF0YSBXSEVSRSBD
YWNoZUVudHJpZXMuY2FjaGU9PyIpOwogICAgIGlmIChjYWNoZVN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHJlcGFyZSBj
YWNoZSBzdGF0ZW1lbnQsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwpAQCAtMTAwOCw3ICsxMDU1LDkgQEAgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2UKICAgICBjYWNo
ZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgc3RvcmFnZUlEKTsKIAogICAgIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlPiBjYWNoZSA9IEFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpOwotICAgIAorCisg
ICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1f
Y2FjaGVEaXJlY3RvcnksIGtGbGF0RmlsZVN1YmRpcmVjdG9yeSk7CisKICAgICBpbnQgcmVzdWx0
OwogICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1
bHRSb3cpIHsKICAgICAgICAgS1VSTCB1cmwoUGFyc2VkVVJMU3RyaW5nLCBjYWNoZVN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDApKTsKQEAgLTEwMjAsMTUgKzEwNjksMjQgQEAgUGFzc1JlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2ln
bmVkIHN0b3JhZ2UKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEg
PSBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJsb2IpOwogICAgICAgICAKKyAgICAgICAgU3Ry
aW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDYpOworICAgICAgICBsb25n
IGxvbmcgc2l6ZSA9IDA7CisgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHNpemUgPSBkYXRhLT5zaXplKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGF0aCA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7CisgICAg
ICAgICAgICBnZXRGaWxlU2l6ZShwYXRoLCBzaXplKTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgU3RyaW5nIG1pbWVUeXBlID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgyKTsK
ICAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDMpOwogICAgICAgICAKLSAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSh1
cmwsIG1pbWVUeXBlLCBkYXRhLT5zaXplKCksIHRleHRFbmNvZGluZ05hbWUsICIiKTsKKyAgICAg
ICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSh1cmwsIG1pbWVUeXBlLCBzaXplLCB0ZXh0RW5j
b2RpbmdOYW1lLCAiIik7CiAKICAgICAgICAgU3RyaW5nIGhlYWRlcnMgPSBjYWNoZVN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDQpOwogICAgICAgICBwYXJzZUhlYWRlcnMoaGVhZGVycywgcmVzcG9u
c2UpOwogICAgICAgICAKLSAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4g
cmVzb3VyY2UgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIHJlc3BvbnNl
LCB0eXBlLCBkYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U+IHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJs
LCByZXNwb25zZSwgdHlwZSwgZGF0YS5yZWxlYXNlKCksIHBhdGgpOwogCiAgICAgICAgIGlmICh0
eXBlICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpNYW5pZmVzdCkKICAgICAgICAgICAgIGNh
Y2hlLT5zZXRNYW5pZmVzdFJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7CkBAIC0xMTIyLDYg
KzExODAsOCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpyZW1vdmUoQXBwbGljYXRp
b25DYWNoZSogY2FjaGUpCiAKICAgICAgICAgY2FjaGUtPmdyb3VwKCktPmNsZWFyU3RvcmFnZUlE
KCk7CiAgICAgfQorICAgIAorICAgIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOwogfSAgICAK
IAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkoKQpAQCAtMTE0Miw3ICsxMjAy
LDUxIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KCkKICAgICBDYWNoZUdy
b3VwTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NhY2hlc0luTWVtb3J5LmVuZCgpOwogICAg
IGZvciAoQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NhY2hlc0luTWVtb3J5
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgaXQtPnNlY29uZC0+Y2xlYXJTdG9y
YWdlSUQoKTsKLX0gICAgCisgICAgCisgICAgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7Cit9
CisgICAgCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVUYWJsZXMoKQorewor
ICAgIGVtcHR5KCk7CisgICAgbV9kYXRhYmFzZS5jbGVhckFsbFRhYmxlcygpOworfQorICAgIAor
Ym9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZp
bGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICByZXR1cm4gcmVz
b3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKS5zdGFydHNXaXRoKCJhdWRpby8iLCBmYWxzZSkg
CisgICAgICAgIHx8IHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkuc3RhcnRzV2l0aCgi
dmlkZW8vIiwgZmFsc2UpOworfQorICAgIAorYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
d3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3RvcnkoU2hhcmVkQnVmZmVyKiBkYXRhLCBjb25z
dCBTdHJpbmcmIGRpcmVjdG9yeSwgU3RyaW5nJiBwYXRoKQoreworICAgIFN0cmluZyBmdWxsUGF0
aDsKKyAgICAKKyAgICBkbyB7CisgICAgICAgIHBhdGggPSBlbmNvZGVGb3JGaWxlTmFtZShjcmVh
dGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSBh
Ym92ZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgb24gYSBwbGF0Zm9ybSB3aGljaCBkb2VzIG5vdCBp
bXBsZW1lbnQKKyAgICAgICAgLy8gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLgorICAgICAg
ICBBU1NFUlQoIXBhdGguaXNFbXB0eSgpKTsKKyAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZnVsbFBhdGggPSBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGlyZWN0b3J5LCBwYXRoKTsKKyAgICB9IHdoaWxlIChk
aXJlY3RvcnlOYW1lKGZ1bGxQYXRoKSAhPSBkaXJlY3RvcnkgfHwgZmlsZUV4aXN0cyhmdWxsUGF0
aCkpOworICAgIAorICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUgPSBvcGVuRmlsZShmdWxs
UGF0aCwgT3BlbkZvcldyaXRlKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGludCB3cml0dGVuQnl0ZXMgPSB3cml0ZVRvRmlsZShoYW5kbGUsIGRh
dGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICAK
KyAgICBpZiAod3JpdHRlbkJ5dGVzID09IC0xKSB7CisgICAgICAgIGRlbGV0ZUZpbGUoZnVsbFBh
dGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVl
OworfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNv
bnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhv
c3QpCiB7CkBAIC0xMTYxLDcgKzEyNjUsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAg
IGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
Y2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgCi0gICAg
ICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlQ29weSA9IEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPnJl
c3BvbnNlKCksIHJlc291cmNlLT50eXBlKCksIHJlc291cmNlLT5kYXRhKCkpOworICAgICAgICBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkgPSBBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5yZXNwb25z
ZSgpLCByZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpLCByZXNvdXJjZS0+cGF0aCgp
KTsKICAgICAgICAgCiAgICAgICAgIGNhY2hlQ29weS0+YWRkUmVzb3VyY2UocmVzb3VyY2VDb3B5
LnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtMTI2OSw2ICsxMzczLDkgQEAgYm9vbCBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJM
KQogICAgIH0KIAogICAgIGRlbGV0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIAorICAgIGNo
ZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xMjg2LDYgKzEzOTMsNjkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tG
b3JNYXhTaXplUmVhY2hlZCgpCiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgPT0gU1FM
UmVzdWx0RnVsbCkKICAgICAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9IHRydWU7CiB9Cisg
ICAgCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJj
ZXMoKQoreworICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlz
T3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTZWxlY3Qgb25seSB0aGUgcGF0aHMg
aW4gRGVsZXRlZENhY2hlUmVzb3VyY2VzIHRoYXQgZG8gbm90IGFsc28gYXBwZWFyIGluIENhY2hl
UmVzb3VyY2VEYXRhOgorICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RQYXRocyhtX2RhdGFiYXNl
LCAiU0VMRUNUIERlbGV0ZWRDYWNoZVJlc291cmNlcy5wYXRoICIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIkZST00gRGVsZXRlZENhY2hlUmVzb3VyY2VzICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIkxFRlQgSk9JTiBDYWNoZVJlc291cmNlRGF0YSAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPTiBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0
aCA9IENhY2hlUmVzb3VyY2VEYXRhLnBhdGggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJl
c291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIik7CisgICAgCisgICAgaWYgKHNlbGVjdFBhdGhzLnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChz
ZWxlY3RQYXRocy5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgZG8geworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBhdGhzLmdldENvbHVtblRl
eHQoMCk7CisgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksIGtGbGF0RmlsZVN1YmRpcmVjdG9yeSk7
CisgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0
RmlsZURpcmVjdG9yeSwgcGF0aCk7CisgICAgICAgIAorICAgICAgICAvLyBEb24ndCBleGl0IHRo
ZSBmbGF0RmlsZURpcmVjdG9yeSEgIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHNvbWVvbmUg
dGFtcGVycyAKKyAgICAgICAgLy8gd2l0aCB0aGUgQXBwbGljYXRpb25DYWNoZSBkYXRhYmFzZSwg
YnV0IHByb3RlY3QgYWdhaW5zdCBpdCByZWdhcmRsZXNzLgorICAgICAgICBpZiAoZGlyZWN0b3J5
TmFtZShmdWxsUGF0aCkgIT0gZmxhdEZpbGVEaXJlY3RvcnkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZUZpbGUoZnVsbFBhdGgpOworICAgIH0gd2hpbGUg
KHNlbGVjdFBhdGhzLnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpOworICAgIAorICAgIGV4ZWN1dGVT
UUxDb21tYW5kKCJERUxFVEUgRlJPTSBEZWxldGVkQ2FjaGVSZXNvdXJjZXMiKTsKK30KKyAgICAK
K2xvbmcgbG9uZyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSgpCit7
CisgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGxvbmcgbG9uZyB0b3RhbFNpemUgPSAwOwor
ICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCht
X2NhY2hlRGlyZWN0b3J5LCBrRmxhdEZpbGVTdWJkaXJlY3RvcnkpOworICAgIFNRTGl0ZVN0YXRl
bWVudCBzZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291
cmNlRGF0YSBXSEVSRSBwYXRoIE5PVCBOVUxMIik7CisKKyAgICBpZiAoc2VsZWN0UGF0aHMucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHdoaWxlIChz
ZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIFN0cmluZyBwYXRo
ID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIGZ1bGxQYXRo
ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAg
ICAgICAgbG9uZyBsb25nIHBhdGhTaXplID0gMDsKKyAgICAgICAgaWYgKCFnZXRGaWxlU2l6ZShm
dWxsUGF0aCwgcGF0aFNpemUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHRvdGFs
U2l6ZSArPSBwYXRoU2l6ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30K
IAogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkgCiAg
ICAgOiBtX21heGltdW1TaXplKEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpub1F1b3RhKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oCmluZGV4IDhiZmRmMTMuLjBmMmJhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCkBA
IC0xMDcsNiArMTA3LDkgQEAgcHJpdmF0ZToKICAgICBib29sIHN0b3JlKEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZSosIHVuc2lnbmVkIGNhY2hlU3RvcmFnZUlEKTsKIAogICAgIGJvb2wgZW5zdXJl
T3JpZ2luUmVjb3JkKGNvbnN0IFNlY3VyaXR5T3JpZ2luKik7CisgICAgYm9vbCBzaG91bGRTdG9y
ZVJlc291cmNlQXNGbGF0RmlsZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqKTsKKyAgICB2b2lk
IGRlbGV0ZVRhYmxlcygpOworICAgIGJvb2wgd3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3Rv
cnkoU2hhcmVkQnVmZmVyKiwgY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIFN0cmluZyYgb3V0Rmls
ZW5hbWUpOwogCiAgICAgdm9pZCBsb2FkTWFuaWZlc3RIb3N0SGFzaGVzKCk7CiAgICAgCkBAIC0x
MTgsNiArMTIxLDggQEAgcHJpdmF0ZToKICAgICBib29sIGV4ZWN1dGVTUUxDb21tYW5kKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgdm9pZCBjaGVja0Zvck1heFNpemVSZWFjaGVkKCk7CisgICAgdm9p
ZCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBsb25nIGxvbmcgZmxhdEZpbGVBcmVh
U2l6ZSgpOwogICAgIAogICAgIFN0cmluZyBtX2NhY2hlRGlyZWN0b3J5OwogICAgIFN0cmluZyBt
X2NhY2hlRmlsZTsKLS0gCjEuNy4zLjIKCg==
</data>
<flag name="review"
          id="73812"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86806</attachid>
            <date>2011-03-24 11:52:05 -0700</date>
            <delta_ts>2011-03-24 14:03:59 -0700</delta_ts>
            <desc>[2/3] Store media files as flat files within the Application Cache area.</desc>
            <filename>0001-Application-Cache-should-save-audio-and-video-mime-t.patch</filename>
            <type>text/plain</type>
            <size>21517</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSBiZDAzODJkMjVlZjc5NjdmYTcwZWE5YWQyMWY3OTU5OGRkMjI0YWU3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBhcHBsZS5jb20+CkRhdGU6
IFdlZCwgMjMgTWFyIDIwMTEgMTA6NTM6MDMgLTA3MDAKU3ViamVjdDogW1BBVENIXSBBcHBsaWNh
dGlvbiBDYWNoZSBzaG91bGQgc2F2ZSBhdWRpby8gYW5kIHZpZGVvLyBtaW1lIHR5cGVzIGFzIGZs
YXQgZmlsZXMKIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzc4NAog
PHJkYXI6Ly9wcm9ibGVtLzg5MzI0NzM+CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCk5v
IG5ldyB0ZXN0cy4KClN0b3JlIGNlcnRhaW4gbWltZSB0eXBlcyBhcyBmbGF0IGZpbGVzIGFsb25n
c2lkZSB0aGUgQXBwbGljYXRpb24gQ2FjaGUgZGF0YWJhc2UuClRoaXMgcmVxdWlyZXMgcGx1bWJp
bmcgdGhlIHNhdmVkIGZpbGUgcGF0aCBmcm9tIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIHRocm91
Z2gKdG8gQXBwbGljYXRpb25DYWNoZVJlc291cmNlLgoKKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VEYXRhIHNj
aGVtYSBhbmQKICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFibGUsIGFkZCBh
IG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUgbmV3IHBhdGggZGF0YSB3aGVuIGFkZGlu
ZyBuZXcgcm93cyBpbgogICAgQ2FjaGVSZXNvdXJjZURhdGEsIGFuZCBzdG9yZSBtZWRpYSByZXNv
dXJjZXMgYXMgZmxhdCBmaWxlcy4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjps
b2FkQ2FjaGUpOiBQdWxsIHRoZSAicGF0aCIgY29sdW1uIGZyb20gQ2FjaGVSZXNvdXJjZURhdGEK
ICAgIHdoZW4gbG9hZGluZyBjYWNoZSBpdGVtcy4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpyZW1vdmUpOiBDYWxsIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcy4KKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6IERpdHRvLgooV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUpOiBEaXR0by4KKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVDYWNoZUdyb3VwKTogRGl0dG8uCihXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKTogV2Fs
ayB0aHJvdWdoIERlbGV0ZWRDYWNoZVJlc291cmNlRGF0YQogICAgbG9va2luZyBmb3IgZW50cmll
cyB3aXRoIG5vbi1lbXB0eSAicGF0aCIgY29sdW1uczsgaWYgZm91bmQsIGRlbGV0ZS4KKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmbGF0RmlsZUFyZWFTaXplKTogV2FsayB0aHJv
dWdoIENhY2hlUmVzb3VyY2VEYXRhIHJvd3MKICAgIGFuZCBzdW0gdGhlIGZpbGUgc2l6ZSBvZiB0
aG9zZSByb3dzIHdpdGggZmxhdCBmaWxlIHN0b3JhZ2UuCihXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbik6IENhbGwgZGVsZXRlVGFibGVzKCkgaW5z
dGVhZCBvZgogICAgY2xlYXJBbGxUYWJsZXMoKSBkaXJlY3RseS4KKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVUYWJsZXMpOiBDYWxsIGVtcHR5KCkgYmVmb3JlIGRlbGV0
aW5nIHRoZSB0YWJsZXMsCiAgICBzbyB0aGF0IGZsYXQgZmlsZXMgZ2V0IGRlbGV0ZWQuCihXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZp
bGUpOiBBZGRlZC4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFU
b1VuaXF1ZUZpbGVJbkRpcmVjdG9yeSk6IEFkZGVkLgoqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5oOgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAzNiArKysrCiAuLi4vbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZS5oICAgICB8ICAgIDEgKwogLi4uL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgICAgfCAgMjAyICsrKysrKysrKysrKysrKysrKy0t
CiAuLi4vbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmggICAgICB8ICAg
IDUgKwogNCBmaWxlcyBjaGFuZ2VkLCAyMjggaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDZhNjgxMWQuLjI5NDAwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0
MSBAQAogMjAxMS0wMy0yMyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAorICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBcHBsaWNhdGlvbiBD
YWNoZSBzaG91bGQgc2F2ZSBhdWRpby8gYW5kIHZpZGVvLyBtaW1lIHR5cGVzIGFzIGZsYXQgZmls
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNzg0
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84OTMyNDczPgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4KKworICAgICAgICBTdG9yZSBjZXJ0YWluIG1pbWUgdHlwZXMgYXMgZmxhdCBmaWxlcyBhbG9u
Z3NpZGUgdGhlIEFwcGxpY2F0aW9uIENhY2hlIGRhdGFiYXNlLgorICAgICAgICBUaGlzIHJlcXVp
cmVzIHBsdW1iaW5nIHRoZSBzYXZlZCBmaWxlIHBhdGggZnJvbSBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZSB0aHJvdWdoCisgICAgICAgIHRvIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS4KKworICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZSk6IE1v
ZGlmeSB0aGUgQ2FjaGVSZXNvdXJjZURhdGEgc2NoZW1hIGFuZAorICAgICAgICAgICAgYWRkIGEg
bmV3IERlbGV0ZWRDYWNoZVJlc291cmNlcyB0YWJsZSwgYWRkIGEgbmV3IENhY2hlUmVzb3VyY2VE
YXRhRGVsZXRlZCB0cmlnZ2VyLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlKTogQWRkIHRoZSBuZXcgcGF0aCBkYXRhIHdoZW4gYWRkaW5nIG5ldyByb3dz
IGluIAorICAgICAgICAgICAgQ2FjaGVSZXNvdXJjZURhdGEsIGFuZCBzdG9yZSBtZWRpYSByZXNv
dXJjZXMgYXMgZmxhdCBmaWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpsb2FkQ2FjaGUpOiBQdWxsIHRoZSAicGF0aCIgY29sdW1uIGZyb20gQ2FjaGVSZXNv
dXJjZURhdGEKKyAgICAgICAgICAgIHdoZW4gbG9hZGluZyBjYWNoZSBpdGVtcy4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpyZW1vdmUpOiBDYWxsIGNoZWNrRm9y
RGVsZXRlZFJlc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjplbXB0eSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVDYWNoZUdyb3VwKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2Vz
KTogV2FsayB0aHJvdWdoIERlbGV0ZWRDYWNoZVJlc291cmNlRGF0YQorICAgICAgICAgICAgbG9v
a2luZyBmb3IgZW50cmllcyB3aXRoIG5vbi1lbXB0eSAicGF0aCIgY29sdW1uczsgaWYgZm91bmQs
IGRlbGV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmbGF0
RmlsZUFyZWFTaXplKTogV2FsayB0aHJvdWdoIENhY2hlUmVzb3VyY2VEYXRhIHJvd3MKKyAgICAg
ICAgICAgIGFuZCBzdW0gdGhlIGZpbGUgc2l6ZSBvZiB0aG9zZSByb3dzIHdpdGggZmxhdCBmaWxl
IHN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmVy
aWZ5U2NoZW1hVmVyc2lvbik6IENhbGwgZGVsZXRlVGFibGVzKCkgaW5zdGVhZCBvZiAKKyAgICAg
ICAgICAgIGNsZWFyQWxsVGFibGVzKCkgZGlyZWN0bHkuCisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlVGFibGVzKTogQ2FsbCBlbXB0eSgpIGJlZm9yZSBk
ZWxldGluZyB0aGUgdGFibGVzLAorICAgICAgICAgICAgc28gdGhhdCBmbGF0IGZpbGVzIGdldCBk
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNob3Vs
ZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6d3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3RvcnkpOiBB
ZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
aDoKKworMjAxMS0wMy0yMyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKwogICAg
ICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KIAogICAgICAgICBBcHBsaWNhdGlv
biBDYWNoZSBzaG91bGQgc2F2ZSBhdWRpby8gYW5kIHZpZGVvLyBtaW1lIHR5cGVzIGFzIGZsYXQg
ZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UuaAppbmRleCAxOTBlNjI5Li42NjMzYzZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBpbnQ2NF90IGVzdGltYXRl
ZFNpemVJblN0b3JhZ2UoKTsKIAogICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQorICAgIHZvaWQgc2V0UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpIHsgbV9w
YXRoID0gcGF0aDsgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyB2b2lkIGR1bXBUeXBl
KHVuc2lnbmVkIHR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggMGY1MTU0Ny4uYWEyOGI2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiU1FM
aXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9TdHJpbmdFeHRyYXMuaD4KQEAgLTQ2LDYgKzQ3LDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgY2hhciBmbGF0RmlsZVN1YmRp
cmVjdG9yeVtdID0gIkFwcGxpY2F0aW9uQ2FjaGUiOworCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KIGNs
YXNzIFN0b3JhZ2VJREpvdXJuYWwgewogcHVibGljOiAgCkBAIC0zOTQsNyArMzk3LDcgQEAgaW50
NjRfdCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3BhY2VOZWVkZWQoaW50NjRfdCBjYWNoZVRv
U2F2ZSkKICAgICBpZiAoIWdldEZpbGVTaXplKG1fY2FjaGVGaWxlLCBmaWxlU2l6ZSkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgaW50NjRfdCBjdXJyZW50U2l6ZSA9IGZpbGVTaXplOworICAg
IGludDY0X3QgY3VycmVudFNpemUgPSBmaWxlU2l6ZSArIGZsYXRGaWxlQXJlYVNpemUoKTsKIAog
ICAgIC8vIERldGVybWluZSB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2Ugd2UgaGF2ZSBhdmFpbGFi
bGUuCiAgICAgaW50NjRfdCB0b3RhbEF2YWlsYWJsZVNpemUgPSAwOwpAQCAtNTYwLDcgKzU2Myw3
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUxDb21tYW5kKGNvbnN0
IFN0cmluZyYgc3FsKQogLy8gVXBkYXRlIHRoZSBzY2hlbWFWZXJzaW9uIHdoZW4gdGhlIHNjaGVt
YSBvZiBhbnkgdGhlIEFwcGxpY2F0aW9uIENhY2hlCiAvLyBTUUxpdGUgdGFibGVzIGNoYW5nZXMu
IFRoaXMgYWxsb3dzIHRoZSBkYXRhYmFzZSB0byBiZSByZWJ1aWx0IHdoZW4KIC8vIGEgbmV3LCBp
bmNvbXBhdGlibGUgY2hhbmdlIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gdGhlIGRhdGFiYXNlIHNj
aGVtYS4KLXN0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVyc2lvbiA9IDY7CitzdGF0aWMgY29uc3Qg
aW50IHNjaGVtYVZlcnNpb24gPSA3OwogICAgIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiB7CkBAIC01NjgsNyArNTcxLDcgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiAgICAgaWYgKHZlcnNp
b24gPT0gc2NoZW1hVmVyc2lvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhYmFzZS5j
bGVhckFsbFRhYmxlcygpOworICAgIGRlbGV0ZVRhYmxlcygpOwogCiAgICAgLy8gVXBkYXRlIHVz
ZXIgdmVyc2lvbi4KICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzZXREYXRhYmFzZVZlcnNpb24obV9k
YXRhYmFzZSk7CkBAIC02MTgsNyArNjIxLDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6b3BlbkRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCiAgICAgZXhlY3V0ZVNR
TENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlRW50cmllcyAoY2FjaGUg
SU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCB0eXBlIElOVEVHRVIsIHJlc291cmNl
IElOVEVHRVIgTk9UIE5VTEwpIik7CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIENhY2hlUmVzb3VyY2VzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFV
VE9JTkNSRU1FTlQsIHVybCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKICAgICAg
ICAgICAgICAgICAgICAgICAic3RhdHVzQ29kZSBJTlRFR0VSIE5PVCBOVUxMLCByZXNwb25zZVVS
TCBURVhUIE5PVCBOVUxMLCBtaW1lVHlwZSBURVhULCB0ZXh0RW5jb2RpbmdOYW1lIFRFWFQsIGhl
YWRlcnMgVEVYVCwgZGF0YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7Ci0g
ICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlUmVz
b3VyY2VEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGRhdGEgQkxP
QikiKTsKKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg
Q2FjaGVSZXNvdXJjZURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwg
ZGF0YSBCTE9CLCBwYXRoIFRFWFQpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBU
QUJMRSBJRiBOT1QgRVhJU1RTIERlbGV0ZWRDYWNoZVJlc291cmNlcyAoaWQgSU5URUdFUiBQUklN
QVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBwYXRoIFRFWFQpIik7CiAgICAgZXhlY3V0ZVNRTENvbW1h
bmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIE9yaWdpbnMgKG9yaWdpbiBURVhUIFVOSVFV
RSBPTiBDT05GTElDVCBJR05PUkUsIHF1b3RhIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1Qg
RkFJTCkiKTsKIAogICAgIC8vIFdoZW4gYSBjYWNoZSBpcyBkZWxldGVkLCBhbGwgaXRzIGVudHJp
ZXMgYW5kIGl0cyB3aGl0ZWxpc3Qgc2hvdWxkIGJlIGRlbGV0ZWQuCkBAIC02NDEsNiArNjQ1LDE1
IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0
ZUlmRG9lc05vdEV4aXN0KQogICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIEJF
R0lOIgogICAgICAgICAgICAgICAgICAgICAgICIgIERFTEVURSBGUk9NIENhY2hlUmVzb3VyY2VE
YXRhIFdIRVJFIGlkID0gT0xELmRhdGE7IgogICAgICAgICAgICAgICAgICAgICAgICIgRU5EIik7
CisgICAgCisgICAgLy8gV2hlbiBhIGNhY2hlIHJlc291cmNlIGlzIGRlbGV0ZWQsIGlmIGl0IGNv
bnRhaW5zIGEgbm9uLWVtcHR5IHBhdGgsIHRoYXQgcGF0aCBzaG91bGQKKyAgICAvLyBiZSBhZGRl
ZCB0byB0aGUgRGVsZXRlZENhY2hlUmVzb3VyY2VzIHRhYmxlIHNvIHRoZSBmbGF0IGZpbGUgYXQg
dGhhdCBwYXRoIGNhbgorICAgIC8vIGJlIGRlbGV0ZWQgYXQgYSBsYXRlciB0aW1lLgorICAgIGV4
ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVFJJR0dFUiBJRiBOT1QgRVhJU1RTIENhY2hlUmVzb3Vy
Y2VEYXRhRGVsZXRlZCBBRlRFUiBERUxFVEUgT04gQ2FjaGVSZXNvdXJjZURhdGEiCisgICAgICAg
ICAgICAgICAgICAgICAgIiBGT1IgRUFDSCBST1ciCisgICAgICAgICAgICAgICAgICAgICAgIiBX
SEVOIE9MRC5wYXRoIE5PVCBOVUxMIEJFR0lOIgorICAgICAgICAgICAgICAgICAgICAgICIgIElO
U0VSVCBJTlRPIERlbGV0ZWRDYWNoZVJlc291cmNlcyAocGF0aCkgdmFsdWVzIChPTEQucGF0aCk7
IgorICAgICAgICAgICAgICAgICAgICAgICIgRU5EIik7CiB9CiAKIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQp
CkBAIC03NzIsMTUgKzc4NSw0MyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9y
ZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGaXJzdCwgaW5zZXJ0IHRoZSBkYXRhCi0gICAgU1FMaXRl
U3RhdGVtZW50IGRhdGFTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVz
b3VyY2VEYXRhIChkYXRhKSBWQUxVRVMgKD8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGRhdGFT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlUmVzb3VyY2VEYXRhIChkYXRh
LCBwYXRoKSBWQUxVRVMgKD8sID8pIik7CiAgICAgaWYgKGRhdGFTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTFJlc3VsdE9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKHJl
c291cmNlLT5kYXRhKCktPnNpemUoKSkKLSAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kQmxvYigx
LCByZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CisK
KyAgICBTdHJpbmcgZnVsbFBhdGg7CisgICAgaWYgKCFyZXNvdXJjZS0+cGF0aCgpLmlzRW1wdHko
KSkKKyAgICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoR2V0RmlsZU5hbWUocmVz
b3VyY2UtPnBhdGgoKSkpOworICAgIGVsc2UgaWYgKHNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRG
aWxlKHJlc291cmNlKSkgeworICAgICAgICAvLyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIGNyZWF0
aW5nIHRoZSBmbGF0IGZpbGUgd291bGQgdmlvbGF0ZSB0aGUgbWF4aW11bSB0b3RhbCBxdW90YS4g
IFdlIGRvbid0IG5lZWQKKyAgICAgICAgLy8gdG8gY2hlY2sgdGhlIHBlci1vcmlnaW4gcXVvdGEg
aGVyZSwgYXMgaXQgd2FzIGFscmVhZHkgY2hlY2tlZCBpbiBzdG9yZU5ld2VzdENhY2hlKCkuCisg
ICAgICAgIGlmIChtX2RhdGFiYXNlLnRvdGFsU2l6ZSgpICsgZmxhdEZpbGVBcmVhU2l6ZSgpICsg
cmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpID4gbV9tYXhpbXVtU2l6ZSkgeworICAgICAgICAgICAg
bV9pc01heGltdW1TaXplUmVhY2hlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBmbGF0RmlsZVN1YmRp
cmVjdG9yeSk7CisgICAgICAgIG1ha2VBbGxEaXJlY3RvcmllcyhmbGF0RmlsZURpcmVjdG9yeSk7
CisgICAgICAgIFN0cmluZyBwYXRoOworICAgICAgICBpZiAoIXdyaXRlRGF0YVRvVW5pcXVlRmls
ZUluRGlyZWN0b3J5KHJlc291cmNlLT5kYXRhKCksIGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxQYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAg
ICAgcmVzb3VyY2UtPnNldFBhdGgoZnVsbFBhdGgpOworICAgICAgICBkYXRhU3RhdGVtZW50LmJp
bmRUZXh0KDIsIHBhdGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyZXNvdXJjZS0+ZGF0
YSgpLT5zaXplKCkpCisgICAgICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRCbG9iKDEsIHJlc291
cmNlLT5kYXRhKCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKKyAgICB9CiAg
ICAgCi0gICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpCisgICAgaWYgKCFk
YXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICAgICAgLy8gQ2xlYW4gdXAgdGhl
IGZpbGUgd2hpY2ggd2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKKyAgICAgICAgaWYgKCFmdWxsUGF0
aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKwogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgdW5zaWduZWQgZGF0YUlkID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2VydFJvd0lEKCkpOwogCkBAIC04MzEsNiAr
ODcyLDEyIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgaWYgKCFleGVjdXRlU3RhdGVt
ZW50KGVudHJ5U3RhdGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIC8v
IERpZCB3ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyAg
SWYgc28sCisgICAgLy8gcmVsZWFzZSB0aGUgcmVzb3VyY2UncyBkYXRhIGFuZCBmcmVlIHVwIGEg
cG90ZW50aWFsbHkgbGFyZ2UgYW1vdW50CisgICAgLy8gb2YgbWVtb3J5OgorICAgIGlmICghZnVs
bFBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXNvdXJjZS0+ZGF0YSgpLT5jbGVhcigpOworCiAg
ICAgcmVzb3VyY2UtPnNldFN0b3JhZ2VJRChyZXNvdXJjZUlkKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTg2MSw3ICs5MDgsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9y
ZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCBBcHBsaWNhdAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgCiAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9IGZhbHNlOwotICAg
IG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6ZSk7CisgICAgbV9kYXRhYmFz
ZS5zZXRNYXhpbXVtU2l6ZShtX21heGltdW1TaXplIC0gZmxhdEZpbGVBcmVhU2l6ZSgpKTsKIAog
ICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbihtX2RhdGFiYXNl
KTsKICAgICBzdG9yZVJlc291cmNlVHJhbnNhY3Rpb24uYmVnaW4oKTsKQEAgLTkwOCw3ICs5NTUs
NyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAsIEFwcAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBtX2lzTWF4aW11bVNpemVSZWFjaGVkID0gZmFsc2U7Ci0gICAgbV9kYXRhYmFzZS5zZXRNYXhp
bXVtU2l6ZShtX21heGltdW1TaXplKTsKKyAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1f
bWF4aW11bVNpemUgLSBmbGF0RmlsZUFyZWFTaXplKCkpOwogCiAgICAgU1FMaXRlVHJhbnNhY3Rp
b24gc3RvcmVDYWNoZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIApAQCAtMTAwOCw3ICsx
MDU1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHBhcnNlSGVhZGVycyhjb25zdCBTdHJpbmcmIGhl
YWRlcnMsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnMKIFBhc3NSZWZQdHI8QXBwbGljYXRpb25D
YWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdl
SUQpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJhc2UsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgdHlwZSwgbWlt
ZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEg
RlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJp
ZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiU0VMRUNUIHVybCwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUs
IGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENhY2hlUmVzb3VyY2VEYXRhLnBhdGgg
RlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlcyBPTiBDYWNoZUVudHJp
ZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNlRGF0YSBPTiBDYWNoZVJlc291cmNl
RGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENhY2hlRW50cmllcy5jYWNoZT0/Iik7
CiAgICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewogICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJlIGNhY2hlIHN0YXRlbWVudCwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC0xMDE4LDcgKzEwNjUsOSBA
QCBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjps
b2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZQogICAgIGNhY2hlU3RhdGVtZW50LmJpbmRJbnQ2NCgx
LCBzdG9yYWdlSUQpOwogCiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IGNhY2hlID0gQXBw
bGljYXRpb25DYWNoZTo6Y3JlYXRlKCk7Ci0gICAgCisKKyAgICBTdHJpbmcgZmxhdEZpbGVEaXJl
Y3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwgZmxhdEZp
bGVTdWJkaXJlY3RvcnkpOworCiAgICAgaW50IHJlc3VsdDsKICAgICB3aGlsZSAoKHJlc3VsdCA9
IGNhY2hlU3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0Um93KSB7CiAgICAgICAgIEtVUkwg
dXJsKFBhcnNlZFVSTFN0cmluZywgY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSk7CkBA
IC0xMDMwLDE1ICsxMDc5LDI0IEBAIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlCiAgICAgICAgIAog
ICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gU2hhcmVkQnVmZmVyOjphZG9wdFZl
Y3RvcihibG9iKTsKICAgICAgICAgCisgICAgICAgIFN0cmluZyBwYXRoID0gY2FjaGVTdGF0ZW1l
bnQuZ2V0Q29sdW1uVGV4dCg2KTsKKyAgICAgICAgaW50NjRfdCBzaXplID0gMDsKKyAgICAgICAg
aWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAgc2l6ZSA9IGRhdGEtPnNpemUoKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgICAgIGdldEZpbGVTaXplKHBhdGgs
IHNpemUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBj
YWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDIpOwogICAgICAgICBTdHJpbmcgdGV4dEVuY29k
aW5nTmFtZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoMyk7CiAgICAgICAgIAotICAg
ICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWltZVR5cGUsIGRhdGEtPnNpemUo
KSwgdGV4dEVuY29kaW5nTmFtZSwgIiIpOworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3Bv
bnNlKHVybCwgbWltZVR5cGUsIHNpemUsIHRleHRFbmNvZGluZ05hbWUsICIiKTsKIAogICAgICAg
ICBTdHJpbmcgaGVhZGVycyA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoNCk7CiAgICAg
ICAgIHBhcnNlSGVhZGVycyhoZWFkZXJzLCByZXNwb25zZSk7CiAgICAgICAgIAotICAgICAgICBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9IEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgcmVzcG9uc2UsIHR5cGUsIGRhdGEucmVsZWFzZSgpKTsK
KyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSh1cmwsIHJlc3BvbnNlLCB0eXBlLCBkYXRhLnJl
bGVhc2UoKSwgcGF0aCk7CiAKICAgICAgICAgaWYgKHR5cGUgJiBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U6Ok1hbmlmZXN0KQogICAgICAgICAgICAgY2FjaGUtPnNldE1hbmlmZXN0UmVzb3VyY2Uo
cmVzb3VyY2UucmVsZWFzZSgpKTsKQEAgLTExMzIsNiArMTE5MCw4IEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnJlbW92ZShBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKIAogICAgICAg
ICBjYWNoZS0+Z3JvdXAoKS0+Y2xlYXJTdG9yYWdlSUQoKTsKICAgICB9CisgICAgCisgICAgY2hl
Y2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CiB9ICAgIAogCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjplbXB0eSgpCkBAIC0xMTUyLDcgKzEyMTIsNTEgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6ZW1wdHkoKQogICAgIENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fY2FjaGVzSW5NZW1vcnkuZW5kKCk7CiAgICAgZm9yIChDYWNoZUdyb3VwTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzSW5NZW1vcnkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQogICAgICAgICBpdC0+c2Vjb25kLT5jbGVhclN0b3JhZ2VJRCgpOwotfSAgICAKKyAgICAKKyAg
ICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKK30KKyAgICAKK3ZvaWQgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmRlbGV0ZVRhYmxlcygpCit7CisgICAgZW1wdHkoKTsKKyAgICBtX2RhdGFi
YXNlLmNsZWFyQWxsVGFibGVzKCk7Cit9CisgICAgCitib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0RmlsZShBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqIHJlc291cmNlKQoreworICAgIHJldHVybiByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlw
ZSgpLnN0YXJ0c1dpdGgoImF1ZGlvLyIsIGZhbHNlKSAKKyAgICAgICAgfHwgcmVzb3VyY2UtPnJl
c3BvbnNlKCkubWltZVR5cGUoKS5zdGFydHNXaXRoKCJ2aWRlby8iLCBmYWxzZSk7Cit9CisgICAg
Citib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFUb1VuaXF1ZUZpbGVJbkRp
cmVjdG9yeShTaGFyZWRCdWZmZXIqIGRhdGEsIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBTdHJp
bmcmIHBhdGgpCit7CisgICAgU3RyaW5nIGZ1bGxQYXRoOworICAgIAorICAgIGRvIHsKKyAgICAg
ICAgcGF0aCA9IGVuY29kZUZvckZpbGVOYW1lKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSk7
CisgICAgICAgIC8vIEd1YXJkIGFnYWluc3QgdGhlIGFib3ZlIGZ1bmN0aW9uIGJlaW5nIGNhbGxl
ZCBvbiBhIHBsYXRmb3JtIHdoaWNoIGRvZXMgbm90IGltcGxlbWVudAorICAgICAgICAvLyBjcmVh
dGVDYW5vbmljYWxVVUlEU3RyaW5nKCkuCisgICAgICAgIEFTU0VSVCghcGF0aC5pc0VtcHR5KCkp
OworICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBmdWxsUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChk
aXJlY3RvcnksIHBhdGgpOworICAgIH0gd2hpbGUgKGRpcmVjdG9yeU5hbWUoZnVsbFBhdGgpICE9
IGRpcmVjdG9yeSB8fCBmaWxlRXhpc3RzKGZ1bGxQYXRoKSk7CisgICAgCisgICAgUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSA9IG9wZW5GaWxlKGZ1bGxQYXRoLCBPcGVuRm9yV3JpdGUpOworICAg
IGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaW50IHdyaXR0
ZW5CeXRlcyA9IHdyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkp
OworICAgIGNsb3NlRmlsZShoYW5kbGUpOworICAgIAorICAgIGlmICh3cml0dGVuQnl0ZXMgIT0g
ZGF0YS0+c2l6ZSgpKSB7CisgICAgICAgIGRlbGV0ZUZpbGUoZnVsbFBhdGgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQogCiBib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2Fj
aGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QpCiB7CkBAIC0xMTcx
LDcgKzEyNzUsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNh
Y2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAgIGZvciAoQXBwbGljYXRp
b25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJl
c291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6Y3JlYXRlKHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291
cmNlLT50eXBlKCksIHJlc291cmNlLT5kYXRhKCkpOworICAgICAgICBSZWZQdHI8QXBwbGljYXRp
b25DYWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6
OmNyZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5yZXNwb25zZSgpLCByZXNvdXJjZS0+
dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpLCByZXNvdXJjZS0+cGF0aCgpKTsKICAgICAgICAgCiAg
ICAgICAgIGNhY2hlQ29weS0+YWRkUmVzb3VyY2UocmVzb3VyY2VDb3B5LnJlbGVhc2UoKSk7CiAg
ICAgfQpAQCAtMTI3OSw2ICsxMzgzLDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKQogICAgIH0KIAogICAg
IGRlbGV0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIAorICAgIGNoZWNrRm9yRGVsZXRlZFJl
c291cmNlcygpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMjk2LDYgKzE0MDMs
NjkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JNYXhTaXplUmVhY2hl
ZCgpCiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgPT0gU1FMUmVzdWx0RnVsbCkKICAg
ICAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9IHRydWU7CiB9CisgICAgCit2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKQoreworICAgIG9w
ZW5EYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBTZWxlY3Qgb25seSB0aGUgcGF0aHMgaW4gRGVsZXRlZENhY2hl
UmVzb3VyY2VzIHRoYXQgZG8gbm90IGFsc28gYXBwZWFyIGluIENhY2hlUmVzb3VyY2VEYXRhOgor
ICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VMRUNUIERlbGV0
ZWRDYWNoZVJlc291cmNlcy5wYXRoICIKKyAgICAgICAgIkZST00gRGVsZXRlZENhY2hlUmVzb3Vy
Y2VzICIKKyAgICAgICAgIkxFRlQgSk9JTiBDYWNoZVJlc291cmNlRGF0YSAiCisgICAgICAgICJP
TiBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9IENhY2hlUmVzb3VyY2VEYXRhLnBhdGggIgor
ICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9PSBDYWNo
ZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIik7CisgICAgCisgICAgaWYgKHNlbGVjdFBhdGhz
LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlm
IChzZWxlY3RQYXRocy5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgZG8geworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBhdGhzLmdldENvbHVt
blRleHQoMCk7CisgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksIGZsYXRGaWxlU3ViZGlyZWN0b3J5
KTsKKyAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZs
YXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgCisgICAgICAgIC8vIERvbid0IGV4aXQg
dGhlIGZsYXRGaWxlRGlyZWN0b3J5ISBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgInBh
dGgiIGVudHJ5IGNvbnRhaW5zIGEgZGlyZWN0b3J5IAorICAgICAgICAvLyBjb21wb25lbnQsIGJ1
dCBwcm90ZWN0IGFnYWluc3QgaXQgcmVnYXJkbGVzcy4KKyAgICAgICAgaWYgKGRpcmVjdG9yeU5h
bWUoZnVsbFBhdGgpICE9IGZsYXRGaWxlRGlyZWN0b3J5KQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAorICAgICAgICBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKyAgICB9IHdoaWxlIChz
ZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KTsKKyAgICAKKyAgICBleGVjdXRlU1FM
Q29tbWFuZCgiREVMRVRFIEZST00gRGVsZXRlZENhY2hlUmVzb3VyY2VzIik7Cit9CisgICAgCits
b25nIGxvbmcgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQorewor
ICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKKyAg
ICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9j
YWNoZURpcmVjdG9yeSwgZmxhdEZpbGVTdWJkaXJlY3RvcnkpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBzZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJlc291cmNl
RGF0YSBXSEVSRSBwYXRoIE5PVCBOVUxMIik7CisKKyAgICBpZiAoc2VsZWN0UGF0aHMucHJlcGFy
ZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHdoaWxlIChzZWxl
Y3RQYXRocy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIFN0cmluZyBwYXRoID0g
c2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAg
ICAgbG9uZyBsb25nIHBhdGhTaXplID0gMDsKKyAgICAgICAgaWYgKCFnZXRGaWxlU2l6ZShmdWxs
UGF0aCwgcGF0aFNpemUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHRvdGFsU2l6
ZSArPSBwYXRoU2l6ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KIAog
dm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShIYXNoU2V0
PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNlY3VyaXR5T3JpZ2luSGFzaD4mIG9yaWdpbnMpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oCmluZGV4IGM5NGQ2M2QuLjMxMzZiNTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5o
CkBAIC0xMTMsNiArMTEzLDkgQEAgcHJpdmF0ZToKICAgICBib29sIHN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSosIHVuc2lnbmVkIGNhY2hlU3RvcmFnZUlEKTsKIAogICAgIGJvb2wgZW5z
dXJlT3JpZ2luUmVjb3JkKGNvbnN0IFNlY3VyaXR5T3JpZ2luKik7CisgICAgYm9vbCBzaG91bGRT
dG9yZVJlc291cmNlQXNGbGF0RmlsZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqKTsKKyAgICB2
b2lkIGRlbGV0ZVRhYmxlcygpOworICAgIGJvb2wgd3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJl
Y3RvcnkoU2hhcmVkQnVmZmVyKiwgY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIFN0cmluZyYgb3V0
RmlsZW5hbWUpOwogCiAgICAgdm9pZCBsb2FkTWFuaWZlc3RIb3N0SGFzaGVzKCk7CiAgICAgCkBA
IC0xMjQsNiArMTI3LDggQEAgcHJpdmF0ZToKICAgICBib29sIGV4ZWN1dGVTUUxDb21tYW5kKGNv
bnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBjaGVja0Zvck1heFNpemVSZWFjaGVkKCk7CisgICAg
dm9pZCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBsb25nIGxvbmcgZmxhdEZpbGVB
cmVhU2l6ZSgpOwogICAgIAogICAgIFN0cmluZyBtX2NhY2hlRGlyZWN0b3J5OwogICAgIFN0cmlu
ZyBtX2NhY2hlRmlsZTsKLS0gCjEuNy40LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86830</attachid>
            <date>2011-03-24 14:04:25 -0700</date>
            <delta_ts>2011-03-24 22:52:32 -0700</delta_ts>
            <desc>[2/3] Store media files as flat files within the Application Cache area.</desc>
            <filename>bug-53784-20110324140423.patch</filename>
            <type>text/plain</type>
            <size>19467</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE4OTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlZTJhODMzYmI2NjllN2Jj
NGU4ODBhOGViYmFjMTUxNGM4Y2FiMTYzLi45ZGEyMzhlYTZkOWYyZjE2NThhOTFjYzBlMWI2MWQw
MzQyZWNkNzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDEgQEAKIDIwMTEtMDMtMjMgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQXBwbGljYXRpb24gQ2FjaGUgc2hvdWxkIHNhdmUgYXVkaW8v
IGFuZCB2aWRlby8gbWltZSB0eXBlcyBhcyBmbGF0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzc4NAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vODkzMjQ3Mz4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgU3RvcmUgY2Vy
dGFpbiBtaW1lIHR5cGVzIGFzIGZsYXQgZmlsZXMgYWxvbmdzaWRlIHRoZSBBcHBsaWNhdGlvbiBD
YWNoZSBkYXRhYmFzZS4KKyAgICAgICAgVGhpcyByZXF1aXJlcyBwbHVtYmluZyB0aGUgc2F2ZWQg
ZmlsZSBwYXRoIGZyb20gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgdGhyb3VnaAorICAgICAgICB0
byBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VE
YXRhIHNjaGVtYSBhbmQKKyAgICAgICAgICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJj
ZXMgdGFibGUsIGFkZCBhIG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUg
bmV3IHBhdGggZGF0YSB3aGVuIGFkZGluZyBuZXcgcm93cyBpbiAKKyAgICAgICAgICAgIENhY2hl
UmVzb3VyY2VEYXRhLCBhbmQgc3RvcmUgbWVkaWEgcmVzb3VyY2VzIGFzIGZsYXQgZmlsZXMuCisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKTogUHVs
bCB0aGUgInBhdGgiIGNvbHVtbiBmcm9tIENhY2hlUmVzb3VyY2VEYXRhCisgICAgICAgICAgICB3
aGVuIGxvYWRpbmcgY2FjaGUgaXRlbXMuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6cmVtb3ZlKTogQ2FsbCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVs
ZXRlQ2FjaGVHcm91cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6IFdhbGsgdGhyb3VnaCBEZWxldGVk
Q2FjaGVSZXNvdXJjZURhdGEKKyAgICAgICAgICAgIGxvb2tpbmcgZm9yIGVudHJpZXMgd2l0aCBu
b24tZW1wdHkgInBhdGgiIGNvbHVtbnM7IGlmIGZvdW5kLCBkZWxldGUuCisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6IFdhbGsgdGhy
b3VnaCBDYWNoZVJlc291cmNlRGF0YSByb3dzCisgICAgICAgICAgICBhbmQgc3VtIHRoZSBmaWxl
IHNpemUgb2YgdGhvc2Ugcm93cyB3aXRoIGZsYXQgZmlsZSBzdG9yYWdlLgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOiBDYWxs
IGRlbGV0ZVRhYmxlcygpIGluc3RlYWQgb2YgCisgICAgICAgICAgICBjbGVhckFsbFRhYmxlcygp
IGRpcmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRl
bGV0ZVRhYmxlcyk6IENhbGwgZW1wdHkoKSBiZWZvcmUgZGVsZXRpbmcgdGhlIHRhYmxlcywKKyAg
ICAgICAgICAgIHNvIHRoYXQgZmxhdCBmaWxlcyBnZXQgZGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0Rmls
ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Ondy
aXRlRGF0YVRvVW5pcXVlRmlsZUluRGlyZWN0b3J5KTogQWRkZWQuCisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg6CisKKzIwMTEtMDMtMjMgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVq
IFN0YWNob3dpYWsuCiAKICAgICAgICAgQXBwbGljYXRpb24gQ2FjaGUgc2hvdWxkIHNhdmUgYXVk
aW8vIGFuZCB2aWRlby8gbWltZSB0eXBlcyBhcyBmbGF0IGZpbGVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgK
aW5kZXggMTkwZTYyOTEwMTliN2E3NzI5NTMyYzNjZWUwZWFiZmUxZjZjNmRkZS4uNjYzM2M2YzQw
NmFhNjlmMjg2NGExZDkzOTlmNDc4YjJlZDIzMDIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaApAQCAt
NTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgaW50NjRfdCBlc3RpbWF0ZWRTaXplSW5TdG9yYWdl
KCk7CiAKICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0K
KyAgICB2b2lkIHNldFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKSB7IG1fcGF0aCA9IHBhdGg7IH0K
IAogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgdm9pZCBkdW1wVHlwZSh1bnNpZ25lZCB0eXBl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDBmNTE1NDc5N2NiN2U2ODVhYzY1MzU3MWY0NWUx
MjM5MzUwOGQ3MjEuLjBlZjhkZWNjZjc3ZTlmYTkxZDJjZGE0OWEwMTc2Zjk3MDYwZjBlZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlNRTGl0ZVN0
YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJVVUlELmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CkBAIC00Niw2ICs0Nyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGNoYXIgZmxhdEZpbGVTdWJkaXJlY3Rv
cnlbXSA9ICJBcHBsaWNhdGlvbkNhY2hlIjsKKwogdGVtcGxhdGUgPGNsYXNzIFQ+CiBjbGFzcyBT
dG9yYWdlSURKb3VybmFsIHsKIHB1YmxpYzogIApAQCAtMzk0LDcgKzM5Nyw3IEBAIGludDY0X3Qg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNwYWNlTmVlZGVkKGludDY0X3QgY2FjaGVUb1NhdmUp
CiAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX2NhY2hlRmlsZSwgZmlsZVNpemUpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGludDY0X3QgY3VycmVudFNpemUgPSBmaWxlU2l6ZTsKKyAgICBpbnQ2
NF90IGN1cnJlbnRTaXplID0gZmlsZVNpemUgKyBmbGF0RmlsZUFyZWFTaXplKCk7CiAKICAgICAv
LyBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHdlIGhhdmUgYXZhaWxhYmxlLgog
ICAgIGludDY0X3QgdG90YWxBdmFpbGFibGVTaXplID0gMDsKQEAgLTU2MCw3ICs1NjMsNyBAQCBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29tbWFuZChjb25zdCBTdHJp
bmcmIHNxbCkKIC8vIFVwZGF0ZSB0aGUgc2NoZW1hVmVyc2lvbiB3aGVuIHRoZSBzY2hlbWEgb2Yg
YW55IHRoZSBBcHBsaWNhdGlvbiBDYWNoZQogLy8gU1FMaXRlIHRhYmxlcyBjaGFuZ2VzLiBUaGlz
IGFsbG93cyB0aGUgZGF0YWJhc2UgdG8gYmUgcmVidWlsdCB3aGVuCiAvLyBhIG5ldywgaW5jb21w
YXRpYmxlIGNoYW5nZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIHRoZSBkYXRhYmFzZSBzY2hlbWEu
Ci1zdGF0aWMgY29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSA2Oworc3RhdGljIGNvbnN0IGludCBz
Y2hlbWFWZXJzaW9uID0gNzsKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZl
cmlmeVNjaGVtYVZlcnNpb24oKQogewpAQCAtNTY4LDcgKzU3MSw3IEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIGlmICh2ZXJzaW9uID09
IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YWJhc2UuY2xlYXJB
bGxUYWJsZXMoKTsKKyAgICBkZWxldGVUYWJsZXMoKTsKIAogICAgIC8vIFVwZGF0ZSB1c2VyIHZl
cnNpb24uCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc2V0RGF0YWJhc2VWZXJzaW9uKG1fZGF0YWJh
c2UpOwpAQCAtNjE4LDcgKzYyMSw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9w
ZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogICAgIGV4ZWN1dGVTUUxDb21t
YW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZUVudHJpZXMgKGNhY2hlIElOVEVH
RVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgdHlwZSBJTlRFR0VSLCByZXNvdXJjZSBJTlRF
R0VSIE5PVCBOVUxMKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYg
Tk9UIEVYSVNUUyBDYWNoZVJlc291cmNlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5D
UkVNRU5ULCB1cmwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAiCiAgICAgICAgICAg
ICAgICAgICAgICAgInN0YXR1c0NvZGUgSU5URUdFUiBOT1QgTlVMTCwgcmVzcG9uc2VVUkwgVEVY
VCBOT1QgTlVMTCwgbWltZVR5cGUgVEVYVCwgdGV4dEVuY29kaW5nTmFtZSBURVhULCBoZWFkZXJz
IFRFWFQsIGRhdGEgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOwotICAgIGV4
ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNl
RGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBkYXRhIEJMT0IpIik7
CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hl
UmVzb3VyY2VEYXRhIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGRhdGEg
QkxPQiwgcGF0aCBURVhUKSIpOworICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUg
SUYgTk9UIEVYSVNUUyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVkgQVVUT0lOQ1JFTUVOVCwgcGF0aCBURVhUKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJD
UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBPcmlnaW5zIChvcmlnaW4gVEVYVCBVTklRVUUgT04g
Q09ORkxJQ1QgSUdOT1JFLCBxdW90YSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwp
Iik7CiAKICAgICAvLyBXaGVuIGEgY2FjaGUgaXMgZGVsZXRlZCwgYWxsIGl0cyBlbnRyaWVzIGFu
ZCBpdHMgd2hpdGVsaXN0IHNob3VsZCBiZSBkZWxldGVkLgpAQCAtNjQxLDYgKzY0NSwxNSBAQCB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRv
ZXNOb3RFeGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAiIEZPUiBFQUNIIFJPVyBCRUdJTiIK
ICAgICAgICAgICAgICAgICAgICAgICAiICBERUxFVEUgRlJPTSBDYWNoZVJlc291cmNlRGF0YSBX
SEVSRSBpZCA9IE9MRC5kYXRhOyIKICAgICAgICAgICAgICAgICAgICAgICAiIEVORCIpOworICAg
IAorICAgIC8vIFdoZW4gYSBjYWNoZSByZXNvdXJjZSBpcyBkZWxldGVkLCBpZiBpdCBjb250YWlu
cyBhIG5vbi1lbXB0eSBwYXRoLCB0aGF0IHBhdGggc2hvdWxkCisgICAgLy8gYmUgYWRkZWQgdG8g
dGhlIERlbGV0ZWRDYWNoZVJlc291cmNlcyB0YWJsZSBzbyB0aGUgZmxhdCBmaWxlIGF0IHRoYXQg
cGF0aCBjYW4KKyAgICAvLyBiZSBkZWxldGVkIGF0IGEgbGF0ZXIgdGltZS4KKyAgICBleGVjdXRl
U1FMQ29tbWFuZCgiQ1JFQVRFIFRSSUdHRVIgSUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNlRGF0
YURlbGV0ZWQgQUZURVIgREVMRVRFIE9OIENhY2hlUmVzb3VyY2VEYXRhIgorICAgICAgICAgICAg
ICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIgorICAgICAgICAgICAgICAgICAgICAgICIgV0hFTiBP
TEQucGF0aCBOT1QgTlVMTCBCRUdJTiIKKyAgICAgICAgICAgICAgICAgICAgICAiICBJTlNFUlQg
SU5UTyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKHBhdGgpIHZhbHVlcyAoT0xELnBhdGgpOyIKKyAg
ICAgICAgICAgICAgICAgICAgICAiIEVORCIpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50KQpAQCAt
NzcyLDE1ICs3ODUsNDMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBw
bGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gRmlyc3QsIGluc2VydCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRl
bWVudCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNl
RGF0YSAoZGF0YSkgVkFMVUVTICg/KSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0
aCkgVkFMVUVTICg/LCA/KSIpOwogICAgIGlmIChkYXRhU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChyZXNvdXJj
ZS0+ZGF0YSgpLT5zaXplKCkpCi0gICAgICAgIGRhdGFTdGF0ZW1lbnQuYmluZEJsb2IoMSwgcmVz
b3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpOworCisgICAg
U3RyaW5nIGZ1bGxQYXRoOworICAgIGlmICghcmVzb3VyY2UtPnBhdGgoKS5pc0VtcHR5KCkpCisg
ICAgICAgIGRhdGFTdGF0ZW1lbnQuYmluZFRleHQoMiwgcGF0aEdldEZpbGVOYW1lKHJlc291cmNl
LT5wYXRoKCkpKTsKKyAgICBlbHNlIGlmIChzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0RmlsZShy
ZXNvdXJjZSkpIHsKKyAgICAgICAgLy8gRmlyc3QsIGNoZWNrIHRvIHNlZSBpZiBjcmVhdGluZyB0
aGUgZmxhdCBmaWxlIHdvdWxkIHZpb2xhdGUgdGhlIG1heGltdW0gdG90YWwgcXVvdGEuIFdlIGRv
bid0IG5lZWQKKyAgICAgICAgLy8gdG8gY2hlY2sgdGhlIHBlci1vcmlnaW4gcXVvdGEgaGVyZSwg
YXMgaXQgd2FzIGFscmVhZHkgY2hlY2tlZCBpbiBzdG9yZU5ld2VzdENhY2hlKCkuCisgICAgICAg
IGlmIChtX2RhdGFiYXNlLnRvdGFsU2l6ZSgpICsgZmxhdEZpbGVBcmVhU2l6ZSgpICsgcmVzb3Vy
Y2UtPmRhdGEoKS0+c2l6ZSgpID4gbV9tYXhpbXVtU2l6ZSkgeworICAgICAgICAgICAgbV9pc01h
eGltdW1TaXplUmVhY2hlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBmbGF0RmlsZVN1YmRpcmVjdG9y
eSk7CisgICAgICAgIG1ha2VBbGxEaXJlY3RvcmllcyhmbGF0RmlsZURpcmVjdG9yeSk7CisgICAg
ICAgIFN0cmluZyBwYXRoOworICAgICAgICBpZiAoIXdyaXRlRGF0YVRvVW5pcXVlRmlsZUluRGly
ZWN0b3J5KHJlc291cmNlLT5kYXRhKCksIGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxQYXRoID0gcGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgcmVz
b3VyY2UtPnNldFBhdGgoZnVsbFBhdGgpOworICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0
KDIsIHBhdGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyZXNvdXJjZS0+ZGF0YSgpLT5z
aXplKCkpCisgICAgICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRCbG9iKDEsIHJlc291cmNlLT5k
YXRhKCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKKyAgICB9CiAgICAgCi0g
ICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpCisgICAgaWYgKCFkYXRhU3Rh
dGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUg
d2hpY2ggd2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoKKyAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKwogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogCiAgICAgdW5zaWduZWQgZGF0YUlkID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2VydFJvd0lEKCkpOwogCkBAIC04MzEsNiArODcyLDEy
IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGVu
dHJ5U3RhdGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIC8vIERpZCB3
ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywK
KyAgICAvLyByZWxlYXNlIHRoZSByZXNvdXJjZSdzIGRhdGEgYW5kIGZyZWUgdXAgYSBwb3RlbnRp
YWxseSBsYXJnZSBhbW91bnQKKyAgICAvLyBvZiBtZW1vcnk6CisgICAgaWYgKCFmdWxsUGF0aC5p
c0VtcHR5KCkpCisgICAgICAgIHJlc291cmNlLT5kYXRhKCktPmNsZWFyKCk7CisKICAgICByZXNv
dXJjZS0+c2V0U3RvcmFnZUlEKHJlc291cmNlSWQpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
ODYxLDcgKzkwOCw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAKICAgICBtX2lzTWF4aW11bVNpemVSZWFjaGVkID0gZmFsc2U7Ci0gICAgbV9kYXRh
YmFzZS5zZXRNYXhpbXVtU2l6ZShtX21heGltdW1TaXplKTsKKyAgICBtX2RhdGFiYXNlLnNldE1h
eGltdW1TaXplKG1fbWF4aW11bVNpemUgLSBmbGF0RmlsZUFyZWFTaXplKCkpOwogCiAgICAgU1FM
aXRlVHJhbnNhY3Rpb24gc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAg
IHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5iZWdpbigpOwpAQCAtOTA4LDcgKzk1NSw3IEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25D
YWNoZUdyb3VwKiBncm91cCwgQXBwCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1faXNN
YXhpbXVtU2l6ZVJlYWNoZWQgPSBmYWxzZTsKLSAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXpl
KG1fbWF4aW11bVNpemUpOworICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVt
U2l6ZSAtIGZsYXRGaWxlQXJlYVNpemUoKSk7CiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9y
ZUNhY2hlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CiAgICAgCkBAIC0xMDA4LDcgKzEwNTUsNyBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VIZWFkZXJzKGNvbnN0IFN0cmluZyYgaGVhZGVycywg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9ucwogUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKIHsK
ICAgICBTUUxpdGVTdGF0ZW1lbnQgY2FjaGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgdXJsLCB0eXBlLCBtaW1lVHlwZSwg
dGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJjZURhdGEuZGF0YSBGUk9NIENh
Y2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNv
dXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJTRUxFQ1QgdXJsLCB0eXBlLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVy
cywgQ2FjaGVSZXNvdXJjZURhdGEuZGF0YSwgQ2FjaGVSZXNvdXJjZURhdGEucGF0aCBGUk9NIENh
Y2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNv
dXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VEYXRhIE9OIENhY2hlUmVzb3VyY2VEYXRhLmlk
PUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hFUkUgQ2FjaGVFbnRyaWVzLmNhY2hlPT8iKTsKICAgICBp
ZiAoY2FjaGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CiAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgY2FjaGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIi
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTEwMTgsNyArMTA2NSw5IEBAIFBhc3NS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNo
ZSh1bnNpZ25lZCBzdG9yYWdlCiAgICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3Jh
Z2VJRCk7CiAKICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gY2FjaGUgPSBBcHBsaWNhdGlv
bkNhY2hlOjpjcmVhdGUoKTsKLSAgICAKKworICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBmbGF0RmlsZVN1YmRp
cmVjdG9yeSk7CisKICAgICBpbnQgcmVzdWx0OwogICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVT
dGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cpIHsKICAgICAgICAgS1VSTCB1cmwoUGFy
c2VkVVJMU3RyaW5nLCBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApKTsKQEAgLTEwMzAs
MTUgKzEwNzksMjQgQEAgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2UKICAgICAgICAgCiAgICAgICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJs
b2IpOwogICAgICAgICAKKyAgICAgICAgU3RyaW5nIHBhdGggPSBjYWNoZVN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDYpOworICAgICAgICBpbnQ2NF90IHNpemUgPSAwOworICAgICAgICBpZiAocGF0
aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzaXplID0gZGF0YS0+c2l6ZSgpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZp
bGVEaXJlY3RvcnksIHBhdGgpOworICAgICAgICAgICAgZ2V0RmlsZVNpemUocGF0aCwgc2l6ZSk7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGNhY2hlU3Rh
dGVtZW50LmdldENvbHVtblRleHQoMik7CiAgICAgICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1l
ID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgzKTsKICAgICAgICAgCi0gICAgICAgIFJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgZGF0YS0+c2l6ZSgpLCB0ZXh0
RW5jb2RpbmdOYW1lLCAiIik7CisgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJs
LCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5nTmFtZSwgIiIpOwogCiAgICAgICAgIFN0cmlu
ZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgcGFy
c2VIZWFkZXJzKGhlYWRlcnMsIHJlc3BvbnNlKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291
cmNlOjpjcmVhdGUodXJsLCByZXNwb25zZSwgdHlwZSwgZGF0YS5yZWxlYXNlKCkpOworICAgICAg
ICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZSA9IEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgcmVzcG9uc2UsIHR5cGUsIGRhdGEucmVsZWFzZSgp
LCBwYXRoKTsKIAogICAgICAgICBpZiAodHlwZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6
TWFuaWZlc3QpCiAgICAgICAgICAgICBjYWNoZS0+c2V0TWFuaWZlc3RSZXNvdXJjZShyZXNvdXJj
ZS5yZWxlYXNlKCkpOwpAQCAtMTEzMiw2ICsxMTkwLDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQogCiAgICAgICAgIGNhY2hl
LT5ncm91cCgpLT5jbGVhclN0b3JhZ2VJRCgpOwogICAgIH0KKyAgICAKKyAgICBjaGVja0ZvckRl
bGV0ZWRSZXNvdXJjZXMoKTsKIH0gICAgCiAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OmVtcHR5KCkKQEAgLTExNTIsNyArMTIxMiw1MSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjplbXB0eSgpCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9j
YWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAg
ICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlEKCk7Ci19ICAgIAorICAgIAorICAgIGNoZWNr
Rm9yRGVsZXRlZFJlc291cmNlcygpOworfQorICAgIAordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6ZGVsZXRlVGFibGVzKCkKK3sKKyAgICBlbXB0eSgpOworICAgIG1fZGF0YWJhc2UuY2xl
YXJBbGxUYWJsZXMoKTsKK30KKyAgICAKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNo
b3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVz
b3VyY2UpCit7CisgICAgcmV0dXJuIHJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkuc3Rh
cnRzV2l0aCgiYXVkaW8vIiwgZmFsc2UpIAorICAgICAgICB8fCByZXNvdXJjZS0+cmVzcG9uc2Uo
KS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoInZpZGVvLyIsIGZhbHNlKTsKK30KKyAgICAKK2Jvb2wg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OndyaXRlRGF0YVRvVW5pcXVlRmlsZUluRGlyZWN0b3J5
KFNoYXJlZEJ1ZmZlciogZGF0YSwgY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIFN0cmluZyYgcGF0
aCkKK3sKKyAgICBTdHJpbmcgZnVsbFBhdGg7CisgICAgCisgICAgZG8geworICAgICAgICBwYXRo
ID0gZW5jb2RlRm9yRmlsZU5hbWUoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKKyAgICAg
ICAgLy8gR3VhcmQgYWdhaW5zdCB0aGUgYWJvdmUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIG9uIGEg
cGxhdGZvcm0gd2hpY2ggZG9lcyBub3QgaW1wbGVtZW50CisgICAgICAgIC8vIGNyZWF0ZUNhbm9u
aWNhbFVVSURTdHJpbmcoKS4KKyAgICAgICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CisgICAg
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGZ1bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9y
eSwgcGF0aCk7CisgICAgfSB3aGlsZSAoZGlyZWN0b3J5TmFtZShmdWxsUGF0aCkgIT0gZGlyZWN0
b3J5IHx8IGZpbGVFeGlzdHMoZnVsbFBhdGgpKTsKKyAgICAKKyAgICBQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlID0gb3BlbkZpbGUoZnVsbFBhdGgsIE9wZW5Gb3JXcml0ZSk7CisgICAgaWYgKCFo
YW5kbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpbnQ2NF90IHdyaXR0ZW5C
eXRlcyA9IHdyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwor
ICAgIGNsb3NlRmlsZShoYW5kbGUpOworICAgIAorICAgIGlmICh3cml0dGVuQnl0ZXMgIT0gKGlu
dDY0X3QpZGF0YS0+c2l6ZSgpKSB7CisgICAgICAgIGRlbGV0ZUZpbGUoZnVsbFBhdGgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQogCiBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmlu
ZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QpCiB7CkBA
IC0xMTcxLDcgKzEyNzUsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNv
cHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcAogICAgIGZvciAoQXBw
bGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCks
IHJlc291cmNlLT50eXBlKCksIHJlc291cmNlLT5kYXRhKCkpOworICAgICAgICBSZWZQdHI8QXBw
bGljYXRpb25DYWNoZVJlc291cmNlPiByZXNvdXJjZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U6OmNyZWF0ZShyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlLT5yZXNwb25zZSgpLCByZXNv
dXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0YSgpLCByZXNvdXJjZS0+cGF0aCgpKTsKICAgICAg
ICAgCiAgICAgICAgIGNhY2hlQ29weS0+YWRkUmVzb3VyY2UocmVzb3VyY2VDb3B5LnJlbGVhc2Uo
KSk7CiAgICAgfQpAQCAtMTI3OSw2ICsxMzgzLDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6ZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKQogICAgIH0K
IAogICAgIGRlbGV0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIAorICAgIGNoZWNrRm9yRGVs
ZXRlZFJlc291cmNlcygpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMjk2LDYg
KzE0MDMsNjkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JNYXhTaXpl
UmVhY2hlZCgpCiAgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgPT0gU1FMUmVzdWx0RnVs
bCkKICAgICAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9IHRydWU7CiB9CisgICAgCit2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKQorewor
ICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBTZWxlY3Qgb25seSB0aGUgcGF0aHMgaW4gRGVsZXRl
ZENhY2hlUmVzb3VyY2VzIHRoYXQgZG8gbm90IGFsc28gYXBwZWFyIGluIENhY2hlUmVzb3VyY2VE
YXRhOgorICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VMRUNU
IERlbGV0ZWRDYWNoZVJlc291cmNlcy5wYXRoICIKKyAgICAgICAgIkZST00gRGVsZXRlZENhY2hl
UmVzb3VyY2VzICIKKyAgICAgICAgIkxFRlQgSk9JTiBDYWNoZVJlc291cmNlRGF0YSAiCisgICAg
ICAgICJPTiBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9IENhY2hlUmVzb3VyY2VEYXRhLnBh
dGggIgorICAgICAgICAiV0hFUkUgKFNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9
PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJUyBOVUxMIik7CisgICAgCisgICAgaWYgKHNlbGVj
dFBhdGhzLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGlmIChzZWxlY3RQYXRocy5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgZG8geworICAgICAgICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBhdGhzLmdl
dENvbHVtblRleHQoMCk7CisgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksIGZsYXRGaWxlU3ViZGly
ZWN0b3J5KTsKKyAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgCisgICAgICAgIC8vIERvbid0
IGV4aXQgdGhlIGZsYXRGaWxlRGlyZWN0b3J5ISBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0
aGUgInBhdGgiIGVudHJ5IGNvbnRhaW5zIGEgZGlyZWN0b3J5IAorICAgICAgICAvLyBjb21wb25l
bnQsIGJ1dCBwcm90ZWN0IGFnYWluc3QgaXQgcmVnYXJkbGVzcy4KKyAgICAgICAgaWYgKGRpcmVj
dG9yeU5hbWUoZnVsbFBhdGgpICE9IGZsYXRGaWxlRGlyZWN0b3J5KQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIAorICAgICAgICBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKyAgICB9IHdo
aWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KTsKKyAgICAKKyAgICBleGVj
dXRlU1FMQ29tbWFuZCgiREVMRVRFIEZST00gRGVsZXRlZENhY2hlUmVzb3VyY2VzIik7Cit9Cisg
ICAgCitsb25nIGxvbmcgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUo
KQoreworICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBsb25nIGxvbmcgdG90YWxTaXplID0g
MDsKKyAgICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9jYWNoZURpcmVjdG9yeSwgZmxhdEZpbGVTdWJkaXJlY3RvcnkpOworICAgIFNRTGl0ZVN0
YXRlbWVudCBzZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VMRUNUIHBhdGggRlJPTSBDYWNoZVJl
c291cmNlRGF0YSBXSEVSRSBwYXRoIE5PVCBOVUxMIik7CisKKyAgICBpZiAoc2VsZWN0UGF0aHMu
cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHdoaWxl
IChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIFN0cmluZyBw
YXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIGZ1bGxQ
YXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsK
KyAgICAgICAgbG9uZyBsb25nIHBhdGhTaXplID0gMDsKKyAgICAgICAgaWYgKCFnZXRGaWxlU2l6
ZShmdWxsUGF0aCwgcGF0aFNpemUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHRv
dGFsU2l6ZSArPSBwYXRoU2l6ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRvdGFsU2l6ZTsK
K30KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShI
YXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNlY3VyaXR5T3JpZ2luSGFzaD4mIG9yaWdp
bnMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5oCmluZGV4IGM5NGQ2M2RiZjc4YTc1MTYzZGYyN2ZkY2U2MzE1
NWJjMTMxYjE4ZWQuLjMxMzZiNTI5OGIwNTUzMTlhOWI1NDFiY2Y1YzkxYWEyYTIzM2RkYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oCkBAIC0xMTMsNiArMTEzLDkgQEAgcHJpdmF0ZToKICAgICBib29sIHN0
b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSosIHVuc2lnbmVkIGNhY2hlU3RvcmFnZUlEKTsK
IAogICAgIGJvb2wgZW5zdXJlT3JpZ2luUmVjb3JkKGNvbnN0IFNlY3VyaXR5T3JpZ2luKik7Cisg
ICAgYm9vbCBzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0RmlsZShBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UqKTsKKyAgICB2b2lkIGRlbGV0ZVRhYmxlcygpOworICAgIGJvb2wgd3JpdGVEYXRhVG9V
bmlxdWVGaWxlSW5EaXJlY3RvcnkoU2hhcmVkQnVmZmVyKiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rv
cnksIFN0cmluZyYgb3V0RmlsZW5hbWUpOwogCiAgICAgdm9pZCBsb2FkTWFuaWZlc3RIb3N0SGFz
aGVzKCk7CiAgICAgCkBAIC0xMjQsNiArMTI3LDggQEAgcHJpdmF0ZToKICAgICBib29sIGV4ZWN1
dGVTUUxDb21tYW5kKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBjaGVja0Zvck1heFNpemVS
ZWFjaGVkKCk7CisgICAgdm9pZCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICBsb25n
IGxvbmcgZmxhdEZpbGVBcmVhU2l6ZSgpOwogICAgIAogICAgIFN0cmluZyBtX2NhY2hlRGlyZWN0
b3J5OwogICAgIFN0cmluZyBtX2NhY2hlRmlsZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86888</attachid>
            <date>2011-03-24 22:54:19 -0700</date>
            <delta_ts>2011-03-25 11:37:12 -0700</delta_ts>
            <desc>[2/3] Store media files as flat files within the Application Cache area.</desc>
            <filename>bug-53784-20110324225417.patch</filename>
            <type>text/plain</type>
            <size>19408</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE5MzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzZjQwZGEwOGExNTc1YTgx
NDRlYzBlNzFlMzBiMTBlZmZkZWQzYzdhLi5iOTZjNDQ2NWJkNGMzYmQ1Y2FkMWI3NDFiNzU1ZDJk
ZjVlN2FkZjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDMtMjMgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQXBwbGljYXRpb24gQ2FjaGUgc2hvdWxkIHNhdmUgYXVkaW8v
IGFuZCB2aWRlby8gbWltZSB0eXBlcyBhcyBmbGF0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzc4NAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vODkzMjQ3Mz4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgU3RvcmUgY2Vy
dGFpbiBtaW1lIHR5cGVzIGFzIGZsYXQgZmlsZXMgYWxvbmdzaWRlIHRoZSBBcHBsaWNhdGlvbiBD
YWNoZSBkYXRhYmFzZS4KKyAgICAgICAgVGhpcyByZXF1aXJlcyBwbHVtYmluZyB0aGUgc2F2ZWQg
ZmlsZSBwYXRoIGZyb20gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgdGhyb3VnaAorICAgICAgICB0
byBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VE
YXRhIHNjaGVtYSBhbmQKKyAgICAgICAgICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJj
ZXMgdGFibGUsIGFkZCBhIG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUg
bmV3IHBhdGggZGF0YSB3aGVuIGFkZGluZyBuZXcgcm93cyBpbiAKKyAgICAgICAgICAgIENhY2hl
UmVzb3VyY2VEYXRhLCBhbmQgc3RvcmUgbWVkaWEgcmVzb3VyY2VzIGFzIGZsYXQgZmlsZXMuCisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKTogUHVs
bCB0aGUgInBhdGgiIGNvbHVtbiBmcm9tIENhY2hlUmVzb3VyY2VEYXRhCisgICAgICAgICAgICB3
aGVuIGxvYWRpbmcgY2FjaGUgaXRlbXMuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6cmVtb3ZlKTogQ2FsbCBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMuCisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZW1wdHkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVs
ZXRlQ2FjaGVHcm91cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmNoZWNrRm9yRGVsZXRlZFJlc291cmNlcyk6IFdhbGsgdGhyb3VnaCBEZWxldGVk
Q2FjaGVSZXNvdXJjZURhdGEKKyAgICAgICAgICAgIGxvb2tpbmcgZm9yIGVudHJpZXMgd2l0aCBu
b24tZW1wdHkgInBhdGgiIGNvbHVtbnM7IGlmIGZvdW5kLCBkZWxldGUuCisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmxhdEZpbGVBcmVhU2l6ZSk6IFdhbGsgdGhy
b3VnaCBDYWNoZVJlc291cmNlRGF0YSByb3dzCisgICAgICAgICAgICBhbmQgc3VtIHRoZSBmaWxl
IHNpemUgb2YgdGhvc2Ugcm93cyB3aXRoIGZsYXQgZmlsZSBzdG9yYWdlLgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24pOiBDYWxs
IGRlbGV0ZVRhYmxlcygpIGluc3RlYWQgb2YgCisgICAgICAgICAgICBjbGVhckFsbFRhYmxlcygp
IGRpcmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRl
bGV0ZVRhYmxlcyk6IENhbGwgZW1wdHkoKSBiZWZvcmUgZGVsZXRpbmcgdGhlIHRhYmxlcywKKyAg
ICAgICAgICAgIHNvIHRoYXQgZmxhdCBmaWxlcyBnZXQgZGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0Rmls
ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Ondy
aXRlRGF0YVRvVW5pcXVlRmlsZUluRGlyZWN0b3J5KTogQWRkZWQuCisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg6CisKIDIwMTEtMDMtMjQgIFN0ZXBo
YW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2Vv
ZmYgR2FyZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgKaW5kZXggMTkwZTYyOTEwMTliN2E3NzI5NTMyYzNj
ZWUwZWFiZmUxZjZjNmRkZS4uNjYzM2M2YzQwNmFhNjlmMjg2NGExZDkzOTlmNDc4YjJlZDIzMDIz
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgaW50
NjRfdCBlc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCk7CiAKICAgICBjb25zdCBTdHJpbmcmIHBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAgICB2b2lkIHNldFBhdGgoY29uc3QgU3RyaW5n
JiBwYXRoKSB7IG1fcGF0aCA9IHBhdGg7IH0KIAogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMg
dm9pZCBkdW1wVHlwZSh1bnNpZ25lZCB0eXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDBm
NTE1NDc5N2NiN2U2ODVhYzY1MzU3MWY0NWUxMjM5MzUwOGQ3MjEuLjJjZjIyOTJlOWMxYzM2MTRl
MTViZTNmMDhlMWIzN2U3YWNjMThkZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRy
YW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJVVUlE
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CkBAIC00Niw2ICs0Nyw4IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNv
bnN0IGNoYXIgZmxhdEZpbGVTdWJkaXJlY3RvcnlbXSA9ICJBcHBsaWNhdGlvbkNhY2hlIjsKKwog
dGVtcGxhdGUgPGNsYXNzIFQ+CiBjbGFzcyBTdG9yYWdlSURKb3VybmFsIHsKIHB1YmxpYzogIApA
QCAtMzk0LDcgKzM5Nyw3IEBAIGludDY0X3QgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNwYWNl
TmVlZGVkKGludDY0X3QgY2FjaGVUb1NhdmUpCiAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX2NhY2hl
RmlsZSwgZmlsZVNpemUpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludDY0X3QgY3VycmVu
dFNpemUgPSBmaWxlU2l6ZTsKKyAgICBpbnQ2NF90IGN1cnJlbnRTaXplID0gZmlsZVNpemUgKyBm
bGF0RmlsZUFyZWFTaXplKCk7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBmcmVl
IHNwYWNlIHdlIGhhdmUgYXZhaWxhYmxlLgogICAgIGludDY0X3QgdG90YWxBdmFpbGFibGVTaXpl
ID0gMDsKQEAgLTU2MCw3ICs1NjMsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpl
eGVjdXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcmIHNxbCkKIC8vIFVwZGF0ZSB0aGUgc2NoZW1h
VmVyc2lvbiB3aGVuIHRoZSBzY2hlbWEgb2YgYW55IHRoZSBBcHBsaWNhdGlvbiBDYWNoZQogLy8g
U1FMaXRlIHRhYmxlcyBjaGFuZ2VzLiBUaGlzIGFsbG93cyB0aGUgZGF0YWJhc2UgdG8gYmUgcmVi
dWlsdCB3aGVuCiAvLyBhIG5ldywgaW5jb21wYXRpYmxlIGNoYW5nZSBoYXMgYmVlbiBpbnRyb2R1
Y2VkIHRvIHRoZSBkYXRhYmFzZSBzY2hlbWEuCi1zdGF0aWMgY29uc3QgaW50IHNjaGVtYVZlcnNp
b24gPSA2Oworc3RhdGljIGNvbnN0IGludCBzY2hlbWFWZXJzaW9uID0gNzsKICAgICAKIHZvaWQg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogewpAQCAtNTY4
LDcgKzU3MSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVtYVZl
cnNpb24oKQogICAgIGlmICh2ZXJzaW9uID09IHNjaGVtYVZlcnNpb24pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fZGF0YWJhc2UuY2xlYXJBbGxUYWJsZXMoKTsKKyAgICBkZWxldGVUYWJsZXMo
KTsKIAogICAgIC8vIFVwZGF0ZSB1c2VyIHZlcnNpb24uCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24g
c2V0RGF0YWJhc2VWZXJzaW9uKG1fZGF0YWJhc2UpOwpAQCAtNjE4LDcgKzYyMSw4IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05v
dEV4aXN0KQogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNU
UyBDYWNoZUVudHJpZXMgKGNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwg
dHlwZSBJTlRFR0VSLCByZXNvdXJjZSBJTlRFR0VSIE5PVCBOVUxMKSIpOwogICAgIGV4ZWN1dGVT
UUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNlcyAoaWQg
SU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCB1cmwgVEVYVCBOT1QgTlVMTCBPTiBD
T05GTElDVCBGQUlMLCAiCiAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1c0NvZGUgSU5URUdF
UiBOT1QgTlVMTCwgcmVzcG9uc2VVUkwgVEVYVCBOT1QgTlVMTCwgbWltZVR5cGUgVEVYVCwgdGV4
dEVuY29kaW5nTmFtZSBURVhULCBoZWFkZXJzIFRFWFQsIGRhdGEgSU5URUdFUiBOT1QgTlVMTCBP
TiBDT05GTElDVCBGQUlMKSIpOwotICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUg
SUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNlRGF0YSAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBB
VVRPSU5DUkVNRU5ULCBkYXRhIEJMT0IpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlUmVzb3VyY2VEYXRhIChpZCBJTlRFR0VSIFBSSU1B
UlkgS0VZIEFVVE9JTkNSRU1FTlQsIGRhdGEgQkxPQiwgcGF0aCBURVhUKSIpOworICAgIGV4ZWN1
dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBEZWxldGVkQ2FjaGVSZXNv
dXJjZXMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgcGF0aCBURVhUKSIp
OwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBPcmln
aW5zIChvcmlnaW4gVEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgSUdOT1JFLCBxdW90YSBJTlRFR0VS
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7CiAKICAgICAvLyBXaGVuIGEgY2FjaGUgaXMg
ZGVsZXRlZCwgYWxsIGl0cyBlbnRyaWVzIGFuZCBpdHMgd2hpdGVsaXN0IHNob3VsZCBiZSBkZWxl
dGVkLgpAQCAtNjQxLDYgKzY0NSwxNSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpv
cGVuRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCkKICAgICAgICAgICAgICAgICAg
ICAgICAiIEZPUiBFQUNIIFJPVyBCRUdJTiIKICAgICAgICAgICAgICAgICAgICAgICAiICBERUxF
VEUgRlJPTSBDYWNoZVJlc291cmNlRGF0YSBXSEVSRSBpZCA9IE9MRC5kYXRhOyIKICAgICAgICAg
ICAgICAgICAgICAgICAiIEVORCIpOworICAgIAorICAgIC8vIFdoZW4gYSBjYWNoZSByZXNvdXJj
ZSBpcyBkZWxldGVkLCBpZiBpdCBjb250YWlucyBhIG5vbi1lbXB0eSBwYXRoLCB0aGF0IHBhdGgg
c2hvdWxkCisgICAgLy8gYmUgYWRkZWQgdG8gdGhlIERlbGV0ZWRDYWNoZVJlc291cmNlcyB0YWJs
ZSBzbyB0aGUgZmxhdCBmaWxlIGF0IHRoYXQgcGF0aCBjYW4KKyAgICAvLyBiZSBkZWxldGVkIGF0
IGEgbGF0ZXIgdGltZS4KKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRSSUdHRVIgSUYg
Tk9UIEVYSVNUUyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgQUZURVIgREVMRVRFIE9OIENhY2hl
UmVzb3VyY2VEYXRhIgorICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIgorICAg
ICAgICAgICAgICAgICAgICAgICIgV0hFTiBPTEQucGF0aCBOT1QgTlVMTCBCRUdJTiIKKyAgICAg
ICAgICAgICAgICAgICAgICAiICBJTlNFUlQgSU5UTyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgKHBh
dGgpIHZhbHVlcyAoT0xELnBhdGgpOyIKKyAgICAgICAgICAgICAgICAgICAgICAiIEVORCIpOwog
fQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KFNRTGl0
ZVN0YXRlbWVudCYgc3RhdGVtZW50KQpAQCAtNzcyLDE1ICs3ODUsNDMgQEAgYm9vbCBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJj
ZSwgdW5zaWduZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRmlyc3QsIGluc2Vy
dCB0aGUgZGF0YQotICAgIFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJJTlNFUlQgSU5UTyBDYWNoZVJlc291cmNlRGF0YSAoZGF0YSkgVkFMVUVTICg/KSIpOworICAg
IFNRTGl0ZVN0YXRlbWVudCBkYXRhU3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBD
YWNoZVJlc291cmNlRGF0YSAoZGF0YSwgcGF0aCkgVkFMVUVTICg/LCA/KSIpOwogICAgIGlmIChk
YXRhU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIGlmIChyZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpCi0gICAgICAgIGRh
dGFTdGF0ZW1lbnQuYmluZEJsb2IoMSwgcmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCByZXNvdXJj
ZS0+ZGF0YSgpLT5zaXplKCkpOworCisgICAgU3RyaW5nIGZ1bGxQYXRoOworICAgIGlmICghcmVz
b3VyY2UtPnBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgIGRhdGFTdGF0ZW1lbnQuYmluZFRleHQo
MiwgcGF0aEdldEZpbGVOYW1lKHJlc291cmNlLT5wYXRoKCkpKTsKKyAgICBlbHNlIGlmIChzaG91
bGRTdG9yZVJlc291cmNlQXNGbGF0RmlsZShyZXNvdXJjZSkpIHsKKyAgICAgICAgLy8gRmlyc3Qs
IGNoZWNrIHRvIHNlZSBpZiBjcmVhdGluZyB0aGUgZmxhdCBmaWxlIHdvdWxkIHZpb2xhdGUgdGhl
IG1heGltdW0gdG90YWwgcXVvdGEuIFdlIGRvbid0IG5lZWQKKyAgICAgICAgLy8gdG8gY2hlY2sg
dGhlIHBlci1vcmlnaW4gcXVvdGEgaGVyZSwgYXMgaXQgd2FzIGFscmVhZHkgY2hlY2tlZCBpbiBz
dG9yZU5ld2VzdENhY2hlKCkuCisgICAgICAgIGlmIChtX2RhdGFiYXNlLnRvdGFsU2l6ZSgpICsg
ZmxhdEZpbGVBcmVhU2l6ZSgpICsgcmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpID4gbV9tYXhpbXVt
U2l6ZSkgeworICAgICAgICAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmlu
ZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGly
ZWN0b3J5LCBmbGF0RmlsZVN1YmRpcmVjdG9yeSk7CisgICAgICAgIG1ha2VBbGxEaXJlY3Rvcmll
cyhmbGF0RmlsZURpcmVjdG9yeSk7CisgICAgICAgIFN0cmluZyBwYXRoOworICAgICAgICBpZiAo
IXdyaXRlRGF0YVRvVW5pcXVlRmlsZUluRGlyZWN0b3J5KHJlc291cmNlLT5kYXRhKCksIGZsYXRG
aWxlRGlyZWN0b3J5LCBwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIGZ1bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGly
ZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgcmVzb3VyY2UtPnNldFBhdGgoZnVsbFBhdGgpOworICAg
ICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0KDIsIHBhdGgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChyZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpCisgICAgICAgICAgICBkYXRhU3RhdGVt
ZW50LmJpbmRCbG9iKDEsIHJlc291cmNlLT5kYXRhKCktPmRhdGEoKSwgcmVzb3VyY2UtPmRhdGEo
KS0+c2l6ZSgpKTsKKyAgICB9CiAgICAgCi0gICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4ZWN1dGVD
b21tYW5kKCkpCisgICAgaWYgKCFkYXRhU3RhdGVtZW50LmV4ZWN1dGVDb21tYW5kKCkpIHsKKyAg
ICAgICAgLy8gQ2xlYW4gdXAgdGhlIGZpbGUgd2hpY2ggd2UgbWF5IGhhdmUgd3JpdHRlbiB0bzoK
KyAgICAgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBkZWxldGVGaWxl
KGZ1bGxQYXRoKTsKKwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgdW5zaWdu
ZWQgZGF0YUlkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFzdEluc2VydFJv
d0lEKCkpOwogCkBAIC04MzEsNiArODcyLDEyIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkCiAg
ICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGVudHJ5U3RhdGVtZW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAorICAgIC8vIERpZCB3ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIHJlc291
cmNlIGRhdGEgdG8gYSBmaWxlPyBJZiBzbywKKyAgICAvLyByZWxlYXNlIHRoZSByZXNvdXJjZSdz
IGRhdGEgYW5kIGZyZWUgdXAgYSBwb3RlbnRpYWxseSBsYXJnZSBhbW91bnQKKyAgICAvLyBvZiBt
ZW1vcnk6CisgICAgaWYgKCFmdWxsUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJlc291cmNlLT5k
YXRhKCktPmNsZWFyKCk7CisKICAgICByZXNvdXJjZS0+c2V0U3RvcmFnZUlEKHJlc291cmNlSWQp
OwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtODYxLDcgKzkwOCw3IEBAIGJvb2wgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2Us
IEFwcGxpY2F0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAKICAgICBtX2lzTWF4aW11bVNpemVS
ZWFjaGVkID0gZmFsc2U7Ci0gICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShtX21heGltdW1T
aXplKTsKKyAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUgLSBmbGF0
RmlsZUFyZWFTaXplKCkpOwogCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc3RvcmVSZXNvdXJjZVRy
YW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5iZWdp
bigpOwpAQCAtOTA4LDcgKzk1NSw3IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCwgQXBwCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSBmYWxzZTsKLSAg
ICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUpOworICAgIG1fZGF0YWJh
c2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVtU2l6ZSAtIGZsYXRGaWxlQXJlYVNpemUoKSk7CiAK
ICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZUNhY2hlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7
CiAgICAgCkBAIC0xMDA4LDcgKzEwNTUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VIZWFk
ZXJzKGNvbnN0IFN0cmluZyYgaGVhZGVycywgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9ucwogUGFz
c1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENh
Y2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCkKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgY2FjaGVTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJT
RUxFQ1QgdXJsLCB0eXBlLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2Fj
aGVSZXNvdXJjZURhdGEuZGF0YSBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVz
b3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgdXJsLCB0eXBlLCBtaW1lVHlw
ZSwgdGV4dEVuY29kaW5nTmFtZSwgaGVhZGVycywgQ2FjaGVSZXNvdXJjZURhdGEuZGF0YSwgQ2Fj
aGVSZXNvdXJjZURhdGEucGF0aCBGUk9NIENhY2hlRW50cmllcyBJTk5FUiBKT0lOIENhY2hlUmVz
b3VyY2VzIE9OIENhY2hlRW50cmllcy5yZXNvdXJjZT1DYWNoZVJlc291cmNlcy5pZCAiCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTk5FUiBKT0lOIENhY2hlUmVzb3VyY2VE
YXRhIE9OIENhY2hlUmVzb3VyY2VEYXRhLmlkPUNhY2hlUmVzb3VyY2VzLmRhdGEgV0hFUkUgQ2Fj
aGVFbnRyaWVzLmNhY2hlPT8iKTsKICAgICBpZiAoY2FjaGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHByZXBhcmUgY2Fj
aGUgc3RhdGVtZW50LCBlcnJvciBcIiVzXCIiLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
QEAgLTEwMTgsNyArMTA2NSw5IEBAIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25lZCBzdG9yYWdlCiAgICAgY2FjaGVT
dGF0ZW1lbnQuYmluZEludDY0KDEsIHN0b3JhZ2VJRCk7CiAKICAgICBSZWZQdHI8QXBwbGljYXRp
b25DYWNoZT4gY2FjaGUgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKTsKLSAgICAKKworICAg
IFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2Nh
Y2hlRGlyZWN0b3J5LCBmbGF0RmlsZVN1YmRpcmVjdG9yeSk7CisKICAgICBpbnQgcmVzdWx0Owog
ICAgIHdoaWxlICgocmVzdWx0ID0gY2FjaGVTdGF0ZW1lbnQuc3RlcCgpKSA9PSBTUUxSZXN1bHRS
b3cpIHsKICAgICAgICAgS1VSTCB1cmwoUGFyc2VkVVJMU3RyaW5nLCBjYWNoZVN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApKTsKQEAgLTEwMzAsMTUgKzEwNzksMjQgQEAgUGFzc1JlZlB0cjxBcHBs
aWNhdGlvbkNhY2hlPiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bG9hZENhY2hlKHVuc2lnbmVk
IHN0b3JhZ2UKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBT
aGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJsb2IpOwogICAgICAgICAKKyAgICAgICAgU3RyaW5n
IHBhdGggPSBjYWNoZVN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDYpOworICAgICAgICBpbnQ2NF90
IHNpemUgPSAwOworICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzaXpl
ID0gZGF0YS0+c2l6ZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhdGggPSBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOworICAgICAgICAg
ICAgZ2V0RmlsZVNpemUocGF0aCwgc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IFN0cmluZyBtaW1lVHlwZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoMik7CiAgICAg
ICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4
dCgzKTsKICAgICAgICAgCi0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJsLCBt
aW1lVHlwZSwgZGF0YS0+c2l6ZSgpLCB0ZXh0RW5jb2RpbmdOYW1lLCAiIik7CisgICAgICAgIFJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29kaW5n
TmFtZSwgIiIpOwogCiAgICAgICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCg0KTsKICAgICAgICAgcGFyc2VIZWFkZXJzKGhlYWRlcnMsIHJlc3BvbnNlKTsK
ICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJlc291
cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCByZXNwb25zZSwgdHlw
ZSwgZGF0YS5yZWxlYXNlKCkpOworICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291
cmNlPiByZXNvdXJjZSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwgcmVz
cG9uc2UsIHR5cGUsIGRhdGEucmVsZWFzZSgpLCBwYXRoKTsKIAogICAgICAgICBpZiAodHlwZSAm
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFuaWZlc3QpCiAgICAgICAgICAgICBjYWNoZS0+
c2V0TWFuaWZlc3RSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNlKCkpOwpAQCAtMTEzMiw2ICsxMTkw
LDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9uQ2Fj
aGUqIGNhY2hlKQogCiAgICAgICAgIGNhY2hlLT5ncm91cCgpLT5jbGVhclN0b3JhZ2VJRCgpOwog
ICAgIH0KKyAgICAKKyAgICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKIH0gICAgCiAKIHZv
aWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KCkKQEAgLTExNTIsNyArMTIxMiw1MiBA
QCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCiAgICAgQ2FjaGVHcm91cE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBmb3Ig
KENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFnZUlE
KCk7Ci19ICAgIAorICAgIAorICAgIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOworfQorICAg
IAordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlVGFibGVzKCkKK3sKKyAgICBl
bXB0eSgpOworICAgIG1fZGF0YWJhc2UuY2xlYXJBbGxUYWJsZXMoKTsKK30KKyAgICAKK2Jvb2wg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJl
c291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkuc3RhcnRzV2l0aCgiYXVkaW8vIiwgZmFsc2Up
IAorICAgICAgICB8fCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgo
InZpZGVvLyIsIGZhbHNlKTsKK30KKyAgICAKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
OndyaXRlRGF0YVRvVW5pcXVlRmlsZUluRGlyZWN0b3J5KFNoYXJlZEJ1ZmZlciogZGF0YSwgY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnksIFN0cmluZyYgcGF0aCkKK3sKKyAgICBTdHJpbmcgZnVsbFBh
dGg7CisgICAgCisgICAgZG8geworICAgICAgICBwYXRoID0gZW5jb2RlRm9yRmlsZU5hbWUoY3Jl
YXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKKyAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCB0aGUg
YWJvdmUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIG9uIGEgcGxhdGZvcm0gd2hpY2ggZG9lcyBub3Qg
aW1wbGVtZW50CisgICAgICAgIC8vIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS4KKyAgICAg
ICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CisgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxQYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgcGF0aCk7CisgICAgICAgIEFTU0VS
VChkaXJlY3RvcnlOYW1lKGZ1bGxQYXRoKSA9PSBkaXJlY3RvcnkpOworICAgIH0gd2hpbGUgKGRp
cmVjdG9yeU5hbWUoZnVsbFBhdGgpICE9IGRpcmVjdG9yeSB8fCBmaWxlRXhpc3RzKGZ1bGxQYXRo
KSk7CisgICAgCisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IG9wZW5GaWxlKGZ1bGxQ
YXRoLCBPcGVuRm9yV3JpdGUpOworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgaW50NjRfdCB3cml0dGVuQnl0ZXMgPSB3cml0ZVRvRmlsZShoYW5kbGUs
IGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAg
ICAKKyAgICBpZiAod3JpdHRlbkJ5dGVzICE9IChpbnQ2NF90KWRhdGEtPnNpemUoKSkgeworICAg
ICAgICBkZWxldGVGaWxlKGZ1bGxQYXRoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5LCBBcHBsaWNh
dGlvbkNhY2hlSG9zdCogY2FjaGVIb3N0KQogewpAQCAtMTE3MSw3ICsxMjc2LDcgQEAgYm9vbCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNh
Y2hlRGlyZWN0b3J5LCBBcHAKICAgICBmb3IgKEFwcGxpY2F0aW9uQ2FjaGU6OlJlc291cmNlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNl
PiByZXNvdXJjZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShyZXNvdXJj
ZS0+dXJsKCksIHJlc291cmNlLT5yZXNwb25zZSgpLCByZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJj
ZS0+ZGF0YSgpKTsKKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcmVz
b3VyY2VDb3B5ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUocmVzb3VyY2UtPnVy
bCgpLCByZXNvdXJjZS0+cmVzcG9uc2UoKSwgcmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPmRh
dGEoKSwgcmVzb3VyY2UtPnBhdGgoKSk7CiAgICAgICAgIAogICAgICAgICBjYWNoZUNvcHktPmFk
ZFJlc291cmNlKHJlc291cmNlQ29weS5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTEyNzksNiArMTM4
NCw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXAoY29u
c3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkKICAgICB9CiAKICAgICBkZWxldGVUcmFuc2FjdGlvbi5j
b21taXQoKTsKKyAgICAKKyAgICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKKyAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTI5Niw2ICsxNDA0LDY5IEBAIHZvaWQgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmNoZWNrRm9yTWF4U2l6ZVJlYWNoZWQoKQogICAgIGlmIChtX2RhdGFi
YXNlLmxhc3RFcnJvcigpID09IFNRTFJlc3VsdEZ1bGwpCiAgICAgICAgIG1faXNNYXhpbXVtU2l6
ZVJlYWNoZWQgPSB0cnVlOwogfQorICAgIAordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCkKK3sKKyAgICBvcGVuRGF0YWJhc2UoZmFsc2UpOwor
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
U2VsZWN0IG9ubHkgdGhlIHBhdGhzIGluIERlbGV0ZWRDYWNoZVJlc291cmNlcyB0aGF0IGRvIG5v
dCBhbHNvIGFwcGVhciBpbiBDYWNoZVJlc291cmNlRGF0YToKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
c2VsZWN0UGF0aHMobV9kYXRhYmFzZSwgIlNFTEVDVCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0
aCAiCisgICAgICAgICJGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyAiCisgICAgICAgICJMRUZU
IEpPSU4gQ2FjaGVSZXNvdXJjZURhdGEgIgorICAgICAgICAiT04gRGVsZXRlZENhY2hlUmVzb3Vy
Y2VzLnBhdGggPSBDYWNoZVJlc291cmNlRGF0YS5wYXRoICIKKyAgICAgICAgIldIRVJFIENhY2hl
UmVzb3VyY2VEYXRhLnBhdGggSVMgTlVMTCIpOworICAgIAorICAgIGlmIChzZWxlY3RQYXRocy5w
cmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAo
c2VsZWN0UGF0aHMuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGRvIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBzZWxlY3RQYXRocy5nZXRDb2x1bW5U
ZXh0KDApOworICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBmbGF0RmlsZURpcmVjdG9yeSA9IHBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCBmbGF0RmlsZVN1YmRpcmVjdG9yeSk7
CisgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0
RmlsZURpcmVjdG9yeSwgcGF0aCk7CisgICAgICAgIAorICAgICAgICAvLyBEb24ndCBleGl0IHRo
ZSBmbGF0RmlsZURpcmVjdG9yeSEgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlICJwYXRo
IiBlbnRyeSBjb250YWlucyBhIGRpcmVjdG9yeSAKKyAgICAgICAgLy8gY29tcG9uZW50LCBidXQg
cHJvdGVjdCBhZ2FpbnN0IGl0IHJlZ2FyZGxlc3MuCisgICAgICAgIGlmIChkaXJlY3RvcnlOYW1l
KGZ1bGxQYXRoKSAhPSBmbGF0RmlsZURpcmVjdG9yeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAKKyAgICAgICAgZGVsZXRlRmlsZShmdWxsUGF0aCk7CisgICAgfSB3aGlsZSAoc2Vs
ZWN0UGF0aHMuc3RlcCgpID09IFNRTFJlc3VsdFJvdyk7CisgICAgCisgICAgZXhlY3V0ZVNRTENv
bW1hbmQoIkRFTEVURSBGUk9NIERlbGV0ZWRDYWNoZVJlc291cmNlcyIpOworfQorICAgIAorbG9u
ZyBsb25nIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmbGF0RmlsZUFyZWFTaXplKCkKK3sKKyAg
ICBvcGVuRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgbG9uZyBsb25nIHRvdGFsU2l6ZSA9IDA7CisgICAg
U3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2Fj
aGVEaXJlY3RvcnksIGZsYXRGaWxlU3ViZGlyZWN0b3J5KTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
c2VsZWN0UGF0aHMobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gQ2FjaGVSZXNvdXJjZURh
dGEgV0hFUkUgcGF0aCBOT1QgTlVMTCIpOworCisgICAgaWYgKHNlbGVjdFBhdGhzLnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB3aGlsZSAoc2VsZWN0
UGF0aHMuc3RlcCgpID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHNl
bGVjdFBhdGhzLmdldENvbHVtblRleHQoMCk7CisgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9IHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURpcmVjdG9yeSwgcGF0aCk7CisgICAgICAg
IGxvbmcgbG9uZyBwYXRoU2l6ZSA9IDA7CisgICAgICAgIGlmICghZ2V0RmlsZVNpemUoZnVsbFBh
dGgsIHBhdGhTaXplKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB0b3RhbFNpemUg
Kz0gcGF0aFNpemU7CisgICAgfQorICAgIAorICAgIHJldHVybiB0b3RhbFNpemU7Cit9CiAKIHZv
aWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmdldE9yaWdpbnNXaXRoQ2FjaGUoSGFzaFNldDxS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTZWN1cml0eU9yaWdpbkhhc2g+JiBvcmlnaW5zKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuaAppbmRleCBjOTRkNjNkYmY3OGE3NTE2M2RmMjdmZGNlNjMxNTViYzEzMWIx
OGVkLi4xMzBmNTFkMjgzZmVhNjMzZDkzMTYwMGYyMjc0MDAzM2Y3MTgxYmM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuaApAQCAtMTEzLDYgKzExMyw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdG9yZShBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UqLCB1bnNpZ25lZCBjYWNoZVN0b3JhZ2VJRCk7CiAKICAgICBi
b29sIGVuc3VyZU9yaWdpblJlY29yZChjb25zdCBTZWN1cml0eU9yaWdpbiopOworICAgIGJvb2wg
c2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZpbGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKikg
Y29uc3Q7CisgICAgdm9pZCBkZWxldGVUYWJsZXMoKTsKKyAgICBib29sIHdyaXRlRGF0YVRvVW5p
cXVlRmlsZUluRGlyZWN0b3J5KFNoYXJlZEJ1ZmZlciosIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5
LCBTdHJpbmcmIG91dEZpbGVuYW1lKTsKIAogICAgIHZvaWQgbG9hZE1hbmlmZXN0SG9zdEhhc2hl
cygpOwogICAgIApAQCAtMTI0LDYgKzEyNyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBleGVjdXRl
U1FMQ29tbWFuZChjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgY2hlY2tGb3JNYXhTaXplUmVh
Y2hlZCgpOworICAgIHZvaWQgY2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKCk7CisgICAgbG9uZyBs
b25nIGZsYXRGaWxlQXJlYVNpemUoKTsKICAgICAKICAgICBTdHJpbmcgbV9jYWNoZURpcmVjdG9y
eTsKICAgICBTdHJpbmcgbV9jYWNoZUZpbGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86967</attachid>
            <date>2011-03-25 11:44:25 -0700</date>
            <delta_ts>2011-03-25 13:55:34 -0700</delta_ts>
            <desc>[2/3] Store media files as flat files within the Application Cache area.</desc>
            <filename>0001-Application-Cache-should-save-audio-and-video-mime-t.patch</filename>
            <type>text/plain</type>
            <size>22576</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSAwZTM1YjJhMmY5ZmNlMTkyYTQ4ZTlkMGQwNTBhMGU4NjZhZGEzODM5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBhcHBsZS5jb20+CkRhdGU6
IFdlZCwgMjMgTWFyIDIwMTEgMTA6NTM6MDMgLTA3MDAKU3ViamVjdDogW1BBVENIXSBBcHBsaWNh
dGlvbiBDYWNoZSBzaG91bGQgc2F2ZSBhdWRpby8gYW5kIHZpZGVvLyBtaW1lIHR5cGVzIGFzIGZs
YXQgZmlsZXMKIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzc4NAog
PHJkYXI6Ly9wcm9ibGVtLzg5MzI0NzM+CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCk5v
IG5ldyB0ZXN0cy4KClN0b3JlIGNlcnRhaW4gbWltZSB0eXBlcyBhcyBmbGF0IGZpbGVzIGFsb25n
c2lkZSB0aGUgQXBwbGljYXRpb24gQ2FjaGUgZGF0YWJhc2UuClRoaXMgcmVxdWlyZXMgcGx1bWJp
bmcgdGhlIHNhdmVkIGZpbGUgcGF0aCBmcm9tIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIHRocm91
Z2gKdG8gQXBwbGljYXRpb25DYWNoZVJlc291cmNlLgoKKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UpOiBNb2RpZnkgdGhlIENhY2hlUmVzb3VyY2VEYXRhIHNj
aGVtYSBhbmQKICAgIGFkZCBhIG5ldyBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFibGUsIGFkZCBh
IG5ldyBDYWNoZVJlc291cmNlRGF0YURlbGV0ZWQgdHJpZ2dlci4KKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6IEFkZCB0aGUgbmV3IHBhdGggZGF0YSB3aGVuIGFkZGlu
ZyBuZXcgcm93cyBpbgogICAgQ2FjaGVSZXNvdXJjZURhdGEsIGFuZCBzdG9yZSBtZWRpYSByZXNv
dXJjZXMgYXMgZmxhdCBmaWxlcy4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjps
b2FkQ2FjaGUpOiBQdWxsIHRoZSAicGF0aCIgY29sdW1uIGZyb20gQ2FjaGVSZXNvdXJjZURhdGEK
ICAgIHdoZW4gbG9hZGluZyBjYWNoZSBpdGVtcy4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpyZW1vdmUpOiBDYWxsIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcy4KKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6IERpdHRvLgooV2ViQ29yZTo6QXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUpOiBEaXR0by4KKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVDYWNoZUdyb3VwKTogRGl0dG8uCihXZWJDb3Jl
OjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKTogV2Fs
ayB0aHJvdWdoIERlbGV0ZWRDYWNoZVJlc291cmNlRGF0YQogICAgbG9va2luZyBmb3IgZW50cmll
cyB3aXRoIG5vbi1lbXB0eSAicGF0aCIgY29sdW1uczsgaWYgZm91bmQsIGRlbGV0ZS4KKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmbGF0RmlsZUFyZWFTaXplKTogV2FsayB0aHJv
dWdoIENhY2hlUmVzb3VyY2VEYXRhIHJvd3MKICAgIGFuZCBzdW0gdGhlIGZpbGUgc2l6ZSBvZiB0
aG9zZSByb3dzIHdpdGggZmxhdCBmaWxlIHN0b3JhZ2UuCihXZWJDb3JlOjpBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbik6IENhbGwgZGVsZXRlVGFibGVzKCkgaW5z
dGVhZCBvZgogICAgY2xlYXJBbGxUYWJsZXMoKSBkaXJlY3RseS4KKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpkZWxldGVUYWJsZXMpOiBDYWxsIGVtcHR5KCkgYmVmb3JlIGRlbGV0
aW5nIHRoZSB0YWJsZXMsCiAgICBzbyB0aGF0IGZsYXQgZmlsZXMgZ2V0IGRlbGV0ZWQuCihXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZp
bGUpOiBBZGRlZC4KKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFU
b1VuaXF1ZUZpbGVJbkRpcmVjdG9yeSk6IEFkZGVkLgoqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5oOgoqIHBsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKFdl
YkNvcmU6Om9wZW5GaWxlKTogSW1wbGVtZW50IG9wZW5GaWxlIG9uIFdpbmRvd3MuCi0tLQogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM4ICsr
KysKIC4uLi9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmggICAgIHwg
ICAgMSArCiAuLi4vbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcCAg
ICB8ICAyMDIgKysrKysrKysrKysrKysrKysrLS0KIC4uLi9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaCAgICAgIHwgICAgNSArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRmlsZVN5c3RlbVdpbi5jcHAgICAgICB8ICAgIDggKwogNSBmaWxlcyBjaGFuZ2VkLCAy
MzggaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE1ODJiN2Qu
LjYxOTE0M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0MyBAQAogMjAxMS0wMy0yMyAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBcHBsaWNhdGlvbiBDYWNoZSBzaG91bGQgc2F2ZSBhdWRpby8g
YW5kIHZpZGVvLyBtaW1lIHR5cGVzIGFzIGZsYXQgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNzg0CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS84OTMyNDczPgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICBTdG9yZSBjZXJ0
YWluIG1pbWUgdHlwZXMgYXMgZmxhdCBmaWxlcyBhbG9uZ3NpZGUgdGhlIEFwcGxpY2F0aW9uIENh
Y2hlIGRhdGFiYXNlLgorICAgICAgICBUaGlzIHJlcXVpcmVzIHBsdW1iaW5nIHRoZSBzYXZlZCBm
aWxlIHBhdGggZnJvbSBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSB0aHJvdWdoCisgICAgICAgIHRv
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS4KKworICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmFzZSk6IE1vZGlmeSB0aGUgQ2FjaGVSZXNvdXJjZURh
dGEgc2NoZW1hIGFuZAorICAgICAgICAgICAgYWRkIGEgbmV3IERlbGV0ZWRDYWNoZVJlc291cmNl
cyB0YWJsZSwgYWRkIGEgbmV3IENhY2hlUmVzb3VyY2VEYXRhRGVsZXRlZCB0cmlnZ2VyLgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKTogQWRkIHRoZSBu
ZXcgcGF0aCBkYXRhIHdoZW4gYWRkaW5nIG5ldyByb3dzIGluIAorICAgICAgICAgICAgQ2FjaGVS
ZXNvdXJjZURhdGEsIGFuZCBzdG9yZSBtZWRpYSByZXNvdXJjZXMgYXMgZmxhdCBmaWxlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUpOiBQdWxs
IHRoZSAicGF0aCIgY29sdW1uIGZyb20gQ2FjaGVSZXNvdXJjZURhdGEKKyAgICAgICAgICAgIHdo
ZW4gbG9hZGluZyBjYWNoZSBpdGVtcy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpyZW1vdmUpOiBDYWxsIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU9mQ2FjaGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpkZWxl
dGVDYWNoZUdyb3VwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6Y2hlY2tGb3JEZWxldGVkUmVzb3VyY2VzKTogV2FsayB0aHJvdWdoIERlbGV0ZWRD
YWNoZVJlc291cmNlRGF0YQorICAgICAgICAgICAgbG9va2luZyBmb3IgZW50cmllcyB3aXRoIG5v
bi1lbXB0eSAicGF0aCIgY29sdW1uczsgaWYgZm91bmQsIGRlbGV0ZS4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpmbGF0RmlsZUFyZWFTaXplKTogV2FsayB0aHJv
dWdoIENhY2hlUmVzb3VyY2VEYXRhIHJvd3MKKyAgICAgICAgICAgIGFuZCBzdW0gdGhlIGZpbGUg
c2l6ZSBvZiB0aG9zZSByb3dzIHdpdGggZmxhdCBmaWxlIHN0b3JhZ2UuCisgICAgICAgIChXZWJD
b3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbik6IENhbGwg
ZGVsZXRlVGFibGVzKCkgaW5zdGVhZCBvZiAKKyAgICAgICAgICAgIGNsZWFyQWxsVGFibGVzKCkg
ZGlyZWN0bHkuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVs
ZXRlVGFibGVzKTogQ2FsbCBlbXB0eSgpIGJlZm9yZSBkZWxldGluZyB0aGUgdGFibGVzLAorICAg
ICAgICAgICAgc28gdGhhdCBmbGF0IGZpbGVzIGdldCBkZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6d3Jp
dGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3RvcnkpOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZSk6IEltcGxl
bWVudCBvcGVuRmlsZSBvbiBXaW5kb3dzLgorCisyMDExLTAzLTIzICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFr
LgogCiAgICAgICAgIEFwcGxpY2F0aW9uIENhY2hlIHNob3VsZCBzYXZlIGF1ZGlvLyBhbmQgdmlk
ZW8vIG1pbWUgdHlwZXMgYXMgZmxhdCBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCmluZGV4IDE5MGU2
MjkuLjY2MzNjNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGlj
OgogICAgIGludDY0X3QgZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpOwogCiAgICAgY29uc3QgU3Ry
aW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisgICAgdm9pZCBzZXRQYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCkgeyBtX3BhdGggPSBwYXRoOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgc3RhdGljIHZvaWQgZHVtcFR5cGUodW5zaWduZWQgdHlwZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNw
cAppbmRleCAwZjUxNTQ3Li4wOWU3Zjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKQEAgLTM4LDYg
KzM4LDcgQEAKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxpdGVU
cmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiVVVJ
RC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgpAQCAtNDYsNiArNDcsOCBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBj
b25zdCBjaGFyIGZsYXRGaWxlU3ViZGlyZWN0b3J5W10gPSAiQXBwbGljYXRpb25DYWNoZSI7CisK
IHRlbXBsYXRlIDxjbGFzcyBUPgogY2xhc3MgU3RvcmFnZUlESm91cm5hbCB7CiBwdWJsaWM6ICAK
QEAgLTM5NCw3ICszOTcsNyBAQCBpbnQ2NF90IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzcGFj
ZU5lZWRlZChpbnQ2NF90IGNhY2hlVG9TYXZlKQogICAgIGlmICghZ2V0RmlsZVNpemUobV9jYWNo
ZUZpbGUsIGZpbGVTaXplKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQ2NF90IGN1cnJl
bnRTaXplID0gZmlsZVNpemU7CisgICAgaW50NjRfdCBjdXJyZW50U2l6ZSA9IGZpbGVTaXplICsg
ZmxhdEZpbGVBcmVhU2l6ZSgpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgZnJl
ZSBzcGFjZSB3ZSBoYXZlIGF2YWlsYWJsZS4KICAgICBpbnQ2NF90IHRvdGFsQXZhaWxhYmxlU2l6
ZSA9IDA7CkBAIC01NjAsNyArNTYzLDcgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
ZXhlY3V0ZVNRTENvbW1hbmQoY29uc3QgU3RyaW5nJiBzcWwpCiAvLyBVcGRhdGUgdGhlIHNjaGVt
YVZlcnNpb24gd2hlbiB0aGUgc2NoZW1hIG9mIGFueSB0aGUgQXBwbGljYXRpb24gQ2FjaGUKIC8v
IFNRTGl0ZSB0YWJsZXMgY2hhbmdlcy4gVGhpcyBhbGxvd3MgdGhlIGRhdGFiYXNlIHRvIGJlIHJl
YnVpbHQgd2hlbgogLy8gYSBuZXcsIGluY29tcGF0aWJsZSBjaGFuZ2UgaGFzIGJlZW4gaW50cm9k
dWNlZCB0byB0aGUgZGF0YWJhc2Ugc2NoZW1hLgotc3RhdGljIGNvbnN0IGludCBzY2hlbWFWZXJz
aW9uID0gNjsKK3N0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVyc2lvbiA9IDc7CiAgICAgCiB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKQEAgLTU2
OCw3ICs1NzEsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFW
ZXJzaW9uKCkKICAgICBpZiAodmVyc2lvbiA9PSBzY2hlbWFWZXJzaW9uKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2RhdGFiYXNlLmNsZWFyQWxsVGFibGVzKCk7CisgICAgZGVsZXRlVGFibGVz
KCk7CiAKICAgICAvLyBVcGRhdGUgdXNlciB2ZXJzaW9uLgogICAgIFNRTGl0ZVRyYW5zYWN0aW9u
IHNldERhdGFiYXNlVmVyc2lvbihtX2RhdGFiYXNlKTsKQEAgLTYxOCw3ICs2MjEsOCBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhc2UoYm9vbCBjcmVhdGVJZkRvZXNO
b3RFeGlzdCkKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElT
VFMgQ2FjaGVFbnRyaWVzIChjYWNoZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUws
IHR5cGUgSU5URUdFUiwgcmVzb3VyY2UgSU5URUdFUiBOT1QgTlVMTCkiKTsKICAgICBleGVjdXRl
U1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2FjaGVSZXNvdXJjZXMgKGlk
IElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgdXJsIFRFWFQgTk9UIE5VTEwgT04g
Q09ORkxJQ1QgRkFJTCwgIgogICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXNDb2RlIElOVEVH
RVIgTk9UIE5VTEwsIHJlc3BvbnNlVVJMIFRFWFQgTk9UIE5VTEwsIG1pbWVUeXBlIFRFWFQsIHRl
eHRFbmNvZGluZ05hbWUgVEVYVCwgaGVhZGVycyBURVhULCBkYXRhIElOVEVHRVIgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCkiKTsKLSAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxF
IElGIE5PVCBFWElTVFMgQ2FjaGVSZXNvdXJjZURhdGEgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkg
QVVUT0lOQ1JFTUVOVCwgZGF0YSBCTE9CKSIpOworICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVB
VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZVJlc291cmNlRGF0YSAoaWQgSU5URUdFUiBQUklN
QVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBkYXRhIEJMT0IsIHBhdGggVEVYVCkiKTsKKyAgICBleGVj
dXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgRGVsZXRlZENhY2hlUmVz
b3VyY2VzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIHBhdGggVEVYVCki
KTsKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgT3Jp
Z2lucyAob3JpZ2luIFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIElHTk9SRSwgcXVvdGEgSU5URUdF
UiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOwogCiAgICAgLy8gV2hlbiBhIGNhY2hlIGlz
IGRlbGV0ZWQsIGFsbCBpdHMgZW50cmllcyBhbmQgaXRzIHdoaXRlbGlzdCBzaG91bGQgYmUgZGVs
ZXRlZC4KQEAgLTY0MSw2ICs2NDUsMTUgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
b3BlbkRhdGFiYXNlKGJvb2wgY3JlYXRlSWZEb2VzTm90RXhpc3QpCiAgICAgICAgICAgICAgICAg
ICAgICAgIiBGT1IgRUFDSCBST1cgQkVHSU4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAgREVM
RVRFIEZST00gQ2FjaGVSZXNvdXJjZURhdGEgV0hFUkUgaWQgPSBPTEQuZGF0YTsiCiAgICAgICAg
ICAgICAgICAgICAgICAgIiBFTkQiKTsKKyAgICAKKyAgICAvLyBXaGVuIGEgY2FjaGUgcmVzb3Vy
Y2UgaXMgZGVsZXRlZCwgaWYgaXQgY29udGFpbnMgYSBub24tZW1wdHkgcGF0aCwgdGhhdCBwYXRo
IHNob3VsZAorICAgIC8vIGJlIGFkZGVkIHRvIHRoZSBEZWxldGVkQ2FjaGVSZXNvdXJjZXMgdGFi
bGUgc28gdGhlIGZsYXQgZmlsZSBhdCB0aGF0IHBhdGggY2FuCisgICAgLy8gYmUgZGVsZXRlZCBh
dCBhIGxhdGVyIHRpbWUuCisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUUklHR0VSIElG
IE5PVCBFWElTVFMgQ2FjaGVSZXNvdXJjZURhdGFEZWxldGVkIEFGVEVSIERFTEVURSBPTiBDYWNo
ZVJlc291cmNlRGF0YSIKKyAgICAgICAgICAgICAgICAgICAgICAiIEZPUiBFQUNIIFJPVyIKKyAg
ICAgICAgICAgICAgICAgICAgICAiIFdIRU4gT0xELnBhdGggTk9UIE5VTEwgQkVHSU4iCisgICAg
ICAgICAgICAgICAgICAgICAgIiAgSU5TRVJUIElOVE8gRGVsZXRlZENhY2hlUmVzb3VyY2VzIChw
YXRoKSB2YWx1ZXMgKE9MRC5wYXRoKTsiCisgICAgICAgICAgICAgICAgICAgICAgIiBFTkQiKTsK
IH0KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVN0YXRlbWVudChTUUxp
dGVTdGF0ZW1lbnQmIHN0YXRlbWVudCkKQEAgLTc3MiwxNSArNzg1LDQzIEBAIGJvb2wgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3Vy
Y2UsIHVuc2lnbmVkCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZpcnN0LCBpbnNl
cnQgdGhlIGRhdGEKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGF0YVN0YXRlbWVudChtX2RhdGFiYXNl
LCAiSU5TRVJUIElOVE8gQ2FjaGVSZXNvdXJjZURhdGEgKGRhdGEpIFZBTFVFUyAoPykiKTsKKyAg
ICBTUUxpdGVTdGF0ZW1lbnQgZGF0YVN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8g
Q2FjaGVSZXNvdXJjZURhdGEgKGRhdGEsIHBhdGgpIFZBTFVFUyAoPywgPykiKTsKICAgICBpZiAo
ZGF0YVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKLSAgICBpZiAocmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKQotICAgICAgICBk
YXRhU3RhdGVtZW50LmJpbmRCbG9iKDEsIHJlc291cmNlLT5kYXRhKCktPmRhdGEoKSwgcmVzb3Vy
Y2UtPmRhdGEoKS0+c2l6ZSgpKTsKKworICAgIFN0cmluZyBmdWxsUGF0aDsKKyAgICBpZiAoIXJl
c291cmNlLT5wYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICBkYXRhU3RhdGVtZW50LmJpbmRUZXh0
KDIsIHBhdGhHZXRGaWxlTmFtZShyZXNvdXJjZS0+cGF0aCgpKSk7CisgICAgZWxzZSBpZiAoc2hv
dWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZpbGUocmVzb3VyY2UpKSB7CisgICAgICAgIC8vIEZpcnN0
LCBjaGVjayB0byBzZWUgaWYgY3JlYXRpbmcgdGhlIGZsYXQgZmlsZSB3b3VsZCB2aW9sYXRlIHRo
ZSBtYXhpbXVtIHRvdGFsIHF1b3RhLiBXZSBkb24ndCBuZWVkCisgICAgICAgIC8vIHRvIGNoZWNr
IHRoZSBwZXItb3JpZ2luIHF1b3RhIGhlcmUsIGFzIGl0IHdhcyBhbHJlYWR5IGNoZWNrZWQgaW4g
c3RvcmVOZXdlc3RDYWNoZSgpLgorICAgICAgICBpZiAobV9kYXRhYmFzZS50b3RhbFNpemUoKSAr
IGZsYXRGaWxlQXJlYVNpemUoKSArIHJlc291cmNlLT5kYXRhKCktPnNpemUoKSA+IG1fbWF4aW11
bVNpemUpIHsKKyAgICAgICAgICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJp
bmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURp
cmVjdG9yeSwgZmxhdEZpbGVTdWJkaXJlY3RvcnkpOworICAgICAgICBtYWtlQWxsRGlyZWN0b3Jp
ZXMoZmxhdEZpbGVEaXJlY3RvcnkpOworICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAgICAgaWYg
KCF3cml0ZURhdGFUb1VuaXF1ZUZpbGVJbkRpcmVjdG9yeShyZXNvdXJjZS0+ZGF0YSgpLCBmbGF0
RmlsZURpcmVjdG9yeSwgcGF0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBmdWxsUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChmbGF0RmlsZURp
cmVjdG9yeSwgcGF0aCk7CisgICAgICAgIHJlc291cmNlLT5zZXRQYXRoKGZ1bGxQYXRoKTsKKyAg
ICAgICAgZGF0YVN0YXRlbWVudC5iaW5kVGV4dCgyLCBwYXRoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAocmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKQorICAgICAgICAgICAgZGF0YVN0YXRl
bWVudC5iaW5kQmxvYigxLCByZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIHJlc291cmNlLT5kYXRh
KCktPnNpemUoKSk7CisgICAgfQogICAgIAotICAgIGlmICghZGF0YVN0YXRlbWVudC5leGVjdXRl
Q29tbWFuZCgpKQorICAgIGlmICghZGF0YVN0YXRlbWVudC5leGVjdXRlQ29tbWFuZCgpKSB7Cisg
ICAgICAgIC8vIENsZWFuIHVwIHRoZSBmaWxlIHdoaWNoIHdlIG1heSBoYXZlIHdyaXR0ZW4gdG86
CisgICAgICAgIGlmICghZnVsbFBhdGguaXNFbXB0eSgpKQorICAgICAgICAgICAgZGVsZXRlRmls
ZShmdWxsUGF0aCk7CisKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIHVuc2ln
bmVkIGRhdGFJZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJbnNlcnRS
b3dJRCgpKTsKIApAQCAtODMxLDYgKzg3MiwxMiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZAog
ICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKKyAgICAvLyBEaWQgd2Ugc3VjY2Vzc2Z1bGx5IHdyaXRlIHRoZSByZXNv
dXJjZSBkYXRhIHRvIGEgZmlsZT8gSWYgc28sCisgICAgLy8gcmVsZWFzZSB0aGUgcmVzb3VyY2Un
cyBkYXRhIGFuZCBmcmVlIHVwIGEgcG90ZW50aWFsbHkgbGFyZ2UgYW1vdW50CisgICAgLy8gb2Yg
bWVtb3J5OgorICAgIGlmICghZnVsbFBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXNvdXJjZS0+
ZGF0YSgpLT5jbGVhcigpOworCiAgICAgcmVzb3VyY2UtPnNldFN0b3JhZ2VJRChyZXNvdXJjZUlk
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTg2MSw3ICs5MDgsNyBAQCBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNl
LCBBcHBsaWNhdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgCiAgICAgbV9pc01heGltdW1TaXpl
UmVhY2hlZCA9IGZhbHNlOwotICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9tYXhpbXVt
U2l6ZSk7CisgICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShtX21heGltdW1TaXplIC0gZmxh
dEZpbGVBcmVhU2l6ZSgpKTsKIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHN0b3JlUmVzb3VyY2VU
cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICBzdG9yZVJlc291cmNlVHJhbnNhY3Rpb24uYmVn
aW4oKTsKQEAgLTkwOCw3ICs5NTUsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpz
dG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAsIEFwcAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2lzTWF4aW11bVNpemVSZWFjaGVkID0gZmFsc2U7Ci0g
ICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShtX21heGltdW1TaXplKTsKKyAgICBtX2RhdGFi
YXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUgLSBmbGF0RmlsZUFyZWFTaXplKCkpOwog
CiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc3RvcmVDYWNoZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OwogICAgIApAQCAtMTAwOCw3ICsxMDU1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHBhcnNlSGVh
ZGVycyhjb25zdCBTdHJpbmcmIGhlYWRlcnMsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnMKIFBh
c3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRD
YWNoZSh1bnNpZ25lZCBzdG9yYWdlSUQpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3Rh
dGVtZW50KG1fZGF0YWJhc2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
U0VMRUNUIHVybCwgdHlwZSwgbWltZVR5cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENh
Y2hlUmVzb3VyY2VEYXRhLmRhdGEgRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJl
c291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIHVybCwgdHlwZSwgbWltZVR5
cGUsIHRleHRFbmNvZGluZ05hbWUsIGhlYWRlcnMsIENhY2hlUmVzb3VyY2VEYXRhLmRhdGEsIENh
Y2hlUmVzb3VyY2VEYXRhLnBhdGggRlJPTSBDYWNoZUVudHJpZXMgSU5ORVIgSk9JTiBDYWNoZVJl
c291cmNlcyBPTiBDYWNoZUVudHJpZXMucmVzb3VyY2U9Q2FjaGVSZXNvdXJjZXMuaWQgIgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU5ORVIgSk9JTiBDYWNoZVJlc291cmNl
RGF0YSBPTiBDYWNoZVJlc291cmNlRGF0YS5pZD1DYWNoZVJlc291cmNlcy5kYXRhIFdIRVJFIENh
Y2hlRW50cmllcy5jYWNoZT0/Iik7CiAgICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxSZXN1bHRPaykgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwcmVwYXJlIGNh
Y2hlIHN0YXRlbWVudCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CkBAIC0xMDE4LDcgKzEwNjUsOSBAQCBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZQogICAgIGNhY2hl
U3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBzdG9yYWdlSUQpOwogCiAgICAgUmVmUHRyPEFwcGxpY2F0
aW9uQ2FjaGU+IGNhY2hlID0gQXBwbGljYXRpb25DYWNoZTo6Y3JlYXRlKCk7Ci0gICAgCisKKyAg
ICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9j
YWNoZURpcmVjdG9yeSwgZmxhdEZpbGVTdWJkaXJlY3RvcnkpOworCiAgICAgaW50IHJlc3VsdDsK
ICAgICB3aGlsZSAoKHJlc3VsdCA9IGNhY2hlU3RhdGVtZW50LnN0ZXAoKSkgPT0gU1FMUmVzdWx0
Um93KSB7CiAgICAgICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKSk7CkBAIC0xMDMwLDE1ICsxMDc5LDI0IEBAIFBhc3NSZWZQdHI8QXBw
bGljYXRpb25DYWNoZT4gQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZSh1bnNpZ25l
ZCBzdG9yYWdlCiAgICAgICAgIAogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0g
U2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihibG9iKTsKICAgICAgICAgCisgICAgICAgIFN0cmlu
ZyBwYXRoID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCg2KTsKKyAgICAgICAgbG9uZyBs
b25nIHNpemUgPSAwOworICAgICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgICAgICBz
aXplID0gZGF0YS0+c2l6ZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhdGggPSBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgpOworICAgICAg
ICAgICAgZ2V0RmlsZVNpemUocGF0aCwgc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIFN0cmluZyBtaW1lVHlwZSA9IGNhY2hlU3RhdGVtZW50LmdldENvbHVtblRleHQoMik7CiAg
ICAgICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lID0gY2FjaGVTdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgzKTsKICAgICAgICAgCi0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJs
LCBtaW1lVHlwZSwgZGF0YS0+c2l6ZSgpLCB0ZXh0RW5jb2RpbmdOYW1lLCAiIik7CisgICAgICAg
IFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlwZSwgc2l6ZSwgdGV4dEVuY29k
aW5nTmFtZSwgIiIpOwogCiAgICAgICAgIFN0cmluZyBoZWFkZXJzID0gY2FjaGVTdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCg0KTsKICAgICAgICAgcGFyc2VIZWFkZXJzKGhlYWRlcnMsIHJlc3BvbnNl
KTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IHJl
c291cmNlID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUodXJsLCByZXNwb25zZSwg
dHlwZSwgZGF0YS5yZWxlYXNlKCkpOworICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJl
c291cmNlPiByZXNvdXJjZSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHVybCwg
cmVzcG9uc2UsIHR5cGUsIGRhdGEucmVsZWFzZSgpLCBwYXRoKTsKIAogICAgICAgICBpZiAodHlw
ZSAmIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFuaWZlc3QpCiAgICAgICAgICAgICBjYWNo
ZS0+c2V0TWFuaWZlc3RSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNlKCkpOwpAQCAtMTEzMiw2ICsx
MTkwLDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6cmVtb3ZlKEFwcGxpY2F0aW9u
Q2FjaGUqIGNhY2hlKQogCiAgICAgICAgIGNhY2hlLT5ncm91cCgpLT5jbGVhclN0b3JhZ2VJRCgp
OwogICAgIH0KKyAgICAKKyAgICBjaGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKTsKIH0gICAgCiAK
IHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmVtcHR5KCkKQEAgLTExNTIsNyArMTIxMiw1
MSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjplbXB0eSgpCiAgICAgQ2FjaGVHcm91
cE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKICAgICBm
b3IgKENhY2hlR3JvdXBNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXNJbk1lbW9yeS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGl0LT5zZWNvbmQtPmNsZWFyU3RvcmFn
ZUlEKCk7Ci19ICAgIAorICAgIAorICAgIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOworfQor
ICAgIAordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlVGFibGVzKCkKK3sKKyAg
ICBlbXB0eSgpOworICAgIG1fZGF0YWJhc2UuY2xlYXJBbGxUYWJsZXMoKTsKK30KKyAgICAKK2Jv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxl
KEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgcmV0dXJuIHJlc291
cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkuc3RhcnRzV2l0aCgiYXVkaW8vIiwgZmFsc2UpIAor
ICAgICAgICB8fCByZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpLnN0YXJ0c1dpdGgoInZp
ZGVvLyIsIGZhbHNlKTsKK30KKyAgICAKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Ondy
aXRlRGF0YVRvVW5pcXVlRmlsZUluRGlyZWN0b3J5KFNoYXJlZEJ1ZmZlciogZGF0YSwgY29uc3Qg
U3RyaW5nJiBkaXJlY3RvcnksIFN0cmluZyYgcGF0aCkKK3sKKyAgICBTdHJpbmcgZnVsbFBhdGg7
CisgICAgCisgICAgZG8geworICAgICAgICBwYXRoID0gZW5jb2RlRm9yRmlsZU5hbWUoY3JlYXRl
Q2Fub25pY2FsVVVJRFN0cmluZygpKTsKKyAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCB0aGUgYWJv
dmUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIG9uIGEgcGxhdGZvcm0gd2hpY2ggZG9lcyBub3QgaW1w
bGVtZW50CisgICAgICAgIC8vIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS4KKyAgICAgICAg
QVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CisgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZ1bGxQYXRoID0gcGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRpcmVjdG9yeSwgcGF0aCk7CisgICAgfSB3aGlsZSAoZGly
ZWN0b3J5TmFtZShmdWxsUGF0aCkgIT0gZGlyZWN0b3J5IHx8IGZpbGVFeGlzdHMoZnVsbFBhdGgp
KTsKKyAgICAKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlID0gb3BlbkZpbGUoZnVsbFBh
dGgsIE9wZW5Gb3JXcml0ZSk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBpbnQ2NF90IHdyaXR0ZW5CeXRlcyA9IHdyaXRlVG9GaWxlKGhhbmRsZSwg
ZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgIGNsb3NlRmlsZShoYW5kbGUpOworICAg
IAorICAgIGlmICh3cml0dGVuQnl0ZXMgIT0gKGludDY0X3QpZGF0YS0+c2l6ZSgpKSB7CisgICAg
ICAgIGRlbGV0ZUZpbGUoZnVsbFBhdGgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIHJldHVybiB0cnVlOworfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0
aW9uQ2FjaGVIb3N0KiBjYWNoZUhvc3QpCiB7CkBAIC0xMTcxLDcgKzEyNzUsNyBAQCBib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPZkNhY2hlKGNvbnN0IFN0cmluZyYgY2Fj
aGVEaXJlY3RvcnksIEFwcAogICAgIGZvciAoQXBwbGljYXRpb25DYWNoZTo6UmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2FjaGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5n
ZXQoKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+
IHJlc291cmNlQ29weSA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKHJlc291cmNl
LT51cmwoKSwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291cmNlLT50eXBlKCksIHJlc291cmNl
LT5kYXRhKCkpOworICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiByZXNv
dXJjZUNvcHkgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZShyZXNvdXJjZS0+dXJs
KCksIHJlc291cmNlLT5yZXNwb25zZSgpLCByZXNvdXJjZS0+dHlwZSgpLCByZXNvdXJjZS0+ZGF0
YSgpLCByZXNvdXJjZS0+cGF0aCgpKTsKICAgICAgICAgCiAgICAgICAgIGNhY2hlQ29weS0+YWRk
UmVzb3VyY2UocmVzb3VyY2VDb3B5LnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtMTI3OSw2ICsxMzgz
LDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91cChjb25z
dCBTdHJpbmcmIG1hbmlmZXN0VVJMKQogICAgIH0KIAogICAgIGRlbGV0ZVRyYW5zYWN0aW9uLmNv
bW1pdCgpOworICAgIAorICAgIGNoZWNrRm9yRGVsZXRlZFJlc291cmNlcygpOworICAgIAogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xMjk2LDYgKzE0MDMsNjkgQEAgdm9pZCBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JNYXhTaXplUmVhY2hlZCgpCiAgICAgaWYgKG1fZGF0YWJh
c2UubGFzdEVycm9yKCkgPT0gU1FMUmVzdWx0RnVsbCkKICAgICAgICAgbV9pc01heGltdW1TaXpl
UmVhY2hlZCA9IHRydWU7CiB9CisgICAgCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpj
aGVja0ZvckRlbGV0ZWRSZXNvdXJjZXMoKQoreworICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7Cisg
ICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBT
ZWxlY3Qgb25seSB0aGUgcGF0aHMgaW4gRGVsZXRlZENhY2hlUmVzb3VyY2VzIHRoYXQgZG8gbm90
IGFsc28gYXBwZWFyIGluIENhY2hlUmVzb3VyY2VEYXRhOgorICAgIFNRTGl0ZVN0YXRlbWVudCBz
ZWxlY3RQYXRocyhtX2RhdGFiYXNlLCAiU0VMRUNUIERlbGV0ZWRDYWNoZVJlc291cmNlcy5wYXRo
ICIKKyAgICAgICAgIkZST00gRGVsZXRlZENhY2hlUmVzb3VyY2VzICIKKyAgICAgICAgIkxFRlQg
Sk9JTiBDYWNoZVJlc291cmNlRGF0YSAiCisgICAgICAgICJPTiBEZWxldGVkQ2FjaGVSZXNvdXJj
ZXMucGF0aCA9IENhY2hlUmVzb3VyY2VEYXRhLnBhdGggIgorICAgICAgICAiV0hFUkUgKFNFTEVD
VCBEZWxldGVkQ2FjaGVSZXNvdXJjZXMucGF0aCA9PSBDYWNoZVJlc291cmNlRGF0YS5wYXRoKSBJ
UyBOVUxMIik7CisgICAgCisgICAgaWYgKHNlbGVjdFBhdGhzLnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChzZWxlY3RQYXRocy5zdGVwKCkg
IT0gU1FMUmVzdWx0Um93KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZG8geworICAgICAg
ICBTdHJpbmcgcGF0aCA9IHNlbGVjdFBhdGhzLmdldENvbHVtblRleHQoMCk7CisgICAgICAgIGlm
IChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1f
Y2FjaGVEaXJlY3RvcnksIGZsYXRGaWxlU3ViZGlyZWN0b3J5KTsKKyAgICAgICAgU3RyaW5nIGZ1
bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRo
KTsKKyAgICAgICAgCisgICAgICAgIC8vIERvbid0IGV4aXQgdGhlIGZsYXRGaWxlRGlyZWN0b3J5
ISBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgInBhdGgiIGVudHJ5IGNvbnRhaW5zIGEg
ZGlyZWN0b3J5IAorICAgICAgICAvLyBjb21wb25lbnQsIGJ1dCBwcm90ZWN0IGFnYWluc3QgaXQg
cmVnYXJkbGVzcy4KKyAgICAgICAgaWYgKGRpcmVjdG9yeU5hbWUoZnVsbFBhdGgpICE9IGZsYXRG
aWxlRGlyZWN0b3J5KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBk
ZWxldGVGaWxlKGZ1bGxQYXRoKTsKKyAgICB9IHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0g
U1FMUmVzdWx0Um93KTsKKyAgICAKKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiREVMRVRFIEZST00g
RGVsZXRlZENhY2hlUmVzb3VyY2VzIik7Cit9CisgICAgCitsb25nIGxvbmcgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmZsYXRGaWxlQXJlYVNpemUoKQoreworICAgIG9wZW5EYXRhYmFzZShmYWxz
ZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0UGF0aHMobV9kYXRhYmFzZSwgIlNFTEVDVCBw
YXRoIEZST00gQ2FjaGVSZXNvdXJjZURhdGEgV0hFUkUgcGF0aCBOT1QgTlVMTCIpOworCisgICAg
aWYgKHNlbGVjdFBhdGhzLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBsb25nIGxvbmcgdG90YWxTaXplID0gMDsKKyAgICBTdHJpbmcgZmxhdEZpbGVE
aXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwgZmxh
dEZpbGVTdWJkaXJlY3RvcnkpOworICAgIHdoaWxlIChzZWxlY3RQYXRocy5zdGVwKCkgPT0gU1FM
UmVzdWx0Um93KSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gc2VsZWN0UGF0aHMuZ2V0Q29sdW1u
VGV4dCgwKTsKKyAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KGZsYXRGaWxlRGlyZWN0b3J5LCBwYXRoKTsKKyAgICAgICAgbG9uZyBsb25nIHBhdGhTaXpl
ID0gMDsKKyAgICAgICAgaWYgKCFnZXRGaWxlU2l6ZShmdWxsUGF0aCwgcGF0aFNpemUpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHRvdGFsU2l6ZSArPSBwYXRoU2l6ZTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6Z2V0T3JpZ2luc1dpdGhDYWNoZShIYXNoU2V0PFJlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIFNlY3VyaXR5T3JpZ2luSGFzaD4mIG9yaWdpbnMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCmluZGV4
IGM5NGQ2M2QuLjMxMzZiNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCkBAIC0xMTMsNiArMTEzLDkgQEAg
cHJpdmF0ZToKICAgICBib29sIHN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSosIHVuc2ln
bmVkIGNhY2hlU3RvcmFnZUlEKTsKIAogICAgIGJvb2wgZW5zdXJlT3JpZ2luUmVjb3JkKGNvbnN0
IFNlY3VyaXR5T3JpZ2luKik7CisgICAgYm9vbCBzaG91bGRTdG9yZVJlc291cmNlQXNGbGF0Rmls
ZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqKTsKKyAgICB2b2lkIGRlbGV0ZVRhYmxlcygpOwor
ICAgIGJvb2wgd3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3RvcnkoU2hhcmVkQnVmZmVyKiwg
Y29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIFN0cmluZyYgb3V0RmlsZW5hbWUpOwogCiAgICAgdm9p
ZCBsb2FkTWFuaWZlc3RIb3N0SGFzaGVzKCk7CiAgICAgCkBAIC0xMjQsNiArMTI3LDggQEAgcHJp
dmF0ZToKICAgICBib29sIGV4ZWN1dGVTUUxDb21tYW5kKGNvbnN0IFN0cmluZyYpOwogCiAgICAg
dm9pZCBjaGVja0Zvck1heFNpemVSZWFjaGVkKCk7CisgICAgdm9pZCBjaGVja0ZvckRlbGV0ZWRS
ZXNvdXJjZXMoKTsKKyAgICBsb25nIGxvbmcgZmxhdEZpbGVBcmVhU2l6ZSgpOwogICAgIAogICAg
IFN0cmluZyBtX2NhY2hlRGlyZWN0b3J5OwogICAgIFN0cmluZyBtX2NhY2hlRmlsZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCA5OTg5MDUy
Li4wYjM4NjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5
c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1X
aW4uY3BwCkBAIC0yMzMsNiArMjMzLDE0IEBAIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29u
c3QgY2hhciosIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgIHJldHVybiBwcm9wb3Nl
ZFBhdGg7CiB9CiAKK1BsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVPcGVuTW9kZSBtb2RlKQoreworICAgIERXT1JEIGRlc2lyZWRBY2Nlc3MgPSBtb2Rl
ID09IE9wZW5Gb3JSZWFkID8gR0VORVJJQ19SRUFEIDogR0VORVJJQ19XUklURTsKKyAgICBEV09S
RCBjcmVhdGlvbkRpc3Bvc2l0aW9uID0gbW9kZSA9PSBPcGVuRm9yUmVhZCA/IE9QRU5fRVhJU1RJ
TkcgOiBDUkVBVEVfQUxXQVlTOworCisgICAgcmV0dXJuIENyZWF0ZUZpbGUocGF0aC5jaGFyYWN0
ZXJzKCksIGRlc2lyZWRBY2Nlc3MsIDAsIDAsIGNyZWF0aW9uRGlzcG9zaXRpb24sIEZJTEVfQVRU
UklCVVRFX05PUk1BTCwgMCk7Cit9CisKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSYgaGFuZGxlKQogewogICAgIGlmIChpc0hhbmRsZVZhbGlkKGhhbmRsZSkpIHsKLS0gCjEuNy40
LjEKCg==
</data>
<flag name="review"
          id="79345"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>