<?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>37874</bug_id>
          
          <creation_ts>2010-04-20 11:12:59 -0700</creation_ts>
          <short_desc>Provide mechanism to cache metadata for a resource</short_desc>
          <delta_ts>2010-05-10 11:14:30 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>38661</blocked>
    
    <blocked>38665</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Tony Gentilcore">tonyg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>mbelshe</cc>
    
    <cc>slamm</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>214783</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-04-20 11:12:59 -0700</bug_when>
    <thetext>I&apos;d like to add the ability to store metadata for a CachedResource.

This metadata will contain data which speeds up the processing of the resource. When it is generated by WebCore, the host application is notified so it may persist it to disk cache. When the host application loads a resource from disk cache, it can provide the cached metadata so that WebCore doesn&apos;t have to redo the work.

The immediate use-case is to persist V8&apos;s pre compilation data to Chrome&apos;s disk cache (http://crbug.com/32407). But it is conceivable that other types of resources could have useful cacheable metadata.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214914</commentid>
    <comment_count>1</comment_count>
      <attachid>53873</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-04-20 13:22:57 -0700</bug_when>
    <thetext>Created attachment 53873
Rough patch to get design feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215680</commentid>
    <comment_count>2</comment_count>
      <attachid>54021</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-04-21 21:09:32 -0700</bug_when>
    <thetext>Created attachment 54021
Added CacheableMetadata struct per abarth&apos;s recommendation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215990</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-22 11:46:57 -0700</bug_when>
    <thetext>Attachment 54021 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1854050</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215991</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-22 11:48:51 -0700</bug_when>
    <thetext>Attachment 54021 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1794045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216054</commentid>
    <comment_count>5</comment_count>
      <attachid>54091</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-04-22 13:39:33 -0700</bug_when>
    <thetext>Created attachment 54091
Fix compile by overloading rather than specializing in WebData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216058</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-22 13:43:01 -0700</bug_when>
    <thetext>Attachment 54091 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/ChangeLog:5:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216073</commentid>
    <comment_count>7</comment_count>
      <attachid>54091</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-22 14:13:14 -0700</bug_when>
    <thetext>Comment on attachment 54091
Fix compile by overloading rather than specializing in WebData.

WebCore/loader/CachedResource.cpp:168
 +  void CachedResource::setCachedMetadata(CacheableMetadata::Type type, PassRefPtr&lt;SharedBuffer&gt; data, FrameLoader* frameLoader)
Why pass a FrameLoader* here?  Usually we pass around Frame*.

WebCore/loader/CachedResource.cpp:175
 +      if (frameLoader &amp;&amp; frameLoader-&gt;client())
client() is always non-NULL.

WebCore/loader/CachedResource.h:148
 +      void setCachedMetadata(CacheableMetadata::Type, PassRefPtr&lt;SharedBuffer&gt;, FrameLoader*);
Does CachedResource have any other dependencies on Frame?  In general, we want the Frame to be less involved in loading, not more.

WebCore/loader/FrameLoaderClient.h:47
 +      struct CacheableMetadata;
We prefer classes to structs.

WebCore/platform/network/ResourceResponseBase.h:48
 +      long long m_id;
This whole thing is very strangely layered.  In WebKit, there&apos;s no necessary connection between the client and the networking layer.  This patch somehow assumes some strange round-tripping between the two.

Why is the client involved in this process at all?  It seems like WebCore should just ask the networking layer to cache these bytes.

WebCore/platform/network/ResourceResponseBase.h:52
 +          V8_SCRIPTDATA
Code in this location isn&apos;t allowed to know about V8.  We need a better way of assigning these type numbers.  Also, are these number persisted on disk?  We might need some comments explaining the rules for modifying these bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216100</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-04-22 15:07:13 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 54091 [details])
&gt; WebCore/loader/CachedResource.cpp:168
&gt;  +  void CachedResource::setCachedMetadata(CacheableMetadata::Type type,
&gt; PassRefPtr&lt;SharedBuffer&gt; data, FrameLoader* frameLoader)
&gt; Why pass a FrameLoader* here?  Usually we pass around Frame*.

No reason except my unfamiliarity with the code. Done.

Because I have a couple of questions inline below, I&apos;m holding off on uploading a new patch until they are all worked out.

&gt; 
&gt; WebCore/loader/CachedResource.cpp:175
&gt;  +      if (frameLoader &amp;&amp; frameLoader-&gt;client())
&gt; client() is always non-NULL.

Changed to only test frame. Let me know if loader needs to be tested as well.

&gt; 
&gt; WebCore/loader/CachedResource.h:148
&gt;  +      void setCachedMetadata(CacheableMetadata::Type,
&gt; PassRefPtr&lt;SharedBuffer&gt;, FrameLoader*);
&gt; Does CachedResource have any other dependencies on Frame?  In general, we want
&gt; the Frame to be less involved in loading, not more.

Not really. In the case that the resource is not cached, It has a reference to a DocLoader (which has a reference to Frame). Passing a frame in this way does feel like a strange thing to do, but it was the best I could come up with. Do you have any alternate ideas?

&gt; 
&gt; WebCore/loader/FrameLoaderClient.h:47
&gt;  +      struct CacheableMetadata;
&gt; We prefer classes to structs.

Good, me too. I took your previous comment to add a struct too literally. Fixed.

&gt; 
&gt; WebCore/platform/network/ResourceResponseBase.h:48
&gt;  +      long long m_id;
&gt; This whole thing is very strangely layered.  In WebKit, there&apos;s no necessary
&gt; connection between the client and the networking layer.  This patch somehow
&gt; assumes some strange round-tripping between the two.
&gt; 
&gt; Why is the client involved in this process at all?  It seems like WebCore
&gt; should just ask the networking layer to cache these bytes.

That does sound nice. But I&apos;m clearly missing something about the overall picture of the architecture. As far as I&apos;ve been able to discover, routing through the FrameLoaderClient is the only way to get a message back to the embedding application. Can you point me to the interface where WebCore can send a notification to the networking layer with this data.

&gt; 
&gt; WebCore/platform/network/ResourceResponseBase.h:52
&gt;  +          V8_SCRIPTDATA
&gt; Code in this location isn&apos;t allowed to know about V8.  We need a better way of
&gt; assigning these type numbers.  Also, are these number persisted on disk?  We
&gt; might need some comments explaining the rules for modifying these bits.

Yes, it does seem odd. That&apos;s why I had initially not passed a type along with the metadata. That leaves it in the hands of each implementer of metadata to determine if the data belongs to them or not. In this case, V8Proxy would just see if the data starts with its magic number or not. An enum, by definition, means that we are naming each type of metadata that can be stored -- be it for JSC, V8, or something else -- and that we need a registry of those types. If you want to keep a type, but lose the enum, we could basically extract the magic number out of the stream and make the type a GUID that each implementer chooses (relying on the size of the space for uniqueness).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216427</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-04-23 08:40:47 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 54091 [details] [details])
&gt; &gt; WebCore/loader/CachedResource.cpp:168
&gt; &gt;  +  void CachedResource::setCachedMetadata(CacheableMetadata::Type type,
&gt; &gt; PassRefPtr&lt;SharedBuffer&gt; data, FrameLoader* frameLoader)
&gt; &gt; Why pass a FrameLoader* here?  Usually we pass around Frame*.
&gt; 
&gt; No reason except my unfamiliarity with the code. Done.
&gt; 
&gt; Because I have a couple of questions inline below, I&apos;m holding off on uploading
&gt; a new patch until they are all worked out.
&gt; 
&gt; &gt; 
&gt; &gt; WebCore/loader/CachedResource.cpp:175
&gt; &gt;  +      if (frameLoader &amp;&amp; frameLoader-&gt;client())
&gt; &gt; client() is always non-NULL.
&gt; 
&gt; Changed to only test frame. Let me know if loader needs to be tested as well.
&gt; 
&gt; &gt; 
&gt; &gt; WebCore/loader/CachedResource.h:148
&gt; &gt;  +      void setCachedMetadata(CacheableMetadata::Type,
&gt; &gt; PassRefPtr&lt;SharedBuffer&gt;, FrameLoader*);
&gt; &gt; Does CachedResource have any other dependencies on Frame?  In general, we want
&gt; &gt; the Frame to be less involved in loading, not more.
&gt; 
&gt; Not really. In the case that the resource is not cached, It has a reference to
&gt; a DocLoader (which has a reference to Frame). Passing a frame in this way does
&gt; feel like a strange thing to do, but it was the best I could come up with. Do
&gt; you have any alternate ideas?
&gt; 
&gt; &gt; 
&gt; &gt; WebCore/loader/FrameLoaderClient.h:47
&gt; &gt;  +      struct CacheableMetadata;
&gt; &gt; We prefer classes to structs.
&gt; 
&gt; Good, me too. I took your previous comment to add a struct too literally.
&gt; Fixed.
&gt; 
&gt; &gt; 
&gt; &gt; WebCore/platform/network/ResourceResponseBase.h:48
&gt; &gt;  +      long long m_id;
&gt; &gt; This whole thing is very strangely layered.  In WebKit, there&apos;s no necessary
&gt; &gt; connection between the client and the networking layer.  This patch somehow
&gt; &gt; assumes some strange round-tripping between the two.
&gt; &gt; 
&gt; &gt; Why is the client involved in this process at all?  It seems like WebCore
&gt; &gt; should just ask the networking layer to cache these bytes.
&gt; 
&gt; That does sound nice. But I&apos;m clearly missing something about the overall
&gt; picture of the architecture. As far as I&apos;ve been able to discover, routing
&gt; through the FrameLoaderClient is the only way to get a message back to the
&gt; embedding application. Can you point me to the interface where WebCore can send
&gt; a notification to the networking layer with this data.

FYI -- I found a way to get rid of the ID. Just need to figure out how to handle type now.

&gt; 
&gt; &gt; 
&gt; &gt; WebCore/platform/network/ResourceResponseBase.h:52
&gt; &gt;  +          V8_SCRIPTDATA
&gt; &gt; Code in this location isn&apos;t allowed to know about V8.  We need a better way of
&gt; &gt; assigning these type numbers.  Also, are these number persisted on disk?  We
&gt; &gt; might need some comments explaining the rules for modifying these bits.
&gt; 
&gt; Yes, it does seem odd. That&apos;s why I had initially not passed a type along with
&gt; the metadata. That leaves it in the hands of each implementer of metadata to
&gt; determine if the data belongs to them or not. In this case, V8Proxy would just
&gt; see if the data starts with its magic number or not. An enum, by definition,
&gt; means that we are naming each type of metadata that can be stored -- be it for
&gt; JSC, V8, or something else -- and that we need a registry of those types. If
&gt; you want to keep a type, but lose the enum, we could basically extract the
&gt; magic number out of the stream and make the type a GUID that each implementer
&gt; chooses (relying on the size of the space for uniqueness).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216463</commentid>
    <comment_count>10</comment_count>
      <attachid>54170</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-04-23 10:28:36 -0700</bug_when>
    <thetext>Created attachment 54170
Removed ID and type enum

- Regarding ID:
I realized that the fact that chrome needs a response time is an implementation detail of the embedding application. Also, response time was already in ResourceLoaderBridge::ResponseInfo, so all I had to do was add it to WebURLResponse and then the ID could be removed from CacheableData.

- Regarding Type:
I removed the enum in favor of a GUID-style scheme. Let me know if you like that better or if you have another idea. An additional alternative is just to go back to the original approach where the magic number is in the metadata.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216506</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-23 12:15:32 -0700</bug_when>
    <thetext>Attachment 54170 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1892004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217228</commentid>
    <comment_count>12</comment_count>
      <attachid>54323</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-04-26 12:50:47 -0700</bug_when>
    <thetext>Created attachment 54323
Provide default, empty implementation of dispatchDidGenerateCacheableMetadata so that each port doesn&apos;t need to implement it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220265</commentid>
    <comment_count>13</comment_count>
      <attachid>54957</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-05-03 13:28:52 -0700</bug_when>
    <thetext>Created attachment 54957
Pretty much rewritten to correct interface and more robustly store metadata.

Per our offline discussion, I&apos;ve basically rewritten this patch.
 - Uses ResourceHandle interface to request that platform cache data.
 - Uses didReceiveCachedMetadata to receive cached data from platform.
 - Has map of metadata keyed by type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220279</commentid>
    <comment_count>14</comment_count>
      <attachid>54957</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-03 14:07:56 -0700</bug_when>
    <thetext>Comment on attachment 54957
Pretty much rewritten to correct interface and more robustly store metadata.

Structurally, this looks a lot better.  There&apos;s some confusing about how RefPtr/PassRefPtr/OwnPtr/PassOwnPtr works.  If you haven&apos;t read http://webkit.org/coding/RefPtr.html, it can be helpful in explaining how these classes are meant to be used.

I don&apos;t like the fancy template / subclass / reinterpret_cast way of serializing metadata.  It&apos;s a bit hard to tell from this patch how this machinery will be used, but I&apos;d start with something dead simple and we can make it more complicated if we need to.  The simplest thing is probably a static registry of IDs and only allowing for kind of cached metadata per resource.  That will get rid of all the mystical code about subclasses being forbidden from adding data members.  In any case, it looks like the clients of this system need to covert their metadata into byte arrays already.

WebCore/loader/CachedMetadata.h:5
 +      modify it under the terms of the GNU Library General Public
Google usually contributes under the BSD license.  This license is fine, but just a little outside the norm.

WebCore/loader/CachedMetadata.h:38
 +  // Subclasses must not contain non-static member variables because they would
Why not just make the destructor virtual?

WebCore/loader/CachedMetadataMap.cpp:32
 +  // static
We usually skip these comments in WebKit.

WebCore/loader/CachedMetadata.h:42
 +      static CachedMetadata* create(const char* data, size_t size)
This should probably return a PassOwnPtr
If you haven&apos;t read http://webkit.org/coding/RefPtr.html, you might find it helpful.
WebCore/loader/CachedMetadataMap.cpp:57
 +      return buffer;
return buffer.release();

WebCore/loader/CachedMetadataMap.cpp:76
 +              // The dataSize has lied to us which means the format is corrupt.
Do we want to signal this error condition somehow instead of failing silently?

WebCore/loader/CachedMetadataMap.cpp:79
 +              CachedMetadata* cachedMetadata = CachedMetadata::create(reinterpret_cast&lt;const char*&gt;(buffer + bufferPosition), dataSize);
Why do we need this reinterpret_cast here?  Isn&apos;t buffer already a const char*?

WebCore/loader/CachedMetadataMap.cpp:91
 +  void CachedMetadataMap::appendValueToBuffer(const T* value, PassRefPtr&lt;SharedBuffer&gt; buffer) const
This should be a raw SharedBuffer*.  We use PassRefPtr to signal that we&apos;re passing ownership of the refcounted object.

WebCore/loader/CachedMetadataMap.cpp:93
 +      buffer-&gt;append(reinterpret_cast&lt;const char*&gt;(value), sizeof(T));
Yuck.  This isn&apos;t strictly ANSI compliant.

WebCore/loader/CachedMetadataMap.cpp:108
 +      *bufferPosition += readSize;
WebKit usually uses non-const reference for output parameters instead of pointers.

WebCore/loader/CachedMetadataMap.h:59
 +          // the static_casts to work properly. This means no member variables.
Oh, I see.  Hum...  There&apos;s got to be a better design.  This is too much low-level memory poking.
I feel like you&apos;re trying to use the C++ type system to do a bunch of work that it&apos;s not very good at doing.  Why do you have a separate subtype for each kind of thing you might want to cache?  It feels like you just want to have some sort of static registry or something to avoid conflicts.

A lot of this feels like duplication of Pickle.  I guess we don&apos;t have that here, do we...
WebCore/loader/CachedResource.cpp:172
 +          m_cachedMetadataMap.set(CachedMetadataMap::create().release());
I don&apos;t think this release() is correct.

WebCore/loader/CachedResource.cpp:407
 +      ASSERT(m_cachedMetadataMap-&gt;size() == 1);
Hum...  This mechanism seems like drastic overkill if there&apos;s only ever one thing in the map.  Maybe make the simpler thing first and we can elaborate it as needed later.

WebCore/loader/CachedResource.h:166
 +              return m_cachedMetadataMap-&gt;get&lt;T&gt;();
I&apos;m not really sure what this templatization is buying you.

WebCore/platform/network/ResourceHandle.cpp:148
 +  void ResourceHandle::cacheMetadata(const ResourceResponse&amp;, PassRefPtr&lt;SharedBuffer&gt;)
This PassRefPtr is confusing here.  Are we taking ownership of the SharedBuffer?  If so, is it ok to do nothing here?

WebCore/platform/network/ResourceHandle.h:115
 +      static void cacheMetadata(const ResourceResponse&amp;, PassRefPtr&lt;SharedBuffer&gt;);
I suspect this should be a SharedBuffer*, but I&apos;m not sure.

WebKit/chromium/tests/CachedMetadataMapTest.cpp:13
 +   * distribution.
This is the more usual license for Google contributions.

WebKit/chromium/tests/CachedMetadataMapTest.cpp:32
 +  // original KURL&apos;s.
This comment seems wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220896</commentid>
    <comment_count>15</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-05-04 17:34:26 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 54957 [details])
&gt; Structurally, this looks a lot better.  There&apos;s some confusing about how
&gt; RefPtr/PassRefPtr/OwnPtr/PassOwnPtr works.  If you haven&apos;t read
&gt; http://webkit.org/coding/RefPtr.html, it can be helpful in explaining how these
&gt; classes are meant to be used.

Thanks, I hadn&apos;t seen that doc. It was extremely helpful. You are right, I didn&apos;t understand how the WTF smart pointers worked.

Would it be controversial if I mailed a patch to add a comment pointing to the documentation in RefPtr.h?

&gt; 
&gt; I don&apos;t like the fancy template / subclass / reinterpret_cast way of
&gt; serializing metadata.  It&apos;s a bit hard to tell from this patch how this
&gt; machinery will be used, but I&apos;d start with something dead simple and we can
&gt; make it more complicated if we need to.  The simplest thing is probably a
&gt; static registry of IDs and only allowing for kind of cached metadata per
&gt; resource.  That will get rid of all the mystical code about subclasses being
&gt; forbidden from adding data members.  In any case, it looks like the clients of
&gt; this system need to covert their metadata into byte arrays already.

Okay, I&apos;ve tossed the map and gone back to the assumption that there is one type of metadata per resource. This simplifies things a great deal, but still requires each WebCore generator of metadata to choose a GUID-like ID. I can&apos;t think of any way to have a static registry unless you are okay with a single bottle-neck file somewhere that has ID names like &quot;V8Metadata&quot;, &quot;JSCMetadata&quot;, etc.

&gt; 
&gt; WebCore/loader/CachedMetadata.h:5
&gt;  +      modify it under the terms of the GNU Library General Public
&gt; Google usually contributes under the BSD license.  This license is fine, but
&gt; just a little outside the norm.

Oops. I just copied the license from the nearest file not realizing that files within WebKit have different licences. Hopefully I&apos;ve got the right one now.

&gt; 
&gt; WebCore/loader/CachedMetadata.h:38
&gt;  +  // Subclasses must not contain non-static member variables because they
&gt; would
&gt; Why not just make the destructor virtual?

Moot.

&gt; 
&gt; WebCore/loader/CachedMetadataMap.cpp:32
&gt;  +  // static
&gt; We usually skip these comments in WebKit.

Moot.

&gt; 
&gt; WebCore/loader/CachedMetadata.h:42
&gt;  +      static CachedMetadata* create(const char* data, size_t size)
&gt; This should probably return a PassOwnPtr
&gt; If you haven&apos;t read http://webkit.org/coding/RefPtr.html, you might find it
&gt; helpful.

Thanks again for the doc. You are right.

&gt; WebCore/loader/CachedMetadataMap.cpp:57
&gt;  +      return buffer;
&gt; return buffer.release();

Moot.

&gt; 
&gt; WebCore/loader/CachedMetadataMap.cpp:76
&gt;  +              // The dataSize has lied to us which means the format is
&gt; corrupt.
&gt; Do we want to signal this error condition somehow instead of failing silently?

Moot.

&gt; 
&gt; WebCore/loader/CachedMetadataMap.cpp:79
&gt;  +              CachedMetadata* cachedMetadata =
&gt; CachedMetadata::create(reinterpret_cast&lt;const char*&gt;(buffer + bufferPosition),
&gt; dataSize);
&gt; Why do we need this reinterpret_cast here?  Isn&apos;t buffer already a const char*?

Moot.

&gt; 
&gt; WebCore/loader/CachedMetadataMap.cpp:91
&gt;  +  void CachedMetadataMap::appendValueToBuffer(const T* value,
&gt; PassRefPtr&lt;SharedBuffer&gt; buffer) const
&gt; This should be a raw SharedBuffer*.  We use PassRefPtr to signal that we&apos;re
&gt; passing ownership of the refcounted object.

I&apos;m now passing a const Vector&lt;char&gt;&amp;. Is that ideal?

&gt; 
&gt; WebCore/loader/CachedMetadataMap.cpp:93
&gt;  +      buffer-&gt;append(reinterpret_cast&lt;const char*&gt;(value), sizeof(T));
&gt; Yuck.  This isn&apos;t strictly ANSI compliant.
&gt; 

Are you referring to ANSI C (i.e. char could be another size) or ANSI unicode (i.e. doesn&apos;t handle UTF-8)?

If C: I could switch to uint8_t/uint32_t instead of char/unsigned. But I&apos;d still have to cast at the API level to make this useful.

If Unicode: Keep in mind that I&apos;m expecting this to be a serialization of bytes of metadata. It is not a string.

If something else, please explain.

&gt; WebCore/loader/CachedMetadataMap.cpp:108
&gt;  +      *bufferPosition += readSize;
&gt; WebKit usually uses non-const reference for output parameters instead of
&gt; pointers.

Moot.

&gt; 
&gt; WebCore/loader/CachedMetadataMap.h:59
&gt;  +          // the static_casts to work properly. This means no member
&gt; variables.
&gt; Oh, I see.  Hum...  There&apos;s got to be a better design.  This is too much
&gt; low-level memory poking.
&gt; I feel like you&apos;re trying to use the C++ type system to do a bunch of work that
&gt; it&apos;s not very good at doing.  Why do you have a separate subtype for each kind
&gt; of thing you might want to cache?  It feels like you just want to have some
&gt; sort of static registry or something to avoid conflicts.
&gt; 
&gt; A lot of this feels like duplication of Pickle.  I guess we don&apos;t have that
&gt; here, do we...

Okay. I was hoping to make the API just slightly cleaner by exposing:
cachedResource.get&lt;MyDataType&gt;();
instead of:
cachedResource.get(myDataTypeID);

But in the interest of simplicity, I&apos;ve gotten rid of all of the templates.

Yes, if Pickle were available, I&apos;d be able to use that. WebCore/bindings/v8/SerializedScriptValue.cpp has similar serialization logic. But since my format is so simple (an unsigned followed by a byte bucket), I&apos;ve just rolled my own. Let me know if you have a better idea for serialization.

&gt; WebCore/loader/CachedResource.cpp:172
&gt;  +          m_cachedMetadataMap.set(CachedMetadataMap::create().release());
&gt; I don&apos;t think this release() is correct.

Moot.

&gt; 
&gt; WebCore/loader/CachedResource.cpp:407
&gt;  +      ASSERT(m_cachedMetadataMap-&gt;size() == 1);
&gt; Hum...  This mechanism seems like drastic overkill if there&apos;s only ever one
&gt; thing in the map.  Maybe make the simpler thing first and we can elaborate it
&gt; as needed later.

Done.

&gt; 
&gt; WebCore/loader/CachedResource.h:166
&gt;  +              return m_cachedMetadataMap-&gt;get&lt;T&gt;();
&gt; I&apos;m not really sure what this templatization is buying you.

See previous comment. I thought it made the API more natural. It is gone now.

&gt; 
&gt; WebCore/platform/network/ResourceHandle.cpp:148
&gt;  +  void ResourceHandle::cacheMetadata(const ResourceResponse&amp;,
&gt; PassRefPtr&lt;SharedBuffer&gt;)
&gt; This PassRefPtr is confusing here.  Are we taking ownership of the
&gt; SharedBuffer?  If so, is it ok to do nothing here?

I didn&apos;t understand PassRefPtr properly before reading that document. It is now a raw pointer.

&gt; 
&gt; WebCore/platform/network/ResourceHandle.h:115
&gt;  +      static void cacheMetadata(const ResourceResponse&amp;,
&gt; PassRefPtr&lt;SharedBuffer&gt;);
&gt; I suspect this should be a SharedBuffer*, but I&apos;m not sure.

Yep, done.

&gt; 
&gt; WebKit/chromium/tests/CachedMetadataMapTest.cpp:13
&gt;  +   * distribution.
&gt; This is the more usual license for Google contributions.
&gt; 

I&apos;ve used this license throughout.

&gt; WebKit/chromium/tests/CachedMetadataMapTest.cpp:32
&gt;  +  // original KURL&apos;s.
&gt; This comment seems wrong.

Yep, unintentionally branched from another test. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220897</commentid>
    <comment_count>16</comment_count>
      <attachid>55079</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-05-04 17:35:52 -0700</bug_when>
    <thetext>Created attachment 55079
Get rid of map and fix smart pointers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221158</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-05 09:59:04 -0700</bug_when>
    <thetext>&gt; Would it be controversial if I mailed a patch to add a comment pointing to the
&gt; documentation in RefPtr.h?

Please do.  Not enough people read that doc.  :)

&gt; &gt; WebCore/loader/CachedMetadataMap.cpp:91
&gt; &gt;  +  void CachedMetadataMap::appendValueToBuffer(const T* value,
&gt; &gt; PassRefPtr&lt;SharedBuffer&gt; buffer) const
&gt; &gt; This should be a raw SharedBuffer*.  We use PassRefPtr to signal that we&apos;re
&gt; &gt; passing ownership of the refcounted object.
&gt; 
&gt; I&apos;m now passing a const Vector&lt;char&gt;&amp;. Is that ideal?

That&apos;s probably good.  I&apos;ll look.

&gt; &gt; WebCore/loader/CachedMetadataMap.cpp:93
&gt; &gt;  +      buffer-&gt;append(reinterpret_cast&lt;const char*&gt;(value), sizeof(T));
&gt; &gt; Yuck.  This isn&apos;t strictly ANSI compliant.
&gt; 
&gt; Are you referring to ANSI C (i.e. char could be another size) or ANSI unicode
&gt; (i.e. doesn&apos;t handle UTF-8)?
&gt; 
&gt; If C: I could switch to uint8_t/uint32_t instead of char/unsigned. But I&apos;d
&gt; still have to cast at the API level to make this useful.
&gt; 
&gt; If Unicode: Keep in mind that I&apos;m expecting this to be a serialization of bytes
&gt; of metadata. It is not a string.
&gt; 
&gt; If something else, please explain.

I meant I don&apos;t think it&apos;s a strictly legal reinterpret_cast according to ANSI C.  Just my way of complaining about low-level memory poking.

Looking at the new patch now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221166</commentid>
    <comment_count>18</comment_count>
      <attachid>55079</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-05 10:11:09 -0700</bug_when>
    <thetext>Comment on attachment 55079
Get rid of map and fix smart pointers

This is getting close.  I&apos;d like to see this code used by something so it&apos;s not dead code though.  :)

WebCore/loader/CachedMetadataStore.h:108
 +      static const size_t unsignedSize = sizeof(unsigned);
This constant makes things harder to read.  Just use sizeof(unsigned).  That&apos;s perfectly clear.

WebCore/loader/CachedMetadataStore.h:107
 +      static const size_t dataTypeIDStart = 0;
This constant also doesn&apos;t really help.

WebCore/loader/CachedMetadataStore.h:54
 +      static PassOwnPtr&lt;CachedMetadataStore&gt; deserialize(const char* data, size_t size)
Why two parameters instead of a const Vector&lt;char&gt;&amp;  ?

WebCore/loader/CachedMetadata.h:39
 +  class CachedMetadata : public RefCounted&lt;CachedMetadata&gt; {
I don&apos;t understand the role this class plays.  How is it different than Vector&lt;char&gt; ?  Maybe because it doesn&apos;t take ownership of the bytes?

WebCore/loader/CachedResource.h:148
 +      // Sets the serialized metadata retrieved from the platform&apos;s cache.
If this is a setter, maybe it should have &quot;set&quot; in its name?

WebCore/loader/CachedResource.h:232
 +      OwnPtr&lt;CachedMetadataStore&gt; m_cachedMetadataStore; // Lazy
Comment not needed.

WebCore/loader/CachedResource.h:153
 +      void setCachedMetadata(unsigned dataTypeID, CachedMetadata* cachedMetadata);
cachedMetadata parameter name not needed.

WebCore/loader/SubresourceLoader.cpp:181
 +      // So don&apos;t deliver any data to the loader yet.
I don&apos;t understand this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221197</commentid>
    <comment_count>19</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-05-05 11:04:47 -0700</bug_when>
    <thetext>I have a couple of questions inline below. I&apos;ll hold off on uploading the next patch until those are answered.

By the way, do you think that reinterpret_cast is okay or should I ask around/research it a little more?

(In reply to comment #18)
&gt; (From update of attachment 55079 [details])
&gt; This is getting close.  I&apos;d like to see this code used by something so it&apos;s not
&gt; dead code though.  :)

This patch is hairy enough that I don&apos;t think I should add to it. I&apos;ll upload a separate patch for bindings/v8 now. Should it use this bug or a new bug?

&gt; 
&gt; WebCore/loader/CachedMetadataStore.h:108
&gt;  +      static const size_t unsignedSize = sizeof(unsigned);
&gt; This constant makes things harder to read.  Just use sizeof(unsigned).  That&apos;s
&gt; perfectly clear.

Done.

&gt; 
&gt; WebCore/loader/CachedMetadataStore.h:107
&gt;  +      static const size_t dataTypeIDStart = 0;
&gt; This constant also doesn&apos;t really help.

I disagree. I think it is crucial for readability to have the offsets of the format in one place. If I just inline it, then I&apos;m left with code that says readUnsigned(0) instead of readUnsigned(dataTypeIDStart). If you still feel strongly then I&apos;ll defer to you and inline it.

&gt; 
&gt; WebCore/loader/CachedMetadataStore.h:54
&gt;  +      static PassOwnPtr&lt;CachedMetadataStore&gt; deserialize(const char* data,
&gt; size_t size)
&gt; Why two parameters instead of a const Vector&lt;char&gt;&amp;  ?
&gt; 

This is a side-effect of the main API. It looks like:


Load:     ResourceLoader::didReceiveCachedMetadata(const char*, int)
Persist:  ResourceHandle::cacheMetadata(const ResourceResponse&amp;, const Vector&lt;char&gt;&amp;)

They should probably both use Vectors or both use char*/length. My thought is to remove the Vector in favor of char*/length. But I wanted to confirm with you before making the change.

&gt; WebCore/loader/CachedMetadata.h:39
&gt;  +  class CachedMetadata : public RefCounted&lt;CachedMetadata&gt; {
&gt; I don&apos;t understand the role this class plays.  How is it different than
&gt; Vector&lt;char&gt; ?  Maybe because it doesn&apos;t take ownership of the bytes?
&gt; 

It is basically a class to point to data without owning it (to avoid a copy). This allows CachedResource::cachedMetadata(unsigned) to return one object rather than the much uglier CachedResource::cachedMetadata(unsigned, const char**, int*). I couldn&apos;t find a suitable generic container in WebKit. Do you have a suggestion for a better way to return a pointer/length combination without a copy?

&gt; WebCore/loader/CachedResource.h:148
&gt;  +      // Sets the serialized metadata retrieved from the platform&apos;s cache.
&gt; If this is a setter, maybe it should have &quot;set&quot; in its name?

Done. setSerializedCachedMetadata().

&gt; 
&gt; WebCore/loader/CachedResource.h:232
&gt;  +      OwnPtr&lt;CachedMetadataStore&gt; m_cachedMetadataStore; // Lazy
&gt; Comment not needed.

Done.

&gt; 
&gt; WebCore/loader/CachedResource.h:153
&gt;  +      void setCachedMetadata(unsigned dataTypeID, CachedMetadata*
&gt; cachedMetadata);
&gt; cachedMetadata parameter name not needed.

Done.

&gt; 
&gt; WebCore/loader/SubresourceLoader.cpp:181
&gt;  +      // So don&apos;t deliver any data to the loader yet.
&gt; I don&apos;t understand this comment.

Oops, that was branched from didReceiveData, but it doesn&apos;t make sense here since its a one-shot. Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221207</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-05 11:34:33 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I have a couple of questions inline below. I&apos;ll hold off on uploading the next
&gt; patch until those are answered.
&gt; 
&gt; By the way, do you think that reinterpret_cast is okay or should I ask
&gt; around/research it a little more?

I&apos;d rather we didn&apos;t have to reinterpret_cast, but I&apos;m not sure where&apos;s a way around it.

&gt; &gt; This is getting close.  I&apos;d like to see this code used by something so it&apos;s not
&gt; &gt; dead code though.  :)
&gt; 
&gt; This patch is hairy enough that I don&apos;t think I should add to it. I&apos;ll upload a
&gt; separate patch for bindings/v8 now. Should it use this bug or a new bug?

Good idea.  Please use a separate bug.  We can cross-link them if we need to using the &quot;blocks&quot; field.

&gt; &gt; WebCore/loader/CachedMetadataStore.h:107
&gt; &gt;  +      static const size_t dataTypeIDStart = 0;
&gt; &gt; This constant also doesn&apos;t really help.
&gt; 
&gt; I disagree. I think it is crucial for readability to have the offsets of the
&gt; format in one place. If I just inline it, then I&apos;m left with code that says
&gt; readUnsigned(0) instead of readUnsigned(dataTypeIDStart). If you still feel
&gt; strongly then I&apos;ll defer to you and inline it.

Ok.

&gt; &gt; WebCore/loader/CachedMetadataStore.h:54
&gt; &gt;  +      static PassOwnPtr&lt;CachedMetadataStore&gt; deserialize(const char* data,
&gt; &gt; size_t size)
&gt; &gt; Why two parameters instead of a const Vector&lt;char&gt;&amp;  ?
&gt; 
&gt; This is a side-effect of the main API. It looks like:
&gt; 
&gt; Load:     ResourceLoader::didReceiveCachedMetadata(const char*, int)
&gt; Persist:  ResourceHandle::cacheMetadata(const ResourceResponse&amp;, const
&gt; Vector&lt;char&gt;&amp;)
&gt; 
&gt; They should probably both use Vectors or both use char*/length. My thought is
&gt; to remove the Vector in favor of char*/length. But I wanted to confirm with you
&gt; before making the change.

Using Vector is generally better because it&apos;s clear who owns the memory.  The main reason to use char* + length is if the malloc in Vector is too expensive or there&apos;s a critical memcpy that can&apos;t be removed.

&gt; &gt; WebCore/loader/CachedMetadata.h:39
&gt; &gt;  +  class CachedMetadata : public RefCounted&lt;CachedMetadata&gt; {
&gt; &gt; I don&apos;t understand the role this class plays.  How is it different than
&gt; &gt; Vector&lt;char&gt; ?  Maybe because it doesn&apos;t take ownership of the bytes?
&gt; 
&gt; It is basically a class to point to data without owning it (to avoid a copy).
&gt; This allows CachedResource::cachedMetadata(unsigned) to return one object
&gt; rather than the much uglier CachedResource::cachedMetadata(unsigned, const
&gt; char**, int*). I couldn&apos;t find a suitable generic container in WebKit. Do you
&gt; have a suggestion for a better way to return a pointer/length combination
&gt; without a copy?

I guess my main concern is that the ownship of the memory is unclear.  How long can the caller hold on to this object before it explodes?  I think this is the problem that SharedBuffer is trying to solve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221781</commentid>
    <comment_count>21</comment_count>
      <attachid>55255</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-05-06 10:23:26 -0700</bug_when>
    <thetext>Created attachment 55255
Make CachedMetadata own data and reference count it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221827</commentid>
    <comment_count>22</comment_count>
      <attachid>55255</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-06 11:16:54 -0700</bug_when>
    <thetext>Comment on attachment 55255
Make CachedMetadata own data and reference count it

Looks good.  Thanks for iterating on this patch.  Please address the minor nits below before committing.  If you&apos;d like the commit bot to land your patch, you can upload a new patch with these comments addressed.

WebCore/loader/CachedMetadata.h:66
 +          return new CachedMetadata(dataTypeID, data, size);
adoptRef?

WebCore/loader/CachedMetadata.h:71
 +          return new CachedMetadata(data, size);
adoptRef?

WebCore/loader/CachedMetadata.h:62
 +      friend class CachedResource;
You can just make these methods public.  WebKit isn&apos;t super tight about hiding interfaces.

WebCore/loader/ResourceLoader.h:101
 +          virtual void didReceiveCachedMetadata(ResourceHandle*, const char* data, int length) { didReceiveCachedMetadata(data, length); }
These methods don&apos;t seem to fit the pattern of the other methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221855</commentid>
    <comment_count>23</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-05-06 11:41:54 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 55255 [details])
&gt; Looks good.  Thanks for iterating on this patch.  Please address the minor nits
&gt; below before committing.  If you&apos;d like the commit bot to land your patch, you
&gt; can upload a new patch with these comments addressed.
&gt; 
&gt; WebCore/loader/CachedMetadata.h:66
&gt;  +          return new CachedMetadata(dataTypeID, data, size);
&gt; adoptRef?

Done.

&gt; 
&gt; WebCore/loader/CachedMetadata.h:71
&gt;  +          return new CachedMetadata(data, size);
&gt; adoptRef?

Done.

&gt; 
&gt; WebCore/loader/CachedMetadata.h:62
&gt;  +      friend class CachedResource;
&gt; You can just make these methods public.  WebKit isn&apos;t super tight about hiding
&gt; interfaces.

Done.

&gt; 
&gt; WebCore/loader/ResourceLoader.h:101
&gt;  +          virtual void didReceiveCachedMetadata(ResourceHandle*, const char*
&gt; data, int length) { didReceiveCachedMetadata(data, length); }
&gt; These methods don&apos;t seem to fit the pattern of the other methods.

The diff didn&apos;t show enough context. There are other methods a couple of lines below which have a one-line forward inlined like this. Do you want me to move it to the cpp file or is it fine to leave like the others?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221856</commentid>
    <comment_count>24</comment_count>
      <attachid>55279</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-05-06 11:43:09 -0700</bug_when>
    <thetext>Created attachment 55279
Add adoptRefs, remove protected section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222869</commentid>
    <comment_count>25</comment_count>
      <attachid>55279</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-08 05:58:47 -0700</bug_when>
    <thetext>Comment on attachment 55279
Add adoptRefs, remove protected section

Clearing flags on attachment: 55279

Committed r59023: &lt;http://trac.webkit.org/changeset/59023&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222870</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-08 05:58:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222879</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-08 06:34:12 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/59023 might have broken Chromium Win Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222893</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-08 09:58:50 -0700</bug_when>
    <thetext>Rolled out, due to chromium link failures.  webkit-patch rollout hit a bug and failed to re-open this one, sorry.  Fixing the webkit-patch bug now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222909</commentid>
    <comment_count>29</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-08 11:10:17 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=38803 was the webkit-patch rollout bug.  Fix posted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222963</commentid>
    <comment_count>30</comment_count>
      <attachid>55255</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-08 23:08:14 -0700</bug_when>
    <thetext>Comment on attachment 55255
Make CachedMetadata own data and reference count it

Cleared Adam Barth&apos;s review+ from obsolete attachment 55255 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223393</commentid>
    <comment_count>31</comment_count>
      <attachid>55568</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-05-10 10:50:45 -0700</bug_when>
    <thetext>Created attachment 55568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223398</commentid>
    <comment_count>32</comment_count>
      <attachid>55568</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-10 10:53:29 -0700</bug_when>
    <thetext>Comment on attachment 55568
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223410</commentid>
    <comment_count>33</comment_count>
      <attachid>55568</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-10 11:14:21 -0700</bug_when>
    <thetext>Comment on attachment 55568
Patch

Clearing flags on attachment: 55568

Committed r59087: &lt;http://trac.webkit.org/changeset/59087&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223411</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-10 11:14:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53873</attachid>
            <date>2010-04-20 13:22:57 -0700</date>
            <delta_ts>2010-04-21 21:09:32 -0700</delta_ts>
            <desc>Rough patch to get design feedback</desc>
            <filename>37874.txt</filename>
            <type>text/plain</type>
            <size>13656</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gNTc4NTUpCisrKyBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2
ICsxNjQsMjIgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoY29uc3QgUgogICAg
IG1fcmVzcG9uc2VUaW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwogfQogCit2b2lkIENhY2hlZFJl
c291cmNlOjpzZXRDYWNoZWRNZXRhZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY2FjaGVk
TWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZUxv
YWRlciogZnJhbWVMb2FkZXIpCit7CisgICAgbV9yZXNwb25zZS5zZXRDYWNoZWRNZXRhZGF0YShj
YWNoZWRNZXRhZGF0YSk7CisgICAgaWYgKGZyYW1lTG9hZGVyKQorICAgICAgICBmcmFtZUxvYWRl
ci0+ZGlkR2VuZXJhdGVDYWNoZWFibGVNZXRhZGF0YSgKKyAgICAgICAgICAgIG1fcmVzcG9uc2Uu
dXJsKCksCisgICAgICAgICAgICBtX3Jlc3BvbnNlLmNhY2hlYWJsZU1ldGFkYXRhSUQoKSwKKyAg
ICAgICAgICAgIG1fcmVzcG9uc2UuY2FjaGVkTWV0YWRhdGEoKSk7Cit9CisKK1Bhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBDYWNoZWRSZXNvdXJjZTo6Y2FjaGVkTWV0YWRhdGEoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3Jlc3BvbnNlLmNhY2hlZE1ldGFkYXRhKCk7Cit9CisKIHZvaWQgQ2FjaGVk
UmVzb3VyY2U6OnNldFJlcXVlc3QoUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBpZiAocmVxdWVz
dCAmJiAhbV9yZXF1ZXN0KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9u
IDU3ODU1KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQCBjbGFzcyBDYWNoZTsKIGNsYXNzIENhY2hlZFJlc291cmNlQ2xp
ZW50OwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOwogY2xhc3MgRG9jTG9hZGVyOwor
Y2xhc3MgRnJhbWVMb2FkZXI7CiBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKIGNsYXNzIFJlcXVl
c3Q7CiBjbGFzcyBQdXJnZWFibGVCdWZmZXI7CkBAIC0xNDIsNiArMTQzLDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7
IH0KIAorICAgIC8vIFNldHMgdGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291
cmNlIGFuZCBub3RpZmllcyBhbnkgY2xpZW50cworICAgIC8vIHRoYXQgdGhpcyBkYXRhIHNob3Vs
ZCBiZSBwZXJzaXN0ZWQgaW4gdGhlIGNhY2hlLgorICAgIHZvaWQgc2V0Q2FjaGVkTWV0YWRhdGEo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBGcmFtZUxvYWRlciopOworICAgIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBjYWNoZWRNZXRhZGF0YSgpIGNvbnN0OworCiAgICAgYm9vbCBjYW5EZWxl
dGUoKSBjb25zdCB7IHJldHVybiAhaGFzQ2xpZW50cygpICYmICFtX3JlcXVlc3QgJiYgIW1fcHJl
bG9hZENvdW50ICYmICFtX2hhbmRsZUNvdW50ICYmICFtX3Jlc291cmNlVG9SZXZhbGlkYXRlICYm
ICFtX3Byb3h5UmVzb3VyY2U7IH0KIAogICAgIGJvb2wgaXNFeHBpcmVkKCkgY29uc3Q7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA1Nzg1NSkKKysrIFdlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWls
TG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlRXJy
b3ImKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVt
b3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiwgaW50KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEoY29uc3QgS1VSTCYsIGxvbmcg
bG9uZywgY29uc3QgY2hhciosIHNpemVfdCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKSB7IH0KSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNTc4NTUpCisrKyBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NzksNiArMzY3OSwxOCBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpsb2FkZWRSZXNvdXJjZUZyb21NZW1vCiAgICAgbm90aWZpZXIoKS0+c2Vu
ZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2FnZXMobV9kb2N1bWVudExvYWRlci5nZXQoKSwgaWRlbnRp
ZmllciwgcmVzb3VyY2UtPnJlc3BvbnNlKCksIHJlc291cmNlLT5lbmNvZGVkU2l6ZSgpLCBlcnJv
cik7CiB9CiAKK3ZvaWQgRnJhbWVMb2FkZXI6OmRpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEo
CisgICAgY29uc3QgS1VSTCYgdXJsLAorICAgIGxvbmcgbG9uZyBjYWNoZWFibGVNZXRhZGF0YUlE
LAorICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIpCit7CisgICAgbV9j
bGllbnQtPmRpc3BhdGNoRGlkR2VuZXJhdGVDYWNoZWFibGVNZXRhZGF0YSgKKyAgICAgICAgdXJs
LAorICAgICAgICBjYWNoZWFibGVNZXRhZGF0YUlELAorICAgICAgICBzaGFyZWRCdWZmZXItPmRh
dGEoKSwKKyAgICAgICAgc2hhcmVkQnVmZmVyLT5zaXplKCkpOworfQorCiB2b2lkIEZyYW1lTG9h
ZGVyOjphcHBseVVzZXJBZ2VudChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgU3Ry
aW5nIHVzZXJBZ2VudCA9IGNsaWVudCgpLT51c2VyQWdlbnQocmVxdWVzdC51cmwoKSk7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNTc4NTUpCisrKyBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNiArMjAwLDEyIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGxvYWRlZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKGNvbnN0IENhY2hlZFJlc291
cmNlKik7CiAgICAgdm9pZCB0ZWxsQ2xpZW50QWJvdXRQYXN0TWVtb3J5Q2FjaGVMb2FkcygpOwog
CisgICAgLy8gTmV3IGNhY2hlYWJsZSBkYXRhIGhhcyBiZWVuIGdlbmVyYXRlZCBvbiB0aGUgQ2Fj
aGVkUmVzb3VyY2UuCisgICAgdm9pZCBkaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKAorICAg
ICAgICBjb25zdCBLVVJMJiB1cmwsCisgICAgICAgIGxvbmcgbG9uZyBjYWNoZWFibGVNZXRhZGF0
YUlELAorICAgICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyKTsKKwog
ICAgIHZvaWQgY2hlY2tMb2FkQ29tcGxldGUoKTsKICAgICB2b2lkIGRldGFjaEZyb21QYXJlbnQo
KTsKICAgICB2b2lkIGRldGFjaFZpZXdzQW5kRG9jdW1lbnRMb2FkZXIoKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA1Nzg1NSkKKysrIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZp
bmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1v
cnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEoY29uc3QgS1VSTCYsIGxvbmcgbG9u
ZywgY29uc3QgY2hhciosIHNpemVfdCkgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkgPSAwOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2Uu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNv
dXJjZVJlc3BvbnNlLmgJKHJldmlzaW9uIDU3ODU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlQmFzZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArMzksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UoKQogICAgICAg
ICAgICAgOiBtX2lzQ29udGVudEZpbHRlcmVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX2FwcENh
Y2hlSUQoMCkKKyAgICAgICAgICAgICwgbV9jYWNoZWFibGVNZXRhZGF0YUlEKDApCiAgICAgICAg
ICAgICAsIG1fd2FzRmV0Y2hlZFZpYVNQRFkoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNNdWx0
aXBhcnRQYXlsb2FkKGZhbHNlKQogICAgICAgICB7CkBAIC00Nyw2ICs0OSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIDogUmVzb3VyY2VSZXNwb25zZUJhc2UodXJsLCBtaW1l
VHlwZSwgZXhwZWN0ZWRMZW5ndGgsIHRleHRFbmNvZGluZ05hbWUsIGZpbGVuYW1lKQogICAgICAg
ICAgICAgLCBtX2lzQ29udGVudEZpbHRlcmVkKGZhbHNlKQogICAgICAgICAgICAgLCBtX2FwcENh
Y2hlSUQoMCkKKyAgICAgICAgICAgICwgbV9jYWNoZWFibGVNZXRhZGF0YUlEKDApCiAgICAgICAg
ICAgICAsIG1fd2FzRmV0Y2hlZFZpYVNQRFkoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNNdWx0
aXBhcnRQYXlsb2FkKGZhbHNlKQogICAgICAgICB7CkBAIC03Niw2ICs3OSwxOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX2FwcENhY2hlTWFuaWZlc3RVUkwgPSB1cmw7CiAg
ICAgICAgIH0KIAorICAgICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY2FjaGVkTWV0YWRh
dGEoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZE1ldGFkYXRhOyB9CisgICAgICAgIHZvaWQgc2V0
Q2FjaGVkTWV0YWRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNhY2hlZE1ldGFkYXRhKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2NhY2hlZE1ldGFkYXRhID0gY2FjaGVkTWV0YWRhdGE7
CisgICAgICAgIH0KKworICAgICAgICBsb25nIGxvbmcgY2FjaGVhYmxlTWV0YWRhdGFJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FjaGVhYmxlTWV0YWRhdGFJRDsgfQorICAgICAgICB2b2lkIHNldENh
Y2hlYWJsZU1ldGFkYXRhSUQobG9uZyBsb25nIGNhY2hlYWJsZU1ldGFkYXRhSUQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fY2FjaGVhYmxlTWV0YWRhdGFJRCA9IGNhY2hlYWJsZU1ldGFkYXRh
SUQ7CisgICAgICAgIH0KKwogICAgICAgICBib29sIHdhc0ZldGNoZWRWaWFTUERZKCkgY29uc3Qg
eyByZXR1cm4gbV93YXNGZXRjaGVkVmlhU1BEWTsgfQogICAgICAgICB2b2lkIHNldFdhc0ZldGNo
ZWRWaWFTUERZKGJvb2wgdmFsdWUpCiAgICAgICAgIHsKQEAgLTExMyw2ICsxMjgsMTUgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBOb3RlOiBvbmx5IHZhbGlkIGZvciBtYWluIHJl
c291cmNlIHJlc3BvbnNlcy4KICAgICAgICAgS1VSTCBtX2FwcENhY2hlTWFuaWZlc3RVUkw7CiAK
KyAgICAgICAgLy8gT3B0aW9uYWwgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3Vy
Y2Ugd2hpY2ggd2FzIHJldHJpZXZlZAorICAgICAgICAvLyBmcm9tIHRoZSBjYWNoZS4KKyAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9jYWNoZWRNZXRhZGF0YTsKKworICAgICAgICAvLyBJ
ZiBub24temVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgaG9zdCBhcHBsaWNhdGlvbiBpcyB3aWxsaW5n
IHRvIGNhY2hlCisgICAgICAgIC8vIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291
cmNlLiBUaGlzIElEIHdpbGwgYmUgcmV0dXJuZWQgdG8KKyAgICAgICAgLy8gdGhlIGhvc3QgYXBw
bGljYXRpb24gYWxvbmcgd2l0aCB0aGUgY2FjaGVhYmxlIG1ldGFkYXRhLgorICAgICAgICBsb25n
IGxvbmcgbV9jYWNoZWFibGVNZXRhZGF0YUlEOworCiAgICAgICAgIGJvb2wgbV93YXNGZXRjaGVk
VmlhU1BEWTsKIAogICAgICAgICAvLyBTZXQgdG8gdHJ1ZSBpZiB0aGlzIGlzIHBhcnQgb2YgYSBt
dWx0aXBhcnQgcmVzcG9uc2UuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTc5MDIpCisr
KyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTAtMDQtMjAgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYWJpbGl0
eSB0byBzZW5kL3JlY2VpdmUgY2FjaGVkIG1ldGFkYXRhIHRvIHRoZSBDaHJvbWl1bSBwb3J0Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc4NzQKKwor
ICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZUNsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZUNsaWVudDo6ZGlkR2VuZXJhdGVDYWNoZWFibGVNZXRhZGF0YSk6CisgICAgICAgICogcHVi
bGljL1dlYlVSTFJlc3BvbnNlLmg6CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hE
aWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldEFwcENhY2hlTWFuaWZlc3RVUkwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6Y2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0Q2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVUkxSZXNwb25zZTo6Y2FjaGVhYmxlTWV0YWRhdGFJRCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVSTFJlc3BvbnNlOjpzZXRDYWNoZWFibGVNZXRhZGF0YUlEKToKKwogMjAxMC0wNC0yMCAg
SmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZUNsaWVudC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZUNsaWVudC5oCShyZXZpc2lvbiA1Nzg1NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RnJhbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDYgKzI1NiwxMCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZSgKICAgICAg
ICAgV2ViRnJhbWUqLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiwgY29uc3QgV2ViVVJMUmVzcG9uc2Um
KSB7IH0KIAorICAgIC8vIENhY2hlYWJsZSBtZXRhZGF0YSBoYXMgYmVlbiBnZW5lcmF0ZWQgZm9y
IHRoZSBnaXZlbiBVUkwuCisgICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0
YWRhdGEoCisgICAgICAgIGNvbnN0IFdlYlVSTCYsIGxvbmcgbG9uZywgY29uc3QgY2hhciosIHNp
emVfdCkgeyB9CisKICAgICAvLyBUaGlzIGZyYW1lIGhhcyBkaXNwbGF5ZWQgaW5hY3RpdmUgY29u
dGVudCAoc3VjaCBhcyBhbiBpbWFnZSkgZnJvbSBhbgogICAgIC8vIGluc2VjdXJlIHNvdXJjZS4g
IEluYWN0aXZlIGNvbnRlbnQgY2Fubm90IHNwcmVhZCB0byBvdGhlciBmcmFtZXMuCiAgICAgdmly
dHVhbCB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoV2ViRnJhbWUqKSB7IH0KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMUmVzcG9uc2UuaA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMUmVzcG9uc2UuaAkocmV2aXNpb24gNTc4NTUp
CisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTFJlc3BvbnNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBSZXNvdXJjZVJl
c3BvbgogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkNTdHJpbmc7CitjbGFzcyBXZWJE
YXRhOwogY2xhc3MgV2ViSFRUUEhlYWRlclZpc2l0b3I7CiBjbGFzcyBXZWJTdHJpbmc7CiBjbGFz
cyBXZWJVUkw7CkBAIC0xMDgsNiArMTA5LDE3IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfQVBJIFdl
YlVSTCBhcHBDYWNoZU1hbmlmZXN0VVJMKCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHNl
dEFwcENhY2hlTWFuaWZlc3RVUkwoY29uc3QgV2ViVVJMJik7CiAKKyAgICAvLyBPcHRpb25hbCBt
ZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZSB3aGljaCB3YXMgcmV0cmlldmVk
CisgICAgLy8gZnJvbSB0aGUgY2FjaGUuCisgICAgV0VCS0lUX0FQSSBXZWJEYXRhIGNhY2hlZE1l
dGFkYXRhKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSB2b2lkIHNldENhY2hlZE1ldGFkYXRhKGNv
bnN0IFdlYkRhdGEmKTsKKworICAgIC8vIElmIG5vbi16ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBo
b3N0IGFwcGxpY2F0aW9uIGlzIHdpbGxpbmcgdG8gY2FjaGUKKyAgICAvLyBtZXRhZGF0YSBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZS4gVGhpcyBJRCB3aWxsIGJlIHJldHVybmVkIHRvIHRo
ZQorICAgIC8vIGhvc3QgYXBwbGljYXRpb24gYWxvbmcgd2l0aCB0aGUgY2FjaGVhYmxlIG1ldGFk
YXRhLgorICAgIFdFQktJVF9BUEkgbG9uZyBsb25nIGNhY2hlYWJsZU1ldGFkYXRhSUQoKSBjb25z
dDsKKyAgICBXRUJLSVRfQVBJIHZvaWQgc2V0Q2FjaGVhYmxlTWV0YWRhdGFJRChsb25nIGxvbmcp
OworCiAgICAgLy8gQSBjb25zdW1lciBjb250cm9sbGVkIHZhbHVlIGludGVuZGVkIHRvIGJlIHVz
ZWQgdG8gcmVjb3JkIG9wYXF1ZQogICAgIC8vIHNlY3VyaXR5IGluZm8gcmVsYXRlZCB0byB0aGlz
IHJlcXVlc3QuCiAgICAgV0VCS0lUX0FQSSBXZWJDU3RyaW5nIHNlY3VyaXR5SW5mbygpIGNvbnN0
OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwu
Y3BwCShyZXZpc2lvbiA1Nzg1NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA2LDYgKzQwNiwxOCBAQCBib29sIEZy
YW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRMCiAgICAgcmV0dXJuIGZhbHNlOyAgLy8g
RG8gbm90IHN1cHByZXNzIHJlbWFpbmluZyBub3RpZmljYXRpb25zCiB9CiAKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEoCisg
ICAgY29uc3QgS1VSTCYgdXJsLAorICAgIGxvbmcgbG9uZyBjYWNoZWFibGVNZXRhZGF0YUlkLAor
ICAgIGNvbnN0IGNoYXIqIGRhdGEsCisgICAgc2l6ZV90IGRhdGFTaXplKQoreworICAgIGlmICht
X3dlYkZyYW1lLT5jbGllbnQoKSkgeworICAgICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+ZGlk
R2VuZXJhdGVDYWNoZWFibGVNZXRhZGF0YSgKKyAgICAgICAgICAgIHVybCwgY2FjaGVhYmxlTWV0
YWRhdGFJZCwgZGF0YSwgZGF0YVNpemUpOworICAgIH0KK30KKwogdm9pZCBGcmFtZUxvYWRlckNs
aWVudEltcGw6OmRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCkKIHsKICAgICBpZiAobV93
ZWJGcmFtZS0+Y2xpZW50KCkpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVy
Q2xpZW50SW1wbC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxv
YWRlckNsaWVudEltcGwuaAkocmV2aXNpb24gNTc4NTUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3Jj
L0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKFdlYkNv
cmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYp
OwogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKGNvbnN0IFdl
YkNvcmU6OktVUkwmLCBsb25nIGxvbmcsIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCk7CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCShyZXZpc2lvbiA1Nzg1NSkK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKKyNp
bmNsdWRlICJXZWJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViSFRUUEhlYWRlclZpc2l0b3IuaCIKICNp
bmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKQEAgLTIzMCw2ICsyMzEs
MjYgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0QXBwQ2FjaGVNYW5pZmVzdAogICAgIG1fcHJp
dmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRBcHBDYWNoZU1hbmlmZXN0VVJMKHVybCk7CiB9
CiAKK1dlYkRhdGEgV2ViVVJMUmVzcG9uc2U6OmNhY2hlZE1ldGFkYXRhKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmNhY2hlZE1ldGFkYXRhKCk7
Cit9CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldENhY2hlZE1ldGFkYXRhKGNvbnN0IFdlYkRh
dGEmIGNhY2hlZE1ldGFkYXRhKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNl
LT5zZXRDYWNoZWRNZXRhZGF0YShjYWNoZWRNZXRhZGF0YSk7Cit9CisKK2xvbmcgbG9uZyBXZWJV
UkxSZXNwb25zZTo6Y2FjaGVhYmxlTWV0YWRhdGFJRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5jYWNoZWFibGVNZXRhZGF0YUlEKCk7Cit9CisK
K3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldENhY2hlYWJsZU1ldGFkYXRhSUQobG9uZyBsb25nIGNh
Y2hlYWJsZU1ldGFkYXRhSUQpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2Ut
PnNldENhY2hlYWJsZU1ldGFkYXRhSUQoY2FjaGVhYmxlTWV0YWRhdGFJRCk7Cit9CisKIFdlYkNT
dHJpbmcgV2ViVVJMUmVzcG9uc2U6OnNlY3VyaXR5SW5mbygpIGNvbnN0CiB7CiAgICAgLy8gRklY
TUU6IGdldFNlY3VyaXR5SW5mbyBpcyBtaXNuYW1lZC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54021</attachid>
            <date>2010-04-21 21:09:32 -0700</date>
            <delta_ts>2010-04-22 13:39:33 -0700</delta_ts>
            <desc>Added CacheableMetadata struct per abarth&apos;s recommendation</desc>
            <filename>37874-2.txt</filename>
            <type>text/plain</type>
            <size>20049</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU4MDQ5KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyNyBAQAorMjAxMC0wNC0yMSAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGluZyBhYmlsaXR5IHRvIHN0b3JlIG1ldGFkYXRhIG9uIGEgQ2FjaGVkUmVzb3VyY2Ug
d2hpY2ggY2FuIGJlCisgICAgICAgIGNhY2hlZCBieSB0aGUgZW1iZWRkaW5nIGFwcGxpY2F0aW9u
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc3NjMK
KworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBjaGFuZ2VkIGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjpzZXRDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZTo6Y2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJj
ZS5oOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkR2VuZXJhdGVDYWNoZWFibGVNZXRh
ZGF0YSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y2FjaGVhYmxlTWV0YWRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldENhY2hlYWJsZU1ldGFkYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWFibGVNZXRhZGF0YTo6KToKKwogMjAxMC0wNC0yMSAgRnJhbsOnb2lz
IFNhdXNzZXQgIDxzYXVzc2V0QGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291
cmNlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNw
cAkocmV2aXNpb24gNTc4NTUpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUHVyZ2Vh
YmxlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVxdWVzdC5oIgpAQCAtMTY0LDYgKzE2NSwyNCBAQCB2
b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSCiAgICAgbV9yZXNwb25zZVRp
bWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldENh
Y2hlZE1ldGFkYXRhKENhY2hlYWJsZU1ldGFkYXRhOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhLCBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIpCit7CisgICAgQ2FjaGVh
YmxlTWV0YWRhdGEgY2FjaGVhYmxlTWV0YWRhdGEgPSBtX3Jlc3BvbnNlLmNhY2hlYWJsZU1ldGFk
YXRhKCk7CisgICAgY2FjaGVhYmxlTWV0YWRhdGEubV90eXBlID0gdHlwZTsKKyAgICBjYWNoZWFi
bGVNZXRhZGF0YS5tX2RhdGEgPSBkYXRhOworICAgIG1fcmVzcG9uc2Uuc2V0Q2FjaGVhYmxlTWV0
YWRhdGEoY2FjaGVhYmxlTWV0YWRhdGEpOworCisgICAgaWYgKGZyYW1lTG9hZGVyICYmIGZyYW1l
TG9hZGVyLT5jbGllbnQoKSkKKyAgICAgICAgZnJhbWVMb2FkZXItPmNsaWVudCgpLT5kaXNwYXRj
aERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEobV9yZXNwb25zZS51cmwoKSwgbV9yZXNwb25z
ZS5jYWNoZWFibGVNZXRhZGF0YSgpKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IENh
Y2hlZFJlc291cmNlOjpjYWNoZWRNZXRhZGF0YShDYWNoZWFibGVNZXRhZGF0YTo6VHlwZSB0eXBl
KSBjb25zdAoreworICAgIGlmICh0eXBlID09IG1fcmVzcG9uc2UuY2FjaGVhYmxlTWV0YWRhdGEo
KS5tX3R5cGUpCisgICAgICAgIHJldHVybiBtX3Jlc3BvbnNlLmNhY2hlYWJsZU1ldGFkYXRhKCku
bV9kYXRhOworICAgIHJldHVybiBSZWZQdHI8U2hhcmVkQnVmZmVyPigpOworfQorCiB2b2lkIENh
Y2hlZFJlc291cmNlOjpzZXRSZXF1ZXN0KFJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgaWYgKHJl
cXVlc3QgJiYgIW1fcmVxdWVzdCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNl
LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCShyZXZp
c2lvbiA1Nzg1NSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgQ2FjaGU7CiBjbGFzcyBDYWNoZWRSZXNvdXJj
ZUNsaWVudDsKIGNsYXNzIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTsKIGNsYXNzIERvY0xvYWRl
cjsKK2NsYXNzIEZyYW1lTG9hZGVyOwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBS
ZXF1ZXN0OwogY2xhc3MgUHVyZ2VhYmxlQnVmZmVyOwpAQCAtMTQyLDYgKzE0MywxMyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3Bv
bnNlOyB9CiAKKyAgICAvLyBTZXRzIHRoZSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBy
ZXNvdXJjZSBhbmQgbm90aWZpZXMgYW55IGNsaWVudHMKKyAgICAvLyB0aGF0IHRoaXMgZGF0YSBz
aG91bGQgYmUgcGVyc2lzdGVkIGluIHRoZSBjYWNoZS4KKyAgICB2b2lkIHNldENhY2hlZE1ldGFk
YXRhKENhY2hlYWJsZU1ldGFkYXRhOjpUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIEZy
YW1lTG9hZGVyKik7CisKKyAgICAvLyBHZXRzIHRoZSBtZXRhZGF0YSBvZiB0aGUgZ2l2ZW4gdHlw
ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZS4KKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gY2FjaGVkTWV0YWRhdGEoQ2FjaGVhYmxlTWV0YWRhdGE6OlR5cGUpIGNvbnN0OworCiAg
ICAgYm9vbCBjYW5EZWxldGUoKSBjb25zdCB7IHJldHVybiAhaGFzQ2xpZW50cygpICYmICFtX3Jl
cXVlc3QgJiYgIW1fcHJlbG9hZENvdW50ICYmICFtX2hhbmRsZUNvdW50ICYmICFtX3Jlc291cmNl
VG9SZXZhbGlkYXRlICYmICFtX3Byb3h5UmVzb3VyY2U7IH0KIAogICAgIGJvb2wgaXNFeHBpcmVk
KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA1Nzg1NSkKKysr
IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiAr
MTk5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRp
bmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNv
bnN0IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2Fk
UmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50KSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEoY29u
c3QgS1VSTCYsIGNvbnN0IENhY2hlYWJsZU1ldGFkYXRhJikgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKSB7IH0K
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA1Nzg1NSkKKysr
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAgY2xhc3MgTlNWaWV3OwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgc3RydWN0IENhY2hlYWJsZU1ldGFkYXRh
OwogICAgIGNsYXNzIENhY2hlZEZyYW1lOwogICAgIGNsYXNzIENvbG9yOwogICAgIGNsYXNzIERP
TVdyYXBwZXJXb3JsZDsKQEAgLTExMiw2ICsxMTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlcios
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVu
Z3RoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVh
YmxlTWV0YWRhdGEoY29uc3QgS1VSTCYsIGNvbnN0IENhY2hlYWJsZU1ldGFkYXRhJikgPSAwOwog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkKCkgPSAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJKHJldmlzaW9uIDU3ODU1KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUyLDYgKzQ1MiwyMCBAQCB0aW1lX3QgUmVzb3VyY2VSZXNwb25zZUJhc2U6
Omxhc3RNb2RpZmllCiAgICAgcmV0dXJuIG1fbGFzdE1vZGlmaWVkRGF0ZTsKIH0KIAorY29uc3Qg
Q2FjaGVhYmxlTWV0YWRhdGEmIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjYWNoZWFibGVNZXRhZGF0
YSgpIGNvbnN0Cit7CisgICAgbGF6eUluaXQoKTsKKworICAgIHJldHVybiBtX2NhY2hlYWJsZU1l
dGFkYXRhOworfQorCit2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDYWNoZWFibGVNZXRh
ZGF0YShjb25zdCBDYWNoZWFibGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0YWRhdGEpCit7CisgICAg
bGF6eUluaXQoKTsKKworICAgIG1fY2FjaGVhYmxlTWV0YWRhdGEgPSBjYWNoZWFibGVNZXRhZGF0
YTsKK30KKwogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUluaXQoKSBjb25zdAogewog
ICAgIGNvbnN0X2Nhc3Q8UmVzb3VyY2VSZXNwb25zZSo+KHN0YXRpY19jYXN0PGNvbnN0IFJlc291
cmNlUmVzcG9uc2UqPih0aGlzKSktPnBsYXRmb3JtTGF6eUluaXQoKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9u
IDU3ODU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkhUVFBIZWFk
ZXJNYXAuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAK
ICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCkBAIC0zNyw2ICszOCwyNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogc3RydWN0IENyb3NzVGhyZWFk
UmVzb3VyY2VSZXNwb25zZURhdGE7CiAKKy8vIE1ldGFkYXRhIGZvciBhIGdpdmVuIHJlc291cmNl
IHdoaWNoIGlzIGdlbmVyYXRlZCBieSBXZWJDb3JlIGFuZCBtYXkgYmUKKy8vIHN0b3JlZCBpbiB0
aGUgZW1iZWRkaW5nIGFwcGxpY2F0aW9uJ3MgY2FjaGUuCitzdHJ1Y3QgQ2FjaGVhYmxlTWV0YWRh
dGEgeworICAgIC8vIEFuIGlkZW50aWZpZXIgcHJvdmlkZWQgYnkgdGhlIGVtYmVkZGluZyBhcHBs
aWNhdGlvbi4gSWYgbm9uLXplcm8sCisgICAgLy8gaW5kaWNhdGVzIHRoYXQgdGhlIGVtYmVkZGlu
ZyBhcHBsaWNhdGlvbiBpcyB3aWxsaW5nIHRvIGNhY2hlIG1ldGFkYXRhCisgICAgLy8gYXNzb2Np
YXRlZCB3aXRoIHRoaXMgcmVzcG9uc2UuIFRoZSBpZGVudGlmaWVyIHdpbGwgYmUgcmV0dXJuZWQg
dG8gdGhlCisgICAgLy8gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIGFsb25nIHdpdGggdGhlIGdlbmVy
YXRlZCBtZXRhZGF0YS4KKyAgICBsb25nIGxvbmcgbV9pZDsKKworICAgIGVudW0gVHlwZSB7Cisg
ICAgICAgIEVNUFRZLAorICAgICAgICBWOF9TQ1JJUFREQVRBCisgICAgfTsKKyAgICBUeXBlIG1f
dHlwZTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKK307CisKIC8vIERvIG5v
dCB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseSwgdXNlIHRoZSBjbGFzcyBSZXNwb25zZVJlc3BvbnNl
IGluc3RlYWQKIGNsYXNzIFJlc291cmNlUmVzcG9uc2VCYXNlIDogcHVibGljIEZhc3RBbGxvY0Jh
c2UgewogcHVibGljOgpAQCAtOTUsNiArMTE0LDkgQEAgcHVibGljOgogICAgIGRvdWJsZSBleHBp
cmVzKCkgY29uc3Q7CiAgICAgZG91YmxlIGxhc3RNb2RpZmllZCgpIGNvbnN0OwogCisgICAgY29u
c3QgQ2FjaGVhYmxlTWV0YWRhdGEmIGNhY2hlYWJsZU1ldGFkYXRhKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRDYWNoZWFibGVNZXRhZGF0YShjb25zdCBDYWNoZWFibGVNZXRhZGF0YSYpOworCiAgICAg
Ly8gVGhlIFJlc291cmNlUmVzcG9uc2Ugc3ViY2xhc3MgbWF5ICJzaGFkb3ciIHRoaXMgbWV0aG9k
IHRvIHByb3ZpZGUgcGxhdGZvcm0tc3BlY2lmaWMgbWVtb3J5IHVzYWdlIGluZm9ybWF0aW9uCiAg
ICAgdW5zaWduZWQgbWVtb3J5VXNhZ2UoKSBjb25zdAogICAgIHsKQEAgLTEyNSw2ICsxNDcsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgU3RyaW5nIG1faHR0cFN0YXR1c1RleHQ7CiAgICAgSFRUUEhlYWRl
ck1hcCBtX2h0dHBIZWFkZXJGaWVsZHM7CiAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkRGF0ZTsK
KyAgICBDYWNoZWFibGVNZXRhZGF0YSBtX2NhY2hlYWJsZU1ldGFkYXRhOwogCiAgICAgYm9vbCBt
X2lzTnVsbCA6IDE7CiAgICAgCkBAIC0xNjEsNiArMTg0LDcgQEAgc3RydWN0IENyb3NzVGhyZWFk
UmVzb3VyY2VSZXNwb25zZURhdGEgOgogICAgIFN0cmluZyBtX2h0dHBTdGF0dXNUZXh0OwogICAg
IE93blB0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBtX2h0dHBIZWFkZXJzOwogICAg
IHRpbWVfdCBtX2xhc3RNb2RpZmllZERhdGU7CisgICAgT3duUHRyPENhY2hlYWJsZU1ldGFkYXRh
PiBtX2NhY2hlYWJsZU1ldGFkYXRhOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4MDQ5KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDEwLTA0LTIxICBUb255IEdl
bnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcg
VVJMIChPT1BTISkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dl
YkNhY2hlYWJsZU1ldGFkYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDYWNoZWFi
bGVNZXRhZGF0YTo6V2ViQ2FjaGVhYmxlTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
YWNoZWFibGVNZXRhZGF0YTo6b3BlcmF0b3IgV2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDYWNoZWFibGVNZXRhZGF0YTo6fldlYkNhY2hlYWJsZU1ldGFk
YXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OmlkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OnNldElEKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OnR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDYWNo
ZWFibGVNZXRhZGF0YTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNhY2hlYWJsZU1l
dGFkYXRhOjpkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OnNl
dERhdGEpOgorICAgICAgICAqIHB1YmxpYy9XZWJEYXRhLmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OldlYkRhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEYXRhOjpvcGVyYXRvciBzdGQ6OnZlY3RvcjxjaGFyPik6Cisg
ICAgICAgICogcHVibGljL1dlYkZyYW1lQ2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lQ2xpZW50OjpkaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAgKiBwdWJs
aWMvV2ViVVJMUmVzcG9uc2UuaDoKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERp
ZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9h
ZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKToKKyAg
ICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlVS
TFJlc3BvbnNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmNhY2hlYWJs
ZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldENhY2hlYWJs
ZU1ldGFkYXRhKToKKwogMjAxMC0wNC0yMSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAkocmV2aXNpb24gNTc4NTUpCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAko
d29ya2luZyBjb3B5KQpAQCAtODksNiArODksNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJCaW5kaW5ncy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNhY2hlLmgnLAor
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2FjaGVhYmxlTWV0YWRhdGEuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9XZWJDYW52YXMuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJDbGlwYm9hcmQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb2xvci5oJywKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2FjaGVhYmxlTWV0YWRhdGEuaA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2FjaGVhYmxlTWV0YWRhdGEuaAko
cmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2FjaGVhYmxlTWV0YWRh
dGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNhY2hlYWJsZU1l
dGFkYXRhX2gKKyNkZWZpbmUgV2ViQ2FjaGVhYmxlTWV0YWRhdGFfaAorCisjaW5jbHVkZSAiV2Vi
RGF0YS5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7
IHN0cnVjdCBDYWNoZWFibGVNZXRhZGF0YTsgfQorI2Vsc2UKKyNpbmNsdWRlIDx3ZWJraXQvZ2x1
ZS9yZXNvdXJjZV9sb2FkZXJfYnJpZGdlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYkNhY2hlYWJsZU1ldGFkYXRhIHsKK3B1YmxpYzoKKyNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KKyAgICBXZWJDYWNoZWFibGVNZXRhZGF0YShjb25zdCBXZWJDb3JlOjpDYWNo
ZWFibGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0YWRhdGEpCisgICAgICAgIDogbV9pZChjYWNoZWFi
bGVNZXRhZGF0YS5tX2lkKQorICAgICAgICAsIG1fdHlwZShjYWNoZWFibGVNZXRhZGF0YS5tX3R5
cGUpCisgICAgICAgICwgbV9kYXRhKGNhY2hlYWJsZU1ldGFkYXRhLm1fZGF0YSkKKyAgICB7Cisg
ICAgfQorCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGEoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgV2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGEgY2FjaGVhYmxlTWV0YWRh
dGE7CisgICAgICAgIGNhY2hlYWJsZU1ldGFkYXRhLm1faWQgPSBpZCgpOworICAgICAgICBjYWNo
ZWFibGVNZXRhZGF0YS5tX3R5cGUgPSB0eXBlKCk7CisgICAgICAgIGNhY2hlYWJsZU1ldGFkYXRh
Lm1fZGF0YSA9IGRhdGEoKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlYWJsZU1ldGFkYXRhOworICAg
IH0KKworICAgIHR5cGVkZWYgV2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGE6OlR5cGUgVHlwZTsK
KyNlbHNlCisgICAgV2ViQ2FjaGVhYmxlTWV0YWRhdGEoY29uc3Qgd2Via2l0X2dsdWU6OlJlc291
cmNlTG9hZGVyQnJpZGdlOjpDYWNoZWFibGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0YWRhdGEpCisg
ICAgICAgIDogbV9pZChjYWNoZWFibGVNZXRhZGF0YS5pZCkKKyAgICAgICAgLCBtX3R5cGUoY2Fj
aGVhYmxlTWV0YWRhdGEudHlwZSkKKyAgICAgICAgLCBtX2RhdGEoY2FjaGVhYmxlTWV0YWRhdGEu
ZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgdHlwZWRlZiBDYWNoZWFibGVNZXRhZGF0YVR5cGU6
OlR5cGUgVHlwZTsKKyNlbmRpZgorCisgICAgfldlYkNhY2hlYWJsZU1ldGFkYXRhKCkKKyAgICB7
CisgICAgfQorCisgICAgV0VCS0lUX0FQSSBsb25nIGxvbmcgaWQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1faWQ7CisgICAgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIHNldElEKGxv
bmcgbG9uZyBpZCkKKyAgICB7CisgICAgICAgIG1faWQgPSBpZDsKKyAgICB9CisKKyAgICBXRUJL
SVRfQVBJIFR5cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlOwor
ICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCBzZXRUeXBlKFR5cGUgdHlwZSkKKyAgICB7Cisg
ICAgICAgIG1fdHlwZSA9IHR5cGU7CisgICAgfQorCisgICAgV0VCS0lUX0FQSSBXZWJEYXRhIGRh
dGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisKKyAgICBX
RUJLSVRfQVBJIHZvaWQgc2V0RGF0YShjb25zdCBXZWJEYXRhJiBkYXRhKQorICAgIHsKKyAgICAg
ICAgbV9kYXRhID0gZGF0YTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgbG9uZyBsb25nIG1faWQ7
CisgICAgVHlwZSBtX3R5cGU7CisgICAgV2ViRGF0YSBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRh
dGEuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YS5oCShy
ZXZpc2lvbiA1Nzg1NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiBu
YW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIFNoYXJlZEJ1ZmZlcjsgfQogbmFtZXNwYWNlIFdURiB7
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZWxzZQorI2luY2x1
ZGUgPHZlY3Rvcj4KICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTk4LDYgKzEwMCwz
MCBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2lnbihjLmRhdGEoKSwgYy5zaXplKCkpOwogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgfQorCisgICAgdGVtcGxhdGUgPD4KKyAgICBXZWJEYXRhKGNv
bnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBjKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAg
aWYgKGMuc2l6ZSgpKQorICAgICAgICAgICAgYXNzaWduKCZjLmZyb250KCksIGMuc2l6ZSgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzZXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8PgorICAgIFdlYkRhdGEmIG9wZXJhdG9yPShjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiYgYykK
KyAgICB7CisgICAgICAgIGlmIChjLnNpemUoKSkKKyAgICAgICAgICAgIGFzc2lnbigmYy5mcm9u
dCgpLCBjLnNpemUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc2V0KCk7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBzdGQ6OnZlY3RvcjxjaGFy
PigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp2ZWN0b3I8Y2hhcj4oZGF0YSgp
LCBkYXRhKCkgKyBzaXplKCkpOworICAgIH0KICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oCShyZXZpc2lvbiA1Nzg1NSkKKysr
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViQXBwbGljYXRp
b25DYWNoZUhvc3Q7CiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKK2NsYXNz
IFdlYkNhY2hlYWJsZU1ldGFkYXRhOwogY2xhc3MgV2ViQ29va2llSmFyOwogY2xhc3MgV2ViRGF0
YVNvdXJjZTsKIGNsYXNzIFdlYkZvcm1FbGVtZW50OwpAQCAtMjU2LDYgKzI1NywxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZSgKICAg
ICAgICAgV2ViRnJhbWUqLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiwgY29uc3QgV2ViVVJMUmVzcG9u
c2UmKSB7IH0KIAorICAgIC8vIENhY2hlYWJsZSBtZXRhZGF0YSBoYXMgYmVlbiBnZW5lcmF0ZWQg
Zm9yIHRoZSBnaXZlbiBVUkwuCisgICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRlQ2FjaGVhYmxl
TWV0YWRhdGEoCisgICAgICAgIGNvbnN0IFdlYlVSTCYsIGNvbnN0IFdlYkNhY2hlYWJsZU1ldGFk
YXRhJikgeyB9CisKICAgICAvLyBUaGlzIGZyYW1lIGhhcyBkaXNwbGF5ZWQgaW5hY3RpdmUgY29u
dGVudCAoc3VjaCBhcyBhbiBpbWFnZSkgZnJvbSBhbgogICAgIC8vIGluc2VjdXJlIHNvdXJjZS4g
IEluYWN0aXZlIGNvbnRlbnQgY2Fubm90IHNwcmVhZCB0byBvdGhlciBmcmFtZXMuCiAgICAgdmly
dHVhbCB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoV2ViRnJhbWUqKSB7IH0KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMUmVzcG9uc2UuaA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMUmVzcG9uc2UuaAkocmV2aXNpb24gNTc4NTUp
CisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTFJlc3BvbnNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBSZXNvdXJjZVJl
c3BvbgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgV2ViQ2FjaGVhYmxlTWV0YWRhdGE7
CiBjbGFzcyBXZWJDU3RyaW5nOwogY2xhc3MgV2ViSFRUUEhlYWRlclZpc2l0b3I7CiBjbGFzcyBX
ZWJTdHJpbmc7CkBAIC05OSw2ICsxMDAsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0FQSSBkb3Vi
bGUgbGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0OwogICAgIFdFQktJVF9BUEkgdm9pZCBzZXRMYXN0
TW9kaWZpZWREYXRlKGRvdWJsZSk7CiAKKyAgICBXRUJLSVRfQVBJIFdlYkNhY2hlYWJsZU1ldGFk
YXRhIGNhY2hlYWJsZU1ldGFkYXRhKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSB2b2lkIHNldENh
Y2hlYWJsZU1ldGFkYXRhKGNvbnN0IFdlYkNhY2hlYWJsZU1ldGFkYXRhJik7CisKICAgICBXRUJL
SVRfQVBJIGJvb2wgaXNDb250ZW50RmlsdGVyZWQoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIHZv
aWQgc2V0SXNDb250ZW50RmlsdGVyZWQoYm9vbCk7CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gNTc4NTUpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAi
UGx1Z2luRGF0YUNocm9taXVtLmgiCiAjaW5jbHVkZSAiU3RyaW5nRXh0cmFzLmgiCisjaW5jbHVk
ZSAiV2ViQ2FjaGVhYmxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5o
IgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViRm9y
bUVsZW1lbnQuaCIKQEAgLTQwNiw2ICs0MDcsMTIgQEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudElt
cGw6OmRpc3BhdGNoRGlkTAogICAgIHJldHVybiBmYWxzZTsgIC8vIERvIG5vdCBzdXBwcmVzcyBy
ZW1haW5pbmcgbm90aWZpY2F0aW9ucwogfQogCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
ZGlzcGF0Y2hEaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgQ2FjaGVhYmxlTWV0YWRhdGEmIGNhY2hlYWJsZU1ldGFkYXRhKQoreworICAgIGlmIChtX3dl
YkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmRpZEdlbmVy
YXRlQ2FjaGVhYmxlTWV0YWRhdGEodXJsLCBjYWNoZWFibGVNZXRhZGF0YSk7Cit9CisKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpCiB7
CiAgICAgaWYgKG1fd2ViRnJhbWUtPmNsaWVudCgpKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9GcmFtZUxvYWRlckNsaWVudEltcGwuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHJldmlzaW9uIDU3ODU1KQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
ODksNiArODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNo
TG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cik7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlRXJyb3ImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgaW50IGxl
bmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkR2VuZXJhdGVDYWNoZWFibGVNZXRh
ZGF0YShjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgV2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRh
dGEmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbExvYWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxDbGllbnRS
ZWRpcmVjdCgpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAko
cmV2aXNpb24gNTc4NTUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgogCisjaW5jbHVkZSAiV2ViQ2FjaGVhYmxlTWV0YWRhdGEuaCIKICNpbmNsdWRl
ICJXZWJIVFRQSGVhZGVyVmlzaXRvci5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1
ZGUgIldlYlVSTC5oIgpAQCAtMjMwLDYgKzIzMSwxNyBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjpz
ZXRBcHBDYWNoZU1hbmlmZXN0CiAgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNl
dEFwcENhY2hlTWFuaWZlc3RVUkwodXJsKTsKIH0KIAorV2ViQ2FjaGVhYmxlTWV0YWRhdGEgV2Vi
VVJMUmVzcG9uc2U6OmNhY2hlYWJsZU1ldGFkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmNhY2hlYWJsZU1ldGFkYXRhKCk7Cit9CisKK3Zv
aWQgV2ViVVJMUmVzcG9uc2U6OnNldENhY2hlYWJsZU1ldGFkYXRhKGNvbnN0IFdlYkNhY2hlYWJs
ZU1ldGFkYXRhJiBjYWNoZWFibGVNZXRhZGF0YSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3Vy
Y2VSZXNwb25zZS0+c2V0Q2FjaGVhYmxlTWV0YWRhdGEoY2FjaGVhYmxlTWV0YWRhdGEpOworfQor
CisKIFdlYkNTdHJpbmcgV2ViVVJMUmVzcG9uc2U6OnNlY3VyaXR5SW5mbygpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IGdldFNlY3VyaXR5SW5mbyBpcyBtaXNuYW1lZC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54091</attachid>
            <date>2010-04-22 13:39:33 -0700</date>
            <delta_ts>2010-04-23 10:28:36 -0700</delta_ts>
            <desc>Fix compile by overloading rather than specializing in WebData.</desc>
            <filename>37874-3.txt</filename>
            <type>text/plain</type>
            <size>20107</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODA0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDQtMjEgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgYWJpbGl0eSB0byBzdG9yZSBtZXRhZGF0YSBvbiBhIENhY2hlZFJlc291cmNlIHdo
aWNoIGNhbiBiZQorICAgICAgICBjYWNoZWQgYnkgdGhlIGVtYmVkZGluZyBhcHBsaWNhdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NzYzCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlZCBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZTo6c2V0Q2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OmNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2Uu
aDoKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRh
dGEpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDYWNoZWFibGVNZXRhZGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGE6Oik6CisKIDIwMTAtMDQtMjEgIEZyYW7Dp29pcyBT
YXVzc2V0ICA8c2F1c3NldEBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0
aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShy
ZXZpc2lvbiA1Nzg1NSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQdXJnZWFibGVC
dWZmZXIuaCIKICNpbmNsdWRlICJSZXF1ZXN0LmgiCkBAIC0xNjQsNiArMTY1LDI0IEBAIHZvaWQg
Q2FjaGVkUmVzb3VyY2U6OnNldFJlc3BvbnNlKGNvbnN0IFIKICAgICBtX3Jlc3BvbnNlVGltZXN0
YW1wID0gY3VycmVudFRpbWUoKTsKIH0KIAordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0Q2FjaGVk
TWV0YWRhdGEoQ2FjaGVhYmxlTWV0YWRhdGE6OlR5cGUgdHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEsIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcikKK3sKKyAgICBDYWNoZWFibGVN
ZXRhZGF0YSBjYWNoZWFibGVNZXRhZGF0YSA9IG1fcmVzcG9uc2UuY2FjaGVhYmxlTWV0YWRhdGEo
KTsKKyAgICBjYWNoZWFibGVNZXRhZGF0YS5tX3R5cGUgPSB0eXBlOworICAgIGNhY2hlYWJsZU1l
dGFkYXRhLm1fZGF0YSA9IGRhdGE7CisgICAgbV9yZXNwb25zZS5zZXRDYWNoZWFibGVNZXRhZGF0
YShjYWNoZWFibGVNZXRhZGF0YSk7CisKKyAgICBpZiAoZnJhbWVMb2FkZXIgJiYgZnJhbWVMb2Fk
ZXItPmNsaWVudCgpKQorICAgICAgICBmcmFtZUxvYWRlci0+Y2xpZW50KCktPmRpc3BhdGNoRGlk
R2VuZXJhdGVDYWNoZWFibGVNZXRhZGF0YShtX3Jlc3BvbnNlLnVybCgpLCBtX3Jlc3BvbnNlLmNh
Y2hlYWJsZU1ldGFkYXRhKCkpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gQ2FjaGVk
UmVzb3VyY2U6OmNhY2hlZE1ldGFkYXRhKENhY2hlYWJsZU1ldGFkYXRhOjpUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgaWYgKHR5cGUgPT0gbV9yZXNwb25zZS5jYWNoZWFibGVNZXRhZGF0YSgpLm1f
dHlwZSkKKyAgICAgICAgcmV0dXJuIG1fcmVzcG9uc2UuY2FjaGVhYmxlTWV0YWRhdGEoKS5tX2Rh
dGE7CisgICAgcmV0dXJuIFJlZlB0cjxTaGFyZWRCdWZmZXI+KCk7Cit9CisKIHZvaWQgQ2FjaGVk
UmVzb3VyY2U6OnNldFJlcXVlc3QoUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBpZiAocmVxdWVz
dCAmJiAhbV9yZXF1ZXN0KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiA1
Nzg1NSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgQ2FjaGU7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVu
dDsKIGNsYXNzIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTsKIGNsYXNzIERvY0xvYWRlcjsKK2Ns
YXNzIEZyYW1lTG9hZGVyOwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBSZXF1ZXN0
OwogY2xhc3MgUHVyZ2VhYmxlQnVmZmVyOwpAQCAtMTQyLDYgKzE0MywxMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9
CiAKKyAgICAvLyBTZXRzIHRoZSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJj
ZSBhbmQgbm90aWZpZXMgYW55IGNsaWVudHMKKyAgICAvLyB0aGF0IHRoaXMgZGF0YSBzaG91bGQg
YmUgcGVyc2lzdGVkIGluIHRoZSBjYWNoZS4KKyAgICB2b2lkIHNldENhY2hlZE1ldGFkYXRhKENh
Y2hlYWJsZU1ldGFkYXRhOjpUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIEZyYW1lTG9h
ZGVyKik7CisKKyAgICAvLyBHZXRzIHRoZSBtZXRhZGF0YSBvZiB0aGUgZ2l2ZW4gdHlwZSBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZS4KKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
Y2FjaGVkTWV0YWRhdGEoQ2FjaGVhYmxlTWV0YWRhdGE6OlR5cGUpIGNvbnN0OworCiAgICAgYm9v
bCBjYW5EZWxldGUoKSBjb25zdCB7IHJldHVybiAhaGFzQ2xpZW50cygpICYmICFtX3JlcXVlc3Qg
JiYgIW1fcHJlbG9hZENvdW50ICYmICFtX2hhbmRsZUNvdW50ICYmICFtX3Jlc291cmNlVG9SZXZh
bGlkYXRlICYmICFtX3Byb3h5UmVzb3VyY2U7IH0KIAogICAgIGJvb2wgaXNFeHBpcmVkKCkgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNTc4NTUpCisrKyBXZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNv
dXJjZUVycm9yJikgeyB9CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291cmNl
RnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKGNvbnN0IEtVUkwm
LCBjb25zdCBDYWNoZWFibGVNZXRhZGF0YSYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkgeyB9CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDU3ODU1KQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBA
QCBjbGFzcyBOU1ZpZXc7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTsKKyAgICBzdHJ1Y3QgQ2FjaGVhYmxlTWV0YWRhdGE7CiAgICAgY2xh
c3MgQ2FjaGVkRnJhbWU7CiAgICAgY2xhc3MgQ29sb3I7CiAgICAgY2xhc3MgRE9NV3JhcHBlcldv
cmxkOwpAQCAtMTEyLDYgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllcikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCBsZW5ndGgpID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkR2VuZXJhdGVDYWNoZWFibGVNZXRhZGF0
YShjb25zdCBLVVJMJiwgY29uc3QgQ2FjaGVhYmxlTWV0YWRhdGEmKSA9IDA7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCkgPSAwOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbExvYWQoKSA9IDA7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXNwb25zZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJKHJldmlzaW9uIDU3ODU1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUyLDYgKzQ1MiwyMCBAQCB0aW1lX3QgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omxhc3RNb2RpZmll
CiAgICAgcmV0dXJuIG1fbGFzdE1vZGlmaWVkRGF0ZTsKIH0KIAorY29uc3QgQ2FjaGVhYmxlTWV0
YWRhdGEmIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjYWNoZWFibGVNZXRhZGF0YSgpIGNvbnN0Cit7
CisgICAgbGF6eUluaXQoKTsKKworICAgIHJldHVybiBtX2NhY2hlYWJsZU1ldGFkYXRhOworfQor
Cit2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDYWNoZWFibGVNZXRhZGF0YShjb25zdCBD
YWNoZWFibGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0YWRhdGEpCit7CisgICAgbGF6eUluaXQoKTsK
KworICAgIG1fY2FjaGVhYmxlTWV0YWRhdGEgPSBjYWNoZWFibGVNZXRhZGF0YTsKK30KKwogdm9p
ZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUluaXQoKSBjb25zdAogewogICAgIGNvbnN0X2Nh
c3Q8UmVzb3VyY2VSZXNwb25zZSo+KHN0YXRpY19jYXN0PGNvbnN0IFJlc291cmNlUmVzcG9uc2Uq
Pih0aGlzKSktPnBsYXRmb3JtTGF6eUluaXQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCShyZXZpc2lvbiA1Nzg1NSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KIApAQCAtMzcsNiArMzgsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVzcG9u
c2VEYXRhOwogCisvLyBNZXRhZGF0YSBmb3IgYSBnaXZlbiByZXNvdXJjZSB3aGljaCBpcyBnZW5l
cmF0ZWQgYnkgV2ViQ29yZSBhbmQgbWF5IGJlCisvLyBzdG9yZWQgaW4gdGhlIGVtYmVkZGluZyBh
cHBsaWNhdGlvbidzIGNhY2hlLgorc3RydWN0IENhY2hlYWJsZU1ldGFkYXRhIHsKKyAgICAvLyBB
biBpZGVudGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBlbWJlZGRpbmcgYXBwbGljYXRpb24uIElmIG5v
bi16ZXJvLAorICAgIC8vIGluZGljYXRlcyB0aGF0IHRoZSBlbWJlZGRpbmcgYXBwbGljYXRpb24g
aXMgd2lsbGluZyB0byBjYWNoZSBtZXRhZGF0YQorICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IHJlc3BvbnNlLiBUaGUgaWRlbnRpZmllciB3aWxsIGJlIHJldHVybmVkIHRvIHRoZQorICAgIC8v
IGVtYmVkZGluZyBhcHBsaWNhdGlvbiBhbG9uZyB3aXRoIHRoZSBnZW5lcmF0ZWQgbWV0YWRhdGEu
CisgICAgbG9uZyBsb25nIG1faWQ7CisKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBFTVBUWSwK
KyAgICAgICAgVjhfU0NSSVBUREFUQQorICAgIH07CisgICAgVHlwZSBtX3R5cGU7CisKKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7Cit9OworCiAvLyBEbyBub3QgdXNlIHRoaXMgY2xh
c3MgZGlyZWN0bHksIHVzZSB0aGUgY2xhc3MgUmVzcG9uc2VSZXNwb25zZSBpbnN0ZWFkCiBjbGFz
cyBSZXNvdXJjZVJlc3BvbnNlQmFzZSA6IHB1YmxpYyBGYXN0QWxsb2NCYXNlIHsKIHB1YmxpYzoK
QEAgLTk1LDYgKzExNCw5IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZXhwaXJlcygpIGNvbnN0Owog
ICAgIGRvdWJsZSBsYXN0TW9kaWZpZWQoKSBjb25zdDsKIAorICAgIGNvbnN0IENhY2hlYWJsZU1l
dGFkYXRhJiBjYWNoZWFibGVNZXRhZGF0YSgpIGNvbnN0OworICAgIHZvaWQgc2V0Q2FjaGVhYmxl
TWV0YWRhdGEoY29uc3QgQ2FjaGVhYmxlTWV0YWRhdGEmKTsKKwogICAgIC8vIFRoZSBSZXNvdXJj
ZVJlc3BvbnNlIHN1YmNsYXNzIG1heSAic2hhZG93IiB0aGlzIG1ldGhvZCB0byBwcm92aWRlIHBs
YXRmb3JtLXNwZWNpZmljIG1lbW9yeSB1c2FnZSBpbmZvcm1hdGlvbgogICAgIHVuc2lnbmVkIG1l
bW9yeVVzYWdlKCkgY29uc3QKICAgICB7CkBAIC0xMjUsNiArMTQ3LDcgQEAgcHJvdGVjdGVkOgog
ICAgIFN0cmluZyBtX2h0dHBTdGF0dXNUZXh0OwogICAgIEhUVFBIZWFkZXJNYXAgbV9odHRwSGVh
ZGVyRmllbGRzOwogICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZERhdGU7CisgICAgQ2FjaGVhYmxl
TWV0YWRhdGEgbV9jYWNoZWFibGVNZXRhZGF0YTsKIAogICAgIGJvb2wgbV9pc051bGwgOiAxOwog
ICAgIApAQCAtMTYxLDYgKzE4NCw3IEBAIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVzcG9u
c2VEYXRhIDoKICAgICBTdHJpbmcgbV9odHRwU3RhdHVzVGV4dDsKICAgICBPd25QdHI8Q3Jvc3NU
aHJlYWRIVFRQSGVhZGVyTWFwRGF0YT4gbV9odHRwSGVhZGVyczsKICAgICB0aW1lX3QgbV9sYXN0
TW9kaWZpZWREYXRlOworICAgIE93blB0cjxDYWNoZWFibGVNZXRhZGF0YT4gbV9jYWNoZWFibGVN
ZXRhZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gNTgwNDkpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTAtMDQtMjEgIFRvbnkgR2VudGlsY29yZSAgPHRvbnln
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRpbmcgYWJpbGl0eSB0byBzdG9yZSBtZXRhZGF0YSBvbiBhIENhY2hlZFJlc291
cmNlIHdoaWNoIGNhbiBiZQ0KKyAgICAgICAgY2FjaGVkIGJ5IHRoZSBlbWJlZGRpbmcgYXBwbGlj
YXRpb24uDQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzc3NjMKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYkNhY2hl
YWJsZU1ldGFkYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDYWNoZWFibGVNZXRh
ZGF0YTo6V2ViQ2FjaGVhYmxlTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJDYWNoZWFi
bGVNZXRhZGF0YTo6b3BlcmF0b3IgV2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDYWNoZWFibGVNZXRhZGF0YTo6fldlYkNhY2hlYWJsZU1ldGFkYXRhKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OmlkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OnNldElEKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q2FjaGVhYmxlTWV0YWRhdGE6OnR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDYWNoZWFibGVN
ZXRhZGF0YTo6c2V0VHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNhY2hlYWJsZU1ldGFkYXRh
OjpkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OnNldERhdGEp
OgorICAgICAgICAqIHB1YmxpYy9XZWJEYXRhLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OldlYkRhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEYXRhOjpvcGVyYXRvciBzdGQ6OnZlY3RvcjxjaGFyPik6CisgICAgICAg
ICogcHVibGljL1dlYkZyYW1lQ2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lQ2xp
ZW50OjpkaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAgKiBwdWJsaWMvV2Vi
VVJMUmVzcG9uc2UuaDoKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZExvYWRS
ZXNvdXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50SW1wbDo6ZGlzcGF0Y2hEaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAg
KiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlVSTFJlc3Bv
bnNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmNhY2hlYWJsZU1ldGFk
YXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldENhY2hlYWJsZU1ldGFk
YXRhKToKKwogMjAxMC0wNC0yMSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJ
KHJldmlzaW9uIDU3ODU1KQorKysgV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDYgKzg5LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkFwcGxp
Y2F0aW9uQ2FjaGVIb3N0Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmlu
ZGluZ3MuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYWNoZS5oJywKKyAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkNhY2hlYWJsZU1ldGFkYXRhLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViQ2FudmFzLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2xpcGJv
YXJkLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ29sb3IuaCcsCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkNhY2hlYWJsZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYWNoZWFibGVNZXRhZGF0YS5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYWNoZWFibGVNZXRhZGF0YS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ2FjaGVhYmxlTWV0YWRhdGFfaAor
I2RlZmluZSBXZWJDYWNoZWFibGVNZXRhZGF0YV9oCisKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisK
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgc3RydWN0IENh
Y2hlYWJsZU1ldGFkYXRhOyB9CisjZWxzZQorI2luY2x1ZGUgPHdlYmtpdC9nbHVlL3Jlc291cmNl
X2xvYWRlcl9icmlkZ2UuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViQ2FjaGVhYmxlTWV0YWRhdGEgeworcHVibGljOgorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElP
TgorICAgIFdlYkNhY2hlYWJsZU1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OkNhY2hlYWJsZU1ldGFk
YXRhJiBjYWNoZWFibGVNZXRhZGF0YSkKKyAgICAgICAgOiBtX2lkKGNhY2hlYWJsZU1ldGFkYXRh
Lm1faWQpCisgICAgICAgICwgbV90eXBlKGNhY2hlYWJsZU1ldGFkYXRhLm1fdHlwZSkKKyAgICAg
ICAgLCBtX2RhdGEoY2FjaGVhYmxlTWV0YWRhdGEubV9kYXRhKQorICAgIHsKKyAgICB9CisKKyAg
ICBvcGVyYXRvciBXZWJDb3JlOjpDYWNoZWFibGVNZXRhZGF0YSgpIGNvbnN0CisgICAgeworICAg
ICAgICBXZWJDb3JlOjpDYWNoZWFibGVNZXRhZGF0YSBjYWNoZWFibGVNZXRhZGF0YTsKKyAgICAg
ICAgY2FjaGVhYmxlTWV0YWRhdGEubV9pZCA9IGlkKCk7CisgICAgICAgIGNhY2hlYWJsZU1ldGFk
YXRhLm1fdHlwZSA9IHR5cGUoKTsKKyAgICAgICAgY2FjaGVhYmxlTWV0YWRhdGEubV9kYXRhID0g
ZGF0YSgpOworICAgICAgICByZXR1cm4gY2FjaGVhYmxlTWV0YWRhdGE7CisgICAgfQorCisgICAg
dHlwZWRlZiBXZWJDb3JlOjpDYWNoZWFibGVNZXRhZGF0YTo6VHlwZSBUeXBlOworI2Vsc2UKKyAg
ICBXZWJDYWNoZWFibGVNZXRhZGF0YShjb25zdCB3ZWJraXRfZ2x1ZTo6UmVzb3VyY2VMb2FkZXJC
cmlkZ2U6OkNhY2hlYWJsZU1ldGFkYXRhJiBjYWNoZWFibGVNZXRhZGF0YSkKKyAgICAgICAgOiBt
X2lkKGNhY2hlYWJsZU1ldGFkYXRhLmlkKQorICAgICAgICAsIG1fdHlwZShjYWNoZWFibGVNZXRh
ZGF0YS50eXBlKQorICAgICAgICAsIG1fZGF0YShjYWNoZWFibGVNZXRhZGF0YS5kYXRhKQorICAg
IHsKKyAgICB9CisKKyAgICB0eXBlZGVmIENhY2hlYWJsZU1ldGFkYXRhVHlwZTo6VHlwZSBUeXBl
OworI2VuZGlmCisKKyAgICB+V2ViQ2FjaGVhYmxlTWV0YWRhdGEoKQorICAgIHsKKyAgICB9CisK
KyAgICBXRUJLSVRfQVBJIGxvbmcgbG9uZyBpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pZDsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgc2V0SUQobG9uZyBsb25nIGlk
KQorICAgIHsKKyAgICAgICAgbV9pZCA9IGlkOworICAgIH0KKworICAgIFdFQktJVF9BUEkgVHlw
ZSB0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGU7CisgICAgfQorCisg
ICAgV0VCS0lUX0FQSSB2b2lkIHNldFR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgbV90
eXBlID0gdHlwZTsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIFdlYkRhdGEgZGF0YSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhOworICAgIH0KKworICAgIFdFQktJVF9BUEkg
dm9pZCBzZXREYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEpCisgICAgeworICAgICAgICBtX2RhdGEg
PSBkYXRhOworICAgIH0KKworcHJpdmF0ZToKKyAgICBsb25nIGxvbmcgbV9pZDsKKyAgICBUeXBl
IG1fdHlwZTsKKyAgICBXZWJEYXRhIG1fZGF0YTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YS5oCShyZXZpc2lvbiA1Nzg1
NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw4IEBACiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7IGNsYXNzIFNoYXJlZEJ1ZmZlcjsgfQogbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZWxzZQorI2luY2x1ZGUgPHZlY3Rvcj4K
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTk4LDYgKzEwMCwyOCBAQCBwdWJsaWM6
CiAgICAgICAgIGFzc2lnbihjLmRhdGEoKSwgYy5zaXplKCkpOwogICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgfQorCisgICAgV2ViRGF0YShjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiYgYykgOiBt
X3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGlmIChjLnNpemUoKSkKKyAgICAgICAgICAgIGFz
c2lnbigmYy5mcm9udCgpLCBjLnNpemUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
c2V0KCk7CisgICAgfQorCisgICAgV2ViRGF0YSYgb3BlcmF0b3I9KGNvbnN0IHN0ZDo6dmVjdG9y
PGNoYXI+JiBjKQorICAgIHsKKyAgICAgICAgaWYgKGMuc2l6ZSgpKQorICAgICAgICAgICAgYXNz
aWduKCZjLmZyb250KCksIGMuc2l6ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVz
ZXQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIG9wZXJhdG9yIHN0ZDo6
dmVjdG9yPGNoYXI+KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OnZlY3Rvcjxj
aGFyPihkYXRhKCksIGRhdGEoKSArIHNpemUoKSk7CisgICAgfQogI2VuZGlmCiAKIHByaXZhdGU6
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oCShyZXZpc2lvbiA1
Nzg1NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2Vi
QXBwbGljYXRpb25DYWNoZUhvc3Q7CiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVu
dDsKK2NsYXNzIFdlYkNhY2hlYWJsZU1ldGFkYXRhOwogY2xhc3MgV2ViQ29va2llSmFyOwogY2xh
c3MgV2ViRGF0YVNvdXJjZTsKIGNsYXNzIFdlYkZvcm1FbGVtZW50OwpAQCAtMjU2LDYgKzI1Nywx
MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlD
YWNoZSgKICAgICAgICAgV2ViRnJhbWUqLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiwgY29uc3QgV2Vi
VVJMUmVzcG9uc2UmKSB7IH0KIAorICAgIC8vIENhY2hlYWJsZSBtZXRhZGF0YSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiBVUkwuCisgICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRl
Q2FjaGVhYmxlTWV0YWRhdGEoCisgICAgICAgIGNvbnN0IFdlYlVSTCYsIGNvbnN0IFdlYkNhY2hl
YWJsZU1ldGFkYXRhJikgeyB9CisKICAgICAvLyBUaGlzIGZyYW1lIGhhcyBkaXNwbGF5ZWQgaW5h
Y3RpdmUgY29udGVudCAoc3VjaCBhcyBhbiBpbWFnZSkgZnJvbSBhbgogICAgIC8vIGluc2VjdXJl
IHNvdXJjZS4gIEluYWN0aXZlIGNvbnRlbnQgY2Fubm90IHNwcmVhZCB0byBvdGhlciBmcmFtZXMu
CiAgICAgdmlydHVhbCB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoV2ViRnJhbWUqKSB7
IH0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMUmVzcG9uc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTFJlc3BvbnNlLmgJKHJldmlzaW9u
IDU3ODU1KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkxSZXNwb25zZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgUmVz
b3VyY2VSZXNwb24KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYkNhY2hlYWJsZU1l
dGFkYXRhOwogY2xhc3MgV2ViQ1N0cmluZzsKIGNsYXNzIFdlYkhUVFBIZWFkZXJWaXNpdG9yOwog
Y2xhc3MgV2ViU3RyaW5nOwpAQCAtOTksNiArMTAwLDkgQEAgcHVibGljOgogICAgIFdFQktJVF9B
UEkgZG91YmxlIGxhc3RNb2RpZmllZERhdGUoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIHZvaWQg
c2V0TGFzdE1vZGlmaWVkRGF0ZShkb3VibGUpOwogCisgICAgV0VCS0lUX0FQSSBXZWJDYWNoZWFi
bGVNZXRhZGF0YSBjYWNoZWFibGVNZXRhZGF0YSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgdm9p
ZCBzZXRDYWNoZWFibGVNZXRhZGF0YShjb25zdCBXZWJDYWNoZWFibGVNZXRhZGF0YSYpOworCiAg
ICAgV0VCS0lUX0FQSSBib29sIGlzQ29udGVudEZpbHRlcmVkKCkgY29uc3Q7CiAgICAgV0VCS0lU
X0FQSSB2b2lkIHNldElzQ29udGVudEZpbHRlcmVkKGJvb2wpOwogCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA1Nzg1NSkK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNs
dWRlICJQbHVnaW5EYXRhQ2hyb21pdW0uaCIKICNpbmNsdWRlICJTdHJpbmdFeHRyYXMuaCIKKyNp
bmNsdWRlICJXZWJDYWNoZWFibGVNZXRhZGF0YS5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJ
bXBsLmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIKICNpbmNsdWRlICJX
ZWJGb3JtRWxlbWVudC5oIgpAQCAtNDA2LDYgKzQwNywxMiBAQCBib29sIEZyYW1lTG9hZGVyQ2xp
ZW50SW1wbDo6ZGlzcGF0Y2hEaWRMCiAgICAgcmV0dXJuIGZhbHNlOyAgLy8gRG8gbm90IHN1cHBy
ZXNzIHJlbWFpbmluZyBub3RpZmljYXRpb25zCiB9CiAKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRJ
bXBsOjpkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBDYWNoZWFibGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0YWRhdGEpCit7CisgICAgaWYg
KG1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+ZGlk
R2VuZXJhdGVDYWNoZWFibGVNZXRhZGF0YSh1cmwsIGNhY2hlYWJsZU1ldGFkYXRhKTsKK30KKwog
dm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRz
KCkKIHsKICAgICBpZiAobV93ZWJGcmFtZS0+Y2xpZW50KCkpCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHJldmlzaW9uIDU3ODU1KQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtODksNiArODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlu
aXNoTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
Zmllcik7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3Vy
Y2VGcm9tTWVtb3J5Q2FjaGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgaW50
IGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkR2VuZXJhdGVDYWNoZWFibGVN
ZXRhZGF0YShjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgV2ViQ29yZTo6Q2FjaGVhYmxlTWV0
YWRhdGEmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMo
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQ
cm92aXNpb25hbExvYWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxDbGll
bnRSZWRpcmVjdCgpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJ
KHJldmlzaW9uIDU3ODU1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgIldlYkNhY2hlYWJsZU1ldGFkYXRhLmgiCiAjaW5jbHVk
ZSAiV2ViSFRUUEhlYWRlclZpc2l0b3IuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWJVUkwuaCIKQEAgLTIzMCw2ICsyMzEsMTcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6
c2V0QXBwQ2FjaGVNYW5pZmVzdAogICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5z
ZXRBcHBDYWNoZU1hbmlmZXN0VVJMKHVybCk7CiB9CiAKK1dlYkNhY2hlYWJsZU1ldGFkYXRhIFdl
YlVSTFJlc3BvbnNlOjpjYWNoZWFibGVNZXRhZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5jYWNoZWFibGVNZXRhZGF0YSgpOworfQorCit2
b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRDYWNoZWFibGVNZXRhZGF0YShjb25zdCBXZWJDYWNoZWFi
bGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0YWRhdGEpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291
cmNlUmVzcG9uc2UtPnNldENhY2hlYWJsZU1ldGFkYXRhKGNhY2hlYWJsZU1ldGFkYXRhKTsKK30K
KworCiBXZWJDU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpzZWN1cml0eUluZm8oKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBnZXRTZWN1cml0eUluZm8gaXMgbWlzbmFtZWQuCg==
</data>
<flag name="review"
          id="37978"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54170</attachid>
            <date>2010-04-23 10:28:36 -0700</date>
            <delta_ts>2010-04-26 12:50:47 -0700</delta_ts>
            <desc>Removed ID and type enum</desc>
            <filename>37874-4.txt</filename>
            <type>text/plain</type>
            <size>22331</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODE3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDQtMjMgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgYWJpbGl0eSB0byBzdG9yZSBtZXRhZGF0YSBvbiBhIENhY2hlZFJlc291cmNlIHdo
aWNoIGNhbiBiZQorICAgICAgICBjYWNoZWQgYnkgdGhlIGVtYmVkZGluZyBhcHBsaWNhdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NzYzCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlZCBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZTo6c2V0Q2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OmNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2Uu
aDoKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRh
dGEpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDYWNoZWFibGVNZXRhZGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGE6OnR5cGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWFibGVNZXRhZGF0YTo6c2V0VHlwZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlYWJs
ZU1ldGFkYXRhOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlYWJsZU1ldGFkYXRhOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVz
cG9uc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OlJlc291cmNlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6cmVzcG9uc2VUaW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OnNldFJlc3BvbnNlVGltZSk6
CisKIDIwMTAtMDQtMjMgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBTaXplIG1pc21hdGNoIGJldHdlZW4gZm9ybWF0IHN0cmluZyBhbmQgYXJndW1lbnQgaW4g
ZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVz
b3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNw
cAkocmV2aXNpb24gNTgwMzMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgog
I2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQdXJnZWFibGVCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZXF1ZXN0LmgiCkBAIC0xNjQsNiArMTY0LDI0IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNl
dFJlc3BvbnNlKGNvbnN0IFIKICAgICBtX3Jlc3BvbnNlVGltZXN0YW1wID0gY3VycmVudFRpbWUo
KTsKIH0KIAordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0Q2FjaGVkTWV0YWRhdGEodW5zaWduZWQg
dHlwZUlELCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgRnJhbWUqIGZyYW1lKQorewor
ICAgIENhY2hlYWJsZU1ldGFkYXRhIGNhY2hlYWJsZU1ldGFkYXRhID0gbV9yZXNwb25zZS5jYWNo
ZWFibGVNZXRhZGF0YSgpOworICAgIGNhY2hlYWJsZU1ldGFkYXRhLnNldFR5cGVJRCh0eXBlSUQp
OworICAgIGNhY2hlYWJsZU1ldGFkYXRhLnNldERhdGEoZGF0YSk7CisgICAgbV9yZXNwb25zZS5z
ZXRDYWNoZWFibGVNZXRhZGF0YShjYWNoZWFibGVNZXRhZGF0YSk7CisKKyAgICBpZiAoZnJhbWUp
CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkR2VuZXJhdGVD
YWNoZWFibGVNZXRhZGF0YShtX3Jlc3BvbnNlKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IENhY2hlZFJlc291cmNlOjpjYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCB0eXBlSUQpIGNvbnN0
Cit7CisgICAgaWYgKHR5cGVJRCA9PSBtX3Jlc3BvbnNlLmNhY2hlYWJsZU1ldGFkYXRhKCkudHlw
ZUlEKCkpCisgICAgICAgIHJldHVybiBtX3Jlc3BvbnNlLmNhY2hlYWJsZU1ldGFkYXRhKCkuZGF0
YSgpOworICAgIHJldHVybiBSZWZQdHI8U2hhcmVkQnVmZmVyPigpOworfQorCiB2b2lkIENhY2hl
ZFJlc291cmNlOjpzZXRSZXF1ZXN0KFJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgaWYgKHJlcXVl
c3QgJiYgIW1fcmVxdWVzdCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24g
NTgwMzMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIENhY2hlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGll
bnQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U7CiBjbGFzcyBEb2NMb2FkZXI7Citj
bGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlOwogY2xhc3MgUmVxdWVzdDsKIGNs
YXNzIFB1cmdlYWJsZUJ1ZmZlcjsKQEAgLTE0Miw2ICsxNDMsMTMgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQogCisg
ICAgLy8gU2V0cyB0aGUgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3VyY2UgYW5k
IG5vdGlmaWVzIGFueSBjbGllbnRzCisgICAgLy8gdGhhdCB0aGlzIGRhdGEgc2hvdWxkIGJlIHBl
cnNpc3RlZCBpbiB0aGUgY2FjaGUuCisgICAgdm9pZCBzZXRDYWNoZWRNZXRhZGF0YSh1bnNpZ25l
ZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBGcmFtZSopOworCisgICAgLy8gR2V0cyB0aGUg
bWV0YWRhdGEgb2YgdGhlIGdpdmVuIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3VyY2Uu
CisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNhY2hlZE1ldGFkYXRhKHVuc2lnbmVkKSBj
b25zdDsKKwogICAgIGJvb2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gIWhhc0NsaWVudHMo
KSAmJiAhbV9yZXF1ZXN0ICYmICFtX3ByZWxvYWRDb3VudCAmJiAhbV9oYW5kbGVDb3VudCAmJiAh
bV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSAmJiAhbV9wcm94eVJlc291cmNlOyB9CiAKICAgICBib29s
IGlzRXhwaXJlZCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDU4
MDMzKQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5OSw2ICsxOTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlu
aXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQg
bG9uZywgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRj
aERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBpbnQpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkR2VuZXJhdGVDYWNoZWFibGVNZXRh
ZGF0YShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKSB7IH0KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNTgwMzMpCisrKyBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBAIGNsYXNzIE5TVmlldzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGNsYXNzIENhY2hlYWJsZU1ldGFkYXRhOwogICAgIGNs
YXNzIENhY2hlZEZyYW1lOwogICAgIGNsYXNzIENvbG9yOwogICAgIGNsYXNzIERPTVdyYXBwZXJX
b3JsZDsKQEAgLTExMiw2ICsxMTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlRXJyb3ImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRj
aERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRh
dGEoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpID0gMDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpID0g
MDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9u
c2VCYXNlLmNwcAkocmV2aXNpb24gNTgwMzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNiArNDUyLDIw
IEBAIHRpbWVfdCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGFzdE1vZGlmaWUKICAgICByZXR1cm4g
bV9sYXN0TW9kaWZpZWREYXRlOwogfQogCitjb25zdCBDYWNoZWFibGVNZXRhZGF0YSYgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OmNhY2hlYWJsZU1ldGFkYXRhKCkgY29uc3QKK3sKKyAgICBsYXp5SW5p
dCgpOworCisgICAgcmV0dXJuIG1fY2FjaGVhYmxlTWV0YWRhdGE7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnNldENhY2hlYWJsZU1ldGFkYXRhKGNvbnN0IENhY2hlYWJsZU1ldGFk
YXRhJiBjYWNoZWFibGVNZXRhZGF0YSkKK3sKKyAgICBsYXp5SW5pdCgpOworCisgICAgbV9jYWNo
ZWFibGVNZXRhZGF0YSA9IGNhY2hlYWJsZU1ldGFkYXRhOworfQorCiB2b2lkIFJlc291cmNlUmVz
cG9uc2VCYXNlOjpsYXp5SW5pdCgpIGNvbnN0CiB7CiAgICAgY29uc3RfY2FzdDxSZXNvdXJjZVJl
c3BvbnNlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgUmVzb3VyY2VSZXNwb25zZSo+KHRoaXMpKS0+cGxh
dGZvcm1MYXp5SW5pdCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDU4MDMzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogCkBAIC0zNyw2ICszOCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZXNvdXJj
ZVJlc3BvbnNlOwogc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7CiAKKy8v
IE1ldGFkYXRhIGZvciBhIGdpdmVuIHJlc291cmNlIHdoaWNoIGlzIGdlbmVyYXRlZCBieSBXZWJD
b3JlIGFuZCBtYXkgYmUKKy8vIHN0b3JlZCBpbiB0aGUgZW1iZWRkaW5nIGFwcGxpY2F0aW9uJ3Mg
Y2FjaGUuCitjbGFzcyBDYWNoZWFibGVNZXRhZGF0YSB7CitwdWJsaWM6CisgICAgLy8gQSBzbWFs
bGVyICJHVUlEIiBjaG9zZW4gYnkgdGhlIGdlbmVyYXRvciBvZiB0aGUgbWV0YWRhdGEgc28gdGhh
dCBpdCBjYW4KKyAgICAvLyBkaWZmZXJlbnRpYXRlIGRhdGEgZ2VuZXJhdGVkIGJ5IGl0c2VsZiBm
cm9tIG90aGVyIG1ldGFkYXRhLiBSYXRoZXIgdGhhbgorICAgIC8vIGNyZWF0aW5nIGFuIGVudW0g
Ym90dGxlbmVjaywgd2UgcmVseSBvbiBlYWNoIFdlYkNvcmUgbWV0YWRhdGEgZ2VuZXJhdG9yCisg
ICAgLy8gdG8gY2hvc2UgYSBwc2V1ZG8gcmFuZG9tIElEIHRoYXQgaXMgdW5saWtlbHkgdG8gY29s
bGlkZS4KKyAgICB1bnNpZ25lZCB0eXBlSUQoKSBjb25zdCB7IHJldHVybiBtX3R5cGVJRDsgfQor
ICAgIHZvaWQgc2V0VHlwZUlEKHVuc2lnbmVkIHR5cGVJRCkgeyBtX3R5cGVJRCA9IHR5cGVJRDsg
fQorCisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGE7IH0KKyAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEp
IHsgbV9kYXRhID0gZGF0YTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fdHlwZUlEOwor
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKK307CisKIC8vIERvIG5vdCB1c2UgdGhp
cyBjbGFzcyBkaXJlY3RseSwgdXNlIHRoZSBjbGFzcyBSZXNwb25zZVJlc3BvbnNlIGluc3RlYWQK
IGNsYXNzIFJlc291cmNlUmVzcG9uc2VCYXNlIDogcHVibGljIEZhc3RBbGxvY0Jhc2UgewogcHVi
bGljOgpAQCAtOTUsNiArMTE1LDkgQEAgcHVibGljOgogICAgIGRvdWJsZSBleHBpcmVzKCkgY29u
c3Q7CiAgICAgZG91YmxlIGxhc3RNb2RpZmllZCgpIGNvbnN0OwogCisgICAgY29uc3QgQ2FjaGVh
YmxlTWV0YWRhdGEmIGNhY2hlYWJsZU1ldGFkYXRhKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDYWNo
ZWFibGVNZXRhZGF0YShjb25zdCBDYWNoZWFibGVNZXRhZGF0YSYpOworCiAgICAgLy8gVGhlIFJl
c291cmNlUmVzcG9uc2Ugc3ViY2xhc3MgbWF5ICJzaGFkb3ciIHRoaXMgbWV0aG9kIHRvIHByb3Zp
ZGUgcGxhdGZvcm0tc3BlY2lmaWMgbWVtb3J5IHVzYWdlIGluZm9ybWF0aW9uCiAgICAgdW5zaWdu
ZWQgbWVtb3J5VXNhZ2UoKSBjb25zdAogICAgIHsKQEAgLTEyNSw2ICsxNDgsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgU3RyaW5nIG1faHR0cFN0YXR1c1RleHQ7CiAgICAgSFRUUEhlYWRlck1hcCBtX2h0
dHBIZWFkZXJGaWVsZHM7CiAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkRGF0ZTsKKyAgICBDYWNo
ZWFibGVNZXRhZGF0YSBtX2NhY2hlYWJsZU1ldGFkYXRhOwogCiAgICAgYm9vbCBtX2lzTnVsbCA6
IDE7CiAgICAgCkBAIC0xNjEsNiArMTg1LDcgQEAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXNwb25zZURhdGEgOgogICAgIFN0cmluZyBtX2h0dHBTdGF0dXNUZXh0OwogICAgIE93blB0cjxD
cm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBtX2h0dHBIZWFkZXJzOwogICAgIHRpbWVfdCBt
X2xhc3RNb2RpZmllZERhdGU7CisgICAgT3duUHRyPENhY2hlYWJsZU1ldGFkYXRhPiBtX2NhY2hl
YWJsZU1ldGFkYXRhOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5o
CShyZXZpc2lvbiA1ODAzMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9S
ZXNvdXJjZVJlc3BvbnNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2FwcENhY2hlSUQoMCkKICAgICAgICAgICAg
ICwgbV93YXNGZXRjaGVkVmlhU1BEWShmYWxzZSkKICAgICAgICAgICAgICwgbV9pc011bHRpcGFy
dFBheWxvYWQoZmFsc2UpCisgICAgICAgICAgICAsIG1fcmVzcG9uc2VUaW1lKDApCiAgICAgICAg
IHsKICAgICAgICAgfQogCkBAIC00OSw2ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgICAgICwgbV9hcHBDYWNoZUlEKDApCiAgICAgICAgICAgICAsIG1fd2FzRmV0Y2hlZFZp
YVNQRFkoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNNdWx0aXBhcnRQYXlsb2FkKGZhbHNlKQor
ICAgICAgICAgICAgLCBtX3Jlc3BvbnNlVGltZSgwKQogICAgICAgICB7CiAgICAgICAgIH0KIApA
QCAtODgsNiArOTAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgbV9pc011
bHRpcGFydFBheWxvYWQgPSB2YWx1ZTsKICAgICAgICAgfQogCisgICAgICAgIGxvbmcgbG9uZyBy
ZXNwb25zZVRpbWUoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlVGltZTsgfQorICAgICAgICB2
b2lkIHNldFJlc3BvbnNlVGltZShsb25nIGxvbmcgcmVzcG9uc2VUaW1lKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX3Jlc3BvbnNlVGltZSA9IHJlc3BvbnNlVGltZTsKKyAgICAgICAgfQorCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlUmVzcG9uc2VCYXNlOwog
CkBAIC0xMTcsNiArMTI1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBT
ZXQgdG8gdHJ1ZSBpZiB0aGlzIGlzIHBhcnQgb2YgYSBtdWx0aXBhcnQgcmVzcG9uc2UuCiAgICAg
ICAgIGJvb2wgbV9pc011bHRpcGFydFBheWxvYWQ7CisKKyAgICAgICAgLy8gVGhlIHRpbWUgYXQg
d2hpY2ggdGhlIHJlc3BvbnNlIGhlYWRlcnMgd2VyZSByZWNlaXZlZC4gIEZvciBjYWNoZWQKKyAg
ICAgICAgLy8gcmVzcG9uc2VzLCB0aGlzIHRpbWUgY291bGQgYmUgImZhciIgaW4gdGhlIHBhc3Qu
CisgICAgICAgIGxvbmcgbG9uZyBtX3Jlc3BvbnNlVGltZTsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4MTc2KQorKysgV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEw
LTA0LTIzICBUb255IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGFiaWxpdHkgdG8g
c3RvcmUgbWV0YWRhdGEgb24gYSBDYWNoZWRSZXNvdXJjZSB3aGljaCBjYW4gYmUKKyAgICAgICAg
Y2FjaGVkIGJ5IHRoZSBlbWJlZGRpbmcgYXBwbGljYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzc2MworCisgICAgICAgICogV2ViS2l0Lmd5
cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQ2FjaGVhYmxlTWV0YWRhdGEuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYkNhY2hlYWJsZU1ldGFkYXRhOjpXZWJDYWNoZWFibGVNZXRhZGF0YSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNhY2hlYWJsZU1ldGFkYXRhOjpvcGVyYXRvciBXZWJDb3Jl
OjpDYWNoZWFibGVNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNhY2hlYWJsZU1ldGFk
YXRhOjp+V2ViQ2FjaGVhYmxlTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJDYWNoZWFi
bGVNZXRhZGF0YTo6dHlwZUlEKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRh
dGE6OnNldFR5cGVJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNhY2hlYWJsZU1ldGFkYXRhOjpk
YXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OnNldERhdGEpOgor
ICAgICAgICAqIHB1YmxpYy9XZWJEYXRhLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OldlYkRhdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEYXRhOjpvcGVyYXRvciBzdGQ6OnZlY3RvcjxjaGFyPik6CisgICAgICAgICog
cHVibGljL1dlYkZyYW1lQ2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lQ2xpZW50
OjpkaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAgKiBwdWJsaWMvV2ViVVJM
UmVzcG9uc2UuaDoKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZExvYWRSZXNv
dXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
SW1wbDo6ZGlzcGF0Y2hEaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAgKiBz
cmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlVSTFJlc3BvbnNl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnJlc3BvbnNlVGltZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZXRSZXNwb25zZVRpbWUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6Y2FjaGVhYmxlTWV0YWRhdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0Q2FjaGVhYmxlTWV0YWRhdGEpOgorCiAyMDEwLTA0
LTIyICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDU4MDMzKQorKysgV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDcgQEAK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmluZGluZ3MuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJDYWNoZS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkNhY2hl
YWJsZU1ldGFkYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2FudmFzLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2xpcGJvYXJkLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViQ29sb3IuaCcsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNh
Y2hlYWJsZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJDYWNoZWFibGVNZXRhZGF0YS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJDYWNoZWFibGVNZXRhZGF0YS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJDYWNoZWFibGVNZXRhZGF0YV9oCisjZGVmaW5lIFdlYkNhY2hlYWJsZU1ldGFk
YXRhX2gKKworI2luY2x1ZGUgIldlYkRhdGEuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElP
TgorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBDYWNoZWFibGVNZXRhZGF0YTsgfQorI2Vsc2UK
KyNpbmNsdWRlIDx3ZWJraXQvZ2x1ZS9yZXNvdXJjZV9sb2FkZXJfYnJpZGdlLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNhY2hlYWJsZU1ldGFkYXRhIHsKK3B1
YmxpYzoKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJDYWNoZWFibGVNZXRhZGF0
YShjb25zdCBXZWJDb3JlOjpDYWNoZWFibGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0YWRhdGEpCisg
ICAgICAgIDogbV90eXBlSUQoY2FjaGVhYmxlTWV0YWRhdGEudHlwZUlEKCkpCisgICAgICAgICwg
bV9kYXRhKGNhY2hlYWJsZU1ldGFkYXRhLmRhdGEoKSkKKyAgICB7CisgICAgfQorCisgICAgb3Bl
cmF0b3IgV2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAg
V2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGEgY2FjaGVhYmxlTWV0YWRhdGE7CisgICAgICAgIGNh
Y2hlYWJsZU1ldGFkYXRhLnNldFR5cGVJRCh0eXBlSUQoKSk7CisgICAgICAgIGNhY2hlYWJsZU1l
dGFkYXRhLnNldERhdGEoZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlYWJsZU1ldGFkYXRh
OworICAgIH0KKyNlbHNlCisgICAgV2ViQ2FjaGVhYmxlTWV0YWRhdGEoY29uc3Qgd2Via2l0X2ds
dWU6OlJlc291cmNlTG9hZGVyQnJpZGdlOjpDYWNoZWFibGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0
YWRhdGEpCisgICAgICAgIDogbV90eXBlSUQoY2FjaGVhYmxlTWV0YWRhdGEudHlwZV9pZCkKKyAg
ICAgICAgLCBtX2RhdGEoY2FjaGVhYmxlTWV0YWRhdGEuZGF0YSkKKyAgICB7CisgICAgfQorI2Vu
ZGlmCisKKyAgICB+V2ViQ2FjaGVhYmxlTWV0YWRhdGEoKQorICAgIHsKKyAgICB9CisKKyAgICBX
RUJLSVRfQVBJIHVuc2lnbmVkIHR5cGVJRCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV90eXBlSUQ7CisgICAgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIHNldFR5cGVJRCh1bnNpZ25l
ZCB0eXBlSUQpCisgICAgeworICAgICAgICBtX3R5cGVJRCA9IHR5cGVJRDsKKyAgICB9CisKKyAg
ICBXRUJLSVRfQVBJIFdlYkRhdGEgZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9kYXRhOworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCBzZXREYXRhKGNvbnN0IFdlYkRh
dGEmIGRhdGEpCisgICAgeworICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB1bnNpZ25lZCBtX3R5cGVJRDsKKyAgICBXZWJEYXRhIG1fZGF0YTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0
YS5oCShyZXZpc2lvbiA1ODAzMykKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCiBuYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIFNoYXJlZEJ1ZmZlcjsgfQogbmFtZXNwYWNl
IFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZWxzZQor
I2luY2x1ZGUgPHZlY3Rvcj4KICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTk4LDYg
KzEwMCwyOCBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2lnbihjLmRhdGEoKSwgYy5zaXplKCkpOwog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQorCisgICAgV2ViRGF0YShjb25zdCBzdGQ6OnZl
Y3RvcjxjaGFyPiYgYykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGlmIChjLnNpemUo
KSkKKyAgICAgICAgICAgIGFzc2lnbigmYy5mcm9udCgpLCBjLnNpemUoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlc2V0KCk7CisgICAgfQorCisgICAgV2ViRGF0YSYgb3BlcmF0b3I9
KGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBjKQorICAgIHsKKyAgICAgICAgaWYgKGMuc2l6ZSgp
KQorICAgICAgICAgICAgYXNzaWduKCZjLmZyb250KCksIGMuc2l6ZSgpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwor
ICAgIG9wZXJhdG9yIHN0ZDo6dmVjdG9yPGNoYXI+KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6OnZlY3RvcjxjaGFyPihkYXRhKCksIGRhdGEoKSArIHNpemUoKSk7CisgICAgfQog
I2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1l
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZUNs
aWVudC5oCShyZXZpc2lvbiA1ODAzMykKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJh
bWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3Q7CiBjbGFzcyBXZWJBcHBsaWNh
dGlvbkNhY2hlSG9zdENsaWVudDsKK2NsYXNzIFdlYkNhY2hlYWJsZU1ldGFkYXRhOwogY2xhc3Mg
V2ViQ29va2llSmFyOwogY2xhc3MgV2ViRGF0YVNvdXJjZTsKIGNsYXNzIFdlYkZvcm1FbGVtZW50
OwpAQCAtMjUzLDYgKzI1NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkTG9hZFJl
c291cmNlRnJvbU1lbW9yeUNhY2hlKAogICAgICAgICBXZWJGcmFtZSosIGNvbnN0IFdlYlVSTFJl
cXVlc3QmLCBjb25zdCBXZWJVUkxSZXNwb25zZSYpIHsgfQogCisgICAgLy8gQ2FjaGVhYmxlIG1l
dGFkYXRhIGhhcyBiZWVuIGdlbmVyYXRlZCBmb3IgdGhlIGdpdmVuIHJlc3BvbnNlLgorICAgIHZp
cnR1YWwgdm9pZCBkaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKGNvbnN0IFdlYlVSTFJlc3Bv
bnNlJikgeyB9CisKICAgICAvLyBUaGlzIGZyYW1lIGhhcyBkaXNwbGF5ZWQgaW5hY3RpdmUgY29u
dGVudCAoc3VjaCBhcyBhbiBpbWFnZSkgZnJvbSBhbgogICAgIC8vIGluc2VjdXJlIHNvdXJjZS4g
IEluYWN0aXZlIGNvbnRlbnQgY2Fubm90IHNwcmVhZCB0byBvdGhlciBmcmFtZXMuCiAgICAgdmly
dHVhbCB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoV2ViRnJhbWUqKSB7IH0KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMUmVzcG9uc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTFJlc3BvbnNlLmgJKHJldmlzaW9uIDU4MDMzKQor
KysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkxSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgUmVzb3VyY2VSZXNw
b24KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYkNhY2hlYWJsZU1ldGFkYXRhOwog
Y2xhc3MgV2ViQ1N0cmluZzsKIGNsYXNzIFdlYkhUVFBIZWFkZXJWaXNpdG9yOwogY2xhc3MgV2Vi
U3RyaW5nOwpAQCAtNzIsNiArNzMsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0FQSSBXZWJVUkwg
dXJsKCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHNldFVSTChjb25zdCBXZWJVUkwmKTsK
IAorICAgIFdFQktJVF9BUEkgbG9uZyBsb25nIHJlc3BvbnNlVGltZSgpIGNvbnN0OworICAgIFdF
QktJVF9BUEkgdm9pZCBzZXRSZXNwb25zZVRpbWUobG9uZyBsb25nKTsKKwogICAgIFdFQktJVF9B
UEkgV2ViU3RyaW5nIG1pbWVUeXBlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHNldE1J
TUVUeXBlKGNvbnN0IFdlYlN0cmluZyYpOwogCkBAIC05OSw2ICsxMDMsOSBAQCBwdWJsaWM6CiAg
ICAgV0VCS0lUX0FQSSBkb3VibGUgbGFzdE1vZGlmaWVkRGF0ZSgpIGNvbnN0OwogICAgIFdFQktJ
VF9BUEkgdm9pZCBzZXRMYXN0TW9kaWZpZWREYXRlKGRvdWJsZSk7CiAKKyAgICBXRUJLSVRfQVBJ
IFdlYkNhY2hlYWJsZU1ldGFkYXRhIGNhY2hlYWJsZU1ldGFkYXRhKCkgY29uc3Q7CisgICAgV0VC
S0lUX0FQSSB2b2lkIHNldENhY2hlYWJsZU1ldGFkYXRhKGNvbnN0IFdlYkNhY2hlYWJsZU1ldGFk
YXRhJik7CisKICAgICBXRUJLSVRfQVBJIGJvb2wgaXNDb250ZW50RmlsdGVyZWQoKSBjb25zdDsK
ICAgICBXRUJLSVRfQVBJIHZvaWQgc2V0SXNDb250ZW50RmlsdGVyZWQoYm9vbCk7CiAKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHJldmlz
aW9uIDU4MDMzKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUGx1Z2luRGF0
YS5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlN0cmluZ0V4
dHJhcy5oIgorI2luY2x1ZGUgIldlYkNhY2hlYWJsZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiV2Vi
RGF0YVNvdXJjZUltcGwuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCkBAIC00MDYsNiArNDA3LDEyIEBAIGJvb2wgRnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZEwKICAgICByZXR1cm4gZmFsc2U7ICAvLyBE
byBub3Qgc3VwcHJlc3MgcmVtYWluaW5nIG5vdGlmaWNhdGlvbnMKIH0KIAordm9pZCBGcmFtZUxv
YWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGlkR2VuZXJhdGVDYWNoZWFibGVNZXRhZGF0YShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNvdXJjZVJlc3BvbnNlKQoreworICAgIGlmIChtX3dlYkZy
YW1lLT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmRpZEdlbmVyYXRl
Q2FjaGVhYmxlTWV0YWRhdGEoV3JhcHBlZFJlc291cmNlUmVzcG9uc2UocmVzb3VyY2VSZXNwb25z
ZSkpOworfQorCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRIYW5kbGVP
bmxvYWRFdmVudHMoKQogewogICAgIGlmIChtX3dlYkZyYW1lLT5jbGllbnQoKSkKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAkocmV2aXNpb24gNTgw
MzMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRGaW5pc2hMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGlu
ZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERp
ZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBpbnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRHZW5lcmF0
ZUNhY2hlYWJsZU1ldGFkYXRhKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExv
YWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgp
OwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHJldmlzaW9uIDU4
MDMzKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
IAorI2luY2x1ZGUgIldlYkNhY2hlYWJsZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiV2ViSFRUUEhl
YWRlclZpc2l0b3IuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwu
aCIKQEAgLTkzLDYgKzk0LDE2IEBAIHZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldFVSTChjb25zdCBX
ZWJVUkwKICAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0VVJMKHVybCk7CiB9
CiAKK2xvbmcgbG9uZyBXZWJVUkxSZXNwb25zZTo6cmVzcG9uc2VUaW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnJlc3BvbnNlVGltZSgpOwor
fQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRSZXNwb25zZVRpbWUobG9uZyBsb25nIHJlc3Bv
bnNlVGltZSkgCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldFJlc3Bv
bnNlVGltZShyZXNwb25zZVRpbWUpOworfQorCiBXZWJTdHJpbmcgV2ViVVJMUmVzcG9uc2U6Om1p
bWVUeXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9u
c2UtPm1pbWVUeXBlKCk7CkBAIC0yMzAsNiArMjQxLDE3IEBAIHZvaWQgV2ViVVJMUmVzcG9uc2U6
OnNldEFwcENhY2hlTWFuaWZlc3QKICAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+
c2V0QXBwQ2FjaGVNYW5pZmVzdFVSTCh1cmwpOwogfQogCitXZWJDYWNoZWFibGVNZXRhZGF0YSBX
ZWJVUkxSZXNwb25zZTo6Y2FjaGVhYmxlTWV0YWRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+Y2FjaGVhYmxlTWV0YWRhdGEoKTsKK30KKwor
dm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0Q2FjaGVhYmxlTWV0YWRhdGEoY29uc3QgV2ViQ2FjaGVh
YmxlTWV0YWRhdGEmIGNhY2hlYWJsZU1ldGFkYXRhKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNv
dXJjZVJlc3BvbnNlLT5zZXRDYWNoZWFibGVNZXRhZGF0YShjYWNoZWFibGVNZXRhZGF0YSk7Cit9
CisKKwogV2ViQ1N0cmluZyBXZWJVUkxSZXNwb25zZTo6c2VjdXJpdHlJbmZvKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogZ2V0U2VjdXJpdHlJbmZvIGlzIG1pc25hbWVkLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54323</attachid>
            <date>2010-04-26 12:50:47 -0700</date>
            <delta_ts>2010-05-03 13:28:52 -0700</delta_ts>
            <desc>Provide default, empty implementation of dispatchDidGenerateCacheableMetadata so that each port doesn&apos;t need to implement it</desc>
            <filename>37874-5.txt</filename>
            <type>text/plain</type>
            <size>22330</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODE3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDQtMjMgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgYWJpbGl0eSB0byBzdG9yZSBtZXRhZGF0YSBvbiBhIENhY2hlZFJlc291cmNlIHdo
aWNoIGNhbiBiZQorICAgICAgICBjYWNoZWQgYnkgdGhlIGVtYmVkZGluZyBhcHBsaWNhdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3ODc0CisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlZCBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZTo6c2V0Q2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OmNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2Uu
aDoKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRh
dGEpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDYWNoZWFibGVNZXRhZGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVhYmxlTWV0YWRhdGE6OnR5cGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWFibGVNZXRhZGF0YTo6c2V0VHlwZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlYWJs
ZU1ldGFkYXRhOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlYWJsZU1ldGFkYXRhOjpz
ZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVz
cG9uc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OlJlc291cmNlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6cmVzcG9uc2VUaW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OnNldFJlc3BvbnNlVGltZSk6
CisKIDIwMTAtMDQtMjMgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBTaXplIG1pc21hdGNoIGJldHdlZW4gZm9ybWF0IHN0cmluZyBhbmQgYXJndW1lbnQgaW4g
ZHVtcFRleHRFbmNvZGluZ05hbWVNYXAoKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVz
b3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNw
cAkocmV2aXNpb24gNTgwMzMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgog
I2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQdXJnZWFibGVCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZXF1ZXN0LmgiCkBAIC0xNjQsNiArMTY0LDI0IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNl
dFJlc3BvbnNlKGNvbnN0IFIKICAgICBtX3Jlc3BvbnNlVGltZXN0YW1wID0gY3VycmVudFRpbWUo
KTsKIH0KIAordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0Q2FjaGVkTWV0YWRhdGEodW5zaWduZWQg
dHlwZUlELCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgRnJhbWUqIGZyYW1lKQorewor
ICAgIENhY2hlYWJsZU1ldGFkYXRhIGNhY2hlYWJsZU1ldGFkYXRhID0gbV9yZXNwb25zZS5jYWNo
ZWFibGVNZXRhZGF0YSgpOworICAgIGNhY2hlYWJsZU1ldGFkYXRhLnNldFR5cGVJRCh0eXBlSUQp
OworICAgIGNhY2hlYWJsZU1ldGFkYXRhLnNldERhdGEoZGF0YSk7CisgICAgbV9yZXNwb25zZS5z
ZXRDYWNoZWFibGVNZXRhZGF0YShjYWNoZWFibGVNZXRhZGF0YSk7CisKKyAgICBpZiAoZnJhbWUp
CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGlkR2VuZXJhdGVD
YWNoZWFibGVNZXRhZGF0YShtX3Jlc3BvbnNlKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IENhY2hlZFJlc291cmNlOjpjYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCB0eXBlSUQpIGNvbnN0
Cit7CisgICAgaWYgKHR5cGVJRCA9PSBtX3Jlc3BvbnNlLmNhY2hlYWJsZU1ldGFkYXRhKCkudHlw
ZUlEKCkpCisgICAgICAgIHJldHVybiBtX3Jlc3BvbnNlLmNhY2hlYWJsZU1ldGFkYXRhKCkuZGF0
YSgpOworICAgIHJldHVybiBSZWZQdHI8U2hhcmVkQnVmZmVyPigpOworfQorCiB2b2lkIENhY2hl
ZFJlc291cmNlOjpzZXRSZXF1ZXN0KFJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgaWYgKHJlcXVl
c3QgJiYgIW1fcmVxdWVzdCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24g
NTgwMzMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIENhY2hlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGll
bnQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U7CiBjbGFzcyBEb2NMb2FkZXI7Citj
bGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlOwogY2xhc3MgUmVxdWVzdDsKIGNs
YXNzIFB1cmdlYWJsZUJ1ZmZlcjsKQEAgLTE0Miw2ICsxNDMsMTMgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQogCisg
ICAgLy8gU2V0cyB0aGUgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3VyY2UgYW5k
IG5vdGlmaWVzIGFueSBjbGllbnRzCisgICAgLy8gdGhhdCB0aGlzIGRhdGEgc2hvdWxkIGJlIHBl
cnNpc3RlZCBpbiB0aGUgY2FjaGUuCisgICAgdm9pZCBzZXRDYWNoZWRNZXRhZGF0YSh1bnNpZ25l
ZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBGcmFtZSopOworCisgICAgLy8gR2V0cyB0aGUg
bWV0YWRhdGEgb2YgdGhlIGdpdmVuIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3VyY2Uu
CisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNhY2hlZE1ldGFkYXRhKHVuc2lnbmVkKSBj
b25zdDsKKwogICAgIGJvb2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gIWhhc0NsaWVudHMo
KSAmJiAhbV9yZXF1ZXN0ICYmICFtX3ByZWxvYWRDb3VudCAmJiAhbV9oYW5kbGVDb3VudCAmJiAh
bV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSAmJiAhbV9wcm94eVJlc291cmNlOyB9CiAKICAgICBib29s
IGlzRXhwaXJlZCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDU4
MDMzKQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5OSw2ICsxOTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlu
aXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQg
bG9uZywgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRj
aERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBpbnQpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkR2VuZXJhdGVDYWNoZWFibGVNZXRh
ZGF0YShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKSB7IH0KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNTgwMzMpCisrKyBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBAIGNsYXNzIE5TVmlldzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGNsYXNzIENhY2hlYWJsZU1ldGFkYXRhOwogICAgIGNs
YXNzIENhY2hlZEZyYW1lOwogICAgIGNsYXNzIENvbG9yOwogICAgIGNsYXNzIERPTVdyYXBwZXJX
b3JsZDsKQEAgLTExMiw2ICsxMTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlRXJyb3ImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRj
aERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRh
dGEoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkgPSAw
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25z
ZUJhc2UuY3BwCShyZXZpc2lvbiA1ODAzMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Miw2ICs0NTIsMjAg
QEAgdGltZV90IFJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXN0TW9kaWZpZQogICAgIHJldHVybiBt
X2xhc3RNb2RpZmllZERhdGU7CiB9CiAKK2NvbnN0IENhY2hlYWJsZU1ldGFkYXRhJiBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6Y2FjaGVhYmxlTWV0YWRhdGEoKSBjb25zdAoreworICAgIGxhenlJbml0
KCk7CisKKyAgICByZXR1cm4gbV9jYWNoZWFibGVNZXRhZGF0YTsKK30KKwordm9pZCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6c2V0Q2FjaGVhYmxlTWV0YWRhdGEoY29uc3QgQ2FjaGVhYmxlTWV0YWRh
dGEmIGNhY2hlYWJsZU1ldGFkYXRhKQoreworICAgIGxhenlJbml0KCk7CisKKyAgICBtX2NhY2hl
YWJsZU1ldGFkYXRhID0gY2FjaGVhYmxlTWV0YWRhdGE7Cit9CisKIHZvaWQgUmVzb3VyY2VSZXNw
b25zZUJhc2U6OmxhenlJbml0KCkgY29uc3QKIHsKICAgICBjb25zdF9jYXN0PFJlc291cmNlUmVz
cG9uc2UqPihzdGF0aWNfY2FzdDxjb25zdCBSZXNvdXJjZVJlc3BvbnNlKj4odGhpcykpLT5wbGF0
Zm9ybUxhenlJbml0KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXNwb25zZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXNwb25zZUJhc2UuaAkocmV2aXNpb24gNTgwMzMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIktVUkwuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAKQEAgLTM3LDYgKzM4LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJlc291cmNl
UmVzcG9uc2U7CiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YTsKIAorLy8g
TWV0YWRhdGEgZm9yIGEgZ2l2ZW4gcmVzb3VyY2Ugd2hpY2ggaXMgZ2VuZXJhdGVkIGJ5IFdlYkNv
cmUgYW5kIG1heSBiZQorLy8gc3RvcmVkIGluIHRoZSBlbWJlZGRpbmcgYXBwbGljYXRpb24ncyBj
YWNoZS4KK2NsYXNzIENhY2hlYWJsZU1ldGFkYXRhIHsKK3B1YmxpYzoKKyAgICAvLyBBIHNtYWxs
ZXIgIkdVSUQiIGNob3NlbiBieSB0aGUgZ2VuZXJhdG9yIG9mIHRoZSBtZXRhZGF0YSBzbyB0aGF0
IGl0IGNhbgorICAgIC8vIGRpZmZlcmVudGlhdGUgZGF0YSBnZW5lcmF0ZWQgYnkgaXRzZWxmIGZy
b20gb3RoZXIgbWV0YWRhdGEuIFJhdGhlciB0aGFuCisgICAgLy8gY3JlYXRpbmcgYW4gZW51bSBi
b3R0bGVuZWNrLCB3ZSByZWx5IG9uIGVhY2ggV2ViQ29yZSBtZXRhZGF0YSBnZW5lcmF0b3IKKyAg
ICAvLyB0byBjaG9zZSBhIHBzZXVkbyByYW5kb20gSUQgdGhhdCBpcyB1bmxpa2VseSB0byBjb2xs
aWRlLgorICAgIHVuc2lnbmVkIHR5cGVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZUlEOyB9Cisg
ICAgdm9pZCBzZXRUeXBlSUQodW5zaWduZWQgdHlwZUlEKSB7IG1fdHlwZUlEID0gdHlwZUlEOyB9
CisKKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHZvaWQgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkg
eyBtX2RhdGEgPSBkYXRhOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV90eXBlSUQ7Cisg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworfTsKKwogLy8gRG8gbm90IHVzZSB0aGlz
IGNsYXNzIGRpcmVjdGx5LCB1c2UgdGhlIGNsYXNzIFJlc3BvbnNlUmVzcG9uc2UgaW5zdGVhZAog
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2UgOiBwdWJsaWMgRmFzdEFsbG9jQmFzZSB7CiBwdWJs
aWM6CkBAIC05NSw2ICsxMTUsOSBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGV4cGlyZXMoKSBjb25z
dDsKICAgICBkb3VibGUgbGFzdE1vZGlmaWVkKCkgY29uc3Q7CiAKKyAgICBjb25zdCBDYWNoZWFi
bGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0YWRhdGEoKSBjb25zdDsKKyAgICB2b2lkIHNldENhY2hl
YWJsZU1ldGFkYXRhKGNvbnN0IENhY2hlYWJsZU1ldGFkYXRhJik7CisKICAgICAvLyBUaGUgUmVz
b3VyY2VSZXNwb25zZSBzdWJjbGFzcyBtYXkgInNoYWRvdyIgdGhpcyBtZXRob2QgdG8gcHJvdmlk
ZSBwbGF0Zm9ybS1zcGVjaWZpYyBtZW1vcnkgdXNhZ2UgaW5mb3JtYXRpb24KICAgICB1bnNpZ25l
ZCBtZW1vcnlVc2FnZSgpIGNvbnN0CiAgICAgewpAQCAtMTI1LDYgKzE0OCw3IEBAIHByb3RlY3Rl
ZDoKICAgICBTdHJpbmcgbV9odHRwU3RhdHVzVGV4dDsKICAgICBIVFRQSGVhZGVyTWFwIG1faHR0
cEhlYWRlckZpZWxkczsKICAgICB0aW1lX3QgbV9sYXN0TW9kaWZpZWREYXRlOworICAgIENhY2hl
YWJsZU1ldGFkYXRhIG1fY2FjaGVhYmxlTWV0YWRhdGE7CiAKICAgICBib29sIG1faXNOdWxsIDog
MTsKICAgICAKQEAgLTE2MSw2ICsxODUsNyBAQCBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJl
c3BvbnNlRGF0YSA6CiAgICAgU3RyaW5nIG1faHR0cFN0YXR1c1RleHQ7CiAgICAgT3duUHRyPENy
b3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IG1faHR0cEhlYWRlcnM7CiAgICAgdGltZV90IG1f
bGFzdE1vZGlmaWVkRGF0ZTsKKyAgICBPd25QdHI8Q2FjaGVhYmxlTWV0YWRhdGE+IG1fY2FjaGVh
YmxlTWV0YWRhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmgJ
KHJldmlzaW9uIDU4MDMzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jl
c291cmNlUmVzcG9uc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fYXBwQ2FjaGVJRCgwKQogICAgICAgICAgICAg
LCBtX3dhc0ZldGNoZWRWaWFTUERZKGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzTXVsdGlwYXJ0
UGF5bG9hZChmYWxzZSkKKyAgICAgICAgICAgICwgbV9yZXNwb25zZVRpbWUoMCkKICAgICAgICAg
ewogICAgICAgICB9CiAKQEAgLTQ5LDYgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgLCBtX2FwcENhY2hlSUQoMCkKICAgICAgICAgICAgICwgbV93YXNGZXRjaGVkVmlh
U1BEWShmYWxzZSkKICAgICAgICAgICAgICwgbV9pc011bHRpcGFydFBheWxvYWQoZmFsc2UpCisg
ICAgICAgICAgICAsIG1fcmVzcG9uc2VUaW1lKDApCiAgICAgICAgIHsKICAgICAgICAgfQogCkBA
IC04OCw2ICs5MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX2lzTXVs
dGlwYXJ0UGF5bG9hZCA9IHZhbHVlOwogICAgICAgICB9CiAKKyAgICAgICAgbG9uZyBsb25nIHJl
c3BvbnNlVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VUaW1lOyB9CisgICAgICAgIHZv
aWQgc2V0UmVzcG9uc2VUaW1lKGxvbmcgbG9uZyByZXNwb25zZVRpbWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lOworICAgICAgICB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2U7CiAK
QEAgLTExNyw2ICsxMjUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFNl
dCB0byB0cnVlIGlmIHRoaXMgaXMgcGFydCBvZiBhIG11bHRpcGFydCByZXNwb25zZS4KICAgICAg
ICAgYm9vbCBtX2lzTXVsdGlwYXJ0UGF5bG9hZDsKKworICAgICAgICAvLyBUaGUgdGltZSBhdCB3
aGljaCB0aGUgcmVzcG9uc2UgaGVhZGVycyB3ZXJlIHJlY2VpdmVkLiAgRm9yIGNhY2hlZAorICAg
ICAgICAvLyByZXNwb25zZXMsIHRoaXMgdGltZSBjb3VsZCBiZSAiZmFyIiBpbiB0aGUgcGFzdC4K
KyAgICAgICAgbG9uZyBsb25nIG1fcmVzcG9uc2VUaW1lOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTgxNzYpCisrKyBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTAt
MDQtMjMgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYWJpbGl0eSB0byBz
dG9yZSBtZXRhZGF0YSBvbiBhIENhY2hlZFJlc291cmNlIHdoaWNoIGNhbiBiZQorICAgICAgICBj
YWNoZWQgYnkgdGhlIGVtYmVkZGluZyBhcHBsaWNhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3ODc0CisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
OgorICAgICAgICAqIHB1YmxpYy9XZWJDYWNoZWFibGVNZXRhZGF0YS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OldlYkNhY2hlYWJsZU1ldGFkYXRhKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6Om9wZXJhdG9yIFdlYkNvcmU6
OkNhY2hlYWJsZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRh
dGE6On5XZWJDYWNoZWFibGVNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNhY2hlYWJs
ZU1ldGFkYXRhOjp0eXBlSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDYWNoZWFibGVNZXRhZGF0
YTo6c2V0VHlwZUlEKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGVhYmxlTWV0YWRhdGE6OmRh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJDYWNoZWFibGVNZXRhZGF0YTo6c2V0RGF0YSk6Cisg
ICAgICAgICogcHVibGljL1dlYkRhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6V2ViRGF0YSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRhdGE6Om9wZXJhdG9yIHN0ZDo6dmVjdG9yPGNoYXI+KToKKyAgICAgICAgKiBw
dWJsaWMvV2ViRnJhbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVDbGllbnQ6
OmRpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEpOgorICAgICAgICAqIHB1YmxpYy9XZWJVUkxS
ZXNwb25zZS5oOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJ
bXBsOjpkaXNwYXRjaERpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEpOgorICAgICAgICAqIHNy
Yy9GcmFtZUxvYWRlckNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVVJMUmVzcG9uc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6cmVzcG9uc2VUaW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldFJlc3BvbnNlVGltZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpjYWNoZWFibGVNZXRhZGF0YSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZXRDYWNoZWFibGVNZXRhZGF0YSk6CisKIDIwMTAtMDQt
MjIgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNTgwMzMpCisrKyBXZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksNyBAQAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCaW5kaW5ncy5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYkNhY2hlLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2FjaGVh
YmxlTWV0YWRhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYW52YXMuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDbGlwYm9hcmQuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJDb2xvci5oJywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2Fj
aGVhYmxlTWV0YWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkNhY2hlYWJsZU1ldGFkYXRhLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNhY2hlYWJsZU1ldGFkYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYkNhY2hlYWJsZU1ldGFkYXRhX2gKKyNkZWZpbmUgV2ViQ2FjaGVhYmxlTWV0YWRh
dGFfaAorCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
CituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIENhY2hlYWJsZU1ldGFkYXRhOyB9CisjZWxzZQor
I2luY2x1ZGUgPHdlYmtpdC9nbHVlL3Jlc291cmNlX2xvYWRlcl9icmlkZ2UuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ2FjaGVhYmxlTWV0YWRhdGEgeworcHVi
bGljOgorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkNhY2hlYWJsZU1ldGFkYXRh
KGNvbnN0IFdlYkNvcmU6OkNhY2hlYWJsZU1ldGFkYXRhJiBjYWNoZWFibGVNZXRhZGF0YSkKKyAg
ICAgICAgOiBtX3R5cGVJRChjYWNoZWFibGVNZXRhZGF0YS50eXBlSUQoKSkKKyAgICAgICAgLCBt
X2RhdGEoY2FjaGVhYmxlTWV0YWRhdGEuZGF0YSgpKQorICAgIHsKKyAgICB9CisKKyAgICBvcGVy
YXRvciBXZWJDb3JlOjpDYWNoZWFibGVNZXRhZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICBX
ZWJDb3JlOjpDYWNoZWFibGVNZXRhZGF0YSBjYWNoZWFibGVNZXRhZGF0YTsKKyAgICAgICAgY2Fj
aGVhYmxlTWV0YWRhdGEuc2V0VHlwZUlEKHR5cGVJRCgpKTsKKyAgICAgICAgY2FjaGVhYmxlTWV0
YWRhdGEuc2V0RGF0YShkYXRhKCkpOworICAgICAgICByZXR1cm4gY2FjaGVhYmxlTWV0YWRhdGE7
CisgICAgfQorI2Vsc2UKKyAgICBXZWJDYWNoZWFibGVNZXRhZGF0YShjb25zdCB3ZWJraXRfZ2x1
ZTo6UmVzb3VyY2VMb2FkZXJCcmlkZ2U6OkNhY2hlYWJsZU1ldGFkYXRhJiBjYWNoZWFibGVNZXRh
ZGF0YSkKKyAgICAgICAgOiBtX3R5cGVJRChjYWNoZWFibGVNZXRhZGF0YS50eXBlX2lkKQorICAg
ICAgICAsIG1fZGF0YShjYWNoZWFibGVNZXRhZGF0YS5kYXRhKQorICAgIHsKKyAgICB9CisjZW5k
aWYKKworICAgIH5XZWJDYWNoZWFibGVNZXRhZGF0YSgpCisgICAgeworICAgIH0KKworICAgIFdF
QktJVF9BUEkgdW5zaWduZWQgdHlwZUlEKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3R5cGVJRDsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgc2V0VHlwZUlEKHVuc2lnbmVk
IHR5cGVJRCkKKyAgICB7CisgICAgICAgIG1fdHlwZUlEID0gdHlwZUlEOworICAgIH0KKworICAg
IFdFQktJVF9BUEkgV2ViRGF0YSBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2RhdGE7CisgICAgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIHNldERhdGEoY29uc3QgV2ViRGF0
YSYgZGF0YSkKKyAgICB7CisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgfQorCitwcml2YXRl
OgorICAgIHVuc2lnbmVkIG1fdHlwZUlEOworICAgIFdlYkRhdGEgbV9kYXRhOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEYXRh
LmgJKHJldmlzaW9uIDU4MDMzKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgU2hhcmVkQnVmZmVyOyB9CiBuYW1lc3BhY2Ug
V1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbHNlCisj
aW5jbHVkZSA8dmVjdG9yPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtOTgsNiAr
MTAwLDI4IEBAIHB1YmxpYzoKICAgICAgICAgYXNzaWduKGMuZGF0YSgpLCBjLnNpemUoKSk7CiAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CisKKyAgICBXZWJEYXRhKGNvbnN0IHN0ZDo6dmVj
dG9yPGNoYXI+JiBjKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgaWYgKGMuc2l6ZSgp
KQorICAgICAgICAgICAgYXNzaWduKCZjLmZyb250KCksIGMuc2l6ZSgpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmVzZXQoKTsKKyAgICB9CisKKyAgICBXZWJEYXRhJiBvcGVyYXRvcj0o
Y29uc3Qgc3RkOjp2ZWN0b3I8Y2hhcj4mIGMpCisgICAgeworICAgICAgICBpZiAoYy5zaXplKCkp
CisgICAgICAgICAgICBhc3NpZ24oJmMuZnJvbnQoKSwgYy5zaXplKCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXNldCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgb3BlcmF0b3Igc3RkOjp2ZWN0b3I8Y2hhcj4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6dmVjdG9yPGNoYXI+KGRhdGEoKSwgZGF0YSgpICsgc2l6ZSgpKTsKKyAgICB9CiAj
ZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lQ2xp
ZW50LmgJKHJldmlzaW9uIDU4MDMzKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFt
ZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNzIFdlYkFwcGxpY2F0
aW9uQ2FjaGVIb3N0Q2xpZW50OworY2xhc3MgV2ViQ2FjaGVhYmxlTWV0YWRhdGE7CiBjbGFzcyBX
ZWJDb29raWVKYXI7CiBjbGFzcyBXZWJEYXRhU291cmNlOwogY2xhc3MgV2ViRm9ybUVsZW1lbnQ7
CkBAIC0yNTMsNiArMjU0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRMb2FkUmVz
b3VyY2VGcm9tTWVtb3J5Q2FjaGUoCiAgICAgICAgIFdlYkZyYW1lKiwgY29uc3QgV2ViVVJMUmVx
dWVzdCYsIGNvbnN0IFdlYlVSTFJlc3BvbnNlJikgeyB9CiAKKyAgICAvLyBDYWNoZWFibGUgbWV0
YWRhdGEgaGFzIGJlZW4gZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gcmVzcG9uc2UuCisgICAgdmly
dHVhbCB2b2lkIGRpZEdlbmVyYXRlQ2FjaGVhYmxlTWV0YWRhdGEoY29uc3QgV2ViVVJMUmVzcG9u
c2UmKSB7IH0KKwogICAgIC8vIFRoaXMgZnJhbWUgaGFzIGRpc3BsYXllZCBpbmFjdGl2ZSBjb250
ZW50IChzdWNoIGFzIGFuIGltYWdlKSBmcm9tIGFuCiAgICAgLy8gaW5zZWN1cmUgc291cmNlLiAg
SW5hY3RpdmUgY29udGVudCBjYW5ub3Qgc3ByZWFkIHRvIG90aGVyIGZyYW1lcy4KICAgICB2aXJ0
dWFsIHZvaWQgZGlkRGlzcGxheUluc2VjdXJlQ29udGVudChXZWJGcmFtZSopIHsgfQpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkxSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMUmVzcG9uc2UuaAkocmV2aXNpb24gNTgwMzMpCisr
KyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTFJlc3BvbnNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBSZXNvdXJjZVJlc3Bv
bgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgV2ViQ2FjaGVhYmxlTWV0YWRhdGE7CiBj
bGFzcyBXZWJDU3RyaW5nOwogY2xhc3MgV2ViSFRUUEhlYWRlclZpc2l0b3I7CiBjbGFzcyBXZWJT
dHJpbmc7CkBAIC03Miw2ICs3Myw5IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfQVBJIFdlYlVSTCB1
cmwoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIHZvaWQgc2V0VVJMKGNvbnN0IFdlYlVSTCYpOwog
CisgICAgV0VCS0lUX0FQSSBsb25nIGxvbmcgcmVzcG9uc2VUaW1lKCkgY29uc3Q7CisgICAgV0VC
S0lUX0FQSSB2b2lkIHNldFJlc3BvbnNlVGltZShsb25nIGxvbmcpOworCiAgICAgV0VCS0lUX0FQ
SSBXZWJTdHJpbmcgbWltZVR5cGUoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIHZvaWQgc2V0TUlN
RVR5cGUoY29uc3QgV2ViU3RyaW5nJik7CiAKQEAgLTk5LDYgKzEwMyw5IEBAIHB1YmxpYzoKICAg
ICBXRUJLSVRfQVBJIGRvdWJsZSBsYXN0TW9kaWZpZWREYXRlKCkgY29uc3Q7CiAgICAgV0VCS0lU
X0FQSSB2b2lkIHNldExhc3RNb2RpZmllZERhdGUoZG91YmxlKTsKIAorICAgIFdFQktJVF9BUEkg
V2ViQ2FjaGVhYmxlTWV0YWRhdGEgY2FjaGVhYmxlTWV0YWRhdGEoKSBjb25zdDsKKyAgICBXRUJL
SVRfQVBJIHZvaWQgc2V0Q2FjaGVhYmxlTWV0YWRhdGEoY29uc3QgV2ViQ2FjaGVhYmxlTWV0YWRh
dGEmKTsKKwogICAgIFdFQktJVF9BUEkgYm9vbCBpc0NvbnRlbnRGaWx0ZXJlZCgpIGNvbnN0Owog
ICAgIFdFQktJVF9BUEkgdm9pZCBzZXRJc0NvbnRlbnRGaWx0ZXJlZChib29sKTsKIApJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNp
b24gNTgwMzMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJQbHVnaW5EYXRh
LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YUNocm9taXVtLmgiCiAjaW5jbHVkZSAiU3RyaW5nRXh0
cmFzLmgiCisjaW5jbHVkZSAiV2ViQ2FjaGVhYmxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJXZWJE
YXRhU291cmNlSW1wbC5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViRm9ybUVsZW1lbnQuaCIKQEAgLTQwNiw2ICs0MDcsMTIgQEAgYm9vbCBGcmFt
ZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoRGlkTAogICAgIHJldHVybiBmYWxzZTsgIC8vIERv
IG5vdCBzdXBwcmVzcyByZW1haW5pbmcgbm90aWZpY2F0aW9ucwogfQogCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRHZW5lcmF0ZUNhY2hlYWJsZU1ldGFkYXRhKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc291cmNlUmVzcG9uc2UpCit7CisgICAgaWYgKG1fd2ViRnJh
bWUtPmNsaWVudCgpKQorICAgICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+ZGlkR2VuZXJhdGVD
YWNoZWFibGVNZXRhZGF0YShXcmFwcGVkUmVzb3VyY2VSZXNwb25zZShyZXNvdXJjZVJlc3BvbnNl
KSk7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaERpZEhhbmRsZU9u
bG9hZEV2ZW50cygpCiB7CiAgICAgaWYgKG1fd2ViRnJhbWUtPmNsaWVudCgpKQpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA1ODAz
MykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDYgKzg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5n
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlk
TG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEdlbmVyYXRl
Q2FjaGVhYmxlTWV0YWRhdGEoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpOwogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9h
ZCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCk7
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAkocmV2aXNpb24gNTgw
MzMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgog
CisjaW5jbHVkZSAiV2ViQ2FjaGVhYmxlTWV0YWRhdGEuaCIKICNpbmNsdWRlICJXZWJIVFRQSGVh
ZGVyVmlzaXRvci5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5o
IgpAQCAtOTMsNiArOTQsMTYgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0VVJMKGNvbnN0IFdl
YlVSTAogICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRVUkwodXJsKTsKIH0K
IAorbG9uZyBsb25nIFdlYlVSTFJlc3BvbnNlOjpyZXNwb25zZVRpbWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+cmVzcG9uc2VUaW1lKCk7Cit9
CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldFJlc3BvbnNlVGltZShsb25nIGxvbmcgcmVzcG9u
c2VUaW1lKSAKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0UmVzcG9u
c2VUaW1lKHJlc3BvbnNlVGltZSk7Cit9CisKIFdlYlN0cmluZyBXZWJVUkxSZXNwb25zZTo6bWlt
ZVR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25z
ZS0+bWltZVR5cGUoKTsKQEAgLTIzMCw2ICsyNDEsMTcgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6
c2V0QXBwQ2FjaGVNYW5pZmVzdAogICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5z
ZXRBcHBDYWNoZU1hbmlmZXN0VVJMKHVybCk7CiB9CiAKK1dlYkNhY2hlYWJsZU1ldGFkYXRhIFdl
YlVSTFJlc3BvbnNlOjpjYWNoZWFibGVNZXRhZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5jYWNoZWFibGVNZXRhZGF0YSgpOworfQorCit2
b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRDYWNoZWFibGVNZXRhZGF0YShjb25zdCBXZWJDYWNoZWFi
bGVNZXRhZGF0YSYgY2FjaGVhYmxlTWV0YWRhdGEpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291
cmNlUmVzcG9uc2UtPnNldENhY2hlYWJsZU1ldGFkYXRhKGNhY2hlYWJsZU1ldGFkYXRhKTsKK30K
KworCiBXZWJDU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpzZWN1cml0eUluZm8oKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBnZXRTZWN1cml0eUluZm8gaXMgbWlzbmFtZWQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54957</attachid>
            <date>2010-05-03 13:28:52 -0700</date>
            <delta_ts>2010-05-04 17:35:52 -0700</delta_ts>
            <desc>Pretty much rewritten to correct interface and more robustly store metadata.</desc>
            <filename>37874-5.txt</filename>
            <type>text/plain</type>
            <size>29730</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODY5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMTAtMDUtMDMgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcm92aWRlIG1lY2hhbmlzbSB0byBzdG9yZSBjYWNoZWQgbWV0YWRhdGEgb24gYSBDYWNoZWRS
ZXNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3ODc0CisKKyAgICAgICAgVGVzdDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhY2hlZE1ldGFk
YXRhTWFwVGVzdC5jcHAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBsb2Fk
ZXIvQ2FjaGVkTWV0YWRhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRh
ZGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhOjp+Q2FjaGVk
TWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGE6OmRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkTWV0YWRhdGE6OkNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVk
TWV0YWRhdGFNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRh
TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGFNYXA6OnNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGFNYXA6OnNlcmlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YU1hcDo6ZGVzZXJpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGFNYXA6OmFwcGVuZFZhbHVlVG9CdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGFNYXA6Om1heWJlUmVhZFZhbHVlRnJvbUJ1ZmZlcik6
CisgICAgICAgICogbG9hZGVyL0NhY2hlZE1ldGFkYXRhTWFwLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGFNYXA6On5DYWNoZWRNZXRhZGF0YU1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YU1hcDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZE1ldGFkYXRhTWFwOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGFN
YXA6Omhhcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YU1hcDo6Q2FjaGVkTWV0
YWRhdGFNYXApOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c2V0Q2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc291cmNlSGFuZGxlQWZ0ZXJDYWNoaW5n
TWV0YWRhdGEpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkUmVzb3VyY2U6OmNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlQ2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hl
ZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaDoKKyAgICAg
ICAgKiBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlN1YnJlc291cmNlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEpOgorICAg
ICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0
OjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAqIGxvYWRlci9sb2FkZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYWNoZU1ldGFkYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVDbGllbnQ6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6CisKIDIwMTAtMDUtMDMgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1ODMwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzE5LDYgKzE3MTksOSBAQAogICAgICAgICAgICAgJ2xvYWRl
ci93aW4vRnJhbWVMb2FkZXJXaW4uY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGUuY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGUuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0Nh
Y2hlZE1ldGFkYXRhLmgnLAorICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRNZXRhZGF0YU1hcC5j
cHAnLAorICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRNZXRhZGF0YU1hcC5oJywKICAgICAgICAg
ICAgICdsb2FkZXIvQ2FjaGVQb2xpY3kuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0NhY2hlZENT
U1N0eWxlU2hlZXQuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5oJywKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2lmbmRlZiBDYWNoZWRNZXRhZGF0YV9oCisjZGVmaW5lIENhY2hlZE1ldGFkYXRh
X2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBIGJhc2UgY2xhc3MgZm9yIHN0b3Jpbmcg
bWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgQ2FjaGVkUmVzb3VyY2UuCisvLworLy8gRWFjaCB0
eXBlIG9mIGNhY2hlYWJsZSBtZXRhZGF0YSBtdXN0IHN1YmNsYXNzIHRoaXMgYW5kIHByb3ZpZGUg
YSByYW5kb21seQorLy8gc2VsZWN0ZWQgdW5pcXVlIGlkZW50aWZpZXIgaW4gdGhlIGZvcm0gb2Yg
YSBwdWJsaWMgZW51bS4gRm9yIGV4YW1wbGU6CisvLworLy8gY2xhc3MgTXlDYWNoZWRNZXRhZGF0
YSA6IHB1YmxpYyBDYWNoZWRNZXRhZGF0YSB7CisvLyBwdWJsaWM6CisvLyAgICAgZW51bSB7IGlk
ID0gMHgxMjM0NTY3OCB9OworLy8gfTsKKy8vCisvLyBTdWJjbGFzc2VzIG11c3Qgbm90IGNvbnRh
aW4gbm9uLXN0YXRpYyBtZW1iZXIgdmFyaWFibGVzIGJlY2F1c2UgdGhleSB3b3VsZAorLy8gbGVh
ayBtZW1vcnkgKGVuZm9yY2VkIHZpYSBBU1NFUlQpLgorY2xhc3MgQ2FjaGVkTWV0YWRhdGEgOiBw
dWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBDYWNoZWRNZXRhZGF0YSog
Y3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBDYWNoZWRNZXRhZGF0YShkYXRhLCBzaXplKTsKKyAgICB9CisKKyAgICB+Q2FjaGVk
TWV0YWRhdGEoKSB7IH0KKworICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2J1ZmZlci5kYXRhKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVm
ZmVyLnNpemUoKTsgfQorCitwcml2YXRlOgorICAgIENhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEs
IHNpemUpOworICAgIH0KKworICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKK307CisKK30KKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRNZXRhZGF0YU1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkTWV0YWRhdGFNYXAuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkTWV0YWRhdGFNYXAuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExMiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJDYWNoZWRNZXRhZGF0YU1hcC5oIgorCisjaW5jbHVkZSAiQ2FjaGVkTWV0YWRhdGEuaCIKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gc3RhdGljCitQYXNzT3duUHRyPENhY2hlZE1ldGFkYXRh
TWFwPiBDYWNoZWRNZXRhZGF0YU1hcDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gbmV3IENhY2hl
ZE1ldGFkYXRhTWFwKCk7Cit9CisKK3NpemVfdCBDYWNoZWRNZXRhZGF0YU1hcDo6c2l6ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbWFwLnNpemUoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IENhY2hlZE1ldGFkYXRhTWFwOjpzZXJpYWxpemUoKSBjb25zdAoreworICAgIC8vIFNl
cmlhbGl6YXRpb24gZm9ybWF0OgorICAgIC8vIFtNQUdJQ10sW0RBVEExW0lELFNJWkUsREFUQV1d
LFtEQVRBMltJRCxTSVpFLERBVEFdXSwuLi4KKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZm
ZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOworICAgIGFwcGVuZFZhbHVlVG9CdWZmZXIoJm1h
Z2ljTnVtYmVyLCBidWZmZXIpOworICAgIGZvciAoQ2FjaGVkTWV0YWRhdGFIYXNoTWFwOjpjb25z
dF9pdGVyYXRvciBpID0gbV9tYXAuYmVnaW4oKTsgaSAhPSBtX21hcC5lbmQoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGlkID0gaS0+Zmlyc3Q7CisgICAgICAgIENhY2hlZE1ldGFk
YXRhKiBkYXRhID0gaS0+c2Vjb25kOworICAgICAgICBjb25zdCBzaXplX3QgZGF0YVNpemUgPSBk
YXRhLT5zaXplKCk7CisgICAgICAgIGFwcGVuZFZhbHVlVG9CdWZmZXIoJmlkLCBidWZmZXIpOwor
ICAgICAgICBhcHBlbmRWYWx1ZVRvQnVmZmVyKCZkYXRhU2l6ZSwgYnVmZmVyKTsKKyAgICAgICAg
YnVmZmVyLT5hcHBlbmQoZGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgfQorICAgIHJldHVy
biBidWZmZXI7Cit9CisKK3ZvaWQgQ2FjaGVkTWV0YWRhdGFNYXA6OmRlc2VyaWFsaXplKGNvbnN0
IGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCit7CisgICAgQVNTRVJUKGJ1ZmZlcik7
CisKKyAgICBzaXplX3QgYnVmZmVyUG9zaXRpb24gPSAwOworCisgICAgbV9tYXAuY2xlYXIoKTsK
KworICAgIC8vIEZpcnN0IGNoZWNrIGZvciB0aGUgY29ycmVjdCBtYWdpYyBudW1iZXIuCisgICAg
dW5zaWduZWQgdGVzdE1hZ2ljTnVtYmVyOworICAgIGlmIChtYXliZVJlYWRWYWx1ZUZyb21CdWZm
ZXIoJnRlc3RNYWdpY051bWJlciwgJmJ1ZmZlclBvc2l0aW9uLCBidWZmZXIsIGJ1ZmZlclNpemUp
ICYmIHRlc3RNYWdpY051bWJlciA9PSBtYWdpY051bWJlcikgeworICAgICAgICB1bnNpZ25lZCBp
ZDsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplOworICAgICAgICAvLyBSZWFkIGVhY2ggZGF0YSBz
ZWdtZW50LgorICAgICAgICB3aGlsZSAobWF5YmVSZWFkVmFsdWVGcm9tQnVmZmVyKCZpZCwgJmJ1
ZmZlclBvc2l0aW9uLCBidWZmZXIsIGJ1ZmZlclNpemUpCisgICAgICAgICAgICAgICAmJiBtYXli
ZVJlYWRWYWx1ZUZyb21CdWZmZXIoJmRhdGFTaXplLCAmYnVmZmVyUG9zaXRpb24sIGJ1ZmZlciwg
YnVmZmVyU2l6ZSkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBkYXRhU2l6ZSBoYXMgbGllZCB0byB1
cyB3aGljaCBtZWFucyB0aGUgZm9ybWF0IGlzIGNvcnJ1cHQuCisgICAgICAgICAgICBpZiAoYnVm
ZmVyU2l6ZSA8IGJ1ZmZlclBvc2l0aW9uICsgZGF0YVNpemUpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBDYWNoZWRNZXRhZGF0YSogY2FjaGVkTWV0YWRhdGEgPSBDYWNoZWRN
ZXRhZGF0YTo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciArIGJ1
ZmZlclBvc2l0aW9uKSwgZGF0YVNpemUpOworICAgICAgICAgICAgYnVmZmVyUG9zaXRpb24gKz0g
ZGF0YVNpemU7CisgICAgICAgICAgICBtX21hcC5zZXQoaWQsIGNhY2hlZE1ldGFkYXRhKTsKKyAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSWYgdGhlIGZvcm1hdCB3YXMgbm90IHJlYWQgcGVyZmVj
dGx5LCBjbGVhciB0aGUgZW50aXJlIG1hcC4KKyAgICBpZiAoYnVmZmVyUG9zaXRpb24gIT0gYnVm
ZmVyU2l6ZSkKKyAgICAgICAgbV9tYXAuY2xlYXIoKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+
Cit2b2lkIENhY2hlZE1ldGFkYXRhTWFwOjphcHBlbmRWYWx1ZVRvQnVmZmVyKGNvbnN0IFQqIHZh
bHVlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKSBjb25zdAoreworICAgIGJ1ZmZl
ci0+YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSwgc2l6ZW9mKFQp
KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+Citib29sIENhY2hlZE1ldGFkYXRhTWFwOjptYXli
ZVJlYWRWYWx1ZUZyb21CdWZmZXIoVCogdmFsdWUsIHNpemVfdCogYnVmZmVyUG9zaXRpb24sIGNv
bnN0IGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpIGNvbnN0Cit7CisgICAgQVNTRVJU
KHZhbHVlKTsKKyAgICBBU1NFUlQoYnVmZmVyUG9zaXRpb24pOworCisgICAgLy8gTWFrZSBzdXJl
IHRoZXJlIGlzIGVub3VnaCBkYXRhIGJlZm9yZSByZWFkaW5nCisgICAgY29uc3Qgc2l6ZV90IHJl
YWRTaXplID0gc2l6ZW9mKFQpOworICAgIGlmIChidWZmZXJTaXplIDwgKmJ1ZmZlclBvc2l0aW9u
ICsgcmVhZFNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICp2YWx1ZSA9ICpyZWlu
dGVycHJldF9jYXN0PFQqPihjb25zdF9jYXN0PGNoYXIqPihidWZmZXIgKyAqYnVmZmVyUG9zaXRp
b24pKTsKKyAgICAqYnVmZmVyUG9zaXRpb24gKz0gcmVhZFNpemU7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkTWV0YWRhdGFNYXAuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhTWFwLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDYWNoZWRNZXRhZGF0YU1hcF9oCisjZGVmaW5l
IENhY2hlZE1ldGFkYXRhTWFwX2gKKworI2luY2x1ZGUgIkNhY2hlZE1ldGFkYXRhLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRCdWZmZXI7CisKKy8vIEEgY29udGFpbmVyIHdo
aWNoIG1hcHMgQ2FjaGVkTWV0YWRhdGEgc3ViY2xhc3MgdHlwZXMgdG8gaW5zdGFuY2VzLgorLy8K
Ky8vIE9uZSBpbnN0YW5jZSBtYXkgYmUgc3RvcmVkIHBlciB0eXBlIGFuZCBlYWNoIHN0b3JlZCBp
bnN0YW5jZSBtYXkgYmUgcmV0cmlldmVkCisvLyBieSBpdHMgdHlwZS4gVmVyc2lvbmVkIHNlcmlh
bGl6YXRpb24gaXMgc3VwcG9ydGVkLgorY2xhc3MgQ2FjaGVkTWV0YWRhdGFNYXAgOiBwdWJsaWMg
Tm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlZE1ldGFk
YXRhTWFwPiBjcmVhdGUoKTsKKyAgICB+Q2FjaGVkTWV0YWRhdGFNYXAoKQorICAgIHsKKyAgICAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fbWFwKTsKKyAgICB9CisKKyAgICAvLyBHZXRzIHRoZSBpbnN0
YW5jZSBvZiB0eXBlIFQgb3IgMC4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBUKiBnZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGhhczxUPigpKQorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQqPihtX21hcC5nZXQoVDo6aWQpKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgLy8gU2V0cyB0aGUgaW5zdGFuY2Ugb2YgdHlwZSBULCBvdmVycmlkaW5nIGFu
eSBwcmV2aW91cyBpbnN0YW5jZXMuCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgdm9pZCBz
ZXQoVCogaXRlbSkKKyAgICB7CisgICAgICAgIC8vIFN1YmNsYXNzZXMgb2YgQ2FjaGVkTWV0YWRh
dGEgbXVzdCBiZSBvZiB0aGUgc2FtZSBzaXplIGluIG9yZGVyIGZvcgorICAgICAgICAvLyB0aGUg
c3RhdGljX2Nhc3RzIHRvIHdvcmsgcHJvcGVybHkuIFRoaXMgbWVhbnMgbm8gbWVtYmVyIHZhcmlh
Ymxlcy4KKyAgICAgICAgQVNTRVJUKHNpemVvZihDYWNoZWRNZXRhZGF0YSkgPT0gc2l6ZW9mKFQp
KTsKKyAgICAgICAgbV9tYXAuc2V0KFQ6OmlkLCBzdGF0aWNfY2FzdDxDYWNoZWRNZXRhZGF0YSo+
KGl0ZW0pKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBib29sIGhhcygp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAuY29udGFpbnMoVDo6aWQpOworICAg
IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIGEgU2hhcmVk
QnVmZmVyIHdoaWNoLCB3aGVuIHBhc3NlZCB0byBkZXNlcmlhbGl6ZSwgd2lsbCByZXN0b3JlCisg
ICAgLy8gdGhpcyB0byBpdHMgY3VycmVudCBzdGF0ZS4KKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gc2VyaWFsaXplKCkgY29uc3Q7CisKKyAgICAvLyBSZXN0b3JlcyB0aGlzIHRvIHRoZSBz
dGF0ZSBpdCB3YXMgaW4gd2hlbiBidWZmZXIgd2FzIHNlcmlhbGl6ZWQuIElmIHRoZQorICAgIC8v
IGJ1ZmZlciBkb2VzIG5vdCB2YWxpZGF0ZSwgdGhpcyBpcyBjbGVhcmVkLgorICAgIHZvaWQgZGVz
ZXJpYWxpemUoY29uc3QgY2hhciosIHNpemVfdCk7CisKK3ByaXZhdGU6CisgICAgQ2FjaGVkTWV0
YWRhdGFNYXAoKSB7IH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPiB2b2lkIGFwcGVuZFZhbHVl
VG9CdWZmZXIoY29uc3QgVCosIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgY29uc3Q7CisKKyAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gYm9vbCBtYXliZVJlYWRWYWx1ZUZyb21CdWZmZXIoVCosIHNp
emVfdCosIGNvbnN0IGNoYXIqLCBzaXplX3QpIGNvbnN0OworCisgICAgLy8gQSByYW5kb21seSBz
ZWxlY3RlZCBtYWdpYyBudW1iZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgZGF0YQor
ICAgIC8vIHNlcmlhbGl6ZWQgYnkgdGhpcyBtZXRob2QuIElmIHRoZSBzZXJpYWxpemF0aW9uIGZv
cm1hdCBpcyBjaGFuZ2VkIGluIGEgd2F5CisgICAgLy8gdGhhdCBpcyBub3QgYmFja3dhcmQgY29t
cGF0aWJsZSwgdGhpcyBtdXN0IGJlIGNoYW5nZWQgYXMgd2VsbC4KKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWFnaWNOdW1iZXIgPSAweDgwMjk0MzA1OworCisgICAgdHlwZWRlZiBIYXNoTWFw
PHVuc2lnbmVkLCBDYWNoZWRNZXRhZGF0YSo+IENhY2hlZE1ldGFkYXRhSGFzaE1hcDsKKyAgICBD
YWNoZWRNZXRhZGF0YUhhc2hNYXAgbV9tYXA7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gNTgzMDQpCisrKyBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEzICsyNSwxNSBAQAog
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAKICNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1
ZGUgIkNhY2hlZE1ldGFkYXRhTWFwLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
aCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCiAjaW5jbHVkZSAiUHVyZ2VhYmxlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KQEAgLTE2NCw2ICsxNjYsMTMgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9u
c2UoY29uc3QgUgogICAgIG1fcmVzcG9uc2VUaW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwogfQog
Cit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIW1fY2FjaGVkTWV0YWRhdGFNYXApCisgICAgICAg
IG1fY2FjaGVkTWV0YWRhdGFNYXAuc2V0KENhY2hlZE1ldGFkYXRhTWFwOjpjcmVhdGUoKS5yZWxl
YXNlKCkpOworICAgIG1fY2FjaGVkTWV0YWRhdGFNYXAtPmRlc2VyaWFsaXplKGRhdGEsIHNpemUp
OworfQorCiB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXF1ZXN0KFJlcXVlc3QqIHJlcXVlc3Qp
CiB7CiAgICAgaWYgKHJlcXVlc3QgJiYgIW1fcmVxdWVzdCkKQEAgLTM4NCw3ICszOTMsMjIgQEAg
dm9pZCBDYWNoZWRSZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlcgogICAgICAgICBtX3Jlc3Bv
bnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwogICAgIH0KIH0K
LSAgICAKKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6dXBkYXRlUmVzb3VyY2VIYW5kbGVBZnRlckNh
Y2hpbmdNZXRhZGF0YSgpCit7CisgICAgQVNTRVJUKG1fY2FjaGVkTWV0YWRhdGFNYXApOworCisg
ICAgLy8gRklYTUU6IFRoZSBpbmZyYXN0cnVjdHVyZSBpcyBpbiBwbGFjZSB0byBzdXBwb3J0IG11
bHRpcGxlIHR5cGVzIG9mCisgICAgLy8gbWV0YWRhdGEgb24gdGhlIHNhbWUgcmVzb3VyY2UuIEhv
d2V2ZXIsIGVhY2ggdGltZSBPTkUgbWV0YWRhdGEgaXMgc2V0LAorICAgIC8vIEFMTCB0eXBlcyBv
ZiBtZXRhZGF0YSB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gdGhlIGVtYmVkZGluZyBhcHBsaWNhdGlv
bi4KKyAgICAvLyBJdCB3b3VsZCBiZSBiZXR0ZXIgbm90IHRvIHJlc2VuZCBkYXRhLiBFdmVuIHRo
b3VnaCBldmVyeXRoaW5nIHdpbGwgd29yaworICAgIC8vIGlmIHRoaXMgQVNTRVJUIGlzIHJlbW92
ZWQsIHdoZW4gaXQgaXMgdHJpZ2dlcmVkLCBhIGJhdGNoaW5nIG1lY2hhbmlzbQorICAgIC8vIHNo
b3VsZCBiZSBjb25zaWRlcmVkLgorICAgIEFTU0VSVChtX2NhY2hlZE1ldGFkYXRhTWFwLT5zaXpl
KCkgPT0gMSk7CisKKyAgICBSZXNvdXJjZUhhbmRsZTo6Y2FjaGVNZXRhZGF0YShtX3Jlc3BvbnNl
LCBtX2NhY2hlZE1ldGFkYXRhTWFwLT5zZXJpYWxpemUoKSk7Cit9CisKIGJvb2wgQ2FjaGVkUmVz
b3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9sb2FkaW5n
IHx8IG1fZXJyb3JPY2N1cnJlZCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNp
b24gNTgzMDQpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaWZuZGVmIENhY2hlZFJlc291cmNlX2gKICNkZWZpbmUg
Q2FjaGVkUmVzb3VyY2VfaAogCisjaW5jbHVkZSAiQ2FjaGVkTWV0YWRhdGFNYXAuaCIKICNpbmNs
dWRlICJDYWNoZVBvbGljeS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMzksNiArNDAsNyBAQCBjbGFzcyBDYWNoZTsKIGNs
YXNzIENhY2hlZFJlc291cmNlQ2xpZW50OwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNl
OwogY2xhc3MgRG9jTG9hZGVyOworY2xhc3MgRnJhbWU7CiBjbGFzcyBJbnNwZWN0b3JSZXNvdXJj
ZTsKIGNsYXNzIFJlcXVlc3Q7CiBjbGFzcyBQdXJnZWFibGVCdWZmZXI7CkBAIC0xNDIsNiArMTQ0
LDI5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzcG9uc2U7IH0KIAorICAgIC8vIFNldHMgdGhlIG1ldGFkYXRhIHJldHJpZXZlZCBm
cm9tIHRoZSBwbGF0Zm9ybSdzIGNhY2hlLgorICAgIHZvaWQgc2V0Q2FjaGVkTWV0YWRhdGEoY29u
c3QgY2hhciosIHNpemVfdCk7CisKKyAgICAvLyBDYWNoZXMgdGhlIGdpdmVuIG1ldGFkYXRhIGlu
IGFzc29jaWF0aW9uIHdpdGggdGhpcyByZXNvdXJjZSBhbmQgc3VnZ2VzdHMKKyAgICAvLyB0aGF0
IHRoZSBwbGF0Zm9ybSBwZXJzaXN0IGl0LgorICAgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgdm9p
ZCBjYWNoZU1ldGFkYXRhKFQqIGRhdGEpCisgICAgeworICAgICAgICBpZiAoIW1fY2FjaGVkTWV0
YWRhdGFNYXApCisgICAgICAgICAgICBtX2NhY2hlZE1ldGFkYXRhTWFwLnNldChDYWNoZWRNZXRh
ZGF0YU1hcDo6Y3JlYXRlKCkucmVsZWFzZSgpKTsKKyAgICAgICAgbV9jYWNoZWRNZXRhZGF0YU1h
cC0+c2V0KGRhdGEpOworICAgICAgICB1cGRhdGVSZXNvdXJjZUhhbmRsZUFmdGVyQ2FjaGluZ01l
dGFkYXRhKCk7CisgICAgfQorCisgICAgLy8gR2V0cyB0aGUgbWV0YWRhdGEgb2YgdGhlIHRoZSBn
aXZlbiB0eXBlIG9yIDAuCisgICAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICBUKiBjYWNoZWRNZXRh
ZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9jYWNoZWRNZXRhZGF0YU1hcCkKKyAg
ICAgICAgICAgIHJldHVybiBtX2NhY2hlZE1ldGFkYXRhTWFwLT5nZXQ8VD4oKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCiAgICAgYm9vbCBjYW5EZWxldGUoKSBjb25zdCB7IHJldHVybiAh
aGFzQ2xpZW50cygpICYmICFtX3JlcXVlc3QgJiYgIW1fcHJlbG9hZENvdW50ICYmICFtX2hhbmRs
ZUNvdW50ICYmICFtX3Jlc291cmNlVG9SZXZhbGlkYXRlICYmICFtX3Byb3h5UmVzb3VyY2U7IH0K
IAogICAgIGJvb2wgaXNFeHBpcmVkKCkgY29uc3Q7CkBAIC0yMTMsOSArMjM4LDEyIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7CiAgICAgdm9pZCB1cGRh
dGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbGlk
YXRpbmdSZXNwb25zZSk7CiAKKyAgICB2b2lkIHVwZGF0ZVJlc291cmNlSGFuZGxlQWZ0ZXJDYWNo
aW5nTWV0YWRhdGEoKTsKKwogICAgIGRvdWJsZSBjdXJyZW50QWdlKCkgY29uc3Q7CiAgICAgZG91
YmxlIGZyZXNobmVzc0xpZmV0aW1lKCkgY29uc3Q7CiAKKyAgICBtdXRhYmxlIE93blB0cjxDYWNo
ZWRNZXRhZGF0YU1hcD4gbV9jYWNoZWRNZXRhZGF0YU1hcDsgLy8gTGF6eQogICAgIHVuc2lnbmVk
IG1fZW5jb2RlZFNpemU7CiAgICAgdW5zaWduZWQgbV9kZWNvZGVkU2l6ZTsKICAgICB1bnNpZ25l
ZCBtX2FjY2Vzc0NvdW50OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA1
ODMwNCkKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDYgKzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9uZyBsb25nIGxlbmd0aFJlY2Vp
dmVkLCBib29sIGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2Fj
aGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCkgeyB9CiAgICAgICAgIHZvaWQgd2lsbFN0b3BC
dWZmZXJpbmdEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZygpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNv
dXJjZUVycm9yJik7CkBAIC05Myw2ICs5NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9u
ZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNl
aXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSB7IGRpZFJlY2VpdmVD
YWNoZWRNZXRhZGF0YShkYXRhLCBsZW5ndGgpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOwpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNTgzMDQpCisrKyBXZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsMTggQEAg
dm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoYwogICAgICAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgbGVuZ3RoKTsKIH0KIAordm9pZCBTdWJyZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgpCit7CisgICAgLy8gUmVmZXJlbmNlIHRoZSBvYmplY3QgaW4gdGhpcyBtZXRob2Qg
c2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8KKyAgICAvLyBhbnl0aGluZyBp
bmNsdWRpbmcgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0OyBvbmUg
ZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYuCisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBwcm90ZWN0KHRoaXMpOworICAgIAorICAgIC8vIEEgc3VicmVzb3VyY2UgbG9hZGVyIGRvZXMg
bm90IGxvYWQgbXVsdGlwYXJ0IHNlY3Rpb25zIHByb2dyZXNzaXZlbHkuCisgICAgLy8gU28gZG9u
J3QgZGVsaXZlciBhbnkgZGF0YSB0byB0aGUgbG9hZGVyIHlldC4KKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEodGhpcywgZGF0YSwg
bGVuZ3RoKTsKK30KKwogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZygp
CiB7CiAgICAgaWYgKGNhbmNlbGxlZCgpKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5oCShyZXZpc2lvbiA1ODMwNCkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVz
U2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9u
ZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29sIGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgdmlydHVhbCBib29sIHNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDU4MzA0KQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhS
ZWNlaXZlZCovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8p
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVy
KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25z
dCBSZXNvdXJjZUVycm9yJikgeyB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDU4
MzA0KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUx
LDYgKzU1MSwyMCBAQCB2b2lkIExvYWRlcjo6SG9zdDo6ZGlkUmVjZWl2ZURhdGEoU3VicmVzCiAg
ICAgICAgIHJlc291cmNlLT5kYXRhKGxvYWRlci0+cmVzb3VyY2VEYXRhKCksIGZhbHNlKTsKIH0K
ICAgICAKK3ZvaWQgTG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVz
b3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCit7CisgICAg
UmVmUHRyPEhvc3Q+IHByb3RlY3Rvcih0aGlzKTsKKworICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBt
X3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVyKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAg
IHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IHJlcXVlc3QtPmNhY2hl
ZFJlc291cmNlKCk7ICAgIAorICAgIEFTU0VSVCghcmVzb3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3Io
KSk7CisKKyAgICByZXNvdXJjZS0+c2V0Q2FjaGVkTWV0YWRhdGEoZGF0YSwgc2l6ZSk7Cit9Cisg
ICAgCiB2b2lkIExvYWRlcjo6SG9zdDo6Y2FuY2VsUGVuZGluZ1JlcXVlc3RzKFJlcXVlc3RRdWV1
ZSYgcmVxdWVzdHNQZW5kaW5nLCBEb2NMb2FkZXIqIGRvY0xvYWRlcikKIHsKICAgICBSZXF1ZXN0
UXVldWUgcmVtYWluaW5nOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHJldmlzaW9uIDU4MzA0KQorKysgV2ViQ29y
ZS9sb2FkZXIvbG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29u
c3QgY2hhciosIGludCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hl
ZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7CiAgICAgICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciopOwog
ICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25z
dCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gNTgzMDQpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsNCArMTQ1LDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cHJlcGFyZUZvclVSTChjb25zdAog
fQogI2VuZGlmCiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikKK3sKKyAgICAvLyBPcHRp
b25hbGx5IGltcGxlbWVudGVkIGJ5IHBsYXRmb3JtLgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2
aXNpb24gNTgzMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0
b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjxjaGFyPiYgZGF0YSwgRnJhbWUqIGZyYW1lKTsKICAgICBzdGF0aWMgdm9pZCBwcmVwYXJlRm9y
VVJMKGNvbnN0IEtVUkwmKTsKICAgICBzdGF0aWMgYm9vbCB3aWxsTG9hZEZyb21DYWNoZShSZXNv
dXJjZVJlcXVlc3QmLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIGNhY2hlTWV0YWRhdGEoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIHN0YXRpYyBib29sIGRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3Rz
KCk7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZUNsaWVudC5oCShyZXZpc2lvbiA1ODMwNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNo
YXIqLCBpbnQpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNv
dXJjZUhhbmRsZSopIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHdh
c0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSB7IH0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24g
NTg2OTYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzQgQEAKKzIwMTAtMDUtMDMgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRpbmcgdW5pdHRlc3QgZm9yIENhY2hlZE1ldGFkYXRhTWFwLgorCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiB0ZXN0cy9DYWNoZWRNZXRhZGF0YU1hcFRlc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZvb0NhY2hlZE1ldGFkYXRhOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9vQ2FjaGVkTWV0YWRhdGE6Oik6CisgICAgICAgIChXZWJDb3JlOjpCYXJDYWNo
ZWRNZXRhZGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhckNhY2hlZE1ldGFkYXRh
OjopOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTAtMDUtMDMgIEplbnMgQWxma2Ug
IDxzbmVqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIu
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNTgzMDQpCisrKyBXZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDYgKzUwMyw3IEBACiAgICAgICAgICAg
ICAgICAgJ3NyYycsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisg
ICAgICAgICAgICAgICAgJ3Rlc3RzL0NhY2hlZE1ldGFkYXRhTWFwVGVzdC5jcHAnLAogICAgICAg
ICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Rl
c3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5j
cHAnLApJbmRleDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhY2hlZE1ldGFkYXRhTWFwVGVzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhY2hlZE1ldGFkYXRhTWFw
VGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FjaGVkTWV0
YWRhdGFNYXBUZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBCYXNpYyB0
ZXN0cyB0aGF0IHZlcmlmeSBvdXIgS1VSTCdzIGludGVyZmFjZSBiZWhhdmVzIHRoZSBzYW1lIGFz
IHRoZQorLy8gb3JpZ2luYWwgS1VSTCdzLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSAiQ2FjaGVkTWV0YWRhdGEuaCIKKyNpbmNs
dWRlICJDYWNoZWRNZXRhZGF0YU1hcC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRm9vQ2FjaGVk
TWV0YWRhdGEgOiBwdWJsaWMgQ2FjaGVkTWV0YWRhdGEgeworcHVibGljOgorICAgIHN0YXRpYyBG
b29DYWNoZWRNZXRhZGF0YSogY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZvb0NhY2hlZE1ldGFkYXRhKj4oQ2Fj
aGVkTWV0YWRhdGE6OmNyZWF0ZShkYXRhLCBzaXplKSk7CisgICAgfQorCisgICAgZW51bSB7IGlk
ID0gMHgxMjM0NTY3OCB9OworfTsKKworY2xhc3MgQmFyQ2FjaGVkTWV0YWRhdGEgOiBwdWJsaWMg
Q2FjaGVkTWV0YWRhdGEgeworcHVibGljOgorICAgIHN0YXRpYyBCYXJDYWNoZWRNZXRhZGF0YSog
Y3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEJhckNhY2hlZE1ldGFkYXRhKj4oQ2FjaGVkTWV0YWRhdGE6OmNyZWF0
ZShkYXRhLCBzaXplKSk7CisgICAgfQorCisgICAgZW51bSB7IGlkID0gMHg4NzY1NDMyMSB9Owor
fTsKKworVEVTVChDYWNoZWRNZXRhZGF0YU1hcFRlc3QsIEJhc2ljT3BlcmF0aW9uKQoreworICAg
IE93blB0cjxDYWNoZWRNZXRhZGF0YU1hcD4gbWFwID0gQ2FjaGVkTWV0YWRhdGFNYXA6OmNyZWF0
ZSgpOworCisgICAgLy8gVHJ5IHRvIHJldHJpZXZlIGRhdGEgdGhhdCBpc24ndCBjYWNoZWQuCisg
ICAgRVhQRUNUX0ZBTFNFKG1hcC0+Z2V0PEZvb0NhY2hlZE1ldGFkYXRhPigpKTsKKyAgICBFWFBF
Q1RfRVEoMCwgbWFwLT5nZXQ8Rm9vQ2FjaGVkTWV0YWRhdGE+KCkpOworCisgICAgLy8gQWRkIGZv
byB0byB0aGUgbWFwLgorICAgIHN0YXRpYyBjb25zdCBjaGFyIGZvb0RhdGFbXSA9ICJcMGZvbyBm
b28gZm9vIjsKKyAgICBzdGF0aWMgY29uc3QgaW50IGZvb0RhdGFTaXplID0gc2l6ZW9mKGZvb0Rh
dGEpOworICAgIG1hcC0+c2V0PEZvb0NhY2hlZE1ldGFkYXRhPihGb29DYWNoZWRNZXRhZGF0YTo6
Y3JlYXRlKGZvb0RhdGEsIGZvb0RhdGFTaXplKSk7CisKKyAgICAvLyBBZGQgYmFyIHRvIHRoZSBt
YXAuCisgICAgc3RhdGljIGNvbnN0IGNoYXIgYmFyRGF0YVtdID0gIlwwYmFyIGJhciI7CisgICAg
c3RhdGljIGNvbnN0IGludCBiYXJEYXRhU2l6ZSA9IHNpemVvZihiYXJEYXRhKTsKKyAgICBtYXAt
PnNldDxCYXJDYWNoZWRNZXRhZGF0YT4oQmFyQ2FjaGVkTWV0YWRhdGE6OmNyZWF0ZShiYXJEYXRh
LCBiYXJEYXRhU2l6ZSkpOworCisgICAgLy8gVmVyaWZ5IHRoYXQgZm9vIGFuZCBiYXIgY2FuIGJl
IHJldHJpZXZlZC4KKyAgICB7CisgICAgICAgIEZvb0NhY2hlZE1ldGFkYXRhKiBmb28gPSBtYXAt
PmdldDxGb29DYWNoZWRNZXRhZGF0YT4oKTsKKyAgICAgICAgQVNTRVJUX0VRKGZvb0RhdGFTaXpl
LCBmb28tPnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoZm9vRGF0YSwgZm9v
LT5kYXRhKCksIGZvby0+c2l6ZSgpKSk7CisKKyAgICAgICAgQmFyQ2FjaGVkTWV0YWRhdGEqIGJh
ciA9IG1hcC0+Z2V0PEJhckNhY2hlZE1ldGFkYXRhPigpOworICAgICAgICBBU1NFUlRfRVEoYmFy
RGF0YVNpemUsIGJhci0+c2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1lbWNtcChiYXJE
YXRhLCBiYXItPmRhdGEoKSwgYmFyLT5zaXplKCkpKTsKKyAgICB9CisKKyAgICAvLyBTZXJpYWxp
emUgYW5kIGRlc2VyaWFsaXplLgorICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6YXRp
b24gPSBtYXAtPnNlcmlhbGl6ZSgpOworICAgIG1hcCA9IENhY2hlZE1ldGFkYXRhTWFwOjpjcmVh
dGUoKTsKKyAgICBtYXAtPmRlc2VyaWFsaXplKHNlcmlhbGl6YXRpb24tPmRhdGEoKSwgc2VyaWFs
aXphdGlvbi0+c2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSB0aGF0IGZvbyBhbmQgYmFyIGNhbiBz
dGlsbCBiZSByZXRyaWV2ZWQgYWZ0ZXIgZGVzZXJpYWxpemF0aW9uLgorICAgIHsKKyAgICAgICAg
Rm9vQ2FjaGVkTWV0YWRhdGEqIGZvbyA9IG1hcC0+Z2V0PEZvb0NhY2hlZE1ldGFkYXRhPigpOwor
ICAgICAgICBBU1NFUlRfRVEoZm9vRGF0YVNpemUsIGZvby0+c2l6ZSgpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDAsIG1lbWNtcChmb29EYXRhLCBmb28tPmRhdGEoKSwgZm9vLT5zaXplKCkpKTsKKwor
ICAgICAgICBCYXJDYWNoZWRNZXRhZGF0YSogYmFyID0gbWFwLT5nZXQ8QmFyQ2FjaGVkTWV0YWRh
dGE+KCk7CisgICAgICAgIEFTU0VSVF9FUShiYXJEYXRhU2l6ZSwgYmFyLT5zaXplKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKGJhckRhdGEsIGJhci0+ZGF0YSgpLCBiYXItPnNpemUo
KSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UK
</data>
<flag name="review"
          id="39039"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55079</attachid>
            <date>2010-05-04 17:35:52 -0700</date>
            <delta_ts>2010-05-06 10:23:26 -0700</delta_ts>
            <desc>Get rid of map and fix smart pointers</desc>
            <filename>37874-6.txt</filename>
            <type>text/plain</type>
            <size>21232</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODc4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTAtMDUtMDQgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcm92aWRlIG1lY2hhbmlzbSB0byBzdG9yZSBjYWNoZWQgbWV0YWRhdGEgb24gYSBDYWNoZWRS
ZXNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3ODc0CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3IGZ1bmN0aW9uYWxp
dHkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZE1l
dGFkYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGE6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6fkNhY2hlZE1ldGFkYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhOjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZE1ldGFkYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFk
YXRhOjpDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZE1ldGFkYXRhU3Rv
cmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YVN0b3JlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGFTdG9yZTo6ZGVzZXJpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGFTdG9yZTo6fkNhY2hlZE1ldGFkYXRh
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGFTdG9yZTo6c2VyaWFsaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhU3RvcmU6OmNhY2hlZE1ldGFkYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhU3RvcmU6OnJlYWRVbnNpZ25lZCk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YVN0b3JlOjphcHBlbmRVbnNpZ25lZCk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YVN0b3JlOjpDYWNoZWRNZXRhZGF0YVN0
b3JlKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkUmVzb3VyY2U6OmRlc2VyaWFsaXplQ2FjaGVkTWV0YWRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnNldENhY2hlZE1ldGFkYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpjYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFk
YXRhKToKKyAgICAgICAgKiBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6Cisg
ICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxv
YWRlckNsaWVudDo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIv
bG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6SG9zdDo6ZGlkUmVjZWl2ZUNh
Y2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6Y2FjaGVNZXRhZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50OjpkaWRS
ZWNlaXZlQ2FjaGVkTWV0YWRhdGEpOgorCiAyMDEwLTA1LTA0ICBMdWl6IEFnb3N0aW5pICA8bHVp
ei5hZ29zdGluaUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhh
dXNtYW5uLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU4MzA0KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MTksNiArMTcxOSw4IEBACiAgICAgICAgICAgICAnbG9hZGVy
L3dpbi9GcmFtZUxvYWRlcldpbi5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9DYWNoZS5jcHAn
LAogICAgICAgICAgICAgJ2xvYWRlci9DYWNoZS5oJywKKyAgICAgICAgICAgICdsb2FkZXIvQ2Fj
aGVkTWV0YWRhdGEuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0NhY2hlZE1ldGFkYXRhU3RvcmUu
aCcsCiAgICAgICAgICAgICAnbG9hZGVyL0NhY2hlUG9saWN5LmgnLAogICAgICAgICAgICAgJ2xv
YWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL0NhY2hl
ZENTU1N0eWxlU2hlZXQuaCcsCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRNZXRhZGF0YS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDYWNoZWRNZXRhZGF0YV9oCisjZGVmaW5lIENhY2hlZE1ldGFk
YXRhX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gQSBjb250YWluZXIgZm9yIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIENhY2hl
ZFJlc291cmNlLiBEb2VzIG5vdCBvd24gZGF0YS4KK2NsYXNzIENhY2hlZE1ldGFkYXRhIDogcHVi
bGljIFJlZkNvdW50ZWQ8Q2FjaGVkTWV0YWRhdGE+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDYWNoZWRNZXRhZGF0YT4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBz
aXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRNZXRhZGF0YShkYXRhLCBzaXpl
KTsKKyAgICB9CisKKyAgICB+Q2FjaGVkTWV0YWRhdGEoKSB7IH0KKworICAgIGNvbnN0IGNoYXIq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAgIENhY2hlZE1ldGFkYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAg
ICAsIG1fc2l6ZShzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBtX2RhdGE7
CisgICAgc2l6ZV90IG1fc2l6ZTsKK307CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9DYWNoZWRNZXRhZGF0YVN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkTWV0YWRhdGFTdG9yZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkTWV0YWRhdGFTdG9yZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q2FjaGVkTWV0YWRhdGFTdG9yZV9oCisjZGVmaW5lIENhY2hlZE1ldGFkYXRhU3RvcmVfaAorCisj
aW5jbHVkZSAiQ2FjaGVkTWV0YWRhdGEuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQSBz
dG9yZSBmb3IgQ2FjaGVkTWV0YWRhdGEgcmV0cmlldmVkIGZyb20gdGhlIGhvc3QgYXBwbGljYXRp
b24ncyBkaXNrIGNhY2hlLgorLy8KKy8vIFNlcmlhbGl6ZWQgZGF0YSBpcyBOT1QgcG9ydGFibGUg
YWNyb3NzIGFyY2hpdGVjdHVyZXMuIEhvd2V2ZXIsIHJlYWRpbmcgdGhlCisvLyBkYXRhIHR5cGUg
SUQgd2lsbCByZWplY3QgZGF0YSBnZW5lcmF0ZWQgd2l0aCBhIGRpZmZlcmVudCBieXRlLW9yZGVy
LgorY2xhc3MgQ2FjaGVkTWV0YWRhdGFTdG9yZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJs
aWM6CisgICAgLy8gQ3JlYXRlcyBhIENhY2hlZE1ldGFkYXRhU3RvcmUgd2hpY2ggY29udGFpbnMg
b25seSB0aGUgZ2l2ZW4gZGF0YS4KKyAgICAvLyBUaGUgZGF0YVR5cGVJRCBpcyBhIHBzZXVkby1y
YW5kb21seSBjaG9zZW4gaWRlbnRpZmllciB0aGF0IHRoZSBjYWxsZXIgY2FuCisgICAgLy8gdXNl
IHRvIGRpc3Rpbmd1aXNoIGRhdGEgZ2VuZXJhdGVkIGJ5IGl0c2VsZi4KKyAgICBzdGF0aWMgUGFz
c093blB0cjxDYWNoZWRNZXRhZGF0YVN0b3JlPiBjcmVhdGUodW5zaWduZWQgZGF0YVR5cGVJRCwg
Q2FjaGVkTWV0YWRhdGEqIGNhY2hlZE1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBDYWNoZWRNZXRhZGF0YVN0b3JlKGRhdGFUeXBlSUQsIGNhY2hlZE1ldGFkYXRhKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDYWNoZWRNZXRhZGF0YVN0b3JlPiBkZXNlcmlhbGl6
ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBu
ZXcgQ2FjaGVkTWV0YWRhdGFTdG9yZShkYXRhLCBzaXplKTsKKyAgICB9CisKKyAgICB+Q2FjaGVk
TWV0YWRhdGFTdG9yZSgpIHsgfQorCisgICAgY29uc3QgVmVjdG9yPGNoYXI+JiBzZXJpYWxpemUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2VyaWFsaXplZERhdGE7CisgICAgfQor
CisgICAgUGFzc1JlZlB0cjxDYWNoZWRNZXRhZGF0YT4gY2FjaGVkTWV0YWRhdGEodW5zaWduZWQg
ZGF0YVR5cGVJRCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChkYXRhVHlwZUlEICE9IHJlYWRV
bnNpZ25lZChkYXRhVHlwZUlEU3RhcnQpIHx8IG1fc2VyaWFsaXplZERhdGEuc2l6ZSgpIDwgZGF0
YVN0YXJ0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBDYWNoZWRNZXRh
ZGF0YTo6Y3JlYXRlKG1fc2VyaWFsaXplZERhdGEuZGF0YSgpICsgZGF0YVN0YXJ0LCBtX3Nlcmlh
bGl6ZWREYXRhLnNpemUoKSAtIGRhdGFTdGFydCk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8v
IFJlYWRzIGFuIHVuc2lnbmVkIHZhbHVlIGF0IHBvc2l0aW9uLiBSZXR1cm5zIDAgb24gZXJyb3Iu
CisgICAgdW5zaWduZWQgcmVhZFVuc2lnbmVkKHNpemVfdCBwb3NpdGlvbikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChtX3NlcmlhbGl6ZWREYXRhLnNpemUoKSA8IHBvc2l0aW9uICsgdW5zaWdu
ZWRTaXplKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCo+KGNvbnN0X2Nhc3Q8Y2hhcio+KG1fc2VyaWFsaXplZERhdGEuZGF0
YSgpICsgcG9zaXRpb24pKTsKKyAgICB9CisKKyAgICAvLyBBcHBlbmRzIGFuIHVuc2lnbmVkIHZh
bHVlIHRvIHRoZSBlbmQgb2YgdGhlIHNlcmlhbGl6ZWQgZGF0YS4KKyAgICB2b2lkIGFwcGVuZFVu
c2lnbmVkKHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zZXJpYWxpemVkRGF0YS5h
cHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJnZhbHVlKSwgdW5zaWduZWRTaXpl
KTsKKyAgICB9CisKKyAgICBDYWNoZWRNZXRhZGF0YVN0b3JlKGNvbnN0IGNoYXIqIGRhdGEsIHNp
emVfdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gU2VyaWFsaXplZCBtZXRhZGF0YSBzaG91bGQg
aGF2ZSBub24tZW1wdHkgZGF0YS4KKyAgICAgICAgQVNTRVJUKHNpemUgPiBkYXRhU3RhcnQpOwor
CisgICAgICAgIG1fc2VyaWFsaXplZERhdGEuYXBwZW5kKGRhdGEsIHNpemUpOworICAgIH0KKwor
ICAgIENhY2hlZE1ldGFkYXRhU3RvcmUodW5zaWduZWQgZGF0YVR5cGVJRCwgQ2FjaGVkTWV0YWRh
dGEqIGNhY2hlZE1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgYWxsb3cgYW4gSUQg
b2YgMCwgaXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGluZGljYXRlIGVycm9ycy4KKyAgICAgICAg
QVNTRVJUKGRhdGFUeXBlSUQpOworICAgICAgICBBU1NFUlQoY2FjaGVkTWV0YWRhdGEpOworCisg
ICAgICAgIGFwcGVuZFVuc2lnbmVkKGRhdGFUeXBlSUQpOworICAgICAgICBtX3NlcmlhbGl6ZWRE
YXRhLmFwcGVuZChjYWNoZWRNZXRhZGF0YS0+ZGF0YSgpLCBjYWNoZWRNZXRhZGF0YS0+c2l6ZSgp
KTsKKyAgICB9CisKKyAgICAvLyBTZXJpYWxpemF0aW9uIG9mZnNldHMuIEZvcm1hdDogW0RBVEFf
VFlQRV9JRF1bREFUQV0uCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBkYXRhVHlwZUlEU3RhcnQg
PSAwOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdW5zaWduZWRTaXplID0gc2l6ZW9mKHVuc2ln
bmVkKTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGRhdGFTdGFydCA9IGRhdGFUeXBlSURTdGFy
dCArIHVuc2lnbmVkU2l6ZTsKKworICAgIC8vIFNpbmNlIHRoZSBzZXJpYWxpemF0aW9uIGZvcm1h
dCBzdXBwb3J0cyByYW5kb20gYWNjZXNzLCBzdG9yaW5nIGl0IGluCisgICAgLy8gc2VyaWFsaXpl
ZCBmb3JtIGF2b2lkcyBuZWVkIGZvciBhIGNvcHkgZHVyaW5nIHNlcmlhbGl6YXRpb24uCisgICAg
VmVjdG9yPGNoYXI+IG1fc2VyaWFsaXplZERhdGE7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDog
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gNTgzMDQpCisrKyBXZWJDb3JlL2xv
YWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEzICsyNSwxNSBA
QAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAKICNpbmNsdWRlICJDYWNoZS5oIgorI2lu
Y2x1ZGUgIkNhY2hlZE1ldGFkYXRhU3RvcmUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhh
bmRsZS5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQdXJnZWFibGVCdWZmZXIuaCIKICNpbmNsdWRlICJS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgpAQCAtMTY0LDYgKzE2NiwzNCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRS
ZXNwb25zZShjb25zdCBSCiAgICAgbV9yZXNwb25zZVRpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7
CiB9CiAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRlc2VyaWFsaXplQ2FjaGVkTWV0YWRhdGEoY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgLy8gV2Ugb25seSBleHBlY3QgdG8g
cmVjZWl2ZSBjYWNoZWQgbWV0YWRhdGEgZnJvbSB0aGUgcGxhdGZvcm0gb25jZS4KKyAgICAvLyBJ
ZiB0aGlzIHRyaWdnZXJzLCBpdCBpbmRpY2F0ZXMgYW4gZWZmaWNpZW5jeSBwcm9ibGVtIHdoaWNo
IGlzIG1vc3QKKyAgICAvLyBsaWtlbHkgdW5leHBlY3RlZCBpbiBjb2RlIGRlc2lnbmVkIHRvIGlt
cHJvdmUgcGVyZm9ybWFuY2UuCisgICAgQVNTRVJUKCFtX2NhY2hlZE1ldGFkYXRhU3RvcmUpOwor
CisgICAgbV9jYWNoZWRNZXRhZGF0YVN0b3JlID0gQ2FjaGVkTWV0YWRhdGFTdG9yZTo6ZGVzZXJp
YWxpemUoZGF0YSwgc2l6ZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldENhY2hlZE1l
dGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQsIENhY2hlZE1ldGFkYXRhKiBjYWNoZWRNZXRhZGF0
YSkKK3sKKyAgICAvLyBDdXJyZW50bHksIG9ubHkgb25lIHR5cGUgb2YgY2FjaGVkIG1ldGFkYXRh
IHBlciByZXNvdXJjZSBpcyBzdXBwb3J0ZWQuCisgICAgLy8gSWYgdGhlIG5lZWQgYXJpc2VzIGZv
ciBtdWx0aXBsZSB0eXBlcyBvZiBtZXRhZGF0YSBwZXIgcmVzb3VyY2UgdGhpcyBjb3VsZAorICAg
IC8vIGJlIGVuaGFuY2VkIHRvIHN0b3JlIHR5cGVzIG9mIG1ldGFkYXRhIGluIGEgbWFwLgorICAg
IEFTU0VSVCghbV9jYWNoZWRNZXRhZGF0YVN0b3JlKTsKKworICAgIG1fY2FjaGVkTWV0YWRhdGFT
dG9yZSA9IENhY2hlZE1ldGFkYXRhU3RvcmU6OmNyZWF0ZShkYXRhVHlwZUlELCBjYWNoZWRNZXRh
ZGF0YSk7CisgICAgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEobV9yZXNwb25zZSwgbV9j
YWNoZWRNZXRhZGF0YVN0b3JlLT5zZXJpYWxpemUoKSk7Cit9CisKK1Bhc3NSZWZQdHI8Q2FjaGVk
TWV0YWRhdGE+IENhY2hlZFJlc291cmNlOjpjYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCBkYXRhVHlw
ZUlEKSBjb25zdAoreworICAgIGlmICghbV9jYWNoZWRNZXRhZGF0YVN0b3JlKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbV9jYWNoZWRNZXRhZGF0YVN0b3JlLT5jYWNoZWRNZXRhZGF0
YShkYXRhVHlwZUlEKTsKK30KKwogdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVxdWVzdChSZXF1
ZXN0KiByZXF1ZXN0KQogewogICAgIGlmIChyZXF1ZXN0ICYmICFtX3JlcXVlc3QpCkBAIC0zODQs
NyArNDE0LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6dXBkYXRlUmVzcG9uc2VBZnRlcgogICAg
ICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQp
OwogICAgIH0KIH0KLSAgICAKKwogYm9vbCBDYWNoZWRSZXNvdXJjZTo6Y2FuVXNlQ2FjaGVWYWxp
ZGF0b3IoKSBjb25zdAogewogICAgIGlmIChtX2xvYWRpbmcgfHwgbV9lcnJvck9jY3VycmVkKQpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiA1ODMwNCkKKysrIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDEyIEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlOworY2xhc3MgQ2FjaGVkTWV0YWRh
dGE7CitjbGFzcyBDYWNoZWRNZXRhZGF0YVN0b3JlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGll
bnQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U7CiBjbGFzcyBEb2NMb2FkZXI7Citj
bGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlOwogY2xhc3MgUmVxdWVzdDsKIGNs
YXNzIFB1cmdlYWJsZUJ1ZmZlcjsKQEAgLTE0Miw2ICsxNDUsMTYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQogCisg
ICAgLy8gU2V0cyB0aGUgc2VyaWFsaXplZCBtZXRhZGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgcGxh
dGZvcm0ncyBjYWNoZS4KKyAgICB2b2lkIGRlc2VyaWFsaXplQ2FjaGVkTWV0YWRhdGEoY29uc3Qg
Y2hhciosIHNpemVfdCk7CisKKyAgICAvLyBDYWNoZXMgdGhlIGdpdmVuIG1ldGFkYXRhIGluIGFz
c29jaWF0aW9uIHdpdGggdGhpcyByZXNvdXJjZSBhbmQgc3VnZ2VzdHMKKyAgICAvLyB0aGF0IHRo
ZSBwbGF0Zm9ybSBwZXJzaXN0IGl0LgorICAgIHZvaWQgc2V0Q2FjaGVkTWV0YWRhdGEodW5zaWdu
ZWQgZGF0YVR5cGVJRCwgQ2FjaGVkTWV0YWRhdGEqIGNhY2hlZE1ldGFkYXRhKTsKKworICAgIC8v
IFJldHVybnMgY2FjaGVkIG1ldGFkYXRhIG9mIHRoZSBnaXZlbiB0eXBlIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIHJlc291cmNlLgorICAgIFBhc3NSZWZQdHI8Q2FjaGVkTWV0YWRhdGE+IGNhY2hlZE1l
dGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQpIGNvbnN0OworCiAgICAgYm9vbCBjYW5EZWxldGUo
KSBjb25zdCB7IHJldHVybiAhaGFzQ2xpZW50cygpICYmICFtX3JlcXVlc3QgJiYgIW1fcHJlbG9h
ZENvdW50ICYmICFtX2hhbmRsZUNvdW50ICYmICFtX3Jlc291cmNlVG9SZXZhbGlkYXRlICYmICFt
X3Byb3h5UmVzb3VyY2U7IH0KIAogICAgIGJvb2wgaXNFeHBpcmVkKCkgY29uc3Q7CkBAIC0yMTYs
NiArMjI5LDcgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgY3VycmVudEFnZSgpIGNvbnN0OwogICAg
IGRvdWJsZSBmcmVzaG5lc3NMaWZldGltZSgpIGNvbnN0OwogCisgICAgT3duUHRyPENhY2hlZE1l
dGFkYXRhU3RvcmU+IG1fY2FjaGVkTWV0YWRhdGFTdG9yZTsgLy8gTGF6eQogICAgIHVuc2lnbmVk
IG1fZW5jb2RlZFNpemU7CiAgICAgdW5zaWduZWQgbV9kZWNvZGVkU2l6ZTsKICAgICB1bnNpZ25l
ZCBtX2FjY2Vzc0NvdW50OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA1
ODMwNCkKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDYgKzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9uZyBsb25nIGxlbmd0aFJlY2Vp
dmVkLCBib29sIGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2Fj
aGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCkgeyB9CiAgICAgICAgIHZvaWQgd2lsbFN0b3BC
dWZmZXJpbmdEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZygpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNv
dXJjZUVycm9yJik7CkBAIC05Myw2ICs5NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9u
ZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNl
aXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSB7IGRpZFJlY2VpdmVD
YWNoZWRNZXRhZGF0YShkYXRhLCBsZW5ndGgpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOwpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNTgzMDQpCisrKyBXZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsMTggQEAg
dm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoYwogICAgICAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgbGVuZ3RoKTsKIH0KIAordm9pZCBTdWJyZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgpCit7CisgICAgLy8gUmVmZXJlbmNlIHRoZSBvYmplY3QgaW4gdGhpcyBtZXRob2Qg
c2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8KKyAgICAvLyBhbnl0aGluZyBp
bmNsdWRpbmcgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0OyBvbmUg
ZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYuCisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVy
PiBwcm90ZWN0KHRoaXMpOworICAgIAorICAgIC8vIEEgc3VicmVzb3VyY2UgbG9hZGVyIGRvZXMg
bm90IGxvYWQgbXVsdGlwYXJ0IHNlY3Rpb25zIHByb2dyZXNzaXZlbHkuCisgICAgLy8gU28gZG9u
J3QgZGVsaXZlciBhbnkgZGF0YSB0byB0aGUgbG9hZGVyIHlldC4KKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEodGhpcywgZGF0YSwg
bGVuZ3RoKTsKK30KKwogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZygp
CiB7CiAgICAgaWYgKGNhbmNlbGxlZCgpKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRl
ci5oCShyZXZpc2lvbiA1ODMwNCkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVz
U2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9u
ZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29sIGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgdmlydHVhbCBib29sIHNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDU4MzA0KQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhS
ZWNlaXZlZCovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8p
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVy
KikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25z
dCBSZXNvdXJjZUVycm9yJikgeyB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDU4
MzA0KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUx
LDYgKzU1MSwyMCBAQCB2b2lkIExvYWRlcjo6SG9zdDo6ZGlkUmVjZWl2ZURhdGEoU3VicmVzCiAg
ICAgICAgIHJlc291cmNlLT5kYXRhKGxvYWRlci0+cmVzb3VyY2VEYXRhKCksIGZhbHNlKTsKIH0K
ICAgICAKK3ZvaWQgTG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVz
b3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCit7CisgICAg
UmVmUHRyPEhvc3Q+IHByb3RlY3Rvcih0aGlzKTsKKworICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBt
X3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVyKTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAg
IHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IHJlcXVlc3QtPmNhY2hl
ZFJlc291cmNlKCk7ICAgIAorICAgIEFTU0VSVCghcmVzb3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3Io
KSk7CisKKyAgICByZXNvdXJjZS0+ZGVzZXJpYWxpemVDYWNoZWRNZXRhZGF0YShkYXRhLCBzaXpl
KTsKK30KKyAgICAKIHZvaWQgTG9hZGVyOjpIb3N0OjpjYW5jZWxQZW5kaW5nUmVxdWVzdHMoUmVx
dWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcsIERvY0xvYWRlciogZG9jTG9hZGVyKQogewogICAg
IFJlcXVlc3RRdWV1ZSByZW1haW5pbmc7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAkocmV2aXNpb24gNTgzMDQpCisr
KyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2Fk
ZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsK
ICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9h
ZGVyKik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgICAgIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA1ODMwNCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NSw0ICsxNDUsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJM
KGNvbnN0CiB9CiAjZW5kaWYKIAordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FjaGVNZXRhZGF0YShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgVmVjdG9yPGNoYXI+JikKK3sKKyAgICAvLyBP
cHRpb25hbGx5IGltcGxlbWVudGVkIGJ5IHBsYXRmb3JtLgorfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAko
cmV2aXNpb24gNTgzMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZl
Y3RvcjxjaGFyPiYgZGF0YSwgRnJhbWUqIGZyYW1lKTsKICAgICBzdGF0aWMgdm9pZCBwcmVwYXJl
Rm9yVVJMKGNvbnN0IEtVUkwmKTsKICAgICBzdGF0aWMgYm9vbCB3aWxsTG9hZEZyb21DYWNoZShS
ZXNvdXJjZVJlcXVlc3QmLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIGNhY2hlTWV0YWRhdGEo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpOwogI2lmIFBMQVRG
T1JNKE1BQykKICAgICBzdGF0aWMgYm9vbCBkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygp
OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGVDbGllbnQuaAkocmV2aXNpb24gNTgzMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
Y2hhciosIGludCwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFy
KiwgaW50KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3Vy
Y2VIYW5kbGUqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3YXNC
bG9ja2VkKFJlc291cmNlSGFuZGxlKikgeyB9Cg==
</data>
<flag name="review"
          id="39184"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55255</attachid>
            <date>2010-05-06 10:23:26 -0700</date>
            <delta_ts>2010-05-08 23:08:14 -0700</delta_ts>
            <desc>Make CachedMetadata own data and reference count it</desc>
            <filename>37874-6.patch</filename>
            <type>text/plain</type>
            <size>18015</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODg5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMDUtMDYgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcm92aWRlIG1lY2hhbmlzbSB0byBzdG9yZSBjYWNoZWQgbWV0YWRhdGEgb24gYSBDYWNoZWRS
ZXNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3ODc0CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3IGZ1bmN0aW9uYWxp
dHkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZE1l
dGFkYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGE6On5DYWNo
ZWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6ZGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRNZXRhZGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFk
YXRhOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6c2Vy
aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhOjpkYXRhVHlwZUlEKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhOjpyZWFkVW5zaWduZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGE6OmFwcGVuZFVuc2lnbmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZE1ldGFkYXRhOjpDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVy
L0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpz
ZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OnNldENhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291
cmNlOjpjYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2Fk
ZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2
ZUNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxvYWRlcjo6SG9zdDo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKToKKyAgICAg
ICAgKiBsb2FkZXIvbG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2FjaGVNZXRh
ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50OjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEp
OgorCiAyMDEwLTA1LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBCZXRoIERha2luLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU4ODU1KQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE3MDksNiArMTcwOSw3IEBACiAg
ICAgICAgICAgICAnbG9hZGVyL3dpbi9GcmFtZUxvYWRlcldpbi5jcHAnLAogICAgICAgICAgICAg
J2xvYWRlci9DYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9DYWNoZS5oJywKKyAgICAg
ICAgICAgICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nh
Y2hlUG9saWN5LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNw
cCcsCiAgICAgICAgICAgICAnbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaCcsCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZE1ldGFkYXRhLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRNZXRhZGF0YS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2FjaGVk
TWV0YWRhdGFfaAorI2RlZmluZSBDYWNoZWRNZXRhZGF0YV9oCisKKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBNZXRhZGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgZW1iZWRkaW5nIGFwcGxpY2F0aW9u
J3MgY2FjaGUuCisvLworLy8gU2VyaWFsaXplZCBkYXRhIGlzIE5PVCBwb3J0YWJsZSBhY3Jvc3Mg
YXJjaGl0ZWN0dXJlcy4gSG93ZXZlciwgcmVhZGluZyB0aGUKKy8vIGRhdGEgdHlwZSBJRCB3aWxs
IHJlamVjdCBkYXRhIGdlbmVyYXRlZCB3aXRoIGEgZGlmZmVyZW50IGJ5dGUtb3JkZXIuCitjbGFz
cyBDYWNoZWRNZXRhZGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlZE1ldGFkYXRhPiB7Citw
dWJsaWM6CisgICAgfkNhY2hlZE1ldGFkYXRhKCkgeyB9CisKKyAgICBjb25zdCBjaGFyKiBkYXRh
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NlcmlhbGl6ZWREYXRhLnNpemUoKSA8IGRh
dGFTdGFydCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9zZXJpYWxp
emVkRGF0YS5kYXRhKCkgKyBkYXRhU3RhcnQ7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2VyaWFsaXplZERhdGEuc2l6ZSgpIDwgZGF0YVN0
YXJ0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX3NlcmlhbGl6ZWRE
YXRhLnNpemUoKSAtIGRhdGFTdGFydDsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQg
Y2xhc3MgQ2FjaGVkUmVzb3VyY2U7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWNoZWRNZXRh
ZGF0YT4gY3JlYXRlKHVuc2lnbmVkIGRhdGFUeXBlSUQsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRNZXRhZGF0YShkYXRhVHlw
ZUlELCBkYXRhLCBzaXplKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWNoZWRN
ZXRhZGF0YT4gZGVzZXJpYWxpemUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IENhY2hlZE1ldGFkYXRhKGRhdGEsIHNpemUpOworICAgIH0K
KworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgc2VyaWFsaXplKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3NlcmlhbGl6ZWREYXRhOworICAgIH0KKworICAgIHVuc2lnbmVkIGRhdGFU
eXBlSUQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlYWRVbnNpZ25lZChkYXRhVHlw
ZUlEU3RhcnQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBSZWFkcyBhbiB1bnNpZ25lZCB2
YWx1ZSBhdCBwb3NpdGlvbi4gUmV0dXJucyAwIG9uIGVycm9yLgorICAgIHVuc2lnbmVkIHJlYWRV
bnNpZ25lZChzaXplX3QgcG9zaXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zZXJp
YWxpemVkRGF0YS5zaXplKCkgPCBwb3NpdGlvbiArIHNpemVvZih1bnNpZ25lZCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4oY29uc3RfY2FzdDxjaGFyKj4obV9zZXJpYWxpemVkRGF0YS5kYXRhKCkgKyBwb3NpdGlvbikp
OworICAgIH0KKworICAgIC8vIEFwcGVuZHMgYW4gdW5zaWduZWQgdmFsdWUgdG8gdGhlIGVuZCBv
ZiB0aGUgc2VyaWFsaXplZCBkYXRhLgorICAgIHZvaWQgYXBwZW5kVW5zaWduZWQodW5zaWduZWQg
dmFsdWUpCisgICAgeworICAgICAgICBtX3NlcmlhbGl6ZWREYXRhLmFwcGVuZChyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPigmdmFsdWUpLCBzaXplb2YodW5zaWduZWQpKTsKKyAgICB9CisK
KyAgICBDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICB7
CisgICAgICAgIC8vIFNlcmlhbGl6ZWQgbWV0YWRhdGEgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IGRh
dGEuCisgICAgICAgIEFTU0VSVChzaXplID4gZGF0YVN0YXJ0KTsKKworICAgICAgICBtX3Nlcmlh
bGl6ZWREYXRhLmFwcGVuZChkYXRhLCBzaXplKTsKKyAgICB9CisKKyAgICBDYWNoZWRNZXRhZGF0
YSh1bnNpZ25lZCBkYXRhVHlwZUlELCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAg
ICB7CisgICAgICAgIC8vIERvbid0IGFsbG93IGFuIElEIG9mIDAsIGl0IGlzIHVzZWQgaW50ZXJu
YWxseSB0byBpbmRpY2F0ZSBlcnJvcnMuCisgICAgICAgIEFTU0VSVChkYXRhVHlwZUlEKTsKKyAg
ICAgICAgQVNTRVJUKGRhdGEpOworCisgICAgICAgIGFwcGVuZFVuc2lnbmVkKGRhdGFUeXBlSUQp
OworICAgICAgICBtX3NlcmlhbGl6ZWREYXRhLmFwcGVuZChkYXRhLCBzaXplKTsKKyAgICB9CisK
KyAgICAvLyBTZXJpYWxpemF0aW9uIG9mZnNldHMuIEZvcm1hdDogW0RBVEFfVFlQRV9JRF1bREFU
QV0uCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBkYXRhVHlwZUlEU3RhcnQgPSAwOworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgZGF0YVN0YXJ0ID0gc2l6ZW9mKHVuc2lnbmVkKTsKKworICAgIC8v
IFNpbmNlIHRoZSBzZXJpYWxpemF0aW9uIGZvcm1hdCBzdXBwb3J0cyByYW5kb20gYWNjZXNzLCBz
dG9yaW5nIGl0IGluCisgICAgLy8gc2VyaWFsaXplZCBmb3JtIGF2b2lkcyBuZWVkIGZvciBhIGNv
cHkgZHVyaW5nIHNlcmlhbGl6YXRpb24uCisgICAgVmVjdG9yPGNoYXI+IG1fc2VyaWFsaXplZERh
dGE7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAko
cmV2aXNpb24gNTg4NTUpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDEzICsyNSwxNSBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
LmgiCiAKICNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIkNhY2hlZE1ldGFkYXRhLmgiCiAj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUHVyZ2Vh
YmxlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTE2NCw2ICsxNjYsMzQgQEAg
dm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoY29uc3QgUgogICAgIG1fcmVzcG9uc2VU
aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwogfQogCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRT
ZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7
CisgICAgLy8gV2Ugb25seSBleHBlY3QgdG8gcmVjZWl2ZSBjYWNoZWQgbWV0YWRhdGEgZnJvbSB0
aGUgcGxhdGZvcm0gb25jZS4KKyAgICAvLyBJZiB0aGlzIHRyaWdnZXJzLCBpdCBpbmRpY2F0ZXMg
YW4gZWZmaWNpZW5jeSBwcm9ibGVtIHdoaWNoIGlzIG1vc3QKKyAgICAvLyBsaWtlbHkgdW5leHBl
Y3RlZCBpbiBjb2RlIGRlc2lnbmVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgICAgQVNTRVJU
KCFtX2NhY2hlZE1ldGFkYXRhKTsKKworICAgIG1fY2FjaGVkTWV0YWRhdGEgPSBDYWNoZWRNZXRh
ZGF0YTo6ZGVzZXJpYWxpemUoZGF0YSwgc2l6ZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6
OnNldENhY2hlZE1ldGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQsIGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBzaXplKQoreworICAgIC8vIEN1cnJlbnRseSwgb25seSBvbmUgdHlwZSBvZiBjYWNo
ZWQgbWV0YWRhdGEgcGVyIHJlc291cmNlIGlzIHN1cHBvcnRlZC4KKyAgICAvLyBJZiB0aGUgbmVl
ZCBhcmlzZXMgZm9yIG11bHRpcGxlIHR5cGVzIG9mIG1ldGFkYXRhIHBlciByZXNvdXJjZSB0aGlz
IGNvdWxkCisgICAgLy8gYmUgZW5oYW5jZWQgdG8gc3RvcmUgdHlwZXMgb2YgbWV0YWRhdGEgaW4g
YSBtYXAuCisgICAgQVNTRVJUKCFtX2NhY2hlZE1ldGFkYXRhKTsKKworICAgIG1fY2FjaGVkTWV0
YWRhdGEgPSBDYWNoZWRNZXRhZGF0YTo6Y3JlYXRlKGRhdGFUeXBlSUQsIGRhdGEsIHNpemUpOwor
ICAgIFJlc291cmNlSGFuZGxlOjpjYWNoZU1ldGFkYXRhKG1fcmVzcG9uc2UsIG1fY2FjaGVkTWV0
YWRhdGEtPnNlcmlhbGl6ZSgpKTsKK30KKworQ2FjaGVkTWV0YWRhdGEqIENhY2hlZFJlc291cmNl
OjpjYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCBkYXRhVHlwZUlEKSBjb25zdAoreworICAgIGlmICgh
bV9jYWNoZWRNZXRhZGF0YSB8fCBtX2NhY2hlZE1ldGFkYXRhLT5kYXRhVHlwZUlEKCkgIT0gZGF0
YVR5cGVJRCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fY2FjaGVkTWV0YWRhdGEu
Z2V0KCk7Cit9CisKIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlcXVlc3QoUmVxdWVzdCogcmVx
dWVzdCkKIHsKICAgICBpZiAocmVxdWVzdCAmJiAhbV9yZXF1ZXN0KQpAQCAtMzg0LDcgKzQxNCw3
IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlQWZ0ZXIKICAgICAgICAgbV9y
ZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKICAgICB9
CiB9Ci0gICAgCisKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9yKCkg
Y29uc3QKIHsKICAgICBpZiAobV9sb2FkaW5nIHx8IG1fZXJyb3JPY2N1cnJlZCkKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gNTg4NTUpCisrKyBXZWJDb3JlL2xvYWRlci9D
YWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxMSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZTsKK2NsYXNzIENhY2hlZE1ldGFkYXRhOwogY2xh
c3MgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U7
CiBjbGFzcyBEb2NMb2FkZXI7CitjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3RvclJlc291cmNl
OwogY2xhc3MgUmVxdWVzdDsKIGNsYXNzIFB1cmdlYWJsZUJ1ZmZlcjsKQEAgLTE0Miw2ICsxNDQs
MTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOwogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1
cm4gbV9yZXNwb25zZTsgfQogCisgICAgLy8gU2V0cyB0aGUgc2VyaWFsaXplZCBtZXRhZGF0YSBy
ZXRyaWV2ZWQgZnJvbSB0aGUgcGxhdGZvcm0ncyBjYWNoZS4KKyAgICB2b2lkIHNldFNlcmlhbGl6
ZWRDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiwgc2l6ZV90KTsKKworICAgIC8vIENhY2hlcyB0
aGUgZ2l2ZW4gbWV0YWRhdGEgaW4gYXNzb2NpYXRpb24gd2l0aCB0aGlzIHJlc291cmNlIGFuZCBz
dWdnZXN0cworICAgIC8vIHRoYXQgdGhlIHBsYXRmb3JtIHBlcnNpc3QgaXQuIFRoZSBkYXRhVHlw
ZUlEIGlzIGEgcHNldWRvLXJhbmRvbWx5IGNob3NlbgorICAgIC8vIGlkZW50aWZpZXIgdGhhdCBp
cyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGRhdGEgZ2VuZXJhdGVkIGJ5IHRoZSBjYWxsZXIuCisgICAg
dm9pZCBzZXRDYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCBkYXRhVHlwZUlELCBjb25zdCBjaGFyKiwg
c2l6ZV90KTsKKworICAgIC8vIFJldHVybnMgY2FjaGVkIG1ldGFkYXRhIG9mIHRoZSBnaXZlbiB0
eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlLgorICAgIENhY2hlZE1ldGFkYXRhKiBj
YWNoZWRNZXRhZGF0YSh1bnNpZ25lZCBkYXRhVHlwZUlEKSBjb25zdDsKKwogICAgIGJvb2wgY2Fu
RGVsZXRlKCkgY29uc3QgeyByZXR1cm4gIWhhc0NsaWVudHMoKSAmJiAhbV9yZXF1ZXN0ICYmICFt
X3ByZWxvYWRDb3VudCAmJiAhbV9oYW5kbGVDb3VudCAmJiAhbV9yZXNvdXJjZVRvUmV2YWxpZGF0
ZSAmJiAhbV9wcm94eVJlc291cmNlOyB9CiAKICAgICBib29sIGlzRXhwaXJlZCgpIGNvbnN0OwpA
QCAtMjE2LDYgKzIyOSw3IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIGN1cnJlbnRBZ2UoKSBjb25z
dDsKICAgICBkb3VibGUgZnJlc2huZXNzTGlmZXRpbWUoKSBjb25zdDsKIAorICAgIFJlZlB0cjxD
YWNoZWRNZXRhZGF0YT4gbV9jYWNoZWRNZXRhZGF0YTsKICAgICB1bnNpZ25lZCBtX2VuY29kZWRT
aXplOwogICAgIHVuc2lnbmVkIG1fZGVjb2RlZFNpemU7CiAgICAgdW5zaWduZWQgbV9hY2Nlc3ND
b3VudDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNTg4NTUpCisrKyBX
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmRE
YXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3Rh
bEJ5dGVzVG9CZVNlbnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQsIGxvbmcgbG9uZyBsZW5ndGhSZWNlaXZlZCwgYm9vbCBh
bGxBdE9uY2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KGNvbnN0IGNoYXIqLCBpbnQpIHsgfQogICAgICAgICB2b2lkIHdpbGxTdG9wQnVmZmVyaW5nRGF0
YShjb25zdCBjaGFyKiwgaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYp
OwpAQCAtOTcsNiArOTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRTZW5kRGF0YShSZXNvdXJjZUhhbmRsZSosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRl
c1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkgeyBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRh
dGEoZGF0YSwgbGVuZ3RoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
ZyhSZXNvdXJjZUhhbmRsZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdh
c0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291
cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDE2IEBAIHZvaWQgU3VicmVz
b3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGMKICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2Vp
dmVEYXRhKHRoaXMsIGRhdGEsIGxlbmd0aCk7CiB9CiAKK3ZvaWQgU3VicmVzb3VyY2VMb2FkZXI6
OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQor
eworICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0IGluIHRoaXMgbWV0aG9kIHNpbmNlIHRoZSBh
ZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCisgICAgLy8gYW55dGhpbmcgaW5jbHVkaW5nIHJl
bW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdDsgb25lIGV4YW1wbGUgb2Yg
dGhpcyBpcyAzMjY2MjE2LgorICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0
aGlzKTsKKyAgICAKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNl
aXZlQ2FjaGVkTWV0YWRhdGEodGhpcywgZGF0YSwgbGVuZ3RoKTsKK30KKwogdm9pZCBTdWJyZXNv
dXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpCiB7CiAgICAgaWYgKGNhbmNlbGxlZCgpKQpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA1ODg1NSkKKysrIFdl
YkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYg
KzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Vu
ZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9uZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29s
IGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRh
dGEoY29uc3QgY2hhciosIGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3Im
KTsKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDU4
ODU1KQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRl
ciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3Qg
Y2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRp
ZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9CiAgICAg
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS9sb2FkZXIvbG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUxLDYgKzU1MSwyMCBAQCB2b2lkIExvYWRlcjo6
SG9zdDo6ZGlkUmVjZWl2ZURhdGEoU3VicmVzCiAgICAgICAgIHJlc291cmNlLT5kYXRhKGxvYWRl
ci0+cmVzb3VyY2VEYXRhKCksIGZhbHNlKTsKIH0KICAgICAKK3ZvaWQgTG9hZGVyOjpIb3N0Ojpk
aWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3Qg
Y2hhciogZGF0YSwgaW50IHNpemUpCit7CisgICAgUmVmUHRyPEhvc3Q+IHByb3RlY3Rvcih0aGlz
KTsKKworICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVy
KTsKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSA9IHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCk7ICAgIAorICAgIEFTU0VS
VCghcmVzb3VyY2UtPmlzQ2FjaGVWYWxpZGF0b3IoKSk7CisKKyAgICByZXNvdXJjZS0+c2V0U2Vy
aWFsaXplZENhY2hlZE1ldGFkYXRhKGRhdGEsIHNpemUpOworfQorICAgIAogdm9pZCBMb2FkZXI6
Okhvc3Q6OmNhbmNlbFBlbmRpbmdSZXF1ZXN0cyhSZXF1ZXN0UXVldWUmIHJlcXVlc3RzUGVuZGlu
ZywgRG9jTG9hZGVyKiBkb2NMb2FkZXIpCiB7CiAgICAgUmVxdWVzdFF1ZXVlIHJlbWFpbmluZzsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL2xvYWRlci5oCShyZXZpc2lvbiA1ODg1NSkKKysrIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxv
YWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwor
ICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJyZXNv
dXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqKTsKICAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYp
OwogICAgICAgICAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5jcHAJKHJldmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDQgKzE0NSw5IEBAIHZv
aWQgUmVzb3VyY2VIYW5kbGU6OnByZXBhcmVGb3JVUkwoY29uc3QKIH0KICNlbmRpZgogCit2b2lk
IFJlc291cmNlSGFuZGxlOjpjYWNoZU1ldGFkYXRhKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBj
b25zdCBWZWN0b3I8Y2hhcj4mKQoreworICAgIC8vIE9wdGlvbmFsbHkgaW1wbGVtZW50ZWQgYnkg
cGxhdGZvcm0uCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiA1ODg1NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTMsNiArMTEzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291
cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhLCBGcmFtZSog
ZnJhbWUpOwogICAgIHN0YXRpYyB2b2lkIHByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCYpOwogICAg
IHN0YXRpYyBib29sIHdpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1lKik7
CisgICAgc3RhdGljIHZvaWQgY2FjaGVNZXRhZGF0YShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwg
Y29uc3QgVmVjdG9yPGNoYXI+Jik7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHN0YXRpYyBib29s
IGRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCk7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCShyZXZpc2lvbiA1
ODg1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhS
ZWNlaXZlZCovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRh
ZGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQpIHsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSopIHsgfQogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3Im
KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSB7
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55279</attachid>
            <date>2010-05-06 11:43:09 -0700</date>
            <delta_ts>2010-05-10 10:50:39 -0700</delta_ts>
            <desc>Add adoptRefs, remove protected section</desc>
            <filename>37874-6.patch</filename>
            <type>text/plain</type>
            <size>17987</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODg5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMDUtMDYgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcm92aWRlIG1lY2hhbmlzbSB0byBzdG9yZSBjYWNoZWQgbWV0YWRhdGEgb24gYSBDYWNoZWRS
ZXNvdXJjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM3ODc0CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3IGZ1bmN0aW9uYWxp
dHkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZE1l
dGFkYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGE6On5DYWNo
ZWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6ZGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRNZXRhZGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFk
YXRhOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6c2Vy
aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhOjpkYXRhVHlwZUlEKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhOjpyZWFkVW5zaWduZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGE6OmFwcGVuZFVuc2lnbmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZE1ldGFkYXRhOjpDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVy
L0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpz
ZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OnNldENhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291
cmNlOjpjYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6
CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2Fk
ZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2
ZUNhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxvYWRlcjo6SG9zdDo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKToKKyAgICAg
ICAgKiBsb2FkZXIvbG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2FjaGVNZXRh
ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50OjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEp
OgorCiAyMDEwLTA1LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBCZXRoIERha2luLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU4ODU1KQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE3MDksNiArMTcwOSw3IEBACiAg
ICAgICAgICAgICAnbG9hZGVyL3dpbi9GcmFtZUxvYWRlcldpbi5jcHAnLAogICAgICAgICAgICAg
J2xvYWRlci9DYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9DYWNoZS5oJywKKyAgICAg
ICAgICAgICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nh
Y2hlUG9saWN5LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNw
cCcsCiAgICAgICAgICAgICAnbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaCcsCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRNZXRhZGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZE1ldGFkYXRhLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRNZXRhZGF0YS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2FjaGVk
TWV0YWRhdGFfaAorI2RlZmluZSBDYWNoZWRNZXRhZGF0YV9oCisKKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBNZXRhZGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgZW1iZWRkaW5nIGFwcGxpY2F0aW9u
J3MgY2FjaGUuCisvLworLy8gU2VyaWFsaXplZCBkYXRhIGlzIE5PVCBwb3J0YWJsZSBhY3Jvc3Mg
YXJjaGl0ZWN0dXJlcy4gSG93ZXZlciwgcmVhZGluZyB0aGUKKy8vIGRhdGEgdHlwZSBJRCB3aWxs
IHJlamVjdCBkYXRhIGdlbmVyYXRlZCB3aXRoIGEgZGlmZmVyZW50IGJ5dGUtb3JkZXIuCitjbGFz
cyBDYWNoZWRNZXRhZGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlZE1ldGFkYXRhPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FjaGVkTWV0YWRhdGE+IGNyZWF0ZSh1bnNp
Z25lZCBkYXRhVHlwZUlELCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FjaGVkTWV0YWRhdGEoZGF0YVR5cGVJRCwgZGF0
YSwgc2l6ZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhY2hlZE1ldGFkYXRh
PiBkZXNlcmlhbGl6ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FjaGVkTWV0YWRhdGEoZGF0YSwgc2l6ZSkpOworICAg
IH0KKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgc2VyaWFsaXplKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3NlcmlhbGl6ZWREYXRhOworICAgIH0KKworICAgIH5DYWNoZWRNZXRh
ZGF0YSgpIHsgfQorCisgICAgdW5zaWduZWQgZGF0YVR5cGVJRCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gcmVhZFVuc2lnbmVkKGRhdGFUeXBlSURTdGFydCk7CisgICAgfQorCisgICAg
Y29uc3QgY2hhciogZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zZXJpYWxpemVk
RGF0YS5zaXplKCkgPCBkYXRhU3RhcnQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG1fc2VyaWFsaXplZERhdGEuZGF0YSgpICsgZGF0YVN0YXJ0OworICAgIH0KKworICAg
IHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NlcmlhbGl6ZWREYXRh
LnNpemUoKSA8IGRhdGFTdGFydCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9zZXJpYWxpemVkRGF0YS5zaXplKCkgLSBkYXRhU3RhcnQ7CisgICAgfQorCitwcml2YXRl
OgorICAgIC8vIFJlYWRzIGFuIHVuc2lnbmVkIHZhbHVlIGF0IHBvc2l0aW9uLiBSZXR1cm5zIDAg
b24gZXJyb3IuCisgICAgdW5zaWduZWQgcmVhZFVuc2lnbmVkKHNpemVfdCBwb3NpdGlvbikgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChtX3NlcmlhbGl6ZWREYXRhLnNpemUoKSA8IHBvc2l0aW9u
ICsgc2l6ZW9mKHVuc2lnbmVkKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihjb25zdF9jYXN0PGNoYXIqPihtX3Nlcmlh
bGl6ZWREYXRhLmRhdGEoKSArIHBvc2l0aW9uKSk7CisgICAgfQorCisgICAgLy8gQXBwZW5kcyBh
biB1bnNpZ25lZCB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZSBzZXJpYWxpemVkIGRhdGEuCisgICAg
dm9pZCBhcHBlbmRVbnNpZ25lZCh1bnNpZ25lZCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc2Vy
aWFsaXplZERhdGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZ2YWx1ZSks
IHNpemVvZih1bnNpZ25lZCkpOworICAgIH0KKworICAgIENhY2hlZE1ldGFkYXRhKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gU2VyaWFsaXplZCBtZXRh
ZGF0YSBzaG91bGQgaGF2ZSBub24tZW1wdHkgZGF0YS4KKyAgICAgICAgQVNTRVJUKHNpemUgPiBk
YXRhU3RhcnQpOworCisgICAgICAgIG1fc2VyaWFsaXplZERhdGEuYXBwZW5kKGRhdGEsIHNpemUp
OworICAgIH0KKworICAgIENhY2hlZE1ldGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQsIGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgYWxsb3cg
YW4gSUQgb2YgMCwgaXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGluZGljYXRlIGVycm9ycy4KKyAg
ICAgICAgQVNTRVJUKGRhdGFUeXBlSUQpOworICAgICAgICBBU1NFUlQoZGF0YSk7CisKKyAgICAg
ICAgYXBwZW5kVW5zaWduZWQoZGF0YVR5cGVJRCk7CisgICAgICAgIG1fc2VyaWFsaXplZERhdGEu
YXBwZW5kKGRhdGEsIHNpemUpOworICAgIH0KKworICAgIC8vIFNlcmlhbGl6YXRpb24gb2Zmc2V0
cy4gRm9ybWF0OiBbREFUQV9UWVBFX0lEXVtEQVRBXS4KKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGRhdGFUeXBlSURTdGFydCA9IDA7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBkYXRhU3RhcnQg
PSBzaXplb2YodW5zaWduZWQpOworCisgICAgLy8gU2luY2UgdGhlIHNlcmlhbGl6YXRpb24gZm9y
bWF0IHN1cHBvcnRzIHJhbmRvbSBhY2Nlc3MsIHN0b3JpbmcgaXQgaW4KKyAgICAvLyBzZXJpYWxp
emVkIGZvcm0gYXZvaWRzIG5lZWQgZm9yIGEgY29weSBkdXJpbmcgc2VyaWFsaXphdGlvbi4KKyAg
ICBWZWN0b3I8Y2hhcj4gbV9zZXJpYWxpemVkRGF0YTsKK307CisKK30KKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA1ODg1NSkKKysrIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1LDE1
IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKIAogI2luY2x1ZGUgIkNhY2hlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkTWV0YWRhdGEuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQdXJnZWFibGVCdWZmZXIuaCIKICNpbmNsdWRlICJSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgpAQCAtMTY0LDYgKzE2NiwzNCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNw
b25zZShjb25zdCBSCiAgICAgbV9yZXNwb25zZVRpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CiB9
CiAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFNlcmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICAvLyBXZSBvbmx5IGV4cGVjdCB0byBy
ZWNlaXZlIGNhY2hlZCBtZXRhZGF0YSBmcm9tIHRoZSBwbGF0Zm9ybSBvbmNlLgorICAgIC8vIElm
IHRoaXMgdHJpZ2dlcnMsIGl0IGluZGljYXRlcyBhbiBlZmZpY2llbmN5IHByb2JsZW0gd2hpY2gg
aXMgbW9zdAorICAgIC8vIGxpa2VseSB1bmV4cGVjdGVkIGluIGNvZGUgZGVzaWduZWQgdG8gaW1w
cm92ZSBwZXJmb3JtYW5jZS4KKyAgICBBU1NFUlQoIW1fY2FjaGVkTWV0YWRhdGEpOworCisgICAg
bV9jYWNoZWRNZXRhZGF0YSA9IENhY2hlZE1ldGFkYXRhOjpkZXNlcmlhbGl6ZShkYXRhLCBzaXpl
KTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0Q2FjaGVkTWV0YWRhdGEodW5zaWduZWQg
ZGF0YVR5cGVJRCwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgLy8gQ3Vy
cmVudGx5LCBvbmx5IG9uZSB0eXBlIG9mIGNhY2hlZCBtZXRhZGF0YSBwZXIgcmVzb3VyY2UgaXMg
c3VwcG9ydGVkLgorICAgIC8vIElmIHRoZSBuZWVkIGFyaXNlcyBmb3IgbXVsdGlwbGUgdHlwZXMg
b2YgbWV0YWRhdGEgcGVyIHJlc291cmNlIHRoaXMgY291bGQKKyAgICAvLyBiZSBlbmhhbmNlZCB0
byBzdG9yZSB0eXBlcyBvZiBtZXRhZGF0YSBpbiBhIG1hcC4KKyAgICBBU1NFUlQoIW1fY2FjaGVk
TWV0YWRhdGEpOworCisgICAgbV9jYWNoZWRNZXRhZGF0YSA9IENhY2hlZE1ldGFkYXRhOjpjcmVh
dGUoZGF0YVR5cGVJRCwgZGF0YSwgc2l6ZSk7CisgICAgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0
YWRhdGEobV9yZXNwb25zZSwgbV9jYWNoZWRNZXRhZGF0YS0+c2VyaWFsaXplKCkpOworfQorCitD
YWNoZWRNZXRhZGF0YSogQ2FjaGVkUmVzb3VyY2U6OmNhY2hlZE1ldGFkYXRhKHVuc2lnbmVkIGRh
dGFUeXBlSUQpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NhY2hlZE1ldGFkYXRhIHx8IG1fY2FjaGVk
TWV0YWRhdGEtPmRhdGFUeXBlSUQoKSAhPSBkYXRhVHlwZUlEKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbV9jYWNoZWRNZXRhZGF0YS5nZXQoKTsKK30KKwogdm9pZCBDYWNoZWRSZXNv
dXJjZTo6c2V0UmVxdWVzdChSZXF1ZXN0KiByZXF1ZXN0KQogewogICAgIGlmIChyZXF1ZXN0ICYm
ICFtX3JlcXVlc3QpCkBAIC0zODQsNyArNDE0LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6dXBk
YXRlUmVzcG9uc2VBZnRlcgogICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwogICAgIH0KIH0KLSAgICAKKwogYm9vbCBDYWNoZWRSZXNv
dXJjZTo6Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdAogewogICAgIGlmIChtX2xvYWRpbmcg
fHwgbV9lcnJvck9jY3VycmVkKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lv
biA1ODg1NSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDkgKzM2LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hl
OworY2xhc3MgQ2FjaGVkTWV0YWRhdGE7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKIGNs
YXNzIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTsKIGNsYXNzIERvY0xvYWRlcjsKK2NsYXNzIEZy
YW1lOwogY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBSZXF1ZXN0OwogY2xhc3MgUHVy
Z2VhYmxlQnVmZmVyOwpAQCAtMTQyLDYgKzE0NCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CiAKKyAgICAvLyBT
ZXRzIHRoZSBzZXJpYWxpemVkIG1ldGFkYXRhIHJldHJpZXZlZCBmcm9tIHRoZSBwbGF0Zm9ybSdz
IGNhY2hlLgorICAgIHZvaWQgc2V0U2VyaWFsaXplZENhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIq
LCBzaXplX3QpOworCisgICAgLy8gQ2FjaGVzIHRoZSBnaXZlbiBtZXRhZGF0YSBpbiBhc3NvY2lh
dGlvbiB3aXRoIHRoaXMgcmVzb3VyY2UgYW5kIHN1Z2dlc3RzCisgICAgLy8gdGhhdCB0aGUgcGxh
dGZvcm0gcGVyc2lzdCBpdC4gVGhlIGRhdGFUeXBlSUQgaXMgYSBwc2V1ZG8tcmFuZG9tbHkgY2hv
c2VuCisgICAgLy8gaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggZGF0YSBn
ZW5lcmF0ZWQgYnkgdGhlIGNhbGxlci4KKyAgICB2b2lkIHNldENhY2hlZE1ldGFkYXRhKHVuc2ln
bmVkIGRhdGFUeXBlSUQsIGNvbnN0IGNoYXIqLCBzaXplX3QpOworCisgICAgLy8gUmV0dXJucyBj
YWNoZWQgbWV0YWRhdGEgb2YgdGhlIGdpdmVuIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVz
b3VyY2UuCisgICAgQ2FjaGVkTWV0YWRhdGEqIGNhY2hlZE1ldGFkYXRhKHVuc2lnbmVkIGRhdGFU
eXBlSUQpIGNvbnN0OworCiAgICAgYm9vbCBjYW5EZWxldGUoKSBjb25zdCB7IHJldHVybiAhaGFz
Q2xpZW50cygpICYmICFtX3JlcXVlc3QgJiYgIW1fcHJlbG9hZENvdW50ICYmICFtX2hhbmRsZUNv
dW50ICYmICFtX3Jlc291cmNlVG9SZXZhbGlkYXRlICYmICFtX3Byb3h5UmVzb3VyY2U7IH0KIAog
ICAgIGJvb2wgaXNFeHBpcmVkKCkgY29uc3Q7CkBAIC0yMTYsNiArMjI5LDcgQEAgcHJpdmF0ZToK
ICAgICBkb3VibGUgY3VycmVudEFnZSgpIGNvbnN0OwogICAgIGRvdWJsZSBmcmVzaG5lc3NMaWZl
dGltZSgpIGNvbnN0OwogCisgICAgUmVmUHRyPENhY2hlZE1ldGFkYXRhPiBtX2NhY2hlZE1ldGFk
YXRhOwogICAgIHVuc2lnbmVkIG1fZW5jb2RlZFNpemU7CiAgICAgdW5zaWduZWQgbV9kZWNvZGVk
U2l6ZTsKICAgICB1bnNpZ25lZCBtX2FjY2Vzc0NvdW50OwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5oCShyZXZpc2lvbiA1ODg1NSkKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVz
U2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9u
ZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29sIGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCkgeyB9CiAgICAg
ICAgIHZvaWQgd2lsbFN0b3BCdWZmZXJpbmdEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CkBAIC05Nyw2ICs5OCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFJlc291cmNlSGFu
ZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBp
bnQsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
Q2FjaGVkTWV0YWRhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKSB7IGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShkYXRhLCBsZW5ndGgpOyB9CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNTg4NTUpCisr
KyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSw2ICsxNzEsMTYgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEo
YwogICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgbGVuZ3RoKTsK
IH0KIAordm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgLy8gUmVmZXJlbmNlIHRoZSBvYmpl
Y3QgaW4gdGhpcyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8K
KyAgICAvLyBhbnl0aGluZyBpbmNsdWRpbmcgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRv
IHRoaXMgb2JqZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYuCisgICAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworICAgIAorICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSh0aGlzLCBkYXRh
LCBsZW5ndGgpOworfQorCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5n
KCkKIHsKICAgICBpZiAoY2FuY2VsbGVkKCkpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNv
dXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmgJKHJldmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0
ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50LCBs
b25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiwgaW50KTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291
cmNlTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNTg4NTUpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VM
b2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0
aFJlY2VpdmVkKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRh
dGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQq
LykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2Fk
ZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNv
bnN0IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkocmV2aXNpb24g
NTg4NTUpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NTEsNiArNTUxLDIwIEBAIHZvaWQgTG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlRGF0YShTdWJyZXMK
ICAgICAgICAgcmVzb3VyY2UtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgZmFsc2UpOwog
fQogICAgIAordm9pZCBMb2FkZXI6Okhvc3Q6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJy
ZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKK3sKKyAg
ICBSZWZQdHI8SG9zdD4gcHJvdGVjdG9yKHRoaXMpOworCisgICAgUmVxdWVzdCogcmVxdWVzdCA9
IG1fcmVxdWVzdHNMb2FkaW5nLmdldChsb2FkZXIpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2Fj
aGVkUmVzb3VyY2UoKTsgICAgCisgICAgQVNTRVJUKCFyZXNvdXJjZS0+aXNDYWNoZVZhbGlkYXRv
cigpKTsKKworICAgIHJlc291cmNlLT5zZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEoZGF0YSwg
c2l6ZSk7Cit9CisgICAgCiB2b2lkIExvYWRlcjo6SG9zdDo6Y2FuY2VsUGVuZGluZ1JlcXVlc3Rz
KFJlcXVlc3RRdWV1ZSYgcmVxdWVzdHNQZW5kaW5nLCBEb2NMb2FkZXIqIGRvY0xvYWRlcikKIHsK
ICAgICBSZXF1ZXN0UXVldWUgcmVtYWluaW5nOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHJldmlzaW9uIDU4ODU1
KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNl
TG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGlu
dCk7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJj
ZUxvYWRlciopOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VM
b2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgICAgICAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gNTg4NTUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUsNCArMTQ1LDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cHJlcGFyZUZv
clVSTChjb25zdAogfQogI2VuZGlmCiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRh
dGEoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpCit7CisgICAg
Ly8gT3B0aW9uYWxseSBpbXBsZW1lbnRlZCBieSBwbGF0Zm9ybS4KK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmgJKHJldmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2Um
LCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKiBmcmFtZSk7CiAgICAgc3RhdGljIHZvaWQgcHJl
cGFyZUZvclVSTChjb25zdCBLVVJMJik7CiAgICAgc3RhdGljIGJvb2wgd2lsbExvYWRGcm9tQ2Fj
aGUoUmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWUqKTsKKyAgICBzdGF0aWMgdm9pZCBjYWNoZU1ldGFk
YXRhKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgc3RhdGljIGJvb2wgZGlkU2VuZEJvZHlEYXRhRGVsZWdhdGVFeGlz
dHMoKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlQ2xpZW50LmgJKHJldmlzaW9uIDU4ODU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNv
bnN0IGNoYXIqLCBpbnQsIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
Y2hhciosIGludCkgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJl
c291cmNlSGFuZGxlKikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNl
SGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQg
d2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55568</attachid>
            <date>2010-05-10 10:50:45 -0700</date>
            <delta_ts>2010-05-10 11:14:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37874-20100510105043.patch</filename>
            <type>text/plain</type>
            <size>19889</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTljNTQ2YzcyYmNjMDU2Y2IxODc3NWMzN2E1Nzk5ZjNmNjQyZTgxYS4uOWNkNWUxYmE3OGZlMWMy
NWFmNjhlZTY5ZjU4NTk3MDIzNjJlYTU3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMC0wNS0xMCAgVG9u
eSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGUgbWVjaGFuaXNtIHRvIGNhY2hlIG1l
dGFkYXRhIGZvciBhIHJlc291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNzg3NAorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5l
dyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGxv
YWRlci9DYWNoZWRNZXRhZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1l
dGFkYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGE6OmRlc2Vy
aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhOjpzZXJpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTWV0YWRhdGE6On5DYWNoZWRNZXRhZGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6ZGF0YVR5cGVJRCk6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRNZXRhZGF0YTo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRh
ZGF0YTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6cmVhZFVuc2ln
bmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE1ldGFkYXRhOjphcHBlbmRVbnNpZ25lZCk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRNZXRhZGF0YTo6Q2FjaGVkTWV0YWRhdGEpOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZTo6c2V0U2VyaWFsaXplZENhY2hlZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlOjpzZXRDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRSZXNvdXJjZTo6Y2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAqIGxvYWRlci9DYWNo
ZWRSZXNvdXJjZS5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6Cisg
ICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEpOgorICAgICAgICAq
IGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXJDbGll
bnQ6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6CisgICAgICAgICogbG9hZGVyL2xvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmRpZFJlY2VpdmVDYWNoZWRNZXRh
ZGF0YSk6CisgICAgICAgICogbG9hZGVyL2xvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlkUmVjZWl2ZUNh
Y2hlZE1ldGFkYXRhKToKKwogMjAxMC0wNS0xMCAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjRk
YzRlNWU4NTJhYmFkNzk2Yjg2MTk4MmU3YWFhMTM0YjcwNDM0NS4uNzE2NmIwZjE5NDdhODA3YTIz
M2ZjMjg1OTAwYWI4NzFjM2RkNjMwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE3MTgsNiArMTcxOCw3IEBACiAgICAgICAg
ICAgICAnbG9hZGVyL3dpbi9GcmFtZUxvYWRlcldpbi5jcHAnLAogICAgICAgICAgICAgJ2xvYWRl
ci9DYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9DYWNoZS5oJywKKyAgICAgICAgICAg
ICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0NhY2hlUG9s
aWN5LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCcsCiAg
ICAgICAgICAgICAnbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaCcsCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2xvYWRlci9DYWNoZWRNZXRhZGF0YS5oIGIvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkTWV0
YWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kMjY1MzllZmVjMzdjNTY3MjAwNDIyMTBlMzFiMWZjMDYzMzJk
NWNmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaApA
QCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ2FjaGVkTWV0YWRhdGFfaAorI2RlZmluZSBDYWNoZWRN
ZXRhZGF0YV9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBNZXRhZGF0YSByZXRyaWV2ZWQg
ZnJvbSB0aGUgZW1iZWRkaW5nIGFwcGxpY2F0aW9uJ3MgY2FjaGUuCisvLworLy8gU2VyaWFsaXpl
ZCBkYXRhIGlzIE5PVCBwb3J0YWJsZSBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4gSG93ZXZlciwgcmVh
ZGluZyB0aGUKKy8vIGRhdGEgdHlwZSBJRCB3aWxsIHJlamVjdCBkYXRhIGdlbmVyYXRlZCB3aXRo
IGEgZGlmZmVyZW50IGJ5dGUtb3JkZXIuCitjbGFzcyBDYWNoZWRNZXRhZGF0YSA6IHB1YmxpYyBS
ZWZDb3VudGVkPENhY2hlZE1ldGFkYXRhPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2FjaGVkTWV0YWRhdGE+IGNyZWF0ZSh1bnNpZ25lZCBkYXRhVHlwZUlELCBjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q2FjaGVkTWV0YWRhdGEoZGF0YVR5cGVJRCwgZGF0YSwgc2l6ZSkpOworICAgIH0KKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENhY2hlZE1ldGFkYXRhPiBkZXNlcmlhbGl6ZShjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2Fj
aGVkTWV0YWRhdGEoZGF0YSwgc2l6ZSkpOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiYgc2VyaWFsaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NlcmlhbGl6ZWRE
YXRhOworICAgIH0KKworICAgIH5DYWNoZWRNZXRhZGF0YSgpIHsgfQorCisgICAgdW5zaWduZWQg
ZGF0YVR5cGVJRCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVhZFVuc2lnbmVkKGRh
dGFUeXBlSURTdGFydCk7CisgICAgfQorCisgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9zZXJpYWxpemVkRGF0YS5zaXplKCkgPCBkYXRhU3RhcnQpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fc2VyaWFsaXplZERhdGEuZGF0
YSgpICsgZGF0YVN0YXJ0OworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChtX3NlcmlhbGl6ZWREYXRhLnNpemUoKSA8IGRhdGFTdGFydCkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9zZXJpYWxpemVkRGF0YS5zaXplKCkg
LSBkYXRhU3RhcnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIFJlYWRzIGFuIHVuc2lnbmVk
IHZhbHVlIGF0IHBvc2l0aW9uLiBSZXR1cm5zIDAgb24gZXJyb3IuCisgICAgdW5zaWduZWQgcmVh
ZFVuc2lnbmVkKHNpemVfdCBwb3NpdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nl
cmlhbGl6ZWREYXRhLnNpemUoKSA8IHBvc2l0aW9uICsgc2l6ZW9mKHVuc2lnbmVkKSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQqPihjb25zdF9jYXN0PGNoYXIqPihtX3NlcmlhbGl6ZWREYXRhLmRhdGEoKSArIHBvc2l0aW9u
KSk7CisgICAgfQorCisgICAgLy8gQXBwZW5kcyBhbiB1bnNpZ25lZCB2YWx1ZSB0byB0aGUgZW5k
IG9mIHRoZSBzZXJpYWxpemVkIGRhdGEuCisgICAgdm9pZCBhcHBlbmRVbnNpZ25lZCh1bnNpZ25l
ZCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc2VyaWFsaXplZERhdGEuYXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZ2YWx1ZSksIHNpemVvZih1bnNpZ25lZCkpOworICAgIH0K
KworICAgIENhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQorICAg
IHsKKyAgICAgICAgLy8gU2VyaWFsaXplZCBtZXRhZGF0YSBzaG91bGQgaGF2ZSBub24tZW1wdHkg
ZGF0YS4KKyAgICAgICAgQVNTRVJUKHNpemUgPiBkYXRhU3RhcnQpOworCisgICAgICAgIG1fc2Vy
aWFsaXplZERhdGEuYXBwZW5kKGRhdGEsIHNpemUpOworICAgIH0KKworICAgIENhY2hlZE1ldGFk
YXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQor
ICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgYWxsb3cgYW4gSUQgb2YgMCwgaXQgaXMgdXNlZCBpbnRl
cm5hbGx5IHRvIGluZGljYXRlIGVycm9ycy4KKyAgICAgICAgQVNTRVJUKGRhdGFUeXBlSUQpOwor
ICAgICAgICBBU1NFUlQoZGF0YSk7CisKKyAgICAgICAgYXBwZW5kVW5zaWduZWQoZGF0YVR5cGVJ
RCk7CisgICAgICAgIG1fc2VyaWFsaXplZERhdGEuYXBwZW5kKGRhdGEsIHNpemUpOworICAgIH0K
KworICAgIC8vIFNlcmlhbGl6YXRpb24gb2Zmc2V0cy4gRm9ybWF0OiBbREFUQV9UWVBFX0lEXVtE
QVRBXS4KKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGRhdGFUeXBlSURTdGFydCA9IDA7CisgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBkYXRhU3RhcnQgPSBzaXplb2YodW5zaWduZWQpOworCisgICAg
Ly8gU2luY2UgdGhlIHNlcmlhbGl6YXRpb24gZm9ybWF0IHN1cHBvcnRzIHJhbmRvbSBhY2Nlc3Ms
IHN0b3JpbmcgaXQgaW4KKyAgICAvLyBzZXJpYWxpemVkIGZvcm0gYXZvaWRzIG5lZWQgZm9yIGEg
Y29weSBkdXJpbmcgc2VyaWFsaXphdGlvbi4KKyAgICBWZWN0b3I8Y2hhcj4gbV9zZXJpYWxpemVk
RGF0YTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9DYWNo
ZWRSZXNvdXJjZS5jcHAgYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKaW5kZXgg
YzY5NzkxZDRiOGMzNmZiYWJmYzZlZjk1NWI2ZmY3ZDBiZjIzNDZlMy4uMjBmYTRmYjQ4OWQ0YjE0
ZTE4NmFmOTQwN2E3ZThhNzM0OTg4MDIzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkUmVzb3VyY2UuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcApA
QCAtMjUsMTMgKzI1LDE1IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKIAogI2luY2x1
ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkTWV0YWRhdGEuaCIKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQdXJnZWFibGVCdWZmZXIuaCIK
ICNpbmNsdWRlICJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTY0LDYgKzE2NiwzNCBAQCB2b2lkIENhY2hlZFJl
c291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKICAg
ICBtX3Jlc3BvbnNlVGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKIH0KIAordm9pZCBDYWNoZWRS
ZXNvdXJjZTo6c2V0U2VyaWFsaXplZENhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNp
emVfdCBzaXplKQoreworICAgIC8vIFdlIG9ubHkgZXhwZWN0IHRvIHJlY2VpdmUgY2FjaGVkIG1l
dGFkYXRhIGZyb20gdGhlIHBsYXRmb3JtIG9uY2UuCisgICAgLy8gSWYgdGhpcyB0cmlnZ2Vycywg
aXQgaW5kaWNhdGVzIGFuIGVmZmljaWVuY3kgcHJvYmxlbSB3aGljaCBpcyBtb3N0CisgICAgLy8g
bGlrZWx5IHVuZXhwZWN0ZWQgaW4gY29kZSBkZXNpZ25lZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNl
LgorICAgIEFTU0VSVCghbV9jYWNoZWRNZXRhZGF0YSk7CisKKyAgICBtX2NhY2hlZE1ldGFkYXRh
ID0gQ2FjaGVkTWV0YWRhdGE6OmRlc2VyaWFsaXplKGRhdGEsIHNpemUpOworfQorCit2b2lkIENh
Y2hlZFJlc291cmNlOjpzZXRDYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCBkYXRhVHlwZUlELCBjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICAvLyBDdXJyZW50bHksIG9ubHkgb25l
IHR5cGUgb2YgY2FjaGVkIG1ldGFkYXRhIHBlciByZXNvdXJjZSBpcyBzdXBwb3J0ZWQuCisgICAg
Ly8gSWYgdGhlIG5lZWQgYXJpc2VzIGZvciBtdWx0aXBsZSB0eXBlcyBvZiBtZXRhZGF0YSBwZXIg
cmVzb3VyY2UgdGhpcyBjb3VsZAorICAgIC8vIGJlIGVuaGFuY2VkIHRvIHN0b3JlIHR5cGVzIG9m
IG1ldGFkYXRhIGluIGEgbWFwLgorICAgIEFTU0VSVCghbV9jYWNoZWRNZXRhZGF0YSk7CisKKyAg
ICBtX2NhY2hlZE1ldGFkYXRhID0gQ2FjaGVkTWV0YWRhdGE6OmNyZWF0ZShkYXRhVHlwZUlELCBk
YXRhLCBzaXplKTsKKyAgICBSZXNvdXJjZUhhbmRsZTo6Y2FjaGVNZXRhZGF0YShtX3Jlc3BvbnNl
LCBtX2NhY2hlZE1ldGFkYXRhLT5zZXJpYWxpemUoKSk7Cit9CisKK0NhY2hlZE1ldGFkYXRhKiBD
YWNoZWRSZXNvdXJjZTo6Y2FjaGVkTWV0YWRhdGEodW5zaWduZWQgZGF0YVR5cGVJRCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fY2FjaGVkTWV0YWRhdGEgfHwgbV9jYWNoZWRNZXRhZGF0YS0+ZGF0YVR5
cGVJRCgpICE9IGRhdGFUeXBlSUQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2Nh
Y2hlZE1ldGFkYXRhLmdldCgpOworfQorCiB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXF1ZXN0
KFJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgaWYgKHJlcXVlc3QgJiYgIW1fcmVxdWVzdCkKQEAg
LTM4NCw3ICs0MTQsNyBAQCB2b2lkIENhY2hlZFJlc291cmNlOjp1cGRhdGVSZXNwb25zZUFmdGVy
UmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbAogICAgICAgICBtX3Jlc3Bv
bnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwogICAgIH0KIH0K
LSAgICAKKwogYm9vbCBDYWNoZWRSZXNvdXJjZTo6Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25z
dAogewogICAgIGlmIChtX2xvYWRpbmcgfHwgbV9lcnJvck9jY3VycmVkKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaCBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlZFJl
c291cmNlLmgKaW5kZXggNzFmMThjODY3MzEyMjMzODM5ODE0MDE0NDQyYmEyOWIyZmM2NmQ0OC4u
NzQ1MDFlZTE0YzhkNGM1MWY1OTUxMDA3ZDhkOTYyYjg0OWE3NWE1NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAorKysgYi9XZWJDb3JlL2xvYWRlci9DYWNoZWRS
ZXNvdXJjZS5oCkBAIC0zNiw5ICszNiwxMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDYWNoZTsKK2NsYXNzIENhY2hlZE1ldGFkYXRhOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGll
bnQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U7CiBjbGFzcyBEb2NMb2FkZXI7Citj
bGFzcyBGcmFtZTsKIGNsYXNzIEluc3BlY3RvclJlc291cmNlOwogY2xhc3MgUmVxdWVzdDsKIGNs
YXNzIFB1cmdlYWJsZUJ1ZmZlcjsKQEAgLTE0Miw2ICsxNDQsMTcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQogCisg
ICAgLy8gU2V0cyB0aGUgc2VyaWFsaXplZCBtZXRhZGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgcGxh
dGZvcm0ncyBjYWNoZS4KKyAgICB2b2lkIHNldFNlcmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShjb25z
dCBjaGFyKiwgc2l6ZV90KTsKKworICAgIC8vIENhY2hlcyB0aGUgZ2l2ZW4gbWV0YWRhdGEgaW4g
YXNzb2NpYXRpb24gd2l0aCB0aGlzIHJlc291cmNlIGFuZCBzdWdnZXN0cworICAgIC8vIHRoYXQg
dGhlIHBsYXRmb3JtIHBlcnNpc3QgaXQuIFRoZSBkYXRhVHlwZUlEIGlzIGEgcHNldWRvLXJhbmRv
bWx5IGNob3NlbgorICAgIC8vIGlkZW50aWZpZXIgdGhhdCBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNo
IGRhdGEgZ2VuZXJhdGVkIGJ5IHRoZSBjYWxsZXIuCisgICAgdm9pZCBzZXRDYWNoZWRNZXRhZGF0
YSh1bnNpZ25lZCBkYXRhVHlwZUlELCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKKworICAgIC8vIFJl
dHVybnMgY2FjaGVkIG1ldGFkYXRhIG9mIHRoZSBnaXZlbiB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIHJlc291cmNlLgorICAgIENhY2hlZE1ldGFkYXRhKiBjYWNoZWRNZXRhZGF0YSh1bnNpZ25l
ZCBkYXRhVHlwZUlEKSBjb25zdDsKKwogICAgIGJvb2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1
cm4gIWhhc0NsaWVudHMoKSAmJiAhbV9yZXF1ZXN0ICYmICFtX3ByZWxvYWRDb3VudCAmJiAhbV9o
YW5kbGVDb3VudCAmJiAhbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSAmJiAhbV9wcm94eVJlc291cmNl
OyB9CiAKICAgICBib29sIGlzRXhwaXJlZCgpIGNvbnN0OwpAQCAtMjE2LDYgKzIyOSw3IEBAIHBy
aXZhdGU6CiAgICAgZG91YmxlIGN1cnJlbnRBZ2UoKSBjb25zdDsKICAgICBkb3VibGUgZnJlc2hu
ZXNzTGlmZXRpbWUoKSBjb25zdDsKIAorICAgIFJlZlB0cjxDYWNoZWRNZXRhZGF0YT4gbV9jYWNo
ZWRNZXRhZGF0YTsKICAgICB1bnNpZ25lZCBtX2VuY29kZWRTaXplOwogICAgIHVuc2lnbmVkIG1f
ZGVjb2RlZFNpemU7CiAgICAgdW5zaWduZWQgbV9hY2Nlc3NDb3VudDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmggYi9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5oCmluZGV4IDlkZWVhYzk0MjNkYThhNjQzZmM1MjUwNjQxYTE4MTcxYjVjZWVjNzUuLmNi
ZGQ4YzIwN2MzNThlNzg1NGMxNzJkZTA2MWVkN2JmZWEzMzcwMmEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuaApAQCAtODAsNiArODAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50LCBsb25nIGxvbmcgbGVu
Z3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiwgaW50KSB7IH0KICAgICAgICAgdm9pZCB3
aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKQEAgLTk3LDYgKzk4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqLCB1bnNp
Z25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1Rv
QmVTZW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IGxl
bmd0aFJlY2VpdmVkKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRh
ZGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIHsgZGlk
UmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGRhdGEsIGxlbmd0aCk7IH0KICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxlKik7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggZjkyYTA3NGFiNTcwZGJiNDZkZTg2YjUyOTYzODNi
M2E2YmFmOWViYS4uMWI3MzJjMTQyNzdhMjAwYjA4MjdkNTU3N2M5MTYyN2VlNTU5YTUxMSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1dlYkNv
cmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcApAQCAtMTcxLDYgKzE3MSwxNiBAQCB2b2lk
IFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoLCBsb25nIGxvbmcgbAogICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEodGhp
cywgZGF0YSwgbGVuZ3RoKTsKIH0KIAordm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgLy8g
UmVmZXJlbmNlIHRoZSBvYmplY3QgaW4gdGhpcyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwg
cHJvY2Vzc2luZyBjYW4gZG8KKyAgICAvLyBhbnl0aGluZyBpbmNsdWRpbmcgcmVtb3ZpbmcgdGhl
IGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMy
NjYyMTYuCisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworICAg
IAorICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDYWNoZWRN
ZXRhZGF0YSh0aGlzLCBkYXRhLCBsZW5ndGgpOworfQorCiB2b2lkIFN1YnJlc291cmNlTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKCkKIHsKICAgICBpZiAoY2FuY2VsbGVkKCkpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvU3Vi
cmVzb3VyY2VMb2FkZXIuaAppbmRleCA5MDdkOTE3OTMxNjY3OGQ2ZDUwNzQxZWNjN2UzZWRkM2Nm
NzM2MDg5Li40YTU4MzQ1OTM1N2M4NDU4OWE3ZTI4Y2NjYjM5YmYyZDgzMTdmNzZjIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCisrKyBiL1dlYkNvcmUvbG9h
ZGVyL1N1YnJlc291cmNlTG9hZGVyLmgKQEAgLTUxLDYgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25n
IGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGlu
dCwgbG9uZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29sIGFsbEF0T25jZSk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCk7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgdmlydHVhbCBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oIGIvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VM
b2FkZXJDbGllbnQuaAppbmRleCA3NmZkZTQ3NTYwMTgyMjYxOWQxYjQzZmM0NzZhY2U4YzFiYjlj
MDMwLi5lMThhYmUzOGQ2MTllMzc2M2E0ZmFlMjE1NmYxZDViODA3MTFhOThiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oCisrKyBiL1dlYkNvcmUv
bG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IC8qbGVuZ3RoUmVj
ZWl2ZWQqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShT
dWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciop
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3Qg
UmVzb3VyY2VFcnJvciYpIHsgfQogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvbG9h
ZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAKaW5kZXggMWY5ZDg3NDQwZmRlN2Jk
NDkyZGUzZmQ5NzJlNDY1ZWZhMmNmODU1YS4uMTRiOWE1NjM3NDkxMDRkYzg5ZGQ3ZmE3OWQ3NTU1
MTQ5ZjZlY2YwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAorKysgYi9X
ZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCkBAIC01NTEsNiArNTUxLDIwIEBAIHZvaWQgTG9hZGVy
OjpIb3N0OjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBj
aGFyKiBkYXRhLCBpCiAgICAgICAgIHJlc291cmNlLT5kYXRhKGxvYWRlci0+cmVzb3VyY2VEYXRh
KCksIGZhbHNlKTsKIH0KICAgICAKK3ZvaWQgTG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlQ2FjaGVk
TWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50
IHNpemUpCit7CisgICAgUmVmUHRyPEhvc3Q+IHByb3RlY3Rvcih0aGlzKTsKKworICAgIFJlcXVl
c3QqIHJlcXVlc3QgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVyKTsKKyAgICBpZiAoIXJl
cXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9
IHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCk7ICAgIAorICAgIEFTU0VSVCghcmVzb3VyY2UtPmlz
Q2FjaGVWYWxpZGF0b3IoKSk7CisKKyAgICByZXNvdXJjZS0+c2V0U2VyaWFsaXplZENhY2hlZE1l
dGFkYXRhKGRhdGEsIHNpemUpOworfQorICAgIAogdm9pZCBMb2FkZXI6Okhvc3Q6OmNhbmNlbFBl
bmRpbmdSZXF1ZXN0cyhSZXF1ZXN0UXVldWUmIHJlcXVlc3RzUGVuZGluZywgRG9jTG9hZGVyKiBk
b2NMb2FkZXIpCiB7CiAgICAgUmVxdWVzdFF1ZXVlIHJlbWFpbmluZzsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvbG9hZGVyL2xvYWRlci5oIGIvV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgKaW5kZXggYTlk
ZTAzMjExMjlkNDVhYjg2MzExYWQ5OWNmNDc0NDQ2YThlM2FlYi4uNDgzMjRlMmE5N2E1NGU3YTdm
Y2NhMjMwYzQ0ZThmNWRlYTk2ZDExZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvbG9hZGVy
LmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgKQEAgLTg3LDYgKzg3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29u
c3QgY2hhciosIGludCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hl
ZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7CiAgICAgICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciopOwog
ICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25z
dCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IDdmNjFkMmRlYjVlMTYwNDNmNzQ1ZDE1ZGYzNWFm
Y2U2OWE1ZGE3ZTIuLmRlNDE2ZmVlYjVmNTA1MzE3M2MyZDcwMTAyZjYxNzY3YzQzYjc4NTkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcApAQCAtMTQ1LDQg
KzE0NSw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCYg
dXJsKQogfQogI2VuZGlmCiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpCit7CisgICAgLy8gT3B0
aW9uYWxseSBpbXBsZW1lbnRlZCBieSBwbGF0Zm9ybS4KK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCAzY2Vi
MTJlM2RlYTNmMTQzOTExOGE2MmY2M2Y2MDhhNDhiOWRmMDZiLi5lMTA4NjVkZWI5NGViYzQ1OTMz
ZTlmMjJmYzJhN2IzMWY0Y2FmNWQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGUuaApAQCAtMTEzLDYgKzExMyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBs
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENy
ZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFy
PiYgZGF0YSwgRnJhbWUqIGZyYW1lKTsKICAgICBzdGF0aWMgdm9pZCBwcmVwYXJlRm9yVVJMKGNv
bnN0IEtVUkwmKTsKICAgICBzdGF0aWMgYm9vbCB3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJl
cXVlc3QmLCBGcmFtZSopOworICAgIHN0YXRpYyB2b2lkIGNhY2hlTWV0YWRhdGEoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYsIGNvbnN0IFZlY3RvcjxjaGFyPiYpOwogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICBzdGF0aWMgYm9vbCBkaWRTZW5kQm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGll
bnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCmlu
ZGV4IGJiYzNjZjhiMTI5YTYwNzk5YjYyYzhmOWJlYjdkYmY2NjVlZTQ4YTYuLjAwOTgwMTA3ZGM1
NGYyMDliZDg0NGI0NjkwYTRjYjAwZmM5MjlkNTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCkBAIC02OSw2ICs2OSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50
LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVDYWNoZWRNZXRhZGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQpIHsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSop
IHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVz
b3VyY2VIYW5kbGUqKSB7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDdmMDAzM2JiM2FkYTUxOGNhZTI0YzY5
ZTg4NDZjODFkZWI1NjEyNjkuLjVjY2E0M2Q4NTI0Y2M2Yzc1OTlkNjNmMGRiNzNiZDMxZjYzYWY0
NGYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA1LTEwICBUb255IEdlbnRp
bGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUHJvdmlkZSBtZWNoYW5pc20gdG8gY2FjaGUgbWV0YWRhdGEg
Zm9yIGEgcmVzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM3ODc0CisKKyAgICAgICAgKiBzcmMvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEpOgorCiAyMDEwLTA1LTEw
ICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJj
ZUhhbmRsZS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAppbmRl
eCAzOTI3MGU3ZDdiM2NhMzM3N2UwZGU1NzRhMThhZGEwYWY3MDlkZDM0Li5iN2Q1ZGRkMmZkYzVl
OWJhMzI4MTIyZTkyZDdmYzNlMTE0YzQ1MDEyIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1Jlc291cmNlSGFuZGxlLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNl
SGFuZGxlLmNwcApAQCAtMzExLDQgKzMxMSwxMCBAQCBib29sIFJlc291cmNlSGFuZGxlOjp3aWxs
TG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEZyYW1lKikKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorLy8gc3RhdGljCit2b2lkIFJlc291cmNlSGFuZGxlOjpjYWNoZU1ldGFk
YXRhKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGRhdGEpCit7CisgICAgLy8gRklYTUUKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>