<?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>106497</bug_id>
          
          <creation_ts>2013-01-09 15:10:04 -0800</creation_ts>
          <short_desc>AX: memoize expensive computation during blocks where tree doesn&apos;t change</short_desc>
          <delta_ts>2013-02-02 07:37:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>106695</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominic Mazzoni">dmazzoni</reporter>
          <assigned_to name="Dominic Mazzoni">dmazzoni</assigned_to>
          <cc>abarth</cc>
    
    <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>buildbot</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>hausmann</cc>
    
    <cc>inferno</cc>
    
    <cc>jamesr</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jochen</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kadam</cc>
    
    <cc>ossy</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zarvai</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>803764</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-09 15:10:04 -0800</bug_when>
    <thetext>I&apos;d like to speed up the time to build the accessibility tree for the whole document. This happens in Chromium whenever the document first loads, but I&apos;m pretty sure we could speed up operations like findMatchingObjects in Safari, too - basically anytime a lot of accessibility objects will be queried from a block that doesn&apos;t mutate the tree.

A lot of the time is spent computing accessibilityIsIgnored, but it&apos;s hard to optimize it for a single object. Originally I thought we should avoid going up the parent chain more than once (bug 101370), but an even better speedup is to just memoize the value of accessibilityIsIgnored whenever you can be confident that it won&apos;t change.

I don&apos;t think it would make sense to mark an AccessibilityObject as dirty every time its ignored state might change. Changing an attribute of a single element could conceivably result in hundreds of elements in its subtree changing their ignored state.

Instead, I think it&apos;s easier to try to identify blocks where the tree doesn&apos;t change and memoize the ignored state for each node as long as we&apos;re within that block. It may also be useful to memoize other values, too, but the ignored state is the biggest win.

I think this could eliminate the need for bug 101370 (Only walk up the parent tree one time in accessibilityIsIgnored).

I have a proposed patch. If the overall design looks good, I&apos;ll write a test by adding a method to DRT that allows you to explicitly turn on memoization, and then test that accessibilityIsIgnored does *not* update when memoization is on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803786</commentid>
    <comment_count>1</comment_count>
      <attachid>181999</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-09 15:40:02 -0800</bug_when>
    <thetext>Created attachment 181999
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803787</commentid>
    <comment_count>2</comment_count>
      <attachid>181999</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-09 15:40:53 -0800</bug_when>
    <thetext>Comment on attachment 181999
Patch

Not for review yet, please give me thoughts on the approach - and in particular the name of methods / data structures (to save me time rewriting tests later)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804726</commentid>
    <comment_count>3</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-10 14:26:41 -0800</bug_when>
    <thetext>I like ideas like this that can cache certain values for a short time. Have you identified any blocks that could use this? my primary concern is how many regressions we&apos;d introduce by having data out of date. maybe there are portions of accessibilityIsIgnored() that could be cached as well instead of the whole thing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804791</commentid>
    <comment_count>4</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-10 15:41:08 -0800</bug_when>
    <thetext>The two places where I&apos;m sure it could be used:

1. In Chromium, inside our accessibility notification handler, where we query potentially a large number of accessibility objects. The tree won&apos;t change within that context, so it&apos;s safe to create a cache and then delete it. I&apos;ve benchmarked this and it makes building the whole ax tree for a large page almost twice as fast.

2. In findMatchingObjects, I think we could enable the cache just before the search.

3. With a bit more work, I think we could use it in addChildren. Every child added ends up traversing up the same parent chain! 

To clarify, I want to use it only in small blocks, like this:

AXObjectCache-&gt;startMemoizing
call expensive method, e.g. findMatchingObjects, addChildren
AXObjectCache-&gt;stopMemoizing

There&apos;s no way the DOM/render tree will change inside of findMatchingObjects, right? So this just means that as it scans a large number of nodes, it can avoid repeating the same computation over and over again. As soon as that code block ends, we throw the cache away so there&apos;s no chance of regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805463</commentid>
    <comment_count>5</comment_count>
      <attachid>182384</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-11 11:34:14 -0800</bug_when>
    <thetext>Created attachment 182384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805465</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-11 11:39:37 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805473</commentid>
    <comment_count>7</comment_count>
      <attachid>182384</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-11 11:43:50 -0800</bug_when>
    <thetext>Comment on attachment 182384
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:809
&gt; +    for (HashMap&lt;AXID, MemoizedAccessibilityObjectData*&gt;::iterator it = m_memoizedData-&gt;begin(); it != m_memoizedData-&gt;end(); ++it)

can you make MemoizedAccessibilityObjectData  a RefPtr, so you don&apos;t have to iterate everything to delete it?

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:831
&gt; +        return (*it).value;

can you call getMemoizedData() directly here and use that

&gt; LayoutTests/ChangeLog:12
&gt; +        * platform/chromium/accessibility/memoize-isignored-expected.txt: Added.

can you make this test go in accessibility/
I&apos;ll implement the Mac methods for it and we can skip on the other platforms in the meantime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805483</commentid>
    <comment_count>8</comment_count>
      <attachid>182384</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-11 11:51:30 -0800</bug_when>
    <thetext>Comment on attachment 182384
Patch

Attachment 182384 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15805487</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805522</commentid>
    <comment_count>9</comment_count>
      <attachid>182384</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-11 12:23:24 -0800</bug_when>
    <thetext>Comment on attachment 182384
Patch

Attachment 182384 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/15806472</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805588</commentid>
    <comment_count>10</comment_count>
      <attachid>182384</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-11 13:48:35 -0800</bug_when>
    <thetext>Comment on attachment 182384
Patch

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

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:809
&gt;&gt; +    for (HashMap&lt;AXID, MemoizedAccessibilityObjectData*&gt;::iterator it = m_memoizedData-&gt;begin(); it != m_memoizedData-&gt;end(); ++it)
&gt; 
&gt; can you make MemoizedAccessibilityObjectData  a RefPtr, so you don&apos;t have to iterate everything to delete it?

Sure

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:831
&gt;&gt; +        return (*it).value;
&gt; 
&gt; can you call getMemoizedData() directly here and use that

Good idea

&gt;&gt; LayoutTests/ChangeLog:12
&gt;&gt; +        * platform/chromium/accessibility/memoize-isignored-expected.txt: Added.
&gt; 
&gt; can you make this test go in accessibility/
&gt; I&apos;ll implement the Mac methods for it and we can skip on the other platforms in the meantime

OK. I guess you&apos;ll have to add a hidden API or something? I got the impression it wasn&apos;t easy to call WebCore methods from WKTR in particular if you don&apos;t want to expose them in the public interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805589</commentid>
    <comment_count>11</comment_count>
      <attachid>182411</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-11 13:49:12 -0800</bug_when>
    <thetext>Created attachment 182411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805645</commentid>
    <comment_count>12</comment_count>
      <attachid>182411</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-11 14:57:45 -0800</bug_when>
    <thetext>Comment on attachment 182411
Patch

Attachment 182411 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15833022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805656</commentid>
    <comment_count>13</comment_count>
      <attachid>182425</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-11 15:03:29 -0800</bug_when>
    <thetext>Created attachment 182425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805689</commentid>
    <comment_count>14</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-11 15:37:33 -0800</bug_when>
    <thetext>looks good. lets just wait to make sure it builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805757</commentid>
    <comment_count>15</comment_count>
      <attachid>182425</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-11 16:56:19 -0800</bug_when>
    <thetext>Comment on attachment 182425
Patch

Attachment 182425 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/15827091</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805846</commentid>
    <comment_count>16</comment_count>
      <attachid>182461</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-12 00:36:52 -0800</bug_when>
    <thetext>Created attachment 182461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805847</commentid>
    <comment_count>17</comment_count>
      <attachid>182461</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-12 00:43:01 -0800</bug_when>
    <thetext>Comment on attachment 182461
Patch

Attachment 182461 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15828225</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805849</commentid>
    <comment_count>18</comment_count>
      <attachid>182461</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-12 00:49:57 -0800</bug_when>
    <thetext>Comment on attachment 182461
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:454
&gt; +    // Turn on memoization to minimize redundant computation during the duration of this
&gt; +    // method, where we can guarantee the tree won&apos;t change.
&gt; +    axObjectCache()-&gt;startMemoizing();
&gt; +

Please create a RAII object to do this instead. Also, why don&apos;t we cache things inside a RAII instead of adding member variables to AXObjectCache?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805850</commentid>
    <comment_count>19</comment_count>
      <attachid>182462</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-12 00:56:21 -0800</bug_when>
    <thetext>Created attachment 182462
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806100</commentid>
    <comment_count>20</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-13 23:03:55 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 182461 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=182461&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityObject.cpp:454
&gt; &gt; +    // Turn on memoization to minimize redundant computation during the duration of this
&gt; &gt; +    // method, where we can guarantee the tree won&apos;t change.
&gt; &gt; +    axObjectCache()-&gt;startMemoizing();
&gt; &gt; +
&gt; 
&gt; Please create a RAII object to do this instead.

That&apos;s a great pattern within WebCore, but I also need it to be possible to enable/disable the cache from the WebKit API, and from layout tests. What do you think about leaving this as the low-level interface but adding a RAII wrapper?

If RAII was the only way to control the cache, that would make the layout test much hairier.

&gt; Also, why don&apos;t we cache things inside a RAII instead of adding member variables to AXObjectCache?

Then how would a particular AccessibilityObject find the cache? We&apos;d still need a pointer from the AXObjectCache to the class that owns the cache. Note that AXObjectCache is not a singleton.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806123</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-14 00:04:55 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 182461 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=182461&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/accessibility/AccessibilityObject.cpp:454
&gt; &gt; &gt; +    // Turn on memoization to minimize redundant computation during the duration of this
&gt; &gt; &gt; +    // method, where we can guarantee the tree won&apos;t change.
&gt; &gt; &gt; +    axObjectCache()-&gt;startMemoizing();
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; Please create a RAII object to do this instead.
&gt; 
&gt; That&apos;s a great pattern within WebCore, but I also need it to be possible to enable/disable the cache from the WebKit API, and from layout tests. What do you think about leaving this as the low-level interface but adding a RAII wrapper?

Why? What’s the use case for that? Sounds like this will be a very fragile API because enable/disable need to be called at the right time. In the world where we already have an open security vulnerability (e.g. the bug 106106), I don’t think we should be adding an API like this.

&gt; If RAII was the only way to control the cache, that would make the layout test much hairier.

While being able to test something is good, we shouldn’t be choosing a worse design just so that we can test it.

&gt; &gt; Also, why don&apos;t we cache things inside a RAII instead of adding member variables to AXObjectCache?
&gt; 
&gt; Then how would a particular AccessibilityObject find the cache? We&apos;d still need a pointer from the AXObjectCache to the class that owns the cache. Note that AXObjectCache is not a singleton.

There is no need. Given that at most one instance of this RAII object exists  (assuming that the current patch doesn’t have a bug), AccessibilityObject can find the cache via the RAII object’s interface since the RAII object is effectively a singleton.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806605</commentid>
    <comment_count>22</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-14 14:04:59 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; That&apos;s a great pattern within WebCore, but I also need it to be possible to enable/disable the cache from the WebKit API, and from layout tests. What do you think about leaving this as the low-level interface but adding a RAII wrapper?
&gt; 
&gt; Why? What’s the use case for that? Sounds like this will be a very fragile API because enable/disable need to be called at the right time. In the world where we already have an open security vulnerability (e.g. the bug 106106), I don’t think we should be adding an API like this.

SerializeAccessibilityNode is the main place where Chromium calls into WebKit accessibility:

  http://code.google.com/searchframe#OAMlx_jo-ck/src/content/renderer/accessibility_node_serializer.cc

I can get a substantial speedup on some Chromium benchmarks when accessibility is enabled, just by enabling memoization for the duration of this method call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806614</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-14 14:13:24 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt;
&gt; SerializeAccessibilityNode is the main place where Chromium calls into WebKit accessibility:
&gt; 
&gt;   http://code.google.com/searchframe#OAMlx_jo-ck/src/content/renderer/accessibility_node_serializer.cc
&gt; 
&gt; I can get a substantial speedup on some Chromium benchmarks when accessibility is enabled, just by enabling memoization for the duration of this method call.

I see. I still don&apos;t think adding enable/disable public API is a good idea. We need to figure out some other way to improve the performance here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806620</commentid>
    <comment_count>24</comment_count>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2013-01-14 14:22:18 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt;
&gt; &gt; SerializeAccessibilityNode is the main place where Chromium calls into WebKit accessibility:
&gt; &gt; 
&gt; &gt;   http://code.google.com/searchframe#OAMlx_jo-ck/src/content/renderer/accessibility_node_serializer.cc
&gt; &gt; 
&gt; &gt; I can get a substantial speedup on some Chromium benchmarks when accessibility is enabled, just by enabling memoization for the duration of this method call.
&gt; 
&gt; I see. I still don&apos;t think adding enable/disable public API is a good idea. We need to figure out some other way to improve the performance here.

Dominic, why are we compromising on security here ? We shouldn&apos;t be going with a design that is causing more use-after-frees than we can manage. Can you please explain the assumptions that you think would prevent it from happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815183</commentid>
    <comment_count>25</comment_count>
      <attachid>184425</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-24 00:37:18 -0800</bug_when>
    <thetext>Created attachment 184425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815199</commentid>
    <comment_count>26</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-24 00:52:53 -0800</bug_when>
    <thetext>New approach. Needs a bit of clean up and some better names, but this is a snapshot to see if people like the direction this is going.

@rniwa: It&apos;s now an RAII object, the new name emphasizes that this is just a way to group together a bunch of read-only operations. I&apos;m open to suggestions for the name of the class, since &quot;Transaction&quot; usually implies read and write operations, not a batch of atomic read-only operations.

Are you at all happier with exposing it in the WebKit API like this? I&apos;m convinced this gives us the most opportunity for optimization, since we can know for certain the tree isn&apos;t changing between two calls, rather than trying to build fragile mechanisms to keep track of potential changes. WebKit accessibility is basically only accessed from one place on the Chromium side; I don&apos;t see any reason to worry the API could be abused.

@inferno: I designed this to be safe from a security perspective (and also I hope we are in better shape with respect to heap-use-after-free bugs now). The cache is deliberately a map from axID (integer) to a struct of POD (currently just one bool, but perhaps one or two strings in the future). If a bug causes the tree to change while the cache is active, the worst case is that it will return bad values.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815222</commentid>
    <comment_count>27</comment_count>
      <attachid>184425</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-24 01:10:26 -0800</bug_when>
    <thetext>Comment on attachment 184425
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:91
&gt; +    if (s_instanceCount == 0)

Nit: should be !s_instanceCount instead.

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:99
&gt; +    if (s_instanceCount == 0)

Ditto.

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:106
&gt; +    return it != m_memoizedData.end() ? (*it).value.get() : 0;

Why not it-&gt;value.get()?

&gt; Source/WebCore/accessibility/AXObjectCache.h:60
&gt; +// Create an instance of this class on the stack to temporarily enable
&gt; +// internal caching of accessibility data, to speed up a series of read-only
&gt; +// operations on the accessibility tree. There&apos;s no security risk if the
&gt; +// tree changes during the scope of a transaction due to a bug, because the
&gt; +// cache is simply a map from axObjectID to simple data types - the worst
&gt; +// case is that stale results could be returned. Nested instances are fine.

We need to give the class a more descriptive name so that we can get rid of this comment.

&gt; Source/WebCore/accessibility/AXObjectCache.h:61
&gt; +class ReadOnlyAXTransaction {

We normally use &quot;Scope&quot; for RAII object so how about something like AXRenderTreeDependentCacheScope or AXRenderTreeStateCacheScope?

&gt; Source/WebCore/accessibility/AXObjectCache.h:74
&gt; +    // Methods to be used only by AccessibilityRenderObject (or in the
&gt; +    // future, any AccessibilityObject subset).

This comment repeats exactly what the code says right beneath it. Please remove it.

&gt; Source/WebCore/accessibility/AXObjectCache.h:78
&gt; +    friend class AccessibilityRenderObject;
&gt; +    static ReadOnlyAXTransaction* instance() { return s_instance; }
&gt; +    MemoizedData* getMemoizedData(AXID) const;
&gt; +    MemoizedData* getOrCreateMemoizedData(AXID);

I don&apos;t really see a point if making these methods private and then making AccessibilityRenderObject a friend of this class.
It would have been better if they were all static functions and public.

&gt; Source/WebCore/accessibility/AXObjectCache.h:82
&gt; +    static ReadOnlyAXTransaction* s_instance;
&gt; +    static int s_instanceCount;
&gt; +    HashMap&lt;AXID, RefPtr&lt;MemoizedData&gt; &gt; m_memoizedData;

I don&apos;t quite understand the point of making m_memoizedData an instance variable. Why don&apos;t we make everything static?
(note, we can have OwnPtr&lt;HashMap&lt;AXID, RefPtr&lt;MemoizedData&gt; &gt; &gt; if you&apos;re worried about the initialization cost.

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1135
&gt; +        if (ReadOnlyAXTransaction::MemoizedData* memoizedData = transaction-&gt;getMemoizedData(axObjectID())) {
&gt; +            if (memoizedData-&gt;ignored == IgnoreObject)
&gt; +                return true;
&gt; +            if (memoizedData-&gt;ignored == IncludeObject)
&gt; +                return false;

I wouldn&apos;t have exposed MemoizedData like this if I were you. I would have added a static method specifically for computeAccessibilityIsIgnored so that MemoizedData could stay private to the scoping object.

&gt; Source/WebKit/chromium/public/WebAccessibilityObject.h:62
&gt; +// Create an instance of this class on the stack to temporarily enable
&gt; +// internal caching of accessibility data, to speed up a series of read-only
&gt; +// operations on the accessibility tree.

Again, we shouldn&apos;t be needing a comment like this.
i.e. the class name should convey all of this information by its name.

&gt; Source/WebKit/chromium/public/WebAccessibilityObject.h:70
&gt; +class WebReadOnlyAccessibilityTransaction {
&gt; +public:
&gt; +    WEBKIT_EXPORT WebReadOnlyAccessibilityTransaction();
&gt; +    WEBKIT_EXPORT ~WebReadOnlyAccessibilityTransaction();
&gt; +
&gt; +private:
&gt; +    WebPrivateOwnPtr&lt;WebCore::ReadOnlyAXTransaction&gt; m_private;
&gt; +};

Ideally, we don&apos;t want to expose this outside of WebKit. One thing you can do is to move more code from Chromium to WebKit such that all expensive operations are done inside Source/WebKit/chromium.

&gt; Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp:214
&gt; +void AccessibilityController::startMemoizingCallback(const CppArgumentList&amp; arguments, CppVariant* result)
&gt; +{
&gt; +    result-&gt;setNull();
&gt; +    m_transaction = new WebReadOnlyAccessibilityTransaction();
&gt; +}
&gt; +
&gt; +void AccessibilityController::stopMemoizingCallback(const CppArgumentList&amp; arguments, CppVariant* result)
&gt; +{
&gt; +    result-&gt;setNull();
&gt; +    delete m_transaction;
&gt; +    m_transaction = 0;
&gt; +}
&gt; +

I don&apos;t think we should be exposing such an implementation detail in DRT. I don&apos;t think we need a test for this optimization.

&gt; LayoutTests/accessibility/memoize-isignored.html:1
&gt; +&lt;html&gt;

Missing DOCTYPE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815802</commentid>
    <comment_count>28</comment_count>
      <attachid>184425</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-24 13:53:33 -0800</bug_when>
    <thetext>Comment on attachment 184425
Patch

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

Happy to take all other feedback - will upload a new patch soon, but meanwhile just two points left to discuss:

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.h:61
&gt;&gt; +class ReadOnlyAXTransaction {
&gt; 
&gt; We normally use &quot;Scope&quot; for RAII object so how about something like AXRenderTreeDependentCacheScope or AXRenderTreeStateCacheScope?

I like the direction. Note that &quot;state&quot; has a specific meaning in accessibility, I want to avoid an ambiguous term. I&apos;d like to convey that it&apos;s attributes of AX objects that are cached, not the tree - how about CacheAXObjectMethodResultsScope or AXObjectMemoizationEnabledScope?

&gt;&gt; Source/WebKit/chromium/public/WebAccessibilityObject.h:70
&gt;&gt; +};
&gt; 
&gt; Ideally, we don&apos;t want to expose this outside of WebKit. One thing you can do is to move more code from Chromium to WebKit such that all expensive operations are done inside Source/WebKit/chromium.

That&apos;s what all of the other ports do. Chromium&apos;s multi-process architecture constrains our design. In a nutshell, operating-system native accessibility interfaces that Chromium implements are all synchronous, and need to respond in the browser process with low latency. So Chromium&apos;s render process serializes WebKit&apos;s accessibility tree and sends the data to the browser process, where we implement all of the native interfaces based on the serialized tree. (It&apos;s not that different than how Chromium&apos;s software rendering works; the render process asks WebKit to redraw the bitmap when it changes, then the browser process blits the most recent bitmap to the screen on-demand.) The majority of the time spent in the render process is in responding to each accessibility notification from WebKit and serializing the information about what nodes changed.

We couldn&apos;t easily move the relatively small amount of code from Chromium&apos;s content/renderer/*accessibility* to WebKit, because changes to the serializable data structure would frequently require simultaneous changes to both WebKit and Chromium code (IPC macros, for example). With the current design, landing two-sided patches is pretty easy, as I can temporarily expose a new API from WebKit, switch Chromium to serialize the result of the new method and unserialize it on the other end in one step, then delete the old method in WebKit third.

Other ideas that I considered:

* WebKit calls back to Chromium whenever there&apos;s an accessibility notification; it could require that Chromium not change the tree within that notification callback, and that would allow the cache to be enabled within that scope. However, this doesn&apos;t address a few cases where Chromium wants to grab the accessibility tree not in response to a notification (when switching tabs, for example), and this constraint would be far less explicit in the code, it&apos;d be easier for someone to accidentally violate later.

* AccessibilityRenderObject could call a platform method (see accessibilityIsIgnored for one example where we&apos;re already doing this) and that platform method could implement the caching. That would give us most of the optimization I want in Chromium, but it&apos;d mean that we couldn&apos;t make use of this optimization on other platforms (and I think it is worthwhile for a few operations in Safari).

So I still think that letting Chromium tell WebKit when it&apos;s in a read-only scope is the simplest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815816</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-24 14:09:52 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 184425 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184425&amp;action=review
&gt; 
&gt; Happy to take all other feedback - will upload a new patch soon, but meanwhile just two points left to discuss:
&gt; 
&gt; &gt;&gt; Source/WebCore/accessibility/AXObjectCache.h:61
&gt; &gt;&gt; +class ReadOnlyAXTransaction {
&gt; &gt; 
&gt; &gt; We normally use &quot;Scope&quot; for RAII object so how about something like AXRenderTreeDependentCacheScope or AXRenderTreeStateCacheScope?
&gt; 
&gt; I like the direction. Note that &quot;state&quot; has a specific meaning in accessibility, I want to avoid an ambiguous term. I&apos;d like to convey that it&apos;s attributes of AX objects that are cached, not the tree - how about CacheAXObjectMethodResultsScope or AXObjectMemoizationEnabledScope?

&quot;Method&quot; isn&apos;t a C++ term. MemoizationEnabled doesn&apos;t really tell us what we&apos;re caching. We definitely need to communicate the fact this cache is dependent on the render tree since we can cache things indefinitely otherwise, and that&apos;s the whole point of making this RAII object.

Among all these options, I like AXRenderTreeDependentCacheScope best. Maybe Chris has an opinion on this?

&gt; &gt;&gt; Source/WebKit/chromium/public/WebAccessibilityObject.h:70
&gt; &gt;&gt; +};
&gt; &gt; 
&gt; &gt; Ideally, we don&apos;t want to expose this outside of WebKit. One thing you can do is to move more code from Chromium to WebKit such that all expensive operations are done inside Source/WebKit/chromium.
&gt; 
&gt; That&apos;s what all of the other ports do.

This sentence makes it clear that&apos;s what Chromium port should do. I&apos;m fine with temporarily exposing this API in Chromium but it shouldn&apos;t be a long term solution. Trusting the Chromium code to do the right thing for WebCore is almost never a good idea because most of people working on Chromium codebase doesn&apos;t know how WebCore works and all the complexity and constraints we have. Using a RAII object mitigates it to some extent, but not completely. The point of Source/WebKit is to avoid decouple browser code and WebCore. In principle, we shouldn&apos;t be exposing any implementation details like how caching of accessibility code works to the browser code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815836</commentid>
    <comment_count>30</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-24 14:33:42 -0800</bug_when>
    <thetext>I don&apos;t think anything in the WebKit API layer can promise that WebCore will not mutate the DOM or render tree.  If you want to have some cache that is only valid until, say, layout happens then I think the right way to factor it would be to (optionally) have some call in the WebKit API that says &quot;please build this cache / start caching this&quot; and then have WebCore be responsible for invalidating the cache whenever layout/whatever happen.  You can also have a WebKit API call to say &quot;please discard this cache if you have it&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815912</commentid>
    <comment_count>31</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-24 15:44:37 -0800</bug_when>
    <thetext>That could work, with the caveat that even changes to the DOM tree that don&apos;t affect rendering might affect the accessibility tree. Luckily the accessibility layer is already notified whenever there&apos;s a change to the DOM tree, so we could leverage that existing code to know when there&apos;s been a mutation.

Note that I don&apos;t think it would be a good idea to just clear the cache every time there&apos;s a tree mutation. A sequence of tree mutations would likely result in adding data to the cache and then clearing it again for every operation, which would just hurt performance. The cache should be off while the tree is changing.

So, how about this:

* Public WebKit API that says &quot;please turn on the cache until the tree changes&quot;.
* WebCore automatically turns off the cache at the next tree mutation - it doesn&apos;t just clear it, it turns off caching until it&apos;s explicitly enabled again.

That way, turning on the cache is just a *hint* that says &quot;I&apos;m probably going to do a bunch of read-only operations that would be faster with caching enabled&quot;, and there&apos;s no need to turn it off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815919</commentid>
    <comment_count>32</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-24 15:47:10 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; * Public WebKit API that says &quot;please turn on the cache until the tree changes&quot;.
&gt; * WebCore automatically turns off the cache at the next tree mutation - it doesn&apos;t just clear it, it turns off caching until it&apos;s explicitly enabled again.
&gt; 
&gt; That way, turning on the cache is just a *hint* that says &quot;I&apos;m probably going to do a bunch of read-only operations that would be faster with caching enabled&quot;, and there&apos;s no need to turn it off.

That sounds like a great solution given the constraints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815922</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-24 15:50:17 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; That could work, with the caveat that even changes to the DOM tree that don&apos;t affect rendering might affect the accessibility tree. Luckily the accessibility layer is already notified whenever there&apos;s a change to the DOM tree, so we could leverage that existing code to know when there&apos;s been a mutation.
&gt; 
&gt; Note that I don&apos;t think it would be a good idea to just clear the cache every time there&apos;s a tree mutation. A sequence of tree mutations would likely result in adding data to the cache and then clearing it again for every operation, which would just hurt performance. The cache should be off while the tree is changing.
&gt; 
&gt; So, how about this:
&gt; 
&gt; * Public WebKit API that says &quot;please turn on the cache until the tree changes&quot;.
&gt; * WebCore automatically turns off the cache at the next tree mutation - it doesn&apos;t just clear it, it turns off caching until it&apos;s explicitly enabled again.

Does this mean the cache can be rebuilt from a partially-invalid state the next time it&apos;s enabled?

&gt; 
&gt; That way, turning on the cache is just a *hint* that says &quot;I&apos;m probably going to do a bunch of read-only operations that would be faster with caching enabled&quot;, and there&apos;s no need to turn it off.

I think you should add a control to explicitly drop the cache if it&apos;s memory intensive and the caller (chromium/whomever) has a time at which they know they won&apos;t access it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815935</commentid>
    <comment_count>34</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-24 16:01:05 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #31)
&gt; &gt; That could work, with the caveat that even changes to the DOM tree that don&apos;t affect rendering might affect the accessibility tree. Luckily the accessibility layer is already notified whenever there&apos;s a change to the DOM tree, so we could leverage that existing code to know when there&apos;s been a mutation.
&gt; &gt; 
&gt; &gt; Note that I don&apos;t think it would be a good idea to just clear the cache every time there&apos;s a tree mutation. A sequence of tree mutations would likely result in adding data to the cache and then clearing it again for every operation, which would just hurt performance. The cache should be off while the tree is changing.
&gt; &gt; 
&gt; &gt; So, how about this:
&gt; &gt; 
&gt; &gt; * Public WebKit API that says &quot;please turn on the cache until the tree changes&quot;.
&gt; &gt; * WebCore automatically turns off the cache at the next tree mutation - it doesn&apos;t just clear it, it turns off caching until it&apos;s explicitly enabled again.
&gt; 
&gt; Does this mean the cache can be rebuilt from a partially-invalid state the next time it&apos;s enabled?

No, once the tree mutates, the entire cache is invalid.

&gt; &gt; That way, turning on the cache is just a *hint* that says &quot;I&apos;m probably going to do a bunch of read-only operations that would be faster with caching enabled&quot;, and there&apos;s no need to turn it off.
&gt; 
&gt; I think you should add a control to explicitly drop the cache if it&apos;s memory intensive and the caller (chromium/whomever) has a time at which they know they won&apos;t access it again.

OK, so that sounds like I should go back to something closer to my previous approach without RAII (https://bugs.webkit.org/attachment.cgi?id=182462&amp;action=review) and just add the code to automatically stop caching when the tree changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815945</commentid>
    <comment_count>35</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-24 16:14:53 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; &gt; &gt; * WebCore automatically turns off the cache at the next tree mutation - it doesn&apos;t just clear it, it turns off caching until it&apos;s explicitly enabled again.
&gt; &gt; 
&gt; &gt; Does this mean the cache can be rebuilt from a partially-invalid state the next time it&apos;s enabled?
&gt; 
&gt; No, once the tree mutates, the entire cache is invalid.

Then why not clear the cache when the tree mutates?  I have no idea why we would want to keep an invalid cache around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815948</commentid>
    <comment_count>36</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-24 16:20:44 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Then why not clear the cache when the tree mutates?  I have no idea why we would want to keep an invalid cache around.

Sorry, I wasn&apos;t clear. Yes, I agree, clear the cache when the tree mutates - I was saying we should not only clear it, we should disable it (stop adding to it) until told to start caching again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816398</commentid>
    <comment_count>37</comment_count>
      <attachid>184705</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-25 02:09:21 -0800</bug_when>
    <thetext>Created attachment 184705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816405</commentid>
    <comment_count>38</comment_count>
      <attachid>184705</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-25 02:18:41 -0800</bug_when>
    <thetext>Comment on attachment 184705
Patch

Attachment 184705 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16119234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816413</commentid>
    <comment_count>39</comment_count>
      <attachid>184705</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-25 02:30:01 -0800</bug_when>
    <thetext>Comment on attachment 184705
Patch

Attachment 184705 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16121258</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816486</commentid>
    <comment_count>40</comment_count>
      <attachid>184705</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-25 04:39:12 -0800</bug_when>
    <thetext>Comment on attachment 184705
Patch

Attachment 184705 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16111538</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816596</commentid>
    <comment_count>41</comment_count>
      <attachid>184753</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-25 07:51:03 -0800</bug_when>
    <thetext>Created attachment 184753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816739</commentid>
    <comment_count>42</comment_count>
      <attachid>184753</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-25 10:45:53 -0800</bug_when>
    <thetext>Comment on attachment 184753
Patch

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

Don&apos;t you need to call stopCachingComputedObjectAttributes() in Document::recalcStyle? I thought that was the whole point of this approach?

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:98
&gt; +        CachedAXObjectAttributes* attributes = new CachedAXObjectAttributes();

Please adopt the pointer here instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816767</commentid>
    <comment_count>43</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-25 11:07:20 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; (From update of attachment 184753 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184753&amp;action=review
&gt; 
&gt; Don&apos;t you need to call stopCachingComputedObjectAttributes() in Document::recalcStyle? I thought that was the whole point of this approach?

Changes to the DOM or Render tree that affect the Accessibility tree already call AXObjectCache::postNotification (sometimes indirectly via another AXObjectCache method), which is why I added the calls to stopCachingComputedObjectAttributes there.

recalcStyle wouldn&apos;t be sufficient anyway - there are DOM mutations that can affect accessibility even if they don&apos;t affect rendering.

&gt; &gt; Source/WebCore/accessibility/AXObjectCache.cpp:98
&gt; &gt; +        CachedAXObjectAttributes* attributes = new CachedAXObjectAttributes();
&gt; 
&gt; Please adopt the pointer here instead.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816768</commentid>
    <comment_count>44</comment_count>
      <attachid>184776</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-25 11:07:31 -0800</bug_when>
    <thetext>Created attachment 184776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816817</commentid>
    <comment_count>45</comment_count>
      <attachid>184776</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-25 11:55:52 -0800</bug_when>
    <thetext>Comment on attachment 184776
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:98
&gt; +        RefPtr&lt;CachedAXObjectAttributes&gt; attributes = adoptRef(new CachedAXObjectAttributes());

Please add create function to CachedAXObjectAttributes and call new there. Don&apos;t forget to make the constructor private.
I don&apos;t understand why this needs to be RefCounted though… this object appears to have exactly one owner: m_idMapping.

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:840
&gt; +        m_computedObjectAttributeCache = new AXComputedObjectAttributeCache();

Please add a create function to AXComputedObjectAttributeCache and call new there. Also please make the constructor private
so that we don&apos;t forget to adoptPtr or adoptRef like we do here.

&gt; Source/WebCore/accessibility/AXObjectCache.h:55
&gt; +class AXComputedObjectAttributeCache : public RefCounted&lt;AXComputedObjectAttributeCache&gt; {

This class certainly doesn&apos;t need to be RefCounted, right?

&gt; Source/WebCore/accessibility/AXObjectCache.h:61
&gt; +    struct CachedAXObjectAttributes  : public RefCounted&lt;CachedAXObjectAttributes&gt; {

Is this object going to have multiple owners? If not, then please don&apos;t inherit from RefCounted and just use OwnPtr in HashMap below.
Also, do we even need to allocate this separately from the HashMap? Why can&apos;t we just have HashMap&lt;AXID, CachedAXObjectAttributes&gt; instead?

&gt; Source/WebCore/accessibility/AXObjectCache.h:67
&gt; +    HashMap&lt;AXID, RefPtr&lt;CachedAXObjectAttributes&gt; &gt; m_idMapping;

You could have stored OwnPtr&lt;HashMap&lt;AXID, RefPtr&lt;CachedAXObjectAttributes&gt; &gt; &gt; directly in AXObjectCache but it&apos;s your call.

&gt; Source/WebCore/accessibility/AXObjectCache.h:200
&gt; +    void cacheComputedObjectAttributesUntilTreeMutates();

Since the other method is called stopCachingComputedObjectAttributes, I would call this one startCachingComputedObjectAttributesUntilTreeMutates

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1137
&gt; +        AccessibilityObjectInclusion ignored = attributeCache-&gt;getIgnored(axObjectID());
&gt; +        if (ignored == IgnoreObject)
&gt; +            return true;
&gt; +        if (ignored == IncludeObject)
&gt; +            return false;

Why don&apos;t we just store the boolean? It&apos;ll make this code much simpler.
Also, if you&apos;re sticking with enum, we should be using switch here instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816988</commentid>
    <comment_count>46</comment_count>
      <attachid>184776</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-25 15:53:48 -0800</bug_when>
    <thetext>Comment on attachment 184776
Patch

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

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:98
&gt;&gt; +        RefPtr&lt;CachedAXObjectAttributes&gt; attributes = adoptRef(new CachedAXObjectAttributes());
&gt; 
&gt; Please add create function to CachedAXObjectAttributes and call new there. Don&apos;t forget to make the constructor private.
&gt; I don&apos;t understand why this needs to be RefCounted though… this object appears to have exactly one owner: m_idMapping.

Switched to OwnPtr.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:840
&gt;&gt; +        m_computedObjectAttributeCache = new AXComputedObjectAttributeCache();
&gt; 
&gt; Please add a create function to AXComputedObjectAttributeCache and call new there. Also please make the constructor private
&gt; so that we don&apos;t forget to adoptPtr or adoptRef like we do here.

Done.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.h:61
&gt;&gt; +    struct CachedAXObjectAttributes  : public RefCounted&lt;CachedAXObjectAttributes&gt; {
&gt; 
&gt; Is this object going to have multiple owners? If not, then please don&apos;t inherit from RefCounted and just use OwnPtr in HashMap below.
&gt; Also, do we even need to allocate this separately from the HashMap? Why can&apos;t we just have HashMap&lt;AXID, CachedAXObjectAttributes&gt; instead?

If this struct grew larger, is there a way to avoid a copy when you add to it? For example:

CachedAXObjectAttributes attributes;
... initialize several members
m_idMapping.set(id, attributes);  &lt;-- this requires copying

It doesn&apos;t matter for now, so let&apos;s go with the simpler design.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.h:67
&gt;&gt; +    HashMap&lt;AXID, RefPtr&lt;CachedAXObjectAttributes&gt; &gt; m_idMapping;
&gt; 
&gt; You could have stored OwnPtr&lt;HashMap&lt;AXID, RefPtr&lt;CachedAXObjectAttributes&gt; &gt; &gt; directly in AXObjectCache but it&apos;s your call.

I expect to add a few more attributes to CachedAXObjectAttributes. If each one will have its own getter and setter, I&apos;d prefer a separate class.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.h:200
&gt;&gt; +    void cacheComputedObjectAttributesUntilTreeMutates();
&gt; 
&gt; Since the other method is called stopCachingComputedObjectAttributes, I would call this one startCachingComputedObjectAttributesUntilTreeMutates

Done

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1137
&gt;&gt; +            return false;
&gt; 
&gt; Why don&apos;t we just store the boolean? It&apos;ll make this code much simpler.
&gt; Also, if you&apos;re sticking with enum, we should be using switch here instead.

We can&apos;t use a boolean once there&apos;s more than one attribute in CachedAXObjectAttributes; it may be that another attribute is cached but |ignored| is still unknown.

Another approach would be to require that all of the values of CachedAXObjectAttributes must be valid or none of them are; I&apos;ll re-evaluate when I add the next attribute. I made it a switch for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816990</commentid>
    <comment_count>47</comment_count>
      <attachid>184830</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-25 15:55:08 -0800</bug_when>
    <thetext>Created attachment 184830
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817003</commentid>
    <comment_count>48</comment_count>
      <attachid>184830</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-25 16:04:42 -0800</bug_when>
    <thetext>Comment on attachment 184830
Patch

Please add an assertion in Document::styleRecalc and other places where the cache must have been disabled so that we may detect any bugs should we introduce them in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817021</commentid>
    <comment_count>49</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-25 16:19:05 -0800</bug_when>
    <thetext>Thanks. I think that the end of style recalc calls postNotification with a LayoutComplete notification, but I&apos;ll double-check that and add an assert if needed.

Chris, I&apos;d appreciate it if you could take another look too. In particular, please check the places where I&apos;m clearing the cache and let me know if you think anything&apos;s missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817135</commentid>
    <comment_count>50</comment_count>
      <attachid>184830</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-25 22:57:42 -0800</bug_when>
    <thetext>Comment on attachment 184830
Patch

are you stopping caching when 
childrenChanged() is called or handleAriaRoleChanged() is called, or labelChanged()?
i suspect all of those could change isIgnored values

also, how does this interact with AccessibilityObject::cachedIsIgnoredValue()? are there now two cached isIgnored values?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819384</commentid>
    <comment_count>51</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-29 15:17:03 -0800</bug_when>
    <thetext>I put the call to stopCachingComputedObjectAttributes at
the top of postNotification because by design, any change that
should affect the accessibility tree should already call
postNotification. On Win, GTK, and Chromium, it&apos;s a bug if
the accessibility tree changes and postNotification isn&apos;t
called.

I checked these specific cases to be sure:

(In reply to comment #48)
&gt; (From update of attachment 184830 [details])
&gt; Please add an assertion in Document::styleRecalc and other places where the cache must have been disabled so that we may detect any bugs should we introduce them in the future.

When Document::recalcStyle is called, that calls FrameView::layout if
there were any changes to any styles, and that will call
AXObjectCache::postNotification, which stops this cache.
Since there are a few cases that layout without a style change
but not vice-versa, it seems reasonable to stop the cache on
layout.

(In reply to comment #50)
&gt; (From update of attachment 184830 [details])
&gt; are you stopping caching when 
&gt; childrenChanged() is called or handleAriaRoleChanged() is called, or labelChanged()?
&gt; i suspect all of those could change isIgnored values

childrenChanged calls postNotification.

labelChanged() calls postNotification on the corresponding
control, which will have the same effect.

handleAriaRoleChanged() calls postNotification only if the
ignored value changed - but, that&apos;s the only case that
affects the cache anyway. To be more future-proof, I could call stopCachingComputedObjectAttributes() at the top of
handleAriaRoleChanged anyway.

I checked all of the cases handled in
AXObjectCache::handleAttributeChanged - all of them call
postNotification if there were any changes to the accessibility
tree.

&gt; also, how does this interact with AccessibilityObject::cachedIsIgnoredValue()? are there now two cached isIgnored values?

Yes. They serve very different purposes. I suggest we rename cachedIsIgnoredValue to lastKnownIsIgnoredValue, that will make
the difference more clear. Here&apos;s the
difference between the two:

* AXComputedObjectAttributeCache::getIgnored is the current value of accessibilityIsIgnored, if known to be current. It&apos;s thrown out as soon as the tree is mutated in any way, because a change to any one node can have far-reaching effects on isIgnored. It&apos;s used so we don&apos;t have to keep recomputing it over and over on the same object when the tree hasn&apos;t changed.

* AXObject::cachedIsIgnoredValue is the last known value of accessibilityIsIgnored. It&apos;s used so that when an object goes from ignored to not ignored or vice-versa, a ChildrenChanged notification can be fired on its parent - this is important because from the point of view of AT, a node in the accessibility tree was *created* or *destroyed*.

I filed https://bugs.webkit.org/show_bug.cgi?id=108238 for the rename idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822864</commentid>
    <comment_count>52</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-02-01 09:28:49 -0800</bug_when>
    <thetext>OK, will land later today if there&apos;s no more feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823210</commentid>
    <comment_count>53</comment_count>
      <attachid>186126</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-02-01 13:35:48 -0800</bug_when>
    <thetext>Created attachment 186126
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823380</commentid>
    <comment_count>54</comment_count>
      <attachid>186126</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-01 15:52:15 -0800</bug_when>
    <thetext>Comment on attachment 186126
Patch for landing

Clearing flags on attachment: 186126

Committed r141655: &lt;http://trac.webkit.org/changeset/141655&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823381</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-01 15:52:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823614</commentid>
    <comment_count>56</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-02-02 02:01:36 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; (From update of attachment 186126 [details])
&gt; Clearing flags on attachment: 186126
&gt; 
&gt; Committed r141655: &lt;http://trac.webkit.org/changeset/141655&gt;

It broke the Qt build with the folloeing error:
/ramdisk/qt-linux-release/build/WebKitBuild/Release/lib/libQt5WebKit.so: undefined reference to `WebCore::AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates()&apos;
collect2: ld returned 1 exit status
make[4]: *** [tst_qobjectbridge] Error 1

It seems there is a serious build system bug somewhere in Qt project files,
because EWS didn&apos;t notice this error and only revealed by a clean build.
I don&apos;t have any time for this bug, CC Qt developers, who can fix this bug.
(Now all Qt buildbots and EWS bots are red because of this bug and unable
to catch any build/layout regression.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823657</commentid>
    <comment_count>57</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-02 07:37:25 -0800</bug_when>
    <thetext>(In reply to comment #56)
&gt; (In reply to comment #54)
&gt; &gt; (From update of attachment 186126 [details] [details])
&gt; &gt; Clearing flags on attachment: 186126
&gt; &gt; 
&gt; &gt; Committed r141655: &lt;http://trac.webkit.org/changeset/141655&gt;
&gt; 
&gt; It broke the Qt build with the folloeing error:
&gt; /ramdisk/qt-linux-release/build/WebKitBuild/Release/lib/libQt5WebKit.so: undefined reference to `WebCore::AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates()&apos;
&gt; collect2: ld returned 1 exit status
&gt; make[4]: *** [tst_qobjectbridge] Error 1
&gt; 
&gt; It seems there is a serious build system bug somewhere in Qt project files,
&gt; because EWS didn&apos;t notice this error and only revealed by a clean build.
&gt; I don&apos;t have any time for this bug, CC Qt developers, who can fix this bug.
&gt; (Now all Qt buildbots and EWS bots are red because of this bug and unable
&gt; to catch any build/layout regression.)

Fixed a17n disabled build in http://trac.webkit.org/changeset/141694</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181999</attachid>
            <date>2013-01-09 15:40:02 -0800</date>
            <delta_ts>2013-01-11 11:34:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130109153705.patch</filename>
            <type>text/plain</type>
            <size>7730</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA5NWQ3YjZjMjkxNmU5
MTE4MmZlZDhiODgzYTNmNGFmMjM2ZTc3ZS4uNzY3ZDZmZTU1NTcxNGEyOWQ0OTE0N2M4MjU4Zjdl
NDEzODQ5MDUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAxLTA5ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6c3RhcnRNZW1vaXppbmcpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdG9wTWVtb2l6aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmdldE1lbW9pemVkRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZU1lbW9pemVkRGF0YSk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJD
b3JlOjpNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhOjpNZW1vaXplZEFjY2Vzc2liaWxp
dHlPYmplY3REYXRhKToKKyAgICAgICAgKE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBWE9iamVjdENhY2hlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAyMDEzLTAxLTA4ICBBbmRyZWFzIEtsaW5nICA8YWts
aW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBIZWFwLXVzZS1hZnRlci1mcmVlIGluIGJvb2wgV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggMDc5NTU1YjA5NmQyMWRj
MjAxOTVjYjMzYjA5MDcxYjMwNmYyYjc0MC4uNTM5YmJmZTI5ZTU1Zjg2NTgwN2RmMDM0NWIwYmI2
ODg5NDg3OGZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCkBAIC04Nyw3ICs4Nyw4IEBAIGJvb2wgQVhPYmplY3RDYWNoZTo6Z0FjY2Vzc2li
aWxpdHlFbmFibGVkID0gZmFsc2U7CiBib29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3NpYmlsaXR5
RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNlOwogCiBBWE9iamVjdENhY2hlOjpB
WE9iamVjdENhY2hlKGNvbnN0IERvY3VtZW50KiBkb2MpCi0gICAgOiBtX25vdGlmaWNhdGlvblBv
c3RUaW1lcih0aGlzLCAmQVhPYmplY3RDYWNoZTo6bm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQp
CisgICAgOiBtX21lbW9pemVkRGF0YSgwKQorICAgICwgbV9ub3RpZmljYXRpb25Qb3N0VGltZXIo
dGhpcywgJkFYT2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKQogewogICAg
IG1fZG9jdW1lbnQgPSBjb25zdF9jYXN0PERvY3VtZW50Kj4oZG9jKTsKIH0KQEAgLTEwMyw2ICsx
MDQsNyBAQCBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpCiAgICAgICAgIG9iai0+ZGV0
YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKICAgICB9CisgICAgc3RvcE1lbW9pemlu
ZygpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpmb2N1c2VkSW1h
Z2VNYXBVSUVsZW1lbnQoSFRNTEFyZWFFbGVtZW50KiBhcmVhRWxlbWVudCkKQEAgLTc5Myw2ICs3
OTUsNDYgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpyZWNvbXB1dGVJc0lnbm9yZWQoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKICAgICAgICAgb2JqLT5ub3RpZnlJZklnbm9yZWRWYWx1ZUNoYW5nZWQo
KTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpzdGFydE1lbW9pemluZygpCit7CisgICAgaWYg
KCFtX21lbW9pemVkRGF0YSkKKyAgICAgICAgbV9tZW1vaXplZERhdGEgPSBuZXcgSGFzaE1hcDxB
WElELCBNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKj4oKTsKK30KKwordm9pZCBBWE9i
amVjdENhY2hlOjpzdG9wTWVtb2l6aW5nKCkKK3sKKyAgICBpZiAoIW1fbWVtb2l6ZWREYXRhKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKEhhc2hNYXA8QVhJRCwgTWVtb2l6ZWRBY2Nlc3Np
YmlsaXR5T2JqZWN0RGF0YSo+OjppdGVyYXRvciBpdCA9IG1fbWVtb2l6ZWREYXRhLT5iZWdpbigp
OyBpdCAhPSBtX21lbW9pemVkRGF0YS0+ZW5kKCk7ICsraXQpCisgICAgICAgIGRlbGV0ZSBpdC5n
ZXQoKTsKKyAgICBkZWxldGUgbV9tZW1vaXplZERhdGE7CisgICAgbV9tZW1vaXplZERhdGEgPSAw
OworfQorCitNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBBWE9iamVjdENhY2hlOjpn
ZXRNZW1vaXplZERhdGEoQVhJRCBpZCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVtb2l6ZWREYXRh
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhhc2hNYXA8QVhJRCwgTWVtb2l6ZWRBY2Nlc3Np
YmlsaXR5T2JqZWN0RGF0YSo+OjppdGVyYXRvciBpdCA9IG1fbWVtb2l6ZWREYXRhLT5maW5kKGlk
KTsKKyAgICByZXR1cm4gaXQgIT0gbV9tZW1vaXplZERhdGEtPmVuZCgpID8gKCppdCkudmFsdWUg
OiAwOworfQorCitNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBBWE9iamVjdENhY2hl
OjpnZXRPckNyZWF0ZU1lbW9pemVkRGF0YShBWElEIGlkKQoreworICAgIGlmICghbV9tZW1vaXpl
ZERhdGEpCisgICAgICAgIHJldHVybiAwOworCisgICAgSGFzaE1hcDxBWElELCBNZW1vaXplZEFj
Y2Vzc2liaWxpdHlPYmplY3REYXRhKj46Oml0ZXJhdG9yIGl0ID0gbV9tZW1vaXplZERhdGEtPmZp
bmQoaWQpOworICAgIGlmIChpdCAhPSBtX21lbW9pemVkRGF0YS0+ZW5kKCkpCisgICAgICAgIHJl
dHVybiAoKml0KS52YWx1ZTsKKworICAgIE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEq
IGRhdGEgPSBuZXcgTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YTsKKyAgICBtX21lbW9p
emVkRGF0YS0+YWRkKGlkLCBkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKwogVmlzaWJsZVBv
c2l0aW9uIEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKFRl
eHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSkKIHsKICAgICBpZiAoIWlzTm9kZUluVXNlKHRl
eHRNYXJrZXJEYXRhLm5vZGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuaAppbmRleCA0ZWRmODE1MDNlMWVlNDM2MjY5MGI5ZGYzMDgyOWNiMWI3OTM4OWI5
Li42NDZlNTk5NDM2YWI0NzE3YTg1ODIzNzU2NTJiOWJiZmZhODJjYzJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtNTIsNiArNTIsMTIgQEAg
c3RydWN0IFRleHRNYXJrZXJEYXRhIHsKICAgICBFQWZmaW5pdHkgYWZmaW5pdHk7CiB9OwogCitz
dHJ1Y3QgTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSB7CisgICAgTWVtb2l6ZWRBY2Nl
c3NpYmlsaXR5T2JqZWN0RGF0YSgpIDogaWdub3JlZChEZWZhdWx0QmVoYXZpb3IpIHsgfQorCisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBpZ25vcmVkOworfTsKKwogZW51bSBQb3N0
VHlwZSB7IFBvc3RTeW5jaHJvbm91c2x5LCBQb3N0QXN5bmNocm9ub3VzbHkgfTsKIAogY2xhc3Mg
QVhPYmplY3RDYWNoZSB7CkBAIC0xODIsNiArMTg4LDE0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
bm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgcm9sZSk7CiAKKyAgICAvLyBX
aGVuIGEgbGFyZ2UgbnVtYmVyIG9mIHF1ZXJpZXMgdG8gdGhlIGFjY2Vzc2liaWxpdHkgdHJlZSB3
aWxsIGJlIG1hZGUKKyAgICAvLyB3aXRoaW4gYSBibG9jayB0aGF0IGNhbiBndWFyYW50ZWUgdGhl
IHRyZWUgd29uJ3QgY2hhbmdlLCB0dXJuaW5nIG9uCisgICAgLy8gbWVtb2l6YXRpb24gY2FuIHNw
ZWVkIHVwIHRoZSBjb21wdXRhdGlvbiBzaWduaWZpY2FudGx5LgorICAgIHZvaWQgc3RhcnRNZW1v
aXppbmcoKTsKKyAgICB2b2lkIHN0b3BNZW1vaXppbmcoKTsKKyAgICBNZW1vaXplZEFjY2Vzc2li
aWxpdHlPYmplY3REYXRhKiBnZXRNZW1vaXplZERhdGEoQVhJRCkgY29uc3Q7CisgICAgTWVtb2l6
ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogZ2V0T3JDcmVhdGVNZW1vaXplZERhdGEoQVhJRCk7
CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3Np
YmlsaXR5T2JqZWN0KiwgQVhOb3RpZmljYXRpb24pOwogICAgIHZvaWQgbm9kZVRleHRDaGFuZ2VQ
bGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0Q2hhbmdlLCB1
bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYpOwpAQCAtMjAxLDYgKzIxNSw3IEBAIHByaXZh
dGU6CiAgICAgSGFzaE1hcDxXaWRnZXQqLCBBWElEPiBtX3dpZGdldE9iamVjdE1hcHBpbmc7CiAg
ICAgSGFzaE1hcDxOb2RlKiwgQVhJRD4gbV9ub2RlT2JqZWN0TWFwcGluZzsKICAgICBIYXNoU2V0
PE5vZGUqPiBtX3RleHRNYXJrZXJOb2RlczsKKyAgICBIYXNoTWFwPEFYSUQsIE1lbW9pemVkQWNj
ZXNzaWJpbGl0eU9iamVjdERhdGEqPiogbV9tZW1vaXplZERhdGE7CiAgICAgc3RhdGljIGJvb2wg
Z0FjY2Vzc2liaWxpdHlFbmFibGVkOwogICAgIHN0YXRpYyBib29sIGdBY2Nlc3NpYmlsaXR5RW5o
YW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4
IDQyZTU1NzYwY2VlZTAzY2M3YjhmNzA0Mzg2NWZjNGNkYmUyZWY4NmUuLmIwNDlmMzg2N2NiZDJh
YjY0MmMzODE0NzUyMzk4MWExNWQzNDI4MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTEy
Myw5ICsxMTIzLDI3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhCiAgICAgICAgIAogICAgIHJl
dHVybiBEZWZhdWx0QmVoYXZpb3I7CiB9ICAKLSAKKwogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKIHsKKyAgICBBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoTWVtb2l6ZWRBY2Nlc3NpYmls
aXR5T2JqZWN0RGF0YSogbWVtb2l6ZWREYXRhID0gY2FjaGUtPmdldE1lbW9pemVkRGF0YShheE9i
amVjdElEKCkpKSB7CisgICAgICAgIGlmIChtZW1vaXplZERhdGEtPmlnbm9yZWQgPT0gSWdub3Jl
T2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtZW1vaXplZERh
dGEtPmlnbm9yZWQgPT0gSW5jbHVkZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBib29sIHJlc3VsdCA9IGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCk7CisKKyAgICBpZiAoTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogbWVtb2l6ZWRE
YXRhID0gY2FjaGUtPmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKGF4T2JqZWN0SUQoKSkpCisgICAg
ICAgIG1lbW9pemVkRGF0YS0+aWdub3JlZCA9IHJlc3VsdCA/IElnbm9yZU9iamVjdCA6IEluY2x1
ZGVPYmplY3Q7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKK3sKICAg
ICAvLyBDaGVjayBmaXJzdCBpZiBhbnkgb2YgdGhlIGNvbW1vbiByZWFzb25zIGNhdXNlIHRoaXMg
ZWxlbWVudCB0byBiZSBpZ25vcmVkLgogICAgIC8vIFRoZW4gcHJvY2VzcyBvdGhlciB1c2UgY2Fz
ZXMgdGhhdCBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSB2YXJpb3VzIHJvbGVzCiAgICAg
Ly8gdGhhdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0cyB0YWtlIG9uLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
aAppbmRleCA5N2JmOGEzN2ZkNjM1NTQ1N2Y0M2JhNGE2YWYwYjA0MzIzN2ZmZjJhLi40Mzc0YjFh
NDU1ZjI4YzhjNTg1NjI5YThmODdmM2M4Y2ZjYTZmYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApAQCAt
Mjc3LDYgKzI3Nyw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFyaWFMaXZlUmVnaW9u
QnVzeSgpIGNvbnN0OyAgICAKICAgICAKICAgICBib29sIGluaGVyaXRzUHJlc2VudGF0aW9uYWxS
b2xlKCkgY29uc3Q7CisKKyAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkg
Y29uc3Q7CiAgICAgCiAjaWYgRU5BQkxFKE1BVEhNTCkKICAgICAvLyBBbGwgbWF0aCBlbGVtZW50
cyByZXR1cm4gdHJ1ZSBmb3IgaXNNYXRoRWxlbWVudCgpLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182384</attachid>
            <date>2013-01-11 11:34:14 -0800</date>
            <delta_ts>2013-01-11 13:49:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130111113116.patch</filename>
            <type>text/plain</type>
            <size>24062</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA5NWQ3YjZjMjkxNmU5
MTE4MmZlZDhiODgzYTNmNGFmMjM2ZTc3ZS4uY2M2MDZlOWZkZTQzODE5Y2FjYTBmOTc0NGM0YjNl
YWFhZTcyNGFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAxLTExICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBtZW1vaXphdGlvbi4gV2hlbiBtZW1vaXph
dGlvbiBpcyBvbiwgQVhPYmplY3RDYWNoZQorICAgICAgICBjcmVhdGVzIGFuIGFkZGl0aW9uYWwg
aGFzaCBtYXAgd2l0aCBjYWNoZWQgcmVzdWx0cyBvZiBleHBlbnNpdmUKKyAgICAgICAgY29tcHV0
YXRpb24gb24gQWNjZXNzaWJpbGl0eU9iamVjdHMuIEl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBv
bmx5CisgICAgICAgIHdpdGhpbiBibG9ja3Mgd2hlcmUgeW91J2xsIGJlIGFjY2Vzc2luZyBhIGxv
dCBvZiBBWE9iamVjdHMgYnV0CisgICAgICAgIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlIERP
TS9yZW5kZXIgdHJlZXMgZG8gbm90IGNoYW5nZS4KKworICAgICAgICBJbml0aWFsbHksIGp1c3Qg
dGhlIHJlc3VsdCBvZiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGlzIGNhY2hlZCwgc2luY2UKKyAg
ICAgICAgdGhpcyBpcyB0aGUgb25lIG9mIHRoZSBob3R0ZXN0IG1ldGhvZHMuCisKKyAgICAgICAg
V2hlbiBtZW1vaXphdGlvbiBpcyBzdG9wcGVkLCB0aGUgY2FjaGUgaXMgdGhyb3duIGF3YXksIHNv
IHRoZXJlJ3MKKyAgICAgICAgbm8gY2hhbmNlIG9mIGl0IGdvaW5nIHN0YWxlLgorCisgICAgICAg
IE1lbW9pemF0aW9uIGlzIHVzZWQgYXV0b21hdGljYWxseSBpbnNpZGUgZmluZE1hdGNoaW5nT2Jq
ZWN0cywgYW5kCisgICAgICAgIGNhbiBiZSB1c2VkIHZpYSBhIG5ldyBDaHJvbWl1bSBBUEkuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogcGxh
dGZvcm0vY2hyb21pdW0vYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpzdGFydE1lbW9pemluZyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OnN0b3BNZW1vaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6Z2V0TWVtb2l6ZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9pemVkQWNjZXNzaWJpbGl0
eU9iamVjdERhdGE6Ok1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEpOgorICAgICAgICAo
TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpm
aW5kTWF0Y2hpbmdPYmplY3RzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAy
MDEzLTAxLTA4ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBI
ZWFwLXVzZS1hZnRlci1mcmVlIGluIGJvb2wgV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZVNlbGVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwMGM4MDM1ZjVmZGQ1
MDAwODhkNjE3YTI1NDUxNzkwZDk4NTQ2N2I1Li5iNTA2ZTgxOGQ4ZmQxNjkxM2ZjZWNlZDIwZDQy
MzQzY2I3MWEzMGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDEzLTAxLTExICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisg
ICAgICAgIEFYOiBtZW1vaXplIGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdo
ZXJlIHRyZWUgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNjQ5NworCisgICAgICAgIEFkZCBhbiBBUEkgdG8gdHVybiBtZW1v
aXphdGlvbiBvbiBhbmQgb2ZmLiBUaGlzIHdpbGwgYWxsb3cKKyAgICAgICAgQ2hyb21pdW0gdG8g
c3BlZWQgdXAgYmF0Y2ggb3BlcmF0aW9ucyB0aGF0IHF1ZXJ5IGEgbG90IG9mCisgICAgICAgIGFj
Y2Vzc2libGUgb2JqZWN0cywgd2hlbiBpdCBjYW4gZ3VhcmFudGVlIHRoZSB0cmVlIHdvbid0IGNo
YW5nZQorICAgICAgICB3aXRoaW4gdGhhdCB0aW1lIHBlcmlvZC4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0Lmg6CisgICAgICAgIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBz
cmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnN0YXJ0TWVtb2l6aW5nKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0b3BNZW1vaXppbmcpOgorCiAy
MDEzLTAxLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmVkIHRoZSBuZWVkIGZvciB0aGUgUHJvcG9zZWREYXRhYmFzZSBtZWNoYW5pc20uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAwNzk1NTVi
MDk2ZDIxZGMyMDE5NWNiMzNiMDkwNzFiMzA2ZjJiNzQwLi4yMzY1ZmU4N2ExMWFlODE0YWMyZmRj
MTg0MjYwODEyYzVjZGU2YmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKQEAgLTg3LDcgKzg3LDggQEAgYm9vbCBBWE9iamVjdENhY2hlOjpn
QWNjZXNzaWJpbGl0eUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgQVhPYmplY3RDYWNoZTo6Z0FjY2Vz
c2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0gZmFsc2U7CiAKIEFYT2JqZWN0
Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29uc3QgRG9jdW1lbnQqIGRvYykKLSAgICA6IG1fbm90aWZp
Y2F0aW9uUG9zdFRpbWVyKHRoaXMsICZBWE9iamVjdENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGlt
ZXJGaXJlZCkKKyAgICA6IG1fbWVtb2l6ZWREYXRhKDApCisgICAgLCBtX25vdGlmaWNhdGlvblBv
c3RUaW1lcih0aGlzLCAmQVhPYmplY3RDYWNoZTo6bm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQp
CiB7CiAgICAgbV9kb2N1bWVudCA9IGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPihkb2MpOwogfQpAQCAt
MTAzLDYgKzEwNCw3IEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKICAgICAgICAg
b2JqLT5kZXRhY2goKTsKICAgICAgICAgcmVtb3ZlQVhJRChvYmopOwogICAgIH0KKyAgICBzdG9w
TWVtb2l6aW5nKCk7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZv
Y3VzZWRJbWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqIGFyZWFFbGVtZW50KQpAQCAt
NzkzLDYgKzc5NSw0NiBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlY29tcHV0ZUlzSWdub3JlZChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgICAgICBvYmotPm5vdGlmeUlmSWdub3JlZFZhbHVl
Q2hhbmdlZCgpOwogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0YXJ0TWVtb2l6aW5nKCkKK3sK
KyAgICBpZiAoIW1fbWVtb2l6ZWREYXRhKQorICAgICAgICBtX21lbW9pemVkRGF0YSA9IG5ldyBI
YXNoTWFwPEFYSUQsIE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqPigpOworfQorCit2
b2lkIEFYT2JqZWN0Q2FjaGU6OnN0b3BNZW1vaXppbmcoKQoreworICAgIGlmICghbV9tZW1vaXpl
ZERhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoSGFzaE1hcDxBWElELCBNZW1vaXpl
ZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKj46Oml0ZXJhdG9yIGl0ID0gbV9tZW1vaXplZERhdGEt
PmJlZ2luKCk7IGl0ICE9IG1fbWVtb2l6ZWREYXRhLT5lbmQoKTsgKytpdCkKKyAgICAgICAgZGVs
ZXRlICgqaXQpLnZhbHVlOworICAgIGRlbGV0ZSBtX21lbW9pemVkRGF0YTsKKyAgICBtX21lbW9p
emVkRGF0YSA9IDA7Cit9CisKK01lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIEFYT2Jq
ZWN0Q2FjaGU6OmdldE1lbW9pemVkRGF0YShBWElEIGlkKSBjb25zdAoreworICAgIGlmICghbV9t
ZW1vaXplZERhdGEpCisgICAgICAgIHJldHVybiAwOworCisgICAgSGFzaE1hcDxBWElELCBNZW1v
aXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKj46Oml0ZXJhdG9yIGl0ID0gbV9tZW1vaXplZERh
dGEtPmZpbmQoaWQpOworICAgIHJldHVybiBpdCAhPSBtX21lbW9pemVkRGF0YS0+ZW5kKCkgPyAo
Kml0KS52YWx1ZSA6IDA7Cit9CisKK01lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIEFY
T2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKEFYSUQgaWQpCit7CisgICAgaWYg
KCFtX21lbW9pemVkRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIYXNoTWFwPEFYSUQs
IE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqPjo6aXRlcmF0b3IgaXQgPSBtX21lbW9p
emVkRGF0YS0+ZmluZChpZCk7CisgICAgaWYgKGl0ICE9IG1fbWVtb2l6ZWREYXRhLT5lbmQoKSkK
KyAgICAgICAgcmV0dXJuICgqaXQpLnZhbHVlOworCisgICAgTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5
T2JqZWN0RGF0YSogZGF0YSA9IG5ldyBNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhOwor
ICAgIG1fbWVtb2l6ZWREYXRhLT5hZGQoaWQsIGRhdGEpOworICAgIHJldHVybiBkYXRhOworfQor
CiBWaXNpYmxlUG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlckRhdGEoVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhKQogewogICAgIGlmICghaXNO
b2RlSW5Vc2UodGV4dE1hcmtlckRhdGEubm9kZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IDRlZGY4MTUwM2UxZWU0MzYyNjkwYjlkZjMwODI5
Y2IxYjc5Mzg5YjkuLjY0NmU1OTk0MzZhYjQ3MTdhODU4MjM3NTY1MmI5YmJmZmE4MmNjMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC01Miw2
ICs1MiwxMiBAQCBzdHJ1Y3QgVGV4dE1hcmtlckRhdGEgewogICAgIEVBZmZpbml0eSBhZmZpbml0
eTsKIH07CiAKK3N0cnVjdCBNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhIHsKKyAgICBN
ZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKCkgOiBpZ25vcmVkKERlZmF1bHRCZWhhdmlv
cikgeyB9CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGlnbm9yZWQ7Cit9Owor
CiBlbnVtIFBvc3RUeXBlIHsgUG9zdFN5bmNocm9ub3VzbHksIFBvc3RBc3luY2hyb25vdXNseSB9
OwogCiBjbGFzcyBBWE9iamVjdENhY2hlIHsKQEAgLTE4Miw2ICsxODgsMTQgQEAgcHVibGljOgog
CiAgICAgYm9vbCBub2RlSGFzUm9sZShOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiByb2xlKTsK
IAorICAgIC8vIFdoZW4gYSBsYXJnZSBudW1iZXIgb2YgcXVlcmllcyB0byB0aGUgYWNjZXNzaWJp
bGl0eSB0cmVlIHdpbGwgYmUgbWFkZQorICAgIC8vIHdpdGhpbiBhIGJsb2NrIHRoYXQgY2FuIGd1
YXJhbnRlZSB0aGUgdHJlZSB3b24ndCBjaGFuZ2UsIHR1cm5pbmcgb24KKyAgICAvLyBtZW1vaXph
dGlvbiBjYW4gc3BlZWQgdXAgdGhlIGNvbXB1dGF0aW9uIHNpZ25pZmljYW50bHkuCisgICAgdm9p
ZCBzdGFydE1lbW9pemluZygpOworICAgIHZvaWQgc3RvcE1lbW9pemluZygpOworICAgIE1lbW9p
emVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIGdldE1lbW9pemVkRGF0YShBWElEKSBjb25zdDsK
KyAgICBNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBnZXRPckNyZWF0ZU1lbW9pemVk
RGF0YShBWElEKTsKKwogcHJvdGVjdGVkOgogICAgIHZvaWQgcG9zdFBsYXRmb3JtTm90aWZpY2F0
aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWE5vdGlmaWNhdGlvbik7CiAgICAgdm9pZCBub2Rl
VGV4dENoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRl
eHRDaGFuZ2UsIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJik7CkBAIC0yMDEsNiArMjE1
LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1fd2lkZ2V0T2JqZWN0
TWFwcGluZzsKICAgICBIYXNoTWFwPE5vZGUqLCBBWElEPiBtX25vZGVPYmplY3RNYXBwaW5nOwog
ICAgIEhhc2hTZXQ8Tm9kZSo+IG1fdGV4dE1hcmtlck5vZGVzOworICAgIEhhc2hNYXA8QVhJRCwg
TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSo+KiBtX21lbW9pemVkRGF0YTsKICAgICBz
dGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAgc3RhdGljIGJvb2wgZ0FjY2Vz
c2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkOwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXgg
NDcyMjcwYzE4MmFiNzVlN2IwMjdmNDM1ZjFlMjVmZGJmMTdmNzIzNC4uNGQ4NTMyZTc4MmY3YWU2
YzFmYzBhM2JmYTJmMDQ2Y2ZmYjk1Mzc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC00NDgsNiArNDQ4LDEwIEBA
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmls
aXR5U2VhcmNoQ3JpdGVyaWEqIGNyaXRlCiAgICAgaWYgKCFjcml0ZXJpYSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgLy8gVHVybiBvbiBtZW1vaXphdGlvbiB0byBtaW5pbWl6ZSByZWR1bmRhbnQg
Y29tcHV0YXRpb24gZHVyaW5nIHRoZSBkdXJhdGlvbiBvZiB0aGlzCisgICAgLy8gbWV0aG9kLCB3
aGVyZSB3ZSBjYW4gZ3VhcmFudGVlIHRoZSB0cmVlIHdvbid0IGNoYW5nZS4KKyAgICBheE9iamVj
dENhY2hlKCktPnN0YXJ0TWVtb2l6aW5nKCk7CisKICAgICAvLyBUaGlzIHNlYXJjaCBtZWNoYW5p
c20gb25seSBzZWFyY2hlcyB0aGUgZWxlbWVudHMgYmVmb3JlL2FmdGVyIHRoZSBzdGFydGluZyBv
YmplY3QuCiAgICAgLy8gSXQgZG9lcyB0aGlzIGJ5IHN0ZXBwaW5nIHVwIHRoZSBwYXJlbnQgY2hh
aW4gYW5kIGF0IGVhY2ggbGV2ZWwgZG9pbmcgYSBERlMuCiAgICAgCkBAIC00OTQsNiArNDk4LDgg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vzc2li
aWxpdHlTZWFyY2hDcml0ZXJpYSogY3JpdGUKIAogICAgICAgICBwcmV2aW91c09iamVjdCA9IHN0
YXJ0T2JqZWN0OwogICAgIH0KKworICAgIGF4T2JqZWN0Q2FjaGUoKS0+c3RvcE1lbW9pemluZygp
OwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUlucHV0KEFjY2Vzc2liaWxp
dHlSb2xlIGFyaWFSb2xlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggNDJlNTU3NjBjZWVlMDNj
YzdiOGY3MDQzODY1ZmM0Y2RiZTJlZjg2ZS4uYjA0OWYzODY3Y2JkMmFiNjQyYzM4MTQ3NTIzOTgx
YTE1ZDM0MjgwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xMTIzLDkgKzExMjMsMjcgQEAg
QWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkQmEKICAgICAgICAgCiAgICAgcmV0dXJuIERlZmF1bHRCZWhh
dmlvcjsKIH0gIAotIAorCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKSBjb25zdAogeworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gYXhP
YmplY3RDYWNoZSgpOworICAgIGlmIChNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBt
ZW1vaXplZERhdGEgPSBjYWNoZS0+Z2V0TWVtb2l6ZWREYXRhKGF4T2JqZWN0SUQoKSkpIHsKKyAg
ICAgICAgaWYgKG1lbW9pemVkRGF0YS0+aWdub3JlZCA9PSBJZ25vcmVPYmplY3QpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG1lbW9pemVkRGF0YS0+aWdub3JlZCA9PSBJ
bmNsdWRlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJv
b2wgcmVzdWx0ID0gY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKKworICAgIGlmIChN
ZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBtZW1vaXplZERhdGEgPSBjYWNoZS0+Z2V0
T3JDcmVhdGVNZW1vaXplZERhdGEoYXhPYmplY3RJRCgpKSkKKyAgICAgICAgbWVtb2l6ZWREYXRh
LT5pZ25vcmVkID0gcmVzdWx0ID8gSWdub3JlT2JqZWN0IDogSW5jbHVkZU9iamVjdDsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29t
cHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAorewogICAgIC8vIENoZWNrIGZpcnN0
IGlmIGFueSBvZiB0aGUgY29tbW9uIHJlYXNvbnMgY2F1c2UgdGhpcyBlbGVtZW50IHRvIGJlIGln
bm9yZWQuCiAgICAgLy8gVGhlbiBwcm9jZXNzIG90aGVyIHVzZSBjYXNlcyB0aGF0IG5lZWQgdG8g
YmUgYXBwbGllZCB0byBhbGwgdGhlIHZhcmlvdXMgcm9sZXMKICAgICAvLyB0aGF0IEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3RzIHRha2Ugb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCmluZGV4IDk3YmY4YTM3
ZmQ2MzU1NDU3ZjQzYmE0YTZhZjBiMDQzMjM3ZmZmMmEuLjQzNzRiMWE0NTVmMjhjOGM1ODU2Mjlh
OGY4N2YzYzhjZmNhNmZhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCkBAIC0yNzcsNiArMjc3LDggQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYXJpYUxpdmVSZWdpb25CdXN5KCkgY29uc3Q7ICAg
IAogICAgIAogICAgIGJvb2wgaW5oZXJpdHNQcmVzZW50YXRpb25hbFJvbGUoKSBjb25zdDsKKwor
ICAgIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdDsKICAgICAKICNp
ZiBFTkFCTEUoTUFUSE1MKQogICAgIC8vIEFsbCBtYXRoIGVsZW1lbnRzIHJldHVybiB0cnVlIGZv
ciBpc01hdGhFbGVtZW50KCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggYjc3ZDEwODc2ZDk2ZjczZDY2MmRm
ODNmYWFlOWQ1MTgyMWI4ZWY5Ny4uNmFhODUyNjY1NWM0ZjMzNGZjY2E0Y2Q2YmI2MTJjOTZmYTE4
ZTNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3QuaApAQCAtNzYsNiArNzYsMTMgQEAgcHVibGljOgogICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlQWNjZXNzaWJpbGl0eSgpOwogICAgIFdFQktJVF9F
WFBPUlQgc3RhdGljIGJvb2wgYWNjZXNzaWJpbGl0eUVuYWJsZWQoKTsKIAorICAgIC8vIE1ldGhv
ZHMgdG8gc3RhcnQgYW5kIHN0b3AgbWVtb2l6YXRpb247IHRoaXMgYXBwbGllcyB0byB0aGUKKyAg
ICAvLyB3aG9sZSBhY2Nlc3NpYmlsaXR5IHRyZWUgdGhhdCB0aGlzIG9iamVjdCBpcyBjb250YWlu
ZWQgaW4uCisgICAgLy8gTWVtb2l6YXRpb24gY2FuIHNpZ25pZmljYW50bHkgc3BlZWQgdXAgb3Bl
cmF0aW9ucyBhcyBsb25nIGFzCisgICAgLy8gdGhlIHRyZWUgaXMgZ3VhcmFudGVlZCBub3QgdG8g
Y2hhbmdlIHdoaWxlIGl0J3MgZW5hYmxlZC4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc3RhcnRN
ZW1vaXppbmcoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc3RvcE1lbW9pemluZygpOworCiAg
ICAgV0VCS0lUX0VYUE9SVCBpbnQgYXhJRCgpIGNvbnN0OwogCiAgICAgLy8gVXBkYXRlIHRoZSB1
bmRlcmx5aW5nIHRyZWUsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGlzIG9iamVjdCBpcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAppbmRleCBiOTIwZTRlYzRmYTBhYWFiNzg5MzFkN2ViNzliODNlYjE0M2U2ZTg0Li4xYzc3MmQy
NjFkZDc0YzY2MzUyZWVkM2U2N2QyMmVmMTUxZTliN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtODIsNiAr
ODIsMTYgQEAgYm9vbCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5RW5hYmxl
ZCgpCiAgICAgcmV0dXJuIEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCk7CiB9
CiAKK3ZvaWQgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RhcnRNZW1vaXppbmcoKQoreworICAg
IG1fcHJpdmF0ZS0+YXhPYmplY3RDYWNoZSgpLT5zdGFydE1lbW9pemluZygpOworfQorCit2b2lk
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0b3BNZW1vaXppbmcoKQoreworICAgIG1fcHJpdmF0
ZS0+YXhPYmplY3RDYWNoZSgpLT5zdG9wTWVtb2l6aW5nKCk7Cit9CisKIGJvb2wgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdDo6aXNEZXRhY2hlZCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcHJpdmF0ZS5p
c051bGwoKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBmYTM1MDg2MTBjOTc1YjU3YTg3MmEwMDYyZWMyMDkxODIyNjNlNzhhLi4yNDUwZTJjMGEz
ZGVhYmJiYjI1ZDk3MmVhMGEwZTYzMjRjNTBjZjY1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTMtMDEtMTEgIERv
bWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IG1lbW9p
emUgZXhwZW5zaXZlIGNvbXB1dGF0aW9uIGR1cmluZyBibG9ja3Mgd2hlcmUgdHJlZSBkb2Vzbid0
IGNoYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2NDk3CisKKyAgICAgICAgQWRkIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnN0YXJ0TWVtb2l6
YXRpb24gYW5kCisgICAgICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnN0b3BNZW1vaXphdGlv
biBzbyB0aGF0IGl0J3MKKyAgICAgICAgcG9zc2libGUgdG8gdGVzdCBtZW1vaXphdGlvbiBleHBs
aWNpdGx5IC0gY3VycmVudGx5IG9ubHkKKyAgICAgICAgZnJvbSBDaHJvbWl1bS4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKHN0YXJ0TWVtb2l6aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoc3RvcE1lbW9pemluZ0NhbGxiYWNrKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViVGVzdFJ1bm5lcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpzdGFydE1lbW9pemluZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXIpOgorICAg
ICAgICAoV2ViVGVzdFJ1bm5lcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0b3BNZW1vaXpp
bmdDYWxsYmFjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6c3RhcnRNZW1vaXppbmcpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0
b3BNZW1vaXppbmcpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3Rh
cnRNZW1vaXppbmcpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0b3BNZW1v
aXppbmcpOgorCiAyMDEzLTAxLTA4ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5j
b20+CiAKICAgICAgICAgW3dlYmtpdHB5XSBDYWxsIHNldHVwX3Rlc3RfcnVuIG1ldGhvZCBvZiB0
aGUgcGFyZW50IFBvcnQgaW50ZXJmYWNlIHdoZW4gbWV0aG9kIGlzIGNhbGxlZCBvbiBzdWJjbGFz
c2VzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5j
cHAKaW5kZXggNDlkNDUzYTg0Y2RlYmNkYjhhMzIyNmJmZDkyY2M4MTE4MjRhNjU3My4uYjNkOGQx
MmU5MGNiOTUxMjQ4Y2NlZjQ4NDQyODE5MGY2NmY1YmQ4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcApAQCAtODQsNiArODQsMjAgQEAg
c3RhdGljIEpTVmFsdWVSZWYgbG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKEpTQ29udGV4
dFJlZiBjdHgsIEpTT2JqZWN0UmVmLAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
dHgpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBzdGFydE1lbW9pemluZ0NhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qs
IGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCit7CisgICAgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c3Rh
cnRNZW1vaXppbmcoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgc3RvcE1lbW9pemluZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
dHgsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QsIGNvbnN0IEpT
VmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCit7CisgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c3RvcE1lbW9pemlu
ZygpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworfQorCiBzdGF0aWMg
SlNWYWx1ZVJlZiBnZXRFbGVtZW50QXRQb2ludENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKICAgICBpbnQgeCA9IDA7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAppbmRleCBhNmNkYzQ2ODZjMTMyZmY1ODZkNTgyZmU1MWEw
NzY4ZWU3MmMwMTAwLi4wMGFjZWQwMDkwNWNiMjA5NGE3MzEwNGEwN2QzYWI2OGE5ZTBmZWNhIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5o
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKQEAg
LTUzLDYgKzUzLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TG9nU2Nyb2xsaW5nU3RhcnRFdmVu
dHMoYm9vbCk7CiAgICAgdm9pZCBzZXRMb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKGJvb2wpOwogCisg
ICAgdm9pZCBzdGFydE1lbW9pemluZygpOworICAgIHZvaWQgc3RvcE1lbW9pemluZygpOworCiAg
ICAgdm9pZCByZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAKICAgICAvLyBHbG9iYWwgbm90aWZp
Y2F0aW9uIGxpc3RlbmVyLCBjYXB0dXJlcyBub3RpZmljYXRpb25zIG9uIGFueSBvYmplY3QuCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0u
Y3BwCmluZGV4IDVmMWI0ZjlhOTJkMjc1NTNiNTM2NWUzY2FhMDYxZTA2NGJkNzRmOWQuLjNjY2M4
OGI0YmM4OWUyZTlmNTdlZjc5MDY1YzNkYThkZGIyNzE1MTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyQ2hyb21pdW0uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCkBAIC01Niw2ICs1
Niw5IEBAIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigp
CiAKICAgICBiaW5kTWV0aG9kKCJhY2Nlc3NpYmxlRWxlbWVudEJ5SWQiLCAmQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZEdldHRlckNhbGxiYWNrKTsKIAorICAg
IGJpbmRNZXRob2QoInN0YXJ0TWVtb2l6aW5nIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpz
dGFydE1lbW9pemluZ0NhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJzdG9wTWVtb2l6aW5nIiwg
JkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nQ2FsbGJhY2spOworCiAgICAg
YmluZEZhbGxiYWNrTWV0aG9kKCZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZmFsbGJhY2tDYWxs
YmFjayk7CiB9CiAKQEAgLTE5Niw2ICsxOTksMTggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkR2V0dGVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW0K
ICAgICByZXN1bHQtPnNldCgqKGZvdW5kRWxlbWVudC0+Z2V0QXNDcHBWYXJpYW50KCkpKTsKIH0K
IAordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RhcnRNZW1vaXppbmdDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVj
dCgpLnN0YXJ0TWVtb2l6aW5nKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnN0b3BNZW1vaXppbmdDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIG1fd2Vi
Vmlldy0+YWNjZXNzaWJpbGl0eU9iamVjdCgpLnN0b3BNZW1vaXppbmcoKTsKK30KKwogdm9pZCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZmFsbGJhY2tDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNz
YWdlKCJDT05TT0xFIE1FU1NBR0U6IEphdmFTY3JpcHQgRVJST1I6IHVua25vd24gbWV0aG9kIGNh
bGxlZCBvbiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlclxuIik7CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckNocm9taXVtLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgKaW5kZXggYTk3MjhjNjE1YmI0
ZjUwNWZlMWVjYTZhMmY2NGNmZmFlOTRhMTU1Yi4uN2FhNmUzOGQ1MWY1NTYwMDU5M2NlZWRiMGQx
MGE4YjY2YzkyN2EwMCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyQ2hyb21pdW0uaApAQCAtNzgsNiArNzgsOSBAQCBwcml2YXRlOgogICAgIHZvaWQg
cm9vdEVsZW1lbnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBhY2Nlc3Np
YmxlRWxlbWVudEJ5SWRHZXR0ZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CiAKKyAgICB2b2lkIHN0YXJ0TWVtb2l6aW5nQ2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc3RvcE1lbW9pemluZ0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKwogICAgIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIGZpbmRBY2Nlc3NpYmxlRWxlbWVudEJ5SWRSZWN1cnNpdmUoY29uc3QgV2Vi
S2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGlk
KTsKIAogICAgIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCBtX2ZvY3VzZWRFbGVtZW50
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyR3RrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlckd0ay5jcHAKaW5kZXggNDY2MTgyYmIzMDVhNjY3NjA4MDZiZWY4NDhkOTRjNzYyMmY4
NzVjZS4uYTYyYTE5OWExOWY3MjA3OTVhZTUxMDgyODMzZmIyNTYyODZmZTFiNiAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJH
dGsuY3BwCkBAIC0xMDMsNiArMTAzLDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnNldExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoYm9vbCBsb2dBY2Nlc3NpYmlsaXR5RXZlCiAgICAg
bG9nZ2luZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOwogfQogCit2b2lkIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpzdGFydE1lbW9pemluZygpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnN0b3BNZW1vaXppbmcoKQoreworfQorCiBib29sIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyV2luLmNwcAppbmRleCA5OTVjNWYxMTVjMmVhM2Q5OGM4NjcyMmU0
ZGRmMzhkMGMzZjU1MGJjLi43OGU4YWY4NjIxOWYxNGVkYWQ1MmM5MmVmNzQyNzk2ZDAyNmI0MzQy
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJXaW4uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcldpbi5jcHAKQEAgLTI5Niw2ICsyOTYsMTQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogewogfQogCit2b2lkIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdGFydE1lbW9pemluZygpCit7Cit9CisKK3ZvaWQgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0b3BNZW1vaXppbmcoKQoreworfQorCiB2b2lkIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9ybVVJRWxl
bWVudCBlbGVtZW50LCBjb25zdCBzdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBmb3IgKEhhc2hN
YXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQgPSBtX25vdGlm
aWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5l
bmQoKTsgKytpdCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg0NTcyNmExNzYyY2JmMTEyYjhkNjBiYzQwZTg2Nzg1MWFi
OWIyYTkuLjQzM2JkMTJlYmViZTEwNGY4MWEyNjllZjJhNGEwYzAyZmEzYzIxMmEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxMy0wMS0xMSAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29v
Z2xlLmNvbT4KKworICAgICAgICBBWDogbWVtb2l6ZSBleHBlbnNpdmUgY29tcHV0YXRpb24gZHVy
aW5nIGJsb2NrcyB3aGVyZSB0cmVlIGRvZXNuJ3QgY2hhbmdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY0OTcKKworICAgICAgICBBZGRzIG5ldyB0
ZXN0IHRoYXQgdXNlcyBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5zdGFydE1lbW9pemF0aW9uKCkK
KyAgICAgICAgdG8gdGVzdCB0aGF0IHdoZW4gbWVtb2l6YXRpb24gaXMgb24sIHRoZSBpZ25vcmVk
IHN0YXRlIG9mIGEgbm9kZSBpcworICAgICAgICBub3QgcmVjb21wdXRlZC4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVk
Lmh0bWw6IEFkZGVkLgorCiAyMDEzLTAxLTA4ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBUaWdodGVuIHVwIHRoZSBhY3R1YWwg
ZXhwZWN0YXRpb25zIGFyb3VuZCB3ZWJhdWRpbyBmYWlscy4uCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2FjY2Vzc2liaWxpdHkv
bWVtb2l6ZS1pc2lnbm9yZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhYjA1ZTcyNzM2YTA4
NzBiYjczZTMyMTFiNTJjZGJiMDFiNDgxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDIwIEBACitUZXh0CisKK1Rlc3RzIHRoYXQgdHVybmluZyBvbiBt
ZW1vaXphdGlvbiBjYXVzZXMgdGhlIGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIHN0b3AgY29t
cHV0aW5nIHdoZXRoZXIgaXQncyBpZ25vcmVkIG9yIG5vdC4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1dpdGhvdXQgbWVtb2l6YXRpb246CitQQVNTIGZpbmRBWEVsZW1lbnQoImRp
diIpICE9IG51bGwgaXMgZmFsc2UKK1BBU1MgZGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsICJoZWFk
aW5nIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgdHJ1ZQorUEFTUyBkaXYucmVt
b3ZlQXR0cmlidXRlKCJyb2xlIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgZmFs
c2UKKworV2l0aCBtZW1vaXphdGlvbjoKK1BBU1MgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVs
bCBpcyBmYWxzZQorUEFTUyBkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgImhlYWRpbmciKTsgZmlu
ZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCBpcyBmYWxzZQorUEFTUyBkaXYucmVtb3ZlQXR0cmli
dXRlKCJyb2xlIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgZmFsc2UKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNp
Z25vcmVkLmh0bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9hY2Nlc3NpYmlsaXR5
L21lbW9pemUtaXNpZ25vcmVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2YwZGFhMWVkYjYwOTY5YzY1NWNj
MWNiNWJmOTNhMjA5ODRkYTRhYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbApAQCAtMCww
ICsxLDQzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8
ZGl2PgorICA8ZGl2IGlkPSJkaXYiPgorICAgIDxwPlRleHQ8L3A+CisgIDwvZGl2PgorPC9kaXY+
CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHR1cm5pbmcgb24gbWVtb2l6YXRp
b24gY2F1c2VzIHRoZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBzdG9wIGNvbXB1dGluZyB3
aGV0aGVyIGl0J3MgaWdub3JlZCBvciBub3QuIik7CisKK2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cuZmluZEFYRWxlbWVudCA9IGZ1bmN0aW9uKGlkKSB7
CisgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKGlkKTsKKyAgICB9OworICAgIHdpbmRvdy5kaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZGl2Jyk7CisKKyAgICBkZWJ1ZygnV2l0aG91dCBtZW1vaXphdGlvbjonKTsKKyAgICBzaG91
bGRCZSgnZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworICAgIHNob3Vs
ZEJlKCdkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgImhlYWRpbmciKTsgZmluZEFYRWxlbWVudCgi
ZGl2IikgIT0gbnVsbCcsICd0cnVlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5yZW1vdmVBdHRyaWJ1
dGUoInJvbGUiKTsgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworCisg
ICAgZGVidWcoJ1xuV2l0aCBtZW1vaXphdGlvbjonKTsKKyAgICBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5zdGFydE1lbW9pemluZygpOworICAgIHNob3VsZEJlKCdmaW5kQVhFbGVtZW50KCJkaXYi
KSAhPSBudWxsJywgJ2ZhbHNlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5zZXRBdHRyaWJ1dGUoInJv
bGUiLCAiaGVhZGluZyIpOyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxsJywgJ2ZhbHNlJyk7
CisgICAgc2hvdWxkQmUoJ2Rpdi5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKTsgZmluZEFYRWxlbWVu
dCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LnN0b3BNZW1vaXppbmcoKTsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182411</attachid>
            <date>2013-01-11 13:49:12 -0800</date>
            <delta_ts>2013-01-11 15:03:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130111134615.patch</filename>
            <type>text/plain</type>
            <size>26711</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA5NWQ3YjZjMjkxNmU5
MTE4MmZlZDhiODgzYTNmNGFmMjM2ZTc3ZS4uY2M2MDZlOWZkZTQzODE5Y2FjYTBmOTc0NGM0YjNl
YWFhZTcyNGFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAxLTExICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBtZW1vaXphdGlvbi4gV2hlbiBtZW1vaXph
dGlvbiBpcyBvbiwgQVhPYmplY3RDYWNoZQorICAgICAgICBjcmVhdGVzIGFuIGFkZGl0aW9uYWwg
aGFzaCBtYXAgd2l0aCBjYWNoZWQgcmVzdWx0cyBvZiBleHBlbnNpdmUKKyAgICAgICAgY29tcHV0
YXRpb24gb24gQWNjZXNzaWJpbGl0eU9iamVjdHMuIEl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBv
bmx5CisgICAgICAgIHdpdGhpbiBibG9ja3Mgd2hlcmUgeW91J2xsIGJlIGFjY2Vzc2luZyBhIGxv
dCBvZiBBWE9iamVjdHMgYnV0CisgICAgICAgIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlIERP
TS9yZW5kZXIgdHJlZXMgZG8gbm90IGNoYW5nZS4KKworICAgICAgICBJbml0aWFsbHksIGp1c3Qg
dGhlIHJlc3VsdCBvZiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGlzIGNhY2hlZCwgc2luY2UKKyAg
ICAgICAgdGhpcyBpcyB0aGUgb25lIG9mIHRoZSBob3R0ZXN0IG1ldGhvZHMuCisKKyAgICAgICAg
V2hlbiBtZW1vaXphdGlvbiBpcyBzdG9wcGVkLCB0aGUgY2FjaGUgaXMgdGhyb3duIGF3YXksIHNv
IHRoZXJlJ3MKKyAgICAgICAgbm8gY2hhbmNlIG9mIGl0IGdvaW5nIHN0YWxlLgorCisgICAgICAg
IE1lbW9pemF0aW9uIGlzIHVzZWQgYXV0b21hdGljYWxseSBpbnNpZGUgZmluZE1hdGNoaW5nT2Jq
ZWN0cywgYW5kCisgICAgICAgIGNhbiBiZSB1c2VkIHZpYSBhIG5ldyBDaHJvbWl1bSBBUEkuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogcGxh
dGZvcm0vY2hyb21pdW0vYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpzdGFydE1lbW9pemluZyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OnN0b3BNZW1vaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6Z2V0TWVtb2l6ZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9pemVkQWNjZXNzaWJpbGl0
eU9iamVjdERhdGE6Ok1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEpOgorICAgICAgICAo
TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpm
aW5kTWF0Y2hpbmdPYmplY3RzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAy
MDEzLTAxLTA4ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBI
ZWFwLXVzZS1hZnRlci1mcmVlIGluIGJvb2wgV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZVNlbGVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwMGM4MDM1ZjVmZGQ1
MDAwODhkNjE3YTI1NDUxNzkwZDk4NTQ2N2I1Li5iNTA2ZTgxOGQ4ZmQxNjkxM2ZjZWNlZDIwZDQy
MzQzY2I3MWEzMGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDEzLTAxLTExICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisg
ICAgICAgIEFYOiBtZW1vaXplIGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdo
ZXJlIHRyZWUgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNjQ5NworCisgICAgICAgIEFkZCBhbiBBUEkgdG8gdHVybiBtZW1v
aXphdGlvbiBvbiBhbmQgb2ZmLiBUaGlzIHdpbGwgYWxsb3cKKyAgICAgICAgQ2hyb21pdW0gdG8g
c3BlZWQgdXAgYmF0Y2ggb3BlcmF0aW9ucyB0aGF0IHF1ZXJ5IGEgbG90IG9mCisgICAgICAgIGFj
Y2Vzc2libGUgb2JqZWN0cywgd2hlbiBpdCBjYW4gZ3VhcmFudGVlIHRoZSB0cmVlIHdvbid0IGNo
YW5nZQorICAgICAgICB3aXRoaW4gdGhhdCB0aW1lIHBlcmlvZC4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0Lmg6CisgICAgICAgIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBz
cmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnN0YXJ0TWVtb2l6aW5nKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0b3BNZW1vaXppbmcpOgorCiAy
MDEzLTAxLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmVkIHRoZSBuZWVkIGZvciB0aGUgUHJvcG9zZWREYXRhYmFzZSBtZWNoYW5pc20uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAwNzk1NTVi
MDk2ZDIxZGMyMDE5NWNiMzNiMDkwNzFiMzA2ZjJiNzQwLi5iYTcwYTQyNWJmNmQwMTA0N2IyYWNi
MzhhNjJjZTY5NDJkOWJlMWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKQEAgLTg3LDcgKzg3LDggQEAgYm9vbCBBWE9iamVjdENhY2hlOjpn
QWNjZXNzaWJpbGl0eUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgQVhPYmplY3RDYWNoZTo6Z0FjY2Vz
c2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0gZmFsc2U7CiAKIEFYT2JqZWN0
Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29uc3QgRG9jdW1lbnQqIGRvYykKLSAgICA6IG1fbm90aWZp
Y2F0aW9uUG9zdFRpbWVyKHRoaXMsICZBWE9iamVjdENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGlt
ZXJGaXJlZCkKKyAgICA6IG1fbWVtb2l6ZWREYXRhKDApCisgICAgLCBtX25vdGlmaWNhdGlvblBv
c3RUaW1lcih0aGlzLCAmQVhPYmplY3RDYWNoZTo6bm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQp
CiB7CiAgICAgbV9kb2N1bWVudCA9IGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPihkb2MpOwogfQpAQCAt
MTAzLDYgKzEwNCw3IEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKICAgICAgICAg
b2JqLT5kZXRhY2goKTsKICAgICAgICAgcmVtb3ZlQVhJRChvYmopOwogICAgIH0KKyAgICBzdG9w
TWVtb2l6aW5nKCk7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZv
Y3VzZWRJbWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqIGFyZWFFbGVtZW50KQpAQCAt
NzkzLDYgKzc5NSw0MyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlY29tcHV0ZUlzSWdub3JlZChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgICAgICBvYmotPm5vdGlmeUlmSWdub3JlZFZhbHVl
Q2hhbmdlZCgpOwogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0YXJ0TWVtb2l6aW5nKCkKK3sK
KyAgICBpZiAoIW1fbWVtb2l6ZWREYXRhKQorICAgICAgICBtX21lbW9pemVkRGF0YSA9IG5ldyBI
YXNoTWFwPEFYSUQsIFJlZlB0cjxNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhPiA+KCk7
Cit9CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6c3RvcE1lbW9pemluZygpCit7CisgICAgaWYgKCFt
X21lbW9pemVkRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIG1fbWVtb2l6ZWRE
YXRhOworICAgIG1fbWVtb2l6ZWREYXRhID0gMDsKK30KKworTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5
T2JqZWN0RGF0YSogQVhPYmplY3RDYWNoZTo6Z2V0TWVtb2l6ZWREYXRhKEFYSUQgaWQpIGNvbnN0
Cit7CisgICAgaWYgKCFtX21lbW9pemVkRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBI
YXNoTWFwPEFYSUQsIFJlZlB0cjxNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhPiA+Ojpp
dGVyYXRvciBpdCA9IG1fbWVtb2l6ZWREYXRhLT5maW5kKGlkKTsKKyAgICByZXR1cm4gaXQgIT0g
bV9tZW1vaXplZERhdGEtPmVuZCgpID8gKCppdCkudmFsdWUuZ2V0KCkgOiAwOworfQorCitNZW1v
aXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZU1l
bW9pemVkRGF0YShBWElEIGlkKQoreworICAgIGlmICghbV9tZW1vaXplZERhdGEpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIGRh
dGEgPSBnZXRNZW1vaXplZERhdGEoaWQpKQorICAgICAgICByZXR1cm4gZGF0YTsKKworICAgIE1l
bW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIGRhdGEgPSBuZXcgTWVtb2l6ZWRBY2Nlc3Np
YmlsaXR5T2JqZWN0RGF0YTsKKyAgICBtX21lbW9pemVkRGF0YS0+c2V0KGlkLCBhZG9wdFJlZihk
YXRhKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKIFZpc2libGVQb3NpdGlvbiBBWE9iamVjdENh
Y2hlOjp2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YShUZXh0TWFya2VyRGF0YSYgdGV4
dE1hcmtlckRhdGEpCiB7CiAgICAgaWYgKCFpc05vZGVJblVzZSh0ZXh0TWFya2VyRGF0YS5ub2Rl
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXgg
NGVkZjgxNTAzZTFlZTQzNjI2OTBiOWRmMzA4MjljYjFiNzkzODliOS4uMTgxNTBiNWRhMDAxOGZl
Nzg2OTg0NTI5MTg0MTM2YTdmNzk3YTIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTUyLDYgKzUyLDEyIEBAIHN0cnVjdCBUZXh0TWFya2Vy
RGF0YSB7CiAgICAgRUFmZmluaXR5IGFmZmluaXR5OwogfTsKIAorc3RydWN0IE1lbW9pemVkQWNj
ZXNzaWJpbGl0eU9iamVjdERhdGEgIDogcHVibGljIFJlZkNvdW50ZWQ8TWVtb2l6ZWRBY2Nlc3Np
YmlsaXR5T2JqZWN0RGF0YT4geworICAgIE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEo
KSA6IGlnbm9yZWQoRGVmYXVsdEJlaGF2aW9yKSB7IH0KKworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3RJbmNsdXNpb24gaWdub3JlZDsKK307CisKIGVudW0gUG9zdFR5cGUgeyBQb3N0U3luY2hyb25v
dXNseSwgUG9zdEFzeW5jaHJvbm91c2x5IH07CiAKIGNsYXNzIEFYT2JqZWN0Q2FjaGUgewpAQCAt
MTgyLDYgKzE4OCwxNCBAQCBwdWJsaWM6CiAKICAgICBib29sIG5vZGVIYXNSb2xlKE5vZGUqLCBj
b25zdCBBdG9taWNTdHJpbmcmIHJvbGUpOwogCisgICAgLy8gV2hlbiBhIGxhcmdlIG51bWJlciBv
ZiBxdWVyaWVzIHRvIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgd2lsbCBiZSBtYWRlCisgICAgLy8g
d2l0aGluIGEgYmxvY2sgdGhhdCBjYW4gZ3VhcmFudGVlIHRoZSB0cmVlIHdvbid0IGNoYW5nZSwg
dHVybmluZyBvbgorICAgIC8vIG1lbW9pemF0aW9uIGNhbiBzcGVlZCB1cCB0aGUgY29tcHV0YXRp
b24gc2lnbmlmaWNhbnRseS4KKyAgICB2b2lkIHN0YXJ0TWVtb2l6aW5nKCk7CisgICAgdm9pZCBz
dG9wTWVtb2l6aW5nKCk7CisgICAgTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogZ2V0
TWVtb2l6ZWREYXRhKEFYSUQpIGNvbnN0OworICAgIE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVj
dERhdGEqIGdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKEFYSUQpOworCiBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYTm90
aWZpY2F0aW9uKTsKICAgICB2b2lkIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24o
QWNjZXNzaWJpbGl0eU9iamVjdCosIEFYVGV4dENoYW5nZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25z
dCBTdHJpbmcmKTsKQEAgLTIwMSw2ICsyMTUsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8V2lk
Z2V0KiwgQVhJRD4gbV93aWRnZXRPYmplY3RNYXBwaW5nOwogICAgIEhhc2hNYXA8Tm9kZSosIEFY
SUQ+IG1fbm9kZU9iamVjdE1hcHBpbmc7CiAgICAgSGFzaFNldDxOb2RlKj4gbV90ZXh0TWFya2Vy
Tm9kZXM7CisgICAgSGFzaE1hcDxBWElELCBSZWZQdHI8TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0RGF0YT4gPiogbV9tZW1vaXplZERhdGE7CiAgICAgc3RhdGljIGJvb2wgZ0FjY2Vzc2liaWxp
dHlFbmFibGVkOwogICAgIHN0YXRpYyBib29sIGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50
ZXJmYWNlRW5hYmxlZDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDQ3MjI3MGMxODJhYjc1ZTdiMDI3ZjQz
NWYxZTI1ZmRiZjE3ZjcyMzQuLjRkODUzMmU3ODJmN2FlNmMxZmMwYTNiZmEyZjA0NmNmZmI5NTM3
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcApAQCAtNDQ4LDYgKzQ0OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiBjcml0
ZQogICAgIGlmICghY3JpdGVyaWEpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIFR1cm4gb24g
bWVtb2l6YXRpb24gdG8gbWluaW1pemUgcmVkdW5kYW50IGNvbXB1dGF0aW9uIGR1cmluZyB0aGUg
ZHVyYXRpb24gb2YgdGhpcworICAgIC8vIG1ldGhvZCwgd2hlcmUgd2UgY2FuIGd1YXJhbnRlZSB0
aGUgdHJlZSB3b24ndCBjaGFuZ2UuCisgICAgYXhPYmplY3RDYWNoZSgpLT5zdGFydE1lbW9pemlu
ZygpOworCiAgICAgLy8gVGhpcyBzZWFyY2ggbWVjaGFuaXNtIG9ubHkgc2VhcmNoZXMgdGhlIGVs
ZW1lbnRzIGJlZm9yZS9hZnRlciB0aGUgc3RhcnRpbmcgb2JqZWN0LgogICAgIC8vIEl0IGRvZXMg
dGhpcyBieSBzdGVwcGluZyB1cCB0aGUgcGFyZW50IGNoYWluIGFuZCBhdCBlYWNoIGxldmVsIGRv
aW5nIGEgREZTLgogICAgIApAQCAtNDk0LDYgKzQ5OCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqIGNy
aXRlCiAKICAgICAgICAgcHJldmlvdXNPYmplY3QgPSBzdGFydE9iamVjdDsKICAgICB9CisKKyAg
ICBheE9iamVjdENhY2hlKCktPnN0b3BNZW1vaXppbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojppc0FSSUFJbnB1dChBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCmluZGV4IDQyZTU1NzYwY2VlZTAzY2M3YjhmNzA0Mzg2NWZjNGNkYmUyZWY4
NmUuLmIwNDlmMzg2N2NiZDJhYjY0MmMzODE0NzUyMzk4MWExNWQzNDI4MDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcApAQCAtMTEyMyw5ICsxMTIzLDI3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
dXNpb24gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJh
CiAgICAgICAgIAogICAgIHJldHVybiBEZWZhdWx0QmVoYXZpb3I7CiB9ICAKLSAKKwogYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QK
IHsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAo
TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogbWVtb2l6ZWREYXRhID0gY2FjaGUtPmdl
dE1lbW9pemVkRGF0YShheE9iamVjdElEKCkpKSB7CisgICAgICAgIGlmIChtZW1vaXplZERhdGEt
Pmlnbm9yZWQgPT0gSWdub3JlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmIChtZW1vaXplZERhdGEtPmlnbm9yZWQgPT0gSW5jbHVkZU9iamVjdCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCA9IGNvbXB1dGVBY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCk7CisKKyAgICBpZiAoTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0RGF0YSogbWVtb2l6ZWREYXRhID0gY2FjaGUtPmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKGF4
T2JqZWN0SUQoKSkpCisgICAgICAgIG1lbW9pemVkRGF0YS0+aWdub3JlZCA9IHJlc3VsdCA/IEln
bm9yZU9iamVjdCA6IEluY2x1ZGVPYmplY3Q7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkKCkgY29uc3QKK3sKICAgICAvLyBDaGVjayBmaXJzdCBpZiBhbnkgb2YgdGhlIGNvbW1vbiBy
ZWFzb25zIGNhdXNlIHRoaXMgZWxlbWVudCB0byBiZSBpZ25vcmVkLgogICAgIC8vIFRoZW4gcHJv
Y2VzcyBvdGhlciB1c2UgY2FzZXMgdGhhdCBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSB2
YXJpb3VzIHJvbGVzCiAgICAgLy8gdGhhdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0cyB0YWtl
IG9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCA5N2JmOGEzN2ZkNjM1NTQ1N2Y0M2JhNGE2YWYwYjA0
MzIzN2ZmZjJhLi40Mzc0YjFhNDU1ZjI4YzhjNTg1NjI5YThmODdmM2M4Y2ZjYTZmYTIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaApAQCAtMjc3LDYgKzI3Nyw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGFyaWFMaXZlUmVnaW9uQnVzeSgpIGNvbnN0OyAgICAKICAgICAKICAgICBib29sIGluaGVy
aXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3Q7CisKKyAgICBib29sIGNvbXB1dGVBY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgCiAjaWYgRU5BQkxFKE1BVEhNTCkKICAgICAv
LyBBbGwgbWF0aCBlbGVtZW50cyByZXR1cm4gdHJ1ZSBmb3IgaXNNYXRoRWxlbWVudCgpLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdC5oCmluZGV4IGI3N2QxMDg3NmQ5NmY3M2Q2NjJkZjgzZmFhZTlkNTE4MjFiOGVmOTcuLjZh
YTg1MjY2NTVjNGYzMzRmY2NhNGNkNmJiNjEyYzk2ZmExOGUzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAg
LTc2LDYgKzc2LDEzIEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVu
YWJsZUFjY2Vzc2liaWxpdHkoKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGFjY2Vz
c2liaWxpdHlFbmFibGVkKCk7CiAKKyAgICAvLyBNZXRob2RzIHRvIHN0YXJ0IGFuZCBzdG9wIG1l
bW9pemF0aW9uOyB0aGlzIGFwcGxpZXMgdG8gdGhlCisgICAgLy8gd2hvbGUgYWNjZXNzaWJpbGl0
eSB0cmVlIHRoYXQgdGhpcyBvYmplY3QgaXMgY29udGFpbmVkIGluLgorICAgIC8vIE1lbW9pemF0
aW9uIGNhbiBzaWduaWZpY2FudGx5IHNwZWVkIHVwIG9wZXJhdGlvbnMgYXMgbG9uZyBhcworICAg
IC8vIHRoZSB0cmVlIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNoYW5nZSB3aGlsZSBpdCdzIGVuYWJs
ZWQuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0YXJ0TWVtb2l6aW5nKCk7CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHN0b3BNZW1vaXppbmcoKTsKKwogICAgIFdFQktJVF9FWFBPUlQgaW50IGF4
SUQoKSBjb25zdDsKIAogICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyB0cmVlLCBhbmQgcmV0
dXJuIHRydWUgaWYgdGhpcyBvYmplY3QgaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggYjkyMGU0ZWM0ZmEwYWFh
Yjc4OTMxZDdlYjc5YjgzZWIxNDNlNmU4NC4uMWM3NzJkMjYxZGQ3NGM2NjM1MmVlZDNlNjdkMjJl
ZjE1MWU5YjdiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTgyLDYgKzgyLDE2IEBAIGJvb2wgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKQogICAgIHJldHVybiBBWE9iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpOwogfQogCit2b2lkIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN0YXJ0TWVtb2l6aW5nKCkKK3sKKyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2Fj
aGUoKS0+c3RhcnRNZW1vaXppbmcoKTsKK30KKwordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzdG9wTWVtb2l6aW5nKCkKK3sKKyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3Rv
cE1lbW9pemluZygpOworfQorCiBib29sIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRGV0YWNo
ZWQoKSBjb25zdAogewogICAgIGlmIChtX3ByaXZhdGUuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmEzNTA4NjEwYzk3NWI1N2E4
NzJhMDA2MmVjMjA5MTgyMjYzZTc4YS4uMjQ1MGUyYzBhM2RlYWJiYmIyNWQ5NzJlYTBhMGU2MzI0
YzUwY2Y2NSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAxLTExICBEb21pbmljIE1henpvbmkgIDxkbWF6em9u
aUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXplIGV4cGVuc2l2ZSBjb21wdXRhdGlv
biBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjQ5NworCisgICAgICAgIEFkZCBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5zdGFydE1lbW9pemF0aW9uIGFuZAorICAgICAgICBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5zdG9wTWVtb2l6YXRpb24gc28gdGhhdCBpdCdzCisgICAgICAg
IHBvc3NpYmxlIHRvIHRlc3QgbWVtb2l6YXRpb24gZXhwbGljaXRseSAtIGN1cnJlbnRseSBvbmx5
CisgICAgICAgIGZyb20gQ2hyb21pdW0uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChzdGFydE1lbW9pemluZ0NhbGxiYWNrKToKKyAgICAgICAgKHN0b3BN
ZW1vaXppbmdDYWxsYmFjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJU
ZXN0UnVubmVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RhcnRNZW1vaXppbmdDYWxsYmFj
ayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OkFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nQ2FsbGJhY2spOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyQ2hyb21pdW0uaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3Bw
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nKToKKwogMjAxMy0wMS0wOCAg
WmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFt3ZWJraXRw
eV0gQ2FsbCBzZXR1cF90ZXN0X3J1biBtZXRob2Qgb2YgdGhlIHBhcmVudCBQb3J0IGludGVyZmFj
ZSB3aGVuIG1ldGhvZCBpcyBjYWxsZWQgb24gc3ViY2xhc3NlcwpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4IDQ5ZDQ1M2E4NGNkZWJj
ZGI4YTMyMjZiZmQ5MmNjODExODI0YTY1NzMuLmYzOTIwZDBiYzI4Nzk4Y2Y5MGU0NTI4NDg4YWU1
NTk5OTA5M2Q5MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5jcHAKQEAgLTg0LDYgKzg0LDIwIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGxvZ0Fj
Y2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiwK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKIH0KIAorc3RhdGljIEpTVmFs
dWVSZWYgc3RhcnRNZW1vaXppbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpT
VmFsdWVSZWYqKQoreworICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnN0YXJ0TWVtb2l6aW5nKCk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHN0
b3BNZW1vaXppbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYq
KQoreworICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPnN0b3BNZW1vaXppbmcoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgZ2V0RWxlbWVudEF0
UG9pbnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgaW50IHgg
PSAwOwpAQCAtMTM4LDYgKzE1Miw4IEBAIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OmdldEpTQ2xhc3MoKQogICAgICAgICB7ICJhY2Nlc3NpYmxlRWxlbWVudEJ5SWQiLCBnZXRB
Y2Nlc3NpYmxlRWxlbWVudEJ5SWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJhZGROb3Rp
ZmljYXRpb25MaXN0ZW5lciIsIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIiLCByZW1vdmVOb3RpZmlj
YXRpb25MaXN0ZW5lckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInN0YXJ0TWVtb2l6aW5n
Iiwgc3RhcnRNZW1vaXppbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzdG9wTWVtb2l6
aW5nIiwgc3RvcE1lbW9pemluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9
CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmgKaW5kZXggYTZjZGM0Njg2YzEzMmZmNTg2ZDU4MmZlNTFhMDc2OGVlNzJjMDEwMC4uMDBh
Y2VkMDA5MDVjYjIwOTRhNzMxMDRhMDdkM2FiNjhhOWUwZmVjYSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCkBAIC01Myw2ICs1Myw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldExvZ1Njcm9sbGluZ1N0YXJ0RXZlbnRzKGJvb2wpOwogICAgIHZv
aWQgc2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhib29sKTsKIAorICAgIHZvaWQgc3RhcnRNZW1v
aXppbmcoKTsKKyAgICB2b2lkIHN0b3BNZW1vaXppbmcoKTsKKwogICAgIHZvaWQgcmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZSgpOwogCiAgICAgLy8gR2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciwg
Y2FwdHVyZXMgbm90aWZpY2F0aW9ucyBvbiBhbnkgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcAppbmRleCA1ZjFiNGY5
YTkyZDI3NTUzYjUzNjVlM2NhYTA2MWUwNjRiZDc0ZjlkLi4zY2NjODhiNGJjODllMmU5ZjU3ZWY3
OTA2NWMzZGE4ZGRiMjcxNTEyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcApAQCAtNTYsNiArNTYsOSBAQCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQogCiAgICAgYmluZE1ldGhv
ZCgiYWNjZXNzaWJsZUVsZW1lbnRCeUlkIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nl
c3NpYmxlRWxlbWVudEJ5SWRHZXR0ZXJDYWxsYmFjayk7CiAKKyAgICBiaW5kTWV0aG9kKCJzdGFy
dE1lbW9pemluZyIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RhcnRNZW1vaXppbmdDYWxs
YmFjayk7CisgICAgYmluZE1ldGhvZCgic3RvcE1lbW9pemluZyIsICZBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6c3RvcE1lbW9pemluZ0NhbGxiYWNrKTsKKwogICAgIGJpbmRGYWxsYmFja01ldGhv
ZCgmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2spOwogfQogCkBAIC0x
OTYsNiArMTk5LDE4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVF
bGVtZW50QnlJZEdldHRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtCiAgICAgcmVzdWx0LT5zZXQo
Kihmb3VuZEVsZW1lbnQtPmdldEFzQ3BwVmFyaWFudCgpKSk7CiB9CiAKK3ZvaWQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKKyAgICBtX3dlYlZpZXctPmFjY2Vzc2liaWxpdHlPYmplY3QoKS5zdGFydE1lbW9pemlu
ZygpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nQ2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBtX3dlYlZpZXctPmFjY2Vzc2liaWxp
dHlPYmplY3QoKS5zdG9wTWVtb2l6aW5nKCk7Cit9CisKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQogewogICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiQ09OU09MRSBNRVNT
QUdFOiBKYXZhU2NyaXB0IEVSUk9SOiB1bmtub3duIG1ldGhvZCBjYWxsZWQgb24gQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJcbiIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJDaHJvbWl1bS5oCmluZGV4IGE5NzI4YzYxNWJiNGY1MDVmZTFlY2E2YTJmNjRj
ZmZhZTk0YTE1NWIuLjdhYTZlMzhkNTFmNTU2MDA1OTNjZWVkYjBkMTBhOGI2NmM5MjdhMDAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVt
LmgKQEAgLTc4LDYgKzc4LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJvb3RFbGVtZW50R2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOwogICAgIHZvaWQgYWNjZXNzaWJsZUVsZW1lbnRCeUlkR2V0
dGVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCisgICAg
dm9pZCBzdGFydE1lbW9pemluZ0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIHN0b3BNZW1vaXppbmdDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBmaW5k
QWNjZXNzaWJsZUVsZW1lbnRCeUlkUmVjdXJzaXZlKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJp
bGl0eU9iamVjdCYsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBpZCk7CiAKICAgICBXZWJLaXQ6
OldlYkFjY2Vzc2liaWxpdHlPYmplY3QgbV9mb2N1c2VkRWxlbWVudDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCmlu
ZGV4IDQ2NjE4MmJiMzA1YTY2NzYwODA2YmVmODQ4ZDk0Yzc2MjJmODc1Y2UuLmE2MmExOTlhMTlm
NzIwNzk1YWU1MTA4MjgzM2ZiMjU2Mjg2ZmUxYjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApAQCAtMTAzLDYg
KzEwMywxNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dBY2Nlc3NpYmls
aXR5RXZlbnRzKGJvb2wgbG9nQWNjZXNzaWJpbGl0eUV2ZQogICAgIGxvZ2dpbmdBY2Nlc3NpYmls
aXR5RXZlbnRzID0gdHJ1ZTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3Rh
cnRNZW1vaXppbmcoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9w
TWVtb2l6aW5nKCkKK3sKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90
aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
V2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cldpbi5jcHAKaW5kZXggOTk1YzVmMTE1YzJlYTNkOThjODY3MjJlNGRkZjM4ZDBjM2Y1NTBiYy4u
NzhlOGFmODYyMTlmMTRlZGFkNTJjOTJlZjc0Mjc5NmQwMjZiNDM0MiAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3Bw
CkBAIC0yOTYsNiArMjk2LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92
ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKCkKIHsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6c3RhcnRNZW1vaXppbmcoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpzdG9wTWVtb2l6aW5nKCkKK3sKK30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgY29u
c3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVt
ZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMu
YmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA4NDU3MjZhMTc2MmNiZjExMmI4ZDYwYmM0MGU4Njc4NTFhYjliMmE5Li5kNTJkOGVlZTMy
NDkxNTdlNjdiOWU4Mzg4NjYzOTExMWIzMDU3ODFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTMtMDEtMTEgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgQVg6IG1lbW9pemUgZXhwZW5zaXZlIGNvbXB1dGF0aW9uIGR1cmluZyBibG9ja3Mgd2hlcmUg
dHJlZSBkb2Vzbid0IGNoYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA2NDk3CisKKyAgICAgICAgQWRkcyBuZXcgdGVzdCB0aGF0IHVzZXMgYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuc3RhcnRNZW1vaXphdGlvbigpCisgICAgICAgIHRvIHRlc3Qg
dGhhdCB3aGVuIG1lbW9pemF0aW9uIGlzIG9uLCB0aGUgaWdub3JlZCBzdGF0ZSBvZiBhIG5vZGUg
aXMKKyAgICAgICAgbm90IHJlY29tcHV0ZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdu
b3JlZC5odG1sOiBBZGRlZC4KKwogMjAxMy0wMS0wOCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXpr
b3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVGlnaHRlbiB1cCB0aGUgYWN0
dWFsIGV4cGVjdGF0aW9ucyBhcm91bmQgd2ViYXVkaW8gZmFpbHMuLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42YWIwNWU3MjczNmEwODcwYmI3M2UzMjExYjUyY2RiYjAxYjQ4MWVmCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3Jl
ZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMCBAQAorVGV4dAorCitUZXN0cyB0aGF0IHR1cm5p
bmcgb24gbWVtb2l6YXRpb24gY2F1c2VzIHRoZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBz
dG9wIGNvbXB1dGluZyB3aGV0aGVyIGl0J3MgaWdub3JlZCBvciBub3QuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitXaXRob3V0IG1lbW9pemF0aW9uOgorUEFTUyBmaW5kQVhFbGVt
ZW50KCJkaXYiKSAhPSBudWxsIGlzIGZhbHNlCitQQVNTIGRpdi5zZXRBdHRyaWJ1dGUoInJvbGUi
LCAiaGVhZGluZyIpOyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxsIGlzIHRydWUKK1BBU1Mg
ZGl2LnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpOyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxs
IGlzIGZhbHNlCisKK1dpdGggbWVtb2l6YXRpb246CitQQVNTIGZpbmRBWEVsZW1lbnQoImRpdiIp
ICE9IG51bGwgaXMgZmFsc2UKK1BBU1MgZGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsICJoZWFkaW5n
Iik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgZmFsc2UKK1BBU1MgZGl2LnJlbW92
ZUF0dHJpYnV0ZSgicm9sZSIpOyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxsIGlzIGZhbHNl
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1s
IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY1YmI3ZWE0MjBjNTE4NGE2YTFlNjMzYmEwYjA0MTQwMzY2ODAxYTgKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0
bWwKQEAgLTAsMCArMSw0MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KworPGRpdj4KKyAgPGRpdiBpZD0iZGl2Ij4KKyAgICA8cD5UZXh0PC9wPgorICA8L2Rpdj4KKzwv
ZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKworPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0dXJuaW5nIG9uIG1lbW9p
emF0aW9uIGNhdXNlcyB0aGUgYW4gYWNjZXNzaWJpbGl0eSBvYmplY3QgdG8gc3RvcCBjb21wdXRp
bmcgd2hldGhlciBpdCdzIGlnbm9yZWQgb3Igbm90LiIpOworCitpZiAod2luZG93LmFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKSB7CisgICAgd2luZG93LmZpbmRBWEVsZW1lbnQgPSBmdW5jdGlvbihp
ZCkgeworICAgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVt
ZW50QnlJZChpZCk7CisgICAgfTsKKyAgICB3aW5kb3cuZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2RpdicpOworCisgICAgZGVidWcoJ1dpdGhvdXQgbWVtb2l6YXRpb246Jyk7CisgICAg
c2hvdWxkQmUoJ2ZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwnLCAnZmFsc2UnKTsKKyAgICBz
aG91bGRCZSgnZGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsICJoZWFkaW5nIik7IGZpbmRBWEVsZW1l
bnQoImRpdiIpICE9IG51bGwnLCAndHJ1ZScpOworICAgIHNob3VsZEJlKCdkaXYucmVtb3ZlQXR0
cmlidXRlKCJyb2xlIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwnLCAnZmFsc2UnKTsK
KworICAgIGRlYnVnKCdcbldpdGggbWVtb2l6YXRpb246Jyk7CisgICAgYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuc3RhcnRNZW1vaXppbmcoKTsKKyAgICBzaG91bGRCZSgnZmluZEFYRWxlbWVudCgi
ZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworICAgIHNob3VsZEJlKCdkaXYuc2V0QXR0cmlidXRl
KCJyb2xlIiwgImhlYWRpbmciKTsgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxz
ZScpOworICAgIHNob3VsZEJlKCdkaXYucmVtb3ZlQXR0cmlidXRlKCJyb2xlIik7IGZpbmRBWEVs
ZW1lbnQoImRpdiIpICE9IG51bGwnLCAnZmFsc2UnKTsKKyAgICBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5zdG9wTWVtb2l6aW5nKCk7Cit9CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZmZi
ZmJkYzU4ZDk4OTVlNGYxYjY1YWI4MDdjMDg3YjE1MWQ3YzYyZi4uZmMxOWMzNzYzODRiY2YwMjJh
YzYwNDY2Yzc0NWYzZGU4ZjU1ZGUzNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RF
eHBlY3RhdGlvbnMKQEAgLTcwNiw2ICs3MDYsOSBAQCB3ZWJraXQub3JnL2IvMTAzMjIzIGFjY2Vz
c2liaWxpdHkvZmlsZS11cGxvYWQtYnV0dG9uLXdpdGgtYXhwcmVzcy5odG1sIFsgVGltZW91dAog
IyBNaXNzaW5nIERSVCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlz
dGVuZXIgaW1wbGVtZW50YXRpb24KIHdlYmtpdC5vcmcvYi83MDYwNiBhY2Nlc3NpYmlsaXR5L2Fy
aWEtY2hlY2tib3gtc2VuZHMtbm90aWZpY2F0aW9uLmh0bWwgWyBUaW1lb3V0IF0KIAorIyBNaXNz
aW5nIERSVCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RhcnRNZW1vaXppbmcgaW1wbGVtZW50
YXRpb24KK3dlYmtpdC5vcmcvYi8xMDY2OTUgYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3Jl
ZC5odG1sIFsgRmFpbHVyZSBdCisKIHdlYmtpdC5vcmcvYi83MzAwMyBbIFJlbGVhc2UgXSBlZGl0
aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stYXN5bmMuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9y
Zy9iLzczMDAzIFsgUmVsZWFzZSBdIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1wYXN0ZS5o
dG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNTA3NDAgWyBSZWxlYXNlIF0gZWRpdGluZy9z
cGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLmh0bWwgWyBUaW1lb3V0IF0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGU1ZDc3ODZlNWFhMzJhMTgwZTNmZmVm
ZDE4N2ZiZGFhMGI2NTAxNy4uODhhZjFlMzAxZjE1MTA4ODBhYjkwZTk3ZTZhNjNlNWRiY2RkZDg1
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTQ0LDYg
KzQ0LDcgQEAgYWNjZXNzaWJpbGl0eS9kb2N1bWVudC1hdHRyaWJ1dGVzLmh0bWwKIGFjY2Vzc2li
aWxpdHkvYXJpYS1tZW51YmFyLW1lbnVpdGVtcy5odG1sCiAKICMgQWNjZXNzaWJpbGl0eSB0ZXN0
cyB3aXRoIG1pc3NpbmcgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgZnVuY3Rpb25hbGl0eS4KK2Fj
Y2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbAogYWNjZXNzaWJpbGl0eS9zZWxlY3Rp
b24tc3RhdGVzLmh0bWwKIAogIyBBY2Nlc3NpYmlsaXR5IHRlc3RzIGZvciBub3RpZmljYXRpb25z
IHRoYXQgZG9uJ3QgZXhpc3Qgb3IgYXJlbid0IG5lZWRlZCBvbiBNYWMgT1MgWC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggODEyZjU1OTMyZjhhNzhiNzBi
ZDA0OWRlM2M0MDgwMzRmYzdlYTIzNy4uOThmYzRhNzg3MGQwMTg0OGIyNGU1MGIyM2ZmMzM2NmJm
NjAwMTI1MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3Rh
dGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKQEAg
LTYyOSw2ICs2MjksNyBAQCBhY2Nlc3NpYmlsaXR5L2xhbmd1YWdlLWF0dHJpYnV0ZS5odG1sCiBh
Y2Nlc3NpYmlsaXR5L2xlZ2VuZC5odG1sCiBhY2Nlc3NpYmlsaXR5L2xpc3RzLmh0bWwKIGFjY2Vz
c2liaWxpdHkvbWVkaWEtZWxlbWVudC5odG1sCithY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25v
cmVkLmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9jaGlsZHJlbi1lbGVtZW50cy5odG1sCiBhY2Nlc3Np
YmlsaXR5L25vbi1kYXRhLXRhYmxlLWNlbGwtdGl0bGUtdWktZWxlbWVudC5odG1sCiBhY2Nlc3Np
YmlsaXR5L25vbi1uYXRpdmUtaW1hZ2UtY3Jhc2guaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182425</attachid>
            <date>2013-01-11 15:03:29 -0800</date>
            <delta_ts>2013-01-12 00:36:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130111150031.patch</filename>
            <type>text/plain</type>
            <size>27372</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzA5NWQ3YjZjMjkxNmU5
MTE4MmZlZDhiODgzYTNmNGFmMjM2ZTc3ZS4uY2M2MDZlOWZkZTQzODE5Y2FjYTBmOTc0NGM0YjNl
YWFhZTcyNGFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAxLTExICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBtZW1vaXphdGlvbi4gV2hlbiBtZW1vaXph
dGlvbiBpcyBvbiwgQVhPYmplY3RDYWNoZQorICAgICAgICBjcmVhdGVzIGFuIGFkZGl0aW9uYWwg
aGFzaCBtYXAgd2l0aCBjYWNoZWQgcmVzdWx0cyBvZiBleHBlbnNpdmUKKyAgICAgICAgY29tcHV0
YXRpb24gb24gQWNjZXNzaWJpbGl0eU9iamVjdHMuIEl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBv
bmx5CisgICAgICAgIHdpdGhpbiBibG9ja3Mgd2hlcmUgeW91J2xsIGJlIGFjY2Vzc2luZyBhIGxv
dCBvZiBBWE9iamVjdHMgYnV0CisgICAgICAgIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlIERP
TS9yZW5kZXIgdHJlZXMgZG8gbm90IGNoYW5nZS4KKworICAgICAgICBJbml0aWFsbHksIGp1c3Qg
dGhlIHJlc3VsdCBvZiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGlzIGNhY2hlZCwgc2luY2UKKyAg
ICAgICAgdGhpcyBpcyB0aGUgb25lIG9mIHRoZSBob3R0ZXN0IG1ldGhvZHMuCisKKyAgICAgICAg
V2hlbiBtZW1vaXphdGlvbiBpcyBzdG9wcGVkLCB0aGUgY2FjaGUgaXMgdGhyb3duIGF3YXksIHNv
IHRoZXJlJ3MKKyAgICAgICAgbm8gY2hhbmNlIG9mIGl0IGdvaW5nIHN0YWxlLgorCisgICAgICAg
IE1lbW9pemF0aW9uIGlzIHVzZWQgYXV0b21hdGljYWxseSBpbnNpZGUgZmluZE1hdGNoaW5nT2Jq
ZWN0cywgYW5kCisgICAgICAgIGNhbiBiZSB1c2VkIHZpYSBhIG5ldyBDaHJvbWl1bSBBUEkuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogcGxh
dGZvcm0vY2hyb21pdW0vYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpzdGFydE1lbW9pemluZyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OnN0b3BNZW1vaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6Z2V0TWVtb2l6ZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9pemVkQWNjZXNzaWJpbGl0
eU9iamVjdERhdGE6Ok1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEpOgorICAgICAgICAo
TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpm
aW5kTWF0Y2hpbmdPYmplY3RzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAy
MDEzLTAxLTA4ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBI
ZWFwLXVzZS1hZnRlci1mcmVlIGluIGJvb2wgV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZVNlbGVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwMGM4MDM1ZjVmZGQ1
MDAwODhkNjE3YTI1NDUxNzkwZDk4NTQ2N2I1Li5iNTA2ZTgxOGQ4ZmQxNjkxM2ZjZWNlZDIwZDQy
MzQzY2I3MWEzMGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDEzLTAxLTExICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisg
ICAgICAgIEFYOiBtZW1vaXplIGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdo
ZXJlIHRyZWUgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNjQ5NworCisgICAgICAgIEFkZCBhbiBBUEkgdG8gdHVybiBtZW1v
aXphdGlvbiBvbiBhbmQgb2ZmLiBUaGlzIHdpbGwgYWxsb3cKKyAgICAgICAgQ2hyb21pdW0gdG8g
c3BlZWQgdXAgYmF0Y2ggb3BlcmF0aW9ucyB0aGF0IHF1ZXJ5IGEgbG90IG9mCisgICAgICAgIGFj
Y2Vzc2libGUgb2JqZWN0cywgd2hlbiBpdCBjYW4gZ3VhcmFudGVlIHRoZSB0cmVlIHdvbid0IGNo
YW5nZQorICAgICAgICB3aXRoaW4gdGhhdCB0aW1lIHBlcmlvZC4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0Lmg6CisgICAgICAgIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBz
cmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vz
c2liaWxpdHlPYmplY3Q6OnN0YXJ0TWVtb2l6aW5nKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0b3BNZW1vaXppbmcpOgorCiAy
MDEzLTAxLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmVkIHRoZSBuZWVkIGZvciB0aGUgUHJvcG9zZWREYXRhYmFzZSBtZWNoYW5pc20uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAwNzk1NTVi
MDk2ZDIxZGMyMDE5NWNiMzNiMDkwNzFiMzA2ZjJiNzQwLi5iYTcwYTQyNWJmNmQwMTA0N2IyYWNi
MzhhNjJjZTY5NDJkOWJlMWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKQEAgLTg3LDcgKzg3LDggQEAgYm9vbCBBWE9iamVjdENhY2hlOjpn
QWNjZXNzaWJpbGl0eUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgQVhPYmplY3RDYWNoZTo6Z0FjY2Vz
c2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0gZmFsc2U7CiAKIEFYT2JqZWN0
Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29uc3QgRG9jdW1lbnQqIGRvYykKLSAgICA6IG1fbm90aWZp
Y2F0aW9uUG9zdFRpbWVyKHRoaXMsICZBWE9iamVjdENhY2hlOjpub3RpZmljYXRpb25Qb3N0VGlt
ZXJGaXJlZCkKKyAgICA6IG1fbWVtb2l6ZWREYXRhKDApCisgICAgLCBtX25vdGlmaWNhdGlvblBv
c3RUaW1lcih0aGlzLCAmQVhPYmplY3RDYWNoZTo6bm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQp
CiB7CiAgICAgbV9kb2N1bWVudCA9IGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPihkb2MpOwogfQpAQCAt
MTAzLDYgKzEwNCw3IEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKICAgICAgICAg
b2JqLT5kZXRhY2goKTsKICAgICAgICAgcmVtb3ZlQVhJRChvYmopOwogICAgIH0KKyAgICBzdG9w
TWVtb2l6aW5nKCk7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZv
Y3VzZWRJbWFnZU1hcFVJRWxlbWVudChIVE1MQXJlYUVsZW1lbnQqIGFyZWFFbGVtZW50KQpAQCAt
NzkzLDYgKzc5NSw0MyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlY29tcHV0ZUlzSWdub3JlZChS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgICAgICBvYmotPm5vdGlmeUlmSWdub3JlZFZhbHVl
Q2hhbmdlZCgpOwogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0YXJ0TWVtb2l6aW5nKCkKK3sK
KyAgICBpZiAoIW1fbWVtb2l6ZWREYXRhKQorICAgICAgICBtX21lbW9pemVkRGF0YSA9IG5ldyBI
YXNoTWFwPEFYSUQsIFJlZlB0cjxNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhPiA+KCk7
Cit9CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6c3RvcE1lbW9pemluZygpCit7CisgICAgaWYgKCFt
X21lbW9pemVkRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIG1fbWVtb2l6ZWRE
YXRhOworICAgIG1fbWVtb2l6ZWREYXRhID0gMDsKK30KKworTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5
T2JqZWN0RGF0YSogQVhPYmplY3RDYWNoZTo6Z2V0TWVtb2l6ZWREYXRhKEFYSUQgaWQpIGNvbnN0
Cit7CisgICAgaWYgKCFtX21lbW9pemVkRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBI
YXNoTWFwPEFYSUQsIFJlZlB0cjxNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhPiA+Ojpp
dGVyYXRvciBpdCA9IG1fbWVtb2l6ZWREYXRhLT5maW5kKGlkKTsKKyAgICByZXR1cm4gaXQgIT0g
bV9tZW1vaXplZERhdGEtPmVuZCgpID8gKCppdCkudmFsdWUuZ2V0KCkgOiAwOworfQorCitNZW1v
aXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZU1l
bW9pemVkRGF0YShBWElEIGlkKQoreworICAgIGlmICghbV9tZW1vaXplZERhdGEpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIGRh
dGEgPSBnZXRNZW1vaXplZERhdGEoaWQpKQorICAgICAgICByZXR1cm4gZGF0YTsKKworICAgIE1l
bW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIGRhdGEgPSBuZXcgTWVtb2l6ZWRBY2Nlc3Np
YmlsaXR5T2JqZWN0RGF0YTsKKyAgICBtX21lbW9pemVkRGF0YS0+c2V0KGlkLCBhZG9wdFJlZihk
YXRhKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKIFZpc2libGVQb3NpdGlvbiBBWE9iamVjdENh
Y2hlOjp2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YShUZXh0TWFya2VyRGF0YSYgdGV4
dE1hcmtlckRhdGEpCiB7CiAgICAgaWYgKCFpc05vZGVJblVzZSh0ZXh0TWFya2VyRGF0YS5ub2Rl
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXgg
NGVkZjgxNTAzZTFlZTQzNjI2OTBiOWRmMzA4MjljYjFiNzkzODliOS4uMTgxNTBiNWRhMDAxOGZl
Nzg2OTg0NTI5MTg0MTM2YTdmNzk3YTIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTUyLDYgKzUyLDEyIEBAIHN0cnVjdCBUZXh0TWFya2Vy
RGF0YSB7CiAgICAgRUFmZmluaXR5IGFmZmluaXR5OwogfTsKIAorc3RydWN0IE1lbW9pemVkQWNj
ZXNzaWJpbGl0eU9iamVjdERhdGEgIDogcHVibGljIFJlZkNvdW50ZWQ8TWVtb2l6ZWRBY2Nlc3Np
YmlsaXR5T2JqZWN0RGF0YT4geworICAgIE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEo
KSA6IGlnbm9yZWQoRGVmYXVsdEJlaGF2aW9yKSB7IH0KKworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3RJbmNsdXNpb24gaWdub3JlZDsKK307CisKIGVudW0gUG9zdFR5cGUgeyBQb3N0U3luY2hyb25v
dXNseSwgUG9zdEFzeW5jaHJvbm91c2x5IH07CiAKIGNsYXNzIEFYT2JqZWN0Q2FjaGUgewpAQCAt
MTgyLDYgKzE4OCwxNCBAQCBwdWJsaWM6CiAKICAgICBib29sIG5vZGVIYXNSb2xlKE5vZGUqLCBj
b25zdCBBdG9taWNTdHJpbmcmIHJvbGUpOwogCisgICAgLy8gV2hlbiBhIGxhcmdlIG51bWJlciBv
ZiBxdWVyaWVzIHRvIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgd2lsbCBiZSBtYWRlCisgICAgLy8g
d2l0aGluIGEgYmxvY2sgdGhhdCBjYW4gZ3VhcmFudGVlIHRoZSB0cmVlIHdvbid0IGNoYW5nZSwg
dHVybmluZyBvbgorICAgIC8vIG1lbW9pemF0aW9uIGNhbiBzcGVlZCB1cCB0aGUgY29tcHV0YXRp
b24gc2lnbmlmaWNhbnRseS4KKyAgICB2b2lkIHN0YXJ0TWVtb2l6aW5nKCk7CisgICAgdm9pZCBz
dG9wTWVtb2l6aW5nKCk7CisgICAgTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogZ2V0
TWVtb2l6ZWREYXRhKEFYSUQpIGNvbnN0OworICAgIE1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVj
dERhdGEqIGdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKEFYSUQpOworCiBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYTm90
aWZpY2F0aW9uKTsKICAgICB2b2lkIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24o
QWNjZXNzaWJpbGl0eU9iamVjdCosIEFYVGV4dENoYW5nZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25z
dCBTdHJpbmcmKTsKQEAgLTIwMSw2ICsyMTUsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8V2lk
Z2V0KiwgQVhJRD4gbV93aWRnZXRPYmplY3RNYXBwaW5nOwogICAgIEhhc2hNYXA8Tm9kZSosIEFY
SUQ+IG1fbm9kZU9iamVjdE1hcHBpbmc7CiAgICAgSGFzaFNldDxOb2RlKj4gbV90ZXh0TWFya2Vy
Tm9kZXM7CisgICAgSGFzaE1hcDxBWElELCBSZWZQdHI8TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0RGF0YT4gPiogbV9tZW1vaXplZERhdGE7CiAgICAgc3RhdGljIGJvb2wgZ0FjY2Vzc2liaWxp
dHlFbmFibGVkOwogICAgIHN0YXRpYyBib29sIGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50
ZXJmYWNlRW5hYmxlZDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDQ3MjI3MGMxODJhYjc1ZTdiMDI3ZjQz
NWYxZTI1ZmRiZjE3ZjcyMzQuLjRkODUzMmU3ODJmN2FlNmMxZmMwYTNiZmEyZjA0NmNmZmI5NTM3
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcApAQCAtNDQ4LDYgKzQ0OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiBjcml0
ZQogICAgIGlmICghY3JpdGVyaWEpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIFR1cm4gb24g
bWVtb2l6YXRpb24gdG8gbWluaW1pemUgcmVkdW5kYW50IGNvbXB1dGF0aW9uIGR1cmluZyB0aGUg
ZHVyYXRpb24gb2YgdGhpcworICAgIC8vIG1ldGhvZCwgd2hlcmUgd2UgY2FuIGd1YXJhbnRlZSB0
aGUgdHJlZSB3b24ndCBjaGFuZ2UuCisgICAgYXhPYmplY3RDYWNoZSgpLT5zdGFydE1lbW9pemlu
ZygpOworCiAgICAgLy8gVGhpcyBzZWFyY2ggbWVjaGFuaXNtIG9ubHkgc2VhcmNoZXMgdGhlIGVs
ZW1lbnRzIGJlZm9yZS9hZnRlciB0aGUgc3RhcnRpbmcgb2JqZWN0LgogICAgIC8vIEl0IGRvZXMg
dGhpcyBieSBzdGVwcGluZyB1cCB0aGUgcGFyZW50IGNoYWluIGFuZCBhdCBlYWNoIGxldmVsIGRv
aW5nIGEgREZTLgogICAgIApAQCAtNDk0LDYgKzQ5OCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqIGNy
aXRlCiAKICAgICAgICAgcHJldmlvdXNPYmplY3QgPSBzdGFydE9iamVjdDsKICAgICB9CisKKyAg
ICBheE9iamVjdENhY2hlKCktPnN0b3BNZW1vaXppbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojppc0FSSUFJbnB1dChBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCmluZGV4IDQyZTU1NzYwY2VlZTAzY2M3YjhmNzA0Mzg2NWZjNGNkYmUyZWY4
NmUuLmIwNDlmMzg2N2NiZDJhYjY0MmMzODE0NzUyMzk4MWExNWQzNDI4MDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcApAQCAtMTEyMyw5ICsxMTIzLDI3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
dXNpb24gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJh
CiAgICAgICAgIAogICAgIHJldHVybiBEZWZhdWx0QmVoYXZpb3I7CiB9ICAKLSAKKwogYm9vbCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QK
IHsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAo
TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogbWVtb2l6ZWREYXRhID0gY2FjaGUtPmdl
dE1lbW9pemVkRGF0YShheE9iamVjdElEKCkpKSB7CisgICAgICAgIGlmIChtZW1vaXplZERhdGEt
Pmlnbm9yZWQgPT0gSWdub3JlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmIChtZW1vaXplZERhdGEtPmlnbm9yZWQgPT0gSW5jbHVkZU9iamVjdCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCA9IGNvbXB1dGVBY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCk7CisKKyAgICBpZiAoTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0RGF0YSogbWVtb2l6ZWREYXRhID0gY2FjaGUtPmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKGF4
T2JqZWN0SUQoKSkpCisgICAgICAgIG1lbW9pemVkRGF0YS0+aWdub3JlZCA9IHJlc3VsdCA/IEln
bm9yZU9iamVjdCA6IEluY2x1ZGVPYmplY3Q7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkKCkgY29uc3QKK3sKICAgICAvLyBDaGVjayBmaXJzdCBpZiBhbnkgb2YgdGhlIGNvbW1vbiBy
ZWFzb25zIGNhdXNlIHRoaXMgZWxlbWVudCB0byBiZSBpZ25vcmVkLgogICAgIC8vIFRoZW4gcHJv
Y2VzcyBvdGhlciB1c2UgY2FzZXMgdGhhdCBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSB2
YXJpb3VzIHJvbGVzCiAgICAgLy8gdGhhdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0cyB0YWtl
IG9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCA5N2JmOGEzN2ZkNjM1NTQ1N2Y0M2JhNGE2YWYwYjA0
MzIzN2ZmZjJhLi40Mzc0YjFhNDU1ZjI4YzhjNTg1NjI5YThmODdmM2M4Y2ZjYTZmYTIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaApAQCAtMjc3LDYgKzI3Nyw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGFyaWFMaXZlUmVnaW9uQnVzeSgpIGNvbnN0OyAgICAKICAgICAKICAgICBib29sIGluaGVy
aXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3Q7CisKKyAgICBib29sIGNvbXB1dGVBY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgCiAjaWYgRU5BQkxFKE1BVEhNTCkKICAgICAv
LyBBbGwgbWF0aCBlbGVtZW50cyByZXR1cm4gdHJ1ZSBmb3IgaXNNYXRoRWxlbWVudCgpLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdC5oCmluZGV4IGI3N2QxMDg3NmQ5NmY3M2Q2NjJkZjgzZmFhZTlkNTE4MjFiOGVmOTcuLjZh
YTg1MjY2NTVjNGYzMzRmY2NhNGNkNmJiNjEyYzk2ZmExOGUzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAg
LTc2LDYgKzc2LDEzIEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVu
YWJsZUFjY2Vzc2liaWxpdHkoKTsKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGFjY2Vz
c2liaWxpdHlFbmFibGVkKCk7CiAKKyAgICAvLyBNZXRob2RzIHRvIHN0YXJ0IGFuZCBzdG9wIG1l
bW9pemF0aW9uOyB0aGlzIGFwcGxpZXMgdG8gdGhlCisgICAgLy8gd2hvbGUgYWNjZXNzaWJpbGl0
eSB0cmVlIHRoYXQgdGhpcyBvYmplY3QgaXMgY29udGFpbmVkIGluLgorICAgIC8vIE1lbW9pemF0
aW9uIGNhbiBzaWduaWZpY2FudGx5IHNwZWVkIHVwIG9wZXJhdGlvbnMgYXMgbG9uZyBhcworICAg
IC8vIHRoZSB0cmVlIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNoYW5nZSB3aGlsZSBpdCdzIGVuYWJs
ZWQuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0YXJ0TWVtb2l6aW5nKCk7CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHN0b3BNZW1vaXppbmcoKTsKKwogICAgIFdFQktJVF9FWFBPUlQgaW50IGF4
SUQoKSBjb25zdDsKIAogICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyB0cmVlLCBhbmQgcmV0
dXJuIHRydWUgaWYgdGhpcyBvYmplY3QgaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggYjkyMGU0ZWM0ZmEwYWFh
Yjc4OTMxZDdlYjc5YjgzZWIxNDNlNmU4NC4uMWM3NzJkMjYxZGQ3NGM2NjM1MmVlZDNlNjdkMjJl
ZjE1MWU5YjdiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTgyLDYgKzgyLDE2IEBAIGJvb2wgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKQogICAgIHJldHVybiBBWE9iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpOwogfQogCit2b2lkIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN0YXJ0TWVtb2l6aW5nKCkKK3sKKyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2Fj
aGUoKS0+c3RhcnRNZW1vaXppbmcoKTsKK30KKwordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzdG9wTWVtb2l6aW5nKCkKK3sKKyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3Rv
cE1lbW9pemluZygpOworfQorCiBib29sIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRGV0YWNo
ZWQoKSBjb25zdAogewogICAgIGlmIChtX3ByaXZhdGUuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmEzNTA4NjEwYzk3NWI1N2E4
NzJhMDA2MmVjMjA5MTgyMjYzZTc4YS4uMjQ1MGUyYzBhM2RlYWJiYmIyNWQ5NzJlYTBhMGU2MzI0
YzUwY2Y2NSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAxLTExICBEb21pbmljIE1henpvbmkgIDxkbWF6em9u
aUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXplIGV4cGVuc2l2ZSBjb21wdXRhdGlv
biBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjQ5NworCisgICAgICAgIEFkZCBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5zdGFydE1lbW9pemF0aW9uIGFuZAorICAgICAgICBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5zdG9wTWVtb2l6YXRpb24gc28gdGhhdCBpdCdzCisgICAgICAg
IHBvc3NpYmxlIHRvIHRlc3QgbWVtb2l6YXRpb24gZXhwbGljaXRseSAtIGN1cnJlbnRseSBvbmx5
CisgICAgICAgIGZyb20gQ2hyb21pdW0uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChzdGFydE1lbW9pemluZ0NhbGxiYWNrKToKKyAgICAgICAgKHN0b3BN
ZW1vaXppbmdDYWxsYmFjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJU
ZXN0UnVubmVyOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RhcnRNZW1vaXppbmdDYWxsYmFj
ayk6CisgICAgICAgIChXZWJUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OkFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nQ2FsbGJhY2spOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyQ2hyb21pdW0uaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3Bw
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nKToKKwogMjAxMy0wMS0wOCAg
WmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFt3ZWJraXRw
eV0gQ2FsbCBzZXR1cF90ZXN0X3J1biBtZXRob2Qgb2YgdGhlIHBhcmVudCBQb3J0IGludGVyZmFj
ZSB3aGVuIG1ldGhvZCBpcyBjYWxsZWQgb24gc3ViY2xhc3NlcwpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4IDQ5ZDQ1M2E4NGNkZWJj
ZGI4YTMyMjZiZmQ5MmNjODExODI0YTY1NzMuLmYzOTIwZDBiYzI4Nzk4Y2Y5MGU0NTI4NDg4YWU1
NTk5OTA5M2Q5MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5jcHAKQEAgLTg0LDYgKzg0LDIwIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGxvZ0Fj
Y2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiwK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKIH0KIAorc3RhdGljIEpTVmFs
dWVSZWYgc3RhcnRNZW1vaXppbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
ZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpT
VmFsdWVSZWYqKQoreworICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnN0YXJ0TWVtb2l6aW5nKCk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHN0
b3BNZW1vaXppbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYq
KQoreworICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIGNvbnRyb2xsZXItPnN0b3BNZW1vaXppbmcoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgZ2V0RWxlbWVudEF0
UG9pbnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgaW50IHgg
PSAwOwpAQCAtMTM4LDYgKzE1Miw4IEBAIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OmdldEpTQ2xhc3MoKQogICAgICAgICB7ICJhY2Nlc3NpYmxlRWxlbWVudEJ5SWQiLCBnZXRB
Y2Nlc3NpYmxlRWxlbWVudEJ5SWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJhZGROb3Rp
ZmljYXRpb25MaXN0ZW5lciIsIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIiLCByZW1vdmVOb3RpZmlj
YXRpb25MaXN0ZW5lckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInN0YXJ0TWVtb2l6aW5n
Iiwgc3RhcnRNZW1vaXppbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzdG9wTWVtb2l6
aW5nIiwgc3RvcE1lbW9pemluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9
CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmgKaW5kZXggYTZjZGM0Njg2YzEzMmZmNTg2ZDU4MmZlNTFhMDc2OGVlNzJjMDEwMC4uMDBh
Y2VkMDA5MDVjYjIwOTRhNzMxMDRhMDdkM2FiNjhhOWUwZmVjYSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCkBAIC01Myw2ICs1Myw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldExvZ1Njcm9sbGluZ1N0YXJ0RXZlbnRzKGJvb2wpOwogICAgIHZv
aWQgc2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhib29sKTsKIAorICAgIHZvaWQgc3RhcnRNZW1v
aXppbmcoKTsKKyAgICB2b2lkIHN0b3BNZW1vaXppbmcoKTsKKwogICAgIHZvaWQgcmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZSgpOwogCiAgICAgLy8gR2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciwg
Y2FwdHVyZXMgbm90aWZpY2F0aW9ucyBvbiBhbnkgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcAppbmRleCA1ZjFiNGY5
YTkyZDI3NTUzYjUzNjVlM2NhYTA2MWUwNjRiZDc0ZjlkLi4zY2NjODhiNGJjODllMmU5ZjU3ZWY3
OTA2NWMzZGE4ZGRiMjcxNTEyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcAor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcApAQCAtNTYsNiArNTYsOSBAQCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQogCiAgICAgYmluZE1ldGhv
ZCgiYWNjZXNzaWJsZUVsZW1lbnRCeUlkIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nl
c3NpYmxlRWxlbWVudEJ5SWRHZXR0ZXJDYWxsYmFjayk7CiAKKyAgICBiaW5kTWV0aG9kKCJzdGFy
dE1lbW9pemluZyIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RhcnRNZW1vaXppbmdDYWxs
YmFjayk7CisgICAgYmluZE1ldGhvZCgic3RvcE1lbW9pemluZyIsICZBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6c3RvcE1lbW9pemluZ0NhbGxiYWNrKTsKKwogICAgIGJpbmRGYWxsYmFja01ldGhv
ZCgmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2spOwogfQogCkBAIC0x
OTYsNiArMTk5LDE4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVF
bGVtZW50QnlJZEdldHRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtCiAgICAgcmVzdWx0LT5zZXQo
Kihmb3VuZEVsZW1lbnQtPmdldEFzQ3BwVmFyaWFudCgpKSk7CiB9CiAKK3ZvaWQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKKyAgICBtX3dlYlZpZXctPmFjY2Vzc2liaWxpdHlPYmplY3QoKS5zdGFydE1lbW9pemlu
ZygpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nQ2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBtX3dlYlZpZXctPmFjY2Vzc2liaWxp
dHlPYmplY3QoKS5zdG9wTWVtb2l6aW5nKCk7Cit9CisKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQogewogICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiQ09OU09MRSBNRVNT
QUdFOiBKYXZhU2NyaXB0IEVSUk9SOiB1bmtub3duIG1ldGhvZCBjYWxsZWQgb24gQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJcbiIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJDaHJvbWl1bS5oCmluZGV4IGE5NzI4YzYxNWJiNGY1MDVmZTFlY2E2YTJmNjRj
ZmZhZTk0YTE1NWIuLjdhYTZlMzhkNTFmNTU2MDA1OTNjZWVkYjBkMTBhOGI2NmM5MjdhMDAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVt
LmgKQEAgLTc4LDYgKzc4LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJvb3RFbGVtZW50R2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOwogICAgIHZvaWQgYWNjZXNzaWJsZUVsZW1lbnRCeUlkR2V0
dGVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCisgICAg
dm9pZCBzdGFydE1lbW9pemluZ0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIHN0b3BNZW1vaXppbmdDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBmaW5k
QWNjZXNzaWJsZUVsZW1lbnRCeUlkUmVjdXJzaXZlKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJp
bGl0eU9iamVjdCYsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBpZCk7CiAKICAgICBXZWJLaXQ6
OldlYkFjY2Vzc2liaWxpdHlPYmplY3QgbV9mb2N1c2VkRWxlbWVudDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCmlu
ZGV4IDQ2NjE4MmJiMzA1YTY2NzYwODA2YmVmODQ4ZDk0Yzc2MjJmODc1Y2UuLmE2MmExOTlhMTlm
NzIwNzk1YWU1MTA4MjgzM2ZiMjU2Mjg2ZmUxYjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApAQCAtMTAzLDYg
KzEwMywxNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRMb2dBY2Nlc3NpYmls
aXR5RXZlbnRzKGJvb2wgbG9nQWNjZXNzaWJpbGl0eUV2ZQogICAgIGxvZ2dpbmdBY2Nlc3NpYmls
aXR5RXZlbnRzID0gdHJ1ZTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3Rh
cnRNZW1vaXppbmcoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9w
TWVtb2l6aW5nKCkKK3sKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90
aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
TWFjLm1tCmluZGV4IDA5MDliODZmYWMzZWRlMDhhZTI5NTNmZjJhNWJiMmE1NDljY2Q4NTUuLjk1
NTdjNzk1MjhkMjdmYTdmM2VlMjQxZmMwMTgyOTRkN2VhMzU1MDEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KQEAg
LTExOSw2ICsxMTksMTQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nQWNj
ZXNzaWJpbGl0eUV2ZW50cyhib29sKQogewogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpzdGFydE1lbW9pemluZygpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnN0b3BNZW1vaXppbmcoKQoreworfQorCiBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjphZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKQog
ewogICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCmluZGV4IDk5NWM1ZjEx
NWMyZWEzZDk4Yzg2NzIyZTRkZGYzOGQwYzNmNTUwYmMuLjc4ZThhZjg2MjE5ZjE0ZWRhZDUyYzky
ZWY3NDI3OTZkMDI2YjQzNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcApAQCAtMjk2LDYgKzI5NiwxNCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lcigp
CiB7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nKCkK
K3sKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RvcE1lbW9pemluZygpCit7
Cit9CisKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Ondpbk5vdGlmaWNhdGlvblJlY2Vp
dmVkKFBsYXRmb3JtVUlFbGVtZW50IGVsZW1lbnQsIGNvbnN0IHN0cmluZyYgZXZlbnROYW1lKQog
ewogICAgIGZvciAoSGFzaE1hcDxQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmplY3RSZWY+OjppdGVy
YXRvciBpdCA9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbm90aWZp
Y2F0aW9uTGlzdGVuZXJzLmVuZCgpOyArK2l0KSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODQ1NzI2YTE3NjJjYmYxMTJi
OGQ2MGJjNDBlODY3ODUxYWI5YjJhOS4uZDUyZDhlZWUzMjQ5MTU3ZTY3YjllODM4ODY2MzkxMTFi
MzA1NzgxZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEzLTAxLTExICBEb21pbmljIE1henpv
bmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXplIGV4cGVuc2l2
ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBjaGFuZ2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjQ5NworCisg
ICAgICAgIEFkZHMgbmV3IHRlc3QgdGhhdCB1c2VzIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnN0
YXJ0TWVtb2l6YXRpb24oKQorICAgICAgICB0byB0ZXN0IHRoYXQgd2hlbiBtZW1vaXphdGlvbiBp
cyBvbiwgdGhlIGlnbm9yZWQgc3RhdGUgb2YgYSBub2RlIGlzCisgICAgICAgIG5vdCByZWNvbXB1
dGVkLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbDogQWRkZWQuCisKIDIw
MTMtMDEtMDggIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIFRpZ2h0ZW4gdXAgdGhlIGFjdHVhbCBleHBlY3RhdGlvbnMgYXJvdW5k
IHdlYmF1ZGlvIGZhaWxzLi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWVtb2l6ZS1pc2lnbm9yZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tZW1vaXplLWlzaWdub3JlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmFiMDVlNzI3MzZh
MDg3MGJiNzNlMzIxMWI1MmNkYmIwMWI0ODFlZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMjAgQEAKK1RleHQKKworVGVzdHMgdGhhdCB0dXJuaW5nIG9uIG1lbW9pemF0aW9uIGNhdXNl
cyB0aGUgYW4gYWNjZXNzaWJpbGl0eSBvYmplY3QgdG8gc3RvcCBjb21wdXRpbmcgd2hldGhlciBp
dCdzIGlnbm9yZWQgb3Igbm90LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworV2l0
aG91dCBtZW1vaXphdGlvbjoKK1BBU1MgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCBpcyBm
YWxzZQorUEFTUyBkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgImhlYWRpbmciKTsgZmluZEFYRWxl
bWVudCgiZGl2IikgIT0gbnVsbCBpcyB0cnVlCitQQVNTIGRpdi5yZW1vdmVBdHRyaWJ1dGUoInJv
bGUiKTsgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCBpcyBmYWxzZQorCitXaXRoIG1lbW9p
emF0aW9uOgorUEFTUyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxsIGlzIGZhbHNlCitQQVNT
IGRpdi5zZXRBdHRyaWJ1dGUoInJvbGUiLCAiaGVhZGluZyIpOyBmaW5kQVhFbGVtZW50KCJkaXYi
KSAhPSBudWxsIGlzIGZhbHNlCitQQVNTIGRpdi5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKTsgZmlu
ZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbCBiL0xheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NWJiN2VhNDIwYzUxODRh
NmExZTYzM2JhMGIwNDE0MDM2NjgwMWE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxkaXY+CisgIDxkaXYgaWQ9ImRp
diI+CisgICAgPHA+VGV4dDwvcD4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oIlRlc3RzIHRoYXQgdHVybmluZyBvbiBtZW1vaXphdGlvbiBjYXVzZXMgdGhlIGFuIGFj
Y2Vzc2liaWxpdHkgb2JqZWN0IHRvIHN0b3AgY29tcHV0aW5nIHdoZXRoZXIgaXQncyBpZ25vcmVk
IG9yIG5vdC4iKTsKKworaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAg
IHdpbmRvdy5maW5kQVhFbGVtZW50ID0gZnVuY3Rpb24oaWQpIHsKKyAgICAgIHJldHVybiBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoaWQpOworICAgIH07Cisg
ICAgd2luZG93LmRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKTsKKworICAgIGRl
YnVnKCdXaXRob3V0IG1lbW9pemF0aW9uOicpOworICAgIHNob3VsZEJlKCdmaW5kQVhFbGVtZW50
KCJkaXYiKSAhPSBudWxsJywgJ2ZhbHNlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5zZXRBdHRyaWJ1
dGUoInJvbGUiLCAiaGVhZGluZyIpOyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxsJywgJ3Ry
dWUnKTsKKyAgICBzaG91bGRCZSgnZGl2LnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpOyBmaW5kQVhF
bGVtZW50KCJkaXYiKSAhPSBudWxsJywgJ2ZhbHNlJyk7CisKKyAgICBkZWJ1ZygnXG5XaXRoIG1l
bW9pemF0aW9uOicpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnN0YXJ0TWVtb2l6aW5n
KCk7CisgICAgc2hvdWxkQmUoJ2ZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwnLCAnZmFsc2Un
KTsKKyAgICBzaG91bGRCZSgnZGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsICJoZWFkaW5nIik7IGZp
bmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwnLCAnZmFsc2UnKTsKKyAgICBzaG91bGRCZSgnZGl2
LnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpOyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxsJywg
J2ZhbHNlJyk7CisgICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuc3RvcE1lbW9pemluZygpOwor
fQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGZmYmZiZGM1OGQ5ODk1ZTRmMWI2NWFiODA3
YzA4N2IxNTFkN2M2MmYuLmZjMTljMzc2Mzg0YmNmMDIyYWM2MDQ2NmM3NDVmM2RlOGY1NWRlMzcg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC03MDYsNiAr
NzA2LDkgQEAgd2Via2l0Lm9yZy9iLzEwMzIyMyBhY2Nlc3NpYmlsaXR5L2ZpbGUtdXBsb2FkLWJ1
dHRvbi13aXRoLWF4cHJlc3MuaHRtbCBbIFRpbWVvdXQKICMgTWlzc2luZyBEUlQgQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIGltcGxlbWVudGF0aW9uCiB3
ZWJraXQub3JnL2IvNzA2MDYgYWNjZXNzaWJpbGl0eS9hcmlhLWNoZWNrYm94LXNlbmRzLW5vdGlm
aWNhdGlvbi5odG1sIFsgVGltZW91dCBdCiAKKyMgTWlzc2luZyBEUlQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nIGltcGxlbWVudGF0aW9uCit3ZWJraXQub3JnL2IvMTA2
Njk1IGFjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbCBbIEZhaWx1cmUgXQorCiB3
ZWJraXQub3JnL2IvNzMwMDMgWyBSZWxlYXNlIF0gZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNr
LWFzeW5jLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi83MzAwMyBbIFJlbGVhc2UgXSBl
ZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcGFzdGUuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0
Lm9yZy9iLzUwNzQwIFsgUmVsZWFzZSBdIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1
ZS5odG1sIFsgVGltZW91dCBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
VGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRp
b25zCmluZGV4IGRlNWQ3Nzg2ZTVhYTMyYTE4MGUzZmZlZmQxODdmYmRhYTBiNjUwMTcuLjg4YWYx
ZTMwMWYxNTEwODgwYWI5MGU5N2U2YTYzZTVkYmNkZGQ4NWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCkBAIC00NCw2ICs0NCw3IEBAIGFjY2Vzc2liaWxpdHkv
ZG9jdW1lbnQtYXR0cmlidXRlcy5odG1sCiBhY2Nlc3NpYmlsaXR5L2FyaWEtbWVudWJhci1tZW51
aXRlbXMuaHRtbAogCiAjIEFjY2Vzc2liaWxpdHkgdGVzdHMgd2l0aCBtaXNzaW5nIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyIGZ1bmN0aW9uYWxpdHkuCithY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNp
Z25vcmVkLmh0bWwKIGFjY2Vzc2liaWxpdHkvc2VsZWN0aW9uLXN0YXRlcy5odG1sCiAKICMgQWNj
ZXNzaWJpbGl0eSB0ZXN0cyBmb3Igbm90aWZpY2F0aW9ucyB0aGF0IGRvbid0IGV4aXN0IG9yIGFy
ZW4ndCBuZWVkZWQgb24gTWFjIE9TIFguCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhw
ZWN0YXRpb25zCmluZGV4IDgxMmY1NTkzMmY4YTc4YjcwYmQwNDlkZTNjNDA4MDM0ZmM3ZWEyMzcu
Ljk4ZmM0YTc4NzBkMDE4NDhiMjRlNTBiMjNmZjMzNjZiZjYwMDEyNTEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zCkBAIC02MjksNiArNjI5LDcgQEAgYWNjZXNz
aWJpbGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbAogYWNjZXNzaWJpbGl0eS9sZWdlbmQuaHRt
bAogYWNjZXNzaWJpbGl0eS9saXN0cy5odG1sCiBhY2Nlc3NpYmlsaXR5L21lZGlhLWVsZW1lbnQu
aHRtbAorYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sCiBhY2Nlc3NpYmlsaXR5
L25vY2hpbGRyZW4tZWxlbWVudHMuaHRtbAogYWNjZXNzaWJpbGl0eS9ub24tZGF0YS10YWJsZS1j
ZWxsLXRpdGxlLXVpLWVsZW1lbnQuaHRtbAogYWNjZXNzaWJpbGl0eS9ub24tbmF0aXZlLWltYWdl
LWNyYXNoLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182461</attachid>
            <date>2013-01-12 00:36:52 -0800</date>
            <delta_ts>2013-01-12 00:56:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130112003354.patch</filename>
            <type>text/plain</type>
            <size>28174</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM5NDRkYTFiNWI5ZDY2
YmVhN2Q4ZWVkODM1YjBkNDIyYmQ5MDM1My4uNzMzMmY5M2QyMWY2OGRmZmU3Yzc5YWZmNDVlNDcx
ZGEzZTBhYmQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAxLTEyICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBtZW1vaXphdGlvbi4gV2hlbiBtZW1vaXph
dGlvbiBpcyBvbiwgQVhPYmplY3RDYWNoZQorICAgICAgICBjcmVhdGVzIGFuIGFkZGl0aW9uYWwg
aGFzaCBtYXAgd2l0aCBjYWNoZWQgcmVzdWx0cyBvZiBleHBlbnNpdmUKKyAgICAgICAgY29tcHV0
YXRpb24gb24gQWNjZXNzaWJpbGl0eU9iamVjdHMuIEl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBv
bmx5CisgICAgICAgIHdpdGhpbiBibG9ja3Mgd2hlcmUgeW91J2xsIGJlIGFjY2Vzc2luZyBhIGxv
dCBvZiBBWE9iamVjdHMgYnV0CisgICAgICAgIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlIERP
TS9yZW5kZXIgdHJlZXMgZG8gbm90IGNoYW5nZS4KKworICAgICAgICBJbml0aWFsbHksIGp1c3Qg
dGhlIHJlc3VsdCBvZiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGlzIGNhY2hlZCwgc2luY2UKKyAg
ICAgICAgdGhpcyBpcyB0aGUgb25lIG9mIHRoZSBob3R0ZXN0IG1ldGhvZHMuCisKKyAgICAgICAg
V2hlbiBtZW1vaXphdGlvbiBpcyBzdG9wcGVkLCB0aGUgY2FjaGUgaXMgdGhyb3duIGF3YXksIHNv
IHRoZXJlJ3MKKyAgICAgICAgbm8gY2hhbmNlIG9mIGl0IGdvaW5nIHN0YWxlLgorCisgICAgICAg
IE1lbW9pemF0aW9uIGlzIHVzZWQgYXV0b21hdGljYWxseSBpbnNpZGUgZmluZE1hdGNoaW5nT2Jq
ZWN0cywgYW5kCisgICAgICAgIGNhbiBiZSB1c2VkIHZpYSBhIG5ldyBDaHJvbWl1bSBBUEkuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogcGxh
dGZvcm0vY2hyb21pdW0vYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpzdGFydE1lbW9pemluZyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OnN0b3BNZW1vaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6Z2V0TWVtb2l6ZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9pemVkQWNjZXNzaWJpbGl0
eU9iamVjdERhdGE6Ok1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEpOgorICAgICAgICAo
TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpm
aW5kTWF0Y2hpbmdPYmplY3RzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAy
MDEzLTAxLTExICBEYW4gQmVhbSAgPGRiZWFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2xl
YW4gdXBdIFJlbW92ZSBIVE1MRm9ybUVsZW1lbnQ6OkF1dG9jb21wbGV0ZVJlc3VsdEVycm9yIGlu
IGZhdm9yIG9mIG1vcmUgc3BlY2lmaWMgRXJyb3IgcmVhc29ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCBiYzAzNTk3NTE4MDQyNDcyZTg2N2M4ZThkZjhjNmJlODMzZjk4ZTRlLi41NmFl
OWIwMWY2ZGIxMmI3ZjAyOTQzZWY0ODI0YjVmZGY5N2MxNDZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAxLTEyICBEb21pbmljIE1henpvbmkgIDxk
bWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXplIGV4cGVuc2l2ZSBjb21w
dXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjQ5NworCisgICAgICAg
IEFkZCBhbiBBUEkgdG8gdHVybiBtZW1vaXphdGlvbiBvbiBhbmQgb2ZmLiBUaGlzIHdpbGwgYWxs
b3cKKyAgICAgICAgQ2hyb21pdW0gdG8gc3BlZWQgdXAgYmF0Y2ggb3BlcmF0aW9ucyB0aGF0IHF1
ZXJ5IGEgbG90IG9mCisgICAgICAgIGFjY2Vzc2libGUgb2JqZWN0cywgd2hlbiBpdCBjYW4gZ3Vh
cmFudGVlIHRoZSB0cmVlIHdvbid0IGNoYW5nZQorICAgICAgICB3aXRoaW4gdGhhdCB0aW1lIHBl
cmlvZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHB1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgIChXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0KToKKyAgICAgICAgKiBzcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0YXJ0TWVtb2l6aW5nKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnN0b3BNZW1vaXppbmcpOgorCiAyMDEzLTAxLTExICBEYW4gQmVhbSAgPGRiZWFtQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2xlYW4gdXBdIFJlbW92ZSBIVE1MRm9ybUVsZW1lbnQ6OkF1
dG9jb21wbGV0ZVJlc3VsdEVycm9yIGluIGZhdm9yIG9mIG1vcmUgc3BlY2lmaWMgRXJyb3IgcmVh
c29ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
aW5kZXggMDc5NTU1YjA5NmQyMWRjMjAxOTVjYjMzYjA5MDcxYjMwNmYyYjc0MC4uYmE3MGE0MjVi
ZjZkMDEwNDdiMmFjYjM4YTYyY2U2OTQyZDliZTFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC04Nyw3ICs4Nyw4IEBAIGJvb2wgQVhP
YmplY3RDYWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiBib29sIEFYT2JqZWN0
Q2FjaGU6OmdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNl
OwogCiBBWE9iamVjdENhY2hlOjpBWE9iamVjdENhY2hlKGNvbnN0IERvY3VtZW50KiBkb2MpCi0g
ICAgOiBtX25vdGlmaWNhdGlvblBvc3RUaW1lcih0aGlzLCAmQVhPYmplY3RDYWNoZTo6bm90aWZp
Y2F0aW9uUG9zdFRpbWVyRmlyZWQpCisgICAgOiBtX21lbW9pemVkRGF0YSgwKQorICAgICwgbV9u
b3RpZmljYXRpb25Qb3N0VGltZXIodGhpcywgJkFYT2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBv
c3RUaW1lckZpcmVkKQogewogICAgIG1fZG9jdW1lbnQgPSBjb25zdF9jYXN0PERvY3VtZW50Kj4o
ZG9jKTsKIH0KQEAgLTEwMyw2ICsxMDQsNyBAQCBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNo
ZSgpCiAgICAgICAgIG9iai0+ZGV0YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKICAg
ICB9CisgICAgc3RvcE1lbW9pemluZygpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9i
amVjdENhY2hlOjpmb2N1c2VkSW1hZ2VNYXBVSUVsZW1lbnQoSFRNTEFyZWFFbGVtZW50KiBhcmVh
RWxlbWVudCkKQEAgLTc5Myw2ICs3OTUsNDMgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpyZWNvbXB1
dGVJc0lnbm9yZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgb2JqLT5ub3RpZnlJ
Zklnbm9yZWRWYWx1ZUNoYW5nZWQoKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpzdGFydE1l
bW9pemluZygpCit7CisgICAgaWYgKCFtX21lbW9pemVkRGF0YSkKKyAgICAgICAgbV9tZW1vaXpl
ZERhdGEgPSBuZXcgSGFzaE1hcDxBWElELCBSZWZQdHI8TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0RGF0YT4gPigpOworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0b3BNZW1vaXppbmcoKQor
eworICAgIGlmICghbV9tZW1vaXplZERhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0
ZSBtX21lbW9pemVkRGF0YTsKKyAgICBtX21lbW9pemVkRGF0YSA9IDA7Cit9CisKK01lbW9pemVk
QWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIEFYT2JqZWN0Q2FjaGU6OmdldE1lbW9pemVkRGF0YShB
WElEIGlkKSBjb25zdAoreworICAgIGlmICghbV9tZW1vaXplZERhdGEpCisgICAgICAgIHJldHVy
biAwOworCisgICAgSGFzaE1hcDxBWElELCBSZWZQdHI8TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0RGF0YT4gPjo6aXRlcmF0b3IgaXQgPSBtX21lbW9pemVkRGF0YS0+ZmluZChpZCk7CisgICAg
cmV0dXJuIGl0ICE9IG1fbWVtb2l6ZWREYXRhLT5lbmQoKSA/ICgqaXQpLnZhbHVlLmdldCgpIDog
MDsKK30KKworTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogQVhPYmplY3RDYWNoZTo6
Z2V0T3JDcmVhdGVNZW1vaXplZERhdGEoQVhJRCBpZCkKK3sKKyAgICBpZiAoIW1fbWVtb2l6ZWRE
YXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChNZW1vaXplZEFjY2Vzc2liaWxpdHlP
YmplY3REYXRhKiBkYXRhID0gZ2V0TWVtb2l6ZWREYXRhKGlkKSkKKyAgICAgICAgcmV0dXJuIGRh
dGE7CisKKyAgICBNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBkYXRhID0gbmV3IE1l
bW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGE7CisgICAgbV9tZW1vaXplZERhdGEtPnNldChp
ZCwgYWRvcHRSZWYoZGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQorCiBWaXNpYmxlUG9zaXRp
b24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEoVGV4dE1h
cmtlckRhdGEmIHRleHRNYXJrZXJEYXRhKQogewogICAgIGlmICghaXNOb2RlSW5Vc2UodGV4dE1h
cmtlckRhdGEubm9kZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5oCmluZGV4IDRlZGY4MTUwM2UxZWU0MzYyNjkwYjlkZjMwODI5Y2IxYjc5Mzg5YjkuLmU2
YTA3OTIwZTY4MTdkMWEwMDZjZDViYjE3YmI4OGFkNjEyM2Q3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC01Miw2ICs1MiwxMiBAQCBzdHJ1
Y3QgVGV4dE1hcmtlckRhdGEgewogICAgIEVBZmZpbml0eSBhZmZpbml0eTsKIH07CiAKK3N0cnVj
dCBNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhICA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
bW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGE+IHsKKyAgICBNZW1vaXplZEFjY2Vzc2liaWxp
dHlPYmplY3REYXRhKCkgOiBpZ25vcmVkKERlZmF1bHRCZWhhdmlvcikgeyB9CisKKyAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGlnbm9yZWQ7Cit9OworCiBlbnVtIFBvc3RUeXBlIHsg
UG9zdFN5bmNocm9ub3VzbHksIFBvc3RBc3luY2hyb25vdXNseSB9OwogCiBjbGFzcyBBWE9iamVj
dENhY2hlIHsKQEAgLTE4Miw2ICsxODgsMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBub2RlSGFz
Um9sZShOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiByb2xlKTsKIAorICAgIC8vIFdoZW4gYSBs
YXJnZSBudW1iZXIgb2YgcXVlcmllcyB0byB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIHdpbGwgYmUg
bWFkZQorICAgIC8vIHdpdGhpbiBhIGJsb2NrIHRoYXQgY2FuIGd1YXJhbnRlZSB0aGUgdHJlZSB3
b24ndCBjaGFuZ2UsIHR1cm5pbmcgb24KKyAgICAvLyBtZW1vaXphdGlvbiBjYW4gc3BlZWQgdXAg
dGhlIGNvbXB1dGF0aW9uIHNpZ25pZmljYW50bHkuCisgICAgdm9pZCBzdGFydE1lbW9pemluZygp
OworICAgIHZvaWQgc3RvcE1lbW9pemluZygpOworICAgIE1lbW9pemVkQWNjZXNzaWJpbGl0eU9i
amVjdERhdGEqIGdldE1lbW9pemVkRGF0YShBWElEKSBjb25zdDsKKyAgICBNZW1vaXplZEFjY2Vz
c2liaWxpdHlPYmplY3REYXRhKiBnZXRPckNyZWF0ZU1lbW9pemVkRGF0YShBWElEKTsKKwogcHJv
dGVjdGVkOgogICAgIHZvaWQgcG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlP
YmplY3QqLCBBWE5vdGlmaWNhdGlvbik7CiAgICAgdm9pZCBub2RlVGV4dENoYW5nZVBsYXRmb3Jt
Tm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRleHRDaGFuZ2UsIHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgU3RyaW5nJik7CkBAIC0yMDEsNiArMjE1LDcgQEAgcHJpdmF0ZToKICAg
ICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1fd2lkZ2V0T2JqZWN0TWFwcGluZzsKICAgICBIYXNo
TWFwPE5vZGUqLCBBWElEPiBtX25vZGVPYmplY3RNYXBwaW5nOwogICAgIEhhc2hTZXQ8Tm9kZSo+
IG1fdGV4dE1hcmtlck5vZGVzOworICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPE1lbW9pemVkQWNj
ZXNzaWJpbGl0eU9iamVjdERhdGE+ID4qIG1fbWVtb2l6ZWREYXRhOwogICAgIHN0YXRpYyBib29s
IGdBY2Nlc3NpYmlsaXR5RW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVu
aGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQ7CiAgICAgCkBAIC0yMzQsNiArMjQ5LDEwIEBAIGlu
bGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpyb290T2JqZWN0KCkgeyBy
ZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnJv
b3RPYmplY3RGb3JGcmFtZShGcmFtZSopIHsgcmV0dXJuIDA7IH0KIGlubGluZSBFbGVtZW50KiBB
WE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQoTm9kZSopIHsgcmV0dXJuIDA7IH0K
IGlubGluZSBib29sIG5vZGVIYXNSb2xlKE5vZGUqLCBjb25zdCBTdHJpbmcmKSB7IHJldHVybiBm
YWxzZTsgfQoraW5saW5lIHZvaWQgc3RhcnRNZW1vaXppbmcoKSB7IH0KK2lubGluZSB2b2lkIHN0
b3BNZW1vaXppbmcoKSB7IH0KK2lubGluZSBNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRh
KiBnZXRNZW1vaXplZERhdGEoQVhJRCkgY29uc3QgeyByZXR1cm4gMDsgfQoraW5saW5lIE1lbW9p
emVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIGdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKEFYSUQp
IHsgcmV0dXJuIDA7IH0KIGlubGluZSBib29sIGlzTm9kZUFyaWFWaXNpYmxlKE5vZGUqKSB7IHJl
dHVybiB0cnVlOyB9CiBpbmxpbmUgY29uc3QgRWxlbWVudCogQVhPYmplY3RDYWNoZTo6cm9vdEFY
RWRpdGFibGVFbGVtZW50KGNvbnN0IE5vZGUqKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgdm9pZCBB
WE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCmluZGV4IDQ3MjI3MGMxODJhYjc1ZTdiMDI3ZjQzNWYxZTI1ZmRiZjE3ZjcyMzQuLjRkODUz
MmU3ODJmN2FlNmMxZmMwYTNiZmEyZjA0NmNmZmI5NTM3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNDQ4LDYg
KzQ0OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRNYXRjaGluZ09iamVjdHMo
QWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiBjcml0ZQogICAgIGlmICghY3JpdGVyaWEpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIC8vIFR1cm4gb24gbWVtb2l6YXRpb24gdG8gbWluaW1pemUg
cmVkdW5kYW50IGNvbXB1dGF0aW9uIGR1cmluZyB0aGUgZHVyYXRpb24gb2YgdGhpcworICAgIC8v
IG1ldGhvZCwgd2hlcmUgd2UgY2FuIGd1YXJhbnRlZSB0aGUgdHJlZSB3b24ndCBjaGFuZ2UuCisg
ICAgYXhPYmplY3RDYWNoZSgpLT5zdGFydE1lbW9pemluZygpOworCiAgICAgLy8gVGhpcyBzZWFy
Y2ggbWVjaGFuaXNtIG9ubHkgc2VhcmNoZXMgdGhlIGVsZW1lbnRzIGJlZm9yZS9hZnRlciB0aGUg
c3RhcnRpbmcgb2JqZWN0LgogICAgIC8vIEl0IGRvZXMgdGhpcyBieSBzdGVwcGluZyB1cCB0aGUg
cGFyZW50IGNoYWluIGFuZCBhdCBlYWNoIGxldmVsIGRvaW5nIGEgREZTLgogICAgIApAQCAtNDk0
LDYgKzQ5OCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0
cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqIGNyaXRlCiAKICAgICAgICAgcHJldmlvdXNP
YmplY3QgPSBzdGFydE9iamVjdDsKICAgICB9CisKKyAgICBheE9iamVjdENhY2hlKCktPnN0b3BN
ZW1vaXppbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChB
Y2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDViYTNj
NjA0NWM1NWQwMmFjYjVhMDFlYjRlNjQ1N2NmZWRjNDQ4YzMuLmQ5NGFjZTFjNDI1YWYxODg4NGY1
MzIyM2E5ZWM5ZTI0NGNlMDA1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTEyMyw5ICsx
MTIzLDI3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhCiAgICAgICAgIAogICAgIHJldHVybiBE
ZWZhdWx0QmVoYXZpb3I7CiB9ICAKLSAKKwogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKIHsKKyAgICBBWE9iamVjdENhY2hlKiBj
YWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0RGF0YSogbWVtb2l6ZWREYXRhID0gY2FjaGUtPmdldE1lbW9pemVkRGF0YShheE9iamVjdElE
KCkpKSB7CisgICAgICAgIGlmIChtZW1vaXplZERhdGEtPmlnbm9yZWQgPT0gSWdub3JlT2JqZWN0
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtZW1vaXplZERhdGEtPmln
bm9yZWQgPT0gSW5jbHVkZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBib29sIHJlc3VsdCA9IGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7CisK
KyAgICBpZiAoTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogbWVtb2l6ZWREYXRhID0g
Y2FjaGUtPmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKGF4T2JqZWN0SUQoKSkpCisgICAgICAgIG1l
bW9pemVkRGF0YS0+aWdub3JlZCA9IHJlc3VsdCA/IElnbm9yZU9iamVjdCA6IEluY2x1ZGVPYmpl
Y3Q7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKK3sKICAgICAvLyBD
aGVjayBmaXJzdCBpZiBhbnkgb2YgdGhlIGNvbW1vbiByZWFzb25zIGNhdXNlIHRoaXMgZWxlbWVu
dCB0byBiZSBpZ25vcmVkLgogICAgIC8vIFRoZW4gcHJvY2VzcyBvdGhlciB1c2UgY2FzZXMgdGhh
dCBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSB2YXJpb3VzIHJvbGVzCiAgICAgLy8gdGhh
dCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0cyB0YWtlIG9uLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAppbmRl
eCA5N2JmOGEzN2ZkNjM1NTQ1N2Y0M2JhNGE2YWYwYjA0MzIzN2ZmZjJhLi40Mzc0YjFhNDU1ZjI4
YzhjNTg1NjI5YThmODdmM2M4Y2ZjYTZmYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApAQCAtMjc3LDYg
KzI3Nyw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFyaWFMaXZlUmVnaW9uQnVzeSgp
IGNvbnN0OyAgICAKICAgICAKICAgICBib29sIGluaGVyaXRzUHJlc2VudGF0aW9uYWxSb2xlKCkg
Y29uc3Q7CisKKyAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7
CiAgICAgCiAjaWYgRU5BQkxFKE1BVEhNTCkKICAgICAvLyBBbGwgbWF0aCBlbGVtZW50cyByZXR1
cm4gdHJ1ZSBmb3IgaXNNYXRoRWxlbWVudCgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IGI3N2QxMDg3NmQ5
NmY3M2Q2NjJkZjgzZmFhZTlkNTE4MjFiOGVmOTcuLjZhYTg1MjY2NTVjNGYzMzRmY2NhNGNkNmJi
NjEyYzk2ZmExOGUzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTc2LDYgKzc2LDEzIEBAIHB1YmxpYzoK
ICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKICAg
ICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGFjY2Vzc2liaWxpdHlFbmFibGVkKCk7CiAKKyAg
ICAvLyBNZXRob2RzIHRvIHN0YXJ0IGFuZCBzdG9wIG1lbW9pemF0aW9uOyB0aGlzIGFwcGxpZXMg
dG8gdGhlCisgICAgLy8gd2hvbGUgYWNjZXNzaWJpbGl0eSB0cmVlIHRoYXQgdGhpcyBvYmplY3Qg
aXMgY29udGFpbmVkIGluLgorICAgIC8vIE1lbW9pemF0aW9uIGNhbiBzaWduaWZpY2FudGx5IHNw
ZWVkIHVwIG9wZXJhdGlvbnMgYXMgbG9uZyBhcworICAgIC8vIHRoZSB0cmVlIGlzIGd1YXJhbnRl
ZWQgbm90IHRvIGNoYW5nZSB3aGlsZSBpdCdzIGVuYWJsZWQuCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHN0YXJ0TWVtb2l6aW5nKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0b3BNZW1vaXpp
bmcoKTsKKwogICAgIFdFQktJVF9FWFBPUlQgaW50IGF4SUQoKSBjb25zdDsKIAogICAgIC8vIFVw
ZGF0ZSB0aGUgdW5kZXJseWluZyB0cmVlLCBhbmQgcmV0dXJuIHRydWUgaWYgdGhpcyBvYmplY3Qg
aXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKaW5kZXggYjkyMGU0ZWM0ZmEwYWFhYjc4OTMxZDdlYjc5YjgzZWIxNDNlNmU4
NC4uMWM3NzJkMjYxZGQ3NGM2NjM1MmVlZDNlNjdkMjJlZjE1MWU5YjdiZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
QEAgLTgyLDYgKzgyLDE2IEBAIGJvb2wgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKQogICAgIHJldHVybiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5h
YmxlZCgpOwogfQogCit2b2lkIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0YXJ0TWVtb2l6aW5n
KCkKK3sKKyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3RhcnRNZW1vaXppbmcoKTsK
K30KKwordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdG9wTWVtb2l6aW5nKCkKK3sKKyAg
ICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3RvcE1lbW9pemluZygpOworfQorCiBib29s
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRGV0YWNoZWQoKSBjb25zdAogewogICAgIGlmICht
X3ByaXZhdGUuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggYTEwODhiYTdkNmZkMGIzZTQ0Yzk3ODgyNmIyZjQ5N2NkMmM0MjE1NC4u
MzRmOTNmMGUxZDVmNzA2NjU0Mzg0MWI0ZjMyNGI4NjA3NzU1Zjk2ZiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEz
LTAxLTEyICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAg
IEFYOiBtZW1vaXplIGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRy
ZWUgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNjQ5NworCisgICAgICAgIEFkZCBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5z
dGFydE1lbW9pemF0aW9uIGFuZAorICAgICAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5zdG9w
TWVtb2l6YXRpb24gc28gdGhhdCBpdCdzCisgICAgICAgIHBvc3NpYmxlIHRvIHRlc3QgbWVtb2l6
YXRpb24gZXhwbGljaXRseSAtIGN1cnJlbnRseSBvbmx5CisgICAgICAgIGZyb20gQ2hyb21pdW0u
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChzdGFydE1l
bW9pemluZ0NhbGxiYWNrKToKKyAgICAgICAgKHN0b3BNZW1vaXppbmdDYWxsYmFjayk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6c3RhcnRNZW1vaXppbmdDYWxsYmFjayk6CisgICAgICAgIChXZWJUZXN0UnVu
bmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpz
dG9wTWVtb2l6aW5nQ2FsbGJhY2spOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaDoKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpzdG9wTWVtb2l6aW5nKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnN0YXJ0TWVtb2l6aW5nKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpzdG9wTWVtb2l6aW5nKToKKwogMjAxMy0wMS0xMSAgSnVsaWUgUGFyZW50ICA8anBhcmVudEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgQnVpbGRlciBzaG91bGQgbm90IGJlIGEgdmFsaWQgcGFy
YW1ldGVyIGZvciBzdGF0cyBkYXNoYm9hcmQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCA0OWQ0NTNhODRjZGViY2RiOGEzMjI2YmZk
OTJjYzgxMTgyNGE2NTczLi5mMzkyMGQwYmMyODc5OGNmOTBlNDUyODQ4OGFlNTU5OTkwOTNkOTE4
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Y3BwCkBAIC04NCw2ICs4NCwyMCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBsb2dBY2Nlc3NpYmlsaXR5
RXZlbnRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsCiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHN0YXJ0
TWVtb2l6aW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikK
K3sKKyAgICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3Qp
KTsKKyAgICBjb250cm9sbGVyLT5zdGFydE1lbW9pemluZygpOworICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjdHgpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzdG9wTWVtb2l6aW5n
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKK3sKKyAgICBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBj
b250cm9sbGVyLT5zdG9wTWVtb2l6aW5nKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGN0eCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldEVsZW1lbnRBdFBvaW50Q2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGludCB4ID0gMDsKQEAgLTEz
OCw2ICsxNTIsOCBAQCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRKU0Ns
YXNzKCkKICAgICAgICAgeyAiYWNjZXNzaWJsZUVsZW1lbnRCeUlkIiwgZ2V0QWNjZXNzaWJsZUVs
ZW1lbnRCeUlkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkTm90aWZpY2F0aW9uTGlz
dGVuZXIiLCBhZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgInJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzdGFydE1lbW9pemluZyIsIHN0YXJ0TWVt
b2l6aW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic3RvcE1lbW9pemluZyIsIHN0b3BN
ZW1vaXppbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4
IGE2Y2RjNDY4NmMxMzJmZjU4NmQ1ODJmZTUxYTA3NjhlZTcyYzAxMDAuLjAwYWNlZDAwOTA1Y2Iy
MDk0YTczMTA0YTA3ZDNhYjY4YTllMGZlY2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApAQCAtNTMsNiArNTMsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRMb2dTY3JvbGxpbmdTdGFydEV2ZW50cyhib29sKTsKICAgICB2b2lkIHNldExvZ0Fj
Y2Vzc2liaWxpdHlFdmVudHMoYm9vbCk7CiAKKyAgICB2b2lkIHN0YXJ0TWVtb2l6aW5nKCk7Cisg
ICAgdm9pZCBzdG9wTWVtb2l6aW5nKCk7CisKICAgICB2b2lkIHJlc2V0VG9Db25zaXN0ZW50U3Rh
dGUoKTsKIAogICAgIC8vIEdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXIsIGNhcHR1cmVzIG5v
dGlmaWNhdGlvbnMgb24gYW55IG9iamVjdC4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21p
dW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKaW5kZXggNWYxYjRmOWE5MmQyNzU1M2I1
MzY1ZTNjYWEwNjFlMDY0YmQ3NGY5ZC4uM2NjYzg4YjRiYzg5ZTJlOWY1N2VmNzkwNjVjM2RhOGRk
YjI3MTUxMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJDaHJvbWl1bS5jcHAKQEAgLTU2LDYgKzU2LDkgQEAgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKIAogICAgIGJpbmRNZXRob2QoImFjY2Vzc2li
bGVFbGVtZW50QnlJZCIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1l
bnRCeUlkR2V0dGVyQ2FsbGJhY2spOwogCisgICAgYmluZE1ldGhvZCgic3RhcnRNZW1vaXppbmci
LCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nQ2FsbGJhY2spOworICAg
IGJpbmRNZXRob2QoInN0b3BNZW1vaXppbmciLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0
b3BNZW1vaXppbmdDYWxsYmFjayk7CisKICAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpmYWxsYmFja0NhbGxiYWNrKTsKIH0KIApAQCAtMTk2LDYgKzE5OSwx
OCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWRH
ZXR0ZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bQogICAgIHJlc3VsdC0+c2V0KCooZm91bmRFbGVt
ZW50LT5nZXRBc0NwcFZhcmlhbnQoKSkpOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpzdGFydE1lbW9pemluZ0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAg
bV93ZWJWaWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc3RhcnRNZW1vaXppbmcoKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RvcE1lbW9pemluZ0NhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7CisgICAgbV93ZWJWaWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCku
c3RvcE1lbW9pemluZygpOworfQorCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmYWxs
YmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
IHsKICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkNPTlNPTEUgTUVTU0FHRTogSmF2YVNj
cmlwdCBFUlJPUjogdW5rbm93biBtZXRob2QgY2FsbGVkIG9uIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyXG4iKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
Q2hyb21pdW0uaAppbmRleCBhOTcyOGM2MTViYjRmNTA1ZmUxZWNhNmEyZjY0Y2ZmYWU5NGExNTVi
Li43YWE2ZTM4ZDUxZjU1NjAwNTkzY2VlZGIwZDEwYThiNjZjOTI3YTAwIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckNocm9taXVtLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oCkBAIC03OCw2
ICs3OCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByb290RWxlbWVudEdldHRlckNhbGxiYWNrKENw
cFZhcmlhbnQqKTsKICAgICB2b2lkIGFjY2Vzc2libGVFbGVtZW50QnlJZEdldHRlckNhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAorICAgIHZvaWQgc3RhcnRN
ZW1vaXppbmdDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Cisg
ICAgdm9pZCBzdG9wTWVtb2l6aW5nQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworCiAgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZmluZEFjY2Vzc2libGVF
bGVtZW50QnlJZFJlY3Vyc2l2ZShjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Qm
LCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgaWQpOwogCiAgICAgV2ViS2l0OjpXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0IG1fZm9jdXNlZEVsZW1lbnQ7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcAppbmRleCA3MGYwODFh
OWVmOTI2MTg2YjMyMTQwZGYwNzk1YTM4NGVjN2MwYzgwLi4yM2ExM2M0MTI4MDcxMzk0ZmEzYTFl
M2NiNmRlY2IzMjFlOTE5NWYzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAKQEAgLTE0MSw2ICsxNDEsMTQgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhi
b29sIGxvZ0FjY2Vzc2liaWxpdHlFdmUKICAgICBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50cyA9
IHRydWU7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5n
KCkKK3sKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RvcE1lbW9pemluZygp
Cit7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxp
c3RlbmVyKEpTT2JqZWN0UmVmKQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRl
eCAwOTA5Yjg2ZmFjM2VkZTA4YWUyOTUzZmYyYTViYjJhNTQ5Y2NkODU1Li45NTU3Yzc5NTI4ZDI3
ZmE3ZjNlZTI0MWZjMDE4Mjk0ZDdlYTM1NTAxIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0xMTksNiArMTE5
LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vzc2liaWxpdHlF
dmVudHMoYm9vbCkKIHsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RhcnRN
ZW1vaXppbmcoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVt
b2l6aW5nKCkKK3sKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZp
Y2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKIHsKICAgICBpZiAo
IWZ1bmN0aW9uQ2FsbGJhY2spCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAppbmRleCA5OTVjNWYxMTVjMmVhM2Q5OGM4
NjcyMmU0ZGRmMzhkMGMzZjU1MGJjLi43OGU4YWY4NjIxOWYxNGVkYWQ1MmM5MmVmNzQyNzk2ZDAy
NmI0MzQyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJXaW4uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcldpbi5jcHAKQEAgLTI5Niw2ICsyOTYsMTQgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogewogfQogCit2
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdGFydE1lbW9pemluZygpCit7Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0b3BNZW1vaXppbmcoKQoreworfQorCiB2b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0Zm9y
bVVJRWxlbWVudCBlbGVtZW50LCBjb25zdCBzdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBmb3Ig
KEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQgPSBt
X25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxpc3Rl
bmVycy5lbmQoKTsgKytpdCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGYxMjMyNmZmYTdlMjdlYjZiNDVkNjIxMzMxOTI5
YjdmY2RlNTAwNGMuLjUwMjEyMjNmZGZlZmY0MjQ2MWQzZmViYTIzOTg3YzE1YWY5YTgzZGYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wMS0xMiAgRG9taW5pYyBNYXp6b25pICA8ZG1henpv
bmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbWVtb2l6ZSBleHBlbnNpdmUgY29tcHV0YXRp
b24gZHVyaW5nIGJsb2NrcyB3aGVyZSB0cmVlIGRvZXNuJ3QgY2hhbmdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY0OTcKKworICAgICAgICBBZGRz
IG5ldyB0ZXN0IHRoYXQgdXNlcyBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5zdGFydE1lbW9pemF0
aW9uKCkKKyAgICAgICAgdG8gdGVzdCB0aGF0IHdoZW4gbWVtb2l6YXRpb24gaXMgb24sIHRoZSBp
Z25vcmVkIHN0YXRlIG9mIGEgbm9kZSBpcworICAgICAgICBub3QgcmVjb21wdXRlZC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvbWVtb2l6ZS1pc2lnbm9yZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAxLTExICBO
b2VsIEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1d
IFVwZGF0ZSBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL3NvZnR3YXJlY29tcG9zaXRpbmcvZ2Vv
bWV0cnkvdmlkZW8tZml4ZWQtc2Nyb2xsaW5nLmh0bWwgb24gd2luCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZhYjA1ZTcyNzM2YTA4NzBiYjczZTMyMTFiNTJjZGJiMDFiNDgxZWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVk
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIwIEBACitUZXh0CisKK1Rlc3RzIHRoYXQgdHVybmlu
ZyBvbiBtZW1vaXphdGlvbiBjYXVzZXMgdGhlIGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIHN0
b3AgY29tcHV0aW5nIHdoZXRoZXIgaXQncyBpZ25vcmVkIG9yIG5vdC4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1dpdGhvdXQgbWVtb2l6YXRpb246CitQQVNTIGZpbmRBWEVsZW1l
bnQoImRpdiIpICE9IG51bGwgaXMgZmFsc2UKK1BBU1MgZGl2LnNldEF0dHJpYnV0ZSgicm9sZSIs
ICJoZWFkaW5nIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgdHJ1ZQorUEFTUyBk
aXYucmVtb3ZlQXR0cmlidXRlKCJyb2xlIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwg
aXMgZmFsc2UKKworV2l0aCBtZW1vaXphdGlvbjoKK1BBU1MgZmluZEFYRWxlbWVudCgiZGl2Iikg
IT0gbnVsbCBpcyBmYWxzZQorUEFTUyBkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgImhlYWRpbmci
KTsgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCBpcyBmYWxzZQorUEFTUyBkaXYucmVtb3Zl
QXR0cmlidXRlKCJyb2xlIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgZmFsc2UK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjViYjdlYTQyMGM1MTg0YTZhMWU2MzNiYTBiMDQxNDAzNjY4MDFhOAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRt
bApAQCAtMCwwICsxLDQzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
Cis8ZGl2PgorICA8ZGl2IGlkPSJkaXYiPgorICAgIDxwPlRleHQ8L3A+CisgIDwvZGl2PgorPC9k
aXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHR1cm5pbmcgb24gbWVtb2l6
YXRpb24gY2F1c2VzIHRoZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBzdG9wIGNvbXB1dGlu
ZyB3aGV0aGVyIGl0J3MgaWdub3JlZCBvciBub3QuIik7CisKK2lmICh3aW5kb3cuYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cuZmluZEFYRWxlbWVudCA9IGZ1bmN0aW9uKGlk
KSB7CisgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKGlkKTsKKyAgICB9OworICAgIHdpbmRvdy5kaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZGl2Jyk7CisKKyAgICBkZWJ1ZygnV2l0aG91dCBtZW1vaXphdGlvbjonKTsKKyAgICBz
aG91bGRCZSgnZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworICAgIHNo
b3VsZEJlKCdkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgImhlYWRpbmciKTsgZmluZEFYRWxlbWVu
dCgiZGl2IikgIT0gbnVsbCcsICd0cnVlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5yZW1vdmVBdHRy
aWJ1dGUoInJvbGUiKTsgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOwor
CisgICAgZGVidWcoJ1xuV2l0aCBtZW1vaXphdGlvbjonKTsKKyAgICBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5zdGFydE1lbW9pemluZygpOworICAgIHNob3VsZEJlKCdmaW5kQVhFbGVtZW50KCJk
aXYiKSAhPSBudWxsJywgJ2ZhbHNlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5zZXRBdHRyaWJ1dGUo
InJvbGUiLCAiaGVhZGluZyIpOyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxsJywgJ2ZhbHNl
Jyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKTsgZmluZEFYRWxl
bWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLnN0b3BNZW1vaXppbmcoKTsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlv
bnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA4NGIx
ZWMxZGU2MzU5MTJhY2MyYWZiZTM2YzQ2MTI0YTk2YWM5N2U2Li5hMDk5MzkxM2Y0MTQxMTRjNTE5
YmJlMWI3MjQ2YTgyZGU3YTliNDViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucwpAQCAtNzAyLDYgKzcwMiw5IEBAIHdlYmtpdC5vcmcvYi85ODM1MCBhY2Nlc3Np
YmlsaXR5L2FyaWEtaW52YWxpZC5odG1sIFsgVGltZW91dCBdCiAjIE1pc3NpbmcgRFJUIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lciBpbXBsZW1lbnRhdGlv
bgogd2Via2l0Lm9yZy9iLzcwNjA2IGFjY2Vzc2liaWxpdHkvYXJpYS1jaGVja2JveC1zZW5kcy1u
b3RpZmljYXRpb24uaHRtbCBbIFRpbWVvdXQgXQogCisjIE1pc3NpbmcgRFJUIEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjpzdGFydE1lbW9pemluZyBpbXBsZW1lbnRhdGlvbgord2Via2l0Lm9yZy9i
LzEwNjY5NSBhY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWwgWyBGYWlsdXJlIF0K
Kwogd2Via2l0Lm9yZy9iLzczMDAzIFsgUmVsZWFzZSBdIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxj
aGVjay1hc3luYy5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzMwMDMgWyBSZWxlYXNl
IF0gZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXBhc3RlLmh0bWwgWyBUaW1lb3V0IF0KIHdl
YmtpdC5vcmcvYi81MDc0MCBbIFJlbGVhc2UgXSBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2st
cXVldWUuaHRtbCBbIFRpbWVvdXQgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVj
dGF0aW9ucwppbmRleCAzMGM2NjBmZjY4ZDc5MzUxMGJlZmIyOTViZmMxOGU0NDM4ZDZkNDVmLi5k
ZmQ4MDgyZGIyM2UzZDQyMTE4ZmViNmU0M2UxZjVhNWQ5ZTYyYmJlIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNDQsNiArNDQsNyBAQCBhY2Nlc3NpYmls
aXR5L2RvY3VtZW50LWF0dHJpYnV0ZXMuaHRtbAogYWNjZXNzaWJpbGl0eS9hcmlhLW1lbnViYXIt
bWVudWl0ZW1zLmh0bWwKIAogIyBBY2Nlc3NpYmlsaXR5IHRlc3RzIHdpdGggbWlzc2luZyBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlciBmdW5jdGlvbmFsaXR5LgorYWNjZXNzaWJpbGl0eS9tZW1vaXpl
LWlzaWdub3JlZC5odG1sCiBhY2Nlc3NpYmlsaXR5L3NlbGVjdGlvbi1zdGF0ZXMuaHRtbAogCiAj
IEFjY2Vzc2liaWxpdHkgdGVzdHMgZm9yIG5vdGlmaWNhdGlvbnMgdGhhdCBkb24ndCBleGlzdCBv
ciBhcmVuJ3QgbmVlZGVkIG9uIE1hYyBPUyBYLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVz
dEV4cGVjdGF0aW9ucwppbmRleCBjYTk4MWE4Mjc3MzEzYmQzNzljOGMyYTFlNTgxMmY5NGMzMjdk
NjA1Li44MDAxZjRiZWIwMzQ3MmEwZGI3NDczNDc1ZmRhYzZhMzNlOTY3NWFkIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjMwLDYgKzYzMCw3IEBAIGFj
Y2Vzc2liaWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRlLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGVnZW5k
Lmh0bWwKIGFjY2Vzc2liaWxpdHkvbGlzdHMuaHRtbAogYWNjZXNzaWJpbGl0eS9tZWRpYS1lbGVt
ZW50Lmh0bWwKK2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbAogYWNjZXNzaWJp
bGl0eS9ub2NoaWxkcmVuLWVsZW1lbnRzLmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9uLWRhdGEtdGFi
bGUtY2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9uLW5hdGl2ZS1p
bWFnZS1jcmFzaC5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182462</attachid>
            <date>2013-01-12 00:56:21 -0800</date>
            <delta_ts>2013-01-24 00:37:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130112005323.patch</filename>
            <type>text/plain</type>
            <size>28234</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWM5NDRkYTFiNWI5ZDY2
YmVhN2Q4ZWVkODM1YjBkNDIyYmQ5MDM1My4uNzMzMmY5M2QyMWY2OGRmZmU3Yzc5YWZmNDVlNDcx
ZGEzZTBhYmQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAxLTEyICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBtZW1vaXphdGlvbi4gV2hlbiBtZW1vaXph
dGlvbiBpcyBvbiwgQVhPYmplY3RDYWNoZQorICAgICAgICBjcmVhdGVzIGFuIGFkZGl0aW9uYWwg
aGFzaCBtYXAgd2l0aCBjYWNoZWQgcmVzdWx0cyBvZiBleHBlbnNpdmUKKyAgICAgICAgY29tcHV0
YXRpb24gb24gQWNjZXNzaWJpbGl0eU9iamVjdHMuIEl0J3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBv
bmx5CisgICAgICAgIHdpdGhpbiBibG9ja3Mgd2hlcmUgeW91J2xsIGJlIGFjY2Vzc2luZyBhIGxv
dCBvZiBBWE9iamVjdHMgYnV0CisgICAgICAgIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlIERP
TS9yZW5kZXIgdHJlZXMgZG8gbm90IGNoYW5nZS4KKworICAgICAgICBJbml0aWFsbHksIGp1c3Qg
dGhlIHJlc3VsdCBvZiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGlzIGNhY2hlZCwgc2luY2UKKyAg
ICAgICAgdGhpcyBpcyB0aGUgb25lIG9mIHRoZSBob3R0ZXN0IG1ldGhvZHMuCisKKyAgICAgICAg
V2hlbiBtZW1vaXphdGlvbiBpcyBzdG9wcGVkLCB0aGUgY2FjaGUgaXMgdGhyb3duIGF3YXksIHNv
IHRoZXJlJ3MKKyAgICAgICAgbm8gY2hhbmNlIG9mIGl0IGdvaW5nIHN0YWxlLgorCisgICAgICAg
IE1lbW9pemF0aW9uIGlzIHVzZWQgYXV0b21hdGljYWxseSBpbnNpZGUgZmluZE1hdGNoaW5nT2Jq
ZWN0cywgYW5kCisgICAgICAgIGNhbiBiZSB1c2VkIHZpYSBhIG5ldyBDaHJvbWl1bSBBUEkuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogcGxh
dGZvcm0vY2hyb21pdW0vYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpzdGFydE1lbW9pemluZyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OnN0b3BNZW1vaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6Z2V0TWVtb2l6ZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9pemVkQWNjZXNzaWJpbGl0
eU9iamVjdERhdGE6Ok1lbW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGEpOgorICAgICAgICAo
TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpm
aW5kTWF0Y2hpbmdPYmplY3RzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAy
MDEzLTAxLTExICBEYW4gQmVhbSAgPGRiZWFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2xl
YW4gdXBdIFJlbW92ZSBIVE1MRm9ybUVsZW1lbnQ6OkF1dG9jb21wbGV0ZVJlc3VsdEVycm9yIGlu
IGZhdm9yIG9mIG1vcmUgc3BlY2lmaWMgRXJyb3IgcmVhc29ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCBiYzAzNTk3NTE4MDQyNDcyZTg2N2M4ZThkZjhjNmJlODMzZjk4ZTRlLi41NmFl
OWIwMWY2ZGIxMmI3ZjAyOTQzZWY0ODI0YjVmZGY5N2MxNDZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAxLTEyICBEb21pbmljIE1henpvbmkgIDxk
bWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXplIGV4cGVuc2l2ZSBjb21w
dXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjQ5NworCisgICAgICAg
IEFkZCBhbiBBUEkgdG8gdHVybiBtZW1vaXphdGlvbiBvbiBhbmQgb2ZmLiBUaGlzIHdpbGwgYWxs
b3cKKyAgICAgICAgQ2hyb21pdW0gdG8gc3BlZWQgdXAgYmF0Y2ggb3BlcmF0aW9ucyB0aGF0IHF1
ZXJ5IGEgbG90IG9mCisgICAgICAgIGFjY2Vzc2libGUgb2JqZWN0cywgd2hlbiBpdCBjYW4gZ3Vh
cmFudGVlIHRoZSB0cmVlIHdvbid0IGNoYW5nZQorICAgICAgICB3aXRoaW4gdGhhdCB0aW1lIHBl
cmlvZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHB1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgIChXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0KToKKyAgICAgICAgKiBzcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0YXJ0TWVtb2l6aW5nKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnN0b3BNZW1vaXppbmcpOgorCiAyMDEzLTAxLTExICBEYW4gQmVhbSAgPGRiZWFtQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2xlYW4gdXBdIFJlbW92ZSBIVE1MRm9ybUVsZW1lbnQ6OkF1
dG9jb21wbGV0ZVJlc3VsdEVycm9yIGluIGZhdm9yIG9mIG1vcmUgc3BlY2lmaWMgRXJyb3IgcmVh
c29ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
aW5kZXggMDc5NTU1YjA5NmQyMWRjMjAxOTVjYjMzYjA5MDcxYjMwNmYyYjc0MC4uYmE3MGE0MjVi
ZjZkMDEwNDdiMmFjYjM4YTYyY2U2OTQyZDliZTFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC04Nyw3ICs4Nyw4IEBAIGJvb2wgQVhP
YmplY3RDYWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiBib29sIEFYT2JqZWN0
Q2FjaGU6OmdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNl
OwogCiBBWE9iamVjdENhY2hlOjpBWE9iamVjdENhY2hlKGNvbnN0IERvY3VtZW50KiBkb2MpCi0g
ICAgOiBtX25vdGlmaWNhdGlvblBvc3RUaW1lcih0aGlzLCAmQVhPYmplY3RDYWNoZTo6bm90aWZp
Y2F0aW9uUG9zdFRpbWVyRmlyZWQpCisgICAgOiBtX21lbW9pemVkRGF0YSgwKQorICAgICwgbV9u
b3RpZmljYXRpb25Qb3N0VGltZXIodGhpcywgJkFYT2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBv
c3RUaW1lckZpcmVkKQogewogICAgIG1fZG9jdW1lbnQgPSBjb25zdF9jYXN0PERvY3VtZW50Kj4o
ZG9jKTsKIH0KQEAgLTEwMyw2ICsxMDQsNyBAQCBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNo
ZSgpCiAgICAgICAgIG9iai0+ZGV0YWNoKCk7CiAgICAgICAgIHJlbW92ZUFYSUQob2JqKTsKICAg
ICB9CisgICAgc3RvcE1lbW9pemluZygpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9i
amVjdENhY2hlOjpmb2N1c2VkSW1hZ2VNYXBVSUVsZW1lbnQoSFRNTEFyZWFFbGVtZW50KiBhcmVh
RWxlbWVudCkKQEAgLTc5Myw2ICs3OTUsNDMgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpyZWNvbXB1
dGVJc0lnbm9yZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAgICAgb2JqLT5ub3RpZnlJ
Zklnbm9yZWRWYWx1ZUNoYW5nZWQoKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpzdGFydE1l
bW9pemluZygpCit7CisgICAgaWYgKCFtX21lbW9pemVkRGF0YSkKKyAgICAgICAgbV9tZW1vaXpl
ZERhdGEgPSBuZXcgSGFzaE1hcDxBWElELCBSZWZQdHI8TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0RGF0YT4gPigpOworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0b3BNZW1vaXppbmcoKQor
eworICAgIGlmICghbV9tZW1vaXplZERhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGRlbGV0
ZSBtX21lbW9pemVkRGF0YTsKKyAgICBtX21lbW9pemVkRGF0YSA9IDA7Cit9CisKK01lbW9pemVk
QWNjZXNzaWJpbGl0eU9iamVjdERhdGEqIEFYT2JqZWN0Q2FjaGU6OmdldE1lbW9pemVkRGF0YShB
WElEIGlkKSBjb25zdAoreworICAgIGlmICghbV9tZW1vaXplZERhdGEpCisgICAgICAgIHJldHVy
biAwOworCisgICAgSGFzaE1hcDxBWElELCBSZWZQdHI8TWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2Jq
ZWN0RGF0YT4gPjo6aXRlcmF0b3IgaXQgPSBtX21lbW9pemVkRGF0YS0+ZmluZChpZCk7CisgICAg
cmV0dXJuIGl0ICE9IG1fbWVtb2l6ZWREYXRhLT5lbmQoKSA/ICgqaXQpLnZhbHVlLmdldCgpIDog
MDsKK30KKworTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogQVhPYmplY3RDYWNoZTo6
Z2V0T3JDcmVhdGVNZW1vaXplZERhdGEoQVhJRCBpZCkKK3sKKyAgICBpZiAoIW1fbWVtb2l6ZWRE
YXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChNZW1vaXplZEFjY2Vzc2liaWxpdHlP
YmplY3REYXRhKiBkYXRhID0gZ2V0TWVtb2l6ZWREYXRhKGlkKSkKKyAgICAgICAgcmV0dXJuIGRh
dGE7CisKKyAgICBNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBkYXRhID0gbmV3IE1l
bW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGE7CisgICAgbV9tZW1vaXplZERhdGEtPnNldChp
ZCwgYWRvcHRSZWYoZGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQorCiBWaXNpYmxlUG9zaXRp
b24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEoVGV4dE1h
cmtlckRhdGEmIHRleHRNYXJrZXJEYXRhKQogewogICAgIGlmICghaXNOb2RlSW5Vc2UodGV4dE1h
cmtlckRhdGEubm9kZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5oCmluZGV4IDRlZGY4MTUwM2UxZWU0MzYyNjkwYjlkZjMwODI5Y2IxYjc5Mzg5YjkuLjYz
ZTUzNWQ3N2RiOGQ3N2YyNjZmOGZiZDZlNTU4ZjQyYzQzZmZmODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC01Miw2ICs1MiwxMiBAQCBzdHJ1
Y3QgVGV4dE1hcmtlckRhdGEgewogICAgIEVBZmZpbml0eSBhZmZpbml0eTsKIH07CiAKK3N0cnVj
dCBNZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhICA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
bW9pemVkQWNjZXNzaWJpbGl0eU9iamVjdERhdGE+IHsKKyAgICBNZW1vaXplZEFjY2Vzc2liaWxp
dHlPYmplY3REYXRhKCkgOiBpZ25vcmVkKERlZmF1bHRCZWhhdmlvcikgeyB9CisKKyAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGlnbm9yZWQ7Cit9OworCiBlbnVtIFBvc3RUeXBlIHsg
UG9zdFN5bmNocm9ub3VzbHksIFBvc3RBc3luY2hyb25vdXNseSB9OwogCiBjbGFzcyBBWE9iamVj
dENhY2hlIHsKQEAgLTE4Miw2ICsxODgsMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBub2RlSGFz
Um9sZShOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiByb2xlKTsKIAorICAgIC8vIFdoZW4gYSBs
YXJnZSBudW1iZXIgb2YgcXVlcmllcyB0byB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIHdpbGwgYmUg
bWFkZQorICAgIC8vIHdpdGhpbiBhIGJsb2NrIHRoYXQgY2FuIGd1YXJhbnRlZSB0aGUgdHJlZSB3
b24ndCBjaGFuZ2UsIHR1cm5pbmcgb24KKyAgICAvLyBtZW1vaXphdGlvbiBjYW4gc3BlZWQgdXAg
dGhlIGNvbXB1dGF0aW9uIHNpZ25pZmljYW50bHkuCisgICAgdm9pZCBzdGFydE1lbW9pemluZygp
OworICAgIHZvaWQgc3RvcE1lbW9pemluZygpOworICAgIE1lbW9pemVkQWNjZXNzaWJpbGl0eU9i
amVjdERhdGEqIGdldE1lbW9pemVkRGF0YShBWElEKSBjb25zdDsKKyAgICBNZW1vaXplZEFjY2Vz
c2liaWxpdHlPYmplY3REYXRhKiBnZXRPckNyZWF0ZU1lbW9pemVkRGF0YShBWElEKTsKKwogcHJv
dGVjdGVkOgogICAgIHZvaWQgcG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlP
YmplY3QqLCBBWE5vdGlmaWNhdGlvbik7CiAgICAgdm9pZCBub2RlVGV4dENoYW5nZVBsYXRmb3Jt
Tm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRleHRDaGFuZ2UsIHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgU3RyaW5nJik7CkBAIC0yMDEsNiArMjE1LDcgQEAgcHJpdmF0ZToKICAg
ICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1fd2lkZ2V0T2JqZWN0TWFwcGluZzsKICAgICBIYXNo
TWFwPE5vZGUqLCBBWElEPiBtX25vZGVPYmplY3RNYXBwaW5nOwogICAgIEhhc2hTZXQ8Tm9kZSo+
IG1fdGV4dE1hcmtlck5vZGVzOworICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPE1lbW9pemVkQWNj
ZXNzaWJpbGl0eU9iamVjdERhdGE+ID4qIG1fbWVtb2l6ZWREYXRhOwogICAgIHN0YXRpYyBib29s
IGdBY2Nlc3NpYmlsaXR5RW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVu
aGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQ7CiAgICAgCkBAIC0yMzQsNiArMjQ5LDEwIEBAIGlu
bGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpyb290T2JqZWN0KCkgeyBy
ZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnJv
b3RPYmplY3RGb3JGcmFtZShGcmFtZSopIHsgcmV0dXJuIDA7IH0KIGlubGluZSBFbGVtZW50KiBB
WE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQoTm9kZSopIHsgcmV0dXJuIDA7IH0K
IGlubGluZSBib29sIG5vZGVIYXNSb2xlKE5vZGUqLCBjb25zdCBTdHJpbmcmKSB7IHJldHVybiBm
YWxzZTsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6c3RhcnRNZW1vaXppbmcoKSB7IH0K
K2lubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0b3BNZW1vaXppbmcoKSB7IH0KK2lubGluZSBN
ZW1vaXplZEFjY2Vzc2liaWxpdHlPYmplY3REYXRhKiBBWE9iamVjdENhY2hlOjpnZXRNZW1vaXpl
ZERhdGEoQVhJRCkgY29uc3QgeyByZXR1cm4gMDsgfQoraW5saW5lIE1lbW9pemVkQWNjZXNzaWJp
bGl0eU9iamVjdERhdGEqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKEFY
SUQpIHsgcmV0dXJuIDA7IH0KIGlubGluZSBib29sIGlzTm9kZUFyaWFWaXNpYmxlKE5vZGUqKSB7
IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgY29uc3QgRWxlbWVudCogQVhPYmplY3RDYWNoZTo6cm9v
dEFYRWRpdGFibGVFbGVtZW50KGNvbnN0IE5vZGUqKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgdm9p
ZCBBWE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwCmluZGV4IDQ3MjI3MGMxODJhYjc1ZTdiMDI3ZjQzNWYxZTI1ZmRiZjE3ZjcyMzQuLjRk
ODUzMmU3ODJmN2FlNmMxZmMwYTNiZmEyZjA0NmNmZmI5NTM3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNDQ4
LDYgKzQ0OCwxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRNYXRjaGluZ09iamVj
dHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiBjcml0ZQogICAgIGlmICghY3JpdGVyaWEp
CiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIFR1cm4gb24gbWVtb2l6YXRpb24gdG8gbWluaW1p
emUgcmVkdW5kYW50IGNvbXB1dGF0aW9uIGR1cmluZyB0aGUgZHVyYXRpb24gb2YgdGhpcworICAg
IC8vIG1ldGhvZCwgd2hlcmUgd2UgY2FuIGd1YXJhbnRlZSB0aGUgdHJlZSB3b24ndCBjaGFuZ2Uu
CisgICAgYXhPYmplY3RDYWNoZSgpLT5zdGFydE1lbW9pemluZygpOworCiAgICAgLy8gVGhpcyBz
ZWFyY2ggbWVjaGFuaXNtIG9ubHkgc2VhcmNoZXMgdGhlIGVsZW1lbnRzIGJlZm9yZS9hZnRlciB0
aGUgc3RhcnRpbmcgb2JqZWN0LgogICAgIC8vIEl0IGRvZXMgdGhpcyBieSBzdGVwcGluZyB1cCB0
aGUgcGFyZW50IGNoYWluIGFuZCBhdCBlYWNoIGxldmVsIGRvaW5nIGEgREZTLgogICAgIApAQCAt
NDk0LDYgKzQ5OCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZmluZE1hdGNoaW5nT2Jq
ZWN0cyhBY2Nlc3NpYmlsaXR5U2VhcmNoQ3JpdGVyaWEqIGNyaXRlCiAKICAgICAgICAgcHJldmlv
dXNPYmplY3QgPSBzdGFydE9iamVjdDsKICAgICB9CisKKyAgICBheE9iamVjdENhY2hlKCktPnN0
b3BNZW1vaXppbmcoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1
dChBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDVi
YTNjNjA0NWM1NWQwMmFjYjVhMDFlYjRlNjQ1N2NmZWRjNDQ4YzMuLmQ5NGFjZTFjNDI1YWYxODg4
NGY1MzIyM2E5ZWM5ZTI0NGNlMDA1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTEyMyw5
ICsxMTIzLDI3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhCiAgICAgICAgIAogICAgIHJldHVy
biBEZWZhdWx0QmVoYXZpb3I7CiB9ICAKLSAKKwogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKIHsKKyAgICBBWE9iamVjdENhY2hl
KiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5
T2JqZWN0RGF0YSogbWVtb2l6ZWREYXRhID0gY2FjaGUtPmdldE1lbW9pemVkRGF0YShheE9iamVj
dElEKCkpKSB7CisgICAgICAgIGlmIChtZW1vaXplZERhdGEtPmlnbm9yZWQgPT0gSWdub3JlT2Jq
ZWN0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtZW1vaXplZERhdGEt
Pmlnbm9yZWQgPT0gSW5jbHVkZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIHJlc3VsdCA9IGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7
CisKKyAgICBpZiAoTWVtb2l6ZWRBY2Nlc3NpYmlsaXR5T2JqZWN0RGF0YSogbWVtb2l6ZWREYXRh
ID0gY2FjaGUtPmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKGF4T2JqZWN0SUQoKSkpCisgICAgICAg
IG1lbW9pemVkRGF0YS0+aWdub3JlZCA9IHJlc3VsdCA/IElnbm9yZU9iamVjdCA6IEluY2x1ZGVP
YmplY3Q7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKK3sKICAgICAv
LyBDaGVjayBmaXJzdCBpZiBhbnkgb2YgdGhlIGNvbW1vbiByZWFzb25zIGNhdXNlIHRoaXMgZWxl
bWVudCB0byBiZSBpZ25vcmVkLgogICAgIC8vIFRoZW4gcHJvY2VzcyBvdGhlciB1c2UgY2FzZXMg
dGhhdCBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSB2YXJpb3VzIHJvbGVzCiAgICAgLy8g
dGhhdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0cyB0YWtlIG9uLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApp
bmRleCA5N2JmOGEzN2ZkNjM1NTQ1N2Y0M2JhNGE2YWYwYjA0MzIzN2ZmZjJhLi40Mzc0YjFhNDU1
ZjI4YzhjNTg1NjI5YThmODdmM2M4Y2ZjYTZmYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApAQCAtMjc3
LDYgKzI3Nyw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFyaWFMaXZlUmVnaW9uQnVz
eSgpIGNvbnN0OyAgICAKICAgICAKICAgICBib29sIGluaGVyaXRzUHJlc2VudGF0aW9uYWxSb2xl
KCkgY29uc3Q7CisKKyAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29u
c3Q7CiAgICAgCiAjaWYgRU5BQkxFKE1BVEhNTCkKICAgICAvLyBBbGwgbWF0aCBlbGVtZW50cyBy
ZXR1cm4gdHJ1ZSBmb3IgaXNNYXRoRWxlbWVudCgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IGI3N2QxMDg3
NmQ5NmY3M2Q2NjJkZjgzZmFhZTlkNTE4MjFiOGVmOTcuLjZhYTg1MjY2NTVjNGYzMzRmY2NhNGNk
NmJiNjEyYzk2ZmExOGUzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTc2LDYgKzc2LDEzIEBAIHB1Ymxp
YzoKICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZUFjY2Vzc2liaWxpdHkoKTsK
ICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBib29sIGFjY2Vzc2liaWxpdHlFbmFibGVkKCk7CiAK
KyAgICAvLyBNZXRob2RzIHRvIHN0YXJ0IGFuZCBzdG9wIG1lbW9pemF0aW9uOyB0aGlzIGFwcGxp
ZXMgdG8gdGhlCisgICAgLy8gd2hvbGUgYWNjZXNzaWJpbGl0eSB0cmVlIHRoYXQgdGhpcyBvYmpl
Y3QgaXMgY29udGFpbmVkIGluLgorICAgIC8vIE1lbW9pemF0aW9uIGNhbiBzaWduaWZpY2FudGx5
IHNwZWVkIHVwIG9wZXJhdGlvbnMgYXMgbG9uZyBhcworICAgIC8vIHRoZSB0cmVlIGlzIGd1YXJh
bnRlZWQgbm90IHRvIGNoYW5nZSB3aGlsZSBpdCdzIGVuYWJsZWQuCisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHN0YXJ0TWVtb2l6aW5nKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0b3BNZW1v
aXppbmcoKTsKKwogICAgIFdFQktJVF9FWFBPUlQgaW50IGF4SUQoKSBjb25zdDsKIAogICAgIC8v
IFVwZGF0ZSB0aGUgdW5kZXJseWluZyB0cmVlLCBhbmQgcmV0dXJuIHRydWUgaWYgdGhpcyBvYmpl
Y3QgaXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKaW5kZXggYjkyMGU0ZWM0ZmEwYWFhYjc4OTMxZDdlYjc5YjgzZWIxNDNl
NmU4NC4uMWM3NzJkMjYxZGQ3NGM2NjM1MmVlZDNlNjdkMjJlZjE1MWU5YjdiZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKQEAgLTgyLDYgKzgyLDE2IEBAIGJvb2wgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKQogICAgIHJldHVybiBBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpOwogfQogCit2b2lkIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0YXJ0TWVtb2l6
aW5nKCkKK3sKKyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3RhcnRNZW1vaXppbmco
KTsKK30KKwordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdG9wTWVtb2l6aW5nKCkKK3sK
KyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3RvcE1lbW9pemluZygpOworfQorCiBi
b29sIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRGV0YWNoZWQoKSBjb25zdAogewogICAgIGlm
IChtX3ByaXZhdGUuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggYTEwODhiYTdkNmZkMGIzZTQ0Yzk3ODgyNmIyZjQ5N2NkMmM0MjE1
NC4uMzRmOTNmMGUxZDVmNzA2NjU0Mzg0MWI0ZjMyNGI4NjA3NzU1Zjk2ZiAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisy
MDEzLTAxLTEyICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAg
ICAgIEFYOiBtZW1vaXplIGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJl
IHRyZWUgZG9lc24ndCBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwNjQ5NworCisgICAgICAgIEFkZCBhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5zdGFydE1lbW9pemF0aW9uIGFuZAorICAgICAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5z
dG9wTWVtb2l6YXRpb24gc28gdGhhdCBpdCdzCisgICAgICAgIHBvc3NpYmxlIHRvIHRlc3QgbWVt
b2l6YXRpb24gZXhwbGljaXRseSAtIGN1cnJlbnRseSBvbmx5CisgICAgICAgIGZyb20gQ2hyb21p
dW0uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHA6CisgICAgICAgIChzdGFy
dE1lbW9pemluZ0NhbGxiYWNrKToKKyAgICAgICAgKHN0b3BNZW1vaXppbmdDYWxsYmFjayk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6c3RhcnRNZW1vaXppbmdDYWxsYmFjayk6CisgICAgICAgIChXZWJUZXN0
UnVubmVyKToKKyAgICAgICAgKFdlYlRlc3RSdW5uZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpzdG9wTWVtb2l6aW5nQ2FsbGJhY2spOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpzdG9wTWVtb2l6aW5nKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4v
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpzdG9wTWVtb2l6aW5nKToKKwogMjAxMy0wMS0xMSAgSnVsaWUgUGFyZW50ICA8anBhcmVu
dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQnVpbGRlciBzaG91bGQgbm90IGJlIGEgdmFsaWQg
cGFyYW1ldGVyIGZvciBzdGF0cyBkYXNoYm9hcmQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCA0OWQ0NTNhODRjZGViY2RiOGEzMjI2
YmZkOTJjYzgxMTgyNGE2NTczLi5mMzkyMGQwYmMyODc5OGNmOTBlNDUyODQ4OGFlNTU5OTkwOTNk
OTE4IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuY3BwCkBAIC04NCw2ICs4NCwyMCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBsb2dBY2Nlc3NpYmls
aXR5RXZlbnRzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsCiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHN0
YXJ0TWVtb2l6aW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVm
KikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19j
YXN0PEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBjb250cm9sbGVyLT5zdGFydE1lbW9pemluZygpOworICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjdHgpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzdG9wTWVtb2l6
aW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKK3sKKyAg
ICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBjb250cm9sbGVyLT5zdG9wTWVtb2l6aW5nKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGN0eCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldEVsZW1lbnRBdFBvaW50Q2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGludCB4ID0gMDsKQEAg
LTEzOCw2ICsxNTIsOCBAQCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRK
U0NsYXNzKCkKICAgICAgICAgeyAiYWNjZXNzaWJsZUVsZW1lbnRCeUlkIiwgZ2V0QWNjZXNzaWJs
ZUVsZW1lbnRCeUlkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiYWRkTm90aWZpY2F0aW9u
TGlzdGVuZXIiLCBhZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgInJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgcmVtb3ZlTm90aWZpY2F0aW9uTGlz
dGVuZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzdGFydE1lbW9pemluZyIsIHN0YXJ0
TWVtb2l6aW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic3RvcE1lbW9pemluZyIsIHN0
b3BNZW1vaXppbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmlu
ZGV4IGE2Y2RjNDY4NmMxMzJmZjU4NmQ1ODJmZTUxYTA3NjhlZTcyYzAxMDAuLjAwYWNlZDAwOTA1
Y2IyMDk0YTczMTA0YTA3ZDNhYjY4YTllMGZlY2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApAQCAtNTMsNiArNTMsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRMb2dTY3JvbGxpbmdTdGFydEV2ZW50cyhib29sKTsKICAgICB2b2lkIHNldExv
Z0FjY2Vzc2liaWxpdHlFdmVudHMoYm9vbCk7CiAKKyAgICB2b2lkIHN0YXJ0TWVtb2l6aW5nKCk7
CisgICAgdm9pZCBzdG9wTWVtb2l6aW5nKCk7CisKICAgICB2b2lkIHJlc2V0VG9Db25zaXN0ZW50
U3RhdGUoKTsKIAogICAgIC8vIEdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXIsIGNhcHR1cmVz
IG5vdGlmaWNhdGlvbnMgb24gYW55IG9iamVjdC4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hy
b21pdW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKaW5kZXggNWYxYjRmOWE5MmQyNzU1
M2I1MzY1ZTNjYWEwNjFlMDY0YmQ3NGY5ZC4uM2NjYzg4YjRiYzg5ZTJlOWY1N2VmNzkwNjVjM2Rh
OGRkYjI3MTUxMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJDaHJvbWl1bS5jcHAKQEAgLTU2LDYgKzU2LDkgQEAgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKIAogICAgIGJpbmRNZXRob2QoImFjY2Vz
c2libGVFbGVtZW50QnlJZCIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVs
ZW1lbnRCeUlkR2V0dGVyQ2FsbGJhY2spOwogCisgICAgYmluZE1ldGhvZCgic3RhcnRNZW1vaXpp
bmciLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nQ2FsbGJhY2spOwor
ICAgIGJpbmRNZXRob2QoInN0b3BNZW1vaXppbmciLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnN0b3BNZW1vaXppbmdDYWxsYmFjayk7CisKICAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjpmYWxsYmFja0NhbGxiYWNrKTsKIH0KIApAQCAtMTk2LDYgKzE5
OSwxOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5
SWRHZXR0ZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bQogICAgIHJlc3VsdC0+c2V0KCooZm91bmRF
bGVtZW50LT5nZXRBc0NwcFZhcmlhbnQoKSkpOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpzdGFydE1lbW9pemluZ0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cisg
ICAgbV93ZWJWaWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc3RhcnRNZW1vaXppbmcoKTsKK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RvcE1lbW9pemluZ0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgbV93ZWJWaWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0
KCkuc3RvcE1lbW9pemluZygpOworfQorCiB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpm
YWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKIHsKICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkNPTlNPTEUgTUVTU0FHRTogSmF2
YVNjcmlwdCBFUlJPUjogdW5rbm93biBtZXRob2QgY2FsbGVkIG9uIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyXG4iKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVyQ2hyb21pdW0uaAppbmRleCBhOTcyOGM2MTViYjRmNTA1ZmUxZWNhNmEyZjY0Y2ZmYWU5NGEx
NTViLi43YWE2ZTM4ZDUxZjU1NjAwNTkzY2VlZGIwZDEwYThiNjZjOTI3YTAwIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlckNocm9taXVtLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oCkBAIC03
OCw2ICs3OCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByb290RWxlbWVudEdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGFjY2Vzc2libGVFbGVtZW50QnlJZEdldHRlckNhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAorICAgIHZvaWQgc3Rh
cnRNZW1vaXppbmdDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisgICAgdm9pZCBzdG9wTWVtb2l6aW5nQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworCiAgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZmluZEFjY2Vzc2li
bGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3QmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgaWQpOwogCiAgICAgV2ViS2l0OjpXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0IG1fZm9jdXNlZEVsZW1lbnQ7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcAppbmRleCA3MGYw
ODFhOWVmOTI2MTg2YjMyMTQwZGYwNzk1YTM4NGVjN2MwYzgwLi4yM2ExM2M0MTI4MDcxMzk0ZmEz
YTFlM2NiNmRlY2IzMjFlOTE5NWYzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAKQEAgLTE0MSw2ICsxNDEsMTQg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50
cyhib29sIGxvZ0FjY2Vzc2liaWxpdHlFdmUKICAgICBsb2dnaW5nQWNjZXNzaWJpbGl0eUV2ZW50
cyA9IHRydWU7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6
aW5nKCkKK3sKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RvcE1lbW9pemlu
ZygpCit7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlv
bkxpc3RlbmVyKEpTT2JqZWN0UmVmKQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQpp
bmRleCAwOTA5Yjg2ZmFjM2VkZTA4YWUyOTUzZmYyYTViYjJhNTQ5Y2NkODU1Li45NTU3Yzc5NTI4
ZDI3ZmE3ZjNlZTI0MWZjMDE4Mjk0ZDdlYTM1NTAxIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0xMTksNiAr
MTE5LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vzc2liaWxp
dHlFdmVudHMoYm9vbCkKIHsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3Rh
cnRNZW1vaXppbmcoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9w
TWVtb2l6aW5nKCkKK3sKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90
aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjaykKIHsKICAgICBp
ZiAoIWZ1bmN0aW9uQ2FsbGJhY2spCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAppbmRleCA5OTVjNWYxMTVjMmVhM2Q5
OGM4NjcyMmU0ZGRmMzhkMGMzZjU1MGJjLi43OGU4YWY4NjIxOWYxNGVkYWQ1MmM5MmVmNzQyNzk2
ZDAyNmI0MzQyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJXaW4uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAKQEAgLTI5Niw2ICsyOTYsMTQgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogewogfQog
Cit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdGFydE1lbW9pemluZygpCit7Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0b3BNZW1vaXppbmcoKQoreworfQorCiB2
b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5Ob3RpZmljYXRpb25SZWNlaXZlZChQbGF0
Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBjb25zdCBzdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBm
b3IgKEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPjo6aXRlcmF0b3IgaXQg
PSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdpbigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxp
c3RlbmVycy5lbmQoKTsgKytpdCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGYxMjMyNmZmYTdlMjdlYjZiNDVkNjIxMzMx
OTI5YjdmY2RlNTAwNGMuLjUwMjEyMjNmZGZlZmY0MjQ2MWQzZmViYTIzOTg3YzE1YWY5YTgzZGYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wMS0xMiAgRG9taW5pYyBNYXp6b25pICA8ZG1h
enpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbWVtb2l6ZSBleHBlbnNpdmUgY29tcHV0
YXRpb24gZHVyaW5nIGJsb2NrcyB3aGVyZSB0cmVlIGRvZXNuJ3QgY2hhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY0OTcKKworICAgICAgICBB
ZGRzIG5ldyB0ZXN0IHRoYXQgdXNlcyBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5zdGFydE1lbW9p
emF0aW9uKCkKKyAgICAgICAgdG8gdGVzdCB0aGF0IHdoZW4gbWVtb2l6YXRpb24gaXMgb24sIHRo
ZSBpZ25vcmVkIHN0YXRlIG9mIGEgbm9kZSBpcworICAgICAgICBub3QgcmVjb21wdXRlZC4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAxLTEx
ICBOb2VsIEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KIAogICAgICAgICBbY2hyb21p
dW1dIFVwZGF0ZSBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL3NvZnR3YXJlY29tcG9zaXRpbmcv
Z2VvbWV0cnkvdmlkZW8tZml4ZWQtc2Nyb2xsaW5nLmh0bWwgb24gd2luCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZhYjA1ZTcyNzM2YTA4NzBiYjczZTMyMTFiNTJjZGJiMDFiNDgxZWYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25v
cmVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIwIEBACitUZXh0CisKK1Rlc3RzIHRoYXQgdHVy
bmluZyBvbiBtZW1vaXphdGlvbiBjYXVzZXMgdGhlIGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRv
IHN0b3AgY29tcHV0aW5nIHdoZXRoZXIgaXQncyBpZ25vcmVkIG9yIG5vdC4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1dpdGhvdXQgbWVtb2l6YXRpb246CitQQVNTIGZpbmRBWEVs
ZW1lbnQoImRpdiIpICE9IG51bGwgaXMgZmFsc2UKK1BBU1MgZGl2LnNldEF0dHJpYnV0ZSgicm9s
ZSIsICJoZWFkaW5nIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgdHJ1ZQorUEFT
UyBkaXYucmVtb3ZlQXR0cmlidXRlKCJyb2xlIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51
bGwgaXMgZmFsc2UKKworV2l0aCBtZW1vaXphdGlvbjoKK1BBU1MgZmluZEFYRWxlbWVudCgiZGl2
IikgIT0gbnVsbCBpcyBmYWxzZQorUEFTUyBkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgImhlYWRp
bmciKTsgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCBpcyBmYWxzZQorUEFTUyBkaXYucmVt
b3ZlQXR0cmlidXRlKCJyb2xlIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgZmFs
c2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0
bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjViYjdlYTQyMGM1MTg0YTZhMWU2MzNiYTBiMDQxNDAzNjY4MDFhOAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQu
aHRtbApAQCAtMCwwICsxLDQzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorCis8ZGl2PgorICA8ZGl2IGlkPSJkaXYiPgorICAgIDxwPlRleHQ8L3A+CisgIDwvZGl2Pgor
PC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorCis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHR1cm5pbmcgb24gbWVt
b2l6YXRpb24gY2F1c2VzIHRoZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBzdG9wIGNvbXB1
dGluZyB3aGV0aGVyIGl0J3MgaWdub3JlZCBvciBub3QuIik7CisKK2lmICh3aW5kb3cuYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cuZmluZEFYRWxlbWVudCA9IGZ1bmN0aW9u
KGlkKSB7CisgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKGlkKTsKKyAgICB9OworICAgIHdpbmRvdy5kaXYgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZGl2Jyk7CisKKyAgICBkZWJ1ZygnV2l0aG91dCBtZW1vaXphdGlvbjonKTsKKyAg
ICBzaG91bGRCZSgnZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworICAg
IHNob3VsZEJlKCdkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgImhlYWRpbmciKTsgZmluZEFYRWxl
bWVudCgiZGl2IikgIT0gbnVsbCcsICd0cnVlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5yZW1vdmVB
dHRyaWJ1dGUoInJvbGUiKTsgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScp
OworCisgICAgZGVidWcoJ1xuV2l0aCBtZW1vaXphdGlvbjonKTsKKyAgICBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5zdGFydE1lbW9pemluZygpOworICAgIHNob3VsZEJlKCdmaW5kQVhFbGVtZW50
KCJkaXYiKSAhPSBudWxsJywgJ2ZhbHNlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5zZXRBdHRyaWJ1
dGUoInJvbGUiLCAiaGVhZGluZyIpOyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxsJywgJ2Zh
bHNlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKTsgZmluZEFY
RWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworICAgIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLnN0b3BNZW1vaXppbmcoKTsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA4
NGIxZWMxZGU2MzU5MTJhY2MyYWZiZTM2YzQ2MTI0YTk2YWM5N2U2Li5hMDk5MzkxM2Y0MTQxMTRj
NTE5YmJlMWI3MjQ2YTgyZGU3YTliNDViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVz
dEV4cGVjdGF0aW9ucwpAQCAtNzAyLDYgKzcwMiw5IEBAIHdlYmtpdC5vcmcvYi85ODM1MCBhY2Nl
c3NpYmlsaXR5L2FyaWEtaW52YWxpZC5odG1sIFsgVGltZW91dCBdCiAjIE1pc3NpbmcgRFJUIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lciBpbXBsZW1lbnRh
dGlvbgogd2Via2l0Lm9yZy9iLzcwNjA2IGFjY2Vzc2liaWxpdHkvYXJpYS1jaGVja2JveC1zZW5k
cy1ub3RpZmljYXRpb24uaHRtbCBbIFRpbWVvdXQgXQogCisjIE1pc3NpbmcgRFJUIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpzdGFydE1lbW9pemluZyBpbXBsZW1lbnRhdGlvbgord2Via2l0Lm9y
Zy9iLzEwNjY5NSBhY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWwgWyBGYWlsdXJl
IF0KKwogd2Via2l0Lm9yZy9iLzczMDAzIFsgUmVsZWFzZSBdIGVkaXRpbmcvc3BlbGxpbmcvc3Bl
bGxjaGVjay1hc3luYy5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzMwMDMgWyBSZWxl
YXNlIF0gZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXBhc3RlLmh0bWwgWyBUaW1lb3V0IF0K
IHdlYmtpdC5vcmcvYi81MDc0MCBbIFJlbGVhc2UgXSBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hl
Y2stcXVldWUuaHRtbCBbIFRpbWVvdXQgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4
cGVjdGF0aW9ucwppbmRleCAzMGM2NjBmZjY4ZDc5MzUxMGJlZmIyOTViZmMxOGU0NDM4ZDZkNDVm
Li5kZmQ4MDgyZGIyM2UzZDQyMTE4ZmViNmU0M2UxZjVhNWQ5ZTYyYmJlIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNDQsNiArNDQsNyBAQCBhY2Nlc3Np
YmlsaXR5L2RvY3VtZW50LWF0dHJpYnV0ZXMuaHRtbAogYWNjZXNzaWJpbGl0eS9hcmlhLW1lbnVi
YXItbWVudWl0ZW1zLmh0bWwKIAogIyBBY2Nlc3NpYmlsaXR5IHRlc3RzIHdpdGggbWlzc2luZyBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlciBmdW5jdGlvbmFsaXR5LgorYWNjZXNzaWJpbGl0eS9tZW1v
aXplLWlzaWdub3JlZC5odG1sCiBhY2Nlc3NpYmlsaXR5L3NlbGVjdGlvbi1zdGF0ZXMuaHRtbAog
CiAjIEFjY2Vzc2liaWxpdHkgdGVzdHMgZm9yIG5vdGlmaWNhdGlvbnMgdGhhdCBkb24ndCBleGlz
dCBvciBhcmVuJ3QgbmVlZGVkIG9uIE1hYyBPUyBYLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
VGVzdEV4cGVjdGF0aW9ucwppbmRleCBjYTk4MWE4Mjc3MzEzYmQzNzljOGMyYTFlNTgxMmY5NGMz
MjdkNjA1Li44MDAxZjRiZWIwMzQ3MmEwZGI3NDczNDc1ZmRhYzZhMzNlOTY3NWFkIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjMwLDYgKzYzMCw3IEBA
IGFjY2Vzc2liaWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRlLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGVn
ZW5kLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGlzdHMuaHRtbAogYWNjZXNzaWJpbGl0eS9tZWRpYS1l
bGVtZW50Lmh0bWwKK2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbAogYWNjZXNz
aWJpbGl0eS9ub2NoaWxkcmVuLWVsZW1lbnRzLmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9uLWRhdGEt
dGFibGUtY2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9uLW5hdGl2
ZS1pbWFnZS1jcmFzaC5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184425</attachid>
            <date>2013-01-24 00:37:18 -0800</date>
            <delta_ts>2013-01-25 02:09:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130124003411.patch</filename>
            <type>text/plain</type>
            <size>28855</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVhZWY2Mzg2MzlkYTc5
NzliY2EwZjcxY2Q5NGZkMWJmMTgzMDA1MS4uNWNiMDUyZjdkMDFjNjE2NGMxMDFiN2Q4ZDQ0YWJl
M2Y2OTdiZDE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTAxLTI0ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIFJBSUktc3R5bGUgUmVhZE9ubHlBWFRyYW5zYWN0aW9uIGNsYXNzIHRoYXQgY2FuIGJlCisg
ICAgICAgIGNyZWF0ZWQgb24gdGhlIHN0YWNrIHRvIHRlbXBvcmFyaWx5IGFsbG93IHJlc3VsdHMg
b2YKKyAgICAgICAgY29tcHV0YXRpb24gZnJvbSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIHRvIGJl
IG1lbW9pemVkLAorICAgICAgICBtYWtpbmcgYmF0Y2ggb3BlcmF0aW9ucyB0byByZXRyaWV2ZSBs
b3RzIG9mIGRhdGEgZnJvbSB0aGUKKyAgICAgICAgdHJlZSB1cCB0byB0d2ljZSBhcyBmYXN0Lgor
CisgICAgICAgIEluaXRpYWxseSwganVzdCB0aGUgcmVzdWx0IG9mIGFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQgaXMgY2FjaGVkLCBzaW5jZQorICAgICAgICB0aGlzIGlzIHRoZSBvbmUgb2YgdGhlIGhv
dHRlc3QgbWV0aG9kcy4KKworICAgICAgICBXaGVuIHRoZSBsYXN0IFJlYWRPbmx5QVhUcmFuc2Fj
dGlvbiBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZSwKKyAgICAgICAgdGhlIGNhY2hlIGlzIHRo
cm93biBhd2F5LCBzbyB0aGVyZSdzIG5vIGNoYW5jZSBvZiBpdCBnb2luZyBzdGFsZS4KKworICAg
ICAgICBUaGlzIGNsYXNzIGlzIHVzZWQgYXV0b21hdGljYWxseSBpbnNpZGUgZmluZE1hdGNoaW5n
T2JqZWN0cywgYW5kCisgICAgICAgIGNhbiBiZSB1c2VkIHZpYSBhIG5ldyBDaHJvbWl1bSBBUEku
CisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkT25seUFYVHJhbnNhY3Rpb246OlJlYWRPbmx5
QVhUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFkT25seUFYVHJhbnNhY3Rpb246
On5SZWFkT25seUFYVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVhZE9ubHlBWFRy
YW5zYWN0aW9uOjpnZXRNZW1vaXplZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZE9ubHlB
WFRyYW5zYWN0aW9uOjpnZXRPckNyZWF0ZU1lbW9pemVkRGF0YSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJl
YWRPbmx5QVhUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFkT25seUFYVHJhbnNh
Y3Rpb246Ok1lbW9pemVkRGF0YTo6TWVtb2l6ZWREYXRhKToKKyAgICAgICAgKE1lbW9pemVkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkT25seUFYVHJhbnNhY3Rpb246Omluc3RhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRPbmx5QVhUcmFuc2FjdGlvbjo6UmVhZE9ubHlBWFRyYW5z
YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRPbmx5QVhUcmFuc2FjdGlvbjo6flJlYWRP
bmx5QVhUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWFkT25seUFYVHJhbnNhY3Rp
b246OmdldE1lbW9pemVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkT25seUFYVHJhbnNh
Y3Rpb246OmdldE9yQ3JlYXRlTWVtb2l6ZWREYXRhKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21w
dXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KToKKwogMjAxMy0wMS0yMiAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgTWFrZSBDb21wYWN0SFRNTFRva2VuIGEgbGl0dGxlIG1vcmUgY29tcGFjdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCAxZjZmMTkyNzIyMThmODkzOThjNDg3ODJiMWJlNzg3OGMx
NWJjZmU2Li5jYmVlNjVkNzg3NTEwZWJkNWViODNkNDljY2UwODk0YTdhYWYxNjk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEzLTAxLTI0ICBEb21pbmlj
IE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXplIGV4
cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBjaGFu
Z2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjQ5
NworCisgICAgICAgIEFkZCBhIHdyYXBwZXIgZm9yIFJlYWRPbmx5QVhUcmFuc2FjdGlvbi4gVGhp
cyB3aWxsIGFsbG93CisgICAgICAgIENocm9taXVtIHRvIHNwZWVkIHVwIGJhdGNoIG9wZXJhdGlv
bnMgdGhhdCBxdWVyeSBhIGxvdCBvZgorICAgICAgICBhY2Nlc3NpYmxlIG9iamVjdHMsIHdoZW4g
aXQgY2FuIGd1YXJhbnRlZSB0aGUgdHJlZSB3b24ndCBjaGFuZ2UKKyAgICAgICAgd2l0aGluIHRo
YXQgdGltZSBwZXJpb2QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBwdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViUmVhZE9ubHlBY2Nlc3NpYmls
aXR5VHJhbnNhY3Rpb24pOgorICAgICAgICAqIHNyYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVhZE9ubHlBY2Nlc3NpYmlsaXR5VHJhbnNhY3Rpb246
OldlYlJlYWRPbmx5QWNjZXNzaWJpbGl0eVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlYWRPbmx5QWNjZXNzaWJpbGl0eVRyYW5zYWN0aW9uOjp+
V2ViUmVhZE9ubHlBY2Nlc3NpYmlsaXR5VHJhbnNhY3Rpb24pOgorCiAyMDEzLTAxLTIyICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTQwMzky
KTogSW5qZWN0SURCS2V5VGVzdC5Ub3BMZXZlbFByb3BlcnR5U3RyaW5nVmFsdWUgaXMgY3Jhc2hp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmlu
ZGV4IDIxNWFlZTJlMDM0OTY5Y2U3YTFmZWRjNGM4ZGVmOGQxMWFhN2JjNzcuLjQ3OGUxMWI1MjYw
MDg3ZTBiYzYxY2Q0ODlmYTFhMzQwYjViNzM3MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtODIsNyArODIsNDAgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLSAgICAKKworUmVhZE9u
bHlBWFRyYW5zYWN0aW9uKiBSZWFkT25seUFYVHJhbnNhY3Rpb246OnNfaW5zdGFuY2UgPSAwOwor
aW50IFJlYWRPbmx5QVhUcmFuc2FjdGlvbjo6c19pbnN0YW5jZUNvdW50ID0gMDsKKworUmVhZE9u
bHlBWFRyYW5zYWN0aW9uOjpSZWFkT25seUFYVHJhbnNhY3Rpb24oKQoreworICAgIGlmIChzX2lu
c3RhbmNlQ291bnQgPT0gMCkKKyAgICAgICAgc19pbnN0YW5jZSA9IHRoaXM7CisgICAgc19pbnN0
YW5jZUNvdW50Kys7Cit9CisKK1JlYWRPbmx5QVhUcmFuc2FjdGlvbjo6flJlYWRPbmx5QVhUcmFu
c2FjdGlvbigpCit7CisgICAgc19pbnN0YW5jZUNvdW50LS07CisgICAgaWYgKHNfaW5zdGFuY2VD
b3VudCA9PSAwKQorICAgICAgICBzX2luc3RhbmNlID0gMDsKK30KKworUmVhZE9ubHlBWFRyYW5z
YWN0aW9uOjpNZW1vaXplZERhdGEqIFJlYWRPbmx5QVhUcmFuc2FjdGlvbjo6Z2V0TWVtb2l6ZWRE
YXRhKEFYSUQgaWQpIGNvbnN0Cit7CisgICAgSGFzaE1hcDxBWElELCBSZWZQdHI8UmVhZE9ubHlB
WFRyYW5zYWN0aW9uOjpNZW1vaXplZERhdGE+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZW1v
aXplZERhdGEuZmluZChpZCk7CisgICAgcmV0dXJuIGl0ICE9IG1fbWVtb2l6ZWREYXRhLmVuZCgp
ID8gKCppdCkudmFsdWUuZ2V0KCkgOiAwOworfQorCitSZWFkT25seUFYVHJhbnNhY3Rpb246Ok1l
bW9pemVkRGF0YSogUmVhZE9ubHlBWFRyYW5zYWN0aW9uOjpnZXRPckNyZWF0ZU1lbW9pemVkRGF0
YShBWElEIGlkKQoreworICAgIGlmIChSZWFkT25seUFYVHJhbnNhY3Rpb246Ok1lbW9pemVkRGF0
YSogZGF0YSA9IGdldE1lbW9pemVkRGF0YShpZCkpCisgICAgICAgIHJldHVybiBkYXRhOworCisg
ICAgUmVhZE9ubHlBWFRyYW5zYWN0aW9uOjpNZW1vaXplZERhdGEqIGRhdGEgPSBuZXcgUmVhZE9u
bHlBWFRyYW5zYWN0aW9uOjpNZW1vaXplZERhdGE7CisgICAgbV9tZW1vaXplZERhdGEuc2V0KGlk
LCBhZG9wdFJlZihkYXRhKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKIGJvb2wgQVhPYmplY3RD
YWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CiBib29sIEFYT2JqZWN0Q2FjaGU6
OmdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZCA9IGZhbHNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IDRlZGY4
MTUwM2UxZWU0MzYyNjkwYjlkZjMwODI5Y2IxYjc5Mzg5YjkuLjk2M2JiMGJiMGI0N2JhYTQyNWJk
MWE4NDYyMWJmNTU3NGRkZmQwNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oCkBAIC01Miw2ICs1MiwzNiBAQCBzdHJ1Y3QgVGV4dE1hcmtlckRhdGEg
ewogICAgIEVBZmZpbml0eSBhZmZpbml0eTsKIH07CiAKKy8vIENyZWF0ZSBhbiBpbnN0YW5jZSBv
ZiB0aGlzIGNsYXNzIG9uIHRoZSBzdGFjayB0byB0ZW1wb3JhcmlseSBlbmFibGUKKy8vIGludGVy
bmFsIGNhY2hpbmcgb2YgYWNjZXNzaWJpbGl0eSBkYXRhLCB0byBzcGVlZCB1cCBhIHNlcmllcyBv
ZiByZWFkLW9ubHkKKy8vIG9wZXJhdGlvbnMgb24gdGhlIGFjY2Vzc2liaWxpdHkgdHJlZS4gVGhl
cmUncyBubyBzZWN1cml0eSByaXNrIGlmIHRoZQorLy8gdHJlZSBjaGFuZ2VzIGR1cmluZyB0aGUg
c2NvcGUgb2YgYSB0cmFuc2FjdGlvbiBkdWUgdG8gYSBidWcsIGJlY2F1c2UgdGhlCisvLyBjYWNo
ZSBpcyBzaW1wbHkgYSBtYXAgZnJvbSBheE9iamVjdElEIHRvIHNpbXBsZSBkYXRhIHR5cGVzIC0g
dGhlIHdvcnN0CisvLyBjYXNlIGlzIHRoYXQgc3RhbGUgcmVzdWx0cyBjb3VsZCBiZSByZXR1cm5l
ZC4gTmVzdGVkIGluc3RhbmNlcyBhcmUgZmluZS4KK2NsYXNzIFJlYWRPbmx5QVhUcmFuc2FjdGlv
biB7CitwdWJsaWM6CisgICAgUmVhZE9ubHlBWFRyYW5zYWN0aW9uKCk7CisgICAgdmlydHVhbCB+
UmVhZE9ubHlBWFRyYW5zYWN0aW9uKCk7CisKKyAgICBzdHJ1Y3QgTWVtb2l6ZWREYXRhICA6IHB1
YmxpYyBSZWZDb3VudGVkPE1lbW9pemVkRGF0YT4geworICAgICAgICBNZW1vaXplZERhdGEoKSA6
IGlnbm9yZWQoRGVmYXVsdEJlaGF2aW9yKSB7IH0KKworICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW5jbHVzaW9uIGlnbm9yZWQ7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICAvLyBNZXRob2Rz
IHRvIGJlIHVzZWQgb25seSBieSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IChvciBpbiB0aGUK
KyAgICAvLyBmdXR1cmUsIGFueSBBY2Nlc3NpYmlsaXR5T2JqZWN0IHN1YnNldCkuCisgICAgZnJp
ZW5kIGNsYXNzIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q7CisgICAgc3RhdGljIFJlYWRPbmx5
QVhUcmFuc2FjdGlvbiogaW5zdGFuY2UoKSB7IHJldHVybiBzX2luc3RhbmNlOyB9CisgICAgTWVt
b2l6ZWREYXRhKiBnZXRNZW1vaXplZERhdGEoQVhJRCkgY29uc3Q7CisgICAgTWVtb2l6ZWREYXRh
KiBnZXRPckNyZWF0ZU1lbW9pemVkRGF0YShBWElEKTsKKworICAgIHN0YXRpYyBSZWFkT25seUFY
VHJhbnNhY3Rpb24qIHNfaW5zdGFuY2U7CisgICAgc3RhdGljIGludCBzX2luc3RhbmNlQ291bnQ7
CisgICAgSGFzaE1hcDxBWElELCBSZWZQdHI8TWVtb2l6ZWREYXRhPiA+IG1fbWVtb2l6ZWREYXRh
OworfTsKKwogZW51bSBQb3N0VHlwZSB7IFBvc3RTeW5jaHJvbm91c2x5LCBQb3N0QXN5bmNocm9u
b3VzbHkgfTsKIAogY2xhc3MgQVhPYmplY3RDYWNoZSB7CkBAIC0yMjAsNiArMjUwLDEyIEBAIGJv
b2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0cmluZyYgcm9sZSk7CiBib29sIGlzTm9kZUFy
aWFWaXNpYmxlKE5vZGUqKTsKICAgICAKICNpZiAhSEFWRShBQ0NFU1NJQklMSVRZKQorUmVhZE9u
bHlBWFRyYW5zYWN0aW9uKiBSZWFkT25seUFYVHJhbnNhY3Rpb246OnNfaW5zdGFuY2UgPSAwOwor
aW50IFJlYWRPbmx5QVhUcmFuc2FjdGlvbjo6c19pbnN0YW5jZUNvdW50ID0gMDsKK2lubGluZSBS
ZWFkT25seUFYVHJhbnNhY3Rpb246OlJlYWRPbmx5QVhUcmFuc2FjdGlvbigpIHsgfQoraW5saW5l
IFJlYWRPbmx5QVhUcmFuc2FjdGlvbjo6flJlYWRPbmx5QVhUcmFuc2FjdGlvbigpIHsgfQoraW5s
aW5lIFJlYWRPbmx5QVhUcmFuc2FjdGlvbjo6TWVtb2l6ZWREYXRhKiBSZWFkT25seUFYVHJhbnNh
Y3Rpb246OmdldE1lbW9pemVkRGF0YShBWElEIGlkKSBjb25zdCB7IHJldHVybiAwOyB9Citpbmxp
bmUgUmVhZE9ubHlBWFRyYW5zYWN0aW9uOjpNZW1vaXplZERhdGEqIFJlYWRPbmx5QVhUcmFuc2Fj
dGlvbjo6Z2V0T3JDcmVhdGVNZW1vaXplZERhdGEoQVhJRCBpZCkgeyByZXR1cm4gMDsgfQogaW5s
aW5lIEFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29uc3QgRG9jdW1lbnQqIGRvYykgOiBt
X2RvY3VtZW50KGNvbnN0X2Nhc3Q8RG9jdW1lbnQqPihkb2MpKSwgbV9ub3RpZmljYXRpb25Qb3N0
VGltZXIodGhpcywgMCkgeyB9CiBpbmxpbmUgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUo
KSB7IH0KIGlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpmb2N1c2Vk
VUlFbGVtZW50Rm9yUGFnZShjb25zdCBQYWdlKikgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXgg
NDcyMjcwYzE4MmFiNzVlN2IwMjdmNDM1ZjFlMjVmZGJmMTdmNzIzNC4uYWNhZTk5ZDE1MmExZWY3
Zjc0OGNmZDRjZmM3NTQ2NGY4YzAxZTU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC00NDgsNiArNDQ4LDEwIEBA
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6ZmluZE1hdGNoaW5nT2JqZWN0cyhBY2Nlc3NpYmls
aXR5U2VhcmNoQ3JpdGVyaWEqIGNyaXRlCiAgICAgaWYgKCFjcml0ZXJpYSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgLy8gVHVybiBvbiBtZW1vaXphdGlvbiB0byBtaW5pbWl6ZSByZWR1bmRhbnQg
Y29tcHV0YXRpb24gZHVyaW5nIHRoZSBkdXJhdGlvbiBvZiB0aGlzCisgICAgLy8gbWV0aG9kLCB3
aGVyZSB3ZSBjYW4gZ3VhcmFudGVlIHRoZSB0cmVlIHdvbid0IGNoYW5nZS4KKyAgICBSZWFkT25s
eUFYVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247CisKICAgICAvLyBUaGlzIHNlYXJjaCBtZWNoYW5p
c20gb25seSBzZWFyY2hlcyB0aGUgZWxlbWVudHMgYmVmb3JlL2FmdGVyIHRoZSBzdGFydGluZyBv
YmplY3QuCiAgICAgLy8gSXQgZG9lcyB0aGlzIGJ5IHN0ZXBwaW5nIHVwIHRoZSBwYXJlbnQgY2hh
aW4gYW5kIGF0IGVhY2ggbGV2ZWwgZG9pbmcgYSBERlMuCiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAppbmRleCA2YTllYjNmZjFiMGQ4OTAxZTQxMGRlOTVkNzk0MzExNmIzY2U5ZDQ4Li41ZTMwMGM1
NjQwOGZhZDUxMzc3ZjAyOTE4OGE1MGJiMGM5YTY4OWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
QEAgLTExMjMsOSArMTEyMywzMSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWRCYQogICAgICAgICAK
ICAgICByZXR1cm4gRGVmYXVsdEJlaGF2aW9yOwogfSAgCi0gCisKIGJvb2wgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiB7CisgICAgUmVh
ZE9ubHlBWFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IFJlYWRPbmx5QVhUcmFuc2FjdGlvbjo6
aW5zdGFuY2UoKTsKKyAgICBpZiAodHJhbnNhY3Rpb24pIHsKKyAgICAgICAgaWYgKFJlYWRPbmx5
QVhUcmFuc2FjdGlvbjo6TWVtb2l6ZWREYXRhKiBtZW1vaXplZERhdGEgPSB0cmFuc2FjdGlvbi0+
Z2V0TWVtb2l6ZWREYXRhKGF4T2JqZWN0SUQoKSkpIHsKKyAgICAgICAgICAgIGlmIChtZW1vaXpl
ZERhdGEtPmlnbm9yZWQgPT0gSWdub3JlT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgaWYgKG1lbW9pemVkRGF0YS0+aWdub3JlZCA9PSBJbmNsdWRlT2Jq
ZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgcmVzdWx0ID0gY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKKworICAg
IGlmICh0cmFuc2FjdGlvbikgeworICAgICAgICBpZiAoUmVhZE9ubHlBWFRyYW5zYWN0aW9uOjpN
ZW1vaXplZERhdGEqIG1lbW9pemVkRGF0YSA9IHRyYW5zYWN0aW9uLT5nZXRPckNyZWF0ZU1lbW9p
emVkRGF0YShheE9iamVjdElEKCkpKQorICAgICAgICAgICAgbWVtb2l6ZWREYXRhLT5pZ25vcmVk
ID0gcmVzdWx0ID8gSWdub3JlT2JqZWN0IDogSW5jbHVkZU9iamVjdDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1
dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKK3sKICAgICAvLyBDaGVjayBmaXJzdCBp
ZiBhbnkgb2YgdGhlIGNvbW1vbiByZWFzb25zIGNhdXNlIHRoaXMgZWxlbWVudCB0byBiZSBpZ25v
cmVkLgogICAgIC8vIFRoZW4gcHJvY2VzcyBvdGhlciB1c2UgY2FzZXMgdGhhdCBuZWVkIHRvIGJl
IGFwcGxpZWQgdG8gYWxsIHRoZSB2YXJpb3VzIHJvbGVzCiAgICAgLy8gdGhhdCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0cyB0YWtlIG9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCA5N2JmOGEzN2Zk
NjM1NTQ1N2Y0M2JhNGE2YWYwYjA0MzIzN2ZmZjJhLi40Mzc0YjFhNDU1ZjI4YzhjNTg1NjI5YThm
ODdmM2M4Y2ZjYTZmYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApAQCAtMjc3LDYgKzI3Nyw4IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFyaWFMaXZlUmVnaW9uQnVzeSgpIGNvbnN0OyAgICAK
ICAgICAKICAgICBib29sIGluaGVyaXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3Q7CisKKyAg
ICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAgCiAjaWYg
RU5BQkxFKE1BVEhNTCkKICAgICAvLyBBbGwgbWF0aCBlbGVtZW50cyByZXR1cm4gdHJ1ZSBmb3Ig
aXNNYXRoRWxlbWVudCgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IGVkM2UxNzE3ZTIwODI3OGJhYTIyNTMw
NjgxZmYyZDA5NDYyMDIxM2QuLjY2MzVjYzdjZDVhMmJlMTViODcxNmY5NGMzZTM3MDY3YmFjMDdj
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0LmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIldlYkFjY2Vz
c2liaWxpdHlSb2xlLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCisjaW5jbHVk
ZSAicGxhdGZvcm0vV2ViUHJpdmF0ZU93blB0ci5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBy
aXZhdGVQdHIuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKIApAQCAtNDAsNyAr
NDEsMTIgQEAKIG5hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFz
c1JlZlB0cjsgfQogI2VuZGlmCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQWNjZXNzaWJp
bGl0eU9iamVjdDsgfQorbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBY2Nlc3NpYmlsaXR5
T2JqZWN0OworY2xhc3MgUmVhZE9ubHlBWFRyYW5zYWN0aW9uOworCit9CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCkBAIC01MSw2ICs1NywxOCBAQCBjbGFzcyBXZWJVUkw7CiBzdHJ1Y3QgV2ViUG9p
bnQ7CiBzdHJ1Y3QgV2ViUmVjdDsKIAorLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xh
c3Mgb24gdGhlIHN0YWNrIHRvIHRlbXBvcmFyaWx5IGVuYWJsZQorLy8gaW50ZXJuYWwgY2FjaGlu
ZyBvZiBhY2Nlc3NpYmlsaXR5IGRhdGEsIHRvIHNwZWVkIHVwIGEgc2VyaWVzIG9mIHJlYWQtb25s
eQorLy8gb3BlcmF0aW9ucyBvbiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlLgorY2xhc3MgV2ViUmVh
ZE9ubHlBY2Nlc3NpYmlsaXR5VHJhbnNhY3Rpb24geworcHVibGljOgorICAgIFdFQktJVF9FWFBP
UlQgV2ViUmVhZE9ubHlBY2Nlc3NpYmlsaXR5VHJhbnNhY3Rpb24oKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIH5XZWJSZWFkT25seUFjY2Vzc2liaWxpdHlUcmFuc2FjdGlvbigpOworCitwcml2YXRlOgor
ICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6UmVhZE9ubHlBWFRyYW5zYWN0aW9uPiBtX3By
aXZhdGU7Cit9OworCiAvLyBBIGNvbnRhaW5lciBmb3IgcGFzc2luZyBhcm91bmQgYSByZWZlcmVu
Y2UgdG8gQWNjZXNzaWJpbGl0eU9iamVjdC4KIGNsYXNzIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Qg
ewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA4MjViNThiMzAxYmIwODM1N2RiYTI1ZThjZTRkNTli
MzZiODg2ZTdjLi4yMzg4MWNlZDYwMzU1ZTJmMzBlZGY2M2U5N2Y3MDRkOTdkNWZmZjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcApAQCAtNTUsNiArNTUsMTYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCitXZWJSZWFkT25seUFjY2Vzc2liaWxpdHlUcmFuc2FjdGlvbjo6
V2ViUmVhZE9ubHlBY2Nlc3NpYmlsaXR5VHJhbnNhY3Rpb24oKQoreworICAgIG1fcHJpdmF0ZS5y
ZXNldChuZXcgUmVhZE9ubHlBWFRyYW5zYWN0aW9uKCkpOworfQorCitXZWJSZWFkT25seUFjY2Vz
c2liaWxpdHlUcmFuc2FjdGlvbjo6fldlYlJlYWRPbmx5QWNjZXNzaWJpbGl0eVRyYW5zYWN0aW9u
KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CisKIHZvaWQgV2ViQWNjZXNzaWJpbGl0
eU9iamVjdDo6cmVzZXQoKQogewogICAgIG1fcHJpdmF0ZS5yZXNldCgpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDMzYzI3OTlhOTJjNzkzODY1
OTc0NDZiZTIzNTVmNzBhY2NhNjhkZDEuLjkwOWUxY2M1NTM0ZGU2YTExOWQ3YTkwNzAyZDNhM2E4
MWMzNTk1ZGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMy0wMS0yNCAgRG9taW5pYyBNYXp6b25pICA8ZG1henpv
bmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbWVtb2l6ZSBleHBlbnNpdmUgY29tcHV0YXRp
b24gZHVyaW5nIGJsb2NrcyB3aGVyZSB0cmVlIGRvZXNuJ3QgY2hhbmdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY0OTcKKworICAgICAgICBBZGQg
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuc3RhcnRNZW1vaXphdGlvbiBhbmQKKyAgICAgICAgYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuc3RvcE1lbW9pemF0aW9uIHNvIHRoYXQgaXQncworICAgICAg
ICBwb3NzaWJsZSB0byB0ZXN0IG1lbW9pemF0aW9uIGV4cGxpY2l0bHkgLSBjdXJyZW50bHkgb25s
eQorICAgICAgICBmcm9tIENocm9taXVtLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoc3RhcnRNZW1vaXppbmdDYWxsYmFjayk6CisgICAgICAgIChzdG9w
TWVtb2l6aW5nQ2FsbGJhY2spOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpOgorICAgICAgICAoV2Vi
VGVzdFJ1bm5lcjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJUZXN0UnVubmVyOjpB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RvcE1lbW9pemluZ0NhbGxiYWNrKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlckNocm9taXVtLmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNw
cDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdGFydE1lbW9pemluZyk6Cisg
ICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RvcE1lbW9pemluZyk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcDoKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdGFydE1lbW9pemluZyk6CisgICAgICAg
IChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RvcE1lbW9pemluZyk6CisKIDIwMTMtMDEtMjIg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBF
bmFibGUgUGFnZSBWaXNpYmlsaXR5IChQQUdFX1ZJU0lCSUxJVFlfQVBJKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4IDQ5ZDQ1M2E4
NGNkZWJjZGI4YTMyMjZiZmQ5MmNjODExODI0YTY1NzMuLmYzOTIwZDBiYzI4Nzk4Y2Y5MGU0NTI4
NDg4YWU1NTk5OTA5M2Q5MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5jcHAKQEAgLTg0LDYgKzg0LDIwIEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IGxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVj
dFJlZiwKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKIH0KIAorc3RhdGlj
IEpTVmFsdWVSZWYgc3RhcnRNZW1vaXppbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVm
W10sIEpTVmFsdWVSZWYqKQoreworICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBjb250cm9s
bGVyID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnN0YXJ0TWVtb2l6aW5nKCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
UmVmIHN0b3BNZW1vaXppbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFs
dWVSZWYqKQoreworICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3Rh
dGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnN0b3BNZW1vaXppbmcoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgZ2V0RWxl
bWVudEF0UG9pbnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAg
aW50IHggPSAwOwpAQCAtMTM4LDYgKzE1Miw4IEBAIEpTQ2xhc3NSZWYgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmdldEpTQ2xhc3MoKQogICAgICAgICB7ICJhY2Nlc3NpYmxlRWxlbWVudEJ5SWQi
LCBnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJh
ZGROb3RpZmljYXRpb25MaXN0ZW5lciIsIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIiLCByZW1vdmVO
b3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInN0YXJ0TWVt
b2l6aW5nIiwgc3RhcnRNZW1vaXppbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzdG9w
TWVtb2l6aW5nIiwgc3RvcE1lbW9pemluZ0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwg
MCwgMCB9CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmgKaW5kZXggYTZjZGM0Njg2YzEzMmZmNTg2ZDU4MmZlNTFhMDc2OGVlNzJjMDEw
MC4uMDBhY2VkMDA5MDVjYjIwOTRhNzMxMDRhMDdkM2FiNjhhOWUwZmVjYSAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCkBAIC01Myw2ICs1Myw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExvZ1Njcm9sbGluZ1N0YXJ0RXZlbnRzKGJvb2wpOwog
ICAgIHZvaWQgc2V0TG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhib29sKTsKIAorICAgIHZvaWQgc3Rh
cnRNZW1vaXppbmcoKTsKKyAgICB2b2lkIHN0b3BNZW1vaXppbmcoKTsKKwogICAgIHZvaWQgcmVz
ZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwogCiAgICAgLy8gR2xvYmFsIG5vdGlmaWNhdGlvbiBsaXN0
ZW5lciwgY2FwdHVyZXMgbm90aWZpY2F0aW9ucyBvbiBhbnkgb2JqZWN0LgpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcAppbmRleCA1
ZjFiNGY5YTkyZDI3NTUzYjUzNjVlM2NhYTA2MWUwNjRiZDc0ZjlkLi5jOTM3YzZiNmRlYWE4ZGU0
ZDEwMWY3OGI4M2IwZTFhOWRhOGU5NTQxIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVt
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmNwcApAQCAtNDUsOCArNDUsOCBAQCBuYW1l
c3BhY2UgV2ViVGVzdFJ1bm5lciB7CiAKIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcigpCiAgICAgOiBtX2xvZ0FjY2Vzc2liaWxpdHlFdmVudHMoZmFsc2Up
CisgICAgLCBtX3RyYW5zYWN0aW9uKDApCiB7Ci0KICAgICBiaW5kTWV0aG9kKCJsb2dBY2Nlc3Np
YmlsaXR5RXZlbnRzIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpsb2dBY2Nlc3NpYmlsaXR5
RXZlbnRzQ2FsbGJhY2spOwogICAgIGJpbmRNZXRob2QoImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVy
IiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxi
YWNrKTsKICAgICBiaW5kTWV0aG9kKCJyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk7
CkBAIC01Niw2ICs1Niw5IEBAIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcigpCiAKICAgICBiaW5kTWV0aG9kKCJhY2Nlc3NpYmxlRWxlbWVudEJ5SWQiLCAm
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZEdldHRlckNhbGxi
YWNrKTsKIAorICAgIGJpbmRNZXRob2QoInN0YXJ0TWVtb2l6aW5nIiwgJkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpzdGFydE1lbW9pemluZ0NhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJzdG9w
TWVtb2l6aW5nIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5nQ2FsbGJh
Y2spOworCiAgICAgYmluZEZhbGxiYWNrTWV0aG9kKCZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
ZmFsbGJhY2tDYWxsYmFjayk7CiB9CiAKQEAgLTE5Niw2ICsxOTksMTkgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkR2V0dGVyQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW0KICAgICByZXN1bHQtPnNldCgqKGZvdW5kRWxlbWVudC0+Z2V0QXNDcHBWYXJp
YW50KCkpKTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RhcnRNZW1vaXpp
bmdDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIG1fdHJhbnNhY3Rpb24gPSBu
ZXcgV2ViUmVhZE9ubHlBY2Nlc3NpYmlsaXR5VHJhbnNhY3Rpb24oKTsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6c3RvcE1lbW9pemluZ0NhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5z
ZXROdWxsKCk7CisgICAgZGVsZXRlIG1fdHJhbnNhY3Rpb247CisgICAgbV90cmFuc2FjdGlvbiA9
IDA7Cit9CisKIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIG1fZGVs
ZWdhdGUtPnByaW50TWVzc2FnZSgiQ09OU09MRSBNRVNTQUdFOiBKYXZhU2NyaXB0IEVSUk9SOiB1
bmtub3duIG1ldGhvZCBjYWxsZWQgb24gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJcbiIpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oCmlu
ZGV4IGE5NzI4YzYxNWJiNGY1MDVmZTFlY2E2YTJmNjRjZmZhZTk0YTE1NWIuLjc4ZTA1ZWUwNzYx
ODU5M2U5MGY5ZjA1ODQxYzE1NWRkMDc4OTBiYmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hy
b21pdW0uaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgKQEAgLTM3LDYgKzM3LDcgQEAKIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKIGNsYXNzIFdl
YkZyYW1lOworY2xhc3MgV2ViUmVhZE9ubHlBY2Nlc3NpYmlsaXR5VHJhbnNhY3Rpb247CiBjbGFz
cyBXZWJWaWV3OwogfQogCkBAIC03OCw2ICs3OSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByb290
RWxlbWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGFjY2Vzc2libGVF
bGVtZW50QnlJZEdldHRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKIAorICAgIHZvaWQgc3RhcnRNZW1vaXppbmdDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzdG9wTWVtb2l6aW5nQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCiAgICAgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCogZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShjb25zdCBXZWJLaXQ6
OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgaWQpOwog
CiAgICAgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG1fZm9jdXNlZEVsZW1lbnQ7CkBA
IC04Nyw2ICs5MSw4IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnZlY3RvcjxDcHBWYXJpYW50PiBt
X25vdGlmaWNhdGlvbkNhbGxiYWNrczsKIAorICAgIFdlYktpdDo6V2ViUmVhZE9ubHlBY2Nlc3Np
YmlsaXR5VHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247CisKICAgICBUZXN0RGVsZWdhdGUqIG1f
ZGVsZWdhdGU7CiAgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7CiB9OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5j
cHAKaW5kZXggNzBmMDgxYTllZjkyNjE4NmIzMjE0MGRmMDc5NWEzODRlYzdjMGM4MC4uMjNhMTNj
NDEyODA3MTM5NGZhM2ExZTNjYjZkZWNiMzIxZTkxOTVmMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwCkBAIC0x
NDEsNiArMTQxLDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNldExvZ0FjY2Vz
c2liaWxpdHlFdmVudHMoYm9vbCBsb2dBY2Nlc3NpYmlsaXR5RXZlCiAgICAgbG9nZ2luZ0FjY2Vz
c2liaWxpdHlFdmVudHMgPSB0cnVlOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpzdGFydE1lbW9pemluZygpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnN0b3BNZW1vaXppbmcoKQoreworfQorCiBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjph
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZikKIHsKICAgICByZXR1cm4gZmFsc2U7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJNYWMubW0KaW5kZXggMDkwOWI4NmZhYzNlZGUwOGFlMjk1M2ZmMmE1YmIyYTU0OWNjZDg1
NS4uOTU1N2M3OTUyOGQyN2ZhN2YzZWUyNDFmYzAxODI5NGQ3ZWEzNTUwMSAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5t
bQpAQCAtMTE5LDYgKzExOSwxNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRM
b2dBY2Nlc3NpYmlsaXR5RXZlbnRzKGJvb2wpCiB7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnN0YXJ0TWVtb2l6aW5nKCkKK3sKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6c3RvcE1lbW9pemluZygpCit7Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTT2JqZWN0UmVmIGZ1bmN0aW9uQ2FsbGJh
Y2spCiB7CiAgICAgaWYgKCFmdW5jdGlvbkNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcldpbi5jcHAKaW5kZXggOTk1
YzVmMTE1YzJlYTNkOThjODY3MjJlNGRkZjM4ZDBjM2Y1NTBiYy4uNzhlOGFmODYyMTlmMTRlZGFk
NTJjOTJlZjc0Mjc5NmQwMjZiNDM0MiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCkBAIC0yOTYsNiArMjk2LDE0
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3Rl
bmVyKCkKIHsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c3RhcnRNZW1vaXpp
bmcoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzdG9wTWVtb2l6aW5n
KCkKK3sKK30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9u
UmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5h
bWUpCiB7CiAgICAgZm9yIChIYXNoTWFwPFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46
Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9u
b3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhNTI4NGYzYTJmOTc0
ZGFlZWEyY2RjNWViN2FkNTVkMWRiMmU5NWJhLi40NzRmMzkwOWNjMDgwNjUzZGUyODA1NmE1MjMz
MjNiY2VkN2E5ZDc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMDEtMjQgIERvbWluaWMg
TWF6em9uaSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IG1lbW9pemUgZXhw
ZW5zaXZlIGNvbXB1dGF0aW9uIGR1cmluZyBibG9ja3Mgd2hlcmUgdHJlZSBkb2Vzbid0IGNoYW5n
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NDk3
CisKKyAgICAgICAgQWRkcyBuZXcgdGVzdCB0aGF0IHVzZXMgYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuc3RhcnRNZW1vaXphdGlvbigpCisgICAgICAgIHRvIHRlc3QgdGhhdCB3aGVuIG1lbW9pemF0
aW9uIGlzIG9uLCB0aGUgaWdub3JlZCBzdGF0ZSBvZiBhIG5vZGUgaXMKKyAgICAgICAgbm90IHJl
Y29tcHV0ZWQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlzaWdub3JlZC5odG1sOiBBZGRlZC4K
KwogMjAxMy0wMS0yMiAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gVXBkYXRlIHRlc3QgZXhwZWN0YXRpb25zCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZhYjA1ZTcyNzM2YTA4NzBiYjczZTMyMTFiNTJjZGJiMDFiNDgxZWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDIwIEBACitUZXh0CisKK1Rlc3RzIHRoYXQgdHVybmluZyBv
biBtZW1vaXphdGlvbiBjYXVzZXMgdGhlIGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIHN0b3Ag
Y29tcHV0aW5nIHdoZXRoZXIgaXQncyBpZ25vcmVkIG9yIG5vdC4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1dpdGhvdXQgbWVtb2l6YXRpb246CitQQVNTIGZpbmRBWEVsZW1lbnQo
ImRpdiIpICE9IG51bGwgaXMgZmFsc2UKK1BBU1MgZGl2LnNldEF0dHJpYnV0ZSgicm9sZSIsICJo
ZWFkaW5nIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgdHJ1ZQorUEFTUyBkaXYu
cmVtb3ZlQXR0cmlidXRlKCJyb2xlIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMg
ZmFsc2UKKworV2l0aCBtZW1vaXphdGlvbjoKK1BBU1MgZmluZEFYRWxlbWVudCgiZGl2IikgIT0g
bnVsbCBpcyBmYWxzZQorUEFTUyBkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgImhlYWRpbmciKTsg
ZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCBpcyBmYWxzZQorUEFTUyBkaXYucmVtb3ZlQXR0
cmlidXRlKCJyb2xlIik7IGZpbmRBWEVsZW1lbnQoImRpdiIpICE9IG51bGwgaXMgZmFsc2UKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWwgYi9M
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjViYjdlYTQyMGM1MTg0YTZhMWU2MzNiYTBiMDQxNDAzNjY4MDFhOAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbApA
QCAtMCwwICsxLDQzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8
ZGl2PgorICA8ZGl2IGlkPSJkaXYiPgorICAgIDxwPlRleHQ8L3A+CisgIDwvZGl2PgorPC9kaXY+
CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHR1cm5pbmcgb24gbWVtb2l6YXRp
b24gY2F1c2VzIHRoZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBzdG9wIGNvbXB1dGluZyB3
aGV0aGVyIGl0J3MgaWdub3JlZCBvciBub3QuIik7CisKK2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cuZmluZEFYRWxlbWVudCA9IGZ1bmN0aW9uKGlkKSB7
CisgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKGlkKTsKKyAgICB9OworICAgIHdpbmRvdy5kaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZGl2Jyk7CisKKyAgICBkZWJ1ZygnV2l0aG91dCBtZW1vaXphdGlvbjonKTsKKyAgICBzaG91
bGRCZSgnZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworICAgIHNob3Vs
ZEJlKCdkaXYuc2V0QXR0cmlidXRlKCJyb2xlIiwgImhlYWRpbmciKTsgZmluZEFYRWxlbWVudCgi
ZGl2IikgIT0gbnVsbCcsICd0cnVlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5yZW1vdmVBdHRyaWJ1
dGUoInJvbGUiKTsgZmluZEFYRWxlbWVudCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworCisg
ICAgZGVidWcoJ1xuV2l0aCBtZW1vaXphdGlvbjonKTsKKyAgICBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5zdGFydE1lbW9pemluZygpOworICAgIHNob3VsZEJlKCdmaW5kQVhFbGVtZW50KCJkaXYi
KSAhPSBudWxsJywgJ2ZhbHNlJyk7CisgICAgc2hvdWxkQmUoJ2Rpdi5zZXRBdHRyaWJ1dGUoInJv
bGUiLCAiaGVhZGluZyIpOyBmaW5kQVhFbGVtZW50KCJkaXYiKSAhPSBudWxsJywgJ2ZhbHNlJyk7
CisgICAgc2hvdWxkQmUoJ2Rpdi5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKTsgZmluZEFYRWxlbWVu
dCgiZGl2IikgIT0gbnVsbCcsICdmYWxzZScpOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LnN0b3BNZW1vaXppbmcoKTsKK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCAyMmJmNTdh
MmZkM2M5ZTQyNDU0OGI5OTQwYjI4NzUxMTk4ODZiYTQzLi4yMjkyOTU0ZWNmMWZjOWVlYmQ5NjIx
NDU4Y2U4NTIwZjBkNGUxNGU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtNjkzLDYgKzY5Myw5IEBAIHdlYmtpdC5vcmcvYi85ODM1MCBhY2Nlc3NpYmls
aXR5L2FyaWEtaW52YWxpZC5odG1sIFsgVGltZW91dCBdCiAjIE1pc3NpbmcgRFJUIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lciBpbXBsZW1lbnRhdGlvbgog
d2Via2l0Lm9yZy9iLzcwNjA2IGFjY2Vzc2liaWxpdHkvYXJpYS1jaGVja2JveC1zZW5kcy1ub3Rp
ZmljYXRpb24uaHRtbCBbIFRpbWVvdXQgXQogCisjIE1pc3NpbmcgRFJUIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpzdGFydE1lbW9pemluZyBpbXBsZW1lbnRhdGlvbgord2Via2l0Lm9yZy9iLzEw
NjY5NSBhY2Nlc3NpYmlsaXR5L21lbW9pemUtaXNpZ25vcmVkLmh0bWwgWyBGYWlsdXJlIF0KKwog
d2Via2l0Lm9yZy9iLzczMDAzIFsgUmVsZWFzZSBdIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVj
ay1hc3luYy5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvNzMwMDMgWyBSZWxlYXNlIF0g
ZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXBhc3RlLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtp
dC5vcmcvYi81MDc0MCBbIFJlbGVhc2UgXSBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVl
dWUuaHRtbCBbIFRpbWVvdXQgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0
aW9ucwppbmRleCAyZThkODg1NWEyOWM1NWUzMmI2MjdhMjMxOWQxMGRhMDU1Njc2OGE2Li43Y2Vh
OWM1MDY4OWUzOTQxMDExMTcyMTI2NzMzOWMzYTVhM2RkMmMwIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNDQsNiArNDQsNyBAQCBhY2Nlc3NpYmlsaXR5
L2RvY3VtZW50LWF0dHJpYnV0ZXMuaHRtbAogYWNjZXNzaWJpbGl0eS9hcmlhLW1lbnViYXItbWVu
dWl0ZW1zLmh0bWwKIAogIyBBY2Nlc3NpYmlsaXR5IHRlc3RzIHdpdGggbWlzc2luZyBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlciBmdW5jdGlvbmFsaXR5LgorYWNjZXNzaWJpbGl0eS9tZW1vaXplLWlz
aWdub3JlZC5odG1sCiBhY2Nlc3NpYmlsaXR5L3NlbGVjdGlvbi1zdGF0ZXMuaHRtbAogCiAjIEFj
Y2Vzc2liaWxpdHkgdGVzdHMgZm9yIG5vdGlmaWNhdGlvbnMgdGhhdCBkb24ndCBleGlzdCBvciBh
cmVuJ3QgbmVlZGVkIG9uIE1hYyBPUyBYLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4
cGVjdGF0aW9ucwppbmRleCA2YmQxMmQ3MDBhMWY5NDZmYzY5NGRkZmM0MWQwN2EwMWJkNjhiNzkx
Li5kYzFiNTg5OTM5NjljNGZlMjNhNzhlNjBlOGM3ZmMxYzNiNTJhYTBkIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjMwLDYgKzYzMCw3IEBAIGFjY2Vz
c2liaWxpdHkvbGFuZ3VhZ2UtYXR0cmlidXRlLmh0bWwKIGFjY2Vzc2liaWxpdHkvbGVnZW5kLmh0
bWwKIGFjY2Vzc2liaWxpdHkvbGlzdHMuaHRtbAogYWNjZXNzaWJpbGl0eS9tZWRpYS1lbGVtZW50
Lmh0bWwKK2FjY2Vzc2liaWxpdHkvbWVtb2l6ZS1pc2lnbm9yZWQuaHRtbAogYWNjZXNzaWJpbGl0
eS9ub2NoaWxkcmVuLWVsZW1lbnRzLmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9uLWRhdGEtdGFibGUt
Y2VsbC10aXRsZS11aS1lbGVtZW50Lmh0bWwKIGFjY2Vzc2liaWxpdHkvbm9uLW5hdGl2ZS1pbWFn
ZS1jcmFzaC5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184705</attachid>
            <date>2013-01-25 02:09:21 -0800</date>
            <delta_ts>2013-01-25 07:50:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130125020613.patch</filename>
            <type>text/plain</type>
            <size>15171</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMzOWQyY2VjZDRlOWVk
ODhhNDQxYTY0M2RlMjE0NTA5YTc1ODIyOS4uODI1MDcxNjk1MDIyMTJkOTJjMmYwOTI5NTdlOWZl
NmIzMjE0ZDQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAxLTI1ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIGNhY2hlIGZvciBjb21wdXRlZCBhdHRyaWJ1dGVzIG9mIEFYT2JqZWN0cy4KKyAgICAgICAg
VGhlIGNhY2hlIGNhbiBiZSBlbmFibGVkIGF0IHRoZSBzdGFydCBvZiBhIGJhdGNoIG9mCisgICAg
ICAgIHJlYWQtb25seSBvcGVyYXRpb25zIG9uIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUsIGFuZAor
ICAgICAgICBpdCdzIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSB0cmVlIG11dGF0ZXMu
CisgICAgICAgIEN1cnJlbnRseSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGlzIGNhY2hlZCwgc2lu
Y2UgaXQncworICAgICAgICBmcmVxdWVudGx5IGNhbGxlZCBhbmQgcmVsYXRpdmVseSBleHBlbnNp
dmUgdG8gY29tcHV0ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OmdldElnbm9yZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25v
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VOb3RpZmlj
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xsYmFy
VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNhY2hlQ29tcHV0ZWRP
YmplY3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjpzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcyk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChBWENvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlOjpDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXM6OkNhY2hlZEFYT2JqZWN0QXR0
cmlidXRlcyk6CisgICAgICAgIChDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjb21wdXRlZE9iamVj
dEF0dHJpYnV0ZUNhY2hlKToKKyAgICAgICAgKEFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpnZXRJZ25vcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6c2V0SWdub3JlZCk6
CisgICAgICAgIChXZWJDb3JlOjpjYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJl
ZU11dGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZXMpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kTWF0Y2hpbmdP
YmplY3RzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
aDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAyMDEzLTAxLTI0ICBN
YXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIEZpbHRlcnNd
IENTUyBvcGFjaXR5IHByb3BlcnR5IGNsaXBzIGZpbHRlciBvdXRzZXRzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDBlZmM1NDRiZTdjZWU2ZTFkNTBiMGM4ZDE4ZjhhNzJkMmRlZThjY2Yu
LjJkZmQwODMyZTk5MjA5OTNhY2JkY2Y4OGIyNDc4NDBmMTFhNTQ0NTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDEtMjUgIERvbWluaWMgTWF6em9u
aSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IG1lbW9pemUgZXhwZW5zaXZl
IGNvbXB1dGF0aW9uIGR1cmluZyBibG9ja3Mgd2hlcmUgdHJlZSBkb2Vzbid0IGNoYW5nZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NDk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3NlIHR3byBt
ZXRob2RzIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSBjYWNoaW5nIG9mCisgICAgICAgIGNvbXB1dGVk
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgYXR0cmlidXRlcywgdG8gc3BlZWQgdXAKKyAgICAgICAg
YmF0Y2ggcmVhZC1vbmx5IG9wZXJhdGlvbnMuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAg
ICAgICogc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGls
VHJlZU11dGF0ZXMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNj
ZXNzaWJpbGl0eU9iamVjdDo6c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMpOgor
CiAyMDEzLTAxLTI0ICBNaWhhaSBNYWVyZWFuICA8bW1hZXJlYW5AYWRvYmUuY29tPgogCiAgICAg
ICAgIFtDU1NSZWdpb25zXSByZW1vdmUgc2V0RXhwZXJpbWVudGFsQ1NTUmVnaW9uc0VuYWJsZWQg
ZGVwcmVjYXRlZCBBUEkgaW4gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGlu
Z3MuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
aW5kZXggNDdhNjQ5ZGI2ZjkzNzc2ZmE2NjdiMDU1NzEzYTRiOTg2YTA5ODVjOS4uMjM0ZTZlNzY4
NmM5NzYyOTFlM2FlMzU0YmQ0OWQwMmY0YWY5M2UyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC04Miw2ICs4MiwyNCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitBY2Nlc3NpYmls
aXR5T2JqZWN0SW5jbHVzaW9uIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6Z2V0SWdu
b3JlZChBWElEIGlkKSBjb25zdAoreworICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPENhY2hlZEFY
T2JqZWN0QXR0cmlidXRlcz4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2lkTWFwcGluZy5maW5k
KGlkKTsKKyAgICByZXR1cm4gaXQgIT0gbV9pZE1hcHBpbmcuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0
KCktPmlnbm9yZWQgOiBEZWZhdWx0QmVoYXZpb3I7Cit9CisKK3ZvaWQgQVhDb21wdXRlZE9iamVj
dEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVkKEFYSUQgaWQsIEFjY2Vzc2liaWxpdHlPYmplY3RJ
bmNsdXNpb24gaW5jbHVzaW9uKQoreworICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPENhY2hlZEFY
T2JqZWN0QXR0cmlidXRlcz4gPjo6aXRlcmF0b3IgaXQgPSBtX2lkTWFwcGluZy5maW5kKGlkKTsK
KyAgICBpZiAoaXQgIT0gbV9pZE1hcHBpbmcuZW5kKCkpCisgICAgICAgIGl0LT52YWx1ZS5nZXQo
KS0+aWdub3JlZCA9IGluY2x1c2lvbjsKKyAgICBlbHNlIHsKKyAgICAgICAgQ2FjaGVkQVhPYmpl
Y3RBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzID0gbmV3IENhY2hlZEFYT2JqZWN0QXR0cmlidXRlcygp
OworICAgICAgICBhdHRyaWJ1dGVzLT5pZ25vcmVkID0gaW5jbHVzaW9uOworICAgICAgICBtX2lk
TWFwcGluZy5zZXQoaWQsIGFkb3B0UmVmKGF0dHJpYnV0ZXMpKTsKKyAgICB9Cit9CiAgICAgCiBi
b29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3NpYmlsaXR5RW5hYmxlZCA9IGZhbHNlOwogYm9vbCBB
WE9iamVjdENhY2hlOjpnQWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQg
PSBmYWxzZTsKQEAgLTYzNiw2ICs2NTQsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3Rp
ZmljYXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQVhOb3RpZmljYXRpb24gbm90aQogICAg
IGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICBzdG9wQ2FjaGluZ0Nv
bXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworCiAgICAgLy8gR2V0IGFuIGFjY2Vzc2liaWxpdHkg
b2JqZWN0IHRoYXQgYWxyZWFkeSBleGlzdHMuIE9uZSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgaGVy
ZQogICAgIC8vIGJlY2F1c2UgYSByZW5kZXIgdXBkYXRlIG1heSBiZSBpbiBwcm9ncmVzcyBhbmQg
Y3JlYXRpbmcgYW4gQVggb2JqZWN0IGNhbiByZS10cmlnZ2VyIGEgbGF5b3V0CiAgICAgUmVmUHRy
PEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IGdldChyZW5kZXJlcik7CkBAIC02NTUsNiAr
Njc1LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKE5vZGUqIG5vZGUs
IEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwgYm8KICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybjsKICAgICAKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygp
OworCiAgICAgLy8gR2V0IGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRoYXQgYWxyZWFkeSBleGlz
dHMuIE9uZSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgaGVyZQogICAgIC8vIGJlY2F1c2UgYSByZW5k
ZXIgdXBkYXRlIG1heSBiZSBpbiBwcm9ncmVzcyBhbmQgY3JlYXRpbmcgYW4gQVggb2JqZWN0IGNh
biByZS10cmlnZ2VyIGEgbGF5b3V0CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9i
amVjdCA9IGdldChub2RlKTsKQEAgLTY3MSw2ICs2OTMsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6
OnBvc3ROb3RpZmljYXRpb24oTm9kZSogbm9kZSwgQVhOb3RpZmljYXRpb24gbm90aWZpY2F0aW9u
LCBibwogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqZWN0LCBEb2N1bWVudCogZG9jdW1lbnQsIEFYTm90aWZpY2F0aW9uIG5vdGlm
aWNhdGlvbiwgYm9vbCBwb3N0VG9FbGVtZW50LCBQb3N0VHlwZSBwb3N0VHlwZSkKIHsKKyAgICBz
dG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworCiAgICAgaWYgKG9iamVjdCAm
JiAhcG9zdFRvRWxlbWVudCkKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2Jq
ZWN0KCk7CiAKQEAgLTcxMiw2ICs3MzYsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0
Q2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqIG5vZGUsIEFYVGV4dENoYW5nZSB0ZXh0Q2hhbgogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3RvcENhY2hpbmdDb21wdXRlZE9i
amVjdEF0dHJpYnV0ZXMoKTsKKwogICAgIC8vIERlbGVnYXRlIG9uIHRoZSByaWdodCBwbGF0Zm9y
bQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IGdldE9yQ3JlYXRlKG5vZGUpOwogICAg
IG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqLCB0ZXh0Q2hhbmdlLCBvZmZz
ZXQsIHRleHQpOwpAQCAtNzM3LDggKzc2MywxMCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRs
ZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KiB2aWV3KQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBzY3JvbGwgdmlldyBmcm9tIHRoaXMg
bWV0aG9kLCBvbmx5IHVwZGF0ZSBhbiBleGlzdGluZyBvbmUuCi0gICAgaWYgKEFjY2Vzc2liaWxp
dHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBnZXQodmlldykpCisgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBnZXQodmlldykpIHsKKyAgICAgICAgc3Rv
cENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKICAgICAgICAgc2Nyb2xsVmlld09i
amVjdC0+dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOworICAgIH0KIH0KICAgICAKIHZvaWQg
QVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKE5vZGUqIG5vZGUpCkBAIC04
MDYsNiArODM0LDE3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVjb21wdXRlSXNJZ25vcmVkKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIG9iai0+bm90aWZ5SWZJZ25vcmVkVmFsdWVD
aGFuZ2VkKCk7CiB9CiAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6Y2FjaGVDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKCkKK3sKKyAgICBpZiAoIW1fY29tcHV0ZWRPYmplY3RB
dHRyaWJ1dGVDYWNoZSkKKyAgICAgICAgbV9jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlID0g
bmV3IEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSgpOworfQorCit2b2lkIEFYT2JqZWN0
Q2FjaGU6OnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCkKK3sKKyAgICBtX2Nv
bXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUuY2xlYXIoKTsKK30KKwogVmlzaWJsZVBvc2l0aW9u
IEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKFRleHRNYXJr
ZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSkKIHsKICAgICBpZiAoIWlzTm9kZUluVXNlKHRleHRNYXJr
ZXJEYXRhLm5vZGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaAppbmRleCA0ZWRmODE1MDNlMWVlNDM2MjY5MGI5ZGYzMDgyOWNiMWI3OTM4OWI5Li5iNGIz
MGY4NWUzNDkyNTEwYzVmZWU2MDlmNTFiMDNlY2ViNzM0MWU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtNTIsNiArNTIsMjEgQEAgc3RydWN0
IFRleHRNYXJrZXJEYXRhIHsKICAgICBFQWZmaW5pdHkgYWZmaW5pdHk7CiB9OwogCitjbGFzcyBB
WENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxBWENvbXB1
dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU+IHsKK3B1YmxpYzoKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW5jbHVzaW9uIGdldElnbm9yZWQoQVhJRCkgY29uc3Q7CisgICAgdm9pZCBzZXRJZ25vcmVk
KEFYSUQsIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24pOworCitwcml2YXRlOgorICAgIHN0
cnVjdCBDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXMgIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVk
QVhPYmplY3RBdHRyaWJ1dGVzPiB7CisgICAgICAgIENhY2hlZEFYT2JqZWN0QXR0cmlidXRlcygp
IDogaWdub3JlZChEZWZhdWx0QmVoYXZpb3IpIHsgfQorCisgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3RJbmNsdXNpb24gaWdub3JlZDsKKyAgICB9OworCisgICAgSGFzaE1hcDxBWElELCBSZWZQ
dHI8Q2FjaGVkQVhPYmplY3RBdHRyaWJ1dGVzPiA+IG1faWRNYXBwaW5nOworfTsKKwogZW51bSBQ
b3N0VHlwZSB7IFBvc3RTeW5jaHJvbm91c2x5LCBQb3N0QXN5bmNocm9ub3VzbHkgfTsKIAogY2xh
c3MgQVhPYmplY3RDYWNoZSB7CkBAIC0xODIsNiArMTk3LDExIEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgcm9sZSk7CiAKKyAgICB2
b2lkIGNhY2hlQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcygpOworICAg
IHZvaWQgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKworICAgIEFYQ29t
cHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSogY29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSgp
IHsgcmV0dXJuIG1fY29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZS5nZXQoKTsgfQorCiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9i
amVjdCosIEFYTm90aWZpY2F0aW9uKTsKICAgICB2b2lkIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1O
b3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYVGV4dENoYW5nZSwgdW5zaWduZWQg
b2Zmc2V0LCBjb25zdCBTdHJpbmcmKTsKQEAgLTIwMSw2ICsyMjEsNyBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8V2lkZ2V0KiwgQVhJRD4gbV93aWRnZXRPYmplY3RNYXBwaW5nOwogICAgIEhhc2hN
YXA8Tm9kZSosIEFYSUQ+IG1fbm9kZU9iamVjdE1hcHBpbmc7CiAgICAgSGFzaFNldDxOb2RlKj4g
bV90ZXh0TWFya2VyTm9kZXM7CisgICAgUmVmUHRyPEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVD
YWNoZT4gbV9jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOwogICAgIHN0YXRpYyBib29sIGdB
Y2Nlc3NpYmlsaXR5RW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuaGFu
Y2VkVXNlckludGVyZmFjZUVuYWJsZWQ7CiAgICAgCkBAIC0yMjAsNiArMjQxLDggQEAgYm9vbCBu
b2RlSGFzUm9sZShOb2RlKiwgY29uc3QgU3RyaW5nJiByb2xlKTsKIGJvb2wgaXNOb2RlQXJpYVZp
c2libGUoTm9kZSopOwogICAgIAogI2lmICFIQVZFKEFDQ0VTU0lCSUxJVFkpCitpbmxpbmUgQWNj
ZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6
OmdldElnbm9yZWQoQVhJRCkgeyByZXR1cm4gRGVmYXVsdEJlaGF2aW9yOyB9CitpbmxpbmUgdm9p
ZCBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OnNldElnbm9yZWQoQVhJRCwgQWNjZXNz
aWJpbGl0eU9iamVjdEluY2x1c2lvbikgeyB9CiBpbmxpbmUgQVhPYmplY3RDYWNoZTo6QVhPYmpl
Y3RDYWNoZShjb25zdCBEb2N1bWVudCogZG9jKSA6IG1fZG9jdW1lbnQoY29uc3RfY2FzdDxEb2N1
bWVudCo+KGRvYykpLCBtX25vdGlmaWNhdGlvblBvc3RUaW1lcih0aGlzLCAwKSB7IH0KIGlubGlu
ZSBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQogaW5saW5lIEFjY2Vzc2liaWxp
dHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBh
Z2UqKSB7IHJldHVybiAwOyB9CkBAIC0yMzQsNiArMjU3LDggQEAgaW5saW5lIEFjY2Vzc2liaWxp
dHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QoKSB7IHJldHVybiAwOyB9CiBpbmxp
bmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6cm9vdE9iamVjdEZvckZyYW1l
KEZyYW1lKikgeyByZXR1cm4gMDsgfQogaW5saW5lIEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJv
b3RBWEVkaXRhYmxlRWxlbWVudChOb2RlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIGJvb2wgbm9k
ZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUg
dm9pZCBjYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMoKSB7IH0K
K2lubGluZSB2b2lkIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCkgeyB9CiBp
bmxpbmUgYm9vbCBpc05vZGVBcmlhVmlzaWJsZShOb2RlKikgeyByZXR1cm4gdHJ1ZTsgfQogaW5s
aW5lIGNvbnN0IEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRhYmxlRWxlbWVudChj
b25zdCBOb2RlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6YXR0
YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA0NzIyNzBj
MTgyYWI3NWU3YjAyN2Y0MzVmMWUyNWZkYmYxN2Y3MjM0Li40ZDRlMmFhMTVlOWFiMjg0NjZhYTdi
YTAyNGY2NWVjNDQ3MmExMDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTQ0OCw2ICs0NDgsOCBAQCB2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJj
aENyaXRlcmlhKiBjcml0ZQogICAgIGlmICghY3JpdGVyaWEpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGF4T2JqZWN0Q2FjaGUoKS0+Y2FjaGVDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRy
ZWVNdXRhdGVzKCk7CisKICAgICAvLyBUaGlzIHNlYXJjaCBtZWNoYW5pc20gb25seSBzZWFyY2hl
cyB0aGUgZWxlbWVudHMgYmVmb3JlL2FmdGVyIHRoZSBzdGFydGluZyBvYmplY3QuCiAgICAgLy8g
SXQgZG9lcyB0aGlzIGJ5IHN0ZXBwaW5nIHVwIHRoZSBwYXJlbnQgY2hhaW4gYW5kIGF0IGVhY2gg
bGV2ZWwgZG9pbmcgYSBERlMuCiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA4YzZhMTEy
MjFiZDQ5Nzk3MTZmNWEzMDRhOGRhNDJhM2E4MWE0NzZhLi5jNTIzYzk0NjdjMGI2MjQzNTRhMzFj
MjgxMWNkYTZjMTRlMDJjNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTExMjEsMTMgKzEx
MjEsMzIgQEAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQmEKICAgICAgICAgCiAgICAgcmV0dXJuIERl
ZmF1bHRCZWhhdmlvcjsKIH0gIAotIAorCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogewogI2lmbmRlZiBOREVCVUcKICAgICBB
U1NFUlQobV9pbml0aWFsaXplZCk7CiAjZW5kaWYKIAorICAgIEFYQ29tcHV0ZWRPYmplY3RBdHRy
aWJ1dGVDYWNoZSogYXR0cmlidXRlQ2FjaGUgPSBheE9iamVjdENhY2hlKCktPmNvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlQ2FjaGUoKTsKKyAgICBpZiAoYXR0cmlidXRlQ2FjaGUpIHsKKyAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBpZ25vcmVkID0gYXR0cmlidXRlQ2FjaGUtPmdl
dElnbm9yZWQoYXhPYmplY3RJRCgpKTsKKyAgICAgICAgaWYgKGlnbm9yZWQgPT0gSWdub3JlT2Jq
ZWN0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpZ25vcmVkID09IElu
Y2x1ZGVPYmplY3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9v
bCByZXN1bHQgPSBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOworCisgICAgaWYgKGF0
dHJpYnV0ZUNhY2hlKQorICAgICAgICBhdHRyaWJ1dGVDYWNoZS0+c2V0SWdub3JlZChheE9iamVj
dElEKCksIHJlc3VsdCA/IElnbm9yZU9iamVjdCA6IEluY2x1ZGVPYmplY3QpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRl
QWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0Cit7CiAgICAgLy8gQ2hlY2sgZmlyc3QgaWYg
YW55IG9mIHRoZSBjb21tb24gcmVhc29ucyBjYXVzZSB0aGlzIGVsZW1lbnQgdG8gYmUgaWdub3Jl
ZC4KICAgICAvLyBUaGVuIHByb2Nlc3Mgb3RoZXIgdXNlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBh
cHBsaWVkIHRvIGFsbCB0aGUgdmFyaW91cyByb2xlcwogICAgIC8vIHRoYXQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdHMgdGFrZSBvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKaW5kZXggOTdiZjhhMzdmZDYz
NTU0NTdmNDNiYTRhNmFmMGIwNDMyMzdmZmYyYS4uNDM3NGIxYTQ1NWYyOGM4YzU4NTYyOWE4Zjg3
ZjNjOGNmY2E2ZmEyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKQEAgLTI3Nyw2ICsyNzcsOCBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBhcmlhTGl2ZVJlZ2lvbkJ1c3koKSBjb25zdDsgICAgCiAg
ICAgCiAgICAgYm9vbCBpbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgpIGNvbnN0OworCisgICAg
Ym9vbCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0OwogICAgIAogI2lmIEVO
QUJMRShNQVRITUwpCiAgICAgLy8gQWxsIG1hdGggZWxlbWVudHMgcmV0dXJuIHRydWUgZm9yIGlz
TWF0aEVsZW1lbnQoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAxZTY2MmFlYzdlZWU1ZDE3YmFjZTFhZTcx
MTEwMWMyOWE4ZGM3Njc2Li44OTM3YmMzZGQ3MDgxYmZhNTU4YjM2OWUzNjM3OTViOGEzOTQ5ZDVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdC5oCkBAIC03Niw2ICs3Niw5IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQ
T1JUIHN0YXRpYyB2b2lkIGVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKICAgICBXRUJLSVRfRVhQT1JU
IHN0YXRpYyBib29sIGFjY2Vzc2liaWxpdHlFbmFibGVkKCk7CiAKKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgY2FjaGVDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKCk7Cisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVz
KCk7CisKICAgICBXRUJLSVRfRVhQT1JUIGludCBheElEKCkgY29uc3Q7CiAKICAgICAvLyBVcGRh
dGUgdGhlIHVuZGVybHlpbmcgdHJlZSwgYW5kIHJldHVybiB0cnVlIGlmIHRoaXMgb2JqZWN0IGlz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCmluZGV4IDgyNWI1OGIzMDFiYjA4MzU3ZGJhMjVlOGNlNGQ1OWIzNmI4ODZlN2Mu
LjY3ODliZTBiNjg1N2M1ZWVkZDViNDE0ZDJlNzc4ZjJhNTFiNWRkNzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBA
IC04Miw2ICs4MiwxNiBAQCBib29sIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxp
dHlFbmFibGVkKCkKICAgICByZXR1cm4gQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJs
ZWQoKTsKIH0KIAordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjYWNoZUNvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMoKQoreworICAgIG1fcHJpdmF0ZS0+YXhPYmpl
Y3RDYWNoZSgpLT5jYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMo
KTsKK30KKwordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdG9wQ2FjaGluZ0NvbXB1dGVk
T2JqZWN0QXR0cmlidXRlcygpCit7CisgICAgbV9wcml2YXRlLT5heE9iamVjdENhY2hlKCktPnN0
b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7Cit9CisKIGJvb2wgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdDo6aXNEZXRhY2hlZCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcHJpdmF0ZS5p
c051bGwoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184753</attachid>
            <date>2013-01-25 07:51:03 -0800</date>
            <delta_ts>2013-01-25 11:07:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130125074754.patch</filename>
            <type>text/plain</type>
            <size>15177</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMzOWQyY2VjZDRlOWVk
ODhhNDQxYTY0M2RlMjE0NTA5YTc1ODIyOS4uODI1MDcxNjk1MDIyMTJkOTJjMmYwOTI5NTdlOWZl
NmIzMjE0ZDQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAxLTI1ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIGNhY2hlIGZvciBjb21wdXRlZCBhdHRyaWJ1dGVzIG9mIEFYT2JqZWN0cy4KKyAgICAgICAg
VGhlIGNhY2hlIGNhbiBiZSBlbmFibGVkIGF0IHRoZSBzdGFydCBvZiBhIGJhdGNoIG9mCisgICAg
ICAgIHJlYWQtb25seSBvcGVyYXRpb25zIG9uIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUsIGFuZAor
ICAgICAgICBpdCdzIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSB0cmVlIG11dGF0ZXMu
CisgICAgICAgIEN1cnJlbnRseSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGlzIGNhY2hlZCwgc2lu
Y2UgaXQncworICAgICAgICBmcmVxdWVudGx5IGNhbGxlZCBhbmQgcmVsYXRpdmVseSBleHBlbnNp
dmUgdG8gY29tcHV0ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OmdldElnbm9yZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25v
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VOb3RpZmlj
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xsYmFy
VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNhY2hlQ29tcHV0ZWRP
YmplY3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjpzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcyk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChBWENvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlOjpDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXM6OkNhY2hlZEFYT2JqZWN0QXR0
cmlidXRlcyk6CisgICAgICAgIChDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjb21wdXRlZE9iamVj
dEF0dHJpYnV0ZUNhY2hlKToKKyAgICAgICAgKEFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpnZXRJZ25vcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6c2V0SWdub3JlZCk6
CisgICAgICAgIChXZWJDb3JlOjpjYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJl
ZU11dGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZXMpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kTWF0Y2hpbmdP
YmplY3RzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
aDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAyMDEzLTAxLTI0ICBN
YXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIEZpbHRlcnNd
IENTUyBvcGFjaXR5IHByb3BlcnR5IGNsaXBzIGZpbHRlciBvdXRzZXRzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDBlZmM1NDRiZTdjZWU2ZTFkNTBiMGM4ZDE4ZjhhNzJkMmRlZThjY2Yu
LjJkZmQwODMyZTk5MjA5OTNhY2JkY2Y4OGIyNDc4NDBmMTFhNTQ0NTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDEtMjUgIERvbWluaWMgTWF6em9u
aSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IG1lbW9pemUgZXhwZW5zaXZl
IGNvbXB1dGF0aW9uIGR1cmluZyBibG9ja3Mgd2hlcmUgdHJlZSBkb2Vzbid0IGNoYW5nZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NDk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3NlIHR3byBt
ZXRob2RzIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSBjYWNoaW5nIG9mCisgICAgICAgIGNvbXB1dGVk
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgYXR0cmlidXRlcywgdG8gc3BlZWQgdXAKKyAgICAgICAg
YmF0Y2ggcmVhZC1vbmx5IG9wZXJhdGlvbnMuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAg
ICAgICogc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGls
VHJlZU11dGF0ZXMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNj
ZXNzaWJpbGl0eU9iamVjdDo6c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMpOgor
CiAyMDEzLTAxLTI0ICBNaWhhaSBNYWVyZWFuICA8bW1hZXJlYW5AYWRvYmUuY29tPgogCiAgICAg
ICAgIFtDU1NSZWdpb25zXSByZW1vdmUgc2V0RXhwZXJpbWVudGFsQ1NTUmVnaW9uc0VuYWJsZWQg
ZGVwcmVjYXRlZCBBUEkgaW4gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGlu
Z3MuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
aW5kZXggNDdhNjQ5ZGI2ZjkzNzc2ZmE2NjdiMDU1NzEzYTRiOTg2YTA5ODVjOS4uMjM0ZTZlNzY4
NmM5NzYyOTFlM2FlMzU0YmQ0OWQwMmY0YWY5M2UyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC04Miw2ICs4MiwyNCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitBY2Nlc3NpYmls
aXR5T2JqZWN0SW5jbHVzaW9uIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6Z2V0SWdu
b3JlZChBWElEIGlkKSBjb25zdAoreworICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPENhY2hlZEFY
T2JqZWN0QXR0cmlidXRlcz4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2lkTWFwcGluZy5maW5k
KGlkKTsKKyAgICByZXR1cm4gaXQgIT0gbV9pZE1hcHBpbmcuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0
KCktPmlnbm9yZWQgOiBEZWZhdWx0QmVoYXZpb3I7Cit9CisKK3ZvaWQgQVhDb21wdXRlZE9iamVj
dEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVkKEFYSUQgaWQsIEFjY2Vzc2liaWxpdHlPYmplY3RJ
bmNsdXNpb24gaW5jbHVzaW9uKQoreworICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPENhY2hlZEFY
T2JqZWN0QXR0cmlidXRlcz4gPjo6aXRlcmF0b3IgaXQgPSBtX2lkTWFwcGluZy5maW5kKGlkKTsK
KyAgICBpZiAoaXQgIT0gbV9pZE1hcHBpbmcuZW5kKCkpCisgICAgICAgIGl0LT52YWx1ZS5nZXQo
KS0+aWdub3JlZCA9IGluY2x1c2lvbjsKKyAgICBlbHNlIHsKKyAgICAgICAgQ2FjaGVkQVhPYmpl
Y3RBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzID0gbmV3IENhY2hlZEFYT2JqZWN0QXR0cmlidXRlcygp
OworICAgICAgICBhdHRyaWJ1dGVzLT5pZ25vcmVkID0gaW5jbHVzaW9uOworICAgICAgICBtX2lk
TWFwcGluZy5zZXQoaWQsIGFkb3B0UmVmKGF0dHJpYnV0ZXMpKTsKKyAgICB9Cit9CiAgICAgCiBi
b29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3NpYmlsaXR5RW5hYmxlZCA9IGZhbHNlOwogYm9vbCBB
WE9iamVjdENhY2hlOjpnQWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQg
PSBmYWxzZTsKQEAgLTYzNiw2ICs2NTQsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3Rp
ZmljYXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQVhOb3RpZmljYXRpb24gbm90aQogICAg
IGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICBzdG9wQ2FjaGluZ0Nv
bXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworCiAgICAgLy8gR2V0IGFuIGFjY2Vzc2liaWxpdHkg
b2JqZWN0IHRoYXQgYWxyZWFkeSBleGlzdHMuIE9uZSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgaGVy
ZQogICAgIC8vIGJlY2F1c2UgYSByZW5kZXIgdXBkYXRlIG1heSBiZSBpbiBwcm9ncmVzcyBhbmQg
Y3JlYXRpbmcgYW4gQVggb2JqZWN0IGNhbiByZS10cmlnZ2VyIGEgbGF5b3V0CiAgICAgUmVmUHRy
PEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IGdldChyZW5kZXJlcik7CkBAIC02NTUsNiAr
Njc1LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKE5vZGUqIG5vZGUs
IEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwgYm8KICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybjsKICAgICAKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygp
OworCiAgICAgLy8gR2V0IGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRoYXQgYWxyZWFkeSBleGlz
dHMuIE9uZSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgaGVyZQogICAgIC8vIGJlY2F1c2UgYSByZW5k
ZXIgdXBkYXRlIG1heSBiZSBpbiBwcm9ncmVzcyBhbmQgY3JlYXRpbmcgYW4gQVggb2JqZWN0IGNh
biByZS10cmlnZ2VyIGEgbGF5b3V0CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9i
amVjdCA9IGdldChub2RlKTsKQEAgLTY3MSw2ICs2OTMsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6
OnBvc3ROb3RpZmljYXRpb24oTm9kZSogbm9kZSwgQVhOb3RpZmljYXRpb24gbm90aWZpY2F0aW9u
LCBibwogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqZWN0LCBEb2N1bWVudCogZG9jdW1lbnQsIEFYTm90aWZpY2F0aW9uIG5vdGlm
aWNhdGlvbiwgYm9vbCBwb3N0VG9FbGVtZW50LCBQb3N0VHlwZSBwb3N0VHlwZSkKIHsKKyAgICBz
dG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworCiAgICAgaWYgKG9iamVjdCAm
JiAhcG9zdFRvRWxlbWVudCkKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0LT5vYnNlcnZhYmxlT2Jq
ZWN0KCk7CiAKQEAgLTcxMiw2ICs3MzYsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0
Q2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqIG5vZGUsIEFYVGV4dENoYW5nZSB0ZXh0Q2hhbgogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3RvcENhY2hpbmdDb21wdXRlZE9i
amVjdEF0dHJpYnV0ZXMoKTsKKwogICAgIC8vIERlbGVnYXRlIG9uIHRoZSByaWdodCBwbGF0Zm9y
bQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IGdldE9yQ3JlYXRlKG5vZGUpOwogICAg
IG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24ob2JqLCB0ZXh0Q2hhbmdlLCBvZmZz
ZXQsIHRleHQpOwpAQCAtNzM3LDggKzc2MywxMCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRs
ZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KiB2aWV3KQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBzY3JvbGwgdmlldyBmcm9tIHRoaXMg
bWV0aG9kLCBvbmx5IHVwZGF0ZSBhbiBleGlzdGluZyBvbmUuCi0gICAgaWYgKEFjY2Vzc2liaWxp
dHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBnZXQodmlldykpCisgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBnZXQodmlldykpIHsKKyAgICAgICAgc3Rv
cENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKICAgICAgICAgc2Nyb2xsVmlld09i
amVjdC0+dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOworICAgIH0KIH0KICAgICAKIHZvaWQg
QVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hhbmdlKE5vZGUqIG5vZGUpCkBAIC04
MDYsNiArODM0LDE3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVjb21wdXRlSXNJZ25vcmVkKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgICAgIG9iai0+bm90aWZ5SWZJZ25vcmVkVmFsdWVD
aGFuZ2VkKCk7CiB9CiAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6Y2FjaGVDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKCkKK3sKKyAgICBpZiAoIW1fY29tcHV0ZWRPYmplY3RB
dHRyaWJ1dGVDYWNoZSkKKyAgICAgICAgbV9jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlID0g
bmV3IEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSgpOworfQorCit2b2lkIEFYT2JqZWN0
Q2FjaGU6OnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCkKK3sKKyAgICBtX2Nv
bXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUuY2xlYXIoKTsKK30KKwogVmlzaWJsZVBvc2l0aW9u
IEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKFRleHRNYXJr
ZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSkKIHsKICAgICBpZiAoIWlzTm9kZUluVXNlKHRleHRNYXJr
ZXJEYXRhLm5vZGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaAppbmRleCA0ZWRmODE1MDNlMWVlNDM2MjY5MGI5ZGYzMDgyOWNiMWI3OTM4OWI5Li4xZjM0
ZTEwZjU2NDVmZmQ3NzcxMDdkYmNhNGI5OTI1NGZjZjJjZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtNTIsNiArNTIsMjEgQEAgc3RydWN0
IFRleHRNYXJrZXJEYXRhIHsKICAgICBFQWZmaW5pdHkgYWZmaW5pdHk7CiB9OwogCitjbGFzcyBB
WENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxBWENvbXB1
dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU+IHsKK3B1YmxpYzoKKyAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW5jbHVzaW9uIGdldElnbm9yZWQoQVhJRCkgY29uc3Q7CisgICAgdm9pZCBzZXRJZ25vcmVk
KEFYSUQsIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24pOworCitwcml2YXRlOgorICAgIHN0
cnVjdCBDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXMgIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVk
QVhPYmplY3RBdHRyaWJ1dGVzPiB7CisgICAgICAgIENhY2hlZEFYT2JqZWN0QXR0cmlidXRlcygp
IDogaWdub3JlZChEZWZhdWx0QmVoYXZpb3IpIHsgfQorCisgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3RJbmNsdXNpb24gaWdub3JlZDsKKyAgICB9OworCisgICAgSGFzaE1hcDxBWElELCBSZWZQ
dHI8Q2FjaGVkQVhPYmplY3RBdHRyaWJ1dGVzPiA+IG1faWRNYXBwaW5nOworfTsKKwogZW51bSBQ
b3N0VHlwZSB7IFBvc3RTeW5jaHJvbm91c2x5LCBQb3N0QXN5bmNocm9ub3VzbHkgfTsKIAogY2xh
c3MgQVhPYmplY3RDYWNoZSB7CkBAIC0xODIsNiArMTk3LDExIEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgcm9sZSk7CiAKKyAgICB2
b2lkIGNhY2hlQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcygpOworICAg
IHZvaWQgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKworICAgIEFYQ29t
cHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSogY29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSgp
IHsgcmV0dXJuIG1fY29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZS5nZXQoKTsgfQorCiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9i
amVjdCosIEFYTm90aWZpY2F0aW9uKTsKICAgICB2b2lkIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1O
b3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFYVGV4dENoYW5nZSwgdW5zaWduZWQg
b2Zmc2V0LCBjb25zdCBTdHJpbmcmKTsKQEAgLTIwMSw2ICsyMjEsNyBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8V2lkZ2V0KiwgQVhJRD4gbV93aWRnZXRPYmplY3RNYXBwaW5nOwogICAgIEhhc2hN
YXA8Tm9kZSosIEFYSUQ+IG1fbm9kZU9iamVjdE1hcHBpbmc7CiAgICAgSGFzaFNldDxOb2RlKj4g
bV90ZXh0TWFya2VyTm9kZXM7CisgICAgUmVmUHRyPEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVD
YWNoZT4gbV9jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOwogICAgIHN0YXRpYyBib29sIGdB
Y2Nlc3NpYmlsaXR5RW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuaGFu
Y2VkVXNlckludGVyZmFjZUVuYWJsZWQ7CiAgICAgCkBAIC0yMjAsNiArMjQxLDggQEAgYm9vbCBu
b2RlSGFzUm9sZShOb2RlKiwgY29uc3QgU3RyaW5nJiByb2xlKTsKIGJvb2wgaXNOb2RlQXJpYVZp
c2libGUoTm9kZSopOwogICAgIAogI2lmICFIQVZFKEFDQ0VTU0lCSUxJVFkpCitpbmxpbmUgQWNj
ZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6
OmdldElnbm9yZWQoQVhJRCkgY29uc3QgeyByZXR1cm4gRGVmYXVsdEJlaGF2aW9yOyB9Citpbmxp
bmUgdm9pZCBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OnNldElnbm9yZWQoQVhJRCwg
QWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbikgeyB9CiBpbmxpbmUgQVhPYmplY3RDYWNoZTo6
QVhPYmplY3RDYWNoZShjb25zdCBEb2N1bWVudCogZG9jKSA6IG1fZG9jdW1lbnQoY29uc3RfY2Fz
dDxEb2N1bWVudCo+KGRvYykpLCBtX25vdGlmaWNhdGlvblBvc3RUaW1lcih0aGlzLCAwKSB7IH0K
IGlubGluZSBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQogaW5saW5lIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNv
bnN0IFBhZ2UqKSB7IHJldHVybiAwOyB9CkBAIC0yMzQsNiArMjU3LDggQEAgaW5saW5lIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QoKSB7IHJldHVybiAwOyB9
CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6cm9vdE9iamVjdEZv
ckZyYW1lKEZyYW1lKikgeyByZXR1cm4gMDsgfQogaW5saW5lIEVsZW1lbnQqIEFYT2JqZWN0Q2Fj
aGU6OnJvb3RBWEVkaXRhYmxlRWxlbWVudChOb2RlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIGJv
b2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIGZhbHNlOyB9Citp
bmxpbmUgdm9pZCBjYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMo
KSB7IH0KK2lubGluZSB2b2lkIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCkg
eyB9CiBpbmxpbmUgYm9vbCBpc05vZGVBcmlhVmlzaWJsZShOb2RlKikgeyByZXR1cm4gdHJ1ZTsg
fQogaW5saW5lIGNvbnN0IEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRhYmxlRWxl
bWVudChjb25zdCBOb2RlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNo
ZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KikgeyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA0
NzIyNzBjMTgyYWI3NWU3YjAyN2Y0MzVmMWUyNWZkYmYxN2Y3MjM0Li40ZDRlMmFhMTVlOWFiMjg0
NjZhYTdiYTAyNGY2NWVjNDQ3MmExMDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTQ0OCw2ICs0NDgsOCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0
eVNlYXJjaENyaXRlcmlhKiBjcml0ZQogICAgIGlmICghY3JpdGVyaWEpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGF4T2JqZWN0Q2FjaGUoKS0+Y2FjaGVDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNV
bnRpbFRyZWVNdXRhdGVzKCk7CisKICAgICAvLyBUaGlzIHNlYXJjaCBtZWNoYW5pc20gb25seSBz
ZWFyY2hlcyB0aGUgZWxlbWVudHMgYmVmb3JlL2FmdGVyIHRoZSBzdGFydGluZyBvYmplY3QuCiAg
ICAgLy8gSXQgZG9lcyB0aGlzIGJ5IHN0ZXBwaW5nIHVwIHRoZSBwYXJlbnQgY2hhaW4gYW5kIGF0
IGVhY2ggbGV2ZWwgZG9pbmcgYSBERlMuCiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA4
YzZhMTEyMjFiZDQ5Nzk3MTZmNWEzMDRhOGRhNDJhM2E4MWE0NzZhLi5jNTIzYzk0NjdjMGI2MjQz
NTRhMzFjMjgxMWNkYTZjMTRlMDJjNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTExMjEs
MTMgKzExMjEsMzIgQEAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQmEKICAgICAgICAgCiAgICAgcmV0
dXJuIERlZmF1bHRCZWhhdmlvcjsKIH0gIAotIAorCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogewogI2lmbmRlZiBOREVCVUcK
ICAgICBBU1NFUlQobV9pbml0aWFsaXplZCk7CiAjZW5kaWYKIAorICAgIEFYQ29tcHV0ZWRPYmpl
Y3RBdHRyaWJ1dGVDYWNoZSogYXR0cmlidXRlQ2FjaGUgPSBheE9iamVjdENhY2hlKCktPmNvbXB1
dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUoKTsKKyAgICBpZiAoYXR0cmlidXRlQ2FjaGUpIHsKKyAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBpZ25vcmVkID0gYXR0cmlidXRlQ2Fj
aGUtPmdldElnbm9yZWQoYXhPYmplY3RJRCgpKTsKKyAgICAgICAgaWYgKGlnbm9yZWQgPT0gSWdu
b3JlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpZ25vcmVk
ID09IEluY2x1ZGVPYmplY3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgYm9vbCByZXN1bHQgPSBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOworCisgICAg
aWYgKGF0dHJpYnV0ZUNhY2hlKQorICAgICAgICBhdHRyaWJ1dGVDYWNoZS0+c2V0SWdub3JlZChh
eE9iamVjdElEKCksIHJlc3VsdCA/IElnbm9yZU9iamVjdCA6IEluY2x1ZGVPYmplY3QpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpj
b21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0Cit7CiAgICAgLy8gQ2hlY2sgZmly
c3QgaWYgYW55IG9mIHRoZSBjb21tb24gcmVhc29ucyBjYXVzZSB0aGlzIGVsZW1lbnQgdG8gYmUg
aWdub3JlZC4KICAgICAvLyBUaGVuIHByb2Nlc3Mgb3RoZXIgdXNlIGNhc2VzIHRoYXQgbmVlZCB0
byBiZSBhcHBsaWVkIHRvIGFsbCB0aGUgdmFyaW91cyByb2xlcwogICAgIC8vIHRoYXQgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdHMgdGFrZSBvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKaW5kZXggOTdiZjhh
MzdmZDYzNTU0NTdmNDNiYTRhNmFmMGIwNDMyMzdmZmYyYS4uNDM3NGIxYTQ1NWYyOGM4YzU4NTYy
OWE4Zjg3ZjNjOGNmY2E2ZmEyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKQEAgLTI3Nyw2ICsyNzcsOCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBhcmlhTGl2ZVJlZ2lvbkJ1c3koKSBjb25zdDsg
ICAgCiAgICAgCiAgICAgYm9vbCBpbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgpIGNvbnN0Owor
CisgICAgYm9vbCBjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0OwogICAgIAog
I2lmIEVOQUJMRShNQVRITUwpCiAgICAgLy8gQWxsIG1hdGggZWxlbWVudHMgcmV0dXJuIHRydWUg
Zm9yIGlzTWF0aEVsZW1lbnQoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAxZTY2MmFlYzdlZWU1ZDE3YmFj
ZTFhZTcxMTEwMWMyOWE4ZGM3Njc2Li44OTM3YmMzZGQ3MDgxYmZhNTU4YjM2OWUzNjM3OTViOGEz
OTQ5ZDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC03Niw2ICs3Niw5IEBAIHB1YmxpYzoKICAgICBXRUJL
SVRfRVhQT1JUIHN0YXRpYyB2b2lkIGVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKICAgICBXRUJLSVRf
RVhQT1JUIHN0YXRpYyBib29sIGFjY2Vzc2liaWxpdHlFbmFibGVkKCk7CiAKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgY2FjaGVDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVz
KCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRy
aWJ1dGVzKCk7CisKICAgICBXRUJLSVRfRVhQT1JUIGludCBheElEKCkgY29uc3Q7CiAKICAgICAv
LyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgdHJlZSwgYW5kIHJldHVybiB0cnVlIGlmIHRoaXMgb2Jq
ZWN0IGlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCmluZGV4IDgyNWI1OGIzMDFiYjA4MzU3ZGJhMjVlOGNlNGQ1OWIzNmI4
ODZlN2MuLjY3ODliZTBiNjg1N2M1ZWVkZDViNDE0ZDJlNzc4ZjJhNTFiNWRkNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCkBAIC04Miw2ICs4MiwxNiBAQCBib29sIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCkKICAgICByZXR1cm4gQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0
eUVuYWJsZWQoKTsKIH0KIAordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjYWNoZUNvbXB1
dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMoKQoreworICAgIG1fcHJpdmF0ZS0+
YXhPYmplY3RDYWNoZSgpLT5jYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11
dGF0ZXMoKTsKK30KKwordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdG9wQ2FjaGluZ0Nv
bXB1dGVkT2JqZWN0QXR0cmlidXRlcygpCit7CisgICAgbV9wcml2YXRlLT5heE9iamVjdENhY2hl
KCktPnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7Cit9CisKIGJvb2wgV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNEZXRhY2hlZCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcHJp
dmF0ZS5pc051bGwoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184776</attachid>
            <date>2013-01-25 11:07:31 -0800</date>
            <delta_ts>2013-01-25 15:55:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130125110422.patch</filename>
            <type>text/plain</type>
            <size>15184</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMzOWQyY2VjZDRlOWVk
ODhhNDQxYTY0M2RlMjE0NTA5YTc1ODIyOS4uODI1MDcxNjk1MDIyMTJkOTJjMmYwOTI5NTdlOWZl
NmIzMjE0ZDQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAxLTI1ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIGNhY2hlIGZvciBjb21wdXRlZCBhdHRyaWJ1dGVzIG9mIEFYT2JqZWN0cy4KKyAgICAgICAg
VGhlIGNhY2hlIGNhbiBiZSBlbmFibGVkIGF0IHRoZSBzdGFydCBvZiBhIGJhdGNoIG9mCisgICAg
ICAgIHJlYWQtb25seSBvcGVyYXRpb25zIG9uIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUsIGFuZAor
ICAgICAgICBpdCdzIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSB0cmVlIG11dGF0ZXMu
CisgICAgICAgIEN1cnJlbnRseSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGlzIGNhY2hlZCwgc2lu
Y2UgaXQncworICAgICAgICBmcmVxdWVudGx5IGNhbGxlZCBhbmQgcmVsYXRpdmVseSBleHBlbnNp
dmUgdG8gY29tcHV0ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OmdldElnbm9yZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25v
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VOb3RpZmlj
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xsYmFy
VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNhY2hlQ29tcHV0ZWRP
YmplY3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjpzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcyk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChBWENvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlOjpDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXM6OkNhY2hlZEFYT2JqZWN0QXR0
cmlidXRlcyk6CisgICAgICAgIChDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjb21wdXRlZE9iamVj
dEF0dHJpYnV0ZUNhY2hlKToKKyAgICAgICAgKEFYT2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpnZXRJZ25vcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6c2V0SWdub3JlZCk6
CisgICAgICAgIChXZWJDb3JlOjpjYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJl
ZU11dGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZXMpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kTWF0Y2hpbmdP
YmplY3RzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
aDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAyMDEzLTAxLTI0ICBN
YXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIEZpbHRlcnNd
IENTUyBvcGFjaXR5IHByb3BlcnR5IGNsaXBzIGZpbHRlciBvdXRzZXRzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDBlZmM1NDRiZTdjZWU2ZTFkNTBiMGM4ZDE4ZjhhNzJkMmRlZThjY2Yu
LjJkZmQwODMyZTk5MjA5OTNhY2JkY2Y4OGIyNDc4NDBmMTFhNTQ0NTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDEtMjUgIERvbWluaWMgTWF6em9u
aSAgPGRtYXp6b25pQGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IG1lbW9pemUgZXhwZW5zaXZl
IGNvbXB1dGF0aW9uIGR1cmluZyBibG9ja3Mgd2hlcmUgdHJlZSBkb2Vzbid0IGNoYW5nZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NDk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3NlIHR3byBt
ZXRob2RzIHRvIGVuYWJsZSBhbmQgZGlzYWJsZSBjYWNoaW5nIG9mCisgICAgICAgIGNvbXB1dGVk
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgYXR0cmlidXRlcywgdG8gc3BlZWQgdXAKKyAgICAgICAg
YmF0Y2ggcmVhZC1vbmx5IG9wZXJhdGlvbnMuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAg
ICAgICogc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGls
VHJlZU11dGF0ZXMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNj
ZXNzaWJpbGl0eU9iamVjdDo6c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMpOgor
CiAyMDEzLTAxLTI0ICBNaWhhaSBNYWVyZWFuICA8bW1hZXJlYW5AYWRvYmUuY29tPgogCiAgICAg
ICAgIFtDU1NSZWdpb25zXSByZW1vdmUgc2V0RXhwZXJpbWVudGFsQ1NTUmVnaW9uc0VuYWJsZWQg
ZGVwcmVjYXRlZCBBUEkgaW4gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGlu
Z3MuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
aW5kZXggNDdhNjQ5ZGI2ZjkzNzc2ZmE2NjdiMDU1NzEzYTRiOTg2YTA5ODVjOS4uNmM2ZGJjMGU5
ODU5MmIyMDJlMTM5N2RmMDJkYTFhYjcwMGI3YzI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC04Miw2ICs4MiwyNCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitBY2Nlc3NpYmls
aXR5T2JqZWN0SW5jbHVzaW9uIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6Z2V0SWdu
b3JlZChBWElEIGlkKSBjb25zdAoreworICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPENhY2hlZEFY
T2JqZWN0QXR0cmlidXRlcz4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2lkTWFwcGluZy5maW5k
KGlkKTsKKyAgICByZXR1cm4gaXQgIT0gbV9pZE1hcHBpbmcuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0
KCktPmlnbm9yZWQgOiBEZWZhdWx0QmVoYXZpb3I7Cit9CisKK3ZvaWQgQVhDb21wdXRlZE9iamVj
dEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVkKEFYSUQgaWQsIEFjY2Vzc2liaWxpdHlPYmplY3RJ
bmNsdXNpb24gaW5jbHVzaW9uKQoreworICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPENhY2hlZEFY
T2JqZWN0QXR0cmlidXRlcz4gPjo6aXRlcmF0b3IgaXQgPSBtX2lkTWFwcGluZy5maW5kKGlkKTsK
KyAgICBpZiAoaXQgIT0gbV9pZE1hcHBpbmcuZW5kKCkpCisgICAgICAgIGl0LT52YWx1ZS5nZXQo
KS0+aWdub3JlZCA9IGluY2x1c2lvbjsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPENhY2hl
ZEFYT2JqZWN0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGFkb3B0UmVmKG5ldyBDYWNoZWRBWE9i
amVjdEF0dHJpYnV0ZXMoKSk7CisgICAgICAgIGF0dHJpYnV0ZXMtPmlnbm9yZWQgPSBpbmNsdXNp
b247CisgICAgICAgIG1faWRNYXBwaW5nLnNldChpZCwgYXR0cmlidXRlcyk7CisgICAgfQorfQog
ICAgIAogYm9vbCBBWE9iamVjdENhY2hlOjpnQWNjZXNzaWJpbGl0eUVuYWJsZWQgPSBmYWxzZTsK
IGJvb2wgQVhPYmplY3RDYWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VF
bmFibGVkID0gZmFsc2U7CkBAIC02MzYsNiArNjU0LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpw
b3N0Tm90aWZpY2F0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIEFYTm90aWZpY2F0aW9uIG5v
dGkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAgICAgCisgICAgc3RvcENh
Y2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKwogICAgIC8vIEdldCBhbiBhY2Nlc3Np
YmlsaXR5IG9iamVjdCB0aGF0IGFscmVhZHkgZXhpc3RzLiBPbmUgc2hvdWxkIG5vdCBiZSBjcmVh
dGVkIGhlcmUKICAgICAvLyBiZWNhdXNlIGEgcmVuZGVyIHVwZGF0ZSBtYXkgYmUgaW4gcHJvZ3Jl
c3MgYW5kIGNyZWF0aW5nIGFuIEFYIG9iamVjdCBjYW4gcmUtdHJpZ2dlciBhIGxheW91dAogICAg
IFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmplY3QgPSBnZXQocmVuZGVyZXIpOwpAQCAt
NjU1LDYgKzY3NSw4IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdE5vdGlmaWNhdGlvbihOb2Rl
KiBub2RlLCBBWE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24sIGJvCiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm47CiAgICAgCisgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJp
YnV0ZXMoKTsKKwogICAgIC8vIEdldCBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0aGF0IGFscmVh
ZHkgZXhpc3RzLiBPbmUgc2hvdWxkIG5vdCBiZSBjcmVhdGVkIGhlcmUKICAgICAvLyBiZWNhdXNl
IGEgcmVuZGVyIHVwZGF0ZSBtYXkgYmUgaW4gcHJvZ3Jlc3MgYW5kIGNyZWF0aW5nIGFuIEFYIG9i
amVjdCBjYW4gcmUtdHJpZ2dlciBhIGxheW91dAogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0PiBvYmplY3QgPSBnZXQobm9kZSk7CkBAIC02NzEsNiArNjkzLDggQEAgdm9pZCBBWE9iamVj
dENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKE5vZGUqIG5vZGUsIEFYTm90aWZpY2F0aW9uIG5vdGlm
aWNhdGlvbiwgYm8KIAogdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iamVjdCwgRG9jdW1lbnQqIGRvY3VtZW50LCBBWE5vdGlmaWNhdGlv
biBub3RpZmljYXRpb24sIGJvb2wgcG9zdFRvRWxlbWVudCwgUG9zdFR5cGUgcG9zdFR5cGUpCiB7
CisgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKwogICAgIGlmIChv
YmplY3QgJiYgIXBvc3RUb0VsZW1lbnQpCiAgICAgICAgIG9iamVjdCA9IG9iamVjdC0+b2JzZXJ2
YWJsZU9iamVjdCgpOwogCkBAIC03MTIsNiArNzM2LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpu
b2RlVGV4dENoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiBub2RlLCBBWFRleHRDaGFuZ2UgdGV4dENo
YW4KICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKIAorICAgIHN0b3BDYWNoaW5nQ29t
cHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CisKICAgICAvLyBEZWxlZ2F0ZSBvbiB0aGUgcmlnaHQg
cGxhdGZvcm0KICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBnZXRPckNyZWF0ZShub2Rl
KTsKICAgICBub2RlVGV4dENoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKG9iaiwgdGV4dENoYW5n
ZSwgb2Zmc2V0LCB0ZXh0KTsKQEAgLTczNyw4ICs3NjMsMTAgQEAgdm9pZCBBWE9iamVjdENhY2hl
OjpoYW5kbGVTY3JvbGxiYXJVcGRhdGUoU2Nyb2xsVmlldyogdmlldykKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY3JlYXRlIGEgc2Nyb2xsIHZpZXcgZnJv
bSB0aGlzIG1ldGhvZCwgb25seSB1cGRhdGUgYW4gZXhpc3Rpbmcgb25lLgotICAgIGlmIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxWaWV3T2JqZWN0ID0gZ2V0KHZpZXcpKQorICAgIGlmIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxWaWV3T2JqZWN0ID0gZ2V0KHZpZXcpKSB7CisgICAg
ICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CiAgICAgICAgIHNjcm9s
bFZpZXdPYmplY3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKKyAgICB9CiB9CiAgICAg
CiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFFeHBhbmRlZENoYW5nZShOb2RlKiBub2Rl
KQpAQCAtODA2LDYgKzgzNCwxNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlY29tcHV0ZUlzSWdu
b3JlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgICAgICBvYmotPm5vdGlmeUlmSWdub3Jl
ZFZhbHVlQ2hhbmdlZCgpOwogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OmNhY2hlQ29tcHV0ZWRP
YmplY3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcygpCit7CisgICAgaWYgKCFtX2NvbXB1dGVk
T2JqZWN0QXR0cmlidXRlQ2FjaGUpCisgICAgICAgIG1fY29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVD
YWNoZSA9IG5ldyBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUoKTsKK30KKwordm9pZCBB
WE9iamVjdENhY2hlOjpzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpCit7Cisg
ICAgbV9jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlLmNsZWFyKCk7Cit9CisKIFZpc2libGVQ
b3NpdGlvbiBBWE9iamVjdENhY2hlOjp2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YShU
ZXh0TWFya2VyRGF0YSYgdGV4dE1hcmtlckRhdGEpCiB7CiAgICAgaWYgKCFpc05vZGVJblVzZSh0
ZXh0TWFya2VyRGF0YS5ub2RlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmgKaW5kZXggNGVkZjgxNTAzZTFlZTQzNjI2OTBiOWRmMzA4MjljYjFiNzkzODli
OS4uMWYzNGUxMGY1NjQ1ZmZkNzc3MTA3ZGJjYTRiOTkyNTRmY2YyY2ZhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTUyLDYgKzUyLDIxIEBA
IHN0cnVjdCBUZXh0TWFya2VyRGF0YSB7CiAgICAgRUFmZmluaXR5IGFmZmluaXR5OwogfTsKIAor
Y2xhc3MgQVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlIDogcHVibGljIFJlZkNvdW50ZWQ8
QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlPiB7CitwdWJsaWM6CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdEluY2x1c2lvbiBnZXRJZ25vcmVkKEFYSUQpIGNvbnN0OworICAgIHZvaWQgc2V0
SWdub3JlZChBWElELCBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uKTsKKworcHJpdmF0ZToK
KyAgICBzdHJ1Y3QgQ2FjaGVkQVhPYmplY3RBdHRyaWJ1dGVzICA6IHB1YmxpYyBSZWZDb3VudGVk
PENhY2hlZEFYT2JqZWN0QXR0cmlidXRlcz4geworICAgICAgICBDYWNoZWRBWE9iamVjdEF0dHJp
YnV0ZXMoKSA6IGlnbm9yZWQoRGVmYXVsdEJlaGF2aW9yKSB7IH0KKworICAgICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0SW5jbHVzaW9uIGlnbm9yZWQ7CisgICAgfTsKKworICAgIEhhc2hNYXA8QVhJ
RCwgUmVmUHRyPENhY2hlZEFYT2JqZWN0QXR0cmlidXRlcz4gPiBtX2lkTWFwcGluZzsKK307CisK
IGVudW0gUG9zdFR5cGUgeyBQb3N0U3luY2hyb25vdXNseSwgUG9zdEFzeW5jaHJvbm91c2x5IH07
CiAKIGNsYXNzIEFYT2JqZWN0Q2FjaGUgewpAQCAtMTgyLDYgKzE5NywxMSBAQCBwdWJsaWM6CiAK
ICAgICBib29sIG5vZGVIYXNSb2xlKE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHJvbGUpOwog
CisgICAgdm9pZCBjYWNoZUNvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMo
KTsKKyAgICB2b2lkIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CisKKyAg
ICBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUqIGNvbXB1dGVkT2JqZWN0QXR0cmlidXRl
Q2FjaGUoKSB7IHJldHVybiBtX2NvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUuZ2V0KCk7IH0K
KwogcHJvdGVjdGVkOgogICAgIHZvaWQgcG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2li
aWxpdHlPYmplY3QqLCBBWE5vdGlmaWNhdGlvbik7CiAgICAgdm9pZCBub2RlVGV4dENoYW5nZVBs
YXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWFRleHRDaGFuZ2UsIHVu
c2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJik7CkBAIC0yMDEsNiArMjIxLDcgQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1fd2lkZ2V0T2JqZWN0TWFwcGluZzsKICAg
ICBIYXNoTWFwPE5vZGUqLCBBWElEPiBtX25vZGVPYmplY3RNYXBwaW5nOwogICAgIEhhc2hTZXQ8
Tm9kZSo+IG1fdGV4dE1hcmtlck5vZGVzOworICAgIFJlZlB0cjxBWENvbXB1dGVkT2JqZWN0QXR0
cmlidXRlQ2FjaGU+IG1fY29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTsKICAgICBzdGF0aWMg
Ym9vbCBnQWNjZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAgc3RhdGljIGJvb2wgZ0FjY2Vzc2liaWxp
dHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkOwogICAgIApAQCAtMjIwLDYgKzI0MSw4IEBA
IGJvb2wgbm9kZUhhc1JvbGUoTm9kZSosIGNvbnN0IFN0cmluZyYgcm9sZSk7CiBib29sIGlzTm9k
ZUFyaWFWaXNpYmxlKE5vZGUqKTsKICAgICAKICNpZiAhSEFWRShBQ0NFU1NJQklMSVRZKQoraW5s
aW5lIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQVhDb21wdXRlZE9iamVjdEF0dHJpYnV0
ZUNhY2hlOjpnZXRJZ25vcmVkKEFYSUQpIGNvbnN0IHsgcmV0dXJuIERlZmF1bHRCZWhhdmlvcjsg
fQoraW5saW5lIHZvaWQgQVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVk
KEFYSUQsIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24pIHsgfQogaW5saW5lIEFYT2JqZWN0
Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoY29uc3QgRG9jdW1lbnQqIGRvYykgOiBtX2RvY3VtZW50KGNv
bnN0X2Nhc3Q8RG9jdW1lbnQqPihkb2MpKSwgbV9ub3RpZmljYXRpb25Qb3N0VGltZXIodGhpcywg
MCkgeyB9CiBpbmxpbmUgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUoKSB7IH0KIGlubGlu
ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpmb2N1c2VkVUlFbGVtZW50Rm9y
UGFnZShjb25zdCBQYWdlKikgeyByZXR1cm4gMDsgfQpAQCAtMjM0LDYgKzI1Nyw4IEBAIGlubGlu
ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpyb290T2JqZWN0KCkgeyByZXR1
cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnJvb3RP
YmplY3RGb3JGcmFtZShGcmFtZSopIHsgcmV0dXJuIDA7IH0KIGlubGluZSBFbGVtZW50KiBBWE9i
amVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQoTm9kZSopIHsgcmV0dXJuIDA7IH0KIGlu
bGluZSBib29sIG5vZGVIYXNSb2xlKE5vZGUqLCBjb25zdCBTdHJpbmcmKSB7IHJldHVybiBmYWxz
ZTsgfQoraW5saW5lIHZvaWQgY2FjaGVDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVN
dXRhdGVzKCkgeyB9CitpbmxpbmUgdm9pZCBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmli
dXRlcygpIHsgfQogaW5saW5lIGJvb2wgaXNOb2RlQXJpYVZpc2libGUoTm9kZSopIHsgcmV0dXJu
IHRydWU7IH0KIGlubGluZSBjb25zdCBFbGVtZW50KiBBWE9iamVjdENhY2hlOjpyb290QVhFZGl0
YWJsZUVsZW1lbnQoY29uc3QgTm9kZSopIHsgcmV0dXJuIDA7IH0KIGlubGluZSB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCopIHsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
aW5kZXggNDcyMjcwYzE4MmFiNzVlN2IwMjdmNDM1ZjFlMjVmZGJmMTdmNzIzNC4uNGQ0ZTJhYTE1
ZTlhYjI4NDY2YWE3YmEwMjRmNjVlYzQ0NzJhMTA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC00NDgsNiArNDQ4
LDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kTWF0Y2hpbmdPYmplY3RzKEFjY2Vz
c2liaWxpdHlTZWFyY2hDcml0ZXJpYSogY3JpdGUKICAgICBpZiAoIWNyaXRlcmlhKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBheE9iamVjdENhY2hlKCktPmNhY2hlQ29tcHV0ZWRPYmplY3RBdHRy
aWJ1dGVzVW50aWxUcmVlTXV0YXRlcygpOworCiAgICAgLy8gVGhpcyBzZWFyY2ggbWVjaGFuaXNt
IG9ubHkgc2VhcmNoZXMgdGhlIGVsZW1lbnRzIGJlZm9yZS9hZnRlciB0aGUgc3RhcnRpbmcgb2Jq
ZWN0LgogICAgIC8vIEl0IGRvZXMgdGhpcyBieSBzdGVwcGluZyB1cCB0aGUgcGFyZW50IGNoYWlu
IGFuZCBhdCBlYWNoIGxldmVsIGRvaW5nIGEgREZTLgogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
aW5kZXggOGM2YTExMjIxYmQ0OTc5NzE2ZjVhMzA0YThkYTQyYTNhODFhNDc2YS4uYzUyM2M5NDY3
YzBiNjI0MzU0YTMxYzI4MTFjZGE2YzE0ZTAyYzQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBA
IC0xMTIxLDEzICsxMTIxLDMyIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhCiAgICAgICAgIAog
ICAgIHJldHVybiBEZWZhdWx0QmVoYXZpb3I7CiB9ICAKLSAKKwogYm9vbCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKIHsKICNpZm5kZWYg
TkRFQlVHCiAgICAgQVNTRVJUKG1faW5pdGlhbGl6ZWQpOwogI2VuZGlmCiAKKyAgICBBWENvbXB1
dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUqIGF0dHJpYnV0ZUNhY2hlID0gYXhPYmplY3RDYWNoZSgp
LT5jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlKCk7CisgICAgaWYgKGF0dHJpYnV0ZUNhY2hl
KSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gaWdub3JlZCA9IGF0dHJp
YnV0ZUNhY2hlLT5nZXRJZ25vcmVkKGF4T2JqZWN0SUQoKSk7CisgICAgICAgIGlmIChpZ25vcmVk
ID09IElnbm9yZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
aWdub3JlZCA9PSBJbmNsdWRlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGJvb2wgcmVzdWx0ID0gY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsK
KworICAgIGlmIChhdHRyaWJ1dGVDYWNoZSkKKyAgICAgICAgYXR0cmlidXRlQ2FjaGUtPnNldEln
bm9yZWQoYXhPYmplY3RJRCgpLCByZXN1bHQgPyBJZ25vcmVPYmplY3QgOiBJbmNsdWRlT2JqZWN0
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAorewogICAgIC8vIENo
ZWNrIGZpcnN0IGlmIGFueSBvZiB0aGUgY29tbW9uIHJlYXNvbnMgY2F1c2UgdGhpcyBlbGVtZW50
IHRvIGJlIGlnbm9yZWQuCiAgICAgLy8gVGhlbiBwcm9jZXNzIG90aGVyIHVzZSBjYXNlcyB0aGF0
IG5lZWQgdG8gYmUgYXBwbGllZCB0byBhbGwgdGhlIHZhcmlvdXMgcm9sZXMKICAgICAvLyB0aGF0
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3RzIHRha2Ugb24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCmluZGV4
IDk3YmY4YTM3ZmQ2MzU1NDU3ZjQzYmE0YTZhZjBiMDQzMjM3ZmZmMmEuLjQzNzRiMWE0NTVmMjhj
OGM1ODU2MjlhOGY4N2YzYzhjZmNhNmZhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCkBAIC0yNzcsNiAr
Mjc3LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYXJpYUxpdmVSZWdpb25CdXN5KCkg
Y29uc3Q7ICAgIAogICAgIAogICAgIGJvb2wgaW5oZXJpdHNQcmVzZW50YXRpb25hbFJvbGUoKSBj
b25zdDsKKworICAgIGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdDsK
ICAgICAKICNpZiBFTkFCTEUoTUFUSE1MKQogICAgIC8vIEFsbCBtYXRoIGVsZW1lbnRzIHJldHVy
biB0cnVlIGZvciBpc01hdGhFbGVtZW50KCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggMWU2NjJhZWM3ZWVl
NWQxN2JhY2UxYWU3MTExMDFjMjlhOGRjNzY3Ni4uODkzN2JjM2RkNzA4MWJmYTU1OGIzNjllMzYz
Nzk1YjhhMzk0OWQ1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtNzYsNiArNzYsOSBAQCBwdWJsaWM6CiAg
ICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBlbmFibGVBY2Nlc3NpYmlsaXR5KCk7CiAgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgYm9vbCBhY2Nlc3NpYmlsaXR5RW5hYmxlZCgpOwogCisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIGNhY2hlQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzVW50aWxUcmVl
TXV0YXRlcygpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzdG9wQ2FjaGluZ0NvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlcygpOworCiAgICAgV0VCS0lUX0VYUE9SVCBpbnQgYXhJRCgpIGNvbnN0Owog
CiAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIHRyZWUsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0
aGlzIG9iamVjdCBpcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA4MjViNThiMzAxYmIwODM1N2RiYTI1ZThjZTRk
NTliMzZiODg2ZTdjLi42Nzg5YmUwYjY4NTdjNWVlZGQ1YjQxNGQyZTc3OGYyYTUxYjVkZDc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcApAQCAtODIsNiArODIsMTYgQEAgYm9vbCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
OjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpCiAgICAgcmV0dXJuIEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmFibGVkKCk7CiB9CiAKK3ZvaWQgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2Fj
aGVDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKCkKK3sKKyAgICBtX3By
aXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+Y2FjaGVDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRp
bFRyZWVNdXRhdGVzKCk7Cit9CisKK3ZvaWQgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RvcENh
Y2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKQoreworICAgIG1fcHJpdmF0ZS0+YXhPYmpl
Y3RDYWNoZSgpLT5zdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworfQorCiBi
b29sIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRGV0YWNoZWQoKSBjb25zdAogewogICAgIGlm
IChtX3ByaXZhdGUuaXNOdWxsKCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184830</attachid>
            <date>2013-01-25 15:55:08 -0800</date>
            <delta_ts>2013-02-01 13:35:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106497-20130125155159.patch</filename>
            <type>text/plain</type>
            <size>15449</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMzOWQyY2VjZDRlOWVk
ODhhNDQxYTY0M2RlMjE0NTA5YTc1ODIyOS4uNmE5YTQzODFhYjE4OWE3ZTRlNzFhNGM0NzY2NjAz
YWY3YTZhOTk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTAxLTI1ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIGNhY2hlIGZvciBjb21wdXRlZCBhdHRyaWJ1dGVzIG9mIEFYT2JqZWN0cy4KKyAgICAgICAg
VGhlIGNhY2hlIGNhbiBiZSBlbmFibGVkIGF0IHRoZSBzdGFydCBvZiBhIGJhdGNoIG9mCisgICAg
ICAgIHJlYWQtb25seSBvcGVyYXRpb25zIG9uIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUsIGFuZAor
ICAgICAgICBpdCdzIGNsZWFyZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSB0cmVlIG11dGF0ZXMu
CisgICAgICAgIEN1cnJlbnRseSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGlzIGNhY2hlZCwgc2lu
Y2UgaXQncworICAgICAgICBmcmVxdWVudGx5IGNhbGxlZCBhbmQgcmVsYXRpdmVseSBleHBlbnNp
dmUgdG8gY29tcHV0ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OmdldElnbm9yZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25v
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VOb3RpZmlj
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlU2Nyb2xsYmFy
VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0Q2FjaGluZ0Nv
bXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oOgorICAgICAgICAoQVhDb21w
dXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYQ29tcHV0ZWRP
YmplY3RBdHRyaWJ1dGVDYWNoZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYQ29tcHV0
ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6Q2FjaGVk
QVhPYmplY3RBdHRyaWJ1dGVzOjpDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXMpOgorICAgICAgICAo
Q2FjaGVkQVhPYmplY3RBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6Y29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSk6Cisg
ICAgICAgIChBWE9iamVjdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYQ29tcHV0ZWRPYmpl
Y3RBdHRyaWJ1dGVDYWNoZTo6Z2V0SWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBWENvbXB1
dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OnNldElnbm9yZWQpOgorICAgICAgICAoV2ViQ29yZTo6
c3RhcnRDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcyk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRNYXRjaGluZ09iamVjdHMpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOgorICAgICAgICAo
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisKIDIwMTMtMDEtMjQgIE1heCBWdWpvdmljICA8
bXZ1am92aWNAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgRmlsdGVyc10gQ1NTIG9wYWNpdHkg
cHJvcGVydHkgY2xpcHMgZmlsdGVyIG91dHNldHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggMGVmYzU0NGJlN2NlZTZlMWQ1MGIwYzhkMThmOGE3MmQyZGVlOGNjZi4uOGM2MGQyMjI0ODA3
ZDY1MDlmMDIyMDQyZGI2ZjdhYmVkMmRhOGQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMSBAQAorMjAxMy0wMS0yNSAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlA
Z29vZ2xlLmNvbT4KKworICAgICAgICBBWDogbWVtb2l6ZSBleHBlbnNpdmUgY29tcHV0YXRpb24g
ZHVyaW5nIGJsb2NrcyB3aGVyZSB0cmVlIGRvZXNuJ3QgY2hhbmdlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY0OTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgdHdvIG1ldGhvZHMgdG8gZW5h
YmxlIGFuZCBkaXNhYmxlIGNhY2hpbmcgb2YKKyAgICAgICAgY29tcHV0ZWQgV2ViQWNjZXNzaWJp
bGl0eU9iamVjdCBhdHRyaWJ1dGVzLCB0byBzcGVlZCB1cAorICAgICAgICBiYXRjaCByZWFkLW9u
bHkgb3BlcmF0aW9ucy4KKworICAgICAgICAqIHB1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
Lmg6CisgICAgICAgIChXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBzcmMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN0YXJ0Q2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11
dGF0ZXMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQWNjZXNzaWJp
bGl0eU9iamVjdDo6c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMpOgorCiAyMDEz
LTAxLTI0ICBNaWhhaSBNYWVyZWFuICA8bW1hZXJlYW5AYWRvYmUuY29tPgogCiAgICAgICAgIFtD
U1NSZWdpb25zXSByZW1vdmUgc2V0RXhwZXJpbWVudGFsQ1NTUmVnaW9uc0VuYWJsZWQgZGVwcmVj
YXRlZCBBUEkgaW4gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXgg
NDdhNjQ5ZGI2ZjkzNzc2ZmE2NjdiMDU1NzEzYTRiOTg2YTA5ODVjOS4uOTNiZWI3MmViZmRkMGRh
NWJiZGYxZTk3ZDhmYTExMThkZGZjZjg0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC04Miw2ICs4MiwyNCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW5jbHVzaW9uIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6Z2V0SWdub3JlZChB
WElEIGlkKSBjb25zdAoreworICAgIEhhc2hNYXA8QVhJRCwgQ2FjaGVkQVhPYmplY3RBdHRyaWJ1
dGVzPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2lkTWFwcGluZy5maW5kKGlkKTsKKyAgICByZXR1
cm4gaXQgIT0gbV9pZE1hcHBpbmcuZW5kKCkgPyBpdC0+dmFsdWUuaWdub3JlZCA6IERlZmF1bHRC
ZWhhdmlvcjsKK30KKwordm9pZCBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OnNldEln
bm9yZWQoQVhJRCBpZCwgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBpbmNsdXNpb24pCit7
CisgICAgSGFzaE1hcDxBWElELCBDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXM+OjppdGVyYXRvciBp
dCA9IG1faWRNYXBwaW5nLmZpbmQoaWQpOworICAgIGlmIChpdCAhPSBtX2lkTWFwcGluZy5lbmQo
KSkKKyAgICAgICAgaXQtPnZhbHVlLmlnbm9yZWQgPSBpbmNsdXNpb247CisgICAgZWxzZSB7Cisg
ICAgICAgIENhY2hlZEFYT2JqZWN0QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAgICBhdHRy
aWJ1dGVzLmlnbm9yZWQgPSBpbmNsdXNpb247CisgICAgICAgIG1faWRNYXBwaW5nLnNldChpZCwg
YXR0cmlidXRlcyk7CisgICAgfQorfQogICAgIAogYm9vbCBBWE9iamVjdENhY2hlOjpnQWNjZXNz
aWJpbGl0eUVuYWJsZWQgPSBmYWxzZTsKIGJvb2wgQVhPYmplY3RDYWNoZTo6Z0FjY2Vzc2liaWxp
dHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0gZmFsc2U7CkBAIC02MzYsNiArNjU0LDgg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIEFYTm90aWZpY2F0aW9uIG5vdGkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICBy
ZXR1cm47CiAgICAgCisgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsK
KwogICAgIC8vIEdldCBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0aGF0IGFscmVhZHkgZXhpc3Rz
LiBPbmUgc2hvdWxkIG5vdCBiZSBjcmVhdGVkIGhlcmUKICAgICAvLyBiZWNhdXNlIGEgcmVuZGVy
IHVwZGF0ZSBtYXkgYmUgaW4gcHJvZ3Jlc3MgYW5kIGNyZWF0aW5nIGFuIEFYIG9iamVjdCBjYW4g
cmUtdHJpZ2dlciBhIGxheW91dAogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmpl
Y3QgPSBnZXQocmVuZGVyZXIpOwpAQCAtNjU1LDYgKzY3NSw4IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6cG9zdE5vdGlmaWNhdGlvbihOb2RlKiBub2RlLCBBWE5vdGlmaWNhdGlvbiBub3RpZmljYXRp
b24sIGJvCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAgICAgCisgICAgc3RvcENh
Y2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKwogICAgIC8vIEdldCBhbiBhY2Nlc3Np
YmlsaXR5IG9iamVjdCB0aGF0IGFscmVhZHkgZXhpc3RzLiBPbmUgc2hvdWxkIG5vdCBiZSBjcmVh
dGVkIGhlcmUKICAgICAvLyBiZWNhdXNlIGEgcmVuZGVyIHVwZGF0ZSBtYXkgYmUgaW4gcHJvZ3Jl
c3MgYW5kIGNyZWF0aW5nIGFuIEFYIG9iamVjdCBjYW4gcmUtdHJpZ2dlciBhIGxheW91dAogICAg
IFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmplY3QgPSBnZXQobm9kZSk7CkBAIC02NzEs
NiArNjkzLDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKE5vZGUqIG5v
ZGUsIEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwgYm8KIAogdm9pZCBBWE9iamVjdENhY2hl
Ojpwb3N0Tm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgRG9jdW1lbnQq
IGRvY3VtZW50LCBBWE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24sIGJvb2wgcG9zdFRvRWxlbWVu
dCwgUG9zdFR5cGUgcG9zdFR5cGUpCiB7CisgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZXMoKTsKKwogICAgIGlmIChvYmplY3QgJiYgIXBvc3RUb0VsZW1lbnQpCiAgICAgICAg
IG9iamVjdCA9IG9iamVjdC0+b2JzZXJ2YWJsZU9iamVjdCgpOwogCkBAIC03MTIsNiArNzM2LDgg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpub2RlVGV4dENoYW5nZU5vdGlmaWNhdGlvbihOb2RlKiBu
b2RlLCBBWFRleHRDaGFuZ2UgdGV4dENoYW4KICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CisKICAgICAv
LyBEZWxlZ2F0ZSBvbiB0aGUgcmlnaHQgcGxhdGZvcm0KICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvYmogPSBnZXRPckNyZWF0ZShub2RlKTsKICAgICBub2RlVGV4dENoYW5nZVBsYXRmb3JtTm90
aWZpY2F0aW9uKG9iaiwgdGV4dENoYW5nZSwgb2Zmc2V0LCB0ZXh0KTsKQEAgLTczNyw4ICs3NjMs
MTAgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVTY3JvbGxiYXJVcGRhdGUoU2Nyb2xsVmll
dyogdmlldykKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
Y3JlYXRlIGEgc2Nyb2xsIHZpZXcgZnJvbSB0aGlzIG1ldGhvZCwgb25seSB1cGRhdGUgYW4gZXhp
c3Rpbmcgb25lLgotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxWaWV3T2JqZWN0
ID0gZ2V0KHZpZXcpKQorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxWaWV3T2Jq
ZWN0ID0gZ2V0KHZpZXcpKSB7CisgICAgICAgIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRy
aWJ1dGVzKCk7CiAgICAgICAgIHNjcm9sbFZpZXdPYmplY3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNl
c3NhcnkoKTsKKyAgICB9CiB9CiAgICAgCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFF
eHBhbmRlZENoYW5nZShOb2RlKiBub2RlKQpAQCAtODA2LDYgKzgzNCwxNyBAQCB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnJlY29tcHV0ZUlzSWdub3JlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAg
ICAgICBvYmotPm5vdGlmeUlmSWdub3JlZFZhbHVlQ2hhbmdlZCgpOwogfQogCit2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnN0YXJ0Q2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11
dGF0ZXMoKQoreworICAgIGlmICghbV9jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlKQorICAg
ICAgICBtX2NvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUgPSBBWENvbXB1dGVkT2JqZWN0QXR0
cmlidXRlQ2FjaGU6OmNyZWF0ZSgpOworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0b3BDYWNo
aW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCkKK3sKKyAgICBtX2NvbXB1dGVkT2JqZWN0QXR0
cmlidXRlQ2FjaGUuY2xlYXIoKTsKK30KKwogVmlzaWJsZVBvc2l0aW9uIEFYT2JqZWN0Q2FjaGU6
OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFy
a2VyRGF0YSkKIHsKICAgICBpZiAoIWlzTm9kZUluVXNlKHRleHRNYXJrZXJEYXRhLm5vZGUpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCA0ZWRm
ODE1MDNlMWVlNDM2MjY5MGI5ZGYzMDgyOWNiMWI3OTM4OWI5Li5lNWRmMDUxMmYxZThmM2QwMTYw
ZTFiNmU5YjUzMTFiOWQwYTJlMTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaApAQCAtNTIsNiArNTIsMjUgQEAgc3RydWN0IFRleHRNYXJrZXJEYXRh
IHsKICAgICBFQWZmaW5pdHkgYWZmaW5pdHk7CiB9OwogCitjbGFzcyBBWENvbXB1dGVkT2JqZWN0
QXR0cmlidXRlQ2FjaGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEFYQ29tcHV0
ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEFY
Q29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSgpKTsgfQorCisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdEluY2x1c2lvbiBnZXRJZ25vcmVkKEFYSUQpIGNvbnN0OworICAgIHZvaWQgc2V0SWdub3Jl
ZChBWElELCBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uKTsKKworcHJpdmF0ZToKKyAgICBB
WENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUoKSB7IH0KKworICAgIHN0cnVjdCBDYWNoZWRB
WE9iamVjdEF0dHJpYnV0ZXMgeworICAgICAgICBDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXMoKSA6
IGlnbm9yZWQoRGVmYXVsdEJlaGF2aW9yKSB7IH0KKworICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SW5jbHVzaW9uIGlnbm9yZWQ7CisgICAgfTsKKworICAgIEhhc2hNYXA8QVhJRCwgQ2FjaGVk
QVhPYmplY3RBdHRyaWJ1dGVzPiBtX2lkTWFwcGluZzsKK307CisKIGVudW0gUG9zdFR5cGUgeyBQ
b3N0U3luY2hyb25vdXNseSwgUG9zdEFzeW5jaHJvbm91c2x5IH07CiAKIGNsYXNzIEFYT2JqZWN0
Q2FjaGUgewpAQCAtMTgyLDYgKzIwMSwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5vZGVIYXNS
b2xlKE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHJvbGUpOwogCisgICAgdm9pZCBzdGFydENh
Y2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKCk7CisgICAgdm9p
ZCBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworCisgICAgQVhDb21wdXRl
ZE9iamVjdEF0dHJpYnV0ZUNhY2hlKiBjb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlKCkgeyBy
ZXR1cm4gbV9jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlLmdldCgpOyB9CisKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIHBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0
KiwgQVhOb3RpZmljYXRpb24pOwogICAgIHZvaWQgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlm
aWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0Q2hhbmdlLCB1bnNpZ25lZCBvZmZz
ZXQsIGNvbnN0IFN0cmluZyYpOwpAQCAtMjAxLDYgKzIyNSw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxXaWRnZXQqLCBBWElEPiBtX3dpZGdldE9iamVjdE1hcHBpbmc7CiAgICAgSGFzaE1hcDxO
b2RlKiwgQVhJRD4gbV9ub2RlT2JqZWN0TWFwcGluZzsKICAgICBIYXNoU2V0PE5vZGUqPiBtX3Rl
eHRNYXJrZXJOb2RlczsKKyAgICBPd25QdHI8QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hl
PiBtX2NvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU7CiAgICAgc3RhdGljIGJvb2wgZ0FjY2Vz
c2liaWxpdHlFbmFibGVkOwogICAgIHN0YXRpYyBib29sIGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRV
c2VySW50ZXJmYWNlRW5hYmxlZDsKICAgICAKQEAgLTIyMCw2ICsyNDUsOCBAQCBib29sIG5vZGVI
YXNSb2xlKE5vZGUqLCBjb25zdCBTdHJpbmcmIHJvbGUpOwogYm9vbCBpc05vZGVBcmlhVmlzaWJs
ZShOb2RlKik7CiAgICAgCiAjaWYgIUhBVkUoQUNDRVNTSUJJTElUWSkKK2lubGluZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0SW5jbHVzaW9uIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6Z2V0
SWdub3JlZChBWElEKSBjb25zdCB7IHJldHVybiBEZWZhdWx0QmVoYXZpb3I7IH0KK2lubGluZSB2
b2lkIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6c2V0SWdub3JlZChBWElELCBBY2Nl
c3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uKSB7IH0KIGlubGluZSBBWE9iamVjdENhY2hlOjpBWE9i
amVjdENhY2hlKGNvbnN0IERvY3VtZW50KiBkb2MpIDogbV9kb2N1bWVudChjb25zdF9jYXN0PERv
Y3VtZW50Kj4oZG9jKSksIG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyKHRoaXMsIDApIHsgfQogaW5s
aW5lIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkgeyB9CiBpbmxpbmUgQWNjZXNzaWJp
bGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdXNlZFVJRWxlbWVudEZvclBhZ2UoY29uc3Qg
UGFnZSopIHsgcmV0dXJuIDA7IH0KQEAgLTIzNCw2ICsyNjEsOCBAQCBpbmxpbmUgQWNjZXNzaWJp
bGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6cm9vdE9iamVjdCgpIHsgcmV0dXJuIDA7IH0KIGlu
bGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpyb290T2JqZWN0Rm9yRnJh
bWUoRnJhbWUqKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgRWxlbWVudCogQVhPYmplY3RDYWNoZTo6
cm9vdEFYRWRpdGFibGVFbGVtZW50KE5vZGUqKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgYm9vbCBu
b2RlSGFzUm9sZShOb2RlKiwgY29uc3QgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGlu
ZSB2b2lkIHN0YXJ0Q2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0
ZXMoKSB7IH0KK2lubGluZSB2b2lkIHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVz
KCkgeyB9CiBpbmxpbmUgYm9vbCBpc05vZGVBcmlhVmlzaWJsZShOb2RlKikgeyByZXR1cm4gdHJ1
ZTsgfQogaW5saW5lIGNvbnN0IEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRhYmxl
RWxlbWVudChjb25zdCBOb2RlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RD
YWNoZTo6YXR0YWNoV3JhcHBlcihBY2Nlc3NpYmlsaXR5T2JqZWN0KikgeyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRl
eCA0NzIyNzBjMTgyYWI3NWU3YjAyN2Y0MzVmMWUyNWZkYmYxN2Y3MjM0Li42ODEzMjEzMWI5OGRj
ZWMzNzcwMTA1NjM5OWZhYzYyOGMxODU1ZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTQ0OCw2ICs0NDgsOCBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJp
bGl0eVNlYXJjaENyaXRlcmlhKiBjcml0ZQogICAgIGlmICghY3JpdGVyaWEpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGF4T2JqZWN0Q2FjaGUoKS0+c3RhcnRDYWNoaW5nQ29tcHV0ZWRPYmplY3RB
dHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcygpOworCiAgICAgLy8gVGhpcyBzZWFyY2ggbWVjaGFu
aXNtIG9ubHkgc2VhcmNoZXMgdGhlIGVsZW1lbnRzIGJlZm9yZS9hZnRlciB0aGUgc3RhcnRpbmcg
b2JqZWN0LgogICAgIC8vIEl0IGRvZXMgdGhpcyBieSBzdGVwcGluZyB1cCB0aGUgcGFyZW50IGNo
YWluIGFuZCBhdCBlYWNoIGxldmVsIGRvaW5nIGEgREZTLgogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKaW5kZXggOGM2YTExMjIxYmQ0OTc5NzE2ZjVhMzA0YThkYTQyYTNhODFhNDc2YS4uOTM4MzQx
M2U5ZmYxNjAyZjBjNzNhMDM3NTc5MGZkZjkzMGYwNjlhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CkBAIC0xMTIxLDEzICsxMTIxLDM2IEBAIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhCiAgICAgICAg
IAogICAgIHJldHVybiBEZWZhdWx0QmVoYXZpb3I7CiB9ICAKLSAKKwogYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKIHsKICNpZm5k
ZWYgTkRFQlVHCiAgICAgQVNTRVJUKG1faW5pdGlhbGl6ZWQpOwogI2VuZGlmCiAKKyAgICBBWENv
bXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUqIGF0dHJpYnV0ZUNhY2hlID0gYXhPYmplY3RDYWNo
ZSgpLT5jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlKCk7CisgICAgaWYgKGF0dHJpYnV0ZUNh
Y2hlKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gaWdub3JlZCA9IGF0
dHJpYnV0ZUNhY2hlLT5nZXRJZ25vcmVkKGF4T2JqZWN0SUQoKSk7CisgICAgICAgIHN3aXRjaCAo
aWdub3JlZCkgeworICAgICAgICBjYXNlIElnbm9yZU9iamVjdDoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBjYXNlIEluY2x1ZGVPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGNhc2UgRGVmYXVsdEJlaGF2aW9yOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIHJlc3VsdCA9IGNvbXB1dGVBY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCk7CisKKyAgICBpZiAoYXR0cmlidXRlQ2FjaGUpCisgICAgICAgIGF0dHJp
YnV0ZUNhY2hlLT5zZXRJZ25vcmVkKGF4T2JqZWN0SUQoKSwgcmVzdWx0ID8gSWdub3JlT2JqZWN0
IDogSW5jbHVkZU9iamVjdCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29u
c3QKK3sKICAgICAvLyBDaGVjayBmaXJzdCBpZiBhbnkgb2YgdGhlIGNvbW1vbiByZWFzb25zIGNh
dXNlIHRoaXMgZWxlbWVudCB0byBiZSBpZ25vcmVkLgogICAgIC8vIFRoZW4gcHJvY2VzcyBvdGhl
ciB1c2UgY2FzZXMgdGhhdCBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSB2YXJpb3VzIHJv
bGVzCiAgICAgLy8gdGhhdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0cyB0YWtlIG9uLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuaAppbmRleCA5N2JmOGEzN2ZkNjM1NTQ1N2Y0M2JhNGE2YWYwYjA0MzIzN2ZmZjJh
Li40Mzc0YjFhNDU1ZjI4YzhjNTg1NjI5YThmODdmM2M4Y2ZjYTZmYTIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuaApAQCAtMjc3LDYgKzI3Nyw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFyaWFM
aXZlUmVnaW9uQnVzeSgpIGNvbnN0OyAgICAKICAgICAKICAgICBib29sIGluaGVyaXRzUHJlc2Vu
dGF0aW9uYWxSb2xlKCkgY29uc3Q7CisKKyAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkgY29uc3Q7CiAgICAgCiAjaWYgRU5BQkxFKE1BVEhNTCkKICAgICAvLyBBbGwgbWF0
aCBlbGVtZW50cyByZXR1cm4gdHJ1ZSBmb3IgaXNNYXRoRWxlbWVudCgpLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oCmlu
ZGV4IDFlNjYyYWVjN2VlZTVkMTdiYWNlMWFlNzExMTAxYzI5YThkYzc2NzYuLjA2YWI5NTQ2OWU3
ZGRjZWVmNTYzNzNiNTdjZDgyOTA4NGU4M2JiMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTc2LDYgKzc2
LDkgQEAgcHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlQWNjZXNz
aWJpbGl0eSgpOwogICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIGJvb2wgYWNjZXNzaWJpbGl0eUVu
YWJsZWQoKTsKIAorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzdGFydENhY2hpbmdDb21wdXRlZE9i
amVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CisKICAgICBXRUJLSVRfRVhQ
T1JUIGludCBheElEKCkgY29uc3Q7CiAKICAgICAvLyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgdHJl
ZSwgYW5kIHJldHVybiB0cnVlIGlmIHRoaXMgb2JqZWN0IGlzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDgyNWI1
OGIzMDFiYjA4MzU3ZGJhMjVlOGNlNGQ1OWIzNmI4ODZlN2MuLmFiZDRkNTY2MmE5NDQ1NWIyODVi
OWUzNjI2NzJjMzA1Mjk0Mjk1NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC04Miw2ICs4MiwxNiBAQCBib29s
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkKICAgICByZXR1
cm4gQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKTsKIH0KIAordm9pZCBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzdGFydENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNV
bnRpbFRyZWVNdXRhdGVzKCkKK3sKKyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3Rh
cnRDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcygpOworfQor
Cit2b2lkIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RB
dHRyaWJ1dGVzKCkKK3sKKyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3RvcENhY2hp
bmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKK30KKwogYm9vbCBXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojppc0RldGFjaGVkKCkgY29uc3QKIHsKICAgICBpZiAobV9wcml2YXRlLmlzTnVsbCgp
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186126</attachid>
            <date>2013-02-01 13:35:48 -0800</date>
            <delta_ts>2013-02-01 15:52:15 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-106497-20130201133230.patch</filename>
            <type>text/plain</type>
            <size>15713</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWUwNjQ1ODBjYjYwZjJi
YjEzYWZhMzYwOGVlMWVlYjU0OTgwYjQxMC4uMjY1Yjk5N2M4MTQxYmI0NDlmNTYwNzliOGU5N2U1
NjNkMTIzNDMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTAxLTI1ICBEb21p
bmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBtZW1vaXpl
IGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBkdXJpbmcgYmxvY2tzIHdoZXJlIHRyZWUgZG9lc24ndCBj
aGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBBZGQg
YSBjYWNoZSBmb3IgY29tcHV0ZWQgYXR0cmlidXRlcyBvZiBBWE9iamVjdHMuCisgICAgICAgIFRo
ZSBjYWNoZSBjYW4gYmUgZW5hYmxlZCBhdCB0aGUgc3RhcnQgb2YgYSBiYXRjaCBvZgorICAgICAg
ICByZWFkLW9ubHkgb3BlcmF0aW9ucyBvbiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlLCBhbmQKKyAg
ICAgICAgaXQncyBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdHJlZSBtdXRhdGVzLgor
ICAgICAgICBDdXJyZW50bHkgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCBpcyBjYWNoZWQsIHNpbmNl
IGl0J3MKKyAgICAgICAgZnJlcXVlbnRseSBjYWxsZWQgYW5kIHJlbGF0aXZlbHkgZXhwZW5zaXZl
IHRvIGNvbXB1dGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpnZXRJZ25vcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6c2V0SWdub3Jl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlTm90aWZpY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVw
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFydENhY2hpbmdDb21w
dXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKEFYQ29tcHV0
ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWENvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlQ2FjaGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBWENvbXB1dGVk
T2JqZWN0QXR0cmlidXRlQ2FjaGU6OkFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OkNhY2hlZEFY
T2JqZWN0QXR0cmlidXRlczo6Q2FjaGVkQVhPYmplY3RBdHRyaWJ1dGVzKToKKyAgICAgICAgKENh
Y2hlZEFYT2JqZWN0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUpOgorICAg
ICAgICAoQVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWENvbXB1dGVkT2JqZWN0
QXR0cmlidXRlQ2FjaGU6OmdldElnbm9yZWQpOgorICAgICAgICAoV2ViQ29yZTo6QVhDb21wdXRl
ZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OnN0
YXJ0Q2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaW5kTWF0Y2hpbmdPYmplY3RzKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QpOgorCiAyMDEzLTAyLTAxICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBXZWJBcmNoaXZlIGxvYWRpbmcg
d2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTQx
NTg4MGRjYWQ3Nzc3MjI2NTE1ODlkMmQxODRiYjlkMGRjMDU4OC4uZDVkMTgyNjVjODRlMzQ5MGUy
Y2Y1NjQ4ZDE2ZTYzY2YxMDUwMWMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxMy0wMS0yNSAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xl
LmNvbT4KKworICAgICAgICBBWDogbWVtb2l6ZSBleHBlbnNpdmUgY29tcHV0YXRpb24gZHVyaW5n
IGJsb2NrcyB3aGVyZSB0cmVlIGRvZXNuJ3QgY2hhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY0OTcKKworICAgICAgICBSZXZpZXdlZCBieSBS
eW9zdWtlIE5pd2EuCisKKyAgICAgICAgRXhwb3NlIHR3byBtZXRob2RzIHRvIGVuYWJsZSBhbmQg
ZGlzYWJsZSBjYWNoaW5nIG9mCisgICAgICAgIGNvbXB1dGVkIFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3QgYXR0cmlidXRlcywgdG8gc3BlZWQgdXAKKyAgICAgICAgYmF0Y2ggcmVhZC1vbmx5IG9wZXJh
dGlvbnMuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAg
ICAgICAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogc3JjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzdGFydENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKToKKwogMjAxMy0wMi0wMSAg
TmljbyBXZWJlciAgPHRoYWtpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBC
dWlsZCB3ZWJraXQgd2l0aCBlbmFibGVfd2ViX2ludGVudHMgc2V0IHRvIDAuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCA4ZWZmMzI2NTA5
MTk3OGM5ZmQwNDY4OWNmZjQzODhhNGNhYzQ1NmQ3Li5lNzFlOWQ1OWNmZmY4NTVhOTJhYmQyMzg5
YzA1ZmU4ZjM3ZTI1ODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKQEAgLTgyLDYgKzgyLDI0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0FjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNp
b24gQVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpnZXRJZ25vcmVkKEFYSUQgaWQpIGNv
bnN0Cit7CisgICAgSGFzaE1hcDxBWElELCBDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXM+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1faWRNYXBwaW5nLmZpbmQoaWQpOworICAgIHJldHVybiBpdCAhPSBt
X2lkTWFwcGluZy5lbmQoKSA/IGl0LT52YWx1ZS5pZ25vcmVkIDogRGVmYXVsdEJlaGF2aW9yOwor
fQorCit2b2lkIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6c2V0SWdub3JlZChBWElE
IGlkLCBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGluY2x1c2lvbikKK3sKKyAgICBIYXNo
TWFwPEFYSUQsIENhY2hlZEFYT2JqZWN0QXR0cmlidXRlcz46Oml0ZXJhdG9yIGl0ID0gbV9pZE1h
cHBpbmcuZmluZChpZCk7CisgICAgaWYgKGl0ICE9IG1faWRNYXBwaW5nLmVuZCgpKQorICAgICAg
ICBpdC0+dmFsdWUuaWdub3JlZCA9IGluY2x1c2lvbjsKKyAgICBlbHNlIHsKKyAgICAgICAgQ2Fj
aGVkQVhPYmplY3RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgICAgIGF0dHJpYnV0ZXMuaWdu
b3JlZCA9IGluY2x1c2lvbjsKKyAgICAgICAgbV9pZE1hcHBpbmcuc2V0KGlkLCBhdHRyaWJ1dGVz
KTsKKyAgICB9Cit9CiAgICAgCiBib29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3NpYmlsaXR5RW5h
YmxlZCA9IGZhbHNlOwogYm9vbCBBWE9iamVjdENhY2hlOjpnQWNjZXNzaWJpbGl0eUVuaGFuY2Vk
VXNlckludGVyZmFjZUVuYWJsZWQgPSBmYWxzZTsKQEAgLTYzNCw2ICs2NTIsOCBAQCB2b2lkIEFY
T2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQVhO
b3RpZmljYXRpb24gbm90aQogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKICAg
ICAKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygpOworCiAgICAgLy8g
R2V0IGFuIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRoYXQgYWxyZWFkeSBleGlzdHMuIE9uZSBzaG91
bGQgbm90IGJlIGNyZWF0ZWQgaGVyZQogICAgIC8vIGJlY2F1c2UgYSByZW5kZXIgdXBkYXRlIG1h
eSBiZSBpbiBwcm9ncmVzcyBhbmQgY3JlYXRpbmcgYW4gQVggb2JqZWN0IGNhbiByZS10cmlnZ2Vy
IGEgbGF5b3V0CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IGdldChy
ZW5kZXJlcik7CkBAIC02NTMsNiArNjczLDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90
aWZpY2F0aW9uKE5vZGUqIG5vZGUsIEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwgYm8KICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICBzdG9wQ2FjaGluZ0NvbXB1
dGVkT2JqZWN0QXR0cmlidXRlcygpOworCiAgICAgLy8gR2V0IGFuIGFjY2Vzc2liaWxpdHkgb2Jq
ZWN0IHRoYXQgYWxyZWFkeSBleGlzdHMuIE9uZSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgaGVyZQog
ICAgIC8vIGJlY2F1c2UgYSByZW5kZXIgdXBkYXRlIG1heSBiZSBpbiBwcm9ncmVzcyBhbmQgY3Jl
YXRpbmcgYW4gQVggb2JqZWN0IGNhbiByZS10cmlnZ2VyIGEgbGF5b3V0CiAgICAgUmVmUHRyPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IG9iamVjdCA9IGdldChub2RlKTsKQEAgLTY2OSw2ICs2OTEsOCBA
QCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXRpb24oTm9kZSogbm9kZSwgQVhOb3Rp
ZmljYXRpb24gbm90aWZpY2F0aW9uLCBibwogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3Rp
ZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBEb2N1bWVudCogZG9jdW1lbnQs
IEFYTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiwgYm9vbCBwb3N0VG9FbGVtZW50LCBQb3N0VHlw
ZSBwb3N0VHlwZSkKIHsKKyAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlcygp
OworCiAgICAgaWYgKG9iamVjdCAmJiAhcG9zdFRvRWxlbWVudCkKICAgICAgICAgb2JqZWN0ID0g
b2JqZWN0LT5vYnNlcnZhYmxlT2JqZWN0KCk7CiAKQEAgLTcxMCw2ICs3MzQsOCBAQCB2b2lkIEFY
T2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlTm90aWZpY2F0aW9uKE5vZGUqIG5vZGUsIEFYVGV4
dENoYW5nZSB0ZXh0Q2hhbgogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsKKwogICAgIC8vIERlbGVnYXRl
IG9uIHRoZSByaWdodCBwbGF0Zm9ybQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IGdl
dE9yQ3JlYXRlKG5vZGUpOwogICAgIG5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24o
b2JqLCB0ZXh0Q2hhbmdlLCBvZmZzZXQsIHRleHQpOwpAQCAtNzM1LDggKzc2MSwxMCBAQCB2b2lk
IEFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGJhclVwZGF0ZShTY3JvbGxWaWV3KiB2aWV3KQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBz
Y3JvbGwgdmlldyBmcm9tIHRoaXMgbWV0aG9kLCBvbmx5IHVwZGF0ZSBhbiBleGlzdGluZyBvbmUu
Ci0gICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBnZXQodmll
dykpCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFZpZXdPYmplY3QgPSBnZXQo
dmlldykpIHsKKyAgICAgICAgc3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXMoKTsK
ICAgICAgICAgc2Nyb2xsVmlld09iamVjdC0+dXBkYXRlQ2hpbGRyZW5JZk5lY2Vzc2FyeSgpOwor
ICAgIH0KIH0KICAgICAKIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlQXJpYUV4cGFuZGVkQ2hh
bmdlKE5vZGUqIG5vZGUpCkBAIC03NTMsNiArNzgxLDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpo
YW5kbGVBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZChOb2RlKiBub2RlKQogCiB2b2lkIEFYT2JqZWN0
Q2FjaGU6OmhhbmRsZUFyaWFSb2xlQ2hhbmdlZChOb2RlKiBub2RlKQogeworICAgIHN0b3BDYWNo
aW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCk7CisKICAgICBpZiAoQWNjZXNzaWJpbGl0eU9i
amVjdCogb2JqID0gZ2V0T3JDcmVhdGUobm9kZSkpIHsKICAgICAgICAgb2JqLT51cGRhdGVBY2Nl
c3NpYmlsaXR5Um9sZSgpOwogICAgICAgICBvYmotPm5vdGlmeUlmSWdub3JlZFZhbHVlQ2hhbmdl
ZCgpOwpAQCAtODA0LDYgKzgzNCwxNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlY29tcHV0ZUlz
SWdub3JlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgICAgICBvYmotPm5vdGlmeUlmSWdu
b3JlZFZhbHVlQ2hhbmdlZCgpOwogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0YXJ0Q2FjaGlu
Z0NvbXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMoKQoreworICAgIGlmICgh
bV9jb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlKQorICAgICAgICBtX2NvbXB1dGVkT2JqZWN0
QXR0cmlidXRlQ2FjaGUgPSBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGU6OmNyZWF0ZSgp
OworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRy
aWJ1dGVzKCkKK3sKKyAgICBtX2NvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUuY2xlYXIoKTsK
K30KKwogVmlzaWJsZVBvc2l0aW9uIEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQb3NpdGlvbkZvclRl
eHRNYXJrZXJEYXRhKFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSkKIHsKICAgICBpZiAo
IWlzTm9kZUluVXNlKHRleHRNYXJrZXJEYXRhLm5vZGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCA0ZWRmODE1MDNlMWVlNDM2MjY5MGI5ZGYz
MDgyOWNiMWI3OTM4OWI5Li5lNWRmMDUxMmYxZThmM2QwMTYwZTFiNmU5YjUzMTFiOWQwYTJlMTA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAt
NTIsNiArNTIsMjUgQEAgc3RydWN0IFRleHRNYXJrZXJEYXRhIHsKICAgICBFQWZmaW5pdHkgYWZm
aW5pdHk7CiB9OwogCitjbGFzcyBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNo
ZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1
dGVDYWNoZSgpKTsgfQorCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBnZXRJZ25v
cmVkKEFYSUQpIGNvbnN0OworICAgIHZvaWQgc2V0SWdub3JlZChBWElELCBBY2Nlc3NpYmlsaXR5
T2JqZWN0SW5jbHVzaW9uKTsKKworcHJpdmF0ZToKKyAgICBBWENvbXB1dGVkT2JqZWN0QXR0cmli
dXRlQ2FjaGUoKSB7IH0KKworICAgIHN0cnVjdCBDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXMgewor
ICAgICAgICBDYWNoZWRBWE9iamVjdEF0dHJpYnV0ZXMoKSA6IGlnbm9yZWQoRGVmYXVsdEJlaGF2
aW9yKSB7IH0KKworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIGlnbm9yZWQ7
CisgICAgfTsKKworICAgIEhhc2hNYXA8QVhJRCwgQ2FjaGVkQVhPYmplY3RBdHRyaWJ1dGVzPiBt
X2lkTWFwcGluZzsKK307CisKIGVudW0gUG9zdFR5cGUgeyBQb3N0U3luY2hyb25vdXNseSwgUG9z
dEFzeW5jaHJvbm91c2x5IH07CiAKIGNsYXNzIEFYT2JqZWN0Q2FjaGUgewpAQCAtMTgyLDYgKzIw
MSwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5vZGVIYXNSb2xlKE5vZGUqLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHJvbGUpOwogCisgICAgdm9pZCBzdGFydENhY2hpbmdDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKCk7CisgICAgdm9pZCBzdG9wQ2FjaGluZ0NvbXB1dGVk
T2JqZWN0QXR0cmlidXRlcygpOworCisgICAgQVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hl
KiBjb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlKCkgeyByZXR1cm4gbV9jb21wdXRlZE9iamVj
dEF0dHJpYnV0ZUNhY2hlLmdldCgpOyB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHBvc3RQbGF0
Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhOb3RpZmljYXRpb24pOwog
ICAgIHZvaWQgbm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5
T2JqZWN0KiwgQVhUZXh0Q2hhbmdlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYpOwpA
QCAtMjAxLDYgKzIyNSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxXaWRnZXQqLCBBWElEPiBt
X3dpZGdldE9iamVjdE1hcHBpbmc7CiAgICAgSGFzaE1hcDxOb2RlKiwgQVhJRD4gbV9ub2RlT2Jq
ZWN0TWFwcGluZzsKICAgICBIYXNoU2V0PE5vZGUqPiBtX3RleHRNYXJrZXJOb2RlczsKKyAgICBP
d25QdHI8QVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlPiBtX2NvbXB1dGVkT2JqZWN0QXR0
cmlidXRlQ2FjaGU7CiAgICAgc3RhdGljIGJvb2wgZ0FjY2Vzc2liaWxpdHlFbmFibGVkOwogICAg
IHN0YXRpYyBib29sIGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlRW5hYmxlZDsK
ICAgICAKQEAgLTIyMCw2ICsyNDUsOCBAQCBib29sIG5vZGVIYXNSb2xlKE5vZGUqLCBjb25zdCBT
dHJpbmcmIHJvbGUpOwogYm9vbCBpc05vZGVBcmlhVmlzaWJsZShOb2RlKik7CiAgICAgCiAjaWYg
IUhBVkUoQUNDRVNTSUJJTElUWSkKK2lubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9u
IEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6Z2V0SWdub3JlZChBWElEKSBjb25zdCB7
IHJldHVybiBEZWZhdWx0QmVoYXZpb3I7IH0KK2lubGluZSB2b2lkIEFYQ29tcHV0ZWRPYmplY3RB
dHRyaWJ1dGVDYWNoZTo6c2V0SWdub3JlZChBWElELCBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVz
aW9uKSB7IH0KIGlubGluZSBBWE9iamVjdENhY2hlOjpBWE9iamVjdENhY2hlKGNvbnN0IERvY3Vt
ZW50KiBkb2MpIDogbV9kb2N1bWVudChjb25zdF9jYXN0PERvY3VtZW50Kj4oZG9jKSksIG1fbm90
aWZpY2F0aW9uUG9zdFRpbWVyKHRoaXMsIDApIHsgfQogaW5saW5lIEFYT2JqZWN0Q2FjaGU6On5B
WE9iamVjdENhY2hlKCkgeyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RD
YWNoZTo6Zm9jdXNlZFVJRWxlbWVudEZvclBhZ2UoY29uc3QgUGFnZSopIHsgcmV0dXJuIDA7IH0K
QEAgLTIzNCw2ICsyNjEsOCBAQCBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RD
YWNoZTo6cm9vdE9iamVjdCgpIHsgcmV0dXJuIDA7IH0KIGlubGluZSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBWE9iamVjdENhY2hlOjpyb290T2JqZWN0Rm9yRnJhbWUoRnJhbWUqKSB7IHJldHVybiAw
OyB9CiBpbmxpbmUgRWxlbWVudCogQVhPYmplY3RDYWNoZTo6cm9vdEFYRWRpdGFibGVFbGVtZW50
KE5vZGUqKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgYm9vbCBub2RlSGFzUm9sZShOb2RlKiwgY29u
c3QgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSB2b2lkIHN0YXJ0Q2FjaGluZ0Nv
bXB1dGVkT2JqZWN0QXR0cmlidXRlc1VudGlsVHJlZU11dGF0ZXMoKSB7IH0KK2lubGluZSB2b2lk
IHN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCkgeyB9CiBpbmxpbmUgYm9vbCBp
c05vZGVBcmlhVmlzaWJsZShOb2RlKikgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGNvbnN0IEVs
ZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRhYmxlRWxlbWVudChjb25zdCBOb2RlKikg
eyByZXR1cm4gMDsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6YXR0YWNoV3JhcHBlcihB
Y2Nlc3NpYmlsaXR5T2JqZWN0KikgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA4Y2RhYjQ3MTY2NjAwYzA5MGZi
NDBjNTM1ZjMyODU5ZWNlMTg4ZTgxLi5mOTE2ZTg3MGRiNmMyZGYyYjg3YzQ4ZDBlZjQzYWRjMTQz
ZjIzMjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAKQEAgLTQ2MCw2ICs0NjAsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmZpbmRNYXRjaGluZ09iamVjdHMoQWNjZXNzaWJpbGl0eVNlYXJjaENyaXRlcmlhKiBj
cml0ZQogICAgIGlmICghY3JpdGVyaWEpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF4T2JqZWN0
Q2FjaGUoKS0+c3RhcnRDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0
YXRlcygpOworCiAgICAgLy8gVGhpcyBzZWFyY2ggbWVjaGFuaXNtIG9ubHkgc2VhcmNoZXMgdGhl
IGVsZW1lbnRzIGJlZm9yZS9hZnRlciB0aGUgc3RhcnRpbmcgb2JqZWN0LgogICAgIC8vIEl0IGRv
ZXMgdGhpcyBieSBzdGVwcGluZyB1cCB0aGUgcGFyZW50IGNoYWluIGFuZCBhdCBlYWNoIGxldmVs
IGRvaW5nIGEgREZTLgogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggOGIzNjRlMDcyZDUx
ZmMwNTUxZTc4YjVlNmNhNDE0MTcyZjc2NjQ0Ni4uNDg0Mjc1M2RiNjc2ZjQ4NDM1MGQ2MjMxOGQ3
Y2RlZWViNDk4NGUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xMTIxLDEzICsxMTIxLDM2
IEBAIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZEJhCiAgICAgICAgIAogICAgIHJldHVybiBEZWZhdWx0
QmVoYXZpb3I7CiB9ICAKLSAKKwogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgQVNTRVJU
KG1faW5pdGlhbGl6ZWQpOwogI2VuZGlmCiAKKyAgICBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRl
Q2FjaGUqIGF0dHJpYnV0ZUNhY2hlID0gYXhPYmplY3RDYWNoZSgpLT5jb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlKCk7CisgICAgaWYgKGF0dHJpYnV0ZUNhY2hlKSB7CisgICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3RJbmNsdXNpb24gaWdub3JlZCA9IGF0dHJpYnV0ZUNhY2hlLT5nZXRJZ25v
cmVkKGF4T2JqZWN0SUQoKSk7CisgICAgICAgIHN3aXRjaCAoaWdub3JlZCkgeworICAgICAgICBj
YXNlIElnbm9yZU9iamVjdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IEluY2x1ZGVPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2Ug
RGVmYXVsdEJlaGF2aW9yOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBib29sIHJlc3VsdCA9IGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7CisKKyAg
ICBpZiAoYXR0cmlidXRlQ2FjaGUpCisgICAgICAgIGF0dHJpYnV0ZUNhY2hlLT5zZXRJZ25vcmVk
KGF4T2JqZWN0SUQoKSwgcmVzdWx0ID8gSWdub3JlT2JqZWN0IDogSW5jbHVkZU9iamVjdCk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKK3sKICAgICAvLyBDaGVjayBm
aXJzdCBpZiBhbnkgb2YgdGhlIGNvbW1vbiByZWFzb25zIGNhdXNlIHRoaXMgZWxlbWVudCB0byBi
ZSBpZ25vcmVkLgogICAgIC8vIFRoZW4gcHJvY2VzcyBvdGhlciB1c2UgY2FzZXMgdGhhdCBuZWVk
IHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSB2YXJpb3VzIHJvbGVzCiAgICAgLy8gdGhhdCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0cyB0YWtlIG9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCA5YmFl
YTY3MTdhMDRiOTdiZDY0NmFjNjMzNWI5ZGY0OTRmZWZlN2QzLi4wYTViZGQyNmU3MjQzMGU5Zjcw
ZjdkYzJhZGQzODlkZDJlY2M1ZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaApAQCAtMjc4LDYgKzI3OCw4
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFyaWFMaXZlUmVnaW9uQnVzeSgpIGNvbnN0
OyAgICAKICAgICAKICAgICBib29sIGluaGVyaXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgY29uc3Q7
CisKKyAgICBib29sIGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CiAgICAg
CiAjaWYgRU5BQkxFKE1BVEhNTCkKICAgICAvLyBBbGwgbWF0aCBlbGVtZW50cyByZXR1cm4gdHJ1
ZSBmb3IgaXNNYXRoRWxlbWVudCgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDFlNjYyYWVjN2VlZTVkMTdi
YWNlMWFlNzExMTAxYzI5YThkYzc2NzYuLjA2YWI5NTQ2OWU3ZGRjZWVmNTYzNzNiNTdjZDgyOTA4
NGU4M2JiMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTc2LDYgKzc2LDkgQEAgcHVibGljOgogICAgIFdF
QktJVF9FWFBPUlQgc3RhdGljIHZvaWQgZW5hYmxlQWNjZXNzaWJpbGl0eSgpOwogICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIGJvb2wgYWNjZXNzaWJpbGl0eUVuYWJsZWQoKTsKIAorICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzdGFydENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRy
ZWVNdXRhdGVzKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHN0b3BDYWNoaW5nQ29tcHV0ZWRP
YmplY3RBdHRyaWJ1dGVzKCk7CisKICAgICBXRUJLSVRfRVhQT1JUIGludCBheElEKCkgY29uc3Q7
CiAKICAgICAvLyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgdHJlZSwgYW5kIHJldHVybiB0cnVlIGlm
IHRoaXMgb2JqZWN0IGlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDgyNWI1OGIzMDFiYjA4MzU3ZGJhMjVlOGNl
NGQ1OWIzNmI4ODZlN2MuLmFiZDRkNTY2MmE5NDQ1NWIyODViOWUzNjI2NzJjMzA1Mjk0Mjk1NjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCkBAIC04Miw2ICs4MiwxNiBAQCBib29sIFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkKICAgICByZXR1cm4gQVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKTsKIH0KIAordm9pZCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpz
dGFydENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJpYnV0ZXNVbnRpbFRyZWVNdXRhdGVzKCkKK3sK
KyAgICBtX3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3RhcnRDYWNoaW5nQ29tcHV0ZWRPYmpl
Y3RBdHRyaWJ1dGVzVW50aWxUcmVlTXV0YXRlcygpOworfQorCit2b2lkIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN0b3BDYWNoaW5nQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVzKCkKK3sKKyAgICBt
X3ByaXZhdGUtPmF4T2JqZWN0Q2FjaGUoKS0+c3RvcENhY2hpbmdDb21wdXRlZE9iamVjdEF0dHJp
YnV0ZXMoKTsKK30KKwogYm9vbCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0RldGFjaGVkKCkg
Y29uc3QKIHsKICAgICBpZiAobV9wcml2YXRlLmlzTnVsbCgpKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>